-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
token collections: create spec program
- Loading branch information
1 parent
367dff4
commit 989c807
Showing
10 changed files
with
892 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
name: Token Collections Pull Request | ||
|
||
on: | ||
pull_request: | ||
paths: | ||
- 'token-collections/**' | ||
- 'token/**' | ||
- 'token-group/**' | ||
- 'token-metadata/**' | ||
- 'ci/*-version.sh' | ||
- '.github/workflows/pull-request-token-collections.yml' | ||
push: | ||
branches: [master] | ||
paths: | ||
- 'token-collections/**' | ||
- 'token/**' | ||
- 'token-group/**' | ||
- 'token-metadata/**' | ||
- 'ci/*-version.sh' | ||
- '.github/workflows/pull-request-token-collections.yml' | ||
|
||
jobs: | ||
cargo-test-sbf: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v2 | ||
|
||
- name: Set env vars | ||
run: | | ||
source ci/rust-version.sh | ||
echo "RUST_STABLE=$rust_stable" >> $GITHUB_ENV | ||
source ci/solana-version.sh | ||
echo "SOLANA_VERSION=$solana_version" >> $GITHUB_ENV | ||
- uses: actions-rs/toolchain@v1 | ||
with: | ||
toolchain: ${{ env.RUST_STABLE }} | ||
override: true | ||
profile: minimal | ||
|
||
- uses: actions/cache@v2 | ||
with: | ||
path: | | ||
~/.cargo/registry | ||
~/.cargo/git | ||
key: cargo-build-${{ hashFiles('**/Cargo.lock') }}-${{ env.RUST_STABLE}} | ||
|
||
- uses: actions/cache@v2 | ||
with: | ||
path: | | ||
~/.cargo/bin/rustfilt | ||
key: cargo-sbf-bins-${{ runner.os }} | ||
|
||
- uses: actions/cache@v2 | ||
with: | ||
path: ~/.cache/solana | ||
key: solana-${{ env.SOLANA_VERSION }} | ||
|
||
- name: Install dependencies | ||
run: | | ||
./ci/install-build-deps.sh | ||
./ci/install-program-deps.sh | ||
echo "$HOME/.local/share/solana/install/active_release/bin" >> $GITHUB_PATH | ||
- name: Build and test | ||
run: ./ci/cargo-test-sbf.sh token-collections |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
# SPL Token Collection | ||
|
||
This program serves as a reference implementation for using the SPL Token Group | ||
interface to create an on-chain program for managing token collections - such | ||
as NFT Collections. | ||
|
||
This program bears a lot of similarity to the example program found at | ||
`token-group/example`, but with some additional implementations centered around | ||
specifically token collections. | ||
|
||
## How Collections Work in this Program | ||
|
||
Strictly for demonstration purposes, this program is going to require the | ||
following: | ||
|
||
- Group tokens must be NFTs (0 decimals, 1 supply) | ||
- Group tokens must have metadata | ||
- Member tokens can be any SPL token, but must have metadata | ||
- Member tokens can be part of multiple collections | ||
|
||
## Demonstration | ||
|
||
For a particularly fleshed-out example of this program in action, check out the | ||
`token-collections.rs` test under `tests`! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
[package] | ||
name = "spl-token-collection" | ||
version = "0.1.0" | ||
description = "Solana Program Library Token Collection" | ||
authors = ["Solana Labs Maintainers <[email protected]>"] | ||
repository = "https://github.com/solana-labs/solana-program-library" | ||
license = "Apache-2.0" | ||
edition = "2021" | ||
|
||
[features] | ||
no-entrypoint = [] | ||
test-sbf = [] | ||
|
||
[dependencies] | ||
solana-program = "1.17.2" | ||
spl-pod = { version = "0.1.0", path = "../../libraries/pod" } | ||
spl-program-error = { version = "0.3.0" , path = "../../libraries/program-error" } | ||
spl-token-2022 = { version = "0.9.0", path = "../../token/program-2022", features = ["no-entrypoint"] } | ||
spl-token-group-interface = { version = "0.1.0", path = "../../token-group/interface" } | ||
spl-token-metadata-interface = { version = "0.2", path = "../../token-metadata/interface" } | ||
spl-type-length-value = { version = "0.3.0", path = "../../libraries/type-length-value" } | ||
|
||
[dev-dependencies] | ||
solana-program-test = "1.17.2" | ||
solana-sdk = "1.17.2" | ||
spl-discriminator = { version = "0.1.0", path = "../../libraries/discriminator" } | ||
spl-token-client = { version = "0.7", path = "../../token/client" } | ||
|
||
[lib] | ||
crate-type = ["cdylib", "lib"] | ||
|
||
[package.metadata.docs.rs] | ||
targets = ["x86_64-unknown-linux-gnu"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
//! Program entrypoint | ||
use { | ||
crate::processor, | ||
solana_program::{ | ||
account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, | ||
program_error::PrintProgramError, pubkey::Pubkey, | ||
}, | ||
spl_token_group_interface::error::TokenGroupError, | ||
}; | ||
|
||
entrypoint!(process_instruction); | ||
fn process_instruction( | ||
program_id: &Pubkey, | ||
accounts: &[AccountInfo], | ||
instruction_data: &[u8], | ||
) -> ProgramResult { | ||
if let Err(error) = processor::process(program_id, accounts, instruction_data) { | ||
error.print::<TokenGroupError>(); | ||
return Err(error); | ||
} | ||
Ok(()) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
//! Crate defining the Token Collection program implementing the | ||
//! SPL Token Group interface. | ||
#![deny(missing_docs)] | ||
#![forbid(unsafe_code)] | ||
|
||
pub mod processor; | ||
|
||
#[cfg(not(feature = "no-entrypoint"))] | ||
mod entrypoint; |
Oops, something went wrong.