sdk: Make PubKey::create_program_address available in program unit tests (#11745)
* sdk: Make PubKey::create_program_address available in program unit tests This finishes the work started in #11604 to have `create_program_address` available when `target_arch` is not `bpf` and `program` is enabled. Otherwise, there is an undefined reference error to `sol_create_program_address`, which is only defined in `bpf`. A small test to simply call the function has been added in order to catch the problem in the future. The default dependency to `solana-sdk/default` doesn't cause a problem with existing programs since `build.sh` always specifies `--no-default-features`, and programs in `solana-program-library` all use it too. * Add `default-features = false` for inter-program dependencies Fix the build error found during CI. The `--no-default-features` flag only applies to the top-level package, and not to dependencies. A program that depends on another program, i.e. `128bit` which depends on `128bit_dep`, must specify `default-features = false` when including that package, otherwise the `bpf` build will try to pull in default packages, which includes `std`.
This commit is contained in:
parent
53799c4c5b
commit
9a366281d3
|
@ -13,11 +13,11 @@ edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features = false }
|
solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features = false }
|
||||||
solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "1.4.0" }
|
solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "1.4.0", default-features = false }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
program = ["solana-sdk/program"]
|
program = ["solana-sdk/program"]
|
||||||
default = ["program"]
|
default = ["program", "solana-sdk/default"]
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_bpf_rust_128bit"
|
name = "solana_bpf_rust_128bit"
|
||||||
|
|
|
@ -16,7 +16,7 @@ solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features =
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
program = ["solana-sdk/program"]
|
program = ["solana-sdk/program"]
|
||||||
default = ["program"]
|
default = ["program", "solana-sdk/default"]
|
||||||
|
|
||||||
[package.metadata.docs.rs]
|
[package.metadata.docs.rs]
|
||||||
targets = ["x86_64-unknown-linux-gnu"]
|
targets = ["x86_64-unknown-linux-gnu"]
|
||||||
|
|
|
@ -16,7 +16,7 @@ solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features =
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
program = ["solana-sdk/program"]
|
program = ["solana-sdk/program"]
|
||||||
default = ["program"]
|
default = ["program", "solana-sdk/default"]
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_bpf_rust_alloc"
|
name = "solana_bpf_rust_alloc"
|
||||||
|
|
|
@ -17,7 +17,7 @@ solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features =
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
program = ["solana-sdk/program"]
|
program = ["solana-sdk/program"]
|
||||||
default = ["program"]
|
default = ["program", "solana-sdk/default"]
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_bpf_rust_dep_crate"
|
name = "solana_bpf_rust_dep_crate"
|
||||||
|
|
|
@ -16,7 +16,7 @@ solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features =
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
program = ["solana-sdk/program"]
|
program = ["solana-sdk/program"]
|
||||||
default = ["program"]
|
default = ["program", "solana-sdk/default"]
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_bpf_rust_dup_accounts"
|
name = "solana_bpf_rust_dup_accounts"
|
||||||
|
|
|
@ -19,7 +19,7 @@ thiserror = "1.0"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
program = ["solana-sdk/program"]
|
program = ["solana-sdk/program"]
|
||||||
default = ["program"]
|
default = ["program", "solana-sdk/default"]
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_bpf_rust_error_handling"
|
name = "solana_bpf_rust_error_handling"
|
||||||
|
|
|
@ -16,7 +16,7 @@ solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features =
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
program = ["solana-sdk/program"]
|
program = ["solana-sdk/program"]
|
||||||
default = ["program"]
|
default = ["program", "solana-sdk/default"]
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_bpf_rust_external_spend"
|
name = "solana_bpf_rust_external_spend"
|
||||||
|
|
|
@ -12,16 +12,16 @@ homepage = "https://solana.com/"
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
solana-bpf-rust-invoked = { path = "../invoked"}
|
solana-bpf-rust-invoked = { path = "../invoked", default-features = false }
|
||||||
solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features = false }
|
solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features = false }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
program = ["solana-sdk/program"]
|
program = ["solana-sdk/program"]
|
||||||
default = ["program"]
|
default = ["program", "solana-sdk/default"]
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_bpf_rust_invoke"
|
name = "solana_bpf_rust_invoke"
|
||||||
crate-type = ["cdylib"]
|
crate-type = ["cdylib"]
|
||||||
|
|
||||||
[package.metadata.docs.rs]
|
[package.metadata.docs.rs]
|
||||||
targets = ["x86_64-unknown-linux-gnu"]
|
targets = ["x86_64-unknown-linux-gnu"]
|
||||||
|
|
|
@ -266,5 +266,17 @@ fn process_instruction(
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pull in syscall stubs when building for non-BPF targets
|
#[cfg(test)]
|
||||||
solana_sdk::program_stubs!();
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
// Pull in syscall stubs when building for non-BPF targets
|
||||||
|
solana_sdk::program_stubs!();
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn create_program_address_is_defined() {
|
||||||
|
assert_eq!(
|
||||||
|
Pubkey::create_program_address(&[b"You pass butter"], &Pubkey::default()).unwrap_err(),
|
||||||
|
PubkeyError::InvalidSeeds
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -16,11 +16,11 @@ solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features =
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
program = ["solana-sdk/program"]
|
program = ["solana-sdk/program"]
|
||||||
default = ["program"]
|
default = ["program", "solana-sdk/default"]
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_bpf_rust_invoked"
|
name = "solana_bpf_rust_invoked"
|
||||||
crate-type = ["lib", "cdylib"]
|
crate-type = ["lib", "cdylib"]
|
||||||
|
|
||||||
[package.metadata.docs.rs]
|
[package.metadata.docs.rs]
|
||||||
targets = ["x86_64-unknown-linux-gnu"]
|
targets = ["x86_64-unknown-linux-gnu"]
|
||||||
|
|
|
@ -16,7 +16,7 @@ solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features =
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
program = ["solana-sdk/program"]
|
program = ["solana-sdk/program"]
|
||||||
default = ["program"]
|
default = ["program", "solana-sdk/default"]
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_bpf_rust_iter"
|
name = "solana_bpf_rust_iter"
|
||||||
|
|
|
@ -13,11 +13,11 @@ edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features = false }
|
solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features = false }
|
||||||
solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "1.4.0" }
|
solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "1.4.0", default-features = false }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
program = ["solana-sdk/program"]
|
program = ["solana-sdk/program"]
|
||||||
default = ["program"]
|
default = ["program", "solana-sdk/default"]
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_bpf_rust_many_args"
|
name = "solana_bpf_rust_many_args"
|
||||||
|
|
|
@ -16,7 +16,7 @@ solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features =
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
program = ["solana-sdk/program"]
|
program = ["solana-sdk/program"]
|
||||||
default = ["program"]
|
default = ["program", "solana-sdk/default"]
|
||||||
|
|
||||||
[package.metadata.docs.rs]
|
[package.metadata.docs.rs]
|
||||||
targets = ["x86_64-unknown-linux-gnu"]
|
targets = ["x86_64-unknown-linux-gnu"]
|
||||||
|
|
|
@ -16,7 +16,7 @@ solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features =
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
program = ["solana-sdk/program"]
|
program = ["solana-sdk/program"]
|
||||||
default = ["program"]
|
default = ["program", "solana-sdk/default"]
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_bpf_rust_noop"
|
name = "solana_bpf_rust_noop"
|
||||||
|
|
|
@ -16,7 +16,7 @@ solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features =
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
program = ["solana-sdk/program"]
|
program = ["solana-sdk/program"]
|
||||||
default = ["program"]
|
default = ["program", "solana-sdk/default"]
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_bpf_rust_panic"
|
name = "solana_bpf_rust_panic"
|
||||||
|
|
|
@ -13,11 +13,11 @@ edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features = false }
|
solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features = false }
|
||||||
solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "1.4.0" }
|
solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "1.4.0", default-features = false }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
program = ["solana-sdk/program"]
|
program = ["solana-sdk/program"]
|
||||||
default = ["program"]
|
default = ["program", "solana-sdk/default"]
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_bpf_rust_param_passing"
|
name = "solana_bpf_rust_param_passing"
|
||||||
|
|
|
@ -16,7 +16,7 @@ solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features =
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
program = ["solana-sdk/program"]
|
program = ["solana-sdk/program"]
|
||||||
default = ["program"]
|
default = ["program", "solana-sdk/default"]
|
||||||
|
|
||||||
[package.metadata.docs.rs]
|
[package.metadata.docs.rs]
|
||||||
targets = ["x86_64-unknown-linux-gnu"]
|
targets = ["x86_64-unknown-linux-gnu"]
|
||||||
|
|
|
@ -16,7 +16,7 @@ solana-sdk = { path = "../../../../sdk/", version = "1.4.0", default-features =
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
program = ["solana-sdk/program"]
|
program = ["solana-sdk/program"]
|
||||||
default = ["program"]
|
default = ["program", "solana-sdk/default"]
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_bpf_rust_sysval"
|
name = "solana_bpf_rust_sysval"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#[cfg(feature = "program")]
|
#[cfg(all(feature = "program", target_arch = "bpf"))]
|
||||||
use crate::entrypoint::SUCCESS;
|
use crate::entrypoint::SUCCESS;
|
||||||
#[cfg(not(feature = "program"))]
|
#[cfg(not(all(feature = "program", target_arch = "bpf")))]
|
||||||
use crate::hash::Hasher;
|
use crate::hash::Hasher;
|
||||||
use crate::{decode_error::DecodeError, hash::hashv};
|
use crate::{decode_error::DecodeError, hash::hashv};
|
||||||
use num_derive::{FromPrimitive, ToPrimitive};
|
use num_derive::{FromPrimitive, ToPrimitive};
|
||||||
|
@ -107,7 +107,7 @@ impl Pubkey {
|
||||||
) -> Result<Pubkey, PubkeyError> {
|
) -> Result<Pubkey, PubkeyError> {
|
||||||
// Perform the calculation inline, calling this from within a program is
|
// Perform the calculation inline, calling this from within a program is
|
||||||
// not supported
|
// not supported
|
||||||
#[cfg(not(feature = "program"))]
|
#[cfg(not(all(feature = "program", target_arch = "bpf")))]
|
||||||
{
|
{
|
||||||
let mut hasher = Hasher::default();
|
let mut hasher = Hasher::default();
|
||||||
for seed in seeds.iter() {
|
for seed in seeds.iter() {
|
||||||
|
@ -129,7 +129,7 @@ impl Pubkey {
|
||||||
Ok(Pubkey::new(hash.as_ref()))
|
Ok(Pubkey::new(hash.as_ref()))
|
||||||
}
|
}
|
||||||
// Call via a system call to perform the calculation
|
// Call via a system call to perform the calculation
|
||||||
#[cfg(feature = "program")]
|
#[cfg(all(feature = "program", target_arch = "bpf"))]
|
||||||
{
|
{
|
||||||
extern "C" {
|
extern "C" {
|
||||||
fn sol_create_program_address(
|
fn sol_create_program_address(
|
||||||
|
|
Loading…
Reference in New Issue