区块链技术:以太坊系统核心总结

区块链技术:以太坊系统核心总结

不仅是国内,目前从全球的科技与金融领域趋势来看,区块链注定将长时间成为科技和金融业界非常关注的技术,当然如果想要参与并计划进行实际区块链落地的话,了解以太坊系统是提升区块链应用理解的一个非常重要的过程,这里总结了一下以太坊系统核心的技术点和原理,以便大家有一个系统具体的而非抽象的理解,相信仔细读完会让我们有一个系统的认知。本文从以下几个核心问题来开展:

• 以太坊是什么?

• 以太坊采矿如何运作?

• 什么是智能合约?

• 什么是以太坊虚拟机?

• 什么是 以太币(Ether)和 Gas?

• 什么是solidity?

• Dapps和ICO。


什么是以太坊

以太坊官方定义:

“以太坊是一个分布式的平台,可以运行智能合约:应用程序按照既定程序运行,不会出现停机,审查,欺诈或第三方干扰的可能性。这些应用程序运行在定制构建的区块链上,这是一个功能强大的全球共享基础架构,可以通过数字流转来代表财产的所有权。“

尽管比特币是区块链技术的第一个应用,但它仍然只是一种货币。而以太坊带来了区块链技术的全部可能性。简单来说,以太坊的设计之初就瞄准成为未来区块链应用的终极软件平台。如果未来去中心化和dAPPs普及,那么以太坊必定会成为未来的核心平台技术。

正如以太坊联合创始人 Dr. Gavin Wood所说:

“比特币首先是一种货币,这是区块链的一个特殊应用。但是,这远远不是唯一的应用。举一个类似的比喻:电子邮件是互联网的一个特殊用途,并且肯定有助于推广,但还有很多其他的。“

以太坊采矿如何工作?

截至目前,以太坊和比特币正在使用的基本同样的工作量证明协议(POW)。但基于以太坊在区块链2.0+的应用,POW已经不再适用,以太坊计划将转移到权益证明(POS),并且他们将使Casper协议进行这一迁移。

那么,POS和POW之间有什么区别呢?

POS vs POW

POW(Proof of work:)工作量证明:这是大多数加密货币如Ethereum和比特币迄今一直遵循的共识算法。这意味着矿工通过使用专用硬件(矿机)来进行挖矿的动作。


POS(Proof of stake)权益证明 :该共识算法将使整个采矿过程变得虚拟。在这个系统中,我们有验证者而不是矿工。它的工作方式是作为一个验证者,你首先必须锁定你的一些以太(可以理解为保证金)。然后验证者将开始验证块,这意味着如果找到任何认为可以加入到区块链的块,你可以通过下注来对其进行验证。如果该块被加入区块链,你将获得与你投资的股权成比例的奖励。但是,如果你对错误或恶意区块投注,你将失去之前的保证金和相关权益。


为了实施“权益证明”以太坊将使用Casper协议。

Casper是一种基于保证金的经济激励共识协议(security-deposit based economic consensus protocol)。协议中的节点,作为“锁定保证金的验证人(bonded validators)”,必须先缴纳保证金(这一步叫做锁定保证金,"bonding")才可以参与出块和共识形成。Casper共识协议通过对这些保证金的直接控制来约束验证人的行为。具体来说就是,如果一个验证人作出了任何Casper认为“无效”的事情,他的保证金将被罚没,出块和参与共识的权利也会被取消。保证金的引入解决了"nothing at stake",也就是经典POS协议中做坏事的代价很低的问题。现在有了代价,而且被客观证明做错事的验证人将会付出这个代价。

一开始,以太坊会是一个混合共识算法的系统,其中大部分交易仍然采用POW方式,少量采用POS(每100次交易就会使用POS机制)。


POS权益证明的好处

• 降低整体能源和资金成本:全球比特币矿工每小时花费约50,000美元的电费。这是每天120万美元,每月3600万美元,每年约4.5亿美元!通过使用“权益证明”,你可以使整个流程完全虚拟化并切断所有这些成本。

• 不依赖ASIC:由于整个过程将是虚拟的,因此不依赖于谁拥有更好的设备或ASIC(专用集成电路)。

• 使51%的攻击更难:51%的攻击发生在一群矿工获得超过50%的散列能力的情况下。使用POS能抵挡这种攻击。

