如果要在诸如Uniswap、AAVE和year等DeFi协议上使用ERC20代币,则需要授权dapp使用这些代币。这称为ERC20授权。
原标题:无限代币授权简介——我们能做什么?
编写人:Rosco Kalis
翻译和校对:Min Mina Jian
最近,以太坊****的区域是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)存入合同时,您可以选择将授权金额设置为该金额。然而,许多应用程序需要用户的无限授权。
这将带来极好的用户体验,因为用户不需要每次存款时都重新授权。设置了无限制授权后,用户只需同意一次即可,存款时不再重复此过程。
然而,这种设置有很大的缺点。众所周知,即使是成熟的项目也可能存在漏洞。一旦你给这些平台无限授权,不仅你的储蓄受到威胁,你钱包里的代币也会受到威胁。
在Devcon5上,我第一次和Paul Berg谈过这个问题。在这次会议上,保罗就本文讨论的问题作了发言。在开发sablier时,Paul在他的智能合约中发现了一个漏洞(修复了!),不仅所有存入智能合约的Dai(100美元)都有风险,而且所有测试人员钱包中的Dai(10000美元)也面临风险!
实际风险
长期以来,无限授权的风险主要是理论上的。这个漏洞在Paul的sablier平台正式发布之前就被修复了。当时没有使用ERC20授权的攻击,但只要平台继续需要无限授权,迟早都会发生。
去年,我们看到了几起使用ERC20授权的攻击。
意外的漏洞
今年早些时候,Bancor开发了一个危及用户资金的漏洞。执行ERC20 transferfrom()函数的函数成为公共属性(不再是私有契约私有属性),因此任何人都可以执行该函数并从用户的钱包中取钱。Bancor进行了一次黑客攻击,把钱还给了怀特帽子。
恶意利用漏洞
除了Bancor的意外漏洞外,还有许多恶意攻击的案例。在这个夏天的DeFi热潮中,人们陶醉于各种以食物命名的分叉产品,其中包括一些骗局。即使人们为了规避风险只存了少量代币,钱包里的代币也会因为无限授权而面临风险。
Zengo在一个名为unicats的项目中发现了可利用的漏洞。人们可以存入Uniswap(UNI)代币,并通过流动性挖矿获得meow代币(meow代币不能伪造)。但是如果你想存款,用户必须提供无限的授权。如果项目受到攻击,攻击者不仅可以收取项目押金,还可以拿走用户钱包中的所有uni代币。
另一个例子是德根货币项目。德根货币项目采用了一种不那么复杂(但“有效”)的方法。该项目没有开发自己的智能合约,而是为两个许可交易创建了一个前端。一个是运行中的智能合约,另一个是完全不同的地址。
由于许多人没有具体检查钱包地址,攻击者可以从用户钱包中获取代币。
硬件钱包呢?
一般来说,硬件钱包比手机、笔记本电脑和基于浏览器的钱包安全得多。原因是控制资金的私钥被安全地存储在硬件钱包中,永远不会离开设备。所以有了硬件钱包,你就可以确保没有人能偷你的私钥。
ERC20授权的问题是,没有人需要窃取您的私钥来从您的钱包中获取代币。因此,本文所讨论的硬件钱包并不能阻止恶意攻击漏洞。
使用硬件钱包仍然是个好习惯,因为它们确实可以保护你免受其他漏洞的侵害。但是,您需要注意的是,硬件钱包无法防止授权漏洞和许多其他智能合约漏洞。
dapp开发者能做什么?
在DevCon的演讲中,Paul提到了一些解决无限授权问题的方法。这些方案各有利弊。其中,最实用的方案是批量和使用模式。在这种模式下,应用程序只要求用户授权确切的金额,而不是无限制的。
这种方案的用户体验确实更差,因为每次用户想发送一个事务时,都需要发送一个新的授权事务,而这不能像无限授权那样一劳永逸地完成。这种模式的缺点是会增加交易费用的成本。如果交易费用像去年一样飙升,会带来很多麻烦。
另一种选择是,用户可以选择只授权他们当前需要花费的金额,或者为后续交易授权更高的金额。有几个项目采用了这一战略,例如1INCH交换以及曲线.fi。
另一个降低交易成本的解决方案是采用eip2612之类的标准,允许用户通过签署消息而不是发送事务来设置授权限制(免费)。然而,这样的标准并没有得到广泛的应用,围绕这些标准构建的工具也不多。
用户可以做什么?
由于ERC20授权是许多智能合约不可或缺的一部分,因此完全停止授权是不可行的。但如果可能,尽量避免无限授权。
与一年前相比,人们已经意识到了这一点,因此有些dapp允许用户选择只授权当前需要花费的金额,但大多数dapp仍然不允许,但是高端用户可以通过metamask接口减少他们的授权配额。
在使用DAPP时,请考虑您是否需要经常使用DAPP,以及您是否信任该项目(如果信任,请选择无限授权),或者您只是偶尔使用此DAPP,或者您根本不信任该项目(如果是,请选择小授权)。无论哪种情况,**定期(例如每月)检查您的授权限制,并撤销不再使用的dapp的授权。
为了便于检查和撤销这些授权,我开发了一个撤销现金工具。使用此工具,您可以查看该地址的代币余额和授权限制,然后可以轻松地撤销或减少授权。也有类似的工具批准区域等。
结论
许多去中心化的应用程序不能在没有授权的情况下运行,但是无限制的授权通常不利于安全。在2020年,ERC20授权已经有好几次了,人们对这个问题的理解比一年前要深刻得多。作为一个用户,您可以采取一些措施来降低上述风险,包括定期检查和撤销冗余授权。
链接到原文:
https://kalis.me/unlimited-ERC20-allowes/
文章标题:无限代币授权可能会产生哪些安全风险?
文章链接:https://www.btchangqing.cn/166217.html
更新时间:2020年12月20日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。
这个也是未来的趋势
EOS也是上线后就没有然后了
良心币啊,这都是为了让你们买得起
楼主事事顺心,家庭和睦!区块链
努力~~各位。。。区块链
怪不得拉的这么猛