Cartesi 将 DApp 的开发环境转向了 Linux,希望以此降低 DApp 开发门槛,让 DApp 得以更进一步地发展。

原文标题:《dApp 达到 App 的体验,可能吗?》
作者: 蓝狐笔记

在现实商业的应用场景,所涉及的计算是巨大,甚至有数万亿的逻辑步骤计算,要处理大量的数据,这在区块链上几乎是不可能完成的。

区块链的扩展问题是行业关注的焦点之一。因为,只有解决了扩展性问题,才能为区块链走向主流铺平道路。只有解决了扩展性问题,才能让 dApp 的用户体验达到 App 的用户体验水平,才能推动普通用户进来使用。

区块链是一个去中介化的无须许可网络,任何人都可以参与,这意味着区块链要达成共识,共识带来安全,但同时也带来了极高的成本:交易吞吐量小,交易处理时间长、费用高。

为了解决这些问题,目前有一层扩展和二层扩展的方案。一层(layer1)是横向扩展,目前主要有分片、共识机制的优化(如 DPoS)等。二层(layer2)是纵向扩展,包括 Plasma、状态通道、侧链等方式。迄今为止,有一些进展,但还不足以让扩展性发生根本性的改变。尤其是考虑到它们还无法满足 dApp 的扩展性需求,如游戏、社交网络等。这些 dApp 都无法真正一展拳脚,尤其是涉及到大规模计算时。

那么,有没有方案能够解决这些问题?能够让 dApp 达成 App 的体验?能够让普通用户真正使用上 dApp,享受到 dApp 带来的好处?

蓝狐笔记最近关注到 Cartesi 项目的解决方案,让人印象深刻。它在二层(layer 2)上的扩展方案有自己非常独特的切入点,值得 dApp 开发者和整个区块链行业的关注。

Cartesi 试图成为区块链的计算层

区块链主链上计算和存储的成本非常高,像游戏、社交、视频等领域的应用都无法在主链上直接运行。大规模的计算必须在链下进行。

那么,如果不是基于区块链运行应用,跟传统的 App 有什么区别?

这里的解决思路是,从实际场景的需求本质出发,而不是在技术上进行死磕,陷入死胡同。我们没有办法就所有事情都达成全局共识,而实际上,我们也没有必要就所有事情达成全局共识。

大多数情况下,我们只需达成局部共识。只有极其重要的数据才需要达成全局共识。大多数事情,往往都是小部分参与者之间才真正感兴趣的,只要这小部分参与者之间达成共识就可以了。比如,我们去超市买一瓶水,我们没有必要跟律师打电话,也没有必要让地球上的所有人都知道你买了一瓶水。只有在发生纠纷时才需要进行仲裁。

基于这种思路,产生了 layer 2 的解决方案,而 Cartesi 就是其中的一种解决方案。Cartesi 不是公链,它是去中心化的通用计算平台,试图成为区块链的计算层,旨在为公链和 dApp 开发者提供通用计算服务。

Cartesi 作为区块链的计算层,它将底层链智能合约执行所需的大量计算接手过来,让底层链发挥其安全特性,专注于价值存储和转移,专注于结算结果的存储;与此同时,dApp 开发者基于 Cartesi,可以使用熟悉的编程语言、工具、库、软件以及服务来开发 dApp。dApp 的大多数复杂计算逻辑都通过链下来解决,开发者只须专注于业务逻辑的构建,但与此同时,能够开发出类似于 App 体验的 dApp 应用。

有了其他 layer2,为什么还需要 Cartesi

Layer2 分担了 layer1 的扩展性压力。layer2 的存在不仅是为了解决 layer1 中全局共识资源高昂成本的问题,更是为了顺应这样的一种事实:并非所有的事情都需要达成全局共识。

只有跟该共识相关的群体才需要达成一种共识。部分参与者的协作可以在链下进行,但为了防止出现纠纷,一般情况下,layer2 的参与者需要在链下交互时存入押金,如果是以太坊链,一般会存入 ETH。

