Upgrade to Pro — share decks privately, control downloads, hide ads and more …

NFT Standards vol.1 様々なブロックチェーンのNFTを調査・比較してみる/...

Ara
June 30, 2020

NFT Standards vol.1 様々なブロックチェーンのNFTを調査・比較してみる/NFT Standards vol.1

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

Ara

June 30, 2020
Tweet

More Decks by Ara

Other Decks in Programming

Transcript

  1. © 2020 Metaps Alpha Inc. All Rights Reserved. 2 各ブロックチェーンの標準的な

    NFT 規格について 「技術的にできること/できないこと」の観点で比較してみます • : • : • : • : • : • : • : • :
  2. © 2020 Metaps Alpha Inc. All Rights Reserved. 3 各ブロックチェーンの標準的な

    NFT 規格について、 「技術的にできること/できないこと」の観点で比較してみます • : • : • : • : • : • : • : • :
  3. © 2020 Metaps Alpha Inc. All Rights Reserved. ― Ethereum

    の NFT規格 2017.09〜 6 • 現在、 NFT 規格 • (所有者じゃないアカウントがトークン送付できる) • 分離されたメタデータ(URL のみ紐付け) • CryptoPunks, SuperRare, Cryptovoxels, MyCryptoHeroes, Gods Unchained, Decentraland など多数
  4. © 2020 Metaps Alpha Inc. All Rights Reserved. 7 •

    :指定したアドレスの所有トークン数を取得 • :指定したトークンの所有者を取得 • :指定したトークンを送付 • :指定したアドレスに指定したトークンの送付許可を付与 • :指定したトークンの送付許可済みアドレスを取得 • :指定したアドレスに全トークンの送付許可を設定 • :指定したアドレスの送付許可の有無を取得 参照:https://eips.ethereum.org/EIPS/eip-721
  5. © 2020 Metaps Alpha Inc. All Rights Reserved. ― Ethereum

    の NFT規格 2018.06〜 8 ※以前の勉強会でまとめているのでこちらを参照ください https://docs.google.com/presentation/d/1C8HC6dFmZZUUR33_JL7mjM8EjBkVtABIRND_38SOQ2k/edit?usp=sharing
  6. © 2020 Metaps Alpha Inc. All Rights Reserved. ― EOS

    の NFT規格 2019.02〜 10 • カテゴリー名 / トークン名 で階層的にトークンを管理 • 売買機能 • メタデータのテンプレート • EOS Dynasty, Crypto Sword&Magic, EOS Knights など
  7. © 2020 Metaps Alpha Inc. All Rights Reserved. 11 •

    :トークンのシンボルとバージョンを設定 • :トークンをインスタンス化 • :トークンを発行 • :すべてのトークンの送付を一時停止/再開 • :指定したトークン(複数) or アカウントの全トークンを削除 • :指定したトークン(複数) or アカウントの全トークンを送付 • :指定したトークン(複数)を指定した金額/通貨で出品 • :指定したトークン(複数)を購入 or 出品取消 • :トークンの最大発行量を確定 参照:https://github.com/MythicalGames/dgoods/blob/master/dgoods_spec.md
  8. © 2020 Metaps Alpha Inc. All Rights Reserved. 12 の詳細

    発行者のアカウント 売買金額を分配するアカウント カテゴリー名(例) トークン名 (例) かどうか できるか 出品できるか 送付できるか(売買以外で) 売買金額の分配率(例) メタデータのベース トークン発行の期間(任意) トークンの最大発行数(任意)
  9. © 2020 Metaps Alpha Inc. All Rights Reserved. 13 の詳細

    発行者のアカウント 売買金額を分配するアカウント カテゴリー名(例) トークン名 (例) かどうか できるか 出品できるか 送付できるか(売買以外で) 売買金額の分配率(例) メタデータのベース トークン発行の期間(任意) トークンの最大発行数(任意)
  10. © 2020 Metaps Alpha Inc. All Rights Reserved. 16 →

    アート作品や著作物を扱う場合に有益、ERC-721 には無い強み → のちのち課題になりそう
  11. © 2020 Metaps Alpha Inc. All Rights Reserved.  2019.04〜 18

    • 基本的には ERC-721 仕様を再利用 • トークンをまとめるコレクション • メタデータは現状は分離 • Binance Smart Chain(組込み予定)
  12. © 2020 Metaps Alpha Inc. All Rights Reserved. 19 •

    :トークンを発行 • :指定したトークンを送付 • :指定したトークンのメタデータを更新 • :指定したトークンを削除 • :全NFTの一覧を取得 • :指定したNFTのトークン発行量を取得 • :指定した所有者のコレクションID一覧を取得 • :(QueryOwner をフィルタリングできるもの) • :指定したコレクションのトークンID一覧を取得 • :指定したトークンの詳細情報を取得 参照:https://hackmd.io/@okwme/cosmos-nft    https://github.com/cosmos/cosmos-sdk/issues/4046
  13. © 2020 Metaps Alpha Inc. All Rights Reserved. 20 →

    いろんな NFT を扱う処理を共通化するのは難しいかも
  14. © 2020 Metaps Alpha Inc. All Rights Reserved.  2020.04〜 22

    • (各アカウントのストレージに格納) • コレクションを使った一括送信 • 他のコントラクトとの連携が容易 • NBA Top Shot(開発中)など
  15. © 2020 Metaps Alpha Inc. All Rights Reserved. 23 •

    NFT と、それを束ねる Collection • :トークン発行量を取得 • :トークンの参照を取得 • :指定したトークンを引出す • :指定したトークンを預ける • :コレクション内のトークンID一覧を取得 • :トークンを受け取るためのコレクションを作成 これ以外の機能は検討中 参照:https://github.com/onflow/flow-nft
  16. © 2020 Metaps Alpha Inc. All Rights Reserved. 24 →

    コントラクトのセキュリティが、言語の仕組みによって保証される → 監査コストが減る   既存コードの変更なしに、他のコントラクトとも組み合わせやすい → プライバシーの観点では有益か
  17. © 2020 Metaps Alpha Inc. All Rights Reserved. 27 •

    EIP 721: ERC-721 Non-Fungible Token Standard https://eips.ethereum.org/EIPS/eip-721 • dGoods - Digital Goods Standard https://dgoods.org • MythicalGames/dgoods: A token standard for digital goods https://github.com/MythicalGames/dgoods • dGoods v1.0 — Public Beta Release - dGoods - Medium https://medium.com/dgoods/dgoods-v1-0-public-beta-release-72f896ad7aed • Non-fungible tokens (NFT) on EOS - NonFungible - Medium https://medium.com/nonfungible/non-fungible-tokens-nft-on-eos-df5140ac8d6d • NFT Module · Issue #4046 · cosmos/cosmos-sdk https://github.com/cosmos/cosmos-sdk/issues/4046 • The standard for Non-Fungible Tokens on the Flow Blockchain https://github.com/onflow/flow-nft