Port SPL to solana-program and `cargo build-bpf`

This commit is contained in:
Michael Vines 2020-10-22 21:44:27 -07:00
parent 4616c2eb0f
commit 80e29ef6b9
90 changed files with 1182 additions and 1213 deletions

2
.gitignore vendored
View File

@ -5,3 +5,5 @@ bin
config.json config.json
node_modules node_modules
./package-lock.json ./package-lock.json
*.so
*-dump.txt

View File

@ -20,7 +20,7 @@ services:
env: env:
global: global:
- RUST_BACKTRACE=1 - RUST_BACKTRACE=1
- SOLANA_VERSION=v1.4.2 - SOLANA_VERSION=v1.4.3
jobs: jobs:
include: include:

View File

@ -22,5 +22,6 @@ node --version
if [[ -n $SOLANA_VERSION ]]; then if [[ -n $SOLANA_VERSION ]]; then
sh -c "$(curl -sSfL https://release.solana.com/$SOLANA_VERSION/install)" sh -c "$(curl -sSfL https://release.solana.com/$SOLANA_VERSION/install)"
fi fi
PATH="~/.local/share/solana/install/active_release/bin:$PATH" export PATH="~/.local/share/solana/install/active_release/bin:$PATH"
solana --version solana --version
cargo build-bpf --version

448
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -5,33 +5,17 @@ members = [
"memo/program", "memo/program",
"shared-memory/program", "shared-memory/program",
"stake-pool/program", "stake-pool/program",
"themis/program_bn",
"themis/program_ristretto",
"token-lending/program", "token-lending/program",
"token-swap/program", "token-swap/program",
"token/cli", "token/cli",
"token/program", "token/program",
"token/program-v3", "token/program-v3",
"themis/program_bn",
"themis/program_ristretto",
] ]
exclude = [ exclude = [
"shared-memory/client", "shared-memory/client",
"token/perf-monitor",
"themis/client_bn", "themis/client_bn",
"themis/client_ristretto", "themis/client_ristretto",
"token/perf-monitor",
] ]
# Workflow for developing against local Solana crates
#
# 0. Uncomment the below patches
# 1. Replace PATH_TO_SOLANA with your local filestem path to the Solana mono-repo
# 2. Run `cargo update`
# 3. Use `cargo` normally
#
#[patch.crates-io]
#solana-account-decoder = {path = "PATH_TO_SOLANA/account-decoder" }
#solana-clap-utils = {path = "PATH_TO_SOLANA/clap-utils" }
#solana-cli-config = {path = "PATH_TO_SOLANA/cli-config" }
#solana-client = { path = "PATH_TO_SOLANA/client"}
#solana-logger = {path = "PATH_TO_SOLANA/logger" }
#solana-sdk = { path = "PATH_TO_SOLANA/sdk" }

View File

@ -16,55 +16,54 @@ all implementations.
Full documentation is available at https://spl.solana.com Full documentation is available at https://spl.solana.com
## Building ## Development
These programs cannot be built directly via cargo and instead require the build ### Environment Setup
scripts located in Solana's BPF-SDK.
Download or update the BPF-SDK by running: 1. Install the latest Rust stable from https://rustup.rs/
```bash 2. Install the latest Solana command-line tools from https://docs.solana.com/cli/install-solana-cli-tools
$ ./do.sh update
### Build
The normal cargo build is available for building programs against your host machine:
```
$ cargo build
``` ```
To build all programs, run: To build a specific program, such as SPL Token, for the Solana BPF target:
```bash ```
$ ./do.sh build all $ cd token/program
$ cargo build-bpf
``` ```
Or choose a specific program: ### Test
Unit tests contained within all projects can be run with:
```bash ```bash
$ ./do.sh build <program> $ cargo test
``` ```
## Testing To run a specific program's tests, such as SPL Token:
```
Unit tests contained within all projects can be built via: $ cd token/program
```bash $ cargo test
$ ./do.sh test all
``` ```
Or: Integration testing may be performed via the per-project .js bindings. See the
```bash
$ ./do.sh test <program>
```
End-to-end testing may be performed via the per-project .js bindings. See the
[token program's js project](token/js) for an example. [token program's js project](token/js) for an example.
## Clippy ### Clippy
Clippy is also supported via:
```bash ```bash
$ ./do.sh clippy all $ cargo clippy
``` ```
Or: ### Coverage
``` ```bash
$ ./do.sh clippy <program> $ ./coverage.sh
``` ```
## Release Process ## Release Process
SPL programs are currently tagged and released manually. Each program is SPL programs are currently tagged and released manually. Each program is
versioned independently of the others, with all new development occurring on versioned independently of the others, with all new development occurring on
master. Once a program is tested and deemed ready for release: master. Once a program is tested and deemed ready for release:
@ -73,7 +72,9 @@ master. Once a program is tested and deemed ready for release:
* Increment the version number in the program's Cargo.toml * Increment the version number in the program's Cargo.toml
* Generate a new program ID and replace in `<program>/program-id.md` and `<program>/src/lib.rs` * Generate a new program ID and replace in `<program>/program-id.md` and `<program>/src/lib.rs`
* Run `./do.sh build <program>` to update relevant C bindings. (Note the location of the generated `spl_<program>.so` for attaching to the Github release.) * Run `cargo build <program>` to update relevant C bindings. (Note the
location of the generated `spl_<program>.so` for attaching to the Github
release.)
* Open a PR with these version changes and merge after passing CI. * Open a PR with these version changes and merge after passing CI.
### Create Github tag ### Create Github tag

View File

@ -1,24 +0,0 @@
#!/usr/bin/env bash
set -e
channel=${1:-v1.3.17}
installDir="$(dirname "$0")"/bin
cacheDir=~/.cache/solana-bpf-sdk/"$channel"
echo "Installing $channel BPF SDK into $installDir"
set -x
if [[ ! -r "$cacheDir"/bpf-sdk.tar.bz2 ]]; then
mkdir -p "$cacheDir"
curl -L --retry 5 --retry-delay 2 -o "$cacheDir"/bpf-sdk.tar.bz2 \
https://solana-sdk.s3.amazonaws.com/"$channel"/bpf-sdk.tar.bz2
fi
rm -rf "$installDir"
mkdir -p "$installDir"
(
cd "$installDir"
tar jxf "$cacheDir"/bpf-sdk.tar.bz2
)
cat "$installDir"/bpf-sdk/version.txt

View File

@ -34,14 +34,11 @@ export RUSTFLAGS="-D warnings"
export RUSTBACKTRACE=1 export RUSTBACKTRACE=1
_ cargo fmt --all -- --check _ cargo fmt --all -- --check
_ cargo +nightly clippy --workspace --all-targets -- --deny=warnings _ cargo +nightly clippy -Zunstable-options --workspace --all-targets -- --deny=warnings
# Build client libraries
_ cargo build _ cargo build
_ cargo test
_ cargo run --manifest-path=utils/test-client/Cargo.toml _ cargo run --manifest-path=utils/test-client/Cargo.toml
# # Check generated C headers # # Check generated C headers
# _ cargo run --manifest-path=utils/cgen/Cargo.toml # _ cargo run --manifest-path=utils/cgen/Cargo.toml
# #
@ -50,20 +47,11 @@ _ cargo run --manifest-path=utils/test-client/Cargo.toml
# _ git diff --exit-code token-swap/program/inc/token-swap.h # _ git diff --exit-code token-swap/program/inc/token-swap.h
# _ cc token-swap/program/inc/token-swap.h -o target/token-swap.gch # _ cc token-swap/program/inc/token-swap.h -o target/token-swap.gch
# For all BPF programs # For all BPF programs
for Xargo_toml in $(git ls-files -- '*/Xargo.toml'); do for Xargo_toml in $(git ls-files -- '*/Xargo.toml'); do
program_dir=$(dirname "$Xargo_toml") program_dir=$(dirname "$Xargo_toml")
( _ cargo build-bpf --manifest-path="$program_dir"/Cargo.toml --dump
# Run clippy for all program crates, with the `program` feature enabled
cd $program_dir
_ cargo +nightly clippy --features=program -- --deny=warnings
)
_ ./do.sh build "$program_dir"
_ ./do.sh test "$program_dir"
_ ./do.sh dump "$program_dir"
done done
# Run client tests # Run client tests

View File

@ -56,7 +56,7 @@ for program in ${programs[@]}; do
( (
set -ex set -ex
cd $program cd $program
cargo +nightly test --target-dir $here/target/cov --features=program cargo +nightly test --target-dir $here/target/cov
) )
done done

212
do.sh
View File

@ -1,212 +0,0 @@
#!/usr/bin/env bash
CALLER_PWD=$PWD
cd "$(dirname "$0")"
usage() {
cat <<EOF
Usage: do.sh <action> <project> <action specific arguments>
Supported actions:
build
build-lib
clean
clippy
doc
dump
fmt
test
update
Supported projects:
all
any directory containing a Cargo.toml file
EOF
}
sdkDir=bin/bpf-sdk
profile=bpfel-unknown-unknown/release
readCargoVariable() {
declare variable="$1"
declare Cargo_toml="$2"
while read -r name equals value _; do
if [[ $name = "$variable" && $equals = = ]]; then
echo "${value//\"/}"
return
fi
done < <(cat "$Cargo_toml")
echo "Unable to locate $variable in $Cargo_toml" 1>&2
}
perform_action() {
set -e
# Use relative path if arg starts with "."
if [[ $2 == .* ]]; then
projectDir="$CALLER_PWD"/$2
else
projectDir="$PWD"/$2
fi
targetDir="$PWD"/target
features=
crateName="$(readCargoVariable name "$projectDir/Cargo.toml")"
so_path="$targetDir/$profile"
so_name="${crateName//\-/_}"
so_name_unstripped="${so_name}_unstripped"
if [[ -f "$projectDir"/Xargo.toml ]]; then
features="--features=program"
fi
case "$1" in
build)
if [[ -f "$projectDir"/Xargo.toml ]]; then
echo "build $crateName ($projectDir)"
"$sdkDir"/rust/build.sh "$projectDir"
cp "$so_path/${so_name}.so" "$so_path/${so_name_unstripped}.so"
"$sdkDir"/dependencies/llvm-native/bin/llvm-objcopy --strip-all "$so_path/${so_name}.so" "$so_path/${so_name}.so"
else
echo "$projectDir does not contain a program, skipping"
fi
;;
build-lib)
(
cd "$projectDir"
echo "build-lib $crateName ($projectDir)"
export RUSTFLAGS="${@:3}"
cargo build
)
;;
clean)
"$sdkDir"/rust/clean.sh "$projectDir"
;;
clippy)
(
cd "$projectDir"
echo "clippy $crateName ($projectDir)"
cargo +nightly clippy $features ${@:3}
)
;;
doc)
(
cd "$projectDir"
echo "generating docs $crateName ($projectDir)"
cargo doc ${@:3}
)
;;
dump)
# Dump depends on tools that are not installed by default and must be installed manually
# - readelf
# - rustfilt
if [[ -f "$projectDir"/Xargo.toml ]]; then
if ! which rustfilt > /dev/null; then
echo "Error: rustfilt not found. It can be installed by running: cargo install rustfilt"
exit 1
fi
if ! which readelf > /dev/null; then
if [[ $(uname) = Darwin ]]; then
echo "Error: readelf not found. It can be installed by running: brew install binutils"
else
echo "Error: readelf not found."
fi
exit 1
fi
(
cd "$CALLER_PWD"
"$0" build "$2"
)
echo "dump $crateName ($projectDir)"
so="$so_path/${so_name}.so"
if [[ ! -r "$so" ]]; then
echo "Error: No dump created, cannot read $so"
exit 1
fi
dump="$so_path/${so_name}_dump"
(
set -x
ls -la "$so" > "${dump}_mangled.txt"
readelf -aW "$so" >>"${dump}_mangled.txt"
"$sdkDir/dependencies/llvm-native/bin/llvm-objdump" \
-print-imm-hex \
--source \
--disassemble \
"$so" \
>> "${dump}_mangled.txt"
sed s/://g <"${dump}_mangled.txt" | rustfilt >"${dump}.txt"
)
if [[ -f "$dump.txt" ]]; then
echo "Created $dump.txt"
else
echo "Error: No dump created"
exit 1
fi
else
echo "$projectDir does not contain a program, skipping"
fi
;;
fmt)
(
cd "$projectDir"
echo "formatting $projectDir"
cargo fmt ${@:3}
)
;;
help)
usage
exit
;;
test)
(
cd "$projectDir"
echo "test $projectDir"
cargo test $features ${@:3}
)
;;
update)
./bpf-sdk-install.sh
./do.sh clean all
;;
*)
echo "Error: Unknown command"
usage
exit
;;
esac
}
set -e
if [[ $1 == "update" ]]; then
perform_action "$1"
exit
else
if [[ "$#" -lt 2 ]]; then
usage
exit
fi
if [[ ! -d "$sdkDir" ]]; then
./do.sh update
fi
fi
if [[ $2 == "all" ]]; then
# Perform operation on all projects
for project in */program*; do
if [[ -f "$project"/Cargo.toml ]]; then
perform_action "$1" "${project%/}" ${@:3}
else
continue
fi
done
else
# Perform operation on requested project
if [[ -d $2/program ]]; then
perform_action "$1" "$2/program" "${@:3}"
else
perform_action "$1" "$2" "${@:3}"
fi
fi
exit 0

View File

@ -1,6 +1,3 @@
# Note: This crate must be built using do.sh
[package] [package]
name = "spl-memo" name = "spl-memo"
version = "1.0.9" version = "1.0.9"
@ -11,12 +8,10 @@ license = "Apache-2.0"
edition = "2018" edition = "2018"
[features] [features]
no-entrypoint = [] exclude_entrypoint = []
program = ["solana-sdk/program"]
default = ["solana-sdk/default"]
[dependencies] [dependencies]
solana-sdk = { version = "1.3.17", default-features = false, optional = true } solana-program = "1.4.3"
[lib] [lib]
name = "spl_memo" name = "spl_memo"

View File

