NFT Standards vol.1
様々なブロックチェーンのNFTを調査・比較してみる
2020.06.30 荒川
はじめに
2
各ブロックチェーンの標準的な NFT 規格について「技術的にできること/できないこと」の観点で比較してみます
Ethereum : ERC-721 / ERC-1155
EOS : dGoods
Cosmos : Cosmos NFT module
Flow : Flow NFT standard
Tron : TRC-721
NEO : NEP-41
Steem : Steem NFT standard
Tomo : TRC-721
はじめに
3
各ブロックチェーンの標準的な NFT 規格について、「技術的にできること/できないこと」の観点で比較してみます
Ethereum : ERC-721 / ERC-1155(今回 割愛)
EOS : dGoods
Cosmos : Cosmos NFT module
Flow : Flow NFT standard
Tron : TRC-721
NEO : NEP-41
Steem : Steem NFT standard
Tomo : TRC-721
今回の対象
参考:2020 Q1 各ブロックチェーンの Dapp マーケットの状況
4
https://www.dapp.com/article/q1-2020-dapp-market-report
5
ERC-721
dGoods
Cosmos NFT module
Flow NFT standard
ERC-721 ― Ethereum の NFT規格 2017.09〜
6
特徴
現在、最も普及している NFT 規格
移譲機能(所有者じゃないアカウントがトークン送付できる)
分離されたメタデータ(URL のみ紐付け)
事例
CryptoPunks, SuperRare, Cryptovoxels, MyCryptoHeroes, Gods Unchained, Decentraland など多数
7
balanceOf:指定したアドレスの所有トークン数を取得
ownerOf:指定したトークンの所有者を取得
transferFrom / safeTransferFrom:指定したトークンを送付
approve:指定したアドレスに指定したトークンの送付許可を付与
getApproved:指定したトークンの送付許可済みアドレスを取得
setApprovalForAll:指定したアドレスに全トークンの送付許可を設定
isApprovedForAll:指定したアドレスの送付許可の有無を取得
参照:https://eips.ethereum.org/EIPS/eip-721
ERC-721 インターフェース
ERC-1155 ― Ethereum の NFT規格 2018.06〜
8
※以前の勉強会でまとめているのでこちらを参照ください
https://docs.google.com/presentation/d/1C8HC6dFmZZUUR33_JL7mjM8EjBkVtABIRND_38SOQ2k/edit?usp=sharing
9
ERC-721
dGoods
Cosmos NFT module
Flow NFT standard
― EOS の NFT規格 2019.02〜
10
特徴
カテゴリー名 / トークン名 で階層的にトークンを管理
売買機能
メタデータのテンプレート
事例
EOS Dynasty, Crypto Sword&Magic, EOS Knights など
11
setconfig:トークンのシンボルとバージョンを設定
create:トークンをインスタンス化 ※詳細後述
issue:トークンを発行
pausexfer:すべてのトークンの送付を一時停止/再開
burnnft:指定したトークン(複数) or アカウントの全トークンを削除
transfernft:指定したトークン(複数) or アカウントの全トークンを送付
listsalenft:指定したトークン(複数)を指定した金額/通貨で出品
closesalenft:指定したトークン(複数)を購入 or 出品取消
freezemaxsup:トークンの最大発行量を確定
参照:https://github.com/MythicalGames/dgoods/blob/master/dgoods_spec.md
インターフェース
12
create の詳細
ACTION create(
name issuer, // 発行者のアカウント
name rev_partner, // 売買金額を分配するアカウント
name category, // カテゴリー名(例)"concert1"
name token_name, // トークン名 (例)"ticket1"
bool fungible, // NFT かどうか
bool burnable, // Burn できるか
bool sellable, // 出品できるか
bool transferable, // 送付できるか(売買以外で)
double rev_split, // 売買金額の分配率(例)0.05
string base_uri, // メタデータのベースURL
uint32_t max_issue_days, // トークン発行の期間(任意)
asset max_supply // トークンの最大発行数(任意)
);
インターフェース
13
create の詳細
ACTION create(
name issuer, // 発行者のアカウント
name rev_partner, // 売買金額を分配するアカウント
name category, // カテゴリー名(例)"concert1"
name token_name, // トークン名 (例)"ticket1"
bool fungible, // NFT かどうか
bool burnable, // Burn できるか
bool sellable, // 出品できるか
bool transferable, // 送付できるか(売買以外で)
double rev_split, // 売買金額の分配率(例)0.05
string base_uri, // メタデータのベースURL
uint32_t max_issue_days, // トークン発行の期間(任意)
asset max_supply // トークンの最大発行数(任意)
);
インターフェース
売買 および 売上の分配の機能が備わっている
14
メタデータのテンプレート
規格として定義することは、意義がありそう
15
メタデータのテンプレート
規格として定義することは、意義がありそう
16
2次流通の売上分配を強要できる(規格として!)→ アート作品や著作物を扱う場合に有益、ERC-721 には無い強み
分配の指定方法が柔軟じゃない・・・→ のちのち課題になりそう
所持トークン一覧を一発で取得できる
個人的に重要と思う点
17
ERC-721
dGoods
Cosmos NFT module
Flow NFT standard
Cosmos NFT module 2019.04〜
18
特徴
基本的には ERC-721 仕様を再利用
トークンをまとめるコレクション
メタデータは現状は分離
事例
Binance Smart Chain(組込み予定)
19
メッセージ
MsgMintNFT:トークンを発行
MsgTransferNFT:指定したトークンを送付
MsgEditNFTMetadata:指定したトークンのメタデータを更新
MsgBurnNFT:指定したトークンを削除
クエリ
QueryDenoms:全NFTの一覧を取得
QuerySupply:指定したNFTのトークン発行量を取得
QueryOwner:指定した所有者のコレクションID一覧を取得
QueryOwnerByDenom:(QueryOwner をフィルタリングできるもの)
QueryCollection:指定したコレクションのトークンID一覧を取得
QueryNFT:指定したトークンの詳細情報を取得
参照:https://hackmd.io/@okwme/cosmos-nft https://github.com/cosmos/cosmos-sdk/issues/4046
Cosmos NFT module インターフェース
20
かなりカスタマイズできる、というか、仕様としてかなりゆるい→ いろんな NFT を扱う処理を共通化するのは難しいかも
所持トークン一覧を一発で取得できる
Cosmos NFT module 個人的に重要と思う点
21
ERC-721
dGoods
Cosmos NFT module
Flow NFT standard
Flow NFT standard 2020.04〜
22
特徴
リソース指向の所有モデル(各アカウントのストレージに格納)
コレクションを使った一括送信
他のコントラクトとの連携が容易
事例
NBA Top Shot(開発中)など
23
定義
NFT と、それを束ねる Collection
Collection の関数
totalSupply:トークン発行量を取得
borrowNFT:トークンの参照を取得
withdraw:指定したトークンを引出す
deposit:指定したトークンを預ける
getIDs:コレクション内のトークンID一覧を取得
createEmptyCollection:トークンを受け取るためのコレクションを作成
これ以外の機能は検討中
参照:https://github.com/onflow/flow-nft
Flow NFT standard インターフェース
24
リソース指向プログラミング→ コントラクトのセキュリティが、言語の仕組みによって保証される
アクセス管理まわりをシンプルな実装にできる→ 監査コストが減る 既存コードの変更なしに、他のコントラクトとも組み合わせやすい
トークンの所有者の一覧を取得できない→ プライバシーの観点では有益か
Flow NFT standard 個人的に重要と思う点
まとめ
25
まとめ
26
一言で説明してみる
ERC-721 :「必要最低限は規格化した!あとは好きにやって!」
EOS dGoods :「既存の課題がいろいろあるから解決するよ!」
Cosmos NFT :「長いものに巻かれろ」
Flow NFT :「俺が常識を変える」
参考
27
EIP 721: ERC-721 Non-Fungible Token Standardhttps://eips.ethereum.org/EIPS/eip-721
dGoods - Digital Goods Standardhttps://dgoods.org
MythicalGames/dgoods: A token standard for digital goodshttps://github.com/MythicalGames/dgoods
dGoods v1.0 — Public Beta Release - dGoods - Mediumhttps://medium.com/dgoods/dgoods-v1-0-public-beta-release-72f896ad7aed
Non-fungible tokens (NFT) on EOS - NonFungible - Mediumhttps://medium.com/nonfungible/non-fungible-tokens-nft-on-eos-df5140ac8d6d
NFT Module · Issue #4046 · cosmos/cosmos-sdkhttps://github.com/cosmos/cosmos-sdk/issues/4046
The standard for Non-Fungible Tokens on the Flow Blockchainhttps://github.com/onflow/flow-nft
その他 おまけ
28
dGoods の GitHub … けっこう放置されてる感
29
https://github.com/MythicalGames/dGoods
29
dGoods の SNS アカウントの盛り上がり具合 (2020/06/20)
30
30