风险提示:理性看待区块链,提高风险意识!
Vitalik 亲述以太坊发布史:从 Mastercoin 提案到 Ethash 成型
首页 > 币界资讯 > 区块链知识 2019-03-24 10:04:31

原文标题:《V 神 : 以太坊协议的史前史》
文章来源:公众号 红叔笔记
作者:红军大叔

历史是一面镜子,本文翻译自一篇 V 神在 17 年写的 blog。

博客写作时间:2017 年 9 月 14 日

尽管当前的以太坊协议背后的想法已经稳定了两年,但是以太坊并没有在当前的概念中一下子全部出现并完全形成。 在区块链启动之前,该协议经历了一系列重要的进化和设计决策。 本文的目的是讲述协议从开始到发布所经历的各种演变 ; 在协议实现上所做的无数工作,如 Geth、 cppetherium、 pyethereum 和 etherumj,以及在以太坊生态系统中的应用程序和业务的历史,都明显超出了范围。

Casper 和分片研究的历史也超出了范围。 当然,我们可以制作更多的博客文章,讨论 Vlad、Gavin、我和其他人提出的各种各样的想法,还有丢弃的东西, 包括 「 工作量证明 」、hub-and-spoke 链、「 超立方体 」、影子链 (可以说是 Plasma 的前身)、fibers 和 Casper 的各种迭代,以及 Vlad 关于共识协议及其属性中的参与者激励机制推理的迅速发展的想法,但这也是一个太复杂的故事,不能在一篇文章中讨论,所以我们暂且不讨论它。

让我们先从最早的版本开始,它最终成为了以太坊,那时它甚至还不叫以太坊。 当我在 2013 年 10 月访问以色列的时候,我花了相当多的时间和 Mastercoin 团队在一起,甚至还为他们提供了一些功能。 在花了几次时间思考他们在做什么之后,我向团队提交了一份提案,让他们的协议更加通用化,并支持更多类型的合约,而不需要增加庞大、复杂的一系列特性 :

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

Vitalik 亲述以太坊发布史:从 Mastercoin 提案到 Ethash 成型

请注意,这与以太坊的后期和更广阔的视野相差甚远:它完全专注于 Mastercoin 试图专注的事情,即两方合约,其中 A 方和 B 方都会投入资金,然后他们会在以后根据合约中规定的某个公式获取资金(例如,投注会说「如果 X 发生则将所有资金全部交给 A,否则将所有资金全部交给 B」)。 脚本语言不是图灵完备的。

这给 Mastercoin 团队留下了深刻的印象,但是他们没有兴趣放弃他们正在做的一切去朝这个方向前进,我越来越相信这是正确的选择。 下面是第二版,大约在 12 月 :

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

640 (1).jpg

