Slide 1

Slide 1 text

ERC-3525 Semi-fungible token Akihisa Tokuda SoftBank Technight #10 SoftBank Technight #10 ERC-3525 semi-fungible token 1

Slide 2

Slide 2 text

Conetents 1. ERC-3525 とは 2. チケットをサンプル実装してみた 3. 他のToken Standard との違い 4. ERC-3525 が使われているプロダクト SoftBank Technight #10 ERC-3525 semi-fungible token 2

Slide 3

Slide 3 text

1. ERC-3525 とは SoftBank Technight #10 ERC-3525 semi-fungible token 3

Slide 4

Slide 4 text

はじめに 着目した理由 NFT のブームも下火 NFT のユーティリティを付与する規格に興味 ERC-3525 とは 2022 年9 月にトークン規格として承認 ERC-721 で代表されるNFT のトークン仕様を強化するもので、 金券や債券などに適したトークン規格 SoftBank Technight #10 ERC-3525 semi-fungible token 4

Slide 5

Slide 5 text

Semi-fungible token(SFT) とは FT NFT SFT 規 格 ERC-20 ERC-721 ERC-3525, (ERC-1155 ) イ メ ー ジ 価 値 単 位 1 単位の価値は同一 1 単位の価値が異なる NFT のようにトークンごとに記述 可能、FT のように定量性を持つ 利 用 例 Bitcoin, Ethereum のよ うな通貨 権利の証明などに利用。ブロックチ ェーンゲームのキャラクターやアイ テム 金融商品(債券、株式など)、 BC ゲームのアイテム SoftBank Technight #10 ERC-3525 semi-fungible token 5

Slide 6

Slide 6 text

ERC-3525 データ構造  - トリプルスカラーモデル - ,, Token ID: ERC-721(NFT) 互換の定義 SLOT: メタデータの保持単位。同一のSLOT では、Token は交換可能となる VALUE :数量 SoftBank Technight #10 ERC-3525 semi-fungible token 6

Slide 7

Slide 7 text

FT, NFT とのデータ構造の違い SoftBank Technight #10 ERC-3525 semi-fungible token 7

Slide 8

Slide 8 text

Semi-fungible token  転送パターン Semi-fungible トークンでは以下のように、定量情報を管理できる。 統合 分割 転送 transferFrom(fromTokenId, toTokenId, _value) transferFrom(fromTokenId, toAddress, _value) return tokenId transferFrom(fromAddress, toAddress, tokenId) 同一Slot のtoken をマージして、1 トークンとして管理 トークンを複数に分割。新しい TokenID (B )をMint ERC721 の転送(所有者移転)と 同義 SoftBank Technight #10 ERC-3525 semi-fungible token 8

Slide 9

Slide 9 text

2. チケットシステムのサンプル実装 SoftBank Technight #10 ERC-3525 semi-fungible token 9

Slide 10

Slide 10 text

ERC-3525 Reference 実装 Solv protocol チームからStarter 記事(2022/12/25 ) 参照実装 Solidity Hardhat framework SoftBank Technight #10 ERC-3525 semi-fungible token 10

Slide 11

Slide 11 text

検証ケース 1. チケットの複数種類を表現(通常チケット、プレミアチケット) 2. チケットの有効期限・グレード別でチケットを作成する 3. チケットの利用状況を管理する SoftBank Technight #10 ERC-3525 semi-fungible token 11

Slide 12

Slide 12 text

