以太坊:Vitalik Buterin:协议设计中的封装复杂性和系统复杂性权衡

作者:VitalikButerin,原文来源:vitalik.ca?

以太坊协议设计的主要目标之一是最小化复杂性:使协议尽可能简单,同时仍然使区块链能够完成一条有效区块链需要做的事情。以太坊协议在这方面远非完美,尤其是因为它的大部分是在2014-16年设计的,当时我们对它的了解要少得多,但我们仍然尽可能地积极努力降低复杂性。

然而,这一目标的挑战之一是复杂性是难以定义的,有时,您必须在两种选择之间进行权衡,这两种选择会引入不同类型的复杂性并具有不同的代价。我们如何比较?

允许对复杂性进行更细致入微的思考的一种强大的智力工具是区分我们称之为封装复杂性和系统复杂性的东西。

当一个系统具有内部复杂的子系统但对外提供一个简单的“接口”时,就会出现封装复杂性。当一个系统的不同部分甚至不能完全分开并且彼此之间具有复杂的相互作用时,就会出现系统复杂性。

Vitalik Buterin(V神)突然现身基辅科技峰会:金色财经报道,以太坊联合创始人Vitalik Buterin(V神)突然现身基辅科技峰会,Buterin 在基辅现身特别值得注意,因为目前距离以太坊备受期待的合并只有几天的时间。作为峰会闭幕发言人之一,Buterin表示区块链、以太坊、加密世界中的很多人在关心和支持乌克兰,其他峰会发言人包括Binance乌克兰总经理 Kiril Khomiakov、NEAR Protocol 联合创始人Illia Polosukhin和乌克兰创业基金董事 Pavlo Kartashov。(coindesk)[2022/9/11 13:22:08]

下面有一些例子。

BLS签名与Schnorr签名

BLS签名和Schnorr签名是可以用椭圆曲线制作的两种流行的加密签名方案类型。

BLS签名在数学上看起来非常简单:

签署:

以太坊公益组织 Nomic 基金会获 Vitalik 等捐赠1500万美元:2月12日消息,以太坊公益组织Nomic基金会于2月9日宣布正式成立,专注于改进和扩展以太坊的开发者平台,同时接管 Hardhat 和 Nomic Labs 的其他开放工程项目和相关团队,未来将继续扩展 Hardhat 工具套件。Hardhat是一个编译、部署、测试和调试以太坊应用的开发环境。

据介绍,以太坊基金会、Vitalik Buterin、Coinbase、Consensys、The Graph、Polygon、Chainlink、Gnosis、a16z、a_capital 和 Kaszek Ventures 已经向该组织捐赠 1500 万美元,其中以太坊基金会捐赠 800 万美元。接下来,该组织还将向几个 DAO 提交资金提案,以达到 3000 万美元的总资金。[2022/2/12 9:47:48]

验证:

VitalikButerin提议使用Flashbots系统实现“账户抽象”:3月11日消息,以太坊联合创始人 Vitalik Buterin 在研究机构 Flashbots 的 GitHub 仓库中提议利用 Flashbots 作为“账户抽象”的一种实现方式。“账户抽象”是以太坊社区中讨论的改进提案之一,以实现交易不需要从私钥控制的 EOA 账户发起,而是可以直接从智能合约发起,具体的用例包括智能合约钱包、Tornado.Cash 这类隐私保护工具等。Vitalik Buterin 认为 Flashbots 可以解决这个问题,通过搭建一个插件将其变成智能合约钱包的中继器以实现。他表示该方案不需要对以太坊底层协议进行很多改动。

Flashbots是由五位区块链行业人士发起成立的开放研究机构,旨在针对以太坊及各智能合约公链所面对的 MEV 问题进行研究,并实施解决方案。[2021/3/11 18:35:51]

H是一个哈希函数,m是消息,k和K是私钥和公钥。到这里为止,看起来都很简单。然而,真正的复杂性隐藏在e函数的定义中:椭圆曲线配对,这是所有密码学中最难理解的数学题之一。

声音 | Vitalik:被捕以太坊科学家 Virgil Griffith 未给朝方提供任何实质帮助:以太坊联合创始人 Vitalik Buterin 发表长文,澄清以太坊基金会科学家 Virgil Griffith 访问朝鲜是个人行为,未给朝鲜政府提供任何实质性的帮助,并在准备请愿书要求释放 Virgil Griffith。Buterin 表示,Virgil Griffith 是我的好友,访问朝鲜是他的个人行为,以太坊基金会并未提供任何形式的支持。对地缘的开放态度是一种美德,而 Virgil Griffith 的这个优点在之前就已经体现出来了,比如帮助增进了与以太经典、Hyperledger 之间的关系。我认为 Virgil 并未给朝鲜政府提供任何实质性的帮助,他根据有关开源软件的公开信息发表了演讲,这并不是什么高深的黑客技术辅导。我希望美国能专注到真正有害的事情上,而不是抓捕发表公开信息演讲的程序员。此前,纽约南区检察官办公室和联邦调查局宣布,已逮捕以太坊基金会研究科学家 Virgil Griffith,指控他违反美国制裁法案,前往朝鲜参加区块链大会,发表演讲并提供建议,帮助朝鲜利用加密货币和区块链技术逃避制裁。[2019/12/2]

现在,再看看Schnorr签名。Schnorr签名仅依赖于基本的椭圆曲线。但是签名和验证逻辑要复杂一些:

