引语:释放区块链的真正潜力
(只有当人类“发明了发明的方法”之后,人类社会才能快速地发展”)
阿尔弗雷德·怀特黑德 (Alfred Whitehead) 曾说过一句名言:“Civilization advances by extending the number of important operations which we can perform without thinking about them.”这句话的字面翻译是指,社会文明的进步需要通过扩大我们可以不加考虑地就自动执行的那些重要的行动的数量”,而我认为更加恰当的翻译是:“只有当人类“发明了发明的方法”之后,人类社会才能快速地发展”。不只是文明的进程,对于人类所发明各项科技技术而言也是如此。在软件的领域中,这种不断提高效率的方式就成为了人们为此预先储存的资料库、各种各样的编程工具工具、操作系统、编译器、解释器和许多其他组件,我们可以利用它们快速的构建而无需每次都要考虑底层系统,以至于我们不用每次都从头做起降低效率。同时现代软件非常复杂,我们只能依靠这些预先储存好的,并且包含着被不断积累下来的资料和内容的工具来构建它。
这一概念也是 Cartesi 的核心诉求:enabling the number of important operations one can do without giving them thought. 可当前的区块链技术中并没有这个特征:执行智能合约的计算机是新型的,但其处理方式很糟糕。过去 40 年中开发和已经开发成熟的软件都不能在它们上实际运行,从而没有任何生态系统可言。因此,我们现在也根本无法为当前的区块链开发任何相对复杂的软件:因为所有基础的,甚至是抽象化(abstractions)的逻辑都必须从最底层开始构建。
请假设想象一下去电脑商店购买新电脑的场景。您被推荐了一款全新的刚被研发的型号,但问题是它无法运行任何程序:尽管应用程序、库、工具、操作系统、编译器、解释器,应有尽有。但是对它来说都没有用,这台最新型号的电脑只能运行它自己风格的代码。这个时候供应商可能会试图说服您,“啊,这样啊,虽然和现在的大部分软件都不兼容,但是我们可以从头开始为这台特定计算机从新开发一套属于它的软件和系统啊”。您听了是否会觉得失望呢?因为我们都知道从头开发一套系统有多麻烦;这就是在高级编译器和操作系统出现之前开发软件的方式。尽管“它”有优越的性能,但这样的计算机将毫无用处。我们已经淘汰了旧的软件实践是有原因的。如果没有过去几十年辛勤构建和迭代的任何逻辑的积累,任何头脑正常的人都不会考虑购买这样的计算机。(依旧是效率问题)
第 1 层(Layer-1)智能合约很像这台计算机,除了它们的速度也超级慢。第 2 层(Layer-2)智能合约被呈现为一台更快的计算机,但在没有解决缺乏成熟生态系统的情况下,它们的用处还相当有限。
Cartesi 除了计算可扩展性的功能之外,还通过将数十年积累的计算机科学知识带入区块链领域,扩展了人们无需思考即可完成的工作。
支持运行主流的工具、库、操作系统和编程语言还有另一个重要的原因:它降低了非区块链开发人员的门槛。从这个意义上说,Cartesi 为开发人员提供了以更易于访问的方式来创建复杂 DApp 的资源。我们相信,通过利用更多的开发人员在提供计算可扩展性和成熟生态系统的计算机上构建 DApp,我们将释放区块链的真正潜力。
之前,我们已经编写了 Cartesi 如何通过我们的链上组件解决计算可扩展性问题。那里详述的想法对于理解本文至关重要。在这里,我们将重点关注链下组件,以及如何解决智能合约缺乏成熟生态系统的问题。我们将深入了解 Cartesi 核心背后的推理,以及它如何在以太坊内运行 Linux 及其所有工具链之类的东西。
(程序员不必在 Solidity 中重新发明轮子:他们只需使用 Python 并导入 Numpy”)
Cartesi Machine 就是我们设计和制造的所谓可以“用于扩展人们可执行的操作的机器”的机器。为此,底层机器架构必须得到现代工具链的支持,并拥有广泛的软件基础设施。同时在实施的过程中还必须是透明的和可审计的,这便要求架构是开源的并且相对简单。考虑到所有这些特性,RISC-V 是我们机器的完美选择。RISC-V 项目诞生于加州大学伯克利分校,并且迅速得到了许多充满活力的开发人员社区的支持和关注。它与Toy architecture相去甚远:RISC-V 支持本地硬件的直接接入,并且能够运行各种软件基础架构,例如 Linux 内核、GNU 工具链、GCC 和 LLVM。在我们的营销活动中(以及在上面的段落中),我们经常提到运行 Linux 的可能性。但是,RISC-V 并不仅限于 Linux:它与其他可能对区块链应用程序感兴趣的操作系统兼容。一个很酷的例子是 seL4,这是一个开源的、以安全为中心的内核,具有端到端的实施正确性证明。在 RISC-V 上运行的其他重要软件是各种编译器和解释器。这使得使用现代编程语言及其整个生态系统编写软件成为可能。程序员不必在 Solidity 中重新发明轮子:他们只需使用 Python 并导入 NumPy就足够了。RISC-V ISA 可以通过多种不同的方式实现。我们的技术论文详细解释了我们的设计决策和修改的逻辑,(如果想了解更多可以通过链接来浏览:超链接:https://cartesi.io/cartesi_whitepaper.pdf)。然而,有两个主要特征需要强调:第一个是算法是被定义过的,并且它的整个状态用一个哈希(hash)就可以概括了。在这种情况下,意味着计算的完整状态和所有中间状态更改是完全指定和可重现的。换句话说,向特定 Cartesi 机器提供特定输入将始终产生相同的输出和状态变化。第二个特性是Cartesi 机器虽然在链下运行,但其结果必须可在链上证明才能有用。这就是两个特征变得重要的地方:目标是将这个复杂而强大的机器转移到区块链的有限环境中。由于算法已经被确定,所以一旦机器及其输入达成一致,两台机器将始终产生相同的结果。该系统如果由运行相同的利益相关方组成,又同样在链下的 Cartesi 机器获得了许可,那么一旦完成,就会对区块链执行产生side-effect。这个时候,链上证明就显得至关重要。似乎不诚实的对手可能会试图通过声称对他们有利的不真实的side-effect来愚弄区块链。然而,任何对计算感兴趣的人都有能力快速注意到可疑行为,并使用区块链来惩罚坏人并强制执行正确的结果。通过这种欺诈检测机制,我们可以放心的在链下运行 Cartesi 机器,并在链上安全地使用其结果。这样,程序员现在可以使用他们喜欢的编程语言编写以前不可能的 DApp。区块链如何做到这一点?我们开发了一个由许多智能合约组成的仲裁系统。它为用户提供了运行交互式争议(也称为验证游戏:https://www.sciencedirect.com/science/article/pii/S0890540113000217?via%3Dihub)的能力,以导航整个链下计算并检测发生欺诈行为的单个 RISC-V 指令。然后在我们匹配的区块链 RISC-V 实现上运行该指令。我们在 Solidity 中编写了实现了完整的 RISC-V https://github.com/cartesi/machine-solidity-step
如果您想了解如何使用这台机器,请查看 Descartes v1 SDK 文档
https://cartesi.io/en/docs/tutorials/descartes-env/
Rollups machine可以被认为是一个不断移动的 Cartesi Machine。我们的 Cartesi Machine的第一个版本执行一次,代表一次计算。另一方面,Rollups Machine将随着时间的推移,在用户与其交互时不断更新其状态。用户通过发送输入与机器进行交互,如 (rollups on-chain) 文章中详细描述的那样。这些机器是负责处理特定 DApp 的输入,为每个输入执行 DApp 的逻辑。在每次输入时,机器都会唤醒,处理输入——达到一个新状态——然后回到睡眠状态。New states并不是处理输入的唯一side effect。机器还可以为每个输入创建输出和消息。DApp 使用这些来对第 1 层(Layer-1)施加影响。输出是要执行的事务,消息是要记录的第 2 层(Layer-2)事件。每隔一段时间,Rollups 链下机器就会向区块链发布一个总结其当前状态的哈希值,以及所有新的输出和消息。如链上文章中所述,这发生在每个进程/周期(epochs)结束时。该哈希受到上一节中解释的类似争议机制的影响。主要区别在于,检查点现在总结了一系列事情——创造了额外仲裁步骤的必要性,以找出欺诈行为实际发生的位置。总之,rollup 依赖于区块链的真实来源和数据可用性,并依赖于 Cartesi 机器进行计算:输入的可信度由区块链的共识保证,输出的可信度由 Cartesi 的欺诈检测机制保证。因此,我们能够利用 Cartesi 机器的力量去信任地执行曾经不可能的 DApp。
除了本文,我们还发布了汇总基础设施重要部分的第一个版本的代码:将链上代码与上述汇总机器连接起来的部分。Rollups 机器和智能合约运行在根本不同的环境中。这就需要一个中间件来管理和控制区块链和机器之间的通信。因此,中间插件(middleware)首先从我们的智能合约中读取数据,然后将它们发送到机器进行处理,最后将它们的结果发布回区块链。为此,我们的中间件(middleware)使用了我们之前发布的 状态折叠
交易管理器
任何对Rollups state感兴趣的人都可以使用中间插件。我们将感兴趣的用户分为两个角色,它们运行不同类型的节点:读者(Readers)和验证者(validators)。读者节点只对推进他们的链下机器感兴趣。他们使用来自区块链的信息,但不会强制执行状态更新,相信验证器将确保所有链上状态更新的有效性。另一方面,验证者有更多的责任:他们不仅要观察区块链,还要努力确保区块链不会接受没有发生的事情(保证链上真实)。您可以在我们的 Descartes v2 GitHub 页面上找到智能合约和中间件(middleware)
https://github.com/cartesi/descartes-v2
您可以随意查看,并且我们很乐意收到您的反馈,我们一如既往地希望任何有兴趣了解更多信息或使用我们的 Rollups 进行构建的人加入我们Discord 服务器上的团队:https://discord.com/invite/Pt2NrnS
Cartesi正在将智能合约推向新的高度。它是一个与链无关的第二层基础架构,解决了区块链上最紧迫的可扩展性问题。最值得注意的是,Cartesi实现了独特的支持Linux的VM,rollups和侧链,以彻底改变开发人员创建区块链应用程序的方式,允许他们使用主流软件组件。