Hyperledger Fabric1.4.6 環(huán)境部署

一 準(zhǔn)備工作

命令手冊(cè)

1.1 Ubuntu

版本:18.04

1.2 go

版本 : 1.14.2

  • go 環(huán)境變量配置

vim /etc/profile
export GOROOT=/opt/go
export GOPATH=/opt/gocode
export PATH=GOROOT/bin:PATH
export GOBIN=$GOPATH/bin

  • 刷新環(huán)境變量
source /etc/profile
  • 解壓 SDK
tar -C /opt/go -xzvf go1.14.2.linux-amd64.tar.gz

1.3 docker

1.3.1 安裝Docker-CE

  • 卸載舊版本docker
sudo apt-get remove docker docker-engine docker.io
  • 添加HTTPS協(xié)議玛界,允許apt從HTTPS安裝軟件包
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
  • 安裝GPG證書
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
  • 寫入軟件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
  • 更新并安裝Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
  • 將當(dāng)前用戶添加到Docker用戶組

創(chuàng)建docker用戶組

sudo groupadd docker
  • 將當(dāng)前用戶添加到docker用戶組
sudo usermod -aG docker $USER
  • 將docker鏡像更改為國(guó)內(nèi)鏡像

編輯daemon.json文件漱竖,如果沒有該文件自行創(chuàng)建

sudo vim /etc/docker/daemon.json

文件中添加以下內(nèi)容

{
"registry-mirrors":["https://obou6wyb.mirror.aliyuncs.com","https://registry.docker-cn.com","http://hub-mirror.c.163.com"]
}
  • 最后重啟服務(wù)
sudo systemctl daemon-reload
sudo systemctl restart docker
  • 查看docker版本,看是否安裝成功
docker version
  • 執(zhí)行docker info,如果結(jié)果中含有如下內(nèi)容則說(shuō)明鏡像配置成功
...
 Registry Mirrors:
  https://obou6wyb.mirror.aliyuncs.com/
  https://registry.docker-cn.com/
  http://hub-mirror.c.163.com/
 Live Restore Enabled: false
 ...

1.3.2 安裝Docker-Compose

  • 方法一:
sudo curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

用方法一下載完后要設(shè)置權(quán)限

sudo chmod +x /usr/local/bin/docker-compose
  • 方法二:
sudo apt-get install python-pip
sudo pip install docker-compose
  • 下載完成后查看是否安裝成功
docker-compose version

1.3.2 拉取fabric鏡像

docker pull hyperledger/fabric-peer:1.4.6
docker pull hyperledger/fabric-tools:1.4.6
docker pull hyperledger/fabric-orderer:1.4.6
docker pull hyperledger/fabric-javaenv:1.4.6
docker pull hyperledger/fabric-ca:1.4.6
docker pull hyperledger/fabric-ccenv:1.4.6
docker pull hyperledger/fabric-zookeeper:0.4.18
docker pull hyperledger/fabric-kafka:0.4.18
docker pull hyperledger/fabric-couchdb:0.4.18
docker pull hyperledger/fabric-baseimage:0.4.18
docker pull hyperledger/fabric-baseos:0.4.18
docker pull hyperledger/fabric-membersrvc:latest 

或者

docker pull hyperledger/fabric-peer:1.4.6 && docker pull hyperledger/fabric-tools:1.4.6 && docker pull hyperledger/fabric-orderer:1.4.6 && docker pull hyperledger/fabric-javaenv:1.4.6 && docker pull hyperledger/fabric-ca:1.4.6 && docker pull hyperledger/fabric-ccenv:1.4.6 && docker pull hyperledger/fabric-zookeeper:0.4.18 && docker pull hyperledger/fabric-kafka:0.4.18 && docker pull hyperledger/fabric-couchdb:0.4.18 && docker pull hyperledger/fabric-baseimage:0.4.18 && docker pull hyperledger/fabric-baseos:0.4.18 && docker pull hyperledger/fabric-membersrvc:latest

  • 拉取完鏡像鏡像后,可以查看docker鏡像庫(kù)
docker images

  • (可忽略)

為了方便配置Docker Compose,將所有鏡像的tag都改為latest,執(zhí)行如下格式的命令:

docker tag IMAGEID(鏡像ID) REPOSITORY:TAG(倉(cāng)庫(kù):標(biāo)簽)

例如:

docker tag 68914607b3a5 docker.io/hyperledger/fabric-tools:latest

