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

リアルとデジタルをつなぐ、Web3社会実装への取り組み

 リアルとデジタルをつなぐ、Web3社会実装への取り組み

2023年3月16日に開催された「SoftBank Tech Night Fes 2023」の講演資料です。

NFT取引高の減少、長期に渡る暗号資産価格の低迷、LUNAの崩壊、FTXの経営破綻。昨今、「暗号資産の冬」と呼ぶにふさわしい、厳しい環境にクリプト界隈は置かれています。しかし、そんな時だからこそ、数年後の春を見越してWeb3の実用性・可能性を探る活動を虎視眈眈と続けています。今回は、そんな活動の一端をご紹介します。
- OracleとDynamicNFTを組み合わせた検証
- SBT化によって"もぎり"を再現する「チケットNFT」の検証

■関連スライド
・Uniswapで理解するWeb3の仕組み
https://speakerdeck.com/sbtechnight/uniswapdeli-jie-suruweb3falseshi-zu-mi

・チケットNFTの仕組み
https://speakerdeck.com/sbtechnight/tiketutonftnoshi-zu-mi
 

■作成者
小倉 聡司(おぐら さとし)
ソフトバンク株式会社
テクノロジーユニット サイバーセキュリティ本部 Payment連携開発部
Blockchain Researcher / Engineer

■SoftBank Tech Nightについて
ソフトバンク株式会社のエンジニア有志が開催するテックイベントです。
各分野のエキスパートが、日頃培った技術や事例、知見について発信しています。
イベントは開催スケジュールはconnpassをご確認ください。
https://sbtechnight.connpass.com/

SoftBank Tech Night Fes 2023公式サイト
https://www.softbank.jp/biz/events/tech-night-fes-2023/

SoftBank Tech Night

March 16, 2023
Tweet

More Decks by SoftBank Tech Night

Other Decks in Technology

