diff --git a/cli/src/program.rs b/cli/src/program.rs index d67be65984af7d..78c52d7366327c 100644 --- a/cli/src/program.rs +++ b/cli/src/program.rs @@ -1316,6 +1316,17 @@ fn process_program_deploy( fetch_feature_set(&rpc_client)? }; + if !skip_feature_verification { + if feature_set.is_active(&solana_feature_set::enable_loader_v4::id()) { + warn!("Loader-v4 is available now. Please migrate your program."); + } + if do_initial_deploy + && feature_set.is_active(&solana_feature_set::disable_new_loader_v3_deployments::id()) + { + return Err("No new programs can be deployed on loader-v3. Please use the program-v4 subcommand instead.".into()); + } + } + let (program_data, program_len, buffer_program_data) = if let Some(program_location) = program_location { let program_data = read_and_verify_elf(program_location, feature_set)?; @@ -2472,6 +2483,7 @@ fn do_process_program_deploy( // Create and add final message let final_message = { + #[allow(deprecated)] let instructions = bpf_loader_upgradeable::deploy_with_max_program_len( &fee_payer_signer.pubkey(), &program_signers[0].pubkey(), diff --git a/programs/sbf/Cargo.lock b/programs/sbf/Cargo.lock index f7e6cdf72630ea..081c74ce2608e5 100644 --- a/programs/sbf/Cargo.lock +++ b/programs/sbf/Cargo.lock @@ -7430,13 +7430,6 @@ dependencies = [ "solana-program", ] -[[package]] -name = "solana-sbf-rust-finalize" -version = "2.2.0" -dependencies = [ - "solana-program", -] - [[package]] name = "solana-sbf-rust-get-minimum-delegation" version = "2.2.0" diff --git a/programs/sbf/Cargo.toml b/programs/sbf/Cargo.toml index 344e76b2f1e93b..919a267b03deed 100644 --- a/programs/sbf/Cargo.toml +++ b/programs/sbf/Cargo.toml @@ -166,7 +166,6 @@ members = [ "rust/dup_accounts", "rust/error_handling", "rust/external_spend", - "rust/finalize", "rust/get_minimum_delegation", "rust/inner_instruction_alignment_check", "rust/instruction_introspection", diff --git a/programs/sbf/rust/finalize/Cargo.toml b/programs/sbf/rust/finalize/Cargo.toml deleted file mode 100644 index 5372775f97d169..00000000000000 --- a/programs/sbf/rust/finalize/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "solana-sbf-rust-finalize" -version = { workspace = true } -description = { workspace = true } -authors = { workspace = true } -repository = { workspace = true } -homepage = { workspace = true } -license = { workspace = true } -edition = { workspace = true } - -[dependencies] -solana-program = { workspace = true } - -[lib] -crate-type = ["cdylib"] - -[lints] -workspace = true diff --git a/programs/sbf/rust/finalize/src/lib.rs b/programs/sbf/rust/finalize/src/lib.rs deleted file mode 100644 index 6c6b6bb8b61062..00000000000000 --- a/programs/sbf/rust/finalize/src/lib.rs +++ /dev/null @@ -1,25 +0,0 @@ -//! Example Rust-based SBF sanity program that finalizes a BPF program - -#![allow(unreachable_code)] - -extern crate solana_program; -use solana_program::{ - account_info::AccountInfo, bpf_loader, entrypoint::ProgramResult, loader_instruction, msg, - program::invoke, pubkey::Pubkey, -}; - -solana_program::entrypoint_no_alloc!(process_instruction); -fn process_instruction( - _program_id: &Pubkey, - accounts: &[AccountInfo], - _instruction_data: &[u8], -) -> ProgramResult { - msg!("Finalize a program"); - invoke( - &loader_instruction::finalize(&accounts[0].key.clone(), &bpf_loader::id()), - accounts, - )?; - msg!("check executable"); - assert!(accounts[0].executable); - Ok(()) -} diff --git a/programs/sbf/tests/programs.rs b/programs/sbf/tests/programs.rs index 52fb4efab0759b..0b6d310c73d109 100644 --- a/programs/sbf/tests/programs.rs +++ b/programs/sbf/tests/programs.rs @@ -23,7 +23,7 @@ use { }, loader_utils::{ create_program, instructions_to_load_program_of_loader_v4, load_program_from_file, - load_program_of_loader_v4, load_upgradeable_buffer, load_upgradeable_program, + load_program_of_loader_v4, load_upgradeable_buffer, }, }, solana_runtime_transaction::runtime_transaction::RuntimeTransaction, @@ -1491,7 +1491,8 @@ fn test_program_sbf_invoke_stable_genesis_and_bank() { TransactionError::ProgramAccountNotFound ); - load_upgradeable_program( + #[allow(deprecated)] + solana_runtime::loader_utils::load_upgradeable_program( &bank_client, &mint_keypair, &buffer_keypair, @@ -1504,7 +1505,8 @@ fn test_program_sbf_invoke_stable_genesis_and_bank() { let indirect_program_keypair = Keypair::from_base58_string( "2BgE4gD5wUCwiAVPYbmWd2xzXSsD9W2fWgNjwmVkm8WL7i51vK9XAXNnX1VB6oKQZmjaUPRd5RzE6RggB9DeKbZC", ); - load_upgradeable_program( + #[allow(deprecated)] + solana_runtime::loader_utils::load_upgradeable_program( &bank_client, &mint_keypair, &buffer_keypair, diff --git a/runtime/src/bank/tests.rs b/runtime/src/bank/tests.rs index 026e3509a360a3..0c2ed42bb9d7e6 100644 --- a/runtime/src/bank/tests.rs +++ b/runtime/src/bank/tests.rs @@ -7243,6 +7243,7 @@ fn test_bank_load_program() { } } +#[allow(deprecated)] #[test] fn test_bpf_loader_upgradeable_deploy_with_max_len() { let (genesis_config, mint_keypair) = create_genesis_config_no_tx_fee(1_000_000_000); diff --git a/runtime/src/loader_utils.rs b/runtime/src/loader_utils.rs index 7c849560b294ed..848cbf691d3b90 100644 --- a/runtime/src/loader_utils.rs +++ b/runtime/src/loader_utils.rs @@ -119,6 +119,7 @@ pub fn load_upgradeable_buffer( program } +#[deprecated(since = "2.2.0", note = "Use load_program_of_loader_v4() instead")] pub fn load_upgradeable_program( bank_client: &BankClient, from_keypair: &Keypair, @@ -135,6 +136,7 @@ pub fn load_upgradeable_program( name, ); + #[allow(deprecated)] let message = Message::new( &bpf_loader_upgradeable::deploy_with_max_program_len( &from_keypair.pubkey(), @@ -165,6 +167,7 @@ pub fn load_upgradeable_program( }); } +#[deprecated(since = "2.2.0", note = "Use load_program_of_loader_v4() instead")] pub fn load_upgradeable_program_wrapper( bank_client: &BankClient, mint_keypair: &Keypair, @@ -173,6 +176,7 @@ pub fn load_upgradeable_program_wrapper( ) -> Pubkey { let buffer_keypair = Keypair::new(); let program_keypair = Keypair::new(); + #[allow(deprecated)] load_upgradeable_program( bank_client, mint_keypair, @@ -184,6 +188,7 @@ pub fn load_upgradeable_program_wrapper( program_keypair.pubkey() } +#[deprecated(since = "2.2.0", note = "Use load_program_of_loader_v4() instead")] pub fn load_upgradeable_program_and_advance_slot( bank_client: &mut BankClient, bank_forks: &RwLock, @@ -191,6 +196,7 @@ pub fn load_upgradeable_program_and_advance_slot( authority_keypair: &Keypair, name: &str, ) -> (Arc, Pubkey) { + #[allow(deprecated)] let program_id = load_upgradeable_program_wrapper(bank_client, mint_keypair, authority_keypair, name); diff --git a/sdk/loader-v2-interface/src/lib.rs b/sdk/loader-v2-interface/src/lib.rs index b435792bdc3db8..401a5f8ad64bf9 100644 --- a/sdk/loader-v2-interface/src/lib.rs +++ b/sdk/loader-v2-interface/src/lib.rs @@ -38,6 +38,7 @@ pub enum LoaderInstruction { Finalize, } +#[deprecated(since = "2.2.0", note = "Use loader-v4 instead")] #[cfg(feature = "bincode")] pub fn write( account_pubkey: &Pubkey, @@ -53,6 +54,7 @@ pub fn write( ) } +#[deprecated(since = "2.2.0", note = "Use loader-v4 instead")] #[cfg(feature = "bincode")] pub fn finalize(account_pubkey: &Pubkey, program_id: &Pubkey) -> Instruction { let account_metas = vec![ diff --git a/sdk/loader-v3-interface/src/instruction.rs b/sdk/loader-v3-interface/src/instruction.rs index 5aaee4d50f35cb..3a970df9964f03 100644 --- a/sdk/loader-v3-interface/src/instruction.rs +++ b/sdk/loader-v3-interface/src/instruction.rs @@ -220,6 +220,7 @@ pub fn write( ) } +#[deprecated(since = "2.2.0", note = "Use loader-v4 instead")] #[cfg(feature = "bincode")] /// Returns the instructions required to deploy a program with a specified /// maximum program length. The maximum length must be large enough to diff --git a/sdk/program/src/bpf_loader_upgradeable.rs b/sdk/program/src/bpf_loader_upgradeable.rs index ecd4796bacec5b..eb898f53ddff60 100644 --- a/sdk/program/src/bpf_loader_upgradeable.rs +++ b/sdk/program/src/bpf_loader_upgradeable.rs @@ -1,4 +1,5 @@ #[deprecated(since = "2.2.0", note = "Use solana-loader-v3-interface instead")] +#[allow(deprecated)] pub use solana_loader_v3_interface::{ get_program_data_address, instruction::{ diff --git a/transaction-status/src/parse_bpf_loader.rs b/transaction-status/src/parse_bpf_loader.rs index 9556c54d77f1ea..33df60eba104ba 100644 --- a/transaction-status/src/parse_bpf_loader.rs +++ b/transaction-status/src/parse_bpf_loader.rs @@ -222,6 +222,7 @@ mod test { let account_keys = vec![fee_payer, account_pubkey]; let missing_account_keys = vec![account_pubkey]; + #[allow(deprecated)] let instruction = solana_loader_v2_interface::write(&account_pubkey, &program_id, offset, bytes.clone()); let mut message = Message::new(&[instruction], Some(&fee_payer)); @@ -252,6 +253,7 @@ mod test { ) .is_err()); + #[allow(deprecated)] let instruction = solana_loader_v2_interface::finalize(&account_pubkey, &program_id); let mut message = Message::new(&[instruction], Some(&fee_payer)); assert_eq!( @@ -404,6 +406,7 @@ mod test { &bpf_loader_upgradeable::id(), ) .0; + #[allow(deprecated)] let instructions = bpf_loader_upgradeable::deploy_with_max_program_len( &payer_address, &program_address,