Solidity

“IncreaseAllowance”和“DecreaseAllowance”函式如何解決緩解問題?

  • June 27, 2022

我正在瀏覽 ERC20 令牌的 openzeppline 程式碼,發現在 IERC20 界面中使用批准功能時,它們描述了緩解問題:連結

我不明白 increaseallowance 和 reductionAllowance 如何解決同樣的問題

如果您點擊連結,您最終會看到漏洞描述:https ://docs.google.com/document/d/1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM/edit 。基本上,攻擊者(預先獲得津貼的人)理論上可以在津貼減少之前插入自己的transferFrom交易,從而獲得幾乎雙倍的津貼。

所以讓我們假設使用者 A 從使用者 B 到使用者 B 的代幣有 10 的配額。使用者 B 出於某種原因想要將此配額減少到 8,因此 B 送出了approve8 的交易。此時 A 可以送出他自己的交易,其中他花費了一些津貼(假設他花費了 5),並且可能在 B 的事務之前處理事務。一旦 B 的交易完成,A 已經使用了他原來的 5 個配額,但還剩下 8 個配額——這不是 B 想要的。

如果使用者 BdecreaseAllowance改為使用(因此他將送出交易以將配額減少 2),則使用者 A 最終將獲得 5 個已使用的配額,並且在 B 的交易之後只剩下 3 個配額。這導致了 B 想要的確切功能。

引用自:https://ethereum.stackexchange.com/questions/130811