一个基础的以太坊介绍
https://bitsonblocks.net/2016/10/02/a-gentle-introduction-to-ethereum/
Posted on October 2, 2016 by antonylewis2015
前言
以太坊建立在区块链和加密货币的概念之上,如果你对此不熟悉,很值得花时间先去读一下《比特币基础介绍》和《区块链技术基础介绍》。以下这篇文章会假设读者对比特币的工作原理有已经有基本认识。
以太坊是什么?
以太坊是运行在一个计算机网络中的软件,它确保数据以及称为智能合约的小程序可以在没有中心协调者的情况下被所有网络中的计算机复制和处理。以太坊的愿景是创建一个无法停止,抗屏蔽(审查)和自我维持的去中心化世界计算机。官方网址是https://www.ethereum.org。
它延伸了比特币的区块链概念:在全球范围的多个计算机上验证,存储,和复制交易数据(因此术语叫“分布式账本”)。以太坊(Ethereum)在这个概念上更进一步,使在全球范围的多个计算机上运行代码成为现实。
比特币用来分布式储存数据的,以太坊用来分布式储存数据并且计算。这些小型的电脑运行程序叫做智能合约,合约由参与者在他们自己的机器上通过一种称为 ”以太坊虚拟机“的操作系统运行。
如何运行以太坊?
要运行以太坊,你可以下载(或者自己编写如果有耐心的话)一些称为以太坊客户端的软件。类似BitTorrent或Bitcoin,以太坊客户端将通过网络连接其它运行了类似客户端软件的计算机并且通过他们开始下载以太坊区块链从而赶上进度。它也将独立的验证每个区块是否符合以太坊的规则。
以太坊客户端软件可以做什么?
你可以用来:
连接到以太坊网络
探索以太坊的区块链
创建新的交易和智能合约
运行智能合约
挖矿新的区块
通过运行以太坊虚拟机,你的计算机就变成了网络中的一个“节点”,并与其它节点一样具有同等地位的处理事务。记住在一个点对点的网络里,没有“核心”服务器并且任何一个计算机都拥有等同的权利和地位。
以太坊和比特币有哪些相似之处?
我认为理解以太坊最简单的方式就是探索它与相对简单的系统-比特币之间的相似和不同之处。那么它们有哪些相似之处呢?
以太坊有一条区块链
和比特币一样,以太坊有一条区块链,这里面包含有数据块(交易和智能合约)。这些区块由一些参与者创建或者说挖出,而其它参与者来验证它们。
你可以在这里查看以太坊区块链:https://etherscan.io
区块通过前一个区块的哈希或指纹形成一条链状结构。具体可以参见a gentle introduction to blockchain technology
以太坊是公开并且无需许可的
和比特币一样,以太坊的主网是一个公有的、无许可的网络,也就是说任何人都可以下载或编写软件来连接网络,可以开始创建交易以及智能合约并且验证它们,还可以进行挖矿等,这些操作都不需要在任何其它机构里注册或登录。
总的来讲,人们讨论以太坊时指的是公有的无许可的版本,即公有链。不过,与比特币一样,你可以通过稍微修改以太坊文件创建没有连接到公网上的私有网络。目前私有网络中的代币以及智能合约与公有网络不兼容。更多有关公开无许可公有链和私有许可链之间异同的问题,请参考 confused by blockchains? Revolution vs Evolution
以太坊是工作量证明(POW)挖矿
同比特币一样,矿工通过花费电力解开数学难题创建有效区块。以太坊的工作量证明算法称为Ethash,它与比特币的工作量证明稍微有些不同,这使得用普通硬件挖矿成为可能。以太坊的这种工作量证明算法降低了普遍用于比特币挖矿的特定硬件ASICs的效率。
关于更多挖矿的知识详见 a gentle introduction to bitcoin mining.
在以太坊的发展计划中,准备在未来称为Serenity的以太坊软件版本中,用一种叫做Casper的更节能的股权证明(POS)协议来取代当前大量耗费电能的工作量证明(POW)挖矿。
以太坊有一种内置的数字货币
以太坊里的代币叫做Ether,简称ETH。与BTC类似,这种加密货币可以用来与其它加密货币或其它法币进行交易。目前一个ETH的价格大概在13美元左右(2016年10月)。与BTC拥有者被记录在比特币区块链中一样,以太币ETH拥有者也被记录在以太坊区块链中,尽管在技术实现的方式上它们有些许不同。
想要更多的了解加密货币以及代币可以参考《一个数字代币的基础介绍》
以太坊与比特币有哪些不同点?
这一段讨论会包含更多的技术性,在许多方面会更加复杂。
以太坊的区块时间更短
与比特币区块的10分钟相比,以太坊区块间时间大约在14秒左右。这意味着,当你在比特币和以太坊中发起一笔交易,以太坊中的交易被记录入区块链中的速度快于比特币中交易被记录区块链中。你可以认为比特币写入数据库的时间平均为10分钟,而以太坊写入数据库的时间平均为14秒。
以太坊有更小的区块
在比特币中,目前最大区块的大小被限定为1M,而以太坊区块大小根据在上面运行的智能合约的复杂性决定-这叫做Gas限制,每个区块的最大值会根据情况稍微有所不同。目前以太坊中最大区块大小大约为1500000Gas。从一个帐户到另一个帐户的ETH基础交易或支付(并非智能合约)大约消耗21000Gas。故每个区块中大概可以放进70(1500000/21000)笔交易。在比特中目前每个区块中大概可以包含1500到2000笔交易。
目前大多数以太坊区块大小在2KB以下。
以太坊虚拟机上可以运行智能合约
相比比特币原始的脚本语言,在以太坊中用来部署代码以及运行智能合约的语言更高级,因此开发者们更熟悉。智能合约代码在一种被称为以太坊虚拟机的东西上运行,以太坊虚拟机分布在网络中所有参与者的计算机上运行着。如果你对微软Excel宏命令(Excel上运行的代码块)熟悉的话,类似地,智能合约可以认为是在以太坊虚拟机上运行的代码块。
在很多描述中,以太坊智能合约被称为是“图灵完备”的。这意味着它们是功能完备的,而且在任何其它程序语言中能够完成的计算都可以在这上面完成。
以太代币的发行
以太代币是如何被发行或创造的?以太币与比特币之间最大的不同是,比特币的产量每4年减半,而以太币每年的产量则是固定的。(可能持续到serenity阶段)
以太币比比特币更复杂。概要地说,以太币的数量以这种形式存在:
Pre-mine(矿前) + Block rewards(区块奖励) + Uncle rewards(叔块奖励) + Uncle referencing rewards(叔块引用奖励)
挖矿前
2014年7月/8月间,为众筹大约发行了7200万以太币。这些币有的时候被称之为“矿前”。众筹阶段之后,以太币每年的产量被限制在7200万以太币的25%(每年以太币的矿产量,不高于1800万,除了一次性为crowdsale而发行的7200万以太币)
区块奖励
目前,每产生一个新区块就会产生5个新以太币。计算一下,如果每14秒挖出一个区块,一年有3150万秒(365x24x60x60),这意味着每年有225万个区块被挖出来。225万个区块,每个区块5个以太币,也就是每年会产出1130万个以太币。这个数字与低于1800万以太币产量的数字,吻合。
叔块奖励
事实上,数量可能会比上述数字稍多一些。有些区块被挖得稍晚一些,因此不能称为主区块链的组成部分。比特币称这类区块为“孤块”,并且完全舍弃它们。但是,以太币称它们为“ uncles”,并且在之后的区块中,可以引用它们。如果uncles在之后的区块链中作为叔块被引用,每个叔块会为挖矿者产出大约4.375个以太币(5个以太币奖励的8分之7).这被称之为叔块奖励。目前每天有大约500个叔块被创建,为以太币的日产量链,额外加入2000个以太币(以这种速度,每年产量为70万以太币)
叔块引用奖励
还有更多:矿工每引用一个叔块,就得到了大约0.15个以太币(最多引用两个叔块)
这种定义有效区块,奖励矿工的模式称为“幽灵协议”(Greedy Heaviest-Observed Sub-Tree )(GHOST是贪婪最被观察子树的字首)。
以太币产量未来的变化
以太坊出块机制从工作量证明(PoW)(包括幽灵发行规则)转换为股权证明(PoS)后,以太币的发行会有什么变化尚未有定论。股权证明机制将使用一个称为Casper的协议(是的,作为友好的幽灵。谁说cryptonerds没有幽默感来着?)在Casper协议下,以太币的发行率将大大低于幽灵协议下的发行率。
挖矿奖励
那么,矿工挖矿时会得到什么?
在比特币中,矿工将得到:
• 12.5个新比特币(目前实际情况请参考“a gentle introduction to bitcoin mining”)
加上
• 打包在区块中的交易所产生的交易费
在以太坊中,矿工将得到:
• 新的区块奖励的5个以太币(或者4.375个新的叔块奖励以太币),
加上
• 引用2个最近叔块的一丢丢奖励(1/32的区块奖励,也就是,每个叔块 1/32x5=0.15625个新以太币)
加上
• 在区块中运行合约的Gas
目前,每个区块平均的gas限量是1500000,区块网络中每个gas的平均价格是0.000000022个以太币,也就是说,一个矿工可能从一个“满的”区块中得到的gas奖励是0.033个以太币。注意合约中的gas是用现存的以太币支付的,而非新创造的以太币。
以太坊的其他部分:Swarm 和 Whisper
计算机需要有计算、储存数据、以及沟通交流的功能。如果以太坊想要实现它势不可挡,抗屏蔽(审查)、自我维持、去中心化的“世界”计算机的景愿,它需要以一种稳健,有效地方式做到上述三件事。以太坊虚拟机只是一个整体的一部分。
以太坊虚拟机是有运行合约逻辑的计算元件
这是不依赖于一个中心服务器的计算。
swarm是点对点文件共享,它与BitTorrent相似,但用以太币为微报酬作为激励。文件被分解成块,分配并被参与的志愿者们储存。那些为存储并为块提供服务的节点,从那些需要储存和检索数据服务的节点得到以太币作为补偿。
这是不依赖于中心服务器的文件存储。
whisper是一种信息检索协议,它允许节点间直接以一种安全的形式互发信息,并对第三方组织窥探者隐藏发送者和接收者的信息。
这是不依赖于一个中心服务器的通讯管理。
以太坊中的一些概念
智能合约
智能合约是一段存储在以太坊区块链上的简短计算机程序。用以太币可以**或者运行这些代码。想对智能合约了解更多,请参考 a gentle introduction to smart contracts.
下面是一段摘自Wikipedia的智能合约实例:
出处: https://en.wikipedia.org/wiki/Solidity
在以太坊你可以新建一个包含一些代码的账户,在一次交易中把它上传到以太坊区块链上,这样你就创建了一个智能合约。一旦合约被上传,它会像自动唱机一样运转--当你想要运行它的时候你应该创建一个交易,向合约支付ETH,如果合约需要,你可能还要提供一些其他信息。
每个挖矿计算机会通过以太坊虚拟机在它们的计算机上运行智能合约,作为他们参与挖矿进程的一部分,然后得出一个输出的结论。理论上,如果没有人恶意操作,每个计算机在以太坊网络上会得出相同的结论因为它们运行着提供了相同信息的相同合约代码。
当一个区块产出,矿工会把这个区块公布到其余的网络中,其他的计算机会验证它们得到的结果相同,然后添加该区块到它们自己的区块链上。这就是以太坊区块链更新状态的方式。
账户
在比特币中,有一个概念叫做地址,比特币存储在这里--就像是一串比特币的银行账户数字。这个在以太坊中一般被称作账户,账户有两种类型:
只存储ETH的账户--这些账户和比特币地址类似有时被称作Externally Owned Accounts (EOAs)。你可以用私钥为交易签名来向这些账户支付ETH。
这里有一个存储ETH的账户实例:
https://etherscan.io/address/0x2d7c76202834a11a99576acf2ca95a7e66928ba0
不仅存储 ETH,同时也有可以运行的代码(智能合约)--这些智能合约可以通过一个交易发送ETH的到账户里。一旦智能合约被上传,它就在那里等待被**。
这里有一个有智能合约的账户实例:
https://etherscan.io/address/0xcbe1060ee68bc0fed3c00f13d6f110b7eb6434f6#code
叔块和孤块:不太需要的区块
以太坊区块出块速度比比特币高得多(以太坊每小时250个区块vs比特币每小时6个区块)。区块出块速度越快,“区块冲突”发生的几率就越大-ie多个有效区块可以几乎同时被创建,但是它们中只有一个能加入主链。另外一个“损失”是,这些块里面的数据不会被认为是总账的一部分,即使这些交易理论上是有效的。在比特币里这些非主链区块被叫做孤块或孤儿区块,它们无论如何不会成为主链的一部分,也不会被后来的区块引用。
在以太坊它们被叫做叔块。叔块会被随后的一些区块参考(参考ETH发布的部分)尽管它们里面的数据不会用到,挖出它们的稍少的奖励仍然是有效的。
这达成了两个重要目的:
矿工仍然受到激励挖矿即使有很大可能挖到一个非主链区块(高速出块会导致更多的孤块或者叔块)。
通过认可花费在叔块上的能量增加了区块链的安全性。
Gas和Gas价格
当你**一个智能合约的时候,你在要求整个网络内的每个矿工个体分别执行里面的运算。这会花费他们的时间和精力,Gas是你为这项服务向矿工们支付的机制。
报酬是小额的以太币,想要运行智能合约的人的需要支付报酬来使合约工作。类似于投放一个硬币到自动唱机里。
付款款项(单位以太币)= Gas数量(单位Gas) x Gas价格(单位以太币/Gas)
Gas数量
智能合约越复杂(计算步骤的数量和类型,占用的内存等),用来完成运行就需要越多Gas。类比自动唱机,歌曲的时间越长,音量越大,让它工作你需要支付的则越多。
Gas价格
任何特定的合约所需的运行合约的Gas数量是固定的,由合约的复杂度决定,而Gas价格由想运行合约的人规定,在他们提交运行合约请求的时候(有点类似于比特币的交易费)。每个矿工会根据Gas的价格的高低来决定他们是否想作为区块的一部分去运行此合约。如果你希望矿工运行你的合约,你最好提供高一点的Gas价格。在某种程度是这是一场基于合约运行有多愿意付费驱动下的竞价。
为什么需要Gas?
让智能合约花费Gas/以太币/钱可以防止人们随意**合约, 解决了垃圾交易以及相关问题,如果运行智能合约免费,此类问题会发生。
以太币单位
就像1美元可以分成100美分,1BTC可以被分成100,000,000 聪(中本聪的聪),以太坊也有它自己的转换单位。
最小的单位是wei ,每个ETH有1,000,000,000,000,000,000wei 。还有一些中间单位:Finney, Szabo, Shannon, Babbage, Ada--全部以对加密货币或网络相关领域作出杰出贡献者命名。
Wei和Ether是两个最常用的单位。
智能合约语言:Solidity/Serpent,LLL
有三种常见的智能合约语言,这些语言可以被编译成智能合约运行在以太坊虚拟矿机上。它们是:
Solidity – 和Javascript语言类似。这是目前最受欢迎的和功能丰富的智能合约脚本语言。
Serpent – 和Python语言类似,在以太坊历史的早期受欢迎。
LLL (Lisp Like Language) – 和Lisp类似,只有在早期使用。它大概是最难用的。
以太坊软件:geth,eth,pyethapp
官方的以太坊客户端都是开源的--你可以查看它们背后的代码并且重构这些代码开发自己的版本。最受欢迎的客户端有:
geth (Go语言客户端) https://github.com/ethereum/go-ethereum
eth ( C++客户端) https://github.com/ethereum/cpp-ethereum
pyethapp (Python客户端) https://github.com/ethereum/pyethapp
这些都是基于命令行的程序(黑底绿字的那种),可以有更多好看易懂界面的软件。目前官方的最受欢迎的图形化软件是Mist(https://github.com/ethereum/mistMist运行在geth或eth的顶层。),
所以,geth/eth是底层的东西,Mist是顶层优美的屏幕。
历史:以太坊时间轴
Vitalik Buterin在2013年末的白皮书中提出了以太坊的概念。这个概念最终由Dr. Gavin Wood完善并在2014年4月发表了技术性的黄皮书。从此,以太坊的发展就由一群开发者组成的社区管理。
在2014年7月和8月,社区发起了一个为了项目开发募资的众筹,2015年7月30日以太坊区块链正式启动。
以太坊众筹
开发团队通过在2014年的7月至8月期间线上销售ETH代币而筹得资金,人们可以通过支付比特币来兑换以太币,最初的固定兑换率为1个BTC等于2000个ETH。(现在2016年10月,1个BTC可以买到50个ETH。)
众筹参与者发送比特币到一个比特币地址并且收到一个以太坊钱包包含相对应购买到ETH的数量。技术细节可以在以太坊博客中找到https://blog.ethereum.org/2014/07/22/launching-the-ether-sale/
通过这种方式,超过60百万的以太币被买走,相当于大约31500个BTC,当时价值约为1800万美金。同时额外发行了20%的以太币(120万ETH)用以促进开发以及设立以太坊基金会。
软件发布代号:Frontier/Homestead/Metropolis / Serenity
这是为不同版本的以太坊软件取的昵称,就像苹果的OS X系列名称Mavericks, El Capitan, Sierra。
Olympic (testnet): 2015年5月发布的测试版本,使用的代币不与真实的以太币兼容。测试网与核心线上网络平行运行,这里开发者可以测试他们的代码。
Frontier: 2015年7月30日发布,初始的上线版本让人们可以挖矿获取以太币并且建立和运行合约。
Homestead:2016年3月14日发布,改变了一些协议使之更稳定。
Metropolis: 将在未来发布,从命令行到图形界面。
Serenity: 将在未来发布,从PoW转变到PoS(Casper)。
总结
以太坊开发团队的愿景是创建一个无法停止,抗屏蔽(审查)和自我维持的去中心化世界计算机,可以进行计算,储存数据,和通讯。
它有一个公开无许可的开源版本,源码的分叉以及复制版本经过调整已经被用于私有网络。公开和私有的版本分别试图解决不同的问题。
这个技术现阶段还不成熟,但当越多的人使用,测试,开发并建立,它将会进步并且变的更强壮。
以太坊是区块链领域里最激动人心的技术之一,值得你保持关注它的进展。