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

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

byfn是fabric-sample下的一个快速入门的demo。
byfn全名意为:build your first network,就是用来构建一个你自己的第一个fabric超级账本网络。
这个demo属于入门级demo,也是一个快速帮助初学者了解超级账本的启动流程的一个最好的例子。

拆解byfn.sh

前面通过执行的方式看到byfn.sh的执行效果,接下来看看该脚本内部的实际操作。
记得我们启动byfn脚本传入了一个参数:up
接下来就从入口开始探究一下byfn经历了哪些。

启动

#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
所以这里会调用“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的时候自动检测是否存在证书文件,不存在则创建
  if [ ! -d "crypto-config" ]; then
    ##利用cryptogen生成新的Certs文件
    generateCerts
    ##根据e2e模版yaml生成新的yaml,并将生成的Cert文件替换到yaml的CA节点的路径中
    replacePrivateKey
    ##利用configtxgen生成创世区块、创建通道
    generateChannelArtifacts
  fi
  ## 1个order排序节点、4个peer节点,p0o1,p1o1,p0o2,p1o2
  ## ...XXX... -c XXX -s couchdb ...XXX...
  if [ "${IF_COUCHDB}" == "couchdb" ]; then
    ##如果选择了couchdb则会启动4台couchdb节点用来分别挂载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
  ##调用脚本启动
  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可执行文件configtxlator的版本号是否一致,如果不一致也只是输出警告信息,不会影响使用;
    2. 同时还有一个badversion(不支持列表),如果上述2个版本号在不支持列表中,会发出ERROR并退出;
  2. 检查证书文件是否存在
    1. 判断当前目录下是否存在“config”目录,该目录是由命令:“./byfn.sh generate” 生成;
    2. 同时我们也可以不必要单独生成,因为在networkUp的时候自动检测是否存在证书文件,不存在则创建;
  3. 生成证书文件
    ##利用cryptogen生成新的Certs文件
    generateCerts
    ##根据e2e模版yaml生成新的yaml,并将生成的Cert文件替换到yaml的CA节点的路径中
    replacePrivateKey
    ##利用configtxgen生成创世区块、创建通道
    generateChannelArtifacts
    
  4. 选择DB类型
1. fabric支持两种数据库类型,默认采用goleveldb,也可以通过这里传入命令的方式选择使用CouchDB

``` bash
if [ "${IF_COUCHDB}" == "couchdb" ]; then
##如果选择了couchdb则会启动4台couchdb节点用来分别挂载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. 根据脚本我们知道可以使用“...XXX... -c XXX -s couchdb ...XXX...” -s参数来选择couchdb
  1. 真正开始准备启动,通过脚本我们可以很直观的看到启动流程

    ## Create channel 创建通道
    echo "Creating channel..."
    createChannel
    
    ## Join all the peers to the channel 所有节点加入通道
    echo "Having all peers join the channel..."
    joinChannel
    
    ## Set the anchor peers for each org in the channel 更新p0o1,p0o2锚节点信息
    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 执行一次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

谢谢。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容