区块链研习 | 区块链里所说的“智能合约”是什么?

本文作者:敖萌 编辑:温晓桦 2017-10-11 20:31
导语:谈到区块链,必然离不开“智能合约”这个词。我们在本系列的第一篇文章中提到“智能合约”(smart contract)是由多产的跨领域法律学者 Nick Szab

雷锋网AI金融评论按:本文作者为中国信息通信研究院(工信部电信研究院)专家敖萌博士,雷锋网(公众号:雷锋网)独家特约文章,雷锋网与信通院联合首发。未来,敖萌博士原创的区块链系列文章还将继续刊出,雷锋网(公众号:雷锋网)与信通院相关平台同步更新,敬请关注!

谈到区块链,必然离不开“智能合约”这个词。我们在本系列的第一篇文章中提到“智能合约”(smart contract)是由多产的跨领域法律学者 Nick Szabo 在1995年提出来的,他的定义为:“一个智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议。”那么,我们该如何理解这段话呢?

回顾一下比特币区块链系统中的转账:

Alice 转账给 Bob 100比特币,在比特币区块链系统中是这样记录的:

本质上,这就是一个合同。这个合同里面规定了 Alice 要转给 Bob 100比特币,该合同立即生效。注意,里面有一个“解锁信息”,这个“解锁信息”本质上就是 Alice 证明自己是 Alice 的地址持有者时需要提交的一个信息。

显然,像比特币区块链系统里面,纯UTXO模式的这种合同用处是很有限的。首先,比特币是一个独立运行的封闭系统,它的转账脚本没有提供和外界进行交互的接口。所有信息(这里主要是解锁信息)只能在脚本提交到区块链之前定死,之后就只能按照固定方式运行。这对于“合同”来说是不符合实际应用的。

在我们实际生活中,一个完整的合同制定——执行流程是按照如下方式随着时间流逝而进行的:

其中,条件的达成通常是一个外部输入的事件,这意味着,我们实际生活中的合同通常是“事件驱动”型的。这个“事件”是否发生通常不是区块链上的数据能够判断出来的,而是依靠事件发生的时间点,通过链外输入数据的方式实现。

以电子商务为例,Alice 在某宝的某个商家购买了一台笔记本电脑,当 Alice下单成功的那一刻,实质上就生成了一个合同。这个合同包含了 Alice 需要在多长时间内付款到第三方平台(事件1)。然后卖家看到 Alice 付款后需要发货,当 Alice 收到货以后需要点击确认收货(事件2),完成整个合同(在不考虑售后的情况下)。

在这个合同的执行过程中,事件1由于是一个纯粹的金融活动,已经高度的虚拟化,能够实现自动发现事件自动触发。而事件2则是一个在现实世界中发生的活动,需要我们“点击确认收货”来把这个事件的发生同步到虚拟世界中,这个“点击确认收货”就是虚拟世界中的事件2。所以,对于某宝的购物合同而言,事件1实质上是 Alice 是否转账到平台,事件2是 Alice 是否点击确认收货。因此,在这个合同中,预留了一个和外部交互的接口——确认收货。

除了和外部的交互能力外,比特币转账合同(脚本)的另一个重要缺陷是它不是图灵完备的。这句话对于非计算机专业的人来说可能不太好理解,我们可以简单的理解为它没有循环能力和复杂的条件控制能力。

合同的循环能力在我们现实世界中是很常见的,例如我们和电信运营商签署的移动电话服务合同,通常就是一个循环合同。这种合同以自然月为单位,每个月自动循环执行。还有类似的企业间签订的长期采购合同,都是一种不断循环的合同。合同中规定的事件(或时间点)全部达成以后,自动循环回第一步,重新执行。

复杂的条件控制能力就更常见了——合同中的违约条款就是条件控制能力。事件达成怎样,没有达成如何执行违约条款等,这些都需要合同拥有复杂的条件控制能力。

比特币中的交易是使用比特币区块链底层平台定义的一套脚本语言来写的,由于当初比特币区块链系统是按照一个数字货币的模型进行设计的,因此它并不需要这些复杂的能力。但是如果我们需要区块链技术在其他商业场合进行应用,很多时候就需要这些能力。比如我们利用以太坊平台来实现某个业务,那么整个流程是这样子的:

目前,关于智能合约的争议仍然是很多的。主要包含两方面:

1、合同本身是否是双方真实意思的表达

a)在现实世界中,我们撰写的合同除了受合同细节的约束外,还受到了外部法律和行业惯例的约束。而在智能合约中,外部法律和行业惯例如果不能严格的体现在合同中,那么合同就不是双方真实意思的表达了。

b)在现实世界中,我们撰写的合同通常是由律师或者法律专家来帮我们完成的。不同水平的法律专家,其完成的合同严谨程度是不一样的。同样在智能合约中,我们撰写的合同是由程序员帮我们完成的,程序员的水平决定了合同的严谨性。还有一点,程序通常都会有bug,这些bug是否会导致严重的损失,然而在bug没有被发现之前,都不得而知。

2、合同的仲裁机构是谁

a)在现实世界中,我们通常都会在合同中约定一旦发生纠纷,请哪个仲裁机构对合同进行仲裁。而在区块链中,尤其是公有链平台上的智能合约,一旦我们认为合同没有表达双方真实的意思,我们无法找到一个仲裁机构对合同进行仲裁。

b) 在联盟链中,由于各方各个节点的身份都是已知的,现实世界中的司法机构是可以介入智能合约纠纷的。但是这种介入有时候可能会影响整个联盟链系统的稳定性,这种情况下,怎样介入是一个技术问题,而这个技术问题又可能会带来新的bug。

区块链研习 | 区块链里所说的“智能合约”是什么? 本文作者:敖萌 编辑:温晓桦 2017-10-11 20:31 导语:谈到区块链,必然离不开“智能合约”这个词。我们在本系列的第一篇文章中提到“智能相关推荐

  1. android2.2应用开发之IccCard(sim卡或USIM卡)第一篇

    如果要做android通讯录的联系人的机卡混排显示,由于手机卡类型的不同,导致手机卡存储容量以及可以存储信息不同,就要涉及到android去读Icc卡的信息. 一般的sim卡只能存储姓名跟一个电话号码 ...

  2. 以太坊区块链同步_以太坊69:如何在10分钟内建立完全同步的区块链节点

    以太坊区块链同步 by Lukas Lukac 卢卡斯·卢卡奇(Lukas Lukac) Ethereu M 69:如何在10分钟内建立完全同步的区块链节点 (Ethereum 69: how to ...

  3. IPFS + 区块链 系列】 入门篇 - IPFS + Ethereum (上篇)-js-ipfs-api

    目录 1. 内容简介 2. IPFS-HTTP效果图 3. 实现步骤 3.1 安装create-react-app 3.2 React项目创建 3.3 运行React项目 3.4 浏览项目 3.5 安 ...

  4. ipfs搭建mysql_【IPFS + 区块链 系列】 入门篇 - IPFS环境配置

    孔壹学院:国内区块链职业教育引领品牌. 作者:黎跃春,孔壹学院创始人,区块链.高可用架构师 微信:liyc1215 区块链博客:http://liyuechun.org 目录 1. IPFS简介 IP ...

  5. 【IPFS + 区块链 系列】 入门篇 - IPFS环境配置

    目录 1. IPFS简介 2. IPFS本地环境安装 2.1 下载ipfs压缩包 2.2 安装 3. 项目配置 3.1 创建ipfs节点 3.2 修改节点默认存储空间 3.3 查看节点id 3.4 启 ...

  6. 在CSDN开博第一篇,以及之前在百度空间的一些文章

    2008年4月研一在读的时候,在百度空间开了一个技术类博客,写了七八十篇文章,主要记录了自己自学以及在企业实习时候的一些经验总结.但从2010年开始,由于各种原因,就很少再写博客了.而且发现百度空间越 ...

  7. ad中使用智能粘贴_AD10 复制问题(复制方法和智能粘贴 拼版)

    ad10PCB复制不成功url 频繁的遇到过在PCB界面复制不成功的状况,今天终于搞明白了是什么缘由形成的spa 当咱们选中元件的时候,鼠标箭头就会有一个十字架的形状,这时候直接按下CTRL+C而后再 ...

  8. 装在笔记本里的私有云环境:网络存储篇(中)

    本篇是系列中的第四篇内容,我们继续聊聊如何把一个简化过的私有云环境部署在笔记本里,以满足低成本.低功耗.低延时的实验环境. 在前三篇文章中,我们聊过了基础虚拟化相关的前置准备.以及为了避免在搭建过程中 ...

  9. 智能组件和木偶组件_一周前五篇文章:Linux,木偶和巨魔

    智能组件和木偶组件 每周,我都会统计数字并听取嗡嗡声,以在Opensource.com上为您带来上周最好的开源新闻和故事. 一周前五篇文章 #5. 为有4个友好木偶的孩子提供开源教育 我采访了Hell ...

最新文章

  1. 使用mvc框架搭建跟人站点
  2. 【迁移学习(Transfer L)全面指南】基于迁移学习完成图像分类任务(Pytorch)
  3. 关于mysql服务器3306端口不能远程连接的解决
  4. stm8s编译器查看代码量大小的软件
  5. INV标准报表+INVARAAS.rdf -- ABC分配报表
  6. leetcode 976. 三角形的最大周长
  7. Bernoulli-Gaussian分布
  8. 华三服务器管理口地址_各种服务器、存储默认管理IP地址以及用户名密码
  9. 【产品】保险业务收付管理系统概要
  10. vue 怎么修改 confirm 的文字样式和颜色
  11. java流程图都有哪些,盘点国内都有哪些免费好用的流程图设计工具
  12. PAT(乙级)2022年夏季考试
  13. RTL88X2BU网卡驱动失效,重新安装
  14. 如何让自己像打王者荣耀一样发了疯、拼了命的学习?
  15. MATLAB实现智能计算方法实验:实验一 模糊聚类分析
  16. 计算机编制程序优化系统,优化计算机系统
  17. Linux下为知笔记和蚂蚁笔记测评,推荐蚂蚁笔记!(非广告)
  18. 报错解决:vuex安装报错
  19. fckeditor编辑器漏洞
  20. 十一届中国大学生计算机设计大赛,我校在2018年(第十一届)中国大学生计算机设计大赛中再获佳绩...

热门文章

  1. C++中函数调用操作符的重载
  2. java 与jni转码_Android第十五课 Jni自带的iconv库不支持GBK转码
  3. java清空redis缓存数据库_java相关:Spring Cache手动清理Redis缓存
  4. java删除目录以及目录下文件,java删除文件、删除目录及目录下的文件
  5. python3是unicode还是utf-8_ASCII、Unicode、UTF-8以及Python3编码问题
  6. web浏览器录音:web audio api
  7. 概率统计笔记:高斯威沙特分布
  8. 产品经验谈:阿里B2B电商-新零售产地供应链的思考与实践
  9. python双引号报错_Python中select语句中的双引号”“怎么处理
  10. 机器学习第9天:K-邻近算法模型(KNN)