The Solana Program Library (SPL) is a collection of on-chain programs targeting the Sealevel parallel runtime. These programs are tested against Solana's implementation of Sealevel, solana-runtime, and deployed to its mainnet. As others implement Sealevel, we will graciously accept patches to ensure the programs here are portable across all implementations.
Full documentation is available at https://spl.solana.com
These programs cannot be built directly via cargo and instead require the build scripts located in Solana's BPF-SDK.
Download or update the BPF-SDK by running:
$ ./do.sh update
To build all programs, run:
$ ./do.sh build all
Or choose a specific program:
$ ./do.sh build <program>
Unit tests contained within all projects can be built via:
$ ./do.sh test all
Or:
$ ./do.sh test <program>
End-to-end testing may be performed via the per-project .js bindings. See the token program's js project for an example.
Clippy is also supported via:
$ ./do.sh clippy all
Or:
$ ./do.sh clippy <program>
SPL programs are currently tagged and released manually. Each program is versioned independently of the others, with all new development occurring on master. Once a program is tested and deemed ready for release:
- 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
- Run
./do.sh build <program>
to update relevant C bindings. (Note the location of the generatedspl_<program>.so
for attaching to the Github release.) - Open a PR with these version changes and merge after passing CI.
Program tags are of the form <program>-vX.Y.Z
.
Create the new tag at the version-bump commit and push to the
solana-program-library repository, eg:
$ git tag token-v1.0.0 b24bfe7
$ git push upstream --tags
- Go to GitHub Releases UI
- Click "Draft new release", and enter the new tag in the "Tag version" box.
- Title the release "SPL vX.Y.Z", complete the description, and attach the
spl_<program>.so
binary - Click "Publish release"
Navigate to the program directory and run cargo package
to test the build. Then run cargo publish
. (Currently, programs with generated
C bindings fail the final step of verification due to the location of the
generated file. Once you are certain the crate is ready, run cargo publish --no-verify
to bypass this error.)