Hyperledger Fabric测试网络的准备和基本使用

文章目录

      • 相关安装
      • 启动测试网络
      • 创建channel
      • 打包链码
      • 安装链码包
      • 通过链码定义
      • 链码定义提交给通道
      • 调用链码
      • 关闭网络
      • 遇到的问题
        • 1.docker保持启动状态
        • 2.忘起测试网络了
        • 3.Java版本过高,推荐1.8

相关安装

  1. npm、node、git、docker、docker-compose。docker保证一直运行

    service docker start
    service docker status
    

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.安装Java、maven环境

https://blog.csdn.net/qq_41829594/article/details/122408706

https://www.oracle.com/java/technologies/downloads/

在这里插入图片描述

https://maven.apache.org/download.cgi

在这里插入图片描述

tar -zxvf 

在/etc/profile配置环境变量,之后source文件使其生效,检查是否安装成功

# set java development
export JAVA_HOME=/etc/opt/java/jdk1.8.0   #Java解压路径
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.安装jq

apt install jq
jq --version

在这里插入图片描述

4.在fabric里下载.sh文件

curl -sSLO https://raw.githubusercontent.com/hyperledger/fabric/main/scripts/install-fabric.sh && chmod +x install-fabric.sh

在这里插入图片描述

5.运行.sh文件,下载docker印象、Fabric示例和二进制文件

./install-fabric.sh docker samples binary
or
./install-fabric.sh d s b

启动测试网络

cd fabric-samples/test-network
./network.sh up

在这里插入图片描述

在这里插入图片描述

docker ps -a

在这里插入图片描述

创建channel

./network.sh createChannel

在这里插入图片描述

在这里插入图片描述

打包链码

下载别人写的Java合约源码

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

在这里插入图片描述

cd ../../test-networkexport PATH=${PWD}/../bin:$PATH //将bin目录中二进制文件添加到CLI路径export FABRIC_CFG_PATH=$PWD/../config/ //设置FABRIC_CFG_PATH为指向fabric-samples中的core.yaml文件

package创建链码包

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 

在这里插入图片描述

安装链码包

链码打包后,我们需要在认可交易的每个peer节点上安装链码。我们将设置背书策略以要求来自Org1和Org2的背书,我们需要在两个组织的节点上安装链码:peer0.org1.example.com和peer0.org2.example.com

设置环境变量,以Org1的身份操作peer CLI

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

在这里插入图片描述

install节点安装链码

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

过程会非常慢,因为需要下载一些文件,可以另起一个终端查看进程

在这里插入图片描述

链码启动成功的截图,重复执行上条指令可发现链码成功安装

在这里插入图片描述

在这里插入图片描述

设置环境变量,以Org2的身份操作节点,重复步骤安装链码

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_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 lifecycle chaincode install hyperledger-fabric-contract-java-demo.tar.gz

在这里插入图片描述

通过链码定义

安装链码包后,需要通过组织的链码定义。该定义包括链码管理的重要参数,如名称、版本和链码认可策略。如果组织已在节点上安装了链码,则可通过包ID 将节点安装的链码与通过的链码定义相关联

queryinstalled查询包ID,包ID用于将peer节点上安装的链码与通过的链码定义相关联,并允许组织使用链码来认可交易

peer lifecycle chaincode queryinstalled

在这里插入图片描述

将包ID设置为环境变量

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

approveformyorgOrg2通过链码定义(当前的环境变量设置管理员为Org2)

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

Org1通过链码定义

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

在这里插入图片描述

链码定义提交给通道

checkcommitreadiness检查通道成员是否已批准相同的链码定义,将生成一个JSON映射,显示通道成员是否批准

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

在这里插入图片描述

commit将链码定义提交到通道

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

在这里插入图片描述

querycommitted确认链码定义已提交给通道,若成功则放回链码定义的顺序和版本

在这里插入图片描述

调用链码

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" , "蓝色" , "大懒猫"]}'peer chaincode query -C mychannel -n hyperledger-fabric-contract-java-demo -c '{"Args":["queryCat" , "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" , "白色" , "超级大懒猫"]}'peer chaincode query -C mychannel -n hyperledger-fabric-contract-java-demo -c '{"Args":["queryCat" , "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"]}'peer chaincode query -C mychannel -n hyperledger-fabric-contract-java-demo -c '{"Args":["queryCat" , "cat-0"]}'

无猫查询

在这里插入图片描述

创建一只猫

在这里插入图片描述

再进行查询

在这里插入图片描述

关闭网络

./network.sh down

在这里插入图片描述

遇到的问题

1.docker保持启动状态

https://blog.csdn.net/ACkingdom/article/details/125747583

在这里插入图片描述

2.忘起测试网络了

在这里插入图片描述

在这里插入图片描述

3.Java版本过高,推荐1.8

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/3182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot的微信小程序宠物领养医院系统(源代码+数据库+10000字论文)085

基于springboot的微信小程序宠物领养医院系统(源代码数据库10000字论文)085 一、系统介绍 本项目有网页版和小程序端 本系统分为管理员、医生、用户三种角色 用户角色包含以下功能: 登录、注册、宠物领养、医生在线咨询、查看挂号、个人中心、密码修改、宠物寄…

linux 安装pytorch3d的坑

事实上,只要按照官方文档的说明就可以完美安装。其中坑的地方在于conda的管理可能会导致下载的版本不符合你的要求(例如下载成了cpu版本、下载的cuda版本)而同样尝试使用源码编译以及其他方式下载库都会导致同样的问题,这里主要的…

redis基本操作