• 无恶意验证者:任何将其资金锁定在区块链中的验证人都将确保他们不会向链中添加任何错误或恶意块,因为这意味着他们将失去其投入的全部股份投资。

• 创建块:使创建更新的块和整个过程更快。

• 可扩展性:通过引入“sharding”的概念使区块链可扩展(稍后会详细介绍)。


尽管以前有过各种简单的关于POS共识机制的论证,但Casper协议与其他协议的区别在于,它激励了诚实的矿工并惩罚了不诚实的矿工。如果你把你的投资放在一个恶意块上,你将失去你所有的投资和收益:通过此来惩罚任何不遵守规则的人。

“想象一下坐在圆桌旁的100个人。一个人拥有一堆文件,每个文件都有不同的交易历史。第一名参与者拿起一支笔并签名,然后传递给下一个做出类似选择的人。如果每个参与者签署大多数参与者登录的交易历史,则每个参与者只获得1美元。如果你想搞小动作,在一页上签名,然后在另一页上又签字,你的房子就会烧毁,“

什么是智能合约?


智能合约顾名思义就是自动化合约。它们是自动执行的,并在其代码上写入了特定的指令,并在特定条件下执行。

智能合约是在Ethereum生态系统中如何完成的:

智能合约执行流程

当有人想要在以太坊完成一项特定任务时,他们会与一个或多个人发起智能合约。

智能合约是一系列指令,使用编程语言“ solidity” 编写,该编程语言基于IFTTT逻辑(即IF-THIS-THEN-THAT逻辑工作:如果符合某个条件则做某件事情)。基本上,如果完成了第一组指令,那么执行下一个功能,然后执行下一个功能,并继续重复,直到达到合同结束。

为了理解智能合约机制,我们可以设想有一台自动售货机。你采取售卖的的每一步都像是下一步执行本身的触发器。它有点像多米诺骨牌效应。来看看你在与自动售货机进行交互时将采取的步骤:

• 第1步:你给自动售货机一些钱。

• 第2步:你按下与你想要的货物对应的按钮。

第3步:你买的货物自动从售货机出来,你拿到它。

现在看看所有这些步骤并思考它。如果前一个步骤未执行,是否有任何步骤有效?每一步都与前一步直接相关。还有一个要考虑的因素,它是智能合约的一个组成部分。你会发现,在与自动售货机的整个交互过程中,你(请求者)完全是与机器(提供者)一起工作的。绝对没有第三方参与。

那么,现在这个交易看起来如果发生在以太坊网络上呢?

假设你刚刚在Ethereum网络的自动售货机上购买了一些东西,那么这些步骤将如何?

步骤1:你给自动售货机一些钱,这会被以太坊网络中的所有节点记录下来,交易会在账本中更新。

步骤2:按下与你想要的货物对应的按钮,并在Ethereum网络和分类账中更新记录。

第3步:该货物自动出来,你拿到它,这是由所有的节点和总账记录。

你通过智能合同进行的每笔交易都将通过网络进行记录和更新。它所做的是让参与合同的每个人都对自己的行为负责。它通过使整个网络可见的每一个行动消除恶意行为。


什么是以太坊虚拟机?


在我们了解以太坊虚拟机(EVM)之前,我们必须了解为什么需要“虚拟机”。

那么让我们回到智能合约。

我们希望在我们的智能合约中有哪些理想的属性?

任何在区块链上运行的东西都必须是不可变的,并且必须能够在不损害其完整性的情况下运行多个节点。因此,智能合约功能需要三个特性

• 确定性。

• 可终止。

• 隔离性。


特征#1:确定性

一个程序是确定性的,如果它每次给一个给定的输入提供相同的输出。例如。如果3 + 1 = 4,那么3 + 1总是4(假设基数相同)。所以当一个程序在不同的计算机上向同一组输入提供相同的输出时,该程序被称为确定性的。

有一个程序可以以不确定的方式行事的各种时刻:


• 调用非确定性系统函数:当程序员在其程序中调用非确定性函数时。

• 非确定性数据资源:如果一个程序在运行期间获取数据并且该数据源不确定,那么该程序将变得不确定。例如。假设一个程序获得特定查询的前10个谷歌搜索。该列表可能会不断变化。

• 动态调用:当程序调用第二个程序时,它被称为动态调用。由于呼叫目标仅在执行期间确定,因此它本质上是不确定的。

