LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > V神亲笔:以太坊史前时代,Gavin Wood是Ethereum最杰出的“协议贡献者”

V神亲笔:以太坊史前时代,Gavin Wood是Ethereum最杰出的“协议贡献者”

2020-11-28 阿风1989 来源:区块链网络

作者 | Vitalik Buterin

发布时间 | 2017年9月

翻译&校对 | 阿风1989

原文链接:https://vitalik.ca/general/2017/09/14/prehistory.html

预告:今晚比特摩斯(BitcoinMetzdowd)社区直播,聊聊“重仓Kusama背后的逻辑,以及可能的高点”。今晚8点整,暗号“币乎”。

Polkadot Founder Gavin Wood(左一)与Parity Technologies CEO & Founder Jutta Steiner(左二)| 此照片由V神拍摄

当前(2017年9月份),支撑以太坊协议的所有想法(ideas),很大程度上已于两年前(2015年)成型,但这些想法并不是一次性闪现出来的,至少并没有以当下的概念和形式出现。不得不说,在以太坊在正式启动之前,该协议经历了许多重大的演变和设计决策。

那么,本文的目的是要从头到尾遍历该协议所经历的各种演变历史。在协议实现(如Geth、cppethereum、pyethereum和EthereumJ)上所做的无数工作,以及在Ethereum生态系统中应用程序和业务的实现过程,其中不少工作都有意超范围的。

例如,对Casper和分片的历史回顾就超出了范围。

强调一点,虽然我可以写更多博文来谈论弗拉德(Vlad)、加文(Gavin)、我本人和其他人提出的各类想法,但都被放弃了,这其中就包括工作量证明(proof of proof of work)、轮辐架构链(hub-and-spoke chains),超立方体(hypercubes),影子链(shadow chains,可以说是Plasma的前身),链纤维(chain fibers)和Casper的各种迭代,以及弗拉德关于共识协议中的参与者激励及其性质的思考,这也是极其复杂的故事,无法在一篇文章中面面俱到,所以我们暂时将其省略。

首先,让我们从最早的并最终成为以太坊的版本开始说起,这个版本在当时甚至还没有被称为以太坊。

2013年10月,访问以色列期间,我在Mastercoin(关于Mastercoin,长铗在2013年写过一篇文章,戳这里)团队度过了很多时间,甚至为他们提出过功能上的改进建议。在数次深入思考他们所开发的项目之后,我向他们团队发送了一个提案,以使他们的协议更加通用,并支持更多类型的合约,而无需添加同样庞大而复杂的功能集:

https://web.archive.org/web/20150627031414/http://vbuterin.com/ultimatescripting.html


请注意,这个提案与以太坊后来更为广阔的愿景相去甚远:提案纯粹专注于Mastercoin正在尝试的领域,即双方合约(two-party contracts),例如双方都会投入资金,然后他们会根据合约中规定的一些公式把钱拿出来(比如打赌说“如果X发生了,把钱全部给a,否则把钱都给B”)。此外,脚本语言也不是图灵完备的。

Mastercoin团队对此印象深刻,但他们并不想放弃原来所做的一切,此时,我也越来越确信自己的想法正确的。因此,大约在12月(2013年),第二个版本出现了

https://web.archive.org/web/20131219030753/http://vitalik.ca/ethereum.html


在这个链接里面,您可以看到大量不同之处。之所以会做出巨大改进,与我在11月在旧金山进行的一次长途跋涉有关,当时我就意识到智能合约有可能被完全推广。

在描述双方关系时,脚本语言并不是最简单的方式,合约则不同,其本身就是一个成熟账户,能够持有、发送和接收资产,甚至具备永久性存储功能(当时,永久性存储被称为“内存”,唯一的临时“内存”是256位寄存器,寄存器的功能是存储二进制代码)。与上面提到的第一个版本相比,版本语言从基于堆栈的机器转变为基于寄存器的机器,这是我自己的意愿;除了它看起来更复杂之外,我几乎没有理由不去支持它。

此外,请注意,这里创建了一个内置的收费机制:


从这里看出来,ETH实际上就是Gas,每执行一步操作,合约余额都会下降一点,直至合约余额为0,执行步骤就会自动停止。请注意,这种“接收方付款”机制意味着合约会要求发送方支付费用,如果费用用完,则立即退出执行步骤。此外,该协议分配了16个自由执行步骤,允许合同拒绝非付费交易。

