EthereumでNFT(ERC721)を作ってみる
Udemyの講座にある、Become Ethereum Blockchain DeveloperをベースにERC721トークンを作っていく。
結構簡単である。
Remixでコントラクトを記述する
OpenzeppelinのWizardで、「ERC721」で「Mintable-Auto Increment Ids」「URI Storage」を指定する。するとベースのコードができあがる。
※ constructorの引数である、Mytoken、MTKは変更する。
pragma solidity ^0.8.19;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract NftCar is ERC721, ERC721URIStorage, Ownable {
uint256 private _nextTokenId;
constructor(address initialOwner)
ERC721("NFTCar", "HMC")
Ownable(initialOwner)
{}
function _baseURI() internal pure override returns (string memory) {
return "https://XXXXXXXXXXXXXXXXXXXXXXXXXXX"; //トークンの実態であるJsonファイルが配置されるURL
}
function safeMint(address to, string memory uri) public onlyOwner payable {
uint256 tokenId = _nextTokenId++;
_safeMint(to, tokenId);
_setTokenURI(tokenId, uri);
}
// The following functions are overrides required by Solidity.
function tokenURI(uint256 tokenId)
public
view
override(ERC721, ERC721URIStorage)
returns (string memory)
{
return super.tokenURI(tokenId);
}
function supportsInterface(bytes4 interfaceId)
public
view
override(ERC721, ERC721URIStorage)
returns (bool)
{
return super.supportsInterface(interfaceId);
}
}
トークンのメタデータを作る
トークンの実態は、メタデータ。JSON形式で記載する。コントラクト上では、tokenURIとなる。記載内容は、以下に記載されている。
{
"name": "Sports Car #1",
"description": "This is NFT Test/Demonstration. ",
"image": "https://XXXX.jpg",
"external_url": "https://XXXXXXX",
"attributes": [
{
"trait_type": "Artefact",
"value": "SportsCar"
},
{
"trait_type": "Collection",
"value": "Genesis"
}
]
}
画像データを作る
生成AIで作ってしまえば簡単。公開するOpenSeaの画像の最大サイズは、1000x1000の模様。このサイズより大きい場合には、OpenSeaに表示されない。
メタデータ・画像データの公開
今回はIPFSでなく、簡易的にGoogleDriveをWEBサーバ化して公開する。
DriveToWebでは、複数階層のフォルダを認識しなかったため、直下にすべて保存。なお、運用面を考えると、このファイルを永続化することが課題
メタデータのフォーマットはここにある。今回は、詳細に記述せず。
コントラクトのデプロイ・MINT
Remixを使って、テストネットへデプロイする。今回は、Sepoliaテストネットワークへデプロイする。デプロイされたコントラクトを使って、トークンを発行する(MINT)。このとき、メタデータのファイルを指定する。
NFTの確認
Sepoliaテストネットへデプロイされた結果を確認する。
デプロイされたコントラクト・アドレスをもとに、OpenSeaを確認する。
この結果は以下の通り
この記事が気に入ったらサポートをしてみませんか?