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.orgat 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:7051peer 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

fabric编写第一个合约,Java相关推荐

  1. 《Java 开发从入门到精通》—— 2.2 编写第一段Java程序

    本节书摘来异步社区<Java 开发从入门到精通>一书中的第2章,第2.2节,作者: 扶松柏 , 陈小玉,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.2 编 ...

  2. 用Java编写第一个区块链(二)

    用Java编写第一个区块链(二) 这篇文章将去介绍如何使用区块链进行交易. [本文禁止任何形式的全文粘贴式转载,本文来自 zacky31 的随笔] 目标: 在上一篇文章中,我们已经创建了一个可信任的区 ...

  3. java爬虫编写步骤_JAVA爬虫--编写第一个网络爬虫程序

    JAVA爬虫–编写第一个网络爬虫程序 前言上一章节介绍了XPATH基础语法,本章节将手把手带大家编写第一个爬虫程序,同时也希望能通过这个爬虫程序,帮助大家熟悉上一章节学习的XPATH基础语法并运用到实 ...

  4. java 内核驱动程序_内核第三讲,进入ring0,以及编写第一个内核驱动程序.

    内核第三讲,进入ring0,以及编写第一个内核驱动程序. 一丶进入ring0之前的简介 进入0环之前,我们要明白操作系统的设计,操作系统允许驱动程序使用In out等等特权指令来操作高2G的内存.那么 ...

  5. 超级账本(版本2.2):编写第一个应用

    超级账本(版本2.2):编写第一个应用 关于FabCar FabCar示例演示了如何查询保存在分类账上的Car(我们的示例业务对象),以及如何更新分类账(向分类账添加新的Car). 它涉及以下两个组件 ...

  6. 006-基于hyperledger fabric1.4( 官方文档)编写第一个应用【外部nodejs调用】

    一.概述 官方原文地址 Writing Your First Application 如果对fabric网络的基本运行机制不熟悉的话,请看这里. 注意:本教程是对fabric应用以及如何使用智能合约的 ...

  7. 教你如何编写第一个爬虫

    2019年不管是编程语言排行榜还是在互联网行业,Python一直备受争议,到底是Java热门还是Python热门也是一直让人争吵的话题. 随着信息时代的迭代更新,人工智能的兴起,Python编程语言也 ...

  8. 利用Hyperledger Fabric开发第一个区块链应用

    利用Hyperledger Fabric开发第一个区块链应用 Fabric入门 Fabric 我们通过一个简单的示例程序来了解Fabric应用是如何运行的.在这个例子中使用的应用程序和智能合约(链码) ...

  9. Fabric学习笔记-智能合约

    本文介绍了什么是智能合约,以及如何在Fabric下编写一个简单的智能合约Demo. 什么是智能合约? 智能合约是一种旨在以信息化方式传播.验证或执行合同的计算机协议.智能合约允许在没有第三方的情况下进 ...

最新文章

  1. Python再获年度编程语言,微软或成最大赢家
  2. 看过的编程类好书(资料)
  3. CUDA学习-计算实际线程ID
  4. 关节点(atriculation point)算法
  5. UML图大科普 :14种UML图图例详解
  6. mysql迁移cassandra_使用datax迁移cassandra数据
  7. Go实战--golang中使用redis(redigo和go-redis/redis这个已测试)
  8. 关于cast类型转换后无法使用索引的优化
  9. 用easymock来mock数据
  10. 使用 ConnectionStringBuilder 对象创建精确连接字符串
  11. mvc如何嵌套第三方页面_苹果屏蔽第三方Cookie,然后呢?
  12. 使用servlet原生API作为参数
  13. 信捷plc用c语言编程软件,XDPPro(信捷PLC编程软件) V3.1.0c 官方版
  14. sql语句练习 - 增删改查
  15. 福尔曼大学计算机排名,留学选校指南|纽约时报2019美国精英群体认可的大学榜单Top50...
  16. linux aria2 离线,使用aria2做离线下载
  17. 引用第三方SDK产生依赖冲突
  18. EMOJI表情包源码
  19. 【资料整理】高精地图
  20. php curl登录,php curl实现第三方帐号登录

热门文章

  1. 微信小程序门诊医院体检挂号缴费药品信息管理系统+后台管理系统SSM-JAVA【数据库设计、论文、源码、开题报告】
  2. Python大数据处理,应对海量数据挑战
  3. 2023软件测试常见面试题面试宝典,刷完这些一周拿6个offer
  4. Android歌词秀1.5版
  5. Eclipse项目如何切换成AS项目
  6. 23种设计模式之行为型(下)
  7. 基于FPGA的XPT2046触摸控制器设计
  8. 语音ic,音乐芯片在电子医疗设备上的应用
  9. Pytorch CPU版本安装教程
  10. 贪心算法【区间调度】【背包问题】【集合覆盖】【旅行商问题】【哈夫曼构造价值树】