open blockchain 3
Post on 16-Apr-2017
829 Views
Preview:
TRANSCRIPT
Bluemix でブロックチェーンを体験
2016/6/16
kohei yatsushiro
agenda
• 前半 : 講義– Bluemix と Blockchain-as-a-Service– Open Blockchain について– ブロックチェーンサービスについて
• 後半:ハンズオン– Bluemix でブロックチェーン体験
2
Bluemix と Blockchain-as-a-Service• Bluemix– IBM が提供するクラウド環境 (PaaS)– Watson を代表とする開発者支援のための様々なサービスを提供
Blockchain のサービスが登場=
Open Blockchain
3
Open Blockchain とは 1/2
4
• 自由な参加– Bitcoin: 採掘 (PoW) の仕組みを導入 – NEM: 採掘の問題点を解消した PoI を導入
プライベート型
パブリック型
• 参加者を管理– mijin :NEM の技術をもとに開発– Open Blockchain: カスタマイズ性が高い
Open Blockchain とは 2/2
• IBM が製作したプライベート型のブロックチェーン– 企業が自社サービスで利用することを想定
• Hyperledger に提供された OSS– IBM 、 intel 、 redhat 、富士通などが参加する
Blochchain 推進コミュニティー• 利用方法– ノードを自分で立てる
• https://github.com/openblockchain– Bluemix 上のサービス
5
Open Blockchain の用語• ワールドステート– ブロックチェーン上で管理されるデータ– key と value のペアで保存される• value はバイト配列
• Chaincode– 取引の定義が記述されたもの– ユーザが自分で作成できる
6
Chaincode の中身• Chaincode = ソースコード– 現在は Go 言語のみで記述可能– 3 つの関数を定義することで取引を定義
– 取引ではこの関数が実行される• Init 関数
Chaincode をデプロイするときに実行される• Invoke 関数ワールドステートへの変更を行う• Query 関数ワールドステートの参照を行う
7
ブロックに記述されるブロックに記述されるブロックに記述されない
Open Blockchain の取引 1/2• Chaincode はブロックにデプロイすることで有効化– ブロックチェーンに取り込まれた Chaincode は改変できないので信頼できる
8
chaincodeブロックチェーン
chaincode
デプロイ
Open Blockchain の取引 2/2
9
• Open Blockchain の取引はブロックに取り込まれた Chaincode を参照する形で行われる
chaincode transaction transaction
まとめ
デプロイ10
chaincode transaction
chaincode
Init 関数
Invoke 関数ワールドステート
追加・変更
Query 関数参照
10
取引の定義
管理しているデータ
取引 ( 変更 )
Blockchain のサービス 1/9• ブロックチェーンサービスでできること– ブロックチェーンネットワークの構築
11
ブロックチェーンの状態の監視
API からのブロックチェーンの操作
Blockchain のサービス 2/9
12
ブロックチェーンのステータスの管理画面
Blockchain のサービス 3/9
現在生成されているブロックの総数
13
Blockchain のサービス 4/9
1 時間あたりの平均ブロック生成数
14
Blockchain のサービス 5/9
1 つのブロックに含まれる平均トランザクション数
15
Blockchain のサービス 6/9
デプロイされた Chaincode の数
16
Blockchain のサービス 7/9
実行した取引 ( Invoke) の数
17
Blockchain のサービス 8/9
生成されたブロック
18
Blockchain のサービス 9/9
クリックしたブロックに含まれているトランザクション19
Bluemix でブロックチェーン体験
20
ハンズオンパート
事前準備の確認• Bluemix のアカウントの作成• ブロックチェーンサービスの起動– まだの方は手順書 1.1 参照
表示されていない方は URL をhttps://obc-service-broker-prod.au-syd.mybluemix.net/v2/monitorに変更
21
ハンズオンの目標• Open Blockchain で取引を定義・実行する– Chaincode をデプロイする– Chaincode を実行する– Chaincode の内容を理解する
22
Blockchain のサービスの確認 1/2
23
Blockchain のサービスの確認 2/2
初期状態では全て 0 になっています
24
使用する Chaincode の中身• サンプルを用意しました– https://github.com/ko-he-/tech-circle_blockchain/tree/
master/example02• 3 つの関数– Init 関数
• なにもしない– Invoke 関数
• key(string) に対し value(string) を保存– ex) 管理番号 (key) に品名 (value) を保存
– Query 関数• key から value を検索して value を表示
– ex) 管理番号から品名を検索詳しくは実行しながら解説していきます
25
ログイン 1/3
・・ ・ ・・ ・先頭の ID/Secret をコピーしてどこかに保存
API のベース URI
26
ログイン 2/3
{ “enrollId”: “< ユーザ ID>", "enrollSecret": ”<Secret>"}
パラメータを入力してログインします
27
ログイン 3/3
OK が帰って来ればログイン成功です28
デプロイの実行
デプロイ29
chaincode
chaincode
Init 関数を実行
ワールドステート
29
C
デプロイ 1/3
30
{ "jsonrpc": "2.0", "method": "deploy", "params": { "type": 1, "chaincodeID": { "path": "https://github.com/ko-he-/tech-circle_blockchain/example02" }, "ctorMsg": { "function": "init", "args": [ ] }, "secureContext": "< ユーザ ID>" }, "id": 0}
デプロイ 2/3手順書からコピペしてください
31
これが chaincode の ID ですこの後使うので保存してください
結果が帰るまで少し時間がかかります
デプロイ 3/3
32
デプロイの実行結果• デプロイによりブロックが生成されたので確認してみましょう
Init 関数が実行されたことがわかります。 33
各パラメータの解説
34
jsonrpc JSON-RPC のバージョンmethod 実行するメソッド名
params
type Chaincode のタイプ (1 は Go 言語 )
chaincodeIDpath Chaincode のパス ( デプロイの
み )name Chaincode の ID( デプロイ以外 )
ctorMsg function, args 実行時に Chaincode に渡される引数
secureContext 実行するユーザ ID
id request と response の組を識別するためのもの
Init 関数
35
1 func (t *SimpleChaincode) Init( stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {
2 if len(args) != 0 {3 return nil,
errors.New("error")4 }56 return nil, nil7 }
Invoke の実行
36
chaincode transaction
ワールドステート
追加・変更
36
Invoke 関数取引 ( 変更 )
たとえばA101 というキーを持つ Book を Invoke するとき
A101
"args": [“A101”, “Book”]
Invoke 1/2
{ "jsonrpc": "2.0", "method": "invoke", "params": { "type": 1, "chaincodeID": { "name": “<chaincode ID>" }, "ctorMsg": { "function": "invoke", "args": [“A101”, “Book”] }, “secureContext”: ”< ユーザ ID>" }, "id": 0}
37
Invoke 2/2
38
Invoke の実行結果• デプロイによりブロックが生成されたので確認してみましょう
Invoke が実行されたことがわかります。 39
Invoke 関数
40
1 func (t *SimpleChaincode) Invoke( stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {
2 var key, value string3 var err error45 key = args[0]6 value = args[1]7 valbyte := []byte(value)8 err = stub.PutState(key,
valbyte)910
return nil, nil
11
}
Query の実行ワールドステート
参照
41
A101 というキーの値を参照したい
A101
Query 関数"args": [“A101”]
{ "jsonrpc": "2.0", "method": "query", "params": { "type": 1, "chaincodeID": { "name": "<chaincode ID>" }, "ctorMsg": { "function": "query", "args": [ ”A101"] }, "secureContext": "< ユーザ ID>" }, "id": 0}
Query 1/2
42
Invoke で追加した” Book” が帰って来ました!
結果が帰るまで少し時間がかかります
エラーが返ってきた場合・ 少し待ってもう一度実行してください・パラメータが間違っていないか確認してください。
Query 2/2
43
Query の実行結果• Query はブロックに書き込まれないので先ほどと変化がないことが確認できます
44
top related