balance:Rust智能合约养成日记(5)-ODAILY_PIST Trust

相关文章:

Rust智能合约养成日记合约状态数据定义与方法实现

Rust智能合约养成日记编写Rust智能合约单元测试

Rust智能合约养成日记Rust智能合约部署,函数调用及Explorer的使用

Rust智能合约养成日记Rust智能合约整数溢出

这一期中我们将向大家展示Rust合约中重入攻击,并提供给开发者相应的建议。本文中的相关代码,已上传至BlockSec的Github上,读者可以自行下载:https://github

Komainu为GMO-Z.com Trust Company旗下稳定币GYEN和ZUSD提供托管服务:3月6日消息,加密信托公司GMO-Z.com Trust Company与Komainu达成合作,旨在为日元稳定币GYEN和美元稳定币ZUSD提供安全合规的机构级托管服务。

据介绍,Komainu是一家面向机构的合规数字资产托管服务提供商。GYEN和ZUSD是受监管的日元稳定币和美元稳定币,由纽约州金融服务部(NYDFS)批准,是1:1支持的稳定币,资产由受FDIC保险的银行持有。(PR Newswire)[2023/3/7 12:45:40]

...}

动态 | 通讯应用Discord将读取状态的实现从Go转向Rust:通讯应用Discord宣布将读取状态(Read States)的实现从Go转向Rust,以提高该服务的性能。Discord发布官方博客解释之所以选择Rust的原因,称读取状态是一项被高频使用的功能,对速度的要求非常高,但是采用Go语言实施无法满足这个要求,导致每隔几分钟就会出现大量的延迟峰值,这不利于用户体验,Discord团队认为这是由于Go核心功能,其内存模型和垃圾收集器(GC)引起的。[2020/2/5]

在合约B中,withdraw函数开头处的assert!(self

动态 | Trust Wallet推出了新的开源钱包库:据coingape消息,2月28日,Trust Wallet推出了新的开源跨平台跨区块链钱包库Trust Wallet Core,使用户可通过其界面构建属于自己的dApp和钱包。[2019/3/1]

self

...}由于上一次进入withdraw以来,victim合约中的attacker_balance还没有更新,所以还是100,因此此时仍旧可以通过assert!(self

};}

此时的执行效果如下:

$nodeTriple_Contracts_Reentrancy

}Victim::attacker_balance:40FT_Token::attacker_balance:60FT_Token::victim_balance:140

可见由于此时的Victim合约在withdraw的时候事先更新了用户的余额,在调用外部的FungibleToken实施转账。因此当第二次重入了withdraw的时候,Victim合约中保存的attacker_balance已经更新为40,因此将无法通过assert!(self

}Victim::attacker_balance:40FT_Token::attacker_balance:60FT_Token::victim_balance:140

可见限制跨合约函数调用时的GasLimit也能起到防止重入攻击的效果。

本期总结和预告

这一期我们讲述了rust智能合约中的整数溢出问题,同时给出了建议,在书写代码时尽量先更新状态,再执行转账操作,并且设定合适的gas值,可以有效抵御重入攻击,下一期我们将讲述rust智能合约中的DoS问题,敬请关注。

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

区块博客

[0:31ms0-5:406ms