チェーンコードがワールドステートにKVS情報を登録する際、デフォルトでは平文で登録される。
Fabricが提供するチェーンコード関数(shim)において、暗号化・復号化関数を使ってKVS情報を暗号化・復号化してみる。
➀最初に、必要なパッケージをgovendorでインストールする。
# cd /opt/src/github.com/hyperledger/fabric-samples/chaincode/enccc_example
# go get github.com/kardianos/govendor
# govendor init
# govendor add +external
# ls -l vendor/
合計 44
drwxr-xr-x. 22 root root 4096 12月 24 16:06 github.com
drwxr-xr-x. 5 root root 47 12月 24 16:06 go.uber.org
drwxr-xr-x. 3 root root 15 12月 24 16:06 golang.org
drwxr-xr-x. 4 root root 34 12月 24 16:06 google.golang.org
drwxr-xr-x. 3 root root 21 12月 24 16:06 gopkg.in
-rw-r--r--. 1 root root 39682 12月 24 16:06 vendor.json
②チェーンコードをインストールする。ここでは、Fabric付属のサンプルソースを利用する。
#peer chaincode install -n bushido -v 1.0 -l golang -p github.com/chaincode/enccc_example
#
# peer chaincode instantiate -o orderer.example.com:7050 -C bushido -n bushido -l golang -v 1.0 -c '{"Args":[]}' -P "OR ('Org1MSP.peer','Org2MSP.peer')" --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem
③共通鍵を作成する。サポートしてる暗号アルゴリズムはAES 256bit。
# ENCKEY=`openssl rand 32 -base64` && DECKEY=$ENCKEY
# echo $ENCKEY
hVhA7CxStLauw9/aLBnieoC9dM237fQHPvU8ibS1MyY=
#
# IV=`openssl rand 16 -base64`
➃データを暗号化してワールドステートに登録する。
transientオプションに暗号化鍵を指定する。暗号化鍵はワールドステートには登録されない。
# peer chaincode invoke -n bushido -C bushido -c '{"Args":["ENCRYPT","key2","value2"]}' --transient "{\"ENCKEY\":\"$ENCKEY\",\"IV\":\"$IV\"}" --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem
⑤復号化してワールドステートから値を取得する。
transientオプションに復号化鍵(=暗号化鍵)を指定する。
# peer chaincode query -n bushido -C bushido -c '{"Args":["DECRYPT","key2"]}' --transient "{\"DECKEY\":\"$DECKEY\"}"
value2
ためしに、復号化鍵(DECKEY)に誤った値を指定した場合、以下のエラーが発生する。
・hogeとした場合
# peer chaincode query -n bushido -C bushido -c '{"Args":["DECRYPT","key2"]}' --transient "{\"DECKEY\":\"hoge\"}"
failed: Failed importing key with opts [&{true}]: Invalid Key Length [3]. Must be 32 bytes"
・32バイトの適用な値を指定した場合
# peer chaincode query -n bushido -C bushido -c '{"Args":["DECRYPT","key2"]}' --transient "{\"DECKEY\":\"111222xStLauw9/aLBnieoC9dM237fQHPvU8ibS1MyY=\"}"
Error: endorsement failure during query. response: status:500 message:"getStateAndDecrypt failed, err Invalid pkcs7 padding (unpadding > aes.BlockSize || unpadding == 0)\nFailed decrypting with opts [&{[] <nil>}]\ngithub.com/chaincode/enccc_example/vendor/github.com/hyperledger/fabric/bccsp/sw.(*CSP).Decrypt\n\t/chaincode/input/src/github.com/chaincode/enccc_example/vendor/github.com/hyperledger/fabric/bccsp/sw/impl.go:303\ngithub.com/chaincode/enccc_example/vendor/github.com/hyperledger/fabric/core/chaincode/shim/ext/entities.(*BCCSPEncrypterEntity).Decrypt\n\t/chaincode/input/src/github.com/chaincode/enccc_example/vendor/github.com/hyperledger/fabric/core/chaincode/shim/ext/entities/entities.go:246\nmain.getStateAndDecrypt\n\t/chaincode/input/src/github.com/chaincode/enccc_example/utils.go:40\nmain.(*EncCC).Decrypter\n\t/chaincode/input/src/github.com/chaincode/enccc_example/enccc_example.go:76\nmain.(*EncCC).Invoke\n\t/chaincode/input/src/github.com/chaincode/enccc_example/enccc_example.go:182\ngithub.com/chaincode/enccc_example/vendor/github.com/hyperledger/fabric/core/chaincode/shim.(*Handler).handleTransaction.func1\n\t/chaincode/input/src/github.com/chaincode/enccc_example/vendor/github.com/hyperledger/fabric/core/chaincode/shim/handler.go:273\nruntime.goexit\n\t/opt/go/src/runtime/asm_amd64.s:1333"
2018年12月24日月曜日
2018年12月9日日曜日
Fabric Javaチェーンコードをつかってみる
Hyperledger Fabric 1.3から、Java版チェーンコードが正式サポートされた。
Java版チェーンコードを使ってみる。
Javaチェーンコードを利用する際の前提条件は以下のとおり。
・JDK 1.8がインストール済みであること。
・gradle 2.12以上がインストール済みであること。
➀各PeerにJavaチェーンコードをインストールする。
※Fabricでは、Javaチェーンコードのサンプルが提供されており、今回はそれを利用する。
# peer chaincode install -n bushido -v 1.0 -l java -p /opt/gopath/src/github.com/chaincode/chaincode_example02/java/
#
# CORE_PEER_ADDRESS="peer0.org2.example.com:7051"
# CORE_PEER_LOCALMSPID="Org2MSP"
# CORE_PEER_MSPCONFIGPATH="/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp"
# CORE_PEER_TLS_CERT_FILE="/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt"
# CORE_PEER_TLS_KEY_FILE="/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key"
# CORE_PEER_TLS_ROOTCERT_FILE="/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt"
# peer chaincode install -n bushido -v 1.0 -l java -p /opt/gopath/src/github.com/chaincode/chaincode_example02/java/
②チェーンコードのinstantiateを行う。
# peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt -C bushido -n bushido -l java -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
Java版チェーンコードを使ってみる。
Javaチェーンコードを利用する際の前提条件は以下のとおり。
・JDK 1.8がインストール済みであること。
・gradle 2.12以上がインストール済みであること。
➀各PeerにJavaチェーンコードをインストールする。
※Fabricでは、Javaチェーンコードのサンプルが提供されており、今回はそれを利用する。
# peer chaincode install -n bushido -v 1.0 -l java -p /opt/gopath/src/github.com/chaincode/chaincode_example02/java/
#
# CORE_PEER_ADDRESS="peer0.org2.example.com:7051"
# CORE_PEER_LOCALMSPID="Org2MSP"
# CORE_PEER_MSPCONFIGPATH="/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp"
# CORE_PEER_TLS_CERT_FILE="/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt"
# CORE_PEER_TLS_KEY_FILE="/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key"
# CORE_PEER_TLS_ROOTCERT_FILE="/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt"
# peer chaincode install -n bushido -v 1.0 -l java -p /opt/gopath/src/github.com/chaincode/chaincode_example02/java/
②チェーンコードのinstantiateを行う。
# peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt -C bushido -n bushido -l java -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
③Javaチェーンコードのコンテナが作成されていることを確認する。
# docker ps | grep bushido
84bb5c2aa994 dev-peer0.org1.example.com-bushido-1.0-92aca216667084484fba82d74149bf26ec36672612d5608a67bb2b0694ade7d7 "/root/chaincode-jav…" 5 minutes ago Up 5 minutes dev-peer0.org1.example.com-bushido-1.0
➃QUERYやINVOKEを行うことができることを確認する。
# peer chaincode query -C bushido -n bushido -c '{"Args":["query","a"]}'
100
# peer chaincode query -C bushido -n bushido -c '{"Args":["query","b"]}'
200
<補足>
Javaチェーンコードのログを閲覧すると、以下のようなログが出力される。
[root@localhost first-network]# docker logs -f --tail 30 dev-peer0.org1.example.com-bushido-1.0
Dec 09, 2018 3:43:12 AM org.hyperledger.fabric.shim.ChaincodeBase newChannelBuilder
INFO: Configuring channel connection to peer.
Dec 09, 2018 3:43:14 AM org.hyperledger.fabric.example.SimpleChaincode init
INFO: Init java simple chaincode
Dec 09, 2018 3:43:14 AM org.hyperledger.fabric.example.SimpleChaincode init
INFO: account a, value = 100; account b, value 200
Dec 09, 2018 3:45:52 AM org.hyperledger.fabric.example.SimpleChaincode invoke
INFO: Invoke java simple chaincode
Dec 09, 2018 3:45:52 AM org.hyperledger.fabric.example.SimpleChaincode query
INFO: Query Response:
Name: a, Amount: 100
Dec 09, 2018 3:45:57 AM org.hyperledger.fabric.example.SimpleChaincode invoke
INFO: Invoke java simple chaincode
Dec 09, 2018 3:45:57 AM org.hyperledger.fabric.example.SimpleChaincode query
INFO: Query Response:
Name: a, Amount: 100
Dec 09, 2018 3:46:03 AM org.hyperledger.fabric.example.SimpleChaincode invoke
INFO: Invoke java simple chaincode
Dec 09, 2018 3:46:03 AM org.hyperledger.fabric.example.SimpleChaincode query
INFO: Query Response:
Name: a, Amount: 100
Dec 09, 2018 3:46:52 AM org.hyperledger.fabric.example.SimpleChaincode invoke
INFO: Invoke java simple chaincode
Dec 09, 2018 3:46:52 AM org.hyperledger.fabric.example.SimpleChaincode query
INFO: Query Response:
Name: b, Amount: 200
Linux gradleインストール手順
CentOS上にgradleをインストールする。
➀以下のサイトからgradleのインストール媒体をダウンロードする。
https://gradle.org/next-steps/?version=4.10.3&format=bin
②gradle用のフォルダを作成する。
# mkdir /opt/gradle
# mv /tmp/gradle-4.10.3-bin.zip /opt/gradle
# cd /opt/gradle
③インストール媒体を解凍する。
# unzip -d /opt/gradle gradle-4.10.3-bin.zip
➃ 解凍後、中身を確認する。
# ls -l /opt/gradle/gradle-4.10.3
合計 216
-rw-rw-r--. 1 root root 55261 11月 29 01:04 LICENSE
-rw-rw-r--. 1 root root 802 11月 29 01:04 NOTICE
drwxr-xr-x. 2 root root 38 12月 5 01:54 bin
-rw-rw-r--. 1 root root 151483 12月 5 01:53 getting-started.html
drwxrwxr-x. 2 root root 24 11月 29 01:04 init.d
drwxr-xr-x. 3 root root 4096 12月 5 01:54 lib
drwxrwxr-x. 2 root root 263 11月 29 01:04 media
⑤gradleのパスを通す。
# export PATH=$PATH:/opt/gradle/gradle-4.10.3/bin
⑥gradleのバージョンを確認する。
# gradle -v
Welcome to Gradle 4.10.3!
Here are the highlights of this release:
- Incremental Java compilation by default
- Periodic Gradle caches cleanup
- Gradle Kotlin DSL 1.0-RC6
- Nested included builds
- SNAPSHOT plugin versions in the `plugins {}` block
For more details see https://docs.gradle.org/4.10.3/release-notes.html
------------------------------------------------------------
Gradle 4.10.3
------------------------------------------------------------
Build time: 2018-12-05 00:50:54 UTC
Revision: e76905e3a1034e6f724566aeb985621347ff43bc
Kotlin DSL: 1.0-rc-6
Kotlin: 1.2.61
Groovy: 2.4.15
Ant: Apache Ant(TM) version 1.9.11 compiled on March 23 2018
JVM: 1.8.0_191 (Oracle Corporation 25.191-b12)
OS: Linux 3.10.0-862.el7.x86_64 amd64
➀以下のサイトからgradleのインストール媒体をダウンロードする。
https://gradle.org/next-steps/?version=4.10.3&format=bin
②gradle用のフォルダを作成する。
# mkdir /opt/gradle
# mv /tmp/gradle-4.10.3-bin.zip /opt/gradle
# cd /opt/gradle
③インストール媒体を解凍する。
# unzip -d /opt/gradle gradle-4.10.3-bin.zip
➃ 解凍後、中身を確認する。
# ls -l /opt/gradle/gradle-4.10.3
合計 216
-rw-rw-r--. 1 root root 55261 11月 29 01:04 LICENSE
-rw-rw-r--. 1 root root 802 11月 29 01:04 NOTICE
drwxr-xr-x. 2 root root 38 12月 5 01:54 bin
-rw-rw-r--. 1 root root 151483 12月 5 01:53 getting-started.html
drwxrwxr-x. 2 root root 24 11月 29 01:04 init.d
drwxr-xr-x. 3 root root 4096 12月 5 01:54 lib
drwxrwxr-x. 2 root root 263 11月 29 01:04 media
⑤gradleのパスを通す。
# export PATH=$PATH:/opt/gradle/gradle-4.10.3/bin
⑥gradleのバージョンを確認する。
# gradle -v
Welcome to Gradle 4.10.3!
Here are the highlights of this release:
- Incremental Java compilation by default
- Periodic Gradle caches cleanup
- Gradle Kotlin DSL 1.0-RC6
- Nested included builds
- SNAPSHOT plugin versions in the `plugins {}` block
For more details see https://docs.gradle.org/4.10.3/release-notes.html
------------------------------------------------------------
Gradle 4.10.3
------------------------------------------------------------
Build time: 2018-12-05 00:50:54 UTC
Revision: e76905e3a1034e6f724566aeb985621347ff43bc
Kotlin DSL: 1.0-rc-6
Kotlin: 1.2.61
Groovy: 2.4.15
Ant: Apache Ant(TM) version 1.9.11 compiled on March 23 2018
JVM: 1.8.0_191 (Oracle Corporation 25.191-b12)
OS: Linux 3.10.0-862.el7.x86_64 amd64
Hyperledger Fabric バッチサイズ変更手順
FabricのOrdererがブロックを生成する際、デフォルト設定では、以下のタイミングでブロックが作られる。
タイムアウト時間:2秒
または
トランザクション数:10個
ブロックチェーンコンソーシアムを構築した後、運用中にトランザクション数を変更する手順を説明する。
➀CONFIGブロックを取得する。
# docker exec -it cli bash
# peer channel fetch config config.bc -o orderer.example.com:7050 -c bushido --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt
②CONFIGブロック(バイナリ)をJSON形式にデコードする。このとき、Envelopeメッセージ等は除外する。
# configtxlator proto_decode --input config.bc --type common.Block | jq .data.data[0].payload.data.config > config.json
③今回はトランザクション数を10→5に変更することにする。
# jq ".channel_group.groups.Orderer.values.BatchSize.value.max_message_count" "config.json"
10
# jq ".channel_group.groups.Orderer.values.BatchSize.value.max_message_count = 5" "config.json" > "update_config.json"
# jq ".channel_group.groups.Orderer.values.BatchSize.value.max_message_count" "update_config.json"
5
➃「config.json」と「update_config.json」の差分値をシミレーションする。
#configtxlator proto_encode --input config.json --type common.Config > config.bc
#configtxlator proto_encode --input update_config.json --type common.Config > update_config.bc
#configtxlator compute_update --channel_id bushido --original config.bc --updated update_config.bc --output update_config_2.bc
⑤シミレーション結果で生成された「update_config_2.bc」をJSON形式にデコードする。
#configtxlator proto_decode --input update_config_2.bc --type common.ConfigUpdate | jq . > update_config_2.json
⑥Envelopeメッセージをラッピングする。
#echo '{"payload":{"header":{"channel_header":{"channel_id":"bushido", "type":2}},"data":{"config_update":'$(cat update_config_2.json)'}}}' | jq . > update_config_2_envelope.json
タイムアウト時間:2秒
または
トランザクション数:10個
ブロックチェーンコンソーシアムを構築した後、運用中にトランザクション数を変更する手順を説明する。
➀CONFIGブロックを取得する。
# docker exec -it cli bash
# peer channel fetch config config.bc -o orderer.example.com:7050 -c bushido --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt
②CONFIGブロック(バイナリ)をJSON形式にデコードする。このとき、Envelopeメッセージ等は除外する。
# configtxlator proto_decode --input config.bc --type common.Block | jq .data.data[0].payload.data.config > config.json
③今回はトランザクション数を10→5に変更することにする。
# jq ".channel_group.groups.Orderer.values.BatchSize.value.max_message_count" "config.json"
10
# jq ".channel_group.groups.Orderer.values.BatchSize.value.max_message_count = 5" "config.json" > "update_config.json"
# jq ".channel_group.groups.Orderer.values.BatchSize.value.max_message_count" "update_config.json"
5
➃「config.json」と「update_config.json」の差分値をシミレーションする。
#configtxlator proto_encode --input config.json --type common.Config > config.bc
#configtxlator proto_encode --input update_config.json --type common.Config > update_config.bc
#configtxlator compute_update --channel_id bushido --original config.bc --updated update_config.bc --output update_config_2.bc
⑤シミレーション結果で生成された「update_config_2.bc」をJSON形式にデコードする。
#configtxlator proto_decode --input update_config_2.bc --type common.ConfigUpdate | jq . > update_config_2.json
⑥Envelopeメッセージをラッピングする。
#echo '{"payload":{"header":{"channel_header":{"channel_id":"bushido", "type":2}},"data":{"config_update":'$(cat update_config_2.json)'}}}' | jq . > update_config_2_envelope.json
⑦「update_config_2_envelope.json」をバイナリ形式にエンコードする。
#configtxlator proto_encode --input update_config_2_envelope.json --type common.Envelope --output update_config_2_envelope.bc
⑧「update_config_2_envelope.bc」に対して、PEERの署名を行う。
(Endorsing Policyを満たす分、署名を付与する必要あり)
# peer channel signconfigtx -f update_config_2_envelope.bc
⑨チャネルを更新する。
# peer channel update -f update_config_2_envelope.bc -c bushido -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt
# peer channel update -f update_config_2_envelope.bc -c bushido -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt
2018年8月19日日曜日
Hyperledger Fabric 1.2.0 Release版 インストール
インストールの流れは、1.1.0 Release版とほぼ同じである。
v1.1.0 Release版の手順は以下を参照。
http://memoyasu.blogspot.com/2018/04/hyperledger-fabric-110relase.html
1.1.0と1.2.0の手順の差分は以下。
①Fabaricソース一式をクローンする際、ブランチ名を変更すること。
# git clone -b v1.2.0 https://github.com/hyperledger/fabric.git
# git clone -b v1.2.0 https://github.com/hyperledger/fabric-ca.git
②サードパーティDockerイメージをダウンロードする必要がある。
コマンドは以下を実行する。
# make docker-thirdparty
なお、make dockerコマンドで作成されるDockerイメージは以下。
<補足>
・Goのバージョンは1.10.Xを利用すること。
・環境変数には以下を設定すること。
GOROOT=/usr/local/go/bin (GOのビルドパス)
GOPATH=/opt (Fabricのソースパス)
v1.1.0 Release版の手順は以下を参照。
http://memoyasu.blogspot.com/2018/04/hyperledger-fabric-110relase.html
1.1.0と1.2.0の手順の差分は以下。
①Fabaricソース一式をクローンする際、ブランチ名を変更すること。
# git clone -b v1.2.0 https://github.com/hyperledger/fabric.git
# git clone -b v1.2.0 https://github.com/hyperledger/fabric-ca.git
②サードパーティDockerイメージをダウンロードする必要がある。
コマンドは以下を実行する。
# make docker-thirdparty
なお、make dockerコマンドで作成されるDockerイメージは以下。
<補足>
・Goのバージョンは1.10.Xを利用すること。
・環境変数には以下を設定すること。
GOROOT=/usr/local/go/bin (GOのビルドパス)
GOPATH=/opt (Fabricのソースパス)
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
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
# 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コマンドを使ってみる。
ピアに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
2018年4月1日日曜日
Hyperledger Fabric 1.1.0 Relase版 インストール
2018/3/20に公開されたHyperledger Fabric 1.1.0 Release版を、ソースからビルドする。
<前提>
・DockerおよびGOがインストール済みであること。
①FabricとFabric-caのソース一式をクローンする。
# git clone -b v1.1.0 https://github.com/hyperledger/fabric.git
# git clone -b v1.1.0 https://github.com/hyperledger/fabric-ca.git
# mkdir -p /opt/fabric/src/github.com/hyperledger/
# cp -rf fabric /opt/fabric/src/github.com/hyperledger
# cp -rf fabric-ca /opt/fabric/src/github.com/hyperledger
②環境変数を設定する。
# export GOPATH=/opt/fabric
# export GOHOME=/opt/fabric
③Fabricのdockerイメージを作成する
# cd $GOHOME/src/github.com/hyperledger/fabric/
# make docker
以下のエラーが発生した場合は、
protoc-gen-goを手動でダウンロードする。
------
cp build/docker/gotools/bin/protoc-gen-go build/bin/chaintool build/goshim.tar.bz2 build/image/ccenv/payload
cp: cannot stat `build/docker/gotools/bin/protoc-gen-go': そのようなファイルやディレクトリはありません
make: *** [build/image/ccenv/payload] エラー 1
------
# go get -u github.com/golang/protobuf/protoc-gen-go
# cp $GOPATH/bin/protoc-gen-go build/docker/gotools/bin/
➃Fabric-caのdockerイメージを作成する
# cd $GOHOME/src/github.com/hyperledger/fabric-ca/
# make docker
<前提>
・DockerおよびGOがインストール済みであること。
①FabricとFabric-caのソース一式をクローンする。
# git clone -b v1.1.0 https://github.com/hyperledger/fabric.git
# git clone -b v1.1.0 https://github.com/hyperledger/fabric-ca.git
# mkdir -p /opt/fabric/src/github.com/hyperledger/
# cp -rf fabric /opt/fabric/src/github.com/hyperledger
# cp -rf fabric-ca /opt/fabric/src/github.com/hyperledger
②環境変数を設定する。
# export GOPATH=/opt/fabric
# export GOHOME=/opt/fabric
③Fabricのdockerイメージを作成する
# cd $GOHOME/src/github.com/hyperledger/fabric/
# make docker
以下のエラーが発生した場合は、
protoc-gen-goを手動でダウンロードする。
------
cp build/docker/gotools/bin/protoc-gen-go build/bin/chaintool build/goshim.tar.bz2 build/image/ccenv/payload
cp: cannot stat `build/docker/gotools/bin/protoc-gen-go': そのようなファイルやディレクトリはありません
make: *** [build/image/ccenv/payload] エラー 1
------
# go get -u github.com/golang/protobuf/protoc-gen-go
# cp $GOPATH/bin/protoc-gen-go build/docker/gotools/bin/
➃Fabric-caのdockerイメージを作成する
# cd $GOHOME/src/github.com/hyperledger/fabric-ca/
# make docker
⑤Dockerイメージが作成されていることを確認する。
登録:
投稿 (Atom)