又是用户转移资产权限被盗,如何确保加密资产安全?
2022 年 10 月 2 日凌晨 4 点,TP 钱包旗下闪兑协议 Transit Swap 用户转移资产权限被盗,目前合约上用户资产权限被盗导致的损失已经超过 1500 万美元。
在符合 ERC20 标准的合约中,都要实现函数 approve
、allowance
和 transferFrom
。其中 approve
允许用户授权某个合约转移自己一定数量的资产,allowance
可以查询某个合约可以转移自己多少资产, 而 transferFrom
则允许被授权合约转移用户授权数量的资产。
如果想让用户向一个合约地址发送资产并调用该合约,那么在 ERC20 标准下,就只能有两种实现:一种是先发送一笔向合约转账资产的交易,再发送一笔调用合约的交易;另一种则是先发送一笔向合约授权用户资产转移权限的交易,再发送一笔调用合约的交易。而第一种方式在实现合约功能时会有很多问题,所以几乎所有的合约应用都选择第二种方式来让用户进行交互。
为了应用使用方便、节省 GAS 和减少系统复杂度,大多数的合约应用在让用户授权资产转移权限时都默认 unlimited
, 就是无限数量授权。如果合约是开源并且有严格权限管理的,那么在理论上也不会有什么问题。但实际情况下会有很多的合约应用既没有开源也没有做好权限管理,而用户对此也是一无所知,为了能用就稀里糊涂地把自己资产全部授权了出去。
原文发布在 https://github.com/33357/smartcontract-apps 这是一个面向中文社区,分析市面上智能合约应用的架构与实现的仓库。欢迎关注开源知识项目!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!