1. 先决条件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| git clone git@github.com:hyperledger/fabric.git
fabric/scripts/bootstrap.sh -s -b
fabric/scripts/bootstrap.sh -d -b
fabric/scripts/bootstrap.sh -d -s
export FABRIC_BINARY_PATH=/home/raven/Workspace/ForkProjects/fabric-binary export FABRIC_SAMPLES_PATH=/home/raven/Workspace/ForkProjects/fabric-samples export FABRIC_CFG_PATH=$FABRIC_SAMPLES_PATH/config/ export PATH=$PATH:$FABRIC_SAMPLES_PATH/bin
ln -sf $FABRIC_BINARY_PATH/bin $FABRIC_SAMPLES_PATH/bin ln -sf $FABRIC_BINARY_PATH/config $FABRIC_SAMPLES_PATH/config
|
通过 bootstrap.sh 安装完 3 样东西后, 可以部署测试网络
2. 部署测试网络
1 2 3 4 5 6 7 8 9 10 11 12 13
|
cd fabric-samples/test-network
./network.sh -h
./network.sh up
|
./network.sh up 做了以下事情:
- 读取
organizations/cryptogen 目录下的配置, 通过 cryptogen 工具为 2 个 peer (org1, org2) 和 1 个 orderer 节点生成身份验证材料.
身份验证材料分别放在 ordererOrganizations 和 peerOrganizations 目录下.
- 读取
configtx/configtx.yaml 配置, 通过 configtxgen 工具创建系统通道创世区块
系统通道创世区块放在 system-genesis-block 目录下
- 读取
docker/docker-compose-test-net.yaml, 通过 docker 建立网络
3. 创建通道
1
| ./network.sh createChannel
|
./network.sh 会调用 scripts/createChannel.sh 脚本创建通道:
- 读取
configtx/configtx.yaml 配置, 初始化事务
- 将 2 个 peer 节点加入通道, 并相互锚定.
4. 部署链码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
./network.sh deployCC
export CORE_PEER_TLS_ENABLED=true export CORE_PEER_LOCALMSPID="Org1MSP" export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp export CORE_PEER_ADDRESS=localhost:7051
peer lifecycle chaincode install basic.tar.gz
peer lifecycle chaincode queryinstalled
|
./network.sh 会调用 scripts/deployCC.sh 脚本部署链码:
- 构建打包链码项目
- 将链码包提交给通道
- 将初始数据提交到账本
5. 账本操作
5.1. 初始化
1
| peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"InitLedger","Args":[]}'
|
5.2. 查询账本
1
| peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'
|
5.3. 修改账本
1
| peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"TransferAsset","Args":["asset6","Christopher"]}'
|
6. 关闭区块链网络
7. Resource