背景
Filecoin 系统中存在以Actor形式存在的Virtual Machine (VM)。它作为部署在链上的代码的执行环境,这些代码相当于 Filecoin 中所谓的“智能合约”,Actor即是VM。但由于目前的VM是封闭式的,用户无法部署自己独特的智能合约至Actor上执行,并且用户无法安装和运行新的Actor类型,这导致 Filecoin 缺乏通用的可编程性。FVM(Filecoin Virtual Machine)是Filecoin网络上的虚拟机,即是Filecoin区块链上智能合约的执行环境的名字。 在 Filecoin 网络上支持智能合约是一个自然的想法,已经被讨论过多次。开发者内部的讨论应该是在网络的设计时就考虑了。Filecoin 的目标是构建一个去中心化的存储市场,首先迎接的挑战是存储证明问题。Filecoin 的主网上线以及上线一年内的逐步优化,已经证明了 Filecoin 的存储证明(复制证明和时空证明)是可行和安全的。在这个基础上,引入智能合约就成了下一步的重要工作。
引入FVM的原因
激发用户在Filecoin上创新想法。让用户能够在现有 Filecoin 之上编程释放更多自由度、创新潜力以及可组合性/堆叠的想法,以 DeFi 方式提出创新解决方案。 对系统参与者的依赖性较低。原本需要更改系统的功能现在可以在用户空间以无需信任的方式实现。提升去中心化程度 解锁Layer2解决方案。目前第 2 层解决方案只能作为侧链存在,但无法真正实现 普遍可执行的规范/“代码就是法律”。在确定性环境中运行的单一版本的系统参与者使所有客户端能够明确达成共识。 更快的协议演变。协议升级一次即可。FIP 的推出将不再是完成跨客户端实施的瓶颈。实施者之间需要较少的协调。 数据计算的基础。有充分的理由相信基于 WASM 的的 VM并支持 IPLD 是启用数据计算的基础 启用治理驱动的自动协议升级。随着 Filecoin 协议的更多元素迁移到 WASM 空间(例如块验证、分叉选择规则等),有可能将协议更改作为 WASM 模块部署到所有客户端,并进行链上投票治理。
具体规格要求
- 必须支持多个 VM 运行时,并且可以部署具有完全执行奇偶校验的 EVM 字节码(可能用 Solidity 编写的合约),以及本地编写的专门为 Filecoin 编写的合约。
- 必须能够与目前的内置VM无缝连接。
- 必须支持针对不同 VM 运行时的跨合约调用。
- 必须支持同步调用,最终应该支持异步调用。
- 必须是支持原生的IPLD ,有效地处理所有 IPLD 访问模式。
- 必须在状态突变时跟踪 IPLD 对象的可达性,以防止不加区分的状态增长。
- 必须考虑实际计算成本(gas消耗)。
- 用户代码不得阻止系统消息的执行(待定)。
- 应该支持使用 IPLD 协议形式的接口(方法、参数、返回值)。
- 编程必须简单、平易近人且令人愉快。
Filecoin 虚拟机架构
Native user-defined actors
原生 FVM 运行时是 WebAssembly (WASM),从技术上讲,用户可以在编译为 WASM 的任何编程中编写 Actor。但是,用户需要注意特定于语言的开销(例如运行时、垃圾收集、stdlib 等)。它们会影响 WASM 输出,导致 WASM 字节码膨胀和执行效率低下。还需要考虑链上代码大小限制。Rust 是编写高效用户定义actor 的主要语言推荐。因此,参考 FVM SDK 是用 Rust 构建的。
Foreign user-defined actors
FVM 与平台无关、受虚拟机管理程序启发的架构使得部署针对外部运行时的代码成为可能。我们的首要任务是 EVM:我们的目标是支持将 EVM 字节码按原样部署到 Filecoin 网络。我们将采用SputnikVM,一种与 WASM 运行时兼容的 Rust EVM 解释器,并将以太坊网络的特定行为填充到 Filecoin 上。 就性能而言,这是一种低效的解决方案,但它允许将现有经过实战测试的以太坊智能合约直接且相对无风险地部署到 Filecoin 网络。Gas 核算会是导致效率低下的因素,从而导致执行成本更高。这将激励开发人员将智能合约迁移到本地 FVM ,以降低执行成本。除了 EVM,未来也热衷于支持Solana 的 BPF 和其他区块链编程模型和范式。 我们认为兼容性应该通过翻译/模拟源代码形式的可执行输出来实现,而不是使用替代/自定义工具链处理高级语言。此外,这种选择使开发人员能够(重新)使用源生态系统中可用的所有工具,并产生尽可能高的执行保真度/奇偶校验,可降低技术风险。
Built-in system actors
Built-in system actors将完全在 WASM 空间中运行。他们的来源可能会迁移到使用 FVM SDK。它们将被编译为 WASM,并将作为捆绑在 Filecoin 节点实现分发中的静态 WASM 模块发布,可能通过二进制嵌入。
思考:类EVM 还是其他VM
毫无疑问,以太坊是目前区块链占统治地位的智能合约平台,其他新兴公链基本上都要与 EVM 看齐。其生态繁荣,已经成为了事实上的标准。那是不是直接把 EVM 搬过来用就可以了呢?当然不是,照搬过来,那才是直接与以太坊竞争,没有意义。Filecoin所要做的是兼容 EVM,说白一点,应该是兼容 Solidity,使得运行在 EVM 上的智能合约在不改或尽量少改代码的情况下,可以直接拿过来用。这是一个通用做法。这么做,我们就不是要构建一个 EVM,而是兼容 EVM 的 FVM 。 FVM 兼容 EVM,但又不同于 EVM,原因上面已经讲了,要利用 Filecoin 的特点。至少,数据这个部分要纳入进来。同时,在选择兼容 Solidity 方面,也有不少选择。EVM 诞生5,6年了,作为第一个广泛使用的智能合约虚拟机,其自身有很多不足,比如,速度比较慢,底层的安全性不足等等。另一方面,WebAssembly(WASM) 的逐步流行和被认可,已经有成为下一代标准的趋势。支持WASM基本上也是必须的。因此,FVM在实现路径的选择上必须非常慎重。还是那句话,作为区块链项目,一旦上线,犹如火箭上天,将难以改变。
FVM会带来的好处
可以想象一下智能合约可以为 Filecoin 带来的好处。许多人可能会说,可以像其他公链ETH/SOL/BSC/FTM/AVAX,玩 DeFi,NFT,这些都可以迁移过来。以上其它公链存在的大部分意义就是为了解决以太坊拥堵、手续费高、TPS低等问题。假设Filecoin引入FVM也能解决同样的问题,那在公链市场分一杯羹也不是不可以。但是Filecoin上的智能合约应用最好是可以基于Filecoin 的去中心化存储的业务特征进行创新开发,这才是它的竞争优势。比如: ● 构建存储抵押贷款市场,自动化利率调节,降低存储提供者进入门槛 ● 通过信用系统,构建数据检索市场,实现检索提供者的激励 在没有智能合约之前,这些业务或者功能的建立需要通过 Filecoin 网络升级来实现,也就是必须要 Lotus 或者 Venus 的新版本来实现这些功能。但是,当有了智能合约,这些功能就可以通过合约来实现了,跟搭积木一样,Filecoin 网络的功能可以自由地添加,并通过竞争,来测试不同的方案,可以自由试错,逐步演进。也就是说,智能合约解锁了 Filecoin 功能升级的麻烦,网络功能的提升无需通过网络升级来实现,这个是智能合约平台本身带来的极大好处。 此外,FVM目标是实现完全的 EVM 兼容性,让 Filecoin 能够利用该生态系统中已经存在的大量资产、人才和工具。
存在的风险
- 链带宽。如果没有分片,可能需要实现多个“通道”,以确保用户交易不会阻塞。
- 性能下降。如果我们将 actor 编译为 WASM,执行时间可能会增加。