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

Oracle Blockchain Platformを用いたHyperledger Fabricアプリケーション開発 / Developing Hyperledger Fabric application with Oracle Blockchain Platform

gakumura
November 01, 2022

Oracle Blockchain Platformを用いたHyperledger Fabricアプリケーション開発 / Developing Hyperledger Fabric application with Oracle Blockchain Platform

2022/11/1 Blockchain GIG特別編 HLF集中講義#4 Oracle Blockchain Platformを用いたHLFアプリ開発 で話した内容
・Hyperledger FabricベースのBlockchain as a Service(BaaS)であるOracle Blockchain Platformを用いたシステム、アプリ、Chaincodeの開発について
・Oracle Blockchain Platformを利用すると素のHyperledger Fabricに比べてどのようなメリットがあるのか?何が楽になるのか?こんなこともできるようになる!など、エンタープライズブロックチェーンの本格的な実践にあたっての魅力

gakumura

November 01, 2022
Tweet

More Decks by gakumura

Other Decks in Technology

Transcript

  1. Copyright © 2022, Oracle and/or its affiliates 2 中村 岳

    Twitter @gakumura はてなブログ @gakumura …主にHyperledger Fabric関連 • 現職:ソリューションエンジニア@日本オラクル • 担当:Oracle Blockchain Platform、 Blockchain Table • 前職:金融決済系SIerでパッケージ開発 • SWIFT、CLS、日銀ネット関連の銀行間決済システム
  2. • 10/11(火): Hyperledger Fabric(再)入門 • コンポーネントやトランザクションフローなど基本を解説 • 10/18(火):Hyperledger Fabricのネットワーク設計 •

    ブロックチェーンネットワークの設計の考え方、進め方を解説 • 10/25(火):Hyperledger FabricアプリとChaincodeの開発 • クライアントアプリケーションとChaincodeの開発方法を解説 • 11/1(火):Oracle Blockchain Platformを用いたHLFアプリ開発 • Oracle Blockchain Platformならではのメリット、開発方法を解説 集中講義シリーズ Copyright © 2022, Oracle and/or its affiliates 3
  3. 内容 • Oracle Blockchain Platform概要 • Oracle Blockchain Platformを用いたChaincodeの開発 •

    Fine Grained Access Controlライブラリ • Blockchain App Builder • Fungible Tokenのトランザクション最適化 • State DBにBerkeley DBを使用 • Oracle Blockchain Platformを用いたアプリケーションの開発 • REST Proxy • リッチヒストリーDB • Channelまたぎのアトミックトランザクション • XAサポート 4 Copyright © 2022, Oracle and/or its affiliates
  4. Hyperledger Fabricをベースにエンタープライズ利用向けPaaSとオンプレミスで提供 • 数ステップで構築完了、GUIコンソールで管理・運用も容易 • エンタープライズグレードの耐障害制、堅牢性 • マルチクラウド、ハイブリッドクラウド、 オープンなネットワーク構成が可能 •

    Oracle独自の付加価値: • State DBとしてBerkeley DBを利用:パフォーマンスとクエリ利便性向上 • 多機能なREST API:スマートコントラクトの利用を容易に • 台帳のデータをRDBに複製:大量照会、分析、データ統合 • スマートコントラクトを容易に開発:付属の開発ツールでアセット仕様からコードを自動生成 • 複数ChannelのアトミックトランザクションとXA対応:複数Channelでの更新のアトミックな実行 や、ローカルのDB、MQなどとのグローバルトランザクションをサポート Oracle Blockchain Platform Copyright © 2022, Oracle and/or its affiliates 東京DCからも サービス提供中 6
  5. 使いやすいコンソール画面と多機能なサービスAPIで運用、管理をサポート • 運用、監視、管理のための使いやすいコンソール画面および多機能なサービスAPIを提供 • 必要となる運用、管理タスクをコンソール画面とAPI両方でカバー: …Hyperledger Fabricの難解な設定ファイル、コマンド、手順は習得不要 • ノードの起動/停止 •

    設定の変更 • ブロックチェーンネットワークのメンバー追加 • 監視とトラブルシューティングも: • ネットワークの視覚化 • リソース使用状況やノード死活情報 • トランザクション処理状況 Easy to Use:運用、管理の手間を削減 Copyright © 2022, Oracle and/or its affiliates 8 8
  6. • Oracle Blockchain Platformだけでなく、 他のHyperledger Fabricとのオープンなネットワーク構成が可能 • オンプレミスバージョンの提供: Oracle Blockchain

    Platform Enterprise Edition(OBPEE) • 自社データセンターやOracle以外のクラウド(IaaS)上にOBPを構築 • ブロックチェーン環境に必要な機能を事前定義、数クリックで環境構築 • サポートするVM基盤:Oracle VirtualBoxとVMware vSphere • Oracle Blockchain Platform Cloud Service (OBPCS) と同等の機能を提供 • APIは共通、アプリケーション移植性あり • アップデートもOBPCSと足並みを揃えて提供 Open:オープンで柔軟なネットワーク Copyright © 2022, Oracle and/or its affiliates 9 9
  7. オンプレミス、マルチクラウド、ハイブリッドクラウドでの構成が可能 Open:オープンで柔軟なネットワーク Copyright © 2022, Oracle and/or its affiliates オンプレミスベースの

    ブロックチェーンネットワーク 3rd Party Cloud 3rd Party Cloud 3rd Party Cloud マルチクラウドの ブロックチェーンネットワーク ハイブリッドクラウドの ブロックチェーンネットワーク Oracle Blockchain Platform Cloud Service (クラウドサービス) Oracle Blockchain Platform EE (オンプレミス) オープンソースのHyperledger Fabric (手組ベース) 10 10
  8. Chaincodeとクライアントアプリケーションの開発に役立つ Oracle Blockchain Platformの独自の強み(素のHLFとの差分) Copyright © 2022, Oracle and/or its

    affiliates 11 Chaincode開発 Fine Grained Access Controlライブラリ Chaincode内の細かな権限制御をオンチェーンで行うためのライブラリを提供 Blockchain App Builder アセット仕様からのコード生成、デプロイ、テストまでカバーする開発補助ツールで Chaincodeの開発を容易に Fungible Tokenのトランザクション最適化 HLFの同一レコード更新のスループット制約を回避し、Fungible Tokenでの同一口座 への高頻度な入出金のユースケースを扱うことが可能に State DBにBerkeley DBを使用 並列実行性向上によりスループットを改善し、加えてCouchDB互換のJSONリッチクエ リに加え、SQLリッチクエリが利用可能でクエリ表現力も向上 クライアントアプリケーション開発 REST Proxy クライアントアプリケーションはREST APIでChaincodeを呼び出すことができ、Fabric SDKの組み込みは不要に リッチヒストリーDB ブロックチェーン台帳上のデータをRDB(Oracle)に複製し、集計や分析、データ統合 などのデータ活用性を向上 Channelまたぎのアトミックトランザクション 別々のChannelでの複数トランザクションをアトミックに実行可能に(REST Proxyの利 用が必要) XAサポート アプリケーションに組み込み、外部のトランザクションマネージャーを用いることで複数 Channel間、およびOBPと他のXAリソース(DB、キューなど)間のグローバル分散トラ ンザクションが利用可能になるJavaライブラリを提供
  9. Oracle Blockchain Platform内のサンプルChaincode Copyright © 2022, Oracle and/or its affiliates

    Balance Transfer • AとBのふたつの口座間での残高のやり取りを表現する最もシンプルなサンプル • 現在残高のクエリとA⇔B間の移転のみの機能で、Chaincodeの基礎の学習に最適 Car Dealer • サプライチェーンのトレーサビリティを表現したサンプル • 自動車メーカーとディーラーの間でのパーツおよび自動車のやり取りが題材 • パーツから自動車の組み立て(アセットの含有関係)もデータ構造として表現 Marbles • Marble(おはじき)を題材としたNFT(Non-Fungible Token)のサンプル • 各MarbleはIDと色や大きさ、所有者などの属性を持つ • 台帳の範囲クエリやリッチクエリなど、Chaincodeの基本として覚えておくべきひととおりの操 作が含まれる Marbles with Fine Grained ACLs • MarblesにFine-Grained Access Control Libraryを用いたアクセス制御を追加 したサンプル Fiat Money Token • 複数の口座間、複数種類のトークンの残高のやり取りを表現するサンプル • 口座の作成、複数種類のトークンの発行と残高管理(照会、移転)など、Balance Transferよりも多機能な、Fungible Tokenの本格的サンプル 13
  10. Chaincode内・オンチェーンでのアクセス制御を容易に実装するためのライブラリを提供 • ブロックチェーン台帳上のデータへのアクセス権限を ブロックチェーン台帳上に記述して管理 • Hyperledger Fabricの標準機能よりも細かく、かつ、 扱いやすいアクセス権限制御を容易に実現 以下の要素で権限を制御 •

    リソース:アクセスを制御する対象 • アイデンティティ:アクセスする企業やユーザー • グループ:アイデンティティのグループ • アクセス制御リスト: • どのアイデンティティ/グループに • どのリソースに対し • どのような操作(CREATE、READ、UPDATE、DELETE、etc.)を • 許可する/しない Fine-Grained Access Controlライブラリ Copyright © 2022, Oracle and/or its affiliates 14 詳細は以下のドキュメントを参照: https://docs.oracle.com/en/cloud/paas/blockchain-cloud/usingoci/using-fine-grained-access-control-library.html 14
  11. Fine-Grained Access Controlライブラリの利用イメージ Copyright © 2022, Oracle and/or its affiliates

    Ledger Chaincode Identity: O=OrgA, CN=UserA1 業務関数 ACLチェック FGAC ラ イ ブ ラ リ ACL管理 関数 業務データ ACL関連データ リソース グループ ACL Identity: O=OrgB, CN=UserB1 アクセス権限制御のための データを台帳上で管理 Chaincode関数内で 権限チェックを実施 Chaincode呼び出しの Identity(証明書)を組 織レベルやユーザーレベルで グループ化して制御 ACLの管理に関わる機能も関数として実装し、 ACL管理関数の権限もACLで管理 15 15
  12. スマートコントラクトのローコード開発ツール • 一連のライフサイクル(開発、パッケージング、デプロイ、アップデート)に対応 • ローカルなHyperledger Fabricネットワークを自動構成してデプロイ、テスト • リモートのOracle Blockchain Platformにデプロイ、テストも可

    • アセット仕様からプログラムを自動生成 • 宣言的に記述したアセットの属性と振る舞いをもとにコードを自動生成 • トークンの開発を強力にサポート • Fungible Token(FT)…金額やポイントの残高などを扱うユースケース • Non-Fungible Token(NFT)…唯一性を持ったモノに紐づくトークン 例:サプライチェーンの物品の追跡、デジタルコンテンツ Blockchain App Builder:スマートコントラクト開発にかける時間を短縮 Copyright © 2022, Oracle and/or its affiliates 詳細は以下のドキュメントを参照: https://docs.oracle.com/en/cloud/paas/blockchain-cloud/usingoci/using-chaincode-development-tools.html 16 16
  13. Blockchain App Builderのトークン開発サポート • TTF(Token Taxonomy Framework)およびERCをベースとした標準に 基づいたトークン仕様からコードとAPIを自動生成 • トークンのメタモデル(例:Fungible)と振る舞い(例:Mintable、

    Transferable、Burnable)、カスタムメソッドをテンプレートに記述する ことでそれに合わせたコードとSDK(カスタムコード内で再利用可能) を生成 • 30種類以上のトークンラッパー関数 • ビルトインのロールベースドセキュリティ、アクセス制御機能を利用可能 17 Copyright © 2022, Oracle and/or its affiliates
  14. • Hyperledger Fabricは同一口座への高頻度の入出金が含まれるFungible Tokenのユースケー スが苦手 • トランザクションフローのMVCCの仕組み上、台帳上の同一レコードの更新トランザクションを高頻度 で実行するとRead Conflictエラーが多発し、結果的にスループットが低下する •

    Fungible Tokenの「同一口座への高頻度な入出金」がこれに該当 • Oracle Blockchain Platformでは独自の改善によりこの課題を解決 • Blockchain App BuilderでChaincodeを生成する際、専用のオプションを有効化しておくとその ChaincodeのトランザクションのMVCC(Multi-Version Concurrency Control)を最適化 • オリジナルHyperledger Fabricでは苦手だった、同一口座の高頻度の入出金を含むユースケー スを扱うことが可能に • 最適化の詳細は以下のブログを参照: https://blogs.oracle.com/blockchain/post/obptokenoptimization 独自のFungible Tokenトランザクション最適化 Copyright © 2022, Oracle and/or its affiliates 18 18
  15. 例:同一口座へのほぼ同時の入金が片方Read Conflictエラーになるケース Copyright © 2022, Oracle and/or its affiliates 19

    レコード:口座A残高 初期残高value=0 初期version=n Tx1 口座Aに70送金 Simulate(A) Simulate(x) RS-V (A) Commit(A) RS-V(x) Read Set: version=n Write Set: value=70 version=n? OK version=n? NG Endorsement Ordering Validation Endorsement Ordering Validation version=n+1 value=70 Tx2 口座Aに30送金 Read Set: version=n Write Set: value=30
  16. OBPのFungible Tokenトランザクション最適化を適用した場合(単純化して記載) Copyright © 2022, Oracle and/or its affiliates 20

    レコード:口座A残高 初期残高value=0 初期version=n Tx1 口座Aに70送金 Simulate(A) Simulate(x) Validate (A) Commit(A) Read Set: version=n Write Set: delta=+70 version=n? ?Static Rule OK OK Endorsement Ordering Validation Endorsement Ordering Validation version=n+1 value=0+70 →70 Tx2 口座Aに30送金 Read Set: version=n Write Set: delta=+30 version=n? ?Static Rule Validate (A) Commit(A) version=n+2 value=70+30 →100
  17. OBPのFungible Tokenトランザクション最適化を適用した場合(単純化して記載) Copyright © 2022, Oracle and/or its affiliates 21

    レコード:口座A残高 初期残高value=0 初期version=n Tx1 口座Aに70送金 Simulate(A) Simulate(x) Validate (A) Commit(A) Read Set: version=n Write Set: delta=+70 version=n? ?Static Rule OK OK Endorsement Ordering Validation Endorsement Ordering Validation version=n+1 value=0+70 →70 Tx2 口座Aに30送金 Read Set: version=n Write Set: delta=+30 version=n? ?Static Rule Validate (A) Commit(A) version=n+2 value=70+30 →100 Write Setに 値そのものではなく 差分(delta)を保持 ValidationではRead Setのバージョン一致チェックを行わず、 定義したStatic Ruleに 照らしてチェック(例:残高がマイナスにならないか) Commit時、 差分(delta)を Valueに反映
  18. 台帳に保存される「現在の値(ステート)」とそれを保持するデータベース World StateはKey-Valueストアで、Valueには任意の文字列やバイナリを格納可能 • ChaincodeはWorld StateからKeyのValueを読み出し、書き込むことで 台帳上のデータに対してのビジネスロジックを表現する • State DBと呼ばれるデータベースに保持される

    通常のHLFではState DBにはLevelDBかCouchDBを選択可能 • LevelDB:シンプルなデータ構造を扱う場合向き(例:口座番号がKey/残高がValue) • Keyを指定するステート検索しかできない(単一指定or範囲指定) • CouchDB:複数の属性を持つValueを扱いやすい • JSON形式でValueを格納すると、Attributeを条件に指定して検索できる(リッチクエリ) • LevelDBに比べると低速な点、Phantom Read問題に係る制約には留意 復習: HLFのWorld StateとState DB 22 Copyright © 2022, Oracle and/or its affiliates
  19. ある程度柔軟なデータ構造を扱え、State DBによる検索の表現能力もそこそこ 復習:HLFのWorld Stateで扱うデータ構造の例 Copyright © 2022, Oracle and/or its

    affiliates 23 Key:口座番号 Value:残高 1020345 10,000,000 1020346 56,400 Key:アセット種別とID Value:アセット情報 car^aaa111 {“color”:”red”, “price”:10000, “owner”:”Bob”, “drive”:”front”} car^bbb222 {“color”:”blue”, “price”:30000, owner”:”Alice”, “drive”:”AWD’} bike^xyz345 {“color”:”green”, “price”:30000, owner”:”Alice”, “CC”:”1800’} シンプルなKey-Value構造:口座 複合キーとJSONを用いたKey-Value構造:アセット台帳 Keyの値を指定してValueを読み取る/書き込む 複合キーの利用や Key値の範囲指定のクエリも可 State DBにCouchDBを使いValueをJSONにしておくと リッチクエリが使える (例:ownerがAliceのアセットを全件取得)
  20. State DBとしてBerkeley DBを採用、パフォーマンス&ロジック表現力を強化 パフォーマンスの向上 • スマートコントラクトの同時実行性の強化 SQLリッチクエリのサポート • (値がJSONであれば)JSONの属性を指定してのSQL- Likeクエリが可能

    • COUNT,SUM,AVG,MIN,MAXなどの集計関数も利用可 CouchDB互換のJSONリッチクエリも利用可能 Enterprise Grade:エンタープライズ要件を満たす Copyright © 2022, Oracle and/or its affiliates + ブロックチェーン: トランザクションと 値の履歴を格納 State DB (World State): 現在の値を格納する データベース Hyperledger Fabricにおける 台帳(Ledger)構成 ※通常のHyperledger Fabricでは、 State DBはLevelDBかCouchDB 24 24
  21. リッチクエリの例(JSON/SQL) Copyright © 2022, Oracle and/or its affiliates 25 {

    "fields": ["model", "manufacturer"], "selector": { "docType" : "vehicle", "owner" : "Sam Dealer“ } } SELECT json_extract(valueJson, '$.model') AS model, json_extract(valueJson, '$.manufacturer') AS manufacturer FROM <state> WHERE json_extract(valueJson, '$.docType') = 'vehicle’ AND json_extract(valueJson, '$.owner') = 'Sam Dealer' SELECT COUNT(*) AS Count FROM <state> WHERE json_extract(valueJson, '$.docType') = 'vehicle' AND json_extract(valueJson, '$.owner') = 'Sam Dealer' SELECT AVG(json_extract(valueJson, '$.price')) AS AveragePrice FROM <state> WHERE json_extract(valueJson, '$.docType') = 'vehicle’ AND json_extract(valueJson, '$.owner') = 'Sam Dealer' JSONリッチクエリ SQLリッチクエリ 集合関数の利用例
  22. Blockchain App Builder(BAP)を用いた典型的なChaincode開発のフロー Copyright © 2022, Oracle and/or its affiliates

    26 アセット仕様を記述 しコードを生成 OBPサンプルやHLF公式サンプルなどをベース、 またはスクラッチでコードを記述 生成したコードを カスタマイズ BAPの ローカルHLF環境で 単体テスト OBP(テスト環境) 上にデプロイ BAP or コンソール or REST API OBP(テスト環境)上でテスト BAP or RESTクライアントアプリケーション or Fabric SDKクライアントアプリケーション OBP(本番環境) 上にデプロイ 本番運用
  23. Chaincodeの品質、生産性、ロジック表現力を向上 Copyright © 2022, Oracle and/or its affiliates 28 Chaincode開発

    Fine Grained Access Controlライブラリ Chaincode内の細かな権限制御をオンチェーンで行うためのライブラリを提供 Blockchain App Builder アセット仕様からのコード生成、デプロイ、テストまでカバーする開発補助ツールで Chaincodeの開発を容易に Fungible Tokenのトランザクション最適化 HLFの同一レコード更新のスループット制約を回避し、Fungible Tokenでの同一口座 への高頻度な入出金のユースケースを扱うことが可能に State DBにBerkeley DBを使用 並列実行性向上によりスループットを改善し、加えてCouchDB互換のJSONリッチクエ リに加え、SQLリッチクエリが利用可能でクエリ表現力も向上 クライアントアプリケーション開発 REST Proxy クライアントアプリケーションはREST APIでChaincodeを呼び出すことができ、Fabric SDKの組み込みは不要に リッチヒストリーDB ブロックチェーン台帳上のデータをRDB(Oracle)に複製し、集計や分析、データ統合 などのデータ活用性を向上 +OBP上でテストがしやすく
  24. Oracle Blockchain Platform(OBP)のコンポーネント Hyperledger Fabricのコンポーネント…HLFのアイデンティティでの認証 • Peer • Orderer •

    Fabric CA 独自のコンポーネント…Oracle Cloudのクラウドユーザーアカウントでの認証 • コンソール:ユーザー向けにサービスとしてのUI(操作画面)とREST APIでコンポーネントや設定などの管理、運用、 監視などの機能を提供 • REST Proxy:Chaincode実行を仲介(後述) (補足)インスタンス • サービスとしての利用/デプロイ単位 • インスタンスの中に上述のコンポーネントが含まれる • ひとつのOBPインスタンスはひとつの(HLFの)Organizationに対応する • インスタンス名はそのままOrganization名として使われる 30 Copyright © 2022, Oracle and/or its affiliates
  25. Peer Peer Orderer Orderer Node ID アイデンティティと認証(REST Proxy以外) • コンソール(UI/REST

    API)に対してはOracle Cloudの ユーザーアカウントで認証される • OBPインスタンス作成時、Administratorロールのユーザー用 のHLFアイデンティティが作成される • インスタンス作成者のクラウドユーザーID名義 • 秘密鍵&証明書はコンソールからダウンロード可能 • コンソールから行うHLFオペレーション(Channel作成、 Chaincodeデプロイなど)にはこのAdministratorアイデ ンティティが使われる • 各PeerやOrdererノードには自動的にCAから発行された HLFアイデンティティが付与される • ユーザー用のHLFアイデンティティは付属のFabric CAに対し てFabric CA Clientツールを用いることで作成も可能 (素のHLFと同様) 31 Copyright © 2022, Oracle and/or its affiliates コンソール Peer Orderer Fabric CA UI REST API Node ID Node ID Administrator ID ユーザー アプリ Cloud Identity 管理 クラウドID クラウドID OBPインスタンス クラウドユーザーIDとして認証
  26. REST APIでのブロックチェーン利用でアプリケーション開発が容易に REST Proxy概要 Copyright © 2022, Oracle and/or its

    affiliates Oracle Blockchain Platform Fabric Peerノード 台帳 Chaincode アプリケーション Fabric SDK Fabric Peerノード 台帳 Chaincode RESTプロキシー Fabric SDK アプリケーション gRPC REST API 32 FabricのIdentity FabricのIdentity gRPC Oracle CloudのID管理 サービスを利用して認証 • Fabric SDKの 組み込みが必須 • アプリで管理する秘密 鍵&証明書で認証 ⇨アプリケーション開発者 はFabricアプリ開発の習 熟が必須 通常のFabric利用アプリ開発 Oracle Blockchain Platform利用アプリ開発 • アプリはREST APIで ブロックチェーンを容易 に利用可能 • クラウドのIDを用いて容 易&セキュアに認証・認 可 ⇨Webアプリ開発の一般 的なスキルがあればOK 32
  27. Peer Peer REST Proxy経由でのChaincode実行でのアイデンティティ • REST Proxyの抱えているHLFアイデンティティが使われる • デフォルトでは”{Organization名}_defaultuser”というID •

    REST Proxyに対してはOracle Cloudユーザーアカウントで認証される(Basic認証またはOAuth2トークン認証) 33 Copyright © 2022, Oracle and/or its affiliates クライアントアプリ Cloud Identity 管理 クラウドID RESTプロキシー Fabric SDK XXX_defaultuser REST API 認証/認可 を確認 Peer Peer Peer Peer 自身のインスタンス内の (自身のOrgの) ノード Peer Peer Orderer Peer Peer Orderer 他Orgの ノード
  28. 凡例 D社 C社 B社 A社 ノード コンソーシアム型ブロックチェーンの一般的な概観 Copyright © 2022,

    Oracle and/or its affiliates SC L ノード SC L ノード SC L ノード SC L アプリ ブロックチェーン プラットフォーム アプリ オペレーター 他システム SC スマート コントラクト L 台帳 A社の所管するシステムの範囲 アプリ アプリ 35 ブロックチェーンノードは コンソーシアム内で分散して 所有/管理/運用
  29. ノード ノード ブロックチェーンノード エンタープライズでのブロックチェーンを利用したシステムのイメージ Copyright © 2022, Oracle and/or its

    affiliates 36 台帳 スマート コントラクト アプリ ケーション データベース 既存 データベース ユーザー アプリ連携 データ統合 ブロックチェーンと同内容 のデータをDBに複製 BIツール ERP、SCM等 基幹システム ERP、SCM等 基幹システム ERP、SCM等の 基幹システムや 他アプリケーション 既存 データベース 既存 データベース トランザクション発行 36
  30. Quick Integration:他システムとの連携を迅速に実現 RESTプロキシー+Oracle Integration Cloudを利用してのシステム連携 37 Copyright © 2022, Oracle

    and/or its affiliates 37 Oracle Blockchain Platform ノード ノード ブロックチェーンノード 台帳 Chaincode (スマート コントラクト) REST プロキシー 既存 データベース ERP、SCM 等 基幹システ ム ERP、SCM 等 基幹システ ム ERP、SCM等の 基幹システムや 他アプリケーショ ン 既存 データベース 既存 データベース Oracle Integration Cloud Oracle Integration Cloud:ERP、SCMなどの基幹システムや 各種SaaSとの連携を短期間で効率的に開発 • Oracleはもちろん、他社のクラウド/オンプレミスのソフトウェアとの 豊富なアダプターを利用(例:SAP、Salesforce、 NetSuite、 Oracle SCM Cloud、各種データベース) • 申請→承認などのワークフローの作りこみや、 API管理も可能 RESTプロキシーを通じて Oracle Integration Cloudを はじめとした様々なREST API 対応の連携ツールを活用可能
  31. リッチヒストリーデータベース:Oracleデータベースにブロックチェーンのデータを複製 • 台帳のデータをブロックチェーン外部のリレーショナルデータベースに複製 • ブロックチェーンが苦手とする複雑な参照処理(集計、分析)を、 データベース側で実装可能に • 多くの開発者が慣れ親しんでいるOracleデータベースでの開発 • Oracle

    Analytics Cloudをはじめとした多種多様なBIツールの利用 • 他システムとのデータ統合も一般的なツールとノウハウで容易に実現可能 • ERP、SCMなどの基幹システムとブロックチェーンのデータを 統合することで、データの価値を最大限に活用 Quick Integration:他システムとの連携を迅速に実現 Copyright © 2022, Oracle and/or its affiliates + ブロックチェーン: トランザクション と値の履歴を格納 State DB (World State): 現在の値を格納 台帳(Ledger) 複製 38
  32. 現在および過去のデータを複製することで、様々な用途と角度で利用可能 リッチヒストリーデータベースによるブロックチェーン上のデータの複製 Copyright © 2022, Oracle and/or its affiliates ブロックチェーン

    台帳 対象のチャネルごとに以下のテーブルを作成し、 ブロックチェーンのデータをほぼリアルタイム複製: • State:台帳上のレコード(Key-Valueセット)の現在の 値を格納するテーブル ※内容は台帳上のWorld State/State DBと一致する • History:台帳上およびPrivate Dataのレコードの値の履 歴(過去バージョン~現在バージョン)、更新トランザクション 情報を格納するテーブル • Transaction Details:台帳上のトランザクションの履歴 を格納するテーブル +内部用の連携セーブポイントを保存するテーブル(Lastテーブル) alphaのHistory alphaのState betaのState betaのHistory alpha チャネル beta チャネル 複 製 betaの Transaction Details alphaの Transaction Details 詳細は以下のドキュメントを参照: https://docs.oracle.com/en/cloud/paas/blockchain-cloud/usingoci/create-rich-history-database.html 39 39
  33. 台帳上のレコード(Key-Valueセット)の現在の値を格納 リッチヒストリーデータベースのテーブル:State カラム データ種別 説明 chaincodeId VARCHAR2(256) レコードを書き込んだChaincodeのID key VARCHAR2(1024)

    レコードのKey value VARCHAR2(4000) レコードのValue(JSON型でない場合にこちらのカラムに格納) valueJson CLOB レコードのValue(JSON型の場合にこちらのカラムに格納) blockNo NUMBER 更新トランザクションが何番目のブロックに格納されたか txnNo NUMBER 更新トランザクションがブロック内の何番目の位置に格納されたか 40 Copyright © 2022, Oracle and/or its affiliates 40
  34. 台帳上のレコードの値の履歴(過去バージョン~現在バージョン)を格納 リッチヒストリーデータベースのテーブル:History 台帳のレコードの値の履歴および更新トランザクション情報を格納 カラム データ種別 説明 chaincodeId VARCHAR2(256) レコードを書き込んだChaincodeのID key

    VARCHAR2(1024) レコードのKey txnIsValid NUMBER(1) 更新トランザクションが有効だったか value VARCHAR2(4000) レコードのValue(JSON型でない場合にこちらのカラムに格納) valueJson CLOB レコードのValue(JSON型の場合にこちらのカラムに格納) blockNo NUMBER 更新トランザクションが何番目のブロックに格納されたか txnNo NUMBER 更新トランザクションがブロック内の何番目の位置に格納されたか (⇒blockNo+txnNoでバージョン情報として機能) txnId VARCHAR2(128) 更新トランザクションのトランザクションID txnTimestamp TIMESTAMP 更新トランザクションのタイムスタンプ txnIsDelete NUMBER(1) レコードを消去するトランザクションかどうか 41 Copyright © 2022, Oracle and/or its affiliates 41
  35. 台帳上のトランザクションの履歴を格納 リッチヒストリーデータベースのテーブル:Transaction Details① 台帳のレコードの値の履歴および更新トランザクション情報を格納 カラム データ種別 説明 CHAINCODEID VARCHAR2(256) トランザクションのChaincodeのID

    BLOCKNO NUMBER トランザクションが何番目のブロックに格納されたか TXNNO NUMBER トランザクションがブロック内の何番目の位置に格納されたか TXNID VARCHAR2(128) トランザクションID TXNTIMESTAMP TIMESTAMP トランザクションのタイムスタンプ SUBMITTERCN, SUBMITTERORG, SUBMITTEROU VARCHAR2(512), VARCHAR2(512), VARCHAR2(512) トランザクション送信者の識別情報 CHAINCODETYPE VARCHAR2(32) Chaincodeの記述言語(Go、Java、JavaScript) VALIDATIONCOD ENAME VARCHAR2(32) トランザクションのValidation結果のコード(VALID or INVALID+理由コード) ENDORSEMENTS CLOB トランザクションにEndorseしたPeerノードの識別情報 INPUTS CLOB Chaincodeに引き渡された入力パラメーター EVENTS CLOB Chaincodeから発出したカスタムイベント名 42 Copyright © 2022, Oracle and/or its affiliates 42
  36. 台帳上のトランザクションの履歴を格納 リッチヒストリーデータベースのテーブル:Transaction Details② 台帳のレコードの値の履歴および更新トランザクション情報を格納 カラム データ種別 説明 RESPONSESTATUS NUMBER(0) Chaincodeが返却したレスポンスのステータス

    RESPONSEPAYLOAD VARCHAR2(1024 ) Chaincodeが返却したレスポンスのペイロード RWSET CLOB トランザクションのRWSet(Read-Write Set…読み書きした台帳上のレコードのKeyとバー ジョンやValueの値) BLOCKCREATORCN, BLOCKCREATORORG, BLOCKCREATOROU VARCHAR2(512), VARCHAR2(512), VARCHAR2(512) ブロックを生成したOrdererノードの識別情報 CONFIGBLOCKNUMBER NUMBER(0) トランザクション時点で有効となっていたConfig Blockのブロックナンバー CONFIGBLOCKCREATO RCN, CONFIGBLOCKCREATO RORG, CONFIGBLOCKCREATO ROU VARCHAR2(512), VARCHAR2(512), VARCHAR2(512) トランザクション時点で有効となっていたConfig Blockを生成したOrdererノードの識別情報 43 Copyright © 2022, Oracle and/or its affiliates 43
  37. データベースに複製されたデータの利活用イメージ Copyright © 2022, Oracle and/or its affiliates 44 ブロックチェーン:

    トランザクション と値の履歴を格納 State DB (World State): 現在の値を格納 JSON 単純型 • Key-Value型でデータ を保持 • ValueはJSONや単純 データ型(文字列、数 値など) スマート コントラクト ブロックチェーン データベース 各種ツール • 現在のState • 過去バージョンのState • トランザクション履歴 の情報をテーブルとして保持 データベース向けの様々なツールも利用し、 高度、高速なデータ利活用 • スマートコントラクトの代替としてアプリケー ションからテーブル上のデータをクエリ • JSONの内容を別テーブルにコピーしカラム に展開 • 高度な集計や分析の実行 • 他のシステムやデータベースとのデータ統合 Data Integration GoldenGate Analytics Visual Builder APEX アプリ開発 Graph データ統合 分析 ERP、SCM、CRM アプリ連携 Integrations 複製
  38. グラフ分析×ブロックチェーン上のデータ ユースケースの例 • 資金の移動元と移動先を分析 • マネーロンダリングや不正などが疑 われる支払いを検出 • 製品、部品、サプライヤーの関係 を可視化/分析

    • トレーサビリティを実現するとともに、 よりリスクに強く最適なサプライ チェーンを構築 • ユーザー同士、ユーザーと店舗、 ブランドの関係を分析 • ユーザープロファイルの構築とリコメ ンデーションなどへの応用 45 Copyright © 2022, Oracle and/or its affiliates デジタル通貨/ペイメント サプライチェーン マーケットプレイス/コミュニティ
  39. REST Proxyによる複数Channel間アトミックトランザクションのサポート • 2フェーズコミットを用いたアトミックトランザクションをサポート • セットに含めた全てのトランザクションが揃ってコミット(反映)、 またはロールバック(撤回)される • Chaincodeロジックの改修は不要 •

    Hyperledger Fabricを用いるうえで課題となりがちな 複数Channel間での更新の整合性担保を容易に • 例:Channel1でNFTの所有者を更新しつつ、 Channel2で代金としてコインの残高を移転 • REST ProxyのatomicTransactionsエンドポイントを使用 • Fabric SDK/gRPCでアトミックトランザクションを行いたい 場合は、後述のXAライブラリを利用 詳細は以下の記事を参照 https://blogs.oracle.com/oracle4engineer/post/introducing-atomic-cross-channel- updates-in-oracle-blockchain-jp 48 Copyright © 2022, Oracle and/or its affiliates クライアント アプリケーション REST Proxy Channel 1 REST API: atomicTransactions [ {Ch1でのTx1}, {Ch2でのTx2} ] {Ch1でのTx1} Channel 2 {Ch2でのTx2} アトミック Blockchain
  40. 2フェーズコミット(2PC)とは? • 分散トランザクションの手法のひとつ • 複数の独立したシステムが参加するトランザクションの結 果の整合性を保つ • 全参加者が揃って{反映する | 撤回する}のどちらかにし、

    一部の参加者のみが反映する状況を防ぐ …トランザクションの原子性(atomicity) • 準備フェーズと確定フェーズのふたつのフェーズでトランザクショ ンを行う • 準備フェーズでは参加者にそれぞれの部分トランザクション がコミット可能か問い合わせる(→Prepare要求) • すべての参加者がコミット可能と回答した場合、確定 フェーズで全参加者にコミットさせる(→Commit要求) 49 Copyright © 2022, Oracle and/or its affiliates 準備 フェーズ 確定 フェーズ
  41. REST ProxyのatomicTransactionエンドポイントへのリクエスト例 • アトミックに行いたい複数のトランザクションを配列に含めて送付 • それぞれにChannel名、Chaincode名、引数などを指定 51 Copyright © 2022,

    Oracle and/or its affiliates { "transactions": [ {"chaincode":"obcs-marbles","args":["transferMarble", "marble1", "smith"],"timeout":0, "channel":"goods"}, {"chaincode":"obcs-example02","args":["pay", "smith", "garcia", "50"],"timeout":0, "channel":"wallet"} ], … }
  42. OBPの2PCモデルにおけるHLFトランザクション 独自改善により、PeerがPrepare/Commit/RollbackフェーズのトランザクションについてはEndorsementと Validation/Commitでの処理を分岐 • Prepareフェーズ: • (更新対象のKey-Valueを直接更新するのではなく) 更新内容をステージするKey-Value(→staged_kv)を別に追加する • 更新対象のKVのロックを表すデータを追加する

    • Commitフェーズ: • staged_kvとして保存されている更新内容を更新対象のKVに反映し、staged_kvは削除する • ロックを削除する • Rollbackフェーズ:staged_kvとロックを削除する 詳細は以下の記事を参照 https://blogs.oracle.com/oracle4engineer/post/introducing-atomic-cross-channel-updates-in-oracle-blockchain-jp 53 Copyright © 2022, Oracle and/or its affiliates
  43. atomicTransactionエンドポイントのレスポンス例(成功パターン) { "returnCode": "Success", "result": { "transactions": [ { "channel":

    "goods", "chaincode": "obcs-marbles", "txstatus": "Committed", "prepare": { "txid": "fe262233" }, "commit": { "txid": "badcb3b4" }, "rollback": {} }, (↗に続く) { "channel": "wallet", "chaincode": "obcs-example02", "txstatus": "Committed", "prepare": { "txid": "9caf809c" }, "commit": { "txid": "1594d0ab" }, "rollback": {} } ], "globalStatus": "Success", "globalTxid": "259910a26006", … 54 Copyright © 2022, Oracle and/or its affiliates
  44. atomicTransactionエンドポイントのレスポンス例(失敗パターン) { "returnCode": "Failure", "result": { "transactions": [ { "channel":

    "goods", "chaincode": "obcs-marbles", "txstatus": "Rolledback", "prepare": { "txid": "fe262233" }, "commit": {}, "rollback": { "txid": "badcb3b4" }, }, (↗に続く) { "channel": "wallet", "chaincode": "obcs-example02", "txstatus": "FailedPrepare", "prepare": { "error": "failed to invoke chaincode. 'smith' doesn’t have enough tokens to pay 'garcia'" }, "commit": {}, "rollback": { "error":"skipping rollback since prepare stage has failed or was skipped" } } ], "globalStatus": "Failure", "globalTxid": "259910a26006", … 55 Copyright © 2022, Oracle and/or its affiliates
  45. 外部トランザクションマネージャによるXAグローバル分散トランザクションのサポート • 分散トランザクションの標準であるX/Open XAに対応し、 Oracle Blockchain PlatformをXAリソースとして扱えるように • 分散トランザクションの一部としてブロックチェーンのトランザクションを 実行することが可能

    • 2フェーズコミットにより、セットでのコミットまたはロールバック • エンタープライズで求められるデータ整合性の担保が容易に実装可能 • 複数Channel間でのアトミックトランザクション • データベース、メッセージキューなど他のXA対応リソースとのアト ミックなトランザクション • クライアントアプリケーションをJavaで実装し、OBPXAResource、 OBPXADataSource、OBPXAConnectionなどのライブラリを用いるこ とで利用可能 56 Copyright © 2022, Oracle and/or its affiliates Ch1 Ch2 MQ DB Blockchain 他のXAリソース クライアントアプリケーション Tx Managerライブラリ OBP XA ライブラリ 他XAリソース ライブラリ トランザクションマネージャ Tx Tx Tx Tx アトミック
  46. Hyperledger Fabricをベースにエンタープライズ利用向けPaaSとオンプレミスで提供 • 数ステップで構築完了、GUIコンソールで管理・運用も容易 • エンタープライズグレードの耐障害制、堅牢性 • マルチクラウド、ハイブリッドクラウド、 オープンなネットワーク構成が可能 •

    Oracle独自の付加価値: • State DBとしてBerkeley DBを利用:パフォーマンスとクエリ利便性向上 • 多機能なREST API:スマートコントラクトの利用を容易に • 台帳のデータをRDBに複製:大量照会、分析、データ統合 • スマートコントラクトを容易に開発:付属の開発ツールでアセット仕様からコードを自動生成 • 複数ChannelのアトミックトランザクションとXA対応:複数Channelでの更新のアトミックな実行 や、ローカルのDB、MQなどとのグローバルトランザクションをサポート Oracle Blockchain Platform Copyright © 2022, Oracle and/or its affiliates 東京DCからも サービス提供中 58
  47. • 10/11(火): Hyperledger Fabric(再)入門 • コンポーネントやトランザクションフローなど基本を解説 • 10/18(火):Hyperledger Fabricのネットワーク設計 •

    ブロックチェーンネットワークの設計の考え方、進め方を解説 • 10/25(火):Hyperledger FabricアプリとChaincodeの開発 • クライアントアプリケーションとChaincodeの開発方法を解説 • 11/1(火):Oracle Blockchain Platformを用いたHLFアプリ開発 • Oracle Blockchain Platformならではのメリット、開発方法を解説 集中講義シリーズ Copyright © 2022, Oracle and/or its affiliates 59