6 releases (3 major breaking)
new 4.0.1 | May 7, 2025 |
---|---|
4.0.0 | May 6, 2025 |
3.0.0 | Feb 12, 2025 |
2.2.0 | Feb 7, 2025 |
0.0.2 | Jan 22, 2025 |
#274 in Magic Beans
133,555 downloads per month
Used in 113 crates
(9 directly)
110KB
2K
SLoC
An upgradeable BPF loader native program.
The upgradeable BPF loader is responsible for deploying, upgrading, and
executing BPF programs. The upgradeable loader allows a program's authority
to update the program at any time. This ability breaks the "code is law"
contract that once a program is on-chain it is immutable. Because of this,
care should be taken before executing upgradeable programs which still have
a functioning authority. For more information refer to the
instruction
module.
The solana program deploy
CLI command uses the
upgradeable BPF loader. Calling solana program deploy --final
deploys a
program that cannot be upgraded, but it does so by revoking the authority to
upgrade, not by using the non-upgradeable loader.
solana-sdk
Rust SDK for the Solana blockchain, used by on-chain programs and the Agave validator.
Building
1. Install rustc, cargo and rustfmt.
curl https://sh.rustup.rs -sSf | sh
source $HOME/.cargo/env
rustup component add rustfmt
2. Download the source code.
git clone https://github.com/anza-xyz/solana-sdk.git
cd solana-sdk
When building the master branch, please make sure you are using the version
specified in the repo's rust-toolchain.toml
by running:
rustup show
This command will download the toolchain if it is missing in the system.
3. Test.
cargo test
For Agave Developers
Patching a local solana-sdk repository
If your change to Agave also entails changes to the SDK, you will need to patch your Agave repo to use a local checkout of solana-sdk crates.
To patch all of the crates in this repo for Agave, just run:
./scripts/patch-crates-no-header.sh <AGAVE_PATH> <SOLANA_SDK_PATH>
Publishing a crate from this repository
Unlike Agave, the solana-sdk crates are versioned independently, and published as needed.
If you need to publish a crate, you can use the "Publish Crate" GitHub Action.
Simply type in the path to the crate directory you want to release, ie.
program-entrypoint
, along with the kind of release, either patch
, minor
,
major
, or a specific version string.
The publish job will run checks, bump the crate version, commit and tag the bump, publish the crate to crates.io, and finally create GitHub Release with a simple changelog of all commits to the crate since the previous release.
Testing
Certain tests, such as rustfmt
and clippy
, require the nightly rustc
configured on the repository. To easily install it, use the ./cargo
helper
script in the root of the repository:
./cargo nightly tree
Basic testing
Run the test suite:
cargo test
Alternatively, there is a helper script:
./scripts/test-stable.sh
Formatting
Format code for rustfmt check:
./cargo nightly fmt --all
The check can be run with a helper script:
./scripts/check-fmt.sh
Clippy / Linting
To check the clippy lints:
./scripts/check-clippy.sh
Benchmarking
Run the benchmarks:
./scripts/test-bench.sh
Code coverage
To generate code coverage statistics:
./scripts/test-coverage.sh
$ open target/cov/lcov-local/index.html
Code coverage requires llvm-tools-preview
for the configured nightly
toolchain. To install the component, run the command output by the script if it
fails to find the component:
rustup component add llvm-tools-preview --toolchain=<NIGHTLY_TOOLCHAIN>
Dependencies
~2–8.5MB
~82K SLoC