チケットの発行 SLOT 単位でのMeta 情報を保持 struct SlotDetail { string name; // チケット名 string description; // チケット説明 uint32 term; // 期限 TicketState ticketState; // 利用状況 } // slotId とmeta 情報をmapping mapping(uint256 => SlotDetail) private _slotDetails; Mint function mint(address to_, string memory slotName_, string memory slotDescription_, uint32 term_, uint256 amount_) public { require(msg.sender == owner, "Only owner can mint"); uint256 slot = storeSlotDetail(slotName_, slotDescription_, TicketState.Issued, term_); // メタ情報をもとにSlot ID を算出 _mint(to_, slot, amount_); } SoftBank Technight #10 ERC-3525 semi-fungible token 12

Slide 13

Slide 13 text

チケットの利用状況の扱い 利用済み等のステートの表現については、工夫が必要 1. Slot の移動を行う。(Slot のメタ情報で管理する) -> Slot ID のUpdate でも対応できそうだが、独自拡張? -> Burn とMint で行うほうが、規格を逸脱しない。 2. Burn で表現 -> 利用済みのトークンは残らないが、履歴の記録だけは可能 3. Token のメタデータでステートを表現 -> ERC-3525 のトークンの統合、分割ができなくなるため、仕様のメリット を欠く SoftBank Technight #10 ERC-3525 semi-fungible token 13

Slide 14

Slide 14 text

チケットの利用状況の表現(サンプル) // ticket の利用 function tearTicket(uint256 tokenId_, uint256 amount_) public { require(msg.sender == owner, "Only owner can tear tickets"); SlotDetail storage oldSlot = _slotDetails[slotOf(tokenId_)]; require(oldSlot.ticketState == TicketState.Issued, "Already used");  // 使用済みのチケットは利用できない address holder = ownerOf(tokenId_); // 利用状況のみ変更したSlot 情報を発行 uint256 newSlot = storeSlotDetail(oldSlot.name, oldSlot.description, TicketState.Used, oldSlot.term); // 保持チケットをBurn _burnValue(tokenId_, amount_); // 利用済みチケットをmint _mint(holder, newSlot, amount_); } SoftBank Technight #10 ERC-3525 semi-fungible token 14

Slide 15

Slide 15 text

ERC-3525 でチケット NFT を表現する利点 チケットの発行都度コントラクトを作成する必要がない メタデータの保持がSlot (チケットの種類)単位なので、エコ NFT の量的な扱いができるようになっているため、保有量に依存したロジック が表現可能に。 銀のエンゼル5 -> 金のエンゼル1 使用済みチケット 5 枚 -> 新規チケットに交換 トークン単位での状態管理は工夫しだいで対応可能 SoftBank Technight #10 ERC-3525 semi-fungible token 15

Slide 16

Slide 16 text

3. 他の Token Standard との違い SoftBank Technight #10 ERC-3525 semi-fungible token 16

Slide 17

Slide 17 text

ERC-1155(Multi-Token standard) 複数のトークンを一つのコントラクトで扱える規格 ユーザごとにトークン単位の保有量を管理するシンプルな規格 ERC-1155 ERC-3525 メリ ット シンプル。複数宛先送信な どガス効率が良い。 柔軟な仕組み(同一スロットで別のToken を表現)、ERC-721 の 拡張なので、多くのマーケットプレースに出品可。 利用 用途 ブロックチェーンゲームア イテムなど 金融商品、特典付き会員権など SoftBank Technight #10 ERC-3525 semi-fungible token 17

Slide 18

Slide 18 text

ERC-4907 (Rental NFT) 2022/6 採用された、NFT (ERC-721 )をレンタルできるようになる拡張規格 「owner 」に加えて、「user 」と「expires( 期限) 」を管理できるようにして、 レンタルを表現。 ERC-3525 もNFT のユーティリティとして拡張できるので、組み合わせで新た なサービスを実装できるのでは どちらもERC-721 の拡張なので、親和性有り SoftBank Technight #10 ERC-3525 semi-fungible token 18

Slide 19

Slide 19 text

4 . ERC-3525 が利用されているプロダクト SoftBank Technight #10 ERC-3525 semi-fungible token 19

Slide 20

Slide 20 text

Solv protocol 新世代の自作のWeb3 金融アセット( 債券など) を作成、発行、トレードするた めの統合されたマーケット Vesting Voucher -> 例:ロックされたトークンを時間かけて開放していく証書 SoftBank Technight #10 ERC-3525 semi-fungible token 20

Slide 21

Slide 21 text

まとめ ERC-3525 は金融商品を表現するために生まれた規格 会員権・チケットなどにも使えそう。(技術的には) さらにERC-721 互換で、既存のNFT マーケットプレイスに展開できるメリッ ト多い Security token (証券トークン)、多様な債権(カーボンクレジットとか)、 Token レンタルなど高度なユースケースにおいても活用できるのでは 今後生まれるサービスに注目 SoftBank Technight #10 ERC-3525 semi-fungible token 21

Slide 22

Slide 22 text

END SoftBank Technight #10 ERC-3525 semi-fungible token 22

Slide 23

Slide 23 text

APPENDIX SoftBank Technight #10 ERC-3525 semi-fungible token 23

Slide 24

Slide 24 text

References EIP-3525: Semi-Fungible Token ホワイトペーパー By solv ERC-3525 blog by solv 金融NFT の市場拡大に期待、「ERC-3525 」正式に承認 What is ERC-3525? The Semi-Fungible Token Standard in blockchain ERC3525 Semi-Fungible Token をソースコードから読み解く - GMO インターネットグループ グルー プ研究開発本部(次世代システム研究室) Reference implimentation BitFlyer report 2022 Solv のProduct 紹介tweet show case SoftBank Technight #10 ERC-3525 semi-fungible token 24

Slide 25

Slide 25 text

ERC-3525 Token 転送パターン (1.token 統合 ) function transferFrom(uint256 _fromTokenId, uint256 _toTokenId, uint256 _value) external payable; SoftBank Technight #10 ERC-3525 semi-fungible token 25

Slide 26

Slide 26 text

ERC-3525 Token 転送パターン (2.token 分割 ) function transferFrom(uint256 _fromTokenId, address _to, uint256 _value) external payable returns (uint256); SoftBank Technight #10 ERC-3525 semi-fungible token 26

Slide 27

Slide 27 text

ERC-3525 Token 転送パターン (3.token 転送 ) token の譲渡(ERC-721 と同様) function transferFrom(address _from, address _to, uint256 _tokenId) external payable; SoftBank Technight #10 ERC-3525 semi-fungible token 27