繁体   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