Slide 1

Slide 1 text

SoftBank Tech Night Fes 2023 リアルとデジタルをつなぐ、 Web3社会実装への取り組み 氏名 小倉 聡司 日時 2023.03.16 14:00〜14:25 場所 東京都港区海岸一丁目7番1号 Welcome

Slide 2

Slide 2 text

自己紹介 氏名 小倉 聡司 経歴 2016年新卒でSoftBank入社 業務 2017〜 HIVEX向けGateway開発 2021〜 Blockchain R&D 2021〜 事業の種探し SNS Twitter @o3osatoshi 2

Slide 3

Slide 3 text

本日のゴール 便利かも! 面白そう! よくわからん 3

Slide 4

Slide 4 text

本日のトピック チケットNFT スタンプラリーNFT NFT→SBT Oracle & dNFT 4

Slide 5

Slide 5 text

本日のトピック チケットNFT スタンプラリーNFT NFT→SBT Oracle & dNFT 5

Slide 6

Slide 6 text

なぜ チケットNFT なのか 現実世界で役立てたい NFTの活用がキー 投機とは無縁に “価値ある紙”の代替 一般の人が利用し、発行に法的ハードルが低いもの = チケット 6

Slide 7

Slide 7 text

ライフサイクル 譲渡/転売 受取/購入 チケットの入手 提示 チケットの使用 参加証明 チケットの保管 Walletアドレス に一括mint NFTとして 自由な流通 専用サイトで もぎり同意 NFTのSBT化 専用サイトで 所有証明 NFT SBT もぎり 自由な2次流通 偽物と本物を判別可 チケットの使用可不可を判別可 参加証明 参加者限定の特典享受 = POAP と同様 ※様々実装が考えられる中で、自分たちが「良さそう」と考えた仕様 7

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

SBT Soul Bound Token コンセプト Web3における 「社会的アイデンティティ」の創出 用途 ユーザの資格・履歴の証明 (=信用創造) 仕様 NFT & 譲渡不可 SBT とは 信用ある 機関 ある人の ウォレット (Soul) 出生/卒業/資格 証明書SBT etc SBT 発行 SBT 参照 第三者 信頼できる! 9

Slide 10

Slide 10 text

 NFT POAP とは POAP(ポープ) Proof of Attendance Protocol ※社名でもある コンセプト デジタル記念品として思い出を残す ”あなたの人生のブックマーク” 用途 イベントに参加したことの証明 保有者限定の特典を享受 仕様 ERC721を継承 “pause”機能を追加(=SBT化機能) ※ソースコード  SBT ( ≒ POAP) ※POAPはSBTの一種 10

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

Ticketもぎり デモ動画 12

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

ソフトバンク サーバー MetaMask OneTimeToken 生成 OneTimeToken 署名 「チケット使用」タップ OneTimeTokenに署名 OneTimeToken 存在チェック QRスキャン (スタッフ) OneTimeToken署名検証 transferabilityをfalseに変更 OneTimeToken 検証 「チケット使用完了」 画面チェック ユーザ/スタッフ (ブラウザ) 仕組み|もぎり|処理詳細 ※ユーザ側でチケットを  使用する処理がスタート Polygon 14

Slide 15

Slide 15 text

仕組み|もぎり|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

Slide 16

Slide 16 text

仕組み|もぎり|Solidityに”もぎり”の再現 ユーザ スタッフ 手渡す → もぎり同意 もぎる → もぎり実行 oneTimeToken への署名検証 管理者のみ SBT化可能 解釈 スマコン 表現 16

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

The Graph や IPFS は前々回TechNightで説明しました そこから数ページ抜粋します https://speakerdeck.com/sbtechnight/uniswapdeli-jie-suruweb3falseshi-zu-mi 仕組み|データ|The Graph & IPFS 18

Slide 19

Slide 19 text

HTTP(ロケーション指向型プロトコル) IPFS(コンテンツ指向型プロトコル) IPFS | とは HTTPの補完/置換をするコンテンツ指向型プロトコル https://hogehoge.com/aaa/hello.html の hello.htmlファイル aaaディレクトリ hogehoge.comサーバ の ipfs://bafybeietctxou4mhqdqfacncf33lvqurrctxzegbezy7nshrtv2tzvymxi 中身がこのハッシュ値(CID)のファイル 19

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

