拆解byfn.sh——深入shell看過程

拆解fabric-sample/first-network/byfn.sh——深入shell看過程

byfn是fabric-sample下的一個快速入門的demo君躺。
byfn全名意為:build your first network,就是用來構建一個你自己的第一個fabric超級賬本網(wǎng)絡挠蛉。
這個demo屬于入門級demo,也是一個快速幫助初學者了解超級賬本的啟動流程的一個最好的例子徒坡。

拆解byfn.sh

前面通過執(zhí)行的方式看到byfn.sh的執(zhí)行效果雕凹,接下來看看該腳本內(nèi)部的實際操作琼开。
記得我們啟動byfn腳本傳入了一個參數(shù):up
接下來就從入口開始探究一下byfn經(jīng)歷了哪些。

啟動

#Create the network using docker compose
if [ "${MODE}" == "up" ]; then
  networkUp
elif [ "${MODE}" == "down" ]; then ## Clear the network
  networkDown
elif [ "${MODE}" == "generate" ]; then ## Generate Artifacts
  generateCerts
  replacePrivateKey
  generateChannelArtifacts
elif [ "${MODE}" == "restart" ]; then ## Restart the network
  networkDown
  networkUp
elif [ "${MODE}" == "upgrade" ]; then ## Upgrade the network from version 1.1.x to 1.2.x
  upgradeNetwork
else
  printHelp
  exit 1
fi

我們通常的啟動指令為:./byfn.sh up
所以這里會調(diào)用“networkUp方法”

networkUp

# Generate the needed certificates, the genesis block and start the network.
function networkUp() {
  checkPrereqs
  # generate artifacts if they don't exist
  ##可以不必要單獨使用./byfn.sh generate精算,因為在networkUp的時候自動檢測是否存在證書文件瓢宦,不存在則創(chuàng)建
  if [ ! -d "crypto-config" ]; then
    ##利用cryptogen生成新的Certs文件
    generateCerts
    ##根據(jù)e2e模版yaml生成新的yaml,并將生成的Cert文件替換到y(tǒng)aml的CA節(jié)點的路徑中
    replacePrivateKey
    ##利用configtxgen生成創(chuàng)世區(qū)塊灰羽、創(chuàng)建通道
    generateChannelArtifacts
  fi
  ## 1個order排序節(jié)點驮履、4個peer節(jié)點,p0o1,p1o1,p0o2,p1o2
  ## ...XXX... -c XXX -s couchdb ...XXX...
  if [ "${IF_COUCHDB}" == "couchdb" ]; then
    ##如果選擇了couchdb則會啟動4臺couchdb節(jié)點用來分別掛載p0o1,p1o1,p0o2,p1o2
    IMAGE_TAG=$IMAGETAG docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_COUCH up -d 2>&1
  else
    IMAGE_TAG=$IMAGETAG docker-compose -f $COMPOSE_FILE up -d 2>&1
  fi
  if [ $? -ne 0 ]; then
    echo "ERROR !!!! Unable to start network"
    exit 1
  fi
  # now run the end to end script
  ##調(diào)用腳本啟動
  docker exec cli scripts/script.sh $CHANNEL_NAME $CLI_DELAY $LANGUAGE $CLI_TIMEOUT $VERBOSE
  if [ $? -ne 0 ]; then
    echo "ERROR !!!! Test failed"
    exit 1
  fi
}

up方法:

  1. 版本校驗:
    1. 檢查當前docker本地“hyperledger/fabric-tools”鏡像的版本號與本地fabric可執(zhí)行文件configtxlator的版本號是否一致廉嚼,如果不一致也只是輸出警告信息玫镐,不會影響使用;
    2. 同時還有一個badversion(不支持列表)怠噪,如果上述2個版本號在不支持列表中恐似,會發(fā)出ERROR并退出;
  2. 檢查證書文件是否存在
    1. 判斷當前目錄下是否存在“config”目錄傍念,該目錄是由命令:“./byfn.sh generate” 生成矫夷;
    2. 同時我們也可以不必要單獨生成葛闷,因為在networkUp的時候自動檢測是否存在證書文件,不存在則創(chuàng)建口四;
  3. 生成證書文件
    ##利用cryptogen生成新的Certs文件
    generateCerts
    ##根據(jù)e2e模版yaml生成新的yaml孵运,并將生成的Cert文件替換到y(tǒng)aml的CA節(jié)點的路徑中
    replacePrivateKey
    ##利用configtxgen生成創(chuàng)世區(qū)塊、創(chuàng)建通道
    generateChannelArtifacts
    
  4. 選擇DB類型
