最近以太坊最热的区域是DeFi。DeFi的主要应用包括ERC20代币的借贷、质押和交易。如果您想在Uniswap、AAVE和year等DeFi协议上使用ERC20代币,则需要授权DAPP使用它们。这称为*ERC20授权*;。这些授权对DeFi平台的运行至关重要,但如果不加以控制,将非常危险。
ERC20授权的必要性
使用以太坊上的本机代币ETH,您可以将ETH发送到智能合约,同时调用智能合约函数。这是通过所谓的应付付款功能实现的。但是,由于ERC20代币本身是智能合约,因此不能通过直接向智能合约发送代币来调用其函数。
因此,ERC20标准允许智能合约使用transferfrom()函数代表用户传输代币。为此,用户需要允许智能合约代表他们转移代币。
这样,用户可以将代币“存入”智能合约,智能合约将更新其状态以显示押金。相反,如果您向智能合约发送ERC20代币,则合约将不会更新其状态(例如,将存款记入您的帐户)。
例如,如果您将Dai“存入”AAVE以赚取利息,您首先必须允许AAVE合同从您的钱包中取出一些Dai。然后调用AAVE协定中的函数来指定要存储的Dai数。然后,AAVE合同使用transferfrom()函数从您的钱包中删除相应金额的Dai,并将相同金额的Adai代币贷记到您的账户中。
无限制ERC20授权的危害
当您将特定金额的ERC20代币(如100 DAI)存入合同时,您可以选择将授权金额设置为该金额。然而,许多应用程序需要用户的无限授权。
这会带来很好的用户体验,因为用户不需要每次存款都重新授权。设置无限制授权后,用户只需同意一次,存款时不再重复此过程。
但是,这种设置有许多缺点。众所周知,即使是成熟的项目,也可能存在漏洞。一旦你给这些平台无限授权,不仅你的存款有风险,你钱包里的代币也有风险。
在DevCon 5上,我第一次和Paul Berg谈过这个。在这次会议上,保罗就本文讨论的问题作了发言。在开发sablier时,Paul在他的智能合约中发现了一个bug(修复了!),不仅智能合约中存放的所有Dai(100美元)都有风险,而且所有测试人员钱包中的Dai(10000美元)也有风险!
实际风险
长期以来,无限授权的风险主要是理论上的。这个漏洞在Paul的sablier平台正式发布之前就被修复了。当时还没有使用ERC20授权的攻击,但只要平台继续需要无限授权,迟早会有事情发生。
去年,我们看到了一些使用ERC20授权的攻击。
意外的漏洞
今年早些时候,Bancor有一个威胁用户资金的漏洞。执行ERC20 transferfrom()函数的函数成为公共财产(不再是私人合同的私有财产),因此任何人都可以执行该函数并从用户的钱包中取钱。Bancor进行了一次白帽黑客攻击,控制了损失并将钱退还给用户。
恶意利用
除了Bancor的意外漏洞外,还有许多恶意攻击的案例。在这个夏天的WiFi热潮中,人们陶醉于各种以食品命名的分叉产品,包括一些骗局。即使人们为了规避风险只存少量代币,钱包里的代币也会因为无限授权而面临风险。
Zengo在一个名为unicats的项目中发现了一个可利用的漏洞。人们可以存入Uniswap(UNI)代币,然后通过流动性挖矿获得meow代币(meow代币不能伪造)。但如果您想存款,则必须提供无限授权。如果项目受到攻击,攻击者不仅可以收取项目的押金,还可以拿走用户钱包中的所有uni代币。
另一个例子是Degen money项目。德根货币项目采取了一种不那么聪明(但“有效”)的方法。为自己的开发项目创建了一个智能前端授权合同。一个是运行中的智能合约,另一个是完全不同的地址。
因为很多人不会特别检查钱包地址,所以攻击者可以从用户的钱包中拿走代币。
硬件钱包呢?
总的来说,硬件钱包比手机、笔记本电脑和基于浏览器的钱包安全得多。原因是控制资金的私钥安全地存储在硬件钱包中,永远不会离开设备。因此,通过硬件钱包,您可以确保没有人可以窃取您的私钥。
ERC20授权的问题是,没有人需要窃取您的私钥才能从您的钱包中取出代币。因此,本文所讨论的硬件钱包并不能阻止恶意攻击漏洞。
使用硬件钱包仍然是一个好习惯,因为硬件钱包确实可以保护您免受其他漏洞的侵害。但是,您需要注意的是,硬件钱包不能免疫授权漏洞和许多其他智能合约漏洞。
应用开发者能做什么?
在DevCon的演讲中,Paul提到了一些解决无限授权问题的方法。这些方案各有利弊。最实际的解决方案是批处理和播放模式。在这种模式下,应用程序将只要求用户授权确切的金额,而不是无限制的。
这种方案的用户体验确实更差,因为每次用户想发送一个事务时,都需要发送一个新的授权事务,而这并不像无限授权那样一劳永逸。这种模式的缺点是会增加交易费用的成本。如果交易费用像去年一样飞涨,会带来很大的麻烦。
另一种选择是允许用户选择只授权他们现在需要花费的金额,还是授权更高的金额用于后续交易。有几个项目采用了这一战略,例如1INCH交换以及曲线.fi。
另一个降低交易成本的解决方案是采用eip2612之类的标准,这样用户就可以通过签署消息而不发送事务来设置他们的授权限制(免费)。然而,这种标准并没有得到广泛的应用,围绕它构建的工具也不多。
用户可以做什么?
由于ERC20授权是许多智能合约中不可或缺的一部分,完全停止授权是不可行的。但是,如果可能,请尽量避免无限授权。
人们对这个问题的认识比一年前更为明显,一些dapp只允许用户选择自己需要花费的金额,但大多数dapp仍然不能,而高端用户可以通过metamask的接口来减少授权量。
在使用DAPP时,请考虑是否需要频繁使用DAPP,是否信任项目(如果需要,请选择无限授权),或者只是偶尔使用DAPP,或者根本不信任项目(如果需要,请选择小授权)。无论哪种情况,您**定期(例如每月)检查您的授权金额,并取消不再使用的dapp的授权。
为了检查和撤销这些授权,我开发了一个撤销现金这是一个很好的工具。使用此工具,您可以检查该地址的代币余额和授权金额,然后可以轻松地撤销或减少授权。也有类似的工具批准区域等等。
结论
许多去中心化的应用程序不能在没有授权的情况下运行,但是无限制的授权通常不利于安全性。在2020年,ERC20授权已经有好几次了,人们对这个问题的理解比一年前要深刻得多。作为用户,您可以采取一些措施来降低上述风险,包括定期检查和取消冗余授权。
文章标题:无限代币授权-我们能做什么?
文章链接:https://www.btchangqing.cn/170030.html
更新时间:2020年12月28日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。
忍不住忍不住泼个冷水
手握比特币,心里不慌
梭哈[doge]
OMG!!
现在买进晚不晚拉?
eth利好不断
再看到十篇这样的文章,大家就可以放心买进了,他们准备拉了