在此之前,以太坊协议完全是我自己创建的。

不是,从这里开始,故事发生了改变,因为新的参与者开始加入这一行列,为以太坊开发做出大量贡献。

我认为,到目前(2017年9月)为止,协议方面最杰出的是加文·伍德(Gavin Wood),他在2013年12月的abou****邮件中与我联系:


Go客户端(当时称为“ ethereal”)的首席开发人员Jeffrey Wilcke也伸出援手,并开始在同一时间进行编码,尽管他的贡献更多是在客户端开发而不是协议研究方面。


“嘿,杰里米,很高兴看到您对以太坊感兴趣...”

Gavin的最初贡献是双重的。

首先,您可能会注意到,早期版本的合约调用模型是异步的:尽管合约A可以与合约B创建“内部交易”(“内部事务”是Etherscan的行话;最初它们被称为“事务”,后来被称为“消息调用”或“调用”),但是内部事务的执行要等到头一个事务执行完全完成后才能开始。这就意味着,交易不能使用内部事务作为从其他合约中获取信息的方式。唯一的方法就是EXTRO操作码(类似于SLOAD,您可以用来读取其他合约的存储),后来在Gavin和其他人的支持下也将EXTRO操作码删除。

实现我最初的规范时,Gavin自然而然地实现了内部事务同步执行,甚至没有意识到其目的不同的——也就是说,在Gavin的实现中,当调用另一个合约,合约内部事务也会被立即执行,一旦执行完成,VM返回合约创建内部事务和继续下一个操作。我们俩都觉得这个方法很好,所以我们决定把它作为协议的一部分

其次,他和我之间的讨论(在旧金山徒步期间,因此确切的细节将永远遗忘于历史之风中,不过倒是有可能会在国家安全局的档案中留下一两份副本),促成了交易费用模型的重新设计,交易费用模型从“合约支付”转变成了“发送者付费”。

同时,“Gas”架构也发生了变化,不是每个单独的事务步骤都需要即刻支付ETH代币,取而代之的是事务发送方支付“Gas”(可以理解成计算步骤的计数器),并且计算步骤从Gas的允许量中提取。如果一个交易用光了gas,gas仍然会被没收,但整个执行过程将会恢复;这似乎是最安全的做法,因为它消除了合约之前必须担心的一类“部分执行”攻击。交易执行完成后,任何未使用的Gas费用将退还。

这还没完。

从以太坊被视为构建可编程货币的平台开始,到基于区块链的合约可以发行加密资产,并根据预设规则将其转移到通用计算平台,这些微妙的变化,都可以归功于Gavin。这些重要的细节变化,后来随着对“Web3”的日益重视,变得越来越重要,这些改进将以太坊变成了一套分布式技术的一部分,另外两项变化是Whisper和Swarm。


Ethereum / Swarm / Whisper

其他人在2014年初也提出了一些建议。

在安德鲁·米勒(Andrew Miller)和其他人提出一些想法之后,我们最终回到了基于堆栈的体系架构。

查尔斯·霍斯金森(Charles Hoskinson)建议从比特币的SHA256切换到较新的SHA3(或更准确地说,是keccak256)。

尽管有一段时间存在争议,但与Gavin,Andrew和其他人的讨论,最终确定将堆栈上值的大小被限制为32个字节;考虑的另一种选择是无限大小的整数,它的问题是很难计算加法、乘法和其他操作需要多少Gas。

2014年1月,我们提出的最初的挖矿算法是一种叫做Dagger的装置:

https://github.com/ethereum/wiki/blob/master/Dagger.md


Dagger被命名为“有向无环图”(DAG),DAG是算法中使用的数学结构。其思想是,每生成N个块,一个新的DAG将由一颗种子伪随机生成,而DAG的底层将是一个节点集合,需要几个GB存储。但是,在DAG中生成任何单独的值只需要计算几千个条目——大大减少了计算量。“Dagger计算”会从底层数据集中随机获得一些值,并将它们哈希在一起。

意味着有两种方法进行Dagger计算:快速的——将数据存储在内存中;慢速的——需要从头获得DAG,重新生成每个值,但不占用内存。

引入该算法的目的是要与当时流行的算法(如Scrypt)保持相同的“内存硬度”(memory-hardness),但仍对轻客户端友好。矿工将使用快速方式,因此挖矿会受到内存带宽的限制(理论上,消费者级RAM已经非常优化,因此很难通过ASIC对其进行进一步优化),但是轻型客户端可以使用无内存但速度较慢的版本进行验证。

