1.搭建網(wǎng)絡: 詳見博客
2.對Test Network的創(chuàng)建和關閉
cd ${HOME}/fabric-samples/test-network
創(chuàng)建網(wǎng)絡:
./network.sh up
關閉網(wǎng)絡:
./network.sh down
創(chuàng)建通道:
./network.sh createChannel -c xxx :創(chuàng)建名為xxx的通道
3.Starting a chaincode on the channel:
智能合約(Smart Contract): 包含管理區(qū)塊鏈賬本上assets的邏輯。在Fabric上智能合約就是鏈碼的形式存在. 當網(wǎng)絡運行后,鏈碼會被部署到網(wǎng)絡中節(jié)點和通道上.
應用(Application): 由區(qū)塊鏈系統(tǒng)的成員執(zhí)行,通過應用來觸發(fā)智能合約,然后實現(xiàn)鏈上的操作,比如對賬本的增刪改查.
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
Explanation:將asset-transfer(basic)鏈碼安裝在 peer0.org1.example.com
andpeer0.org2.example.com
兩個節(jié)點上
Note: -ccn:鏈碼命名 -ccp:鏈碼路徑 -ccl:如果第一次部署鏈碼,需要安裝鏈碼的依賴即語言類型,此處選擇的是Go .下面將會解釋如何手動部署自己寫的智能合約(鏈碼),即5. 在測試網(wǎng)絡上部署自己的智能合約其實是在解釋./network.sh 腳本中deployCC函數(shù)執(zhí)行的步驟
因此如果在測試環(huán)境中部署自己的智能合約,只要指定-ccn:鏈碼名;-ccp:鏈碼路徑 -ccl:鏈碼編寫語言即可用./network.sh deployCC來完成“鏈碼打包、鏈碼安裝、鏈碼批準、鏈碼提交以及觸發(fā)鏈碼這些步驟”自動部署
4. Interacting with the network:
當測試網(wǎng)絡開啟后,我們可以用peer CLI和你的測試網(wǎng)絡交互.即用peer CLI充當客戶端
peer CLI作用: 通過peer CLI可以調(diào)用已經(jīng)部署的智能合約、更新通道或安裝與部署新的智能合約
requirement:
- 先設置環(huán)境變量PATH
export PATH=${HOME}/fabric-samples/bin:$PATH
- 設置變量
FABRIC_CFG_PATH
export FABRIC_CFG_PATH=${HOME}/fabric-samples/config
- 先進入test-network文件夾中,然后按照下面的命令行設置環(huán)境變量(目的: operate the
peer
CLI as the Org1 and Org2 admin user)
# Environment variables for Org1
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051
# Environment variables for Org2
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051
CORE_PEER_TLS_ROOTCERT_FILE 和 CORE_PEER_MSPCONFIGPATH這兩個環(huán)境變量都是指向/test-network/organizations文件夾的Org1的加密材料
Peer CLI的使用:
1.調(diào)用初始化賬本的鏈碼
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"InitLedger","Args":[]}'
2.實現(xiàn)的是查詢鏈上的所有資產(chǎn)信息
peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'
Explanation:-C:通道名 -n:鏈碼名 -c:用json格式寫參數(shù)
3. 調(diào)用轉(zhuǎn)移asset6資產(chǎn)的鏈碼
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"TransferAsset","Args":["asset6","Christopher"]}'
Explanation:本測試網(wǎng)絡中背書策略是需要both peer0.org1.example.com
and peer0.org2.example.com
背書,因此需要用 兩個**–peerAddresses分別指定Org1和Org2的背書節(jié)點的IP地址和端口號**
-C:通道名 -n:鏈碼名 --peerAddress:指明背書節(jié)點的IP地址和端口號, --tlsRootCertFiles:由于本測試網(wǎng)絡中開啟了TLS(Transport Layer Security)安全傳輸層協(xié)議 因此需要用–tlsRootCertFiles標簽為每個peer指定TLS的證書位置. -c :為鏈碼參數(shù)的json格式
5. 在測試網(wǎng)絡上部署自己的智能合約
require: 創(chuàng)建網(wǎng)絡并創(chuàng)建通道
Optional: 日志輸出(Logsout)功能:This step is not required but is extremely useful for troubleshooting chaincode.作用:檢測智能合約的日志,管理員可以看到多個節(jié)點容器集成的日志輸出(by logspout
tool.).
安裝步驟:
cd fabric-samples/test-network
# 把安裝Logsout tool的腳本復制到當前目錄下
cp ../commercial-paper/organization/digibank/configuration/cli/monitordocker.sh .
運行步驟:
./monitordocker.sh fabric_test
接下來就進入正題
5.1.Package the smart contract: 將鏈碼安裝到各個節(jié)點上前需要對我們的合約進行打包
智能合約可以用Go、JavaScript和TypeScript三種語言寫,下面介紹Go的智能合約部署
-
寫完智能合約(Go 的Fabric智能合約API文檔后,對Go采用Go module包管理器(go mod init),然后在module目錄下執(zhí)行命名(go mod vendor),下載依賴至module的目錄下其中Module和Vendor部分我寫在Go Module一篇就夠
-
需要用Peer CLI與測試網(wǎng)絡進行交互所以
cd ${HOME}/fabric-samples/test-network
#然后設置環(huán)境變量,
export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/
- 利用Peer CLI創(chuàng)建Go package
peer lifecycle chaincode package basic.tar.gz --path ../asset-transfer-basic/chaincode-go/ --lang golang --label basic_1.0
–path路徑下的智能合約源碼打包成名為basic.tar.gz的包,指定語言(–lang) golang,并將這個智能合約記為(–label)basic_1.0
5.2. Install the chaincode package
After we package the asset-transfer (basic) smart contract, we can install the chaincode on our peers.
本測試網(wǎng)絡中有兩個組織Org1和Org2,因此需要分別對這兩個組織部署鏈碼,現(xiàn)在以Org1為例
- 設置環(huán)境變量
# 設置環(huán)境變量,使得以Org1 admin user的身份操作Peer CLI
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051
# 設置環(huán)境變量,使得以Org2 admin user的身份操作Peer CLI
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051
- 在Org1上安裝鏈碼
peer lifecycle chaincode install basic.tar.gz
basic.tar.gz是已經(jīng)打包后的鏈碼名
對于Org2的安裝重復以上兩個步驟.
5.3. Approve a chaincode definition
定義了鏈碼治理的重要參數(shù),比如名字、版本以及鏈碼的背書策略.鏈碼在一個通道中使用之前要求足夠的通道成員批準鏈碼. Because we have only two organizations on the channel, and a majority of 2 is 2, we need approve a chaincode definition of asset-transfer (basic) as Org1 and Org2.
具體過程:
-
查詢鏈碼的包ID(Package ID):由鏈碼label和二進制標識組成
peer lifecycle chaincode queryinstalled
- 把package id存放在環(huán)境變量中(注意:下面的命令中package ID需要自行修改)
export CC_PACKAGE_ID=basic_1.0:69de748301770f6ef64b42aa6bb6cb291df20aa39542c3ef94008615704007f3
- 批準鏈碼
peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name basic --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem"
注意的是我們需要對Org1和Org2分別批準鏈碼,切換至Org1的命令行如下:
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_ADDRESS=localhost:7051
peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name basic --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem"
5.4. Committing the chaincode definition to the channel
當鏈碼被網(wǎng)絡中的絕大多數(shù)組織認可批準后,只需要其中一個組織提交鏈碼定義至通道上即可.(one organization can commit the chaincode definition to the channel.)
如何查看組織對某鏈碼的批準情況呢? 利用peer lifecycle chaincode checkcommitreadiness
peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name basic --version 1.0 --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" --output json
上面的都是True,因此可以Committing the chaincode defination to the channel
peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name basic --version 1.0 --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt"
以上這筆Transaction使用了--peerAddressed
flag即發(fā)向peer0.org1.example.com
from Org1和peer0.org2.example.com
from Org2.
查詢鏈碼提交情況?
peer lifecycle chaincode querycommitted --channelID mychannel --name basic --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem"
提交成功!
5.Invoking the chaincode
The asset-transfer (basic) chaincode is now ready to be invoked by client applications文章來源:http://www.zghlxwxcb.cn/news/detail-438573.html
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"InitLedger","Args":[]}'
6. Upgrading a smart contract
7.Clean Up
如果完成了網(wǎng)絡的相關操作,需要停止logspout tool和關閉網(wǎng)絡文章來源地址http://www.zghlxwxcb.cn/news/detail-438573.html
docker stop logsout
docker rm logsout
# 進入test-network文件夾然后關閉網(wǎng)絡
cd ${HOME}/fabric-samples/test-network
./network.sh down
到了這里,關于Fabric 搭建測試網(wǎng)絡并部署智能合約的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!