正文
雷锋网AI金融评论按:智能合约代码失误造成以太坊上价值3亿美元的代币“消失”,这究竟是怎么回事?本文从技术角度进行了解析。文章作者为CyberMiles首席科学家Michael Yuan博士。雷锋网获得作者授权发布。
Github 用户 devops199 今天在 Twitter 上说:“I accidentally killed it”。等大家反应过来,他的“小事故”已经“删除”了以太坊上价值3亿美元的代币,平均每个词造成 7500 万美元的损失。
光是 Polkadot 一个项目的一个账号就有近 9000 万美元消失。堪称是今天最贵的一句话!
事后有人问 devops199,为什么捅这么大一个篓子?他却无辜地说“我是新手,正在学习。”的确,他是新手,只是在试验刚学的智能合约语言。
这个新手捅的大篓子告诉我们:价值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个小类别的商业合约定制模版,以完善对多种商业场景的支持,支持快速创建智能合约建立商业的智能合约市场。
金融科技团队招募全新启动!
金融科技栏目·采编:金融业对人工智能的关注超乎想象,当几乎所有最权威最老牌的金融媒体都在头版头条讨论人工智能时,需要另一个角度的声音来阐述fintech的技术、行业动态以及对金融业务的影响。金融媒体已经纷纷建立了面向科技业界读者的栏目,但科技媒体面向金融读者还是一片荒芜——于是雷锋网先行。
我们需要有金融及经济学知识体系,对证券、银行等资本市场熟悉,对大数据、人工智能等计算机技术有浓厚兴趣的观察者、写作者,加入雷锋网fintech报道团队!专业不限,工作地点深圳、北京可选,简历投递至 [email protected]。
我们可以提供: