首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算我自己的NFT市场的令牌ID

如何计算我自己的NFT市场的令牌ID
EN

Ethereum用户
提问于 2022-05-26 16:31:02
回答 1查看 924关注 0票数 1

我只是在创建我自己的NFT市场。我需要为每个NFT创建唯一的令牌ID,但是当前的令牌ID演示如下所示。

代码语言:javascript
复制
contract ERC721 {
  ...
  mapping(uint256 => address) private _tokenOwners;

  function _mint(address to, uint256 tokenID) {
    _tokenOwner[tokenID] = to;
    ...
  }
}

contract CryptoDog is ERC721 {
    ...
  string[] public cryptoDogz;  

  function mint(string memory nftName) public {

    cryptoDogz.push(ntfName);
    uint256 _tokenID = cryptoDogz.length - 1;
    _mint(msg.sender, _tokenID);
    ...
    
  }
}

如果您为我提供一种生成唯一令牌ID的方法,我将不胜感激。

EN

回答 1

Ethereum用户

发布于 2022-05-26 21:39:31

您可以使用计数器从ID 1开始,并在创建新NFT时增加计数器。对于每个NFT,您将得到一个不同的增量数字。您可以使用OpenZeppelin中的以下代码:

代码语言:javascript
复制
// contracts/GameItem.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

contract GameItem is ERC721URIStorage {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    constructor() ERC721("GameItem", "ITM") {}

    function awardItem(address player, string memory tokenURI)
        public
        returns (uint256)
    {
        uint256 newItemId = _tokenIds.current();
        _mint(player, newItemId);
        _setTokenURI(newItemId, tokenURI);

        _tokenIds.increment();
        return newItemId;
    }
}

示例是使用来自OpenZeppelin的计数器库

您可以检查它是如何实现的这里

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/129026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档