注:本文是我读了几个月,讲以太坊讲的最清楚的一篇文章,好文章应该大家分享,所以分享出来。
翻译原文:。
虽然“比特币”和“以太坊”这两个术语通常成对出现,但是它们之间实际上有着天壤之别。以太坊和比特币之间的唯一共同之处在于,它们都是在区块链上运行的加密资产。
以太坊不像比特币那样只是一种加密货币,它还存在其它特征,使其成为了一个巨大的分布式计算机。
要想理解,就必须理解区块链的工作方式。如果你已经理解了以太坊,或是已经读过了我写的《》(编者按:中译见文末《区块链是什么鬼》链接),可直接跳转至下一节。
简言之,区块链就是数据库。它是特定数据的数据库,里面的数据不断增长,具有非凡特性:
要想理解人们是如何让自己的数据库副本与其他人同步的,想象一下有一个包含10个人的网络。每个人都有一个空的文件夹和一个空白页。无论这个网络中的何人在何时做了什么重要的事,如转账等,会广播给该网络中的所有人。
每个人都会在自己的页面上记录公告,直到该页面填满为止。页面填满之时,每个人必须通过解决一个数学难题来将页面内容封存。如此可以确保每个人的页面具有相同内容,且这些内容永远无法修改。第一个解决这一数学难题的人会得到一些加密货币的奖励。
注:想确切了解这一过程是如何执行的吗?请阅读《》。
页面一经封存,就会添加至文件夹中,然后出现新页面,这一过程永远循环往复。
随着时间的推移,这些包含重要记录(交易)的页面(区块)就会逐一加入文件夹(链),因而形成数据库(区块链)。
区块链可用于存储任何类型的数据,存储在区块链上的数据类型会赋予区块链价值。比特币的区块链存储的是金融交易记录,因此让比特币成为类似于一种像美元或英镑那样的货币。比特币的用处与美元一样。以太坊则不同。
以太坊不只是一种类似美元、英镑或比特币的货币。以太坊有一个比货币更强的用处。以太坊就是:
以太坊从根本上来说是一个巨大的计算机!但是,它运行起来极其缓慢——比如今的普通计算机的运行速度缓慢约5至100倍——而且成本很高。这个“以太坊计算机”与罕见的功能相同;因此只能做些微不足道的小事。
这听起来实在不怎么样,那以太坊为什么能如此火爆呢?问得好。以太坊如狂风暴雨般席卷了这个世界,因为它是一个分布于全世界的完全去中心化计算机。理解了以太坊区块链如何运作,就能知道以太坊这一世界计算机是如何运行的。
与其它区块链一样,以太坊需要几千人在自己的计算机上运行一个软件,为该网络提供动力。网络中的每个节点(计算机)运行一个叫做以太坊虚拟机(EVM)的软件。将以太坊虚拟机想象成一个操作系统,它能理解并执行通过以太坊特定编程语言编写的软件。由以太坊虚拟机执行的软件/应用程序被称为“智能合约”。
要在这一世界计算机上做任何事都需付费。不过,付的不是美元或英镑等普通货币,而是该网络自带的加密货币,叫做以太币。以太币与比特币大致相同,除了一点,即以太币可以为在以太坊上执行智能合约而付费。
在以太坊上,无论是人还是智能合约都可作为用户。人类用户能做的事,智能合约也能做,而且还远不止如此。
在网络中,智能合约的表现和其他人类用户完全一样。二者都可像收发其他货币一样收发以太币。
但是,不同于人类用户的是,智能合约也可以执行预定义的计算机程序,在程序被触发时执行各种操作。让我们通过以下这个例子理解智能合约的力量。
想象一下,我们俩关于明天的天气打个赌。我赌明天天晴,你赌明天下雨。我们约定输家必须给赢家100美元。我们如何打这个赌,还要确保输家会履行诺言呢?我能想出以下三种不同方法:
最简单的方法是互相信任。如果我们已经是老朋友了,很容易信任对方。我知道你的家庭住址而你知道我的黑历史。然而,如果我们是陌生人的话,那就难办多了。你没理由信任我,我也没理由信任你。
另一个可行的方法是根据我们之间的赌约制定一份法定合同。我们双方会签署一份详细规定了赌约条款的合同——包括关于输家违约的规定。该合同会让我们有向赢家支付赌金的法律义务,却不具实用性。因为如果通过法律途径强迫对方履行合同,其代价高出赌金本身。
我们可以找一个双方都信任的共同朋友,各交100美元在他/她那里保管。第二天,他/她会查看天气情况,将这200美元都交给赢家。这种方式简单明了,除非出现一种情况:要是这位可信的朋友卷款而逃该怎么办呢?
现在我们有三种不同的打赌方法,不过各有都缺陷。因为我们是陌生人,无法互相信任。迫使对方履行法定合同的成本太高,此举并不可行。寻求共同朋友的帮助又会引发信任问题。
以太坊的智能合约在这种情况下就可以派上用场了。智能合约就像是寻求共同朋友的帮助,不过是被编写成了代码。通过以太坊,我们可以编写一款软件,向两方各收取价值100美元的以太币。第二天打开接入天气应用的API查看天气情况,并将总价值为200美元的以太币转给赢家。
智能合约一旦完成,无论如何都无法被编辑或修改。因此,可以肯定的是不管合约中有何规定,无论如何都会被执行。
不过,智能合约是如何执行的?又是如何与区块链相联系的?
不管智能合约于何时执行,它都记录了在区块上执行的交易的信息。从很高的层面上看来,以太坊区块链上的交易如下:
这些字段都好理解,除了最后一个。其中,“数据(data)”一项赋予了以太坊独特力量,用于创建记录和执行智能合约(也就是交易)。以太坊区块链上的任何给定区块都可以包含以下三种交易:
这些都是网络中的常见交易,类似比特币交易。如果你直接将以太币送给朋友,“数据”项就会留空。
在进行没有接收方的交易时,这就意味着该交易的目的是在网络中利用“数据”项的内容创建一个智能合约。“数据”项中包含软件代码,该代码会像网络中的其它用户一样进行操作。
无论用户(或智能合约)何时想要执行智能合约,他/她/它需要与智能合约进行一次交易,将执行指令置于“数据”项中。
就像在其它区块链上一样,不管上述三个事件中任一个在何时发生,都会发布在整个网络之中,每个人都会记录下来。除了记录之外,每个节点也会执行收到指令的智能合约,让以太坊虚拟机的状态与余下的网络同步。
每个节点执行软件的一部分,因此使整个网络充当巨大(却运行缓慢)的分布式计算机。之后,每次执行都会存储在区块链上,从而达到永久存储的目的。
我说过使用智能合约的用户必须支付一定费用去执行该合约。该费用支付给实际使用内存、硬盘、计算和电力执行这一智能合约的节点。
为了计算智能合约的费用,每个语句都有指定的成本。例如,如果你的是执行使用节点内存的语句,这类语句有特定成本。如果你执行的是使用节点硬盘存储器的语句,这类语句有附加的特定成本。特定成本的单位被称作Gas。最终,Gas通过一定的兑换率转换成以太币。
无论你何时执行智能合约,你必须确定要消耗的最大Gas量。当合约执行完成之时,或是达到Gas限制之时,都会停止执行该合约。这么做是为了避免智能合约陷入无限循环之中,以防该程序反复执行一组语句,而不继续执行其他合约。
之所以会出现该情况是因为程序员的疏忽。每重复一次都会消耗一些特定的Gas,因此会将无限循环变为有限。因为程序员的失误让节点陷入反复执行之中是毫无意义的。Gas的概念解决了这一问题。
以太坊不只是一种用于交易的加密货币。其真正的价值在于其目的。以太坊的目的是让拥有以太币的人能使用通过几千个节点提供动力的分布式世界计算机。
当然,因为每个微小的语句必须由网络中的每个节点执行,去中心化的分布式计算机运行缓慢且成本高昂。但是这里所说的慢的参照系是什么?参照的是虽然更快但是由中心控制的服务器。
为了享受使用中心化计算机的低成本,我们给它们控制我们的力量。如果中央计算机(服务器)出故障或被黑了,就会连累与其连接的所有用户。只有当每个节点都出故障之时,去中心化计算机才会出故障,因此这台计算机能够一直工作下去。有网络之处就有以太坊。
原文链接:
作者: Mohit Mamoria
翻译&校对: 闵敏 & Elisa
你可能还会喜欢: