NFT標準 ERC-721の日本語概要
はじめに
NFTを買ってみたつもりなのですが、NFT=アートの所有権じゃないという話を聞き、NFTの標準であるERC-721 Non-Fungible Token Standardを読んでみました。
ちなみに私が購入したNFTは下記です。
この時点でToken standardがERC-1155なので、NFTを買ったつもりが、そうではないかもしれないです・・・
スコープ
本文書のスコープは下図の赤字のERC-721 NFTの部分です。
NFTアートのマーケットであるOpen Seaも準拠している、ERC-721標準。
NFT(ERC721)超概要
・(狭義の)NFT=ERC721=NFTのインタフェース標準です。
・ERC721に沿って実装すると、NFTの所有者を書き換えられます。
・NFTのデータの中身は、tokenIdとメタデータ(資産の名称と画像のURI)
・ERC721に出てくるパラメータに、アートの画像データそのものは含まれません。
⇒私はNFT tokenId:4234xxxのオーナーです。OpenSeaのHPから確認できます。
NFTの中のMetadataに、画像へのリンクが含まれてるかもしれません。
詳細
標準文書の原本
ERC 721 Non-Fungible Token Standard
https://eips.ethereum.org/erc
関連する標準
//ERC721では、ERC-20 Token standard等も参照しているので、そちらも読まないと全体像がつかめなそうです。
アブスト
ERC721では、NFTを追いかけて、転送する機能を定めている。
NFTは、デジタル or 物理資産の所有権の代理となりえる[can]
dream up many more:家、芸術、子猫の画像、トレカ、ローン、
モチベーション
イーサリアムを使って、NFTのwallet/broker/auctionアプリが動くインタフェース。
ERC-20 token standardをインスパイアしてるけど、トークンを一意に識別できるようにしたい。
仕様
ER-721準拠なコントラクトは、ERC721とERC165のインタフェースに準拠しなくてはならない[must]
//Solidity(イーサリアムのプログラム言語)のevent/functionがかいてありますが、個人的にわかりにくかったので、各event/functionの入力と戻り値をまとめてみました。
//が、わからないのでさっくりまとめると、
//NFTの所有者を変える。NFTのオーナーを調べる
//NFTに紐づくAsset(資産)のメタデータ(名前とURIと画像1080 pixcelまで)を入手
//特定のオーナーの所有するNFTのtokenIdを入手。
//するあたりの関数が規定されているようです。
//パラメータとしては、From, to, tokenId, owner, metadata等。
Every ERC-721 compliant contract must implement the ERC721 and ERC165 interfaces
A wallet/broker/auction application MUST implement the wallet interface if it will accept safe transfers.
The metadata extension is OPTIONAL for ERC-721 smart contract
This is the “ERC721 Metadata JSON Schema” referenced above.
The enumeration extension is OPTIONAL for ERC-721 smart contracts
** Caveats ??警告?
Solidity(イーサリアムのプログラム言語)で書ききれない部分としては、下記が必須。
・Solidity issue #3412:Mutability guarantee?
・Solidity issue #3419:ERC721MetadataかERC721Enumerableは実装必須
・Solidity issue #2330:externalが定義されているファンクションはpublicにする。
・Solidity issue #3494 this.*.selector で警告が出る。
//よくわからん最新のSolidity(プログラム言語)やOpenZeppelin(ライブラリ)でいい感じに実装されているのかな?
** Rationale ??
//将来の希望を書いてる?
資産を、追跡、識別可能なスマートコントラクトの使い方が色々提案されている。
今後の使い方として、現実の資産の追跡も含まれる。
Cross-functional な資産の管理、販売ができるとエコシステムが強くなるだろう。
** NFTの識別子
NFTの識別子は、uint256のID。contract address, uint256 tokenIDのペア。グローバリーユニーク(一意)。
**転送の仕組み
safeTransferを始めるのは
NFTのオーナ
NFTのaprooved address
NFTの現在のオーナーを認証しているオペレーター
認証されたオーナーは、 approvedアドレスも設定することがある。
標準化してない範囲で、下記の実装もできる。
・コントラクトが停止中は、transer禁止。
・特定のアドレスからのNFTの受信をブロック
・unsare transferを禁止
・転送元と転送先から料金を課金する
・read only NFT
・転送失敗した場合のベストプラクティスはERC-223, 677, 827, OpenZeppelinのインプリ(SafeERC20.sol)
・NFTを作るmining, 壊すburningは仕様の規定外。
** Reference
// 他のも読まねば
以上です。
認識違いなどあれば、コメント欄に記載いただければ幸いです。
Discussion