聊一聊: 无状态客户端,不同 Rollup 方案,DeFi 会成为密码资产银行的底层,智能合约型钱包, 以太坊 2.0
本文是阿剑在「火星号嘉宾有约3月开讲啦」第6期的分享整理。
本次分享题为 “以太坊上正在发生什么”,是希望给大家做一个概述。以太坊网络比起往日已成熟了很多,内涵也日渐丰富,每一个热门词条都值得拿出来深入探讨,但细分领域有更多比我专业得多的人,而且一些主题也并非我能胜任,我于是希望把我平时关心的领域,拿出来跟大家做概览式的分享。希望能帮助大家了解以太坊的发展方向。
我的分享分为两个部分,第一部分跟以太坊当前的 PoW 链有关,第二部分跟以太坊 2.0 有关。第一部分会提到以太坊 PoW 链的研究方向“以太坊 1.x”、二层扩展方案以及 DeFi;第二层会按以太坊 2.0 的不同阶段作基本的介绍,重点会放在即将上线的 Phase 0。
在以太坊 2.0 路线图刚刚公布的时候,不少关心以太坊的人都有一个疑问,如果大家的重心都放在以太坊 2.0 上,那这条 PoW 链怎么办呢?谁来维护呢?
早在 2018 年 Devcon4 期间,就有开发者已经意识到了这个问题。当时备选的有两种方向:
1)对 PoW 链仅做基本的维护,放弃大的更新;
2)坚持对 PoW 链推进重大变革,把 2.0 的研究及开发交给别的团队。
后者就是所谓的“以太坊 1.x”方向。这个方向是有其道理的,因为以太坊 2.0 的发布时间并不确定,在发布以前,仍必须保证 PoW 的链的长期可持续发展。后来,有更多人接受了以太坊 1.x 方向,这个路线也就确定下来。
基本上,以太坊 1.x 是希望解决以太坊 PoW 链面临的一些根本性问题。其中一个就是众所周知的 “状态爆炸问题”。在以太坊协议的运行中,为了实现快速的区块执行(区块验证),会产生出一部分代表账户余额、合约代码、合约存储内容的数据(就像比特币的运行会产生出一系列 UTXO 的集合),我们叫“状态数据”(没有某个账户的最新状态,你就不知道这个账户里是不是真的有 5ETH);这部分数据的体量会随着账户数量的增加而不断增加,而且,每次访问的状态及输出的状态的存储位置都是不确定的。
状态数据爆发式增长会带来两个问题:
1)因为访问及输出的状态的存储位置不确定,就会使运行以太坊客户端的节点产生大量的硬盘随机读写需求(这就是为什么需要用固态硬盘来运行以太坊客户端),而且这部分需求会越来越高,不断提高参与验证以太坊网络的硬件成本,造成网络节点数量的减少及集中化;
2)使得新节点加入网络变得越来越难,因为新节点在刚加入网络时需要向其它节点请求的状态数据会变得越来越多。
而以太坊 1.x 的解决思路就是 “无状态以太坊”,让验证交易所需的状态证明(叫做 “witness”)随区块一起传播。收到交易及 witness 的节点可以通过本地储存的状态根(以太坊状态是用默克尔-帕特里夏树来表达的,所谓状态根就是默克尔树的根值,是一个哈希值)来校验 witness 的有效性,并进一步检验交易的有效性。如此一来,节点就不用在本地大量访问状态数据并写入状态数据(这就是为什么它叫做“无状态”)。
无状态模式有很多好处,首先是因为交易本身整合了验证交易所需的数据,验证交易会变得更快,能提高节点的处理速度;其次,无状态模式下,数据本身被拆解了,那么一些客户端就可以根据自己的数据需求做定向的优化,比如可以有仅提供 DeFi 应用的交易及 witness 的节点。
可能关注的人不多,但无状态以太坊的思虑是很深远的,要解决的问题也是根本性的,涉及到 PoW 链的长期稳定性。我自己也相当看好这个研究方向。
虽然听起来有这么多好处,在实践中它会遭遇很大的一个问题,就是它需要额外的带宽。在当前的实际运行中,以太坊区块的平均数据量大小是 20 多 KB。但是,目前的研究表明,即使我们对以太坊状态树的实现作一些改进,无状态客户端所需的 witness 大小仍然在 0.5MB 左右。对当前的以太坊网络来说,负担太大了。见证数据大小是无状态模式要克服的首要调整,如果大小降不下来,就几乎不可能实行。
不过,好消息是,无状态以太坊的研究(算是)已经产生出了一个成果,就是 Beam 同步方式。Beam 借鉴了 Fast 同步方法和无状态模式的优点,下载到最新区块之后便开始一边请求验证交易所需的状态数据,一边在本地尝试恢复完整的状态。这种方法对硬件有一定要求,而且当前实现的效果还不稳定。但是运行良好的情况下,能在下载完区块头数据后几分钟内转入完全验证模式。也是一大突破。
希望大家能对无状态方案给予更多的关注。即使它当前不可行,这一方向的研究也会为以太坊协议的改进提供许多灵感。参考文献:
Layer-2 扩展方案的提法也是由来已久。大概在 2017 年就有人提出这个概念了。所谓 Layer-2,就是把交易的执行放在链下,即不是由运行以太坊客户端的节点来执行,由另一些计算机来执行。比特币网络上的闪电网络,就是著名的 Layer-2 方案。
使用 Layer-2 方案的用意在于提高吞吐量:如果交易的执行不放在区块链上,自然就能组织多群计算机为无相关的交易做并行的执行(支付就是这样一种大多数时候都可以并行的场景),仅在资金需要用于与 Layer-1 的合约和用户交互时才让底层区块链来结算 Layer-2 上资金的状态并执行交易。
那么,作为一个大家已经提了一段时间的概念,是什么让 Layer-2 在去年年末出现观念上的爆发并获得新的关注?
因为大家提出了一个比此前更为实用的架构。Layer-2 的概念本身只提到了计算(执行)应该在链下进行,但没有提到 Layer-2 交易的原始数据应该放在哪里,用户应当如何维护并获取自己账户的最新状态——这也正是 Layer-2 方案的设计空间。
此前的方案为了减轻 Layer-1 的存储负担,在链上是不存储 Layer-2 交易数据的,只定期在链上存储 Layer-2 状态的状态根。但是问题来了。
当用户的资金从 Layer-2 退出到 Layer-1 的时候,可能会发生争议,比如我觉得我的账户里应该还有 10 块钱,但怎么取款只取出了 5 块,那我要怎么证明我的账户里实际上有 10 块钱呢。要求用户来保存相关的数据并在此时提交,首先用户体验就很差,其次还未必能获得良好的证明效果。
于是有开发者在这个点上迈出了大胆的一步:把交易数据直接发布到 Layer-1 上。因为数据是编码过的,体积不是太大的问题。这就转变了 Layer-2 的范式:要么交易数据有问题,要么交易数据没问题,那么依据一定状态转换规则得到的结果自然就没有争议。
这就是 Rollup 方案的核心。
在此基础上,我们所听到的不同 Rollup 方案,其区别在于保证状态转换正确性(correctness)的方式不同,比如所谓的 ZK-Rollup,是使用密码学证明系统(主要是零知识证明技术)来做计算完整性(computational integrity)的证明,简言之,如果相关证据能通过验证,就证明计算一定按照相关流程执行了。而比如 Optimistic-Rollup,则是使用经济激励和挑战期的方案来保证上链数据的有效性:如果你觉得另一个运营者提出的 rollup 区块中含有无效交易,就存入押金发起挑战。
综上,Rollup 的概念为 Layer-2 的发展再添一把新柴。虽然一个新概念并不能解决所有问题,工程问题远比概念的推导更复杂(这也是我非常希望传达给大家的理念),比如,Rollup 方案也要面临用户取款的时候到账时延问题,因此需要流动性供应商。但 Rollup 方案确实是吸收了前人的教训,显现出不错的前景。
ZK-Rollup 已经有上线的案例,就是Loopring 的 WeDEX 去中心化交易所;此外,Starkware 也在这个领域耕耘。Optimistic Rollup 的代表则有 Fuel,这是一个致力于稳定币支付的侧链项目。Rollup 概念的提出者 John Adler 也在这个项目里。参考文献:
啊哈,关于 DeFi 的含义,大家都很了解了,昨天蓝狐老师也在群里跟大家做了深入的分享,我在这里就不班门弄斧了。我在这里就简单分享下我觉得 DeFi 有看点的地方。
DeFi 应用正变得越来越复杂,在我看来这是一个好事。一开始(包括到现在也是)DeFi 的主要应用就是借贷,在这里我主要提的就是 Compound(MakerDAO 和 DAI 实际上要更复杂一些,不是借贷二字能简单概括的,虽然其形式也是借贷)。后来延伸到了保证金交易,先行者应属 dYdX。现在很多去中心化交易所都有保证金交易功能了,包括 DDEX。
现在,已经有了合成资产交易功能,即非实物结算的衍生品交易。比如在 Synthetix 平台上,可以合成比特币价格的衍生品。甚至现在还有一种有趣的操作,你可以拿自己的 ETH 中的一部分换成 DAI ,存入 Uniswap 成为流动性提供者,获得 Uniswap 的手续费收益,另一部分拿到保证金交易平台上两倍看多 ETH,这样就既不会错过 ETH 的涨价收益(当然也会面临 ETH 的跌价损失),又能得到一些手续费收益。
那么这些协议最终会往哪个方向演化呢?我看过的一个很有力的观点是:DeFi 会成为密码资产银行的底层。即这些协议会成为许多面向消费者用户的应用之间协作时使用的协议。例如,Compound 会成为提供储蓄付息服务和投资服务的提供商拆借资金时使用的协议;而 Maker 的 DSR(DAI 存款利率)也会成为储蓄付息应用的底层。
区块链以及 DeFi 产品本身的复杂性,使得它往往难以直接面向消费者。迄今为止,区块链应用都仍受制于用户入门的高门槛,难以大规模推广。这一点绝非一天两天能够改变。即使用户进入了,透彻地理解 DeFi 产品的逻辑仍然不是个容易的事情。
所以,DeFi 协议最好的出路就是成为服务商之间沟通的桥梁,至于服务商如何获得用户,那就是它们自己的事情了。对于 IP 协议究竟如何分层,HTTP 协议究竟如何运作,我们都不甚了了,然而这并不妨碍我们今天使用互联网和 App。日后想必也会出现这样的产品。
参考文献:
在这里可以提一下的是,除了DeFi 以外,以太坊上也有别的致力于提升区块链易用性和有用性的应用方向,包括最近比较热门的智能合约型钱包(就是直接通过智能合约来管理资金,使得资金管理突破以太坊协议本身的局限),还有隐蔽交易。这些方向皆有前景,但暂时未见得比 DeFi 更重要。
综上,现今的以太坊生态在可持续性、可扩展性、有用性方向皆有所发力,方向是非常全面的。这也得益于以太坊丰富的生态。然后我们来介绍一下以太坊 2.0。
以太坊 2.0 可能是大家最关注的领域,但可能也是信息最不普及的一个话题。这一方面是因为以太坊 2.0 本身比较复杂,它不像上面提到的比如 DeFi 那么切身可感,易于理解其中的逻辑。另一方面是因为许多设计也还没有完成,没有定论。但更主要的一个原因是,大家可能不太清楚,以太坊 2.0 是分阶段部署的。
以太坊 2.0 的主体有两部分:权益证明共识机制 + 分片。
主要分成 3 个阶段来部署:Phase 0(第一阶段,因为程序员数数都从 0 开始数)的部署目标是信标链,就是用 PoS 机制来运行的链,这条链也是以太坊 2.0 的核心,因为涉及到向全网提供随机性(相应关联着安全性)和分片间交互的任务。信标链本身不是用来执行交易的,所以它并不像以太坊 PoW 链具备用户转账、运行合约的功能。
Phase 1 的部署目标是分片链。即有关分片的各种设计开始部署。即 PoS 共识机制的参与者(“验证者”)开始要被分配到不同分片上出块并把分片的一些信息(“crosslink”)提交到信标链上。但是,在此阶段,分片仍不能执行交易,所以分片链上的区块只是一些单纯的数据,没有什么意义。这个阶段更像是在测试网络能不能满足分片的带宽需求。
Phase 2 是为分片链添加执行引擎。到了 Phase 2 阶段,分片就具有了执行交易的功能,到时候就可以像现在的以太坊一样部署合约了。做分片,是为了并行化处理交易,提高以太坊的交易处理吞吐量。
然后我们就可以澄清一些常见的误解:
(1)“以太坊 2.0 今年就要上线了”,这种说法是不够准确的。因为计划在今年部署的是 Phase 0,即信标链阶段,乐观估计会在今年夏季末上线。信标链上线之后,用户就可以在 PoW 链的保证金合约内存入 32 ETH 然后成为信标链上的验证者了。说“以太坊的 PoS 阶段将从信标链上线开始”,是没有问题的,但说“这就意味着以太坊 2.0 完成了”则是错误的。
(2)“以太坊 PoS 来了之后,矿机就不能再挖矿了” 也是误会。如上所述,信标链本身并无执行交易的功能,不可能一上线就完全取代 PoW 链。PoW 链和信标链会共存很长一段时间,并不是 PoS 一推出就完全废弃掉 PoW 链。两者的共存至少要等到 Phase 2 上线之后才会终止。而 Phase 2 的推出时间,虽然没有明确的时间表,但在 Phase 0 上线之后乐观估计也要两年(如果设计不改的话)。
(3)以太坊 2.0 完全部署之后,Eth1 也会合并到 Eth2 系统中,可能的方式是变成Eth2.0 中的一个分片,其已有的状态也会完全迁移过去。但具体怎么做,我没有深入了解。
那么,关于即将到来的信标链,还有哪些细节是希望参与的人需要了解的呢?
(1)迄今为止,关于 PoW 链与信标链的连接方式,主流意见还是单向链桥,即用户可通过在 PoW 链的保证金合约内存入 32 ETH 来获得信标链上的验证者资格和信标链 ETH(BETH),但在 BETH 不能发回到 PoW 链上来;
(2)在目前的设计中,BETH持有者之间也是不能相互转账的,因为信标链没有执行交易的功能。但是这个功能可能在信标链稳定运行一段时间后加上,与后续的部署没有很强的先后依赖关系。
(3)如果你想自己运营验证者,那么除了存入 32ETH,你还需要一台能运行验证者客户端软件的电脑和稳定的网络连接,还需要找到一个节点来为你提供必要的信息,否则就不能参与共识了,当然你也可以自己搭建信标链节点。运行验证者客户端的硬件要求并不高,但运行信标链节点的硬件要求会高一些。显然,到时候也会出现质押服务的提供商,但受以太坊协议本身的限制,这种质押服务应该做不到完全免信任,因此,你需要好好选择提供商。
这里要额外提一下的是,有些朋友可能混淆了验证者和信标链节点的概念。信标链节点是参与网络的基本单位,验证者是参与共识的基本单位。验证就像矿工,并不一定要自己部署节点,但一定要依靠节点才能参与共识;另一方面,节点部署者也不一定是验证者。
(4)在充当验证者时,不仅有账户余额的概念,还有一个 “有效余额” 的概念。前者是你的账户里有多少 BETH,后者是你在参与共识时的权益权重(决定你所遭受的奖惩力度),它是有上限的,就是 32BETH。随着你在信标链上接受奖励和惩罚,你的余额会变动,有效余额也会跟着变动(在有效余额上升时会有一些滞后性),然而一旦有效余额达到 32ETH ,它就不会继续上升了。你的余额可能是 100 BETH,但你参与共识时,你所投出的票仍记为 32BETH 的权重。这就决定了,以太坊的 PoS 像是一个发放单利的系统,而不是一个发放复利的系统。
参考文献:
https://ethfans.org/posts/two-point-oh-the-tale-of-two-ethers
https://ethfans.org/posts/eth2-0-phase-0-basics-for-new-contributors
https://ethfans.org/posts/understanding-validator-effective-balance
好像差不多就是这样了。有关分片的部分内容,技术细节可能过多,而且也有许多在设计上并未完成的地方。我有些概览式的理解,但不能保证都能说得清楚,所以有朋友问起我再说好了。
主持人:刚刚你在分享中也略微提到了“除了** DeFi **以外,以太坊上也有别的致力于提升区块链易用性和有用性的应用方向”,这一块可否再展开讲讲?
阿剑:以太坊上有意思的东西有很多。
比如现在大家都很讨厌在转载时要仔细校验地址对不对,其实大家可以使用 ENS(以太坊域名服务),比如主持人可以注册像 mengxiaoshe.eth 这样的域名,然后朋友们给主持人转账时输入这个可读的域名就可以了。
大家可能也很讨厌要管理自己的助记词和私钥,因为很容易忘了放在哪,现在出现的智能合约钱包是让用户直接用一个自己的地址有管理员权限的合约来保管资金,因为这是个合约,那收发交易自然就不成问题。
如果用户把自己的私钥(或者手机)弄丢了,还可以通过一开始注册好的亲友地址实现账户恢复,就是用新地址替换旧地址来管理这个智能合约,相当于账户和钱都找回来了。
另外,现在也出现了帮助用户不用 ETH、用其它 token 来支付 Gas 费的技术,那就不用老担心Gas 的问题了。这些服务器其实都在智能合约钱包中有所集成,大家可以尝试 Argent 和 Authereum 两款智能合约钱包。
以太坊上此类有意思的东西有很多。有些朋友可能知道的,有人拿一个 Eth2DAI.eth 的域名指向了 Uniswap 合约,用户往里面发 ETH,它就会自动发回从 uniswap 交易所换回来的 DAI。
真的可以去试试智能合约钱包。Argent 可能需要排队才能注册上,不过蛮有意思的。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!