Transcript

  1. ライフサイクル 譲渡/転売 受取/購入 チケットの入手 提示 チケットの使用 参加証明 チケットの保管 Walletアドレス に一括mint

    NFTとして 自由な流通 専用サイトで もぎり同意 NFTのSBT化 専用サイトで 所有証明 NFT SBT もぎり 自由な2次流通 偽物と本物を判別可 チケットの使用可不可を判別可 参加証明 参加者限定の特典享受 = POAP と同様 ※様々実装が考えられる中で、自分たちが「良さそう」と考えた仕様 7
  2. NFT Non-Fungible Token コンセプト デジタル所有権 「私がそれを所有している」の証明 特徴 On Chain :

    MappingData管理 : 譲渡機能等提供 Off Chain : MetaData保存 仕様 ERC-721 ※公式 EIPS ※OpenZeppelin サンプル実装 NFT とは Blockchain Wallet 分散型ストレージ (IPFS) tokenURI = ipfs://{CID} ※通信はしません State (MappingData) key value walletAddress tokenId tokenId tokenURI Content (MetaData) key value CID image: .., title: .., description: .., 誰が何を持ってるか NFTのMetaDataがどこにあるか NFT毎のMetaData 参照 トランザクション実行 NFTのMetaData取得 ※最も一般的なNFTの構成の場合 8
  3. SBT Soul Bound Token コンセプト Web3における 「社会的アイデンティティ」の創出 用途 ユーザの資格・履歴の証明 (=信用創造)

    仕様 NFT & 譲渡不可 SBT とは 信用ある 機関 ある人の ウォレット (Soul) 出生/卒業/資格 証明書SBT etc SBT 発行 SBT 参照 第三者 信頼できる! 9
  4.  NFT POAP とは POAP(ポープ) Proof of Attendance Protocol ※社名でもある コンセプト

    デジタル記念品として思い出を残す ”あなたの人生のブックマーク” 用途 イベントに参加したことの証明 保有者限定の特典を享受 仕様 ERC721を継承 “pause”機能を追加(=SBT化機能) ※ソースコード  SBT ( ≒ POAP) ※POAPはSBTの一種 10
  5. ユーザ/スタッフ用画面 OneTimeToken OneTimeToken生成 もぎり処理キック ソフトバンク サーバー Polygon The Graph IPFS

    ERC721 Token毎の譲渡可不可 ERC721 ユーザの署名検証 譲渡可不可チェック/変更 イベントコントラクト生成履歴 チケット生成/譲渡/使用履歴 EventをEntityとしてストア イベント情報 チケット情報 NFT MetaDataのストア データ 機能 MetaMask 仕組み|全体像 データの流れ ※ソフトバンクサーバに重要な情報を保持しない 11
  6. ユーザ/スタッフ用画面 OneTimeToken OneTimeToken生成 もぎり処理キック ソフトバンク サーバー Polygon The Graph IPFS

    ERC721 Token毎の譲渡可不可 ERC721 ユーザの署名検証 譲渡可不可チェック/変更 イベントコントラクト生成履歴 チケット生成/譲渡/使用履歴 EventをEntityとしてストア イベント情報 チケット情報 NFT MetaDataのストア データ 機能 MetaMask 仕組み|もぎり データの流れ ※ソフトバンクサーバに重要な情報を保持しない 13
  7. ソフトバンク サーバー MetaMask OneTimeToken 生成 OneTimeToken 署名 「チケット使用」タップ OneTimeTokenに署名 OneTimeToken

    存在チェック QRスキャン (スタッフ) OneTimeToken署名検証 transferabilityをfalseに変更 OneTimeToken 検証 「チケット使用完了」 画面チェック ユーザ/スタッフ (ブラウザ) 仕組み|もぎり|処理詳細 ※ユーザ側でチケットを  使用する処理がスタート Polygon 14
  8. 仕組み|もぎり|Solidity import "@openzeppelin/…/ERC721.sol"; import "@openzeppelin/…/AccessControlEnumerable.sol"; contract EventTicket is ERC721, AccessControlEnumerable

    { mapping(uint256 => bool) transferability; function disableTransferability(tokenId, oneTimeToken, signature) onlyRole(STAFF) { address signer = getSigner(tokenId, oneTimeToken, signature); require(signer == ownerOf(tokenId)); transferability[tokenId] = false; } function _beforeTokenTransfer(from, to, tokenId, batchSize) { require(transferability[tokenId] == true); super._beforeTokenTransfer(from, to, tokenId, batchSize); } … } ・OpenZeppelinのERC721を継承 ・transferability で譲渡可不可管理 ・管理者のみSBT化可能  ※ただしNFT所有者の署名が必要 ・Transfer前には transferability チェック 15
  9. ユーザ/スタッフ用画面 OneTimeToken OneTimeToken生成 もぎり処理キック ソフトバンク サーバー Polygon The Graph IPFS

    ERC721 Token毎の譲渡可不可 ERC721 ユーザの署名検証 譲渡可不可チェック/変更 イベントコントラクト生成履歴 チケット生成/譲渡/使用履歴 EventをEntityとしてストア イベント情報 チケット情報 NFT MetaDataのストア データ 機能 MetaMask 仕組み|データ データの流れ ※ソフトバンクサーバに重要な情報を保持しない 17
  10. IPFS | エコシステム(Filecoin) IPFSノード C IPFSノード B IPFSノード A (Pinata)

    Developer (Uniswap Labs) リソース提供者 (IPFSノード運用) Pin ユーザ (トレーダー/流動性供給者) メリット - 耐障害性 - 負荷分散 - 耐検閲性 - 耐改ざん性 静的コンテンツ (React) ipfs://baf…mxi 20
  11. The Graph | エコシステム Developer (Uniswap Labs) subgraph リソース提供者 (Graphノード運用)

    ユーザ (トレーダー/流動性提供者) 静的コンテンツ (React) 21
  12. The Graph | How it works ユーザ (トレーダー/流動性提供者) 静的コンテンツ (React)

    Token DayData Pair DayData Uniswap DayData Token Pair Uniswap Factory Swap Burn Mint Block Block … receiptsRoot … Rc Rc Receipt Block log Transfer Event Transfer Event Sync Event Swap Event Entity Mapping GraphQL Graphノード Ethereumノード 22
  13. ※ 「Blockchain Data」は、Contract Accountのステート(storageに保持されるデータ)を指す ※ EthereumのFull Nodeでは、最新の128blockしかステートが保持されない   Archive Nodeを参照することで、過去の全ステートを参照することは可能

    ユーザが”欲しいデータ”を”取得しやすい手段”で提供する The Graph | 存在理由 Blockchain Data (Ethereum上のステート) Indexed Data (TheGraph上のデータ) データの中身 基本データ 基本データ + 加工済みデータ データの時制 基本的に”現在”の値のみ 加工(保持)の仕方次第で “過去”も可能 Queryの利便性 コントラクトのFunction依存 基本的にGetterのみ GraphQL APIで可能な検索 Sort, Filter, etc Blockchain DataとIndexed Dataの比較 23
  14. 仕組み|データ|チケット詳細画面 種類 カテゴリ 静的/動的 サービス イベント タイトル 静的データ IPFS 概要

    コントラクト チケット 画像 概要 使用可不可 動的データ The Graph 使用日時 譲渡履歴 チケット詳細画面 24
  15. 仕組み|データ|リンク集 サービス 項目 URL Polygon EventFactoryContract https://polygonscan.com/address/0x3a62034cfd491a67085f207d2e4d7e3c1d716680 Polygon EventContract https://polygonscan.com/address/0x0b0349E9E9A20462e3E274f8b43BCA79C7932Fb5

    The Graph apollo_event https://thegraph.com/hosted-service/subgraph/oguras48/apollo_event IPFS baseURI https://cloudflare-ipfs.com/ipfs/QmSJrw8BotEDjeUBm7w6afS4wnbSpznG5C4ji4PfhMhCZa IPFS Ticket No.0 MetaData https://cloudflare-ipfs.com/ipfs/QmSJrw8BotEDjeUBm7w6afS4wnbSpznG5C4ji4PfhMhCZa/0 IPFS Ticket No.0 Image https://cloudflare-ipfs.com/ipfs/Qmd9TdzgLzTEFurxks1n7jxJ3DLTHfSbW1PDrp7rhSpnct データはパブリックにあり誰でも参照可能 25
  16. チケットNFT|工夫点等まとめ 1 デザイン NFTとして発行、”もぎり”でSBT化 メリット NFTの良さを享受しつつ、SBTの良さも享受する 思想 リアルなチケットの動きのイメージに近づけたかった 懸念点 “もぎり”処理が遅延する可能性

    ※処理速度がBlockchainに依存するため デザイン QRを介して、“もぎり”結果を双方に通知  双方 … ユーザ & スタッフ メリット そのユーザの所有するチケットNFTが 確かに使用されたことを双方で確かめられる 工夫点 QRのスクショ共有では不正使用できない仕組み デザイン SoftBankサーバに重要な情報を保持しない  主要な情報 Polygon, IPFS  付帯 情報 The Graph 思想 データはユーザのもの 反省点 できればSoftBankサーバもなくしたい 26
  17. チケットNFT|工夫点等まとめ 2 デザイン ユーザがチケットを渡す  =もぎりへの同意  =OneTimeTokenへの署名 メリット ユーザの署名なしでは勝手にSBT化できない Blockchain上にも”ユーザの同意”ログを残せる 個人的懸念点

    Solidity上でOneTimeTokenの証明検証ってどうなん? 他のデザイン案 ユーザに“もぎりへのApprove”をしてもらう デザイン スタッフがもぎる  =管理者のみSBT化可能 メリット 運営側でSBT化のトランザクションを 起こすため、ユーザに手数料はかからない 課題 スループットが運営側の鍵数に依存する デザイン チケットNFTを応用した仕組みでSBTの所有確認が可能 メリット 目の前にいる人が確かに所有していることを確認可能 課題 ウォレット自体を誰かと交換されると気が付けない 協業 tokenproofがVCでNFTの所有を証明する仕組みを開発 27
  18. 地点Cを再訪問 スタンプラリーNFT サービス概要 地点A 地点B1 地点C mint transform 1 transform 2

    天候・時間・レアリティで変化 1 訪問場所で変化 訪問回数で変化 2 3 地点B3にいること 地点B2にいること 地点Cを再訪問 ・各地点でNFTをmint ・条件を満たすことでNFTが  変化(transform)したりする 30
  19. 本日のまとめ チケットNFT スタンプラリーNFT NFT→SBT Oracle & dNFT 33 チケットNFTのサービス概要 仕組みの詳細

    利用したサービスのサービス概要 サービスと仕組みの概要 次回勉強会の宣伝
  20. DAO はじめます Purpose • チケットNFT所有者 ※SBグループメンバー多め(たぶん • NFT・DAOの実験 • オープンイノベーション

    • 技術の無駄遣い(実験的開発) • 勉強会開催 What • コミュニケーションはDiscord ※SoftBank Tech Night用  チケットNFTで所有認証を行う How Member • 細部はまだ考えてません やりながら考えましょ • 詳細は小倉のTwitterで連絡予定 小倉アカ @o3osatoshi • 本活動は小倉がプライベートで 取り組むものであり、 会社は一切関係ありません Caution 35