您正在使用IE低版浏览器,为了您的雷峰网账号安全和更好的产品体验,强烈建议使用更快更安全的浏览器
此为临时链接,仅用于文章预览,将在时失效
金融科技 正文
发私信给温晓桦
发送

0

“我不小心删掉了(你们的3亿美元)”

本文作者: 温晓桦 2017-11-09 10:24
导语:更深层的问题是为什么以太坊的智能合约总是错误百出?

雷锋网AI金融评论按:智能合约代码失误造成以太坊上价值3亿美元的代币“消失”,这究竟是怎么回事?本文从技术角度进行了解析。文章作者为CyberMiles首席科学家Michael Yuan博士。雷锋网获得作者授权发布。

Github 用户 devops199 今天在 Twitter 上说:“I accidentally killed it”。等大家反应过来,他的“小事故”已经“删除”了以太坊上价值3亿美元的代币,平均每个词造成 7500 万美元的损失。 

“我不小心删掉了(你们的3亿美元)”

光是 Polkadot 一个项目的一个账号就有近 9000 万美元消失。堪称是今天最贵的一句话!

“我不小心删掉了(你们的3亿美元)”

事后有人问 devops199,为什么捅这么大一个篓子?他却无辜地说“我是新手,正在学习。”的确,他是新手,只是在试验刚学的智能合约语言。

“我不小心删掉了(你们的3亿美元)”

这个新手捅的大篓子告诉我们:价值300亿美元的以太坊智能合约开发如同儿戏,非常不专业。

那么,这背后的技术失误,究竟是怎么回事?

为什么钱可以“消失”?

我们都知道,数字货币可以高度匿名。可是匿名是双刃剑。钱上没写你的名字,钱掉了你也证明不了是你的。

在数字货币世界中,一个“钱包”一般指一对密䄴。公䄴是钱包的“帐号”,可以随便宣传,别人可以往里面打钱。比如下面是我的一个以太坊钱包公䄴,欢迎大家随时打钱进来!

0xD69b30FAdf81882253329Ab0149131c67602eEd1

可是,要想从帐号中拿钱出来,你必须得有帐号的私钥。那么问题来了:

如果我忘记了帐号私钥怎么办?

回答是:

那么再也没人能够动那个钱包中的钱,那些钱从世界上“消失”了。

中本聪曾经说过“消失的比特币让所有其他人的比特币更值钱一点(因为供给少了)。把你丢失的比特币当作对社区的捐赠吧!”。

Lost coins only make everyone else's coins worth slightly more.  Think of it as a donation to everyone. — Satoshi Nakamoto

多重签名的智能合约

这个帐户密钥对个人来说挺实用。可是对于公司来说有点难用。首先密钥切忌乱传,只能一个人知道。但是一个人掌握全公司数千万美元的帐户是一件很危险的事(且不说贪污挪用,就想想个人或者家人被绑架的风险)。

所以有聪明人利用以太坊的“智能合约”机制开发了一个智能合约可以支持多重签名的帐号。这个帐户没有自己的秘钥。从帐户中提钱需要智能合约同时验证几个人的秘钥。真是一个聪明的解决方法!

显然,很多融资项目都需要这样的智能合约。所以其开发者 Parity 把它放在以太坊公链上,作为一个“库函数”让大家自由调用。所以,很多 ICO 融资项目,包括 parity 自己的几个大项目,用的智能合约帐户都是通过调用这个库实现的。

两个小错误

可是,我们回忆一下,这个智能合约一开始并不是库函数。只是后来出于方便,追求效率,要“弯道超车”,被大家当成库函数用了。

作为一个独立的智能合约,它有两个特性是万万不该在“库函数”中出现的:

  • 它可以有一个“拥有者”,而且设置“拥有者”的操作函数没有任何保护。

  •  “拥有者”可以删除这个智能合约。

我们现在知道 devops199 歪打误撞地把自己设成了这个“库函数”的拥有者,然后删除了这个库函数。造成的结果是,所有依赖这个库函数的智能合约都无法工作了,这些智能合约对应的帐号也都锁死了,其中的钱没有人能动了。

未来的希望

可是,系统不都是人设计的吗?为什么不能进去人为改一下软件,把删除的智能合约恢复一下?

区块链的重要特点是“去中心化”与“不可逆”。如果人可以改,又没有权威中心,那是听谁的,怎么改呢?而且你凭什么说这是个程序的“错误”?也许别人程序就是这么设计的,你理解不了其中的深意而己?

智能合约的一个重要特点是“代码既是法律”。现实生活中,律师经常钻法律的漏洞。在区块链世界,程序员钻代码的漏洞,不也是合理的吗?区块链世界有自己的规则与逻辑。

不过,对于在这个事件中“消失”了3亿美元的项目而言,希望还是有的。在以太坊开发的计划图上,有一个已经搁置了一年多,优先级不高的小项目:回收被智能合约冻住的资金(见EIP156)。

当然这个“回收”具体怎么做没人知道,似乎在今天之前也没人仔细想过。要有优秀程序员能解决这个问题,相信1000万美元的奖金不是梦。只是千万不要又引入一个更坏的 bug。

我们学到了什么?

这一次出问题的 Parity 是以太坊生态中最有能力的软件开发公司之一。它不但开发了不少以太坊核心软件,而且做了不少银行的应用。不过,犯这种低级错误真是堪忧。

这个出问题的软件是几百人用来管理资金的开源软件。Linus Torvalds 说过:在很多眼球的观注下,所有的软件错误都很肤浅。这里显然没有发生。

不过更深层的问题是为什么以太坊的智能合约总是错误百出?以太坊的图灵完备虚拟机听上去很好,可是很难编程。有经验的程序员都知道,用汇编语言是写不出安全的现代程序的。安全的软件一定是基于现代的编程语言与框架产生的。而以太坊在系统设计上的“不专业”已经是不争的事实。

所以,区块链要有真正企业级的应用,我们必须在“改进智能合约”这个方向上创新。比如在区块链上引入经过多年实战检验的企业级软件框架。我个人认为,这是区块链发展的主要方向之一。

封面图片来自Sohu

=================

CyberMiles(简称CM)是美国知名电商平台5miles旗下5xlab实验室近期正式推出的智能商业合约区块链。据介绍,与一般区块链企业不同,CM不但可以直接承载应用,开发社区也可根据CM进行构造全新的区块链来建立自己的公开或者私有区块链。

据称,目前CM建立了12个大类、371个小类别的商业合约定制模版,以完善对多种商业场景的支持,支持快速创建智能合约建立商业的智能合约市场。

相关文章:

5miles:这家电商公司,想做推动区块链技术落地的标杆

雷峰网特约稿件,未经授权禁止转载。详情见转载须知

分享:
相关文章
最新文章
请填写申请人资料
姓名
电话
邮箱
微信号
作品链接
个人简介
为了您的账户安全,请验证邮箱
您的邮箱还未验证,完成可获20积分哟!
请验证您的邮箱
立即验证
完善账号信息
您的账号已经绑定,现在您可以设置密码以方便用邮箱登录
立即设置 以后再说