@ -1,11 +1,8 @@
//! Program entrypoint definitions //! Program entrypoint
#![cfg(feature = "program")] use solana_program::{
#![cfg(not(feature = "no-entrypoint"))] account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, info,
program_error::ProgramError, pubkey::Pubkey,
use solana_sdk::{
account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, program_error::ProgramError,
pubkey::Pubkey,
}; };
use std::str::from_utf8; use std::str::from_utf8;
@ -15,18 +12,15 @@ fn process_instruction<'a>(
_accounts: &'a [AccountInfo<'a>], _accounts: &'a [AccountInfo<'a>],
instruction_data: &[u8], instruction_data: &[u8],
) -> ProgramResult { ) -> ProgramResult {
info!("hi");
from_utf8(instruction_data).map_err(|_| ProgramError::InvalidInstructionData)?; from_utf8(instruction_data).map_err(|_| ProgramError::InvalidInstructionData)?;
Ok(()) Ok(())
} }
// Pull in syscall stubs when building for non-BPF targets
#[cfg(not(target_arch = "bpf"))]
solana_sdk::program_stubs!();
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use solana_sdk::{program_error::ProgramError, pubkey::Pubkey}; use solana_program::{program_error::ProgramError, pubkey::Pubkey};
#[test] #[test]
fn test_utf8_memo() { fn test_utf8_memo() {

View File

@ -2,10 +2,10 @@
//! A simple program that accepts a string of encoded characters and verifies that it parses. Currently handles UTF-8. //! A simple program that accepts a string of encoded characters and verifies that it parses. Currently handles UTF-8.
pub mod entrypoint; #[cfg(not(feature = "exclude_entrypoint"))]
mod entrypoint;
// Export current solana-sdk types for downstream users who may also be building with a different // Export current sdk types for downstream users building with a different sdk version
// solana-sdk version pub use solana_program;
pub use solana_sdk;
solana_sdk::declare_id!("Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo"); solana_program::declare_id!("Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo");

59
patch.crates-io.sh Executable file
View File

@ -0,0 +1,59 @@
#!/usr/bin/env bash
#
# Patches the SPL crates for developing against a local solana monorepo
#
solana_dir=$1
if [[ -z $solana_dir ]]; then
echo "Usage: $0 <path-to-solana-monorepo>"
exit 1
fi
workspace_crates=(
Cargo.toml
shared-memory/client/Cargo.toml
themis/client_bn/Cargo.toml
themis/client_ristretto/Cargo.toml
token/perf-monitor/Cargo.toml
)
if [[ ! -r "$solana_dir"/scripts/read-cargo-variable.sh ]]; then
echo "$solana_dir is not a path to the solana monorepo"
exit 1
fi
set -e
solana_dir=$(cd "$solana_dir" && pwd)
cd "$(dirname "$0")"
source "$solana_dir"/scripts/read-cargo-variable.sh
solana_ver=$(readCargoVariable version "$solana_dir"/sdk/Cargo.toml)
echo "Patching in $solana_ver from $solana_dir"
echo
for crate in "${workspace_crates[@]}"; do
if grep -q '\[patch.crates-io\]' "$crate"; then
echo "$crate is already patched"
else
cat >> "$crate" <<PATCH
[patch.crates-io]
solana-account-decoder = {path = "$solana_dir/account-decoder" }
solana-banks-client = { path = "$solana_dir/banks-client"}
solana-banks-server = { path = "$solana_dir/banks-server"}
solana-bpf-loader-program = { path = "$solana_dir/programs/bpf_loader" }
solana-clap-utils = {path = "$solana_dir/clap-utils" }
solana-cli-config = {path = "$solana_dir/cli-config" }
solana-cli-output = {path = "$solana_dir/cli-output" }
solana-client = { path = "$solana_dir/client"}
solana-core = { path = "$solana_dir/core"}
solana-logger = {path = "$solana_dir/logger" }
solana-program = { path = "$solana_dir/sdk/program" }
solana-runtime = { path = "$solana_dir/runtime" }
solana-sdk = { path = "$solana_dir/sdk" }
PATCH
fi
done
./update-solana-dependencies.sh "$solana_ver"

View File

@ -1713,9 +1713,9 @@ dependencies = [
[[package]] [[package]]
name = "solana-bpf-loader-program" name = "solana-bpf-loader-program"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4e65edb39170c8cba00256a2ae041c28bbc97cf4add0173543ab0a9893fc91b" checksum = "ffe0627cc4ef87bb00a8691fe7c6bb7eec9efde660c5b02257daf20ccef8286a"
dependencies = [ dependencies = [
"bincode", "bincode",
"byteorder", "byteorder",
@ -1730,9 +1730,9 @@ dependencies = [
[[package]] [[package]]
name = "solana-config-program" name = "solana-config-program"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49d31450d593803698c8df43ba5cd861decfab9ea057899f8e19f50df105c306" checksum = "be3dddd5b85283625f92e1bfa4b100e13c3941ecb472584b29afb5c5382ac09c"
dependencies = [ dependencies = [
"bincode", "bincode",
"chrono", "chrono",
@ -1744,9 +1744,9 @@ dependencies = [
[[package]] [[package]]
name = "solana-crate-features" name = "solana-crate-features"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d665c51b3065feb33f641dd1b29d476e11e14dac657725a8ba9af52e68b6618d" checksum = "beeada39ad2aecfee8795d90ca7150389e7f958236f2630825273b9b900a7f19"
dependencies = [ dependencies = [
"backtrace", "backtrace",
"bytes 0.4.12", "bytes 0.4.12",
@ -1767,10 +1767,43 @@ dependencies = [
] ]
[[package]] [[package]]
name = "solana-logger" name = "solana-frozen-abi"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa91a8812e60bcfdaffaf0d7202a6fb55b64e19a144c313d208829634c69544c" checksum = "63bbbf3bf442bc7e4e76b57af858030fdcb8953cdbcbc6bf3ddd4819aa38e982"
dependencies = [
"bs58",
"bv",
"generic-array 0.14.4",
"log",
"memmap",
"rustc_version",
"serde",
"serde_derive",
"sha2",
"solana-frozen-abi-macro",
"solana-logger",
"thiserror",
]
[[package]]
name = "solana-frozen-abi-macro"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bdb4a177d5f46025b619c83d0562e6ea302a871f98148bd7edbc82416ac76949"
dependencies = [
"lazy_static",
"proc-macro2 1.0.19",
"quote 1.0.6",
"rustc_version",
"syn 1.0.39",
]
[[package]]
name = "solana-logger"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8f251c26d46a55bf5c3f6ef5e999e8949909eab952e19a9261e6434ebd31041"
dependencies = [ dependencies = [
"env_logger", "env_logger",
"lazy_static", "lazy_static",
@ -1779,9 +1812,9 @@ dependencies = [
[[package]] [[package]]
name = "solana-measure" name = "solana-measure"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d31aaf307e4bcc52b18d1fe8971bdede0a0ee0e0242ea322ae5bc2e71bb5883" checksum = "5bacc5ec88bb53610986d49199526fd42dcad7c8b3fc795f3de5740ebff982f4"
dependencies = [ dependencies = [
"jemalloc-ctl", "jemalloc-ctl",
"jemallocator", "jemallocator",
@ -1792,9 +1825,9 @@ dependencies = [
[[package]] [[package]]
name = "solana-metrics" name = "solana-metrics"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5fd1e167af8decba13acdc487cfb26ffa976e1b2fb7507baa800e9b0ae086729" checksum = "c11d2f59d87ff29d369394654dcff3c66a898b32a351bb67a9ae9de0db2b82f2"
dependencies = [ dependencies = [
"env_logger", "env_logger",
"gethostname", "gethostname",
@ -1805,10 +1838,40 @@ dependencies = [
] ]
[[package]] [[package]]
name = "solana-rayon-threadlimit" name = "solana-program"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cfb5a22cee0ded53e11090c6bcd963eff6d43caf49c4cda42691e94fab7ddd7d" checksum = "9d4621f2d8ca6d7ac09c0138a02d21def0a736b70feab1f2516f5a74f1ee642f"
dependencies = [
"bincode",
"bs58",
"bv",
"curve25519-dalek 2.1.0",
"hex",
"itertools",
"lazy_static",
"log",
"num-derive",
"num-traits",
"rand",
"rustc_version",
"rustversion",
"serde",
"serde_bytes",
"serde_derive",
"sha2",
"solana-frozen-abi",
"solana-frozen-abi-macro",
"solana-logger",
"solana-sdk-macro",
"thiserror",
]
[[package]]
name = "solana-rayon-threadlimit"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "84bac623c15acb44f571ec177b67a6434c6aa7637bdb26fe5d776aeb7f4d61ae"
dependencies = [ dependencies = [
"lazy_static", "lazy_static",
"num_cpus", "num_cpus",
@ -1816,9 +1879,9 @@ dependencies = [
[[package]] [[package]]
name = "solana-runtime" name = "solana-runtime"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d511d1dfcf89db6783e83f9f028f139bbff357e190bd0947bd23ff1235f97558" checksum = "8242a732a6db6227854f9bb0c2958c1f219be85989d7ca66d934033d32043c4f"
dependencies = [ dependencies = [
"bincode", "bincode",
"blake3", "blake3",
@ -1846,12 +1909,13 @@ dependencies = [
"serde", "serde",
"serde_derive", "serde_derive",
"solana-config-program", "solana-config-program",
"solana-frozen-abi",
"solana-frozen-abi-macro",
"solana-logger", "solana-logger",
"solana-measure", "solana-measure",
"solana-metrics", "solana-metrics",
"solana-rayon-threadlimit", "solana-rayon-threadlimit",
"solana-sdk", "solana-sdk",
"solana-sdk-macro-frozen-abi",
"solana-secp256k1-program", "solana-secp256k1-program",
"solana-stake-program", "solana-stake-program",
"solana-vote-program", "solana-vote-program",
@ -1864,9 +1928,9 @@ dependencies = [
[[package]] [[package]]
name = "solana-sdk" name = "solana-sdk"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e8742ccdaac9ff6e7085e8eb3737858254e4691c6fcaac6b472875db2bbba0d" checksum = "096751fdd2ec2dc3ed7146b1b14245a5b562a21b5046bf3677810a96037aff96"
dependencies = [ dependencies = [
"assert_matches", "assert_matches",
"bincode", "bincode",
@ -1874,7 +1938,6 @@ dependencies = [
"bv", "bv",
"byteorder", "byteorder",
"chrono", "chrono",
"curve25519-dalek 2.1.0",
"digest 0.9.0", "digest 0.9.0",
"ed25519-dalek", "ed25519-dalek",
"generic-array 0.14.4", "generic-array 0.14.4",
@ -1898,17 +1961,19 @@ dependencies = [
"sha2", "sha2",
"sha3", "sha3",
"solana-crate-features", "solana-crate-features",
"solana-frozen-abi",
"solana-frozen-abi-macro",
"solana-logger", "solana-logger",
"solana-program",
"solana-sdk-macro", "solana-sdk-macro",
"solana-sdk-macro-frozen-abi",
"thiserror", "thiserror",
] ]
[[package]] [[package]]
name = "solana-sdk-macro" name = "solana-sdk-macro"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f38f6c5f3b4119ffa7f75156836e5c88082e557fa978fe1f87995bd386b0d08" checksum = "a02d89c5d8c3c098552e39ad716f8e25b1b9ce95905ad0c770c78d36e1ebcc39"
dependencies = [ dependencies = [
"bs58", "bs58",
"proc-macro2 1.0.19", "proc-macro2 1.0.19",
@ -1917,24 +1982,11 @@ dependencies = [
"syn 1.0.39", "syn 1.0.39",
] ]
[[package]]
name = "solana-sdk-macro-frozen-abi"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e47f618ad2d7af7b9c701e9cc9951681f6d6a9c754863f2ab63e1b98507e515"
dependencies = [
"lazy_static",
"proc-macro2 1.0.19",
"quote 1.0.6",
"rustc_version",
"syn 1.0.39",
]
[[package]] [[package]]
name = "solana-secp256k1-program" name = "solana-secp256k1-program"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d8888a924c9183f430a72e1a643648aeff105278bc39315d211bd6b6197e0a0" checksum = "0fa9c6d939374dc10aadb4f5d918134d3388411f8bb975386cd6769afe127268"
dependencies = [ dependencies = [
"bincode", "bincode",
"digest 0.9.0", "digest 0.9.0",
@ -1947,9 +1999,9 @@ dependencies = [
[[package]] [[package]]
name = "solana-stake-program" name = "solana-stake-program"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b3780a14335d07b301128ad518876c8f4c3cb513f88e808faef3ed8a5090abc6" checksum = "1decea030cb64647c3bee685d804344c10de071ec03f0331436c8c90b500ca27"
dependencies = [ dependencies = [
"bincode", "bincode",
"log", "log",
@ -1959,18 +2011,19 @@ dependencies = [
"serde", "serde",
"serde_derive", "serde_derive",
"solana-config-program", "solana-config-program",
"solana-frozen-abi",
"solana-frozen-abi-macro",
"solana-metrics", "solana-metrics",
"solana-sdk", "solana-sdk",
"solana-sdk-macro-frozen-abi",
"solana-vote-program", "solana-vote-program",
"thiserror", "thiserror",
] ]
[[package]] [[package]]
name = "solana-vote-program" name = "solana-vote-program"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "595274785736cbae1f012ed1c78aebbbe2cf75720dec1e1850800c9cd64fae9b" checksum = "b44aeb9a4169443ce3d2ee417fe61abc1067d6d842e609f3ec30e462b98fae45"
dependencies = [ dependencies = [
"bincode", "bincode",
"log", "log",
@ -1979,10 +2032,11 @@ dependencies = [
"rustc_version", "rustc_version",
"serde", "serde",
"serde_derive", "serde_derive",
"solana-frozen-abi",
"solana-frozen-abi-macro",
"solana-logger", "solana-logger",
"solana-metrics", "solana-metrics",
"solana-sdk", "solana-sdk",
"solana-sdk-macro-frozen-abi",
"thiserror", "thiserror",
] ]
@ -2015,7 +2069,7 @@ name = "spl-shared-memory"
version = "2.0.6" version = "2.0.6"
dependencies = [ dependencies = [
"arrayref", "arrayref",
"solana-sdk", "solana-program",
] ]
[[package]] [[package]]

View File

@ -10,8 +10,7 @@ edition = "2018"
[dev-dependencies] [dev-dependencies]
rand = { version = "0.7.0"} rand = { version = "0.7.0"}
spl-shared-memory = { path = "../program" } spl-shared-memory = { path = "../program" }
solana-bpf-loader-program = { version = "1.3.17" } solana-bpf-loader-program = "1.4.3"
solana_rbpf = "=0.1.32" solana_rbpf = "=0.1.32"
solana-runtime = { version = "1.3.17" } solana-runtime = "1.4.3"
solana-sdk = { version = "1.3.17" } solana-sdk = "1.4.3"

View File

@ -1,12 +1,10 @@
use std::{fs::canonicalize, process::Command}; use std::process::Command;
fn main() { fn main() {
println!("cargo:warning=(not a warning) Building SPL Shared-memory shared object"); println!("cargo:warning=(not a warning) Building BPF shared-memory program");
Command::new(canonicalize("../../do.sh").unwrap()) Command::new("cargo")
.current_dir("../..") .arg("build-bpf")
.arg("build")
.arg("shared-memory/program")
.status() .status()
.expect("Failed to build shared-memory program") .expect("Failed to build BPF shared-memory program")
.success(); .success();
} }

View File

@ -72,8 +72,8 @@ fn run_program(
fn assert_instruction_count() { fn assert_instruction_count() {
const OFFSET: usize = 51; const OFFSET: usize = 51;
const NUM_TO_SHARE: usize = 500; const NUM_TO_SHARE: usize = 500;
let program_id = Pubkey::new_rand(); let program_id = Pubkey::new_unique();
let shared_key = Pubkey::new_rand(); let shared_key = Pubkey::new_unique();
let shared_account = Account::new_ref(u64::MAX, OFFSET + NUM_TO_SHARE * 2, &program_id); let shared_account = Account::new_ref(u64::MAX, OFFSET + NUM_TO_SHARE * 2, &program_id);
// Send some data to share // Send some data to share
@ -99,7 +99,7 @@ fn test_share_data() {
const OFFSET: usize = 51; const OFFSET: usize = 51;
const NUM_TO_SHARE: usize = 500; const NUM_TO_SHARE: usize = 500;
let program_id = Pubkey::new(&[0; 32]); let program_id = Pubkey::new(&[0; 32]);
let shared_key = Pubkey::new_rand(); let shared_key = Pubkey::new_unique();
let shared_account = Account::new_ref(u64::MAX, NUM_TO_SHARE * 2, &program_id); let shared_account = Account::new_ref(u64::MAX, NUM_TO_SHARE * 2, &program_id);
// success // success

View File

@ -1,6 +1,3 @@
# Note: This crate must be built using do.sh
[package] [package]
name = "spl-shared-memory" name = "spl-shared-memory"
version = "2.0.6" version = "2.0.6"
@ -11,13 +8,9 @@ license = "Apache-2.0"
edition = "2018" edition = "2018"
exclude = ["js/**"] exclude = ["js/**"]
[features]
program = ["solana-sdk/program"]
default = ["solana-sdk/default"]
[dependencies] [dependencies]
arrayref = "0.3.6" arrayref = "0.3.6"
solana-sdk = { version = "1.3.17", default-features = false, optional = true } solana-program = "1.4.3"
[lib] [lib]
crate-type = ["cdylib", "lib"] crate-type = ["cdylib", "lib"]

View File

@ -1,5 +1,4 @@
#![deny(missing_docs)] #![deny(missing_docs)]
//! Shared memory program for the Solana blockchain. //! Shared memory program for the Solana blockchain.
// //
// Useful for returning data from cross-program invoked programs to the invoker. // Useful for returning data from cross-program invoked programs to the invoker.
@ -7,11 +6,11 @@
// This program is highly optimized for its particular use case and does not // This program is highly optimized for its particular use case and does not
// implement the typical `process_instruction` entrypoint. // implement the typical `process_instruction` entrypoint.
extern crate solana_sdk; extern crate solana_program;
use arrayref::{array_refs, mut_array_refs}; use arrayref::{array_refs, mut_array_refs};
use solana_sdk::{ use solana_program::{
entrypoint::MAX_PERMITTED_DATA_INCREASE, entrypoint::SUCCESS, program_error::ProgramError, declare_id, entrypoint::MAX_PERMITTED_DATA_INCREASE, entrypoint::SUCCESS,
pubkey::Pubkey, program_error::ProgramError, pubkey::Pubkey,
}; };
use std::{ use std::{
mem::{align_of, size_of}, mem::{align_of, size_of},
@ -19,7 +18,7 @@ use std::{
slice::{from_raw_parts, from_raw_parts_mut}, slice::{from_raw_parts, from_raw_parts_mut},
}; };
solana_sdk::declare_id!("shmem4EWT2sPdVGvTZCzXXRAURL9G5vpPxNwSeKhHUL"); declare_id!("shmem4EWT2sPdVGvTZCzXXRAURL9G5vpPxNwSeKhHUL");
/// A more efficient `copy_from_slice` implementation. /// A more efficient `copy_from_slice` implementation.
fn fast_copy(mut src: &[u8], mut dst: &mut [u8]) { fn fast_copy(mut src: &[u8], mut dst: &mut [u8]) {

View File

@ -11,13 +11,13 @@ version = "2.0.1"
[dependencies] [dependencies]
clap = "2.33.3" clap = "2.33.3"
serde_json = "1.0.57" serde_json = "1.0.57"
solana-account-decoder = { version = "1.3.9" } solana-account-decoder = "1.4.3"
solana-clap-utils = { version = "1.3.9"} solana-clap-utils = "1.4.3"
solana-cli-config = { version = "1.3.9" } solana-cli-config = "1.4.3"
solana-client = { version = "1.3.9" } solana-client = "1.4.3"
solana-logger = { version = "1.3.9" } solana-logger = "1.4.3"
solana-sdk = { version = "1.3.9" } solana-sdk = "1.4.3"
spl-stake-pool = { version = "2.0", path="../program" } spl-stake-pool = { version = "0.1.0", path="../program", features = [ "exclude_entrypoint" ] }
[[bin]] [[bin]]
name = "spl-stake-pool" name = "spl-stake-pool"

View File

@ -1,6 +1,3 @@
# Note: This crate must be built using do.sh
[package] [package]
name = "spl-stake-pool" name = "spl-stake-pool"
version = "0.1.0" version = "0.1.0"
@ -12,17 +9,14 @@ edition = "2018"
exclude = ["js/**"] exclude = ["js/**"]
[features] [features]
no-entrypoint = [] exclude_entrypoint = []
program = ["solana-sdk/program", "spl-token/program", "spl-token/no-entrypoint"]
default = ["solana-sdk/default", "spl-token/default"]
[dependencies] [dependencies]
num-derive = "0.3" num-derive = "0.3"
num-traits = "0.2" num-traits = "0.2"
remove_dir_all = "=0.5.0" remove_dir_all = "=0.5.0"
solana-sdk = { version = "1.3.17", default-features = false, optional = true } solana-program = "1.4.3"
spl-token = { path = "../../token/program", default-features = false, optional = true } spl-token = { path = "../../token/program", features = [ "exclude_entrypoint" ] }
thiserror = "1.0" thiserror = "1.0"
arrayref = "0.3.6" arrayref = "0.3.6"
num_enum = "0.5.1" num_enum = "0.5.1"

View File

@ -1,10 +1,7 @@
//! Program entrypoint //! Program entrypoint
#![cfg(feature = "program")]
#![cfg(not(feature = "no-entrypoint"))]
use crate::{error::Error, processor::Processor}; use crate::{error::Error, processor::Processor};
use solana_sdk::{ use solana_program::{
account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, account_info::AccountInfo, entrypoint, entrypoint::ProgramResult,
program_error::PrintProgramError, pubkey::Pubkey, program_error::PrintProgramError, pubkey::Pubkey,
}; };

View File

@ -1,7 +1,7 @@
//! Error types //! Error types
use num_derive::FromPrimitive; use num_derive::FromPrimitive;
use solana_sdk::{decode_error::DecodeError, program_error::ProgramError}; use solana_program::{decode_error::DecodeError, program_error::ProgramError};
use thiserror::Error; use thiserror::Error;
/// Errors that may be returned by the StakePool program. /// Errors that may be returned by the StakePool program.

View File

@ -2,10 +2,10 @@
#![allow(clippy::too_many_arguments)] #![allow(clippy::too_many_arguments)]
use solana_sdk::instruction::AccountMeta; use solana_program::instruction::AccountMeta;
use solana_sdk::instruction::Instruction; use solana_program::instruction::Instruction;
use solana_sdk::program_error::ProgramError; use solana_program::program_error::ProgramError;
use solana_sdk::pubkey::Pubkey; use solana_program::pubkey::Pubkey;
use std::mem::size_of; use std::mem::size_of;
/// Fee rate as a ratio /// Fee rate as a ratio

View File

@ -2,15 +2,16 @@
//! A program for creating pools of Solana stakes managed by a Stake-o-Matic //! A program for creating pools of Solana stakes managed by a Stake-o-Matic
pub mod entrypoint;
pub mod error; pub mod error;
pub mod instruction; pub mod instruction;
pub mod processor; pub mod processor;
pub mod stake; pub mod stake;
pub mod state; pub mod state;
// Export current solana-sdk types for downstream users who may also be building with a different #[cfg(not(feature = "exclude_entrypoint"))]
// solana-sdk version pub mod entrypoint;
pub use solana_sdk;
solana_sdk::declare_id!("STAKEPQQL1111111111111111111111111111111111"); // Export current sdk types for downstream users building with a different sdk version
pub use solana_program;
solana_program::declare_id!("STAKEPQQL1111111111111111111111111111111111");

View File

@ -1,7 +1,5 @@
//! Program state processor //! Program state processor
#![cfg(feature = "program")]
use crate::{ use crate::{
error::Error, error::Error,
instruction::{InitArgs, StakePoolInstruction}, instruction::{InitArgs, StakePoolInstruction},
@ -10,10 +8,10 @@ use crate::{
}; };
use num_traits::FromPrimitive; use num_traits::FromPrimitive;
#[cfg(not(target_arch = "bpf"))] #[cfg(not(target_arch = "bpf"))]
use solana_sdk::instruction::Instruction; use solana_program::instruction::Instruction;
#[cfg(target_arch = "bpf")] #[cfg(target_arch = "bpf")]
use solana_sdk::program::invoke_signed; use solana_program::program::invoke_signed;
use solana_sdk::{ use solana_program::{
account_info::next_account_info, account_info::AccountInfo, decode_error::DecodeError, account_info::next_account_info, account_info::AccountInfo, decode_error::DecodeError,
entrypoint::ProgramResult, info, program_error::PrintProgramError, program_error::ProgramError, entrypoint::ProgramResult, info, program_error::PrintProgramError, program_error::ProgramError,
pubkey::Pubkey, pubkey::Pubkey,
@ -607,10 +605,6 @@ impl PrintProgramError for Error {
} }
} }
// Pull in syscall stubs when building for non-BPF targets
#[cfg(not(target_arch = "bpf"))]
solana_sdk::program_stubs!();
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
@ -618,7 +612,7 @@ mod tests {
use crate::instruction::Fee; use crate::instruction::Fee;
use crate::instruction::InitArgs; use crate::instruction::InitArgs;
use core::mem::size_of; use core::mem::size_of;
use solana_sdk::{ use solana_program::{
account::Account, account_info::create_is_signer_account_infos, instruction::Instruction, account::Account, account_info::create_is_signer_account_infos, instruction::Instruction,
program_pack::Pack, rent::Rent, sysvar::rent, program_pack::Pack, rent::Rent, sysvar::rent,
}; };

View File

@ -1,13 +1,13 @@
//! FIXME copied from the solana stake program //! FIXME copied from the solana stake program
use serde_derive::{Deserialize, Serialize}; use serde_derive::{Deserialize, Serialize};
use solana_sdk::{ use solana_program::{
instruction::{AccountMeta, Instruction}, instruction::{AccountMeta, Instruction},
pubkey::Pubkey, pubkey::Pubkey,
sysvar, sysvar,
}; };
solana_sdk::declare_id!("StakeConfig11111111111111111111111111111111"); solana_program::declare_id!("StakeConfig11111111111111111111111111111111");
/// FIXME copied from solana stake program /// FIXME copied from solana stake program
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)] #[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]

View File

@ -2,7 +2,7 @@
use crate::error::Error; use crate::error::Error;
use crate::instruction::{unpack, Fee}; use crate::instruction::{unpack, Fee};
use solana_sdk::{entrypoint::ProgramResult, program_error::ProgramError, pubkey::Pubkey}; use solana_program::{entrypoint::ProgramResult, program_error::ProgramError, pubkey::Pubkey};
use std::mem::size_of; use std::mem::size_of;
/// Initialized program details. /// Initialized program details.

View File

@ -9,31 +9,26 @@ license = "Apache-2.0"
edition = "2018" edition = "2018"
exclude = ["js/**"] exclude = ["js/**"]
[features]
no-entrypoint = []
program = ["solana-sdk/program"]
default = ["solana-sdk/default"]
[dependencies] [dependencies]
bincode = "1.3" bincode = "1.3"
borsh = "0.7.1" borsh = "0.7.1"
bn = {git = "https://github.com/garious/bn", rev = "5c35c737ffabac9921310f53f48725216d59cbf1", default-features = false, features = ["borsh"]} bn = {git = "https://github.com/garious/bn", rev = "5c35c737ffabac9921310f53f48725216d59cbf1", default-features = false, features = ["borsh"]}
elgamal_bn = { git = "https://github.com/garious/elgamal_bn", rev = "ba9bdcdb6cdd6fb8e74d0b8bc1b918bcd1b543a9" } elgamal_bn = { git = "https://github.com/garious/elgamal_bn", rev = "ba9bdcdb6cdd6fb8e74d0b8bc1b918bcd1b543a9" }
futures = "0.3" futures = "0.3"
solana-banks-client = "1.4.1" solana-banks-client = "1.4.3"
solana-cli-config = "1.4.1" solana-cli-config = "1.4.3"
solana-sdk = "1.4.1" solana-sdk = "1.4.3"
spl-themis-bn = { version = "0.1.0", path = "../program_bn" } spl-themis-bn = { version = "0.1.0", path = "../program_bn", features = ["exclude_entrypoint"]}
tarpc = { version = "0.21.1", features = ["full"] } tarpc = { version = "0.21.1", features = ["full"] }
tokio = "0.2" tokio = "0.2"
url = "2.1" url = "2.1"
[dev-dependencies] [dev-dependencies]
separator = "0.4.1" separator = "0.4.1"
solana-banks-server = "1.4.1" solana-banks-server = "1.4.3"
solana-bpf-loader-program = "1.4.1" solana-bpf-loader-program = "1.4.3"
solana_rbpf = "=0.1.32" solana_rbpf = "=0.1.32"
solana-runtime = "1.4.1" solana-runtime = "1.4.3"
[lib] [lib]
crate-type = ["cdylib", "lib"] crate-type = ["cdylib", "lib"]

View File

@ -1,12 +1,10 @@
use std::{fs::canonicalize, process::Command}; use std::process::Command;
fn main() { fn main() {
println!("cargo:warning=(not a warning) Building SPL Themis shared object"); println!("cargo:warning=(not a warning) Building BPF themis program");
Command::new(canonicalize("../../do.sh").unwrap()) Command::new("cargo")
.current_dir("../..") .arg("build-bpf")
.arg("build")
.arg("themis/program_bn")
.status() .status()
.expect("Failed to build themis program") .expect("Failed to build BPF themis program")
.success(); .success();
} }

View File

@ -75,10 +75,10 @@ fn run_program(
#[test] #[test]
fn assert_instruction_count() { fn assert_instruction_count() {
let program_id = Pubkey::new_rand(); let program_id = Pubkey::new_unique();
// Create new policies // Create new policies
let policies_key = Pubkey::new_rand(); let policies_key = Pubkey::new_unique();
let scalars = vec![Fr::new(1u64.into()).unwrap(), Fr::new(2u64.into()).unwrap()]; let scalars = vec![Fr::new(1u64.into()).unwrap(), Fr::new(2u64.into()).unwrap()];
//let scalars = vec![ //let scalars = vec![
// Fr::new(1u64.into()).unwrap(), // Fr::new(1u64.into()).unwrap(),
@ -211,7 +211,7 @@ fn assert_instruction_count() {
run_program(&program_id, &parameter_accounts[..], &instruction_data).unwrap(); run_program(&program_id, &parameter_accounts[..], &instruction_data).unwrap();
// Create user account // Create user account
let user_key = Pubkey::new_rand(); let user_key = Pubkey::new_unique();
let user_account = let user_account =
SolanaAccount::new_ref(0, User::default().try_to_vec().unwrap().len(), &program_id); SolanaAccount::new_ref(0, User::default().try_to_vec().unwrap().len(), &program_id);
let instruction_data = ThemisInstruction::InitializeUserAccount { public_key: pk } let instruction_data = ThemisInstruction::InitializeUserAccount { public_key: pk }

View File

@ -9,32 +9,27 @@ license = "Apache-2.0"
edition = "2018" edition = "2018"
exclude = ["js/**"] exclude = ["js/**"]
[features]
no-entrypoint = []
program = ["solana-sdk/program"]
default = ["solana-sdk/default"]
[dependencies] [dependencies]
bincode = "1.3" bincode = "1.3"
borsh = "0.7.1" borsh = "0.7.1"
curve25519-dalek = {git = "https://github.com/garious/curve25519-dalek", rev = "60efef3553d6bf3d7f3b09b5f97acd54d72529ff", default-features = false, features = ["borsh"]} curve25519-dalek = {git = "https://github.com/garious/curve25519-dalek", rev = "60efef3553d6bf3d7f3b09b5f97acd54d72529ff", default-features = false, features = ["borsh"]}
elgamal_ristretto = { git = "https://github.com/garious/elgamal", rev = "db1eef8e01b8a6e93d3bdc64ab2c1acb39cb64d6", default-features = false } elgamal_ristretto = { git = "https://github.com/garious/elgamal", rev = "db1eef8e01b8a6e93d3bdc64ab2c1acb39cb64d6", default-features = false }
futures = "0.3" futures = "0.3"
solana-banks-client = "1.4.1" solana-banks-client = "1.4.3"
solana-cli-config = "1.4.1" solana-cli-config = "1.4.3"
solana-sdk = "1.4.1" solana-sdk = "1.4.3"
spl-themis-ristretto = { version = "0.1.0", path = "../program_ristretto" } spl-themis-ristretto = { version = "0.1.0", path = "../program_ristretto", features = ["exclude_entrypoint"] }
tarpc = { version = "0.22.0", features = ["full"] } tarpc = { version = "0.22.0", features = ["full"] }
tokio = "0.2" tokio = "0.2"
url = "2.1" url = "2.1"
[dev-dependencies] [dev-dependencies]
separator = "0.4.1" separator = "0.4.1"
solana-banks-server = "1.4.1" solana-banks-server = "1.4.3"
solana-bpf-loader-program = "1.4.1" solana-bpf-loader-program = "1.4.3"
solana-core = "1.4.1" solana-core = "1.4.3"
solana_rbpf = "=0.1.32" solana_rbpf = "=0.1.32"
solana-runtime = "1.4.1" solana-runtime = "1.4.3"
[lib] [lib]
crate-type = ["cdylib", "lib"] crate-type = ["cdylib", "lib"]

View File

@ -1,12 +1,10 @@
use std::{fs::canonicalize, process::Command}; use std::process::Command;
fn main() { fn main() {
println!("cargo:warning=(not a warning) Building SPL Themis shared object"); println!("cargo:warning=(not a warning) Building BPF themis program");
Command::new(canonicalize("../../do.sh").unwrap()) Command::new("cargo")
.current_dir("../..") .arg("build-bpf")
.arg("build")
.arg("themis/program_ristretto")
.status() .status()
.expect("Failed to build themis program") .expect("Failed to build BPF themis program")
.success(); .success();
} }

View File

@ -75,10 +75,10 @@ fn run_program(
#[test] #[test]
fn assert_instruction_count() { fn assert_instruction_count() {
let program_id = Pubkey::new_rand(); let program_id = Pubkey::new_unique();
// Create new policies // Create new policies
let policies_key = Pubkey::new_rand(); let policies_key = Pubkey::new_unique();
let scalars = vec![1u64.into(), 2u64.into()]; let scalars = vec![1u64.into(), 2u64.into()];
//let scalars = vec![ //let scalars = vec![
// 1u64.into(), // 1u64.into(),
@ -211,7 +211,7 @@ fn assert_instruction_count() {
run_program(&program_id, &parameter_accounts[..], &instruction_data).unwrap(); run_program(&program_id, &parameter_accounts[..], &instruction_data).unwrap();
// Create user account // Create user account
let user_key = Pubkey::new_rand(); let user_key = Pubkey::new_unique();
let user_account = let user_account =
SolanaAccount::new_ref(0, User::default().try_to_vec().unwrap().len(), &program_id); SolanaAccount::new_ref(0, User::default().try_to_vec().unwrap().len(), &program_id);
let instruction_data = ThemisInstruction::InitializeUserAccount { public_key: pk } let instruction_data = ThemisInstruction::InitializeUserAccount { public_key: pk }

View File

@ -1,6 +1,3 @@
# Note: This crate must be built using do.sh
[package] [package]
name = "spl-themis-bn" name = "spl-themis-bn"
version = "0.1.0" version = "0.1.0"
@ -12,9 +9,7 @@ edition = "2018"
exclude = ["js/**"] exclude = ["js/**"]
[features] [features]
no-entrypoint = [] exclude_entrypoint = []
program = ["solana-sdk/program"]
default = ["solana-sdk/default"]
[dependencies] [dependencies]
bincode = "1.3" bincode = "1.3"
@ -25,9 +20,8 @@ getrandom = { version = "0.1.15", features = ["dummy"] }
num-derive = "0.3" num-derive = "0.3"
num-traits = "0.2" num-traits = "0.2"
rand = "0.7.0" rand = "0.7.0"
solana-sdk = { version = "1.3.17", default-features = false, optional = true } solana-program = "1.4.3"
thiserror = "1.0" thiserror = "1.0"
[lib] [lib]
crate-type = ["cdylib", "lib"] crate-type = ["cdylib", "lib"]

View File

@ -1,9 +1,6 @@
//! Program entrypoint //! Program entrypoint
#![cfg(feature = "program")] use solana_program::{
#![cfg(not(feature = "no-entrypoint"))]
use solana_sdk::{
account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, pubkey::Pubkey, account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, pubkey::Pubkey,
}; };

View File

@ -2,8 +2,8 @@
use num_derive::FromPrimitive; use num_derive::FromPrimitive;
use num_traits::FromPrimitive; use num_traits::FromPrimitive;
use solana_sdk::program_error::PrintProgramError; use solana_program::program_error::PrintProgramError;
use solana_sdk::{decode_error::DecodeError, program_error::ProgramError}; use solana_program::{decode_error::DecodeError, program_error::ProgramError};
use thiserror::Error; use thiserror::Error;
/// Errors that may be returned by the Themis program. /// Errors that may be returned by the Themis program.

View File

@ -4,7 +4,7 @@ use crate::state::{Policies, User};
use bn::{Fr, G1}; use bn::{Fr, G1};
use borsh::{BorshDeserialize, BorshSerialize}; use borsh::{BorshDeserialize, BorshSerialize};
use elgamal_bn::public::PublicKey; use elgamal_bn::public::PublicKey;
use solana_sdk::{ use solana_program::{
instruction::{AccountMeta, Instruction}, instruction::{AccountMeta, Instruction},
program_error::ProgramError, program_error::ProgramError,
pubkey::Pubkey, pubkey::Pubkey,

View File

@ -1,14 +1,15 @@
//! An implementation of Brave's THEMIS for the Solana blockchain //! An implementation of Brave's THEMIS for the Solana blockchain
#![forbid(unsafe_code)] #![forbid(unsafe_code)]
pub mod entrypoint;
pub mod error; pub mod error;
pub mod instruction; pub mod instruction;
pub mod processor; pub mod processor;
pub mod state; pub mod state;
// Export current solana-sdk types for downstream users who may also be building with a different #[cfg(not(feature = "exclude_entrypoint"))]
// solana-sdk version pub mod entrypoint;
pub use solana_sdk;
solana_sdk::declare_id!("F3FWeYPjD1jeR6UykMj1GRbCcmoxtJnDiPuFdTLRGvb6"); // Export current sdk types for downstream users building with a different sdk version
pub use solana_program;
solana_program::declare_id!("F3FWeYPjD1jeR6UykMj1GRbCcmoxtJnDiPuFdTLRGvb6");

View File

@ -1,4 +1,5 @@
//! Themis program //! Themis program
use crate::{ use crate::{
error::ThemisError, error::ThemisError,
instruction::ThemisInstruction, instruction::ThemisInstruction,
@ -6,7 +7,7 @@ use crate::{
}; };
use bn::{Fr, G1}; use bn::{Fr, G1};
use elgamal_bn::public::PublicKey; use elgamal_bn::public::PublicKey;
use solana_sdk::{ use solana_program::{
account_info::{next_account_info, AccountInfo}, account_info::{next_account_info, AccountInfo},
program_error::ProgramError, program_error::ProgramError,
pubkey::Pubkey, pubkey::Pubkey,

View File

@ -4,7 +4,7 @@ use bn::{Fr, Group, G1};
use borsh::{BorshDeserialize, BorshSerialize}; use borsh::{BorshDeserialize, BorshSerialize};
use elgamal_bn::{ciphertext::Ciphertext, private::SecretKey, public::PublicKey}; use elgamal_bn::{ciphertext::Ciphertext, private::SecretKey, public::PublicKey};
use rand::thread_rng; use rand::thread_rng;
use solana_sdk::program_error::ProgramError; use solana_program::program_error::ProgramError;
type Points = (G1, G1); type Points = (G1, G1);

View File

@ -1,6 +1,3 @@
# Note: This crate must be built using do.sh
[package] [package]
name = "spl-themis-ristretto" name = "spl-themis-ristretto"
version = "0.1.0" version = "0.1.0"
@ -12,9 +9,8 @@ edition = "2018"
exclude = ["js/**"] exclude = ["js/**"]
[features] [features]
no-entrypoint = [] exclude_entrypoint = []
program = ["solana-sdk/program", "elgamal_ristretto/program"] default = ["elgamal_ristretto/program"]
default = ["solana-sdk/default", "elgamal_ristretto/default"]
[dependencies] [dependencies]
bincode = "1.3" bincode = "1.3"
@ -25,9 +21,8 @@ getrandom = { version = "0.1.15", features = ["dummy"] }
num-derive = "0.3" num-derive = "0.3"
num-traits = "0.2" num-traits = "0.2"
rand = "0.7.0" rand = "0.7.0"
solana-sdk = { version = "1.4.1", default-features = false, optional = true } solana-program = "1.4.3"
thiserror = "1.0" thiserror = "1.0"
[lib] [lib]
crate-type = ["cdylib", "lib"] crate-type = ["cdylib", "lib"]

View File

@ -1,9 +1,6 @@
//! Program entrypoint //! Program entrypoint
#![cfg(feature = "program")] use solana_program::{
#![cfg(not(feature = "no-entrypoint"))]
use solana_sdk::{
account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, pubkey::Pubkey, account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, pubkey::Pubkey,
}; };

View File

@ -2,8 +2,8 @@
use num_derive::FromPrimitive; use num_derive::FromPrimitive;
use num_traits::FromPrimitive; use num_traits::FromPrimitive;
use solana_sdk::program_error::PrintProgramError; use solana_program::program_error::PrintProgramError;
use solana_sdk::{decode_error::DecodeError, program_error::ProgramError}; use solana_program::{decode_error::DecodeError, program_error::ProgramError};
use thiserror::Error; use thiserror::Error;
/// Errors that may be returned by the Themis program. /// Errors that may be returned by the Themis program.

View File

@ -4,7 +4,7 @@ use crate::state::{Policies, User};
use borsh::{BorshDeserialize, BorshSerialize}; use borsh::{BorshDeserialize, BorshSerialize};
use curve25519_dalek::{ristretto::RistrettoPoint, scalar::Scalar}; use curve25519_dalek::{ristretto::RistrettoPoint, scalar::Scalar};
use elgamal_ristretto::public::PublicKey; use elgamal_ristretto::public::PublicKey;
use solana_sdk::{ use solana_program::{
instruction::{AccountMeta, Instruction}, instruction::{AccountMeta, Instruction},
program_error::ProgramError, program_error::ProgramError,
pubkey::Pubkey, pubkey::Pubkey,

View File

@ -1,14 +1,15 @@
//! An implementation of Brave's THEMIS for the Solana blockchain //! An implementation of Brave's THEMIS for the Solana blockchain
#![forbid(unsafe_code)] #![forbid(unsafe_code)]
pub mod entrypoint;
pub mod error; pub mod error;
pub mod instruction; pub mod instruction;
pub mod processor; pub mod processor;
pub mod state; pub mod state;
// Export current solana-sdk types for downstream users who may also be building with a different #[cfg(not(feature = "exclude_entrypoint"))]
// solana-sdk version pub mod entrypoint;
pub use solana_sdk;
solana_sdk::declare_id!("C8tR6A3CWcEL46KHx7TJcbyR4hdoPi1wrBBQa42FuJMF"); // Export current sdk types for downstream users building with a different sdk version
pub use solana_program;
solana_program::declare_id!("C8tR6A3CWcEL46KHx7TJcbyR4hdoPi1wrBBQa42FuJMF");

View File

@ -6,7 +6,7 @@ use crate::{
}; };
use curve25519_dalek::{ristretto::RistrettoPoint, scalar::Scalar}; use curve25519_dalek::{ristretto::RistrettoPoint, scalar::Scalar};
use elgamal_ristretto::public::PublicKey; use elgamal_ristretto::public::PublicKey;
use solana_sdk::{ use solana_program::{
account_info::{next_account_info, AccountInfo}, account_info::{next_account_info, AccountInfo},
program_error::ProgramError, program_error::ProgramError,
pubkey::Pubkey, pubkey::Pubkey,

View File

@ -9,7 +9,7 @@ use elgamal_ristretto::{
ciphertext::Ciphertext, multiply::ristretto_mul, private::SecretKey, public::PublicKey, ciphertext::Ciphertext, multiply::ristretto_mul, private::SecretKey, public::PublicKey,
}; };
use rand::thread_rng; use rand::thread_rng;
use solana_sdk::program_error::ProgramError; use solana_program::program_error::ProgramError;
type Points = (RistrettoPoint, RistrettoPoint); type Points = (RistrettoPoint, RistrettoPoint);

View File

@ -24,7 +24,7 @@
"testnetDefaultChannel": "edge", "testnetDefaultChannel": "edge",
"scripts": { "scripts": {
"build": "rollup -c rollup.config.ts", "build": "rollup -c rollup.config.ts",
"build:program": "rm client/util/store/config.json; ../../do.sh build token-lending", "build:program": "rm -f client/util/store/config.json; cargo build-bpf --manifest-path ../program/Cargo.toml",
"start": "ts-node cli/main.ts", "start": "ts-node cli/main.ts",
"lint": "eslint --ext .ts {cli,client}/* && prettier --check \"{cli,client}/**/*.ts\"", "lint": "eslint --ext .ts {cli,client}/* && prettier --check \"{cli,client}/**/*.ts\"",
"lint:fix": "eslint --ext .ts {cli,client}/* --fix && prettier --write \"{cli,client}/**/*.ts\"", "lint:fix": "eslint --ext .ts {cli,client}/* --fix && prettier --write \"{cli,client}/**/*.ts\"",
@ -33,7 +33,7 @@
"cluster:testnet": "cp cluster-testnet.env .env", "cluster:testnet": "cp cluster-testnet.env .env",
"cluster:mainnet-beta": "cp cluster-mainnet-beta.env .env", "cluster:mainnet-beta": "cp cluster-mainnet-beta.env .env",
"localnet:update": "solana-localnet update", "localnet:update": "solana-localnet update",
"localnet:up": "rm client/util/store/config.json; set -x; solana-localnet down; set -e; solana-localnet up", "localnet:up": "rm -f client/util/store/config.json; set -x; solana-localnet down; set -e; solana-localnet up",
"localnet:down": "solana-localnet down", "localnet:down": "solana-localnet down",
"localnet:logs": "solana-localnet logs -f" "localnet:logs": "solana-localnet logs -f"
}, },

View File

@ -1,6 +1,3 @@
# Note: This crate must be built using do.sh
[package] [package]
name = "spl-token-lending" name = "spl-token-lending"
version = "0.1.0" version = "0.1.0"
@ -11,20 +8,17 @@ license = "Apache-2.0"
edition = "2018" edition = "2018"
[features] [features]
no-entrypoint = [] exclude_entrypoint = []
program = ["solana-sdk/program"]
default = ["solana-sdk/default"]
[dependencies] [dependencies]
arrayref = "0.3.6" arrayref = "0.3.6"
num_enum = "0.5.1" num_enum = "0.5.1"
num-derive = "0.3" num-derive = "0.3"
num-traits = "0.2" num-traits = "0.2"
solana-sdk = { version = "1.3.17", default-features = false } solana-program = "1.4.3"
thiserror = "1.0" thiserror = "1.0"
[dev-dependencies] [dev-dependencies]
rand = { version = "0.7.0"}
[lib] [lib]
crate-type = ["cdylib", "lib"] crate-type = ["cdylib", "lib"]

View File

@ -1,10 +1,7 @@
//! Program entrypoint definitions //! Program entrypoint definitions
#![cfg(feature = "program")]
#![cfg(not(feature = "no-entrypoint"))]
use crate::{error::LendingError, processor::Processor}; use crate::{error::LendingError, processor::Processor};
use solana_sdk::{ use solana_program::{
account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, account_info::AccountInfo, entrypoint, entrypoint::ProgramResult,
program_error::PrintProgramError, pubkey::Pubkey, program_error::PrintProgramError, pubkey::Pubkey,
}; };

View File

@ -1,7 +1,7 @@
//! Error types //! Error types
use num_derive::FromPrimitive; use num_derive::FromPrimitive;
use solana_sdk::{decode_error::DecodeError, program_error::ProgramError}; use solana_program::{decode_error::DecodeError, program_error::ProgramError};
use thiserror::Error; use thiserror::Error;
/// Errors that may be returned by the TokenLending program. /// Errors that may be returned by the TokenLending program.

View File

@ -2,14 +2,15 @@
//! A lending program for the Solana blockchain. //! A lending program for the Solana blockchain.
pub mod entrypoint;
pub mod error; pub mod error;
pub mod instruction; pub mod instruction;
pub mod processor; pub mod processor;
pub mod state; pub mod state;
// Export current solana-sdk types for downstream users who may also be building with a different #[cfg(not(feature = "exclude_entrypoint"))]
// solana-sdk version pub mod entrypoint;
pub use solana_sdk;
solana_sdk::declare_id!("TokenLend1ng1111111111111111111111111111111"); // Export current sdk types for downstream users building with a different sdk version
pub use solana_program;
solana_program::declare_id!("TokenLend1ng1111111111111111111111111111111");

View File

@ -1,10 +1,8 @@
//! Program state processor //! Program state processor
#![cfg(feature = "program")]
use crate::error::LendingError; use crate::error::LendingError;
use num_traits::FromPrimitive; use num_traits::FromPrimitive;
use solana_sdk::{ use solana_program::{
account_info::AccountInfo, decode_error::DecodeError, entrypoint::ProgramResult, info, account_info::AccountInfo, decode_error::DecodeError, entrypoint::ProgramResult, info,
program_error::PrintProgramError, pubkey::Pubkey, program_error::PrintProgramError, pubkey::Pubkey,
}; };

View File

@ -31,13 +31,13 @@
"flow": "flow", "flow": "flow",
"flow:watch": "watch 'flow' . --wait=1 --ignoreDirectoryPattern=/doc/", "flow:watch": "watch 'flow' . --wait=1 --ignoreDirectoryPattern=/doc/",
"lint:watch": "watch 'npm run lint:fix' . --wait=1", "lint:watch": "watch 'npm run lint:fix' . --wait=1",
"build:program": "rm client/util/store/config.json; ../../do.sh build token-swap", "build:program": "rm -f client/util/store/config.json; cargo build-bpf --manifest-path ../program/Cargo.toml",
"cluster:localnet": "rm -f .env", "cluster:localnet": "rm -f .env",
"cluster:devnet": "cp cluster-devnet.env .env", "cluster:devnet": "cp cluster-devnet.env .env",
"cluster:testnet": "cp cluster-testnet.env .env", "cluster:testnet": "cp cluster-testnet.env .env",
"cluster:mainnet-beta": "cp cluster-mainnet-beta.env .env", "cluster:mainnet-beta": "cp cluster-mainnet-beta.env .env",
"localnet:update": "solana-localnet update", "localnet:update": "solana-localnet update",
"localnet:up": "rm client/util/store/config.json; set -x; solana-localnet down; set -e; solana-localnet up", "localnet:up": "rm -f client/util/store/config.json; set -x; solana-localnet down; set -e; solana-localnet up",
"localnet:down": "solana-localnet down", "localnet:down": "solana-localnet down",
"localnet:logs": "solana-localnet logs -f", "localnet:logs": "solana-localnet logs -f",
"pretty": "prettier --check '{,cli*/**/}*.[jt]s'", "pretty": "prettier --check '{,cli*/**/}*.[jt]s'",

View File

@ -1,6 +1,3 @@
# Note: This crate must be built using do.sh
[package] [package]
name = "spl-token-swap" name = "spl-token-swap"
version = "0.1.0" version = "0.1.0"
@ -12,21 +9,18 @@ edition = "2018"
exclude = ["js/**"] exclude = ["js/**"]
[features] [features]
no-entrypoint = [] exclude_entrypoint = []
program = ["solana-sdk/program", "spl-token/program", "spl-token/no-entrypoint"]
default = ["solana-sdk/default", "spl-token/default"]
[dependencies] [dependencies]
arrayref = "0.3.6" arrayref = "0.3.6"
num-derive = "0.3" num-derive = "0.3"
num-traits = "0.2" num-traits = "0.2"
remove_dir_all = "=0.5.0" remove_dir_all = "=0.5.0"
solana-sdk = { version = "1.3.17", default-features = false, optional = true } solana-program = "1.4.3"
spl-token = { path = "../../token/program", default-features = false, optional = true } spl-token = { path = "../../token/program", features = [ "exclude_entrypoint" ] }
thiserror = "1.0" thiserror = "1.0"
[dev-dependencies] [dev-dependencies]
rand = { version = "0.7.0"}
[lib] [lib]
name = "spl_token_swap" name = "spl_token_swap"

View File

@ -1,3 +0,0 @@
{
"lockfileVersion": 1
}

View File

@ -1,6 +1,6 @@
//! Swap calculations and curve implementations //! Swap calculations and curve implementations
use solana_sdk::{ use solana_program::{
program_error::ProgramError, program_error::ProgramError,
program_pack::{IsInitialized, Pack, Sealed}, program_pack::{IsInitialized, Pack, Sealed},
}; };

View File

@ -1,10 +1,7 @@
//! Program entrypoint definitions //! Program entrypoint definitions
#![cfg(feature = "program")]
#![cfg(not(feature = "no-entrypoint"))]
use crate::{error::SwapError, processor::Processor}; use crate::{error::SwapError, processor::Processor};
use solana_sdk::{ use solana_program::{
account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, account_info::AccountInfo, entrypoint, entrypoint::ProgramResult,
program_error::PrintProgramError, pubkey::Pubkey, program_error::PrintProgramError, pubkey::Pubkey,
}; };

View File

@ -1,7 +1,7 @@
//! Error types //! Error types
use num_derive::FromPrimitive; use num_derive::FromPrimitive;
use solana_sdk::{decode_error::DecodeError, program_error::ProgramError}; use solana_program::{decode_error::DecodeError, program_error::ProgramError};
use thiserror::Error; use thiserror::Error;
/// Errors that may be returned by the TokenSwap program. /// Errors that may be returned by the TokenSwap program.

View File

@ -4,7 +4,7 @@
use crate::curve::SwapCurve; use crate::curve::SwapCurve;
use crate::error::SwapError; use crate::error::SwapError;
use solana_sdk::{ use solana_program::{
instruction::{AccountMeta, Instruction}, instruction::{AccountMeta, Instruction},
program_error::ProgramError, program_error::ProgramError,
program_pack::Pack, program_pack::Pack,

View File

@ -3,14 +3,15 @@
//! An Uniswap-like program for the Solana blockchain. //! An Uniswap-like program for the Solana blockchain.
pub mod curve; pub mod curve;
pub mod entrypoint;
pub mod error; pub mod error;
pub mod instruction; pub mod instruction;
pub mod processor; pub mod processor;
pub mod state; pub mod state;
// Export current solana-sdk types for downstream users who may also be building with a different #[cfg(not(feature = "exclude_entrypoint"))]
// solana-sdk version mod entrypoint;
pub use solana_sdk;
solana_sdk::declare_id!("TokenSwap1111111111111111111111111111111111"); // Export current sdk types for downstream users building with a different sdk version
pub use solana_program;
solana_program::declare_id!("TokenSwap1111111111111111111111111111111111");

View File

@ -1,14 +1,14 @@
//! Program state processor //! Program state processor
#![cfg(feature = "program")] //#![cfg(feature = "program")]
use crate::{curve::SwapCurve, error::SwapError, instruction::SwapInstruction, state::SwapInfo}; use crate::{curve::SwapCurve, error::SwapError, instruction::SwapInstruction, state::SwapInfo};
use num_traits::FromPrimitive; use num_traits::FromPrimitive;
#[cfg(not(target_arch = "bpf"))] #[cfg(not(target_arch = "bpf"))]
use solana_sdk::instruction::Instruction; use solana_program::instruction::Instruction;
#[cfg(target_arch = "bpf")] #[cfg(target_arch = "bpf")]
use solana_sdk::program::invoke_signed; use solana_program::program::invoke_signed;
use solana_sdk::{ use solana_program::{
account_info::{next_account_info, AccountInfo}, account_info::{next_account_info, AccountInfo},
decode_error::DecodeError, decode_error::DecodeError,
entrypoint::ProgramResult, entrypoint::ProgramResult,
@ -672,10 +672,6 @@ impl PrintProgramError for SwapError {
} }
} }
// Pull in syscall stubs when building for non-BPF targets
#[cfg(not(target_arch = "bpf"))]
solana_sdk::program_stubs!();
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
@ -685,7 +681,7 @@ mod tests {
}, },
instruction::{deposit, initialize, swap, withdraw}, instruction::{deposit, initialize, swap, withdraw},
}; };
use solana_sdk::{ use solana_program::{
account::Account, account_info::create_is_signer_account_infos, instruction::Instruction, account::Account, account_info::create_is_signer_account_infos, instruction::Instruction,
rent::Rent, sysvar::rent, rent::Rent, sysvar::rent,
}; };
@ -728,7 +724,7 @@ mod tests {
token_a_amount: u64, token_a_amount: u64,
token_b_amount: u64, token_b_amount: u64,
) -> Self { ) -> Self {
let swap_key = pubkey_rand(); let swap_key = Pubkey::new_unique();
let swap_account = Account::new(0, SwapInfo::get_packed_len(), &SWAP_PROGRAM_ID); let swap_account = Account::new(0, SwapInfo::get_packed_len(), &SWAP_PROGRAM_ID);
let (authority_key, nonce) = let (authority_key, nonce) =
Pubkey::find_program_address(&[&swap_key.to_bytes()[..]], &SWAP_PROGRAM_ID); Pubkey::find_program_address(&[&swap_key.to_bytes()[..]], &SWAP_PROGRAM_ID);
@ -886,6 +882,7 @@ mod tests {
panic!("Could not find matching swap token account"); panic!("Could not find matching swap token account");
} }
#[allow(clippy::too_many_arguments)]
pub fn swap( pub fn swap(
&mut self, &mut self,
user_key: &Pubkey, user_key: &Pubkey,
@ -956,6 +953,7 @@ mod tests {
Ok(()) Ok(())
} }
#[allow(clippy::too_many_arguments)]
pub fn deposit( pub fn deposit(
&mut self, &mut self,
depositor_key: &Pubkey, depositor_key: &Pubkey,
@ -1036,6 +1034,7 @@ mod tests {
) )
} }
#[allow(clippy::too_many_arguments)]
pub fn withdraw( pub fn withdraw(
&mut self, &mut self,
user_key: &Pubkey, user_key: &Pubkey,
@ -1111,10 +1110,6 @@ mod tests {
Rent::default().minimum_balance(SplAccount::get_packed_len()) Rent::default().minimum_balance(SplAccount::get_packed_len())
} }
fn pubkey_rand() -> Pubkey {
Pubkey::new(&rand::random::<[u8; 32]>())
}
fn do_process_instruction( fn do_process_instruction(
instruction: Instruction, instruction: Instruction,
accounts: Vec<&mut Account>, accounts: Vec<&mut Account>,
@ -1164,7 +1159,7 @@ mod tests {
account_owner_key: &Pubkey, account_owner_key: &Pubkey,
amount: u64, amount: u64,
) -> (Pubkey, Account) { ) -> (Pubkey, Account) {
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = Account::new( let mut account_account = Account::new(
account_minimum_balance(), account_minimum_balance(),
SplAccount::get_packed_len(), SplAccount::get_packed_len(),
@ -1212,7 +1207,7 @@ mod tests {
authority_key: &Pubkey, authority_key: &Pubkey,
freeze_authority: Option<&Pubkey>, freeze_authority: Option<&Pubkey>,
) -> (Pubkey, Account) { ) -> (Pubkey, Account) {
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = Account::new( let mut mint_account = Account::new(
mint_minimum_balance(), mint_minimum_balance(),
SplMint::get_packed_len(), SplMint::get_packed_len(),
@ -1231,9 +1226,9 @@ mod tests {
#[test] #[test]
fn test_token_program_id_error() { fn test_token_program_id_error() {
let swap_key = pubkey_rand(); let swap_key = Pubkey::new_unique();
let mut mint = (pubkey_rand(), Account::default()); let mut mint = (Pubkey::new_unique(), Account::default());
let mut destination = (pubkey_rand(), Account::default()); let mut destination = (Pubkey::new_unique(), Account::default());
let token_program = (TOKEN_PROGRAM_ID, Account::default()); let token_program = (TOKEN_PROGRAM_ID, Account::default());
let (authority_key, nonce) = let (authority_key, nonce) =
Pubkey::find_program_address(&[&swap_key.to_bytes()[..]], &SWAP_PROGRAM_ID); Pubkey::find_program_address(&[&swap_key.to_bytes()[..]], &SWAP_PROGRAM_ID);
@ -1260,7 +1255,7 @@ mod tests {
#[test] #[test]
fn test_initialize() { fn test_initialize() {
let user_key = pubkey_rand(); let user_key = Pubkey::new_unique();
let trade_fee_numerator = 1; let trade_fee_numerator = 1;
let trade_fee_denominator = 2; let trade_fee_denominator = 2;
let owner_trade_fee_numerator = 1; let owner_trade_fee_numerator = 1;
@ -1680,7 +1675,7 @@ mod tests {
// wrong token program id // wrong token program id
{ {
let wrong_program_id = pubkey_rand(); let wrong_program_id = Pubkey::new_unique();
assert_eq!( assert_eq!(
Err(ProgramError::InvalidAccountData), Err(ProgramError::InvalidAccountData),
do_process_instruction( do_process_instruction(
@ -1784,8 +1779,8 @@ mod tests {
#[test] #[test]
fn test_deposit() { fn test_deposit() {
let user_key = pubkey_rand(); let user_key = Pubkey::new_unique();
let depositor_key = pubkey_rand(); let depositor_key = Pubkey::new_unique();
let trade_fee_numerator = 1; let trade_fee_numerator = 1;
let trade_fee_denominator = 2; let trade_fee_denominator = 2;
let owner_trade_fee_numerator = 1; let owner_trade_fee_numerator = 1;
@ -2059,7 +2054,7 @@ mod tests {
pool_key, pool_key,
mut pool_account, mut pool_account,
) = accounts.setup_token_accounts(&user_key, &depositor_key, deposit_a, deposit_b, 0); ) = accounts.setup_token_accounts(&user_key, &depositor_key, deposit_a, deposit_b, 0);
let wrong_key = pubkey_rand(); let wrong_key = Pubkey::new_unique();
assert_eq!( assert_eq!(
Err(ProgramError::InvalidAccountData), Err(ProgramError::InvalidAccountData),
do_process_instruction( do_process_instruction(
@ -2108,7 +2103,7 @@ mod tests {
let old_a_key = accounts.token_a_key; let old_a_key = accounts.token_a_key;
let old_a_account = accounts.token_a_account; let old_a_account = accounts.token_a_account;
accounts.token_a_key = token_a_key.clone(); accounts.token_a_key = token_a_key;
accounts.token_a_account = token_a_account.clone(); accounts.token_a_account = token_a_account.clone();
// wrong swap token a account // wrong swap token a account
@ -2134,7 +2129,7 @@ mod tests {
let old_b_key = accounts.token_b_key; let old_b_key = accounts.token_b_key;
let old_b_account = accounts.token_b_account; let old_b_account = accounts.token_b_account;
accounts.token_b_key = token_b_key.clone(); accounts.token_b_key = token_b_key;
accounts.token_b_account = token_b_account.clone(); accounts.token_b_account = token_b_account.clone();
// wrong swap token b account // wrong swap token b account
@ -2314,7 +2309,7 @@ mod tests {
#[test] #[test]
fn test_withdraw() { fn test_withdraw() {
let user_key = pubkey_rand(); let user_key = Pubkey::new_unique();
let trade_fee_numerator = 1; let trade_fee_numerator = 1;
let trade_fee_denominator = 2; let trade_fee_denominator = 2;
let owner_trade_fee_numerator = 1; let owner_trade_fee_numerator = 1;
@ -2336,7 +2331,7 @@ mod tests {
}), }),
}; };
let withdrawer_key = pubkey_rand(); let withdrawer_key = Pubkey::new_unique();
let initial_a = token_a_amount / 10; let initial_a = token_a_amount / 10;
let initial_b = token_b_amount / 10; let initial_b = token_b_amount / 10;
let initial_pool = swap_curve.calculator.new_pool_supply() / 10; let initial_pool = swap_curve.calculator.new_pool_supply() / 10;
@ -2638,7 +2633,7 @@ mod tests {
initial_b, initial_b,
withdraw_amount, withdraw_amount,
); );
let wrong_key = pubkey_rand(); let wrong_key = Pubkey::new_unique();
assert_eq!( assert_eq!(
Err(ProgramError::InvalidAccountData), Err(ProgramError::InvalidAccountData),
do_process_instruction( do_process_instruction(
@ -2695,7 +2690,7 @@ mod tests {
let old_a_key = accounts.token_a_key; let old_a_key = accounts.token_a_key;
let old_a_account = accounts.token_a_account; let old_a_account = accounts.token_a_account;
accounts.token_a_key = token_a_key.clone(); accounts.token_a_key = token_a_key;
accounts.token_a_account = token_a_account.clone(); accounts.token_a_account = token_a_account.clone();
// wrong swap token a account // wrong swap token a account
@ -2721,7 +2716,7 @@ mod tests {
let old_b_key = accounts.token_b_key; let old_b_key = accounts.token_b_key;
let old_b_account = accounts.token_b_account; let old_b_account = accounts.token_b_account;
accounts.token_b_key = token_b_key.clone(); accounts.token_b_key = token_b_key;
accounts.token_b_account = token_b_account.clone(); accounts.token_b_account = token_b_account.clone();
// wrong swap token b account // wrong swap token b account
@ -2955,7 +2950,7 @@ mod tests {
mut _pool_account, mut _pool_account,
) = accounts.setup_token_accounts(&user_key, &withdrawer_key, 0, 0, 0); ) = accounts.setup_token_accounts(&user_key, &withdrawer_key, 0, 0, 0);
let pool_fee_key = accounts.pool_fee_key.clone(); let pool_fee_key = accounts.pool_fee_key;
let mut pool_fee_account = accounts.pool_fee_account.clone(); let mut pool_fee_account = accounts.pool_fee_account.clone();
let fee_account = Processor::unpack_token_account(&pool_fee_account.data).unwrap(); let fee_account = Processor::unpack_token_account(&pool_fee_account.data).unwrap();
let pool_fee_amount = fee_account.amount; let pool_fee_amount = fee_account.amount;
@ -3006,8 +3001,8 @@ mod tests {
} }
fn check_valid_swap_curve(curve_type: CurveType, calculator: Box<dyn CurveCalculator>) { fn check_valid_swap_curve(curve_type: CurveType, calculator: Box<dyn CurveCalculator>) {
let user_key = pubkey_rand(); let user_key = Pubkey::new_unique();
let swapper_key = pubkey_rand(); let swapper_key = Pubkey::new_unique();
let token_a_amount = 1000; let token_a_amount = 1000;
let token_b_amount = 5000; let token_b_amount = 5000;
@ -3177,8 +3172,8 @@ mod tests {
#[test] #[test]
fn test_invalid_swap() { fn test_invalid_swap() {
let user_key = pubkey_rand(); let user_key = Pubkey::new_unique();
let swapper_key = pubkey_rand(); let swapper_key = Pubkey::new_unique();
let trade_fee_numerator = 1; let trade_fee_numerator = 1;
let trade_fee_denominator = 4; let trade_fee_denominator = 4;
let owner_trade_fee_numerator = 1; let owner_trade_fee_numerator = 1;
@ -3206,8 +3201,8 @@ mod tests {
let initial_b = token_b_amount / 5; let initial_b = token_b_amount / 5;
let minimum_b_amount = initial_b / 2; let minimum_b_amount = initial_b / 2;
let swap_token_a_key = accounts.token_a_key.clone(); let swap_token_a_key = accounts.token_a_key;
let swap_token_b_key = accounts.token_b_key.clone(); let swap_token_b_key = accounts.token_b_key;
// swap not initialized // swap not initialized
{ {
@ -3280,7 +3275,7 @@ mod tests {
_pool_key, _pool_key,
_pool_account, _pool_account,
) = accounts.setup_token_accounts(&user_key, &swapper_key, initial_a, initial_b, 0); ) = accounts.setup_token_accounts(&user_key, &swapper_key, initial_a, initial_b, 0);
let wrong_program_id = pubkey_rand(); let wrong_program_id = Pubkey::new_unique();
assert_eq!( assert_eq!(
Err(ProgramError::InvalidAccountData), Err(ProgramError::InvalidAccountData),
do_process_instruction( do_process_instruction(
@ -3572,7 +3567,7 @@ mod tests {
); );
} }
// slippage exceeeded: minimum out amount too high // slippage exceeded: minimum out amount too high
{ {
let ( let (
token_a_key, token_a_key,

View File

@ -2,7 +2,7 @@
use crate::curve::SwapCurve; use crate::curve::SwapCurve;
use arrayref::{array_mut_ref, array_ref, array_refs, mut_array_refs}; use arrayref::{array_mut_ref, array_ref, array_refs, mut_array_refs};
use solana_sdk::{ use solana_program::{
program_error::ProgramError, program_error::ProgramError,
program_pack::{IsInitialized, Pack, Sealed}, program_pack::{IsInitialized, Pack, Sealed},
pubkey::Pubkey, pubkey::Pubkey,

View File

@ -12,14 +12,14 @@ version = "2.0.3"
clap = "2.33.3" clap = "2.33.3"
console = "0.13.0" console = "0.13.0"
serde_json = "1.0.59" serde_json = "1.0.59"
solana-account-decoder = { version = "=1.4.1" } solana-account-decoder = "1.4.3"
solana-clap-utils = { version = "=1.4.1"} solana-clap-utils = "1.4.3"
solana-cli-config = { version = "=1.4.2" } solana-cli-config = "1.4.3"
solana-cli-output = { version = "=1.4.1" } solana-cli-output = "1.4.3"
solana-client = { version = "=1.4.1" } solana-client = "1.4.3"
solana-logger = { version = "=1.4.2" } solana-logger = "1.4.3"
solana-sdk = { version = "=1.4.1" } solana-sdk = "1.4.3"
spl-token = { version = "2.0", path="../program" } spl-token = { version = "2.0", path="../program", features = [ "exclude_entrypoint" ] }
[[bin]] [[bin]]
name = "spl-token" name = "spl-token"

View File

@ -31,13 +31,13 @@
"flow": "flow", "flow": "flow",
"flow:watch": "watch 'flow' . --wait=1 --ignoreDirectoryPattern=/doc/", "flow:watch": "watch 'flow' . --wait=1 --ignoreDirectoryPattern=/doc/",
"lint:watch": "watch 'npm run lint:fix' . --wait=1", "lint:watch": "watch 'npm run lint:fix' . --wait=1",
"build:program": "rm client/util/store/config.json; ../../do.sh build token", "build:program": "rm -f client/util/store/config.json; cargo build-bpf --manifest-path ../program/Cargo.toml",
"cluster:localnet": "rm -f .env", "cluster:localnet": "rm -f .env",
"cluster:devnet": "cp cluster-devnet.env .env", "cluster:devnet": "cp cluster-devnet.env .env",
"cluster:testnet": "cp cluster-testnet.env .env", "cluster:testnet": "cp cluster-testnet.env .env",
"cluster:mainnet-beta": "cp cluster-mainnet-beta.env .env", "cluster:mainnet-beta": "cp cluster-mainnet-beta.env .env",
"localnet:update": "solana-localnet update", "localnet:update": "solana-localnet update",
"localnet:up": "rm client/util/store/config.json; set -x; solana-localnet down; set -e; solana-localnet up", "localnet:up": "rm -f client/util/store/config.json; set -x; solana-localnet down; set -e; solana-localnet up",
"localnet:down": "solana-localnet down", "localnet:down": "solana-localnet down",
"localnet:logs": "solana-localnet logs -f", "localnet:logs": "solana-localnet logs -f",
"pretty": "prettier --check '{,cli*/**/}*.[jt]s'", "pretty": "prettier --check '{,cli*/**/}*.[jt]s'",

View File

@ -1755,9 +1755,9 @@ dependencies = [
[[package]] [[package]]
name = "solana-bpf-loader-program" name = "solana-bpf-loader-program"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4e65edb39170c8cba00256a2ae041c28bbc97cf4add0173543ab0a9893fc91b" checksum = "ffe0627cc4ef87bb00a8691fe7c6bb7eec9efde660c5b02257daf20ccef8286a"
dependencies = [ dependencies = [
"bincode", "bincode",
"byteorder", "byteorder",
@ -1772,9 +1772,9 @@ dependencies = [
[[package]] [[package]]
name = "solana-config-program" name = "solana-config-program"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49d31450d593803698c8df43ba5cd861decfab9ea057899f8e19f50df105c306" checksum = "be3dddd5b85283625f92e1bfa4b100e13c3941ecb472584b29afb5c5382ac09c"
dependencies = [ dependencies = [
"bincode", "bincode",
"chrono", "chrono",
@ -1786,9 +1786,9 @@ dependencies = [
[[package]] [[package]]
name = "solana-crate-features" name = "solana-crate-features"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d665c51b3065feb33f641dd1b29d476e11e14dac657725a8ba9af52e68b6618d" checksum = "beeada39ad2aecfee8795d90ca7150389e7f958236f2630825273b9b900a7f19"
dependencies = [ dependencies = [
"backtrace", "backtrace",
"bytes 0.4.12", "bytes 0.4.12",
@ -1809,10 +1809,43 @@ dependencies = [
] ]
[[package]] [[package]]
name = "solana-logger" name = "solana-frozen-abi"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa91a8812e60bcfdaffaf0d7202a6fb55b64e19a144c313d208829634c69544c" checksum = "63bbbf3bf442bc7e4e76b57af858030fdcb8953cdbcbc6bf3ddd4819aa38e982"
dependencies = [
"bs58",
"bv",
"generic-array 0.14.4",
"log",
"memmap",
"rustc_version",
"serde",
"serde_derive",
"sha2",
"solana-frozen-abi-macro",
"solana-logger",
"thiserror",
]
[[package]]
name = "solana-frozen-abi-macro"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bdb4a177d5f46025b619c83d0562e6ea302a871f98148bd7edbc82416ac76949"
dependencies = [
"lazy_static",
"proc-macro2 1.0.19",
"quote 1.0.6",
"rustc_version",
"syn 1.0.39",
]
[[package]]
name = "solana-logger"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8f251c26d46a55bf5c3f6ef5e999e8949909eab952e19a9261e6434ebd31041"
dependencies = [ dependencies = [
"env_logger", "env_logger",
"lazy_static", "lazy_static",
@ -1821,9 +1854,9 @@ dependencies = [
[[package]] [[package]]
name = "solana-measure" name = "solana-measure"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d31aaf307e4bcc52b18d1fe8971bdede0a0ee0e0242ea322ae5bc2e71bb5883" checksum = "5bacc5ec88bb53610986d49199526fd42dcad7c8b3fc795f3de5740ebff982f4"
dependencies = [ dependencies = [
"jemalloc-ctl", "jemalloc-ctl",
"jemallocator", "jemallocator",
@ -1834,9 +1867,9 @@ dependencies = [
[[package]] [[package]]
name = "solana-metrics" name = "solana-metrics"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5fd1e167af8decba13acdc487cfb26ffa976e1b2fb7507baa800e9b0ae086729" checksum = "c11d2f59d87ff29d369394654dcff3c66a898b32a351bb67a9ae9de0db2b82f2"
dependencies = [ dependencies = [
"env_logger", "env_logger",
"gethostname", "gethostname",
@ -1847,10 +1880,40 @@ dependencies = [
] ]
[[package]] [[package]]
name = "solana-rayon-threadlimit" name = "solana-program"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cfb5a22cee0ded53e11090c6bcd963eff6d43caf49c4cda42691e94fab7ddd7d" checksum = "9d4621f2d8ca6d7ac09c0138a02d21def0a736b70feab1f2516f5a74f1ee642f"
dependencies = [
"bincode",
"bs58",
"bv",
"curve25519-dalek 2.1.0",
"hex",
"itertools",
"lazy_static",
"log",
"num-derive",
"num-traits",
"rand",
"rustc_version",
"rustversion",
"serde",
"serde_bytes",
"serde_derive",
"sha2",
"solana-frozen-abi",
"solana-frozen-abi-macro",
"solana-logger",
"solana-sdk-macro",
"thiserror",
]
[[package]]
name = "solana-rayon-threadlimit"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "84bac623c15acb44f571ec177b67a6434c6aa7637bdb26fe5d776aeb7f4d61ae"
dependencies = [ dependencies = [
"lazy_static", "lazy_static",
"num_cpus", "num_cpus",
@ -1858,9 +1921,9 @@ dependencies = [
[[package]] [[package]]
name = "solana-runtime" name = "solana-runtime"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d511d1dfcf89db6783e83f9f028f139bbff357e190bd0947bd23ff1235f97558" checksum = "8242a732a6db6227854f9bb0c2958c1f219be85989d7ca66d934033d32043c4f"
dependencies = [ dependencies = [
"bincode", "bincode",
"blake3", "blake3",
@ -1888,12 +1951,13 @@ dependencies = [
"serde", "serde",
"serde_derive", "serde_derive",
"solana-config-program", "solana-config-program",
"solana-frozen-abi",
"solana-frozen-abi-macro",
"solana-logger", "solana-logger",
"solana-measure", "solana-measure",
"solana-metrics", "solana-metrics",
"solana-rayon-threadlimit", "solana-rayon-threadlimit",
"solana-sdk", "solana-sdk",
"solana-sdk-macro-frozen-abi",
"solana-secp256k1-program", "solana-secp256k1-program",
"solana-stake-program", "solana-stake-program",
"solana-vote-program", "solana-vote-program",
@ -1906,9 +1970,9 @@ dependencies = [
[[package]] [[package]]
name = "solana-sdk" name = "solana-sdk"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e8742ccdaac9ff6e7085e8eb3737858254e4691c6fcaac6b472875db2bbba0d" checksum = "096751fdd2ec2dc3ed7146b1b14245a5b562a21b5046bf3677810a96037aff96"
dependencies = [ dependencies = [
"assert_matches", "assert_matches",
"bincode", "bincode",
@ -1916,7 +1980,6 @@ dependencies = [
"bv", "bv",
"byteorder", "byteorder",
"chrono", "chrono",
"curve25519-dalek 2.1.0",
"digest 0.9.0", "digest 0.9.0",
"ed25519-dalek", "ed25519-dalek",
"generic-array 0.14.4", "generic-array 0.14.4",
@ -1940,17 +2003,19 @@ dependencies = [
"sha2", "sha2",
"sha3", "sha3",
"solana-crate-features", "solana-crate-features",
"solana-frozen-abi",
"solana-frozen-abi-macro",
"solana-logger", "solana-logger",
"solana-program",
"solana-sdk-macro", "solana-sdk-macro",
"solana-sdk-macro-frozen-abi",
"thiserror", "thiserror",
] ]
[[package]] [[package]]
name = "solana-sdk-macro" name = "solana-sdk-macro"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f38f6c5f3b4119ffa7f75156836e5c88082e557fa978fe1f87995bd386b0d08" checksum = "a02d89c5d8c3c098552e39ad716f8e25b1b9ce95905ad0c770c78d36e1ebcc39"
dependencies = [ dependencies = [
"bs58", "bs58",
"proc-macro2 1.0.19", "proc-macro2 1.0.19",
@ -1959,24 +2024,11 @@ dependencies = [
"syn 1.0.39", "syn 1.0.39",
] ]
[[package]]
name = "solana-sdk-macro-frozen-abi"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e47f618ad2d7af7b9c701e9cc9951681f6d6a9c754863f2ab63e1b98507e515"
dependencies = [
"lazy_static",
"proc-macro2 1.0.19",
"quote 1.0.6",
"rustc_version",
"syn 1.0.39",
]
[[package]] [[package]]
name = "solana-secp256k1-program" name = "solana-secp256k1-program"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d8888a924c9183f430a72e1a643648aeff105278bc39315d211bd6b6197e0a0" checksum = "0fa9c6d939374dc10aadb4f5d918134d3388411f8bb975386cd6769afe127268"
dependencies = [ dependencies = [
"bincode", "bincode",
"digest 0.9.0", "digest 0.9.0",
@ -1989,9 +2041,9 @@ dependencies = [
[[package]] [[package]]
name = "solana-stake-program" name = "solana-stake-program"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b3780a14335d07b301128ad518876c8f4c3cb513f88e808faef3ed8a5090abc6" checksum = "1decea030cb64647c3bee685d804344c10de071ec03f0331436c8c90b500ca27"
dependencies = [ dependencies = [
"bincode", "bincode",
"log", "log",
@ -2001,18 +2053,19 @@ dependencies = [
"serde", "serde",
"serde_derive", "serde_derive",
"solana-config-program", "solana-config-program",
"solana-frozen-abi",
"solana-frozen-abi-macro",
"solana-metrics", "solana-metrics",
"solana-sdk", "solana-sdk",
"solana-sdk-macro-frozen-abi",
"solana-vote-program", "solana-vote-program",
"thiserror", "thiserror",
] ]
[[package]] [[package]]
name = "solana-vote-program" name = "solana-vote-program"
version = "1.4.1" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "595274785736cbae1f012ed1c78aebbbe2cf75720dec1e1850800c9cd64fae9b" checksum = "b44aeb9a4169443ce3d2ee417fe61abc1067d6d842e609f3ec30e462b98fae45"
dependencies = [ dependencies = [
"bincode", "bincode",
"log", "log",
@ -2021,10 +2074,11 @@ dependencies = [
"rustc_version", "rustc_version",
"serde", "serde",
"serde_derive", "serde_derive",
"solana-frozen-abi",
"solana-frozen-abi-macro",
"solana-logger", "solana-logger",
"solana-metrics", "solana-metrics",
"solana-sdk", "solana-sdk",
"solana-sdk-macro-frozen-abi",
"thiserror", "thiserror",
] ]
@ -2061,7 +2115,7 @@ dependencies = [
"num-traits", "num-traits",
"num_enum", "num_enum",
"remove_dir_all", "remove_dir_all",
"solana-sdk", "solana-program",
"thiserror", "thiserror",
] ]

View File

@ -9,8 +9,8 @@ edition = "2018"
[dev-dependencies] [dev-dependencies]
rand = { version = "0.7.0"} rand = { version = "0.7.0"}
spl-token = { path = "../program" } spl-token = { path = "../program", features = [ "exclude_entrypoint" ] }
solana-runtime = { version = "1.3.17" } solana-runtime = "1.4.3"
solana-sdk = { version = "1.3.17" } solana-sdk = "1.4.3"
solana-bpf-loader-program = { version = "1.3.17" } solana-bpf-loader-program = "1.4.3"
solana_rbpf = "=0.1.32" solana_rbpf = "=0.1.32"

View File

@ -1,12 +1,10 @@
use std::{fs::canonicalize, process::Command}; use std::process::Command;
fn main() { fn main() {
println!("cargo:warning=(not a warning) Building SPL Token shared object"); println!("cargo:warning=(not a warning) Building BPF token program");
Command::new(canonicalize("../../do.sh").unwrap()) Command::new("cargo")
.current_dir("../..") .arg("build-bpf")
.arg("build")
.arg("token/program")
.status() .status()
.expect("Failed to build token program") .expect("Failed to build BPF token program")
.success(); .success();
} }

View File

@ -74,15 +74,15 @@ fn run_program(
#[test] #[test]
fn assert_instruction_count() { fn assert_instruction_count() {
let program_id = Pubkey::new_rand(); let program_id = Pubkey::new_unique();
let source_key = Pubkey::new_rand(); let source_key = Pubkey::new_unique();
let source_account = SolanaAccount::new_ref(u64::MAX, Account::get_packed_len(), &program_id); let source_account = SolanaAccount::new_ref(u64::MAX, Account::get_packed_len(), &program_id);
let destination_key = Pubkey::new_rand(); let destination_key = Pubkey::new_unique();
let destination_account = let destination_account =
SolanaAccount::new_ref(u64::MAX, Account::get_packed_len(), &program_id); SolanaAccount::new_ref(u64::MAX, Account::get_packed_len(), &program_id);
let owner_key = Pubkey::new_rand(); let owner_key = Pubkey::new_unique();
let owner_account = RefCell::new(SolanaAccount::default()); let owner_account = RefCell::new(SolanaAccount::default());
let mint_key = Pubkey::new_rand(); let mint_key = Pubkey::new_unique();
let mint_account = SolanaAccount::new_ref(0, Mint::get_packed_len(), &program_id); let mint_account = SolanaAccount::new_ref(0, Mint::get_packed_len(), &program_id);
let rent_key = rent::id(); let rent_key = rent::id();
let rent_account = RefCell::new(rent::create_account(42, &Rent::default())); let rent_account = RefCell::new(rent::create_account(42, &Rent::default()));

View File

@ -1,6 +1,3 @@
# Note: This crate must be built using do.sh
[package] [package]
name = "spl-token-v3" name = "spl-token-v3"
version = "3.0.0" version = "3.0.0"
@ -12,15 +9,13 @@ edition = "2018"
exclude = ["js/**"] exclude = ["js/**"]
[features] [features]
no-entrypoint = [] exclude_entrypoint = []
program = ["solana-sdk/program"]
default = ["solana-sdk/default"]
[dependencies] [dependencies]
num-derive = "0.3" num-derive = "0.3"
num-traits = "0.2" num-traits = "0.2"
remove_dir_all = "=0.5.0" remove_dir_all = "=0.5.0"
solana-sdk = { version = "1.3.17", default-features = false, optional = true } solana-program = "1.4.3"
thiserror = "1.0" thiserror = "1.0"
arrayref = "0.3.6" arrayref = "0.3.6"
num_enum = "0.5.1" num_enum = "0.5.1"

View File

@ -1,10 +1,7 @@
//! Program entrypoint //! Program entrypoint
#![cfg(feature = "program")]
#![cfg(not(feature = "no-entrypoint"))]
use crate::{error::TokenError, processor::Processor}; use crate::{error::TokenError, processor::Processor};
use solana_sdk::{ use solana_program::{
account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, account_info::AccountInfo, entrypoint, entrypoint::ProgramResult,
program_error::PrintProgramError, pubkey::Pubkey, program_error::PrintProgramError, pubkey::Pubkey,
}; };

View File

@ -1,7 +1,7 @@
//! Error types //! Error types
use num_derive::FromPrimitive; use num_derive::FromPrimitive;
use solana_sdk::{decode_error::DecodeError, program_error::ProgramError}; use solana_program::{decode_error::DecodeError, program_error::ProgramError};
use thiserror::Error; use thiserror::Error;
/// Errors that may be returned by the Token program. /// Errors that may be returned by the Token program.

View File

@ -1,7 +1,7 @@
//! Instruction types //! Instruction types
use crate::error::TokenError; use crate::error::TokenError;
use solana_sdk::{ use solana_program::{
instruction::{AccountMeta, Instruction}, instruction::{AccountMeta, Instruction},
program_error::ProgramError, program_error::ProgramError,
program_option::COption, program_option::COption,

View File

@ -3,16 +3,17 @@
//! An ERC20-like Token program for the Solana blockchain //! An ERC20-like Token program for the Solana blockchain
pub mod entrypoint;
pub mod error; pub mod error;
pub mod instruction; pub mod instruction;
pub mod native_mint; pub mod native_mint;
pub mod processor; pub mod processor;
pub mod state; pub mod state;
// Export current solana-sdk types for downstream users who may also be building with a different #[cfg(not(feature = "exclude_entrypoint"))]
// solana-sdk version pub mod entrypoint;
pub use solana_sdk;
// Export current sdk types for downstream users building with a different sdk version
pub use solana_program;
/// Convert the UI representation of a token amount (using the decimals field defined in its mint) /// Convert the UI representation of a token amount (using the decimals field defined in its mint)
/// to the raw amount /// to the raw amount
@ -25,4 +26,4 @@ pub fn amount_to_ui_amount(amount: u64, decimals: u8) -> f64 {
amount as f64 / 10_usize.pow(decimals as u32) as f64 amount as f64 / 10_usize.pow(decimals as u32) as f64
} }
solana_sdk::declare_id!("TokenKEGQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"); solana_program::declare_id!("TokenKEGQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");

View File

@ -4,12 +4,12 @@
pub const DECIMALS: u8 = 9; pub const DECIMALS: u8 = 9;
// The Mint for native SOL Token accounts // The Mint for native SOL Token accounts
solana_sdk::declare_id!("So11111111111111111111111111111111111111113"); solana_program::declare_id!("So11111111111111111111111111111111111111113");
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use solana_sdk::native_token::*; use solana_program::native_token::*;
#[test] #[test]
fn test_decimals() { fn test_decimals() {

View File

@ -1,14 +1,12 @@
//! Program state processor //! Program state processor
#![cfg(feature = "program")]
use crate::{ use crate::{
error::TokenError, error::TokenError,
instruction::{is_valid_signer_index, AuthorityType, TokenInstruction, MAX_SIGNERS}, instruction::{is_valid_signer_index, AuthorityType, TokenInstruction, MAX_SIGNERS},
state::{Account, AccountState, Mint, Multisig}, state::{Account, AccountState, Mint, Multisig},
}; };
use num_traits::FromPrimitive; use num_traits::FromPrimitive;
use solana_sdk::{ use solana_program::{
account_info::{next_account_info, AccountInfo}, account_info::{next_account_info, AccountInfo},
decode_error::DecodeError, decode_error::DecodeError,
entrypoint::ProgramResult, entrypoint::ProgramResult,
@ -779,23 +777,15 @@ impl PrintProgramError for TokenError {
} }
} }
// Pull in syscall stubs when building for non-BPF targets
#[cfg(not(target_arch = "bpf"))]
solana_sdk::program_stubs!();
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::instruction::*; use crate::instruction::*;
use solana_sdk::{ use solana_program::{
account::Account as SolanaAccount, account_info::create_is_signer_account_infos, account::Account as SolanaAccount, account_info::create_is_signer_account_infos,
clock::Epoch, instruction::Instruction, sysvar::rent, clock::Epoch, instruction::Instruction, sysvar::rent,
}; };
fn pubkey_rand() -> Pubkey {
Pubkey::new(&rand::random::<[u8; 32]>())
}
fn do_process_instruction( fn do_process_instruction(
instruction: Instruction, instruction: Instruction,
accounts: Vec<&mut SolanaAccount>, accounts: Vec<&mut SolanaAccount>,
@ -967,11 +957,11 @@ mod tests {
#[test] #[test]
fn test_initialize_mint() { fn test_initialize_mint() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = SolanaAccount::new(42, Mint::get_packed_len(), &program_id); let mut mint_account = SolanaAccount::new(42, Mint::get_packed_len(), &program_id);
let mint2_key = pubkey_rand(); let mint2_key = Pubkey::new_unique();
let mut mint2_account = let mut mint2_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -1015,12 +1005,12 @@ mod tests {
#[test] #[test]
fn test_initialize_mint_account() { fn test_initialize_mint_account() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new(42, Account::get_packed_len(), &program_id); let mut account_account = SolanaAccount::new(42, Account::get_packed_len(), &program_id);
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -1091,46 +1081,46 @@ mod tests {
#[test] #[test]
fn test_transfer_dups() { fn test_transfer_dups() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account1_key = pubkey_rand(); let account1_key = Pubkey::new_unique();
let mut account1_account = SolanaAccount::new( let mut account1_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let mut account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into(); let mut account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into();
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let mut account2_info: AccountInfo = (&account2_key, false, &mut account2_account).into(); let mut account2_info: AccountInfo = (&account2_key, false, &mut account2_account).into();
let account3_key = pubkey_rand(); let account3_key = Pubkey::new_unique();
let mut account3_account = SolanaAccount::new( let mut account3_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account3_info: AccountInfo = (&account3_key, false, &mut account3_account).into(); let account3_info: AccountInfo = (&account3_key, false, &mut account3_account).into();
let account4_key = pubkey_rand(); let account4_key = Pubkey::new_unique();
let mut account4_account = SolanaAccount::new( let mut account4_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account4_info: AccountInfo = (&account4_key, true, &mut account4_account).into(); let account4_info: AccountInfo = (&account4_key, true, &mut account4_account).into();
let multisig_key = pubkey_rand(); let multisig_key = Pubkey::new_unique();
let mut multisig_account = SolanaAccount::new( let mut multisig_account = SolanaAccount::new(
multisig_minimum_balance(), multisig_minimum_balance(),
Multisig::get_packed_len(), Multisig::get_packed_len(),
&program_id, &program_id,
); );
let multisig_info: AccountInfo = (&multisig_key, true, &mut multisig_account).into(); let multisig_info: AccountInfo = (&multisig_key, true, &mut multisig_account).into();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner_info: AccountInfo = (&owner_key, true, &mut owner_account).into(); let owner_info: AccountInfo = (&owner_key, true, &mut owner_account).into();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint_info: AccountInfo = (&mint_key, false, &mut mint_account).into(); let mint_info: AccountInfo = (&mint_key, false, &mut mint_account).into();
@ -1398,41 +1388,41 @@ mod tests {
#[test] #[test]
fn test_transfer() { fn test_transfer() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account3_key = pubkey_rand(); let account3_key = Pubkey::new_unique();
let mut account3_account = SolanaAccount::new( let mut account3_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let delegate_key = pubkey_rand(); let delegate_key = Pubkey::new_unique();
let mut delegate_account = SolanaAccount::default(); let mut delegate_account = SolanaAccount::default();
let mismatch_key = pubkey_rand(); let mismatch_key = Pubkey::new_unique();
let mut mismatch_account = SolanaAccount::new( let mut mismatch_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner2_key = pubkey_rand(); let owner2_key = Pubkey::new_unique();
let mut owner2_account = SolanaAccount::default(); let mut owner2_account = SolanaAccount::default();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint2_key = pubkey_rand(); let mint2_key = Pubkey::new_unique();
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
// create mint // create mint
@ -1728,7 +1718,7 @@ mod tests {
// This is probably wrong but transactions in the wild have been observed to do this so // This is probably wrong but transactions in the wild have been observed to do this so
// this behavior is now part of the token ABI // this behavior is now part of the token ABI
{ {
let system_account_key = pubkey_rand(); let system_account_key = Pubkey::new_unique();
let mut system_account = SolanaAccount::new(1, 0, &Pubkey::default()); let mut system_account = SolanaAccount::new(1, 0, &Pubkey::default());
let instruction = transfer( let instruction = transfer(
@ -1897,16 +1887,16 @@ mod tests {
#[test] #[test]
fn test_mintable_token_with_zero_supply() { fn test_mintable_token_with_zero_supply() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -1948,7 +1938,7 @@ mod tests {
vec![&mut mint_account, &mut account_account, &mut owner_account], vec![&mut mint_account, &mut account_account, &mut owner_account],
) )
.unwrap(); .unwrap();
let _ = Mint::unpack(&mut mint_account.data).unwrap(); let _ = Mint::unpack(&mint_account.data).unwrap();
let account = Account::unpack_unchecked(&account_account.data).unwrap(); let account = Account::unpack_unchecked(&account_account.data).unwrap();
assert_eq!(account.amount, 42); assert_eq!(account.amount, 42);
@ -1970,7 +1960,7 @@ mod tests {
) )
); );
let _ = Mint::unpack(&mut mint_account.data).unwrap(); let _ = Mint::unpack(&mint_account.data).unwrap();
let account = Account::unpack_unchecked(&account_account.data).unwrap(); let account = Account::unpack_unchecked(&account_account.data).unwrap();
assert_eq!(account.amount, 42); assert_eq!(account.amount, 42);
@ -1989,46 +1979,46 @@ mod tests {
vec![&mut mint_account, &mut account_account, &mut owner_account], vec![&mut mint_account, &mut account_account, &mut owner_account],
) )
.unwrap(); .unwrap();
let _ = Mint::unpack(&mut mint_account.data).unwrap(); let _ = Mint::unpack(&mint_account.data).unwrap();
let account = Account::unpack_unchecked(&account_account.data).unwrap(); let account = Account::unpack_unchecked(&account_account.data).unwrap();
assert_eq!(account.amount, 84); assert_eq!(account.amount, 84);
} }
#[test] #[test]
fn test_approve_dups() { fn test_approve_dups() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account1_key = pubkey_rand(); let account1_key = Pubkey::new_unique();
let mut account1_account = SolanaAccount::new( let mut account1_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into(); let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into();
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_info: AccountInfo = (&account2_key, false, &mut account2_account).into(); let account2_info: AccountInfo = (&account2_key, false, &mut account2_account).into();
let account3_key = pubkey_rand(); let account3_key = Pubkey::new_unique();
let mut account3_account = SolanaAccount::new( let mut account3_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account3_info: AccountInfo = (&account3_key, true, &mut account3_account).into(); let account3_info: AccountInfo = (&account3_key, true, &mut account3_account).into();
let multisig_key = pubkey_rand(); let multisig_key = Pubkey::new_unique();
let mut multisig_account = SolanaAccount::new( let mut multisig_account = SolanaAccount::new(
multisig_minimum_balance(), multisig_minimum_balance(),
Multisig::get_packed_len(), Multisig::get_packed_len(),
&program_id, &program_id,
); );
let multisig_info: AccountInfo = (&multisig_key, true, &mut multisig_account).into(); let multisig_info: AccountInfo = (&multisig_key, true, &mut multisig_account).into();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner_info: AccountInfo = (&owner_key, true, &mut owner_account).into(); let owner_info: AccountInfo = (&owner_key, true, &mut owner_account).into();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint_info: AccountInfo = (&mint_key, false, &mut mint_account).into(); let mint_info: AccountInfo = (&mint_key, false, &mut mint_account).into();
@ -2207,26 +2197,26 @@ mod tests {
#[test] #[test]
fn test_approve() { fn test_approve() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let delegate_key = pubkey_rand(); let delegate_key = Pubkey::new_unique();
let mut delegate_account = SolanaAccount::default(); let mut delegate_account = SolanaAccount::default();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner2_key = pubkey_rand(); let owner2_key = Pubkey::new_unique();
let mut owner2_account = SolanaAccount::default(); let mut owner2_account = SolanaAccount::default();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -2412,16 +2402,16 @@ mod tests {
#[test] #[test]
fn test_set_authority_dups() { fn test_set_authority_dups() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account1_key = pubkey_rand(); let account1_key = Pubkey::new_unique();
let mut account1_account = SolanaAccount::new( let mut account1_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into(); let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint_info: AccountInfo = (&mint_key, true, &mut mint_account).into(); let mint_info: AccountInfo = (&mint_key, true, &mut mint_account).into();
@ -2515,28 +2505,28 @@ mod tests {
#[test] #[test]
fn test_set_authority() { fn test_set_authority() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner2_key = pubkey_rand(); let owner2_key = Pubkey::new_unique();
let mut owner2_account = SolanaAccount::default(); let mut owner2_account = SolanaAccount::default();
let owner3_key = pubkey_rand(); let owner3_key = Pubkey::new_unique();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint2_key = pubkey_rand(); let mint2_key = Pubkey::new_unique();
let mut mint2_account = let mut mint2_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -2854,18 +2844,18 @@ mod tests {
#[test] #[test]
fn test_mint_to_dups() { fn test_mint_to_dups() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account1_key = pubkey_rand(); let account1_key = Pubkey::new_unique();
let mut account1_account = SolanaAccount::new( let mut account1_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into(); let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner_info: AccountInfo = (&owner_key, true, &mut owner_account).into(); let owner_info: AccountInfo = (&owner_key, true, &mut owner_account).into();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint_info: AccountInfo = (&mint_key, true, &mut mint_account).into(); let mint_info: AccountInfo = (&mint_key, true, &mut mint_account).into();
@ -2950,40 +2940,40 @@ mod tests {
#[test] #[test]
fn test_mint_to() { fn test_mint_to() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account3_key = pubkey_rand(); let account3_key = Pubkey::new_unique();
let mut account3_account = SolanaAccount::new( let mut account3_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let mismatch_key = pubkey_rand(); let mismatch_key = Pubkey::new_unique();
let mut mismatch_account = SolanaAccount::new( let mut mismatch_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner2_key = pubkey_rand(); let owner2_key = Pubkey::new_unique();
let mut owner2_account = SolanaAccount::default(); let mut owner2_account = SolanaAccount::default();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint2_key = pubkey_rand(); let mint2_key = Pubkey::new_unique();
let uninitialized_key = pubkey_rand(); let uninitialized_key = Pubkey::new_unique();
let mut uninitialized_account = SolanaAccount::new( let mut uninitialized_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
@ -3153,18 +3143,18 @@ mod tests {
#[test] #[test]
fn test_burn_dups() { fn test_burn_dups() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account1_key = pubkey_rand(); let account1_key = Pubkey::new_unique();
let mut account1_account = SolanaAccount::new( let mut account1_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into(); let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner_info: AccountInfo = (&owner_key, true, &mut owner_account).into(); let owner_info: AccountInfo = (&owner_key, true, &mut owner_account).into();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint_info: AccountInfo = (&mint_key, true, &mut mint_account).into(); let mint_info: AccountInfo = (&mint_key, true, &mut mint_account).into();
@ -3353,41 +3343,41 @@ mod tests {
#[test] #[test]
fn test_burn() { fn test_burn() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account3_key = pubkey_rand(); let account3_key = Pubkey::new_unique();
let mut account3_account = SolanaAccount::new( let mut account3_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let delegate_key = pubkey_rand(); let delegate_key = Pubkey::new_unique();
let mut delegate_account = SolanaAccount::default(); let mut delegate_account = SolanaAccount::default();
let mismatch_key = pubkey_rand(); let mismatch_key = Pubkey::new_unique();
let mut mismatch_account = SolanaAccount::new( let mut mismatch_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner2_key = pubkey_rand(); let owner2_key = Pubkey::new_unique();
let mut owner2_account = SolanaAccount::default(); let mut owner2_account = SolanaAccount::default();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint2_key = pubkey_rand(); let mint2_key = Pubkey::new_unique();
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
// create new mint // create new mint
@ -3611,34 +3601,34 @@ mod tests {
#[test] #[test]
fn test_multisig() { fn test_multisig() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account = SolanaAccount::new( let mut account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let multisig_key = pubkey_rand(); let multisig_key = Pubkey::new_unique();
let mut multisig_account = SolanaAccount::new(42, Multisig::get_packed_len(), &program_id); let mut multisig_account = SolanaAccount::new(42, Multisig::get_packed_len(), &program_id);
let multisig_delegate_key = pubkey_rand(); let multisig_delegate_key = Pubkey::new_unique();
let mut multisig_delegate_account = SolanaAccount::new( let mut multisig_delegate_account = SolanaAccount::new(
multisig_minimum_balance(), multisig_minimum_balance(),
Multisig::get_packed_len(), Multisig::get_packed_len(),
&program_id, &program_id,
); );
let signer_keys = vec![pubkey_rand(); MAX_SIGNERS]; let signer_keys = vec![Pubkey::new_unique(); MAX_SIGNERS];
let signer_key_refs: Vec<&Pubkey> = signer_keys.iter().map(|key| key).collect(); let signer_key_refs: Vec<&Pubkey> = signer_keys.iter().collect();
let mut signer_accounts = vec![SolanaAccount::new(0, 0, &program_id); MAX_SIGNERS]; let mut signer_accounts = vec![SolanaAccount::new(0, 0, &program_id); MAX_SIGNERS];
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -3903,13 +3893,13 @@ mod tests {
.unwrap(); .unwrap();
// freeze account // freeze account
let account3_key = pubkey_rand(); let account3_key = Pubkey::new_unique();
let mut account3_account = SolanaAccount::new( let mut account3_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let mint2_key = pubkey_rand(); let mint2_key = Pubkey::new_unique();
let mut mint2_account = let mut mint2_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
do_process_instruction( do_process_instruction(
@ -4015,11 +4005,11 @@ mod tests {
#[test] #[test]
fn test_validate_owner() { fn test_validate_owner() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut signer_keys = [Pubkey::default(); MAX_SIGNERS]; let mut signer_keys = [Pubkey::default(); MAX_SIGNERS];
for signer_key in signer_keys.iter_mut().take(MAX_SIGNERS) { for signer_key in signer_keys.iter_mut().take(MAX_SIGNERS) {
*signer_key = pubkey_rand(); *signer_key = Pubkey::new_unique();
} }
let mut signer_lamports = 0; let mut signer_lamports = 0;
let mut signer_data = vec![]; let mut signer_data = vec![];
@ -4175,23 +4165,23 @@ mod tests {
#[test] #[test]
fn test_close_account_dups() { fn test_close_account_dups() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account1_key = pubkey_rand(); let account1_key = Pubkey::new_unique();
let mut account1_account = SolanaAccount::new( let mut account1_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into(); let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into();
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_info: AccountInfo = (&account2_key, true, &mut account2_account).into(); let account2_info: AccountInfo = (&account2_key, true, &mut account2_account).into();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint_info: AccountInfo = (&mint_key, false, &mut mint_account).into(); let mint_info: AccountInfo = (&mint_key, false, &mut mint_account).into();
@ -4261,31 +4251,31 @@ mod tests {
#[test] #[test]
fn test_close_account() { fn test_close_account() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance() + 42, account_minimum_balance() + 42,
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account3_key = pubkey_rand(); let account3_key = Pubkey::new_unique();
let mut account3_account = SolanaAccount::new( let mut account3_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner2_key = pubkey_rand(); let owner2_key = Pubkey::new_unique();
let mut owner2_account = SolanaAccount::default(); let mut owner2_account = SolanaAccount::default();
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -4402,13 +4392,13 @@ mod tests {
assert_eq!(account.amount, 0); assert_eq!(account.amount, 0);
// fund and initialize new non-native account to test close authority // fund and initialize new non-native account to test close authority
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner2_key = pubkey_rand(); let owner2_key = Pubkey::new_unique();
let mut owner2_account = SolanaAccount::new( let mut owner2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
@ -4490,24 +4480,24 @@ mod tests {
#[test] #[test]
fn test_native_token() { fn test_native_token() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance() + 40, account_minimum_balance() + 40,
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account3_key = pubkey_rand(); let account3_key = Pubkey::new_unique();
let mut account3_account = SolanaAccount::new(account_minimum_balance(), 0, &program_id); let mut account3_account = SolanaAccount::new(account_minimum_balance(), 0, &program_id);
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -4571,7 +4561,7 @@ mod tests {
); );
// burn unsupported // burn unsupported
let bogus_mint_key = pubkey_rand(); let bogus_mint_key = Pubkey::new_unique();
let mut bogus_mint_account = let mut bogus_mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
do_process_instruction( do_process_instruction(
@ -4667,26 +4657,26 @@ mod tests {
#[test] #[test]
fn test_overflow() { fn test_overflow() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner2_key = pubkey_rand(); let owner2_key = Pubkey::new_unique();
let mut owner2_account = SolanaAccount::default(); let mut owner2_account = SolanaAccount::default();
let mint_owner_key = pubkey_rand(); let mint_owner_key = Pubkey::new_unique();
let mut mint_owner_account = SolanaAccount::default(); let mut mint_owner_account = SolanaAccount::default();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -4844,22 +4834,22 @@ mod tests {
#[test] #[test]
fn test_frozen() { fn test_frozen() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -4956,7 +4946,7 @@ mod tests {
let mut account = Account::unpack_unchecked(&account_account.data).unwrap(); let mut account = Account::unpack_unchecked(&account_account.data).unwrap();
account.state = AccountState::Frozen; account.state = AccountState::Frozen;
Account::pack(account, &mut account_account.data).unwrap(); Account::pack(account, &mut account_account.data).unwrap();
let delegate_key = pubkey_rand(); let delegate_key = Pubkey::new_unique();
let mut delegate_account = SolanaAccount::default(); let mut delegate_account = SolanaAccount::default();
assert_eq!( assert_eq!(
Err(TokenError::AccountFrozen.into()), Err(TokenError::AccountFrozen.into()),
@ -4992,7 +4982,7 @@ mod tests {
); );
// no set authority if account is frozen // no set authority if account is frozen
let new_owner_key = pubkey_rand(); let new_owner_key = Pubkey::new_unique();
assert_eq!( assert_eq!(
Err(TokenError::AccountFrozen.into()), Err(TokenError::AccountFrozen.into()),
do_process_instruction( do_process_instruction(
@ -5030,16 +5020,16 @@ mod tests {
#[test] #[test]
fn test_freeze_thaw_dups() { fn test_freeze_thaw_dups() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account1_key = pubkey_rand(); let account1_key = Pubkey::new_unique();
let mut account1_account = SolanaAccount::new( let mut account1_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into(); let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint_info: AccountInfo = (&mint_key, true, &mut mint_account).into(); let mint_info: AccountInfo = (&mint_key, true, &mut mint_account).into();
@ -5094,20 +5084,20 @@ mod tests {
#[test] #[test]
fn test_freeze_account() { fn test_freeze_account() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account_owner_key = pubkey_rand(); let account_owner_key = Pubkey::new_unique();
let mut account_owner_account = SolanaAccount::default(); let mut account_owner_account = SolanaAccount::default();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner2_key = pubkey_rand(); let owner2_key = Pubkey::new_unique();
let mut owner2_account = SolanaAccount::default(); let mut owner2_account = SolanaAccount::default();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();

View File

@ -3,7 +3,7 @@
use crate::instruction::MAX_SIGNERS; use crate::instruction::MAX_SIGNERS;
use arrayref::{array_mut_ref, array_ref, array_refs, mut_array_refs}; use arrayref::{array_mut_ref, array_ref, array_refs, mut_array_refs};
use num_enum::TryFromPrimitive; use num_enum::TryFromPrimitive;
use solana_sdk::{ use solana_program::{
program_error::ProgramError, program_error::ProgramError,
program_option::COption, program_option::COption,
program_pack::{IsInitialized, Pack, Sealed}, program_pack::{IsInitialized, Pack, Sealed},

View File

@ -1,6 +1,3 @@
# Note: This crate must be built using do.sh
[package] [package]
name = "spl-token" name = "spl-token"
version = "2.0.8" version = "2.0.8"
@ -12,21 +9,18 @@ edition = "2018"
exclude = ["js/**"] exclude = ["js/**"]
[features] [features]
no-entrypoint = [] exclude_entrypoint = []
program = ["solana-sdk/program"]
default = ["solana-sdk/default"]
[dependencies] [dependencies]
num-derive = "0.3" num-derive = "0.3"
num-traits = "0.2" num-traits = "0.2"
remove_dir_all = "=0.5.0" remove_dir_all = "=0.5.0"
solana-sdk = { version = "1.3.17", default-features = false, optional = true } solana-program = "1.4.3"
thiserror = "1.0" thiserror = "1.0"
arrayref = "0.3.6" arrayref = "0.3.6"
num_enum = "0.5.1" num_enum = "0.5.1"
[dev-dependencies] [dev-dependencies]
rand = { version = "0.7.0"}
[lib] [lib]
crate-type = ["cdylib", "lib"] crate-type = ["cdylib", "lib"]

View File

@ -1,10 +1,7 @@
//! Program entrypoint //! Program entrypoint
#![cfg(feature = "program")]
#![cfg(not(feature = "no-entrypoint"))]
use crate::{error::TokenError, processor::Processor}; use crate::{error::TokenError, processor::Processor};
use solana_sdk::{ use solana_program::{
account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, account_info::AccountInfo, entrypoint, entrypoint::ProgramResult,
program_error::PrintProgramError, pubkey::Pubkey, program_error::PrintProgramError, pubkey::Pubkey,
}; };

View File

@ -1,7 +1,7 @@
//! Error types //! Error types
use num_derive::FromPrimitive; use num_derive::FromPrimitive;
use solana_sdk::{decode_error::DecodeError, program_error::ProgramError}; use solana_program::{decode_error::DecodeError, program_error::ProgramError};
use thiserror::Error; use thiserror::Error;
/// Errors that may be returned by the Token program. /// Errors that may be returned by the Token program.

View File

@ -1,7 +1,7 @@
//! Instruction types //! Instruction types
use crate::error::TokenError; use crate::error::TokenError;
use solana_sdk::{ use solana_program::{
instruction::{AccountMeta, Instruction}, instruction::{AccountMeta, Instruction},
program_error::ProgramError, program_error::ProgramError,
program_option::COption, program_option::COption,

View File

@ -3,16 +3,17 @@
//! An ERC20-like Token program for the Solana blockchain //! An ERC20-like Token program for the Solana blockchain
pub mod entrypoint;
pub mod error; pub mod error;
pub mod instruction; pub mod instruction;
pub mod native_mint; pub mod native_mint;
pub mod processor; pub mod processor;
pub mod state; pub mod state;
// Export current solana-sdk types for downstream users who may also be building with a different #[cfg(not(feature = "exclude_entrypoint"))]
// solana-sdk version mod entrypoint;
pub use solana_sdk;
// Export current sdk types for downstream users building with a different sdk version
pub use solana_program;
/// Convert the UI representation of a token amount (using the decimals field defined in its mint) /// Convert the UI representation of a token amount (using the decimals field defined in its mint)
/// to the raw amount /// to the raw amount
@ -25,4 +26,4 @@ pub fn amount_to_ui_amount(amount: u64, decimals: u8) -> f64 {
amount as f64 / 10_usize.pow(decimals as u32) as f64 amount as f64 / 10_usize.pow(decimals as u32) as f64
} }
solana_sdk::declare_id!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"); solana_program::declare_id!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");

View File

@ -4,12 +4,12 @@
pub const DECIMALS: u8 = 9; pub const DECIMALS: u8 = 9;
// The Mint for native SOL Token accounts // The Mint for native SOL Token accounts
solana_sdk::declare_id!("So11111111111111111111111111111111111111112"); solana_program::declare_id!("So11111111111111111111111111111111111111112");
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use solana_sdk::native_token::*; use solana_program::native_token::*;
#[test] #[test]
fn test_decimals() { fn test_decimals() {

View File

@ -1,6 +1,6 @@
//! Program state processor //! Program state processor
#![cfg(feature = "program")] //#![cfg(feature = "program")]
use crate::{ use crate::{
error::TokenError, error::TokenError,
@ -8,7 +8,7 @@ use crate::{
state::{Account, AccountState, Mint, Multisig}, state::{Account, AccountState, Mint, Multisig},
}; };
use num_traits::FromPrimitive; use num_traits::FromPrimitive;
use solana_sdk::{ use solana_program::{
account_info::{next_account_info, AccountInfo}, account_info::{next_account_info, AccountInfo},
decode_error::DecodeError, decode_error::DecodeError,
entrypoint::ProgramResult, entrypoint::ProgramResult,
@ -780,23 +780,15 @@ impl PrintProgramError for TokenError {
} }
} }
// Pull in syscall stubs when building for non-BPF targets
#[cfg(not(target_arch = "bpf"))]
solana_sdk::program_stubs!();
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::instruction::*; use crate::instruction::*;
use solana_sdk::{ use solana_program::{
account::Account as SolanaAccount, account_info::create_is_signer_account_infos, account::Account as SolanaAccount, account_info::create_is_signer_account_infos,
clock::Epoch, instruction::Instruction, sysvar::rent, clock::Epoch, instruction::Instruction, sysvar::rent,
}; };
fn pubkey_rand() -> Pubkey {
Pubkey::new(&rand::random::<[u8; 32]>())
}
fn do_process_instruction( fn do_process_instruction(
instruction: Instruction, instruction: Instruction,
accounts: Vec<&mut SolanaAccount>, accounts: Vec<&mut SolanaAccount>,
@ -968,11 +960,11 @@ mod tests {
#[test] #[test]
fn test_initialize_mint() { fn test_initialize_mint() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = SolanaAccount::new(42, Mint::get_packed_len(), &program_id); let mut mint_account = SolanaAccount::new(42, Mint::get_packed_len(), &program_id);
let mint2_key = pubkey_rand(); let mint2_key = Pubkey::new_unique();
let mut mint2_account = let mut mint2_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -1016,12 +1008,12 @@ mod tests {
#[test] #[test]
fn test_initialize_mint_account() { fn test_initialize_mint_account() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new(42, Account::get_packed_len(), &program_id); let mut account_account = SolanaAccount::new(42, Account::get_packed_len(), &program_id);
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -1092,46 +1084,46 @@ mod tests {
#[test] #[test]
fn test_transfer_dups() { fn test_transfer_dups() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account1_key = pubkey_rand(); let account1_key = Pubkey::new_unique();
let mut account1_account = SolanaAccount::new( let mut account1_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let mut account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into(); let mut account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into();
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let mut account2_info: AccountInfo = (&account2_key, false, &mut account2_account).into(); let mut account2_info: AccountInfo = (&account2_key, false, &mut account2_account).into();
let account3_key = pubkey_rand(); let account3_key = Pubkey::new_unique();
let mut account3_account = SolanaAccount::new( let mut account3_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account3_info: AccountInfo = (&account3_key, false, &mut account3_account).into(); let account3_info: AccountInfo = (&account3_key, false, &mut account3_account).into();
let account4_key = pubkey_rand(); let account4_key = Pubkey::new_unique();
let mut account4_account = SolanaAccount::new( let mut account4_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account4_info: AccountInfo = (&account4_key, true, &mut account4_account).into(); let account4_info: AccountInfo = (&account4_key, true, &mut account4_account).into();
let multisig_key = pubkey_rand(); let multisig_key = Pubkey::new_unique();
let mut multisig_account = SolanaAccount::new( let mut multisig_account = SolanaAccount::new(
multisig_minimum_balance(), multisig_minimum_balance(),
Multisig::get_packed_len(), Multisig::get_packed_len(),
&program_id, &program_id,
); );
let multisig_info: AccountInfo = (&multisig_key, true, &mut multisig_account).into(); let multisig_info: AccountInfo = (&multisig_key, true, &mut multisig_account).into();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner_info: AccountInfo = (&owner_key, true, &mut owner_account).into(); let owner_info: AccountInfo = (&owner_key, true, &mut owner_account).into();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint_info: AccountInfo = (&mint_key, false, &mut mint_account).into(); let mint_info: AccountInfo = (&mint_key, false, &mut mint_account).into();
@ -1399,41 +1391,41 @@ mod tests {
#[test] #[test]
fn test_transfer() { fn test_transfer() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account3_key = pubkey_rand(); let account3_key = Pubkey::new_unique();
let mut account3_account = SolanaAccount::new( let mut account3_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let delegate_key = pubkey_rand(); let delegate_key = Pubkey::new_unique();
let mut delegate_account = SolanaAccount::default(); let mut delegate_account = SolanaAccount::default();
let mismatch_key = pubkey_rand(); let mismatch_key = Pubkey::new_unique();
let mut mismatch_account = SolanaAccount::new( let mut mismatch_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner2_key = pubkey_rand(); let owner2_key = Pubkey::new_unique();
let mut owner2_account = SolanaAccount::default(); let mut owner2_account = SolanaAccount::default();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint2_key = pubkey_rand(); let mint2_key = Pubkey::new_unique();
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
// create mint // create mint
@ -1729,7 +1721,7 @@ mod tests {
// This is probably wrong but transactions in the wild have been observed to do this so // This is probably wrong but transactions in the wild have been observed to do this so
// this behavior is now part of the token ABI // this behavior is now part of the token ABI
{ {
let system_account_key = pubkey_rand(); let system_account_key = Pubkey::new_unique();
let mut system_account = SolanaAccount::new(1, 0, &Pubkey::default()); let mut system_account = SolanaAccount::new(1, 0, &Pubkey::default());
let instruction = transfer( let instruction = transfer(
@ -1898,16 +1890,16 @@ mod tests {
#[test] #[test]
fn test_mintable_token_with_zero_supply() { fn test_mintable_token_with_zero_supply() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -1949,7 +1941,7 @@ mod tests {
vec![&mut mint_account, &mut account_account, &mut owner_account], vec![&mut mint_account, &mut account_account, &mut owner_account],
) )
.unwrap(); .unwrap();
let _ = Mint::unpack(&mut mint_account.data).unwrap(); let _ = Mint::unpack(&mint_account.data).unwrap();
let account = Account::unpack_unchecked(&account_account.data).unwrap(); let account = Account::unpack_unchecked(&account_account.data).unwrap();
assert_eq!(account.amount, 42); assert_eq!(account.amount, 42);
@ -1971,7 +1963,7 @@ mod tests {
) )
); );
let _ = Mint::unpack(&mut mint_account.data).unwrap(); let _ = Mint::unpack(&mint_account.data).unwrap();
let account = Account::unpack_unchecked(&account_account.data).unwrap(); let account = Account::unpack_unchecked(&account_account.data).unwrap();
assert_eq!(account.amount, 42); assert_eq!(account.amount, 42);
@ -1990,46 +1982,46 @@ mod tests {
vec![&mut mint_account, &mut account_account, &mut owner_account], vec![&mut mint_account, &mut account_account, &mut owner_account],
) )
.unwrap(); .unwrap();
let _ = Mint::unpack(&mut mint_account.data).unwrap(); let _ = Mint::unpack(&mint_account.data).unwrap();
let account = Account::unpack_unchecked(&account_account.data).unwrap(); let account = Account::unpack_unchecked(&account_account.data).unwrap();
assert_eq!(account.amount, 84); assert_eq!(account.amount, 84);
} }
#[test] #[test]
fn test_approve_dups() { fn test_approve_dups() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account1_key = pubkey_rand(); let account1_key = Pubkey::new_unique();
let mut account1_account = SolanaAccount::new( let mut account1_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into(); let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into();
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_info: AccountInfo = (&account2_key, false, &mut account2_account).into(); let account2_info: AccountInfo = (&account2_key, false, &mut account2_account).into();
let account3_key = pubkey_rand(); let account3_key = Pubkey::new_unique();
let mut account3_account = SolanaAccount::new( let mut account3_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account3_info: AccountInfo = (&account3_key, true, &mut account3_account).into(); let account3_info: AccountInfo = (&account3_key, true, &mut account3_account).into();
let multisig_key = pubkey_rand(); let multisig_key = Pubkey::new_unique();
let mut multisig_account = SolanaAccount::new( let mut multisig_account = SolanaAccount::new(
multisig_minimum_balance(), multisig_minimum_balance(),
Multisig::get_packed_len(), Multisig::get_packed_len(),
&program_id, &program_id,
); );
let multisig_info: AccountInfo = (&multisig_key, true, &mut multisig_account).into(); let multisig_info: AccountInfo = (&multisig_key, true, &mut multisig_account).into();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner_info: AccountInfo = (&owner_key, true, &mut owner_account).into(); let owner_info: AccountInfo = (&owner_key, true, &mut owner_account).into();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint_info: AccountInfo = (&mint_key, false, &mut mint_account).into(); let mint_info: AccountInfo = (&mint_key, false, &mut mint_account).into();
@ -2208,26 +2200,26 @@ mod tests {
#[test] #[test]
fn test_approve() { fn test_approve() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let delegate_key = pubkey_rand(); let delegate_key = Pubkey::new_unique();
let mut delegate_account = SolanaAccount::default(); let mut delegate_account = SolanaAccount::default();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner2_key = pubkey_rand(); let owner2_key = Pubkey::new_unique();
let mut owner2_account = SolanaAccount::default(); let mut owner2_account = SolanaAccount::default();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -2413,16 +2405,16 @@ mod tests {
#[test] #[test]
fn test_set_authority_dups() { fn test_set_authority_dups() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account1_key = pubkey_rand(); let account1_key = Pubkey::new_unique();
let mut account1_account = SolanaAccount::new( let mut account1_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into(); let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint_info: AccountInfo = (&mint_key, true, &mut mint_account).into(); let mint_info: AccountInfo = (&mint_key, true, &mut mint_account).into();
@ -2516,28 +2508,28 @@ mod tests {
#[test] #[test]
fn test_set_authority() { fn test_set_authority() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner2_key = pubkey_rand(); let owner2_key = Pubkey::new_unique();
let mut owner2_account = SolanaAccount::default(); let mut owner2_account = SolanaAccount::default();
let owner3_key = pubkey_rand(); let owner3_key = Pubkey::new_unique();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint2_key = pubkey_rand(); let mint2_key = Pubkey::new_unique();
let mut mint2_account = let mut mint2_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -2855,18 +2847,18 @@ mod tests {
#[test] #[test]
fn test_mint_to_dups() { fn test_mint_to_dups() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account1_key = pubkey_rand(); let account1_key = Pubkey::new_unique();
let mut account1_account = SolanaAccount::new( let mut account1_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into(); let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner_info: AccountInfo = (&owner_key, true, &mut owner_account).into(); let owner_info: AccountInfo = (&owner_key, true, &mut owner_account).into();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint_info: AccountInfo = (&mint_key, true, &mut mint_account).into(); let mint_info: AccountInfo = (&mint_key, true, &mut mint_account).into();
@ -2951,40 +2943,40 @@ mod tests {
#[test] #[test]
fn test_mint_to() { fn test_mint_to() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account3_key = pubkey_rand(); let account3_key = Pubkey::new_unique();
let mut account3_account = SolanaAccount::new( let mut account3_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let mismatch_key = pubkey_rand(); let mismatch_key = Pubkey::new_unique();
let mut mismatch_account = SolanaAccount::new( let mut mismatch_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner2_key = pubkey_rand(); let owner2_key = Pubkey::new_unique();
let mut owner2_account = SolanaAccount::default(); let mut owner2_account = SolanaAccount::default();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint2_key = pubkey_rand(); let mint2_key = Pubkey::new_unique();
let uninitialized_key = pubkey_rand(); let uninitialized_key = Pubkey::new_unique();
let mut uninitialized_account = SolanaAccount::new( let mut uninitialized_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
@ -3154,18 +3146,18 @@ mod tests {
#[test] #[test]
fn test_burn_dups() { fn test_burn_dups() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account1_key = pubkey_rand(); let account1_key = Pubkey::new_unique();
let mut account1_account = SolanaAccount::new( let mut account1_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into(); let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner_info: AccountInfo = (&owner_key, true, &mut owner_account).into(); let owner_info: AccountInfo = (&owner_key, true, &mut owner_account).into();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint_info: AccountInfo = (&mint_key, true, &mut mint_account).into(); let mint_info: AccountInfo = (&mint_key, true, &mut mint_account).into();
@ -3354,41 +3346,41 @@ mod tests {
#[test] #[test]
fn test_burn() { fn test_burn() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account3_key = pubkey_rand(); let account3_key = Pubkey::new_unique();
let mut account3_account = SolanaAccount::new( let mut account3_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let delegate_key = pubkey_rand(); let delegate_key = Pubkey::new_unique();
let mut delegate_account = SolanaAccount::default(); let mut delegate_account = SolanaAccount::default();
let mismatch_key = pubkey_rand(); let mismatch_key = Pubkey::new_unique();
let mut mismatch_account = SolanaAccount::new( let mut mismatch_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner2_key = pubkey_rand(); let owner2_key = Pubkey::new_unique();
let mut owner2_account = SolanaAccount::default(); let mut owner2_account = SolanaAccount::default();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint2_key = pubkey_rand(); let mint2_key = Pubkey::new_unique();
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
// create new mint // create new mint
@ -3619,34 +3611,34 @@ mod tests {
#[test] #[test]
fn test_multisig() { fn test_multisig() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account = SolanaAccount::new( let mut account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let multisig_key = pubkey_rand(); let multisig_key = Pubkey::new_unique();
let mut multisig_account = SolanaAccount::new(42, Multisig::get_packed_len(), &program_id); let mut multisig_account = SolanaAccount::new(42, Multisig::get_packed_len(), &program_id);
let multisig_delegate_key = pubkey_rand(); let multisig_delegate_key = Pubkey::new_unique();
let mut multisig_delegate_account = SolanaAccount::new( let mut multisig_delegate_account = SolanaAccount::new(
multisig_minimum_balance(), multisig_minimum_balance(),
Multisig::get_packed_len(), Multisig::get_packed_len(),
&program_id, &program_id,
); );
let signer_keys = vec![pubkey_rand(); MAX_SIGNERS]; let signer_keys = vec![Pubkey::new_unique(); MAX_SIGNERS];
let signer_key_refs: Vec<&Pubkey> = signer_keys.iter().map(|key| key).collect(); let signer_key_refs: Vec<&Pubkey> = signer_keys.iter().collect();
let mut signer_accounts = vec![SolanaAccount::new(0, 0, &program_id); MAX_SIGNERS]; let mut signer_accounts = vec![SolanaAccount::new(0, 0, &program_id); MAX_SIGNERS];
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -3911,13 +3903,13 @@ mod tests {
.unwrap(); .unwrap();
// freeze account // freeze account
let account3_key = pubkey_rand(); let account3_key = Pubkey::new_unique();
let mut account3_account = SolanaAccount::new( let mut account3_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let mint2_key = pubkey_rand(); let mint2_key = Pubkey::new_unique();
let mut mint2_account = let mut mint2_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
do_process_instruction( do_process_instruction(
@ -4023,11 +4015,11 @@ mod tests {
#[test] #[test]
fn test_validate_owner() { fn test_validate_owner() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut signer_keys = [Pubkey::default(); MAX_SIGNERS]; let mut signer_keys = [Pubkey::default(); MAX_SIGNERS];
for signer_key in signer_keys.iter_mut().take(MAX_SIGNERS) { for signer_key in signer_keys.iter_mut().take(MAX_SIGNERS) {
*signer_key = pubkey_rand(); *signer_key = Pubkey::new_unique();
} }
let mut signer_lamports = 0; let mut signer_lamports = 0;
let mut signer_data = vec![]; let mut signer_data = vec![];
@ -4183,23 +4175,23 @@ mod tests {
#[test] #[test]
fn test_close_account_dups() { fn test_close_account_dups() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account1_key = pubkey_rand(); let account1_key = Pubkey::new_unique();
let mut account1_account = SolanaAccount::new( let mut account1_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into(); let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into();
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_info: AccountInfo = (&account2_key, true, &mut account2_account).into(); let account2_info: AccountInfo = (&account2_key, true, &mut account2_account).into();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint_info: AccountInfo = (&mint_key, false, &mut mint_account).into(); let mint_info: AccountInfo = (&mint_key, false, &mut mint_account).into();
@ -4269,31 +4261,31 @@ mod tests {
#[test] #[test]
fn test_close_account() { fn test_close_account() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance() + 42, account_minimum_balance() + 42,
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account3_key = pubkey_rand(); let account3_key = Pubkey::new_unique();
let mut account3_account = SolanaAccount::new( let mut account3_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner2_key = pubkey_rand(); let owner2_key = Pubkey::new_unique();
let mut owner2_account = SolanaAccount::default(); let mut owner2_account = SolanaAccount::default();
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -4410,13 +4402,13 @@ mod tests {
assert_eq!(account.amount, 0); assert_eq!(account.amount, 0);
// fund and initialize new non-native account to test close authority // fund and initialize new non-native account to test close authority
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner2_key = pubkey_rand(); let owner2_key = Pubkey::new_unique();
let mut owner2_account = SolanaAccount::new( let mut owner2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
@ -4498,24 +4490,24 @@ mod tests {
#[test] #[test]
fn test_native_token() { fn test_native_token() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance() + 40, account_minimum_balance() + 40,
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account3_key = pubkey_rand(); let account3_key = Pubkey::new_unique();
let mut account3_account = SolanaAccount::new(account_minimum_balance(), 0, &program_id); let mut account3_account = SolanaAccount::new(account_minimum_balance(), 0, &program_id);
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -4579,7 +4571,7 @@ mod tests {
); );
// burn unsupported // burn unsupported
let bogus_mint_key = pubkey_rand(); let bogus_mint_key = Pubkey::new_unique();
let mut bogus_mint_account = let mut bogus_mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
do_process_instruction( do_process_instruction(
@ -4675,26 +4667,26 @@ mod tests {
#[test] #[test]
fn test_overflow() { fn test_overflow() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner2_key = pubkey_rand(); let owner2_key = Pubkey::new_unique();
let mut owner2_account = SolanaAccount::default(); let mut owner2_account = SolanaAccount::default();
let mint_owner_key = pubkey_rand(); let mint_owner_key = Pubkey::new_unique();
let mut mint_owner_account = SolanaAccount::default(); let mut mint_owner_account = SolanaAccount::default();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -4852,22 +4844,22 @@ mod tests {
#[test] #[test]
fn test_frozen() { fn test_frozen() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account2_key = pubkey_rand(); let account2_key = Pubkey::new_unique();
let mut account2_account = SolanaAccount::new( let mut account2_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();
@ -4964,7 +4956,7 @@ mod tests {
let mut account = Account::unpack_unchecked(&account_account.data).unwrap(); let mut account = Account::unpack_unchecked(&account_account.data).unwrap();
account.state = AccountState::Frozen; account.state = AccountState::Frozen;
Account::pack(account, &mut account_account.data).unwrap(); Account::pack(account, &mut account_account.data).unwrap();
let delegate_key = pubkey_rand(); let delegate_key = Pubkey::new_unique();
let mut delegate_account = SolanaAccount::default(); let mut delegate_account = SolanaAccount::default();
assert_eq!( assert_eq!(
Err(TokenError::AccountFrozen.into()), Err(TokenError::AccountFrozen.into()),
@ -5000,7 +4992,7 @@ mod tests {
); );
// no set authority if account is frozen // no set authority if account is frozen
let new_owner_key = pubkey_rand(); let new_owner_key = Pubkey::new_unique();
assert_eq!( assert_eq!(
Err(TokenError::AccountFrozen.into()), Err(TokenError::AccountFrozen.into()),
do_process_instruction( do_process_instruction(
@ -5038,16 +5030,16 @@ mod tests {
#[test] #[test]
fn test_freeze_thaw_dups() { fn test_freeze_thaw_dups() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account1_key = pubkey_rand(); let account1_key = Pubkey::new_unique();
let mut account1_account = SolanaAccount::new( let mut account1_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into(); let account1_info: AccountInfo = (&account1_key, true, &mut account1_account).into();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mint_info: AccountInfo = (&mint_key, true, &mut mint_account).into(); let mint_info: AccountInfo = (&mint_key, true, &mut mint_account).into();
@ -5102,20 +5094,20 @@ mod tests {
#[test] #[test]
fn test_freeze_account() { fn test_freeze_account() {
let program_id = pubkey_rand(); let program_id = Pubkey::new_unique();
let account_key = pubkey_rand(); let account_key = Pubkey::new_unique();
let mut account_account = SolanaAccount::new( let mut account_account = SolanaAccount::new(
account_minimum_balance(), account_minimum_balance(),
Account::get_packed_len(), Account::get_packed_len(),
&program_id, &program_id,
); );
let account_owner_key = pubkey_rand(); let account_owner_key = Pubkey::new_unique();
let mut account_owner_account = SolanaAccount::default(); let mut account_owner_account = SolanaAccount::default();
let owner_key = pubkey_rand(); let owner_key = Pubkey::new_unique();
let mut owner_account = SolanaAccount::default(); let mut owner_account = SolanaAccount::default();
let owner2_key = pubkey_rand(); let owner2_key = Pubkey::new_unique();
let mut owner2_account = SolanaAccount::default(); let mut owner2_account = SolanaAccount::default();
let mint_key = pubkey_rand(); let mint_key = Pubkey::new_unique();
let mut mint_account = let mut mint_account =
SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id); SolanaAccount::new(mint_minimum_balance(), Mint::get_packed_len(), &program_id);
let mut rent_sysvar = rent_sysvar(); let mut rent_sysvar = rent_sysvar();

View File

@ -3,7 +3,7 @@
use crate::instruction::MAX_SIGNERS; use crate::instruction::MAX_SIGNERS;
use arrayref::{array_mut_ref, array_ref, array_refs, mut_array_refs}; use arrayref::{array_mut_ref, array_ref, array_refs, mut_array_refs};
use num_enum::TryFromPrimitive; use num_enum::TryFromPrimitive;
use solana_sdk::{ use solana_program::{
program_error::ProgramError, program_error::ProgramError,
program_option::COption, program_option::COption,
program_pack::{IsInitialized, Pack, Sealed}, program_pack::{IsInitialized, Pack, Sealed},

41
update-solana-dependencies.sh Executable file
View File

@ -0,0 +1,41 @@
#!/usr/bin/env bash
#
# Updates the solana version in all the SPL crates
#
solana_ver=$1
if [[ -z $solana_ver ]]; then
echo "Usage: $0 <new-solana-version>"
exit 1
fi
cd "$(dirname "$0")"
declare tomls=()
while IFS='' read -r line; do tomls+=("$line"); done < <(find . -name Cargo.toml)
crates=(
solana-account-decoder
solana-banks-client
solana-banks-server
solana-bpf-loader-program
solana-clap-utils
solana-cli-config
solana-cli-output
solana-client
solana-core
solana-logger
solana-program
solana-runtime
solana-sdk
)
set -x
for crate in "${crates[@]}"; do
sed -i -e "s#\(${crate} = \"\).*\(\"\)#\1$solana_ver\2#g" "${tomls[@]}"
done
#sed -i -e "s#\(solana-sdk = { version = \"\).*\(\"\)#\1$solana_ver\2#g" "${tomls[@]}"
#sed -i -e "s#\(solana-client = \"\).*\(\"\)#\1$solana_ver\2#g" "${tomls[@]}"

View File

@ -8,8 +8,8 @@ edition = "2018"
# Used to ensure that SPL programs are buildable by external clients # Used to ensure that SPL programs are buildable by external clients
[dependencies] [dependencies]
solana-sdk = "1.3.11" solana-sdk = "1.4.3"
spl-memo = { path = "../../memo/program" } spl-memo = { path = "../../memo/program", features = [ "exclude_entrypoint" ] }
spl-token = { path = "../../token/program" } spl-token = { path = "../../token/program", features = [ "exclude_entrypoint" ] }
spl-token-v3 = { path = "../../token/program-v3" } spl-token-swap = { path = "../../token-swap/program", features = [ "exclude_entrypoint" ] }
spl-token-swap = { path = "../../token-swap/program" } spl-token-v3 = { path = "../../token/program-v3", features = [ "exclude_entrypoint" ] }