代币(solidity)- 用户支付 gas 后,从主应用钱包中奖励用户 X 数量的代币
Posted
技术标签:
【中文标题】代币(solidity)- 用户支付 gas 后,从主应用钱包中奖励用户 X 数量的代币【英文标题】:Token (solidity) - Reward a user X amount of token from main app wallet with user paying the gas 【发布时间】:2021-12-21 18:19:17 【问题描述】:你好,一切都好吗?
我现在开始研究 Solidity,我正在做一个中心化的游戏,在完成一些成功的任务后,我想给用户“Claim tokens”的选项,我会从游戏钱包中转移给他,并且数量是定义的后端,我将如何实现这一点? (我的问题是如何在合约中创建一个金额由后端授权的函数)
【问题讨论】:
【参考方案1】:经过大量搜索,我在 Solidity 的文档中找到了答案,我想要的是文档 (readthedocs.org/projects/solidity/downloads/pdf/v0.5.12) 的第 3.3.4 项(微支付渠道),那里它解释了如何授权一个人通过签名和哈希从我的钱包中提现,而我什至不需要调用合约的方法
【讨论】:
【参考方案2】:您可以创建一个用户可执行的函数(以便他们支付 gas 费用),该函数使用 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 项(小额支付渠道) ),它解释了如何授权一个人从我的钱包中提取签名和哈希,而不需要我甚至调用合约的方法以上是关于代币(solidity)- 用户支付 gas 后,从主应用钱包中奖励用户 X 数量的代币的主要内容,如果未能解决你的问题,请参考以下文章