你好一切都好吗?
我现在开始研究 Solidity,我正在做一个中心化的游戏,在一些成功的任务之后,我想给用户“Claim tokens”的选项,我将从游戏钱包中转移给他,并且amount 是定义的后端,我将如何实现这个?(我的问题是如何在合同中创建一个金额由后端以某种方式授权的函数)
你好一切都好吗?
我现在开始研究 Solidity,我正在做一个中心化的游戏,在一些成功的任务之后,我想给用户“Claim tokens”的选项,我将从游戏钱包中转移给他,并且amount 是定义的后端,我将如何实现这个?(我的问题是如何在合同中创建一个金额由后端以某种方式授权的函数)
您可以创建一个用户可执行的函数(以便他们支付汽油费),该函数使用ERC-20 transfer()
函数(假设您的代币将是 ERC-20)。
在这个例子中,只要用户执行这个claimToken()
函数,他们就会从合约地址收到claimAmount
代币。MyGame
对于授权,我使用了Ownable模式,其中只有授权的地址才能执行该功能(在本例中setClaimAmount()
)。
pragma solidity ^0.8;
interface ITokenContract {
function transfer(address _receiver, uint256 _amount) external returns (bool);
}
contract MyGame {
ITokenContract tokenContract = ITokenContract(address(0x123));
uint256 public claimAmount;
address public owner;
modifier onlyOwner {
require(msg.sender == owner);
_;
}
function claimTokens() external {
// send `claimAmount` of tokens from this contract address
// to the user executing the `claimTokens()` function
bool success = tokenContract.transfer(msg.sender, claimAmount);
require(success);
}
function setClaimAmount(uint256 _claimAmount) external onlyOwner {
claimAmount = _claimAmount;
}
}
此外,您可能希望对该claimTokens()
函数进行一些验证,以便它们不会比您希望的更频繁地执行传输。
经过大量搜索后,我在 Solidity 的文档中找到了答案,我想要的是文档(readthedocs.org/projects/solidity/downloads/pdf/v0.5.12)的第 3.3.4 项(微支付渠道),它解释了如何授权一个人通过签名和哈希从我的钱包中提款,而我什至不需要调用合约的方法