• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

fabric编写第合约,Java

武飞扬头像
程序员界的小趴菜
帮助2

1.启动网络

sudo ./network.sh up

2.创建通道

sudo ./network.sh up createChannel

3.在/fabric-samples/chaincode目录下克隆合约

cd ../chaincode/
git clone https://gitee.com/kernelHP/hyperledger-fabric-contract-java-demo.git

学新通

4.在test-network路径下安装合约

cd ../test-network
export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/

5.创建链码包

peer lifecycle chaincode package hyperledger-fabric-contract-java-demo.tar.gz  --path ../chaincode/hyperledger-fabric-contract-java-demo/ --lang java --label hyperledger-fabric-contract-java-demo_1

查看是否打包成功

ls -ll 

6.安装链码包

org1 peer节点安装链码包

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节点安装链码

peer lifecycle chaincode install hyperledger-fabric-contract-java-demo.tar.gz 

这个过程比较慢,不要着急,此时这里显示rror: chaincode install failed with status: 500 - error in simulation: failed to execute transaction 58d14eea40e7aa9f6f5f56c76a3e5cdca7bd9a3525d2d418459461590853926b: error sending: timeout expired while executing transaction 不要着急,超时了,可以等一会儿,可以在另个终端的chaincode/hyperledger-fabric-contract-java-demo目录下看一下下载过程。

docker ps
CONTAINER ID   IMAGE                               COMMAND                  CREATED              STATUS              PORTS                                                                                                                             NAMES
b6939678664a   hyperledger/fabric-javaenv:2.4      "/bin/sh -c ./build.…"   About a minute ago   Up About a minute                                                                                                                                     busy_heyrovsky
395ee1d9145d   hyperledger/fabric-tools:latest     "/bin/bash"              3 minutes ago        Up 3 minutes                                                                                                                                          cli
cea8c8a7cfa2   hyperledger/fabric-peer:latest      "peer node start"        3 minutes ago        Up 3 minutes        0.0.0.0:7051->7051/tcp, :::7051->7051/tcp, 0.0.0.0:9444->9444/tcp, :::9444->9444/tcp                                              peer0.org1.example.com
9ee34fd89972   hyperledger/fabric-orderer:latest   "orderer"                3 minutes ago        Up 3 minutes        0.0.0.0:7050->7050/tcp, :::7050->7050/tcp, 0.0.0.0:7053->7053/tcp, :::7053->7053/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp   orderer.example.com
3cbd835434a4   hyperledger/fabric-peer:latest      "peer node start"        3 minutes ago        Up 3 minutes        0.0.0.0:9051->9051/tcp, :::9051->9051/tcp, 7051/tcp, 0.0.0.0:9445->9445/tcp, :::9445->9445/tcp                                    peer0.org2.example.com
docker logs b6939678664a 
docker logs -f b6939678664a 

当出现以下BUILD SUCCESS结果即可代表下载完成(倒数12行)
学新通

此时再重新执行一遍peer lifecycle chaincode install hyperledger-fabric-contract-java-demo.tar.gz ,显示这个结果,表明成功
学新通
或者执行遍peer lifecycle chaincode install hyperledger-fabric-contract-java-demo.tar.gz ,显示这个,原因是虚拟机挂载之后,docker容器没有重启,需要关闭网络,重新运行systemctl restart docker 即可,这个问题,困扰了我两天,查了好多解决方法,真的我真是一个大笨蛋,就仅需要重新启动docker,我竟然走了那么多弯路。

Error: chaincode install failed with status: 500 - failed to invoke backing implementation of 'InstallChaincode': could not build chaincode: docker build failed: docker image build failed: docker build failed: Error returned from build: 1 "  INPUT_DIR=/chaincode/input
  OUTPUT_DIR=/chaincode/output
   mktemp -d
  TMP_DIR=/tmp/tmp.mGHFDP
   wc -l
   find /chaincode/input -name '*.jar'
  NUM_JARS=0
  for DIR in ${INPUT_DIR} ${INPUT_DIR}/src
  '[' -f /chaincode/input/build.gradle -o -f /chaincode/input/build.gradle.kts ']'
  '[' -f /chaincode/input/pom.xml ']'
  for DIR in ${INPUT_DIR} ${INPUT_DIR}/src
  '[' -f /chaincode/input/src/build.gradle -o -f /chaincode/input/src/build.gradle.kts ']'
  '[' -f /chaincode/input/src/pom.xml ']'
  buildMaven /chaincode/input/src /chaincode/output
  echo 'Copying from /chaincode/input/src to /tmp/tmp.mGHFDP'
  cd /chaincode/input/src
