From d5bdc7f958812b7c5982d365d3fc8fdcf48d503e Mon Sep 17 00:00:00 2001 From: Kevin Heavey Date: Tue, 10 Sep 2024 21:27:20 +0400 Subject: [PATCH] Extract feature-set crate (#2172) * extract feature-set crate * update feature_set dependents * re-export with deprecation notice * fix path after rebase * fmt * fmt after rebase * fixes after rebase * unused import * fix import * unused import * post-rebase fixes * fix path * missing frozen-abi support * update lock file * use workspace lints * fix paths * fix import * remove unused import * remove unused deps * consolidate imports * add back dep (not unused after all) --- Cargo.lock | 36 ++ Cargo.toml | 2 + banks-server/Cargo.toml | 1 + banks-server/src/banks_server.rs | 4 +- bench-tps/Cargo.toml | 1 + bench-tps/src/bench.rs | 2 +- cli/Cargo.toml | 1 + cli/src/cluster_query.rs | 7 +- cli/src/feature.rs | 2 +- cli/src/program.rs | 2 +- cli/src/stake.rs | 3 +- cli/tests/program.rs | 2 +- core/Cargo.toml | 1 + core/src/banking_stage/consumer.rs | 2 +- .../forward_packet_batches_by_accounts.rs | 8 +- core/src/banking_stage/forwarder.rs | 6 +- core/src/banking_stage/qos_service.rs | 2 +- .../unprocessed_transaction_storage.rs | 5 +- core/src/consensus.rs | 4 +- core/src/repair/serve_repair.rs | 6 +- core/src/replay_stage.rs | 3 +- core/src/shred_fetch_stage.rs | 2 +- core/src/window_service.rs | 6 +- cost-model/Cargo.toml | 1 + cost-model/src/cost_model.rs | 2 +- cost-model/src/transaction_cost.rs | 2 +- gossip/Cargo.toml | 1 + gossip/src/cluster_info.rs | 2 +- ledger-tool/Cargo.toml | 1 + ledger-tool/src/main.rs | 2 +- ledger/Cargo.toml | 1 + ledger/benches/blockstore_processor.rs | 2 +- ledger/src/blockstore_processor.rs | 3 +- program-runtime/Cargo.toml | 1 + program-runtime/src/invoke_context.rs | 7 +- program-test/Cargo.toml | 1 + program-test/src/lib.rs | 2 +- .../address-lookup-table-tests/Cargo.toml | 1 + .../tests/create_lookup_table_ix.rs | 3 +- programs/address-lookup-table/Cargo.toml | 1 + .../address-lookup-table/src/processor.rs | 2 +- programs/bpf_loader/Cargo.toml | 1 + programs/bpf_loader/src/lib.rs | 6 +- programs/bpf_loader/src/syscalls/cpi.rs | 4 +- programs/bpf_loader/src/syscalls/mem_ops.rs | 6 +- programs/bpf_loader/src/syscalls/mod.rs | 22 +- programs/sbf/Cargo.lock | 28 ++ programs/sbf/Cargo.toml | 2 + programs/sbf/benches/bpf_loader.rs | 7 +- programs/sbf/tests/programs.rs | 8 +- programs/sbf/tests/sysvar.rs | 2 +- programs/stake-tests/Cargo.toml | 1 + .../tests/test_move_stake_and_lamports.rs | 4 +- programs/stake/Cargo.toml | 1 + programs/stake/src/lib.rs | 7 +- programs/stake/src/stake_instruction.rs | 9 +- programs/stake/src/stake_state.rs | 2 +- programs/system/Cargo.toml | 1 + programs/vote/Cargo.toml | 1 + programs/vote/src/vote_processor.rs | 2 +- programs/vote/src/vote_state/mod.rs | 2 +- programs/zk-token-proof/Cargo.toml | 1 + programs/zk-token-proof/src/lib.rs | 2 +- rpc/Cargo.toml | 1 + rpc/src/rpc.rs | 2 +- runtime/Cargo.toml | 1 + runtime/src/bank.rs | 7 +- runtime/src/bank/builtin_programs.rs | 7 +- .../bank/builtins/core_bpf_migration/mod.rs | 2 +- .../core_bpf_migration/target_builtin.rs | 3 +- runtime/src/bank/builtins/mod.rs | 10 +- runtime/src/bank/fee_distribution.rs | 2 +- .../partitioned_epoch_rewards/distribution.rs | 3 +- .../src/bank/partitioned_epoch_rewards/mod.rs | 2 +- .../bank/partitioned_epoch_rewards/sysvar.rs | 4 +- runtime/src/bank/sysvar_cache.rs | 3 +- runtime/src/bank/tests.rs | 10 +- runtime/src/genesis_utils.rs | 2 +- sdk/Cargo.toml | 2 + sdk/benches/ed25519_instructions.rs | 2 +- sdk/benches/secp256k1_instructions.rs | 2 +- sdk/feature-set/Cargo.toml | 32 ++ sdk/feature-set/build.rs | 1 + .../feature_set.rs => feature-set/src/lib.rs} | 424 +++++++++--------- sdk/src/ed25519_instruction.rs | 9 +- sdk/src/lib.rs | 3 +- sdk/src/precompiles.rs | 4 +- sdk/src/reserved_account_keys.rs | 6 +- sdk/src/secp256k1_instruction.rs | 14 +- sdk/src/transaction/mod.rs | 2 +- sdk/src/transaction/sanitized.rs | 2 +- svm/Cargo.toml | 1 + svm/src/account_loader.rs | 4 +- svm/src/message_processor.rs | 2 +- svm/src/transaction_processor.rs | 8 +- svm/tests/conformance.rs | 2 +- svm/tests/mock_bank.rs | 2 +- test-validator/Cargo.toml | 1 + test-validator/src/lib.rs | 5 +- turbine/Cargo.toml | 1 + turbine/src/cluster_nodes.rs | 2 +- turbine/src/sigverify_shreds.rs | 2 +- version/Cargo.toml | 1 + version/src/legacy.rs | 7 +- version/src/lib.rs | 7 +- 105 files changed, 488 insertions(+), 381 deletions(-) create mode 100644 sdk/feature-set/Cargo.toml create mode 120000 sdk/feature-set/build.rs rename sdk/{src/feature_set.rs => feature-set/src/lib.rs} (69%) diff --git a/Cargo.lock b/Cargo.lock index 843ea41f8240d8..18bae8a7e97ac0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -186,6 +186,7 @@ dependencies = [ "solana-core", "solana-cost-model", "solana-entry", + "solana-feature-set", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -5617,6 +5618,7 @@ dependencies = [ "num-derive", "num-traits", "rustc_version 0.4.1", + "solana-feature-set", "solana-log-collector", "solana-program", "solana-program-runtime", @@ -5631,6 +5633,7 @@ dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", + "solana-feature-set", "solana-program-test", "solana-sdk", ] @@ -5702,6 +5705,7 @@ dependencies = [ "futures 0.3.30", "solana-banks-interface", "solana-client", + "solana-feature-set", "solana-runtime", "solana-sdk", "solana-send-transaction-service", @@ -5743,6 +5747,7 @@ dependencies = [ "solana-connection-cache", "solana-core", "solana-faucet", + "solana-feature-set", "solana-genesis", "solana-gossip", "solana-local-cluster", @@ -5818,6 +5823,7 @@ dependencies = [ "solana-bn254", "solana-compute-budget", "solana-curve25519", + "solana-feature-set", "solana-log-collector", "solana-measure", "solana-poseidon", @@ -5988,6 +5994,7 @@ dependencies = [ "solana-connection-cache", "solana-decode-error", "solana-faucet", + "solana-feature-set", "solana-loader-v4-program", "solana-logger", "solana-program-runtime", @@ -6229,6 +6236,7 @@ dependencies = [ "solana-core", "solana-cost-model", "solana-entry", + "solana-feature-set", "solana-fee", "solana-frozen-abi", "solana-frozen-abi-macro", @@ -6290,6 +6298,7 @@ dependencies = [ "rustc_version 0.4.1", "solana-builtins-default-costs", "solana-compute-budget", + "solana-feature-set", "solana-frozen-abi", "solana-frozen-abi-macro", "solana-logger", @@ -6437,6 +6446,17 @@ dependencies = [ "tokio", ] +[[package]] +name = "solana-feature-set" +version = "2.1.0" +dependencies = [ + "lazy_static", + "rustc_version 0.4.1", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-program", +] + [[package]] name = "solana-fee" version = "2.1.0" @@ -6568,6 +6588,7 @@ dependencies = [ "solana-client", "solana-connection-cache", "solana-entry", + "solana-feature-set", "solana-frozen-abi", "solana-frozen-abi-macro", "solana-ledger", @@ -6693,6 +6714,7 @@ dependencies = [ "solana-bpf-loader-program", "solana-cost-model", "solana-entry", + "solana-feature-set", "solana-frozen-abi", "solana-frozen-abi-macro", "solana-logger", @@ -7102,6 +7124,7 @@ dependencies = [ "rustc_version 0.4.1", "serde", "solana-compute-budget", + "solana-feature-set", "solana-frozen-abi", "solana-frozen-abi-macro", "solana-log-collector", @@ -7135,6 +7158,7 @@ dependencies = [ "solana-banks-server", "solana-bpf-loader-program", "solana-compute-budget", + "solana-feature-set", "solana-inline-spl", "solana-log-collector", "solana-logger", @@ -7259,6 +7283,7 @@ dependencies = [ "solana-client", "solana-entry", "solana-faucet", + "solana-feature-set", "solana-gossip", "solana-inline-spl", "solana-ledger", @@ -7444,6 +7469,7 @@ dependencies = [ "solana-compute-budget-program", "solana-config-program", "solana-cost-model", + "solana-feature-set", "solana-fee", "solana-frozen-abi", "solana-frozen-abi-macro", @@ -7552,6 +7578,7 @@ dependencies = [ "solana-bn254", "solana-decode-error", "solana-derivation-path", + "solana-feature-set", "solana-frozen-abi", "solana-frozen-abi-macro", "solana-logger", @@ -7694,6 +7721,7 @@ dependencies = [ "rustc_version 0.4.1", "solana-compute-budget", "solana-config-program", + "solana-feature-set", "solana-log-collector", "solana-logger", "solana-program-runtime", @@ -7710,6 +7738,7 @@ dependencies = [ "assert_matches", "bincode", "rustc_version 0.4.1", + "solana-feature-set", "solana-program-test", "solana-sdk", "solana-vote-program", @@ -7822,6 +7851,7 @@ dependencies = [ "solana-bpf-loader-program", "solana-compute-budget", "solana-compute-budget-program", + "solana-feature-set", "solana-fee", "solana-frozen-abi", "solana-frozen-abi-macro", @@ -7895,6 +7925,7 @@ dependencies = [ "serde", "serde_derive", "solana-compute-budget", + "solana-feature-set", "solana-log-collector", "solana-logger", "solana-program-runtime", @@ -7916,6 +7947,7 @@ dependencies = [ "solana-cli-output", "solana-compute-budget", "solana-core", + "solana-feature-set", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -8116,6 +8148,7 @@ dependencies = [ "rayon", "rustls", "solana-entry", + "solana-feature-set", "solana-gossip", "solana-ledger", "solana-logger", @@ -8207,6 +8240,7 @@ dependencies = [ "semver 1.0.23", "serde", "serde_derive", + "solana-feature-set", "solana-frozen-abi", "solana-frozen-abi-macro", "solana-sanitize", @@ -8243,6 +8277,7 @@ dependencies = [ "rustc_version 0.4.1", "serde", "serde_derive", + "solana-feature-set", "solana-frozen-abi", "solana-frozen-abi-macro", "solana-logger", @@ -8351,6 +8386,7 @@ dependencies = [ "curve25519-dalek 4.1.3", "num-derive", "num-traits", + "solana-feature-set", "solana-log-collector", "solana-program-runtime", "solana-sdk", diff --git a/Cargo.toml b/Cargo.toml index 6bc5d413b00132..a31088169447ba 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -107,6 +107,7 @@ members = [ "sdk/clock", "sdk/decode-error", "sdk/derivation-path", + "sdk/feature-set", "sdk/gen-headers", "sdk/hash", "sdk/macro", @@ -388,6 +389,7 @@ solana-derivation-path = { path = "sdk/derivation-path", version = "=2.1.0" } solana-download-utils = { path = "download-utils", version = "=2.1.0" } solana-entry = { path = "entry", version = "=2.1.0" } solana-faucet = { path = "faucet", version = "=2.1.0" } +solana-feature-set = { path = "sdk/feature-set", version = "=2.1.0" } solana-fee = { path = "fee", version = "=2.1.0" } solana-frozen-abi = { path = "frozen-abi", version = "=2.1.0" } solana-frozen-abi-macro = { path = "frozen-abi/macro", version = "=2.1.0" } diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 6cf5f77f92548b..a2fe94c781cc02 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -15,6 +15,7 @@ crossbeam-channel = { workspace = true } futures = { workspace = true } solana-banks-interface = { workspace = true } solana-client = { workspace = true } +solana-feature-set = { workspace = true } solana-runtime = { workspace = true } solana-sdk = { workspace = true } solana-send-transaction-service = { workspace = true } diff --git a/banks-server/src/banks_server.rs b/banks-server/src/banks_server.rs index 10cc43a5878619..7051daac45cb0f 100644 --- a/banks-server/src/banks_server.rs +++ b/banks-server/src/banks_server.rs @@ -8,6 +8,7 @@ use { TransactionSimulationDetails, TransactionStatus, }, solana_client::connection_cache::ConnectionCache, + solana_feature_set::{move_precompile_verification_to_svm, FeatureSet}, solana_runtime::{ bank::{Bank, TransactionSimulationResult}, bank_forks::BankForks, @@ -17,7 +18,6 @@ use { account::Account, clock::Slot, commitment_config::CommitmentLevel, - feature_set::{self, FeatureSet}, hash::Hash, message::{Message, SanitizedMessage}, pubkey::Pubkey, @@ -165,7 +165,7 @@ fn verify_transaction( transaction.verify()?; let move_precompile_verification_to_svm = - feature_set.is_active(&feature_set::move_precompile_verification_to_svm::id()); + feature_set.is_active(&move_precompile_verification_to_svm::id()); if !move_precompile_verification_to_svm { transaction.verify_precompiles(feature_set)?; } diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 562f31885bea2f..3c3c5f718998c4 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -48,6 +48,7 @@ thiserror = { workspace = true } [dev-dependencies] serial_test = { workspace = true } +solana-feature-set = { workspace = true } solana-local-cluster = { workspace = true } solana-runtime = { workspace = true, features = ["dev-context-only-utils"] } solana-test-validator = { workspace = true } diff --git a/bench-tps/src/bench.rs b/bench-tps/src/bench.rs index 0c85af917965ca..3e65ee5604d60e 100644 --- a/bench-tps/src/bench.rs +++ b/bench-tps/src/bench.rs @@ -1224,10 +1224,10 @@ pub fn fund_keypairs( mod tests { use { super::*, + solana_feature_set::FeatureSet, solana_runtime::{bank::Bank, bank_client::BankClient, bank_forks::BankForks}, solana_sdk::{ commitment_config::CommitmentConfig, - feature_set::FeatureSet, fee_calculator::FeeRateGovernor, genesis_config::{create_genesis_config, GenesisConfig}, native_token::sol_to_lamports, diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 1e05e67eba420e..3c5c8372aeaeb7 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -38,6 +38,7 @@ solana-compute-budget = { workspace = true } solana-config-program = { workspace = true } solana-connection-cache = { workspace = true } solana-decode-error = { workspace = true } +solana-feature-set = { workspace = true } solana-loader-v4-program = { workspace = true } solana-logger = { workspace = true } solana-program-runtime = { workspace = true } diff --git a/cli/src/cluster_query.rs b/cli/src/cluster_query.rs index 0e66d95a5d3bd1..3792a4689f2d3c 100644 --- a/cli/src/cluster_query.rs +++ b/cli/src/cluster_query.rs @@ -46,7 +46,6 @@ use { clock::{self, Clock, Slot}, commitment_config::CommitmentConfig, epoch_schedule::Epoch, - feature_set, hash::Hash, message::Message, native_token::lamports_to_sol, @@ -1898,8 +1897,10 @@ pub fn process_show_stakes( let stake_history = from_account(&stake_history_account).ok_or_else(|| { CliError::RpcRequestError("Failed to deserialize stake history".to_string()) })?; - let new_rate_activation_epoch = - get_feature_activation_epoch(rpc_client, &feature_set::reduce_stake_warmup_cooldown::id())?; + let new_rate_activation_epoch = get_feature_activation_epoch( + rpc_client, + &solana_feature_set::reduce_stake_warmup_cooldown::id(), + )?; stake_account_progress_bar.finish_and_clear(); let mut stake_accounts: Vec = vec![]; diff --git a/cli/src/feature.rs b/cli/src/feature.rs index 66696b11c74190..885cfe03dd6749 100644 --- a/cli/src/feature.rs +++ b/cli/src/feature.rs @@ -14,6 +14,7 @@ use { input_validators::*, keypair::*, }, solana_cli_output::{cli_version::CliVersion, QuietDisplay, VerboseDisplay}, + solana_feature_set::FEATURE_NAMES, solana_remote_wallet::remote_wallet::RemoteWalletManager, solana_rpc_client::rpc_client::RpcClient, solana_rpc_client_api::{ @@ -25,7 +26,6 @@ use { clock::Slot, epoch_schedule::EpochSchedule, feature::{self, Feature}, - feature_set::FEATURE_NAMES, genesis_config::ClusterType, message::Message, pubkey::Pubkey, diff --git a/cli/src/program.rs b/cli/src/program.rs index a879ab3347c91a..d4192589aa86a5 100644 --- a/cli/src/program.rs +++ b/cli/src/program.rs @@ -40,6 +40,7 @@ use { tpu_client::{TpuClient, TpuClientConfig}, }, solana_compute_budget::compute_budget::ComputeBudget, + solana_feature_set::{FeatureSet, FEATURE_NAMES}, solana_program_runtime::invoke_context::InvokeContext, solana_rbpf::{elf::Executable, verifier::RequisiteVerifier}, solana_remote_wallet::remote_wallet::RemoteWalletManager, @@ -58,7 +59,6 @@ use { bpf_loader_upgradeable::{self, get_program_data_address, UpgradeableLoaderState}, commitment_config::CommitmentConfig, compute_budget, - feature_set::{FeatureSet, FEATURE_NAMES}, instruction::{Instruction, InstructionError}, message::Message, packet::PACKET_DATA_SIZE, diff --git a/cli/src/stake.rs b/cli/src/stake.rs index d70a41c0a57e6f..6073ea4f873c01 100644 --- a/cli/src/stake.rs +++ b/cli/src/stake.rs @@ -43,7 +43,6 @@ use { clock::{Clock, UnixTimestamp, SECONDS_PER_DAY}, commitment_config::CommitmentConfig, epoch_schedule::EpochSchedule, - feature_set, message::Message, native_token::Sol, pubkey::Pubkey, @@ -2567,7 +2566,7 @@ pub fn process_show_stake_account( })?; let new_rate_activation_epoch = get_feature_activation_epoch( rpc_client, - &feature_set::reduce_stake_warmup_cooldown::id(), + &solana_feature_set::reduce_stake_warmup_cooldown::id(), )?; let mut state = build_stake_state( diff --git a/cli/tests/program.rs b/cli/tests/program.rs index 6bec3bcc28b36f..f1c441a8654ea4 100644 --- a/cli/tests/program.rs +++ b/cli/tests/program.rs @@ -12,6 +12,7 @@ use { }, solana_cli_output::{parse_sign_only_reply_string, OutputFormat}, solana_faucet::faucet::run_local_faucet, + solana_feature_set::enable_alt_bn128_syscall, solana_rpc::rpc::JsonRpcConfig, solana_rpc_client::rpc_client::{GetConfirmedSignaturesForAddress2Config, RpcClient}, solana_rpc_client_api::config::RpcTransactionConfig, @@ -23,7 +24,6 @@ use { bpf_loader_upgradeable::{self, UpgradeableLoaderState}, commitment_config::CommitmentConfig, compute_budget::{self, ComputeBudgetInstruction}, - feature_set::enable_alt_bn128_syscall, fee_calculator::FeeRateGovernor, pubkey::Pubkey, rent::Rent, diff --git a/core/Cargo.toml b/core/Cargo.toml index d107296bba0e6e..bde6144e142ae0 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -52,6 +52,7 @@ solana-compute-budget = { workspace = true } solana-connection-cache = { workspace = true } solana-cost-model = { workspace = true } solana-entry = { workspace = true } +solana-feature-set = { workspace = true } solana-fee = { workspace = true } solana-frozen-abi = { workspace = true, optional = true } solana-frozen-abi-macro = { workspace = true, optional = true } diff --git a/core/src/banking_stage/consumer.rs b/core/src/banking_stage/consumer.rs index 39e3dc1fd95d5c..25942d11c1f914 100644 --- a/core/src/banking_stage/consumer.rs +++ b/core/src/banking_stage/consumer.rs @@ -11,6 +11,7 @@ use { BankingStageStats, }, itertools::Itertools, + solana_feature_set as feature_set, solana_ledger::token_balances::collect_token_balances, solana_measure::{measure::Measure, measure_us}, solana_poh::poh_recorder::{ @@ -24,7 +25,6 @@ use { solana_runtime_transaction::instructions_processor::process_compute_budget_instructions, solana_sdk::{ clock::{Slot, FORWARD_TRANSACTIONS_TO_LEADER_AT_SLOT_OFFSET, MAX_PROCESSING_AGE}, - feature_set, fee::FeeBudgetLimits, message::SanitizedMessage, saturating_add_assign, diff --git a/core/src/banking_stage/forward_packet_batches_by_accounts.rs b/core/src/banking_stage/forward_packet_batches_by_accounts.rs index e01ca3b213b81e..1d86cfb9753b1b 100644 --- a/core/src/banking_stage/forward_packet_batches_by_accounts.rs +++ b/core/src/banking_stage/forward_packet_batches_by_accounts.rs @@ -6,8 +6,9 @@ use { cost_tracker::{CostTracker, UpdatedCosts}, transaction_cost::TransactionCost, }, + solana_feature_set::FeatureSet, solana_perf::packet::Packet, - solana_sdk::{feature_set::FeatureSet, transaction::SanitizedTransaction}, + solana_sdk::transaction::SanitizedTransaction, std::sync::Arc, }; @@ -170,9 +171,10 @@ mod tests { super::*, crate::banking_stage::unprocessed_packet_batches::DeserializedPacket, solana_cost_model::transaction_cost::UsageCostDetails, + solana_feature_set::FeatureSet, solana_sdk::{ - compute_budget::ComputeBudgetInstruction, feature_set::FeatureSet, message::Message, - pubkey::Pubkey, system_instruction, transaction::Transaction, + compute_budget::ComputeBudgetInstruction, message::Message, pubkey::Pubkey, + system_instruction, transaction::Transaction, }, }; diff --git a/core/src/banking_stage/forwarder.rs b/core/src/banking_stage/forwarder.rs index 4d39ea65dfc7b8..563c93861cd30e 100644 --- a/core/src/banking_stage/forwarder.rs +++ b/core/src/banking_stage/forwarder.rs @@ -12,15 +12,13 @@ use { }, solana_client::connection_cache::ConnectionCache, solana_connection_cache::client_connection::ClientConnection as TpuConnection, + solana_feature_set::FeatureSet, solana_gossip::cluster_info::ClusterInfo, solana_measure::measure_us, solana_perf::{data_budget::DataBudget, packet::Packet}, solana_poh::poh_recorder::PohRecorder, solana_runtime::bank_forks::BankForks, - solana_sdk::{ - feature_set::FeatureSet, pubkey::Pubkey, transaction::SanitizedTransaction, - transport::TransportError, - }, + solana_sdk::{pubkey::Pubkey, transaction::SanitizedTransaction, transport::TransportError}, solana_streamer::sendmmsg::batch_send, std::{ iter::repeat, diff --git a/core/src/banking_stage/qos_service.rs b/core/src/banking_stage/qos_service.rs index 8af53ca4d9e7b3..21e19be6f0ec52 100644 --- a/core/src/banking_stage/qos_service.rs +++ b/core/src/banking_stage/qos_service.rs @@ -8,11 +8,11 @@ use { solana_cost_model::{ cost_model::CostModel, cost_tracker::UpdatedCosts, transaction_cost::TransactionCost, }, + solana_feature_set::FeatureSet, solana_measure::measure::Measure, solana_runtime::bank::Bank, solana_sdk::{ clock::Slot, - feature_set::FeatureSet, saturating_add_assign, transaction::{self, SanitizedTransaction, TransactionError}, }, diff --git a/core/src/banking_stage/unprocessed_transaction_storage.rs b/core/src/banking_stage/unprocessed_transaction_storage.rs index 212b7f4f2f48d8..35bc04a2997995 100644 --- a/core/src/banking_stage/unprocessed_transaction_storage.rs +++ b/core/src/banking_stage/unprocessed_transaction_storage.rs @@ -18,11 +18,12 @@ use { itertools::Itertools, min_max_heap::MinMaxHeap, solana_accounts_db::account_locks::validate_account_locks, + solana_feature_set::FeatureSet, solana_measure::measure_us, solana_runtime::bank::Bank, solana_sdk::{ - clock::FORWARD_TRANSACTIONS_TO_LEADER_AT_SLOT_OFFSET, feature_set::FeatureSet, hash::Hash, - saturating_add_assign, transaction::SanitizedTransaction, + clock::FORWARD_TRANSACTIONS_TO_LEADER_AT_SLOT_OFFSET, hash::Hash, saturating_add_assign, + transaction::SanitizedTransaction, }, solana_svm::transaction_error_metrics::TransactionErrorMetrics, std::{ diff --git a/core/src/consensus.rs b/core/src/consensus.rs index c079dbb7cde51d..417e29254c2d42 100644 --- a/core/src/consensus.rs +++ b/core/src/consensus.rs @@ -1,4 +1,4 @@ -use {crate::replay_stage::DUPLICATE_THRESHOLD, solana_sdk::feature_set}; +use crate::replay_stage::DUPLICATE_THRESHOLD; pub mod fork_choice; pub mod heaviest_subtree_fork_choice; @@ -594,7 +594,7 @@ impl Tower { bank.slot(), bank.hash(), bank.feature_set - .is_active(&feature_set::enable_tower_sync_ix::id()), + .is_active(&solana_feature_set::enable_tower_sync_ix::id()), ) } diff --git a/core/src/repair/serve_repair.rs b/core/src/repair/serve_repair.rs index 012ec93ee964d6..9c3a53b2ad053a 100644 --- a/core/src/repair/serve_repair.rs +++ b/core/src/repair/serve_repair.rs @@ -1441,6 +1441,7 @@ mod tests { use { super::*, crate::repair::repair_response, + solana_feature_set::FeatureSet, solana_gossip::{contact_info::ContactInfo, socketaddr, socketaddr_any}, solana_ledger::{ blockstore::make_many_slot_entries, @@ -1451,10 +1452,7 @@ mod tests { }, solana_perf::packet::{deserialize_from_with_limit, Packet}, solana_runtime::bank::Bank, - solana_sdk::{ - feature_set::FeatureSet, hash::Hash, pubkey::Pubkey, signature::Keypair, - timing::timestamp, - }, + solana_sdk::{hash::Hash, pubkey::Pubkey, signature::Keypair, timing::timestamp}, solana_streamer::socket::SocketAddrSpace, std::{io::Cursor, net::Ipv4Addr}, }; diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index 723a91fb9f9a15..db0ee5aff30d53 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -67,7 +67,6 @@ use { }, solana_sdk::{ clock::{BankId, Slot, MAX_PROCESSING_AGE, NUM_CONSECUTIVE_LEADER_SLOTS}, - feature_set, hash::Hash, pubkey::Pubkey, saturating_add_assign, @@ -3585,7 +3584,7 @@ impl ReplayStage { .get_hash(last_voted_slot) .expect("Must exist for us to have frozen descendant"), bank.feature_set - .is_active(&feature_set::enable_tower_sync_ix::id()), + .is_active(&solana_feature_set::enable_tower_sync_ix::id()), ); // Since we are updating our tower we need to update associated caches for previously computed // slots as well. diff --git a/core/src/shred_fetch_stage.rs b/core/src/shred_fetch_stage.rs index 8af40645629c23..0776674a4748c1 100644 --- a/core/src/shred_fetch_stage.rs +++ b/core/src/shred_fetch_stage.rs @@ -5,6 +5,7 @@ use { bytes::Bytes, crossbeam_channel::{unbounded, Receiver, RecvTimeoutError, Sender}, itertools::Itertools, + solana_feature_set::{self as feature_set, FeatureSet}, solana_gossip::cluster_info::ClusterInfo, solana_ledger::shred::{should_discard_shred, ShredFetchStats}, solana_perf::packet::{PacketBatch, PacketBatchRecycler, PacketFlags, PACKETS_PER_BATCH}, @@ -12,7 +13,6 @@ use { solana_sdk::{ clock::{Slot, DEFAULT_MS_PER_SLOT}, epoch_schedule::EpochSchedule, - feature_set::{self, FeatureSet}, genesis_config::ClusterType, packet::{Meta, PACKET_DATA_SIZE}, pubkey::Pubkey, diff --git a/core/src/window_service.rs b/core/src/window_service.rs index ff902e414ee017..3056090cf9ba94 100644 --- a/core/src/window_service.rs +++ b/core/src/window_service.rs @@ -19,6 +19,7 @@ use { }, crossbeam_channel::{unbounded, Receiver, RecvTimeoutError, Sender}, rayon::{prelude::*, ThreadPool}, + solana_feature_set as feature_set, solana_gossip::cluster_info::ClusterInfo, solana_ledger::{ blockstore::{Blockstore, BlockstoreInsertionMetrics, PossibleDuplicateShred}, @@ -30,10 +31,7 @@ use { solana_perf::packet::{Packet, PacketBatch}, solana_rayon_threadlimit::get_thread_count, solana_runtime::bank_forks::BankForks, - solana_sdk::{ - clock::{Slot, DEFAULT_MS_PER_SLOT}, - feature_set, - }, + solana_sdk::clock::{Slot, DEFAULT_MS_PER_SLOT}, solana_turbine::cluster_nodes, std::{ cmp::Reverse, diff --git a/cost-model/Cargo.toml b/cost-model/Cargo.toml index b1d7949bf63a05..2339f2e9d3eee4 100644 --- a/cost-model/Cargo.toml +++ b/cost-model/Cargo.toml @@ -15,6 +15,7 @@ lazy_static = { workspace = true } log = { workspace = true } solana-builtins-default-costs = { workspace = true } solana-compute-budget = { workspace = true } +solana-feature-set = { workspace = true } solana-frozen-abi = { workspace = true, optional = true } solana-frozen-abi-macro = { workspace = true, optional = true } solana-metrics = { workspace = true } diff --git a/cost-model/src/cost_model.rs b/cost-model/src/cost_model.rs index 68162bfcdc5bbd..4c1cc0df6edbfa 100644 --- a/cost-model/src/cost_model.rs +++ b/cost-model/src/cost_model.rs @@ -12,11 +12,11 @@ use { solana_compute_budget::compute_budget_limits::{ DEFAULT_HEAP_COST, DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT, MAX_COMPUTE_UNIT_LIMIT, }, + solana_feature_set::{self as feature_set, FeatureSet}, solana_runtime_transaction::instructions_processor::process_compute_budget_instructions, solana_sdk::{ borsh1::try_from_slice_unchecked, compute_budget::{self, ComputeBudgetInstruction}, - feature_set::{self, FeatureSet}, fee::FeeStructure, instruction::CompiledInstruction, program_utils::limited_deserialize, diff --git a/cost-model/src/transaction_cost.rs b/cost-model/src/transaction_cost.rs index 9db5832a114a42..3065162c5ee22b 100644 --- a/cost-model/src/transaction_cost.rs +++ b/cost-model/src/transaction_cost.rs @@ -199,8 +199,8 @@ mod tests { use { super::*, crate::cost_model::CostModel, + solana_feature_set::FeatureSet, solana_sdk::{ - feature_set::FeatureSet, hash::Hash, message::SimpleAddressLoader, reserved_account_keys::ReservedAccountKeys, diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 510fb9e75e9be7..679c4a93f91e09 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -32,6 +32,7 @@ solana-clap-utils = { workspace = true } solana-client = { workspace = true } solana-connection-cache = { workspace = true } solana-entry = { workspace = true } +solana-feature-set = { workspace = true } solana-frozen-abi = { workspace = true, optional = true } solana-frozen-abi-macro = { workspace = true, optional = true } solana-ledger = { workspace = true } diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index b49b728e846957..a26ff3a3560e2e 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -45,6 +45,7 @@ use { rand::{seq::SliceRandom, thread_rng, CryptoRng, Rng}, rayon::{prelude::*, ThreadPool, ThreadPoolBuilder}, serde::ser::Serialize, + solana_feature_set::FeatureSet, solana_ledger::shred::Shred, solana_measure::measure::Measure, solana_net_utils::{ @@ -62,7 +63,6 @@ use { solana_sanitize::{Sanitize, SanitizeError}, solana_sdk::{ clock::{Slot, DEFAULT_MS_PER_SLOT, DEFAULT_SLOTS_PER_EPOCH}, - feature_set::FeatureSet, hash::Hash, pubkey::Pubkey, quic::QUIC_PORT_OFFSET, diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index 663201514932e9..39061de55f2382 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -35,6 +35,7 @@ solana-compute-budget = { workspace = true } solana-core = { workspace = true } solana-cost-model = { workspace = true } solana-entry = { workspace = true } +solana-feature-set = { workspace = true } solana-geyser-plugin-manager = { workspace = true } solana-gossip = { workspace = true } solana-ledger = { workspace = true, features = ["dev-context-only-utils"] } diff --git a/ledger-tool/src/main.rs b/ledger-tool/src/main.rs index ac9e3fb9f929c2..0c74d53f3e41e2 100644 --- a/ledger-tool/src/main.rs +++ b/ledger-tool/src/main.rs @@ -35,6 +35,7 @@ use { validator::BlockVerificationMethod, }, solana_cost_model::{cost_model::CostModel, cost_tracker::CostTracker}, + solana_feature_set::{self as feature_set, FeatureSet}, solana_ledger::{ blockstore::{create_new_ledger, Blockstore}, blockstore_options::{AccessType, LedgerColumnOptions}, @@ -62,7 +63,6 @@ use { account_utils::StateMut, clock::{Epoch, Slot}, feature::{self, Feature}, - feature_set::{self, FeatureSet}, genesis_config::ClusterType, inflation::Inflation, native_token::{lamports_to_sol, sol_to_lamports, Sol}, diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 255efa9c8358dd..44367a30fd5ec7 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -45,6 +45,7 @@ solana-accounts-db = { workspace = true } solana-bpf-loader-program = { workspace = true } solana-cost-model = { workspace = true } solana-entry = { workspace = true } +solana-feature-set = { workspace = true } solana-frozen-abi = { workspace = true, optional = true } solana-frozen-abi-macro = { workspace = true, optional = true } solana-measure = { workspace = true } diff --git a/ledger/benches/blockstore_processor.rs b/ledger/benches/blockstore_processor.rs index e72f75186ca6f2..65b0ac229978a8 100644 --- a/ledger/benches/blockstore_processor.rs +++ b/ledger/benches/blockstore_processor.rs @@ -6,6 +6,7 @@ use { iter::IndexedParallelIterator, prelude::{IntoParallelIterator, IntoParallelRefIterator, ParallelIterator}, }, + solana_feature_set::apply_cost_tracker_during_replay, solana_ledger::{ blockstore_processor::{execute_batch, TransactionBatchWithIndexes}, genesis_utils::{create_genesis_config, GenesisConfigInfo}, @@ -16,7 +17,6 @@ use { }, solana_sdk::{ account::{Account, ReadableAccount}, - feature_set::apply_cost_tracker_during_replay, signature::Keypair, signer::Signer, stake_history::Epoch, diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index 5273b4601bfe33..b34bdee591dd9c 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -44,7 +44,6 @@ use { }, solana_sdk::{ clock::{Slot, MAX_PROCESSING_AGE}, - feature_set, genesis_config::GenesisConfig, hash::Hash, pubkey::Pubkey, @@ -173,7 +172,7 @@ pub fn execute_batch( let (check_block_cost_limits_result, check_block_cost_limits_us) = measure_us!(if bank .feature_set - .is_active(&feature_set::apply_cost_tracker_during_replay::id()) + .is_active(&solana_feature_set::apply_cost_tracker_during_replay::id()) { check_block_cost_limits(bank, &commit_results, batch.sanitized_transactions()) } else { diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 413f7b7665ba42..af276bc12562d0 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -22,6 +22,7 @@ percentage = { workspace = true } rand = { workspace = true } serde = { workspace = true } solana-compute-budget = { workspace = true } +solana-feature-set = { workspace = true } solana-frozen-abi = { workspace = true, optional = true } solana-frozen-abi-macro = { workspace = true, optional = true } solana-log-collector = { workspace = true } diff --git a/program-runtime/src/invoke_context.rs b/program-runtime/src/invoke_context.rs index 97d8200053a1a5..c96da3e1da3539 100644 --- a/program-runtime/src/invoke_context.rs +++ b/program-runtime/src/invoke_context.rs @@ -8,6 +8,7 @@ use { sysvar_cache::SysvarCache, }, solana_compute_budget::compute_budget::ComputeBudget, + solana_feature_set::{move_precompile_verification_to_svm, FeatureSet}, solana_log_collector::{ic_msg, LogCollector}, solana_measure::measure::Measure, solana_rbpf::{ @@ -22,7 +23,6 @@ use { bpf_loader_deprecated, clock::Slot, epoch_schedule::EpochSchedule, - feature_set::{self, FeatureSet}, hash::Hash, instruction::{AccountMeta, InstructionError}, native_loader, @@ -482,7 +482,7 @@ impl<'a> InvokeContext<'a> { let feature_set = self.get_feature_set(); let move_precompile_verification_to_svm = - feature_set.is_active(&feature_set::move_precompile_verification_to_svm::id()); + feature_set.is_active(&move_precompile_verification_to_svm::id()); if move_precompile_verification_to_svm { let instruction_datas: Vec<_> = message_instruction_datas_iter.collect(); precompile @@ -706,9 +706,10 @@ macro_rules! with_mock_invoke_context { ) => { use { solana_compute_budget::compute_budget::ComputeBudget, + solana_feature_set::FeatureSet, solana_log_collector::LogCollector, solana_sdk::{ - account::ReadableAccount, feature_set::FeatureSet, hash::Hash, sysvar::rent::Rent, + account::ReadableAccount, hash::Hash, sysvar::rent::Rent, transaction_context::TransactionContext, }, solana_type_overrides::sync::Arc, diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index b31e0330a34f92..c96cb8d28b4ceb 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -23,6 +23,7 @@ solana-banks-interface = { workspace = true } solana-banks-server = { workspace = true } solana-bpf-loader-program = { workspace = true } solana-compute-budget = { workspace = true } +solana-feature-set = { workspace = true } solana-inline-spl = { workspace = true } solana-log-collector = { workspace = true } solana-logger = { workspace = true } diff --git a/program-test/src/lib.rs b/program-test/src/lib.rs index e6744366ec4f5d..d4d6388436c373 100644 --- a/program-test/src/lib.rs +++ b/program-test/src/lib.rs @@ -16,6 +16,7 @@ use { solana_banks_server::banks_server::start_local_server, solana_bpf_loader_program::serialization::serialize_parameters, solana_compute_budget::compute_budget::ComputeBudget, + solana_feature_set::FEATURE_NAMES, solana_log_collector::ic_msg, solana_program_runtime::{ invoke_context::BuiltinFunctionWithContext, loaded_programs::ProgramCacheEntry, stable_log, @@ -33,7 +34,6 @@ use { account_info::AccountInfo, clock::{Epoch, Slot}, entrypoint::{deserialize, ProgramResult, SUCCESS}, - feature_set::FEATURE_NAMES, fee_calculator::{FeeRateGovernor, DEFAULT_TARGET_LAMPORTS_PER_SIGNATURE}, genesis_config::{ClusterType, GenesisConfig}, hash::Hash, diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index 0d64f6b66f535c..328e60169b0d62 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -15,6 +15,7 @@ edition = { workspace = true } assert_matches = { workspace = true } bincode = { workspace = true } solana-address-lookup-table-program = { workspace = true } +solana-feature-set = { workspace = true } solana-program-test = { workspace = true } solana-sdk = { workspace = true } diff --git a/programs/address-lookup-table-tests/tests/create_lookup_table_ix.rs b/programs/address-lookup-table-tests/tests/create_lookup_table_ix.rs index 39ff9aea6604d5..5a640448fb16d2 100644 --- a/programs/address-lookup-table-tests/tests/create_lookup_table_ix.rs +++ b/programs/address-lookup-table-tests/tests/create_lookup_table_ix.rs @@ -9,7 +9,6 @@ use { state::{AddressLookupTable, LOOKUP_TABLE_META_SIZE}, }, clock::Slot, - feature_set, instruction::InstructionError, pubkey::Pubkey, rent::Rent, @@ -28,7 +27,7 @@ pub async fn setup_test_context_without_authority_feature() -> ProgramTestContex Some(solana_address_lookup_table_program::processor::Entrypoint::vm), ); program_test.deactivate_feature( - feature_set::relax_authority_signer_check_for_lookup_table_creation::id(), + solana_feature_set::relax_authority_signer_check_for_lookup_table_creation::id(), ); program_test.start_with_context().await } diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 3ff68a686a7521..30e1ca5a0f3d7b 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -15,6 +15,7 @@ bytemuck = { workspace = true } log = { workspace = true } num-derive = { workspace = true } num-traits = { workspace = true } +solana-feature-set = { workspace = true } solana-program = { workspace = true } thiserror = { workspace = true } diff --git a/programs/address-lookup-table/src/processor.rs b/programs/address-lookup-table/src/processor.rs index 6274606228b4bd..0d8abe8bd2e260 100644 --- a/programs/address-lookup-table/src/processor.rs +++ b/programs/address-lookup-table/src/processor.rs @@ -1,4 +1,5 @@ use { + solana_feature_set as feature_set, solana_log_collector::ic_msg, solana_program_runtime::{declare_process_instruction, invoke_context::InvokeContext}, solana_sdk::{ @@ -11,7 +12,6 @@ use { }, }, clock::Slot, - feature_set, instruction::InstructionError, program_utils::limited_deserialize, pubkey::{Pubkey, PUBKEY_BYTES}, diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 4c085663513300..8fb86df6d28ab3 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -18,6 +18,7 @@ scopeguard = { workspace = true } solana-bn254 = { workspace = true } solana-compute-budget = { workspace = true } solana-curve25519 = { workspace = true } +solana-feature-set = { workspace = true } solana-log-collector = { workspace = true } solana-measure = { workspace = true } solana-poseidon = { workspace = true } diff --git a/programs/bpf_loader/src/lib.rs b/programs/bpf_loader/src/lib.rs index 400806bb4c98bd..5e81062c504e97 100644 --- a/programs/bpf_loader/src/lib.rs +++ b/programs/bpf_loader/src/lib.rs @@ -6,6 +6,9 @@ pub mod syscalls; use { solana_compute_budget::compute_budget::MAX_INSTRUCTION_STACK_DEPTH, + solana_feature_set::{ + bpf_account_data_direct_mapping, enable_bpf_loader_set_authority_checked_ix, + }, solana_log_collector::{ic_logger_msg, ic_msg, LogCollector}, solana_measure::measure::Measure, solana_program_runtime::{ @@ -34,9 +37,6 @@ use { bpf_loader_upgradeable::{self, UpgradeableLoaderState}, clock::Slot, entrypoint::{MAX_PERMITTED_DATA_INCREASE, SUCCESS}, - feature_set::{ - bpf_account_data_direct_mapping, enable_bpf_loader_set_authority_checked_ix, - }, instruction::{AccountMeta, InstructionError}, loader_upgradeable_instruction::UpgradeableLoaderInstruction, loader_v4, native_loader, diff --git a/programs/bpf_loader/src/syscalls/cpi.rs b/programs/bpf_loader/src/syscalls/cpi.rs index 94046f5f741560..d4d626e959d8fe 100644 --- a/programs/bpf_loader/src/syscalls/cpi.rs +++ b/programs/bpf_loader/src/syscalls/cpi.rs @@ -2,6 +2,7 @@ use { super::*, crate::serialization::account_data_region_memory_state, scopeguard::defer, + solana_feature_set::{self as feature_set, enable_bpf_loader_set_authority_checked_ix}, solana_measure::measure::Measure, solana_program_runtime::invoke_context::SerializedAccountMetadata, solana_rbpf::{ @@ -9,7 +10,6 @@ use { memory_region::{MemoryRegion, MemoryState}, }, solana_sdk::{ - feature_set::enable_bpf_loader_set_authority_checked_ix, saturating_add_assign, stable_layout::stable_instruction::StableInstruction, syscalls::{ @@ -1593,6 +1593,7 @@ mod tests { super::*, crate::mock_create_vm, assert_matches::assert_matches, + solana_feature_set::bpf_account_data_direct_mapping, solana_program_runtime::{ invoke_context::SerializedAccountMetadata, with_mock_invoke_context, }, @@ -1602,7 +1603,6 @@ mod tests { solana_sdk::{ account::{Account, AccountSharedData, ReadableAccount}, clock::Epoch, - feature_set::bpf_account_data_direct_mapping, instruction::Instruction, system_program, transaction_context::TransactionAccount, diff --git a/programs/bpf_loader/src/syscalls/mem_ops.rs b/programs/bpf_loader/src/syscalls/mem_ops.rs index bbdf0ccc4c479f..0367c03d006ad8 100644 --- a/programs/bpf_loader/src/syscalls/mem_ops.rs +++ b/programs/bpf_loader/src/syscalls/mem_ops.rs @@ -70,7 +70,7 @@ declare_builtin_function!( if invoke_context .get_feature_set() - .is_active(&feature_set::bpf_account_data_direct_mapping::id()) + .is_active(&solana_feature_set::bpf_account_data_direct_mapping::id()) { let cmp_result = translate_type_mut::( memory_mapping, @@ -126,7 +126,7 @@ declare_builtin_function!( if invoke_context .get_feature_set() - .is_active(&feature_set::bpf_account_data_direct_mapping::id()) + .is_active(&solana_feature_set::bpf_account_data_direct_mapping::id()) { memset_non_contiguous(dst_addr, c as u8, n, memory_mapping) } else { @@ -151,7 +151,7 @@ fn memmove( ) -> Result { if invoke_context .get_feature_set() - .is_active(&feature_set::bpf_account_data_direct_mapping::id()) + .is_active(&solana_feature_set::bpf_account_data_direct_mapping::id()) { memmove_non_contiguous(dst_addr, src_addr, n, memory_mapping) } else { diff --git a/programs/bpf_loader/src/syscalls/mod.rs b/programs/bpf_loader/src/syscalls/mod.rs index 7661a000da2938..2c5d8e9feed26d 100644 --- a/programs/bpf_loader/src/syscalls/mod.rs +++ b/programs/bpf_loader/src/syscalls/mod.rs @@ -18,6 +18,16 @@ use { ALT_BN128_PAIRING_ELEMENT_LEN, ALT_BN128_PAIRING_OUTPUT_LEN, }, solana_compute_budget::compute_budget::ComputeBudget, + solana_feature_set::{ + self as feature_set, abort_on_invalid_curve, blake3_syscall_enabled, + bpf_account_data_direct_mapping, curve25519_syscall_enabled, + disable_deploy_of_alloc_free_syscall, disable_fees_sysvar, + enable_alt_bn128_compression_syscall, enable_alt_bn128_syscall, enable_big_mod_exp_syscall, + enable_get_epoch_stake_syscall, enable_partitioned_epoch_reward, enable_poseidon_syscall, + error_on_syscall_bpf_function_hash_collisions, get_sysvar_syscall_enabled, + last_restart_slot_sysvar, partitioned_epoch_rewards_superfeature, reject_callx_r10, + remaining_compute_units_syscall_enabled, FeatureSet, + }, solana_log_collector::{ic_logger_msg, ic_msg}, solana_poseidon as poseidon, solana_program_memory::is_nonoverlapping, @@ -33,18 +43,6 @@ use { big_mod_exp::{big_mod_exp, BigModExpParams}, blake3, bpf_loader, bpf_loader_deprecated, bpf_loader_upgradeable, entrypoint::{BPF_ALIGN_OF_U128, MAX_PERMITTED_DATA_INCREASE, SUCCESS}, - feature_set::bpf_account_data_direct_mapping, - feature_set::FeatureSet, - feature_set::{ - self, abort_on_invalid_curve, blake3_syscall_enabled, curve25519_syscall_enabled, - disable_deploy_of_alloc_free_syscall, disable_fees_sysvar, - enable_alt_bn128_compression_syscall, enable_alt_bn128_syscall, - enable_big_mod_exp_syscall, enable_get_epoch_stake_syscall, - enable_partitioned_epoch_reward, enable_poseidon_syscall, - error_on_syscall_bpf_function_hash_collisions, get_sysvar_syscall_enabled, - last_restart_slot_sysvar, partitioned_epoch_rewards_superfeature, reject_callx_r10, - remaining_compute_units_syscall_enabled, - }, hash::{Hash, Hasher}, instruction::{AccountMeta, InstructionError, ProcessedSiblingInstruction}, keccak, native_loader, diff --git a/programs/sbf/Cargo.lock b/programs/sbf/Cargo.lock index a3684236e05d39..ae119446dad773 100644 --- a/programs/sbf/Cargo.lock +++ b/programs/sbf/Cargo.lock @@ -4612,6 +4612,7 @@ dependencies = [ "log", "num-derive", "num-traits", + "solana-feature-set", "solana-log-collector", "solana-program", "solana-program-runtime", @@ -4660,6 +4661,7 @@ dependencies = [ "futures 0.3.30", "solana-banks-interface", "solana-client", + "solana-feature-set", "solana-runtime", "solana-sdk", "solana-send-transaction-service", @@ -4708,6 +4710,7 @@ dependencies = [ "solana-bn254", "solana-compute-budget", "solana-curve25519", + "solana-feature-set", "solana-log-collector", "solana-measure", "solana-poseidon", @@ -4939,6 +4942,7 @@ dependencies = [ "solana-connection-cache", "solana-cost-model", "solana-entry", + "solana-feature-set", "solana-fee", "solana-geyser-plugin-manager", "solana-gossip", @@ -4989,6 +4993,7 @@ dependencies = [ "log", "solana-builtins-default-costs", "solana-compute-budget", + "solana-feature-set", "solana-metrics", "solana-runtime-transaction", "solana-sdk", @@ -5082,6 +5087,14 @@ dependencies = [ "tokio", ] +[[package]] +name = "solana-feature-set" +version = "2.1.0" +dependencies = [ + "lazy_static", + "solana-program", +] + [[package]] name = "solana-fee" version = "2.1.0" @@ -5152,6 +5165,7 @@ dependencies = [ "solana-client", "solana-connection-cache", "solana-entry", + "solana-feature-set", "solana-ledger", "solana-logger", "solana-measure", @@ -5247,6 +5261,7 @@ dependencies = [ "solana-bpf-loader-program", "solana-cost-model", "solana-entry", + "solana-feature-set", "solana-measure", "solana-metrics", "solana-perf", @@ -5494,6 +5509,7 @@ dependencies = [ "rand 0.8.5", "serde", "solana-compute-budget", + "solana-feature-set", "solana-log-collector", "solana-measure", "solana-metrics", @@ -5523,6 +5539,7 @@ dependencies = [ "solana-banks-server", "solana-bpf-loader-program", "solana-compute-budget", + "solana-feature-set", "solana-inline-spl", "solana-log-collector", "solana-logger", @@ -5638,6 +5655,7 @@ dependencies = [ "solana-client", "solana-entry", "solana-faucet", + "solana-feature-set", "solana-gossip", "solana-inline-spl", "solana-ledger", @@ -5771,6 +5789,7 @@ dependencies = [ "solana-compute-budget-program", "solana-config-program", "solana-cost-model", + "solana-feature-set", "solana-fee", "solana-inline-spl", "solana-loader-v4-program", @@ -5840,6 +5859,7 @@ dependencies = [ "solana-bpf-loader-program", "solana-cli-output", "solana-compute-budget", + "solana-feature-set", "solana-fee", "solana-ledger", "solana-log-collector", @@ -6337,6 +6357,7 @@ dependencies = [ "solana-bn254", "solana-decode-error", "solana-derivation-path", + "solana-feature-set", "solana-program", "solana-program-memory", "solana-sanitize", @@ -6433,6 +6454,7 @@ dependencies = [ "bincode", "log", "solana-config-program", + "solana-feature-set", "solana-log-collector", "solana-program-runtime", "solana-sdk", @@ -6534,6 +6556,7 @@ dependencies = [ "serde_derive", "solana-bpf-loader-program", "solana-compute-budget", + "solana-feature-set", "solana-fee", "solana-loader-v4-program", "solana-log-collector", @@ -6592,6 +6615,7 @@ dependencies = [ "solana-cli-output", "solana-compute-budget", "solana-core", + "solana-feature-set", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -6708,6 +6732,7 @@ dependencies = [ "rayon", "rustls", "solana-entry", + "solana-feature-set", "solana-gossip", "solana-ledger", "solana-measure", @@ -6784,6 +6809,7 @@ dependencies = [ "semver", "serde", "serde_derive", + "solana-feature-set", "solana-sanitize", "solana-sdk", "solana-serde-varint", @@ -6811,6 +6837,7 @@ dependencies = [ "num-traits", "serde", "serde_derive", + "solana-feature-set", "solana-metrics", "solana-program", "solana-program-runtime", @@ -6887,6 +6914,7 @@ dependencies = [ "bytemuck", "num-derive", "num-traits", + "solana-feature-set", "solana-log-collector", "solana-program-runtime", "solana-sdk", diff --git a/programs/sbf/Cargo.toml b/programs/sbf/Cargo.toml index a82a5efa92fa4e..7a60f3a55d6e3b 100644 --- a/programs/sbf/Cargo.toml +++ b/programs/sbf/Cargo.toml @@ -38,6 +38,7 @@ solana-cli-output = { path = "../../cli-output", version = "=2.1.0" } solana-compute-budget = { path = "../../compute-budget", version = "=2.1.0" } solana-curve25519 = { path = "../../curves/curve25519", version = "=2.1.0" } solana-decode-error = { path = "../../sdk/decode-error", version = "=2.1.0" } +solana-feature-set = { path = "../../sdk/feature-set", version = "=2.1.0" } solana-fee = { path = "../../fee", version = "=2.1.0" } solana-ledger = { path = "../../ledger", version = "=2.1.0" } solana-log-collector = { path = "../../log-collector", version = "=2.1.0" } @@ -108,6 +109,7 @@ solana-accounts-db = { workspace = true } solana-bpf-loader-program = { workspace = true } solana-cli-output = { workspace = true } solana-compute-budget = { workspace = true } +solana-feature-set = { workspace = true } solana-fee = { workspace = true } solana-ledger = { workspace = true } solana-log-collector = { workspace = true } diff --git a/programs/sbf/benches/bpf_loader.rs b/programs/sbf/benches/bpf_loader.rs index ab5e950faab874..7475e9ea2d0f53 100644 --- a/programs/sbf/benches/bpf_loader.rs +++ b/programs/sbf/benches/bpf_loader.rs @@ -8,9 +8,8 @@ )] use { - solana_rbpf::memory_region::MemoryState, - solana_sdk::{feature_set::bpf_account_data_direct_mapping, signer::keypair::Keypair}, - std::slice, + solana_feature_set::bpf_account_data_direct_mapping, solana_rbpf::memory_region::MemoryState, + solana_sdk::signer::keypair::Keypair, std::slice, }; extern crate test; @@ -22,6 +21,7 @@ use { syscalls::create_program_runtime_environment_v1, }, solana_compute_budget::compute_budget::ComputeBudget, + solana_feature_set::FeatureSet, solana_measure::measure::Measure, solana_program_runtime::invoke_context::InvokeContext, solana_rbpf::{ @@ -39,7 +39,6 @@ use { bpf_loader, client::SyncClient, entrypoint::SUCCESS, - feature_set::FeatureSet, instruction::{AccountMeta, Instruction}, message::Message, native_loader, diff --git a/programs/sbf/tests/programs.rs b/programs/sbf/tests/programs.rs index 1b44bacfb55ffa..19f6b943a51769 100644 --- a/programs/sbf/tests/programs.rs +++ b/programs/sbf/tests/programs.rs @@ -15,6 +15,7 @@ use { parse_bpf_upgradeable_loader, BpfUpgradeableLoaderAccountType, }, solana_compute_budget::compute_budget::ComputeBudget, + solana_feature_set::{self as feature_set, FeatureSet}, solana_ledger::token_balances::collect_token_balances, solana_program_runtime::invoke_context::mock_process_instruction, solana_rbpf::vm::ContextObject, @@ -44,7 +45,6 @@ use { clock::{UnixTimestamp, MAX_PROCESSING_AGE}, compute_budget::ComputeBudgetInstruction, entrypoint::MAX_PERMITTED_DATA_INCREASE, - feature_set::{self, FeatureSet}, fee::{FeeBudgetLimits, FeeStructure}, fee_calculator::FeeRateGovernor, genesis_config::ClusterType, @@ -334,7 +334,7 @@ fn test_program_sbf_loader_deprecated() { } = create_genesis_config(50); genesis_config .accounts - .remove(&solana_sdk::feature_set::disable_deploy_of_alloc_free_syscall::id()) + .remove(&solana_feature_set::disable_deploy_of_alloc_free_syscall::id()) .unwrap(); let (bank, bank_forks) = Bank::new_with_bank_forks_for_tests(&genesis_config); let program_id = create_program(&bank, &bpf_loader_deprecated::id(), program); @@ -2244,9 +2244,7 @@ fn test_program_sbf_disguised_as_sbf_loader() { .. } = create_genesis_config(50); let mut bank = Bank::new_for_tests(&genesis_config); - bank.deactivate_feature( - &solana_sdk::feature_set::remove_bpf_loader_incorrect_program_id::id(), - ); + bank.deactivate_feature(&solana_feature_set::remove_bpf_loader_incorrect_program_id::id()); let (bank, bank_forks) = bank.wrap_with_bank_forks_for_tests(); let mut bank_client = BankClient::new_shared(bank); let authority_keypair = Keypair::new(); diff --git a/programs/sbf/tests/sysvar.rs b/programs/sbf/tests/sysvar.rs index 92213bb36d33bb..c0ab5321c5bf4f 100644 --- a/programs/sbf/tests/sysvar.rs +++ b/programs/sbf/tests/sysvar.rs @@ -1,6 +1,7 @@ #![cfg(feature = "sbf_rust")] use { + solana_feature_set::disable_fees_sysvar, solana_runtime::{ bank::Bank, bank_client::BankClient, @@ -8,7 +9,6 @@ use { loader_utils::load_upgradeable_program_and_advance_slot, }, solana_sdk::{ - feature_set::disable_fees_sysvar, instruction::{AccountMeta, Instruction}, message::Message, pubkey::Pubkey, diff --git a/programs/stake-tests/Cargo.toml b/programs/stake-tests/Cargo.toml index 7e3a461ba09e2b..f73a7a4195dd0a 100644 --- a/programs/stake-tests/Cargo.toml +++ b/programs/stake-tests/Cargo.toml @@ -14,6 +14,7 @@ edition = { workspace = true } [dev-dependencies] assert_matches = { workspace = true } bincode = { workspace = true } +solana-feature-set = { workspace = true } solana-program-test = { workspace = true } solana-sdk = { workspace = true } solana-vote-program = { workspace = true } diff --git a/programs/stake-tests/tests/test_move_stake_and_lamports.rs b/programs/stake-tests/tests/test_move_stake_and_lamports.rs index 0ef36753337c83..8991d3c5fe6bea 100644 --- a/programs/stake-tests/tests/test_move_stake_and_lamports.rs +++ b/programs/stake-tests/tests/test_move_stake_and_lamports.rs @@ -6,11 +6,13 @@ // in other words the utility functions in this file should not be broken out into modules or used elsewhere use { + solana_feature_set::{ + move_stake_and_move_lamports_ixs, stake_raise_minimum_delegation_to_1_sol, + }, solana_program_test::*, solana_sdk::{ account::Account as SolanaAccount, entrypoint::ProgramResult, - feature_set::{move_stake_and_move_lamports_ixs, stake_raise_minimum_delegation_to_1_sol}, instruction::Instruction, program_error::ProgramError, pubkey::Pubkey, diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 16f1e746698e71..d5a14a98d4d0ec 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -13,6 +13,7 @@ edition = { workspace = true } bincode = { workspace = true } log = { workspace = true } solana-config-program = { workspace = true } +solana-feature-set = { workspace = true } solana-log-collector = { workspace = true } solana-program-runtime = { workspace = true } solana-sdk = { workspace = true } diff --git a/programs/stake/src/lib.rs b/programs/stake/src/lib.rs index 8a1d888bfc22a2..4ea8df91501a85 100644 --- a/programs/stake/src/lib.rs +++ b/programs/stake/src/lib.rs @@ -5,10 +5,9 @@ note = "Please use `solana_sdk::stake::program::id` or `solana_program::stake::program::id` instead" )] pub use solana_sdk::stake::program::{check_id, id}; -use solana_sdk::{ - feature_set::{self, FeatureSet}, - genesis_config::GenesisConfig, - native_token::LAMPORTS_PER_SOL, +use { + solana_feature_set::{self as feature_set, FeatureSet}, + solana_sdk::{genesis_config::GenesisConfig, native_token::LAMPORTS_PER_SOL}, }; pub mod config; diff --git a/programs/stake/src/stake_instruction.rs b/programs/stake/src/stake_instruction.rs index 086a1bf044e025..00ecfbf56c4715 100644 --- a/programs/stake/src/stake_instruction.rs +++ b/programs/stake/src/stake_instruction.rs @@ -9,7 +9,6 @@ use { declare_process_instruction, sysvar_cache::get_sysvar_with_account_check, }, solana_sdk::{ - feature_set, instruction::InstructionError, program_utils::limited_deserialize, pubkey::Pubkey, @@ -340,7 +339,7 @@ declare_process_instruction!(Entrypoint, DEFAULT_COMPUTE_UNITS, |invoke_context| StakeInstruction::MoveStake(lamports) => { if invoke_context .get_feature_set() - .is_active(&feature_set::move_stake_and_move_lamports_ixs::id()) + .is_active(&solana_feature_set::move_stake_and_move_lamports_ixs::id()) { instruction_context.check_number_of_instruction_accounts(3)?; move_stake( @@ -359,7 +358,7 @@ declare_process_instruction!(Entrypoint, DEFAULT_COMPUTE_UNITS, |invoke_context| StakeInstruction::MoveLamports(lamports) => { if invoke_context .get_feature_set() - .is_active(&feature_set::move_stake_and_move_lamports_ixs::id()) + .is_active(&solana_feature_set::move_stake_and_move_lamports_ixs::id()) { instruction_context.check_number_of_instruction_accounts(3)?; move_lamports( @@ -391,6 +390,7 @@ mod tests { }, assert_matches::assert_matches, bincode::serialize, + solana_feature_set::FeatureSet, solana_program_runtime::invoke_context::mock_process_instruction, solana_sdk::{ account::{ @@ -400,7 +400,6 @@ mod tests { account_utils::StateMut, clock::{Clock, Epoch, UnixTimestamp}, epoch_schedule::EpochSchedule, - feature_set::FeatureSet, instruction::{AccountMeta, Instruction}, pubkey::Pubkey, rent::Rent, @@ -437,7 +436,7 @@ mod tests { let mut feature_set = feature_set_all_enabled(); Arc::get_mut(&mut feature_set) .unwrap() - .deactivate(&feature_set::stake_raise_minimum_delegation_to_1_sol::id()); + .deactivate(&solana_feature_set::stake_raise_minimum_delegation_to_1_sol::id()); feature_set } diff --git a/programs/stake/src/stake_state.rs b/programs/stake/src/stake_state.rs index 6bb26e288db8f2..8dc1e728a2b94d 100644 --- a/programs/stake/src/stake_state.rs +++ b/programs/stake/src/stake_state.rs @@ -9,13 +9,13 @@ )] pub use solana_sdk::stake::state::*; use { + solana_feature_set::FeatureSet, solana_log_collector::ic_msg, solana_program_runtime::invoke_context::InvokeContext, solana_sdk::{ account::{AccountSharedData, ReadableAccount}, account_utils::StateMut, clock::{Clock, Epoch}, - feature_set::FeatureSet, instruction::{checked_add, InstructionError}, pubkey::Pubkey, rent::Rent, diff --git a/programs/system/Cargo.toml b/programs/system/Cargo.toml index a7e464fe5c3f9a..f1c67e1aa9e393 100644 --- a/programs/system/Cargo.toml +++ b/programs/system/Cargo.toml @@ -22,6 +22,7 @@ solana-type-overrides = { workspace = true } [dev-dependencies] assert_matches = { workspace = true } solana-compute-budget = { workspace = true } +solana-feature-set = { workspace = true } solana-logger = { workspace = true } [lib] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 2a8462cd178ecf..d76f5e1980818b 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -16,6 +16,7 @@ num-derive = { workspace = true } num-traits = { workspace = true } serde = { workspace = true } serde_derive = { workspace = true } +solana-feature-set = { workspace = true } solana-frozen-abi = { workspace = true, optional = true } solana-frozen-abi-macro = { workspace = true, optional = true } solana-metrics = { workspace = true } diff --git a/programs/vote/src/vote_processor.rs b/programs/vote/src/vote_processor.rs index ea6514420cd0d2..8cb4db468f9b72 100644 --- a/programs/vote/src/vote_processor.rs +++ b/programs/vote/src/vote_processor.rs @@ -3,13 +3,13 @@ use { crate::vote_state, log::*, + solana_feature_set as feature_set, solana_program::vote::{instruction::VoteInstruction, program::id, state::VoteAuthorize}, solana_program_runtime::{ declare_process_instruction, invoke_context::InvokeContext, sysvar_cache::get_sysvar_with_account_check, }, solana_sdk::{ - feature_set, instruction::InstructionError, program_utils::limited_deserialize, pubkey::Pubkey, diff --git a/programs/vote/src/vote_state/mod.rs b/programs/vote/src/vote_state/mod.rs index c4ea689fc9d3bf..24b480c6198d84 100644 --- a/programs/vote/src/vote_state/mod.rs +++ b/programs/vote/src/vote_state/mod.rs @@ -4,12 +4,12 @@ pub use solana_program::vote::state::{vote_state_versions::*, *}; use { log::*, serde_derive::{Deserialize, Serialize}, + solana_feature_set::{self as feature_set, FeatureSet}, solana_program::vote::{error::VoteError, program::id}, solana_sdk::{ account::{AccountSharedData, ReadableAccount, WritableAccount}, clock::{Epoch, Slot, UnixTimestamp}, epoch_schedule::EpochSchedule, - feature_set::{self, FeatureSet}, hash::Hash, instruction::InstructionError, pubkey::Pubkey, diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index afbda6f1b8161c..2b8ce98f2ac2f3 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -12,6 +12,7 @@ edition = { workspace = true } bytemuck = { workspace = true } num-derive = { workspace = true } num-traits = { workspace = true } +solana-feature-set = { workspace = true } solana-log-collector = { workspace = true } solana-program-runtime = { workspace = true } solana-sdk = { workspace = true } diff --git a/programs/zk-token-proof/src/lib.rs b/programs/zk-token-proof/src/lib.rs index f1fc5bca28c1fc..15d292b29a4ef4 100644 --- a/programs/zk-token-proof/src/lib.rs +++ b/programs/zk-token-proof/src/lib.rs @@ -2,10 +2,10 @@ use { bytemuck::Pod, + solana_feature_set as feature_set, solana_log_collector::ic_msg, solana_program_runtime::{declare_process_instruction, invoke_context::InvokeContext}, solana_sdk::{ - feature_set, instruction::{InstructionError, TRANSACTION_LEVEL_STACK_HEIGHT}, system_program, }, diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 2a0c5c480da1b0..f7bc16bd6f9bd9 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -34,6 +34,7 @@ solana-accounts-db = { workspace = true } solana-client = { workspace = true } solana-entry = { workspace = true } solana-faucet = { workspace = true } +solana-feature-set = { workspace = true } solana-gossip = { workspace = true } solana-inline-spl = { workspace = true } solana-ledger = { workspace = true } diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index f0294540a5e427..3c8b1c1217ae64 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -22,6 +22,7 @@ use { solana_client::connection_cache::{ConnectionCache, Protocol}, solana_entry::entry::Entry, solana_faucet::faucet::request_airdrop_transaction, + solana_feature_set as feature_set, solana_gossip::{cluster_info::ClusterInfo, contact_info::ContactInfo}, solana_inline_spl::{ token::{SPL_TOKEN_ACCOUNT_MINT_OFFSET, SPL_TOKEN_ACCOUNT_OWNER_OFFSET}, @@ -67,7 +68,6 @@ use { epoch_rewards_hasher::EpochRewardsHasher, epoch_schedule::EpochSchedule, exit::Exit, - feature_set, hash::Hash, message::SanitizedMessage, pubkey::{Pubkey, PUBKEY_BYTES}, diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 9afeea8c469f02..5a740f32805aed 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -54,6 +54,7 @@ solana-compute-budget = { workspace = true } solana-compute-budget-program = { workspace = true } solana-config-program = { workspace = true } solana-cost-model = { workspace = true } +solana-feature-set = { workspace = true } solana-fee = { workspace = true } solana-frozen-abi = { workspace = true, optional = true } solana-frozen-abi-macro = { workspace = true, optional = true } diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index f6f4f8edee9bb5..44d8195c993c5a 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -92,6 +92,10 @@ use { }, solana_compute_budget::compute_budget::ComputeBudget, solana_cost_model::cost_tracker::CostTracker, + solana_feature_set::{ + self as feature_set, remove_rounding_in_fee_calculation, reward_full_priority_fee, + FeatureSet, + }, solana_measure::{measure::Measure, measure_time, measure_us}, solana_program_runtime::{ invoke_context::BuiltinFunctionWithContext, loaded_programs::ProgramCacheEntry, @@ -113,9 +117,6 @@ use { epoch_info::EpochInfo, epoch_schedule::EpochSchedule, feature, - feature_set::{ - self, remove_rounding_in_fee_calculation, reward_full_priority_fee, FeatureSet, - }, fee::{FeeBudgetLimits, FeeDetails, FeeStructure}, fee_calculator::FeeRateGovernor, genesis_config::{ClusterType, GenesisConfig}, diff --git a/runtime/src/bank/builtin_programs.rs b/runtime/src/bank/builtin_programs.rs index 7c12bb23fbd6b0..a0715d0c488336 100644 --- a/runtime/src/bank/builtin_programs.rs +++ b/runtime/src/bank/builtin_programs.rs @@ -2,9 +2,8 @@ mod tests { use { crate::bank::*, - solana_sdk::{ - ed25519_program, feature_set::FeatureSet, genesis_config::create_genesis_config, - }, + solana_feature_set::FeatureSet, + solana_sdk::{ed25519_program, genesis_config::create_genesis_config}, }; #[test] @@ -75,13 +74,13 @@ mod tests_core_bpf_migration { tests::{create_genesis_config, new_bank_from_parent_with_bank_forks}, Bank, }, + solana_feature_set::FeatureSet, solana_program_runtime::loaded_programs::ProgramCacheEntry, solana_sdk::{ account::{AccountSharedData, ReadableAccount, WritableAccount}, bpf_loader_upgradeable::{self, get_program_data_address, UpgradeableLoaderState}, epoch_schedule::EpochSchedule, feature::{self, Feature}, - feature_set::FeatureSet, instruction::{AccountMeta, Instruction}, message::Message, native_loader, diff --git a/runtime/src/bank/builtins/core_bpf_migration/mod.rs b/runtime/src/bank/builtins/core_bpf_migration/mod.rs index 6fecbdeba3640e..023f27ec8e0794 100644 --- a/runtime/src/bank/builtins/core_bpf_migration/mod.rs +++ b/runtime/src/bank/builtins/core_bpf_migration/mod.rs @@ -322,7 +322,7 @@ impl Bank { /// `apply_feature_activations` function, similar to below. /// /// ```ignore - /// if new_feature_activations.contains(&feature_set::test_upgrade_program::id()) { + /// if new_feature_activations.contains(&solana_feature_set::test_upgrade_program::id()) { /// self.upgrade_core_bpf_program( /// &core_bpf_program_address, /// &source_buffer_address, diff --git a/runtime/src/bank/builtins/core_bpf_migration/target_builtin.rs b/runtime/src/bank/builtins/core_bpf_migration/target_builtin.rs index b89a951ffd2cdf..ad565909ccee7b 100644 --- a/runtime/src/bank/builtins/core_bpf_migration/target_builtin.rs +++ b/runtime/src/bank/builtins/core_bpf_migration/target_builtin.rs @@ -75,10 +75,11 @@ mod tests { super::*, crate::bank::{tests::create_simple_test_bank, ApplyFeatureActivationsCaller}, assert_matches::assert_matches, + solana_feature_set as feature_set, solana_sdk::{ account::Account, bpf_loader_upgradeable::{UpgradeableLoaderState, ID as BPF_LOADER_UPGRADEABLE_ID}, - feature, feature_set, + feature, }, test_case::test_case, }; diff --git a/runtime/src/bank/builtins/mod.rs b/runtime/src/bank/builtins/mod.rs index 6e1797be11a8cb..99dfa5a0cfa836 100644 --- a/runtime/src/bank/builtins/mod.rs +++ b/runtime/src/bank/builtins/mod.rs @@ -4,7 +4,8 @@ pub mod prototypes; pub use prototypes::{BuiltinPrototype, StatelessBuiltinPrototype}; use { core_bpf_migration::CoreBpfMigrationConfig, - solana_sdk::{bpf_loader, bpf_loader_deprecated, bpf_loader_upgradeable, feature_set}, + solana_feature_set as feature_set, + solana_sdk::{bpf_loader, bpf_loader_deprecated, bpf_loader_upgradeable}, }; macro_rules! testable_prototype { @@ -56,7 +57,7 @@ pub static BUILTINS: &[BuiltinPrototype] = &[ core_bpf_migration_config: Some(CoreBpfMigrationConfig { source_buffer_address: buffer_accounts::config_program::id(), upgrade_authority_address: None, - feature_id: solana_sdk::feature_set::migrate_config_program_to_core_bpf::id(), + feature_id: solana_feature_set::migrate_config_program_to_core_bpf::id(), migration_target: core_bpf_migration::CoreBpfMigrationTargetType::Builtin, datapoint_name: "migrate_builtin_to_core_bpf_config_program", }), @@ -97,8 +98,7 @@ pub static BUILTINS: &[BuiltinPrototype] = &[ core_bpf_migration_config: Some(CoreBpfMigrationConfig { source_buffer_address: buffer_accounts::address_lookup_table_program::id(), upgrade_authority_address: None, - feature_id: - solana_sdk::feature_set::migrate_address_lookup_table_program_to_core_bpf::id(), + feature_id: solana_feature_set::migrate_address_lookup_table_program_to_core_bpf::id(), migration_target: core_bpf_migration::CoreBpfMigrationTargetType::Builtin, datapoint_name: "migrate_builtin_to_core_bpf_address_lookup_table_program", }), @@ -134,7 +134,7 @@ pub static STATELESS_BUILTINS: &[StatelessBuiltinPrototype] = &[StatelessBuiltin core_bpf_migration_config: Some(CoreBpfMigrationConfig { source_buffer_address: buffer_accounts::feature_gate_program::id(), upgrade_authority_address: None, - feature_id: solana_sdk::feature_set::migrate_feature_gate_program_to_core_bpf::id(), + feature_id: solana_feature_set::migrate_feature_gate_program_to_core_bpf::id(), migration_target: core_bpf_migration::CoreBpfMigrationTargetType::Stateless, datapoint_name: "migrate_stateless_to_core_bpf_feature_gate_program", }), diff --git a/runtime/src/bank/fee_distribution.rs b/runtime/src/bank/fee_distribution.rs index 89d0add35df7b0..e0be18d5e609fc 100644 --- a/runtime/src/bank/fee_distribution.rs +++ b/runtime/src/bank/fee_distribution.rs @@ -2,9 +2,9 @@ use { super::Bank, crate::bank::CollectorFeeDetails, log::{debug, warn}, + solana_feature_set::{remove_rounding_in_fee_calculation, reward_full_priority_fee}, solana_sdk::{ account::{ReadableAccount, WritableAccount}, - feature_set::{remove_rounding_in_fee_calculation, reward_full_priority_fee}, fee::FeeBudgetLimits, pubkey::Pubkey, reward_info::RewardInfo, diff --git a/runtime/src/bank/partitioned_epoch_rewards/distribution.rs b/runtime/src/bank/partitioned_epoch_rewards/distribution.rs index 8a0fa2af2b3086..392d9c51630f50 100644 --- a/runtime/src/bank/partitioned_epoch_rewards/distribution.rs +++ b/runtime/src/bank/partitioned_epoch_rewards/distribution.rs @@ -243,7 +243,6 @@ mod tests { solana_sdk::{ account::from_account, epoch_schedule::EpochSchedule, - feature_set, hash::Hash, native_token::LAMPORTS_PER_SOL, rent::Rent, @@ -349,7 +348,7 @@ mod tests { create_genesis_config(1_000_000 * LAMPORTS_PER_SOL); genesis_config.epoch_schedule = EpochSchedule::custom(432000, 432000, false); let mut bank = Bank::new_for_tests(&genesis_config); - bank.activate_feature(&feature_set::partitioned_epoch_rewards_superfeature::id()); + bank.activate_feature(&solana_feature_set::partitioned_epoch_rewards_superfeature::id()); // Set up epoch_rewards sysvar with rewards with 1e9 lamports to distribute. let total_rewards = 1_000_000_000; diff --git a/runtime/src/bank/partitioned_epoch_rewards/mod.rs b/runtime/src/bank/partitioned_epoch_rewards/mod.rs index 894b058ca2f8a8..c3208a0e3e4f98 100644 --- a/runtime/src/bank/partitioned_epoch_rewards/mod.rs +++ b/runtime/src/bank/partitioned_epoch_rewards/mod.rs @@ -10,10 +10,10 @@ use { solana_accounts_db::{ partitioned_rewards::PartitionedEpochRewardsConfig, stake_rewards::StakeReward, }, + solana_feature_set as feature_set, solana_sdk::{ account::AccountSharedData, account_utils::StateMut, - feature_set, pubkey::Pubkey, reward_info::RewardInfo, stake::state::{Delegation, Stake, StakeStateV2}, diff --git a/runtime/src/bank/partitioned_epoch_rewards/sysvar.rs b/runtime/src/bank/partitioned_epoch_rewards/sysvar.rs index 624630f39712c9..3b3a485679c3ab 100644 --- a/runtime/src/bank/partitioned_epoch_rewards/sysvar.rs +++ b/runtime/src/bank/partitioned_epoch_rewards/sysvar.rs @@ -133,7 +133,7 @@ mod tests { super::*, crate::bank::tests::create_genesis_config, solana_sdk::{ - account::ReadableAccount, epoch_schedule::EpochSchedule, feature_set, + account::ReadableAccount, epoch_schedule::EpochSchedule, native_token::LAMPORTS_PER_SOL, pubkey::Pubkey, }, std::sync::Arc, @@ -148,7 +148,7 @@ mod tests { create_genesis_config(1_000_000 * LAMPORTS_PER_SOL); genesis_config.epoch_schedule = EpochSchedule::custom(432000, 432000, false); let mut bank = Bank::new_for_tests(&genesis_config); - bank.activate_feature(&feature_set::partitioned_epoch_rewards_superfeature::id()); + bank.activate_feature(&solana_feature_set::partitioned_epoch_rewards_superfeature::id()); let total_rewards = 1_000_000_000; let num_partitions = 2; // num_partitions is arbitrary and unimportant for this test diff --git a/runtime/src/bank/sysvar_cache.rs b/runtime/src/bank/sysvar_cache.rs index 1c7cea037d23af..35f23fb9222bd2 100644 --- a/runtime/src/bank/sysvar_cache.rs +++ b/runtime/src/bank/sysvar_cache.rs @@ -5,8 +5,9 @@ use super::Bank; mod tests { use { super::*, + solana_feature_set as feature_set, solana_sdk::{ - feature_set, genesis_config::create_genesis_config, pubkey::Pubkey, + genesis_config::create_genesis_config, pubkey::Pubkey, sysvar::epoch_rewards::EpochRewards, }, solana_stake_program::points::PointValue, diff --git a/runtime/src/bank/tests.rs b/runtime/src/bank/tests.rs index 56612762743f97..ec62293b28f105 100644 --- a/runtime/src/bank/tests.rs +++ b/runtime/src/bank/tests.rs @@ -38,6 +38,7 @@ use { compute_budget_limits::{self, MAX_COMPUTE_UNIT_LIMIT}, prioritization_fee::{PrioritizationFeeDetails, PrioritizationFeeType}, }, + solana_feature_set::{self as feature_set, FeatureSet}, solana_inline_spl::token, solana_logger, solana_program_runtime::{ @@ -63,7 +64,6 @@ use { entrypoint::MAX_PERMITTED_DATA_INCREASE, epoch_schedule::{EpochSchedule, MINIMUM_SLOTS_PER_EPOCH}, feature::{self, Feature}, - feature_set::{self, FeatureSet}, fee::FeeStructure, fee_calculator::FeeRateGovernor, genesis_config::{ClusterType, GenesisConfig}, @@ -1645,9 +1645,9 @@ fn test_rent_eager_collect_rent_in_partition(should_collect_rent: bool) { solana_logger::setup(); let (mut genesis_config, _mint_keypair) = create_genesis_config(1_000_000); for feature_id in FeatureSet::default().inactive { - if feature_id != solana_sdk::feature_set::skip_rent_rewrites::id() + if feature_id != solana_feature_set::skip_rent_rewrites::id() && (!should_collect_rent - || feature_id != solana_sdk::feature_set::disable_rent_fees_collection::id()) + || feature_id != solana_feature_set::disable_rent_fees_collection::id()) { activate_feature(&mut genesis_config, feature_id); } @@ -6343,7 +6343,7 @@ fn test_bank_hash_consistency() { genesis_config.rent.burn_percent = 100; activate_feature( &mut genesis_config, - solana_sdk::feature_set::set_exempt_rent_epoch_max::id(), + solana_feature_set::set_exempt_rent_epoch_max::id(), ); let mut bank = Arc::new(Bank::new_for_tests(&genesis_config)); @@ -11576,7 +11576,7 @@ fn test_accounts_data_size_and_rent_collection(should_collect_rent: bool) { if should_collect_rent { genesis_config .accounts - .remove(&solana_sdk::feature_set::disable_rent_fees_collection::id()); + .remove(&solana_feature_set::disable_rent_fees_collection::id()); } let bank = Arc::new(Bank::new_for_tests(&genesis_config)); diff --git a/runtime/src/genesis_utils.rs b/runtime/src/genesis_utils.rs index aac8f56a75b699..0e91fe08616acd 100644 --- a/runtime/src/genesis_utils.rs +++ b/runtime/src/genesis_utils.rs @@ -1,9 +1,9 @@ use { log::*, + solana_feature_set::{FeatureSet, FEATURE_NAMES}, solana_sdk::{ account::{Account, AccountSharedData}, feature::{self, Feature}, - feature_set::{FeatureSet, FEATURE_NAMES}, fee_calculator::FeeRateGovernor, genesis_config::{ClusterType, GenesisConfig}, native_token::sol_to_lamports, diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index eab3e27d1a88de..a14c58db882378 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -40,6 +40,7 @@ frozen-abi = [ "dep:rustc_version", "dep:solana-frozen-abi", "dep:solana-frozen-abi-macro", + "solana-feature-set/frozen-abi", "solana-program/frozen-abi", "solana-short-vec/frozen-abi", "solana-signature/frozen-abi" @@ -86,6 +87,7 @@ siphasher = { workspace = true } solana-bn254 = { workspace = true } solana-decode-error = { workspace = true } solana-derivation-path = { workspace = true } +solana-feature-set = { workspace = true } solana-frozen-abi = { workspace = true, optional = true } solana-frozen-abi-macro = { workspace = true, optional = true } solana-program = { workspace = true } diff --git a/sdk/benches/ed25519_instructions.rs b/sdk/benches/ed25519_instructions.rs index 4dcbbc0e035353..0bd7273357f6cd 100644 --- a/sdk/benches/ed25519_instructions.rs +++ b/sdk/benches/ed25519_instructions.rs @@ -3,9 +3,9 @@ extern crate test; use { rand0_7::{thread_rng, Rng}, + solana_feature_set::FeatureSet, solana_sdk::{ ed25519_instruction::new_ed25519_instruction, - feature_set::FeatureSet, hash::Hash, signature::{Keypair, Signer}, transaction::Transaction, diff --git a/sdk/benches/secp256k1_instructions.rs b/sdk/benches/secp256k1_instructions.rs index 339c50dc639aef..8940bda5a99eb0 100644 --- a/sdk/benches/secp256k1_instructions.rs +++ b/sdk/benches/secp256k1_instructions.rs @@ -3,8 +3,8 @@ extern crate test; use { rand0_7::{thread_rng, Rng}, + solana_feature_set::FeatureSet, solana_sdk::{ - feature_set::FeatureSet, hash::Hash, secp256k1_instruction::new_secp256k1_instruction, signature::{Keypair, Signer}, diff --git a/sdk/feature-set/Cargo.toml b/sdk/feature-set/Cargo.toml new file mode 100644 index 00000000000000..02da9d0cc4f2f9 --- /dev/null +++ b/sdk/feature-set/Cargo.toml @@ -0,0 +1,32 @@ +[package] +name = "solana-feature-set" +description = "Solana runtime features." +documentation = "https://docs.rs/solana-feature-set" +version = { workspace = true } +authors = { workspace = true } +repository = { workspace = true } +homepage = { workspace = true } +license = { workspace = true } +edition = { workspace = true } + +[dependencies] +lazy_static = { workspace = true } +solana-frozen-abi = { workspace = true, optional = true } +solana-frozen-abi-macro = { workspace = true, optional = true } +solana-program = { workspace = true } + +[build-dependencies] +rustc_version = { workspace = true, optional = true } + +[features] +frozen-abi = [ + "dep:rustc_version", + "dep:solana-frozen-abi", + "dep:solana-frozen-abi-macro", +] + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[lints] +workspace = true diff --git a/sdk/feature-set/build.rs b/sdk/feature-set/build.rs new file mode 120000 index 00000000000000..84539eddaa6ded --- /dev/null +++ b/sdk/feature-set/build.rs @@ -0,0 +1 @@ +../../frozen-abi/build.rs \ No newline at end of file diff --git a/sdk/src/feature_set.rs b/sdk/feature-set/src/lib.rs similarity index 69% rename from sdk/src/feature_set.rs rename to sdk/feature-set/src/lib.rs index 02cc2594d30593..58bb290a1e653c 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/feature-set/src/lib.rs @@ -12,853 +12,855 @@ //! through these steps, the PR process will facilitate a keypair holder being picked. That //! person will generate the keypair, provide pubkey for PR, and ultimately enable the feature. //! 2. Add a public module for the feature, specifying keypair pubkey as the id with -//! `solana_sdk::declare_id!()` within the module. +//! `solana_program::declare_id!()` within the module. //! Additionally, add an entry to `FEATURE_NAMES` map. //! 3. Add desired logic to check for and switch on feature availability. //! //! For more information on how features are picked up, see comments for `Feature`. +#![cfg_attr(RUSTC_WITH_SPECIALIZATION, feature(min_specialization))] use { lazy_static::lazy_static, - solana_program::{epoch_schedule::EpochSchedule, stake_history::Epoch}, - solana_sdk::{ + solana_program::{ clock::Slot, + epoch_schedule::EpochSchedule, hash::{Hash, Hasher}, pubkey::Pubkey, + stake_history::Epoch, }, std::collections::{HashMap, HashSet}, }; pub mod deprecate_rewards_sysvar { - solana_sdk::declare_id!("GaBtBJvmS4Arjj5W1NmFcyvPjsHN38UGYDq2MDwbs9Qu"); + solana_program::declare_id!("GaBtBJvmS4Arjj5W1NmFcyvPjsHN38UGYDq2MDwbs9Qu"); } pub mod pico_inflation { - solana_sdk::declare_id!("4RWNif6C2WCNiKVW7otP4G7dkmkHGyKQWRpuZ1pxKU5m"); + solana_program::declare_id!("4RWNif6C2WCNiKVW7otP4G7dkmkHGyKQWRpuZ1pxKU5m"); } pub mod full_inflation { pub mod devnet_and_testnet { - solana_sdk::declare_id!("DT4n6ABDqs6w4bnfwrXT9rsprcPf6cdDga1egctaPkLC"); + solana_program::declare_id!("DT4n6ABDqs6w4bnfwrXT9rsprcPf6cdDga1egctaPkLC"); } pub mod mainnet { pub mod certusone { pub mod vote { - solana_sdk::declare_id!("BzBBveUDymEYoYzcMWNQCx3cd4jQs7puaVFHLtsbB6fm"); + solana_program::declare_id!("BzBBveUDymEYoYzcMWNQCx3cd4jQs7puaVFHLtsbB6fm"); } pub mod enable { - solana_sdk::declare_id!("7XRJcS5Ud5vxGB54JbK9N2vBZVwnwdBNeJW1ibRgD9gx"); + solana_program::declare_id!("7XRJcS5Ud5vxGB54JbK9N2vBZVwnwdBNeJW1ibRgD9gx"); } } } } pub mod secp256k1_program_enabled { - solana_sdk::declare_id!("E3PHP7w8kB7np3CTQ1qQ2tW3KCtjRSXBQgW9vM2mWv2Y"); + solana_program::declare_id!("E3PHP7w8kB7np3CTQ1qQ2tW3KCtjRSXBQgW9vM2mWv2Y"); } pub mod spl_token_v2_multisig_fix { - solana_sdk::declare_id!("E5JiFDQCwyC6QfT9REFyMpfK2mHcmv1GUDySU1Ue7TYv"); + solana_program::declare_id!("E5JiFDQCwyC6QfT9REFyMpfK2mHcmv1GUDySU1Ue7TYv"); } pub mod no_overflow_rent_distribution { - solana_sdk::declare_id!("4kpdyrcj5jS47CZb2oJGfVxjYbsMm2Kx97gFyZrxxwXz"); + solana_program::declare_id!("4kpdyrcj5jS47CZb2oJGfVxjYbsMm2Kx97gFyZrxxwXz"); } pub mod filter_stake_delegation_accounts { - solana_sdk::declare_id!("GE7fRxmW46K6EmCD9AMZSbnaJ2e3LfqCZzdHi9hmYAgi"); + solana_program::declare_id!("GE7fRxmW46K6EmCD9AMZSbnaJ2e3LfqCZzdHi9hmYAgi"); } pub mod require_custodian_for_locked_stake_authorize { - solana_sdk::declare_id!("D4jsDcXaqdW8tDAWn8H4R25Cdns2YwLneujSL1zvjW6R"); + solana_program::declare_id!("D4jsDcXaqdW8tDAWn8H4R25Cdns2YwLneujSL1zvjW6R"); } pub mod spl_token_v2_self_transfer_fix { - solana_sdk::declare_id!("BL99GYhdjjcv6ys22C9wPgn2aTVERDbPHHo4NbS3hgp7"); + solana_program::declare_id!("BL99GYhdjjcv6ys22C9wPgn2aTVERDbPHHo4NbS3hgp7"); } pub mod warp_timestamp_again { - solana_sdk::declare_id!("GvDsGDkH5gyzwpDhxNixx8vtx1kwYHH13RiNAPw27zXb"); + solana_program::declare_id!("GvDsGDkH5gyzwpDhxNixx8vtx1kwYHH13RiNAPw27zXb"); } pub mod check_init_vote_data { - solana_sdk::declare_id!("3ccR6QpxGYsAbWyfevEtBNGfWV4xBffxRj2tD6A9i39F"); + solana_program::declare_id!("3ccR6QpxGYsAbWyfevEtBNGfWV4xBffxRj2tD6A9i39F"); } pub mod secp256k1_recover_syscall_enabled { - solana_sdk::declare_id!("6RvdSWHh8oh72Dp7wMTS2DBkf3fRPtChfNrAo3cZZoXJ"); + solana_program::declare_id!("6RvdSWHh8oh72Dp7wMTS2DBkf3fRPtChfNrAo3cZZoXJ"); } pub mod system_transfer_zero_check { - solana_sdk::declare_id!("BrTR9hzw4WBGFP65AJMbpAo64DcA3U6jdPSga9fMV5cS"); + solana_program::declare_id!("BrTR9hzw4WBGFP65AJMbpAo64DcA3U6jdPSga9fMV5cS"); } pub mod blake3_syscall_enabled { - solana_sdk::declare_id!("HTW2pSyErTj4BV6KBM9NZ9VBUJVxt7sacNWcf76wtzb3"); + solana_program::declare_id!("HTW2pSyErTj4BV6KBM9NZ9VBUJVxt7sacNWcf76wtzb3"); } pub mod dedupe_config_program_signers { - solana_sdk::declare_id!("8kEuAshXLsgkUEdcFVLqrjCGGHVWFW99ZZpxvAzzMtBp"); + solana_program::declare_id!("8kEuAshXLsgkUEdcFVLqrjCGGHVWFW99ZZpxvAzzMtBp"); } pub mod verify_tx_signatures_len { - solana_sdk::declare_id!("EVW9B5xD9FFK7vw1SBARwMA4s5eRo5eKJdKpsBikzKBz"); + solana_program::declare_id!("EVW9B5xD9FFK7vw1SBARwMA4s5eRo5eKJdKpsBikzKBz"); } pub mod vote_stake_checked_instructions { - solana_sdk::declare_id!("BcWknVcgvonN8sL4HE4XFuEVgfcee5MwxWPAgP6ZV89X"); + solana_program::declare_id!("BcWknVcgvonN8sL4HE4XFuEVgfcee5MwxWPAgP6ZV89X"); } pub mod rent_for_sysvars { - solana_sdk::declare_id!("BKCPBQQBZqggVnFso5nQ8rQ4RwwogYwjuUt9biBjxwNF"); + solana_program::declare_id!("BKCPBQQBZqggVnFso5nQ8rQ4RwwogYwjuUt9biBjxwNF"); } pub mod libsecp256k1_0_5_upgrade_enabled { - solana_sdk::declare_id!("DhsYfRjxfnh2g7HKJYSzT79r74Afa1wbHkAgHndrA1oy"); + solana_program::declare_id!("DhsYfRjxfnh2g7HKJYSzT79r74Afa1wbHkAgHndrA1oy"); } pub mod tx_wide_compute_cap { - solana_sdk::declare_id!("5ekBxc8itEnPv4NzGJtr8BVVQLNMQuLMNQQj7pHoLNZ9"); + solana_program::declare_id!("5ekBxc8itEnPv4NzGJtr8BVVQLNMQuLMNQQj7pHoLNZ9"); } pub mod spl_token_v2_set_authority_fix { - solana_sdk::declare_id!("FToKNBYyiF4ky9s8WsmLBXHCht17Ek7RXaLZGHzzQhJ1"); + solana_program::declare_id!("FToKNBYyiF4ky9s8WsmLBXHCht17Ek7RXaLZGHzzQhJ1"); } pub mod merge_nonce_error_into_system_error { - solana_sdk::declare_id!("21AWDosvp3pBamFW91KB35pNoaoZVTM7ess8nr2nt53B"); + solana_program::declare_id!("21AWDosvp3pBamFW91KB35pNoaoZVTM7ess8nr2nt53B"); } pub mod disable_fees_sysvar { - solana_sdk::declare_id!("JAN1trEUEtZjgXYzNBYHU9DYd7GnThhXfFP7SzPXkPsG"); + solana_program::declare_id!("JAN1trEUEtZjgXYzNBYHU9DYd7GnThhXfFP7SzPXkPsG"); } pub mod stake_merge_with_unmatched_credits_observed { - solana_sdk::declare_id!("meRgp4ArRPhD3KtCY9c5yAf2med7mBLsjKTPeVUHqBL"); + solana_program::declare_id!("meRgp4ArRPhD3KtCY9c5yAf2med7mBLsjKTPeVUHqBL"); } pub mod zk_token_sdk_enabled { - solana_sdk::declare_id!("zk1snxsc6Fh3wsGNbbHAJNHiJoYgF29mMnTSusGx5EJ"); + solana_program::declare_id!("zk1snxsc6Fh3wsGNbbHAJNHiJoYgF29mMnTSusGx5EJ"); } pub mod curve25519_syscall_enabled { - solana_sdk::declare_id!("7rcw5UtqgDTBBv2EcynNfYckgdAaH1MAsCjKgXMkN7Ri"); + solana_program::declare_id!("7rcw5UtqgDTBBv2EcynNfYckgdAaH1MAsCjKgXMkN7Ri"); } pub mod curve25519_restrict_msm_length { - solana_sdk::declare_id!("eca6zf6JJRjQsYYPkBHF3N32MTzur4n2WL4QiiacPCL"); + solana_program::declare_id!("eca6zf6JJRjQsYYPkBHF3N32MTzur4n2WL4QiiacPCL"); } pub mod versioned_tx_message_enabled { - solana_sdk::declare_id!("3KZZ6Ks1885aGBQ45fwRcPXVBCtzUvxhUTkwKMR41Tca"); + solana_program::declare_id!("3KZZ6Ks1885aGBQ45fwRcPXVBCtzUvxhUTkwKMR41Tca"); } pub mod libsecp256k1_fail_on_bad_count { - solana_sdk::declare_id!("8aXvSuopd1PUj7UhehfXJRg6619RHp8ZvwTyyJHdUYsj"); + solana_program::declare_id!("8aXvSuopd1PUj7UhehfXJRg6619RHp8ZvwTyyJHdUYsj"); } pub mod libsecp256k1_fail_on_bad_count2 { - solana_sdk::declare_id!("54KAoNiUERNoWWUhTWWwXgym94gzoXFVnHyQwPA18V9A"); + solana_program::declare_id!("54KAoNiUERNoWWUhTWWwXgym94gzoXFVnHyQwPA18V9A"); } pub mod instructions_sysvar_owned_by_sysvar { - solana_sdk::declare_id!("H3kBSaKdeiUsyHmeHqjJYNc27jesXZ6zWj3zWkowQbkV"); + solana_program::declare_id!("H3kBSaKdeiUsyHmeHqjJYNc27jesXZ6zWj3zWkowQbkV"); } pub mod stake_program_advance_activating_credits_observed { - solana_sdk::declare_id!("SAdVFw3RZvzbo6DvySbSdBnHN4gkzSTH9dSxesyKKPj"); + solana_program::declare_id!("SAdVFw3RZvzbo6DvySbSdBnHN4gkzSTH9dSxesyKKPj"); } pub mod credits_auto_rewind { - solana_sdk::declare_id!("BUS12ciZ5gCoFafUHWW8qaFMMtwFQGVxjsDheWLdqBE2"); + solana_program::declare_id!("BUS12ciZ5gCoFafUHWW8qaFMMtwFQGVxjsDheWLdqBE2"); } pub mod demote_program_write_locks { - solana_sdk::declare_id!("3E3jV7v9VcdJL8iYZUMax9DiDno8j7EWUVbhm9RtShj2"); + solana_program::declare_id!("3E3jV7v9VcdJL8iYZUMax9DiDno8j7EWUVbhm9RtShj2"); } pub mod ed25519_program_enabled { - solana_sdk::declare_id!("6ppMXNYLhVd7GcsZ5uV11wQEW7spppiMVfqQv5SXhDpX"); + solana_program::declare_id!("6ppMXNYLhVd7GcsZ5uV11wQEW7spppiMVfqQv5SXhDpX"); } pub mod return_data_syscall_enabled { - solana_sdk::declare_id!("DwScAzPUjuv65TMbDnFY7AgwmotzWy3xpEJMXM3hZFaB"); + solana_program::declare_id!("DwScAzPUjuv65TMbDnFY7AgwmotzWy3xpEJMXM3hZFaB"); } pub mod reduce_required_deploy_balance { - solana_sdk::declare_id!("EBeznQDjcPG8491sFsKZYBi5S5jTVXMpAKNDJMQPS2kq"); + solana_program::declare_id!("EBeznQDjcPG8491sFsKZYBi5S5jTVXMpAKNDJMQPS2kq"); } pub mod sol_log_data_syscall_enabled { - solana_sdk::declare_id!("6uaHcKPGUy4J7emLBgUTeufhJdiwhngW6a1R9B7c2ob9"); + solana_program::declare_id!("6uaHcKPGUy4J7emLBgUTeufhJdiwhngW6a1R9B7c2ob9"); } pub mod stakes_remove_delegation_if_inactive { - solana_sdk::declare_id!("HFpdDDNQjvcXnXKec697HDDsyk6tFoWS2o8fkxuhQZpL"); + solana_program::declare_id!("HFpdDDNQjvcXnXKec697HDDsyk6tFoWS2o8fkxuhQZpL"); } pub mod do_support_realloc { - solana_sdk::declare_id!("75m6ysz33AfLA5DDEzWM1obBrnPQRSsdVQ2nRmc8Vuu1"); + solana_program::declare_id!("75m6ysz33AfLA5DDEzWM1obBrnPQRSsdVQ2nRmc8Vuu1"); } pub mod prevent_calling_precompiles_as_programs { - solana_sdk::declare_id!("4ApgRX3ud6p7LNMJmsuaAcZY5HWctGPr5obAsjB3A54d"); + solana_program::declare_id!("4ApgRX3ud6p7LNMJmsuaAcZY5HWctGPr5obAsjB3A54d"); } pub mod optimize_epoch_boundary_updates { - solana_sdk::declare_id!("265hPS8k8xJ37ot82KEgjRunsUp5w4n4Q4VwwiN9i9ps"); + solana_program::declare_id!("265hPS8k8xJ37ot82KEgjRunsUp5w4n4Q4VwwiN9i9ps"); } pub mod remove_native_loader { - solana_sdk::declare_id!("HTTgmruMYRZEntyL3EdCDdnS6e4D5wRq1FA7kQsb66qq"); + solana_program::declare_id!("HTTgmruMYRZEntyL3EdCDdnS6e4D5wRq1FA7kQsb66qq"); } pub mod send_to_tpu_vote_port { - solana_sdk::declare_id!("C5fh68nJ7uyKAuYZg2x9sEQ5YrVf3dkW6oojNBSc3Jvo"); + solana_program::declare_id!("C5fh68nJ7uyKAuYZg2x9sEQ5YrVf3dkW6oojNBSc3Jvo"); } pub mod requestable_heap_size { - solana_sdk::declare_id!("CCu4boMmfLuqcmfTLPHQiUo22ZdUsXjgzPAURYaWt1Bw"); + solana_program::declare_id!("CCu4boMmfLuqcmfTLPHQiUo22ZdUsXjgzPAURYaWt1Bw"); } pub mod disable_fee_calculator { - solana_sdk::declare_id!("2jXx2yDmGysmBKfKYNgLj2DQyAQv6mMk2BPh4eSbyB4H"); + solana_program::declare_id!("2jXx2yDmGysmBKfKYNgLj2DQyAQv6mMk2BPh4eSbyB4H"); } pub mod add_compute_budget_program { - solana_sdk::declare_id!("4d5AKtxoh93Dwm1vHXUU3iRATuMndx1c431KgT2td52r"); + solana_program::declare_id!("4d5AKtxoh93Dwm1vHXUU3iRATuMndx1c431KgT2td52r"); } pub mod nonce_must_be_writable { - solana_sdk::declare_id!("BiCU7M5w8ZCMykVSyhZ7Q3m2SWoR2qrEQ86ERcDX77ME"); + solana_program::declare_id!("BiCU7M5w8ZCMykVSyhZ7Q3m2SWoR2qrEQ86ERcDX77ME"); } pub mod spl_token_v3_3_0_release { - solana_sdk::declare_id!("Ftok2jhqAqxUWEiCVRrfRs9DPppWP8cgTB7NQNKL88mS"); + solana_program::declare_id!("Ftok2jhqAqxUWEiCVRrfRs9DPppWP8cgTB7NQNKL88mS"); } pub mod leave_nonce_on_success { - solana_sdk::declare_id!("E8MkiWZNNPGU6n55jkGzyj8ghUmjCHRmDFdYYFYHxWhQ"); + solana_program::declare_id!("E8MkiWZNNPGU6n55jkGzyj8ghUmjCHRmDFdYYFYHxWhQ"); } pub mod reject_empty_instruction_without_program { - solana_sdk::declare_id!("9kdtFSrXHQg3hKkbXkQ6trJ3Ja1xpJ22CTFSNAciEwmL"); + solana_program::declare_id!("9kdtFSrXHQg3hKkbXkQ6trJ3Ja1xpJ22CTFSNAciEwmL"); } pub mod fixed_memcpy_nonoverlapping_check { - solana_sdk::declare_id!("36PRUK2Dz6HWYdG9SpjeAsF5F3KxnFCakA2BZMbtMhSb"); + solana_program::declare_id!("36PRUK2Dz6HWYdG9SpjeAsF5F3KxnFCakA2BZMbtMhSb"); } pub mod reject_non_rent_exempt_vote_withdraws { - solana_sdk::declare_id!("7txXZZD6Um59YoLMF7XUNimbMjsqsWhc7g2EniiTrmp1"); + solana_program::declare_id!("7txXZZD6Um59YoLMF7XUNimbMjsqsWhc7g2EniiTrmp1"); } pub mod evict_invalid_stakes_cache_entries { - solana_sdk::declare_id!("EMX9Q7TVFAmQ9V1CggAkhMzhXSg8ECp7fHrWQX2G1chf"); + solana_program::declare_id!("EMX9Q7TVFAmQ9V1CggAkhMzhXSg8ECp7fHrWQX2G1chf"); } pub mod allow_votes_to_directly_update_vote_state { - solana_sdk::declare_id!("Ff8b1fBeB86q8cjq47ZhsQLgv5EkHu3G1C99zjUfAzrq"); + solana_program::declare_id!("Ff8b1fBeB86q8cjq47ZhsQLgv5EkHu3G1C99zjUfAzrq"); } pub mod max_tx_account_locks { - solana_sdk::declare_id!("CBkDroRDqm8HwHe6ak9cguPjUomrASEkfmxEaZ5CNNxz"); + solana_program::declare_id!("CBkDroRDqm8HwHe6ak9cguPjUomrASEkfmxEaZ5CNNxz"); } pub mod require_rent_exempt_accounts { - solana_sdk::declare_id!("BkFDxiJQWZXGTZaJQxH7wVEHkAmwCgSEVkrvswFfRJPD"); + solana_program::declare_id!("BkFDxiJQWZXGTZaJQxH7wVEHkAmwCgSEVkrvswFfRJPD"); } pub mod filter_votes_outside_slot_hashes { - solana_sdk::declare_id!("3gtZPqvPpsbXZVCx6hceMfWxtsmrjMzmg8C7PLKSxS2d"); + solana_program::declare_id!("3gtZPqvPpsbXZVCx6hceMfWxtsmrjMzmg8C7PLKSxS2d"); } pub mod update_syscall_base_costs { - solana_sdk::declare_id!("2h63t332mGCCsWK2nqqqHhN4U9ayyqhLVFvczznHDoTZ"); + solana_program::declare_id!("2h63t332mGCCsWK2nqqqHhN4U9ayyqhLVFvczznHDoTZ"); } pub mod stake_deactivate_delinquent_instruction { - solana_sdk::declare_id!("437r62HoAdUb63amq3D7ENnBLDhHT2xY8eFkLJYVKK4x"); + solana_program::declare_id!("437r62HoAdUb63amq3D7ENnBLDhHT2xY8eFkLJYVKK4x"); } pub mod vote_withdraw_authority_may_change_authorized_voter { - solana_sdk::declare_id!("AVZS3ZsN4gi6Rkx2QUibYuSJG3S6QHib7xCYhG6vGJxU"); + solana_program::declare_id!("AVZS3ZsN4gi6Rkx2QUibYuSJG3S6QHib7xCYhG6vGJxU"); } pub mod spl_associated_token_account_v1_0_4 { - solana_sdk::declare_id!("FaTa4SpiaSNH44PGC4z8bnGVTkSRYaWvrBs3KTu8XQQq"); + solana_program::declare_id!("FaTa4SpiaSNH44PGC4z8bnGVTkSRYaWvrBs3KTu8XQQq"); } pub mod reject_vote_account_close_unless_zero_credit_epoch { - solana_sdk::declare_id!("ALBk3EWdeAg2WAGf6GPDUf1nynyNqCdEVmgouG7rpuCj"); + solana_program::declare_id!("ALBk3EWdeAg2WAGf6GPDUf1nynyNqCdEVmgouG7rpuCj"); } pub mod add_get_processed_sibling_instruction_syscall { - solana_sdk::declare_id!("CFK1hRCNy8JJuAAY8Pb2GjLFNdCThS2qwZNe3izzBMgn"); + solana_program::declare_id!("CFK1hRCNy8JJuAAY8Pb2GjLFNdCThS2qwZNe3izzBMgn"); } pub mod bank_transaction_count_fix { - solana_sdk::declare_id!("Vo5siZ442SaZBKPXNocthiXysNviW4UYPwRFggmbgAp"); + solana_program::declare_id!("Vo5siZ442SaZBKPXNocthiXysNviW4UYPwRFggmbgAp"); } pub mod disable_bpf_deprecated_load_instructions { - solana_sdk::declare_id!("3XgNukcZWf9o3HdA3fpJbm94XFc4qpvTXc8h1wxYwiPi"); + solana_program::declare_id!("3XgNukcZWf9o3HdA3fpJbm94XFc4qpvTXc8h1wxYwiPi"); } pub mod disable_bpf_unresolved_symbols_at_runtime { - solana_sdk::declare_id!("4yuaYAj2jGMGTh1sSmi4G2eFscsDq8qjugJXZoBN6YEa"); + solana_program::declare_id!("4yuaYAj2jGMGTh1sSmi4G2eFscsDq8qjugJXZoBN6YEa"); } pub mod record_instruction_in_transaction_context_push { - solana_sdk::declare_id!("3aJdcZqxoLpSBxgeYGjPwaYS1zzcByxUDqJkbzWAH1Zb"); + solana_program::declare_id!("3aJdcZqxoLpSBxgeYGjPwaYS1zzcByxUDqJkbzWAH1Zb"); } pub mod syscall_saturated_math { - solana_sdk::declare_id!("HyrbKftCdJ5CrUfEti6x26Cj7rZLNe32weugk7tLcWb8"); + solana_program::declare_id!("HyrbKftCdJ5CrUfEti6x26Cj7rZLNe32weugk7tLcWb8"); } pub mod check_physical_overlapping { - solana_sdk::declare_id!("nWBqjr3gpETbiaVj3CBJ3HFC5TMdnJDGt21hnvSTvVZ"); + solana_program::declare_id!("nWBqjr3gpETbiaVj3CBJ3HFC5TMdnJDGt21hnvSTvVZ"); } pub mod limit_secp256k1_recovery_id { - solana_sdk::declare_id!("7g9EUwj4j7CS21Yx1wvgWLjSZeh5aPq8x9kpoPwXM8n8"); + solana_program::declare_id!("7g9EUwj4j7CS21Yx1wvgWLjSZeh5aPq8x9kpoPwXM8n8"); } pub mod disable_deprecated_loader { - solana_sdk::declare_id!("GTUMCZ8LTNxVfxdrw7ZsDFTxXb7TutYkzJnFwinpE6dg"); + solana_program::declare_id!("GTUMCZ8LTNxVfxdrw7ZsDFTxXb7TutYkzJnFwinpE6dg"); } pub mod check_slice_translation_size { - solana_sdk::declare_id!("GmC19j9qLn2RFk5NduX6QXaDhVpGncVVBzyM8e9WMz2F"); + solana_program::declare_id!("GmC19j9qLn2RFk5NduX6QXaDhVpGncVVBzyM8e9WMz2F"); } pub mod stake_split_uses_rent_sysvar { - solana_sdk::declare_id!("FQnc7U4koHqWgRvFaBJjZnV8VPg6L6wWK33yJeDp4yvV"); + solana_program::declare_id!("FQnc7U4koHqWgRvFaBJjZnV8VPg6L6wWK33yJeDp4yvV"); } pub mod add_get_minimum_delegation_instruction_to_stake_program { - solana_sdk::declare_id!("St8k9dVXP97xT6faW24YmRSYConLbhsMJA4TJTBLmMT"); + solana_program::declare_id!("St8k9dVXP97xT6faW24YmRSYConLbhsMJA4TJTBLmMT"); } pub mod error_on_syscall_bpf_function_hash_collisions { - solana_sdk::declare_id!("8199Q2gMD2kwgfopK5qqVWuDbegLgpuFUFHCcUJQDN8b"); + solana_program::declare_id!("8199Q2gMD2kwgfopK5qqVWuDbegLgpuFUFHCcUJQDN8b"); } pub mod reject_callx_r10 { - solana_sdk::declare_id!("3NKRSwpySNwD3TvP5pHnRmkAQRsdkXWRr1WaQh8p4PWX"); + solana_program::declare_id!("3NKRSwpySNwD3TvP5pHnRmkAQRsdkXWRr1WaQh8p4PWX"); } pub mod drop_redundant_turbine_path { - solana_sdk::declare_id!("4Di3y24QFLt5QEUPZtbnjyfQKfm6ZMTfa6Dw1psfoMKU"); + solana_program::declare_id!("4Di3y24QFLt5QEUPZtbnjyfQKfm6ZMTfa6Dw1psfoMKU"); } pub mod executables_incur_cpi_data_cost { - solana_sdk::declare_id!("7GUcYgq4tVtaqNCKT3dho9r4665Qp5TxCZ27Qgjx3829"); + solana_program::declare_id!("7GUcYgq4tVtaqNCKT3dho9r4665Qp5TxCZ27Qgjx3829"); } pub mod fix_recent_blockhashes { - solana_sdk::declare_id!("6iyggb5MTcsvdcugX7bEKbHV8c6jdLbpHwkncrgLMhfo"); + solana_program::declare_id!("6iyggb5MTcsvdcugX7bEKbHV8c6jdLbpHwkncrgLMhfo"); } pub mod update_rewards_from_cached_accounts { - solana_sdk::declare_id!("28s7i3htzhahXQKqmS2ExzbEoUypg9krwvtK2M9UWXh9"); + solana_program::declare_id!("28s7i3htzhahXQKqmS2ExzbEoUypg9krwvtK2M9UWXh9"); } pub mod enable_partitioned_epoch_reward { - solana_sdk::declare_id!("9bn2vTJUsUcnpiZWbu2woSKtTGW3ErZC9ERv88SDqQjK"); + solana_program::declare_id!("9bn2vTJUsUcnpiZWbu2woSKtTGW3ErZC9ERv88SDqQjK"); } pub mod partitioned_epoch_rewards_superfeature { - solana_sdk::declare_id!("PERzQrt5gBD1XEe2c9XdFWqwgHY3mr7cYWbm5V772V8"); + solana_program::declare_id!("PERzQrt5gBD1XEe2c9XdFWqwgHY3mr7cYWbm5V772V8"); } pub mod spl_token_v3_4_0 { - solana_sdk::declare_id!("Ftok4njE8b7tDffYkC5bAbCaQv5sL6jispYrprzatUwN"); + solana_program::declare_id!("Ftok4njE8b7tDffYkC5bAbCaQv5sL6jispYrprzatUwN"); } pub mod spl_associated_token_account_v1_1_0 { - solana_sdk::declare_id!("FaTa17gVKoqbh38HcfiQonPsAaQViyDCCSg71AubYZw8"); + solana_program::declare_id!("FaTa17gVKoqbh38HcfiQonPsAaQViyDCCSg71AubYZw8"); } pub mod default_units_per_instruction { - solana_sdk::declare_id!("J2QdYx8crLbTVK8nur1jeLsmc3krDbfjoxoea2V1Uy5Q"); + solana_program::declare_id!("J2QdYx8crLbTVK8nur1jeLsmc3krDbfjoxoea2V1Uy5Q"); } pub mod stake_allow_zero_undelegated_amount { - solana_sdk::declare_id!("sTKz343FM8mqtyGvYWvbLpTThw3ixRM4Xk8QvZ985mw"); + solana_program::declare_id!("sTKz343FM8mqtyGvYWvbLpTThw3ixRM4Xk8QvZ985mw"); } pub mod require_static_program_ids_in_transaction { - solana_sdk::declare_id!("8FdwgyHFEjhAdjWfV2vfqk7wA1g9X3fQpKH7SBpEv3kC"); + solana_program::declare_id!("8FdwgyHFEjhAdjWfV2vfqk7wA1g9X3fQpKH7SBpEv3kC"); } pub mod stake_raise_minimum_delegation_to_1_sol { // This is a feature-proposal *feature id*. The feature keypair address is `GQXzC7YiSNkje6FFUk6sc2p53XRvKoaZ9VMktYzUMnpL`. - solana_sdk::declare_id!("9onWzzvCzNC2jfhxxeqRgs5q7nFAAKpCUvkj6T6GJK9i"); + solana_program::declare_id!("9onWzzvCzNC2jfhxxeqRgs5q7nFAAKpCUvkj6T6GJK9i"); } pub mod stake_minimum_delegation_for_rewards { - solana_sdk::declare_id!("G6ANXD6ptCSyNd9znZm7j4dEczAJCfx7Cy43oBx3rKHJ"); + solana_program::declare_id!("G6ANXD6ptCSyNd9znZm7j4dEczAJCfx7Cy43oBx3rKHJ"); } pub mod add_set_compute_unit_price_ix { - solana_sdk::declare_id!("98std1NSHqXi9WYvFShfVepRdCoq1qvsp8fsR2XZtG8g"); + solana_program::declare_id!("98std1NSHqXi9WYvFShfVepRdCoq1qvsp8fsR2XZtG8g"); } pub mod disable_deploy_of_alloc_free_syscall { - solana_sdk::declare_id!("79HWsX9rpnnJBPcdNURVqygpMAfxdrAirzAGAVmf92im"); + solana_program::declare_id!("79HWsX9rpnnJBPcdNURVqygpMAfxdrAirzAGAVmf92im"); } pub mod include_account_index_in_rent_error { - solana_sdk::declare_id!("2R72wpcQ7qV7aTJWUumdn8u5wmmTyXbK7qzEy7YSAgyY"); + solana_program::declare_id!("2R72wpcQ7qV7aTJWUumdn8u5wmmTyXbK7qzEy7YSAgyY"); } pub mod add_shred_type_to_shred_seed { - solana_sdk::declare_id!("Ds87KVeqhbv7Jw8W6avsS1mqz3Mw5J3pRTpPoDQ2QdiJ"); + solana_program::declare_id!("Ds87KVeqhbv7Jw8W6avsS1mqz3Mw5J3pRTpPoDQ2QdiJ"); } pub mod warp_timestamp_with_a_vengeance { - solana_sdk::declare_id!("3BX6SBeEBibHaVQXywdkcgyUk6evfYZkHdztXiDtEpFS"); + solana_program::declare_id!("3BX6SBeEBibHaVQXywdkcgyUk6evfYZkHdztXiDtEpFS"); } pub mod separate_nonce_from_blockhash { - solana_sdk::declare_id!("Gea3ZkK2N4pHuVZVxWcnAtS6UEDdyumdYt4pFcKjA3ar"); + solana_program::declare_id!("Gea3ZkK2N4pHuVZVxWcnAtS6UEDdyumdYt4pFcKjA3ar"); } pub mod enable_durable_nonce { - solana_sdk::declare_id!("4EJQtF2pkRyawwcTVfQutzq4Sa5hRhibF6QAK1QXhtEX"); + solana_program::declare_id!("4EJQtF2pkRyawwcTVfQutzq4Sa5hRhibF6QAK1QXhtEX"); } pub mod vote_state_update_credit_per_dequeue { - solana_sdk::declare_id!("CveezY6FDLVBToHDcvJRmtMouqzsmj4UXYh5ths5G5Uv"); + solana_program::declare_id!("CveezY6FDLVBToHDcvJRmtMouqzsmj4UXYh5ths5G5Uv"); } pub mod quick_bail_on_panic { - solana_sdk::declare_id!("DpJREPyuMZ5nDfU6H3WTqSqUFSXAfw8u7xqmWtEwJDcP"); + solana_program::declare_id!("DpJREPyuMZ5nDfU6H3WTqSqUFSXAfw8u7xqmWtEwJDcP"); } pub mod nonce_must_be_authorized { - solana_sdk::declare_id!("HxrEu1gXuH7iD3Puua1ohd5n4iUKJyFNtNxk9DVJkvgr"); + solana_program::declare_id!("HxrEu1gXuH7iD3Puua1ohd5n4iUKJyFNtNxk9DVJkvgr"); } pub mod nonce_must_be_advanceable { - solana_sdk::declare_id!("3u3Er5Vc2jVcwz4xr2GJeSAXT3fAj6ADHZ4BJMZiScFd"); + solana_program::declare_id!("3u3Er5Vc2jVcwz4xr2GJeSAXT3fAj6ADHZ4BJMZiScFd"); } pub mod vote_authorize_with_seed { - solana_sdk::declare_id!("6tRxEYKuy2L5nnv5bgn7iT28MxUbYxp5h7F3Ncf1exrT"); + solana_program::declare_id!("6tRxEYKuy2L5nnv5bgn7iT28MxUbYxp5h7F3Ncf1exrT"); } pub mod preserve_rent_epoch_for_rent_exempt_accounts { - solana_sdk::declare_id!("HH3MUYReL2BvqqA3oEcAa7txju5GY6G4nxJ51zvsEjEZ"); + solana_program::declare_id!("HH3MUYReL2BvqqA3oEcAa7txju5GY6G4nxJ51zvsEjEZ"); } pub mod enable_bpf_loader_extend_program_ix { - solana_sdk::declare_id!("8Zs9W7D9MpSEtUWSQdGniZk2cNmV22y6FLJwCx53asme"); + solana_program::declare_id!("8Zs9W7D9MpSEtUWSQdGniZk2cNmV22y6FLJwCx53asme"); } pub mod enable_early_verification_of_account_modifications { - solana_sdk::declare_id!("7Vced912WrRnfjaiKRiNBcbuFw7RrnLv3E3z95Y4GTNc"); + solana_program::declare_id!("7Vced912WrRnfjaiKRiNBcbuFw7RrnLv3E3z95Y4GTNc"); } pub mod skip_rent_rewrites { - solana_sdk::declare_id!("CGB2jM8pwZkeeiXQ66kBMyBR6Np61mggL7XUsmLjVcrw"); + solana_program::declare_id!("CGB2jM8pwZkeeiXQ66kBMyBR6Np61mggL7XUsmLjVcrw"); } pub mod prevent_crediting_accounts_that_end_rent_paying { - solana_sdk::declare_id!("812kqX67odAp5NFwM8D2N24cku7WTm9CHUTFUXaDkWPn"); + solana_program::declare_id!("812kqX67odAp5NFwM8D2N24cku7WTm9CHUTFUXaDkWPn"); } pub mod cap_bpf_program_instruction_accounts { - solana_sdk::declare_id!("9k5ijzTbYPtjzu8wj2ErH9v45xecHzQ1x4PMYMMxFgdM"); + solana_program::declare_id!("9k5ijzTbYPtjzu8wj2ErH9v45xecHzQ1x4PMYMMxFgdM"); } pub mod loosen_cpi_size_restriction { - solana_sdk::declare_id!("GDH5TVdbTPUpRnXaRyQqiKUa7uZAbZ28Q2N9bhbKoMLm"); + solana_program::declare_id!("GDH5TVdbTPUpRnXaRyQqiKUa7uZAbZ28Q2N9bhbKoMLm"); } pub mod use_default_units_in_fee_calculation { - solana_sdk::declare_id!("8sKQrMQoUHtQSUP83SPG4ta2JDjSAiWs7t5aJ9uEd6To"); + solana_program::declare_id!("8sKQrMQoUHtQSUP83SPG4ta2JDjSAiWs7t5aJ9uEd6To"); } pub mod compact_vote_state_updates { - solana_sdk::declare_id!("86HpNqzutEZwLcPxS6EHDcMNYWk6ikhteg9un7Y2PBKE"); + solana_program::declare_id!("86HpNqzutEZwLcPxS6EHDcMNYWk6ikhteg9un7Y2PBKE"); } pub mod incremental_snapshot_only_incremental_hash_calculation { - solana_sdk::declare_id!("25vqsfjk7Nv1prsQJmA4Xu1bN61s8LXCBGUPp8Rfy1UF"); + solana_program::declare_id!("25vqsfjk7Nv1prsQJmA4Xu1bN61s8LXCBGUPp8Rfy1UF"); } pub mod disable_cpi_setting_executable_and_rent_epoch { - solana_sdk::declare_id!("B9cdB55u4jQsDNsdTK525yE9dmSc5Ga7YBaBrDFvEhM9"); + solana_program::declare_id!("B9cdB55u4jQsDNsdTK525yE9dmSc5Ga7YBaBrDFvEhM9"); } pub mod on_load_preserve_rent_epoch_for_rent_exempt_accounts { - solana_sdk::declare_id!("CpkdQmspsaZZ8FVAouQTtTWZkc8eeQ7V3uj7dWz543rZ"); + solana_program::declare_id!("CpkdQmspsaZZ8FVAouQTtTWZkc8eeQ7V3uj7dWz543rZ"); } pub mod account_hash_ignore_slot { - solana_sdk::declare_id!("SVn36yVApPLYsa8koK3qUcy14zXDnqkNYWyUh1f4oK1"); + solana_program::declare_id!("SVn36yVApPLYsa8koK3qUcy14zXDnqkNYWyUh1f4oK1"); } pub mod set_exempt_rent_epoch_max { - solana_sdk::declare_id!("5wAGiy15X1Jb2hkHnPDCM8oB9V42VNA9ftNVFK84dEgv"); + solana_program::declare_id!("5wAGiy15X1Jb2hkHnPDCM8oB9V42VNA9ftNVFK84dEgv"); } pub mod relax_authority_signer_check_for_lookup_table_creation { - solana_sdk::declare_id!("FKAcEvNgSY79RpqsPNUV5gDyumopH4cEHqUxyfm8b8Ap"); + solana_program::declare_id!("FKAcEvNgSY79RpqsPNUV5gDyumopH4cEHqUxyfm8b8Ap"); } pub mod stop_sibling_instruction_search_at_parent { - solana_sdk::declare_id!("EYVpEP7uzH1CoXzbD6PubGhYmnxRXPeq3PPsm1ba3gpo"); + solana_program::declare_id!("EYVpEP7uzH1CoXzbD6PubGhYmnxRXPeq3PPsm1ba3gpo"); } pub mod vote_state_update_root_fix { - solana_sdk::declare_id!("G74BkWBzmsByZ1kxHy44H3wjwp5hp7JbrGRuDpco22tY"); + solana_program::declare_id!("G74BkWBzmsByZ1kxHy44H3wjwp5hp7JbrGRuDpco22tY"); } pub mod cap_accounts_data_allocations_per_transaction { - solana_sdk::declare_id!("9gxu85LYRAcZL38We8MYJ4A9AwgBBPtVBAqebMcT1241"); + solana_program::declare_id!("9gxu85LYRAcZL38We8MYJ4A9AwgBBPtVBAqebMcT1241"); } pub mod epoch_accounts_hash { - solana_sdk::declare_id!("5GpmAKxaGsWWbPp4bNXFLJxZVvG92ctxf7jQnzTQjF3n"); + solana_program::declare_id!("5GpmAKxaGsWWbPp4bNXFLJxZVvG92ctxf7jQnzTQjF3n"); } pub mod remove_deprecated_request_unit_ix { - solana_sdk::declare_id!("EfhYd3SafzGT472tYQDUc4dPd2xdEfKs5fwkowUgVt4W"); + solana_program::declare_id!("EfhYd3SafzGT472tYQDUc4dPd2xdEfKs5fwkowUgVt4W"); } pub mod disable_rehash_for_rent_epoch { - solana_sdk::declare_id!("DTVTkmw3JSofd8CJVJte8PXEbxNQ2yZijvVr3pe2APPj"); + solana_program::declare_id!("DTVTkmw3JSofd8CJVJte8PXEbxNQ2yZijvVr3pe2APPj"); } pub mod increase_tx_account_lock_limit { - solana_sdk::declare_id!("9LZdXeKGeBV6hRLdxS1rHbHoEUsKqesCC2ZAPTPKJAbK"); + solana_program::declare_id!("9LZdXeKGeBV6hRLdxS1rHbHoEUsKqesCC2ZAPTPKJAbK"); } pub mod limit_max_instruction_trace_length { - solana_sdk::declare_id!("GQALDaC48fEhZGWRj9iL5Q889emJKcj3aCvHF7VCbbF4"); + solana_program::declare_id!("GQALDaC48fEhZGWRj9iL5Q889emJKcj3aCvHF7VCbbF4"); } pub mod check_syscall_outputs_do_not_overlap { - solana_sdk::declare_id!("3uRVPBpyEJRo1emLCrq38eLRFGcu6uKSpUXqGvU8T7SZ"); + solana_program::declare_id!("3uRVPBpyEJRo1emLCrq38eLRFGcu6uKSpUXqGvU8T7SZ"); } pub mod enable_bpf_loader_set_authority_checked_ix { - solana_sdk::declare_id!("5x3825XS7M2A3Ekbn5VGGkvFoAg5qrRWkTrY4bARP1GL"); + solana_program::declare_id!("5x3825XS7M2A3Ekbn5VGGkvFoAg5qrRWkTrY4bARP1GL"); } pub mod enable_alt_bn128_syscall { - solana_sdk::declare_id!("A16q37opZdQMCbe5qJ6xpBB9usykfv8jZaMkxvZQi4GJ"); + solana_program::declare_id!("A16q37opZdQMCbe5qJ6xpBB9usykfv8jZaMkxvZQi4GJ"); } pub mod simplify_alt_bn128_syscall_error_codes { - solana_sdk::declare_id!("JDn5q3GBeqzvUa7z67BbmVHVdE3EbUAjvFep3weR3jxX"); + solana_program::declare_id!("JDn5q3GBeqzvUa7z67BbmVHVdE3EbUAjvFep3weR3jxX"); } pub mod enable_alt_bn128_compression_syscall { - solana_sdk::declare_id!("EJJewYSddEEtSZHiqugnvhQHiWyZKjkFDQASd7oKSagn"); + solana_program::declare_id!("EJJewYSddEEtSZHiqugnvhQHiWyZKjkFDQASd7oKSagn"); } pub mod enable_program_redeployment_cooldown { - solana_sdk::declare_id!("J4HFT8usBxpcF63y46t1upYobJgChmKyZPm5uTBRg25Z"); + solana_program::declare_id!("J4HFT8usBxpcF63y46t1upYobJgChmKyZPm5uTBRg25Z"); } pub mod commission_updates_only_allowed_in_first_half_of_epoch { - solana_sdk::declare_id!("noRuG2kzACwgaY7TVmLRnUNPLKNVQE1fb7X55YWBehp"); + solana_program::declare_id!("noRuG2kzACwgaY7TVmLRnUNPLKNVQE1fb7X55YWBehp"); } pub mod enable_turbine_fanout_experiments { - solana_sdk::declare_id!("D31EFnLgdiysi84Woo3of4JMu7VmasUS3Z7j9HYXCeLY"); + solana_program::declare_id!("D31EFnLgdiysi84Woo3of4JMu7VmasUS3Z7j9HYXCeLY"); } pub mod disable_turbine_fanout_experiments { - solana_sdk::declare_id!("Gz1aLrbeQ4Q6PTSafCZcGWZXz91yVRi7ASFzFEr1U4sa"); + solana_program::declare_id!("Gz1aLrbeQ4Q6PTSafCZcGWZXz91yVRi7ASFzFEr1U4sa"); } pub mod move_serialized_len_ptr_in_cpi { - solana_sdk::declare_id!("74CoWuBmt3rUVUrCb2JiSTvh6nXyBWUsK4SaMj3CtE3T"); + solana_program::declare_id!("74CoWuBmt3rUVUrCb2JiSTvh6nXyBWUsK4SaMj3CtE3T"); } pub mod update_hashes_per_tick { - solana_sdk::declare_id!("3uFHb9oKdGfgZGJK9EHaAXN4USvnQtAFC13Fh5gGFS5B"); + solana_program::declare_id!("3uFHb9oKdGfgZGJK9EHaAXN4USvnQtAFC13Fh5gGFS5B"); } pub mod enable_big_mod_exp_syscall { - solana_sdk::declare_id!("EBq48m8irRKuE7ZnMTLvLg2UuGSqhe8s8oMqnmja1fJw"); + solana_program::declare_id!("EBq48m8irRKuE7ZnMTLvLg2UuGSqhe8s8oMqnmja1fJw"); } pub mod disable_builtin_loader_ownership_chains { - solana_sdk::declare_id!("4UDcAfQ6EcA6bdcadkeHpkarkhZGJ7Bpq7wTAiRMjkoi"); + solana_program::declare_id!("4UDcAfQ6EcA6bdcadkeHpkarkhZGJ7Bpq7wTAiRMjkoi"); } pub mod cap_transaction_accounts_data_size { - solana_sdk::declare_id!("DdLwVYuvDz26JohmgSbA7mjpJFgX5zP2dkp8qsF2C33V"); + solana_program::declare_id!("DdLwVYuvDz26JohmgSbA7mjpJFgX5zP2dkp8qsF2C33V"); } pub mod remove_congestion_multiplier_from_fee_calculation { - solana_sdk::declare_id!("A8xyMHZovGXFkorFqEmVH2PKGLiBip5JD7jt4zsUWo4H"); + solana_program::declare_id!("A8xyMHZovGXFkorFqEmVH2PKGLiBip5JD7jt4zsUWo4H"); } pub mod enable_request_heap_frame_ix { - solana_sdk::declare_id!("Hr1nUA9b7NJ6eChS26o7Vi8gYYDDwWD3YeBfzJkTbU86"); + solana_program::declare_id!("Hr1nUA9b7NJ6eChS26o7Vi8gYYDDwWD3YeBfzJkTbU86"); } pub mod prevent_rent_paying_rent_recipients { - solana_sdk::declare_id!("Fab5oP3DmsLYCiQZXdjyqT3ukFFPrsmqhXU4WU1AWVVF"); + solana_program::declare_id!("Fab5oP3DmsLYCiQZXdjyqT3ukFFPrsmqhXU4WU1AWVVF"); } pub mod delay_visibility_of_program_deployment { - solana_sdk::declare_id!("GmuBvtFb2aHfSfMXpuFeWZGHyDeCLPS79s48fmCWCfM5"); + solana_program::declare_id!("GmuBvtFb2aHfSfMXpuFeWZGHyDeCLPS79s48fmCWCfM5"); } pub mod apply_cost_tracker_during_replay { - solana_sdk::declare_id!("2ry7ygxiYURULZCrypHhveanvP5tzZ4toRwVp89oCNSj"); + solana_program::declare_id!("2ry7ygxiYURULZCrypHhveanvP5tzZ4toRwVp89oCNSj"); } pub mod bpf_account_data_direct_mapping { - solana_sdk::declare_id!("EenyoWx9UMXYKpR8mW5Jmfmy2fRjzUtM7NduYMY8bx33"); + solana_program::declare_id!("EenyoWx9UMXYKpR8mW5Jmfmy2fRjzUtM7NduYMY8bx33"); } pub mod add_set_tx_loaded_accounts_data_size_instruction { - solana_sdk::declare_id!("G6vbf1UBok8MWb8m25ex86aoQHeKTzDKzuZADHkShqm6"); + solana_program::declare_id!("G6vbf1UBok8MWb8m25ex86aoQHeKTzDKzuZADHkShqm6"); } pub mod switch_to_new_elf_parser { - solana_sdk::declare_id!("Cdkc8PPTeTNUPoZEfCY5AyetUrEdkZtNPMgz58nqyaHD"); + solana_program::declare_id!("Cdkc8PPTeTNUPoZEfCY5AyetUrEdkZtNPMgz58nqyaHD"); } pub mod round_up_heap_size { - solana_sdk::declare_id!("CE2et8pqgyQMP2mQRg3CgvX8nJBKUArMu3wfiQiQKY1y"); + solana_program::declare_id!("CE2et8pqgyQMP2mQRg3CgvX8nJBKUArMu3wfiQiQKY1y"); } pub mod remove_bpf_loader_incorrect_program_id { - solana_sdk::declare_id!("2HmTkCj9tXuPE4ueHzdD7jPeMf9JGCoZh5AsyoATiWEe"); + solana_program::declare_id!("2HmTkCj9tXuPE4ueHzdD7jPeMf9JGCoZh5AsyoATiWEe"); } pub mod include_loaded_accounts_data_size_in_fee_calculation { - solana_sdk::declare_id!("EaQpmC6GtRssaZ3PCUM5YksGqUdMLeZ46BQXYtHYakDS"); + solana_program::declare_id!("EaQpmC6GtRssaZ3PCUM5YksGqUdMLeZ46BQXYtHYakDS"); } pub mod native_programs_consume_cu { - solana_sdk::declare_id!("8pgXCMNXC8qyEFypuwpXyRxLXZdpM4Qo72gJ6k87A6wL"); + solana_program::declare_id!("8pgXCMNXC8qyEFypuwpXyRxLXZdpM4Qo72gJ6k87A6wL"); } pub mod simplify_writable_program_account_check { - solana_sdk::declare_id!("5ZCcFAzJ1zsFKe1KSZa9K92jhx7gkcKj97ci2DBo1vwj"); + solana_program::declare_id!("5ZCcFAzJ1zsFKe1KSZa9K92jhx7gkcKj97ci2DBo1vwj"); } pub mod stop_truncating_strings_in_syscalls { - solana_sdk::declare_id!("16FMCmgLzCNNz6eTwGanbyN2ZxvTBSLuQ6DZhgeMshg"); + solana_program::declare_id!("16FMCmgLzCNNz6eTwGanbyN2ZxvTBSLuQ6DZhgeMshg"); } pub mod clean_up_delegation_errors { - solana_sdk::declare_id!("Bj2jmUsM2iRhfdLLDSTkhM5UQRQvQHm57HSmPibPtEyu"); + solana_program::declare_id!("Bj2jmUsM2iRhfdLLDSTkhM5UQRQvQHm57HSmPibPtEyu"); } pub mod vote_state_add_vote_latency { - solana_sdk::declare_id!("7axKe5BTYBDD87ftzWbk5DfzWMGyRvqmWTduuo22Yaqy"); + solana_program::declare_id!("7axKe5BTYBDD87ftzWbk5DfzWMGyRvqmWTduuo22Yaqy"); } pub mod checked_arithmetic_in_fee_validation { - solana_sdk::declare_id!("5Pecy6ie6XGm22pc9d4P9W5c31BugcFBuy6hsP2zkETv"); + solana_program::declare_id!("5Pecy6ie6XGm22pc9d4P9W5c31BugcFBuy6hsP2zkETv"); } pub mod last_restart_slot_sysvar { - solana_sdk::declare_id!("HooKD5NC9QNxk25QuzCssB8ecrEzGt6eXEPBUxWp1LaR"); + solana_program::declare_id!("HooKD5NC9QNxk25QuzCssB8ecrEzGt6eXEPBUxWp1LaR"); } pub mod reduce_stake_warmup_cooldown { - solana_sdk::declare_id!("GwtDQBghCTBgmX2cpEGNPxTEBUTQRaDMGTr5qychdGMj"); + solana_program::declare_id!("GwtDQBghCTBgmX2cpEGNPxTEBUTQRaDMGTr5qychdGMj"); } mod revise_turbine_epoch_stakes { - solana_sdk::declare_id!("BTWmtJC8U5ZLMbBUUA1k6As62sYjPEjAiNAT55xYGdJU"); + solana_program::declare_id!("BTWmtJC8U5ZLMbBUUA1k6As62sYjPEjAiNAT55xYGdJU"); } pub mod enable_poseidon_syscall { - solana_sdk::declare_id!("FL9RsQA6TVUoh5xJQ9d936RHSebA1NLQqe3Zv9sXZRpr"); + solana_program::declare_id!("FL9RsQA6TVUoh5xJQ9d936RHSebA1NLQqe3Zv9sXZRpr"); } pub mod timely_vote_credits { - solana_sdk::declare_id!("tvcF6b1TRz353zKuhBjinZkKzjmihXmBAHJdjNYw1sQ"); + solana_program::declare_id!("tvcF6b1TRz353zKuhBjinZkKzjmihXmBAHJdjNYw1sQ"); } pub mod remaining_compute_units_syscall_enabled { - solana_sdk::declare_id!("5TuppMutoyzhUSfuYdhgzD47F92GL1g89KpCZQKqedxP"); + solana_program::declare_id!("5TuppMutoyzhUSfuYdhgzD47F92GL1g89KpCZQKqedxP"); } pub mod enable_program_runtime_v2_and_loader_v4 { - solana_sdk::declare_id!("8oBxsYqnCvUTGzgEpxPcnVf7MLbWWPYddE33PftFeBBd"); + solana_program::declare_id!("8oBxsYqnCvUTGzgEpxPcnVf7MLbWWPYddE33PftFeBBd"); } pub mod require_rent_exempt_split_destination { - solana_sdk::declare_id!("D2aip4BBr8NPWtU9vLrwrBvbuaQ8w1zV38zFLxx4pfBV"); + solana_program::declare_id!("D2aip4BBr8NPWtU9vLrwrBvbuaQ8w1zV38zFLxx4pfBV"); } pub mod better_error_codes_for_tx_lamport_check { - solana_sdk::declare_id!("Ffswd3egL3tccB6Rv3XY6oqfdzn913vUcjCSnpvCKpfx"); + solana_program::declare_id!("Ffswd3egL3tccB6Rv3XY6oqfdzn913vUcjCSnpvCKpfx"); } pub mod update_hashes_per_tick2 { - solana_sdk::declare_id!("EWme9uFqfy1ikK1jhJs8fM5hxWnK336QJpbscNtizkTU"); + solana_program::declare_id!("EWme9uFqfy1ikK1jhJs8fM5hxWnK336QJpbscNtizkTU"); } pub mod update_hashes_per_tick3 { - solana_sdk::declare_id!("8C8MCtsab5SsfammbzvYz65HHauuUYdbY2DZ4sznH6h5"); + solana_program::declare_id!("8C8MCtsab5SsfammbzvYz65HHauuUYdbY2DZ4sznH6h5"); } pub mod update_hashes_per_tick4 { - solana_sdk::declare_id!("8We4E7DPwF2WfAN8tRTtWQNhi98B99Qpuj7JoZ3Aikgg"); + solana_program::declare_id!("8We4E7DPwF2WfAN8tRTtWQNhi98B99Qpuj7JoZ3Aikgg"); } pub mod update_hashes_per_tick5 { - solana_sdk::declare_id!("BsKLKAn1WM4HVhPRDsjosmqSg2J8Tq5xP2s2daDS6Ni4"); + solana_program::declare_id!("BsKLKAn1WM4HVhPRDsjosmqSg2J8Tq5xP2s2daDS6Ni4"); } pub mod update_hashes_per_tick6 { - solana_sdk::declare_id!("FKu1qYwLQSiehz644H6Si65U5ZQ2cp9GxsyFUfYcuADv"); + solana_program::declare_id!("FKu1qYwLQSiehz644H6Si65U5ZQ2cp9GxsyFUfYcuADv"); } pub mod validate_fee_collector_account { - solana_sdk::declare_id!("prpFrMtgNmzaNzkPJg9o753fVvbHKqNrNTm76foJ2wm"); + solana_program::declare_id!("prpFrMtgNmzaNzkPJg9o753fVvbHKqNrNTm76foJ2wm"); } pub mod disable_rent_fees_collection { - solana_sdk::declare_id!("CJzY83ggJHqPGDq8VisV3U91jDJLuEaALZooBrXtnnLU"); + solana_program::declare_id!("CJzY83ggJHqPGDq8VisV3U91jDJLuEaALZooBrXtnnLU"); } pub mod enable_zk_transfer_with_fee { - solana_sdk::declare_id!("zkNLP7EQALfC1TYeB3biDU7akDckj8iPkvh9y2Mt2K3"); + solana_program::declare_id!("zkNLP7EQALfC1TYeB3biDU7akDckj8iPkvh9y2Mt2K3"); } pub mod drop_legacy_shreds { - solana_sdk::declare_id!("GV49KKQdBNaiv2pgqhS2Dy3GWYJGXMTVYbYkdk91orRy"); + solana_program::declare_id!("GV49KKQdBNaiv2pgqhS2Dy3GWYJGXMTVYbYkdk91orRy"); } pub mod allow_commission_decrease_at_any_time { - solana_sdk::declare_id!("decoMktMcnmiq6t3u7g5BfgcQu91nKZr6RvMYf9z1Jb"); + solana_program::declare_id!("decoMktMcnmiq6t3u7g5BfgcQu91nKZr6RvMYf9z1Jb"); } pub mod add_new_reserved_account_keys { - solana_sdk::declare_id!("8U4skmMVnF6k2kMvrWbQuRUT3qQSiTYpSjqmhmgfthZu"); + solana_program::declare_id!("8U4skmMVnF6k2kMvrWbQuRUT3qQSiTYpSjqmhmgfthZu"); } pub mod consume_blockstore_duplicate_proofs { - solana_sdk::declare_id!("6YsBCejwK96GZCkJ6mkZ4b68oP63z2PLoQmWjC7ggTqZ"); + solana_program::declare_id!("6YsBCejwK96GZCkJ6mkZ4b68oP63z2PLoQmWjC7ggTqZ"); } pub mod index_erasure_conflict_duplicate_proofs { - solana_sdk::declare_id!("dupPajaLy2SSn8ko42aZz4mHANDNrLe8Nw8VQgFecLa"); + solana_program::declare_id!("dupPajaLy2SSn8ko42aZz4mHANDNrLe8Nw8VQgFecLa"); } pub mod merkle_conflict_duplicate_proofs { - solana_sdk::declare_id!("mrkPjRg79B2oK2ZLgd7S3AfEJaX9B6gAF3H9aEykRUS"); + solana_program::declare_id!("mrkPjRg79B2oK2ZLgd7S3AfEJaX9B6gAF3H9aEykRUS"); } pub mod disable_bpf_loader_instructions { - solana_sdk::declare_id!("7WeS1vfPRgeeoXArLh7879YcB9mgE9ktjPDtajXeWfXn"); + solana_program::declare_id!("7WeS1vfPRgeeoXArLh7879YcB9mgE9ktjPDtajXeWfXn"); } pub mod enable_zk_proof_from_account { - solana_sdk::declare_id!("zkiTNuzBKxrCLMKehzuQeKZyLtX2yvFcEKMML8nExU8"); + solana_program::declare_id!("zkiTNuzBKxrCLMKehzuQeKZyLtX2yvFcEKMML8nExU8"); } pub mod cost_model_requested_write_lock_cost { - solana_sdk::declare_id!("wLckV1a64ngtcKPRGU4S4grVTestXjmNjxBjaKZrAcn"); + solana_program::declare_id!("wLckV1a64ngtcKPRGU4S4grVTestXjmNjxBjaKZrAcn"); } pub mod enable_gossip_duplicate_proof_ingestion { - solana_sdk::declare_id!("FNKCMBzYUdjhHyPdsKG2LSmdzH8TCHXn3ytj8RNBS4nG"); + solana_program::declare_id!("FNKCMBzYUdjhHyPdsKG2LSmdzH8TCHXn3ytj8RNBS4nG"); } pub mod chained_merkle_conflict_duplicate_proofs { - solana_sdk::declare_id!("chaie9S2zVfuxJKNRGkyTDokLwWxx6kD2ZLsqQHaDD8"); + solana_program::declare_id!("chaie9S2zVfuxJKNRGkyTDokLwWxx6kD2ZLsqQHaDD8"); } pub mod enable_chained_merkle_shreds { - solana_sdk::declare_id!("7uZBkJXJ1HkuP6R3MJfZs7mLwymBcDbKdqbF51ZWLier"); + solana_program::declare_id!("7uZBkJXJ1HkuP6R3MJfZs7mLwymBcDbKdqbF51ZWLier"); } pub mod remove_rounding_in_fee_calculation { - solana_sdk::declare_id!("BtVN7YjDzNE6Dk7kTT7YTDgMNUZTNgiSJgsdzAeTg2jF"); + solana_program::declare_id!("BtVN7YjDzNE6Dk7kTT7YTDgMNUZTNgiSJgsdzAeTg2jF"); } pub mod enable_tower_sync_ix { - solana_sdk::declare_id!("tSynMCspg4xFiCj1v3TDb4c7crMR5tSBhLz4sF7rrNA"); + solana_program::declare_id!("tSynMCspg4xFiCj1v3TDb4c7crMR5tSBhLz4sF7rrNA"); } pub mod deprecate_unused_legacy_vote_plumbing { - solana_sdk::declare_id!("6Uf8S75PVh91MYgPQSHnjRAPQq6an5BDv9vomrCwDqLe"); + solana_program::declare_id!("6Uf8S75PVh91MYgPQSHnjRAPQq6an5BDv9vomrCwDqLe"); } pub mod reward_full_priority_fee { - solana_sdk::declare_id!("3opE3EzAKnUftUDURkzMgwpNgimBAypW1mNDYH4x4Zg7"); + solana_program::declare_id!("3opE3EzAKnUftUDURkzMgwpNgimBAypW1mNDYH4x4Zg7"); } pub mod get_sysvar_syscall_enabled { - solana_sdk::declare_id!("CLCoTADvV64PSrnR6QXty6Fwrt9Xc6EdxSJE4wLRePjq"); + solana_program::declare_id!("CLCoTADvV64PSrnR6QXty6Fwrt9Xc6EdxSJE4wLRePjq"); } pub mod abort_on_invalid_curve { - solana_sdk::declare_id!("FuS3FPfJDKSNot99ECLXtp3rueq36hMNStJkPJwWodLh"); + solana_program::declare_id!("FuS3FPfJDKSNot99ECLXtp3rueq36hMNStJkPJwWodLh"); } pub mod migrate_feature_gate_program_to_core_bpf { - solana_sdk::declare_id!("4eohviozzEeivk1y9UbrnekbAFMDQyJz5JjA9Y6gyvky"); + solana_program::declare_id!("4eohviozzEeivk1y9UbrnekbAFMDQyJz5JjA9Y6gyvky"); } pub mod vote_only_full_fec_sets { - solana_sdk::declare_id!("ffecLRhhakKSGhMuc6Fz2Lnfq4uT9q3iu9ZsNaPLxPc"); + solana_program::declare_id!("ffecLRhhakKSGhMuc6Fz2Lnfq4uT9q3iu9ZsNaPLxPc"); } pub mod migrate_config_program_to_core_bpf { - solana_sdk::declare_id!("2Fr57nzzkLYXW695UdDxDeR5fhnZWSttZeZYemrnpGFV"); + solana_program::declare_id!("2Fr57nzzkLYXW695UdDxDeR5fhnZWSttZeZYemrnpGFV"); } pub mod enable_get_epoch_stake_syscall { - solana_sdk::declare_id!("7mScTYkJXsbdrcwTQRs7oeCSXoJm4WjzBsRyf8bCU3Np"); + solana_program::declare_id!("7mScTYkJXsbdrcwTQRs7oeCSXoJm4WjzBsRyf8bCU3Np"); } pub mod migrate_address_lookup_table_program_to_core_bpf { - solana_sdk::declare_id!("C97eKZygrkU4JxJsZdjgbUY7iQR7rKTr4NyDWo2E5pRm"); + solana_program::declare_id!("C97eKZygrkU4JxJsZdjgbUY7iQR7rKTr4NyDWo2E5pRm"); } pub mod zk_elgamal_proof_program_enabled { - solana_sdk::declare_id!("zkhiy5oLowR7HY4zogXjCjeMXyruLqBwSWH21qcFtnv"); + solana_program::declare_id!("zkhiy5oLowR7HY4zogXjCjeMXyruLqBwSWH21qcFtnv"); } pub mod verify_retransmitter_signature { - solana_sdk::declare_id!("BZ5g4hRbu5hLQQBdPyo2z9icGyJ8Khiyj3QS6dhWijTb"); + solana_program::declare_id!("BZ5g4hRbu5hLQQBdPyo2z9icGyJ8Khiyj3QS6dhWijTb"); } pub mod move_stake_and_move_lamports_ixs { - solana_sdk::declare_id!("7bTK6Jis8Xpfrs8ZoUfiMDPazTcdPcTWheZFJTA5Z6X4"); + solana_program::declare_id!("7bTK6Jis8Xpfrs8ZoUfiMDPazTcdPcTWheZFJTA5Z6X4"); } pub mod ed25519_precompile_verify_strict { - solana_sdk::declare_id!("ed9tNscbWLYBooxWA7FE2B5KHWs8A6sxfY8EzezEcoo"); + solana_program::declare_id!("ed9tNscbWLYBooxWA7FE2B5KHWs8A6sxfY8EzezEcoo"); } pub mod vote_only_retransmitter_signed_fec_sets { - solana_sdk::declare_id!("RfEcA95xnhuwooVAhUUksEJLZBF7xKCLuqrJoqk4Zph"); + solana_program::declare_id!("RfEcA95xnhuwooVAhUUksEJLZBF7xKCLuqrJoqk4Zph"); } pub mod move_precompile_verification_to_svm { - solana_sdk::declare_id!("9ypxGLzkMxi89eDerRKXWDXe44UY2z4hBig4mDhNq5Dp"); + solana_program::declare_id!("9ypxGLzkMxi89eDerRKXWDXe44UY2z4hBig4mDhNq5Dp"); } pub mod enable_transaction_loading_failure_fees { - solana_sdk::declare_id!("PaymEPK2oqwT9TXAVfadjztH2H6KfLEB9Hhd5Q5frvP"); + solana_program::declare_id!("PaymEPK2oqwT9TXAVfadjztH2H6KfLEB9Hhd5Q5frvP"); } pub mod enable_turbine_extended_fanout_experiments { - solana_sdk::declare_id!("BZn14Liea52wtBwrXUxTv6vojuTTmfc7XGEDTXrvMD7b"); + solana_program::declare_id!("BZn14Liea52wtBwrXUxTv6vojuTTmfc7XGEDTXrvMD7b"); } pub mod deprecate_legacy_vote_ixs { - solana_sdk::declare_id!("depVvnQ2UysGrhwdiwU42tCadZL8GcBb1i2GYhMopQv"); + solana_program::declare_id!("depVvnQ2UysGrhwdiwU42tCadZL8GcBb1i2GYhMopQv"); } lazy_static! { @@ -1109,7 +1111,7 @@ lazy_static! { } /// `FeatureSet` holds the set of currently active/inactive runtime features -#[cfg_attr(feature = "frozen-abi", derive(AbiExample))] +#[cfg_attr(feature = "frozen-abi", derive(solana_frozen_abi_macro::AbiExample))] #[derive(Debug, Clone, Eq, PartialEq)] pub struct FeatureSet { pub active: HashMap, diff --git a/sdk/src/ed25519_instruction.rs b/sdk/src/ed25519_instruction.rs index bdc4d4d0c4681b..45a8f1c2c2d932 100644 --- a/sdk/src/ed25519_instruction.rs +++ b/sdk/src/ed25519_instruction.rs @@ -5,14 +5,11 @@ #![cfg(feature = "full")] use { - crate::{ - feature_set::{ed25519_precompile_verify_strict, FeatureSet}, - instruction::Instruction, - precompiles::PrecompileError, - }, + crate::{instruction::Instruction, precompiles::PrecompileError}, bytemuck::bytes_of, bytemuck_derive::{Pod, Zeroable}, ed25519_dalek::{ed25519::signature::Signature, Signer, Verifier}, + solana_feature_set::{ed25519_precompile_verify_strict, FeatureSet}, }; pub const PUBKEY_SERIALIZED_SIZE: usize = 32; @@ -194,13 +191,13 @@ pub mod test { super::*, crate::{ ed25519_instruction::new_ed25519_instruction, - feature_set::FeatureSet, hash::Hash, signature::{Keypair, Signer}, transaction::Transaction, }, hex, rand0_7::{thread_rng, Rng}, + solana_feature_set::FeatureSet, }; pub fn new_ed25519_instruction_raw( diff --git a/sdk/src/lib.rs b/sdk/src/lib.rs index 5a1b87b211724b..47f680603c65c3 100644 --- a/sdk/src/lib.rs +++ b/sdk/src/lib.rs @@ -72,7 +72,6 @@ pub mod epoch_rewards_hasher; pub mod example_mocks; pub mod exit; pub mod feature; -pub mod feature_set; pub mod fee; pub mod genesis_config; pub mod hard_forks; @@ -114,6 +113,8 @@ pub use solana_bn254 as alt_bn128; pub use solana_decode_error as decode_error; #[deprecated(since = "2.1.0", note = "Use `solana-derivation-path` crate instead")] pub use solana_derivation_path as derivation_path; +#[deprecated(since = "2.1.0", note = "Use `solana-feature-set` crate instead")] +pub use solana_feature_set as feature_set; #[deprecated(since = "2.1.0", note = "Use `solana-program-memory` crate instead")] pub use solana_program_memory as program_memory; #[deprecated(since = "2.1.0", note = "Use `solana-sanitize` crate instead")] diff --git a/sdk/src/precompiles.rs b/sdk/src/precompiles.rs index cb16e5ecd86276..087066e1b23be5 100644 --- a/sdk/src/precompiles.rs +++ b/sdk/src/precompiles.rs @@ -3,11 +3,11 @@ #![cfg(feature = "full")] use { - crate::{feature_set::FeatureSet, pubkey::Pubkey}, lazy_static::lazy_static, num_derive::{FromPrimitive, ToPrimitive}, solana_decode_error::DecodeError, - solana_program::instruction::CompiledInstruction, + solana_feature_set::FeatureSet, + solana_program::{instruction::CompiledInstruction, pubkey::Pubkey}, thiserror::Error, }; diff --git a/sdk/src/reserved_account_keys.rs b/sdk/src/reserved_account_keys.rs index e3c6bed5c973be..0ce4ac632bb250 100644 --- a/sdk/src/reserved_account_keys.rs +++ b/sdk/src/reserved_account_keys.rs @@ -7,13 +7,11 @@ use { crate::{ address_lookup_table, bpf_loader, bpf_loader_deprecated, bpf_loader_upgradeable, - compute_budget, config, ed25519_program, feature, - feature_set::{self, FeatureSet}, - loader_v4, native_loader, - pubkey::Pubkey, + compute_budget, config, ed25519_program, feature, loader_v4, native_loader, pubkey::Pubkey, secp256k1_program, stake, system_program, sysvar, vote, }, lazy_static::lazy_static, + solana_feature_set::{self as feature_set, FeatureSet}, std::collections::{HashMap, HashSet}, }; diff --git a/sdk/src/secp256k1_instruction.rs b/sdk/src/secp256k1_instruction.rs index c694065483d9c5..825e9bdbd03d5d 100644 --- a/sdk/src/secp256k1_instruction.rs +++ b/sdk/src/secp256k1_instruction.rs @@ -788,15 +788,12 @@ #![cfg(feature = "full")] use { - crate::{ - feature_set::{ - libsecp256k1_fail_on_bad_count, libsecp256k1_fail_on_bad_count2, FeatureSet, - }, - instruction::Instruction, - precompiles::PrecompileError, - }, + crate::{instruction::Instruction, precompiles::PrecompileError}, digest::Digest, serde_derive::{Deserialize, Serialize}, + solana_feature_set::{ + libsecp256k1_fail_on_bad_count, libsecp256k1_fail_on_bad_count2, FeatureSet, + }, }; pub const HASHED_PUBKEY_SERIALIZED_SIZE: usize = 20; @@ -1040,7 +1037,6 @@ pub mod test { use { super::*, crate::{ - feature_set, hash::Hash, keccak, secp256k1_instruction::{ @@ -1224,7 +1220,7 @@ pub mod test { let message_arr = b"hello"; let mut secp_instruction = new_secp256k1_instruction(&secp_privkey, message_arr); let mint_keypair = Keypair::new(); - let feature_set = feature_set::FeatureSet::all_enabled(); + let feature_set = solana_feature_set::FeatureSet::all_enabled(); let tx = Transaction::new_signed_with_payer( &[secp_instruction.clone()], diff --git a/sdk/src/transaction/mod.rs b/sdk/src/transaction/mod.rs index b4dd1aee955874..7007a592732217 100644 --- a/sdk/src/transaction/mod.rs +++ b/sdk/src/transaction/mod.rs @@ -126,9 +126,9 @@ use { signers::Signers, }, serde::Serialize, + solana_feature_set as feature_set, solana_program::{system_instruction::SystemInstruction, system_program}, solana_sanitize::{Sanitize, SanitizeError}, - solana_sdk::feature_set, solana_short_vec as short_vec, std::result, }; diff --git a/sdk/src/transaction/sanitized.rs b/sdk/src/transaction/sanitized.rs index 5384388987e299..3027578918e1dd 100644 --- a/sdk/src/transaction/sanitized.rs +++ b/sdk/src/transaction/sanitized.rs @@ -15,9 +15,9 @@ use { reserved_account_keys::ReservedAccountKeys, signature::Signature, simple_vote_transaction_checker::is_simple_vote_transaction, - solana_sdk::feature_set, transaction::{Result, Transaction, TransactionError, VersionedTransaction}, }, + solana_feature_set as feature_set, solana_program::message::SanitizedVersionedMessage, solana_sanitize::Sanitize, std::collections::HashSet, diff --git a/svm/Cargo.toml b/svm/Cargo.toml index 9f0d80c4d1f5ad..2b2a44646e7604 100644 --- a/svm/Cargo.toml +++ b/svm/Cargo.toml @@ -18,6 +18,7 @@ serde = { workspace = true, features = ["rc"] } serde_derive = { workspace = true } solana-bpf-loader-program = { workspace = true } solana-compute-budget = { workspace = true } +solana-feature-set = { workspace = true } solana-fee = { workspace = true } solana-frozen-abi = { workspace = true, optional = true } solana-frozen-abi-macro = { workspace = true, optional = true } diff --git a/svm/src/account_loader.rs b/svm/src/account_loader.rs index 0799ac8ba3cec7..c139ea15130319 100644 --- a/svm/src/account_loader.rs +++ b/svm/src/account_loader.rs @@ -8,10 +8,10 @@ use { }, itertools::Itertools, solana_compute_budget::compute_budget_limits::ComputeBudgetLimits, + solana_feature_set::{self as feature_set, FeatureSet}, solana_program_runtime::loaded_programs::{ProgramCacheEntry, ProgramCacheForTxBatch}, solana_sdk::{ account::{Account, AccountSharedData, ReadableAccount, WritableAccount}, - feature_set::{self, FeatureSet}, fee::FeeDetails, native_loader, nonce::State as NonceState, @@ -583,12 +583,12 @@ mod tests { }, nonce::state::Versions as NonceVersions, solana_compute_budget::{compute_budget::ComputeBudget, compute_budget_limits}, + solana_feature_set::FeatureSet, solana_program_runtime::loaded_programs::{ProgramCacheEntry, ProgramCacheForTxBatch}, solana_sdk::{ account::{Account, AccountSharedData, ReadableAccount, WritableAccount}, bpf_loader_upgradeable, epoch_schedule::EpochSchedule, - feature_set::FeatureSet, hash::Hash, instruction::CompiledInstruction, message::{ diff --git a/svm/src/message_processor.rs b/svm/src/message_processor.rs index 39a1b0ad1b9ee0..7b9d248e5b981f 100644 --- a/svm/src/message_processor.rs +++ b/svm/src/message_processor.rs @@ -138,6 +138,7 @@ mod tests { use { super::*, solana_compute_budget::compute_budget::ComputeBudget, + solana_feature_set::FeatureSet, solana_program_runtime::{ declare_process_instruction, invoke_context::EnvironmentConfig, @@ -146,7 +147,6 @@ mod tests { }, solana_sdk::{ account::{AccountSharedData, ReadableAccount}, - feature_set::FeatureSet, hash::Hash, instruction::{AccountMeta, Instruction, InstructionError}, message::{AccountKeys, Message, SanitizedMessage}, diff --git a/svm/src/transaction_processor.rs b/svm/src/transaction_processor.rs index c6a5e43149949e..76ececd6ec5cd0 100644 --- a/svm/src/transaction_processor.rs +++ b/svm/src/transaction_processor.rs @@ -24,6 +24,9 @@ use { create_program_runtime_environment_v1, create_program_runtime_environment_v2, }, solana_compute_budget::compute_budget::ComputeBudget, + solana_feature_set::{ + enable_transaction_loading_failure_fees, remove_rounding_in_fee_calculation, FeatureSet, + }, solana_log_collector::LogCollector, solana_measure::{measure::Measure, measure_us}, solana_program_runtime::{ @@ -38,7 +41,6 @@ use { solana_sdk::{ account::{AccountSharedData, ReadableAccount, PROGRAM_OWNERS}, clock::{Epoch, Slot}, - feature_set::{self, remove_rounding_in_fee_calculation, FeatureSet}, fee::{FeeBudgetLimits, FeeStructure}, hash::Hash, inner_instruction::{InnerInstruction, InnerInstructionsList}, @@ -298,7 +300,7 @@ impl TransactionBatchProcessor { let enable_transaction_loading_failure_fees = environment .feature_set - .is_active(&feature_set::enable_transaction_loading_failure_fees::id()); + .is_active(&enable_transaction_loading_failure_fees::id()); let (processing_results, execution_us): (Vec, u64) = measure_us!(loaded_transactions .into_iter() @@ -999,13 +1001,13 @@ mod tests { rollback_accounts::RollbackAccounts, }, solana_compute_budget::compute_budget_limits::ComputeBudgetLimits, + solana_feature_set::FeatureSet, solana_program_runtime::loaded_programs::{BlockRelation, ProgramCacheEntryType}, solana_sdk::{ account::{create_account_shared_data_for_test, WritableAccount}, bpf_loader, compute_budget::ComputeBudgetInstruction, epoch_schedule::EpochSchedule, - feature_set::FeatureSet, fee::FeeDetails, fee_calculator::FeeCalculator, hash::Hash, diff --git a/svm/tests/conformance.rs b/svm/tests/conformance.rs index 5015e1fadd9d0c..dc521bc36eee15 100644 --- a/svm/tests/conformance.rs +++ b/svm/tests/conformance.rs @@ -7,6 +7,7 @@ use { prost::Message, solana_bpf_loader_program::syscalls::create_program_runtime_environment_v1, solana_compute_budget::compute_budget::ComputeBudget, + solana_feature_set::{FeatureSet, FEATURE_NAMES}, solana_log_collector::LogCollector, solana_program_runtime::{ invoke_context::{EnvironmentConfig, InvokeContext}, @@ -19,7 +20,6 @@ use { solana_sdk::{ account::{AccountSharedData, ReadableAccount, WritableAccount}, bpf_loader_upgradeable, - feature_set::{FeatureSet, FEATURE_NAMES}, hash::Hash, instruction::AccountMeta, message::SanitizedMessage, diff --git a/svm/tests/mock_bank.rs b/svm/tests/mock_bank.rs index 6ece85bfcc1385..57f00360e91bfb 100644 --- a/svm/tests/mock_bank.rs +++ b/svm/tests/mock_bank.rs @@ -4,6 +4,7 @@ use { SyscallMemset, SyscallSetReturnData, }, solana_compute_budget::compute_budget::ComputeBudget, + solana_feature_set::FeatureSet, solana_program_runtime::{ invoke_context::InvokeContext, loaded_programs::{ @@ -18,7 +19,6 @@ use { account::{AccountSharedData, ReadableAccount, WritableAccount}, bpf_loader_upgradeable::{self, UpgradeableLoaderState}, clock::{Clock, UnixTimestamp}, - feature_set::FeatureSet, native_loader, pubkey::Pubkey, slot_hashes::Slot, diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 1d73cf10c097a9..4fa4330f90be00 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -20,6 +20,7 @@ solana-accounts-db = { workspace = true } solana-cli-output = { workspace = true } solana-compute-budget = { workspace = true } solana-core = { workspace = true } +solana-feature-set = { workspace = true } solana-geyser-plugin-manager = { workspace = true } solana-gossip = { workspace = true } solana-ledger = { workspace = true } diff --git a/test-validator/src/lib.rs b/test-validator/src/lib.rs index a86b5c79d87070..199c61237ed403 100644 --- a/test-validator/src/lib.rs +++ b/test-validator/src/lib.rs @@ -15,6 +15,7 @@ use { consensus::tower_storage::TowerStorage, validator::{Validator, ValidatorConfig, ValidatorStartProgress}, }, + solana_feature_set::FEATURE_NAMES, solana_geyser_plugin_manager::{ geyser_plugin_manager::GeyserPluginManager, GeyserPluginManagerRequest, }, @@ -43,8 +44,6 @@ use { commitment_config::CommitmentConfig, epoch_schedule::EpochSchedule, exit::Exit, - feature, - feature_set::FEATURE_NAMES, fee_calculator::FeeRateGovernor, instruction::{AccountMeta, Instruction}, message::Message, @@ -444,7 +443,7 @@ impl TestValidatorGenesis { .for_each(|(maybe_account, feature_id)| { if maybe_account .as_ref() - .and_then(feature::from_account) + .and_then(solana_sdk::feature::from_account) .and_then(|feature| feature.activated_at) .is_none() { diff --git a/turbine/Cargo.toml b/turbine/Cargo.toml index a03d384d94516c..0addbaf6866f74 100644 --- a/turbine/Cargo.toml +++ b/turbine/Cargo.toml @@ -24,6 +24,7 @@ rand_chacha = { workspace = true } rayon = { workspace = true } rustls = { workspace = true } solana-entry = { workspace = true } +solana-feature-set = { workspace = true } solana-gossip = { workspace = true } solana-ledger = { workspace = true } solana-measure = { workspace = true } diff --git a/turbine/src/cluster_nodes.rs b/turbine/src/cluster_nodes.rs index 3ee66011e58a9c..be3bca47458f30 100644 --- a/turbine/src/cluster_nodes.rs +++ b/turbine/src/cluster_nodes.rs @@ -4,6 +4,7 @@ use { lazy_lru::LruCache, rand::{seq::SliceRandom, Rng, SeedableRng}, rand_chacha::ChaChaRng, + solana_feature_set as feature_set, solana_gossip::{ cluster_info::ClusterInfo, contact_info::{ContactInfo, Protocol}, @@ -16,7 +17,6 @@ use { solana_runtime::bank::Bank, solana_sdk::{ clock::{Epoch, Slot}, - feature_set, genesis_config::ClusterType, native_token::LAMPORTS_PER_SOL, pubkey::Pubkey, diff --git a/turbine/src/sigverify_shreds.rs b/turbine/src/sigverify_shreds.rs index 320b95ac24188e..b1b4530b666e72 100644 --- a/turbine/src/sigverify_shreds.rs +++ b/turbine/src/sigverify_shreds.rs @@ -5,6 +5,7 @@ use { }, crossbeam_channel::{Receiver, RecvTimeoutError, SendError, Sender}, rayon::{prelude::*, ThreadPool, ThreadPoolBuilder}, + solana_feature_set as feature_set, solana_gossip::cluster_info::ClusterInfo, solana_ledger::{ leader_schedule_cache::LeaderScheduleCache, @@ -19,7 +20,6 @@ use { }, solana_sdk::{ clock::Slot, - feature_set, pubkey::Pubkey, signature::{Keypair, Signer}, }, diff --git a/version/Cargo.toml b/version/Cargo.toml index e2f26ddfa760e7..8fd935b5ae9b25 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -14,6 +14,7 @@ log = { workspace = true } semver = { workspace = true } serde = { workspace = true } serde_derive = { workspace = true } +solana-feature-set = { workspace = true } solana-frozen-abi = { workspace = true, optional = true } solana-frozen-abi-macro = { workspace = true, optional = true } solana-sanitize = { workspace = true } diff --git a/version/src/legacy.rs b/version/src/legacy.rs index 32d3dcd245c349..23629b7c247cde 100644 --- a/version/src/legacy.rs +++ b/version/src/legacy.rs @@ -41,11 +41,8 @@ impl From for LegacyVersion2 { impl Default for LegacyVersion2 { fn default() -> Self { - let feature_set = u32::from_le_bytes( - solana_sdk::feature_set::ID.as_ref()[..4] - .try_into() - .unwrap(), - ); + let feature_set = + u32::from_le_bytes(solana_feature_set::ID.as_ref()[..4].try_into().unwrap()); Self { major: env!("CARGO_PKG_VERSION_MAJOR").parse().unwrap(), minor: env!("CARGO_PKG_VERSION_MINOR").parse().unwrap(), diff --git a/version/src/lib.rs b/version/src/lib.rs index 5c6443f80c6d96..2a09817ccfbcd6 100644 --- a/version/src/lib.rs +++ b/version/src/lib.rs @@ -68,11 +68,8 @@ impl From for Version { impl Default for Version { fn default() -> Self { - let feature_set = u32::from_le_bytes( - solana_sdk::feature_set::ID.as_ref()[..4] - .try_into() - .unwrap(), - ); + let feature_set = + u32::from_le_bytes(solana_feature_set::ID.as_ref()[..4].try_into().unwrap()); Self { major: env!("CARGO_PKG_VERSION_MAJOR").parse().unwrap(), minor: env!("CARGO_PKG_VERSION_MINOR").parse().unwrap(),