Solidity
轉移erc20,如何從metamask呼叫批准
我們有一個遊戲,要求使用者將 ERC20 從瀏覽器轉移到合約地址,在單元測試中,需要從使用者端呼叫批准()才能將 ERC20 轉移到地址,這應該如何在連接到的瀏覽器中工作元遮罩?前端會先呼叫approve(),然後再呼叫transfer(),所以它的兩個交易?有沒有辦法檢測接收方地址是否已經可以訪問/批准從智能合約或solidity方面進行轉移,這樣我們就可以將approve()置於一個條件中,而不是每次都呼叫approve()?
您可以從
allowance
所有者檢查您的支出者開始。function allowance(address owner, address spender) public returns uint256;
如果限額低於您的要求,您需要先進行
approve
交易。然後做transferFrom
. 如果您將這作為兩個單獨的交易進行,它將打開 MetaMask 兩次,並且使用者必須分別授權 2 筆交易。我們本可以使用多呼叫合約將這些呼叫組合在一個事務中,但大多數
approve
函式實現都基於msg.sender
.ERC-777 試圖通過要求單個事務有效地執行等效於
approve
and來解決此問題transferFrom
。您可以在此處查看有關 ERC-777 的更多資訊。