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

ERC3525 Semi-Fungible token

ERC3525 Semi-Fungible token

https://sbtechnight.connpass.com/event/266723/
2023/01/19(木) 18:50〜
増枠!SoftBank Tech Night #10 Web3.0の実用性を探る
@ソフトバンク

SoftBank Tech Night

January 19, 2023
Tweet

More Decks by SoftBank Tech Night

Other Decks in Technology

Transcript

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

    #10 ERC-3525 semi-fungible token 1
  2. Conetents 1. ERC-3525 とは 2. チケットをサンプル実装してみた 3. 他のToken Standard との違い

    4. ERC-3525 が使われているプロダクト SoftBank Technight #10 ERC-3525 semi-fungible token 2
  3. 1. ERC-3525 とは SoftBank Technight #10 ERC-3525 semi-fungible token 3

  4. はじめに 着目した理由 NFT のブームも下火 NFT のユーティリティを付与する規格に興味 ERC-3525 とは 2022 年9

    月にトークン規格として承認 ERC-721 で代表されるNFT のトークン仕様を強化するもので、 金券や債券などに適したトークン規格 SoftBank Technight #10 ERC-3525 semi-fungible token 4
  5. 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
  6. ERC-3525 データ構造  - トリプルスカラーモデル - <Token ID>,<SLOT>,<VALUE> Token ID: ERC-721(NFT)

    互換の定義 SLOT: メタデータの保持単位。同一のSLOT では、Token は交換可能となる VALUE :数量 SoftBank Technight #10 ERC-3525 semi-fungible token 6
  7. FT, NFT とのデータ構造の違い SoftBank Technight #10 ERC-3525 semi-fungible token 7

  8. 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
  9. 2. チケットシステムのサンプル実装 SoftBank Technight #10 ERC-3525 semi-fungible token 9

  10. ERC-3525 Reference 実装 Solv protocol チームからStarter 記事(2022/12/25 ) 参照実装 Solidity

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

    ERC-3525 semi-fungible token 11
  12. チケットの発行 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
  13. チケットの利用状況の扱い 利用済み等のステートの表現については、工夫が必要 1. Slot の移動を行う。(Slot のメタ情報で管理する) -> Slot ID のUpdate

    でも対応できそうだが、独自拡張? -> Burn とMint で行うほうが、規格を逸脱しない。 2. Burn で表現 -> 利用済みのトークンは残らないが、履歴の記録だけは可能 3. Token のメタデータでステートを表現 -> ERC-3525 のトークンの統合、分割ができなくなるため、仕様のメリット を欠く SoftBank Technight #10 ERC-3525 semi-fungible token 13
  14. チケットの利用状況の表現(サンプル) // 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
  15. ERC-3525 でチケット NFT を表現する利点 チケットの発行都度コントラクトを作成する必要がない メタデータの保持がSlot (チケットの種類)単位なので、エコ NFT の量的な扱いができるようになっているため、保有量に依存したロジック が表現可能に。

    銀のエンゼル5 -> 金のエンゼル1 使用済みチケット 5 枚 -> 新規チケットに交換 トークン単位での状態管理は工夫しだいで対応可能 SoftBank Technight #10 ERC-3525 semi-fungible token 15
  16. 3. 他の Token Standard との違い SoftBank Technight #10 ERC-3525 semi-fungible

    token 16
  17. ERC-1155(Multi-Token standard) 複数のトークンを一つのコントラクトで扱える規格 ユーザごとにトークン単位の保有量を管理するシンプルな規格 ERC-1155 ERC-3525 メリ ット シンプル。複数宛先送信な どガス効率が良い。

    柔軟な仕組み(同一スロットで別のToken を表現)、ERC-721 の 拡張なので、多くのマーケットプレースに出品可。 利用 用途 ブロックチェーンゲームア イテムなど 金融商品、特典付き会員権など SoftBank Technight #10 ERC-3525 semi-fungible token 17
  18. 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
  19. 4 . ERC-3525 が利用されているプロダクト SoftBank Technight #10 ERC-3525 semi-fungible token

    19
  20. Solv protocol 新世代の自作のWeb3 金融アセット( 債券など) を作成、発行、トレードするた めの統合されたマーケット Vesting Voucher ->

    例:ロックされたトークンを時間かけて開放していく証書 SoftBank Technight #10 ERC-3525 semi-fungible token 20
  21. まとめ ERC-3525 は金融商品を表現するために生まれた規格 会員権・チケットなどにも使えそう。(技術的には) さらにERC-721 互換で、既存のNFT マーケットプレイスに展開できるメリッ ト多い Security token

    (証券トークン)、多様な債権(カーボンクレジットとか)、 Token レンタルなど高度なユースケースにおいても活用できるのでは 今後生まれるサービスに注目 SoftBank Technight #10 ERC-3525 semi-fungible token 21
  22. END SoftBank Technight #10 ERC-3525 semi-fungible token 22

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

  24. 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
  25. ERC-3525 Token 転送パターン (1.token 統合 ) function transferFrom(uint256 _fromTokenId, uint256

    _toTokenId, uint256 _value) external payable; SoftBank Technight #10 ERC-3525 semi-fungible token 25
  26. 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
  27. 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