The Graph | エコシステム Developer (Uniswap Labs) subgraph リソース提供者 (Graphノード運用) ユーザ (トレーダー/流動性提供者) 静的コンテンツ (React) 21

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

※ 「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

Slide 24

Slide 24 text

仕組み|データ|チケット詳細画面 種類 カテゴリ 静的/動的 サービス イベント タイトル 静的データ IPFS 概要 コントラクト チケット 画像 概要 使用可不可 動的データ The Graph 使用日時 譲渡履歴 チケット詳細画面 24

Slide 25

Slide 25 text

仕組み|データ|リンク集 サービス 項目 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

Slide 26

Slide 26 text

チケットNFT|工夫点等まとめ 1 デザイン NFTとして発行、”もぎり”でSBT化 メリット NFTの良さを享受しつつ、SBTの良さも享受する 思想 リアルなチケットの動きのイメージに近づけたかった 懸念点 “もぎり”処理が遅延する可能性 ※処理速度がBlockchainに依存するため デザイン QRを介して、“もぎり”結果を双方に通知  双方 … ユーザ & スタッフ メリット そのユーザの所有するチケットNFTが 確かに使用されたことを双方で確かめられる 工夫点 QRのスクショ共有では不正使用できない仕組み デザイン SoftBankサーバに重要な情報を保持しない  主要な情報 Polygon, IPFS  付帯 情報 The Graph 思想 データはユーザのもの 反省点 できればSoftBankサーバもなくしたい 26

Slide 27

Slide 27 text

チケットNFT|工夫点等まとめ 2 デザイン ユーザがチケットを渡す  =もぎりへの同意  =OneTimeTokenへの署名 メリット ユーザの署名なしでは勝手にSBT化できない Blockchain上にも”ユーザの同意”ログを残せる 個人的懸念点 Solidity上でOneTimeTokenの証明検証ってどうなん? 他のデザイン案 ユーザに“もぎりへのApprove”をしてもらう デザイン スタッフがもぎる  =管理者のみSBT化可能 メリット 運営側でSBT化のトランザクションを 起こすため、ユーザに手数料はかからない 課題 スループットが運営側の鍵数に依存する デザイン チケットNFTを応用した仕組みでSBTの所有確認が可能 メリット 目の前にいる人が確かに所有していることを確認可能 課題 ウォレット自体を誰かと交換されると気が付けない 協業 tokenproofがVCでNFTの所有を証明する仕組みを開発 27

Slide 28

Slide 28 text

本日のトピック チケットNFT スタンプラリーNFT NFT→SBT Oracle & dNFT 28

Slide 29

Slide 29 text

現在開発中 本日は概要だけご説明します 29

Slide 30

Slide 30 text

地点Cを再訪問 スタンプラリーNFT サービス概要 地点A 地点B1 地点C mint transform 1 transform 2 天候・時間・レアリティで変化 1 訪問場所で変化 訪問回数で変化 2 3 地点B3にいること 地点B2にいること 地点Cを再訪問 ・各地点でNFTをmint ・条件を満たすことでNFTが  変化(transform)したりする 30

Slide 31

Slide 31 text

スタンプラリーNFT 仕組み概要 ソフトバンク サーバー Polygon Chainlink IPFS 位置情報 GPS mint transform on chain off chain リアル デジタル 31

Slide 32

Slide 32 text

各サービス・仕組みの詳細が気になる方 ぜひ次回のWeb3勉強会にご参加ください チケットNFTのように スタンプラリーNFT(Oracle & dNFT)体験を提供予定です ※シナリオは体験しやすいものに変更見込みです 32 \お楽しみに!/

Slide 33

Slide 33 text

本日のまとめ チケットNFT スタンプラリーNFT NFT→SBT Oracle & dNFT 33 チケットNFTのサービス概要 仕組みの詳細 利用したサービスのサービス概要 サービスと仕組みの概要 次回勉強会の宣伝

Slide 34

Slide 34 text

One more thing...

Slide 35

Slide 35 text

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