以太坊基金会博客

Eth 1.x:无状态以太坊工作报告

下一次无状态以太坊研究会议将在一周内举行!Telegram的群组中目前有数百条新消息,所讨论的主题中只有一小部分进入到ethresearch论坛。

本文将作为一篇快速概览和常规更新,回顾当前仍在进行探讨的问题,为下一次会议以及EthCC之后的1.x研究者峰会做好准备。

这篇文章将假定读者对目前的许多相关概念有一定了解,因为本文会在此基础上进行延伸。我建议首次阅读的读者先参考《Eth 1.x:如何通向无状态以太坊》以获得更全面的认识。

Eth 1.x的大致发展路径可参考以下图表:

 

研究概览

无状态以太坊计划的目标在于升级当前以太坊协议,以支持“无状态”客户端,在该版本中,并非所有节点都需要保留状态树的最新副本。相反,无状态节点需要依靠完整状态节点 (full state node) 产生的“见证” (witness) 来对新区块进行操作。

见证是无状态研究中的核心概念对象,大部分的研究都遵循两个主要方向:

  • 见证范式以及实现
  • 状态及见证的数据可用性

对于前者,亟待解决的问题包括见证本身的结构、更改状态树范式、客户端数据库实现以及对假设见证的大小和限制进行优化。

对于后者,我们还需要攻克的难题在于网络拓扑、高效的见证传播协议以及量化网络性能和激励措施。

 

已知的必由之路

为了到达我们的目标,有些问题是必定需要解决的。Vitalik的一篇帖子 (更改协议以限制见证大小) 对此有更详尽的阐述:

  • 通过“渐进”或“简洁”策略过渡到二进制树结构。“渐进”式切换需要稀疏的默克尔树,而“简洁”式可能会导致链的暂时中断。
  • 见证将由保留完整状态副本的矿工生成,并应支付一定的gas(包含在交易中)。而这可能会导致EXTCODESIZE、BALANCE、CALL和SLOAD操作码的gas价格上涨。

除了这些普遍问题,我们还有一些可靠数据,来自Igor Mandrigen所进行的实验:

见证大小在二进制树中的表示总是比十六进制更有效,并且其权重取决于见证人,在0.3-1.4 MB之间。[来源]

对于部分状态节点,可以通过将部分数据保留在缓存中并从见证中逐步建立状态来大幅降低存储需求。[来源]

最后,见证规范的初稿已提交至无状态以太坊规范库,目前正在审核中。正式的见证规范是实现无状态原型非常重要的一步。

 

等待拨云见日

Eth 1.x研究中有几项问题属于以下类别:“我们明白其必要性,但是不清楚具体将如何达成,但是对此我们有着乐观的直觉,并且有足够的信心相信其会有效用”。

代码分块 (Code merkleization) 问题就是其中之一。为避免来自合约调用不必要的大型见证,代码分块操作会对代码代码进行拆分,因此交易见证只需要包括被调用的代码部分。目前有一个原型,使用代码中的JUMPDEST指令将代码拆分为更易于管理的大小,但这被认为是一种抽象“泄漏”,因为见证的大小将被暴露给代码语义。更合适的方式是固定代码块大小,如果将少量的元数据放入每个见证中(指定有效的跳转目标),或者在验证代码时强制执行静态跳转,则是可行的。

另一个明显的需求是见证索引,即为所有节点提供某种“规范”标识符,以便在本地验证区块之前看到自己已经为给定的区块检索了正确见证。最直接的解决方案是更改协议,将witnessHash包含在区块头中。这样就可以防止潜在的攻击途径,并明确要求矿工生成见证以建立相关见证。

此类别中还包含大量的“元”项目,这些项目将有助于延续和加速研究。这包括开发者工具(用于测试以及从历史链中提取更多有用数据)、形式EVM语义以及网络模拟平台。

 

已知的未知

许多有关网络的更基本的问题都属于“未知”。在我们满怀信心朝着既定方向前进时,需要对这些问题注入更多精力。

同步节点时发现和传递数据在无状态以太坊研究中备受关注,因为与当前同步范例不同,新节点无法确定随机分配的对等节点拥有自己执行当前区块所需要的状态。

因为当前协议没有为客户端提供已连接对等节点可用状态的查询接口,所以这不是一个简单的问题。至少,未来节点将需要具备向其对等节点查询不同类型数据的能力,例如块头、收据、交易和特定的状态部分。这里有很多悬而未决的问题,涉及如何将数据传递到请求节点、全节点如何在遍布无状态节点的网络中对自身进行定位以及网络如何防止状态数据永远丢失。Piper Mirriam在ethresear.ch上对该主题进行了更进一步的阐述

这些距离目前更遥远的问题的固有挑战是,只有基于合理行为和当前活动的假设才能对无状态以太坊的网络拓扑进行猜测。与Eth2的研究不同,无状态以太坊与Eth1链相似度高,因此Eth1的历史数据对于测试来说具有相关性和有用性。目前仍需要数量更多的、质量更好的数据来推进有关网络拓扑的进一步工作。

一旦我们有了可靠的beam同步节点集群来进行研究和攻击尝试,就能够进行量化研究。Beam同步节点本质上算是无状态节点的低配版本,使用“原始”原语(getNodeData)收集(并保留)丢失的状态。通过尝试中断beam同步,然后根据经验进行调整,使beam同步更接近真正的无状态同步范式,我们可以获得很多关于网络原语的有用信息。

尽管Vitalik提出的新Eth1至Eth2过渡提案与1x小组的当前想法最为贴合,但最终将如何过渡到Eth2的具体问题仍未得到明确答案。

 

巴黎见!

1x研究者将于EthCC之后的周末在巴黎碰头,针对目前的问题进行讨论并制定解决方案。这次面对面的小型研究峰会将非常有助于推动当前工作,并就无状态以太坊中更复杂的挑战进行合作。Allons-y! 冲呀!

 

第四次无状态以太坊电话会议

下一次会议将于2月25日进行。如果您想要参与,请联络@JHancock。一如既往,可以向@gichiba提供反馈或是提出你的看法。

原文链接:https://blog.ethereum.org/2020/02/18/eth1x-files-the-statelessness-of-the-union/