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 大阪 ブロックチェーン

2018/11/01 ブロックチェーン体験 「ブロックを作って、チェーンでつないで、理解しよう!」

  • Login to see the comments

BMXUG 大阪 ブロックチェーン

  1. 1. BMXUG大阪勉強会 ブロックチェーン体験 ブロックを作って、チェーンでつないで、理解しよう! IBM クラウドガレージ 木村 桂 趣味: マンホール マンホールマップ: http://manholemap.juge.me/
  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. ハッシュ関数/ハッシュ値 • 文字列や画像などのデータを「一定の法則で」短く作り直したもの • 作り直す過程を処理する部分を「ハッシュ関数」と呼ぶ • 作り直した結果の文字列を「ハッシュ値」と呼ぶ • 入力情報が大きくても小さくても、同じ長さの文字列が実行結果として得られる • 同じ入力情報に対しては、再度実行しても同じ結果になる(乱数ではない) • 実行結果から入力情報を逆計算することは(ほぼ)不可能 あいうえお かきくけこ さしす・・ 16A2BED0・・・・・・・EE5 (ハッシュ値) 22EA289C・・・・・・・CES (ハッシュ値) 3D3D0CC9・・・・・・・56C (ハッシュ値) ハハハハ ッッッッ シシシシ ュュュュ 関関関関 数数数数 (文字列) (テキストファイル) (画像ファイル)
  10. 10. ブロックチェーンにおける「ハッシュ値」 • ブロックチェーンに格納するデータのフォーマットを決めて、そのフォ ーマットに対するハッシュ値を計算する 格納したいデータ格納したいデータ格納したいデータ格納したいデータ 整数整数整数整数 1つ前のブロックのハッシュ値 上記3データから生成したハッシュ値 ブロック内のデータは必ずこの形にする 必ず1つ前のブロックのハッシュ値を持つ nonce と呼ばれる整数値 1つ前のブロックのハッシュ値と、格納デー タと、nonce 値3つから生成したハッシュ値
  11. 11. 「ブロック」と「チェーン」によるデータ格納 ブロック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つ前のブロックのハッシュ値と、 自分が持っている値と、 nonce から生成したハッシュ値 (ハッシュ値)
  12. 12. ブロックチェーンにおける「マイニング」 • ブロックチェーンに格納するデータのハッシュ値に条件を付与するここここ とがあるとがあるとがあるとがある 格納したいデータ格納したいデータ格納したいデータ格納したいデータ 整数整数整数整数 1つ前のブロックのハッシュ値 上記3データから生成したハッシュ値 ハッシュ値は必ず "000" で始まる、という条件を付与する = この条件を求める nonce をしらみつぶしに調べる nonce が 1 の場合のハッシュ値を計算する 計算結果のハッシュ値が(例えば) "000" で始まっていれば採用する。 "000" 以外で始まっていたら nonce を1つ 増やして再びハッシュ値を求める。 これを繰り返す。 マイニング(発掘)マイニング(発掘)マイニング(発掘)マイニング(発掘)
  13. 13. ブロックチェーンを改ざん(不正に書き換え)するには 0JEEICIS1… 0JEEICIS1… 17YFFO327… 17YFFO327… 2FJHN7WC8… 2FJHN7WC8… 矛盾矛盾矛盾矛盾 18YFFO327… 矛盾矛盾矛盾矛盾 18YFFO327… 矛盾矛盾矛盾矛盾 20JHN7WC8… 矛盾矛盾矛盾矛盾 20JHN7WC8… 多数決で矛盾多数決で矛盾多数決で矛盾多数決で矛盾 過半数ノード内の各ブロックの値を同時に書き換える必要があり、 これは事実上不可能事実上不可能事実上不可能事実上不可能 ブロックチェーン内に格納されたデータはブロックチェーン内に格納されたデータはブロックチェーン内に格納されたデータはブロックチェーン内に格納されたデータは 第三者に改ざんされていない真実のデータである第三者に改ざんされていない真実のデータである第三者に改ざんされていない真実のデータである第三者に改ざんされていない真実のデータである という保証があるという保証があるという保証があるという保証がある
  14. 14. ブロックチェーンの挙動デモ https://blockchaindemo.io/
  15. 15. ブロックチェーンはデータベースの代わりになるか? 当面は無理当面は無理当面は無理当面は無理 ブロックチェーンだけではデータの検索が困難ブロックチェーンだけではデータの検索が困難ブロックチェーンだけではデータの検索が困難ブロックチェーンだけではデータの検索が困難 ユーザーAを追加 ユーザーBを追加 ユーザーBを更新 ユーザーCを追加 ・ユーザーAの最新情報を取り出す ・ユーザーの一覧を取得する ・ ・・・ ユーザーCを削除 ブロックチェーンを最初からブロックチェーンを最初からブロックチェーンを最初からブロックチェーンを最初から 最最最最後後後後ままままででででたたたたどどどどららららなななないいいいととととわわわわかかかかららららなななないいいい
  16. 16. ステート DB の併用 • ブロックチェーンを格納するサーバーノード(ピア)とは別にデータ ベースを併用する。 • このデータベースは既存のものを使ってもよいが、ステートDBと呼ば れるデータベースを使うとセキュアにデータを格納できる。 ステート DB ステートDB自体は一般的なデータベースと同様に使える。 ステートDBにはブロックチェーンを経由しないとアクセスできない。 データ自体はステートDBで管理し、そのトランザクション記録を ブロックチェーンに残すことで、ステートDBの改竄が困難になる。 ステートステートステートステートDB ブロックチェーンブロックチェーンブロックチェーンブロックチェーン ユーザーAを追加する ユーザーAの情報を追加追加追加追加 「ユーザーAを追加した」という記録を追加追加追加追加 ユーザーAがログイン ユーザーAのログイン記録を更新更新更新更新 「ユーザーAがログインした」という記録を追加追加追加追加 ユーザーAを削除する ユーザーAの情報を削除削除削除削除 「ユーザーAを削除した」という記録を追加追加追加追加
  17. 17. ブロックチェーンプラットフォームの向き&不向き • 一社独占による弊害脱却 • 共通の仕組みをコミュニティで運用 • 仲介者の省略 • 仲介手数料 • 孫請け、曾孫受け、・・ • 改ざんできないものが記録 • 寄付/贈与/持ち主変更 • 正しく相手に渡っているか? • 転売防止 • 大量トランザクション • コンセンサスによる書込みパフォーマンス • ブロックは消えない(増え続ける、要ストレージ) • 既存DBの代替 • 検索機能はまだ不充分/ロールバック不可 • 「データベースの代替」ではない • 人手によるオペレーション • その人は信用できるのか? • 自動化できないか?
  18. 18. (ハンズオン準備) Hyperledger Composer Playground モデル ACLスクリプト メタデータクエリー アプリケーション Business Network Archive (.bnaファイル) デプロイ アーカイブ作成 Hyperledger Composer Playground ブロックチェーンネットワーク(Hyperledger Fabric) どんなユーザーが どんな商品を どんなトランザクションを どんな権限で どういう条件で選択して
  19. 19. Hyperledger Composer Playground 体験(0) 献血献血献血献血 A B A ×××× 以下の処理をブロックチェーンで管理以下の処理をブロックチェーンで管理以下の処理をブロックチェーンで管理以下の処理をブロックチェーンで管理 - 血液を登録し、持ち主を変更する - 参加者: 人 - 取り扱う商品: 血液 - 同じ血液型のユーザー同士で交換可能
  20. 20. Hyperledger Composer Playground 体験(1) https://composer-playground.mybluemix.net/ シークレットモード Windows: Ctrl+Shift+N(Chrome) Ctrl+Shift+P(FireFox) MacOS: Command+Shift+N(Chrome)
  21. 21. Hyperledger Composer Playground 体験(2) "empty-business-network" を選択 my-first-network (説明) admin@my-first-network
  22. 22. Hyperledger Composer Playground 体験(3)
  23. 23. Hyperledger Composer Playground 体験(4)
  24. 24. Hyperledger Composer Playground 体験(5) # My First Network はじめての Hyperledger Composer Playground ## Copyright 2018 K.Kimura @ IBM Japan all rights reserved. コピペ用参照コピペ用参照コピペ用参照コピペ用参照 https://bit.ly/2Aj4pK0
  25. 25. Hyperledger Composer Playground 体験(6)
  26. 26. Hyperledger Composer Playground 体験(7)
  27. 27. 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
  28. 28. Hyperledger Composer Playground 体験(9)
  29. 29. Hyperledger Composer Playground 体験(10)
  30. 30. Hyperledger Composer Playground 体験(11)
  31. 31. 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
  32. 32. Hyperledger Composer Playground 体験(13)
  33. 33. Hyperledger Composer Playground 体験(14)
  34. 34. Hyperledger Composer Playground 体験(15) { "$class": "org.bmxgg.User", "id": "1001", "name": "きむら", "type": "A" } $class は既定値。 id と name と type を指定する。
  35. 35. Hyperledger Composer Playground 体験(16) 同じ作業を繰り返して、User を3名以上登録する。 ただし、うち2名は同じ Type 、1名は異なる Type で。
  36. 36. Hyperledger Composer Playground 体験(17) ユーザー ID と Type をメモしておく A型 きむら(1001) すずき(1002) B型 たなか(1003)
  37. 37. Hyperledger Composer Playground 体験(18)
  38. 38. Hyperledger Composer Playground 体験(19) { "$class": "org.bmxgg.Blood", "id": "2001", "user_id": "1001", "type": "A", "amount": 400 } 作成した user_id と、 そのユーザーの type を指定する。 amount は適当な数字 ↓ きむら(1001)の血液 400 ml
  39. 39. Hyperledger Composer Playground 体験(20) Type A の Blood が 400 登録された
  40. 40. Hyperledger Composer Playground 体験(21) User と Blood が登録された内容がトランザクションとして ブロックチェーンに登録されている
  41. 41. Hyperledger Composer Playground 体験(22) 作成した blood_id と、 新しいユーザーの user_id を指定する。 { "$class": "org.bmxgg.ChangeOwner", "blood_id": "2001", "user_id": "1002" } ↓ 2001 の(ユーザー 1001の) 400 ml の血液を ユーザー 1002 のものに変更する
  42. 42. Hyperledger Composer Playground 体験(23) ChangeOwner が実行された記録がトランザクションとして ブロックチェーンに登録されている
  43. 43. Hyperledger Composer Playground 体験(24) 既存 Blood の user_id が 1002 に書き換わった = 持ち主が変わった!
  44. 44. Hyperledger Composer Playground 体験(25) 試しに Type が異なるユーザーの user_id を指定して実行してみる { "$class": "org.bmxgg.ChangeOwner", "blood_id": "2001", "user_id": "1003" } 「血液型が不一致」エラー ↓ 2001 の(ユーザー 1002の) 400 ml の血液を ユーザー 1003 のもの変更できない
  45. 45. Hyperledger Composer Playground 体験(26) ここまでに作成したビジネスネットワーク定義ファイルをダウンロードして保存
  46. 46. 今日お伝えしたかったこと ブロックチェーンを使った上でただしく理解してほしい × セキュアなデータベース ○ 改ざんが困難なデータベース ブロックチェーンはどんな用途に向くのか/向かないのか、それは 何故か、を考えるために必要な知識を付けて欲しい 「改ざんが困難」 → 管理者でも改ざんできないデータ → 本物の保証 (エンジニアとして)自分だったらブロックチェーンでどんなものを作っ てみたいか、を考えるための基礎を身に付けてほしい ???

×