特征#2:可终止

在数学逻辑中,我们有一个称为“暂停问题”的错误。基本上,它表明无法知道给定的程序是否可以在有限的时间内执行其功能。1936年,Alan Turing使用Cantor的对角线问题推断,无法知道给定的程序是否可以在时限内完成。

这显然是智能合约的一个问题,因为根据定义,合约必须能够在给定时间内终止。采取了一些措施来确保有一种方法可以从外部“杀死”合同并且不会陷入无休止的循环,这会消耗资源:

• 图灵不完备性:图灵不完备区块链的功能有限,不能进行跳转和/或循环。因此他们不能进入无限循环。

• 步骤和费用计量表:程序可以简单地跟踪它所采取的编号“步骤”,即执行的指令数量,然后在执行特定步骤计数后终止。另一种方法是费用计量器。这里的合同是以预付费执行的。每个指令执行都需要特定的费用。如果花费超过了预付费,那么合同将被终止。

• 定时器:这里保留一个预定义的定时器。如果合同执行超过时间限制,则会在外部中止。


功能#3:隔离性

在区块链中,任何人和每个人都可以上传智能合约。但是,正因为如此,这些合同可能在故意和不知情的情况下包含病毒和错误。

如果合同不是隔离的,这可能会妨碍整个系统。因此,将合同隔离在沙箱中以保护整个生态系统免受任何负面影响至关重要。

通常情况下,智能合约可以基于以下两种系统之一运行:

• 虚拟机:以太坊使用这个。

• Docker:Fabric使用这个。

让我们来比较这两个,并确定哪些是更好的生态系统。为了简单起见,我们将比较以太坊(虚拟机)和Fabric(Docker)。

EVM和Docker的对比

因此,可以看出,虚拟机为智能合同提供了更好的确定性,可终止和隔离的环境。然而,dockers有一个明显的优势。他们在能为虚拟机(如以太坊虚拟机之类)提供灵活的编码语言。

EVM是所有智能合约在以太坊中运作的虚拟机器。它是一个简单而强大的图灵完备的 256位虚拟机。图灵完备意味着在给定资源和内存的情况下,EVM中执行的任何程序都可以解决任何问题。


为了在EVM中编写智能合约,需要学习编程语言Solidity。


那么:

什么是Solidity?

对于想要学习如何创建智能合约的人来说,Solidity是绝对必要的。Gavin Wood,Christian Reitwiessner,Alex Beregszaszi,Yoichi Hirai和几位以前的以太坊核心成员开发了Solidity,以便在区块链平台(如以太坊)撰写智能合约。

