3个版本 (稳定版)

1.0.1 2024年1月19日
1.0.0 2023年10月20日
0.0.1 2023年8月21日

#481 in 神奇豆子

每月下载量 38次
spl-single-pool-cli中使用

Apache-2.0

540KB
10K SLoC

包含(ELF库,695KB)tests/fixtures/mpl_token_metadata.so

Solana程序库

Solana程序库(SPL)是针对Sealevel并行运行时的一系列链上程序。这些程序针对Solana的Sealevel实现、solana-runtime进行测试,其中一些已部署到Mainnet Beta。随着其他人实现Sealevel,我们将欣然接受补丁,以确保这里的程序可以在所有实现之间移植。

更多信息请参阅SPL文档Token TypeDocs

部署

仅在Solana程序库仓库中的部分程序已部署到Solana Mainnet Beta。目前,这包括

程序 版本
token 3.4.0
关联代币账户 1.1.0
token-2022 1.0.0
治理 3.1.0
权益池 1.0.0
账户压缩 0.1.3
共享内存 1.0.0
特性提案 1.0.0
命名服务 0.3.0
备注 3.0.0

此外,还有一个程序计划部署到 Solana 主网测试版

程序 版本
单池 1.0.1

审计

目前,只有 Solana 程序库仓库中的部分程序进行了审计。目前包括

程序 上次审计日期 版本
token 2022-08-04(同行评审) 4fadd55
关联代币账户 2022-08-04(同行评审) c00194d
token-2022 2023-11-03 e924132
权益池 2023-12-31 a17fffe
账户压缩 2022-12-05 6e81794
共享内存 2021-02-25 b40e0dd
单池 2024-01-02 ef44df9

所有其他程序可能会随时更新。这些程序没有经过审计,因此请自行承担分叉和部署的风险。以下是未经审计程序的完整列表

有关存储库安全策略的更多信息,请参阅 SECURITY.md

安全审计存储库 security-audits repo 包含所有过去和现在的程序审计。

程序包

描述 版本 文档
spl-token 在 Solana 上类似 ERC20 的令牌程序 Crates.io Docs.rs
spl-token-2022 spl-token 兼容的令牌程序,具有扩展功能 Crates.io Docs.rs
spl-associated-token-account 定义钱包的规范“关联”令牌账户的无状态协议 Crates.io Docs.rs
spl-governance 使用代币进行投票的 DAO 程序 Crates.io Docs.rs
spl-account-compression 管理存储在链下默克尔树中的压缩账户的程序 Crates.io Docs.rs
spl-feature-proposal 使用代币投票启用 Solana 网络特性的程序 Crates.io Docs.rs
spl-noop 什么都不做的程序,用于记录指令数据 Crates.io Docs.rs
spl-memo 记录链上签名备注的程序 Crates.io Docs.rs
spl-name-service 管理链上数据所有权的程序 Crates.io Docs.rs
spl-shared-memory 在程序之间共享数据的程序 Crates.io Docs.rs
spl-stake-pool 由其他实体管理的权益池程序 Crates.io Docs.rs
spl-instruction-padding 填充到其他指令的程序 Crates.io Docs.rs
spl-concurrent-merkle-tree 用于链上表示默克尔树的库 Crates.io Docs.rs
spl-math 用于链上计算的库 Crates.io Docs.rs
spl-token-lending 代币的超额抵押贷款程序 Crates.io Docs.rs
spl-token-swap 用于交易代币的 AMM Crates.io Docs.rs
spl-token-upgrade 用一种代币类型兑换另一种代币的协议 Crates.io Docs.rs

CLI 包

描述 版本
spl-token-cli token,token-2022 和 associated-token-account 程序的 CLI Crates.io
spl-stake-pool-cli stake-pool 程序的 CLI Crates.io
spl-feature-proposal-cli feature-proposal 程序的 CLI Crates.io
spl-token-lending-cli token-lending 程序的 CLI Crates.io
spl-token-upgrade-cli token-upgrade 程序的 CLI Crates.io

JavaScript 包

描述 版本 文档
@solana/spl-token token,token-2022 和 associated-token-account 程序的绑定 npm Docs
@solana/spl-治理 governance 程序的绑定 npm N/A
@solana/spl-account-compression account-compression 程序的绑定 npm Docs
@solana/spl-备注 memo 程序的绑定 npm N/A
@solana/spl-name-service name-service 程序的绑定 npm N/A
@solana/spl-stake-pool stake-pool 程序的绑定 npm N/A
@solana/spl-token-lending token-lending 程序的绑定 npm N/A
@solana/spl-token-swap token-swap 程序的绑定 npm N/A

开发

