【官方 强制升级 详细细则】Filecoin网络v1.16.0升级说明;这个升级将标志着FVM虚拟机开发里程碑M1的完成
这是Lotus 的一个强制升级发布版本,它引入了Filecoin network v16(https://github.com/filecoin-project/community/discussions/74?sort=new#discussioncomment-2392151),代号是Skyr升级。Filecoin网络安排在epoch 1960320(时间是 2022-07-06T14:00:00Z)升级到v16版本。所有的节点运作者(包括存储提供者)必须在这个时间点前,升级到这个发布版本(或更新的版本)。存储提供者必须升级他们的daemons、 miners 、market 和workers等组件。
在进行升级后,你的lotus节点将会以原子性的方式,从传统的虚拟机(依赖于go的spec-actor 合约)切换到Filecoin虚拟机FVM (使用基于Rust的内建actors合约)。
Skyr升级引入了如下的FIP改进提议、升级和漏洞修复,这些都在built-actors v8(https://github.com/filecoin-project/builtin-actors/releases/tag/v8.0.0)和ref-fvm v1.0.0(https://github.com/filecoin-project/ref-fvm/releases/tag/fvm%40v1.0.0)里实现了:
FIP-0030 引入FVM (https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0030.md)
FIP-0031 原子性地切换到不可编程的FVM虚拟机(https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0031.md)
FIP-0032 针对不可编程的FVM的Gas Fee模型调整 (https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0032.md)
FIP-0027 Gas模型匹配不可编程的FVM虚拟机 (https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0027.md)
ProveReplicaUpdates方法漏洞修复 (https://github.com/filecoin-project/builtin-actors/pull/138)
SnarkPack新的证明版本(https://github.com/filecoin-project/builtin-actors/pull/474/commits/3027c365f516e1cba6f156d4fb9dbd8c893d5b62)
须知
Actor Code CIDs
就如FIP-0031- structure of the code cid(https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0031.md#structure-of-code-cids)所述,系统actors的code CIDs将会是真的内容寻址方式。
对lotus用户来说,我们的改变对你的影响已经降到最低了。这意味着当你运行 lotus state get-actor 时,相应的CODE输出会是能代表该actor合约可执行代码的实际CID,跟随着会有以前出现过的那种合成ID,如fil/8/system。
这还意味着在将来,当actor合约代码改变时,相应的CID会随之改变,这时候就需要进行网络升级,让网络的参与者就系统actors该使用什么可执行代码的问题上,达成相应的共识。
Built-in actor bundles
随着网络引入FVM,它也从以GoLang 编写的spec-actor 切换到built-in actor(https://github.com/filecoin-project/builtin-actors),在这过程中后者会有一些可导入的bundles(importable bundles)(https://github.com/filecoin-project/builtin-actors#importable-bundle)。这意味着,如同filecoin proof参数一样,节点运作者需要根据网络版本,来获取相应的actor bundles,从而让节点保持运行。
为所有网络(mainnet, calibnet等)设置的bundles,已被包含到 lotus源代码树(build/actors/)里,并在构建时已经嵌入。根据你将要构建的网络版本,Lotus会在构建&升级的时候,对比build/builtin_actors_gen.go里的值,来验证bundle CIDs的正确性。你也可以运行lotus state actor-cids --network-version 16,来使用检查bundle manifest CID是否与bundle gen-ed值匹配。
使用v8.0.0 bundle的nv16网络版本,其 manifest CID 及 actor code CIDs的完整列表应为如下:
所有的bundles都可在 https://github.com/filecoin-project/builtin-actors/releases找到,因此你也可以手动下载这些bundles并放置到正确的路径里。
注意:使用定制的bundle会有与网络不同步的风险!
如下方式可获取Code CIDs:
api:StateActorCodeCIDs
cli: lotus state actor-cids
cli: lotus-shed cid inspect-bundle
执行追踪
对依赖于我们的lotus 执行追踪(execution trace )的开发者而言,你将需要使能 LOTUS_VM_ENABLE_TRACING 环境变量,来获取与之前完全一样的执行追踪信息。否则,Subcall 细节和DurationandGasCharges` 栏目将不会出现在新的 FVM trace追踪信息里。
Deal Proposal迁移
所有在元数据存储里使用非utf8字符串作为标签的deal proposals,将执行一个轻量迁移到新的格式,就如v1.1.1(https://github.com/filecoin-project/go-fil-markets/pull/721)所定义的。
其他
在完整的daemon 节点上,资源管理器现在默认开启了。在其他节点上,也可以通过手动设置环境变量var LOTUS_RCMGR至1的方式手动开启。
Fix: drand: Filecoin epochs 轮次计算Filecoin epochs (filecoin-project/lotus#8606)
依赖升级
chore: deps: 升级到go-libp2p v0.19.4 (filecoin-project/lotus#8801)
github.com/filecoin-project/go-fil-markets (v1.20.1 -> v1.20.1-v16-2):
github.com/filecoin-project/go-legs (v0.3.7 -> v0.3.10):
github.com/filecoin-project/go-state-types (v0.1.8 -> v0.1.10):
github.com/filecoin-project/specs-storage (v0.2.4 -> v0.4.1):
注:Filecoin v16 Skyr升级会往主网上引入基于 WASM的 Filecoin虚拟机(FVM),它暂时是不可编程的。主网将会原子性地从当前的内置虚拟机切换到基于WASM的FVM参考架构。此外,会有一个新的gas模型被激活,能够配对实际的WASM执行开销。这次,暂时只有内置的actors会被支持。这个升级将标志着FVM虚拟机开发里程碑M1的完成。