blockchain:openzeppelin_で_erc721_nft_トークンの作成
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
blockchain:openzeppelin_で_erc721_nft_トークンの作成 [2022/05/07 23:15] – dot | blockchain:openzeppelin_で_erc721_nft_トークンの作成 [2022/05/11 06:50] (現在) – dot | ||
---|---|---|---|
行 4: | 行 4: | ||
ほぼ OpenZeppelin オフィシャルの[[https:// | ほぼ OpenZeppelin オフィシャルの[[https:// | ||
- | 今回作成する GameItem NFT は NFT の所有者とtokenURIを保持するように実装されています。 | + | 今回作成する GameItem |
tokenURI は NFT を生成する際に指定されます。その指定された URI の所有者を NFT で記録しているということになります。 | tokenURI は NFT を生成する際に指定されます。その指定された URI の所有者を NFT で記録しているということになります。 | ||
URI はブロックチェーンの外にありますので、所有者が所有する物はブロックチェーンの外にあることになります。このようなデータを「オフチェーン」と呼びます。逆に、所有する物もブロックチェーン上に記録することを「オンチェーン」と呼びます。 | URI はブロックチェーンの外にありますので、所有者が所有する物はブロックチェーンの外にあることになります。このようなデータを「オフチェーン」と呼びます。逆に、所有する物もブロックチェーン上に記録することを「オンチェーン」と呼びます。 | ||
+ | |||
+ | オフィシャルの[[https:// | ||
+ | |||
+ | > Note | ||
+ | > you’ll notice that the item’s information is included in the metadata, but that information isn’t on-chain! So a game developer could change the underlying metadata, changing the rules of the game! If you’d like to put all item information on-chain, you can extend ERC721 to do so (though it will be rather costly). You could also leverage IPFS to store the tokenURI information, | ||
+ | |||
+ | GameItem スマートコントラクトは ERC721URIStorage を継承しているため「オフチェーン」になります。オンチェーンにしたい場合は ERC721 を継承すればOKです。「オンチェーン」の場合は「オフチェーン」よりもガス代が割高になります。また、tokenURI に IPFS の URI を指定することもできます。 | ||
+ | |||
+ | つまり、ethereum ブロックチェーン上の NFT と IPFS を組み合わせれば、非中央集権を保ったまま改竄できない NFT を実現できます。 | ||
===== 前提 ===== | ===== 前提 ===== | ||
- | Truffle と npm をインストールしておいてください。 | + | npm、Truffle、Ganache |
(参考) [[blockchain: | (参考) [[blockchain: | ||
+ | |||
+ | (参考) [[blockchain: | ||
===== プロジェクト作成 ===== | ===== プロジェクト作成 ===== | ||
行 92: | 行 103: | ||
Counters.Counter private _tokenIds; | Counters.Counter private _tokenIds; | ||
- | constructor() | + | constructor() |
function awardItem(address player, string memory tokenURI) | function awardItem(address player, string memory tokenURI) | ||
行 132: | 行 143: | ||
今回作成したスマートコントラクトの awardItem を実行すると、新しい NFT が生成されます。 | 今回作成したスマートコントラクトの awardItem を実行すると、新しい NFT が生成されます。 | ||
- | 新たな NFT を生成することを Mint と言います。実際 awardItem のソースコードでは「_mint(player, | + | 新たな NFT を生成することを Mint と言います。実際 awardItem のソースコードでは「_mint(player, |
Mint は英語の「Minting 鋳造(ちゅうぞう)」から来ています。(例: | Mint は英語の「Minting 鋳造(ちゅうぞう)」から来ています。(例: | ||
行 140: | 行 151: | ||
truffle(development)> | truffle(development)> | ||
truffle(development)> | truffle(development)> | ||
- | truffle(development)> | + | truffle(development)> |
{ | { | ||
tx: ' | tx: ' | ||
行 175: | 行 186: | ||
</ | </ | ||
- | Mint した1つめの | + | トランザクションログから |
+ | (GameItem スマートコントラクトは内部的に自動インクリメントする | ||
+ | |||
+ | <code PowerShell> | ||
+ | truffle(development)> | ||
+ | </ | ||
+ | |||
+ | Mint した NFT の所有者と NFT に保存されている tokenURI を確認します。 | ||
<code PowerShell> | <code PowerShell> | ||
- | truffle(development)> | + | truffle(development)> |
' | ' | ||
- | truffle(development)> | + | truffle(development)> |
' | ' | ||
</ | </ |
blockchain/openzeppelin_で_erc721_nft_トークンの作成.1651965331.txt.gz · 最終更新: 2022/05/07 23:15 by dot