如何在 Solidity 智能合约中启用 Claim Tokens?

How to enable Claim Tokens in Solidity Smart Contract?

我目前正在为我的 Dapp 使用 Open Zapeline 智能合约,我想知道是否有一种方法可以让用户索取我的代币(即从所有者钱包转移到当前用户)我知道一种硬编码的方法私钥,但有什么方法可以将智能合约设置为 msg.Sender 所有者或将令牌从所有者帐户转移到用户而无需任何签名?

您可以使用 internal 函数 _transfer() (GitHub link) 只验证 from 参数是令牌的实际所有者。但它不会验证 msg.sender 是否是令牌所有者。

请注意,此函数具有 internal 可见性,因此它只能从您的合约内部执行。

pragma solidity ^0.8;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract MyCollection is ERC721, Ownable {

    constructor() ERC721("MyCollection", "MyC") {
        _mint(owner(), 1);
    }

    function claim() external {
        require(ownerOf(1) == owner(), "Already claimed");
        _transfer(owner(), msg.sender, 1);
    }
}