什么是智能合约?
智能合约 (Smart Contract) 一词是由学者尼克 ‧ 萨博 (Nick Szabo) 于 1990 年代初期提出,但在当时并没有受到重视。直到近几年,区块链的发展,才随着第二代区块链以太坊受到广泛的讨论。什么是智能合约呢?最简单的解释是「当达成特定条件时,就会触发程序,强制执行」。
最常用来解释智能合约的例子是「自动贩卖机」。
如果使用者投入 10 元且按 A 按钮 → 输出红茶
如果使用者输入 10 元且按 B 按钮 → 输出绿茶
如果使用者输入 20 元且按 C 按钮 → 输出咖啡
既不智能,也不是合约
这样看下来你或许会发现,智能合约并没有那么”智能”,只能够根据设计的条件执行特定的程序,无法接受突发状况的产生。这就好比若自动贩卖机没有设计退币功能,使用者突然反悔不想喝饮料了,机器没有退币口,没有办法退钱,只能摸摸鼻子选一样喝。
同时智能合约也不是合约,所谓的合约是交易双方共同签署的,具有「法律效力」的约定事项。然而智能合约只是运行在以太坊上的程式,并不具备任何法律效力。这也就是为什么以太坊创办人 Vitalik 曾在 twitter 上公开表示 :
「需要澄清的是,在这一点上,我非常后悔采用了’智能合约’这个术语。我应该把它们叫做更无聊和技术性的东西,也许类似于’持久脚本 (Persistent Scripts)’。」
智能合约的特色
简单举一个智能合约的运用案例。
条件1:若3个月内的降雨量不到6毫米。(降雨量数据来自气象局的传感器)
条件2: 农民必须如期缴纳保险费
若达成以上两个条件,即强制执行:
将一定金额的钱作为保险费发给农民。
这是一个相当好懂的例子,但是这时你可能会想:
「这种事情现在也做得到阿,银行都可以自动扣款了,达成特定条件自动转帐,这没有什么特别的阿」
没错,一般保险公司确实不需要智能合约就能够做到,但是, 数据库不同
在过程中也会出现一些额外风险。例如保险公司拖延甚至拒绝理赔、合约内容储存于保险公司的中央数据库有安全疑虑,保险公司有可能伪造气象数据不认帐以及保险公司倒闭等诸多问题,而有了去中心化的智能合约,就能够妥善解决这些问题。
智能合约的运作
智能合约是一个运行于区块链上的一串代码,以以太坊为例,可以想像每一个矿工都在同时运行这个代码,代码不会停止运作、不会受到窜改且完全公开透明,没有人能够改变智能合约的内容与执行,为合约双方提供更好的保障,与强制力。
在以太坊的网路中存在着许多节点,这些节点除了挖矿之外,也要负责运行以太坊上的智能合约,这项工作运行在每一个矿工的 EVM(以太坊虚拟机)上。我们可以把 EVM 看作一台分散式的计算机,拥有网络中所有节点的计算与存储资源,该资源用于在区块链上运行智能合约。
智能合约的确定性与可终止性
智能合约要顺利运行就必须要具备「确定性」与「可终止性」。
所谓的「确定性」是指,如果一个程序在不同的计算机、或者在同一台计算机上的不同时刻多次运行,对于相同的输入能够保证产生相同的输出,则称该程序的行为是确定性的。由于智能合约运行于网路上的多台电脑,如果一个智能合约是非确定性的,那么不同节点运行的结果就可能不一致,从而导致共识无法达成,网路停滞。
为什么智能合约需要具备「可终止性」?假设今天在以太坊上运行一个程式让合约不断的运作,也就是所谓的死循环,将会无限消耗以太坊上 EVM 的资源。为了解决这个问题,以太坊引入了计价器机制。
每次执行一次智能合约,EVM都会向用户收取非常小的ETH维护费,也就是GAS,以提供智能合约需要使用的计算能力。所以以太币的核心意义不是作为一般等价物的货币,而是类似于石油一样作为动力驱动以太坊网路的服务,因此,若有人企图使用智能合约消耗以太坊网路上的资源,由于每次执行智能合约都需要 GAS 做驱动,一但燃料耗尽,合约就会执行失败,并且不会退回消耗掉的费用,藉此防止死循环的发生。
智能合约的出现让大家开始觉得区块链有实际的用途,而且能广泛运用在各行各业中解决问题,所以被大家称为第二代的区块链或是区块链2.0,智能合约也让区块链的开发变得更简单,使得更多企业或新创公司能够将自己的去中心化应用(Dapp)建立在以太坊之上,并发行自己的加密货币 (Token),让区块链的开发进入到下一个世代。目前许多团队也在开发类似以太坊的去中心化平台,但以太币仍旧佔据前三名的宝座之上,未来以太坊是否会被取代,亦或是称霸区块链开发端,就让我们继续看下去。