4 个版本

0.2.0 2024年3月28日
0.1.2 2024年2月5日
0.1.1 2023年9月28日
0.1.0 2023年6月26日

96#labs

Download history 31313/week @ 2024-04-24 25963/week @ 2024-05-01 28870/week @ 2024-05-08 27621/week @ 2024-05-15 22891/week @ 2024-05-22 29626/week @ 2024-05-29 29480/week @ 2024-06-05 32759/week @ 2024-06-12 29839/week @ 2024-06-19 30035/week @ 2024-06-26 26327/week @ 2024-07-03 27596/week @ 2024-07-10 30454/week @ 2024-07-17 34925/week @ 2024-07-24 47295/week @ 2024-07-31 44076/week @ 2024-08-07

161,698 每月下载量
453 个 crate 中使用(通过 spl-discriminator

Apache-2.0

10KB
140

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 Mainnet Beta

程序 版本
单池 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 包含所有过去和现在的程序审计。

程序包

描述 版本 文档
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 管理存储在链下 Merkle 树中的压缩账户的程序 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 用于链上 Merkle 树表示的库 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-2022 和关联代币账户程序的 CLI Crates.io
spl-stake-pool-cli 质押池程序的 CLI Crates.io
spl-feature-proposal-cli 功能提案程序的 CLI Crates.io
spl-token-lending-cli 代币借贷程序的 CLI Crates.io
spl-token-upgrade-cli 代币升级程序的 CLI Crates.io

JavaScript 包

描述 版本 文档
@solana/spl-token 代币、token-2022 和关联代币账户程序的绑定 npm Docs
@solana/spl-治理 治理程序的绑定 npm 不适用
@solana/spl-account-compression 账户压缩程序的绑定 npm Docs
@solana/spl-备忘录 备忘录程序的绑定 npm 不适用
@solana/spl-name-service 名称服务程序的绑定 npm 不适用
@solana/spl-stake-pool 质押池程序的绑定 npm 不适用
@solana/spl-token-lending 代币借贷程序的绑定 npm 不适用
@solana/spl-token-swap 代币交换程序的绑定 npm 不适用

开发

环境设置

  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 到最新版本,然后在相关的 <程序名称> 目录中重新运行 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 夜间工具链运行 rustup

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

发布流程

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

增加版本

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

创建 GitHub 标签

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

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

发布 GitHub 发布

  • 转到GitHub 发布 UI
  • 点击 "Draft new release",并在 "Tag version" 框中输入新标签。
  • 将发布标题为 "SPL vX.Y.Z",完成描述,并附加 spl_<程序>.so 二进制文件
  • 点击 "Publish release"

发布到 Crates.io

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

免责声明

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

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

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


lib.rs:

spl-discriminator 库提供的推导宏库

依赖项

~0.6–1.2MB
~27K SLoC