通过质押资产,所有参与者在链下进行互动,然后将其互动操作的重要结果提交到主链,主链完成全局状态的更新。如果这个过程中,有任何参与者产生恶意行为,其他相关方可以向主链发起申诉以寻求解决。恶意行为一旦得到确认,恶意行为者的抵押资产可能会被扣除。

Layer 2 的模式将 layer1 不仅看作为价值存储和转移的地方,也视作为具有最高安全性的共识仲裁法院。而 layer 2 是各种局部参与者之间进行互动的地方,大家都受制于奖惩机制,受制于具有公信力的 layer1 的制约。

Cartesi 也有类似的思路,只须参与方才需要执行大量的链下计算,计算结果提交到链上合约进行验证,确保执行结果的可信。

虽然基本上 layer 2 都是这种思路,但 Cartesi 也针对 layer 2 的一些不足进行了改进。

比如 layer 2 方案要求主链可以解决可能出现的纠纷。有时候会出现糟糕的情况,比如需要在通道开启时,把大量计算传到主链,这些交易的关闭机制会限制最大计算量。Cartesi 则允许 Plasma 或状态通道利用 Cartesi 的计算能力,也就是将计算通过 Cartesi 来解决,而不是转移到主链。在这些 layer 2 的解决方案中,如双方都需要密集计算才能完成争议处理,而主链很难解决这样的大量计算问题。

此外,Cartesi 跟其他 layer2 解决方案不同,它不一定要求 dApp 应用的各相关方同时在线。

这就是 Cartesi 相对于其他 layer2 方案的不同之处,从本质上来说,它不仅是 layer 2 的解决方案,更是去中心化的通用计算平台,连接了公链和 dApp 的开发者,为双方提供计算服务。

Cartesi 如何运作?

从整体的思路上,Cartesi 跟多数 layer2 方案有相似之处,不过在具体的解决方案上,Cartesi 有它的独特之处。

Linux 的开发环境

Cartesi 推动了一种 dApp 的开发模式,它将 dApp 的开发环境提到了新的高度:转向了 Linux 开发环境。

Cartesi 虚拟机旨在为 dApp 的大规模运行提供支持,所以,它要考虑解决当前智能合约虚拟机的问题。现有的智能合约虚拟机运算相对简单,比如执行账户余额的运算、计算哈希值或调用合约等。

而现实的商业应用需要能响应设备、分配内容、跟其他程序复杂交互、海量的计算执行等。有了操作系统的支持,这些应用可以有序运行。指令集体系结构和操作系统相互支持,硬件可以为操作系统提供硬件功能,操作系统通过这些功能来协同所有程序的运行。

当前的智能合约虚拟机还无法实现类似功能,它们并没有操作系统的支持。

为了解决这个问题,Cartesi 引入了开源的 RISC-V 指令集体系结构,Linux 内核已经移植到 RISC-V 上,RISC-V 有成熟的编译器。

也就是说,Cartesi 准备通过这种方式,将链外的计算能力引入链上。

同时,Cartesi 节点还可以让 dApp 开发者在本地运行代码。在本地执行代码和在 Cartesi 虚拟机系统内执行代码,都会在 Linux 操作系统下运行。Linux 可以提供复杂计算所需要的完整生态系统。

Cartesi 虚拟机

基于 Cartesi 上开发的 dApp 包括链上和链下模块。其中链下模块在 Cartesi 节点内运行。当然,也可以在本地执行代码,但本地计算不可重现。要实现重现,必须运行在 Cartesi 虚拟机中,在 Cartesi 节点中执行代码。那么重点来了,这是 Cartesi 项目中需要关注的重点之一,它就是 Cartesi 虚拟机。