在这里,你可以看到实质性重新构建的结果,这主要是由于我在 11 月份在旧金山进行了长途漫步,一次,我意识到智能合约可能会完全普及。 合约本身不是简单地描述双方关系条款的一种方式,而是本身完全成熟的帐户,并且能够持有,发送和接收资产,甚至维持永久存储(当时, 永久存储被称为「内存」,唯一的临时「内存」是 256 个寄存器。 语言从基于堆栈的机器切换到基于寄存器的机器, 是我自己的想法 ; 除了看起来更复杂之外,我对此没有什么争论。

此外,请注意有一个内置的收费机制 :

640 (2).jpg

在这一点上,ether 实际上就是 gas; 在每一个计算步骤之后,被交易调用的合约的余额会下降一些,如果合约的资金用完了,执行就会停止。 请注意,这种 「 接收者付费 」 机制意味着合约本身必须要求发送者给合约支付费用,如果不存在这种费用,则立即退出 ; 协议分配了 16 个免费执行步骤,允许合约拒绝不付费的交易。

到这个时候,以太坊协议完全是我自己创造的。 然而,从这里开始,新的参与者开始加入这个行列。 到目前为止,协议方面最著名的是 Gavin Wood,他在 2013 年 12 月在 about.me 给我发了消息 :

640 (3).jpg

Go 客户端的首席开发人员杰弗里•威尔克 (Jeffrey Wilcke) 也在大约同一时间接触并开始编码,不过他的贡献更多地是在客户端开发方面,而非协议研究方面。

640 (4).jpg嘿,杰里米,很高兴看到你对以太坊感兴趣 ......

Gavin 最初的贡献是两方面的。 首先,你可能会注意到初始设计中的合约调用模型是一个异步模型:虽然合约 A 可以创建一个「内部交易」到合约 B(「内部交易」是 Etherscan 的行话;最初它们只是被称为「交易」,后来被称为「消息调用」或「调用」),内部交易的执行直到第一个交易的执行完全完成后才会开始。这意味着交易不能使用内部交易作为从其他合约获取信息的方式;唯一的方法是外部操作码 (有点像 SLOAD,你可以用它来读取其他合约的存储),后来在 Gavin 和其他人的支持下,这一点也被删除了。

当实现我的初始规范时,Gavin 自然地同步实现内部交易,甚至没有意识到意图是不同的——也就是说,在 Gavin 的实现中,当一个合约调用另一个合约时,内部交易会立即执行,一旦执行结束,VM 返回到创建内部交易的合约,并继续执行下一个操作码。 这种方法似乎对我们双方都是优越的,所以我们决定将其作为规范的一部分。

其次,他和我之间的一次讨论 (在旧金山散步期间,因此确切的细节将永远消失在历史的风尘之中,甚至可能在国家安全局的深入档案中找到一两份副本) 导致了交易费模型的重构,从 「 合约付费 」 的方式转向 「 发件人付费 」 的方式,也转向了 「gas」 架构。 每个单独的交易步骤不会立即带走一点以太,而是由交易发送者支付并分配一些 「gas」(大致相当于一个计算步骤的计数器) ,计算步骤从这些 gas 余量中得出。 如果交易耗尽了 gas,这些 gas 仍然会被没收,但整个执行过程将被恢复 ; 这似乎是最安全的做法,因为它消除了合约之前必须担心的一整类 「 部分执行 」 攻击。 当交易完成后,所有未使用的 gas 的费用将被退还。

Gavin 很大程度上归功于其视野上的微妙变化,一开始基于区块链的合约 (根据预设规则持有数字资产和转移资产) 将 Ethereum 视为构建可编程货币的平台,然后发展到通用计算平台。 这一切始于重点和术语上的微妙变化,后来随着对 「Web 3」 日益重视,这种影响变得更加强大,后者将以太坊视为一整套去中心化技术的一部分,另外两个是 Whisper 和 Swarm。

640 (5).jpg

2014 年初前后也作出了其他人建议的修改。在安德鲁·米勒 (Andrew Miller) 和其他人提出想法之后,我们最终回到了基于堆栈架构。

640 (6).jpg

查尔斯·霍斯金森 (Charles Hoskinson) 建议将比特币用的 SHA256 编码转换为较新的 SHA3(或者更准确地说,是 keccak256)。虽然有一段时间存在一些争议,但与 Gavin、Andrew 和其他人的讨论最终确定堆栈上的值的大小应限制在 32 个字节内;另一个正在考虑的替代方法(无限大小的整数)存在一个问题,即很难计算出要对加法、乘法和其他操作收取多少 gas。

2014 年 1 月,我们最初想到的挖矿算法是一种名为 Dagger 的新玩意:

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

640 (7).jpg

Dagger 是以「有向无环图」(DAG) 命名的,DAG 是算法中使用的数学结构。其思想是,每 N 个块,一个新的 DAG 将是伪随机地从种子生成的,而 DAG 的底层将是一个需要几 GB 存储空间的节点集合。但是,在 DAG 中生成任何单独的值只需要计算几千个条目。「Dagger 计算」包括在这个底层数据集中的随机位置获取一些值并将它们散列在一起。这意味着有一种快速的方法来进行 Dagger 计算(已经将数据存储在内存中),还有一个速度较慢,但不是内存密集型的方法(重新生成需要从头开始获取的 DAG 中的每个值)。

这种算法的目的是具有与当时流行的算法相同的「内存硬度」属性,如 Scrypt,但仍然是轻客户端友好的。 矿工会使用快速的方式,因此他们的采矿将受到内存带宽的限制(理论上消费级 RAM 已经非常优化,因此很难用 ASIC 进一步优化它),但轻客户可以使用无内存但速度较慢的版本进行验证。快速的方式可能需要几微秒,而缓慢但无内存的方式只需几毫秒,因此对于轻型客户端来说它仍然是非常可行的。

从这里开始,算法将在 Etherum 开发过程中发生几次变化。我们所经历的下一个想法是「适应性工作量证明」;在这里,工作量证明将涉及执行随机选择的以太坊合约,这有一个聪明的理由可以解释为什么这会是抗 ASIC 的:如果开发出 ASIC,竞争旷工将有动力创建和发布许多 ASIC 不擅长执行的合约。一般的计算没有 ASIC 这样的东西,因为它只是一个 CPU,所以我们可以用这种对抗性的激励机制来证明本质上是执行一般计算的工作。

这个计划失败的原因很简单 : 远程攻击 . 攻击者可以从第一块开始创建一个链,然后只用简单的合约来填充它,他们可以为这些合同创建专门的硬件,并迅速取代主链。 所以 ... 从头再来。

下一个算法是一个称为随机电路的东西,在这里的 google doc 中描述,由我和 Vlad Zamfir 提出,并由 Matthew Wampler-Doty 和其他人分析。 这里的想法也是模拟挖掘算法中的通用计算,这次是通过执行随机生成的电路。 没有确凿的证据表明基于这些原则的东西是行不通的,但我们在 2014 年接触到的计算机硬件专家往往对此非常悲观。 Matthew Wampler-Doty 自己提出了基于 SAT 解决方案的工作证明,但最终也被拒绝了。

最后,我们用一个名为「Dagger Hashimoto」的算法来完整循环。 「Dashimoto」,有时被称为简称,借用了 Hashimoto 中的许多想法,这是 Thaddeus Dryja 的工作量算法证明,该算法开创了 「I/O 绑定工作量证明」,其中挖掘速度的主要限制因素不是每秒哈希值,而是每秒 RAM 访问量的兆字节数。 然而,它将这与 Dagger 关于轻客户端友好的 DAG 生成数据集的概念相结合。 经过我自己,Matthew,Tim 和其他人的多轮调整后,这些想法最终融入了我们现在称之为 [Ethash] 的算法(https://github.com/ethereum/wiki/wiki/Ethash)。

640 (8).jpg

到 2014 年夏天,该协议已经相当稳定,除了工作证明算法直到 2015 年初才到达 Ethash 阶段,并且以 Gavin 的黄纸半正式规范形式存在。

640 (9).jpg

2014 年 8 月,我开发并引入了叔区块机制 the uncle mechanism,它允许 以太坊的区块链有更短的阻塞时间和更高的容量,同时降低了集中化的风险。 这是作为 PoC6 的一部分引入的。

与 Bitshares 团队的讨论后, 我们考虑将堆作为头等数据结构来添加,尽管我们最终没有做到这一点,因为时间不够,后来的安全审计和 DoS 攻击表明,安全地完成这一任务实际上比我们当时想象的要困难得多。

9 月,Gavin 和我计划了协议设计的下两个主要变化。 首先,除了状态树和交易树之外,每个块还包含一个「收据树」。 收据树将包括交易创建的日志的哈希值以及中间状态根。日志将允许交易创建保存在区块链中的「输出」,并且可供轻客户端访问,但未来的状态计算无法访问。这可以用于允许分散的应用程序容易地查询事件,例如 token 传输,购买,正在创建和填写的兑换单,拍卖的时间等等。

还考虑了其他一些想法,比如从交易的整个执行跟踪中创建一个默克尔树,以允许任何事情被证明 ; 之所以选择日志,是因为它们是简单性和完整性之间的折衷。

第二个是「预编译」的概念,解决了允许复杂的加密计算在 EVM 中可用而不必处理 EVM 开销的问题。我们还经历了许多关于「原生合约」的雄心勃勃的想法,如果矿工们对某些合同的优化实施,他们可以「投票」这些合约的 gasprice,那么大多数矿工可以更快地执行的合约自然会有低的 gasprice; 但是,所有这些想法都被拒绝了,因为我们无法提出一种经济上安全的方式来实现这样的事情。攻击者总是可以创建一个合约,执行一些陷阱加密操作,将陷门分配给他们自己和他们的朋友,让他们更快地执行这个合约,然后投票给 gasprice 并将其用于 DoS 网络。相反,我们选择了一种不那么雄心勃勃的方法,即在协议中简单指定较少数量的预编译,用于哈希和签名方案等常见操作。

Gavin 也是开发「协议抽象」 概念的关键初始声音 - 将协议的许多部分(如以太坊月,交易签名算法,随机数等)作为契约移入协议本身,理论上最终目标是达到 整个以太坊协议可以被描述为对具有一些预初始化状态的虚拟机进行函数调用的情况。 这些想法没有足够的时间进入最初的 Frontier 版本,但预计这些原则将通过君士坦丁堡的一些变化,Casper 合约和分片规范慢慢开始整合。

这一切都在 PoC7 中实现 ; 在 PoC7 之后,该协议并没有真正改变太多,除了次要的,虽然在某些情况下很重要,但通过安全审计会产生的细节 ......

2015 年初,由 Jutta Steiner 和其他人组织的启动前安全审计,包括软件代码审计和学术审计。软件审计主要是关于 C ++和 Go 实现,分别由 Gavin Wood 和 Jeffrey Wilcke 领导,我的 pyethereum 实现也有一个较小的审计。在两次学术审计中,一次由 Ittay Eyal (「自私挖矿」成名)执行,另一次由 Andrew Miller 和其他来自 Least Authority 的人进行。 Eyal 审计导致了一个小的协议变更:链的总难度不包括叔块。 最小权威审计更侧重于智能合约和 gas 经济学以及 Patricia 树。该审计导致了若干协议变更。一个小的变更是使用 sha3 (addr)和 sha3 (key)作为 trie 键而不是直接使用地址和密钥 ; 这将使得对 trie 执行最坏情况攻击变得更加困难。

640 (10).jpg这个警告可能有点超前了 ...

我们讨论的另一个重要问题是 gas 限制投票机制。 当时,我们已经对比特币区块大小争论中缺乏进展感到担忧,并希望在以太坊中有一个更灵活的设计,可以根据需要随时调整。 但面临的挑战是:最佳限制是什么? 我最初的想法是制定一个动态限制,目标是实际 gas 使用量的长期指数移动平均值的 1.5 倍,这样从长远来看,平均块数将是 2/3 满足率。 然而,安德鲁表明,这在某些方面是可以利用的-具体地说,想要提高上限的矿工只需在自己的区块中包括交易,而这些区块消耗了大量 gas,但处理所需时间很少,因此他们总是在不付出成本的情况下创建完整的区块。因此,安全模式至少是向上的,相当于让矿工简单地就 gas 限额进行投票。

我们没有设法提出一个不太可能破坏的 gas 限制策略,因此安德鲁建议的解决方案是让矿工明确地对 gas 限制进行投票,并且投票的默认策略是 1.5 倍 EMA 规则。 原因是我们距离确定设定最大 gas 限值的正确方法还很远,而且任何具体方法失败的风险似乎都大于矿工滥用其投票权的风险。 因此,我们不妨简单地让矿工对 gas 限制进行投票,并接受限制将过高或过低的风险,以换取灵活性的好处,以及让矿工有能力在需要时迅速调高或调低上限。

在 Gavin、 Jeff 和我之间进行了一次小型编程马拉松之后,3 月份发布了 pocket9,并打算作为概念发布的最终验证。 一个名为 「 奥林匹克 」(Olympic) 的测试网络运行了四个月,使用的是原本打算用于 livenet 的协议,从而确立了以太坊长期计划。 Vinay Gupta 写了一篇名为「The Ethereum Launch Process」的博文,描述了 以太坊 livenet 发展的四个预期阶段,并给它们取了现在的名字 : 前沿、 家园、 大都会和宁静。

Olympic 持续运行了四个月。 在前两个月,在各种实施中发现了许多错误,发生了共识失败,以及其他问题,但在 6 月左右,网络显着稳定。 7 月份决定冻结代码,然后发布,7 月 30 日发布了版本。

上一篇: 梁信军:正规军已入场,区块链将重构信任的方式
下一篇: 最新 Vitalik 台北以太坊会议演讲:ZK ZK Rollup 以太坊扩容方案
推荐专栏
web3首席知识博主
一位相信价值投资的币圈KOL。稳定盈利的缠论野生交易员 #BTC行情分析师 #价值投资 #链上数据分析
爱Web 3,爱生活,爱科技,爱炒币的老韭菜
热门币种
更多
币种
价格
24H涨跌幅
BTC比特币
¥264,810.46
37,103.37 USDT
+0.1%
ETH以太坊
¥14,413.37
2,019.50 USDT
0%
USDT泰达币
¥7.20
1.01 USDT
0%
BNB币安币
¥1,629.54
228.32 USDT
+0.63%
XRP瑞波币
¥4.32
0.60480 USDT
+0.45%
USDC
¥7.14
1.00 USDT
+0.04%
SOLSolana
¥400.45
56.11 USDT
+1.59%
OKBOK币
¥399.37
55.96 USDT
-1.23%
ADA艾达币
¥2.67
0.37480 USDT
-1.32%
DOGE狗狗币
¥0.55330
0.07753 USDT
-1.01%
热搜币种
更多
币种
价格
24H涨跌幅
Terra Classic
¥0.00
9.481E-5 USDT
-18.15%
Gala
¥0.18
0.025383 USDT
-4.86%
dYdX
¥22.63
3.1984 USDT
-0.73%
比特股
¥0.05
0.006569 USDT
-1.93%
PancakeSwap
¥15.60
2.2054 USDT
-2.16%
Conflux
¥1.08
0.1531 USDT
-2.36%
Filecoin
¥31.55
4.4597 USDT
-0.5%
FTX Token
¥29.65
4.1911 USDT
+15.24%
Yield Guild Games
¥2.56
0.3615 USDT
-0.55%
Shiba Inu
¥0.00
8.15E-6 USDT
-2.16%
比特币
¥262,467.38
37103.37 USDT
+0.1%
比原链
¥0.07
0.010022 USDT
-4.68%
最新快讯
更多
汇丰、恒生、渣打、富邦华一四家外资银行入围首批“数字人民币”业务试点名单
2023-11-28 19:06:57
摩根大通和Apollo计划建立代币化“企业主网”
2023-11-28 19:03:57
Nansen2公测版本上线,新增链上数据异动、智能搜索等功能
2023-11-28 18:59:52
西班牙公民需在明年3月底前申报其海外平台上加密货币持仓
2023-11-28 18:53:43
Nansen2已公开测试
2023-11-28 18:53:38
dYdX基金会:主网启动以来超过1645万DYDX被质押
2023-11-28 18:52:07
NicCarter等比特币倡导者发文:比特币挖矿是清洁能源和平衡电网的关键工具
2023-11-28 18:47:58
下载币界网APP