Solidity

在智能合約中需要特定類型的代幣

  • April 10, 2021

新手來了 為了實踐,我正在編寫一個智能合約,多個使用者可以集中資金。例如,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()

以下是要搜尋的關鍵主題和關鍵字:

一般來說:

  1. 將您接受的令牌“列入白名單”。
  2. 使用“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);
}

希望能幫助到你。

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