矿工采用上面提到的快速的方法可能需要几微秒,而缓慢的但不占用内存的方法可能需要几毫秒,因此对于轻型客户端而言仍然非常可行。

从这里开始,该算法(DAG)将在以太坊开发过程中发生多次更改。我们讨论的下一个想法是“自适应工作证明”;在这里,工作量证明将涉及执行随机选择的以太坊合约,一个很好的预期是,它会是ASIC-resistant:如果开发了ASIC,矿工在竞争过程中将有动力创建和发布许多合约, ASIC不擅长执行。故事是这样的,因为没有用于通用计算的ASIC,因为它只是一个CPU,所以我们可以改用这种对抗性激励机制,来证明本质上是在执行通用计算的工作量证明。

该算法之所以会崩溃,原因很简单:远程攻击。攻击者可以从第1个区块块开始建立一条链,然后仅用简单的合约就可以填充,他们可以为其创建专用硬件并迅速超越主链。

所以...言归正传。

下一个算法是一种名为“随机电路”(Random Circuit)的算法,在我自己和弗拉德·扎姆菲尔(Vlad Zamfir)的提议下,在此Google文档中进行了描述,并由Matthew Wampler-Doty等人分析。这里的想法还在于在挖掘算法内部模拟通用计算,这一次是通过执行随机生成的电路。没有确凿的证据表明基于这些原理的某些方法行不通,但是我们在2014年接触的计算机硬件专家对它持相当悲观的态度。Matthew Wampler-Doty本人根据SAT解决方案提出了工作证明,但最终也遭到了拒绝。

最后,我们全面介绍了一种名为“ Dagger Hashimoto”的算法。有时简称为“ Dashimoto”,它借鉴了Thaddeus Dryja的工作量证明算法Hashimoto的许多想法,该算法证明了“ I / O绑定工作量证明”的概念,其中采矿速度的主要限制因素是不是每秒散列,而是每秒MB的RAM访问。但是,它结合了Dagger的DAG生成的轻客户端友好数据集的概念。经过我自己,Matthew,Tim和其他人的多轮调整之后,这些想法最终融合到了我们现在称为Ethash的算法中。


到2014年夏天,该协议已相当稳定,但主要的例外是工作量证明算法,该算法要到2015年初左右才能进入Ethash阶段并且以Gavin的黄皮书形式存在一个半正式的规范


2014年8月,我开发并介绍了叔叔机制,该机制使以太坊的区块链具有更短的区块时间和更高的容量,同时减轻了中心化风险。这是PoC6的一部分。

与Bitshares团队的讨论使我们考虑将堆添加为一流的数据结构,不过由于时间不足,我们最终没有这样做,后来的安全审核和DoS攻击将表明,这实际上比我们想象的要难得多,当时以为可以安全地执行此操作。

在2014年9月,Gavin和我计划了协议设计方面的两个重要改动。

首先,除了状态树和事务树之外,每个块还将包含一个“接收树”。接收树将包含事务创建的日志的哈希值以及中间状态根。日志将允许交易创建“输出”,这些输出保存在区块链中,并且轻客户端可以访问,但将来的状态计算无法访问。这可用于允许分散的应用程序轻松查询事件,例如令牌转移、购买、正在创建和填写交换订单、正在开始拍卖等。

还考虑了其他想法,例如在事务的整个执行跟踪中制作一棵Merkle树,以证明一切。选择日志是因为它们是简单性和完整性之间的折衷。

第二个是“预编译”的思想,解决了允许复杂的密码计算在EVM中可用而无需处理EVM开销的问题。我们还就“本地合约”提出了更多雄心勃勃的想法“,如果矿工对某些合约进行了优化实施,他们可以“投票”降低这些合约的Gas费,因此大多数矿工可以更快执行的合约自然会降低Gas费;但是,所有这些想法都被拒绝了。因为我们无法提出一种在经济上安全的方式来实现这种事情,所以攻击者总是可以创建一个执行陷阱门加密操作的合约,将陷阱门分发给自己和他们的朋友,以使他们更快地执行此合约,然后否决Gas费并将其用于网络DoS。取而代之的是,我们选择了较为宽松的方法,即针对哈希和签名方案之类的常见操作,使用协议中简单指定的少量预编译。

