open blockchain 3

44
Bluemix でででででででででで 2016/6/16 kohei yatsushiro

Upload: -

Post on 16-Apr-2017

829 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Open blockchain 3

Bluemix でブロックチェーンを体験

2016/6/16

kohei yatsushiro

Page 2: Open blockchain 3

agenda

• 前半 : 講義– Bluemix と Blockchain-as-a-Service– Open Blockchain について– ブロックチェーンサービスについて

• 後半:ハンズオン– Bluemix でブロックチェーン体験

2

Page 3: Open blockchain 3

Bluemix と Blockchain-as-a-Service• Bluemix– IBM が提供するクラウド環境 (PaaS)– Watson を代表とする開発者支援のための様々なサービスを提供

Blockchain のサービスが登場=

Open Blockchain

3

Page 4: Open blockchain 3

Open Blockchain とは 1/2

4

• 自由な参加– Bitcoin: 採掘 (PoW) の仕組みを導入 – NEM: 採掘の問題点を解消した PoI を導入

プライベート型

パブリック型

• 参加者を管理– mijin :NEM の技術をもとに開発– Open Blockchain: カスタマイズ性が高い

Page 5: Open blockchain 3

Open Blockchain とは 2/2

• IBM が製作したプライベート型のブロックチェーン– 企業が自社サービスで利用することを想定

• Hyperledger に提供された OSS– IBM 、 intel 、 redhat 、富士通などが参加する

Blochchain 推進コミュニティー• 利用方法– ノードを自分で立てる

• https://github.com/openblockchain– Bluemix 上のサービス

5

Page 6: Open blockchain 3

Open Blockchain の用語• ワールドステート– ブロックチェーン上で管理されるデータ– key と value のペアで保存される• value はバイト配列

• Chaincode– 取引の定義が記述されたもの– ユーザが自分で作成できる

6

Page 7: Open blockchain 3

Chaincode の中身• Chaincode = ソースコード– 現在は Go 言語のみで記述可能– 3 つの関数を定義することで取引を定義

– 取引ではこの関数が実行される• Init 関数

Chaincode をデプロイするときに実行される• Invoke 関数ワールドステートへの変更を行う• Query 関数ワールドステートの参照を行う

7

ブロックに記述されるブロックに記述されるブロックに記述されない

Page 8: Open blockchain 3

Open Blockchain の取引 1/2• Chaincode はブロックにデプロイすることで有効化– ブロックチェーンに取り込まれた Chaincode は改変できないので信頼できる

8

chaincodeブロックチェーン

chaincode

デプロイ

Page 9: Open blockchain 3

Open Blockchain の取引 2/2

9

• Open Blockchain の取引はブロックに取り込まれた Chaincode を参照する形で行われる

chaincode transaction transaction

Page 10: Open blockchain 3

まとめ

デプロイ10

chaincode transaction

chaincode

Init 関数

Invoke 関数ワールドステート

追加・変更

Query 関数参照

10

取引の定義

管理しているデータ

取引 ( 変更 )

Page 11: Open blockchain 3

Blockchain のサービス 1/9• ブロックチェーンサービスでできること– ブロックチェーンネットワークの構築

11

ブロックチェーンの状態の監視

API からのブロックチェーンの操作

Page 12: Open blockchain 3

Blockchain のサービス 2/9

12

ブロックチェーンのステータスの管理画面

Page 13: Open blockchain 3

Blockchain のサービス 3/9

現在生成されているブロックの総数

13

Page 14: Open blockchain 3

Blockchain のサービス 4/9

1 時間あたりの平均ブロック生成数

14

Page 15: Open blockchain 3

Blockchain のサービス 5/9

1 つのブロックに含まれる平均トランザクション数

15

Page 16: Open blockchain 3

Blockchain のサービス 6/9

デプロイされた Chaincode の数

16

Page 17: Open blockchain 3

Blockchain のサービス 7/9

