• Fabric2.0测试网络部署链码


    1. 启动测试网络

    1.1 进入test-network目录

    cd test-network

    1.2 启动测试网络

    ./network.sh up

    1.3 创建通道并加入peer

    ./network.sh createChannel

    1.4 部署链码 deployCC 二进制文件中有默认的链码

    ./network.sh deployCC

    1.5 测试链码

    首先确保自己位于test-network目录下,执行如下的方式来临时配置。

    export PATH=${PWD}/../bin:$PATH

    此外还需要配置一下config所在的目录。

    export FABRIC_CFG_PATH=$PWD/../config/

    这样准备工作就做好了。

    设置如下的环境变量,可以使得你作为Org1来操作peer命令。

    复制代码
    # Environment variables for 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

    CORE_PEER_TLS_ROOTCERT_FILECORE_PEER_MSPCONFIGPATH两行指明了Org1的加密所用的信息。

    可以使用如下的命令来查看channel的账本中的汽车列表,这个列表是刚才使用deployCC参数时添加的。

    peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'

    当然chaincode也可以在网络中的某个成员想要转移或者更新资产的时候调用,利用如下的命令可以调用fabcar chaincode来修改账本中的某一辆车的拥有者。

    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 fabcar --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":"changeCarOwner","Args":["CAR9","Dave"]}'

    如果出现"Chaincode invoke successful. result: status:200 "的字样,说明更新成功。

    为了查看调用是否成功,可以使用另一个chaincode的查询,这里我们可以利用Org2来执行peer命令进行查询,首先需要设置如下环境变量。

    复制代码
    # Environment variables for 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
    复制代码

    然后可以使用如下命令来查看CAR9在账本中的情况。

    peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryCar","CAR9"]}'

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1nBzWspq-1593192296224)(./blog-pic/3.png)]

    可以看到车辆已经被转移给了Dave,即刚才的更新成功了,说明:测试网络搭建完成

    2. 部署新的链码

    2.1 . 打包链码

    本文章使用test-network提供的一个链码

    进入test-network的上一级目录有chaincode的文件夹

    cd ../chaincode

    链码打包:创建一个打包文件(tar格式),其中包含Fabric链码以及一些元数据。

    cd test-network

    peer lifecycle chaincode package sacc.tar.gz --path ../chaincode/sacc/ --lang golang --label sacc_1

    2.2 安装链码包

    安装:将打包的Fabric链码文件安装在指定的peer节点上。和之前的版本一样, 只有需要接受链码调用的节点才需要安装链码。在这个节点,Fabric链码还不可用, 因为还没有提交到通道中。

    peer lifecycle chaincode install ./sacc.tar.gz

    注:测试网络有两个peer,每个peer都要执行一次安装链码包,切换peer用户可参考1.5中的测试链码

    2.3查看链码安装情况

    peer lifecycle chaincode queryinstalled

     2.4 审批链码

    peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls true --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --channelID mychannel --name sacc --version 1 --init-required --package-id sacc_1:f18557d5390324c3f949bf0face6abfd40ac94d27ffb95bb9800a6631a41c858 --sequence 1

    其中:sacc_1的值换成2.3 执行获取的值

    2.5查看链码的审批状态

    peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name sacc--version 1 --sequence 1 --output json --init-required

     注:测试网络有两个peer,每个有peer都要审核链码,切换peer用户可参考1.5中的测试链码。查看链码的审批状态 都要显示true

     2.6提交链码

    peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls true --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --channelID mychannel --name sacc --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 --version 1 --sequence 1 --init-required

     2.7查看链码的提交状态

    peer lifecycle chaincode querycommitted --channelID mychannel --name sacc

    2.8初始化链码

    peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls true --cafile /root/fabric-samples/test-network/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n sacc --peerAddresses localhost:7051 --tlsRootCertFiles /root/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles /root/fabric-samples/test-network/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt --isInit -c '{"function":"set","Args":["213"]}'

    2.9调用链码的方法

    set 方法

    peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls true --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n sacc --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":"set","Args":["username1","test"]}'

     get 方法

    peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls true --cafile /root/fabric-samples/test-network/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n sacc --peerAddresses localhost:7051 --tlsRootCertFiles /root/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles /root/fabric-samples/test-network/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"get","Args":["username1"]}'

    作者:辉哥哥~
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    CSS Grid 网格布局全解析
    VSCode插件和首选项配置
    mybatis分页实现原理
    org.apache.ibatis.exceptions.PersistenceException解决办法
    使用ssm框架在使用id查询时应注意的问题
    出现Caused by: org.apache.ibatis.executor.ExecutorException: No constructor found in com.duowenjia.bean.StudentInfo matching [java.lang.Integer, java.lang.String, java.lang.String, java.lang.String]的问题
    如何实现每个页面都判断session
    count(*),count(常量),count(列名)的区别
    json的jsonarray是有区别的
    毕业设计(高校网上作业提交系统)开发记录(20)
  • 原文地址:https://www.cnblogs.com/lihui123/p/15481862.html
Copyright © 2020-2023  润新知