详解 Starknet 全新客户端 Beerus

in 生态 with 0 comment

概要

以太坊状态是所有以太坊帐户的综合性记录,记录每个帐户余额、部署的智能合约、相关存储等信息。随着新帐户不断增多以及部署新的智能合约,以太坊状态也会无止境的扩大。

尽管各类扩容解决方案的目标都是为了降低以太坊状态增长的影响,但其总体趋势仍保持向上增长。上述设计特点导致以太坊状态规模的无止境增长,会有多种影响。对网络参与者而言,能够验证以太坊上所有数据准确无误至关重要,因为运营者和用户要去确信自己进行交互的都是有效信息。

在 2017 年社区首次意识该问题,并提出了无状态以太坊的概念。与字面意思不同,在以太坊中「无状态」并不是没有状态。正如 Ben Edginton 所言:「无状态」含义是把提供和存储以太坊状态的责任,委托给网络中的另一参与方。简而言之,由无状态以太坊客户端选择想要维持的状态。

轻客户端和无状态客户端

虽然轻客户端和无状态客户端都致力于解决以太坊状态规模无限制增长的难题,但两者间的细微差别是:轻客户端需要一些以太坊状态相关信息,但像 Beerus 这类的无状态客户端则无需任何以太坊状态信息。

Beerus 是 Starknet 无状态客户端,采用以太坊轻客户端 Helios 构建。

Starknet 在协议中集成了加密证明,为轻客户端和无状态客户端打造出亮眼表现,同时也拥有以太坊所不具备的功能。它们不仅能让网络参与者验证共识,还能无需信任的验证状态有效性。

轻客户端未来可期

轻客户端和无状态客户端都有潜力能更改区块链领域游戏规则。

轻客户端的运作方式

简化后的轻客户端运作过程:

  1. 轻客户端下载以太坊区块头,包含了每个区块的默克尔树根。

  2. 轻客户端用这些区块头去验证以太坊共识的有效性,无需下载每个区块的完整内容。(在 Starknet 中,加密证明都构建在协议中,轻客户端可以验证状态和共识的有效性。)

  3. 当用户想要与智能合约进行交易或交互时,轻客户端向全节点发送请求。全节点再反馈完成交易所需的信息。

  4. 轻客户端采用下载好的区块头确保全节点反馈的信息有效。

  5. 交易完成后,轻客户端下载已经添加到网络中的区块头来更新区块链副本。

获取根哈希

在以太坊中,每个区块都包含了该区块所有交易的默克尔树。默克尔树是一种数据结构,可以有效验证单笔交易,而无需验证整个区块。默克尔树根哈希是整个 默克尔树的加密哈希值,包括在每个区块的区块头中。这个根哈希代表了到最新区块为止的整个区块链状态。

以太坊轻客户端需要这个根哈希值来验证区块链上最新区块的真实性和状态。通过验证默克尔树根哈希值,轻客户端可以确保最新区块没有被恶意篡改。

轻客户端有两种方式来获取根哈希值:依靠全节点或同步委员会。

全节点验证

轻客户端依靠全节点来获得带有根哈希值的最新区块。全节点跟踪到最新区块的所有的签名并进行验证。然而,这种资源密集型的方式需要轻客户端依靠一个中心化的权威机构来获得最新区块,违背了运行轻客户端的目的。

同步委员会

以太坊共识层中,同步委员会是随机选择的 512 验证者 (validator) 组成的小组。每 256 个周期(约 27 小时)就会选择一个新的委员会。委员会负责签署每个新槽位的区块头。如果超三分之二的同步委员会认可状态,轻客户端就可以认为状态是正确的。

同步委员会和轻客户端一起简化验证过程。轻客户端只需要知道以前验证过的区块头,并有之前、当前和下个同步委员会成员信息来验证以太坊状态。这样一来,轻客户端就可以验证已验证区块的准确性,而无需访问整个验证者集或历史状态。这种方法大大降低了验证区块头所需的计算能力。

弱主观性检查点

为找到当前的同步委员会,轻客户端需要获得弱主观性检查点。弱主观性检查点类似于创世区块,但它并不处在区块链的创世位置。它只是表示整个网络承认的一个区块,作为标准链的永久组成部分。

弱主观性检查点与最终确定区块的概念不同。当一个节点遇到两个相互冲突的最终确定区块时,就会发生共识失败,节点无法决定标准分叉。然而,如果一个节点遇到一个与弱主观性检查点相冲突的区块时,就会立即拒绝。在节点的分叉选择方面,最近的弱主观性检查点作为网络的新创世区块。

Helios

Helios 由 a16z 开发,是基于 Rust 的以太坊轻客户端。两秒即可同步,需要的存储空间非常少,完全保证无需信任访问以太坊。Helios 无需运行全节点,与中心化 RPC 供应商合作就可以验证以太坊状态的真实性。Helios 使用方便,用户可以从任何设备安全存取链上数据。

与其它大多数以太坊客户端不同,Helios 把执行层和共识层紧密结合起来。这样 Helios 用户就只需要安装和运行一个软件。

Beerus

Beerus 受 Helios 启发,并使用 Helios 的 Starknet 无状态客户端。目标是提供一个简单易用的客户端来查询 Starknet 状态,并使用上述的 Merkle 证明与合约进行交互。

组件 Beerus Core 非常重要,所有繁琐运作由他完成。通过运行 Beerus Core,与两个不受信任的 RPC 源进行通信,即 Helios 轻客户端的执行层和 Starknet 全节点,获得对所有以太坊端点的访问。这就是神奇之处,Beerus 把这些不受信任的数据转变为受信任的数据。

Beerus 运作方式

我们来以查询 Starknet 合约的存储值为例,对 Beerus 的工作原理做一个概述:

  1. Beerus 与 Helios 同步,而 Helios 又通过一个弱主观性检查点与同步委员会同步,这个检查点确保了 Helios 收到的根哈希值的可靠性。

  2. 接下来查询 Starknet,检查给定的合约存储秘钥是否存在。

  3. 然后从 Starknet 全节点收到最近已验证的区块存储证明。这个存储证明验证最近验证区块的存储合约是否存在。

  4. Beerus Core 继续从 Helios 请求 Starknet 状态根,获取并验证发布在以太坊上的 STARK 证明。

  5. 从以太坊收到的证明与 Starknet 全节点收到的存储证明进行比较。如果证明相符,则可以确认数据已在以太坊上得到验证,因此是准确的。

  6. 最后,经过验证的数据以无需信任的方式返回给用户。

总结

Beerus 是 Starknet 的无状态客户端,使用以太坊的 Helio 轻客户端构建,可以实现无需信任的状态验证。轻客户端和无状态客户端有潜力让 Web3 基础设施去中心化,并解锁各种早期不可能实现的用例。

Beerus 无需大量状态信息,只需要根据以太坊上发布的 STARK 证明就可以验证 Starknet 存储证明。这样一来,Beerus 将不受信任的数据转换为可信任的数据,甚至可以让资源受限的设备在不依赖全节点的情况下安全地运行。

参与建设

对安全且去中心化的 Starknet 生态建设贡献感兴趣?Beerus 就是你的最佳起点。欢迎开发者们在 Github 上做出贡献,加入 Telegram 参与讨论。

The article has been posted for too long and comments have been automatically closed.