24 个稳定版本
7.5.1 | 2022 年 5 月 27 日 |
---|---|
7.5.0 | 2022 年 5 月 19 日 |
7.2.2 | 2022 年 4 月 29 日 |
7.1.0 | 2022 年 3 月 29 日 |
6.1.0 | 2022 年 3 月 29 日 |
#13 in #filecoin-actors
121 每月下载量
300KB
5.5K SLoC
内置 Filecoin 演员版本 (v7)
此仓库包含从网络版本 16 开始运行的 Filecoin 网络的链上内置演员代码。
这些演员是用 Rust 编写的,并设计在 Filecoin 虚拟机 内运行。后者在 filecoin-project/ref-fvm 中存在一个参考实现。
此仓库的构建过程将每个演员编译成 Wasm 字节码,并生成一个聚合包,以便所有客户端导入。此包的结构是标准化的。以下将详细介绍。
此代码库正在根据 FIP-0031 进行规范化。因此,此演员实现将是网络唯一认可的。
Pre-FVM 演员版本
还提供了以下网络版本的演员
- nv14 演员提供以促进测试。
- nv15 演员提供以启用最终 nv15=>nv16 升级。
可导入的包
此仓库的主要输出是一个 CARv1 归档,将所有演员的 Wasm 字节码打包到单个文件中,具有以下特性
- CARv1 报头指向单个根 CID。
- CID 解析为 Manifest 数据结构,将代码 CID 与相应的内置演员类型相关联。
- Manifest 有效负载应解释为 IPLD
Map<Cid, i32>
。每个条目代表一个内置演员。 - 清单键(CID)指向一个actor的Wasm字节码作为一个单独的块。
- 清单值(i32)标识actor类型,应解析为
fvm_shared::actor::builtin::Type
枚举- 系统 = 1
- 初始化 = 2
- 定时任务 = 3
- 账户 = 4
- 电力 = 5
- 矿工 = 6
- 市场 = 7
- 支付通道 = 8
- 多重签名 = 9
- 奖励 = 10
- 验证注册表 = 11
CARv1作为字节切片嵌入在库的根目录中,并在BUNDLE_CAR
公共常量下导出,以便更容易被Rust代码使用。
如果实现者要求,可以提供预编译的actor捆绑包作为本存储库中的发布二进制文件。
发布
我们通常同时发布所有actor、运行时和捆绑包。这意味着发布
fil_actors_runtime
fil_actor_account
fil_actor_cron
fil_actor_init
fil_actor_market
fil_actor_miner
fil_actor_multisig
fil_actor_paych
fil_actor_power
fil_actor_reward
fil_actor_system
fil_actor_verifreg
fil_builtin_actors_bundle
(按此顺序)
为了使其更容易,我们在Makefile中添加了一些辅助脚本。以下为说明。
1:安装依赖项
安装
jq
(使用您喜欢的包管理器)cargo-edit
(使用cargo install cargo-edit
)。
2:增加版本(发布)
您可以使用bump-version
目标来增加运行时、actor和捆绑包的版本。请参阅版本控制以确定正确的版本增加。
make bump-version
默认情况下,这将增加修补程序版本。要增加到不同的版本,请附加,例如BUMP=major
。有效选项有
修补程序
次要
主要
alpha
beta
您还可以使用set-version
目标设置特定版本。
make set-version VERSION=7.1.1
最后,提交版本更改
git commit -a -m "Release $(make --quiet version)"
3:发布Crates
注意:如果您不是核心FVM团队的成员,您将需要在此步骤中获得帮助。请在此处提交PR并要求核心团队发布一个版本。
运行make publish
将所有crates发布到crates.io。由于它将从头开始重新构建一切以进行验证(多次),因此这可能会花费一些时间。
注意:为此,您需要
- 在
https://crates.io
上注册一个账户并确认您的电子邮件地址(如果您还没有的话)。 - 使用
cargo login
进行本地登录。 - 将自己添加到fvm-crate-owners团队。
4:增加版本(Alpha)
最后,将版本增加到下一个alpha并提交更改
make bump-version BUMP=alpha
git commit -a -m "Release $(make --quiet version)"
客户端实现说明
获取actor捆绑包
有两种选择
- 从源代码构建。
- 从GitHub下载预编译的发布捆绑包。
从源代码构建的说明(选项1)
- 克隆存储库。
- 检出相关分支或标签(请参阅下面的版本控制部分)。
- 从工作区根目录执行
cargo build
。 - 复制此日志行中打印的CARv1文件生成的位置
由于Cargo构建脚本的机制限制,所有输出都仅以警告的形式打印。warning: bundle=/path/to/repo/target/debug/build/filecoin_canonical_actors_bundle-aef13b28a60e195b/out/bundle/bundle.car
两种选项都支持通过脚本或CI管道进行自动化。
集成actor包
这部分是特定于实现的。选项包括
- 将包的CARv1字节嵌入到分发版的二进制文件中。
- 启动时下载CARv1文件(附带某种形式的校验和以提高安全性)。
使用ref-fvm加载和使用actor包
一旦实现验证了包的真实性,它应该执行以下操作
- 将CARv1导入到块存储中。
- 将根CID保留在内存中,按网络版本索引。
- 将根CID提供给ref-fvm的Machine构造函数,以便告诉ref-fvm哪个CodeCID映射到哪个内置actor。
支持多个网络版本
由于每个网络版本可能由不同的actor代码支持,实现应该准备好加载多个actor包并按网络版本对其进行索引。
在实例化ref-fvm Machine时,必须传递网络版本和相应的Manifest根CID。
版本控制
一个公平的问题是crate版本如何与协议概念ActorVersion
相关。我们采用与specs-actors类似的政策
- crate版本中的主版本号与
ActorVersion
相关。 - 我们通常不使用次版本号;这些版本始终设置为
0
。 - 我们努力将主crate版本设置为圆形,以表示给定网络升级的最终发布版。然而,由于无法预测软件工程的某些方面,这不是一个硬性规则,并且可能通过增加补丁号来发布进一步的版本。
开发版本将使用如-rc(发布候选)之类的限定符。
以下是一个将此政策应用于v10 actor版本谱系的示例
- 不稳定开发版本通过提交哈希引用。
- 稳定开发版本被标记为发布候选:10.0.0-rc1、10.0.0-rc2等。
- 最终发布版:10.0.0。
- 修补的最终发布版:10.0.1。
- 修补的最终发布版:10.0.2。
- 网络升级以10.0.2启动。
关于此代码库
与specs-actors的关系
此仓库取代了specs-actors,并履行两个角色
- 内置actor的可执行规范。
- 内置actor的规范、可移植的实现。
致谢
此代码库最初是从Forest客户端的actor v6实现中分叉出来的,并适应了FVM环境。
社区
由于此代码库是所有Filecoin客户端实现中的公共财产,它为所有Core Devs提供了一个汇聚点,无论他们认同的实现或项目。
许可证
双许可:MIT、Apache软件许可证v2,通过宽松许可证堆栈。
依赖项
~5–8MB
~145K SLoC