Contract-Development

可以在契約上做 ERC20 accept/transferFrom 嗎?

  • October 10, 2022

我希望能夠創建一個池,使用者可以在其中存入和取出 ERC20 代幣。需要注意的是,我無權訪問池中的資產,但只能批准/拒絕使用者的提款請求。

  • 使用者創建 100 USDT 提款
  • 我會批准金額
  • 合約從自己的地址中扣除 100 USDT 並將這 100 轉移到使用者的地址。

使用 ETH 可以安全地做到這一點,但如果不讓自己完全訪問池中的資產,我似乎無法弄清楚如何使用 ERC20 代幣來做到這一點。甚至可能嗎?


本機傳輸的程式碼在這裡:

https://gist.github.com/zcaudate/366d8edfc748bd4ac8cfc40a98afc91e#file-room_native-sol-L271-L286

連結到需要更改的功能。

是的,我認為這是可能的。

  • 您可以將存放的值儲存在映射中,例如
mapping(address => uint)
  • 取款請求也可以存放在這樣的映射中,預設值為 false
mapping(address => mapping(value, bool)
  • 只允許合約所有者/管理者地址更改該布爾值。當它設置為 true 時,請求的 erc20 代幣數量將轉移到存放它的地址。金額從存款價值中扣除。

通過這種實施,您還將擁有映射樣式中所有提款的歷史記錄。

而且,使用 ERC20 而不是 ETH 應該有一個主要區別,使用者需要批准 ERC20 代幣的合約。

評論後編輯:在將 erc20 代幣從合約發送到另一個地址時,您應該使用 transfer 功能而不是 transferfrom,因此您不需要任何批准。您可以使用轉賬,因為您的合約正在呼叫代幣合約和 msg.sender 值,而代幣合約程式碼執行等於您的合約地址。

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