Solidity

我們如何才能停止“批准”的前行

  • February 20, 2021
function approve(address _spender, uint256 _value) returns (bool success)

這是普通的ERC20 approval方法。很容易發現我們有一個搶先的問題。

  • Alice給 Bob 100 個代幣。
  • 後來,Alice重新考慮她的選擇,將其更改為 50。當這種情況發生時,Bob 觀察鏈,立即以更高的 gas 價格轉移他的 100 個代幣。

結果,Bob 總共獲得了 150 個代幣,而不是 50 個。

我們怎樣才能避免上述情況呢?可以commit-reveal幫忙嗎?如果是,how

照原樣使用 ERC20 標準並不能解決這個問題。有關更改 ERC20 API 以防止此問題的建議,請參閱下面的連結。

https://docs.google.com/document/d/1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM/edit

Commit-reveal 是針對前沿攻擊的一種解決方案,但它的使用方式略有不同。即使您送出揭示了您的問題,仍然有可能進行前沿攻擊,因為您必須在揭示中暴露數量。

您可以在 2 筆交易中完成此操作

  • 首先批准零令牌,等待該交易通過
  • 再次批准 50 個令牌。

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