fabric2.4.9 运行测试网络
分享的内容基于官网,加入了些许自我理解等额外内容,本次主要是对网络进行测试,并对链码操作进行简单讲解,具体的链码操作和解释请看下节。
https://hyperledger-fabric.readthedocs.io/en/release-2.4/test_network.html
运行前提是上个帖子分享的环境配置
运行testnetwork
· 首先进入到文件夹下
cd fabric-samples/test-network
· 现停掉之前的避免出错
./network.sh down
· 在通过脚本启动
./network.sh up
· 通过docker ps -a 查询
· 创建通道
./network.sh createChannel
出现这个就算成功!
也可以通过-c参数指定名称,例如创建一个名为channel1的通道
./network.sh createChannel -c channel1`.
· 在通道上部署链码
使用系统链码,部署在刚创建的通道上
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
-ccn: 链码名
-ccp: 链码安装路径
-ccl: 语言参数
第一次部署会安装依赖
这里报错,没有jq
只需要安装一下
sudo apt-get jq
再运行上面链码,稍等一会就会成功!
实际上这个脚本会自动完成一整个链码的生命周期,关于生命周期和如何编写链码会放到以后分享。
` 使用CLI与网络进行交互
- 在test-network中将节点的二进制文件加入到cli路径中
export PATH=${PWD}/../bin:$PATH
- 将fabric-cgf——path设置为指向fabric-samples中的core.yaml文件
export FABRIC_CFG_PATH=$PWD/../config/
- 操作peer的环境变量cli作为org1:
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之间的TLS加密通信
- 指定当前节点所属的组织名称
- 指定peer的根证书文件路径
- 指定当前节点的msp配置文件路径
- 指定指定当前节点的地址和端口号,用于与peer建立连接
- 调用InitLedger函数初始化链码
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":[]}'
- peer chaincode invoke -o localhost:7050:调用peer chaincode invoke命令,并指定输出端口为7050。
- –ordererTLSHostnameOverride orderer.example.com:设置orderer的TLS主机名覆盖,这里将orderer的TLS主机名设置为orderer.example.com。
- –tls --cafile “${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem”:启用TLS加密通信,并指定证书文件路径。
4.-C mychannel -n basic:指定chaincode所在的channel名称为mychannel,chaincode的命名空间为basic。
- –peerAddresses localhost:7051:指定当前节点的地址和端口号,用于与peer建立连接。
- –tlsRootCertFiles “${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt”:指定当前节点的root证书文件路径。
–peerAddresses localhost:9051:指定另一个peer的地址和端口号,用于与另一个peer建立连接。
–tlsRootCertFiles “${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt”:指定另一个peer的root证书文件路径。
-c ‘{“function”:“InitLedger”,“Args”:[]}’:调用chaincode的InitLedger函数,并传递一个空的参数列表 -c 参数是用来指定调用的chaincode的名称和输入参数的。在上面的例子中,我们通过 -c ‘{“function”:“InitLedger”,“Args”:[]}’ 来调用名为 InitLedger 的chaincode函数,并传递一个空的输入参数列表。
实际使用中可以精简为:
peer chaincode invoke -o localhost:7050 -C mychannel -n basic --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:7051 --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" --peerAddresses localhost:9051 -c '{"function":"InitLedger","Args":[]}'
5. 查询账本
peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'
成功结果如下
6. 更改资产的所有者
调用了链码中的transferasset函数,参数为[“asset6”,“Christopher”],其他参数与上述类似不多重复。
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"]}'
7. 将org2设置为环境变量
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051
- 查询运行在org2上的资产转移链码
peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset6"]}'
9. 最后关闭网络
./network.sh down