Erc-20

使用 SafeERC20 有什麼好處?

  • November 27, 2022

從 Openzeppelin 的解釋來看,SafeERC20 對我來說並不是很清楚。是什麼讓 safeERC20 比普通 ERC20 更好?用什麼方式更安全?

圍繞引發失敗的 ERC20 操作進行包裝(當代幣合約返回 false 時)。還支持不返回任何值(而是在失敗時還原或拋出)的標記,假定非還原呼叫是成功的。要使用此庫,您可以為 IERC20 添加一個 using SafeERC20;對您的合約的聲明,它允許您將安全操作稱為 token.safeTransfer(… ) 等。

SafeERC20 是一個圍繞 ERC20 呼叫的包裝庫,可以在您的合約中安全地與其他人的 ERC20 令牌進行互動。SafeERC20 優於普通 ERC20 的是,前者可以通過檢查 ERC20 操作的布爾返回值並在失敗時還原交易來確保普通 ERC20 函式呼叫的安全性,同時允許您支持一些非標準ERC20 代幣沒有布爾返回值。此外,SafeERC20 提供幫助程序來增加或減少配額,以減輕普通 ERC20 的 vanilla approve() 可能發生的搶先攻擊。

例如,safeApprove()方法:

function safeApprove(IERC20 token, address spender, uint256 value) 
   internal {
   // safeApprove should only be called when setting an initial 
   allowance,
   // or when resetting it to zero. To increase and decrease it, use
   // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
   require(
       (value == 0) || (token.allowance(address(this), spender) == 0),
       "SafeERC20: approve from non-zero to non-zero allowance"
   );
   _callOptionalReturn(token, 
   abi.encodeWithSelector(token.approve.selector, spender, value));
}

由於approve()ERC20的方法容易受到搶先攻擊,該safeApprove()方法保證噹噹前配額不為零時,必須先將其設置為零,然後才能允許新的配額。此檢查可確保保護合約免受意外行為的影響。

請參閱:https ://soliditydeveloper.com/safe-erc20

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