SVM: Move SVM code to its own crate folder (#35119)

This commit is contained in:
Pankaj Garg 2024-02-06 16:06:32 -08:00 committed by GitHub
parent fddfc8431e
commit 46b9586630
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
40 changed files with 158 additions and 42 deletions

28
Cargo.lock generated
View File

@ -5924,6 +5924,7 @@ dependencies = [
"solana-send-transaction-service",
"solana-stake-program",
"solana-streamer",
"solana-svm",
"solana-tpu-client",
"solana-transaction-status",
"solana-turbine",
@ -6328,6 +6329,7 @@ dependencies = [
"solana-stake-program",
"solana-storage-bigtable",
"solana-storage-proto",
"solana-svm",
"solana-transaction-status",
"solana-vote",
"solana-vote-program",
@ -6386,6 +6388,7 @@ dependencies = [
"solana-stake-program",
"solana-storage-bigtable",
"solana-streamer",
"solana-svm",
"solana-transaction-status",
"solana-unified-scheduler-pool",
"solana-version",
@ -6743,6 +6746,7 @@ dependencies = [
"solana-runtime",
"solana-sdk",
"solana-stake-program",
"solana-svm",
"solana-vote-program",
"solana_rbpf",
"test-case",
@ -7046,6 +7050,7 @@ dependencies = [
"solana-runtime",
"solana-sdk",
"solana-stake-program",
"solana-svm",
"solana-system-program",
"solana-version",
"solana-vote",
@ -7291,6 +7296,27 @@ dependencies = [
"x509-parser",
]
[[package]]
name = "solana-svm"
version = "1.18.0"
dependencies = [
"itertools",
"log",
"percentage",
"rustc_version 0.4.0",
"solana-accounts-db",
"solana-bpf-loader-program",
"solana-frozen-abi",
"solana-frozen-abi-macro",
"solana-loader-v4-program",
"solana-logger",
"solana-measure",
"solana-metrics",
"solana-program-runtime",
"solana-sdk",
"solana-system-program",
]
[[package]]
name = "solana-system-program"
version = "1.18.0"
@ -7331,6 +7357,7 @@ dependencies = [
"solana-runtime",
"solana-sdk",
"solana-streamer",
"solana-svm",
"solana-tpu-client",
"tokio",
]
@ -7589,6 +7616,7 @@ dependencies = [
"solana-send-transaction-service",
"solana-storage-bigtable",
"solana-streamer",
"solana-svm",
"solana-test-validator",
"solana-tpu-client",
"solana-version",

View File

@ -100,6 +100,7 @@ members = [
"storage-bigtable/build-proto",
"storage-proto",
"streamer",
"svm",
"test-validator",
"thin-client",
"tokens",
@ -373,6 +374,7 @@ solana-stake-program = { path = "programs/stake", version = "=1.18.0" }
solana-storage-bigtable = { path = "storage-bigtable", version = "=1.18.0" }
solana-storage-proto = { path = "storage-proto", version = "=1.18.0" }
solana-streamer = { path = "streamer", version = "=1.18.0" }
solana-svm = { path = "svm", version = "=1.18.0" }
solana-system-program = { path = "programs/system", version = "=1.18.0" }
solana-test-validator = { path = "test-validator", version = "=1.18.0" }
solana-thin-client = { path = "thin-client", version = "=1.18.0" }

View File

@ -65,6 +65,7 @@ solana-runtime = { workspace = true }
solana-sdk = { workspace = true }
solana-send-transaction-service = { workspace = true }
solana-streamer = { workspace = true }
solana-svm = { workspace = true }
solana-tpu-client = { workspace = true }
solana-transaction-status = { workspace = true }
solana-turbine = { workspace = true }

View File

@ -6,8 +6,9 @@ use {
},
crossbeam_channel::{Receiver, RecvError, SendError, Sender},
solana_poh::leader_bank_notifier::LeaderBankNotifier,
solana_runtime::{bank::Bank, svm::transaction_error_metrics::TransactionErrorMetrics},
solana_runtime::bank::Bank,
solana_sdk::timing::AtomicInterval,
solana_svm::transaction_error_metrics::TransactionErrorMetrics,
std::{
sync::{
atomic::{AtomicBool, AtomicU64, AtomicUsize, Ordering},

View File

@ -22,9 +22,6 @@ use {
solana_runtime::{
bank::{Bank, LoadAndExecuteTransactionsOutput},
compute_budget_details::GetComputeBudgetDetails,
svm::{
account_loader::validate_fee_payer, transaction_error_metrics::TransactionErrorMetrics,
},
transaction_batch::TransactionBatch,
},
solana_sdk::{
@ -35,6 +32,9 @@ use {
timing::timestamp,
transaction::{self, AddressLoader, SanitizedTransaction, TransactionError},
},
solana_svm::{
account_loader::validate_fee_payer, transaction_error_metrics::TransactionErrorMetrics,
},
std::{
sync::{atomic::Ordering, Arc},
time::Instant,

View File

@ -6,8 +6,8 @@ use {
},
},
solana_poh::poh_recorder::BankStart,
solana_runtime::svm::transaction_error_metrics::*,
solana_sdk::{clock::Slot, saturating_add_assign},
solana_svm::transaction_error_metrics::*,
std::time::Instant,
};

View File

@ -20,13 +20,12 @@ use {
itertools::MinMaxResult,
solana_cost_model::cost_model::CostModel,
solana_measure::measure_us,
solana_runtime::{
bank::Bank, bank_forks::BankForks, svm::transaction_error_metrics::TransactionErrorMetrics,
},
solana_runtime::{bank::Bank, bank_forks::BankForks},
solana_sdk::{
clock::MAX_PROCESSING_AGE, saturating_add_assign, timing::AtomicInterval,
transaction::SanitizedTransaction,
},
solana_svm::transaction_error_metrics::TransactionErrorMetrics,
std::{
sync::{Arc, RwLock},
time::Duration,

View File

@ -18,11 +18,12 @@ use {
itertools::Itertools,
min_max_heap::MinMaxHeap,
solana_measure::{measure, measure_us},
solana_runtime::{bank::Bank, svm::transaction_error_metrics::TransactionErrorMetrics},
solana_runtime::bank::Bank,
solana_sdk::{
clock::FORWARD_TRANSACTIONS_TO_LEADER_AT_SLOT_OFFSET, feature_set::FeatureSet, hash::Hash,
saturating_add_assign, transaction::SanitizedTransaction,
},
solana_svm::transaction_error_metrics::TransactionErrorMetrics,
std::{
collections::HashMap,
sync::{atomic::Ordering, Arc},

View File

@ -101,7 +101,6 @@ use {
snapshot_config::SnapshotConfig,
snapshot_hash::StartingSnapshotHashes,
snapshot_utils::{self, clean_orphaned_account_snapshot_dirs},
svm::runtime_config::RuntimeConfig,
},
solana_sdk::{
clock::Slot,
@ -116,6 +115,7 @@ use {
},
solana_send_transaction_service::send_transaction_service,
solana_streamer::{socket::SocketAddrSpace, streamer::StakedNodes},
solana_svm::runtime_config::RuntimeConfig,
solana_turbine::{self, broadcast_stage::BroadcastStageType},
solana_unified_scheduler_pool::DefaultSchedulerPool,
solana_vote_program::vote_state,

View File

@ -27,7 +27,6 @@ use {
snapshot_bank_utils,
snapshot_config::SnapshotConfig,
snapshot_utils,
svm::runtime_config::RuntimeConfig,
},
solana_sdk::{
clock::Slot,
@ -39,6 +38,7 @@ use {
timing::timestamp,
},
solana_streamer::socket::SocketAddrSpace,
solana_svm::runtime_config::RuntimeConfig,
std::{
mem::ManuallyDrop,
sync::{

View File

@ -35,7 +35,6 @@ use {
SnapshotVersion::{self, V1_2_0},
},
status_cache::MAX_CACHE_ENTRIES,
svm::runtime_config::RuntimeConfig,
},
solana_sdk::{
clock::Slot,
@ -50,6 +49,7 @@ use {
timing::timestamp,
},
solana_streamer::socket::SocketAddrSpace,
solana_svm::runtime_config::RuntimeConfig,
std::{
collections::HashSet,
fs,

View File

@ -44,6 +44,7 @@ solana-sdk = { workspace = true }
solana-stake-program = { workspace = true }
solana-storage-bigtable = { workspace = true }
solana-streamer = { workspace = true }
solana-svm = { workspace = true }
solana-transaction-status = { workspace = true }
solana-unified-scheduler-pool = { workspace = true }
solana-version = { workspace = true }

View File

@ -12,8 +12,8 @@ use {
blockstore_processor::ProcessOptions,
use_snapshot_archives_at_startup::{self, UseSnapshotArchivesAtStartup},
},
solana_runtime::svm::runtime_config::RuntimeConfig,
solana_sdk::clock::Slot,
solana_svm::runtime_config::RuntimeConfig,
std::{
collections::HashSet,
path::{Path, PathBuf},

View File

@ -54,6 +54,7 @@ solana-sdk = { workspace = true }
solana-stake-program = { workspace = true }
solana-storage-bigtable = { workspace = true }
solana-storage-proto = { workspace = true }
solana-svm = { workspace = true }
solana-transaction-status = { workspace = true }
solana-vote = { workspace = true }
solana-vote-program = { workspace = true }

View File

@ -41,7 +41,6 @@ use {
commitment::VOTE_THRESHOLD_SIZE,
installed_scheduler_pool::BankWithScheduler,
prioritization_fee_cache::PrioritizationFeeCache,
svm::runtime_config::RuntimeConfig,
transaction_batch::TransactionBatch,
},
solana_sdk::{
@ -58,6 +57,7 @@ use {
VersionedTransaction,
},
},
solana_svm::runtime_config::RuntimeConfig,
solana_transaction_status::token_balances::TransactionTokenBalancesSet,
solana_vote::{vote_account::VoteAccountsHashMap, vote_sender_types::ReplayVoteSender},
std::{

View File

@ -26,6 +26,7 @@ solana-logger = { workspace = true }
solana-program-runtime = { workspace = true }
solana-runtime = { workspace = true }
solana-sdk = { workspace = true }
solana-svm = { workspace = true }
solana-vote-program = { workspace = true }
solana_rbpf = { workspace = true }
test-case = { workspace = true }

View File

@ -25,7 +25,6 @@ use {
bank_forks::BankForks,
commitment::BlockCommitmentCache,
genesis_utils::{create_genesis_config_with_leader_ex, GenesisConfigInfo},
svm::runtime_config::RuntimeConfig,
},
solana_sdk::{
account::{create_account_shared_data_for_test, Account, AccountSharedData},
@ -46,6 +45,7 @@ use {
stable_layout::stable_instruction::StableInstruction,
sysvar::{Sysvar, SysvarId},
},
solana_svm::runtime_config::RuntimeConfig,
solana_vote_program::vote_state::{self, VoteState, VoteStateVersions},
std::{
cell::RefCell,

View File

@ -4972,6 +4972,7 @@ dependencies = [
"solana-sdk",
"solana-send-transaction-service",
"solana-streamer",
"solana-svm",
"solana-tpu-client",
"solana-transaction-status",
"solana-turbine",
@ -5243,6 +5244,7 @@ dependencies = [
"solana-stake-program",
"solana-storage-bigtable",
"solana-storage-proto",
"solana-svm",
"solana-transaction-status",
"solana-vote",
"solana-vote-program",
@ -5476,6 +5478,7 @@ dependencies = [
"solana-program-runtime",
"solana-runtime",
"solana-sdk",
"solana-svm",
"solana-vote-program",
"solana_rbpf",
"test-case",
@ -5724,6 +5727,7 @@ dependencies = [
"solana-rayon-threadlimit",
"solana-sdk",
"solana-stake-program",
"solana-svm",
"solana-system-program",
"solana-version",
"solana-vote",
@ -6334,6 +6338,26 @@ dependencies = [
"x509-parser",
]
[[package]]
name = "solana-svm"
version = "1.18.0"
dependencies = [
"itertools",
"log",
"percentage",
"rustc_version",
"solana-accounts-db",
"solana-bpf-loader-program",
"solana-frozen-abi",
"solana-frozen-abi-macro",
"solana-loader-v4-program",
"solana-measure",
"solana-metrics",
"solana-program-runtime",
"solana-sdk",
"solana-system-program",
]
[[package]]
name = "solana-system-program"
version = "1.18.0"
@ -6372,6 +6396,7 @@ dependencies = [
"solana-runtime",
"solana-sdk",
"solana-streamer",
"solana-svm",
"solana-tpu-client",
"tokio",
]
@ -6557,6 +6582,7 @@ dependencies = [
"solana-send-transaction-service",
"solana-storage-bigtable",
"solana-streamer",
"solana-svm",
"solana-test-validator",
"solana-tpu-client",
"solana-version",

View File

@ -64,6 +64,7 @@ solana-program-runtime = { workspace = true }
solana-rayon-threadlimit = { workspace = true }
solana-sdk = { workspace = true }
solana-stake-program = { workspace = true }
solana-svm = { workspace = true }
solana-system-program = { workspace = true }
solana-version = { workspace = true }
solana-vote = { workspace = true }

View File

@ -58,14 +58,6 @@ use {
},
stakes::{InvalidCacheEntryReason, Stakes, StakesCache, StakesEnum},
status_cache::{SlotDelta, StatusCache},
svm::{
account_overrides::AccountOverrides,
runtime_config::RuntimeConfig,
transaction_error_metrics::TransactionErrorMetrics,
transaction_processor::{
TransactionBatchProcessor, TransactionLogMessages, TransactionProcessingCallback,
},
},
transaction_batch::TransactionBatch,
},
byteorder::{ByteOrder, LittleEndian},
@ -168,6 +160,14 @@ use {
solana_stake_program::stake_state::{
self, InflationPointCalculationEvent, PointValue, StakeStateV2,
},
solana_svm::{
account_overrides::AccountOverrides,
runtime_config::RuntimeConfig,
transaction_error_metrics::TransactionErrorMetrics,
transaction_processor::{
TransactionBatchProcessor, TransactionLogMessages, TransactionProcessingCallback,
},
},
solana_system_program::{get_system_account_kind, SystemAccountKind},
solana_vote::vote_account::{VoteAccount, VoteAccounts, VoteAccountsHashMap},
solana_vote_program::vote_state::VoteState,

View File

@ -1,6 +1,5 @@
use {
super::Bank,
crate::svm::account_rent_state::RentState,
log::{debug, warn},
solana_accounts_db::stake_rewards::RewardInfo,
solana_sdk::{
@ -9,6 +8,7 @@ use {
reward_type::RewardType,
system_program,
},
solana_svm::account_rent_state::RentState,
solana_vote::vote_account::VoteAccountsHashMap,
std::{result::Result, sync::atomic::Ordering::Relaxed},
thiserror::Error,

View File

@ -17,7 +17,6 @@ mod tests {
StorageAndNextAppendVecId, BANK_SNAPSHOT_PRE_FILENAME_EXTENSION,
},
status_cache::StatusCache,
svm::runtime_config::RuntimeConfig,
},
assert_matches::assert_matches,
solana_accounts_db::{
@ -39,6 +38,7 @@ mod tests {
pubkey::Pubkey,
signature::{Keypair, Signer},
},
solana_svm::runtime_config::RuntimeConfig,
std::{
io::{Cursor, Read, Write},
num::NonZeroUsize,

View File

@ -18,11 +18,6 @@ use {
},
snapshot_bank_utils, snapshot_utils,
status_cache::MAX_CACHE_ENTRIES,
svm::{
account_loader::load_accounts,
transaction_account_state_info::TransactionAccountStateInfo,
transaction_error_metrics::TransactionErrorMetrics,
},
},
assert_matches::assert_matches,
crossbeam_channel::{bounded, unbounded},
@ -113,6 +108,10 @@ use {
transaction_context::{TransactionAccount, TransactionContext},
},
solana_stake_program::stake_state::{self, StakeStateV2},
solana_svm::{
account_loader::load_accounts, transaction_account_state_info::TransactionAccountStateInfo,
transaction_error_metrics::TransactionErrorMetrics,
},
solana_vote_program::{
vote_instruction,
vote_state::{

View File

@ -36,7 +36,6 @@ pub mod stake_weighted_timestamp;
pub mod stakes;
pub mod static_ids;
pub mod status_cache;
pub mod svm;
pub mod transaction_batch;
#[macro_use]

View File

@ -8,7 +8,6 @@ use {
self, SnapshotError, StorageAndNextAppendVecId, BANK_SNAPSHOT_PRE_FILENAME_EXTENSION,
},
stakes::Stakes,
svm::runtime_config::RuntimeConfig,
},
bincode::{self, config::Options, Error},
log::*,
@ -40,6 +39,7 @@ use {
inflation::Inflation,
pubkey::Pubkey,
},
solana_svm::runtime_config::RuntimeConfig,
std::{
collections::{HashMap, HashSet},
io::{self, BufReader, BufWriter, Read, Write},

View File

@ -23,7 +23,6 @@ use {
UnpackedSnapshotsDirAndVersion, VerifySlotDeltasError,
},
status_cache,
svm::runtime_config::RuntimeConfig,
},
bincode::{config::Options, serialize_into},
log::*,
@ -46,6 +45,7 @@ use {
pubkey::Pubkey,
slot_history::{Check, SlotHistory},
},
solana_svm::runtime_config::RuntimeConfig,
std::{
collections::HashSet,
fs,

43
svm/Cargo.toml Normal file
View File

@ -0,0 +1,43 @@
[package]
name = "solana-svm"
description = "Solana SVM"
documentation = "https://docs.rs/solana-svm"
version = { workspace = true }
authors = { workspace = true }
repository = { workspace = true }
homepage = { workspace = true }
license = { workspace = true }
edition = { workspace = true }
[dependencies]
itertools = { workspace = true }
log = { workspace = true }
percentage = { workspace = true }
solana-accounts-db = { workspace = true }
solana-bpf-loader-program = { workspace = true }
solana-frozen-abi = { workspace = true }
solana-frozen-abi-macro = { workspace = true }
solana-loader-v4-program = { workspace = true }
solana-measure = { workspace = true }
solana-metrics = { workspace = true }
solana-program-runtime = { workspace = true }
solana-sdk = { workspace = true }
solana-system-program = { workspace = true }
[lib]
crate-type = ["lib"]
name = "solana_svm"
[dev-dependencies]
solana-accounts-db = { workspace = true, features = ["dev-context-only-utils"] }
solana-logger = { workspace = true }
solana-sdk = { workspace = true, features = ["dev-context-only-utils"] }
[package.metadata.docs.rs]
targets = ["x86_64-unknown-linux-gnu"]
[build-dependencies]
rustc_version = { workspace = true }
[features]
dev-context-only-utils = []

1
svm/build.rs Symbolic link
View File

@ -0,0 +1 @@
../frozen-abi/build.rs

View File

@ -1,5 +1,5 @@
use {
crate::svm::{
crate::{
account_overrides::AccountOverrides, account_rent_state::RentState,
transaction_error_metrics::TransactionErrorMetrics,
transaction_processor::TransactionProcessingCallback,
@ -38,7 +38,7 @@ use {
std::{collections::HashMap, num::NonZeroUsize},
};
pub(crate) fn load_accounts<CB: TransactionProcessingCallback>(
pub fn load_accounts<CB: TransactionProcessingCallback>(
callbacks: &CB,
txs: &[SanitizedTransaction],
lock_results: &[TransactionCheckResult],

View File

@ -10,7 +10,7 @@ use {
};
#[derive(Debug, PartialEq, Eq)]
pub(crate) enum RentState {
pub enum RentState {
/// account.lamports == 0
Uninitialized,
/// 0 < account.lamports < rent-exempt-minimum

View File

@ -1,3 +1,6 @@
#![cfg_attr(RUSTC_WITH_SPECIALIZATION, feature(min_specialization))]
#![allow(clippy::arithmetic_side_effects)]
pub mod account_loader;
pub mod account_overrides;
pub mod account_rent_state;
@ -5,3 +8,9 @@ pub mod runtime_config;
pub mod transaction_account_state_info;
pub mod transaction_error_metrics;
pub mod transaction_processor;
#[macro_use]
extern crate solana_metrics;
#[macro_use]
extern crate solana_frozen_abi_macro;

View File

@ -1,5 +1,5 @@
use {
crate::svm::account_rent_state::RentState,
crate::account_rent_state::RentState,
solana_sdk::{
account::ReadableAccount,
message::SanitizedMessage,
@ -10,12 +10,12 @@ use {
},
};
pub(crate) struct TransactionAccountStateInfo {
pub struct TransactionAccountStateInfo {
rent_state: Option<RentState>, // None: readonly account
}
impl TransactionAccountStateInfo {
pub(crate) fn new(
pub fn new(
rent: &Rent,
transaction_context: &TransactionContext,
message: &SanitizedMessage,

View File

@ -1,5 +1,5 @@
use {
crate::svm::{
crate::{
account_loader::load_accounts, account_overrides::AccountOverrides,
runtime_config::RuntimeConfig, transaction_account_state_info::TransactionAccountStateInfo,
transaction_error_metrics::TransactionErrorMetrics,

View File

@ -32,6 +32,7 @@ solana-rpc-client = { workspace = true }
solana-runtime = { workspace = true }
solana-sdk = { workspace = true }
solana-streamer = { workspace = true }
solana-svm = { workspace = true }
solana-tpu-client = { workspace = true }
tokio = { workspace = true, features = ["full"] }

View File

@ -34,7 +34,7 @@ use {
solana_rpc_client::{nonblocking, rpc_client::RpcClient},
solana_runtime::{
bank_forks::BankForks, genesis_utils::create_genesis_config_with_leader_ex,
snapshot_config::SnapshotConfig, svm::runtime_config::RuntimeConfig,
snapshot_config::SnapshotConfig,
},
solana_sdk::{
account::{Account, AccountSharedData},
@ -54,6 +54,7 @@ use {
signature::{read_keypair_file, write_keypair_file, Keypair, Signer},
},
solana_streamer::socket::SocketAddrSpace,
solana_svm::runtime_config::RuntimeConfig,
solana_tpu_client::tpu_client::{
DEFAULT_TPU_CONNECTION_POOL_SIZE, DEFAULT_TPU_ENABLE_UDP, DEFAULT_TPU_USE_QUIC,
},

View File

@ -58,6 +58,7 @@ solana-sdk = { workspace = true }
solana-send-transaction-service = { workspace = true }
solana-storage-bigtable = { workspace = true }
solana-streamer = { workspace = true }
solana-svm = { workspace = true }
solana-test-validator = { workspace = true }
solana-tpu-client = { workspace = true }
solana-version = { workspace = true }

View File

@ -48,7 +48,6 @@ use {
snapshot_bank_utils::DISABLED_SNAPSHOT_ARCHIVE_INTERVAL,
snapshot_config::{SnapshotConfig, SnapshotUsage},
snapshot_utils::{self, ArchiveFormat, SnapshotVersion},
svm::runtime_config::RuntimeConfig,
},
solana_sdk::{
clock::{Slot, DEFAULT_S_PER_SLOT},
@ -59,6 +58,7 @@ use {
},
solana_send_transaction_service::send_transaction_service,
solana_streamer::socket::SocketAddrSpace,
solana_svm::runtime_config::RuntimeConfig,
solana_tpu_client::tpu_client::DEFAULT_TPU_ENABLE_UDP,
solana_validator::{
admin_rpc_service,