string数据类型的命令操作 设置键值 使用append 命令设置键值,后面跟键的名字,可以先判断该建是否存在,存在将值追加在后面,不存在自动添加该建 append mykey hello读取键值 get mykey数值类型自减1 数值类型自加1 查看值的…

每天一道C语言编程练习(5):尼科彻斯定理

题目描述 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。 输入格式 任一正整数 输出格式 该数的立方分解为一串连续奇数的和 样例输入 13 样例输出 13*13*132197157159161163165167169171173175177179181 代码如下&#…

spring boot面向切面编程aop

一、什么是AOP AOP,Aspect Oriented Programming,面向切面编程 举个例子来理解 如果我们的业务需要额外做三件事情,判断是否已经登录,记录日志,统计业务执行时长 传统的做法是这样子的: 而apo的实现是这…

资深测试总结,自动化测试-JSON+YAML+CSV+Excel数据驱动(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 数据驱动 在自动…

【Linux】udp服务器实现大型网络聊天室

udp终结篇~ 文章目录 前言一、udp服务器实现大型网络聊天室总结 前言 根据上一篇文章中对于英汉互译和远程操作的两个小功能大家应该已经学会了,我们的目的是让大家可以深刻的理解udp服务器所需要的接口已经实现的简单步骤,下面我们开始实现网络聊天室。…

STM32单片机语音识别台灯控制系统人检测亮度调节

实践制作DIY- GC00156-语音识别台灯控制系统 一、功能说明: 基于STM32单片机设计-语音识别台灯控制系统 二、功能说明: 电路:STM32F103C系列最小系统串口语音识别模块LED灯板1个红外传感器 1.任何时候没有人则关闭灯。有人可以自动打开灯。…

Python物联网开发-Python_Socket通信开发-Python与Tcp协议物联网设备通信-Socket客户端

一、前言 Python在物联网开发中的重要愈来愈重,因此,掌握Python语言与物联网设备之间的通信就显得尤为重要,可以通过编写Python程序实现获取物联网设备的传感器数值并可以更改物联网设备上的执行器状态。 二、程序实现 首先,当使…

HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 一)

初识ArkTS语言 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。因此,在学习ArkTS语言之前,建议开发者具备TS语…

Linux内核的任务:

硬件与软件之间的中间层:内核在技术层面上充当硬件和软件之间的中间层,负责将应用程序的请求传递给硬件,并处理硬件设备和组件的寻址和操作。 应用程序的接口:对于应用程序来说,内核是它们与硬件之间的接口。应用程序通…

抓 https 报文新方案 -Magisk+LSPosed,来试试吧

关于如何抓取Android端https报文,在之前一篇文章中有介绍可以通过VitualXposedJustTrustMe模块禁用SSL验证,这样可以抓取到https,还是有一些同学反馈以下的一些问题: App在低版本的Android上不兼容,需要用高版本的And…

uniapp 集成七牛云,上传图片

1 创建项目 我是可视化创建项目的 ,cli创建的项目可以直接使用npm安装七牛云。 2 拷贝qiniuUploader.js到项目,下面的回复 放了qiniuUploader.js百度云链接。 3 在需要使用qiniuUploader的vue文件 引入。 4 相册选择照片,或者拍照后&#xff…

视频问答新增或修改视频问答

通过问答id新增或修改视频问答题目 新增或修改视频问答 图3:视频问答功能(观看效果) 图4:视频问答功能(观看效果) 图5:视频问答功能(观看效果) 单元测试 Testpublic voi…

zabbix 6.0 监控LNPM环境

这里的LNPM是指Linux,Nginx,php-fpm和Mysql.具体版本如下。 Linux : centos7.9Nginx: 1.22.1php-fpm:7.4Mysql: 8.0 一、centos7.9 编译安装Nginx 为了弄清楚Nginx各种配置,我们采用编译安装的形式部署Nginx。 1.下载安装包 首先下载Nginx软件包&am…

为什么媒体和创意工作者更喜欢 Splashtop 进行远程访问

在当今快速发展的数字环境中,可靠的远程访问已成为全球媒体和创意工作者不可或缺的工具。 远程访问让创意工作者不再受传统办公空间边界的限制,完全实现了随时随地办公。无论是实时剪辑、高分辨率渲染还是其他创意任务,创意工作者对高性能远…

ENSP实验四:搭建VPN(GRE,配置安全策略)

首先分析一下数据的流向: PC1->PC2 1、FW1:trust->dmz 【192.168.1.1->192.168.2.1 ICMP】 2、AR1->AR2:【202.1.1.1->202.1.3.1|GRE|192.168.1.1->192.168.2.1 icmp】 3、FW2: ①untrust->local …

kotlin中使用Room数据库(包含升降级崩溃处理)

目录 1.导入依赖库 2.数据实体类 3.数据访问对象 (DAO) 4.数据库类 5.调用DAO里面的“增、删、改、查”方法 6.数据库升降级处理 升级(保存数据库历史数据): 升级(不保存数据库历史数据): 降级&…

SpringCloud学习路线(1)—— 从头开始的微服务

一、服务架构的历史 现有的服务框架: 单体架构 概念: 将业务所有功能集中在一个项目中开发,打包部署优点: 架构简单,部署成本低缺陷: 耦合度高 分布式架构 概念: 根据业务功能对系统进行拆分&a…

了解 3DS MAX 3D摄像机跟踪设置:第 7 部分

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 在SynthEyes中跟踪素材 步骤 1 打开SynthEyes软件。 打开合成之眼 步骤 2 在跟踪素材之前,您需要设置首选项。因为,你 稍后将在 3ds Max 中工作,必须根据 3ds Max…