作者:VitalikButerin
原标题:《APrehistoryoftheEthereumProtocol》
发表时间:2017年9月14日
尽管当前以太坊协议背后的想法已经基本稳定了两年,但以太坊并没有一下子出现,在目前的概念中并完全形成。在区块链启动之前,该协议经过了许多重大的发展和设计决策。本文的目的是浏览该协议从头开始启动的各种演变;在诸如Geth,Cppethereum,Pyethereum和Ethereumj之类的协议实施方面所做的无数工作,以及以太坊生态系统中的应用和业务历史,是故意超出范围的。
Casper和ShardingResearch的历史也出现了。虽然我们当然可以发表更多的博客文章,讨论弗拉德,Gavin,我本人和其他人的所有想法,包括“工作证明”,“轮辐链”,“超级立法”,影子链,链纤维和Casper的各种迭代,以及弗拉德(Vlad在一个帖子中,我们现在将其遗漏。
让我们首先从最终变成以太坊的最早版本开始,当时它甚至没有被称为以太坊。当我在2013年10月访问以色列时,我与万事币团队一起度过了很多时间,甚至为他们提供了一些功能。花了几次思考他们在做什么之后,我向团队发送了一个建议,以使协议更加普遍,并支持更多类型的合约,而无需添加同样大而复杂的功能:
https://web.archive.org/web/20150627031414/http://vbuterin.com/ultimatescripting.html
请注意,这与以太坊的后来更广泛的愿景相去甚远:它纯粹是Mastercoin试图专门研究的,即两党合约,当事人A和B都会投入资金,然后他们后来他们会根据合约中指定的某些公式获取资金。脚本语言并不完整。
以太坊证明服务EAS在Base区块链上线:金色财经报道,以太坊证明服务Ethereum Attestation Service(EAS)在社交媒体宣布已在Base区块链正式上线,Base链上开发者现在可以探索去中心化身份功能,在dApp中构建证明服务,并利用EAS获得更便捷的第三方信息信任和验证。[2023/5/26 10:41:07]
Mastercoin团队印象深刻,但他们对放弃他们正在做的一切朝着这个方向发展并不感兴趣,我越来越相信这是正确的选择。因此,这里是12月2日的版本2:
https://web.archive.org/web/20131219030753/http://vitalik.ca/ethereum.html
在这里,你可以看到一个实质性的重新研究的结果,这主要是由于我意识到智能合约有可能完全概括的旧金山长途旅行的结果。与其仅仅是描述两方之间关系条款的一种脚本语言,不如说合约本身是完整的帐户,并且有能力持有,发送和接收资产,甚至保持永久存储。该语言从基于堆栈的计算机转变为我自己的意志的基于寄存器的计算机;除了看起来更复杂的情况外,我对此几乎没有争论。
此外,请注意现在有一种内置的费用机制:
在这一点上,以太实际上是气体。在每个计算步骤之后,交易所要求的合约的余额将有所下降,如果合约用完了货币执行,则会停止。请注意,此“接收者付费”机制意味着合约本身必须要求发件人向合约支付费用,并在不存在此费用的情况下立即退出;该协议分配了16个免费执行步骤的津贴,以允许合约拒绝非付费交易。
这是以太坊协议完全是我自己的创建的时候。但是,从这里开始,新参与者开始加入折叠。到目前为止,该协议方面最突出的是Gavin·伍德,他在2013年12月向我接触。
以太坊信标链验证者数量突破50万个:1月17日消息,Dune数据显示,当前以太坊信标链验证者数量突破50万个,为502,468个。超过1607万枚ETH已被质押,占ETH流通总量的13.34%。[2023/1/17 11:17:19]
GO客户的首席开发人员JeffreyWilcke也伸出了大约同一时间,尽管他的贡献更多地在客户开发方面而不是协议研究。
“嘿,Jeffrey,很高兴看到你对以太坊感兴趣……”
Gavin的最初贡献是两倍。首先,你可能会注意到,初始设计中的合约调用模型是异步的:尽管合约A可以为合约B创建“内部交易”,直到第一个交易的执行完全完成后,内部事务的执行才会启动。这意味着交易不能使用内部交易作为从其他合约中获取信息的一种方式;唯一的方法是ExtroOpCode,随后在Gavin和其他人的支持下也将其删除。
在实施我的初始规格时,Gavin自然地同步实施了内部交易,甚至没有意识到意图是不同的-也就是说,在Gavin的实施中,当合约呼叫另一个合约时,内部交易立即执行,一旦执行完成,则一旦执行,VM返回到创建内部交易的合约,并继续进行下一个OPCODE。在我们俩看来,这种方法似乎是优越的,因此我们决定将其作为规格的一部分。
其次,他和我本人之间的讨论交易费用模型从“合约付款”方法转向“发送者付费”方法,还切换到“燃气”架构。交易发件人并没有立即夺走每个单独的交易步骤,而是为了分配了一些“气体”,而计算步骤则从这种气体的津贴中获取。如果一笔交易用尽了汽油,则汽油仍将被没收,但整个处决将被恢复;这似乎是最安全的事情,因为它删除了整个课程”
Gavin也可以在很大程度上归功于从将以太坊视为建造可编程资金平台的远见卓识,并具有基于区块链的合约,可以持有数字资产并根据预设的规则转移它们,再到通用计算平台。这始于重点和术语的细微变化,后来随着对“Web3”合奏的越来越重视,这种影响变得更加强大,该合奏将以太坊视为一组分散的技术,其他两个是耳语和蜂拥而至。
4个头部稳定币总市值首次超以太坊:金色财经报道,据区块链分析公司Glassnode最新分析数据显示,前4种稳定币(USDT、USDC、BUSD 和 DAI)的总市值已超过以太坊市值,比后者高出30亿美元。在整个 2020-22 年期间,前4名稳定币的总市值曾多次达到以太坊市值的 50%,然而在今年5月和6月出现了大幅突破,这是第一次发生此类事件。自5月初以来,从市场流出的稳定币赎回总额为99.2亿美元。USDT的赎回量最大,为130亿美元,其次是 DAI,赎回20 亿美元,因为投资者选择结束了通过MakerDAO 金库获得的杠杆(或被清算)。另外自5月1日以来,USDC 的供应量增加了50亿美元,这表明市场对于稳定币的偏好可能从USDT 转向USDC。[2022/6/26 1:32:16]
其他人建议在2014年初左右也进行了更改。在安德鲁·米勒和其他人提出这个想法之后,我们最终回到了基于堆栈的建筑。
查尔斯·霍斯金森建议从比特币的SHA256转换为新的SHA3。尽管有一段时间的争议,但与Gavin,安德鲁和其他人的讨论导致确定堆栈上的价值大小应限于32个字节。考虑的另一种替代方案是无限尺寸的整数,存在一个问题,即难以弄清楚多少天然气,添加,乘法和其他操作。
我们想到的最初的采矿算法早在2014年1月,是一种名为Dagger的装置:
https://github.com/ethereum/wiki/blob/master/Dagger.md
Dagger以“定向无环图”命名,该算法中使用的数学结构。这个想法是,每个n个块,一个新的dag都会是从种子中生成的伪随机,而dag的底层将是一系列节点的集合,这些节点需要数个千兆字节才能存储。但是,在DAG中生成任何个人值都需要计算几千个条目。“Dagger计算”涉及在此底部数据集中的随机位置中获得一些值,然后将它们放在一起。这意味着有一种快速的方法来进行Dagger计算-已经将数据存储在内存中,而不是记忆密集型的方法-从你需要从头开始获得的每个值。
The Graph集成以太坊layer2扩展方案zkSync:11月25日消息,以太坊layer2扩展方案zkSync开发团队MatterLabs宣布,去中心化索引协议The Graph正在与zkSync集成,允许来自The Graph支持的开放API的索引数据读取和组织zkSync2.0数据,从而实现更快、更有效的访问。[2021/11/25 7:09:41]
该算法的目的是具有与当时流行的算法相同的“记忆力”属性,例如Scrypt,但仍然是轻客户友好的。矿工会使用快速的方式,因此他们的采矿将受到内存带宽的限制,但是Light客户可以可以使用无内存但较慢的版本进行验证。快速的方法可能需要几微秒,并且不含内存的方式缓慢而无需毫秒,因此对于轻型客户来说,它仍然非常可行。
从这里开始,在以太坊开发过程中,该算法会发生多次变化。我们经历的下一个想法是“自适应的工作证明”。在这里,工作证明将涉及执行随机选择的以太坊合约,并且有一个聪明的理由如何预期这将是抗ASIC的:如果开发了ASIC,那么竞争的矿工将有动机创建和发布许多合约,说明这些合约的说明ASIC不擅长执行。这个故事就没有用于通用计算的ASIC之类的东西,因为这只是CPU,因此我们可以使用这种对抗性激励机制来做出基本上是执行一般计算的工作证明。
之所以失败,原因很简单:远程攻击。攻击者可以从区块1开始一条链,只用他们可以为其创建专用硬件的简单合约填充它,并迅速超越主链。所以......回到绘图板。
下一个算法是称为“随机电路”,在此Google文档中描述,由我自己和VladZamfir提出,并由MatthewWampler-Doty等人进行了分析。这里的想法也是为了模拟采矿算法中的通用计算,这次是通过执行随机生成的电路。没有什么难以证明的,基于这些原则是行不通的,但是我们在2014年与之联系的计算机硬件专家往往对此非常悲观。MatthewWampler-Doty本人建议基于SAT解决的工作证明,但最终也被拒绝了。
以太坊未确认交易为100,577笔:金色财经消息,据OKLink数据显示,以太坊未确认交易100,577笔,当前全网算力为239.32TH/s,全网难度为3.21P,当前持币地址为48,091,135个,同比增加103,855个,24h链上交易量为3,970,895.91ETH,当前平均出块时间为13s。[2020/9/30]
最后,我们以一种称为“DaggerHashimoto”的算法来完善电路。“dashimoto”有时被称为“dashimoto”,从hashimoto那里借了许多想法,Hashimoto是ThaddeusDryja的工作证明算法,它率先提出了“I/O的工作证明”的概念,其中挖掘速度的主要限制因素是不是每秒哈希,而是每秒RAM访问的大型范围。但是,它将其与Dagger的轻客户端友好型DAG生成的数据集相结合。在我自己进行了许多调整之后,Matthew,Tim和其他人,这些想法终于融合到了我们现在称为ethash的算法中。
到2014年夏天,该协议已经大大稳定了,除了工作证明算法外,该协议直到2015年初才能达到Ethash阶段,并且以Gavin的黄皮书的形式存在半正式规格。
2014年8月,我开发并介绍了叔块机制,该机制使以太坊的区块链具有较短的区块时间和更高的容量,同时减轻集中化风险。这是作为POC6的一部分引入的。
与Bitshares团队的讨论导致我们考虑将堆添加为一流的数据结构,尽管由于缺乏时间,我们最终没有这样做,而后来的安全审核和DOS攻击将表明,实际上它比我们的难度要困难得多。当时想到安全执行此操作。
9月,我和Gavin计划了协议设计的接下来的两个重大更改。首先,在状态树和事务树旁边,每个块还包含一个“收据树”。收据树将包括交易创建的日志的哈希以及中间状态根。日志将允许交易创建保存在区块链中的“输出”,并且可以通过光线客户端访问,但是未来状态计算无法访问。这可以用来允许分散的应用程序轻松查询事件,例如令牌转移,购买,创建和填写的交换订单,开始拍卖等等。
还有其他考虑的想法,例如,从整个交易的整个执行痕迹中制造出默克尔树,以证明任何事物。选择日志是因为它们是简单性和完整性之间的妥协。
第二个是“预编译”的想法,解决了允许复杂的加密计算在EVM中可用的问题,而无需处理EVM开销。我们还经历了关于“本地合约”的更多雄心勃勃的想法“如果矿工可以优化某些合约的实施,他们可以为这些合约的打包费用“投票”,因此大多数矿工可以更快执行的合约自然会降低gas价格;但是,所有这些想法都被拒绝了因为我们无法提出一种加密经济上安全的方法来实施此类事情。攻击者总是可以创建一份合约,该合约执行某些陷阱的加密操作,将陷阱门分配给自己和朋友,以使他们更快地执行此合约,然后再执行此合约,然后对加油的投票并将其用于网络。相反,我们选择了雄心勃勃的方法,即简单地在协议中指定的较小数量的预编译,用于诸如哈希斯和签名方案之类的常见操作。
Gavin也是开发“协议抽象”概念的关键初始声音-移动协议的许多部分,例如以太余额,交易签名算法,nonces等作为合约本身,并具有达到达到的理论最终目标可以将整个以太坊协议描述为将函数调用到具有某些原始状态的虚拟机中的情况。这些想法没有足够的时间进入最初的前沿版本,但是预计原则将通过一些君士坦丁堡的变化,卡斯珀合约和分片规范开始缓慢地集成。
这一切都是在POC7中实施的;在POC7之后,该协议并没有发生太大变化,除了未成年人以外,尽管在某些情况下很重要,但通过安全审核会得出的细节...
2015年初,JuttaSteiner等人组织了发出的预发行安全审计,其中包括软件代码审核和学术审核。该软件审核主要是由GavinWood和JeffreyWilcke领导的C++和GO实施,尽管我的Pyethereum实施中也有较小的审计。在这两项学术审核中,一项是由IttayEyal进行的,另一个由AndrewMiller和其他最低权威进行。EYAL审计导致了较小的协议更改:链的总难度不包括叔叔。权限最少的审计更专注于智能合约和天然气经济学以及帕特里夏树。该审核导致了几个协议更改。一个小的是将sha3和sha3用作trie键而不是直接地址和键的使用;这将使对Trie进行最糟糕的攻击变得更加困难。
警告可能比它的时代有点太远了...
我们讨论的另一个重要的事情是气体限制投票机制。当时,我们已经担心比特币大小辩论中缺乏进展,并希望在以太坊中具有更灵活的设计,并且可以根据需要随时间进行调整。但是挑战是:最佳限制是什么?我最初的想法是建立动态限制,针对实际使用气体使用的长期指数移动平均值,因此从长远来看,平均块将是满的。但是,Andrew,这在某些方面是可利用的-特别是,想要提高限制的矿工只会在自己的块中包括交易,这些交易消耗大量的气体,但要花费很少的时间来处理,因此总是创造出来整个块无需花钱。因此,至少在向上的方向上,安全模型相当于简单地让矿工对gas限制进行投票。
我们没能想出一个不太可能打破的gas限制策略,因此Andrew推荐的解决方案是简单地让矿工对gas限制进行明确投票,并将默认投票策略设置为EMA规则。原因是我们离设定最大gas限制的正确方法还有很长的路要走,任何特定方法失败的风险似乎都大于矿工滥用投票权的风险。因此,我们不妨干脆让矿工对gaslimit进行投票,并接受限额过高或过低的风险,以换取灵活性的好处,以及矿工协同工作以非常快速地调整的能力根据需要向上或向下限制。
在Gavin,Jeff和我本人之间进行了小型黑人马拉松之后,POC9于3月推出,并打算成为概念发布的最终证明。使用打算在Livenet中使用的方案,并建立了以太坊的长期计划,使用了四个月的测试网跑了四个月。VinayGupta撰写了一篇博客文章“以太坊启动过程”,其中描述了以太坊Livenet开发的四个预期阶段,并给了他们当前名称:Frontier,Homestead,Mesropolis和Serenity。
黑客马拉松跑了四个月。在最初的两个月中,在各种实现中发现了许多错误,发生了共识失败,除其他问题外,但是在6月左右,该网络明显稳定。7月,决定制作代码冻结,然后发布发布,并于7月30日发布。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。