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

ERC-1155 の実際/ERC-1155 Overview

Ara
February 27, 2020

ERC-1155 の実際/ERC-1155 Overview

Ethereum の新しいトークン規格
ERC-1155 の実際
2020.02.27 荒川

はじめに
2
現在、ブロックチェーンで所有権を示すためにEthereum の ERC-721 という規格が最も利用されている

収集品ゲームのアイテム
切手
参加証明
Name Service

はじめに
3
本日は、最近新しくトークン規格として確定したERC-1155 について、実際のところどうなのかを話します

概要
4
ERC-1155 とは?
NFT(Non-Fungible Token)と FT(Fungible Token)を両方とも表現できる Ethereum のトークン規格
Enjin(Dapp 開発プラットフォーム)が提案し、規格として採択

特長
コントラクト1つだけで複数のトークンを作れる
トークンを効率的に操作できる

ユースケース
5
100 ゴールド

薬草
通貨
アイテム
Fungible(数量に意味がある)
Non-Fungible(1つ1つ違う)
ゲーム内で利用する 通貨 と様々な アイテム を作りたい

これまでは・・・
6
ゴールド 
ユーザ1:100
剣 
剣1の所有者:ユーザ1
薬草 
薬草1の所有者:ユーザ1
ERC-20 トークン
ERC-721 トークン
ERC-721 トークン
ブロックチェーンの情報を
取得・変更するのが大変…
アドレス管理
トークンごとの権限設定
リクエスト増加
ユーザ1:100
剣1の所有者:ユーザ1
薬草1の所有者:ユーザ1

ERC-1155 では
7
ゴールド 
剣 
薬草 
ERC-1155 トークン
ブロックチェーンの情報を
一括で取得・変更できる
ゴールド:100
剣   :1
薬草  :1
ユーザ1

利用メリット
8
ユーザ
Gas 代が安い(アイテムの送付・売買)

サービス提供者
Gas 代が安い(アイテムの送付・売買、管理者操作など)
ノードへのリクエストが減る
実装がシンプル

Ethereum ネットワーク
トランザクションが減る
ストレージ使用量が減る
ノードへのリクエストが減る

技術の詳細
9
仕様 (コントラクトのインターフェースとルール) https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1155.md
実装例
Enjin https://github.com/enjin/erc-1155
Sandbox’s Asset https://etherscan.io/address/0x067a1eb5e383ed24b66d72aaf80d8d7db3d299a8#code
0x プロトコルのライブラリhttps://github.com/0xProject/0x-monorepo/tree/b3c3ec/contracts/erc1155/contracts/src
OpenZeppelin のライブラリ(2020.2.26 現在 レビュー中)https://github.com/OpenZeppelin/openzeppelin-contracts/issues/1728

仕様(EIP)は GitHub で提案・議論される
10

ERC-1155 インターフェース(1)
11
safeTransferFrom(address from, address to,
uint256 id, uint256 value, bytes data)
※便宜上、修飾子を省略、変数名を一部変更
・トークンを送付する(IDと数量を指定)
・トークンを一括送付する(IDと数量を複数指定)
safeBatchTransferFrom(address from, address to, uint256[] ids, uint256[] values, bytes data)
関数

ERC-1155 インターフェース(2)
12
・トークンの残高を取得する(所有者とIDを指定)
balanceOf(address owner, uint256 id) returns (uint256)
・トークンの残高を一括取得する(所有者とIDを複数指定)
balanceOfBatch(address[] owners, uint256[] ids) returns (uint256[])
※便宜上、修飾子を省略、変数名を一部変更
関数

ERC-1155 インターフェース(3)
13
・トークンを送付する権限を設定する(オペレータと権限を指定)
setApprovalForAll(address operator, bool approved)
・トークンを送付する権限を確認する(所有者と調べたいアドレスを指定)
isApprovedForAll(address owner, address operator) returns (bool)
※便宜上、修飾子を省略、変数名を一部変更
関数

ERC-1155 インターフェース(4)
14
・トークンのメタデータ URI 更新のログ
URI(string value, uint256 id)
・トークン送付のログ
TransferSingle(address operator, address from, address to, uint256 id, uint256 value)
・トークン一括送付のログ
TransferBatch(address operator, address from, address to, uint256[] ids, uint256[] values)
イベント
※便宜上、修飾子を省略、変数名を一部変更