Cartesi 虚拟机有两点值得关注:一是完全独立。二是计算可重现。它的独立性意味着可以实现确定性,无须担心外部输入以非确定性方式来改变机器的状态(键盘、时钟中断等)。它的计算可重现意味着其具有可信的特点。Cartesi 虚拟机从相同的初始状态开始运行经过相同的处理器周期,最终会达完全相同的状态。

也就是说,Cartesi 中的可重现计算运行在确定性的 RISC-V 虚拟机上。它受 Cartesi 节点控制,且自包含了 Linux 系统,节点通过一些确定的主机接口与 Cartesi 虚拟机进行交互。

对于 Cartesi 的 dApp 开发者来说,他们可以指定链下计算采用可重现的方式,Cartesi 的节点会根据指定执行。dApp 开发者可以请求节点提交计算结果,并在链上进行验证。在这种情况下,主链处理争议结果无须占用太多资源。

同时,Cartesi 虚拟机需要考虑区块链的验证要求。为了实现可信,整体架构的实施必须容易审计和开放。这也是 Cartesi 采用 RISC-V 的重要原因。

RISC-V 有很多社区开发者支持。他们搭建了软件的基础底层,如 Linux 操作系统的端口和 GNU 工具链。Cartesi 虚拟机以确定性方式将其整个状态映射到物理内存。

Cartesi 虚拟机的链下执行除了完成计算执行之外,还支持解决有关计算结果的争议。为了提供这些服务,Cartesi 虚拟机的链下执行有可编程的接口。

Cartesi 虚拟机也是透明的,任何人通过任一时刻的虚拟机状态,都可以预测下一个处理器周期指令完成后的状态。Cartesi 的这种设计机制保证了可信计算。获得 Cartesi 虚拟机初始状态的不同各方在各自的 Cartesi 节点中运行 Cartesi 虚拟机都会获得完全一致的结果。Cartesi 虚拟机的状态可以通过默克尔树表达,也意味着可以通过链上实现仲裁。

将 DApp 开发环境转向 Linux,这是 Cartesi 的破局思路Cartesi 虚拟机的链上和链下

其中链下 Cartesi 虚拟机主要由内存和各种驱动器组成。其中,Linux 内核被加载到内存中,其中有的驱动器会包含 Linux 文件系统。驱动器被看作为 Cartesi 节点中的普通文件,Cartesi 虚拟机将普通文件当作设备给 Linux 内核挂载,这些设备被挂载后,对于 Linux 下运行的程序来说,就相当于能读写文件和目录的文件系统。

通过默克尔树的状态哈希,Cartesi 虚拟机将其状态在链上呈现。状态包括内存和驱动器、以及其他 Cartesi 虚拟机运行所需的内容。通过默克尔树的根哈希,可以判定局部的子状态是否正确。

争议的解决机制

当 dApp 的参与方相互之间产生纠纷时,怎么办?首先,挑战方会存入抵押资产发起诉讼,如果被挑战方想要进行自我辩护,也需要存入同样价值的抵押资产。

然后双方陈述过程,链上通过根哈希状态的对比,进行判决。智能合约会查出双方在运行 Cartesi 虚拟机第一次产生不一致结果的指令。之后,智能合约通过在链上执行此条 RISC-V 指令,从而获得状态的根哈希,智能合约将其与双方的根哈希进行对比,这样可以判定谁的结果是正确的。

为了惩罚作恶者,获胜一方将获得对方的抵押资产。这可以防止作恶的行为。此外,在链上运行单个 RISC-V 指令相对轻松,因为查出第一次不一致的指令相对容易。链上的工作主要是保持哈希的更新,不用关心 dApp 的逻辑,也用不存储 dApp 的操作。同时,由于作恶存在成本,且也能被发现,这导致作恶行为会比较少见。

Cartesi 与 TrueBit

之前有个项目叫 TrueBit,它也有类似的思考架构,将密集计算移至链下,并在链上进行验证来解决争议。虽然基本的思考架构类似,Cartesi 跟 TrueBit 的具体解决方案存在不同。

