More Related Content Similar to Hyperledger Hands-on 2019-03-30 @ Singularity HIVE
Similar to Hyperledger Hands-on 2019-03-30 @ Singularity HIVE (20) Hyperledger Hands-on 2019-03-30 @ Singularity HIVE6. ブロックチェーンネットワーク
台帳 A
台帳 B
台帳 C
台帳
D
台帳 E
台帳 F
台帳
台帳
台帳 台帳
台帳
台帳
管理台帳
YES
YES
YES
YES
YES
NO
(従来の台帳管理)
分散台帳ネットワーク
コンセンサス
ブロックチェーンによる台帳管理
YES
非中央集権
13. ステート DB の併用
• ブロックチェーンを格納するサーバーノード(ピア)とは別に
データベースを併用する。
• このデータベースは既存のものを使ってもよいが、ステート DB
と呼ばれるデータベースを使うとセキュアにデータを格納でき
る。
ステート
DB
ステート DB 自体は一般的なデータベースと同様に使える。
ステート DB にはブロックチェーンを経由しないとアクセスできない。
データ自体はステート DB で管理し、そのトランザクション記録を
ブロックチェーンに残すことで、ステート DB の改竄が困難になる。
ステート DB ブロックチェーン
ユーザー A を追加する ユーザー A の情報を追加 「ユーザー A を追加した」という記録を追加
ユーザー A がログイン ユーザー A のログイン記録を更
新
「ユーザー A がログインした」という記録を
追加
ユーザー A を削除する ユーザー A の情報を削除 「ユーザー A を削除した」という記録を追加
14. ブロックチェーンプラットフォームの向き&
不向き
• 一社独占による弊害脱却
• 共通の仕組みをコミュニティで運用
• 仲介者の省略
• 仲介手数料
• 孫請け、曾孫受け、・・
• 改ざんできないものが記録
• 寄付/贈与/持ち主変更
• 正しく相手に渡っているか?
• 転売防止
• 大量トランザクション
• コンセンサスによる書込みパフォーマンス
• ブロックは消えない(増え続ける、要スト
レージ)
• 既存 DB の代替
• 検索機能はまだ不充分/ロールバック不可
• 「データベースの代替」ではない
• 人手によるオペレーション
• その人は信用できるのか?
• 自動化できないか?
16. (ハンズオン準備)
Hyperledger Composer Playground
モデル ACLスクリプト メタデータクエリー
アプリケーション
Business Network Archive
(.bna ファイル )
デプロイ
アーカイブ作成
Hyperledger Composer Playground
ブロックチェーンネットワーク (Hyperledger Fabric)
どんなユーザーが
どんな商品を
どんなトランザクションを
どんな権限で
どういう条件で選択して
17. Hyperledger Composer Playground 体験
(0)
献血
A
A
×
以下の処理をブロックチェーンで管理
- 血液を登録し、持ち主を変更する
- 参加者 : 人
- 取り扱う商品 : 血液
- 同じ血液型のユーザー同士で交換可能
H - アッシュ - 仮想通貨 BLOOD と AI になった歌姫
(参考文献)
18. Hyperledger Composer Playground 体験
(1)
https://composer-playground.mybluemix.net/
シークレットモード
Windows: Ctrl+Shift+N(Chrome)
Ctrl+Shift+P(FireFox)
MacOS: Command+Shift+N(Chrome)
22. Hyperledger Composer Playground 体験
(5)
# My First Network
はじめての Hyperledger Composer Playground
## Copyright
2019 K.Kimura all rights reserved.
コピペ用参照 https://bit.ly/2Aj4pK0
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
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
32. Hyperledger Composer Playground 体験
(15)
{
"$class": "org.bmxgg.User",
"id": "1001",
"name": " きむら ",
"type": "A"
}
$class は既定値。
id と name と type を指定する。
36. 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. Hyperledger Composer Playground 体験
(22)
作成した blood_id と、
新しいユーザーの user_id を指定する
{
"$class": "org.bmxgg.ChangeOwner",
"blood_id": "2001",
"user_id": "1002"
}
↓
2001 の(ユーザー 1001 の)
400 ml の血液を
ユーザー 1002 のものに変更する
42. Hyperledger Composer Playground 体験
(25)
試しに Type が異なるユーザーの
user_id を指定して実行してみる
{
"$class": "org.bmxgg.ChangeOwner",
"blood_id": "2001",
"user_id": "1003"
}
「血液型が不一致」エラー
↓
2001 の(ユーザー 1002 の)
400 ml の血液を
ユーザー 1003 のもの変更できない
Editor's Notes localStorage.clear()
Ctrl + Shift + N
Command + Shift + N