声音 | 江卓尔:分片提升容量难度大时间长 故而Vitalik提出使用BCH或者ETC作为以太坊数据层:7月25日消息,莱比特矿池CEO江卓尔表示,分布式系统(去中心化系统)有一个不可能三角,称为分布式系统CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。Vitalik提出用分片方法提升容量,但分片方法的难点是一致性,也就是CAP中的C,Consistency(一致性),这个是一个要挑战不可能三角的开发,所以开发难度很大,时间长,所以Vitalik才提出使用BCH或者ETC作为以太坊数据层的短期方案,来解决ETH的燃眉之急。[2019/7/25]

那么......哪种类型的签名“更简单”?这取决于你关心什么!BLS签名具有巨大的技术复杂性,但复杂性都隐藏在e函数的定义中。如果将e函数视为黑盒,BLS签名实际上非常简单。另一方面,Schnorr签名的总体复杂性较低,但它们有更多可能以棘手的方式与外部世界交互的部分。

例如:

进行一个BLS多重签名很容易:只需

。但是Schnorr多重签名需要两轮交互,并且需要处理棘手的密钥取消攻击。

Schnorr签名需要随机数生成,BLS签名不需要。

椭圆曲线配对就像是一个强大的“复杂性海绵”,因为它们包含大量封装的复杂性,但可以实现系统复杂性低得多的解决方案。在多项式承诺领域也是如此:将KZG承诺的简单性与内积参数的更复杂的内部逻辑进行比较。

密码学与密码经济学

许多区块链设计中出现的一个重要设计选择是密码学与密码经济学的选择。通常这以在有效性证明和欺诈证明之间进行选择的形式出现。

ZK-SNARK是一种复杂的技术。虽然可以在一篇文章中解释它们如何工作背后的基本思想,但实际上实现ZK-SNARK来验证某些计算所涉及的复杂性是计算本身的许多倍。有效地实施ZK-SNARK涉及具有特殊目的优化的电路设计、使用不熟悉的编程语言以及许多其他挑战。另一方面,欺诈证明本质上很简单:如果有人提出挑战,您只需直接在链上运行计算。为了提高效率,有时会添加二进制搜索方案,但即使这样也不会增加太多复杂性。

但是,虽然ZK-SNARK很复杂,但它们的复杂性是封装的复杂性。另一方面,欺诈证明的相对简单的复杂性是系统性的。以下是欺诈证明引入的系统复杂性的一些示例:

他们需要谨慎的激励工程来避免验证者的困境。如果在达成共识的情况下完成,他们需要额外的交易类型来证明欺诈,以及推理如果许多参与者竞争同时提交欺诈证明会发生什么。它们依赖于同步网络。它们允许审查攻击被用来提交盗窃行为。基于欺诈证明的Rollup要求流动性提供者支持即时提款。由于这些原因,即使从复杂性的角度来看,基于ZK-SNARKs的纯加密解决方案也可能长期更安全:ZK-SNARKs存在一些人必须考虑的更复杂的部分,但它们存在更少的每个人不得不考虑的悬而未决警告。

其他示例

工作量证明——低封装复杂度,因为机制极其简单易懂,但系统复杂度更高。哈希函数——高封装复杂性,但非常易于理解的属性,因此系统复杂性低。随机洗牌算法——洗牌算法可能内部复杂但导致易于理解的强随机性保证,或者内部更简单但导致更弱且更难以分析的随机性属性。矿工可提取价值——一个强大到足以支持复杂交易的协议在内部可能相当简单,但这些复杂的交易可能会对协议的激励产生复杂的系统性影响,因为它有助于以非常不规则的方式提出区块的激励。Verkle树——Verkle树确实有一些封装的复杂性,实际上比普通的Merkle哈希树要复杂得多。然而,从系统上讲,Verkle树呈现出与密钥值映射完全相同的相对简洁的界面。主要的系统复杂性“泄漏”是攻击者操纵树以使特定值具有非常长的分支的可能性;但是对于Verkle树和Merkle树,这种风险是相同的。

我们如何进行权衡?

通常,封装复杂度较低的选择也是系统复杂度较低的选择,因此有一个选择显然更简单。但在其他时候,您必须在一种复杂性和另一种复杂性之间做出艰难的选择。在这一点上应该清楚的是,如果将复杂性封装起来,那么它的危险性就会降低。系统复杂性带来的风险并不是规范有多长的简单函数;与其他部分交互的一个小的10行规范比原本被视为黑匣子的一个100行函数增加了更多的复杂性。

然而,这种偏好封装复杂性的方法存在局限性。软件错误可能出现在任何一段代码中,并且随着它变得越来越大,错误的概率接近1。有时,当您需要以一种意想不到的新方式与子系统交互时,最初封装的复杂性可能会变得系统化。

后者的一个例子是以太坊当前的两级状态树,它具有一棵账户对象树,其中每个账户对象又拥有自己的存储树。

这种树结构很复杂,但一开始复杂性似乎得到了很好的封装:协议的其余部分与树交互,作为您可以读取和写入的密钥/值存储,因此我们不必担心关于树的结构。

然而,后来证明复杂性产生了系统性影响:账户拥有任意大存储树的能力意味着无法可靠地期望状态的特定部分有一个可预测的大小。这使得将状态拆分为多个部分变得更加困难,从而使同步协议的设计和尝试分配存储过程变得复杂。为什么封装的复杂性会变成系统性的?因为接口变了。修复?当前迁移到Verkle树的提议还包括迁移到一种平衡良好的树的单层设计。

最终,在任何给定情况下支持哪种类型的复杂性是一个没有简单答案的问题。我们能做的最好的事情就是保持适度支持封装复杂性的态度,但不要过多,并在每个具体情况下行使我们的判断力。有时,牺牲一点系统复杂性来大幅降低封装的复杂性确实是最好的做法。在其他时候,您甚至可能会误判什么是封装的,什么不是。每种情况都不同。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

地球链

[0:15ms0-0:958ms