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