Solidity
在智能合約中需要特定類型的代幣
新手來了 為了實踐,我正在編寫一個智能合約,多個使用者可以集中資金。例如,3 個使用者可以向合約貢獻 100 個 DAI 代幣。目前,智能合約只不過是跟踪貢獻者而已。
我如何確保合約只接受特定種類的代幣(例如 DAI)?
到目前為止,我的程式碼是基本的:
pragma solidity ^0.8.0; contract Pool { struct Contributer { uint id; address wallet; uint contribution; } mapping(uint => Contributor) public contributors; address public admin; IERC20 public which_token; constructor(address _daiAddress) { admin = msg.sender; which_token = IERC20(_daiAddress);// pointer to DAI } function contributeToPool(address _from, uint _amount) { //require(type of token same as which_token??); } }
具體來說,看看
contributeToPool()
。
以下是要搜尋的關鍵主題和關鍵字:
一般來說:
- 將您接受的令牌“列入白名單”。
- 使用“approve and transferFrom”模式。
確定您的令牌列表是靜態的還是可變的,如果是後者,請考慮使用“可擁有”模式來控制對維護功能的訪問。否則,請考慮在建構子中填充列表。
考慮:
import "./IERC20.sol"; mapping(address => bool) public tokenApproved; function receiveTokens(address token, uint amount) public { require(tokenApproved[token], "We don't accept those"); IERC20(token).transferFrom(msg.sender, address(this), amount); emit Received(msg.sender, token, amount); }
希望能幫助到你。