智能合约一词是由学者Nick Szabo 于1994 年所提出,他倡议可将交易条款以程式自动化处理,为了阐释智能合约的概念,他举了自动贩卖机当例子:
如果使用者投入10 元且按A 按钮,贩卖机就掉出乖乖
如果使用者投入20 元且按B 按钮,贩卖机就掉出咖啡
如果使用者投入30 元且按C 按钮,贩卖机就掉出泡面
这很好理解,当使用者跟自动贩卖机互动时,只要满足特定条件,就会有相对应的价值转移产生(钱换各种零食),这一切都透过电脑的软硬体自动化执行,无须借由第三者的协助,这就是智能合约的概念。
事实上刚读到这段智能合约的起源时,我跟上面那位读者一样,顿时丈二金刚摸不着头脑—— 智能合约这东西很稀奇?啊不是现在就有了吗?
如果以自动贩卖机的这个概念为基础延伸下去,
· ATM 是智能合约(我验证身份就可以领钱)
· 在iTunes 上买专辑也是智能合约(我付钱拿电子专辑)
· 在线上游戏买虚宝也是智能合约(我付钱拿虚宝)
后来了解更多之后,才发现这样的想法是刚好被Nick Szabo的举例给绑住了,自动贩卖机只是一个让大家理解「条件满足就自动执行」的例子,事实上,Nick Szabo所设想的应该是一个平台,能够让人们透过某种共通的软体工具,让大家可以把交易的条件表达成自动执行的程式码,做到自动化的「价值转移」。
如果只看自动贩卖机的例子的话,智能合约的确可以用中心化的系统来处理,但要实现Nick Szabo 的理想,必须要有一个平台用来储存程式代码并运行程式,问题来了,既然牵涉到「价值转移」,就攸关大家的利益,那平台到底该由来谁运行?
找政府?找有公信力的大企业?找社会达贤?都不适合,因为不管你找谁,这些家伙都有诱因窜改程式码而中饱私囊,反正有钱的地方就有纷争,有人的地方就有江湖,在缺乏适合平台的状况下,Nick Szabo 的理想自然很难实现了。
区块链2.0以太坊的出现,为智能合约提供了合适的平台
接下来的故事大家应该就很清楚了,2013 年俄国天才少年Vitalik Buterin 提出了新一代的区块链——以太坊作为运行智能合约的平台,一下子把区块链从原本的P2P 电子现金传输机制(比特币),跃升为去中心化的「世界电脑」这个等级,开启了区块链2.0 的时代。
区块链的智能合约
为什么区块链适合作为智能合约的平台?主要理由有三:
一、智能合约部署上区块链后,就无法被修改,避免了合约被窜改的风险。
二、智能合约在区块链上是公开的,合约参与者可审查代码是否有问题。
三、只要条件满足,无人能阻止区块链执行智能合约,执行效力是绝对的。
以上的三点,让区块链的智能合约可具备「透明」、「去中心化」、「自动化」的特性。
「透明」有什么用?
在一些运作机制不透明的产业,譬如线上博奕,人们很难相信程式不会偏袒庄家,毕竟后端的代码都掌握在博弈厂商的伺服器上,但如果改用区块链的智能合约就不一样了,其程式运作逻辑都可以供公开检视,玩家不用担心被庄家坑。
还有一个例子是数位广告,厂商把钱交给数位广告代理商后,最后只会得到一些报表,内容可能包含广告被投放在哪里/花了多少钱/多少浏览/多少点击等数据,但事实上,报表是真是假,厂商根本无从得知。举个例子,代理商可以唬烂厂商他把预算投放在A、B、C 平台,但事实上只投了A 平台,或是宣称投了100万广告费,但实际上只花了50 万,且数位广告牵涉DMP、AD exchange、AD Network 等中间商,中间的利润分配非常不透明,如果用区块链的智能合约,把程式代码公开让大家检视,就可以解决这个问题。
「去中心化」有什么用?
讲去中心化之前,先补充个观念,事实上所有牵涉「非实物交付」的价值转移,都需要透过第三方作为信任中心,举个例子,假设我要把一栋房子转交给其他人,我不可能手捧着房子给他,所以我会先签房契,然后再拿房契到地政事务所登记,这个例子中,地政事务所就是作为信任中心的「第三方」,也就是纪录价值转移的「帐本管理者」,它记录了所有房产的所有权状态及转移历史。
转帐也是一样,转帐实务上没有牵涉任何纸钞或硬币的转移,你必须信任银行不会做假帐,才能安心使用银行的转帐系统。
如果地政事务所或是银行出错,甚至是想要作恶,用户就会被暴露在极高的风险当中,我们之所以信任类似银行这样的帐本管理者,是因为背后有国家、法律在支撑起整个社会的信任体系,在台湾这种幸福的国家,这个信任是相对有保障的,但在一些金融体系和法治观念比较落后的国家,银行很容易就破产,官商勾结的情况也比较严重,今天你的房产还是你的,明天可能就莫名其妙变成别人的了,这时候区块链作为去中心化的资产转移系统,就有其应用价值。
那有什么应用的例子呢?假设今天有一个富翁,富翁的金库存了一千万美元等值的黄金,他想在死后把金库的密码告诉给他的女儿,但是他担心遗产信托的单位会侵吞密码,这时他可以写一个智能合约,他每2 周至少会跟智能合约互动一次,这样智能合约就知道:「富翁还活着」,如果他挂了,自然就会停止互动,2 周后智能合约就会自动把密码传送给女儿知道,这个做法除了可以确保遗产一定会转给他女儿之外,富翁还省下了找遗产信托& 找律师写遗嘱的费用。
这只是一个简单的例子,任何「信任基础薄弱」、「非实物交付」的资产转移,都是区块链的智能合约可以发挥的地方。
「自动化」有什么用?
相信很多人在媒体上看过智能合约的自动化程序,可省下人力与纸张成本等说法。
心思再稍微细腻一点的读者,可能会想——「疑?中心化的程式不也可以省人力或纸张的成本吗?这有什么好稀奇的?」
譬如随便一个电商系统,只要厂商从金流商那边收到「使用者已付款」的资讯,系统就自动pass 订单资讯到仓库,然后由仓库统一出货,中间的运作逻辑都由程式控制,一样可以省人力或纸张成本。
所以区块链的智能合约在「自动化」上,有比一般系统更独到之处吗?
答案是有的。
区块链本身就是一个分散式的数据库,因为参与者都维护相同的数据库,而且还有数据不可被篡改的特性,所以可以解决「跨系统沟通的信任问题」。
在「电商系统」例子中,如果以功能区分的话,大致可以分成四个单位:
· 银行(负责提供金流的infrastructure)
· 金流商(负责介接银行,提供payment gateway)
· 电商系统(负责处理订单资讯)
· 仓储系统(负责处理出货)
这四个家伙,他们中间存在信任问题吗?
银行会有诱因跟金流商撒谎,说某信用卡额度不足的客户刷卡成功吗?电商系统会跟仓储系统乱报订单资讯吗?应该不会吧!干嘛自己人打自己人啊!
所以在以上例子中,各方系统开放API ,让不同系统可以互相沟通就好了,用不到区块链的智能合约。
那在怎样的状况下,会比较适合区块链?
供应链金融是很适合的应用场景,简单介绍一下供应链金融的运作方式——通常供应商出货给厂商之后,不会收到即时的现金(越大牌的厂商,赊帐期间越长),而是收到厂商发的「应收帐款」的证明,约定好在几个月后付钱,但这会造成供应商现金流上很大的压力,这时候解法有二:
1)供应商用「应收帐款证明」作为抵押品,跟银行借钱,减轻周转压力。
2)供应商用「应收帐款证明」作为约当现金(cash equivalents),跟更上游的供应商叫货。
这个时候问题就来了,不管是银行,还是更上游的供应商,一定都会担心这个「应收帐款证明」是假的,所以银行和供应商会去向厂商确保「应收帐款证明」的真实性,但这么一来稽核的成本就很高,需要有一个可信赖的协作平台,让大家可以安心地交换资料。
这个时候,厂商、各级供应商跟银行,就可以组成联盟链,把各自互动的数据写入区块链中,资讯都透过电子签章加密,以确保资讯的真实性。
举「借钱」为例,智能合约的运作步骤如下:
1. 供应商以「应收帐款证明」做担保向银行提出借钱的请求
2. 银行透过联盟链的权限,向厂商提出查询请求。(上链资讯:附上「供应商和银行电子签章」的「查询请求」)
3. 厂商检查「应收帐款证明」的真实性,将查询结果回传给银行。(上链资讯:附上「厂商电子签章」的「查询结果」)
4. 银行确认应收帐款为真&贷款金额没有超过应收帐款后,放款给供应商。
5–1. 如果供应商准时缴清贷款,结束贷款合约。
5–2. 如果供应商付不出贷款,银行就请厂商代偿款项,结束贷款合约。
以上智能合约的设计,最大限度的保留了各方参与者的资料隐私,只把最必要的资讯——「应收帐款的真实性」上链,而步骤1 、4、 5 的资讯就没必要上链。而由于上链后的资讯不可篡改,且互动纪录都附有各方的电子签章,降低了参与者作恶的风险。
所以总结来说,区块链的智能合约可提供「可信赖」、「可跨系统沟通」的自动化机制,这才是区块链智能合约在自动化上的价值所在。
结论
我们总结一下整篇文章的内容:
1. Nick Szabo 提出的智能合约,并非一定要去中心化,中心化的智能合约一样能运作。
2. 要达到Nick Szabo 「通用型智能合约」的理想,需要一个去中心化的平台,区块链正是perfect match。
3. 区块链的智能合约是透明的,适合用在运作机制不透明的产业。(如线上博奕)。
4. 区块链的智能合约是去中心化的,适合用在「信任基础薄弱」、「非实物交付」的资产转移场景。(如金库密码转移)
5. 区块链的智能合约可提供「可信赖」、「可跨系统沟通」的自动化机制,适合用在资讯需与多方确认的应用场景。(如供应链金融)
本期就到这里,下期再见。
同学们,兴趣是最好的老师;只争朝夕,不负韶华!加油!
参考资料:
Go语言中文文档
http://www.golang.ltd/
Go语言在线编辑器:
http://OL.Golang.LTD/
LollipopGo社区(筹建中)
https://www.LollipopGo.Com/