以太坊,5岁!
作者:以太坊基金会,翻译:乔尼
庆祝生日
当区块链再次进入公众视野,得到科技巨头前所未有的关注时,以太坊已经成为区块链领域一艘不可忽视的巨轮。在资本肆无忌惮、野蛮增长的混沌时代,以太坊的开发者和社区始终精心呵护着这艘船,守住了航向,升级为一代巨轮。
2020年7月30日不仅是以太坊五周年的破壳日,更是一个巨大的期待:再过几天,以太坊 2.0的测试网络将正式启动,标志着以太坊 2.0从世界计算机向世界跨越。到目前为止,以太坊 2.0测试网络的启动进度已超过92%。
痛苦
以太坊自诞生以来,从未远离质疑和嘲笑。作为一台逻辑极其复杂的世界信任机器,以太坊遇到了很多攻击和运行挑战。最**的事件是2016年的Dao事件。
2016年6月17日,以太坊创始人维塔利克(italik)在reddit发布紧急警告,通知“Dao受到黑客攻击,请暂停ETH/Dao交易,并立即充值、提现”长达一个月的攻防战以以太坊区块链分离为ETH(名为“以太坊”)等(以太经典)而告终。以太坊在经历了Dao事件后,长期摆脱不了“集权”的问题,被其他外部社区围攻。
今天的庆祝活动似乎忘记了昨天的教训。未来以太坊**的敌人不会来自外部,而是来自内部。要保证航母的每一个细节模块都能正常工作,比抵御外敌要困难得多。
离别
以太坊诞生后,创始团队成员逐渐将注意力转移到更广阔的领域,或致力于拓展以太坊的生态,或致力于探索新技术,成为以太坊的竞争对手。今天,除了Vialik专注于以太坊的发展之外,其他创始人都致力于以太坊社会框架Akasha(米哈伊AMPL Na.Alsie),Jaxx wallet(退休,安东尼AMPL DeliORO),Cardano(查尔斯AMPL NHSPKONSON),PrkaDoT和加文AMPL NBSP伍德,Web3基金会。
待续
维塔利克在2017年的个人网站上https://italik.ca写道一篇回顾“以太坊是如何诞生”的文章。值此以太坊五周年之际,我们不妨回顾一下以太坊协议的史前历史。
本文摘自italik ;buterin撰写的《李湘:以太坊的区块链起源》,由灵缇科技和独白时代翻译出版。同时,我要感谢以太坊社区的每一位开发者、翻译和传教士。因为你,区块链的世界不再单调。
以太坊协议的史前史
编者按:本文是维塔利克对以太坊协议开发过程的回忆,讲述了以太坊协议从概念到最初发布、迭代的过程。
虽然目前以太坊协议背后的概念在过去两年中已基本稳定,但以太坊目前的概念和完整形式并不是一朝一夕形成的。以太坊区块链问世后,其协议经历了一系列重大的演进和决策。本文旨在回顾以太坊协议从诞生到发布的发展历程。对于gETH、cppETHereum、pyETHereum和ETHereumj在协议实现过程中所做的大量工作,以及以太坊生态系统的应用和业务历史,本文不作讨论。
讨论的范围之外还有卡斯帕和分裂的历史。毫无疑问,我们可以写更多的文章来讨论Vlad、Gain、我自己和其他人已经提出和放弃的各种观点,包括工作量证明、车轮辅助多链、超立方体、影子链(plamsa的前身)、链纤维以及Casper的各种迭代版本,以及弗拉德关于激励机制及其本质的快速进化推理的共识协议。这些想法背后的故事非常复杂,足以写另一篇文章。因此,暂时不讨论。
让我们从最早的版本开始。这个版本最终成为以太坊,但在当时它甚至还没有被称为以太坊。2013年10月我访问以色列时,我花了很多时间与mastERCoin团队合作,甚至建议他们添加一些功能。在考虑了他们在做什么之后,我向团队发送了一份提案,建议他们在不添加大复杂功能集的情况下,使他们的协议更通用,并支持更多类的合同:
需要注意的是,这个版本与以太坊后期的更广阔视野有着很大的不同:它完全专注于mastERCoin当时试图突破的技术,即双向合约。在本合同中,甲、乙双方共同出资,双方可按合同约定的一定公式提取资金(如发生x,则全部归A,否则全部归乙方)。实现这个契约的脚本语言不是图灵完备的。
万事达币的团队对此印象深刻,但他们并不想放弃为朝这个方向前进所做的一切,我更加确信这是正确的选择。所以,大约在12月,第二个版本问世了:
https://web.archie.org/
在这个版本中,您可以看到已经完成了很多重构。这些结果的很大一部分是在去年11月在旧金山的一次长途跋涉中想到的。到那时,我意识到智能合约有可能完全通用。与只能简单描述双方关系的脚本语言相比,合同本身就是一个成熟的账户的完成,并具有持有、发送和接收资产的能力,甚至可以保持**性存储(当时,**性存储被称为“内存”,唯一的临时“内存”是256寄存器)。只是语言已经从一个基于堆栈的虚拟机转移到了一个基于寄存器的虚拟机,我想拥有更多。我对此没有什么反对意见,只是它看起来更复杂。
“以太坊”字面意思是以太坊(燃料,相当于气体)。在每个计算步骤完成后,交易所调用的合约余额会略有减少。如果合同没钱了,执行过程就会停止。请注意,这种接收方付款机制意味着合同本身必须要求发送方为合同支付费用。如果没有收到费用,将立即撤销执行。此版本的协议分配了16个自由执行步骤的配额,允许合同拒绝未付款交易。
到目前为止,以太坊协议完全是由我构建的。然而,从那时起,新玩家开始加入以太坊阵营。到目前为止,加文在2013年12月通过的协议中是最突出的关于我我开始联系我。
Jeffrey wilcke是go客户端(当时称为“ETHereal”)的首席开发人员,他同时联系我并开始编程。尽管他的贡献更多的是在客户端开发上,而不是在协议研究方面。
加文早期的贡献有两个方面。首先,您可能会注意到初始设计中的契约调用模是异步的:尽管契约a可以为契约B创建一个内部事务(“内部事务”是以太坊的行话:最初它们被称为“事务”,然后被称为“消息调用”或“调用”)。内部交易的执行在第一笔交易完全完成之前不会开始。这意味着事务不能使用内部事务作为从其他合同中获取信息的方式;如果您想从其他合同中获取信息,您只能使用exo操作码(有点像您用来读取其他合同的sload),但是这个操作码后来在Gain和其他人的支持下被删除了。
在实现我最初的规范时,Gain自然地同步了内部事务函数,他甚至没有意识到这两个意图之间的偏差——也就是说,在Gain的实现中,当一个合同调用另一个合同时,内部事务立即执行。执行完成后,虚拟机返回创建内部事务的契约,并继续执行下一个操作码。对我们俩来说,这种方法似乎更好,因为我们决定将其作为规范的一部分。
第二,他和我之间的一次讨论(发生在旧金山的一次散步中,因此确切的细节将永远消失在历史的洪流中,但也可能存在于美国国家安全局的一份或两份副本中)引发了交易成本模式的重组,从合同支付到发送方支付,为建筑提供燃料。在这个版本中,在执行每个单独的事务步骤之后,事务发起程序不是立即消耗一些以太坊,而是支付一定的费用并分配一定数量的燃料(大致是计算步骤的计数器)。同时,计算步骤取决于燃料限制。如果所有的燃料都花在了一个事务上,那么这个燃料就会消耗掉,但是整个执行过程都会被恢复。这似乎是最安全的方法,因为它删除了契约之前需要担心的执行攻击类的所有部分。交易完成后,任何未使用的燃油所收取的费用将退还。
加文在很大程度上以一种非常微妙的方式改变了以太坊的愿景:从一个构建可编程货币的平台——一个拥有基于区块链的合同的平台,根据预先设定的规则持有数字资产并进行转移——到一个通用的计算平台。这一变化始于以太坊的重点和术语上的细微变化,然后随着对Web 3集成的日益重视而增加,Web 3集成将以太坊视为去中心化技术套件的一部分,另外两个部分是whisper和bee colony协议,图1)。 ;
2014年初前后,我们也根据别人的建议做了一些调整。在Andrew Miller和其他人提出了返回基于堆栈的体系结构的想法之后,我们最终返回了(图2)。
A660202图2
Charles hoskinson建议我们从比特币中的sha256切换到更新的Sha3(或者更准确地说keccak256)。尽管存在一些争议,但经过与Gain、Andrew和其他人的讨论,我们确定堆栈中的值大小应限制为32字节。另一种选择,无限整数,仍在考虑中,因为它有一个问题:很难计算出加法器、乘法器和其他运算需要多少燃料。
早在2014年1月,我们首先想到的挖矿算法是匕首(dagger)
Dag是以有向无环图命名的。Dag是算法中使用的一种数学结构。其思想是每n个块,通过种子伪随机产生一个新的DAG,此外,底层的DAG将是需要以数十亿字节存储的节点的集合。然而,在DAG中,只需要计算几千个条目就可以生成任何独立的值。dagger计算在基础数据中心化的任何位置包含一定数量的值,然后将这些值散列在一起。这意味着有一种快速的方法来进行DAG计算—数据存储在内存中,然后,以一种缓慢但不占用内存的方式—重新生成您需要从DAG中从头获得的每个值。
该算法的目的是与当时流行的算法具有相同的内存限制属性,就像脚本算法一样,但对轻客户端仍然友好。矿工们的优化速度很慢,而且他们的存储器优化程度很低,所以用他们的存储器优化方法来验证这是非常困难的。快速方法可能只需要几微秒,而慢速和内存释放方法可能需要几毫秒,因此这对于轻客户端仍然是可行的。
从现在开始,随着以太坊的发展,算法也发生了几次变化。下一个想法是自适应工作负载证明。在这种情况下,工作量证明将涉及随机选择的以太坊合同的执行,并且有一个聪明的方法来**ASIC:如果开发了ASIC,那么竞争对手将有动机创建和发布ASIC不擅长执行的合同。ASIC不能用于通用计算,因为它只是一个CPU。因此,我们可以利用这种对抗性激励机制来实现执行通用计算性质的工作量证明。
原因很简单,这个想法失败了。原因是远程攻击。攻击者可以从block 1构建一个链,并用一个简单的契约填充它。需要注意的是,攻击者可以针对这个简单的契约设计专门的硬件,这样攻击链就可以快速赶上主链。所以。。。回到开头。
下一个算法称为“随机电路”,可以在谷歌文件中描述。该算法由Vlad Zamfir和I提出,并由Matthew wanple dotty等人进行了分析。该算法的思想是通过执行伪随机产生电路来模拟挖矿算法中的一般运算。基于这些原则的任何证据都不成立。但我们在2014年遇到的计算机硬件专家非常悲观。Matthew-wanple-Dotti提出了一种基于sat解决方案的工作量证明,但也遭到了拒绝。
**,我们提出dagger桥本算法,有时也称为dashimoto算法。这个算法借鉴了桥本的很多思想。hashimous提出的“工作量约束机制”的概念。在这种机制中,挖矿速度的主要限制因素不是每秒哈希操作的速度,而是每秒可访问的内存的兆字节数。但是,dagger桥本将这种工作负载证明机制与DAG算法生成的数据集相结合,DAG算法对客户端友好。经过我、马修、蒂姆和其他人的多次调整,这些想法最终被纳入了我们现在所说的“以太”
到2014年夏天,除了工作量证明可能需要2015年初才能达到埃沙什阶段外,协议还相当稳定,其半正式规范已在加文的黄皮书中公布。
2014年8月,我开发并引入了第三代区块机制。这种机制可以使以太坊的区块链具有更短的区块时间和更高的处理能力,降低中心化的风险。有关第三级阻塞机制的介绍,请参阅poc6。
在与bitstocks团队讨论之后,我们考虑使用堆作为一级数据结构—尽管我们没有这样做是因为时间不够,随后的安全审计和DOS攻击向我们表明,当时安全地实现这个功能比我们想象的要困难得多。
今年9月,加文和我计划对协议设计进行两次重大修改。首先,除了状态树和事务树外,每个块都将包含一个收据树。收据树将包含由每个事务创建的日志的散列和中间的状态根。日志将允许事务创建输出,这些输出可以保存在区块链中,并且可以供轻客户端访问。但是,将来的状态计算无法访问这些日志。这种方法使去中心化的应用程序能够轻松地查询时间,例如代币转移、购买、正在创建和匹配的交换订单以及正在进行的拍卖。
我们还考虑了其他想法,例如从事务的完整执行轨迹中提取Merkel树,以证明任意内容。在对简单性和完整性进行权衡之后,我们选择使用日志。
第二个是预编译的思想。预编译解决了允许在EVM中使用复杂的密码计算而不必处理EVM开销的问题。我们对本地合同也有很多雄心勃勃的想法。在这些想法中,如果矿工对某些合同有更好的执行方法,他们将投票支持降低这些合同的燃料价格。因此,大多数矿工能够迅速执行的合同自然会降低燃料价格。然而,所有这些想法都被拒绝了,因为我们无法从密码经济学的角度提出一种足够安全的方法来实现它。攻击者总是可以创建契约来使用活动门执行加密操作,然后将它们分发给自己和朋友,以更快地执行契约。随后,攻击者投票决定降低燃油价格,并利用此对网络发起DoS攻击。相反,我们选择了一种不那么雄心勃勃的方法,它只是在协议中为常见操作(如哈希和签名方案)指定少量的预编译。
Gain也是最初支持开发协议抽象的关键人物。所谓协议抽象就是将协议的许多部分,如以太网平衡、事务签名算法、随机数等,作为一个契约传递到协议本身中。理论上的最终目标是实现整个以太坊协议可以描述为向具有特定预初始化状态的虚拟机添加函数调用的目标。我们没有足够的时间将这些想法融入到最初的**版本中,但预计这些原则将通过对君士坦丁堡、卡斯珀合同和碎片化规范的一些修改而慢慢开始整合。
所有这些都在POC 7中实现。POC 7之后,协议实际上没有太大变化,除了在某些情况下发生了一些微小但重要的变化。这些细节将在安全审计后公布。
到2015年初,UTA Steiner(Jutta Steiner)和其他人组织了发布前安全审核,包括软件代码审核和学术审核。软件代码审计主要用C++和Gain和Jeffrey领导的go语言实现。虽然我的pythemm实现也有一个简单的审计。在两次学术审计中,一次由Uta eyar(ittay Eyal)进行,另一次由Andrew Miller和其他权力最小的成员进行。Eyar的审计导致了协议的轻微变化,即链的总难度值不包含第三个块。由最少权力机构进行的审计更多地关注智能合约、燃料经济和帕特里夏树。审计还对协议作了几处修改。其中一个较小的更改是使用Sha3(addr)和Sha3(key)作为树的键值,而不是直接使用地址和键值。这将使攻击者更难对树发起最坏的攻击。
我们正在讨论的另一个重要问题是燃料限制投票机制。当时,我们已经担心比特币块尺寸的争论缺乏进展,希望以太坊有一个灵活的设计:可以根据需要随时间调整。但问题是,**限度是什么?我最初的想法是建立一个动态极限,它是实际燃料使用的长期指数移动平均值的1.5倍。因此,从长远来看,平均区块将占据2/3的容量。然而,Andrew已经证明,这种限制可以在某些方面得到利用——特别是,想要提高限额的矿工只需要在自己的区块中包含消耗大量燃料但处理时间很少的交易,从而在不损失成本的情况下创建完整的区块。因此,至少在**,这一机制的安全模式相当于仅仅允许矿工就燃料限制进行投票。
我们没能想出一个更好的燃料限制策略。安德鲁的提议是让矿工明确投票决定燃料限制,而默认的投票策略是均线的1.5倍。原因是我们还没有找到设定**燃料限额的正确方法,任何具体方法失败的风险似乎都远远高于矿工滥用投票权的风险。因此,不妨简单地要求矿工就燃料限额进行表决,接受燃料限额过高或过低的风险,以换取灵活性和矿工的利益,根据需要迅速调整燃料限额。
在与Gain和Jeff进行了一次小黑客攻击之后,POC 9终于在3月份发布。它将成为概念证明的最终版本。我们运行了一个名为“奥林匹克”的测试网络四个月。测试网络使用主网络中要使用的协议。同时,我们还制定了以太坊的长期计划。维纳古普塔(Vinay Gupta)写了一篇文章,以太坊的发布过程。本文描述了以太坊主网络发展的四个阶段,并给出了大家熟悉的名称:“前沿”、“家园”、“大都市”和“宁静”
奥运测试网络已经运行了四个月。前两个月,我们发现各种执行版本存在很多漏洞,也存在共识失灵等问题。但在6月份前后,这个网络已经明显稳定下来。7月,我们决定冻结代码;7月30日,以太坊主网正式发布。
以太坊基金会的庆祝活动
以太坊已经5岁了!
文章标题:今天推荐以太坊五周年:从涅盘觉醒
文章链接:https://www.btchangqing.cn/76927.html
更新时间:2020年08月01日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。