Przeglądaj źródła

feat(lang): remove solana-program from anchor_lang (#3819)

* chore(lang): remove solana-program from anchor_lang

* fix(lang): replace deprecated realloc with resize in close function

* fix(lang): replace deprecated store_current_index to store_current_index_checked

* fix(lang): cargo clippy fixes

* chore: update CHANGELOG.md

* feat(lang): add solana-program-option dependency

* fix(lang): integrate solana-feature-gate-interface and get_stack_height

* chore: Update Cargo.lock files

* fix: elided lifetime warnings

* chore: Correct link reference in CHANGELOG.md

* chore: cargo sort
Swaroop M 1 miesiąc temu
rodzic
commit
db3da206de

+ 2 - 0
CHANGELOG.md

@@ -13,6 +13,7 @@ The minor version will be incremented upon a breaking change and the patch versi
 ### Features
 
 - lang: Add `#[error]` attribute to `declare_program!` ([#3757](https://github.com/coral-xyz/anchor/pull/3757)).
+- lang: Replace `solana-program` crate with smaller crates ([#3819](https://github.com/solana-foundation/anchor/pull/3819)).
 - cli: Replace `anchor verify` to use `solana-verify` under the hood, adding automatic installation via AVM, local path support, and future-proof argument passing ([#3768](https://github.com/solana-foundation/anchor/pull/3768)).
 
 ### Fixes
@@ -20,6 +21,7 @@ The minor version will be incremented upon a breaking change and the patch versi
 - docker: Upgrade `node` to 20.18.0 LTS ([#3687](https://github.com/solana-foundation/anchor/pull/3687)).
 - cli: Fix using deprecated commitment `recent` in migration scripts ([#3725](https://github.com/coral-xyz/anchor/pull/3725)).
 - cli: Fix not respecting `provider.cluster` in `keys sync` command ([#3761](https://github.com/coral-xyz/anchor/pull/3761)).
+- lang: Fix deprecated `realloc`, `store_current_index` and clippy warnings ([#3819](https://github.com/solana-foundation/anchor/pull/3819)).
 
 ### Breaking
 

Plik diff jest za duży
+ 442 - 89
Cargo.lock


+ 6 - 9
Cargo.toml

@@ -1,8 +1,3 @@
-[profile.release]
-lto = true
-
-[profile.release.package.anchor-cli]
-codegen-units = 1
 
 [workspace]
 members = [
@@ -16,8 +11,10 @@ members = [
     "lang/syn",
     "spl",
 ]
-exclude = [
-    "tests/swap/deps/openbook-dex",
-    "tests/cfo/deps/openbook-dex",
-]
+exclude = ["tests/cfo/deps/openbook-dex", "tests/swap/deps/openbook-dex"]
 resolver = "2"
+[profile.release]
+lto = true
+
+[profile.release.package.anchor-cli]
+codegen-units = 1

+ 2 - 2
cli/Cargo.toml

@@ -16,8 +16,8 @@ dev = []
 
 [dependencies]
 anchor-client = { path = "../client", version = "0.31.1" }
-anchor-lang-idl = { path = "../idl", version = "0.1.2", features = ["build", "convert"] }
 anchor-lang = { path = "../lang", version = "0.31.1" }
+anchor-lang-idl = { path = "../idl", version = "0.1.2", features = ["build", "convert"] }
 anyhow = "1.0.32"
 base64 = "0.21"
 bincode = "1.3.3"
@@ -36,8 +36,8 @@ semver = "1.0.4"
 serde = { version = "1.0.122", features = ["derive"] }
 serde_json = "1.0"
 shellexpand = "2.1.0"
-solana-client = "2"
 solana-cli-config = "2"
+solana-client = "2"
 solana-faucet = "2"
 solana-sdk = "2"
 syn = { version = "1.0.60", features = ["full", "extra-traits"] }

+ 5 - 5
idl/Cargo.toml

@@ -18,12 +18,12 @@ convert = ["heck", "sha2"]
 [dependencies]
 anchor-lang-idl-spec = { path = "./spec", version = "0.1.0" }
 anyhow = "1"
-serde = { version = "1", features = ["derive"] }
-serde_json = "1"
-
-# `build` feature only
-regex = { version = "1", optional = true }
 
 # `convert` feature only
 heck = { version = "0.3", optional = true }
+
+# `build` feature only
+regex = { version = "1", optional = true }
+serde = { version = "1", features = ["derive"] }
+serde_json = "1"
 sha2 = { version = "0.10", optional = true }

+ 25 - 3
lang/Cargo.toml

@@ -20,7 +20,7 @@ anchor-debug = [
     "anchor-attribute-error/anchor-debug",
     "anchor-attribute-event/anchor-debug",
     "anchor-attribute-program/anchor-debug",
-    "anchor-derive-accounts/anchor-debug"
+    "anchor-derive-accounts/anchor-debug",
 ]
 derive = []
 event-cpi = ["anchor-attribute-event/event-cpi"]
@@ -55,6 +55,28 @@ anchor-lang-idl = { path = "../idl", version = "0.1.2", optional = true }
 base64 = "0.21"
 bincode = "1"
 borsh = "0.10.3"
-bytemuck = "1"
-solana-program = "2"
+bytemuck = { version = "1", features = ["derive"] }
+solana-account-info = "2"
+solana-clock = "2"
+solana-cpi = "2"
+solana-define-syscall = "2"
+solana-feature-gate-interface = "2"
+solana-instruction = "2"
+solana-instructions-sysvar = "2"
+solana-loader-v3-interface = { version = "3", features = ["bincode"] }
+solana-msg = "2"
+solana-program-entrypoint = "2"
+solana-program-error = { version = "2", features = ["borsh"] }
+solana-program-memory = "2"
+solana-program-option = "2"
+solana-program-pack = "2"
+solana-pubkey = { version = "2", features = ["borsh", "bytemuck", "serde"] }
+solana-sdk-ids = "2"
+solana-system-interface = "1"
+solana-sysvar = { version = "2", features = ["bincode"] }
+solana-sysvar-id = "2"
 thiserror = "1"
+
+[lints.rust.unexpected_cfgs]
+ level = "warn"
+ check-cfg = ['cfg(target_os, values("solana"))']

+ 1 - 1
lang/derive/serde/Cargo.toml

@@ -18,5 +18,5 @@ lazy-account = []
 anchor-syn = { path = "../../syn", version = "0.31.1" }
 borsh-derive-internal = "0.10.3"
 proc-macro2 = "1"
-syn = { version = "1", features = ["full"] }
 quote = "1"
+syn = { version = "1", features = ["full"] }

+ 1 - 1
lang/src/account_meta.rs

@@ -1,5 +1,5 @@
 use crate::ToAccountMetas;
-use solana_program::instruction::AccountMeta;
+use solana_instruction::AccountMeta;
 
 impl ToAccountMetas for AccountMeta {
     fn to_account_metas(&self, _is_signer: Option<bool>) -> Vec<AccountMeta> {

+ 4 - 4
lang/src/accounts/account.rs

@@ -2,14 +2,14 @@
 
 use crate::bpf_writer::BpfWriter;
 use crate::error::{Error, ErrorCode};
+use crate::solana_program::account_info::AccountInfo;
+use crate::solana_program::instruction::AccountMeta;
+use crate::solana_program::pubkey::Pubkey;
+use crate::solana_program::system_program;
 use crate::{
     AccountDeserialize, AccountSerialize, Accounts, AccountsClose, AccountsExit, Key, Owner,
     Result, ToAccountInfo, ToAccountInfos, ToAccountMetas,
 };
-use solana_program::account_info::AccountInfo;
-use solana_program::instruction::AccountMeta;
-use solana_program::pubkey::Pubkey;
-use solana_program::system_program;
 use std::collections::BTreeSet;
 use std::fmt;
 use std::ops::{Deref, DerefMut};

+ 3 - 3
lang/src/accounts/account_info.rs

@@ -3,10 +3,10 @@
 //! should be used instead.
 
 use crate::error::ErrorCode;
+use crate::solana_program::account_info::AccountInfo;
+use crate::solana_program::instruction::AccountMeta;
+use crate::solana_program::pubkey::Pubkey;
 use crate::{Accounts, AccountsExit, Key, Result, ToAccountInfos, ToAccountMetas};
-use solana_program::account_info::AccountInfo;
-use solana_program::instruction::AccountMeta;
-use solana_program::pubkey::Pubkey;
 use std::collections::BTreeSet;
 
 impl<'info, B> Accounts<'info, B> for AccountInfo<'info> {

+ 3 - 3
lang/src/accounts/account_loader.rs

@@ -2,13 +2,13 @@
 
 use crate::bpf_writer::BpfWriter;
 use crate::error::{Error, ErrorCode};
+use crate::solana_program::account_info::AccountInfo;
+use crate::solana_program::instruction::AccountMeta;
+use crate::solana_program::pubkey::Pubkey;
 use crate::{
     Accounts, AccountsClose, AccountsExit, Key, Owner, Result, ToAccountInfo, ToAccountInfos,
     ToAccountMetas, ZeroCopy,
 };
-use solana_program::account_info::AccountInfo;
-use solana_program::instruction::AccountMeta;
-use solana_program::pubkey::Pubkey;
 use std::cell::{Ref, RefMut};
 use std::collections::BTreeSet;
 use std::fmt;

+ 3 - 3
lang/src/accounts/boxed.rs

@@ -13,10 +13,10 @@
 //! }
 //! ```
 
+use crate::solana_program::account_info::AccountInfo;
+use crate::solana_program::instruction::AccountMeta;
+use crate::solana_program::pubkey::Pubkey;
 use crate::{Accounts, AccountsClose, AccountsExit, Result, ToAccountInfos, ToAccountMetas};
-use solana_program::account_info::AccountInfo;
-use solana_program::instruction::AccountMeta;
-use solana_program::pubkey::Pubkey;
 use std::collections::BTreeSet;
 use std::ops::Deref;
 

+ 3 - 3
lang/src/accounts/interface.rs

@@ -2,13 +2,13 @@
 
 use crate::accounts::program::Program;
 use crate::error::{Error, ErrorCode};
+use crate::solana_program::account_info::AccountInfo;
+use crate::solana_program::instruction::AccountMeta;
+use crate::solana_program::pubkey::Pubkey;
 use crate::{
     AccountDeserialize, Accounts, AccountsExit, CheckId, Key, Result, ToAccountInfos,
     ToAccountMetas,
 };
-use solana_program::account_info::AccountInfo;
-use solana_program::instruction::AccountMeta;
-use solana_program::pubkey::Pubkey;
 use std::collections::BTreeSet;
 use std::ops::Deref;
 

+ 4 - 4
lang/src/accounts/interface_account.rs

@@ -2,14 +2,14 @@
 
 use crate::accounts::account::Account;
 use crate::error::ErrorCode;
+use crate::solana_program::account_info::AccountInfo;
+use crate::solana_program::instruction::AccountMeta;
+use crate::solana_program::pubkey::Pubkey;
+use crate::solana_program::system_program;
 use crate::{
     AccountDeserialize, AccountSerialize, Accounts, AccountsClose, AccountsExit, CheckOwner, Key,
     Owners, Result, ToAccountInfos, ToAccountMetas,
 };
-use solana_program::account_info::AccountInfo;
-use solana_program::instruction::AccountMeta;
-use solana_program::pubkey::Pubkey;
-use solana_program::system_program;
 use std::collections::BTreeSet;
 use std::fmt;
 use std::ops::{Deref, DerefMut};

+ 3 - 3
lang/src/accounts/option.rs

@@ -10,9 +10,9 @@
 
 use std::collections::BTreeSet;
 
-use solana_program::account_info::AccountInfo;
-use solana_program::instruction::AccountMeta;
-use solana_program::pubkey::Pubkey;
+use crate::solana_program::account_info::AccountInfo;
+use crate::solana_program::instruction::AccountMeta;
+use crate::solana_program::pubkey::Pubkey;
 
 use crate::{
     error::ErrorCode, Accounts, AccountsClose, AccountsExit, Result, ToAccountInfos, ToAccountMetas,

+ 4 - 4
lang/src/accounts/program.rs

@@ -1,13 +1,13 @@
 //! Type validating that the account is the given Program
 
 use crate::error::{Error, ErrorCode};
+use crate::solana_program::account_info::AccountInfo;
+use crate::solana_program::bpf_loader_upgradeable::{self, UpgradeableLoaderState};
+use crate::solana_program::instruction::AccountMeta;
+use crate::solana_program::pubkey::Pubkey;
 use crate::{
     AccountDeserialize, Accounts, AccountsExit, Id, Key, Result, ToAccountInfos, ToAccountMetas,
 };
-use solana_program::account_info::AccountInfo;
-use solana_program::bpf_loader_upgradeable::{self, UpgradeableLoaderState};
-use solana_program::instruction::AccountMeta;
-use solana_program::pubkey::Pubkey;
 use std::collections::BTreeSet;
 use std::fmt;
 use std::marker::PhantomData;

+ 3 - 3
lang/src/accounts/signer.rs

@@ -1,9 +1,9 @@
 //! Type validating that the account signed the transaction
 use crate::error::ErrorCode;
+use crate::solana_program::account_info::AccountInfo;
+use crate::solana_program::instruction::AccountMeta;
+use crate::solana_program::pubkey::Pubkey;
 use crate::{Accounts, AccountsExit, Key, Result, ToAccountInfos, ToAccountMetas};
-use solana_program::account_info::AccountInfo;
-use solana_program::instruction::AccountMeta;
-use solana_program::pubkey::Pubkey;
 use std::collections::BTreeSet;
 use std::ops::Deref;
 

+ 1 - 1
lang/src/accounts/system_account.rs

@@ -1,8 +1,8 @@
 //! Type validating that the account is owned by the system program
 
 use crate::error::ErrorCode;
+use crate::solana_program::system_program;
 use crate::*;
-use solana_program::system_program;
 use std::ops::Deref;
 
 /// Type validating that the account is owned by the system program

+ 17 - 15
lang/src/accounts/sysvar.rs

@@ -1,10 +1,10 @@
 //! Type validating that the account is a sysvar and deserializing it
 
 use crate::error::ErrorCode;
+use crate::solana_program::account_info::AccountInfo;
+use crate::solana_program::instruction::AccountMeta;
+use crate::solana_program::pubkey::Pubkey;
 use crate::{Accounts, AccountsExit, Key, Result, ToAccountInfos, ToAccountMetas};
-use solana_program::account_info::AccountInfo;
-use solana_program::instruction::AccountMeta;
-use solana_program::pubkey::Pubkey;
 use std::collections::BTreeSet;
 use std::fmt;
 use std::ops::{Deref, DerefMut};
@@ -30,12 +30,12 @@ use std::ops::{Deref, DerefMut};
 ///     let clock = Clock::get()?;
 /// }
 /// ```
-pub struct Sysvar<'info, T: solana_program::sysvar::Sysvar> {
+pub struct Sysvar<'info, T: crate::solana_program::sysvar::Sysvar> {
     info: &'info AccountInfo<'info>,
     account: T,
 }
 
-impl<T: solana_program::sysvar::Sysvar + fmt::Debug> fmt::Debug for Sysvar<'_, T> {
+impl<T: crate::solana_program::sysvar::Sysvar + fmt::Debug> fmt::Debug for Sysvar<'_, T> {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
         f.debug_struct("Sysvar")
             .field("info", &self.info)
@@ -44,7 +44,7 @@ impl<T: solana_program::sysvar::Sysvar + fmt::Debug> fmt::Debug for Sysvar<'_, T
     }
 }
 
-impl<'info, T: solana_program::sysvar::Sysvar> Sysvar<'info, T> {
+impl<'info, T: crate::solana_program::sysvar::Sysvar> Sysvar<'info, T> {
     pub fn from_account_info(acc_info: &'info AccountInfo<'info>) -> Result<Sysvar<'info, T>> {
         match T::from_account_info(acc_info) {
             Ok(val) => Ok(Sysvar {
@@ -56,7 +56,7 @@ impl<'info, T: solana_program::sysvar::Sysvar> Sysvar<'info, T> {
     }
 }
 
-impl<T: solana_program::sysvar::Sysvar> Clone for Sysvar<'_, T> {
+impl<T: crate::solana_program::sysvar::Sysvar> Clone for Sysvar<'_, T> {
     fn clone(&self) -> Self {
         Self {
             info: self.info,
@@ -65,7 +65,7 @@ impl<T: solana_program::sysvar::Sysvar> Clone for Sysvar<'_, T> {
     }
 }
 
-impl<'info, B, T: solana_program::sysvar::Sysvar> Accounts<'info, B> for Sysvar<'info, T> {
+impl<'info, B, T: crate::solana_program::sysvar::Sysvar> Accounts<'info, B> for Sysvar<'info, T> {
     fn try_accounts(
         _program_id: &Pubkey,
         accounts: &mut &'info [AccountInfo<'info>],
@@ -82,25 +82,27 @@ impl<'info, B, T: solana_program::sysvar::Sysvar> Accounts<'info, B> for Sysvar<
     }
 }
 
-impl<T: solana_program::sysvar::Sysvar> ToAccountMetas for Sysvar<'_, T> {
+impl<T: crate::solana_program::sysvar::Sysvar> ToAccountMetas for Sysvar<'_, T> {
     fn to_account_metas(&self, _is_signer: Option<bool>) -> Vec<AccountMeta> {
         vec![AccountMeta::new_readonly(*self.info.key, false)]
     }
 }
 
-impl<'info, T: solana_program::sysvar::Sysvar> ToAccountInfos<'info> for Sysvar<'info, T> {
+impl<'info, T: crate::solana_program::sysvar::Sysvar> ToAccountInfos<'info> for Sysvar<'info, T> {
     fn to_account_infos(&self) -> Vec<AccountInfo<'info>> {
         vec![self.info.clone()]
     }
 }
 
-impl<'info, T: solana_program::sysvar::Sysvar> AsRef<AccountInfo<'info>> for Sysvar<'info, T> {
+impl<'info, T: crate::solana_program::sysvar::Sysvar> AsRef<AccountInfo<'info>>
+    for Sysvar<'info, T>
+{
     fn as_ref(&self) -> &AccountInfo<'info> {
         self.info
     }
 }
 
-impl<T: solana_program::sysvar::Sysvar> Deref for Sysvar<'_, T> {
+impl<T: crate::solana_program::sysvar::Sysvar> Deref for Sysvar<'_, T> {
     type Target = T;
 
     fn deref(&self) -> &Self::Target {
@@ -108,15 +110,15 @@ impl<T: solana_program::sysvar::Sysvar> Deref for Sysvar<'_, T> {
     }
 }
 
-impl<T: solana_program::sysvar::Sysvar> DerefMut for Sysvar<'_, T> {
+impl<T: crate::solana_program::sysvar::Sysvar> DerefMut for Sysvar<'_, T> {
     fn deref_mut(&mut self) -> &mut Self::Target {
         &mut self.account
     }
 }
 
-impl<'info, T: solana_program::sysvar::Sysvar> AccountsExit<'info> for Sysvar<'info, T> {}
+impl<'info, T: crate::solana_program::sysvar::Sysvar> AccountsExit<'info> for Sysvar<'info, T> {}
 
-impl<T: solana_program::sysvar::Sysvar> Key for Sysvar<'_, T> {
+impl<T: crate::solana_program::sysvar::Sysvar> Key for Sysvar<'_, T> {
     fn key(&self) -> Pubkey {
         *self.info.key
     }

+ 3 - 3
lang/src/accounts/unchecked_account.rs

@@ -2,10 +2,10 @@
 //! that no checks are performed
 
 use crate::error::ErrorCode;
+use crate::solana_program::account_info::AccountInfo;
+use crate::solana_program::instruction::AccountMeta;
+use crate::solana_program::pubkey::Pubkey;
 use crate::{Accounts, AccountsExit, Key, Result, ToAccountInfos, ToAccountMetas};
-use solana_program::account_info::AccountInfo;
-use solana_program::instruction::AccountMeta;
-use solana_program::pubkey::Pubkey;
 use std::collections::BTreeSet;
 use std::ops::Deref;
 

+ 3 - 3
lang/src/bpf_upgradeable_state.rs

@@ -1,8 +1,8 @@
 use crate::error::ErrorCode;
-use crate::{AccountDeserialize, AccountSerialize, Owner, Result};
-use solana_program::{
+use crate::solana_program::{
     bpf_loader_upgradeable::UpgradeableLoaderState, program_error::ProgramError, pubkey::Pubkey,
 };
+use crate::{AccountDeserialize, AccountSerialize, Owner, Result};
 
 #[derive(Clone)]
 pub struct ProgramData {
@@ -45,7 +45,7 @@ impl AccountSerialize for ProgramData {
 }
 
 impl Owner for ProgramData {
-    fn owner() -> solana_program::pubkey::Pubkey {
+    fn owner() -> crate::solana_program::pubkey::Pubkey {
         anchor_lang::solana_program::bpf_loader_upgradeable::ID
     }
 }

+ 1 - 1
lang/src/bpf_writer.rs

@@ -1,4 +1,4 @@
-use solana_program::program_memory::sol_memcpy;
+use crate::solana_program::program_memory::sol_memcpy;
 use std::cmp;
 use std::io::{self, Write};
 

+ 3 - 3
lang/src/common.rs

@@ -1,7 +1,7 @@
 use crate::prelude::{Id, System};
+use crate::solana_program::account_info::AccountInfo;
+use crate::solana_program::system_program;
 use crate::Result;
-use solana_program::account_info::AccountInfo;
-use solana_program::system_program;
 
 pub fn close<'info>(info: AccountInfo<'info>, sol_destination: AccountInfo<'info>) -> Result<()> {
     // Transfer tokens from the account to the sol_destination.
@@ -11,7 +11,7 @@ pub fn close<'info>(info: AccountInfo<'info>, sol_destination: AccountInfo<'info
     **info.lamports.borrow_mut() = 0;
 
     info.assign(&system_program::ID);
-    info.realloc(0, false).map_err(Into::into)
+    info.resize(0).map_err(Into::into)
 }
 
 pub fn is_closed(info: &AccountInfo) -> bool {

+ 3 - 3
lang/src/context.rs

@@ -1,9 +1,9 @@
 //! Data structures that are used to provide non-argument inputs to program endpoints
 
+use crate::solana_program::account_info::AccountInfo;
+use crate::solana_program::instruction::AccountMeta;
+use crate::solana_program::pubkey::Pubkey;
 use crate::{Accounts, Bumps, ToAccountInfos, ToAccountMetas};
-use solana_program::account_info::AccountInfo;
-use solana_program::instruction::AccountMeta;
-use solana_program::pubkey::Pubkey;
 use std::fmt;
 
 /// Provides non-argument inputs to the program.

+ 1 - 1
lang/src/error.rs

@@ -1,6 +1,6 @@
+use crate::solana_program::{program_error::ProgramError, pubkey::Pubkey};
 use anchor_lang::error_code;
 use borsh::maybestd::io::Error as BorshIoError;
-use solana_program::{program_error::ProgramError, pubkey::Pubkey};
 use std::fmt::{Debug, Display};
 use std::num::TryFromIntError;
 

+ 112 - 20
lang/src/lib.rs

@@ -25,11 +25,11 @@
 
 extern crate self as anchor_lang;
 
+use crate::solana_program::account_info::AccountInfo;
+use crate::solana_program::instruction::AccountMeta;
+use crate::solana_program::program_error::ProgramError;
+use crate::solana_program::pubkey::Pubkey;
 use bytemuck::{Pod, Zeroable};
-use solana_program::account_info::AccountInfo;
-use solana_program::instruction::AccountMeta;
-use solana_program::program_error::ProgramError;
-use solana_program::pubkey::Pubkey;
 use std::{collections::BTreeSet, fmt::Debug, io::Write};
 
 mod account_meta;
@@ -63,7 +63,99 @@ pub use anchor_derive_space::InitSpace;
 /// Borsh is the default serialization format for instructions and accounts.
 pub use borsh::de::BorshDeserialize as AnchorDeserialize;
 pub use borsh::ser::BorshSerialize as AnchorSerialize;
-pub use solana_program;
+pub mod solana_program {
+    pub use solana_feature_gate_interface as feature;
+
+    pub use {
+        solana_account_info as account_info, solana_clock as clock, solana_cpi as program,
+        solana_msg::msg, solana_program_entrypoint as entrypoint,
+        solana_program_entrypoint::entrypoint, solana_program_error as program_error,
+        solana_program_memory as program_memory, solana_program_option as program_option,
+        solana_program_pack as program_pack, solana_pubkey as pubkey,
+        solana_sdk_ids::system_program, solana_system_interface::instruction as system_instruction,
+    };
+    pub mod instruction {
+        pub use solana_instruction::*;
+        /// Get the current stack height, transaction-level instructions are height
+        /// TRANSACTION_LEVEL_STACK_HEIGHT, fist invoked inner instruction is height
+        /// TRANSACTION_LEVEL_STACK_HEIGHT + 1, etc...
+        pub fn get_stack_height() -> usize {
+            #[cfg(target_os = "solana")]
+            unsafe {
+                solana_instruction::syscalls::sol_get_stack_height() as usize
+            }
+
+            #[cfg(not(target_os = "solana"))]
+            {
+                solana_sysvar::program_stubs::sol_get_stack_height() as usize
+            }
+        }
+    }
+    pub mod rent {
+        pub use solana_sysvar::rent::*;
+    }
+
+    pub mod bpf_loader_upgradeable {
+        #[allow(deprecated)]
+        pub use solana_loader_v3_interface::{
+            get_program_data_address,
+            instruction::{
+                close, close_any, create_buffer, deploy_with_max_program_len, extend_program,
+                is_close_instruction, is_set_authority_checked_instruction,
+                is_set_authority_instruction, is_upgrade_instruction, set_buffer_authority,
+                set_buffer_authority_checked, set_upgrade_authority, set_upgrade_authority_checked,
+                upgrade, write,
+            },
+            state::UpgradeableLoaderState,
+        };
+        pub use solana_sdk_ids::bpf_loader_upgradeable::{check_id, id, ID};
+    }
+
+    pub mod log {
+        pub use solana_msg::{msg, sol_log};
+        /// Print some slices as base64.
+        pub fn sol_log_data(data: &[&[u8]]) {
+            #[cfg(target_os = "solana")]
+            unsafe {
+                solana_define_syscall::definitions::sol_log_data(
+                    data as *const _ as *const u8,
+                    data.len() as u64,
+                )
+            };
+
+            #[cfg(not(target_os = "solana"))]
+            core::hint::black_box(data);
+        }
+    }
+    pub mod sysvar {
+        pub use solana_sysvar_id::{declare_deprecated_sysvar_id, declare_sysvar_id, SysvarId};
+        #[deprecated(since = "2.2.0", note = "Use `solana-sysvar` crate instead")]
+        #[allow(deprecated)]
+        pub use {
+            solana_sdk_ids::sysvar::{check_id, id, ID},
+            solana_sysvar::{
+                clock, epoch_rewards, epoch_schedule, fees, is_sysvar_id, last_restart_slot,
+                recent_blockhashes, rent, rewards, slot_hashes, slot_history, stake_history,
+                Sysvar, ALL_IDS,
+            },
+        };
+        pub mod instructions {
+            pub use solana_instruction::{BorrowedAccountMeta, BorrowedInstruction};
+            #[cfg(not(target_os = "solana"))]
+            pub use solana_instructions_sysvar::construct_instructions_data;
+            #[deprecated(
+                since = "2.2.0",
+                note = "Use solana-instructions-sysvar crate instead"
+            )]
+            pub use solana_instructions_sysvar::{
+                get_instruction_relative, load_current_index_checked, load_instruction_at_checked,
+                store_current_index_checked, Instructions,
+            };
+            #[deprecated(since = "2.2.0", note = "Use solana-sdk-ids crate instead")]
+            pub use solana_sdk_ids::sysvar::instructions::{check_id, id, ID};
+        }
+    }
+}
 
 #[cfg(feature = "event-cpi")]
 pub use anchor_attribute_event::{emit_cpi, event_cpi};
@@ -416,23 +508,23 @@ pub mod prelude {
         InitSpace, Key, Lamports, Owner, ProgramData, Result, Space, ToAccountInfo, ToAccountInfos,
         ToAccountMetas,
     };
+    pub use crate::solana_program::account_info::{next_account_info, AccountInfo};
+    pub use crate::solana_program::instruction::AccountMeta;
+    pub use crate::solana_program::msg;
+    pub use crate::solana_program::program_error::ProgramError;
+    pub use crate::solana_program::pubkey::Pubkey;
+    pub use crate::solana_program::sysvar::clock::Clock;
+    pub use crate::solana_program::sysvar::epoch_schedule::EpochSchedule;
+    pub use crate::solana_program::sysvar::instructions::Instructions;
+    pub use crate::solana_program::sysvar::rent::Rent;
+    pub use crate::solana_program::sysvar::rewards::Rewards;
+    pub use crate::solana_program::sysvar::slot_hashes::SlotHashes;
+    pub use crate::solana_program::sysvar::slot_history::SlotHistory;
+    pub use crate::solana_program::sysvar::stake_history::StakeHistory;
+    pub use crate::solana_program::sysvar::Sysvar as SolanaSysvar;
     pub use anchor_attribute_error::*;
     pub use borsh;
     pub use error::*;
-    pub use solana_program::account_info::{next_account_info, AccountInfo};
-    pub use solana_program::instruction::AccountMeta;
-    pub use solana_program::msg;
-    pub use solana_program::program_error::ProgramError;
-    pub use solana_program::pubkey::Pubkey;
-    pub use solana_program::sysvar::clock::Clock;
-    pub use solana_program::sysvar::epoch_schedule::EpochSchedule;
-    pub use solana_program::sysvar::instructions::Instructions;
-    pub use solana_program::sysvar::rent::Rent;
-    pub use solana_program::sysvar::rewards::Rewards;
-    pub use solana_program::sysvar::slot_hashes::SlotHashes;
-    pub use solana_program::sysvar::slot_history::SlotHistory;
-    pub use solana_program::sysvar::stake_history::StakeHistory;
-    pub use solana_program::sysvar::Sysvar as SolanaSysvar;
     pub use thiserror;
 
     #[cfg(feature = "event-cpi")]
@@ -457,7 +549,7 @@ pub mod __private {
 
     pub use crate::{bpf_writer::BpfWriter, common::is_closed};
 
-    use solana_program::pubkey::Pubkey;
+    use crate::solana_program::pubkey::Pubkey;
 
     // Used to calculate the maximum between two expressions.
     // It is necessary for the calculation of the enum space.

+ 2 - 2
lang/src/system_program.rs

@@ -1,7 +1,7 @@
 use crate::prelude::*;
-use solana_program::pubkey::Pubkey;
+use crate::solana_program::pubkey::Pubkey;
 
-pub use solana_program::system_program::ID;
+pub use crate::solana_program::system_program::ID;
 
 #[derive(Debug, Clone)]
 pub struct System;

+ 5 - 5
lang/src/vec.rs

@@ -1,7 +1,7 @@
+use crate::solana_program::account_info::AccountInfo;
+use crate::solana_program::instruction::AccountMeta;
+use crate::solana_program::pubkey::Pubkey;
 use crate::{Accounts, Result, ToAccountInfos, ToAccountMetas};
-use solana_program::account_info::AccountInfo;
-use solana_program::instruction::AccountMeta;
-use solana_program::pubkey::Pubkey;
 use std::collections::BTreeSet;
 
 impl<'info, T: ToAccountInfos<'info>> ToAccountInfos<'info> for Vec<T> {
@@ -37,8 +37,8 @@ impl<'info, B, T: Accounts<'info, B>> Accounts<'info, B> for Vec<T> {
 
 #[cfg(test)]
 mod tests {
-    use solana_program::clock::Epoch;
-    use solana_program::pubkey::Pubkey;
+    use crate::solana_program::clock::Epoch;
+    use crate::solana_program::pubkey::Pubkey;
 
     use super::*;
 

+ 3 - 3
lang/syn/Cargo.toml

@@ -23,6 +23,9 @@ interface-instructions = []
 [dependencies]
 anyhow = "1"
 bs58 = "0.5"
+
+# `idl-build` feature only
+cargo_toml = { version = "0.19", optional = true }
 heck = "0.3"
 proc-macro2 = { version = "1", features = ["span-locations"] }
 quote = "1"
@@ -31,6 +34,3 @@ serde_json = "1"
 sha2 = "0.10"
 syn = { version = "1", features = ["full", "extra-traits", "parsing"] }
 thiserror = "1"
-
-# `idl-build` feature only
-cargo_toml = { version = "0.19", optional = true }

+ 1 - 1
lang/tests/generics_test.rs

@@ -3,7 +3,7 @@
 use anchor_lang::prelude::borsh::maybestd::io::Write;
 use anchor_lang::prelude::*;
 use borsh::{BorshDeserialize, BorshSerialize};
-use solana_program::pubkey::Pubkey;
+use solana_pubkey::Pubkey;
 
 // Needed to declare accounts.
 declare_id!("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS");

+ 7 - 2
spl/Cargo.toml

@@ -23,7 +23,12 @@ mint = []
 stake = ["borsh"]
 token = ["spl-token"]
 token_2022 = ["spl-token-2022"]
-token_2022_extensions = ["spl-token-2022", "spl-token-group-interface", "spl-token-metadata-interface", "spl-pod"]
+token_2022_extensions = [
+    "spl-token-2022",
+    "spl-token-group-interface",
+    "spl-token-metadata-interface",
+    "spl-pod",
+]
 
 [dependencies]
 anchor-lang = { path = "../lang", version = "0.31.1", features = ["derive"] }
@@ -31,8 +36,8 @@ borsh = { version = "0.10.3", optional = true }
 mpl-token-metadata = { version = "5", optional = true }
 spl-associated-token-account = { version = "6", features = ["no-entrypoint"], optional = true }
 spl-memo = { version = "6", features = ["no-entrypoint"], optional = true }
+spl-pod = { version = "0.5", optional = true }
 spl-token = { version = "7", features = ["no-entrypoint"], optional = true }
 spl-token-2022 = { version = "6", features = ["no-entrypoint"], optional = true }
 spl-token-group-interface = { version = "0.5", optional = true }
 spl-token-metadata-interface = { version = "0.6", optional = true }
-spl-pod = { version = "0.5", optional = true }

+ 35 - 2
tests/auction-house/Cargo.lock

@@ -170,7 +170,25 @@ dependencies = [
  "bincode",
  "borsh 0.10.4",
  "bytemuck",
- "solana-program",
+ "solana-account-info",
+ "solana-clock",
+ "solana-cpi",
+ "solana-define-syscall",
+ "solana-feature-gate-interface",
+ "solana-instruction",
+ "solana-instructions-sysvar",
+ "solana-loader-v3-interface 3.0.0",
+ "solana-msg",
+ "solana-program-entrypoint",
+ "solana-program-error",
+ "solana-program-memory",
+ "solana-program-option",
+ "solana-program-pack",
+ "solana-pubkey",
+ "solana-sdk-ids",
+ "solana-system-interface",
+ "solana-sysvar",
+ "solana-sysvar-id",
  "thiserror 1.0.69",
 ]
 
@@ -1648,6 +1666,21 @@ dependencies = [
  "solana-sdk-ids",
 ]
 
+[[package]]
+name = "solana-loader-v3-interface"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa4be76cfa9afd84ca2f35ebc09f0da0f0092935ccdac0595d98447f259538c2"
+dependencies = [
+ "serde",
+ "serde_bytes",
+ "serde_derive",
+ "solana-instruction",
+ "solana-pubkey",
+ "solana-sdk-ids",
+ "solana-system-interface",
+]
+
 [[package]]
 name = "solana-loader-v3-interface"
 version = "5.0.0"
@@ -1777,7 +1810,7 @@ dependencies = [
  "solana-keccak-hasher",
  "solana-last-restart-slot",
  "solana-loader-v2-interface",
- "solana-loader-v3-interface",
+ "solana-loader-v3-interface 5.0.0",
  "solana-loader-v4-interface",
  "solana-message",
  "solana-msg",

+ 35 - 2
tests/spl/metadata/Cargo.lock

@@ -170,7 +170,25 @@ dependencies = [
  "bincode",
  "borsh 0.10.4",
  "bytemuck",
- "solana-program",
+ "solana-account-info",
+ "solana-clock",
+ "solana-cpi",
+ "solana-define-syscall",
+ "solana-feature-gate-interface",
+ "solana-instruction",
+ "solana-instructions-sysvar",
+ "solana-loader-v3-interface 3.0.0",
+ "solana-msg",
+ "solana-program-entrypoint",
+ "solana-program-error",
+ "solana-program-memory",
+ "solana-program-option",
+ "solana-program-pack",
+ "solana-pubkey",
+ "solana-sdk-ids",
+ "solana-system-interface",
+ "solana-sysvar",
+ "solana-sysvar-id",
  "thiserror 1.0.69",
 ]
 
@@ -1646,6 +1664,21 @@ dependencies = [
  "solana-sdk-ids",
 ]
 
+[[package]]
+name = "solana-loader-v3-interface"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa4be76cfa9afd84ca2f35ebc09f0da0f0092935ccdac0595d98447f259538c2"
+dependencies = [
+ "serde",
+ "serde_bytes",
+ "serde_derive",
+ "solana-instruction",
+ "solana-pubkey",
+ "solana-sdk-ids",
+ "solana-system-interface",
+]
+
 [[package]]
 name = "solana-loader-v3-interface"
 version = "5.0.0"
@@ -1775,7 +1808,7 @@ dependencies = [
  "solana-keccak-hasher",
  "solana-last-restart-slot",
  "solana-loader-v2-interface",
- "solana-loader-v3-interface",
+ "solana-loader-v3-interface 5.0.0",
  "solana-loader-v4-interface",
  "solana-message",
  "solana-msg",

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików