Contract-Development
可以在契約上做 ERC20 accept/transferFrom 嗎?
我希望能夠創建一個池,使用者可以在其中存入和取出 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 值,而代幣合約程式碼執行等於您的合約地址。