ERC-721
概要
このガイドでは、ERC-721互換トークンを作成し、Kaiaにデプロイする方法を順を追って説明します。 カイアはイーサリアムと互換性があるため、カイアでカンジブルトークンを作成する場合は、イーサリアムでの作成方法と同様の手順を踏み、ERC721標準を使用します。
標準に従うには、以下のERC721とERC165のインターフェイスをそれぞれ実装したコントラクトをデプロイする:
interface ERC721 /* is ERC165 */ { event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);= event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); function balanceOf(address _owner) external view returns (uint256); function ownerOf(uint256 _tokenId) external view returns (address); function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable; function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; function transferFrom(address _from, address _to, uint256 _tokenId) external payable; function approve(address _approved, uint256 _tokenId) external payable; function setApprovalForAll(address _operator, bool _approved) external; function getApproved(uint256 _tokenId) external view returns (address); function isApprovedForAll(address _owner, address _operator) external view returns (bool);}interface ERC165 { function supportsInterface(bytes4 interfaceID) external view returns (bool);}
- **トークンの所有者があるアドレスから別のアドレスに変更されたときに発行される。
- 承認イベント:アドレスが特定のトークンの転送を承認されたときに発行される。
- ApprovalForAll イベント: オーナーが自分のトークンすべてを管理するオペレーターの承認を承認また は取り消すときに発行されます。
- **特定のアドレスが所有するNFT(Non-Fungible Tokens)の数を返すメソッド。
- **特定のトークンの所有者のアドレスを返すメソッド。 それぞれのERC721トークンはIDで表されるユニークなものです。 この機能により、ユーザーやアプリケーションは一意のIDに基づいてトークンの所有者を特定できる。
- safeTransferFrom(データなし):特定のトークンの所有権を、あるアドレスから別のアドレスに安全に転送するメソッド。 この関数は、受信者がスマート・コントラクトであるかどうかをチェックする。 もしそうなら、転送を受け入れるための特定の関数(onERC721Received)を実装しなければならない。
- transferFrom:トークンの所有権をあるアドレスから別のアドレスに移すメソッド。 通常、トークンの送信が承認された場合に使用される。
- approve:特定のトークンを転送することをアドレスに承認するメソッド。 これにより、トークンの所有者は、自分の代わりにトークンを転送することを他の当事者に許可することができる。
- getApproved:特定のトークンの承認済みアドレスを取得するためのメソッド。
- setApprovalForAll:1つまたは複数のトークンの所有者が、すべてのトークンを管理するオペレータの承認を承認または取り消すことを可能にするメソッド。
- isApprovedForAll: オペレータがオーナーのすべてのトークンを管理することを承認されているかどうかをチェックするメソッド。
- safeTransferFrom (with data): メソッドは、safeTransferFrom (without data)と似ていますが、追加のデータパラメータがあります。 この追加データは、受信者がスマート・コントラクトの場合、転送中に追加情報を渡すために使用できる。 この関数は、受信者がスマート・コントラクトであるかどうか、onERC721Received関数を実装しているかどうかもチェックする。
はじめに
このセクションでは、Remix Online IDEを使用してERC721トークンコントラクトを作成し、デプロイします。 簡単かつ安全にトークンを作成するために、OpenZeppelin ERC-721コントラクトを使用します。 OpenZeppelinを使えば、ERC-721インターフェース全体を書く必要はない。 その代わりに、ライブラリーのコントラクトをインポートして、その関数を使うことができる。
ステップ 1: ファイルベースと IPFS へのファイルの追加
NFTのアートファイルとメタデータファイルをホストする必要があります。そのために、ピアツーピアのファイル保存・共有分散システムであるIPFSを使用します。 IPFSプロトコルに関与する方法は複数ある。 自分のシステムでIPFSをセットアップして運用することもできるし、Filebaseの方が簡単だ。
Filebaseは、IPFS上のweb3分散ストレージへの橋渡しです。 基盤となるインフラを管理することで、IPFSへのアクセスを簡素化します。
このガイドでは、Filebaseを使用して、NFTのアートとメタデータをIPFS上でホストします。
ステップ
- Filebase](https://console.filebase.com) ダッシュボードにログインしてください。
- IPFSバケットを持っていない場合は、Create BucketをクリックしてIPFSバケットを作成します。
- アップロード**ボタンを選択し、バケットダッシュボードに表示されているNFTアートをアップロードしてください。
- Files**タブのファイル名をクリックし、NFTアートのIPFS URLをコピー(共有ボタン)します。
- FilebaseでIPFSにメタデータJSONファイルを追加する。
kairos.json`というJSONファイルを作成し、IPFSのURLを画像フィールドに置き換えて保存します。 保存後、前のステップと同様に、JSONファイルをIPFSにアップロードする。
{ "name": "Kairos NFT", "description": "gkaia frens! gazuaaaaa!!!", "image": "https://disastrous-turquoise-parakeet.myfilebase.com/ipfs/QmRvQc4wZCp6NF7dFL4ywiWTG7FSH3KKGUAkXGgsdYfcKi"}
アップロード後、Filesタブでファイル名をクリックし、IPFSのURLをコピーします。 下の写真のようなものだろう:
https://disastrous-turquoise-parakeet.myfilebase.com/ipfs/QmY1LZF8JHo2r3h4X5VzLLXtJujqnBFGTyo2aqR9joXnt8
このIPFS URLを保存する。 これは次のセクションでNFTを設計するために必要となる。
ステップ2:ERC721トークンコントラクトの作成
OpenZeppelin契約ウィザード」。
- OpenZeppelin契約ウィザード](https://wizard.openzeppelin.com/)を開く
- ER721**を選択してください。
- トークンに 名前 と シンボル を指定します。 例えばそれぞれKairosとKS。
- ベースURI**フィールドでは、空にしてください。
- Featuresセクションで、Mintable、Burnable、URIStorageの各機能にチェックを入れ、特権アカウント(onlyOwner)がトークンの鋳造、焼却を行えるようにし、個々のトークンIDのトークンURIを更新できるようにします。
- コピー**アイコンをクリックして、次のセクションのRemixで使用するコードをコピーしてください。
**リミックス
- Remix](https://remix.ethereum.org/)の\*\*File Explorer**に移動し、contractsフォルダに
Kairos.sol
というファイルを新規作成します。 - Solidity Compiler** タブに移動し、Compile Kairos.sol をクリックしてトークンコントラクトをコンパイルします。
- トランザクションのデプロイと実行**タブに移動する。
- 環境** > 注入プロバイダ > メタマスク を選択します。
- 契約ドロップダウン**で、契約を選択します。 例えば、カイロス。
- Deploy**フィールドに、initialOwnerのコンストラクタ引数を指定する。
- デプロイ**をクリックする。
ステップ3:ERC721トークンコントラクトと対話する
RemixのDeployed Contractsセクションに移動し、デプロイされたコントラクトを展開します。 たくさんの機能が見えるだろう。 safeMint**関数を展開し、以下の詳細を追加する:
- あなたのウォレットアドレスをtoフィールドに追加します。
- tokenId**フィールドに任意のビッグ・ナンバーを入力してください。 最初のトークンが鋳造されたことを表すため、「1」を使用することをお勧めします。
- uri**フィールドには、IPFSへのファイルの追加セクションで生成したJSONファイルのURIを入力します。
- transact**をクリックし、MetaMaskからトランザクションを確認する。 数分かかるかもしれないが、Kaiascanのようなブロックエクスプローラーでトランザクションが実行されたことをいつでも確認できる。
これでカイア・カイロス・テストネットのNFTを手に入 れたことになる。
先に使用したアドレスやトークンIDを入力することで、balanceOf、name、symbol、ownerOf、tokenURIのような他の詳細を確認することができます。
ステップ4:メタマスクでNFTを見る
- メタマスクを開く
- NFT**タブに移動し、財布のホームページでNFTが自動検出されるはずです。
NFTを表示する最も簡単な 方法は、「設定」の「セキュリティとプライバシー」でNFTの自動検出機能をオンにすることです。