Erc-20

在合約函式中批准 ERC20 代幣

  • February 26, 2022

我想了解為什麼在合約函式中批准 ERC20 代幣不起作用。

假設我在我的合約中創建了一個函式,它以這種方式為使用者呼叫 ERC20 代幣的批准:

contract MyContract {
 function approveToken(address token) external {
   IERC20(token).approve(address(this), 1000);
 }
}

是不是這樣說:

  • 交易的 msg.sender 是會被提示批准交易的使用者
  • ERC20代幣的approval功能的msg.sender不會是那個使用者,而是合約地址
  • 批准的效果將是通過以下參數批准該 ERC20 代幣:spender 和approver 都將是我的契約的契約地址。所以就像我們告訴 ERC20 代幣有這個:

津貼

$$ CONTRACT_ADDRESS $$$$ CONTRACT_ADDRESS $$= 1000.

因此,要批准我的合約為某些代幣持有者花費代幣,ERC20 的批准函式中的 msg.sender 應該是代幣持有者,因此代幣持有者應該直接在客戶端呼叫該函式而不通過合約,因為契約不能冒充該使用者。

我的理解正確嗎?

因此,要批准我的合約為某些代幣持有者花費代幣,ERC20 的批准函式中的 msg.sender 應該是代幣持有者,因此代幣持有者應該直接在客戶端呼叫該函式而不通過合約,因為契約不能冒充該使用者。

你在每一點上都是正確的!

出於明顯的邏輯和安全原因,ERC-20、ERC-721 僅允許持有者直接批准支出者。

正確的!。合約不能在其內部執行已批准的功能。因為 msg.sender 現在變成了智能合約的地址而不是賬戶的地址。你的理解是正確的。

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