Copying from /chaincode/input/src to /tmp/tmp.mGHFDP
  cd /tmp/tmp.mGHFDP
  tar xf -
  tar cf - .
Maven build
  cd /tmp/tmp.mGHFDP
  echo 'Maven build'
  '[' -f ./mvnw ']'
  cp -r /root/chaincode-java/.mvn .
  cp /root/chaincode-java/mvnw .
  ./mvnw compile package -DskipTests -Dmaven.test.skip=true
Exception in thread "main" java.net.UnknownHostException: repo.maven.apache.org
	at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:220)
	at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
	at java.base/java.net.Socket.connect(Socket.java:591)
	at java.base/sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:285)
	at java.base/sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173)
	at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:182)
	at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:474)
	at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:569)
	at java.base/sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:265)
	at java.base/sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:372)
	at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1187)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1081)
	at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1587)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1515)
	at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:250)
	at org.apache.maven.wrapper.DefaultDownloader.downloadInternal(DefaultDownloader.java:90)
	at org.apache.maven.wrapper.DefaultDownloader.download(DefaultDownloader.java:76)
	at org.apache.maven.wrapper.Installer.createDist(Installer.java:72)
	at org.apache.maven.wrapper.WrapperExecutor.execute(WrapperExecutor.java:121)
	at org.apache.maven.wrapper.MavenWrapperMain.main(MavenWrapperMain.java:61)
学新通

org2 peer节点安装链码包

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

peer节点安装链码

peer lifecycle chaincode install hyperledger-fabric-contract-java-demo.tar.gz 

依旧会时间特别长,和上面步骤一样,可以用另一个终端查看
学新通
学新通
peer成功之后显示
学新通

7.查询包ID

peer lifecycle chaincode queryinstalled

学新通
通过链码时,我们兼实用包ID,因此将包ID保存为环境变量,将返回的包ID返回到下面的命令中

export CC_PACKAGE_ID=hyperledger-fabric-contract-java-demo_1:54a21ac334812b0505cd548f1aed0bc0a7b603eef44c98a17ef05f004737b451

8.org1 和2通过链码定义

因为已经设置了环境变量为peer CLI作为Orig2管理员进行操作,所以我们可以以Org2组织级别将 hyperledger-fabric-contract-java-demo 的链码定义通过。使用 peer lifecycle chaincode approveformyorg命令通过链码定义:

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

设置以下环境变量以Org1管理员身份运行:

export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_ADDRESS=localhost:7051


peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

学新通

9.将链码提交到通道

使用peer 生命周期链码 checkcommitreadiness命令检查通道成员是否批准了相同的链码

peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 1.0 --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --output json

学新通

使用peer 生命周期链代码提交命令将链代码定义提交到通道。提交命令还需要由组织管理员提交。将链码提交到通道
简单来说是提交链码

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

学新通
确认提交。查看是否提交成功

peer lifecycle chaincode querycommitted --channelID mychannel --name hyperledger-fabric-contract-java-demo --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

学新通

10.调用链码

#查询链码 cat-0,,查询有没有cat-0,结果如图一
peer chaincode query -C mychannel -n hyperledger-fabric-contract-java-demo -c '{"Args":["queryCat" , "cat-0"]}'
#创建链码,创建cat-0
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 hyperledger-fabric-contract-java-demo --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":"createCat","Args":["cat-0" , "tom" ,  "3" , "蓝色" , "大懒猫"]}'
#更新一下,把cat-0的猫更新为白色和超级大懒猫,结果如图三
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 hyperledger-fabric-contract-java-demo --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":"updateCat","Args":["cat-0" , "tom" ,  "3" , "白色" , "超级大懒猫"]}'
#查询cat-0
peer chaincode query -C mychannel -n hyperledger-fabric-contract-java-demo -c '{"Args":["queryCat" , "cat-0"]}'
#删除cat-0
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 hyperledger-fabric-contract-java-demo --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":"deleteCat","Args":["cat-0"]}'
#查询cat-0
peer chaincode query -C mychannel -n hyperledger-fabric-contract-java-demo -c '{"Args":["queryCat" , "cat-0"]}'

图一
学新通
参考链接:https://blog.csdn.net/qq_44154912/article/details/124839427

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgaachf
系列文章
更多 icon
同类精品
更多 icon
继续加载