將標(biāo)簽全部更改完后,再次查看鏡像庫(kù)

docker images

二 Fabric命令行工具的編譯安裝

編譯安裝

2.1 創(chuàng)建目錄并下載代碼

  • 創(chuàng)建hyperledger目錄
mkdir -p $GOPATH/src/github.com/hyperledger
cd $GOPATH/src/github.com/hyperledger
  • 下載 fabric 源碼
git clone https://github.com/hyperledger/fabric
  • 下載失敗,errno 54的解決方案
sudo git config --global http.postBuffer 5242880000
sudo git config --global https.postBuffer 5242880000
  • 或者,從碼云上下載
git clone https://gitee.com/mirrors/hyperledger-fabric.git   

2.2 編譯Fabric的模塊

  • 進(jìn)入到Fabirc源碼所在的文件夾
cd $GOPATH/src/github.com/hyperledger/fabric
  • 切換分支v1.4.6
git checkout  v1.4.6

編譯方式一

make release
  • 上述命令執(zhí)行完成之后蛤袒,會(huì)自動(dòng)將將編譯好的二進(jìn)制文件存放在以下路徑中:

$GOPATH/src/github.com/hyperledger/fabric/==release/linux-amd64/bin==

  • 查看版本是否符合
cd $GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin
./peer version

編譯方式二

make orderer
make peer
make configtxlator
make certificategen 
make configtxgen

查看 ==.build/bin== 目錄

ll .build/bin/

  • Fabric的模塊
模塊名稱 功能
peer 主節(jié)點(diǎn)模塊询一,負(fù)責(zé)存儲(chǔ)區(qū)塊鏈數(shù)據(jù)健蕊,運(yùn)行維護(hù)鏈碼
orderer 交易打包晴及、排序模塊
certificategen 組織和證書生成模塊
configtxgen 區(qū)塊和交易生成模塊
configtxlator 區(qū)塊和交易解析模塊

2.4 Fabric模塊的安裝

就是將上述模塊添加到環(huán)境變量里去

  • 第一步 Ubuntu和Centos將Fabric模塊編譯后的文件復(fù)制到系統(tǒng)文件夾中

