治愈以太坊Solodity顽疾的正确姿势
目前,以太坊网络上有1,700多个去中心化的应用程序(DApps),这一数字预计在未来几年还会继续增加。所有的DApp都依靠智能合约来完成一系列重要任务,但很明显的是,错误、bug甚至灾难性差错经常出现在智能合约里。到目前为止,黑客在智能合约中“窃取”的金额已经超过了10亿美元。
为了编写智能合约,程序员必须学习一种新的编程语言“Solidity”。虽然智能合约会使以太坊上复杂的商业逻辑运营变得简单,但是用Solidity编写智能合约时犯下简单的错误就能导致非常严重的后果,包括安全漏洞以及非常高的交易成本。
智能合约代码很差的案例中,最出名的是去中心化的Decentralized Autonomous Organization(DAO)。最近,在Parity的智能合约中也发现了一个bug,该bug导致了50万个ETH的损失,价值超过了1.69亿美元。
Solidity是替罪羊吗?
随着智能合约问题变得越来越普遍,以太坊的Solidity备受关注。不幸的是,许多依靠智能合约的新项目,都缺乏能对智能合约进行适当优化和审核的程序员。
例如,就性能而言,执行复杂的智能合约时,手续费可能是天文数字。手续费是以太坊上用于运行交易的单位,手续费的多少取决于智能合约的复杂性和执行合约时网络的拥堵程度。通过收取高昂的gas费,以太坊可以自动地惩罚缓慢又复杂的合约。但是在许多情况下,应用场景本身就很复杂,高额的手续费阻碍了智能合约在现实社会中的应用。
例如,使用以太坊智能合约来验证单个比特币交易的header(即scrypt操作)将消耗3.7亿个以太坊gas。这意味着当你把以太坊gas价格设定为3 Gwei时,将花费超过10亿Gwei,也就是1个ETH。这么简单的跨链交易验证就要500美元, 难以置信!
在用Solidity编写的智能合约中,安全性,特别是整数溢出,也是一个严重的问题。黑客们非常勤奋的挖掘智能合约中的漏洞,从而“盗取”大量的加密货币。多个ERC20 代币合约容易受到攻击,导致了高等级的安全警报,。
许多黑客攻击的发生,只是因为程序员在Solidity编写代码时犯了错误。例如,Beauty Chain(BEC)是一个在中国颇有知名度的项目,于2018年2月23日在OKEX上开始交易。它在交易的第一天就狂涨4000%。在巅峰时,它有约700亿美元的市值,但在4月22日,其交易价值突然下降至零,价格也逐渐下降至约20亿美元。随后,OKEX暂停了BEC的交易。
此事件的发生是因为,在BEC的ERC20 智能合约中存在错误。在BEC的案例中,开发人员在合约中添加了一个名为“batchTransfer”的方法,可以让token能一次性转移给多方(即批量)。
然而,开发人员在下面这行代码中犯了一个致命性错误:
uint256 amount = uint256(cnt) * _value.
什么是正确的姿势?
Solidity的解决方案
为了解决用Solidity语言编写的智能合约所面临的现实问题,看看最近新出的一个高级语言Lity吧, 在CyberMiles区块链、DApp和其他定制区块链上,Lity可用于开发智能合约。特别值得一提的是,Lity旨在解决Solidity面临的性能和安全问题。
Lity由动态可扩展语言,编译器和虚拟机runtime组成,是从Solidity语言的进化而来。这意味着,不用更改任何代码,所有用Solidity编写的程序即可在CyberMiles 虚拟机(CVM)上运行。
使用Lity语言的另一个好处是,Lity比Solidity 更灵活,功能更强大,并且更安全。例如,Lity支持OTA添加新的语言功能。
至于性能方面,Lity的插件可适用于特定的计算任务并且可以进行高度优化。libENI函数由 CyberMiles虚拟机调用,在区块链节点作为原生代码执行。
例如,以太坊上的公钥和私钥算法非常慢并且过于昂贵。许多真正的应用如数据市场,在以太坊上基本不可能实现。然而,通过LibENI,这些运算仅需几毫秒(快了一万倍)就可以执行完毕,并且手续费也很低,只需几美分,而用Solidity执行跨链交易就需要500美元的手续费, 。
Lity 的改进对跨区块链资产交换以及将链下数据纳入区块链交易具有重要意义。
最后,Lity编译器可以检查ERC 20和ERC 721合约中代码的合规性和已知错误,并且可以在ERC 20合约中为ERC 223标准提供支持,以防止token被意外转到不接受转账的合约地址。
而在虚拟机层面,Lity会自动防止整数溢出等常见问题和将合约所有者设置为无的问题。
智能合约的未来
不幸的是,如今Solidity已经成为智能合约错误的罪魁祸首了。为了保证智能合约的未来,大家在开发像Lity一样的新编程语言。
毫无疑问,以太坊基金会也在积极寻找创新的方式。其中最主要的是“Casper”和原生合约的实施,经过一定的过渡期,最终以太坊将转为PoS共识机制。这一转变是解决源于PoW机制相关的各种问题的关键。就这部分而言,CyberMiles基金会宣称他们已经找到了解决方案:正如litylang.org 所述,有效的DPoS机制及其虚拟机CVM。
比赛已经开始了。
这样的修改会使以太坊的核心技术发生转变,其执行可能会对以太坊, 特别是他的核心组成部分——智能合约,产生重大影响。