More Related Content Similar to (きっと)あなたにも出来る!Hyperledger composer でブロックチェーンアプリを動かしてみた (20) (きっと)あなたにも出来る!Hyperledger composer でブロックチェーンアプリを動かしてみた2. 自己紹介
• 木村 桂
• 日本アイ・ビー・エム IBM クラウドガレージデベロッパー
• Twitter: @dotnsf
• Github: https://github.com/dotnsf
• Blog: http://dotnsf.blog.jp/
6. Hyperledger プロジェクト
• 以下のミッションを持ってスタートしたオープンソース開発プロジェクト
• 企業利用に適したオープンソースの分散元帳のフレームワークとコードベースを創
り、その上で利用者がビジネストランザクションのための堅牢で業種に特化したア
プリケーション、プラットフォーム、ハードウエアシステムを構築、実行できるように
する。
• オープンソースのテクニカルコミュニティを作り、様々なインダストリー
ソリューションに跨るブロックチェーンと分散台帳のユースケースに照準を合わせつ
つ、ソリューションプロバイダーやユーザーのエコシステムに便益を提供する。
• 開発者、サービスやソリューションのプロバイダー、エンドユーザーを含むエコシス
テムの指導的メンバーの参加を推進する。
• プロジェクトのインフラを主宰し、コミュニティの基盤、会議、
イベント、そして協働的なディスカッションのための中立的な母体を確立し、
• プロジェクトのビジネスや技術の統治に関わる枠組みを提供する。
14. Hyperledger Fabric と Hyperledger Composer を使った
ブロックチェーンアプリケーションの構成
ブロックチェーン環境ブロックチェーン環境ブロックチェーン環境ブロックチェーン環境アプリケーション環境アプリケーション環境アプリケーション環境アプリケーション環境 API サーバーサーバーサーバーサーバー
ユーザーのアクセス先 データの格納先
アプリケーションがブロックチェー
ンを利用するための API を提供す
るサーバー
Hyperledger Composer
APIAPP
Go 言語不要言語不要言語不要言語不要
より具体的なオブジェクトイメージより具体的なオブジェクトイメージより具体的なオブジェクトイメージより具体的なオブジェクトイメージ
SQL ライクなクエリーライクなクエリーライクなクエリーライクなクエリー
::::
アプリケーションは API サーバー
とだけ通信できればよい。
色々な言語でアプリケーションを
実装できる。
API サーバーとだけ通信できる
ChainCode を用意すればよい。
APP
ChainCode
18. Hyperledger Composer Playground
オンライン版: https://composer-playground.mybluemix.net/
Docker 版: https://hyperledger.github.io/composer/
モデル ACLスクリプト メタデータクエリー
Hyperledger
Fabric
アプリケーション
Chaincode
コンテナ
Business Network Archive
(.bnaファイル)
デプロイ
アーカイブ作成
この部分を GUI で⾏うツール
Hyperledger Composer Playground
20. Hyperledger Composer 用語
• Model
• 以下の Participant, Asset, Transaction を含む
• Participant
• ビジネスネットワークの参加者となるリソースを定義したもの
• Asset
• ビジネスネットワーク上で取引されるリソースを定義したもの
• Transaction
• Assetの作成、更新、削除といった処理のトリガーとなるトランザクション
• Model 内ではインターフェースのみを定義
• Script
• Transaction 処理の実装
• ACL
• Model に定義されたリソースに対するアクセス権をビジネスロジックとは切り離して定義したもの
30. (README.md の編集内容サンプル)
# My HelloWorld Network
## Overview
はぢめての Hyperledger Composer Playground
## Licencing
This code is licensed under MIT.
## Copyright
2017 K.Kimura @ IBM Japan all rights reserved.
33. (Model ファイルの編集内容サンプル (1) )
/**
* New model file
*/
/* 名前空間 */
namespace com.ibm.japan.model
/* Participants */
participant User identified by id{
o String id
o String name
o String[] email optional
}
id をキーとする User という名前の Participant
User の構造体の定義
- 通常のプロパティは o を付けて定義
- 利用可能な型は String, Double, Long, Integer, Boolean, DateTime
- 配列の指定も可能(後ろに [])
- オプションプロパティは optional と指定
34. (Model ファイルの編集内容サンプル (2) )
/* Assets */
asset Item identified by id{
o String id
o String name
o Integer price optional
--> User owner
}
/* Transaction */
transaction ChangeOwnerTx{
--> Item item
--> User user
}
id をキーとする Item という名前の Asset
Item の構造体の定義
- Asset とほぼ同様
- 他の Asset や User との関連を示すプロパティは --> を接頭辞とする
ChangeOwnerTx という名前の Transaction
インターフェースの定義のみ
- Item 型の item と、User 型の user をパラメータとする
実装は後述の Script 内
37. (Script ファイルの編集内容サンプル)
/**
* @param {com.ibm.japan.model.ChangeOwnerTx} tx Transaction sample instance
* @transaction
*/
function changeOwner(tx){
tx.item.owner = tx.user;
return getAssetRegistry( 'com.ibm.japan.model.Item' )
.then( function( registry ){
return registry.update( tx.item );
});
}
アノテーションで Transaction との紐付けを行う
- ChangeOwnerTx Transaction の実装で、パラメータは tx 内
ChangeOwnerTx Transaction が実行されると、この中のコードが処理される。
tx.item.owner を tx.user で上書きして更新する
40. (ACL ファイルの編集内容サンプル1)
/**
* New access control file
*/
rule Default {
description: "Allow all users access to all resources"
participant: "com.ibm.japan.model.User"
operation: ALL
resource: "com.ibm.japan.model.*"
action: ALLOW
}
rule SystemACL {
description: "System ACL to permit all access"
participant: "org.hyperledger.composer.system.Participant"
operation: ALL
resource: "org.hyperledger.composer.system.**"
action: ALLOW
}
全 User に全てのオペレーションを許可
システムに全てのオペレーションを許可
52. BNA ファイルを作った後の作業
モデル ACLスクリプト メタデータクエリー
Hyperledger
Fabric
アプリケーション
Chaincode
コンテナ
Business Network Archive
(.bnaファイル)
デプロイ
アーカイブ作成
この部分を GUI で⾏うツール
Hyperledger Composer Playground
53. BNA ファイルを作った後の作業
モデル ACLスクリプト メタデータクエリー
Hyperledger
Fabric
アプリケーション
Chaincode
コンテナ
Business Network Archive
(.bnaファイル)
デプロイ
アーカイブ作成
composer-cli
Client Libraries
56. Hyperledger Composer Client Libraries
https://www.npmjs.com/package/composer-client
Node.js から Hyperledger Composer を操作する際のクライアントライブラリ
57. Hyperledger ComposerHyperledger ComposerHyperledger ComposerHyperledger Composer を使ったブロックチェーンアプリケーションの構成を使ったブロックチェーンアプリケーションの構成を使ったブロックチェーンアプリケーションの構成を使ったブロックチェーンアプリケーションの構成
ブロックチェーン環境ブロックチェーン環境ブロックチェーン環境ブロックチェーン環境アプリケーション環境アプリケーション環境アプリケーション環境アプリケーション環境 API サーバーサーバーサーバーサーバー
ユーザーのアクセス先 データの格納先
アプリケーションがブロックチェー
ンを利用するための API を提供す
るサーバー
Hyperledger Composer
APIAPP
APP
本日の紹介範囲本日の紹介範囲本日の紹介範囲本日の紹介範囲
ChainCode