ERC-1155 インターフェース(5)
15
・トークン送付の権限設定のログ
ApprovalForAll(address owner, address operator, bool approved)
※便宜上、修飾子を省略、変数名を一部変更
イベント

ERC-1155 の思想
16
オンチェーンには必要最小限の情報のみ記録する!
冗長な関数、変数は提供しない

オフチェーンでイベントを収集してインデックスすべき!
何度も参照する情報はイベントに記録する

ERC-721 との違い
17
トークンを一括送付できる トランザクション削減、Gas 削減のため
メタデータの URI がイベントに残る オフチェーンでインデックスできるようイベントに残している
トークンID から所有者がわからない(ownerOf 関数がない) Gas 節約のためマップを保持していない
冗長な関数は提供されていない
transferFrom がない(safeTransferFrom のみ)
approve がない(setApprovalForAll のみ)

ERC-1155 におけるトークンの分類
18
Fungible ……… 同じ ID のトークンが複数ある

Non-Fungible … 同じ ID のトークンは 1 つだけ
#1111 ゴールド × 100
#2222 剣 × 10
#9999 伝説の剣 × 1
メタデータは同じ

トークンID の bit 分割 ※ EIP では例が示されているのみ
19
・Fungible の場合
0x0 0000000000000000000000000000001 00000000000000000000000000000000
・Non-Fungibe の場合
連番
常にゼロ
連番
  (トークンのグループを示す)
連番
(同じグループ内の連番)
NFを示す
フラグ
0x8 0000000000000000000000000000001 00000000000000000000000000000001

Gas 比較(vs ERC-721)
20
※ 0x protocol library の実装で検証
まあ、ちょっと安い

Gas 比較(vs ERC-20)
21
※ 0x protocol library の実装で検証
わずかに安い

利用者は少しずつ増えている
22
ERC-1155 トークン送付のイベント数
※ TransferSingle / TransferBatch の合計(mint 除く)

・・・が、ERC-721 と比べるとまだまだ
23
トークン送付のイベント数
ERC-721
ERC-1155

コントラクトの数は少ない(ほとんどが Enjin コントラクトを利用)
24
ERC-1155 コントラクトの数

現在確認できる ERC-1155 準拠のコントラクト
25
アドレス
イベント数*
説明(調べてわかったこと)
0xfaafdc07907ff5120a76b34b731b278c38d6043c
507958
Enjin
0x2b1870752208935fda32ab6a016c01a27877cf12
74398
不明(2019/07以降使われていない)
0xa58b5224e2fd94020cb2837231b2b0e4247301a6
1420
Cryptovoxel Wearables (WEAR)
0xc59b0e4de5f1248c1140964e0ff287b192407e0c
728
Gnosis の ConditionalTokens
0x5b306b1d0f1c1959777469a3fd42557298e9193a
585
不明(2019/09以降使われていない)
0x067a1eb5e383ed24b66d72aaf80d8d7db3d299a8
396
Sandbox's ASSETs
0xeef06c49885461f8a897f503e1bb4c3a67412d28
239
Rhovit というプロジェクト
0x559604845ffc64a05f780ead75249c377b1dae57
94
ReceiptChain というプロジェクト
0xd0e4847359ae76c2786d242e5f45c4f6f1abd752
60
不明(2019/04以降使われていない)
0xa2a295ae156bcd0023783cc2666ccbb0ca218d9f
47
BlockchainCutiesERC1155
0x238f2d6787dacb6045d72b0ec6626de0ff7c3107
14
Neon District Radiant Blade (NDRB)
* 2019/6/1-2020/2/10のmintを除く TransferSingle / TransferBatch

課題・問題点
26
トークンの法的な扱いが決まっていない Fungible も混合なので、規制対象になるかも
ERC-721 / ERC-20 と互換性がない アプリ/ウォレットごとに対応が必要なので置き換えが大変
イベントをインデックスする仕組みがないとトークン情報を取れない ERC-721に比べると、アプリへの導入ハードルが高い

