Bitcoin86.com

以太坊现漏洞,受影响的智能合约将无法撤回或更改


 
软件出现漏洞是很正常的事情,但如果发生在以太坊身上,却是一件极其危险的事情。
 
以太坊编程语言Solidity于本周被曝发现漏洞,并造成某种特定的智能合约受到影响,而且,因为以太坊的运行机制(以太坊承诺各个应用将准确按照编程来执行),大多数受影响的合约将无法被撤回或更改。
 
简而言之,去中心化智能合约(不能被一个所有者控制的合约)的所有者对于这种漏洞也束手无策。
 
该漏洞报告发布后两天,开发者便推出了Solidity修复版0.4.4.。但是因为该漏洞影响了一些地址以及这些合约中的数据类型,因此它们无法进行升级。
 
好在令人欣慰的是,这一漏洞可能不会影响到很多智能合约。
 
Solidity语言创造者Christian Reitwiessner表示,他已经通过一个通用的区块浏览器对每一个列在etherscan上的程序进行了“半自动”分析,发现在12,000 个合约当中,只有4个是可用的。
 
Reitwiessner表示,这些合约当中都没有以太币,因此它们可能是用于测试。但值得注意的是,并不是所有的合约都会显示在区块链浏览器Etherscan上。(当前以太坊共有20多万个合约,现在很难说剩下的合约资金是否安全的)。
 
总而言之,相比于The DAO事件中智能合约出现的失误来说,当前的漏洞不算是大问题。然而,它也在加密货币圈内引起了大量的讨论,大家纷纷讨论,考虑到并非所有智能合约都拥有一个集中的所有者来将其全部升级以防止出现错误,那么出现其他重大漏洞时,将会发生什么呢?
 
一位社交媒体观察家认为,这一漏洞可能是智能合约潜在漏洞问题的冰山一角。
 
其中一个解决该问题的激进想法,是让以太坊合约在近期内进行升级,好让合约所有者解除或更改这一灾祸的代码。但唯一的顾虑是,这样做可能意味着剥夺了以太坊(或者其他去中心化平台)独一无二的特性。
 
新加坡国立大学(National University of Singapore)的博士Loi Luu说,以太坊用户最好能够学会如何以去中心化的方式安全地部署智能合约。
 
Luu表示:“我个人并不认为这是一个好主意,它基本上违背了智能合约所有的设计初衷。如果以太坊是一个测试版网络,那就让其智能合约失败吧,让人们从中汲取教训就得了。”
 
但Luu的评论表明,升级所有的合约可能并不是一个好主意,还有其他方法来预防未来可能出现的漏洞,特别是以太坊还是一个新的技术。
 
修复问题
 
使用以太坊可读性较强的高级语言编写的程序,例如 Solidity或Serpent,在被添加到区块链之前会被编译成字节代码。这里的问题主要在程序编译技术上。
 
为了解决这一问题,Reitweissner建议开发者做两件事。一、如果编译一个新合约,开发者需要使用升级到新版本的Solidity语言,以避免这个漏洞。
 
第二种来规避上述问题的方法则显得较为奇怪,因为它需要升级或重启已部署好的智能合约——这种方案在以太坊上是不太可能的。
 
Reitwiessner对该建议进行了详细阐述,并解释道有两种类型的合约:中心化控制的,以及去中心化的,后者中没有人拥有“特权”。
 
第一种类型可能提供了一些升级机制或一种从合约中移动资金的方法。
 
而第二种类型则比较棘手。另一方面,由于不可靠的以太坊智能合约一旦展开,就无法被撤除或更改,如果开发者从一开始没有使用中心化的智能合约,那么他们能够做的事情其实是很有限的。
 
然而,Reitwiessner表示,开发者们可通过采用一些手段,来防范类似问题(如Solidity)的发生。
 
他讲到:“对于这类合约,我的建议是,要么缩短它们的运行时间,以减少潜在影响的发生,要么正当地分析合约的字节码。我们目前正在开发工具以帮助他们。”
 
升级的合约
 
但是还有其他方法来应该上述问题。
 
以太坊基金会信息技术顾问Hudson Jameson描述了一种升级去中心化智能合约的方法,他认为必须要添加一种升级动态代码的方式。
 
他讲到:“我们开发者的总体想法是,在早期阶段最重要的是在自己的代码中加入自动防故障装置,以安全撤除或者升级价值不菲的合约。”
 
Jameson也描述了一些有潜力的智能合约“自动防故障装置”,即使所有者已经在以太坊中部署了自己的合约,也可使用该装置来升级其合约,或者在有可疑事物出现时,智能合约可自动检测出。
 
他表示,它们不一定必须是中心化的,或者受某个所有人控制。比如,你的智能合约可以设置一个每次撤回资金的上限。
 
他讲到:“如果有攻击者试图盗取合约资金或者资产,就会自动触发一个去中心化的反应,把它们锁住,并通知其他使用合约的人,这样大家就可以及时撤出自己的资金。”
 
前路漫漫
 
由于,以太坊原链(ETC)上的智能合约与ETH链采用的是同一套规则,其同样也受到了这一漏洞的影响。
 
但据其主要组织者Arvicco表示,开发者们正在探索开发一种新的编程语言,可以规避出现更多漏洞。
 
他讲到:“其中一个可能的方法就是把智能合约语言开发从程序上的对象转移到功能范式上。”
 
无论这个可能的修复方法是什么,这些讨论暗示了,以太坊开发者们不应该期待自己的智能合约一点危险都没有,这对于那些已经在网络中部署代码的人来说可能十分明显。
 
尤其对于Solidity语言而言,如果出现另一个无法阻挡的漏洞,可能在今后会影响到其他智能合约。
 
Reitwiessner指出,在编译器上出现错误总是可能发生的,而Solidity或Serpent (以太坊其他的智能合约语言)还可能存在其他未被发现的漏洞。
 
然而,他指出,在两年多的发展史中,这是智能合约语言中发现的首个严重漏洞。
 
作者:Alyssa Hertig
 
编译:Mandy

转自:http://www.gongxiangcj.com/show-22-2451-1.html

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。