本周以太坊的编程语言 Solidity 被揭露存在漏洞,在这之后的一段时间里,引发了加密货币领域的广泛关注。接下来让我们详细地了解一下此次事件的具体状况。
漏洞初现
本周,以太坊的 Solidity 语言被察觉存在漏洞,此漏洞已对特定智能合约造成影响。许多这类受影响的合约难以进行拆除或者更改,这给合约的所有者带来了极大的困扰,就如同房子出现了问题却无法进行修理一般。这种情况让大家对智能合约的安全性产生了担忧,因为众多项目是依靠这些合约来进行运行的。
紧急修复
漏洞报告发布才过两天,开发者就快速推出了 0.4.4 修复版的 Solidity 编程语言。这种速度值得夸赞,就好像消防员能快速抵达火灾现场并展开行动一样。但是,因为这个漏洞对一些地址以及合约中的数据类型产生了影响,使得合约拥有者无法顺利地进行升级,这也就意味着之前所做的努力在一定程度上可能都白费了。
影响范围
好消息是这次漏洞或许不会影响到很多智能合约。Solidity 语言的创造者 Christian Reitwiessner 对列在 etherscan 上的程序进行了“半自动”的分析,在 12000 个合约里只有 4 个是可用的。而且这 4 个合约当中并没有以太币,推测它们可能是用于测试的目的。与 The DAO 项目的漏洞相比,这次只能算是一个小的缺陷了。
解决方案探索
面对这个问题,一种想法是让以太坊合约近期进行升级,以便合约拥有者能够停用或更改有问题的合约。然而,正如 Luu 所说,让所有合约升级对于新兴技术以太坊或许并非是个好主意,因为新技术可能存在各种兼容方面的风险。另外还有一种方法,即需要升级或重启已部署的合约,不过估计没人愿意在以太坊项目上采用这种方案。
另类建议
Reitwiessner 提出了一个独特的建议,他把合约分成了中心化控制和去中心化这两种类型。中心化控制的合约便于管理,一旦出现问题能够快速进行处理;而去中心化的合约,不存在任何人拥有“特权”的情况,这样能保障公平性。不过,因为不可靠的合约在部署之后就很难拆除或者更改,如果开发者一开始没有采用中心化合约,那么之后能做的事情就非常有限了。
防范之道
开发者能够运用一些办法来防范类似的问题出现。Reitwiessner提出建议,能够使合约的运行时间变短,如此一来就能减少潜在的影响;同时也可以对合约的字节码进行恰当的分析。而依据主要组织者 Arvicco所说,开发者正在对开发新的编程语言进行探索,以避免出现更多的漏洞。因为如果 Solidity 再次出现无法阻挡的漏洞,将会对其他的智能合约产生影响。
大家认为开发新的编程语言是否能够有效地避免以太坊智能合约的漏洞问题?倘若觉得这篇文章具有价值,欢迎进行点赞以及分享!