Erc-20
在合約函式中批准 ERC20 代幣
我想了解為什麼在合約函式中批准 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 現在變成了智能合約的地址而不是賬戶的地址。你的理解是正確的。