fabric编写第一个合约,Java
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相关推荐
- 《Java 开发从入门到精通》—— 2.2 编写第一段Java程序
本节书摘来异步社区<Java 开发从入门到精通>一书中的第2章,第2.2节,作者: 扶松柏 , 陈小玉,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.2 编 ...
- 用Java编写第一个区块链(二)
用Java编写第一个区块链(二) 这篇文章将去介绍如何使用区块链进行交易. [本文禁止任何形式的全文粘贴式转载,本文来自 zacky31 的随笔] 目标: 在上一篇文章中,我们已经创建了一个可信任的区 ...
- java爬虫编写步骤_JAVA爬虫--编写第一个网络爬虫程序
JAVA爬虫–编写第一个网络爬虫程序 前言上一章节介绍了XPATH基础语法,本章节将手把手带大家编写第一个爬虫程序,同时也希望能通过这个爬虫程序,帮助大家熟悉上一章节学习的XPATH基础语法并运用到实 ...
- java 内核驱动程序_内核第三讲,进入ring0,以及编写第一个内核驱动程序.
内核第三讲,进入ring0,以及编写第一个内核驱动程序. 一丶进入ring0之前的简介 进入0环之前,我们要明白操作系统的设计,操作系统允许驱动程序使用In out等等特权指令来操作高2G的内存.那么 ...
- 超级账本(版本2.2):编写第一个应用
超级账本(版本2.2):编写第一个应用 关于FabCar FabCar示例演示了如何查询保存在分类账上的Car(我们的示例业务对象),以及如何更新分类账(向分类账添加新的Car). 它涉及以下两个组件 ...
- 006-基于hyperledger fabric1.4( 官方文档)编写第一个应用【外部nodejs调用】
一.概述 官方原文地址 Writing Your First Application 如果对fabric网络的基本运行机制不熟悉的话,请看这里. 注意:本教程是对fabric应用以及如何使用智能合约的 ...
- 教你如何编写第一个爬虫
2019年不管是编程语言排行榜还是在互联网行业,Python一直备受争议,到底是Java热门还是Python热门也是一直让人争吵的话题. 随着信息时代的迭代更新,人工智能的兴起,Python编程语言也 ...
- 利用Hyperledger Fabric开发第一个区块链应用
利用Hyperledger Fabric开发第一个区块链应用 Fabric入门 Fabric 我们通过一个简单的示例程序来了解Fabric应用是如何运行的.在这个例子中使用的应用程序和智能合约(链码) ...
- Fabric学习笔记-智能合约
本文介绍了什么是智能合约,以及如何在Fabric下编写一个简单的智能合约Demo. 什么是智能合约? 智能合约是一种旨在以信息化方式传播.验证或执行合同的计算机协议.智能合约允许在没有第三方的情况下进 ...
最新文章
- Python再获年度编程语言,微软或成最大赢家
- 看过的编程类好书(资料)
- CUDA学习-计算实际线程ID
- 关节点(atriculation point)算法
- UML图大科普 :14种UML图图例详解
- mysql迁移cassandra_使用datax迁移cassandra数据
- Go实战--golang中使用redis(redigo和go-redis/redis这个已测试)
- 关于cast类型转换后无法使用索引的优化
- 用easymock来mock数据
- 使用 ConnectionStringBuilder 对象创建精确连接字符串
- mvc如何嵌套第三方页面_苹果屏蔽第三方Cookie,然后呢?
- 使用servlet原生API作为参数
- 信捷plc用c语言编程软件,XDPPro(信捷PLC编程软件) V3.1.0c 官方版
- sql语句练习 - 增删改查
- 福尔曼大学计算机排名,留学选校指南|纽约时报2019美国精英群体认可的大学榜单Top50...
- linux aria2 离线,使用aria2做离线下载
- 引用第三方SDK产生依赖冲突
- EMOJI表情包源码
- 【资料整理】高精地图
- php curl登录,php curl实现第三方帐号登录