簡體   English   中英

檢測發送到合約的 ERC20 代幣 -?

[英]Detection of ERC20 tokens sent to Contract -?

我正在開發一個游戲。 能源將用我自己的代幣購買。

例如,要購買能源,您將使用之前購買的“X”代幣。 這就像用 1000 個“X”代幣購買 1 個能量。

我搜索了很多,但找不到答案。

我正在尋找一個 function 就像 receive() 一樣。

我想將發送到合約的 XXXX 代幣數量和發送這些代幣的錢包地址添加到映射並更新能量計數。

例如,用戶發送了 1000 個 X 代幣(X 僅代表)。 發送的 X 代幣數量將記錄在發送錢包中: 示例: mapping(address => uint) xTokenInfo;

每 1000 個 X 代幣,就會向發送代幣的錢包提供能量。

例如:假設發送了 10,000 (10K) 個 X 令牌。 這意味着 10 能量。

樣本:

address currentTokenAddress = 0xTOKEN;

mapping(address => uint) energyBalance;

function sendToken_and_ConvertEnergys(uint _tokenAmount){
  if(sentToken == currentTokenAddress){
    energyBalance[msg.sender] = (_tokenAmount/1000);
  } else {
    revert("Only X TOKENs are accepted");
 }
}

您需要在合約中使用標准 ERC20 接口來轉移 X 代幣,為此,您需要讓您的用戶在其之前批准相同數量的代幣(批准通常通過 UI 完成)。

嘗試這個:

interface IERC20 {
   function transferFrom(address sender, address recipient, uint amount) external returns(bool);
   /* rest of the method */
}

contract Energy {
   address currentTokenAddress public = 0xTOKEN;
   mapping(address => uint) energyBalance;

   function sendToken_and_ConvertEnergys(uint _tokenAmount) external {
       uint calculatedEnergy = _tokenAmount/1000;
       IERC20(currentTokenAddress ).transferFrom(msg.sender,address(this),calculatedEnergy);
       energyBalance[msg.sender] += _calculatedEnergy;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM