ブロックチェーン入門〜ただしfintechを除く〜
TRANSCRIPT
Blockchain入門〜ただし FinTechを除く〜
2016年 4月 16日株式会社エルブズ/ TIS株式会社
油谷実紀
自己紹介
油谷実紀 (ゆたにみき )株式会社エルブズ 取締役副社長TIS株式会社 フェロー 戦略技術センター長 兼 AI技術推進室長
■「社会性エージェント」の開発とサービス化■AI・ロボット・ IoT・ SDI、認知科学等を用いた ヒューマン・コンピュータ・コミュニケーションの実現■製造業向け生産管理・ EDIシステム構築
Facebook: 油谷実紀Twitter: @blackaplysia
今日おはなしすること
Blockchainは FinTech以外にも使えるのか ?
IBM Blockchainとは何か ? IBM Blockchainを使ってみた (スクショ集 )
Blockchainとは (復習 )
Blockchainは分散台帳技術であるBlockchainは、ピア・ツー・ピアに分散された台帳技術を用いて次世代の取引アプリケーションを実現する
Blockchainは分散台帳技術であるBlockchainは、ピア・ツー・ピアに分散された台帳技術を用いて次世代の取引アプリケーションを実現する
重要な概念ピア・ツー・ピア (peer-to-peer, P2P)
非集中、自律的構成、単一障害点なし 台帳 (ledger)
改竄、盗聴などのセキュリティ対策 取引 (transaction)
ビジネス的にアトミックな処理スマートコントラクト
分散台帳は今までと何が違うのか
ファイル転送
クライアント・サーバ
・一意性低い・効率性低い (同期に時間がかかる )
・単一障害点・攻撃に弱い・スケール問題・オブジェクト単位のアクセス制御
分散台帳とは今までと何が違うのか
分散台帳
・改竄困難・効率的・一意性 ?
Blockchainのメリット信頼性 (trust)→合意プロトコル
胴元がいない複数者間の取引における合意
説明可能性 (accountability)→チェーン 関連のある複数取引の履歴その取引が存在するという証憑
透明性 (transparency)→公開鍵暗号 当事者にはいつでも情報を開示
効率性 (efficiency)→スケールアウトリアルタイム化の要求
非金融における活用
一般的な契約書 (general contract) 存在している事実は公開されるコンテンツセキュリティは今後整理されるブロックチェーンの外部では無価値になるコンテンツでなければならないex. 著作物共有には使えない
プライベート・ブロックチェーンの可能性マーケットプレイスオークション○○株
非金融における活用
Supply Chain Management (SCM) 因果関係のある多数のプロセス
契約に内包することで扱いやすくなるコンテンツ公開・非公開制御の課題
複数企業にまたがる調達プロセスの統合プロセス自動化リアルタイム EDI
→漸くファイルの時代の終焉に向かう ?
Value Chainと Supply Chainの統合ニーズを取り込みプロセスへ反映契約のチェーンによる業務再設計
ADEPT―デバイスデモクラシー IBMが提唱する、数千億個のデバイスが接続し「デバイスデモクラシー」 (デバイス民主主義 )を実現する基盤
出典: IBM(2015), Device democracy. http://public.dhe.ibm.com/common/ssi/ecm/gb/en/gbe03620usen/GBE03620USEN.PDF
ADEPTのデザインADEPTはブロックチェーン自身ではない
相互信用を前提としないピア・ツー・ピアメッセージングシステムブロックチェーンコンテンツハッシュ
分散ファイル共有 P2P型ファイル同期
自律的なデバイス協調・デバイス識別 IoTデバイスをトリガーとするビジネスプロセスの自律実行
ADEPTのアーキテクチャスタック型アーキテクチャ
アプリケーションサービスプロトコル
既存プロジェクトの活用 TeleHash: 暗号化メッシュプロトコル BitTorrent: P2P型ファイル共有 (同期 ) Ethereum: スマートコントラクト
ADEPTとブロックチェーンデバイス間 I/Fをすべて台帳に記録
出典: IBM(2015), Device democracy (Solid 2015). http://www.slideshare.net/_hd/ibm-adept
ADEPTユースケース自律型洗濯機
出典: IBM(2015), Device democracy (Solid 2015). (前掲 )
ADEPTユースケース②自律プロセス (洗剤の自動再発注 )
出典: IBM(2015), Device democracy (Solid 2015). (前掲 )
ADEPTユースケース③自律プロセス (保証書つき部品交換 )
出典: IBM(2015), Device democracy (Solid 2015). (前掲 )
ブロックチェーンの活用についてのまとめ
ブロックチェーンは分散することによるメリットをもった取引台帳
ブロックチェーンは、一般的な契約書やSCM領域においてプロセス管理の手法と組み合わせて活用できる可能性がある
IBMが主導する ADEPTでは、大量の IoTデバイスを繋いだ「デバイスデモクラシー」の時代における、ビジネスプロセスを自律的に実行するプラットフォームの基盤技術としてブロックチェーンを採用している
IBM Blockchainとは何か
IBM Blockchainの実体 IBM Blockchainは Bluemix上のサービス
Labsサービス
IBM Blockchainの実体Labs→Network→Blockchainを追加する
Blockchainサービスが提供するものBlockchainネットワーク
P2P接続された 2サーバ 認証局 (CA) 10ユーザアカウント Open Blockchain (OBC) API
上記の詳細は Bluemix Credentialsに定義されている
Blockchainサービスの peer定義 "peers": [ { "discovery_host": "78c1f7d2-8ee3-4f38-a0a2-1cd6bd19a4b7_vp1-discovery.blockchain.ibm.com", "discovery_port": 30303, "api_host": "78c1f7d2-8ee3-4f38-a0a2-1cd6bd19a4b7_vp1-api.blockchain.ibm.com", "api_port_tls": 443, "api_port": 80, "type": "peer", "network_id": "78c1f7d2-8ee3-4f38-a0a2-1cd6bd19a4b7", "container_id": "76d19b8ccad9cd0a8dda264b6cd5b40cf623d3563fec561030590722d8eb9174", "id": "78c1f7d2-8ee3-4f38-a0a2-1cd6bd19a4b7_vp1", "api_url": "http://78c1f7d2-8ee3-4f38-a0a2-1cd6bd19a4b7_vp1-api.blockchain.ibm.com:80" },{ … } ],
↓サービス UUID
↑APIエンドポイント↑ピア ID
Blockchainサービスの CA定義 "ca": { "78c1f7d2-8ee3-4f38-a0a2-1cd6bd19a4b7_ca": { "url": "78c1f7d2-8ee3-4f38-a0a2-1cd6bd19a4b7_ca-api.blockchain.ibm.com:30303", "discovery_host": "78c1f7d2-8ee3-4f38-a0a2-1cd6bd19a4b7_ca-discovery.blockchain.ibm.com", "discovery_port": 30303, "api_host": "78c1f7d2-8ee3-4f38-a0a2-1cd6bd19a4b7_ca-api.blockchain.ibm.com", "api_port_tls": 30303, "api_port": 80, "type": "ca", "network_id": "78c1f7d2-8ee3-4f38-a0a2-1cd6bd19a4b7", "container_id": "e53c135b9a2c5a1e4395f09ce5ddba589ea8ea18a9d7101b6dd17c0663b13648" } },
Blockchainサービスのユーザ定義 "users": [ { "username": "user_type0_73ab5d57ec", "secret": "ea1745ad13", "enrollId": "user_type0_73ab5d57ec", "enrollSecret": "ea1745ad13" }, … ]
(やる気のない )使い方の説明ほかの Bluemixサービスと同様の手順で使う1. 環境変数から credentialsをとってくる2. Peerの APIエンドポイントを通じてオブジェクト (ブロック等 )を操作する
関連サイトまとめ: Getting Started https://console.ng.bluemix.net/docs/services/
blockchain/index.html
関連ドキュメント・Marblesデモ・ OBC APIリファレンス・ OBCドキュメント・ Hyperledgerサイト
Hyperledger ProjectHyperledger Project
https://www.hyperledger.org/ 先進的なブロックチェーン技術活用提案 Linux Foundation (2015/12~ ) Technical Steering Committee (TSC)
Chairman→IBMエンジニア
Hyperledgerと Open Blockchain (OBC)
fabricリポジトリ→この中に APIが定義されている fabric/core/rest/*.go fabric/docs/API/CoreAPI.md→実体は IBMの Open Blockchain (OBC) https://github.com/openblockchain→その実装例が IBM Blockchain (in Bluemix)
IBM Blockchainサンプルを試す
①Marbles②Commercial Paper
Marblesデモ https://github.com/IBM-Blockchain/marbles https://www.youtube.com/watch?v=HxaO9dCehfI
Marblesデモ IBM DevOps Servicesを使って Bluemixへのデプロイを開始
Bluemix & DevOpsServicesアカウント
https://hub.jazz.net→IBM DevOps Services(CIツールとビジュアルワークフローエディタ )
Marblesデモデプロイ先情報を入力しデプロイ実行
環境を入力・選択・アプリ名・ region・ organization・ space
Marblesデモすべて完了するまで待機・・・
デプロイ進捗状況
Marblesデモ起動する前に Bluemixダッシュボードへ
下へ
MarblesデモBlockchainサービスを選択して・・・
Marblesデモテスト環境をローンチする
Marblesデモここでアプリを呼び出す
MarblesデモMarblesデモを実行
MarblesデモMarblesのブロックを見る
上へ引きずり出すと・・・
ブロックのリストが表示される
MarblesデモMonitorで全体の動作状況を確認
ネットワークに所属する各ピア、CAの稼働状況とログ
MarblesデモBlockchainタブで統計情報と詳細を確認
統計情報
下へスクロールすると・・・
Marblesデモブロックの中身を取り出して表示
各ブロックの詳細が出てくる
Marblesデモいくつかmarblesを作成し売買を実行
Marbleの生成
ドラッグで売買(オーナー移転 )
ブロックチェーンが成長
Marblesデモブロックの成長→ payloadには詳細を記録
Commercial PaperデモCommercial Paper (約束手形 )の売買デモ
Commercial Paperデモ約束手形のサンプルCUSIP: user_type0_f0dd25b7ff000ADTTICKER: TICKER0PAR: $100,000.00QTY: 1DISCOUNT: 3.25MATURITY: 15ISSUER: user_type0_f0dd25b7ffOWNER: user_type0_f0dd25b7ff
Commercial PaperデモMonitorは同一 URL
Open Blockchain (OBC) REST API一覧
最新の OBCドキュメントでは APIが若干異なっているex. /devops/*は deprecatedとなり /chaincodeに統一https://github.com/hyperledger/fabric/blob/master/docs/API/CoreAPI.md
API 意味GET /chain/blocks/{Block} Block情報を取得GET /chain Blockchain情報を取得POST /devops/deploy ChaincodeのデプロイPOST /devops/invoke Chaincodeの呼び出しPOST /devops/query Chaincodeステータスの取得POST /registrar CAへのユーザ登録DELETE /registrar/{enrollmentID} ローカルユーザログイントークン削除
GET /registrar/{enrollmentID} CAに対するユーザ登録確認GET /registrar/{enrollmentID}/ecert ユーザ証明取得
GET /transactions/{UUID} トランザクションのコンテンツを取得
APIといえば Curl(/chain)$ curl -s https://233395ed-76cf-40ec-be94-9c497522338a_vp1-api.blockchain.ibm.com:443/chain | jq .{ "previousBlockHash": "7Td70mg+zq26FM498iMjLDqbqnC5N2GQuP+3aLXXKbICMk3WNGTBluCYTbgp1SIJ25nOWTr4iZ7MoTwekwyuYQ==", "currentBlockHash": "forzyFK3efLnEY/oYoMd0i/z/S3VxORyfVmDAjh1jCFaNPDqPq6oKRJFbPA3NJ+049VVImaN0wTDImoRJrn/mA==", "height": 6}
APIといえば Curl(/chain/block)$ curl -s https://233395ed-76cf-40ec-be94-9c497522338a_vp1-api.blockchain.ibm.com:443/chain/blocks/5 | jq .{ "nonHashData": { "localLedgerCommitTimestamp": { "nanos": 322162294, "seconds": 1460632589 } }, "previousBlockHash": "7Td70mg+zq26FM498iMjLDqbqnC5N2GQuP+3aLXXKbICMk3WNGTBluCYTbgp1SIJ25nOWTr4iZ7MoTwekwyuYQ==", "stateHash": "XZU7PA0IQtscLxXGOdqWxC5lWAvfDZjkTl1uQvNbqV9iirs95hL+svI7yuHxIxxYVnVo+x4lM9gNVPC7UZ7T1g==",
APIといえば Curl(/chain/block②)"transactions": [ { "signature": "MEUCIEpiea1anNgnJkE920H6iH31yRfHY+OCzeqk2B87HG9LAiEAhQ4fr7Ya2Bk5rMJHCmRf6KDZg0c6VocCC7v4N+9eZOI=", "cert": "MIIB0TCCAXigAwIBAgIBATAKBggqhkjOPQQDAzApMQswCQYDVQQGEwJVUzEMMAoGA1UEChMDSUJNMQwwCgYDVQQDEwN0Y2EwHhcNMTYwNDE0MTEwMTQ4WhcNMTYwNzEzMTEwMTQ4WjA7MQswCQYDVQQGEwJVUzEMMAoGA1UEChMDSUJNMR4wHAYDVQQDDBV1c2VyX3R5cGUxX2NkZTM0MjM0MDkwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATdC2eSw4E7X9tWtiAMeWciExndddZ5IR3vGjm9V0qfMr2NY/b28CyCBRy7hABHQ322Wi3T9m2Me3Si0JBHp6Zgo38wfTAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADANBgNVHQ4EBgQEAQIDBDAPBgNVHSMECDAGgAQBAgMEMD0GBioDBAUGBwEB/wQwsjbNGu6tgOTY0gjAaeO0nTxRbkxjG+HlEfMFuEbwawNdLTclsdQ09HbERutrzC01MAoGCCqGSM49BAMDA0cAMEQCICHXqBTxT4DqiwvYp9Q9PqhcECtOrAnXwI00s3AYAkHCAiA8fQ5wiMosygt0Xlh2HbZ37JnEKRQCE6fp6FaTrxow4g==",
APIといえば Curl(/chain/block③) "timestamp": { "nanos": 291041833, "seconds": 1460632588 }, "uuid": "96d4e155-1dcd-4930-a40a-012ebda88532", "payload": "CrIBCAESgwESgAFjNTE4MWIyZWNkMGMyOTFkM2JkYzY5MjkyMWJhNjVlNThkNTAyYWEzNWRiMmEwNjUzOWU4YTQxMzk4NTQ4ZjMwYzc2OTkwNTQ0ZjJlZGNjMTBiYTRkMjU2MjFkZDFlZjdlNGM5ZjA0Y2NhYjFiOTA3ZGRjNjkxNGMzYmMzOWE2NBooCgtpbml0X21hcmJsZRIHcmduZDI4OBIFd2hpdGUSAjE2EgVsZXJveQ==", "chaincodeID": "EoABYzUxODFiMmVjZDBjMjkxZDNiZGM2OTI5MjFiYTY1ZTU4ZDUwMmFhMzVkYjJhMDY1MzllOGE0MTM5ODU0OGYzMGM3Njk5MDU0NGYyZWRjYzEwYmE0ZDI1NjIxZGQxZWY3ZTRjOWYwNGNjYWIxYjkwN2RkYzY5MTRjM2JjMzlhNjQ=", "type": 3 }]}
APIといえば Curl(/transactions)$ curl -s https://233395ed-76cf-40ec-be94-9c497522338a_vp1-api.blockchain.ibm.com:443/transactions/96d4e155-1dcd-4930-a40a-012ebda88532 | jq .{ "signature": "MEUCIEpiea1anNgnJkE920H6iH31yRfHY+OCzeqk2B87HG9LAiEAhQ4fr7Ya2Bk5rMJHCmRf6KDZg0c6VocCC7v4N+9eZOI=", "cert": (…)", "timestamp": { "nanos": 291041833, "seconds": 1460632588 }, "uuid": "96d4e155-1dcd-4930-a40a-012ebda88532", "payload": "CrIBCAESgwESgAFjNTE4MWIyZWNkMGMyOTFkM2JkYzY5MjkyMWJhNjVlNThkNTAyYWEzNWRiMmEwNjUzOWU4YTQxMzk4NTQ4ZjMwYzc2OTkwNTQ0ZjJlZGNjMTBiYTRkMjU2MjFkZDFlZjdlNGM5ZjA0Y2NhYjFiOTA3ZGRjNjkxNGMzYmMzOWE2NBooCgtpbml0X21hcmJsZRIHcmduZDI4OBIFd2hpdGUSAjE2EgVsZXJveQ==", "chaincodeID": "EoABYzUxODFiMmVjZDBjMjkxZDNiZGM2OTI5MjFiYTY1ZTU4ZDUwMmFhMzVkYjJhMDY1MzllOGE0MTM5ODU0OGYzMGM3Njk5MDU0NGYyZWRjYzEwYmE0ZDI1NjIxZGQxZWY3ZTRjOWYwNGNjYWIxYjkwN2RkYzY5MTRjM2JjMzlhNjQ=", "type": 3}
APIといえば Curl(/transactions②) "payload": "CrIBCAESgwESgAFjNTE4MWIyZWNkMGMyOTFkM2JkYzY5MjkyMWJhNjVlNThkNTAyYWEzNWRiMmEwNjUzOWU4YTQxMzk4NTQ4ZjMwYzc2OTkwNTQ0ZjJlZGNjMTBiYTRkMjU2MjFkZDFlZjdlNGM5ZjA0Y2NhYjFiOTA3ZGRjNjkxNGMzYmMzOWE2NBooCgtpbml0X21hcmJsZRIHcmduZDI4OBIFd2hpdGUSAjE2EgVsZXJveQ==", "chaincodeID": "EoABYzUxODFiMmVjZDBjMjkxZDNiZGM2OTI5MjFiYTY1ZTU4ZDUwMmFhMzVkYjJhMDY1MzllOGE0MTM5ODU0OGYzMGM3Njk5MDU0NGYyZWRjYzEwYmE0ZDI1NjIxZGQxZWY3ZTRjOWYwNGNjYWIxYjkwN2RkYzY5MTRjM2JjMzlhNjQ=", "type": 3}
(推測 )マーシャリング ×base64エンコード
APIといえば Curl(/users)# ログイン状態の確認$ curl -s https://a95743bd-a524-40e7-a009-1176ccd2dba0_vp1-api.blockchain.ibm.com:443/registrar/user_type2_1b0bcc27a9 | jq .{ "Error": "User user_type2_1b0bcc27a9 must log in."}
# ログイン (レジストラへの登録 )$ curl -s -X POST -H 'Content-Type: application/json' \-d '{"enrollId": "user_type2_1b0bcc27a9", "enrollSecret": "9f830a5c39" }' \https://a95743bd-a524-40e7-a009-1176ccd2dba0_vp1-api.blockchain.ibm.com:443/registrar | jq .{ "OK": "Login successful for user 'user_type2_1b0bcc27a9'."}
APIといえば Curl(/users②)# 証明書の取得$ curl -s https://a95743bd-a524-40e7-a009-1176ccd2dba0_vp1-api.blockchain.ibm.com:443/registrar/user_type2_1b0bcc27a9/ecert | jq .{ "OK": "-----BEGIN+CERTIFICATE-----%0AMIIBojCCAUmgAwIBAgIBATAKBggqhkjOPQQDAzApMQswCQYD…qJFA%3D%0A-----END+CERTIFICATE-----%0A"}
# ログアウト (レジストラへの登録削除 )$ curl -s -X DELETE https://a95743bd-a524-40e7-a009-1176ccd2dba0_vp1-api.blockchain.ibm.com:443/registrar/user_type2_1b0bcc27a9 | jq .{ "OK": "Deleted login token and directory for user user_type2_1b0bcc27a9."}
IBM Blockchainのまとめ IBM Blockchainは、 Linux Foundationによる Hyperledger Projectに IBMが提供した Open Blockchain (OBC) APIの実装である
Marblesと Commercial Papersのデモは実際の取引を行うアプリと、取引状況を確認するモニタから構成されている
最後に
TIS/エルブズでは、以下のような方を常時募集しています。 自然言語処理や感情認識等に詳しい方
(とくに対話コーパス作成 )ロボットアプリケーション開発
(ROS等 )の経験者 本日 ADEPTのアプローチに興味を持ち、ブロックチェーンで新しい SCM/EDIプラットフォームを作りたいと思った方←New☆
興味のある方は@blackaplysiaまで !