Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

BMXUG女子部 ブロックチェーン

378 views

Published on

2018/08/17 BMXUG 女子部勉強会資料 ブロックチェーン体験

Published in: Business
  • Be the first to comment

BMXUG女子部 ブロックチェーン

  1. 1. BMXUG女子部勉強会 ブロックチェーン体験 ブロックを作って、チェーンでつないで、理解しよう! IBM クラウドガレージ 木村 桂
  2. 2. ブロックチェーンと IBM Cloud との関わり オープンソースのブロックチェーンプラットフォーム製品を開発/提供オープンソースのブロックチェーンプラットフォーム製品を開発/提供オープンソースのブロックチェーンプラットフォーム製品を開発/提供オープンソースのブロックチェーンプラットフォーム製品を開発/提供 IBM Cloud からマネージドサービスを提供からマネージドサービスを提供からマネージドサービスを提供からマネージドサービスを提供
  3. 3. ブロックチェーンとは
  4. 4. ¥500,000 ¥1,000,000 + 保証保証保証保証 + 安心安心安心安心 + 価格価格価格価格 - 保証保証保証保証 - 安心安心安心安心 - 価格価格価格価格 もしも絶対に本物だという保証があったら・・・もしも絶対に本物だという保証があったら・・・もしも絶対に本物だという保証があったら・・・もしも絶対に本物だという保証があったら・・・ ブロックチェーンブロックチェーンブロックチェーンブロックチェーン
  5. 5. 今日お伝えしたいこと • ブロックチェーンを使った上でただしく理解してほしい • ブロックチェーンはどんな用途に向くのか/向かないのか、それは 何故か、を考えるために必要な知識を付けて欲しい • (エンジニアとして)自分だったらブロックチェーンでどんなものを作っ てみたいか、を考えるための基礎を身に付けてほしい
  6. 6. アジェンダ • 「ブロックチェーン」とは? • 「ブロック」と「チェーン」 • 改竄が難しい理由 • ブロックチェーンを体験する • ブロックが次々に繋がる様子を実際に体験する • ブロックチェーン・ユースケース • ???? • Hyperledger Composer Playground で開発体験
  7. 7. 「ブロックチェーン」? セキュリティ 分散台帳 非中央集権 コンセンサス・アルゴリズム ビットコイン 改竄困難 仮想通貨
  8. 8. ブロックチェーンネットワーク 台帳A 台帳B 台帳C 台帳D 台帳E 台帳F 台帳 台帳 台帳 台帳 台帳 台帳 管理台帳 YES YES YES YES YES NO (従来の台帳管理) 分散台帳ネットワーク分散台帳ネットワーク分散台帳ネットワーク分散台帳ネットワーク コンセンサスコンセンサスコンセンサスコンセンサス ブロックチェーンによる台帳管理ブロックチェーンによる台帳管理ブロックチェーンによる台帳管理ブロックチェーンによる台帳管理 YES 非中央集権非中央集権非中央集権非中央集権
  9. 9. 「ブロック」と「チェーン」によるデータ格納 ブロック0ブロック0ブロック0ブロック0 0JEEICIS1… ブロック1ブロック1ブロック1ブロック1 17YFFO327… 0JEEICIS1… ブロック2ブロック2ブロック2ブロック2 2FJHN7WC8… 17YFFO327… ブロック3ブロック3ブロック3ブロック3 3TVUNIERC… 2FJHN7WC8… 1つ前のブロックのハッシュ値 1つ前のブロックのハッシュ値と、 自分が持っている値と、タイムスタンプと、・・・ から生成したハッシュ値 (ハッシュ値)
  10. 10. ブロックチェーンの「ハッシュ」値 • 文字列や画像などのデータを「一定の法則で」短く作り直したもの • 作り直す過程を処理する部分を「ハッシュ関数」と呼ぶ • 入力情報が大きくても小さくても、同じ長さの文字列が実行結果として得られ る • 同じ入力情報に対しては、再度実行しても同じ結果になる(乱数ではない) • 実行結果から入力情報を逆計算することは(ほぼ)不可能 ブロックチェーンではハッシュ値に更に条件を付けることもブロックチェーンではハッシュ値に更に条件を付けることもブロックチェーンではハッシュ値に更に条件を付けることもブロックチェーンではハッシュ値に更に条件を付けることも • ハッシュ値の計算にデータと、日付時刻と、整数(1~)を入力 • ハッシュ値の結果の頭3桁が "000" になった場合のみ採用、 • ならなかったら整数を1つ増やして "000" になるまで再実行を繰り 返す
  11. 11. ブロックチェーンを(不正に)書き換えるには 0JEEICIS1… 0JEEICIS1… 17YFFO327… 17YFFO327… 2FJHN7WC8… 2FJHN7WC8… 矛盾矛盾矛盾矛盾 18YFFO327… 矛盾矛盾矛盾矛盾 18YFFO327… 矛盾矛盾矛盾矛盾 20JHN7WC8… 矛盾矛盾矛盾矛盾 20JHN7WC8… 多数決で矛盾多数決で矛盾多数決で矛盾多数決で矛盾 過半数ノード内の各ブロックの値を同時に書き換える必要があり、 これは事実上不可能事実上不可能事実上不可能事実上不可能
  12. 12. ブロックチェーンの挙動デモ https://blockchaindemo.io/
  13. 13. ブロックチェーンはデータベースの代わりになるか? 当面は無理当面は無理当面は無理当面は無理 ブロックチェーンだけではデータの検索が困難ブロックチェーンだけではデータの検索が困難ブロックチェーンだけではデータの検索が困難ブロックチェーンだけではデータの検索が困難 ユーザーAを追加 ユーザーBを追加 ユーザーBを更新 ユーザーCを追加 ・ユーザーAの最新情報を取り出す ・ユーザーの一覧を取得する ・ ・・・ ユーザーCを削除 ブロックチェーンを最初からブロックチェーンを最初からブロックチェーンを最初からブロックチェーンを最初から 最最最最後後後後ままままででででたたたたどどどどららららなななないいいいととととわわわわかかかかららららなななないいいい
  14. 14. ステート DB の併用 • ブロックチェーンを格納するサーバーノード(ピア)とは別にデータ ベースを併用する。 • このデータベースは既存のものを使ってもよいが、ステートDBと呼ば れるデータベースを使うとセキュアにデータを格納できる。 ステート DB ステートDB自体は一般的なデータベースと同様に使える。 ステートDBにはブロックチェーンを経由しないとアクセスできない。 データ自体はステートDBで管理し、そのトランザクション記録を ブロックチェーンに残すことで、ステートDBの改竄が困難になる。 ステートステートステートステートDB ブロックチェーンブロックチェーンブロックチェーンブロックチェーン ユーザーAを追加する ユーザーAの情報を追加追加追加追加 「ユーザーAを追加した」という記録を追加追加追加追加 ユーザーAがログイン ユーザーAのログイン記録を更新更新更新更新 「ユーザーAがログインした」という記録を追加追加追加追加 ユーザーAを削除する ユーザーAの情報を削除削除削除削除 「ユーザーAを削除した」という記録を追加追加追加追加
  15. 15. ブロックチェーンプラットフォームの向き&不向き • 一社独占による弊害脱却 • 共通の仕組みをコミュニティで運用 • 仲介者の省略 • 仲介手数料 • 孫請け、曾孫受け、・・ • 改竄できないものが記録 • 寄付/贈与/持ち主変更 • 正しく相手に渡っているか? • 転売防止 • 大量トランザクション • コンセンサスによる書込みパフォーマンス • ブロックは消えない(増え続ける、要ストレージ) • 既存DBの代替 • 検索機能はまだ不充分/ロールバック不可 • 「データベースの代替」ではない • 人手によるオペレーション • その人は信用できるのか? • 自動化できないか?
  16. 16. (ハンズオン準備) Hyperledger Composer Playground モデル ACLスクリプト メタデータクエリー アプリケーション Business Network Archive (.bnaファイル) デプロイ アーカイブ作成 Hyperledger Composer Playground ブロックチェーンネットワーク(Hyperledger Fabric) どんなユーザーが どんな商品を どんなトランザクションを どんな権限で どういう条件で選択して
  17. 17. Hyperledger Composer Playground 体験(0) 献血献血献血献血 A B A ×××× 以下の処理をブロックチェーンで管理以下の処理をブロックチェーンで管理以下の処理をブロックチェーンで管理以下の処理をブロックチェーンで管理 - 血液を登録し、持ち主を変更する - 参加者: 人 - 取り扱う商品: 血液 - 同じ血液型のユーザー同士で交換可能
  18. 18. Hyperledger Composer Playground 体験(1) https://composer-playground.mybluemix.net/ シークレットモード Windows: Ctrl+Shift+N(Chrome) Ctrl+Shift+P(FireFox) MacOS: Command+Shift+N(Chrome)
  19. 19. Hyperledger Composer Playground 体験(2) "empty-business-network" を選択 my-first-network (説明) admin@my-first-network
  20. 20. Hyperledger Composer Playground 体験(3)
  21. 21. Hyperledger Composer Playground 体験(4)
  22. 22. Hyperledger Composer Playground 体験(5) # My First Network はじめての Hyperledger Composer Playground ## Copyright 2018 K.Kimura @ IBM Japan all rights reserved. コピペ用参照コピペ用参照コピペ用参照コピペ用参照 https://bit.ly/2Aj4pK0
  23. 23. Hyperledger Composer Playground 体験(6)
  24. 24. Hyperledger Composer Playground 体験(7)
  25. 25. Hyperledger Composer Playground 体験(8) namespace org.bmxgg // 人 participant User identified by id{ o String id o String name o String type } // モノ asset Blood identified by id{ o String id o String user_id o String type o Integer amount } // トランザクション transaction ChangeOwner{ o String blood_id o String user_id } コピペ用参照コピペ用参照コピペ用参照コピペ用参照 https://bit.ly/2M11XZZ
  26. 26. Hyperledger Composer Playground 体験(9)
  27. 27. Hyperledger Composer Playground 体験(10)
  28. 28. Hyperledger Composer Playground 体験(11)
  29. 29. Hyperledger Composer Playground 体験(12) const NS = 'org.bmxgg'; /** * Transfer Processer * @param {org.bmxgg.ChangeOwner} tx- transaction parameters. * @transaction */ async function transfer(tx){ const blood_id = tx.blood_id; const user_id = tx.user_id; try{ if( user_id != '' ){ const pr = await getParticipantRegistry( NS + '.User' ); const exists = await pr.exists( user_id ); if( !exists ){ throw new Error( 'User does NOT exist! ID: ' + user_id ); } const user = await pr.get( user_id ); const ar = await getAssetRegistry( NS + '.Blood' ); const blood = await ar.get( blood_id ); if( blood.type != user.type ){ throw new Error( 'Blood types NOT matched.' ); }else{ blood.user_id = user_id; await ar.update( blood ); } }else{ throw new Error( 'user_id NOT specified.' ); } }catch( err ){ throw new Error( err ); } } コピペ用参照コピペ用参照コピペ用参照コピペ用参照 https://bit.ly/2K7IhSj
  30. 30. Hyperledger Composer Playground 体験(13)
  31. 31. Hyperledger Composer Playground 体験(14)
  32. 32. Hyperledger Composer Playground 体験(15) { "$class": "org.bmxgg.User", "id": "1273", "name": "きむら", "type": "A" } $class と id は既定値。 ユーザーの name と type を指定する。
  33. 33. Hyperledger Composer Playground 体験(16) 同じ作業を繰り返して、User を3名以上登録する。 ただし、うち2名は同じ Type 、1名は異なる Type で。
  34. 34. Hyperledger Composer Playground 体験(17) ユーザー ID と Type をメモしておく
  35. 35. Hyperledger Composer Playground 体験(18)
  36. 36. Hyperledger Composer Playground 体験(19) { "$class": "org.bmxgg.Blood", "id": "3893", "user_id": "1273", "type": "A", "amount": 400 } 作成した user_id と、そのユーザーの type を指定する。 amount は適当な数字
  37. 37. Hyperledger Composer Playground 体験(20) Type A の Blood が 400 登録された
  38. 38. Hyperledger Composer Playground 体験(21) User と Blood が登録された内容がトランザクションとして ブロックチェーンに登録されている
  39. 39. Hyperledger Composer Playground 体験(22) 作成した blood_id と、 新しいユーザーの user_id を指定する。 { "$class": "org.bmxgg.ChangeOwner", "blood_id": "3893", "user_id": "9226" }
  40. 40. Hyperledger Composer Playground 体験(23) ChangeOwner が実行された記録がトランザクションとして ブロックチェーンに登録されている
  41. 41. Hyperledger Composer Playground 体験(24) 既存 Blood の user_id が書き換わった = 持ち主が変わった!
  42. 42. Hyperledger Composer Playground 体験(25) 試しに Type が異なるユーザーの user_id を指定して実行してみる { "$class": "org.bmxgg.ChangeOwner", "blood_id": "3893", "user_id": "0837" }
  43. 43. Hyperledger Composer Playground 体験(26) ここまでに作成したビジネスネットワーク定義ファイルをダウンロードして保存
  44. 44. 今日お伝えしたかったこと ブロックチェーンを使った上でただしく理解してほしい ブロックチェーンはどんな用途に向くのか/向かないのか、それは 何故か、を考えるために必要な知識を付けて欲しい (エンジニアとして)自分だったらブロックチェーンでどんなものを作っ てみたいか、を考えるための基礎を身に付けてほしい

×