Solidity是一种面向对象的语言,语法非常类似于ECMAScript(Javascript)。从以太坊设计原理文档中,我们需要记住一些关键点,即我们正在使用32字节指令字大小的堆栈和内存模型,EVM(以太坊虚拟机)使我们能够访问程序“堆栈“,它就像一个寄存器空间,我们也可以粘贴存储器地址,使程序计数器循环/跳转(用于顺序程序控制,EVM需要智能合约中的完全确定性。

(注意:以太坊计划最终从Solidity转移到Viper。)


我们来看看一个基本的Solidity合约示例。

让我们运行一个简单的while循环:

contract BasicIterator 

{ 

address creator; // reserve one "address"-type spot 

uint8[10] integers; // reserve a chunk of storage for 10 8-bit unsigned integers in an array 

function BasicIterator() 

{ 

creator = msg.sender;

uint8 x = 0; 

//Section 1: Assigning values

while(x < integers.length) { 

integers[x] = x;  

x++; 

} } 

function getSum() constant returns (uint) { 

uint8 sum = 0; 

uint8 x = 0; 


//Section 2: Adding the integers in an array.

while(x < integers.length) { 
sum = sum + integers[x];

x++; 
} 

return sum; 

} 

// Section 3: Killing the contract

function kill() 

{ 

if (msg.sender == creator) 

{ 

suicide(creator); 

}

}

}


我们来分析一下代码。为了便于理解,我们已经将代码分成三部分。

第1部分:分配值


在第一步中,我们将填充一个名为“integers”的数组,其中包含10个8位无符号整数。我们这样做的方式是通过一个while循环。我们来看看while循环内发生了什么。


while(x < integers.length) {
integers[x] = x;

x++;

}


记住,我们已经给整数x赋了一个“0”的值。while循环从0到整数。长度。Integers.length是一个返回数组最大容量的函数。因此,如果我们确定数组将有10个整数,则arrayname.length将返回值10.在上面的循环中,x的值从0到9(<10),并将其自身的值分配给整数数组也是如此。因此,在循环结束时,整数将具有以下值:

0,1,2,3,4,5,6,7,8,9。


第2部分:添加数组内容


在getSum()函数内部,我们将添加数组本身的内容。方法是通过重复上面的while循环并使用变量“sum”来添加数组的内容。


第3部分:中止合同


该功能会中止合同并将合同中的剩余资金返还给合同创建者。

当被问及创造 Solidity后面的灵感和动机是什么时,Gavin Woods博士这样说道:


“它[Solidity]旨在成为开发合同的复杂工具,最终可以为开发人员和用户提供有关代码所做工作的完整信息。为了解决这个问题,我设计了一种合约友好型文档格式的NatSpec。我还提出了一个正式的校对语言子集(尚未实施),以便最大限度地提供可以进行的正确性保证。
我将事件作为第一类公民引入Solidity语言中,以便为类似于函数调用的LOG提供很好的抽象。对此的启示来自Qt元对象系统的“signals”。


Christian R.和我一起想到的一个后来的功能是功能调节器; 它允许作为函数签名的一部分放置的属性对视函数体进行一些修改。作为一种非常具有说明性的表达手段,这是一种很好地融入到面向契约的编程领域的习惯用法。“,如果对于智能合约开发工具和环境感兴趣,也可以浏览:区块链开发:最佳的智能合约开发工具总结


什么是 以太(Ether)和 Gas?

以太币(Ether)是生态系统中的主要代币(token)。激励参与者执行以太相关的智能合同项目。gas是满足特定合同所有需求所需的’燃料’量,它用来衡量一个行为或者一系列行为有多少“工作量”。。

当某人提交智能合同时,它具有预定的 gas 价值。当合同执行时,合同的每一步都需要执行一定数量的gas。所以:gas是计算费用的方式。不过,这些费用仍然是以ether计算。类似于,我开车需要消耗多少天然气(gas),但是最终结算时用人民币(以太币)来结算。

这可能导致两种情况:

• 所需的gas超过了设定的极限。如果是这种情况,那么合同状态将恢复到原始状态,并且所有的gas都用完了。

• 所需的gas少于设定的限值。如果是这样的话,那么合同就完成了,剩余的gas被交给合同制定者。

以下是平均gas价格的图表。

图片来源:Etherscan


Gas 是以太坊的命脉,就好比石油是工业系统的命脉一般。


以太坊的所有交易均由矿工确认。基本上,他们必须手动将每一笔交易放入他们为交易进行验证而开采的块中。作为交换他们的服务,他们收取一定数量的交易费用。

通常情况下,高额gas费用的智能合约是优先考虑的,因为矿工有机会在那里收取更高的费用。与比特币相比,收取的费用仍然很有名。


这张图表比较了比特币的交易费用与以太坊。

图片来源:Bitinfocharts


事实上,正如你所看到的,在这个0.01 Ether的交易中,只有0.00000000000002以太被收集为交易费用,这是<0.000001美元。

图片来源:Etherscan



Dapps和ICO

以太坊最令人兴奋的功能之一显然是它为用户创建自己的Dapps提供的平台。

任何人,任何地点都可以创建自己的dAPP,并通过提供白皮书,通过ICO获得资金!相关ICO流程可以参考:数字货币ICO流程,ICO 与IPO的差异分析

这是以太坊最令人兴奋和最危险的功能之一(事实上,很可能你已经看到了这些ICO最近疯狂的圈钱)

由于某些企业重量级人物的支持和ICO的普及,以太坊已经得到广泛采用。因此,以太坊网络上的节点数目呈指数级增长。实际上,它是拥有最多节点的加密货币,因此最为分散。


最后:

目前很多区块链项目和ICO相关大部分都衍生于以太坊,当然也有很多非常垃圾的圈钱项目,但是正如某人说过:技术无罪。不能因为一些不正常炒作而否定技术本身,我们班更应该关注的是如何使用技术来推动产业革命。


首发专栏:

区块链与比特币技术zhuanlan.zhihu.com图标

编辑于 2018-03-21

文章被以下专栏收录