20 个稳定版本 (5 个主要版本)

5.0.0 2024年6月25日
4.0.4 2024年7月11日
4.0.1 2024年2月5日
4.0.0 2023年6月27日
0.1.0 2020年6月17日

#5 in #spl

Download history 32524/week @ 2024-05-04 34810/week @ 2024-05-11 29258/week @ 2024-05-18 30123/week @ 2024-05-25 33909/week @ 2024-06-01 35005/week @ 2024-06-08 34318/week @ 2024-06-15 37064/week @ 2024-06-22 33427/week @ 2024-06-29 34670/week @ 2024-07-06 32219/week @ 2024-07-13 38029/week @ 2024-07-20 39056/week @ 2024-07-27 59031/week @ 2024-08-03 42811/week @ 2024-08-10 38575/week @ 2024-08-17

每月186,950次下载
用于 609 个包(30 个直接使用)

Apache-2.0

8KB
140

Solana 程序库

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

更多信息请参阅 SPL 文档Token 类型文档

部署

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
memo 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 用于管理存储在链外默克尔树中的压缩账户的程序 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-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 N/A
@solana/spl-账户-压缩 账户压缩程序的绑定 npm Docs
@solana/spl-memo 备忘录程序的绑定 npm N/A
@solana/spl-名称-服务 名称服务程序的绑定 npm N/A
@solana/spl-股权- 股权账户池程序的绑定 npm N/A
@solana/spl-token-借贷 令牌借贷程序的绑定 npm N/A
@solana/spl-token-交换 令牌交换程序的绑定 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_<程序-名称>.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
  • 点击 "创建新发布",并在 "标签版本" 框中输入新标签。
  • 将发布标题为 "SPL vX.Y.Z",完成描述,并附加 spl_<程序名>.so 二进制文件
  • 点击 "发布发布"

发布到 Crates.io

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

免责声明

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

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

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


lib.rs:

一个接受编码字符字符串的程序,并验证它是否可以解析,同时验证和记录签署者。目前支持UTF-8字符。

依赖项

~11–19MB
~268K SLoC