実行した取引 ( Invoke) の数

17

Page 18: Open blockchain 3

Blockchain のサービス 8/9

生成されたブロック

18

Page 19: Open blockchain 3

Blockchain のサービス 9/9

クリックしたブロックに含まれているトランザクション19

Page 20: Open blockchain 3

Bluemix でブロックチェーン体験

20

ハンズオンパート

Page 21: Open blockchain 3

事前準備の確認• Bluemix のアカウントの作成• ブロックチェーンサービスの起動– まだの方は手順書 1.1 参照

表示されていない方は URL をhttps://obc-service-broker-prod.au-syd.mybluemix.net/v2/monitorに変更

21

Page 22: Open blockchain 3

ハンズオンの目標• Open Blockchain で取引を定義・実行する– Chaincode をデプロイする– Chaincode を実行する– Chaincode の内容を理解する

22

Page 23: Open blockchain 3

Blockchain のサービスの確認 1/2

23

Page 24: Open blockchain 3

Blockchain のサービスの確認 2/2

初期状態では全て 0 になっています

24

Page 25: Open blockchain 3

使用する 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

Page 26: Open blockchain 3

ログイン 1/3

・・ ・ ・・ ・先頭の ID/Secret をコピーしてどこかに保存

API のベース URI

26

Page 27: Open blockchain 3

ログイン 2/3

{ “enrollId”: “< ユーザ ID>", "enrollSecret": ”<Secret>"}

パラメータを入力してログインします

27

Page 28: Open blockchain 3

ログイン 3/3

OK が帰って来ればログイン成功です28

Page 29: Open blockchain 3

デプロイの実行

デプロイ29

chaincode

chaincode

Init 関数を実行

ワールドステート

29

C

Page 30: Open blockchain 3

デプロイ 1/3

30

Page 31: Open blockchain 3

{ "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

Page 32: Open blockchain 3

これが chaincode の ID ですこの後使うので保存してください

結果が帰るまで少し時間がかかります

デプロイ 3/3

32

Page 33: Open blockchain 3

デプロイの実行結果• デプロイによりブロックが生成されたので確認してみましょう

Init 関数が実行されたことがわかります。 33

Page 34: Open blockchain 3

各パラメータの解説

34

jsonrpc JSON-RPC のバージョンmethod 実行するメソッド名

params

type Chaincode のタイプ (1 は Go 言語 )

chaincodeIDpath Chaincode のパス ( デプロイの

み )name Chaincode の ID( デプロイ以外 )

ctorMsg function, args 実行時に Chaincode に渡される引数

secureContext 実行するユーザ ID

id request と response の組を識別するためのもの

Page 35: Open blockchain 3

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 }

Page 36: Open blockchain 3

Invoke の実行

36

chaincode transaction

ワールドステート

追加・変更

36

Invoke 関数取引 ( 変更 )

たとえばA101 というキーを持つ Book を    Invoke するとき

A101

"args": [“A101”, “Book”]

Page 37: Open blockchain 3

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

Page 38: Open blockchain 3

Invoke 2/2

38

Page 39: Open blockchain 3

Invoke の実行結果• デプロイによりブロックが生成されたので確認してみましょう

Invoke が実行されたことがわかります。 39

Page 40: Open blockchain 3

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

}

Page 41: Open blockchain 3

Query の実行ワールドステート

参照

41

A101 というキーの値を参照したい

A101

Query 関数"args": [“A101”]

Page 42: Open blockchain 3

{ "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

Page 43: Open blockchain 3

Invoke で追加した” Book” が帰って来ました!

結果が帰るまで少し時間がかかります

エラーが返ってきた場合・ 少し待ってもう一度実行してください・パラメータが間違っていないか確認してください。

Query 2/2

43

Page 44: Open blockchain 3

Query の実行結果• Query はブロックに書き込まれないので先ほどと変化がないことが確認できます

44