cp $GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin/* /usr/local/bin

  • MacOS上面將Fabric模塊編譯后的文件復(fù)制到系統(tǒng)文件夾中的方法如下:

cp $GOPATH/src/github.com/hyperledger/fabric/release/darwin-amd64/bin/* /usr/local/bin

復(fù)制成功之后通過(guò)以下命令修改文件的執(zhí)行權(quán)限,否則可能無(wú)法執(zhí)行。

sudo chmod -R 775  /usr/local/bin/configtxgen
sudo chmod -R 775  /usr/local/bin/configtxlator
sudo chmod -R 775  /usr/local/bin/certificategen
sudo chmod -R 775  /usr/local/bin/peer
sudo chmod -R 775  /usr/local/bin/orderer

通過(guò)上面這些命令之后溯壶,可以在系統(tǒng)的任何路徑下面運(yùn)行這些模塊了且改。下面通過(guò)一組命令來(lái)進(jìn)檢查安裝過(guò)程是否成功。

  • 第二步: 檢查安裝

采用 version 命令行選項(xiàng)

peer version
orderer version

三 快速啟動(dòng)一個(gè)Fabric應(yīng)用

3.1 第一步:生成組織結(jié)構(gòu)及加密證書

證書等配置文件為crypto-config.yaml

3.1.1 創(chuàng)建存放證書的文件夾

  • 將生成的證書文件存放在/var/hyperledger/certificate文件夾下

mkdir -p /var/hyperledger/certificate

3.1.2 證書文件的生成命令

  • cryptogen 提供了一個(gè)命令可以獲取cryptogen模塊所需要的配置文件的樣式,該命令如下所示:

cryptogen showtemplate

  • ==執(zhí)行如下命令:==

cryptogen generate --config=crypto-config.yaml --output ./crypto-config

該命令執(zhí)行完成之后我們會(huì)發(fā)現(xiàn)在文件夾中會(huì)新增加一個(gè)文件夾crypto-config感混,里面存放有本例的相關(guān)配置文件浩习,可以通過(guò)tree命令查看生成證書文件的內(nèi)容洽蛀。

org1.binny.com
org2.binny.com

3.1.3 節(jié)點(diǎn)域名映射

通過(guò)上述步驟所有的證書文件都已經(jīng)生成完畢峡碉,現(xiàn)在需要將測(cè)試域名映射到本機(jī)的IP地址上面,否則后面的操作可能會(huì)出現(xiàn)錯(cuò)誤。

執(zhí)行以下命令以便提取相關(guān)的域名熙掺,

cd /var/hyperledger/certificate
tree -L 5

使用上述命令就可觀察發(fā)現(xiàn)币绩,一個(gè)orderer 域名和 2 個(gè) peer 域名

  • 打開端映射文件蜡秽,將域名代理為本機(jī)
vi /etc/hosts
192.168.23.79 peer0.org1.binny.com
192.168.23.79 peer0.org2.binny.com
192.168.23.79 peer1.org2.binny.com
192.168.23.79 peer1.org1.binny.com
192.168.23.79 orderer.binny.com
orderer.binny.com
peer0.org1.binny.com
peer0.org2.binny.com

輸入以上內(nèi)容之后保存/etc/hosts文件缆镣,然后用ping命令測(cè)試以下配置是否正確。

ping peer0.org1.binny.com

3.2 第二步 創(chuàng)建orderer 服務(wù)寞蚌,啟動(dòng)創(chuàng)始?jí)K的生成

創(chuàng)建服務(wù)啟動(dòng)初始區(qū)塊及應(yīng)用通道交易配置文件需要指定 Orderer 服務(wù)的相關(guān)配置以及當(dāng)前的聯(lián)盟信息, 這些信息定義在一個(gè)名為 configtx.yaml 文件中。

3.2.1 Orderer服務(wù)啟動(dòng)初始區(qū)塊的創(chuàng)建

  • ==創(chuàng)建 Orderer 服務(wù)啟動(dòng)初始區(qū)塊==

cd /var/hyperledger/certificate
export set FABRIC_CFG_PATH=/var/hyperledger/certificate

  • ==生成創(chuàng)始?jí)K文件==

configtxgen -profile TestTwoOrgsOrdererGenesis -outputBlock ./orderer.genesis.block

注意:TestTwoOrgsOrdererGenesis:在配置文件中睬澡,orderer.genesis.block:名字隨意,但是后續(xù)配置文件中要用到

上述命令執(zhí)行完成之后會(huì)在文件夾$GOPATH/src/github.com/hyperledger/certificate中生成文件orderer.genesis.block。這是Fabric系統(tǒng)的創(chuàng)始?jí)K文件。

3.2.2 創(chuàng)建必須的應(yīng)用通道交易配置文件

  • 指定通道名稱的環(huán)境變量,名字隨意,==設(shè)置臨時(shí)變量昔脯,channel 名字==

export set CHANNEL_NAME=binnychannel

因?yàn)槲覀兒竺娴拿钚枰啻问褂猛粋€(gè)通道名稱,所以先指定一個(gè)通道名稱將其設(shè)為環(huán)境變量静陈,后期需要使用該通道名稱時(shí)時(shí)只需要使用對(duì)應(yīng)的環(huán)境變量名稱即可.


  • ==生成應(yīng)用通道交易配置文件==

指定使用 configtx.yaml 配置文件中的 TestTwosOrgsChannel 模板, 來(lái)生成新建通道的配置交易文件,TestTwosOrgsChannel 模板指定了 Org1 和 Org2 都屬于后面新建的應(yīng)用通道

configtxgen -profile TestTwosOrgsChannel -outputCreateChannelTx ./binnychannel.tx -channelID $CHANNEL_NAME

  • ==node-sdk 測(cè)試拐格,創(chuàng)建新通道==

configtxgen -profile TestOneOrgsChannel -outputCreateChannelTx ./binnychannel01.tx -channelID binnychannel01

3.2.3 生成錨節(jié)點(diǎn)更新配置文件

同樣基于 configtx.yaml 配置文件中的 TestTwosOrgsChannel 模板,為每個(gè)組織分別生成錨節(jié)點(diǎn)更新配置刑赶,且注意指定對(duì)應(yīng)的組織名稱捏浊。

  • channelID 要和上面的一樣
configtxgen -profile TestTwosOrgsChannel -outputAnchorPeersUpdate ./Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
configtxgen -profile TestTwosOrgsChannel -outputAnchorPeersUpdate ./Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP

上面命令執(zhí)行完成之后會(huì)在相應(yīng)的文件夾下面生成文件 Org1MSPanchors.txOrg2MSPanchors.tx ,這些文件在后面會(huì)被使用到撞叨。

3.2.4 Orderer節(jié)點(diǎn)的啟動(dòng)

在配置文件orderer.yaml所在的目錄執(zhí)行如下命令啟動(dòng)orderer

orderer start
  • 問(wèn)題:Not bootstrapping because of 2 existing channels

刪除目錄下的orderer遺留文件

3.3 Peer節(jié)點(diǎn)的啟動(dòng)

Please make sure that FABRIC_CFG_PATH is set to a path which contains core.yaml

設(shè)置環(huán)境變量

export set FABRIC_CFG_PATH=/var/hyperledger/certificate

啟動(dòng)命令

  • 在配置文件core.yaml所在的文件夾中執(zhí)行以下命令啟動(dòng)order節(jié)點(diǎn)

peer node start >> log_peer.log 2>&1 &


ps axu | grep peer

3.4 創(chuàng)建通道

現(xiàn)在我們可以創(chuàng)建通道金踪,創(chuàng)建通道的過(guò)程一共需要三個(gè)步驟。

3.4.1 設(shè)置環(huán)境變量

cd $GOPATH/src/github.com/hyperledger/certificate

export set CHANNEL_NAME=binnychannel
export set CORE_PEER_MSPCONFIGPATH=/var/hyperledger/certificate/crypto-config/peerOrganizations/org1.binny.com/users/Admin@org1.binny.com/msp
export set CORE_PEER_LOCALMSPID=Org1MSP

3.4.2 創(chuàng)建通道

peer channel create -t 50s -o orderer.binny.com:7050 -c $CHANNEL_NAME -f /var/hyperledger/certificate/binnychannel.tx

  • -f:指定上次生成的那個(gè)文件路徑
2020-05-12 01:32:47.537 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2020-05-12 01:32:47.568 UTC [cli.common] readBlock -> INFO 002 Received block: 0

創(chuàng)建通道完成之后牵敷,會(huì)在執(zhí)行命令的當(dāng)前目錄生成名為binnychannel.block的通道創(chuàng)始?jí)K文件

<font color="red">

  • 查看已開啟的端口
netstat -tupln

  • ==查看channel.tx和genesis.block內(nèi)容==
configtxgen -inspectChannelCreateTx binnychannel.tx
configtxgen -inspectBlock genesis.block

選項(xiàng) 意義
-o 連接的orderer的地址胡岔,hostname:port
-c channel的名稱,默認(rèn)為mychannel
-f 配置的交易信息(暫時(shí)還沒搞清楚)
–tls 和orderer通信時(shí)是否啟用tls
–cafile 使用tls時(shí)劣领,所使用的orderer的證書

</font>

3.4.3 讓已經(jīng)運(yùn)行的Peer模塊加入通道

export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_ADDRESS=peer0.org1.binny.com:7051
export set CORE_PEER_MSPCONFIGPATH=/var/hyperledger/certificate/crypto-config/peerOrganizations/org1.binny.com/users/Admin@org1.binny.com/msp

peer channel join -b /var/hyperledger/certificate/binnychannel.block

在上述創(chuàng)建通道的命令中-b后面的參數(shù)為==上一步==中生成的文件binnychannel.block姐军,需要注意這個(gè)文件的路徑。

peer channel list

3.4.4 更新錨節(jié)點(diǎn)

export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_ADDRESS=peer0.org1.binny.com:7051
export set CORE_PEER_MSPCONFIGPATH=/var/hyperledger/certificate/crypto-config/peerOrganizations/org1.binny.com/users/Admin@org1.binny.com/msp

peer channel update -o orderer.binny.com:7050 -c binnychannel   -f  /var/hyperledger/certificate/Org1MSPanchors.tx

3.5 Chaincode的部署和調(diào)用

現(xiàn)在可以部署一個(gè)Chaincode(關(guān)于Chaincode的詳細(xì)內(nèi)容在本書的第七章會(huì)有詳細(xì)的介紹)來(lái)測(cè)試Peer節(jié)點(diǎn)和Orderer節(jié)點(diǎn)的部署是否正確尖淘。這里采用Fabric源碼自帶的例子來(lái)作為測(cè)試Chaincode奕锌。測(cè)試用Chaincode的源代碼路徑如下所示:

$GOPATH/src/github.com/hyperledger/fabric-samples/chaincode/chaincode_example02

Chaincode相關(guān)的測(cè)試一共有四個(gè)步驟。

第一步:設(shè)置環(huán)境變量

export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_ADDRESS=peer0.org1.binny.com:7051
export set CORE_PEER_MSPCONFIGPATH=/var/hyperledger/certificate/crypto-config/peerOrganizations/org1.binny.com/users/Admin@org1.binny.com/msp

第二步: 部署chaincode代碼

  • ==使用的chaincode的位置如下==:

$GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd


  • ==安裝部署==
peer chaincode install -n binny_test_01 -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd
2020-05-12 07:21:24.559 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2020-05-12 07:21:24.559 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2020-05-12 07:21:25.482 UTC [chaincodeCmd] install -> INFO 003 Installed remotely response:<status:200 payload:"OK" > 
  • == 可以通過(guò)下面命令查看 chaincode的安裝信息==
peer chaincode list --installed  

第三步: 實(shí)例化chaincode代碼

  • 執(zhí)行下面的步驟村生,需要系統(tǒng)中已安裝 docker

export set CHANNEL_NAME=binnychannel


peer chaincode instantiate -o orderer.binny.com:7050 -C $CHANNEL_NAME -n binny_test_01 -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR('Org1MSP.member','Org2MSP.member')"

第四步:通過(guò)chaincode寫入數(shù)據(jù)

  • ==設(shè)置臨時(shí)變量惊暴,channel 名字==

export set CHANNEL_NAME=binnychannel
export set CORE_PEER_LOCALMSPID=Org1MSP

export set CORE_PEER_ADDRESS=peer0.org1.binny.com:7051
export set CORE_PEER_MSPCONFIGPATH=/var/hyperledger/certificate/crypto-config/peerOrganizations/org1.binny.com/users/Admin@org1.binny.com/msp


peer chaincode invoke -o orderer.binny.com:7050 -C $CHANNEL_NAME -n binny_test_01 -c '{"Args":["invoke","a","b","1"]}'

第五步:通過(guò)chaincode查詢數(shù)據(jù)

export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_ADDRESS=peer0.org1.binny.com:7051
export set CORE_PEER_MSPCONFIGPATH=$GOPATH/src/github.com/hyperledger/certificate/certificate-config/peerOrganizations/org1.binny.com/users/Admin@org1.binny.com/msp


peer chaincode query -C $CHANNEL_NAME -n binny_test_01 -c '{"Args":["query","a"]}'

peer chaincode query -C $CHANNEL_NAME -n binny_test_01 -c '{"Args":["query","b"]}'

如果上述命令都能正確執(zhí)行,那么一個(gè)簡(jiǎn)單的Fabric系統(tǒng)就已經(jīng)部署完成了趁桃。

五 自定義 chaincode

將寫好的 chaincode 同步到節(jié)點(diǎn)服務(wù)器上

5.1 調(diào)試模式(IDE中設(shè)置)

  • 設(shè)置參數(shù)
-peer.address=192.168.35.131:7052
  • 配置環(huán)境變量
CORE_PEER_ADDRESS=192.168.35.131:7051
CORE_CHAINCODE_ID_NAME=helloworld_1222:1.0//chaincode名字:版本號(hào)
CORE_CHAINCODE_LOGGING_LEVEL=debug
CORE_CHAINCODE_LOGGING_SHIM=debug

5.2 進(jìn)入節(jié)點(diǎn)服務(wù)

5.2.1 設(shè)置環(huán)境變量

  • 設(shè)置 MSP
export set CORE_PEER_LOCALMSPID=Org1MSP
  • 設(shè)置證書路徑
export set CORE_PEER_MSPCONFIGPATH=$GOPATH/src/github.com/hyperledger/certificate/crypto-config/peerOrganizations/org1.binny.com/users/Admin@org1.binny.com/msp
  • 設(shè)置 core.yaml所在路徑
export set FABRIC_CFG_PATH=$GOPATH/src/github.com/hyperledger/certificate
  • 設(shè)置一個(gè)節(jié)點(diǎn)地址
export set CORE_PEER_ADDRESS=peer0.org1.binny.com:7051
  • 設(shè)置日志級(jí)別
export set FABRIC_LOGGING_SPEC=DEBUG
  • 設(shè)置日志級(jí)別
export set CORE_LOGGING_LEVEL=DEBUG

5.2.2 打包 chaincode

在以上環(huán)境變量的基礎(chǔ)上執(zhí)行下列代碼辽话,將指定的鏈碼打包為CDS(Chaincode Deployment Spec)格式肄鸽,并存入節(jié)點(diǎn)上指定的路徑。

peer chaincode install -n helloworld_1222 -v 1.0 -p chaincode
  • ==選項(xiàng)說(shuō)明:==
  • --connectionProfile Connection profile that provides the necessary connection information for the network. Note: currently only supported for providing peer connection information
  • -c, --ctor Constructor message for the chaincode in JSON format (default "{}")
  • -h, --help help for install
  • -l, --lang Language of chaincode, either "golang" (default), "node", or "java"
  • -n, --name Name of the chaincode
  • -p, --path Path to chaincode, for "golang" use relative path from $GOPATH/src, for "node" or "java" use absolute path
  • -v, --version Version of the chaincode specified in install/instantiate/upgrade commands

  • 查看一下
peer chaincode list --installed
  • 輸出結(jié)果
Get installed chaincodes on peer:
Name: binny_test_01, Version: 1.0, Path: github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd, Id: c405e9d12c9adc4a8773786de35bababed8d41ca8242d00ba402d932d934805e
Name: helloworld_1222, Version: 1.0, Path: fabric_cc_study/1.4.6/binny, Id: 6f9b8c6fff1951402b97ef685741aba144af89f0ab026ad0a31d0d1ce5e73f20

5.2.3 將指定的鏈碼部署到網(wǎng)絡(luò)上油啤。

執(zhí)行下面命令會(huì)調(diào)用 Init方法

peer chaincode instantiate -o orderer.binny.com:7050 -C binnychannel -n helloworld_1222 -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
  • 執(zhí)行以下命名典徘,查看一下
peer chaincode list --instantiated -C binnychannel

5.2.4 調(diào)用指定給的鏈碼,并初始化參數(shù)

  • 調(diào)用 set 方法
peer chaincode invoke -o orderer.binny.com:7050  --waitForEvent -C binnychannel -n helloworld_1222  -c '{"Args":["set","name","徐耀益咬,曹歡","fabric--2019-12-22"]}'
  • 調(diào)用get方法
peer chaincode query -C binnychannel -n helloworld_1222 -c '{"Args":["get","name","參數(shù) 2","參數(shù)3"]}'

5.2.5 調(diào)用get方法

獲取并顯示鏈碼函數(shù)調(diào)用的背書結(jié)果逮诲。該命令不會(huì)生成交易。

peer chaincode query -C binnychannel -n helloworld_1222 -c '{"Args":["get","get","key1222","chaincode v 1.5 = query11111"]}'
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末幽告,一起剝皮案震驚了整個(gè)濱河市梅鹦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冗锁,老刑警劉巖齐唆,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異冻河,居然都是意外死亡箍邮,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門芋绸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)媒殉,“玉大人,你說(shuō)我怎么就攤上這事摔敛。” “怎么了全封?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵马昙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我刹悴,道長(zhǎng)行楞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任土匀,我火速辦了婚禮子房,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘就轧。我一直安慰自己证杭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布妒御。 她就那樣靜靜地躺著解愤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乎莉。 梳的紋絲不亂的頭發(fā)上送讲,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天奸笤,我揣著相機(jī)與錄音,去河邊找鬼哼鬓。 笑死监右,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的异希。 我是一名探鬼主播健盒,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼宠互!你這毒婦竟也來(lái)了味榛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤予跌,失蹤者是張志新(化名)和其女友劉穎搏色,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體券册,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡频轿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烁焙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片航邢。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖骄蝇,靈堂內(nèi)的尸體忽然破棺而出膳殷,到底是詐尸還是另有隱情,我是刑警寧澤九火,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布赚窃,位于F島的核電站,受9級(jí)特大地震影響岔激,放射性物質(zhì)發(fā)生泄漏勒极。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一虑鼎、第九天 我趴在偏房一處隱蔽的房頂上張望辱匿。 院中可真熱鬧,春花似錦炫彩、人聲如沸匾七。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)乐尊。三九已至,卻和暖如春划址,著一層夾襖步出監(jiān)牢的瞬間扔嵌,已是汗流浹背限府。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痢缎,地道東北人胁勺。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像独旷,于是被迫代替她去往敵國(guó)和親署穗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353