值得关注的其他问题
尽管有一个安全问题排名很不错,但它往往一些有趣的细节,因为某些细节与排名列表并不完全一致。在深入挖掘10大问题之前,必要阐述一下原始研究中一些值得关注的亮点问题:
在2018年,最主要的两个问题是外部合约拒绝服务和重入。但是现在这些问题有所缓解。可以从我们的研究博客中了解更多有关Reentrancy的信息:从安全角度出发审视智能合约。
译者注:实际上由于DeFi应用之间的组合应用,又导致了多起严重的重入攻击事件。
现在Solidityv0.6.x发布了,它带来了许多重大变化,然而扫描的智能合约中有50%甚至还没有准备好使用Solidityv0.5.0编译器。另外30%智能合约使用了过时的语法,并且83%的合约在指定编译器版本存在规范问题。
ApeCoin发布官方智能合约地址并提醒欺诈:3月17日消息,ApeCoin 社交媒体上发布了官方智能合约地址:0x4d224452801ACEd8B2F0aebE155379bb5D594381,并提醒空投活动在美国东部时间3月17日(即北京时间今日 20:30)之前不会启动,目前已经有欺诈者出现,Apecoin.com 是唯一的官方网站,用户将钱包连接到网站时,请始终保持高度怀疑,并且永远不要输入任何钱包助记词。[2022/3/17 14:02:17]
译者注:Solidity0.6在语义上更明确了,有助于编译器及时发现问题,让代码更安全,
尽管可见性问题没有出现在2018年的前10位,也没有出现今年的前10,但可见性问题增加了48%,值得关注。
下表比较了2018年和2020年十大常见问题列表之间的变化。这些问题按严重程度和流行程度排序:
Algorand发布最新的协议升级,改进智能合约开发:据官方公告,Algorand发布最新的协议升级,改进智能合约开发。最新的协议更新使开发人员能够通过Algorand虚拟机 (AVM) 构建快速、强大且具有成本效益的去中心化应用程序 (Dapps),它的用例包括Web 3.0、DeFi和NFT。
AVM促进了可访问语言的智能合约开发,如Python和Reach,该项目还致力于开放使用Clarity、C、c++、Go、Rust、Haskell、JavaScript等语言编写代码。和图灵完备语言一样,AVM支持新的操作码、更大的程序规模,并允许开发人员使用循环、函数和递归。
Algorand的首席产品官Paul Riegle解释说:“已经在Algorand上编写和部署智能合约的开发人员通过使用Teal与AVM的早期版本进行交互,并给我们反馈,这使我们能够快速迭代和改进AVM。我们很高兴这个版本对开发者社区开放,并期待在未来的几个月里有更多的改进。”
以太坊合约可以在升级后更容易地移植到Algorand,从而实现更精确的应用。AVM还提供了一些新功能,比如允许交易费用共享的原子转账,以多种方式最大化区块链存储,以及创建自动做市商(AMM)。[2021/7/5 0:28:42]
1.未检查的外部调用
仙人掌CTS智能合约已通过Beosin(成都链安)安全审计:据官方消息,Beosin(成都链安)近日已完成仙人掌CTS智能合约项目的安全审计服务。
?仙人掌CTS是基于波场底层打造的一个去中心化开放金融底层基础设施。结合跨链,同时包含去中心化稳定数字货币,去中心化预言机,去中心化保险,流动性挖矿,智能挖矿等等功能的创新和聚合,进而打造全面的去中心化金融平台。仙人掌CTS代币无ICO、零预挖且零私募,社区高度自治。仙人掌CTS将会在9月28日晚20点上线Justswap,并开启流动性挖矿。
合约地址:TST5pvck2DSYXJk3hkuGH3t1AisCAT4t1s
审计报告编号:202009262149[2020/9/28]
在2018年Solidity十大安全问题榜单上未检查的外部调用是第三个常见问题。由于现在前两个解决了,因此未检查的外部调用成为了2020年更新列表中最常见的问题。
Solidity底层调用方法,(例如
诺贝尔奖获得者:智能合约在长期关系中应用有限:金色财经报道,诺贝尔经济学奖得主奥利弗·哈特(Oliver Hart)在接受采访时认为,智能合约在人以及经济的长期关系中应用有限。他表示,智能合约不适用于“长期”合约,也无法预测经济和社会关系。哈特解释道,长期的关系需要多方的推理和协议,而不是依赖于刻板的既定合约。他说,他最终希望技术能够解决合约不完整的问题,但预计“我们还有一段路要走”。[2020/9/28]
address.call()
)不会抛出异常。而是在遇到错误,返回
false
。
而如果使用合约调用
ExternalContract.doSomething()
时,如果
doSomething()
抛出异常,则异常会继续「冒泡」传播。
应该通过检查返回值来显式处理不成功的情况,以下使用
动态 | 澳本聪已获得UTXO区块链智能合约相关专利:金色财经报道,微博网友发布消息称,澳本聪(CSW)已经拿到基于UTXO区块链智能合约的专利,将覆盖所有UTXO的区块链项目。据金色财经记者查询,该专利题为“区块链执行的智能合约的注册和自动管理方法”。11月12日,欧洲专利局已将该专利申请状态标为“有效”,且该专利的预计到期日期为2037年2月16日。据悉,UTXO指未消费的交易输出,即常说的比特币找零机制。[2019/11/13]
addr.send()
进行以太币转账是一个很好的例子,这对于其他外部调用也有效。
if(!addr.send(1)){revert(。
2.高成本循环
高成本循环从Solidity安全榜单的第四名上升至第二名。受该问题影响的智能合约数量增长了近30%。
大家都知道,以太坊上的运算是需要付费的。因此,减少完成操作所需的计算,不仅仅是优化问题,还涉及到成本费用。
循环是一个昂贵的操作,这里有一个很好的例子:数组中包含的元素越多,就需要更多迭代才能完成循环。最终,无限循环会耗尽所有可用GAS。
for(uint256i=0;i<elements.length;i++){//dosomething}
如果攻击者能够影响元素数组的长度,则上述代码将导致拒绝服务(执行无法跳出循环)。而在扫描的智能合约中发现有8%的合约存在数组长度操纵问题。
3.权力过大的所有者
这是Soldiity十大安全问题新出现的问题,该问题影响了约16%的合约,某些合约与其所有者紧密相关,某些函数只能由所有者地址调用,如下例所示:
只有合约所有者能够调用
doSomething()和doSomethingElse()
函数:前者使用onlyOwner修饰器,而后者则显式执行该修饰器。这带来了严重的风险:如果所有者的私钥遭到泄露,则攻击者可以控制该合约。
4.算术精度问题
由于使用256位虚拟机,Solidity的数据类型有些复杂。Solidity不提供浮点运算,并且少于32个字节的数据类型将被打包到同一个32字节的槽位中。考虑到这一点,你应该预见以下程序精度问题:
functioncalculateBonus(uintamount)returns(uint){returnamount/DELIMITER*BONUS;}
如上例所示,在乘法之前执行的除法,可能会有巨大的舍入误差。
5.依赖tx.origin
6.溢出
Solidity的256位虚拟机存在上溢出和下溢出问题,这里有具体的分析。在
for
循环条件中使用
uint
数据类型时,开发人员要格外小心,因为它可能导致无限循环:
7.不安全的类型推导
该问题在Solidity十大安全问题排行榜中上升了两位,现在影响到的智能合约比之前多了17%以上。
8.不正确的转账
此问题在Solidity十大安全问题榜单中从第六位下降到第八位,目前影响不到1%的智能合约。
9.循环内转帐
当在循环体中进行以太币转账时,如果其中一个转账失败,那么整个交易将被回滚。
for(uinti=0;i<users.lenghth;i++){users.transfer(amount);}
在这个例子中,攻击者可能利用此行为来进行拒绝服务攻击,从而阻止其他用户接收以太币。
10.时间戳依赖
如果你的应用需要随机性,可以参考RANDAO合约,该合约基于任何人都可以参与的去中心化自治组织,是所有参与者共同生成的随机数。
总结
比较2018年和2020年十大常见问题时,我们可以观察到开发最佳实践的一些进展,尤其是那些影响安全性的实践。看到2018年排名前2位的问题:外部合约拒绝服务和重入,已经不再榜单了,这是一个积极的信号,但仍然需要采取措施来避免这类常见错误。
请记住,智能合约在设计上是不可变的,这意味着一旦创建,就无法修补源代码。这对安全性构成了巨大挑战,开发人员应利用可用的安全测试工具来确保在部署之前对源代码进行了充分的测试和审核。
Solidity是一种非常新且仍在成熟的编程语言,Solidityv0.6.0引入了一些重大更改,并且预计在以后的版本中还会有更多更改。
与许多相信比特币长期增长的人一样,区块链资本合伙人SpencerBogart认为:“目前的熊市是投资者购买BTC的理想时机”。博加特最近向彭博谈到了加密货币的价格等等情况.
2019年12月31日,加密货币交易所Gemini创始人TylerWinklevoss和CameronWinklevoss发文表示,过去10年,我们迎来了比特币和加密货币的诞生.
2008年中本聪发布比特币的白皮书,2009年比特币正式运行。经过10年的发展,比特币个成为数字资产的典型代表,也是区块链第一个成功的应用.
行情分析 昨日比特币凌晨在8710附近来回震荡,早间8点在8700附近开始持续下探,下午13点最低跌到8500后进行了一段修复盘整,行情稍有120点的反弹,但依旧难挡空头趋势的强势.
作者|王晟宇 在超市结账时,拿出手机,店员扫码收款不再只是微信或支付宝,而是数字人民币app——虽然很多店员还不太熟悉这一流程,但这是北京等多个数字人民币试点地区正在发生的事情.
期货合约是数字货币投资领域里常见的投资方式,也是争议非常大的交易方式。从今天开始我将以一系列文章介绍币圈期货合约的真相和其中潜藏的各种大坑.