課題・問題点
27
(・ トークンID の10進表記がやたら長い値なので、視認性が悪い)
16進表記:0x8000000000000000000000000000000100000000000000000000000000000001
10進表記:57896044618658097711785492504343953926975274699741220483192166611388333031425

将来性
28
ブロックチェーンのデータをインデックスするインフラ基盤が整ってくれば、普及するかも?

インフラ基盤がないと・・・単体機能は ERC-721 より劣るので、普及は難しそう(ちなみに、実装は ERC-721 よりクセが強い)

最近の Ethereum の方向性
29
オンチェーンは必要最小限、シンプルに
オフチェーンの分権化に焦点
オンチェーン
オフチェーン

参考:主なトークン規格
30
Final
ERC-20: Token Standard
ERC-721: Non-Fungible Token Standard
ERC-777: Token Standard
ERC-1155: Multi Token Standard

Draft
ERC-864: Divisible non-fungible tokens
ERC-1178: Multi-class Token Standard
ERC-1633: Re-Fungible Token
(ERC-223: Token Standard)

その他
ERC-721x

Ara

February 27, 2020
Tweet

More Decks by Ara

Other Decks in Programming

Transcript

  1. © 2020 Metaps Alpha Inc. All Rights Reserved. 3 •

    本日は、最近新しくトークン規格として確定した について、実際のところどうなのかを話します
  2. © 2020 Metaps Alpha Inc. All Rights Reserved. 4 ◦

    NFT(Non-Fungible Token)と FT(Fungible Token)を 両方とも表現できる Ethereum のトークン規格 ◦ Enjin(Dapp 開発プラットフォーム)が提案し、規格として採択 ◦ コントラクト1つだけで複数のトークンを作れる ◦ トークンを効率的に操作できる
  3. © 2020 Metaps Alpha Inc. All Rights Reserved. 5 100

    ゴールド 剣 薬草 Fungible(数量に意味がある) Non-Fungible(1つ1つ違う) • ゲーム内で利用する と様々な を作りたい
  4. © 2020 Metaps Alpha Inc. All Rights Reserved. 6 ユーザ1:100

    剣1の所有者:ユーザ1 薬草1の所有者:ユーザ1 ERC-20 トークン ERC-721 トークン ERC-721 トークン アドレス管理 トークンごとの権限設定 リクエスト増加 ユーザ1:100 剣1の所有者:ユーザ1 薬草1の所有者:ユーザ1
  5. © 2020 Metaps Alpha Inc. All Rights Reserved. 7 ERC-1155

    トークン ゴールド:100 剣   :1 薬草  :1 ユーザ1
  6. © 2020 Metaps Alpha Inc. All Rights Reserved. 8 •

    Gas 代が安い(アイテムの送付・売買) • Gas 代が安い(アイテムの送付・売買、管理者操作など) • ノードへのリクエストが減る • 実装がシンプル • トランザクションが減る • ストレージ使用量が減る • ノードへのリクエストが減る
  7. © 2020 Metaps Alpha Inc. All Rights Reserved. 9 (コントラクトのインターフェースとルール)

    https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1155.md • Enjin https://github.com/enjin/erc-1155 • Sandbox’s Asset https://etherscan.io/address/0x067a1eb5e383ed24b66d72aaf80d8d7db3d299a8#code • 0x プロトコルのライブラリ https://github.com/0xProject/0x-monorepo/tree/b3c3ec/contracts/erc1155/contracts/src • OpenZeppelin のライブラリ(2020.2.26 現在 レビュー中) https://github.com/OpenZeppelin/openzeppelin-contracts/issues/1728
  8. © 2020 Metaps Alpha Inc. All Rights Reserved. 11 ※便宜上、修飾子を省略、変数名を一部変更

    ・トークンを送付する(IDと数量を指定) ・トークンを一括送付する(IDと数量を複数指定) 関数
  9. © 2020 Metaps Alpha Inc. All Rights Reserved. 12 ・トークンの残高を取得する(所有者とIDを指定)

    ・トークンの残高を一括取得する(所有者とIDを複数指定) ※便宜上、修飾子を省略、変数名を一部変更 関数
  10. © 2020 Metaps Alpha Inc. All Rights Reserved. 13 ・トークンを送付する権限を設定する(オペレータと権限を指定)

    ・トークンを送付する権限を確認する(所有者と調べたいアドレスを指定) ※便宜上、修飾子を省略、変数名を一部変更 関数
  11. © 2020 Metaps Alpha Inc. All Rights Reserved. 14 ・トークンのメタデータ

    URI 更新のログ ・トークン送付のログ ・トークン一括送付のログ ※便宜上、修飾子を省略、変数名を一部変更
  12. © 2020 Metaps Alpha Inc. All Rights Reserved. 17 •

    トランザクション削減、Gas 削減のため • オフチェーンでインデックスできるようイベントに残している • Gas 節約のためマップを保持していない • ◦ transferFrom がない(safeTransferFrom のみ) ◦ approve がない(setApprovalForAll のみ)
  13. © 2020 Metaps Alpha Inc. All Rights Reserved. 18 •

    ……… 同じ ID のトークンが複数ある • … 同じ ID のトークンは 1 つだけ #1111 ゴールド × 100 
 #2222 剣 × 10
 #9999 伝説の剣 × 1 
 メタデータは同じ
  14. © 2020 Metaps Alpha Inc. All Rights Reserved. 19 0x0

    0000000000000000000000000000001 00000000000000000000000000000000 連番 常にゼロ 連番   (トークンのグループを示す) 連番 (同じグループ内の連番) NFを示す フラグ 0x8 0000000000000000000000000000001 00000000000000000000000000000001
  15. © 2020 Metaps Alpha Inc. All Rights Reserved. 20 ※

    0x protocol library の実装で検証
  16. © 2020 Metaps Alpha Inc. All Rights Reserved. 21 ※

    0x protocol library の実装で検証
  17. © 2020 Metaps Alpha Inc. All Rights Reserved. 22 ERC-1155

    トークン送付のイベント数
 ※ TransferSingle / TransferBatch の合計(mint 除く)
  18. © 2020 Metaps Alpha Inc. All Rights Reserved. 25 507958

    Enjin
 74398 不明(2019/07以降使われていない) 
 1420 Cryptovoxel Wearables (WEAR) 
 728 Gnosis の ConditionalTokens 
 585 不明(2019/09以降使われていない) 
 396 Sandbox's ASSETs 
 239 Rhovit というプロジェクト 
 94 ReceiptChain というプロジェクト 
 60 不明(2019/04以降使われていない) 
 47 BlockchainCutiesERC1155 
 14 Neon District Radiant Blade (NDRB) 
 * 2019/6/1-2020/2/10のmintを除く 
 TransferSingle / TransferBatch 

  19. © 2020 Metaps Alpha Inc. All Rights Reserved. 26 •

    トークンの法的な扱いが決まっていない Fungible も混合なので、規制対象になるかも • ERC-721 / ERC-20 と互換性がない アプリ/ウォレットごとに対応が必要なので置き換えが大変 • イベントをインデックスする仕組みがないとトークン情報を取れない ERC-721に比べると、アプリへの導入ハードルが高い
  20. © 2020 Metaps Alpha Inc. All Rights Reserved. 27 (・

    トークンID の10進表記がやたら長い値なので、視認性が悪い) 16進表記:0x8000000000000000000000000000000100000000000000000000000000000001 10進表記:57896044618658097711785492504343953926975274699741220483192166611388333031425
  21. © 2020 Metaps Alpha Inc. All Rights Reserved. 28 •

    ブロックチェーンのデータをインデックスする インフラ基盤が整ってくれば、普及するかも? • インフラ基盤がないと・・・ 単体機能は ERC-721 より劣るので、普及は難しそう (ちなみに、実装は ERC-721 よりクセが強い)
  22. © 2020 Metaps Alpha Inc. All Rights Reserved. 29 •

    オンチェーンは必要最小限、シンプルに • オフチェーンの分権化に焦点
  23. © 2020 Metaps Alpha Inc. All Rights Reserved. 30 •

    ERC-20: Token Standard • ERC-721: Non-Fungible Token Standard • ERC-777: Token Standard • ERC-1155: Multi Token Standard • ERC-864: Divisible non-fungible tokens • ERC-1178: Multi-class Token Standard • ERC-1633: Re-Fungible Token • (ERC-223: Token Standard) • ERC-721x