Go to file
Michael Vines 0a47a3127c Move c header generation out of build.rs 2020-08-27 23:32:07 -07:00
.github Simplify dependabot config 2020-08-08 08:05:00 -07:00
.travis Add libudev-dev 2020-08-04 16:10:05 -07:00
ci Move c header generation out of build.rs 2020-08-27 23:32:07 -07:00
docs Adapt spl-token cli to Solana 1.3.2 2020-08-14 01:22:11 +00:00
memo Bump solana-sdk from 1.3.2 to 1.3.4 2020-08-25 09:05:29 -07:00
token Move c header generation out of build.rs 2020-08-27 23:32:07 -07:00
token-swap Move c header generation out of build.rs 2020-08-27 23:32:07 -07:00
utils Move c header generation out of build.rs 2020-08-27 23:32:07 -07:00
.gitignore Programs can be client dependencies (#181) 2020-07-31 16:35:49 -07:00
.mergify.yml Bring in monorepo mergify rules 2020-08-03 17:22:43 -07:00
.travis.yml Only build master branch 2020-08-14 14:58:25 -07:00
Cargo.lock Move c header generation out of build.rs 2020-08-27 23:32:07 -07:00
Cargo.toml Move c header generation out of build.rs 2020-08-27 23:32:07 -07:00
LICENSE Update contributors (#42) 2020-06-17 14:12:46 -07:00
README.md Add release process docs (#163) 2020-07-29 17:26:04 +00:00
bpf-sdk-install.sh Move up to v1.3.1 2020-08-08 08:05:00 -07:00
cbindgen.sh Move c header generation out of build.rs 2020-08-27 23:32:07 -07:00
coverage.sh Relocate program2 into program 2020-08-26 23:10:18 -07:00
do.sh Fix an issue in do.sh where the 'all' argument didn't work, e.g. for do.sh build all (#299) 2020-08-21 16:15:45 +00:00
package-lock.json Add rustdocs (#39) 2020-06-17 11:25:19 -07:00

README.md

Build status

Solana Program Library

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

Building

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>

Testing

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

Clippy is also supported via:

$ ./do.sh clippy all

Or:

$ ./do.sh clippy <program>

Release Process

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:

Bump Version

  • 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 generated spl_<program>.so for attaching to the Github release.)
  • Open a PR with these version changes and merge after passing CI.

Create Github tag

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

Publish Github release

  • 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"

Publish to Crates.io

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.)