我在开发一个游戏。能源将用我自己的象征来购买。
例如,要购买能源,您将使用之前购买的"X“令牌。这就像为1000 "X“代币购买1能源一样。
我搜了很多遍,却找不到答案。
我正在寻找一个像接收()一样的函数。
我想添加发送到契约的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");
}
}发布于 2022-09-27 08:13:50
您需要在合同中使用标准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;
}
}https://stackoverflow.com/questions/73863605
复制相似问题