智能合约智能么?
链客,专为开发者而生,有问必答!
此文章来自区块链技术社区,未经允许拒绝转载。
近几年,随着区块链、加密货币概念的发展,智能合约也开始被广泛的接受,然而就像最初的人工智能被过度神化一样,智能合约也被人类寄予厚望。在Jimmy Song的这篇文章中,将智能合约与事实结合讨论了其在现实场景中的局限性,证明了智能合约其实并没有想象中的那么智能。
一份合约通常可以把合作双方或多方与未来的某件事物联系起来,比如买卖房产、汽车保险等。而智能合约与普通合约的不同之处在于,智能合约当中所有的执行条件都由计算机代码来评估并完成。
在现实生活中,当我们的合约出现问题时,我们只能依赖诸如律师和法院这样可信的第三方来主持公道;而在智能合约中,根本不存在信不信任第三方的问题 ,因为计算机代码就能够即时客观的帮我们执行合约的所有条款,它相当于一个优秀的法官。
这样听起来“智能合约”似乎很高大上,它应该像人工智能那样“聪明”。但事实却并非如此。
一份合格的智能合约,应该包括一切可能发生的情况。因为智能合约的核心要义就是“即使在最阴暗的环境中,也要做出最公正的裁决”。然而从目前的情况来看,我们所接触到的智能合约都是遵循程序员设定的一系列规则来达到目的的。它完全不考虑规则以外的因素。这也就意味着,在规则之外没有任何让你犹豫不决和法外留情的余地。
这种情况就引出了我们接下来要讲的问题。
1.智能合约真的很难保证安全性
这一点从以太坊的身上就能够看出来。
由于以太坊本身是一个智能合约平台,因此很多人认为只有以太坊才能够实现智能合约。但这其实是认知上的一个误区,从1995年在比特币被发明之前,智能合约的概念就已经存在了;到了2009年比特币开发了一种相当广泛的智能合约语言“脚本(Script)”。
而以太坊与比特币之间的区别在于,以太坊是图灵完备的,通过该平台可以实现种类更多、条款更复杂的合约,当然这样做的代价是,复杂的合约内容使其变得更加难以分析。通常情况下,复杂度与发生漏洞的机率是成正比的;复杂度越高,发生漏洞的机率就越大。
而要在图灵完备的情况下执行这样一份合约也是非常棘手的,因为如果这时你想要证明你的合约是安全的,就相当于要证明计算机程序中没有BUG一样。但这个世界上就根本不存在没有BUG的计算机程序啊!
一个普通人至少需要多年的学习,通过层层考试并不断地实践才能成为一个合格的法官,但是现在写智能合约的门槛相当低,很多程序员都是新手,他们其实并不知道如何来保证这些合约的安全性。
就像去年11月初,Github上的新手devops199误删除了一个智能合约的库函数就导致了大概三亿美元的以太坊被锁死,至今尚未解冻。
以太坊处理此类问题的方式是将其代码安全性的责任负担在程序员的身上,由他们来解决代码可能出现的安全性问题,而以上devops199的例子就证明,并非所有的程序员都能够担此重任。
除此之外,以太坊提出的理念是“代码即法律”,以太坊合约就是最终的权威,没有人可以否决这个合同。但是当年的The Dao事件使以太坊回滚了交易记录,代码本身的漏洞招致了黑客的攻击,其实这种行为与一个脑筋活泛的注册会计师找出税收法的漏洞以帮助其客户省钱没什么不同。是代码本身的漏洞打了“代码即法律”的脸。
这件事导致了以太坊的分裂,同时也使不少开发人员开始建议避免图灵完备以保证智能合约的安全。当前最受欢迎的两个以太坊智能合约标准是ERC20和ERC721,这两种类型的合约都是不支持图灵完备的。
而与以太坊不同,比特币一开始便选择通过放弃图灵完备来解决问题,以降低智能合约的复杂度来提高合约的可查性,从而提高合约的安全性。因为在非图灵完备的情况,程序所能够引发的状态是可以通过枚举的方式来列出来的,这样更方便检验。
2.智能合约真的没有去信任
即使没有图灵完备,智能合约听起来也还不错,毕竟不需要法院、律师这样的中介,在不需要信任第三方的情况下就能自动执行,效率势必会比普通合约高得多。
但是这里还有两个问题:
去信任是智能合约的核心特征。但即使智能合约本身是去信任的,合约的执行依然需要依赖第三方;
在去中心化的环境里,要想智能合约真的起到作用,虚拟世界和现实世界之间必须要有一个强关联关系才可以;
以买房为例:如果房子相当于以太坊区块链世界中的ETH代币,那么在虚拟世界里A将房子的所有权转让到B的名下,就可以换取一定数量的ETH,而此时在现实世界中,B也要相信这些ETH实际上就相当于房子的所有权。因此他们还是需要一个权威第三方来证明当B交出ETH之后他就能够在法律上获得这套房子的归属权。
这里就涉及到了“预言机”的问题,预言机是智能合约与外部环境进行数据交互的唯一途径,外部数据作为智能合约的输入参数经过预言机流入智能合约程序。只有通过预言机才能够确定,在虚拟世界和现实世界中你的状态,以及履行合约的情况是否一致。本质上来说,你还是需要信任流入预言机的数据是客观准确的,这与智能合约去信任的思想严重相悖。
如果想的再长远一些,即使当权威机构说这个代币实际上代表房产,但如果这些代币被盗了呢?被盗之后房子属于小偷吗?如果代币丢失了怎么办?这座房子就不能再卖了吗?可以重新换取新的代币来代表这套房子的所有权吗?如果是这样,谁来做这些事情?
而在没有预言机的情况下,唯一能够发挥作用的就是数字不记名工具。从本质上来讲,“数字不记名工具”意味着代币的所有权不能在智能合约所属平台之外再具备任何有依赖性的关系。因此,智能合约大部分时候,只有在像比特币这种内生型代币(不需要外部数据的输入)上才有可能做到真正的去信任。
我们当然希望智能合约能够比普通合约更有效,但不幸的是,现实生活中的很多合约,都包含一系列的假设和既定的法律体系;而且事实也证明,图灵完备的智能合约很容易带来意想不到的结果。
所以我们给智能合约的标签应该是“图灵易受攻击”,而不是“图灵完备”。
(本文编译自比特币开发者Jimmy Song的文章《The Truth about Smart Contracts》。)
作者最新文章
相关文章:

Codeforces 504 A (Round #285 div.1 A) Misha and Forest
Codeforces Round #285 (Div.1) A Misha and Forest 水题水题水…… 题意:给你一些点,给出他们连通了多少个点以及这些点的下标的异或值,让你找出一个图 题解:拓扑排序一发 代码: #include <iostream> #include <cstdio&…

hashlib模式和hmac模式
hashlib模式 什么叫hash? 一:hash是一种算法(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法),该算法接受传入的内容,经过运算得到一串hash…

asp导出word中文乱码_解决文档打开乱码问题丨小工具系列
问题:手头上有个从Workbench导出的数据表文档打开发现里面的中文是乱码!如图所示:解决方法利用记事本(notepad)将该文档的格式修改为UTF-8,步骤如下点击电脑的开始菜单,点击"所有程序"࿰…

一篇文章让你了解智能合约以及和区块链的关系
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 智能合约是区块链最重要的特性,也是区块链能够被称为颠覆性技术的主要原因,更是各国央行考虑使用区块链技术来发行数字货币的…

我的常用npm命令
npm link gulp node-sass gulp-sass gulp-autoprefixer gulp-sourcemaps gulp-font-spider gulp-concat gulp-uglify gulp-jshint map-stream 转载于:https://www.cnblogs.com/siluo2000/p/8779988.html

pytorch 测试每一类_DeepFM全方面解析(附pytorch源码)
写在前面最近看了DeepFM这个模型。把我学习的思路和总结放上来给大家和未来的自己做个参考和借鉴。文章主要希望能串起学习DeepFM的各个环节,梳理整个学习思路。以“我”的角度浅谈一下DeepFM基础知识看过的一些有用文献最后附上可实现的pytorch代码,用具…

超简单的网页选项卡---jQuery
<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>网页选项卡</title> <script src"jquery-1.4.2.js"></script> <script type"text/javascript"> $(funct…

一篇文章让你了解区块链技术的发展阶段
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链是由一系列技术实现的全新去中心化经济组织模式,2009年诞生于比特币系统的构建,2017年成为全球经济热点,但…

301 Remove Invalid Parentheses 删除无效的括号
删除最小数目的无效括号,使输入的字符串有效,返回所有可能的结果。注意: 输入可能包含了除 ( 和 ) 以外的元素。示例 :"()())()" -> ["()()()", "(())()"]"(a)())()" -> ["(a)()()", "(a(…

python3 列表转字节_Python 3.9!10大新特性值得关注
选自towardsdatascience作者:Farhad Malik机器之心编译编辑:陈萍近日,Python 3.9 发布,并开发了一些新特性,包括字典合并与更新、新的解析器、新的字符串函数等。Python 3.9 已于 10 月 5 日发布,新版本的特…

HDU4080 Stammering Aliens(二分 + 后缀数组)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid4080 Description Dr. Ellie Arroway has established contact with an extraterrestrial civilization. However, all efforts to decode their messages have failed so far because, as luck would have it, they ha…

共识机制:区块链技术的根基
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 Chapter-1:什么是共识机制? 技术定义是:共识机制是一个群体决策的流程,群体中的个体会执…

Web App、Hybrid App与Native App的设计差异
目前主流应用程序大体分为三类:Web App、Hybrid App、 Native App。 一、Web App、Hybrid App、Native App 纵向对比 首先,我们来看看什么是 Web App、Hybrid App、 Native App。 1. Web APP Web App 指采用Html5语言写出的App,不需要下载安装…

输入重定向,输出重定向,管道相关内容及实现方法
近期,通过实现shell了解了输入重定向,输出重定向,管道- 用自己的话总结定义: 输入重定向:把<右边的文件的内容输入到<左边的命令中。 输出重定向:把运行>左边命令得出的结果输入到>右边的文件中…

appium+python自动化测试教程_Python+Appium实现自动化测试
一、环境准备 1.脚本语言:Python3.x IDE:安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境,path添加E:\Software\Android_SDK\platform-tools 4.安装Appium for windows,官网地址 http://appium.io/点击下载按钮会到GitHub的下…

区块链热度飙升 BAT抢先布局话语权争夺战开打
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 今年以来,在互联网金融相对沉寂之后,区块链已当仁不让成为科技领域的主角。区块链作为一项突破性的新技术,如同当…

【CV知识学习】early stop、regularation、fine-tuning and some other trick to be known
深度学习有不少的trick,而且这些trick有时还挺管用的,所以,了解一些trick还是必要的。上篇说的normalization、initialization就是trick的一种,下面再总结一下自己看Deep Learning Summer School, Montreal 2016 总结的一些trick。…

etw系统provider事件较多_【Flutter 实战】文件系统目录
老孟导读:Flutter 中获取文件路径,我们都知道使用 path_provider,但对其目录对含义不是很清楚,此文介绍 Android、iOS 系统的文件目录,不同场景下建议使用的目录。 不同的平台对应的文件系统是不同的,比如文…

BZOJ4491: 我也不知道题目名字是什么
【传送门:BZOJ4491】 简要题意: 给出一个长度为n的序列,m个操作,每个操作输入x,y,求出第x个数到第y个数的最长子串,保证这个最长子串是不上升或不下降子串 题解: 线段树 因为不上升或…

区块链挖矿的钱从哪来 区块链挖矿怎么挣钱
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 进入2018年以来,区块链在资本市场的风口上依然热度不减,已成为当下最热的投资领域。而普通投资者想通过区块链投资赚钱最简单…

Linux-TCP/IP TIME_WAIT状态原理
TIME_WAIT状态原理----------------------------通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态。客户端主动关闭连接时,会发送最后一个ack后,然后会进入TIME_WAIT状态,再停留2个MSL时间(后有MSL的解释)…

python如何实现找图_利用OpenCV和Python实现查找图片差异
使用OpenCV和Python查找图片差异 flyfish 方法1 均方误差的算法(Mean Squared Error , MSE)下面的一些表达与《TensorFlow - 协方差矩阵》式子表达式一样的拟合 误差平方和( sum of squared errors) residual sum of squares (RSS…

区块链还能赚钱吗 区块链挖矿赚钱吗
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链有多火,连我母上都知道这个词,身边很多人也都向笔者咨询这个东西。 其实他们真实的想法是,想知道这东西到…

pythonfor循环遍历list_为什么for循环可以遍历list:Python中迭代器与生成器
1 引言 只要你学了Python语言,就不会不知道for循环,也肯定用for循环来遍历一个列表(list),那为什么for循环可以遍历list,而不能遍历int类型对象呢?怎么让一个自定义的对象可遍历? 这篇博客中&am…

Linux下查看和添加环境变量
转自:http://blog.sina.com.cn/s/blog_688077cf01013qrk.html $PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接。 编辑你的 PATH 声明&am…

iis7下站点日志默认位置
iis7下站点日志默认位置 原文:iis7下站点日志默认位置iis7下站点日志默认位置在iis6时,通过iis管理器的日志配置可以找到站点日志存储的位置。但是在iis7下,iis管理器下的日志配置只能找到iis日志配置的主目录,但到底在哪个子目录,…

go语言有哪些优势
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 1、学习曲线容易 Go语言语法简单,包含了类C语法。因为Go语言容易学习,所以一个普通的大学生花几个星期就能写出来可以上手的…

重定向后,如何通过浏览器返回定向之前的页面?
js实现页面跳转重定向的几种方式 第一种: 代码如下: <script language"javascript"type"text/javascript">window.location.href"http://shanghepinpai.com";</script> 第二种: 代码如下: <script languag…

金蝶中间件部署报栈溢出_京东618压测时自研中间件暴露出的问题,压测级别数十万/秒...
618大促演练进行了全链路压测,在此之前刚好我的热key探测框架也已经上线灰度一周了,小范围上线了几千台服务器,每秒大概接收几千个key探测,每天大概几亿左右,因为量很小,所以框架表现稳定。借着这次压测&am…

利用box-shadow绘图
上篇博客提到过,box-shadow属性的本质是对形状的复制,那么如果我设置一个1*1px的i标签,利用box-shadow可以叠加的特性,给每一个1*1px的阴影赋上颜色,那么最后不就是一幅图片了么。 html代码很简单: <!do…