搭建第一個(gè)網(wǎng)絡(luò)(二)

搭建第一個(gè)網(wǎng)絡(luò)(二)

本文主要是根據(jù)網(wǎng)上文檔動(dòng)手操作,熟悉一下區(qū)塊鏈網(wǎng)絡(luò)的工作流程戈泼,包括生成創(chuàng)世區(qū)塊赏僧,創(chuàng)建通道,安裝鏈碼胎署,實(shí)例化鏈碼窑滞,實(shí)現(xiàn)查詢、調(diào)用的功能巨坊。

生成初始區(qū)塊

$ ../bin/cryptogen generate --config=./crypto-config.yaml

$ export FABRIC_CFG_PATH=$PWD? #賦值

$ ../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

生成應(yīng)用通道的配置信息

$ export CHANNEL_NAME=mychannel? ? #mychannel是鏈的標(biāo)識(shí)此改,可以自己命名

$ ../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME??

生成錨節(jié)點(diǎn)配置更新文件,錨節(jié)點(diǎn)與對(duì)點(diǎn)節(jié)點(diǎn)通信

#將在正在構(gòu)建的通道上定義Org1的anchor peer占调。請(qǐng)?jiān)俅未_認(rèn)$CHANNEL_NAME已被替換或者為以下命令設(shè)置了環(huán)境變量

$ ../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP?

#在同一個(gè)通道定義Org2的anchor peer:

$ ../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP

操作網(wǎng)絡(luò)

現(xiàn)在我們想手動(dòng)執(zhí)行命令,以便公開每個(gè)調(diào)用的語法和功能薪者,所以打開docker-compose-cli.yaml文件剿涮,注釋掉下面的command命令:

working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer# command: /bin/bash -c './scripts/script.sh ${CHANNEL_NAME}; sleep $TIMEOUT' volumes

#如果沒有注釋,該腳本將在網(wǎng)絡(luò)啟動(dòng)時(shí)執(zhí)行所有命令悬槽。

$ CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=600 docker-compose -f docker-compose-cli.yaml up -d

#適當(dāng)?shù)貫門IMEOUT傳遞較高的值(以秒為單位);默認(rèn)情況下CLI容器將在60秒之后退出瞬浓。

創(chuàng)建和加入通道

使用docker exec命令進(jìn)入CLI容器:

$ docker exec -it cli bash

如果成功猿棉,你將看到下列信息:

root@0d78bb69300d:/opt/gopath/src/github.com/hyperledger/fabric/peer#

創(chuàng)建通道

$ export CHANNEL_NAME=mychannel

$?peer channel create -oorderer.example.com:7050-c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

#此命令返回一個(gè)創(chuàng)世區(qū)塊-<channel-ID.block>-我們將使用它加入信道。它包含了channel.tx中的配置信息宪躯。

加入通道

$ peer channel join -b mychannel.block

安裝和實(shí)例化鏈碼

$ peer chaincode install -n mycc -v 1.0 -pgithub.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

$?peer chaincode instantiate -oorderer.example.com:7050--tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem-C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"

查詢

#查詢一下a的值位迂,以確保鏈碼被正確實(shí)例化,state DB被填充

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

#查詢結(jié)果

Query Result : 100

調(diào)用

#我們從a賬戶轉(zhuǎn)10到b賬戶臣缀。這個(gè)交易將創(chuàng)建一個(gè)新的區(qū)塊并更新state DB泻帮。

$?peer chaincode invoke -oorderer.example.com:7050--tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem-C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}'

查詢

#確認(rèn)下我們之前的調(diào)用被正確地執(zhí)行了锣杂。我們初始化了a的值為100,在上一次調(diào)用的時(shí)侯轉(zhuǎn)移了10給b元莫。因此,查詢a應(yīng)該展示90火欧。

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

# 應(yīng)該看到以下內(nèi)容

$?Query Result: 90


這些步驟描述了在script.sh腳本中沒有注釋掉的docker-compose-cli.yaml文件中的場景。使用./byfn.sh -m down并確保命令執(zhí)行成功赶盔。然后使用相同的docker-compose提示去啟動(dòng)你的網(wǎng)絡(luò)榆浓。

script.sh腳本被拷貝到CLI容器中。這個(gè)腳本驅(qū)動(dòng)了使用提供的channel name以及信道配置的channel.tx文件的createChannel命令。

createChannel命令的產(chǎn)出是一個(gè)創(chuàng)世區(qū)塊-<your_channel_name>.block-這個(gè)創(chuàng)世區(qū)塊被存儲(chǔ)在peer節(jié)點(diǎn)的文件系統(tǒng)中同時(shí)包含了在channel.tx的信道配置打却。

joinChannel命令被4個(gè)peer節(jié)點(diǎn)執(zhí)行,作為之前產(chǎn)生的genesis block的輸入猿推。這個(gè)命令介紹了peer節(jié)點(diǎn)加入<your_channel_name>以及利用<your_channel_name>.block去創(chuàng)建一條鏈捌肴。