TrueBit 基于 WebAssembly 做的虚拟机,而 Cartesi 是基于 RISC-V 的指令集架构。前者是应用级别,后者是操作系统级别。WebAssembly 会带来外部性,也就是不确定性,因为它用于应用间的协同、应用和用户或节点的操作系统的交互。而 RISC-V 更加底层,具有确定性。

此外,TrueBit 更专注于智能合约计算能力的扩展,对运行环境更有约束,而真实场景的应用存在交互,Cartesi 选择支持 Linux 的运行环境,RISC-V 能提供更好的服务。

此外,在链下计算的动力方面,TrubeBit 跟 Cartesi 存在很大差异。Cartesi 的链下计算是依赖于智能合约背书,所有参与者都有责任执行链下计算,一旦出现争议,需要提交到链上解决。而 TrueBit 需要通过激励层的设计来解决纠纷。在 TrueBit 上,智能合约将计算的需求提交到由不可信方构成的市场,由其中的参与者执行链下计算并返回结果。为了保持成员的参与度,带有错误结果的计算诱饵会被投放到激励市场,这是相对低效的激励。

此外,Cartesi 也考虑了应用中可能出现的大存储问题,通过 Cartesi 虚拟机,将代码和数据状态的哈希值提交到链上,计算只需在相关参与者节点中执行即可,这也使得 Cartesi 能够做到链下计算的跨链。这些是 Truebit 没有设计的。

Cartesi 对于 dApp 开发者意味着什么?

Cartesi 将密集计算从底层区块链中解放出来,将复杂的逻辑放到链下进行可重现计算。Cartesi 虚拟机是确定性的计算模型,可以托管现代操作系统。Cartesi 虚拟机上的标准工具链和操作系统是可用的。这为开发者提供了很多方便。

对于 dApp 开发者来说,Cartesi 意味着新的 dApp 开发范式。如果 Cartesi 能顺利落地,dApp 的开发者们可以专注于业务本身的构建,而不用担心是否懂区块链的底层,因为 dApp 的开发者可以使用熟悉的编程语言和工具来开发 dApp,这大大减轻了 dApp 开发者的研发成本。

与此同时,Cartesi 节点为 dApp 开发者提供了大规模可信计算,开发者们可以使用可重现计算的 Cartesi 虚拟机。可信计算通过原语集成到公链智能合约,原语能够提供灵活性和复杂逻辑的计算能力。在 Cartesi 虚拟机计算中如出现有争议的结果,可以通过主链进行仲裁。

此外,由于大规模的链下计算,基于 Cartesi 构建的 dApp 可以实现在多个链上运行。

总言之,Cartesi 对于 dApp 开发者来说很友好,这将解锁去中心化应用的潜力,开发者能在熟悉环境下利用 dApp 的优势,构建出跟之前完全不同的应用。

结语

要想 dApp 达成 App 的用户体验,公链需要存储层和计算层的帮忙。关于存储层的项目,蓝狐笔记之前也提到过,这里不做赘述。而计算层方面也是值得关注的部分。

Cartesi 的目标旨在成为区块链的计算层,为公链和 dApp 开发者提供去中心化的通用计算平台。

对于公链来说,Cartesi 可以帮助其专注于底层链的安全和价值存储,帮助其构建更大的开发者生态;而对于 dApp 开发者来说,基于 Cartesi 开发 dApp,可以使用熟悉的编程语言和工具来进行开发,既能享受到 dApp 的优势,同时还能有 App 级别的用户体验。

随着区块链行业的深入发展,整个行业的生态拼图将会日趋完善,不仅有公链、dApp,也有为公链和 dApp 服务的存储层、计算层等。这些拼图相互补充和协作,最终推动区块链行业发生质变,从而将区块链的影响力提升到新的高度。

来源链接:mp.weixin.qq.com