NFTの作り方がわからないからどうやって作るのかググって調べてみるとOpen Zeppelinという言葉が出てくる。
Open Zeppelinのホームページ
Github OpenZeppelin/openzeppelin-contracts
NFTはSolidityという言語を使って作られる。 OpenZeppelinはSolidityのライブラリとしてNFTトークンの雛形となるコードが用意してくれている。
以下のような感じでimportして使う
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/presets/ERC721PresetMinterPauserAutoId.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
contract MyNFT is ERC721PresetMinterPauserAutoId {
constructor()
public
ERC721PresetMinterPauserAutoId(
"MyNFT", // トークン名
"NFT", // シンボル
"https://example.com/token/" // TokenURI
)
{}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/utils/Context.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract NFT is Context, ERC721Enumerable, Ownable {
// uint256 に対して toString() を呼び出すのに必要
using Strings for uint256;
constructor(
string memory name,
string memory symbol
) ERC721(name, symbol) {}
function mint(address to) public virtual {
_mint(to, totalSupply());
}
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
return string(abi.encodePacked("https://example.com/", tokenId.toString(), ".json"));
}
}
参考