# 以太坊概览

By [DK](https://paragraph.com/@iamdk) · 2022-05-11

---

引言
--

以太坊的概念建立区块链和密码学货币之上，不熟悉区块链和比特币的读者可以先去看看《[比特币的简介](http://bitsonblocks.net/2015/09/01/a-gentle-introduction-to-bitcoin/)》和《[区块链技术的简介](http://bitsonblocks.net/2015/09/09/a-gentle-introduction-to-blockchain-technology/)》。本文假定读者对比特币的运行已有一定了解。

以太坊是什么？
-------

以太坊是运行在计算机网络上的软件，使数据和一些叫智能合约的程序，在没有中央协调者的情况下，也可以在网络中复制与处理。以太坊的愿景是创造一种不会停机的、抗审查的、能自我维持的去中心化世界计算机。

相关信息请看以太坊基金会的为以太坊设立的公开网站：[https://www.ethereum.org](https://www.ethereum.org/)

比特币在世界范围内无数计算机上实现了交易数据的验证，复制和存储（因此也有人称之为 “分布式账本”）。而以太坊则把比特币中区块链的概念加以扩展，更进一步，希望在世界各地的无数计算机上同等无偏地运行计算机代码。

比特币实现了分布式的数据存储，以太坊则用同样的方式实现了分布式的数据存储和计算。（从整体来看），以太坊就像一台计算机，而上面运行的计算机程序我们叫做 “智能合约”。（从实际上来说），一个网络参与者乃是在他的电脑上用一种叫 “以太坊虚拟机” 的操作系统运行这些程序（“智能合约”）。

编者注：这样说更顺一点：有无数人在自己的计算机上运行以太坊客户端软件，这些电脑之间会相互通信、传递数据。只要这些数据符合一定的规则（“以太坊共识规则”），客户端软件就会按照一些规则来使用这些数据，具体来说，就是用这些数据在 EVM（“以太坊虚拟机”）（相当于 Windows 或者 Android）中运行一些程序（“智能合约”），然后得出结果。有趣的是，只要大家都遵守同样的规则并相互通信，无数节点得到的结果都是一样的（“共识”）（但达成共识一般需要时间，不是瞬时达成的）。

可以参照下图来理解：

>   

>   

（最下面一层是相互通信，中间一层是对这些数据达成共识，最上面一层是用这些数据驱动应用程序的运行）

此外，这个过程还跟一个非常有意思的概念有关：“可信任计算”，指的是计算过程的可信任性。感兴趣的可以看《[可信任计算的黎明](https://ethfans.org/posts/the-dawn-of-trustworthy-computing-reviewed)》。

怎么 “运行” 以太坊呢？
-------------

你可以下载以太坊客户端（Ethereum client）软件。当然咯，如果你有足够的耐心，也可以自己写一个。类似于 BitTorrent 和 Bitcoin 这类软件，以太坊客户端会在互联网中把你和其他使用相同客户端软件的人连接起来，这样一来，你就可以从他们那下载以太坊的区块链了。以太坊客户端软件还将独立地验证收到的每个区块是否符合以太坊的规则。

以太坊客户端软件可以用于：

*   连接以太坊的网络
    
*   探索以太坊的区块链
    
*   创建新的交易和智能合约
    
*   运行智能合约
    
*   挖掘新区块
    

> 编者注：所谓的 “**区块链**” 即是一系列的交易数据，这些交易是网络中所有计算机都确认过符合（当时的）规则并且执行过的（“交易” 主要是指密码学货币的转账）。而 “挖掘新区块” 的意思就是试图把一些数据传播出去让其它计算机也来执行，之所以叫 “区块” 是因为这时候这些交易是打包成一个数据块来传播的（别的时候，交易数据也可以独立传播）。

> 而平时我们说的 “区块链”，指的是一套让上述系统（所有计算机都保存并且执行了同样的交易数据）得以实现的技术（计算机交互协议）。

如此，你的计算机就化身为网络中的一个**节点**，运作着 “以太坊虚拟机” ，并且与所有其他节点行为一致。在点对点的网络上，不存在主服务器，任何电脑都有平等的权力和地位。

> 编者注：截至 2019 年 5 月，保存了完整以太坊区块链的节点（也称为 “全节点”），即上文所说的 “无数”，约为 6000 个。因为网络是开放的，节点的数量也会不断变化。

以太坊和比特币的相似之处
------------

认为理解以太坊最简单的方法是对比以太坊和比特币（一个更简洁的系统）的相同点与不同点。事不宜迟，我们先说相同点。

### 以太坊也会形成一条区块链

像比特币一样，以太坊也会形成一条区块链，区块链包含着数据块（交易数据和智能合约代码）。某些参与者创建和挖出区块后，就分发给其他参与者去验证（这个区块的合规则性）。

要了解以太坊区块链都记录了什么信息，请看这个 “**区块浏览器**”：[https://etherscan.io](https://etherscan.io/)

每个区块都要引用零一个区块的哈希或着说 “数字指纹”，这样区块就会前后相接形成一条链。想了解更多区块链技术的详细介绍，请参阅：《[区块链技术的简介](http://bitsonblocks.net/2015/09/09/a-gentle-introduction-to-blockchain-technology/)》

> 编者注：如上所述，参与者可以把一些数据组织成一个 “区块” 来传播，其它节点收到区块后会先验证这个区块符不符合我们预先确定的规则，符合就执行区块中的交易，不符合就会拒绝该区块：不执行其中的交易，也不再传播该区块。

> 关于 “**哈希值**”，简单理解就是一个函数的结果，相同的数据输进函数得到的结果一定相同，不同的数据输进函数得到的结果几乎可以说一定不同（相同的概率极低），因此可以用哈希值来标示区块。请看《[Emoji 表情带你秒懂哈希函数](https://ethfans.org/posts/this-simple-yet-powerful-invention-is-changing-the-world)》

### 以太坊是无需许可的开放式网络

像比特币一样，以太坊主网是开放且无需许可的。任何人都可以通过下载的或者自己写的软件来连接网络，无需登录某个网站、无需向任何人报备，即可开始创建交易和智能合约、验证交易乃至挖矿（挖掘区块）。

一般而言，人们但凡谈到以太坊，指的都是这个无需许可的开放式版本。但是，和比特币一样，有了以太坊客户端软件后，你只需稍微追加一些设置，就可以建立与公共网络相互独立的私有网络。不过，目前私有网络中的代币和智能合约还不能与公共代币兼容。

想了解更多关于无需许可的开放式网络和私有权限网络之间的差别，请阅读：《[不同类型的 “区块链”](http://bitsonblocks.net/2016/05/09/confused-by-blockchains-revolution-vs-evolution/)》

### 以太坊用工作量证明（PoW）挖矿

和比特币一样，以太坊矿工在创建有效区块时需要求出一类数学难题的一个解，求解过程无章法可言，因此必须投入大量电力用计算机不断运算。

以太坊的工作量证明数学难题被称为 “Ethash”，它和比特币的 PoW 算法稍有不同。人们使用常见的硬件也可以参与 Ethash 挖矿。在比特币挖矿活动中，专用硬件（ASIC）十分常见，而以太坊的 Ethash 则在设计上削减了专用硬件的效率优势。

关于挖矿的更多资讯，请参见：《[比特币挖矿的简介](http://bitsonblocks.net/2015/09/21/a-gentle-introduction-to-bitcoin-mining/)》

> 编者注：具体而言，在 PoW 系统中，当挖矿者把交易打包之后会形成一个结构化数据（“**区块头**”）（交易不同则这部分结构化数据自然不同），区块头中还有一些别的数据，比如创建区块时的时间戳、父区块的哈希值，等等。而区块合规则性的要求就是区块头的哈希值（作为一个数值）符合一定的要求（“**难度要求**”）（比如比特币协议的难度要求是哈希值开头的 “0” 达到一定数量）。但是，如上所言，确定数据的哈希值是确定的，没有什么能保证仅凭上述数据可以产生一个符合要求的哈希值，因此出块者要不断改动其中一个没有特殊意义的数据（“**区块 nonce**”），直至区块头的哈希值符合难度要求（否则即使传播出去了，其它节点也不会接受这个区块）。

> 前文多次出现的 “打包交易”，意思等同于 “选择一组交易作为区块的内容”，因为在同一时间可能有很多人希望发起交易，但区块链系统为了安全，对区块大小作了限制（比如限制了区块的数据量大小或计算量总上限，见下文），因此挖矿者必须在自己接收到的待上链交易池（“**pending tx**” or “**memory pool**”）中选择部分交易组成一个区块，然后如上文所说形成结构化数据并开始挖矿。

在以太坊的路线图上，有一个叫 Casper 的协议计划，它一改耗电的工作量证明，摇身变为更节能的权益证明，会在以太坊未来的 “宁静（Serenity）” 版本中发布。

> 编者注：所谓权益证明（PoS），即是用参与者在一个资金池中的资金比重来确定 TA 的出块概率，参与者之间不再比拼谁先算出符合难度的哈希值，自然也就不需要投入大量电力来计算了。

> 自 2014 年来，以太坊核心开发团队就一直在研究权益证明共识机制。截至此时（2019 年 5 月），在以太坊主网上实现的权益证明方案 Casper 已基本敲定，有望于 2019 年末完成部署，翻开以太坊的全新篇章。

### 以太坊有一种内置的密码学货币

以太坊的代币叫 Ether，英文缩写为 ETH。现在的市场已经接受拿 ETH 与其它密码学货币和主权货币相交换，就像接受 BTC 一样。ETH 当前价值约为 13 美元/ETH（2016 年 10 月）。与比特币类似，以太坊代币的所有权也记录在以太坊区块链上，虽然技术层面上严格来说，记录的方式稍有不同。

> 编者注：这里的重点是，内置的密码学货币是随着区块的挖出而发放的：每出一个块，就把（预先确定好）一定数量的密码学货币发放给挖出区块的人（“矿工”）。

> 上文提到很多次的 “交易”，在比特币区块链上主要是指比特币的转账交易，而在以太坊上则更为多样，主要包括 ETH 的转账、用户与智能合约的交互、以及智能合约所发行代币的转移。

> 自原文成章以来，ETH 的价格已经从 13 美元（约 87 元）开始一路上涨，最高曾到达 1347 美元的高位（约 9000 元）（2018 年 1 月）然后逐渐下跌至 100 美元左右（2018 年 10 月），现又开始逐渐回升至 250 美元（2019 年 5 月）。此外，密码学货币对法定货币的价格几乎每天都在大幅波动。

以太坊和比特币的不同之处
------------

准备好小板凳，我们要开启更技术也更复杂的话题了。

### 以太坊的出块时间更短

在以太坊网络中，每个区块之间的时间间隔大概是 14 秒，而比特币的区块间隔时间约为 10 分钟。这个时间差意味着，如果你同时发了比特币交易和以太坊交易，一般而言，把以太坊交易记录到以太坊区块链的速度要比比特币交易记录到比特币区块链的速度要快。我们也可以将这一点理解为，比特币网络每 10 分钟写一次数据库，而以太坊网络每 14 秒写一次数据库。

> 编者注：虽然在比特币和以太坊在这一点上有所不同，但具备这种属性的原理都是一样的：它们是 PoW 系统。如上所述，无数计算机处在一个开放式的网络中，所有计算机都随时可以退出，也可以随时加入，那么这就带来一个严肃的问题：如果所有计算机各自为政，自己接收到数据就处理，那么这些计算机就不能形成 “共识”，整个系统也无法实现基本的功能（比如货币转账，因为各有各记载的交易历史，谁也无法确定某个账户到底有多少钱）。因此，PoW 的意义等于是说：如果你要在这个账本上记一笔，请先证明你花费了很多计算资源。辅之以 “难度要求” 的变化，我们可以实现对出块所需工作量的调整，进而调整个网络的出块间隔。为什么要实现这种稳定的出块间隔可能有很多理由，这里不详细展开了。

### 以太坊的区块更小

比特币中，区块大小的上限以字节为单位衡量，目前为 1MB，而以太坊则用衡量智能合约计算复杂度的单位来标示区块的大小，这个大小被称为 “**区块 Gas 上限**”，而且区块 Gas 上限可以逐块变化（比特币的区块大小上限是一定的）。

目前，以太坊的区块大小上限约为 1,500,000 Gas。在用户之间（即不与智能合约交互），通过 ETH 达成的基础交易或支付有 21,000 Gas 的复杂度，因此，你可以把 70 单交易放进一个区块中（1,500,000 除以 21,000）。在今天的比特币网络中，一个区块可以包含 1500-2000 单交易。

就数据而言，目前大多数以太坊的区块都在 2KB 以下。

> 编者注：截至 2019 年 5 月 17 日，以太坊区块的 Gas 上限已达到 800 万 Gas。单块数据量大小是几百 KB。

### 以太坊使用 EVM 来运行智能合约

相比于比特币原始的脚本语言，以太坊上可以部署部署的代码（“智能合约”）对开发者而言更先进也更友好。智能合约代码运行在以太坊虚拟机环境中，而网络中所有的计算机都运行着 EVM。如果你熟悉 Microsoft Excel 宏（由 Excel 运行的代码段），你应该很容易理解，智能合约就是由以太坊虚拟机运行的代码段。

在很多资料中，人们通常把以太坊智能合约被称为 “图灵完备”（Turing complete）的。这意味着智能合约功能完整，可以执行其他编程语言中能够执行的所有计算。

### 以太币的发行

ETH 是怎么产生的呢？ETH 和 BTC 发币最大的不同在于—— BTC 大约每 4 年发行量减半一次，而 ETH 的发行量则保持不变（也许只是在 Serenity 版本以前）。

> 编者注：并不是保持不变。如上所述，在区块链上，原生密码学货币是每出块便增发一次，这个增发数量我们称为 “**区块奖励**”。以太坊的区块奖励也已经过多次削减，在 2017 年 10 月，区块奖励由 5 个削减到 3 个 ETH，2019 年 2 月，以太坊区块奖励削减为 2 个。因此，我在这里用 ETH 供应量的[实际变化图](https://etherscan.io/chart/ethersupplygrowth)来替代作者的原图。

这比 Bitcoin 要复杂得多。概言之，现存的 ETH 币计算公式如下：

> 预挖矿（Pre-mine）+ 区块奖励（Block rewards） + 叔块奖励（Uncle rewards） + 叔块引用奖励（Uncle referencing rewards）

**预挖矿**

在 2014 年 7 月和 8 月的众筹中，发行的 ETH 数量约为 7200 万。众筹中产生的 ETH 被称为 “预挖矿”。人们决定，众筹之后 ETH 的发行量将被限制在每年不超过众筹总量的 25% （也就是说，除了众筹一次性产生的约 7200 万 ETH 外，每年的 ETH 发行量不超过 1800 万）。

**区块奖励**

目前，挖出一个区块可以获得 5 个新的 ETH 。如果每 14 秒开采一个区块，一年有 3150 万秒(365x24x60x60)，这意味着每年可挖出 225 万个区块。225 万 个区块，每区块 5 ETH = 1130 万 ETH /年。这符合每年产生不到 1800 万个 ETH 的承诺。

**叔块奖励**

实际上 ETH 的发行量会稍大于1800 万。由于一些区块挖得比较晚，因而没有成为主链的一部分。在比特币网络中，我们把这些挖得稍晚的区块叫 “孤块”，是完全抛弃掉的，但是在以太坊中，这些区块被称为 “叔块”，而且后续区块可以引用这些 “叔块”。如果有人引用某个 “叔块”，就会给挖出 “叔块” 的矿工带来 4.375 ETH 的 “叔块奖励”（相当于八分之七的正常区块奖励）。目前，以太坊每天约产生 500 个叔块，即每天有额外的 2,000 ETH 进入流通（按这个速度，每年会额外发行约 700 万 ETH ）。

**引用叔块的奖励**

在一个叔块后出块的矿工，也可以得到 0.15ETH （最多引用 2 个叔块）。

上面描述的这个模型被称为 Ghost 协议，（Ghost 即 ”贪婪的最大权重观察子树“ 缩写）。在 Ghost 协议当中，有效的块是确定的，矿工也可以得到奖励。

> 编者注：叔块奖励是很多朋友理解中的难点，确实需要不少背景知识。简单来说就是：在网络中，传播区块是需要时间的，因此某个块挖出之后，在一定时间内可能只有一部分节点收到了这个区块，而另一些节点在这期间收到了另一个区块并把它当成了最新区块，PoW 系统所用的共识算法是没法当下就判断清楚哪个是主链的。以太坊的出块速度比较快，这种情况可能经常发生，因此在共识算法上安排了这种经济激励来缓解这种情形——即使出现了叔块，主链还是基本确定的。详情请看《[以太坊设计原理](https://ethfans.org/posts/510#Uncle%E5%9D%97%EF%BC%88%E8%BF%87%E6%97%B6%E5%8C%BA%E5%9D%97%EF%BC%89%E7%9A%84%E5%A5%96%E5%8A%B1)》

### 未来以太币的产量变化

在以太坊从工作量证明（包括叔块奖励规则）变为的权益证明机制时，机制的变化对发行的影响暂时还无定论。权益证明机制将使用一个名为 Casper 的协议（是的，就是那个鬼马小精灵，谁还敢说 cryptonerds 没有幽默感？）。在 Casper 协议下的 ETH 发行率很可能地远低于 Ghost 协议下的发行率。

### 挖矿奖励

那么，矿工可以在挖矿中得到什么？

在比特币中，每挖到一个新的区块，矿工会得到 12.5 个比特币（这是当前的情形）；另外，还有打包在区块中的交易的发起人附带给矿工的手续费。

在以太坊，矿工可以得到：

*   挖到一个新的区块会奖励 5 个以太币（或者一个叔块会奖励 4.375 个以太币）；
    
*   另外，用于引用至多两个叔块另外一个小奖励， (1/32 个区块奖励，即：每个叔块奖励 1/32×5 ETH = 0.15625 个以太币)；
    
*   交易发起者为合约运行和转账而支付的 Gas 费用。
    

目前，每个区块平均的 Gas 上限为 1,500,000，区块网络中每个 Gas 的平均价格是 0.000000022 个以太币，也就是说，一个矿工可能从一个整个区块中得到的 Gas 奖励是 0.033 个以太币。需要注意的是，合约中的 Gas 是用流通中的以太币支付的，而非用新创造的以太币支付的。

> 编者注：发起交易者需要自己为交易设置 Gas 价格（即愿意为每单位 Gas 支付多少费用），这个 Gas Price 会成为矿工选择是否打包该交易的依据之一。因为人们对交易的需求不是时时都一样的，Gas Price 也会随当前人们对交易上链需求的改变而波动。

### 以太坊的其他部分：Swarm 和 Whisper

计算机需要计算，储存数据和交互。以太坊需要有效且稳健的方式，才能实现不停机、抗审查且自我维持的去中心世界计算机这一愿景。以太坊虚拟机器仅仅是整体中的一个元件。

*   **以太坊虚拟机**是能运行合约逻辑的计算原件。
    
    *   这种计算不依赖中央服务器
        
*   和 BitTorrent 一样，**Swarm 协议**是点对点的文件共享协议，不同的是它以小额以太币支付来激励文件存储和分享。文件被分成块，在网络参与者之间分发和存储。存储和传播数据块的节点可以从请求存储和检索服务者处得到 ETH 作为报酬。
    
    *   Swarm 协议的文件储存不依赖于中央处理器
        
*   **Whisper** 是一种加密通讯协议，允许节点间安全地直接发送信息，还能帮助信息发送者和信息接受者屏蔽掉多余的第三方
    
    *   Whisper 协议的通讯也无需依赖于中央服务器
        

  

以太坊诸概念
------

### 智能合约

智能合约是储存在以太坊区块链上的小程序。用适量的以太币即可激活并运行这些程序（编者注：也可能需要其它特殊的 Token 才能激活）。更多关于智能合约的资讯，详情请看：《[智能合约简介](http://bitsonblocks.net/2016/02/01/a-gentle-introduction-to-smart-contracts/)》

这里有一个引自维基百科，关于智能合约的实例：

在以太坊中，你可以创建一个包含代码的新帐户，并在交易中将其上传到以太坊的区块链上，从而建立一个智能合约。

只要合约上传成功，就会像自动点唱机一样：想要运行合约时，只需要给它发送一个包含以太币支付的交易，当然可能还需要额外提供另一些信息。

每一台挖矿电脑会用以太坊虚拟机来运行智能合约（这是他们挖矿过程的一部分），并得出最终的输出值。理论上，如果没有人使坏，以太坊网络上的每台电脑都会输出一样的结果，因为用户都运行着包含相同信息的智能合约代码。

挖出区块后，获胜的矿工会向网络的其他用户公布挖到的块，其他矿工纷纷验证并在得到相同的结果后，把该区块块放到他们的区块链中。这就是更新以太坊的区块链状态的方式。

### 账户

在比特币中，人们把储存比特币的地方称为 “**地址**（address）”，它就像银行账户，只不过存的是比特币。在以太坊中，用于储存以太币的叫 “**账户**（accounts）”，账户有两种：

*   只储存着以太币的账户，这和比特币的地址差不多。它有时也会被称作 “**外部账户**”（EOA）。这种账户都会有相应的私钥，私钥持有者可以用私钥来签发该账户的交易。
    
    *   这里有一个储存以太币的账户的例子：[https://etherscan.io/address/0x2d7c76202834a11a99576acf2ca95a7e66928ba0](https://etherscan.io/address/0x2d7c76202834a11a99576acf2ca95a7e66928ba0)
        
*   存有代码（并可能存储着 ETH 或其它 Token）的账户。只要存适量的以太币进去，这些智能合约就会生效。智能合约上传后，其代码就一直保存在以太坊区块链上，等待着被激活使用。
    
    *   合约账户的例子，如下：[https://etherscan.io/address/0xcbe1060ee68bc0fed3c00f13d6f110b7eb6434f6#code](https://etherscan.io/address/0xcbe1060ee68bc0fed3c00f13d6f110b7eb6434f6#code)
        

  

### 叔块和孤块：差一点就上主链的块

以太坊的区块生成率远高于比特币的区块生成率（以太坊种每小时可生成 250 个区块 vs 比特币中每小时可生成 6 个区块）。区块生成得越快，“区块冲突” 的概率就会上升，即：许多有效的区块几乎同时生成，但是它们之中，仅有一块可以放在主链中。从技术上来说，尽管这些未上主链的区块包含的交易都是真实的，但是这些数据不能被认定为主链的一部分。

在比特币协议中，这类未上主链的区块被称为 “**孤块**”，孤块不是主链的组成部分，而且也不会被主链上的区块引用。

而在以太坊中，这些区块被称为 “**叔块**”，后续一段距离内的区块可以引用叔块（详见上文 “以太币的发行” 部分）。虽然叔块中的数据最终也不会派上用场（即叔块上的交易不会得到执行），挖出叔块的矿工还是可以获得稍小一些的区块奖励。

这促成了两个重要结果:

1.  这会激励矿工保持挖矿动力，即使挖出的区块不能上主链（因为高速的区块生成率生成了更多的孤块和叔块）
    
2.  承认创建叔块所花费的能源还可以提高区块链的安全性
    

> 编者注：总而言之，Ghost 是快速出块过程中的一种保护措施，让没有挖到主链块的矿工也不至于承受大量损失，有动力去维护主链。

### Gas 和 Gas Price

激活一个智能合约时，你等于是请求整个网络中的所有矿工都来执行合约中的计算工作。这会花费矿工的时间和能源，用户理所当然得给他们报酬。Gas 就是支付服务费的机制。

手续费一般是一笔小额的以太币，想要运行合约，就需要给矿工支付来让他们工作。这类似于给自动点唱机投币。

> 付款项（单位：以太币）= 实际使用的 Gas 数量（单位：Gas）\* Gas 价格（单位：以太币/Gas）

**Gas 数量**

智能合约越复杂（计算步骤的数量和类型、储存量的大小等），完成合约运行所需的 Gas 就越多。还用投币点唱机来类比的话，就好比点的歌越久，唱得越大声，需要支付的费用就越多。

**Gas 价格**

虽然合约的复杂程度各有差别，但运行具体一个合约所需的 Gas 数量是固定的，（手续费大小差异主要来源于 Gas 价格），而 Gas 价格是由希望运行合约的人在请求运行合约时所指定的（有点像比特币的交易费用）。矿工会看开出的 Gas 价格高低来决定他们愿不愿意运行合约。如果想让矿工运行合约，开出高价就好。可以说，Gas 市场是一个竞争激烈的拍卖场，就看用户愿意为运行智能合约付出多大成本了。

**为什么需要 Gas 机制？**

运行智能合约需要花费 Gas/以太币/金钱，有效防止了人们随意激活合约，从而避免了在免费运行的情况下可能出现的类似垃圾交易拥堵网络的问题。

> 编者注：这里没有言明的一点是，其实交易的 Gas 数量和 Gas 价格都是可以由用户自由调整的。如果没有给够 Gas 数量，无法完成合约中的计算，那么系统会完全回退，就当这笔交易没有发生过，虽然 Gas 费用还是会全部交给矿工；如果给的 Gas 数量太多，那么完成相关计算后，剩余的 Gas 费用会自动退还给发起交易的账户。

### 以太币的单位

好比于一美元可以分成 100 美分，一比特币可以分成 100,000,000 sataoshi，以太币也有专有的单位命名规则。

以太币最小的单位是 _wei_ ，每一以太币等于 1000,000,000,000,000,000 wei，还有其他单位，如：Finney、Szabo、Shannon、Babbage 和 Ada。这些命名都来源于为密码学货币和网络作出卓越贡献的科学家。

Wei 和 Ether 是两种最常见的货币面额。

智能合约的语言：Solidity / Serpent, LLL
-------------------------------

智能合约有三种通用语言，都可编译成智能合约并在以太坊虚拟机上运行。这三种语言分别是：

*   **Solidity** ——类似 Javascrip 的语言，是目前最流行的、具有强大功能的智能合约的脚本语言。
    
*   **Serpent** ——类似 Python 的语言，在以太坊发展早期比较常用。
    
*   **LLL**——类似于 Lisp，仅用于较为早期的语言编写中。LLL 或许是最难编写的语言。
    

> 编者注：截至今日（2019 年 5 月 17 日），Solidity 已经成为以太坊生态中最常用的合约编程语言。而其余两种语言很少有人使用，甚至已经被弃用。此外，以太坊正在研究将以太坊虚拟机 EVM 升级为 eWASM，而 WebAssembly 支持很多高级计算机语言的开发，有望进一步加强以太坊合约编写的友好性和安全性。

> 另，有人指出不应该先入为主地认为 Solidity 与 Javascript 很相似，这样在学习过程中会陷入很多误区。

以太坊软件：geth, eth, pyethapp
-------------------------

以太坊的官方客户端都是开源的，因此你可以看到背后的代码，还可以拿来调整一下创建自己的客户端。最流行的客户端如下：

*   geth（用 Go 编写）[https://github.com/ethereum/go-ethereum](https://github.com/ethereum/go-ethereum/)
    
*   eth（用 C++ 编写）[https://github.com/ethereum/cpp-ethereum](https://github.com/ethereum/cpp-ethereum)
    
*   pyethapp（用 Python 编写）[https://github.com/ethereum/pyethapp](https://github.com/ethereum/pyethapp)
    

以上都是基于命令行的程序（就是那种在黑色背景上的绿色文字），因此要想使用图形界面就需要使用别的软件。目前官方最流行的图形界面软件是 Mist（[https://github.com/ethereum/mist](https://github.com/ethereum/mist)）。Mist 以 geth 和 eth 为内核。

也就是说，geth 和 eth 是底层难看的代码，而 Mist 就是运行其上的漂亮界面。

> 编者注：2019 年 3 月，Mist 项目停止运营，团队拆分并转向不同领域。而以太坊生态中最常见的两款客户端 Geth 和 Parity·Ethereum 也已发展得相当不错，都已有了完备的图形界面。

足迹：以太坊之大事年表
-----------

2013 年底，Vitalik Buterin 在[白皮书](https://github.com/ethereum/wiki/wiki/White-Paper)中论述了 “以太坊” 这一概念。2014 年 4 月，Gavin Wood 博士在[黄皮书](http://gavwood.com/paper.pdf)中进一步地阐发了这个概念。自此，以太坊的开发就由一个开发者社区来管理了。

同年的 7 月和 8 月，以太坊为开发众筹，其开放式主网于 2015 年 7 月 30 日上线。

### 以太坊的众筹

2014 年 7 月至 8 月期间，开发团队通过[在线销售](https://blog.ethereum.org/2014/07/22/launching-the-ether-sale/) ETH 代币获得资金——人们可以用比特币来购买 ETH ，当时的兑换比率为 2000 ETH : 1 BTC（到 2016 年 1 月，在开放市场中1 BTC 可以兑换 50 ETH）。

参与众筹的人可以用比特币账户支付，然后收到一个包含相应数量以太币的钱包。更多关于技术方面的信息，请参看以太坊博客：[https://blog.ethereum.org/2014/07/22/launching-the-ether-sale/](https://blog.ethereum.org/2014/07/22/launching-the-ether-sale/)

在此期间，以太坊团队售出了 6000 多万以太币，收到了 31500 多的比特币，当时价值约 1800 万美元。团队又挖出了 20%（1200 万 ETH）用于支持开发和以太坊基金会。

### 软件发布代号：Frontier / Homestead / Metropolis / Serenity

以太坊软件的命名很有意思哦，是不是有点像苹果的 OS X 版本名称 Mavericks、El Capitan、Sierra 呐？

*   **Olympic**（测试网络）：在 2015 年 2 月发布，测试发布时，其代币并不是真的以太币。如今，测试网仍然与主活动网络并行，以便开发人员测试代码。
    
*   **Frontier**：在 2015 年 7 月 30 日发布，Frontier 是首个可以挖矿、开发、运行合约的在线版本。
    
*   **Homestead**：于 2016 年 3月 14 日发布，有一些协议的更改，更加稳定。
    
*   **Metropolis**：未发布——从命令行界面升级到图形界面。
    
*   **Serenity**：未发布——从工作量证明升级到权益证明（Casper）。
    

> 编者注：上述代号也被认为是以太坊的路线图和发展的不同阶段。在原文成章的时候（2016 年 10 月），Metropolis（“大都会”）阶段还未发布。2017 年 10 月，Metropolis 的第一阶段 Byzantine（“拜占庭”）发布；2019 年 2 月，Metropolis 第二阶段 Constantinople（“君士坦丁堡”）发布，并且，有望于 2019 年末进入 Serenity 的第一阶段。

以太坊2.0升级
--------

#### 升级方向：

安全

可持续性（共识机制由PoW→PoS）

扩容、可扩展性（分片）

#### 升级步骤：

1，创造信标链（Beacon Chain）：PoS共识，与1.0并行，于2020年12月上线；

2，将信标链与目前1.0公链进行合并，称为The Merge，共识统一为PoS，1.0公链成为信标链的其中一个分片链；

3，尝试添加更多分片，去实现以太坊网络的高可拓展性；

#### 分片

现状：任何节点参与以太坊网络，必须储存整条网络从创世至今都所有交易数据，同时同步所有新区块数据；

加入分片：将以太坊网络分成许多小分片（小链），指定节点在某一分片上去执行验证等工作。

#### Layer

Layer 0：区块链底层协议

Layer 1：区块链的基础架构（ETH/Solana各公链）

Layer 2：构筑在Layer 1之上的协议网络（目前比较多的应用是基于以太坊），扩容方案

总结
--

以太坊开发团队致力于建立一个不会停机、抗审查和去中心的世界计算机，能运行计算、储存数据并允许交互。

以太坊有一个 _公开_、无需许可的开源版本，其代码副本已被采用并改编为私人网络。公有版本和私人网络要解决的是不同的问题。

尽管目前的技术尚未成熟，但是，我们相信经过越来越多人使用、测试、发展并在以太坊上开发软件，它会发展得越来越稳健。

在区块链世界里，以太坊是最振奋人心的的技术之一，未来的发展值得我们去期待。

**10 月 3 日 更新：**

有人评论说我没有介绍关于 The DAO（一个 “去中心化自治组织” ）的内容。The DAO 类似于基于大众风险投资基金的智能合约。有黑客钻了智能合约中编码漏洞的空子，转走了智能合约中的资金。我也没有谈到 “以太坊经典”（Ethereum Classic）。2016 年 7 月 20 日，黑客入侵 The DAO，出于对以太坊核心开发者应对策略的反对，Ethereum Classic 从主链中独立了出来，成为另一条公链。以太经典有名为 ETC 的独立货币，ETC 和 ETH 在第 192 万个块之前共享同一段区块链。

---

*Originally published on [DK](https://paragraph.com/@iamdk/ZW2WGrg0jtdHgjX5O0ty)*
