以太坊上的智能合约是如何运作的?

就像其他许多区块链产业的点子一样,人们也对「智能合约」抱着无比的疑惑。智能合约这个名词误导了人们对于智能合约合约核心运作模式的理解,因此这个透过区块链达成的技术让人们不是很好理解。

一个我们日常生活中所提到的合约,是指一种通常透过法律作为强制力的两造关系。但是智能合约的强制力是透过加密的程序所达成的。换句话说智能合约是一些我们写好的程序,而且这些程序会照着程序开发者当初设定的内容运作。
在1993年,智能合约这个概念才被提出来。提出者是Nick Szabo,他是一位电脑科学家也是一位密码学家。他最早把智能合约描述为一种数位贩卖机的概念。在他的例子中,他描述使用者如何能输入数据或数值,从机器去换取有限的物品,在这个例子中这有限的物品是零食和气泡饮料。
在一个简单的例子中,以太坊使用者可以利用智能合约,在指定时间,传送10个以太币给自己的朋友。
在这个例子中,使用者可以写一个智能合约,并且给予合约所需的数据,然后合约就可以执行我们所需的任务。
但其实这个新工具不是被设计为单独使用。人们相信我们可以透过智能合约技术,去达成去中心化应用程序(Dapp),甚至是一个去中心化自己运作的公司(DAO)。
智能合约是如何运作的?
我们必须注意到,其实比特币就已经支持某些基本的智能合约功能。在交易被发出去以后,比特币网络上的节点可以设定在某些状况才去验证之前发出去的交易。但是比特币被局限在仅能当作货币用途使用。
相反的,以太坊把比特币较为受限的语言(比特币是大概一百多个脚本所构成的脚本语言,详见bitcoin wiki),用一个允许软件工程师任意发挥他们能力的语言取代。
以太坊允许开发者去开发他们自己的智能合约,或者用以太坊白皮书里面的说法 — 自动代理人(autonomous agents)。并且以太坊提供的语言是图灵完备的,代表说它能支持更多的计算指令。
智能合约能做到:
· 多重签名,这样资金可以只有在指定一群人中达到指定比例的人同意后才能被花费。
· 管理多个使用者之间的合约、协议。就像是纪录是某个人向另个人买了保险。
· 提供其他合约所需的功能及服务。(就像是写软件时所需要用到的函式库)
· 做应用软件的纪录,比如说像是域名申请的信息或者是会员资料纪录。
群众的力量
从最后一点就可以推断,智能合约很可能需要来自其他智能合约功能上的支持。比如说有人写了一个能在夏天对气温下Du的简单智能合约。这个合约可能就会触发其他合约。一个合约负责从外部得到天气信息,另个合约负责Du博所需要的计算,他就可以透过第一个合约回传的数据去计算赔率。
在运作智能合约的时候需要支付以太币当作交易手续费。而这个交易手续费会随着所需计算指令数量的增加而增加。
就像在另一篇文章以太坊是如何运作的中提到的以太坊的智能合约会在使用者或者另一个合约送足够交易费的信息开始运作。以太坊虚拟机就会以位组码(bytecode)的方式去执行智能合约,而位元组码是一连串可以被以太坊网络所读取和编译0和1。