Nervos 2021 年技术路线图
有时候人们会很疑惑,为什么在 Nervos 网站上找不到名字华丽的里程碑,而只有一个「2020 年路线图」?于是怀疑 Nervos 是不是真的有长远的计划,甚至怀疑在 2020 年后团队是不是会「把项目还给社区」?事实恰恰相反。我们相信 2019 年 Nervos 主网上线只是一个漫长旅程的开始,我们已经做好了充足的准备。
想出一些很酷的里程碑名字很容易,但是如果这些里程碑在几年后仍然有意义的话,那么要跟上它们的步伐就很难了。提前计划好一切,朝着一个固定的目标努力(软件工程中所谓的瀑布模型),在不断变化的环境中是行不通的。而在加密领域中,这是 200% 的真理。每天我们都能看到新想法的出现,新项目的推出,每天我们都会互相学习,任何计划在 3 个月后就会过时(也许我夸张了一点,可能是 6 个月)。那么,今天为 2077 年设立里程碑的目的又是什么呢?有人说过:「模糊的正确胜过精确的错误。」
所以我们用了另外一种方式,我们称之为 Nervos 之道。Nervos 是一个运行在许多协议之上的网络,它不是一个单一的区块链。我们对使用区块链技术后的世界有一个大致的想法,我们希望确保 Nervos 协议栈能够支持这一愿景。我们把最重要的东西保留在 Layer 1,使它成为稳定和安全的最小基础,把其他的东西留给 Layer 2 或更高的层。这种分层为 Nervos 带来了极大的灵活性,因为在 Layer 2 上更容易尝试各种想法和探索不同的方向。这意味着,随着我们对未来了解的越来越多,Nervos 可以与整个行业一起发展。
我们一个大致的长期目标是在 2024 年之前能够完成 Nervos 协议栈的全部设计和实现。根据我们的估计,Layer 1 和 Layer 2 的设计空间很有可能会在 2024 年之前稳定化,我们可以确信自己在 Nervos 协议中不会遗漏任何东西;2024 年也是 CKB 第一个四年减半后的第一年,与之相匹配的感觉很好。2024 年的目标虽然雄心勃勃,但如果我们足够大胆地享受「四年冲刺」,这还是可以实现的。在 2024 年之前,在我们专注于短期任务的同时,我们会不断地去看别人的做法,并从新的事物中学习,相应地调整我们的计划。每年年初,我们都会根据去年的经验来规划下一年的计划,并向 2024 年的目标前进。通过这种方式,我们可以让自己和 Nervos 保持灵活,更能适应不断变化的未来。
接下来,是时候规划 Nervos 2021 的技术路线图了。
Layer 1:CKB
第一个硬分叉
进化意味着变化,有时甚至是彻底的改变。硬分叉是给 Layer 1 带来突破性改变的一种直接方式,我们计划在 2021 年对 CKB 进行第一次硬分叉,包括 Nervos RFC(https://github.com/nervosnetwork/rfcs) 提出的升级。这些建议可以让我们能够以很多不同的方式改进 CKB:
官方的 RISC-V B 扩展(https://github.com/riscv/riscv-bitmanip)将会被引入 CKB VM,因此可以提供更高效的加密算法实现。 Flyclient 支持。Flyclient 是 PoW 区块链的一种快速验证方法。启用 Flyclient 后,轻客户端可以在几秒内同步到正确的 tip 区块。Flyclient 需要修改区块头结构,同样的修改也有利于其他区块链上的 CKB 交易的跨链验证。 CKB VM 将引入一个新的概念,macro-op fusion(https://en.wikichip.org/wiki/macro-operation_fusion)。在一个更高的视角来看 macro-op fusion,就是当人们一起使用某些 RISC-V 指令时,CPU 能够以更高效的方式一起执行它们。因此,CKB VM 将减少形成 macro-op fusion 指令模式的 cycle。请注意,现代编译器已经广泛地利用 macro-op fusion,所以你可能注意到的唯一结果,是 CKB VM 对智能合约收取的 cycle 比硬分叉前更少。关于 RISC-V 中 macro-op fusion 的更详细介绍,请参考这里:https://riscv.org/wp-content/uploads/2016/07/Tue1130celio-fusion-finalV2.pdf 以更干净的方式重新修复 CKB VM 中的 Bug。这些 Bug 目前已在主网上用临时解决方案修复。 调整区块/交易版本和 CKB VM 的规则,使未来的软分叉更加容易。 在交易中可以进行多个 dep 匹配。CKB Cell 使用数据哈希或类型脚本哈希来间接匹配脚本二进制。存储二进制文件的 Cell 必须通过 Cell dep 添加。目前不可以在 CKB Cell dep 中进行多次匹配,以避免歧义。然而,如果同一个 Cell 在 Cell deps 中出现多次,通常通过 dep 组就可以安全地绕过这个错误。 简化交易输入的 since 规则。
CKB VM 变化背后的一个主要原因(除了 Bug 修复)是减少开销。CKB VM 已经是本地 CPU 上的一个薄抽象层。有了硬分叉,我们确实想把抽象层做得更薄:RISC-V B 扩展让我们可以直接将 RISC-V 指令映射到 x86-64 cpu 提供的本地指令上,而 macro-op fusion 则更深入地利用了我们 CPU 中的现代微架构。所有的这些努力都是为了让加密算法能够更有效地在 CKB VM 上运行,从而解锁更多 Nervos CKB 的潜在用例。
协调硬分叉从来都不是一件容易的事情。我们会尽最大努力与社区进行充分沟通,确保稳定而优雅的升级。
轻客户端
虽然我们花了很多精力来降低全节点运行的门槛,但同步整个链所需的时间、网络带宽和磁盘存储量还是会随着链的长度而线性增长。全节点为我们提供了一个无需信任的选择,但是这种安全级别对一些用户来说可能太高了。如果能有一个更平衡的选择来满足日常使用,那就再好不过了。轻客户端正是为这样的需求创建的。轻客户端可以让用户用最少的带宽和存储与 CKB 进行交互,它还可以帮助 Nervos dApp 在更多的平台上运行,比如移动设备。
去年我们已经测试了一个基础的轻客户端协议设计。2021 年,我们会完成这项工作,并发布版本。我们会构建工具并与 Neuron 整合。基础轻协议仍然会下载所有的区块头,如果我们成功地将 Flyclient 添加到硬分叉中,并切换到更高级的轻协议里,这可能会大大减少同步时间、网络带宽和磁盘存储量。
Layer 2
Godwoken & Polyjuice
Godwoken 是一个基于 Nervos CKB 的 Layer 2 Rollup 框架。它为 CKB 提供了扩展能力,以及基于账户的编程模型。
搭配着 Godwoken,Polyjuice 在 Nervos CKB 上提供了一个 Ethereum 兼容层。它利用 Godwoken 提供的账户模型以及可扩展性,然后集成 evmone(https://github.com/ethereum/evmone/)作为运行 Ethereum 智能合约的 EVM 引擎。Polyjuice 的目标是 100% 兼容 EVM,这意味着我们计划支持以太坊最新硬分叉版本所支持的所有智能合约。
Godwoken 与 Polyjuice 都已经部署到 Nervos CKB 的测试网环境中。2021 年,在 Godwoken/Polyjuice 通过审计之后,我们会将它们部署到 Nervos CKB 主网中。除此之外,我们还将引入更多的增强功能到 Godwoken 中:
Godwoken 目前使用 Proof-of-Authority 来简化设计,但它并不仅局限于此。2021 年,我们将会研究更去中心化的 Proof-of-Stake 模型,以及 Zero-Knowledge Rollup。 将引入扩展功能,如 BLS 签名集成,以实现更高的吞吐量。 Polyjuice 提供了第一个但不是最后一个编程模型。我们正在寻找下一个在 Godwoken 中支持的编程模型,例如 Diem (https://www.diem.com/en-us/),如果在 2021 年找到的话,我们会将其与 Godwoken 整合。支持的编程模型越多,就有越多的 dApp 和开发者可以在 Nervos 和其他区块链之间迁移,这是互操作性 2.0 的支柱之一。
Axon
Axon 是一个基于链的 Layer 2 协议。它不是 Rollup,因为它没有使用 CKB 作为数据可用性层。在 Axon 中数据可能不可用,我们希望用不同的假设和设计来解决这个问题。我们之前也做过几轮 Axon 协议设计,但直到去年才有了令人满意的结果。经过了 2019 年和 2020 年,我们从合作伙伴那里了解到了更多的真实需求和痛点,我们相信这些经验会帮助我们做出正确的取舍,并为 Axon 带来更好的安全模型、治理模型和代币经济学。目前,我们仍然还在研究协议。希望我们可以在 2021 年完成设计并将其转译成代码。
支付通道网络
通道网络是 Layer 2 原生代币的另一面(与基于链的协议相比)。2020 年,我们从通用的支付通道(GPC)开始研究,探讨了 HTLC 的通道同步(https://talk.nervos.org/t/a-discussion-on-lock-time-of-multi-hop-payment-in-payment-channel-network/5124)、UDT 的支持(https://talk.nervos.org/t/idea-about-the-composability-of-assets-in-ckb/4855)、监视塔(watch towers)、付款的路由问题和拆分付款等话题。我们建立了一个原型来测试这些想法,并在去年进行了多次设计迭代。原型和讨论表明,CKB 上的支付通道网络不仅是可能的,而且比比特币和以太坊上的支付通道网络更加强大。通用支付通道的可组合性意味着可以在 CKB 上毫不费力地对 UDT 进行「通道化」!UDT 不仅是 Layer 1 上作为「一等公民」的资产,也是 Layer 2 上的「一等公民」资产,因为它们可以在各层之间流入和流出,且无需进行任何修改。这就给支付通道网络带来了最大的流动性,因为 Layer 1 的所有资产都可以毫无摩擦地加入 Layer 2 的资金池中。
我相信,一个支持 UDT 的支付通道网络将创造出前所未有的新应用案例。伴随其巨大潜力的是通道网络的高度复杂性,希望我们能在 2021 年完成初步的设计,并在主网上建立起一个小型但可用的支付通道网络。
xUDT
如果说 sUDT 是「Nervos 上的 ERC 20 代币」,那么 xUDT 将会是没有同类竞品的东西,因为它具有强大的可扩展性。xUDT(可扩展的 UDT)扩展了 sUDT(https://github.com/nervosnetwork/rfcs/blob/master/rfcs/0025-simple-udt/0025-simple-udt.md),为 UDT 可能需要的额外行为提供了空间,例如合规性要求和治理。xUDT 更像是可扩展的框架,就像 Chrome 浏览器一样,我们可以为其创建各类扩展。xUDT 本身并未指定或实现任何具体的 UDT 行为。当你想创建一个新的 UDT 时,这些扩展可以以一种灵活的方式组合和使用。与 sUDT 一样,我们将提供一个 xUDT RFC,审核通过后默认部署在主网和测试网上。
工具
CKB 与现有的智能合约区块链有着根本性的不同,因此它遇到了每个新平台都会遇到的共同问题:缺乏工具。这也是为什么我们在 2020 年初致力于开发工具,并日以继夜地进行工作的原因。随着各类 CKB SDK、ckb-indexer、ckb-x64-simulator、lumos、Capsule、animagus、mandrake 等一系列工具的发布,开发应用的门槛降低了很多,我们可以看到有很多开发者已经开始使用这些工具在 Nervos 上搭建应用了。2021 年,我们会继续改进现有的工具,并给大家带来一些新的工具。
Tippy
Tippy 是 Nervos CKB 上一套完整的 dApp 开发套件。它旨在提供所有在 CKB dApp 开发中能派上用场的工具。Tippy 的功能列表,包括:
一键启动一条新的 CKB 区块链。你还可以调整区块链参数,甚至可以将当前的主网/测试网区块链分叉成本地的区块链。 区块的挖矿速度任由你调节。你可以挖 3 个区块,回滚 2 个区块,然后再挖 1 个区块。你也可以通知 Tippy 使用 3 秒的时间间隔后再挖 10 个区块,甚至你还可以控制每个区块中的交易,例如你可以让 Tippy 向 CKB 提交一笔交易,但绝不上链。 内置迷你的 CKB 浏览器,以改善开发者的体验。它将为开发者提供更多便捷的功能,包括交易可视化、查找脚本/数据哈希、即时的 cell capacity 使用情况、签名消息计算等等。 内置交易调试器,所有失败的交易都会被收集起来。你可以在任何时候启动任何一笔交易的调试器,所有被调试的交易的二进制文件都可以转换成符合调试信息的文件。 一个可以通过编程的方式启动所有上述功能的 API 层,这意味着 Tippy 不仅是你调试的好朋友,也是你构建集成测试的朋友。
Tippy 的第一个稳定版本计划于 2021 年第一季度末发布。2021 年,我们将继续完善 Tippy,为开发者提供更好的体验。
aML
aML 是一种新的编程语言,用于编写 Nervos CKB 的智能合约。aML 这个名字是「aML is a ML」的递归缩写。尽管 aML 提供了一种现代编程语言,具有许多便捷功能(静态类型、模式匹配、垃圾收集器以简化内存管理),但其中有一个功能在智能合约的编程中特别有用——形式验证:不仅该语言在设计时内置了一流的、最先进的、源代码级的形式验证,而且从 aML 到 CKB VM 中使用的 RISC-V 汇编的整个编译器也是经过形式验证的。这种独特的设计让 aML 从我们今天所使用的大多数其他编程语言中脱颖而出,包括 C、Rust、JavaScript 等。我们希望这个完全经过形式验证的语言,包括经过形式验证的编译器,能够帮助并确保 CKB 智能合约的最大安全性。
我们计划在 2021 年发布 aML 的初始版本供大家使用。
密码学原语
CKB VM 有别于其他区块链虚拟机的一个独特之处,就是能够提供灵活的密码学原语支持。截至 2021 年 1 月,我们还没有看到第二个能以智能合约的形式、支持灵活的密码学原语的区块链虚拟机。2021 年,我们将继续在这方面努力,希望将更多的密码学原语带入 CKB 的世界中:
有效实现椭圆曲线 alt_bn128。有了这个,Polyjuice 将能实现与以太坊的完全兼容。其他利用该曲线的应用也可以从中受益。 实现 BLS 签名。不仅 Godwoken 能够利用 BLS 签名实现提速,而且其它有聚合签名需求的应用也可以从这个实现中受益。 这里也考虑了其他密码学原语。例如,我们将研究把完整的零知识证明算法引入 CKB VM 的可能性,以实现更多的使用案例。一旦形成更加详细的计划,我们将会对外分享。
互操作性 2.0
Force Bridge
Force bridge 是一个通用的跨链框架,促进区块链之间的资产转移。在这个框架之上搭建的第一个桥是 CKB-ETH 桥,它支持 CKByte、ETH、sUDT 和 ERC-20 资产在 CKB 和以太坊之间的转移。最新版本部署在 Aggron 和 Rinkby 测试网上,并提供了一个 GliaDEX 演示,展示了互操作性 2.0 的能力。
2021 年,我们将在主网上审核并部署 CKB-ETH 桥。之后有两个方向可以走:
在 CKB 和 Ethereum 上完成 SPV 头验证智能合约,让 CKB-ETH 桥更加去中心化。
在 CKB 和其他区块链之间搭建新的桥梁。
我们会先选择第二个方向,因为半无需信任的桥对于目前大多数用例来说已经足够安全了,而新的桥会为 Nervos dApp 和用户带来更多的资产。我们也希望在硬分叉后保持第一个方向,这样如果区块头结构发生改变,我们就不会浪费精力。最初的计划是为比特币、EOS、TRON 和 Polkadot 建立新的桥梁。
Gliaswap
2021 年,随着 Force Bridge、Godwoken/Polyjuice 和 pw-lock 的成熟,互操作性 2.0 的梦想将比以往的任何时候都要更加接近。
我们已经在测试网上展示了 GliaDEX,一个订单簿模式的 demo。接下来的 Gliaswap,它不仅仅是一个 demo。Gliaswap 是 Nervos 上开源的、采用 AMM 模式的 DEX 模板。它也是一个完整的、准备就绪的 DEX 实现,包括链上智能合约和链下组件。它默认提供一个易于部署的 vanilla AMM,可作为更复杂的 DEX 的基础。它具有和你在 GliaDEX 演示中看到的相同的互操作性,并且它提供了更好的流动性,因为任何用户都可以向其流动性池贡献流动性。任何达到基础技术水平的人都能够在 Nervos 上部署他/她自己的 AMM,任何编程技能合格的团队都能够分叉并构建自己的 AMM 版本。
作为一个模板项目,我们希望 Gliaswap 不仅能展示如何在 Nervos 上构建 DEX,还能启发开发者如何在 Nervos 上构建互操作性 2.0 的 dApp,或者是 Uniapp。目前 Gliaswap 的开发工作进展顺利,预计将在几个月内完成。
展望未来
希望你能喜欢 Nervos 2021 年的技术路线图!加密世界瞬息万变,在如此多变的环境中,通常很难找到正确的道路,我很高兴我们找到了一条,而且时间正在证明这条道路的价值:
当每个人都在谈论 PoS 时,我们拥抱了 PoW;
当每个人都在追捧分片技术时,我们选择了二层网络;
当你只能找到账户模型的时候,我们探索并扩展了 UTXO 模型。
我们让 RISC-V 在区块链虚拟机领域成为 EVM 和 WebAssembly 的有力竞争者。这些选择给我们带来了互操作性 2.0,并且还将会有更多激动人心的事情发生。花园里无人行走的小路,虽然充满了荆棘,但也充满了神奇的景色,我们满怀信心。让我们尽情地沿着自己的道路狂奔吧,酷的像风,野的像狗。
最后,非常感谢 Ian(CKB)、雪洁(CKB VM、工具)和 Wenchao(Force Bridge)在相关章节的贡献。
Nervos 将于近期公布 2021 年生态发展路线图,欢迎关注第五期的 Town Hall Meeting(下周二),敬请期待🎉