generateArtifact.sh脚本分析

2018-12-11  本文已影响0人  Jarvist
#!/bin/bash +x
#
# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#


#set -e

#network start.sh中调用时,传入的channel name 默认为mychannel
CHANNEL_NAME=$1
: ${CHANNEL_NAME:="mychannel"}
echo $CHANNEL_NAME

#设置环境变量
export FABRIC_ROOT=$PWD/../..
export FABRIC_CFG_PATH=$PWD
echo

#查询系统结构 windows改为mingw64_nt,x86_64改为amd64
OS_ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')" | awk '{print tolower($0)}')

## Using docker-compose template replace private key file names with constants
#替换私钥
function replacePrivateKey () {
        #Darwin sed -it ;else sed -i
    ARCH=`uname -s | grep Darwin`
    if [ "$ARCH" == "Darwin" ]; then
        OPTS="-it"
    else
        OPTS="-i"
    fi
        
        #复制文件
    cp docker-compose-e2e-template.yaml docker-compose-e2e.yaml
        #进入目录
        CURRENT_DIR=$PWD
        cd crypto-config/peerOrganizations/org1.example.com/ca/
        #找到sk文件 在yaml文件中进行替换
        PRIV_KEY=$(ls *_sk)
        cd $CURRENT_DIR
        sed $OPTS "s/CA1_PRIVATE_KEY/${PRIV_KEY}/g" docker-compose-e2e.yaml
        cd crypto-config/peerOrganizations/org2.example.com/ca/
        PRIV_KEY=$(ls *_sk)
        cd $CURRENT_DIR
        sed $OPTS "s/CA2_PRIVATE_KEY/${PRIV_KEY}/g" docker-compose-e2e.yaml
}

## Generates Org certs using cryptogen tool 生成证书
function generateCerts (){
        #cryptogen工具地址
    CRYPTOGEN=$FABRIC_ROOT/release/$OS_ARCH/bin/cryptogen
        #文件存在
    if [ -f "$CRYPTOGEN" ]; then
            echo "Using cryptogen -> $CRYPTOGEN"
    else
        echo "Building cryptogen"
            #编译
        make -C $FABRIC_ROOT release
    fi

    echo
    echo "##########################################################"
    echo "##### Generate certificates using cryptogen tool #########"
    echo "##########################################################"
        #使用crypto-config.yaml生成这证书
    $CRYPTOGEN generate --config=./crypto-config.yaml
    echo
}


#Idemix是一个加密协议套件,它提供强大的身份验证以及隐私保护功能,
#如匿名,无需披露交易者身份即可进行交易,以及不可链接性,即单个身份发送多个交易的能力,
#而不会泄露交易是通过相同的身份发送的。Idemix流中涉及三个参与者:用户,发行者和验证者。

function generateIdemixMaterial (){
    IDEMIXGEN=$FABRIC_ROOT/release/$OS_ARCH/bin/idemixgen
    CURDIR=`pwd`
    IDEMIXMATDIR=$CURDIR/crypto-config/idemix

    if [ -f "$IDEMIXGEN" ]; then
            echo "Using idemixgen -> $IDEMIXGEN"
    else
        echo "Building idemixgen"
        make -C $FABRIC_ROOT release
    fi

    echo
    echo "####################################################################"
    echo "##### Generate idemix crypto material using idemixgen tool #########"
    echo "####################################################################"

    mkdir -p $IDEMIXMATDIR
    cd $IDEMIXMATDIR

    # Generate the idemix issuer keys
    $IDEMIXGEN ca-keygen

    # Generate the idemix signer keys
    $IDEMIXGEN signerconfig -u OU1 -e OU1 -r 1

    cd $CURDIR
}

## Generate orderer genesis block , channel configuration transaction and anchor peer update transactions
# 创建创世区块
function generateChannelArtifacts() {
       #使用configtxgen工具
    CONFIGTXGEN=$FABRIC_ROOT/release/$OS_ARCH/bin/configtxgen
    if [ -f "$CONFIGTXGEN" ]; then
            echo "Using configtxgen -> $CONFIGTXGEN"
    else
        echo "Building configtxgen"
        make -C $FABRIC_ROOT release
    fi

    echo "##########################################################"
    echo "#########  Generating Orderer Genesis block ##############"
    echo "##########################################################"
    # Note: For some unknown reason (at least for now) the block file can't be
    # named orderer.genesis.block or the orderer will fail to launch!
        #运行工具 使用configtx.yaml文件 对应profile名称
    $CONFIGTXGEN -profile TwoOrgsOrdererGenesis -channelID e2e-orderer-syschan -outputBlock ./channel-artifacts/genesis.block

    echo
    echo "#################################################################"
    echo "### Generating channel configuration transaction 'channel.tx' ###"
    echo "#################################################################"
         #创建channel.tx
    $CONFIGTXGEN -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME

    echo
    echo "#################################################################"
    echo "#######    Generating anchor peer update for Org1MSP   ##########"
    echo "#################################################################"
    $CONFIGTXGEN -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP

    echo
    echo "#################################################################"
    echo "#######    Generating anchor peer update for Org2MSP   ##########"
    echo "#################################################################"
    $CONFIGTXGEN -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP
    echo
}

#脚本逻辑
generateCerts
generateIdemixMaterial
replacePrivateKey
generateChannelArtifacts
上一篇下一篇

猜你喜欢

热点阅读