2018年7月8日日曜日

Hyperledger FabricのCapability機能

Hyperledger Fabric では、大規模なブロックチェーンネットワークを構成することを想定し、異なるバージョンのPEERとORDERERが混在できるように、プロトコルの互換性を確保している (Capability機能という)。
Fabric Java SDKはv1.1を利用し、PEER/ORDERER/CAはv1.2を利用するブロックチェーン環境において、ユーザのenroll、チェーンコードをINVOKE/QUERYできるかを実機検証してみる。



実機確認結果
全てのインターフェースで、互換性を確認できた。

PEERに対するINVOKE:OK
Fabric SDKからPEERへのプロポーザル送信
DEBUG Channel - Channel mychannel got back from peer peer0.org1.example.com status: 200, message: 

Fabric SDKからOrdererへのトランザクション送信
DEBUG OrdererClient - resp status value: 200, resp: SUCCESS

PEERからFabric SDKへのブロック通知
DEBUG EventHub - EventHub eventhub01 got  event type: BLOCK

PEERに対するQUERY:OK
INFO  HFJavaSDKBasicExample - [{"Key":"CAR0", "Record":{"colour":"blue","make":"Toyota","model":"Prius","owner":"Tomoko"}},{"Key":"CAR1", "Record":{"colour":"red","make":"Ford","model":"Mustang","owner":"Brad"}},{"Key":"CAR12", "Record":{"colour":"Black","make":"Honda","model":"Accord","owner":"Tom"}},{"Key":"CAR13", "Record":{"colour":"Black","make":"Honda","model":"Accord","owner":"Tom"}},{"Key":"CAR2", "Record":{"colour":"green","make":"Hyundai","model":"Tucson","owner":"Jin Soo"}},{"Key":"CAR3", "Record":{"colour":"yellow","make":"Volkswagen","model":"Passat","owner":"Max"}},{"Key":"CAR4", "Record":{"colour":"black","make":"Tesla","model":"S","owner":"Adriana"}},{"Key":"CAR5", "Record":{"colour":"purple","make":"Peugeot","model":"205","owner":"Michel"}},{"Key":"CAR6", "Record":{"colour":"white","make":"Chery","model":"S22L","owner":"Aarav"}},{"Key":"CAR7", "Record":{"colour":"violet","make":"Fiat","model":"Punto","owner":"Pari"}},{"Key":"CAR8", "Record":{"colour":"indigo","make":"Tata","model":"Nano","owner":"Valeria"}},{"Key":"CAR9", "Record":{"colour":"brown","make":"Holden","model":"Barina","owner":"Shotaro"}}]

CAでのユーザ認証: OK
DEBUG HFClient - Setting user context to MSPID: Org1MSP user: admin










Ubuntu 16.04にGo 1.10.1 をインストール

# sudo apt-get update
# sudo apt-get -y upgrade

★apt-get update実行中に以下のエラーが発生したら、PGPキーをインストールする

E: コマンドラインオプション 'y' [-y から] は、ほかのオプションとの組み合わせで理解できません。
root@bushidoyasu-VirtualBox:/opt/fabric/src/github.com/hyperledger/fabric/examples/e2e_cli# upgradeapt-key adv --keyserver keyserver.ubuntu.com --r
ecv-keys 308C15A29AD198E9

# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 308C15A29AD198E9
Executing: /tmp/tmp.W5FVqzn8iJ/gpg.1.sh --keyserver
keyserver.ubuntu.com
--recv-keys
308C15A29AD198E9
gpg: 鍵9AD198E9をhkpからサーバkeyserver.ubuntu.comに要求
gpg: 鍵9AD198E9: 公開鍵"Launchpad PPA for The Go Language Gophers"をインポートしました
gpg: 処理数の合計: 1
gpg:               インポート: 1  (RSA: 1)



# sudo curl -O https://storage.googleapis.com/golang/go1.10.1.linux-amd64.tar.gz
# sudo tar -xvf go1.10.1.linux-amd64.tar.gz
# sudo mv go /usr/local
# vi  ~/.profile
★以下のパスを追加する
export PATH=$PATH:/usr/local/go/bin
export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin
# source ~/.profile

# go version
go version go1.10.1 linux/amd64

Hyperledger Fabric 1.1以降で追加されたPEERコマンド

Hyperledger Fabric 1.1以降では、PEERコマンドの機能が大幅に強化された。
新規に追加されたPEERコマンドを使ってみる。

ピアにInstalledされたチェーンコード一覧の取得

# peer chaincode list --installed -C mychannel
Get installed chaincodes on peer:
Name: fabcar, Version: 1.0, Path: github.com/fabcar/go, Id: 4846dcee8e67da7d20eac366587b897cf3906c5fc90a2357f4849aec01fc5358

<解説>
対象のPEERに、以下のチェーンコード名、バージョン、パス、チェーンコードIDがインストールされている

チェーンコード名:fabcar
バージョン:1.0
パス:github.com/fabcar/go
チェーンコードID:4846dcee8e67da7d20eac366587b897cf3906c5fc90a2357f4849aec01fc5358

ピアにInstantiatedされたチェーンコード一覧の取得

# peer chaincode list --instantiated -C mychannel
Get instantiated chaincodes on channel mychannel:
Name: fabcar, Version: 1.0, Path: github.com/fabcar/go, Escc: escc, Vscc: vscc

<解説>
対象のPEERに、以下のチェーンコード名、バージョン、パス、ESCC名、VSCC名がinstantiateされている。

チェーンコード名:fabcar
バージョン:1.0
パス:github.com/fabcar/go
ESCC名:escc  (デフォルトのシステムチェーンコード)
VSCC名:vscc(デフォルトのシステムチェーンコード)

PEERが所属するチャネル名一覧の取得

# peer channel list
2018-07-08 05:59:01.746 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
Channels peers has joined:
mychanne
#

ブロックチェーン情報の取得

# peer channel getinfo -c mychannel
2018-07-08 06:01:37.432 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
Blockchain info: {"height":3,"currentBlockHash":"01gwIBF3LEjesqG/FPAx43jtFFLZv0isOXYXqvbZTPY=","previousBlockHash":"PpP80dqWT2gS8Cwalw8JtIkD0eP5YkxuEih9syr9fSE="}
#

PEERの起動状況の確認

#peer node status
status:STARTED

PEERの起動

# peer node start


そのほか


  • チェーンコードをアンインストールするコマンドは現時点では提供されていない。
  • PEERを停止するコマンドは現時点では提供されていない。
  • 2つ以上のEndorsing Peerの署名が必要なINVOKEは、PEERコマンドでは実行できない(1つのEndorsing Peerしかプロポーザルをなげることができないため)。





Node.jsとnpmを最新バージョンにアップグレード

現状のバージョン


# npm -v
3.5.2

# node --version
v4.2.6

nのインストール

#npm install -g n

nodeの安定版と最新版のバージョン確認

# n --stable
10.6.0

#n --latest
10.6.0

最新バージョンのnodeへアップグレード

# n latest

     install : node-v10.6.0
       mkdir : /usr/local/n/versions/node/10.6.0
       fetch : https://nodejs.org/dist/v10.6.0/node-v10.6.0-linux-x64.tar.gz
######################################################################## 100.0%
   installed : v10.6.0
#

最新バージョンのnpmへアップグレード

#npm update -g npm
# npm -v
3.5.6