28 个稳定版本 (3 个主要版本)
9.0.1 | 2022 年 10 月 20 日 |
---|---|
8.0.0 | 2022 年 6 月 23 日 |
7.5.1 | 2022 年 5 月 27 日 |
7.2.2 | 2022 年 4 月 29 日 |
6.1.0 | 2022 年 3 月 29 日 |
#15 in #filecoin-actors
156 个月下载量
用于 3 crates
285KB
6K SLoC
内置 Filecoin 演员库
此存储库包含从 2022 年 7 月 6 日网络版本 16,epoch 1960320 开始运行 Filecoin 网络的链上内置演员的代码。
这些演员是用 Rust 编写的,并设计在 Filecoin 虚拟机 内运行。后者的参考实现存在于 filecoin-project/ref-fvm。
此存储库的构建过程将每个演员编译成 Wasm 字节码,并生成一个聚合包,供所有客户端导入。该包的结构是标准化的。以下为详细信息。
此代码库已在 FIP-0031 中规范化。因此,从网络版本 16 开始,此演员实现是网络唯一认可的实现。
FVM 之前的演员
以下网络版本(nv16 之前)的演员也在此实现
- nv14 演员以促进测试。
- nv15 演员以启用 nv15=>nv16 升级。
可导入的包
此存储库的主要输出是一个 CARv1 归档,将所有演员的 Wasm 字节码打包到一个文件中,具有以下特点
- CARv1 标头指向一个单个根 CID。
- 根CID解析为一个DAG-CBOR编码的块,定义了一个
Manifest
类型(如下定义),包含一个表示包格式的版本号(目前总是1
)和一个ManifestPayload
的CID。 - 下面定义的
ManifestPayload
包含在一个DAG-CBOR编码的块中,定义了一个类型,将演员类型名称与其对应的CID关联起来。 - 所有演员的CID都包含在同一CARv1存档中,与包含在RAW块中的编译好的Wasm字节码一起。
Manifest 模式
# Manifest is encoded as: [version, CID]
type Manifest struct {
version Int
payload &ManifestPayload
} representation tuple
# ManifestPayload is encoded as: [ ["actorkey", CID], ["actorkey", CID], ... ]
#
# It alternatively may be interpreted as:
# type ManifestPayload {String : &ActorBytecode} representation listpairs
# Or simply as a list of tuples.
type ManifestPayload struct {
system &ActorBytecode
init &ActorBytecode
cron &ActorBytecode
account &ActorBytecode
storagepower &ActorBytecode
storageminer &ActorBytecode
storagemarket &ActorBytecode
paymentchannel &ActorBytecode
multisig &ActorBytecode
reward &ActorBytecode
verifiedregistry &ActorBytecode
datacap &ActorBytecode
placeholder &ActorBytecode
evm &ActorBytecode
eam &ActorBytecode
ethaccount &ActorBytecode
} representation listpairs
# RAW block
type ActorBytecode bytes
预编译演员包作为本仓库中的发布二进制文件提供。在crates.io上的fil_builtin_actors_bundle
包将不会更新。
发布
通过更改顶层Cargo.toml
文件中的workspace.package.version
,同时发布所有演员、运行时和状态抽象。
- 从顶级
Cargo.toml
文件中更改workspace.package.version
。 - 在GitHub上创建一个发布。
这将触发GitHub CI的自动捆绑构建,生成的捆绑包将附加到GitHub发布上。
客户端实现说明
获取演员包
有两种选择
- 从源代码构建。
- 从GitHub下载预编译的发布捆绑包。
从源代码构建说明(选项1)
- 克隆仓库。
- 检出相关分支或标签(见下面的版本控制部分)。
- 从工作空间根目录执行
make bundle
。
捆绑包将写入到output/builtin-actors.car
。
这两种选项都支持通过脚本或CI管道进行自动化。
整合演员包
这部分是特定于实现的。选项包括
- 将捆绑包的CARv1字节嵌入到分发的二进制文件中。
- 在启动时下载CARv1文件(带有某些形式的校验和以增加安全性)。
使用ref-fvm加载和使用演员包
一旦实现验证了捆绑包的真实性,它应执行以下操作
- 将CARv1导入到块存储中。
- 按网络版本将根CID保留在内存中。
- 将根CID馈送到ref-fvm的Machine构造函数,以告知ref-fvm哪个CodeCID映射到哪个内置演员。
支持多个网络版本
由于每个网络版本可能由不同的演员代码支持,实现应准备好加载多个演员包,并按网络版本对其进行索引。
在实例化ref-fvm Machine时,必须传递网络版本和相应的Manifest根CID。
版本控制
一个合理的问题是包版本控制如何与协议概念ActorVersion
相关。我们采用了与specs-actors类似的政策
- 包版本中的主版本号与
ActorVersion
相关。 - 我们通常不使用次版本号;这些始终设置为
0
。 - 我们致力于将主要版本号设置为圆形,以表示给定网络升级的最终发布版本。然而,由于无法预测软件工程的一些方面,这并不是一条硬性规则,未来可能会通过增加补丁号来发布进一步版本。
开发版本将使用如 -rc(发布候选)之类的限定符。
以下是将此策略应用于 v10 行动者版本谱系的示例
- 不稳定开发版本通过提交哈希引用。
- 稳定开发版本标记为发布候选:10.0.0-rc1,10.0.0-rc2 等。
- 最终发布版本:10.0.0。
- 修补的最终发布版本:10.0.1。
- 修补的最终发布版本:10.0.2。
- 网络升级随着 10.0.2 正式上线。
关于此代码库
与 specs-actors 的关系
此存储库取代了 specs-actors,并承担两个角色
- 内置动作的可执行规范。
- 内置动作的规范、可移植实现。
致谢
此代码库最初是从 Forest 客户端 的动作 v6 实现中分叉而来,并适配到 FVM 环境中。
社区
由于此代码库是所有 Filecoin 客户端实现中的公共财富,因此它成为所有 Core Dev 不论其实现或项目归属的汇聚点。
许可证
双许可:MIT、Apache 软件许可证 v2,通过 许可许可证堆栈。
关于 EVM 预编译的测试数据除外,该数据根据 LGPL v3 许可,不包括在 crates 或构建工件中。
依赖项
~11MB
~191K SLoC