环境设置

  1. 安装最新的 Solana 工具
  2. 安装最新的 Rust 稳定版。如果您已经安装了 Rust,请运行 rustup update 以获取最新版本。
  3. 为您的发行版安装 libudev 开发包(Debian 衍生发行版上的 libudev-dev,Redhat 衍生发行版上的 libudev-devel)。

构建

构建链上程序

# To build all on-chain programs
$ cargo build-sbf

# To build a specific on-chain program
$ cd <program_name>/program
$ cargo build-sbf

构建客户端

# To build all clients
$ cargo build

# To build a specific client
$ cd <program_name>/cli
$ cargo build

测试

所有项目中包含的单元测试可以使用以下方式运行

$ cargo test      # <-- runs host-based tests
$ cargo test-sbf  # <-- runs BPF program tests

运行特定程序的测试,例如SPL令牌

$ cd token/program
$ cargo test      # <-- runs host-based tests
$ cargo test-sbf  # <-- runs BPF program tests

可以通过每个项目的.js绑定进行集成测试。请参阅令牌程序的js项目以获取示例。

常见问题

这里提到了您可能遇到的一些问题的解决方案。

  1. 打开失败: ../../部署/spl_<程序-name>.so

    更新您的Rust和Cargo到最新版本,并在相关<program-name>目录中重新运行cargo build-sbf,或者在其仓库根目录运行以重建所有链上程序。

  2. 加载共享库时出错。(libssl.so.1.1)

    一个可行的解决方案在这里提到。安装libssl。

    wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1l-1ubuntu1.2_amd64.deb
    sudo dpkg -i libssl1.1_1.1.1l-1ubuntu1.2_amd64.deb
    
  3. CPU或内存使用率达到100%

    在构建本库中的一些程序时可能会出现这种情况。最简单的解决方案是将--jobs 1标志添加到构建命令中,将并行作业的数量限制为1,并检查这是否解决了问题。尽管这将意味着构建时间会更长。

Clippy

$ cargo clippy

覆盖率

$ ./coverage.sh  # Help wanted! Coverage build currently fails on MacOS due to an XCode `grcov` mismatch...

MacOS

您可能需要锁定您的grcov版本,然后使用apple-darwin nightly工具链通过rustup

$ cargo install grcov --version 0.6.1
$ rustup toolchain install nightly-x86_64-apple-darwin

发布流程

SPL程序目前是手动标记和发布的。每个程序都是独立于其他程序进行版本控制的,所有新开发都在master上进行。一旦程序经过测试并被认为准备发布

增加版本

  • 在程序的Cargo.toml中增加版本号
  • 运行cargo build-sbf <program>来构建二进制文件。注意生成的spl_<program>.so的位置,以便将其附加到GitHub发布。
  • 提交包含这些版本更改的PR,并通过CI后合并

创建GitHub标签

程序标签的形式为<program>-vX.Y.Z。在版本增加的提交中创建新标签,并将其推送到solana-program-library仓库,例如

$ git tag token-v1.0.0 b24bfe7
$ git push upstream --tags

发布GitHub版本

  • 转到GitHub版本发布UI
  • 点击“草稿新版本”,并在“版本标签”框中输入新标签。
  • 将发布标题命名为“SPL vX.Y.Z”,完成描述,并附加spl_<program>.so二进制文件
  • 点击“发布版本”

发布到Crates.io

转到程序目录,并运行cargo package以测试构建。然后运行cargo publish

免责声明

本项目中描述的所有主张、内容、设计、算法、估计、路线图、规范和性能测量均由 Solana Labs, Inc. (“SL”)尽力完成。读者有责任检查和验证其准确性和真实性。此外,本项目中没有任何内容构成投资邀约。

SL 或开发者资源产生的任何内容仅用于教育和启发目的。SL 不鼓励、诱导或批准任何此类应用程序(包括包含 Solana 区块链协议的代码)的部署、集成或使用,如果这些行为违反了适用的法律或法规。在此,禁止任何此类部署、集成或使用。这包括读者使用任何此类应用程序的情况:(a)违反美国或任何其他适用管辖区的出口控制或制裁法律;(b)读者位于或通常居住在美国财政部外国资产控制办公室(OFAC)管理的全面制裁的国家或地区;(c)读者是或代表特别指定国民(SDN)或受类似封锁或禁止方禁令约束的人。

读者应意识到,美国的出口控制和制裁法律禁止美国公民(以及其他受此类法律约束的人)与某些国家或地区的个人进行交易,或与SDN名单上的人进行交易。因此,其他人使用本存储库中包含的任何代码或其衍生代码可能受到制裁,与这些人进行交易将违反美国的出口控制和制裁法律。


lib.rs:

一个用于单一验证器的流动质押程序

依赖关系

~22-31MB
~504K SLoC