1 个不稳定版本

0.0.1 2023 年 8 月 21 日

#31 in #stake

Apache-2.0

2KB

Solana 程序库

Solana 程序库(SPL)是一系列针对 Sealevel 并行运行时 的链上程序。这些程序与 Solana 的 Sealevel 实现、solana-runtime 进行了测试,其中一些已部署到主网 Beta。随着其他程序实现 Sealevel,我们将慷慨接受补丁以确保这些程序可以在所有实现中通用。

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

部署

仅将 Solana 程序库仓库中的部分程序部署到 Solana 主网 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 主网 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

包含所有过去和现在程序审计的 安全审计仓库

程序包

描述 版本 文档
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、token-2022和关联令牌账户程序的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和关联令牌账户程序的绑定 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 Token)的测试

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

可以通过每个项目的.js绑定进行集成测试。有关示例,请参阅token程序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名单上的人进行交易。因此,存在风险,即使用本存储库中包含的任何代码或其衍生代码的个人可能是受制裁的个人,与这些人进行交易将违反美国出口管制和制裁法。

无运行时依赖