Ethereum(以太坊)、Smart Contract(智能合约)简介

这一篇我打算聊一聊什么是Ethereum(以太坊)和Smart Contract(智能合约)。还有稍微介绍一下在Ethereum上的Dapp会是怎样的架构呢?

Ehterum的简史

Ehterum的创办人Vitalik Buterin在早期Bitcoin社群中非常活跃,甚至创办了《比特币杂志》(Bitcoin Magazine)。Vitalik Buterin发现Blockchain技术十分适合拿来运行Dapp,于是在2013年的时候发表的Ethereum的白皮书《A Next-Generation Smart Contract and Decentralized Application Platform 》。次年2014年Gavin Wood发表了Ethereum的黄皮书《ETHEREUM: A SECURE DECENTRALISED GENERALISED TRANSACTION LEDGER 》。Ethereum的发展蓝图一共会经历四个阶段,分别是前线(Frontier)、家园(Homestead)、大都会(Metropolis)和宁静(Serenity)。在2017年10月的时候正式进入了大都会阶段。

What is Ethereum

Ethereum在网络的解释众说纷纭。这里我想用Ethereum的创办人Vitalik Buterin所说的一句话来介绍Ethereum,Vitalik Buterin说

”Ethereum is a platform that is specifically designed for people to build these kinds of decentralized applications” .

Ethereum目的就是利用Blockchain技术打造一个平台,让任何人可以在这个平台建立自己的去中心化应用程式Dapp

Bitcoin跟Ethereum最大的区别在于,Bitcoin的block只存放交易数据。而Ethereum设计除了存放交易数据之外,它还可以存放程式码。Ethereum除了存储(storage)的功能之外,还多增加了运算(compute)的能力。利用特定的程式语言编写程式码,将程式码编译(compile)后转换成bytecode并存放在block之中。

将编译过后的bytecode存放在block中

Ethereum的图灵完备性(Truing Completeness)

Ethereum提供了一个去中心化的虚拟机来执行bytecode,称之为EVM(Ethereum Virtual Machine)。EVM存在每一个Ehterum节点中,负责执行存放在block的bytecode。EVM具有图灵完备(Truing Completeness)的特性。图灵完备是叙述机器可以将一切可计算问题(Computational Problem),不论时间长短皆可以计算出结果。可计算问题是指给定一个正整数n请判断是否为质数这类的数学问题。这台机器具有无限的储存空间、可增减的运算能力、条件判断(if-else)以及重复(loop)的能力。EVM具有上述能力,所以EVM是图灵完备的机器。

EVM运行在每个Ethereum节点中

我们可以把Ethereum想像成一台超级电脑。理论上这台Ethereum拥有无限大的储存空间(storage space),无限大的运算能力(compute capability)。我们可以编写任何我们自己要的程式并放到这台超级电脑上面运行。这台超级电脑由Blockchain技术建构,放在上面的资料都难以被篡改。因为去中心化的结构,没有任何一方可以掌控这台电脑。Ethereum是一个基于Blockchain技术所建构,易于运行任何Dapp的去中心开发平台。

Smart Contract是什么

Samrt Contract这个概念第一次出现是在1994由Nick Szabo这位学者所提出来的。原文是这么说的:

”A smart contract is a computerized transaction protocol that executes the terms of a contract”

字面上的翻译是智能合约是执行合约条款的机算机交易协议。有没有觉得超级抽象,根本不知道他在说什么。最好说明Smart Contract的例子就是自动贩卖机。当我们把硬币投入自动贩卖机后,自动贩卖机会给我们所选的商品。这一个动作可以视为我们跟商品厂商在合约下的交易行为。所谓的合约是就双方同意的一套规则。以自动贩卖机的例子来说,这里的合约就是我们给足够价值的硬币,就可以得到所选的商品。负责实现这项合约就是自动贩卖机。厂商将规则(买卖合约)制定好并放入自动贩卖机中。当特定条件满足后(接收到足够金额的硬币),自动贩卖机会依照规则执行相对应的动作(给予所选的商品),这就是Smart Contract的概念。

Smart Contract主要被设计的目的是:

  • 满足常见的合约条件
  • 最大限度地减少恶意损失和意外的异常
  • 减少对可信中介的需求
  • 降低仲裁和执行成本以及其他交易成本
自动贩卖机模式就是Smart Contract的概念

Smart Contract on Blockchain

