如何在 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);
}
}
我目前正在为我的 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);
}
}