1. fabric支持兩種數(shù)據(jù)庫類型蔓彩,默認采用goleveldb治笨,也可以通過這里傳入命令的方式選擇使用CouchDB

``` bash
if [ "${IF_COUCHDB}" == "couchdb" ]; then
##如果選擇了couchdb則會啟動4臺couchdb節(jié)點用來分別掛載p0o1,p1o1,p0o2,p1o2
    IMAGE_TAG=$IMAGETAG docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_COUCH up -d 2>&1
else
    IMAGE_TAG=$IMAGETAG docker-compose -f $COMPOSE_FILE up -d 2>&1
fi
```

2. 根據(jù)腳本我們知道可以使用“...XXX... -c XXX -s couchdb ...XXX...” -s參數(shù)來選擇couchdb
  1. 真正開始準備啟動,通過腳本我們可以很直觀的看到啟動流程

    ## Create channel 創(chuàng)建通道
    echo "Creating channel..."
    createChannel
    
    ## Join all the peers to the channel 所有節(jié)點加入通道
    echo "Having all peers join the channel..."
    joinChannel
    
    ## Set the anchor peers for each org in the channel 更新p0o1,p0o2錨節(jié)點信息
    echo "Updating anchor peers for org1..."
    updateAnchorPeers 0 1
    echo "Updating anchor peers for org2..."
    updateAnchorPeers 0 2
    
    ## Install chaincode on peer0.org1 and peer0.org2 在p0o1,p0o2上安裝鏈碼
    echo "Installing chaincode on peer0.org1..."
    installChaincode 0 1
    echo "Install chaincode on peer0.org2..."
    installChaincode 0 2
    
    # Instantiate chaincode on peer0.org2 初始化鏈碼赤嚼,可以在任意一臺peer上初始化即可全局生效
    echo "Instantiating chaincode on peer0.org2..."
    instantiateChaincode 0 2
    
    # Query chaincode on peer0.org1 查詢賬戶結果是否為100
    echo "Querying chaincode on peer0.org1..."
    chaincodeQuery 0 1 100
    
    # Invoke chaincode on peer0.org1 and peer0.org2 執(zhí)行一次invoke操作
    echo "Sending invoke transaction on peer0.org1 peer0.org2..."
    chaincodeInvoke 0 1 0 2
    
    ## Install chaincode on peer1.org2 在p1o2上安裝鏈碼
    echo "Installing chaincode on peer1.org2..."
    installChaincode 1 2
    
    # Query on chaincode on peer1.org2, check if the result is 90 在p1o2上查詢賬戶結果是否為轉賬后的90
    echo "Querying chaincode on peer1.org2..."
    chaincodeQuery 1 2 90
    

至此旷赖,demo就結束了整個的工作。
在demo的演示過程中有很多命令值得我們記錄下來并且常用

  • peer channel update XXX
  • peer channel join XXX
  • peer chaincode install XXX
  • peer chaincode instantiate XXX
  • peer chaincode query XXX
  • peer chaincode invoke

謝謝更卒。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末等孵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蹂空,更是在濱河造成了極大的恐慌俯萌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件上枕,死亡現(xiàn)場離奇詭異咐熙,居然都是意外死亡,警方通過查閱死者的電腦和手機辨萍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門棋恼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锈玉,你說我怎么就攤上這事爪飘。” “怎么了拉背?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵师崎,是天一觀的道長。 經(jīng)常有香客問我椅棺,道長犁罩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任土陪,我火速辦了婚禮昼汗,結果婚禮上,老公的妹妹穿的比我還像新娘鬼雀。我一直安慰自己顷窒,他們只是感情好,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鞋吉,像睡著了一般鸦做。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谓着,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天泼诱,我揣著相機與錄音,去河邊找鬼赊锚。 笑死治筒,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的舷蒲。 我是一名探鬼主播耸袜,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼牲平!你這毒婦竟也來了堤框?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤纵柿,失蹤者是張志新(化名)和其女友劉穎蜈抓,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昂儒,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡沟使,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了荆忍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片格带。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡撤缴,死狀恐怖刹枉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情屈呕,我是刑警寧澤微宝,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站虎眨,受9級特大地震影響蟋软,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嗽桩,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一岳守、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碌冶,春花似錦湿痢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拒逮。三九已至,卻和暖如春臀规,著一層夾襖步出監(jiān)牢的瞬間滩援,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工塔嬉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留玩徊,地道東北人。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓谨究,卻偏偏與公主長得像佣赖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子记盒,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

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