Solidity
改進 ERC20 傳輸
我想接受穩定幣轉賬,目前有獨立的操作來處理付款,但我擔心這會導致錯誤的互動、資金損失和不正確的執行:
function depositDAI() external payable { require(msg.value >= amount, "Insufficient funds"); transferFunds(DAI, 10**18); } function depositUSDC() external payable { require(msg.value >= amount, "Insufficient funds"); transferFunds(USDC, 10**6); } function depositUSDT() external payable { require(msg.value >= amount, "Insufficient funds"); transferFunds(USDT, 10**6); }
是否可以在單個函式中處理這些操作?我想檢查:
- 支持 ERC20
amount
ERC20 就足夠了- 可與錢包直接互動
因此,讓我們從那裡開始,如果您不想接收 ETH,您的功能不必是
payable
.對於第 1) 點和第 2) 點,此程式碼將有所幫助:
interface ERC20 { function transferFrom(address sender, address recipient, uint256 amount) public returns (bool); } contract Name { mapping(address -> bool) supportedStableCoins; mapping(address -> uint) minAmauntForSuportedStableCoin; function addCoin(address _coinAddress, uint _minAmount) external { require(supportedStableCoins[_coinAddress] == true, "Already added"); supportedStableCoins[_coinAddress] = true; minAmauntForSuportedStableCoin[_coinAddress] = _minAmount; } function deposit(address _coinAddress, uint _amount) external { require(supportedStableCoins[_coinAddress] == true) require(minAmauntForSuportedStableCoin[_coinAddress] <= _amount); require(ERC20(_coinAddress).transferFrom(msg.sender, address(this), _amount)); }
注意 1:為了執行
transferFrom
消息發送者首先必須有approved
合約_amount
。注意 2:您必須
constructor
對函式具有和一些修飾符addCoin
。你不希望每個人都在你的合約中添加硬幣。關於第 3 點),如果您提供前端功能來進行交易,那麼一切都將是開箱即用的。