注册
关闭
Hanada

Hanada

发布于 4周前 阅读数 4988

ERC20 无限授权 方便自己也方便黑客 有没有解决方案?

随着 DeFi 的火爆,一般的区块链老手用户肯定不止一次对 DeFi 项目进行授权了,每当使用一个新的 DApp,都需要授权这个 DApp 花费你的代币。除了流程繁琐之外,每次授权都还要支付不菲的手续费。很多用户为了省钱省事,每次授权都是提供无限期授权,结果不知道哪天,突然发现自己的钱被人转走了,而原因并不是因为私钥被盗,而是因为图方便给 DeFi 合约进行了无限授权,为什么会有无限授权?有没有解决方案?

为什么要有 ERC20 授权?

有了以太坊上的原生代币 ETH,你就可以将 ETH 发送至该智能合约,同时调用智能合约功能。这是通过所谓的可支付函数(payable funtion)实现的。但是,由于 ERC20 代币本身就是智能合约,以太坊无法通过直接将智能合约代币发送到智能合约来调用其函数。原因是这个转账是在 ERC20 代币合约上发生的,不在 DeFi 合约。

那么如果想要合约来调用 ERC20 应该怎么办?ERC20 标准中,提供了一个让智能合约使用 transferFrom() 函数代表用户转移代币的方案。为了激活这个功能,需要用户授权智能合约转移代币的权限。

授权后,用户就可以将代币“存入”智能合约,进行 DeFi 应用的使用了。

比如,用户将 USDT “存入” Aave 来赚取利息,首先需要授权 Aave 合约可以从用户的钱包中取出 USDT。然后再调用 Aave 合约函数,指定想要存入 USDT 的数量。然后,Aave 合约使用 transferFrom() 函数从你的钱包中取出相应数量的 USDT 完成转账。

无限 ERC20 授权的问题

授权使用 DeFi 时,你就可以选择将这个币种单次授权,即仅同意本次转账,或者进行无限授权,让合约能够在未来不限次的有权操作你钱包内的这种代币。

在目前 DeFi 依托的以太坊网络底层不完善的前提下,对 DeFi 合约进行无限授权,是能有有效提高 DeFi 使用体验的一种方式。避免了每次使用前都要进行授权的麻烦,以及每次交易前授权造成的 GAS 消耗。设置无限授权后,用户只需要同意一次,之后存款时就不会再重复这一过程。

但是,该设置存在很大的弊端。因为用户授予的,不仅仅是操作转入合约部分代币的权利,而是这个钱包中这个代币的支配权。

也就是说一旦合约留有后门,或者遭到黑客攻击,那么不仅是存入 DeFi 项目中的代币,我们自身钱包里的相应代币也将受到威胁。而由于这个授权是由自身私钥签名授权的,因此一旦遭到攻击,即便使用冷钱包,也不能防止自身财产被盗。

怎样防范风险?

1. 对于不交易的持仓资产可以选择取消授权

现在 DeFi 项目如同雨后春笋,不知不觉可能就会授权很多项目,这就加大了被盗风险,我们可以在 DeBank 上通过查询自身钱包地址的方式,查询授权的合约,然后及时取消高风险项目的授权。

2. 分号使用,交易完及时转出资产

即便是再靠谱的项目,也都存在被攻击的可能,因此,不要把鸡蛋放到同一个篮子里更加重要。

3. 考虑其他项目

既然以太坊底层无法改变,那么其他拥有灵活底层的公链,就成为了后续可以关注的对象。

比如推出了多原生代币功能的 QuarkChain。在 QuarkChain 主网中,多原生代币 (Multinative token) 在 QuarkChain 系统中和 QKC 基本是一样的地位,可以调用合约、跨链、在满足某些情况的条件下可以支付交易手续费,除了不能参与 QKC 网络治理,原生代币可以实现 QKC 所有的功能,包括跨链转账。大部分 Defi 面临的非原生资产不便利性问题都可以解决。而未来合约中,原生代币的功能,将做到和 QKC 完全一致,消除多原生代币应用的最后一层障碍。也就是说不需要授权,也就避免了无限授权的问题。

结语

代币授权存在很大的安全隐患。如果我们想要改善密码学货币应用的用户体验和安全性,我们显然需要改进代币授权功能。目前,最有潜力的就是多原生代币功能从底层解决授权问题带来的安全风险,不过目前 QuarkChain 公链上 DeFi 项目仍然较少,相信后续会有更大的爆发。

  • 0
Hanada
Hanada

0 条评论