時間:2023-08-12|瀏覽:501
近來以太坊上最火爆的領(lǐng)域就是DeFi。主要的DeFi應(yīng)用包括ERC20代幣的借貸、質(zhì)押和交易。若想在Uniswap、Aave和Yearn等DeFi協(xié)議上使用ERC20代幣,你需要授權(quán)dApp來使用這些代幣。這就是所謂的ERC20授權(quán)。這些授權(quán)對于DeFi平臺的運作來說必不可少,但是如果不加以控制,那將是非常危險的。
有了以太坊上的原生代幣ETH,你就可以將ETH發(fā)送至該智能合約,同時調(diào)用智能合約功能。這是通過所謂的可支付函數(shù)(payablefuntion)實現(xiàn)的。但是,由于ERC20代幣本身就是智能合約,你無法通過直接將代幣發(fā)送到智能合約來調(diào)用其函數(shù)。
因此,ERC20標(biāo)準(zhǔn)讓智能合約使用transferFrom函數(shù)代表用戶轉(zhuǎn)移代幣。為此,用戶需要允許智能合約代表他們轉(zhuǎn)移代幣。
這樣一來,用戶就可以將代幣“存入”智能合約,同時智能合約會更新其狀態(tài)來顯示這筆存款。相反,如果你將ERC20代幣發(fā)送至該智能合約,則合約不會更新其狀態(tài)(例如,將這筆存款記入你的賬戶)。
例如,如果你將DAI“存入”Aave來賺取利息,你首先要允許Aave合約從你的錢包中取出一些DAI。然后你調(diào)用Aave合約里的函數(shù),指定你想要存入的DAI的數(shù)量。然后,Aave合約使用transferFrom函數(shù)從你的錢包中取出相應(yīng)數(shù)量的DAI,并將同等數(shù)量的aDAI代幣記入你的賬戶。
將特定數(shù)量的ERC20代幣(如100DAI)存入合約時,你就可以選擇將授權(quán)額設(shè)成這個數(shù)量。然而,許多應(yīng)用會向用戶要求無限授權(quán)。
這會帶來極好的用戶體驗,因為用戶不需要在每次存款時重新授權(quán)。設(shè)置無限授權(quán)后,用戶只需要同意一次,之后存款時就不會再重復(fù)這一過程。
但是,該設(shè)置存在很大的弊端。眾所周知,即使是成熟的項目,也有可能存在漏洞。一旦你給了這些平臺無限授權(quán),不只是你的存款會陷入風(fēng)險之中,你的錢包中的代幣也是如此。
今年早些時候,Bancor出現(xiàn)了一個漏洞,危及用戶資金。執(zhí)行ERC20transferFrom函數(shù)的函數(shù)變成了public屬性(不再是private合約私有屬性),因此任何人都可以執(zhí)行該函數(shù),并取走用戶錢包中的資金。Bancor執(zhí)行了一次白帽黑客攻擊,控制了損失,并將資金還給了用戶。
除了Bancor的意外漏洞之外,還有很多惡意利用漏洞的情況。在今年夏天的DeFi熱潮中,人們都在為各種以食物命名的DeFi分叉產(chǎn)品狂歡,其中也包括一些騙局。即使人們?yōu)榱艘?guī)避風(fēng)險只存入少
熱點:代幣