現(xiàn)在我們有了由4個(gè)peer節(jié)點(diǎn)以及2個(gè)組織構(gòu)成的信道。這是我們的TwoOrgsChannel配置文件秽五。

peer0.org1.example.compeer1.org1.example.com屬于Org1;peer0.org2.example.compeer1.org2.example.com屬于Org2

這些關(guān)系是通過crypto-config.yaml定義的饥悴,MSP路徑在docker-compose文件中被指定。

Org1MSP(peer0.org1.example.com)和Org2MSP(peer0.org2.example.com)的anchor peers將在后續(xù)被更新瓣铣。我們通過攜帶channel的名字傳遞Org1MSPanchors.tx和Org2MSPanchors.tx配置到排序服務(wù)來實(shí)現(xiàn)anchor peer的更新贷揽。

一個(gè)鏈碼-chaincode_example02被安裝在peer0.org1.example.compeer0.org2.example.com

這個(gè)鏈碼在peer0.org2.example.com被實(shí)例化禽绪。實(shí)例化過程將鏈碼添加到信道上,并啟動(dòng)peer節(jié)點(diǎn)對(duì)應(yīng)的容器印屁,并且初始化和鏈碼服務(wù)有關(guān)的鍵值對(duì)。示例的初始化的值是[”a“,”100“巨柒,”b“,”200“]晶乔。實(shí)例化的結(jié)果是一個(gè)名為dev-peer0.org2.example.com-mycc-1.0的容器啟動(dòng)了牺勾。

實(shí)例化過程同樣為背書策略傳遞相關(guān)參數(shù)。策略被定義為-P "OR????('Org1MSP.member','Org2MSP.member')"翻具,意思是任何交易必須被Org1或者Org2背書回还。

一個(gè)針對(duì)a的查詢發(fā)往peer0.org1.example.com。鏈碼服務(wù)已經(jīng)被安裝在了peer0.org1.example.com柠硕,因此這次查詢將啟動(dòng)一個(gè)名為dev-peer0.org1.example.com-mycc-1.0的容器蝗柔。查詢的結(jié)果也將被返回。沒有寫操作出現(xiàn)癣丧,因此查詢的結(jié)果的值將為100。

一次invoke被發(fā)往peer0.org1.example.com竟痰,從a轉(zhuǎn)移10到b掏呼。

然后鏈碼服務(wù)被安裝到peer1.org2.example.com

一個(gè)query請(qǐng)求被發(fā)往peer1.org2.example.com用于查詢a的值。這將啟動(dòng)第三個(gè)鏈碼服務(wù)名為dev-peer1.org2.example.com-mycc-1.0莽鸿。返回a的值為90,正確地反映了之前的交易拾给,a的值被轉(zhuǎn)移了10。

排錯(cuò)

始終保持你的網(wǎng)絡(luò)是全新的级及。使用以下命令來移除之前生成的artifacts,crypto,containers以及chaincode images:

$ ./byfn.sh -m down

查詢正在運(yùn)行的容器

$ docker ps -a

刪除鏡像:

$ docker rm -f $(docker ps -aq)

$ docker rmi -f $(docker images -q)


參考:

構(gòu)建第一個(gè)fabric網(wǎng)絡(luò):https://hyperledgercn.github.io/hyperledgerDocs/build_network_zh/

https://blog.csdn.net/lengxue789/article/details/78915692

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怕吴,一起剝皮案震驚了整個(gè)濱河市县踢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌议经,老刑警劉巖谴返,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異籍救,居然都是意外死亡索抓,警方通過查閱死者的電腦和手機(jī)毯炮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門桃煎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人三椿,你說我怎么就攤上這事葫辐。” “怎么了耿战?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵剂陡,是天一觀的道長。 經(jīng)常有香客問我歌馍,道長晕鹊,這世上最難降的妖魔是什么暴浦? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任玻褪,我火速辦了婚禮,結(jié)果婚禮上同规,老公的妹妹穿的比我還像新娘窟社。我一直安慰自己,他們只是感情好关炼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布匣吊。 她就那樣靜靜地躺著色鸳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪命雀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天撵儿,我揣著相機(jī)與錄音狐血,去河邊找鬼。 笑死浪默,一個(gè)胖子當(dāng)著我的面吹牛报亩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播岳链,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼劲件,長吁一口氣:“原來是場噩夢啊……” “哼约急!你這毒婦竟也來了厌蔽?” 一聲冷哼從身側(cè)響起摔癣,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎戴卜,沒想到半個(gè)月后琢岩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡江锨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年啄育,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了娩缰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谒府。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖泰鸡,靈堂內(nèi)的尸體忽然破棺而出壳鹤,到底是詐尸還是另有隱情,我是刑警寧澤余舶,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布锹淌,位于F島的核電站,受9級(jí)特大地震影響挟憔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绊谭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一达传、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鹤树,春花似錦、人聲如沸逊朽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岛蚤。三九已至,卻和暖如春单雾,著一層夾襖步出監(jiān)牢的瞬間她紫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工渐逃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留民褂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓面殖,卻偏偏與公主長得像哭廉,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子群叶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容