前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang语言情怀--第103期 区块链技术-关于区块链中的智能合约:您想知道的一切

Golang语言情怀--第103期 区块链技术-关于区块链中的智能合约:您想知道的一切

作者头像
李海彬
发布2022-12-14 14:23:43
8101
发布2022-12-14 14:23:43
举报
文章被收录于专栏:Golang语言社区Golang语言社区

智能合约一词是由学者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/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-10-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言情怀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档