1. 程式人生 > >《HyperLedger Fabric 實戰》—— 十七、升級 Fabric 1.2 —— 6、部署驗證合約

《HyperLedger Fabric 實戰》—— 十七、升級 Fabric 1.2 —— 6、部署驗證合約

1、載入智慧合約(以 211 機器為例)

拷貝~/fabric/examples/chaincode/go/資料夾下的example02marbles02兩個目錄到~/fabric/aberic/chaincode/go/目錄下。

重啟 Peer 服務。

docker-compose -f docker-peer0.org1.yaml down --volumes
docker-compose -f docker-peer0.org1.yaml up

2、安裝例項化合約

登入 211 機器的 cli 容器。

docker exec -it cli bash

由於剛剛我們徹底清除了 peer 容器,所以這裡需要重新加入通道。

cp channel-artifacts/mychannel.block ./
peer channel join -b mychannel.block

安裝例項化合約

peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/aberic/chaincode/go/example02/cmd
peer chaincode instantiate -o orderer1.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer1.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.peer','Org2MSP.peer')"

3、查詢、交易、驗證合約

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
peer chaincode invoke -o orderer1.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer1.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt -c '{"Args":["invoke","a","b","10"]}'
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

4、驗證 CouchDB

安裝、例項化 marbles02 合約,該合約會自動基於 couchdb 建立索引。

peer chaincode install -n marble1 -v 1.0 -p github.com/hyperledger/fabric/aberic/chaincode/go/marbles02

例項化若失敗,可稍等幾秒鐘,可能是安裝還沒有完成。

peer chaincode instantiate -o orderer1.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer1.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n marble1 -c '{"Args":[]}' -P "OR ('Org1MSP.peer', 'Org2MSP.peer')" -v 1.0

驗證合約,若成功,也是變相驗證了 couchdb。

peer chaincode invoke -C mychannel -n marble1 -c '{"Args":["initMarble","marble1","blue","35","tom"]}' -o orderer1.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer1.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
peer chaincode invoke -C mychannel -n marble1 -c '{"Args":["initMarble","marble2","red","50","tom"]}' -o orderer1.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer1.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
peer chaincode invoke -C mychannel -n marble1 -c '{"Args":["initMarble","marble3","blue","70","tom"]}' -o orderer1.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer1.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
peer chaincode query -C mychannel -n marble1 -c '{"Args":["readMarble","marble1"]}'
peer chaincode query -C mychannel -n marble1 -c '{"Args":["queryMarblesByOwner","tom"]}'    # need couchdb

5、驗證 Peer 叢集其他節點

複製第一步的載入合約,和第二步的安裝合約,注意,不必再行例項化,之後直接進行查詢。

後面我們嘗試動態增加組織。