Gavin在开发“协议抽象”概念时起到了关键作用——将协议的许多部分(例如以太币余额、交易签名算法、随机数等)作为合约移入协议本身,其理论最终目标是让整个以太坊协议都可以对具有某种预初始化状态的虚拟机进行函数调用。

虽然Gavin的这些想法没有足够的时间进入Frontier的初始版本,但是通过一些君士坦丁堡的变更、Casper合约和分片规范、预计这些原理将开始慢慢整合。

所有这些都在PoC7中实现,在PoC7之后,该协议实际上并没有太大变化,除了很小的例外(尽管在某些情况下很重要)之外,这些细节将通过安全审核得出...

2015年初,Jutta Steiner和其他人组织了启动前安全审核,包括软件代码审核学术审核

软件代码审计主要针对分别由Gavin Wood和Jeffrey Wilcke领导的C ++和Go代码实现上,对我的pyethereum代码实现也进行了较小的审计。在学术审计中,一项是由Ittay Eyal(“自私的采矿”名声)进行的,另一项是由Andrew Miller和其他最低权力机构进行的。

进行Eyal审计后,对协议进行了较小的更改:链条的总难度将不包括叔叔(uncles)。而最权威的审计更侧重于智能合约和Gas经济学,以及Patricia树。这次审计导致了一些协议的更改。一个小小的方法是使用sha3(addr)和sha3(key)作为查找树键,而不是直接使用地址和键;这将使在查找树上执行攻击变得更加困难。


而且警告可能比它的时间提前了太多……

我们讨论的另一重要事项是Gas限制投票机制。当时,我们已经对比特币区块大小辩论停滞不前感到担忧,并希望在以太坊中拥有一种更灵活的设计,可以根据需要随时间进行调整。

但是挑战在于:最佳极限是多少?我最初的想法是设定一个动态限制,目标是实际Gas使用量的长期指数移动平均值,因此从长远来看,平均区块将有三分之二是被充满。

然而,安德鲁指出,这在某些方面是可以利用的——具体来说,想要提高限额的矿工只需将消耗最多Gas的交易纳入自己的区块,但只需很少的时间进行处理,因此总是可以在不增加成本的情况下创建完整的区块。因此,安全模式至少在向上,相当于让矿商投票决定Gas Limits。

我们没有想出一个不太可能突破的Gas Limits策略,所以Andrew推荐的解决方案是让矿工明确地对Gas Limits进行投票,默认的投票策略是均线规则。

其原因是,我们还远远不知道制定最大限度Gas Limits的正确方法,任何具体方法失败的风险似乎比矿工滥用投票权的风险更大。因此,我们不妨简单地让矿工表决Gas Limits,并接受的风险限制会过高或过低,以换取好处的灵活性,矿工们能通过投票,对Gas Limits进行快速调整。


从左至右分别是 Vitalik Buterin / Jeffrey Wilcke / Gavin Wood | 此照片由V神拍摄

在Gavin、Jeff和我,我们三人举行了一次迷你黑客马拉松之后,PoC9于2015年3月发布,旨在成为概念发布的最终证明。Olympic测试网运行了四个月,使用的是原本打算用于实时网的协议,并建立了以太坊的长期计划。

Vinay Gupta在博客文章“以太坊启动过程”中描述了以太坊livenet开发的四个预期阶段,并为其指定了当前名称:Frontier,Homestead,Metropolis和Serenity。

Olympic测试网运行了四个月。在最初的两个月中,各种发现了各种错误,除了共识失败,还出现了其他问题,但是在6月份前后,网络明显趋于稳定。7月,决定冻结代码,然后发布版本,并于2015年7月30日发布版本。

备注:文本高亮为此颜色,表示专业术语,对译文拿捏不很自信,文本高亮为此颜色,表示此处很重要或论述十分精彩,需重点关注。

往期精彩:

1)关于keycommunity节点经济模型,我和万乎涨老板聊了聊,为销毁Key,他们调动了1亿人民币!

2)Crypto Briefing报告:波卡的狂野亲Kusama,有可能成为游戏改变者吗?

3)Kusama,拆分100倍绝不是最重要的,比特摩斯社区为何一直加仓KSM代币?

4)牛市来了,你买的币却没有涨,怎么办?

5)波卡DeFi,资本暗流涌动,像极了以太坊DeFi爆发前

添加微信BitcoinMetzdowd,不定期有高端课程放送,Polkadot生态、DeFi、财富密码,你想要的都会有!


—-

编译者/作者:阿风1989

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...