试想一下要是有黑客入侵了自动贩卖机,会发生什么情形呢?若厂商恶意直接更改自动贩卖机的规则,只收取你的金钱而不给你商品呢?这些问题随着Blockchain的出现,似乎找到了答案。Blockchain本身具有资料不可篡改特,骇客难以攻击放在Blockchain的资料。去中心化的能力更是使得没有任何一方可以掌控已经在运行的程式。Vitalik发现了Blockchain的特性可以从根本解决Smart Contract的问题,于是Ethereum就这么诞生了。

Smart Contract布署在Blockchain中,基于Blockchain特性使得Smart Contract安全性大幅增加

Smart Contract on Ethereum

Ethereum的Smart Contract就是我们写给EVM所执行的程式码,储存在block上的bytecode。当Ethereum Smart Contract在执行的时候它会依照当前的状态(status)跟使用者所下的指令不同而有不同的结果。以自动贩卖机为例,没有投钱的时候自动贩卖机余额为0元的状态,当你投下10元后余额就变成10元的状态,在投下10元余额变成20元的状态。每个Smart Contract的目的不同,设计也不同,所定义的互动接口也不同。我们称这些接口为ABI(Application Binary Interface)。

我们写好smart contract程序代码,经过编译后会得到两个东西。一个是编译过所得bytecode,另一个就是json格式的ABI文件。当我们开始要布署我们的smart contract到Ethereum blockchain中,就必须用刚刚创造出来的ABI当成是一个壳,把bytecode放在data中,然后再丢到Ethereum Blockchain Network等待矿工(miner)帮我们把contract写到block中。当contract布署好之后会自动生成一个帐户,并会回传这个帐户的address,这就是俗称的合约帐户(contract account)。我们透过合约帐户的address来跟smart contract做互动。

布署完Smart Contract后我们利用合约帐户与Smart Contract互动

当我们对contract下指令时,矿工(miner)会依据指令中的address去blockchain查询对应contract状态(status)。根据contract当前的状态和指令作运算。最后把运算后的状态(status)写回矿工所作出来block中。当该block被其他Ethereum节点所接受后,其他节点也会去更新contract的状态。Blockchain自己会去同步所有资料,所以每一个节点所取得的contract状态皆会相同。

Dapp on Ethereum and Smart Contract

最后要比较现今的Web Application架构跟使用Ethereum所建构出来的Dapp架构区别在哪。下图是传统的Web Application架构。

Web Application Traditional Architecture

由Server提供利用HTML/CSS/JavaScript的UI界面给使用者,Server接收使用者的要求进行计算,计算完后的结果存到后端的Database中。图中的Server和Database可以是放在本地端的机房,也可以是放在云端服务,如AmzonS3和AmazonEC2。

Ethereum Dapp Architecture

Ethereum Dapp Architecture中,主要逻辑运算会由Ethereum Smart Contract来负责。资料则存放在Ethereum Blockchain Network中。Server的角色主要是从blockchain中获取资讯并呈现给使用者,大部分复杂运算已被Smart Contract取代。使用者可以利用自己的Ether Wallet进行Send Transaction的方式与Smart Contract做互动。

Smart Contract Example

我们以一个简单的例子来看看Smart Contract可以发挥怎样的作用。假设Bob想要卖车而Kevin想要买车,整个流程会如下:

  1. Bob利用他的帐户在Smart Contract登记卖车资讯。
  2. Bob将自己的车和车钥匙放到一个由Smart Contract控制锁的车库。
  3. Kevin在看中Bob的车并转了足够的钱到Smart Contract的帐户中。
  4. Smart Contract会检查车是否存在和Kevin是否有转足够的Ether到帐户中。
  5. 若条件成立,Smart Contract会把钱Ether到Bob的帐户中,并允许Kevin的prviate key可以打开车库的锁。
  6. Kevin利用自己的private key打开车库的锁并获得车和车钥匙。
利用Smart Contract来简化买卖车流程

结尾

这篇文章主要简介了Ehtereum和Smart Contract,也提及为什么Ethereum适合拿来作为Dapp的开发平台。虽然目前Ethereum有许多要解决的问题,Smart Contract也不太成熟。这需要开发者和使用者共同努力,才能实践未来Dapp的美好愿景。希望透过这篇文章可以让大家稍微了解Ethereum和Smart Contract。以上只是我对于Ethereum和Smart Contract的一些理解。若观念或理解有误,也拜托各位大大不吝啬给于纠正。

本文链接地址:https://www.wwsww.cn/ytf/6245.html
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。