Solidity
“IncreaseAllowance”和“DecreaseAllowance”函式如何解決緩解問題?
我正在瀏覽 ERC20 令牌的 openzeppline 程式碼,發現在 IERC20 界面中使用批准功能時,它們描述了緩解問題:連結
我不明白 increaseallowance 和 reductionAllowance 如何解決同樣的問題
如果您點擊連結,您最終會看到漏洞描述:https ://docs.google.com/document/d/1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM/edit 。基本上,攻擊者(預先獲得津貼的人)理論上可以在津貼減少之前插入自己的
transferFrom
交易,從而獲得幾乎雙倍的津貼。所以讓我們假設使用者 A 從使用者 B 到使用者 B 的代幣有 10 的配額。使用者 B 出於某種原因想要將此配額減少到 8,因此 B 送出了
approve
8 的交易。此時 A 可以送出他自己的交易,其中他花費了一些津貼(假設他花費了 5),並且可能在 B 的事務之前處理事務。一旦 B 的交易完成,A 已經使用了他原來的 5 個配額,但還剩下 8 個配額——這不是 B 想要的。如果使用者 B
decreaseAllowance
改為使用(因此他將送出交易以將配額減少 2),則使用者 A 最終將獲得 5 個已使用的配額,並且在 B 的交易之後只剩下 3 個配額。這導致了 B 想要的確切功能。