Erc-20
使用 SafeERC20 有什麼好處?
從 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()
方法保證噹噹前配額不為零時,必須先將其設置為零,然後才能允許新的配額。此檢查可確保保護合約免受意外行為的影響。