[英]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.