#filecoin-actors #filecoin #web3 #wasm-bytecode #wasm

bin+lib fil_builtin_actors_bundle

Filecoin 内置演员兼容的 Wasm 字节码集合

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

Download history

121 每月下载量

MIT/Apache

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。由于它将从头开始重新构建一切以进行验证(多次),因此这可能会花费一些时间。

注意:为此,您需要

  1. https://crates.io上注册一个账户并确认您的电子邮件地址(如果您还没有的话)。
  2. 使用cargo login进行本地登录。
  3. 将自己添加到fvm-crate-owners团队。

4:增加版本(Alpha)

最后,将版本增加到下一个alpha并提交更改

make bump-version BUMP=alpha
git commit -a -m "Release $(make --quiet version)"

客户端实现说明

获取actor捆绑包

有两种选择

  1. 从源代码构建。
  2. 从GitHub下载预编译的发布捆绑包。

从源代码构建的说明(选项1)

  1. 克隆存储库。
  2. 检出相关分支或标签(请参阅下面的版本控制部分)。
  3. 从工作区根目录执行cargo build
  4. 复制此日志行中打印的CARv1文件生成的位置
    warning: bundle=/path/to/repo/target/debug/build/filecoin_canonical_actors_bundle-aef13b28a60e195b/out/bundle/bundle.car
    
    由于Cargo构建脚本的机制限制,所有输出都仅以警告的形式打印。

两种选项都支持通过脚本或CI管道进行自动化。

集成actor包

这部分是特定于实现的。选项包括

  1. 将包的CARv1字节嵌入到分发版的二进制文件中。
  2. 启动时下载CARv1文件(附带某种形式的校验和以提高安全性)。

使用ref-fvm加载和使用actor包

一旦实现验证了包的真实性,它应该执行以下操作

  1. 将CARv1导入到块存储中。
  2. 将根CID保留在内存中,按网络版本索引。
  3. 将根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提供了一个汇聚点,无论他们认同的实现或项目。

许可证

双许可:MITApache软件许可证v2,通过宽松许可证堆栈

依赖项

~5–8MB
~145K SLoC