Token (solidity) - 从主应用程序钱包中奖励用户 X 数量的 token,用户支付 gas

Token (solidity) - Reward a user X amount of token from main app wallet with user paying the gas

你好一切都好吗?

我现在开始研究Solidity,我正在做一个中心化游戏,在一些成功的任务之后,我想给用户一个“Claim tokens”的选项,我会从游戏钱包中转出对他来说,金额是定义的后端,我将如何实施呢? (我的问题是如何在合同中创建一个金额以某种方式由后端授权的功能)

您可以创建一个可由用户执行的函数(以便他们支付汽油费),该函数使用 ERC-20 transfer() 函数(假设您的代币将是 ERC-20 ).

在此示例中,只要用户执行 claimToken() 函数,他们就会从 MyGame 合约地址接收 claimAmount 代币。

对于授权,我使用了 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 项(微支付渠道),那里解释了如何授权一个人用签名和哈希从我的钱包中取款,我什至不需要调用合约的方法