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

news2024/11/24 16:46:44

文章目录

      • 相关安装
      • 启动测试网络
      • 创建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-network

export 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.coloradmin.cn/o/749330.html

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

相关文章

考试系统的优势与劣势对比分析

考试是对学生学习成果的一种评估方式,而考试系统作为一种管理工具,可以有效地帮助学校和教师进行考试的组织和管理。然而,考试系统也存在一些优势和劣势。 一、优势 1. 方便快捷 考试系统的一个显著优势是它的方便快捷。学生可以通过电子设…

网络排查工具:MTR 命令使用详解

MTR 是一款强大的网络诊断工具, 全称 my traceroute,是一个把 ping 和 traceroute 合并到一个程序的网络诊断工具。默认发送ICMP数据包进行链路探测。 MTR的安装:yum -y install mtr 查看本机到 www.baidu.com 的路由以及连接情况直接运行如…

经典地理加权回归,半参数地理加权回归、多尺度地理加权回归、地理加权主成份分析、地理加权判别分析......

在自然和社会科学领域有大量与地理或空间有关的数据,这一类数据一般具有严重的空间异质性,而通常的统计学方法并不能处理空间异质性,因而对此类型的数据无能为力。以地理加权回归为基础的一系列方法:经典地理加权回归,…

机器学习实战 | 深度学习初级项目学习和总结

目录 简介神经网络类型和用法总结1. 卷积神经网络CNN特点结构用处 2. 循环神经网络RNN特点结构用处 3. 长短期记忆网络LSTM特点结构用处 基于Keras的神经网络用法总结1. 创建2. 编译3. 训练4. 保存5. 预测 简介 准备写个系列博客介绍机器学习实战中的部分公开项目。首先从初级…

二叉树进阶(搜索二叉树)

目录 引言 1.二叉搜索树的模拟实现 1.1 链式二叉树的定义 1.2 二叉搜索树的模拟实现 1.2.1 二叉搜索树的结点类 1.2.2 二叉搜索树类的构造与中序遍历实现 1.2.3 增 1.非递归实现 2.非递归实现 1.2.4 查 1.非递归实现 2.递归实现 1.2.5 删 1.非递归实现 (1)情…

【无标题】visual studio2019+Qt5.15.2+PCL1.12.1+vtk9.1.0+cmake3.22.2

安装VS------安装Qt-------安装PCL------安装cmake-----安装VTK-----环境配置 安装用了两天时间 1环境搭建 1.1 Visual Studio 2019 (PCL所需版本) https://my.visualstudio.com/Downloads?qvisual%20studio%202019&wt.mc_idomsftvscom~older-downloads 1.2 Qt安装 …

MySQL为什么要使用B+树做索引?MySQL索引存储模型推演,B+树在MySQL的落地形式

文章目录 一、什么是索引1、索引初体验2、索引图解3、索引类型 二、索引存储模型推演1、二分查找2、二叉查找树(BST Binary Search Tree)3、平衡二叉树(AVL Tree)(左旋、右旋)(1)平衡…

openGauss学习笔记-08 openGauss 数据类型

文章目录 openGauss学习笔记-08 openGauss 数据类型8.1 数值类型8.2 布尔类型8.3 字符类型8.4 二进制类型8.5 日期/时间类型8.6 几何类型8.7 网络地址类型8.8 位串类型8.9 文本搜索类型8.10 UUID数据类型8.11 JSON/JSONB类型8.12 HLL数据类型8.13 范围类型8.14 索引8.15 对象标…

C++笔记之虚析构函数的作用

C笔记之虚析构函数的作用 C中的虚析构函数用于确保通过基类指针删除派生类对象时,能正确调用派生类的析构函数,从而释放派生类对象所占用的资源。 在C中,析构函数用于释放对象所占用的资源,并进行清理操作。它与类的构造函数相对…

飞书ChatGPT机器人 – 打造智能问答助手

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话,在下面操作步骤中…

spring cloud 之 Hystrix

Hystrix概述 Hystrix是一个供分布式系统使用,提供延迟和容错功能,保证复杂的分布系统在面临不可避免的失败是时,仍具有弹性。 当服务器A调用服务器B时,如果服务器B宕机,则服务器A不去调用。当服务器B在时间范围内未响…

Unity物理相关组件——2D关节

一:前言 关节组件用来模拟物体与物体之间的连接关系,必须依赖于刚体组件 二:Hinge Joint 2D 用于实现链条物体、钟摆等物体的模拟 ——Enable Collision:是否开启碰撞 ——Connected Rigid Body:关联的刚体&#xff0…

rocketmq使用mqtt协议

文章目录 前言一、安装rocketmq二、打包rocketmq-mqtt三、配置rocketmq-mqtt四、初始化操作五、启动六、测试 前言 rocketmq从4.9.3开始,可以兼容mqtt协议,需要安装编译一个rocketmq-mqtt工程,参考:https://rocketmq.apache.org/…

Java设计模式之结构型-享元模式(UML类图+案例分析)

目录 一、基本概念 二、UML类图 三、角色设计 四、案例分析 1、基本实现 2、游戏角色 五、总结 一、基本概念 享元模式是一种结构型设计模式,主要用于减少创建大量相似对象所占用的内存,它通过共享技术来有效支持大量细粒度的对象。 二、UML类图…

【动态规划算法】-简单多状态题型(11-18题)

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你…

微信小程序(二)

目录 1、input标签 一、表单绑定 1、数据绑定 2、输入获取 二、网络请求 1、介绍 2、注意 3、使用 4、基于Promise封装 三、自定义组件 1、创建 2、父向子组件通信 3、子向父组件通信 4、生命周期 四、vant weapp组件库 1、配置 2、使用 进入本章前的拓展&#…

宇宙的尽头是银行?聊聊在银行做软件测试的那些事

从一家工作了5年的软件公司的测试管理者跳槽到**银行做软件测试,短短2个月,对银行测试有了初步认识,总结和记录下来,加深个人的理解,同时也共享给各位。 银行作为大家的理财顾问,对金钱非常敏感&#xff0…

118、仿真-基于51单片机的直流电压电流控制系统设计(Proteus仿真+程序等)

方案选择 单片机的选择 方案一:AT89C52是美国ATMEL公司生产的低电压,高性能CMOS型8位单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元…

想冲嵌入式,学这套教程

今天,给大家带来一套非常前沿的视频教程!有多前沿?诸君,请听我一一道来: 众所周知,现在嵌入式空前火热,随着AI驾驶、智能机器人、智能制造、智慧家居等智能软硬件的飞速发展,嵌入式已…

PLC工作者的工作待遇现状如何?

PLC工作者的工作待遇通常会受到多个因素的影响,包括地理位置、经验水平、行业需求以及个人技能等。 我这里刚好有嵌入式、单片机、plc的资料需要可以私我或在评论区扣个6 在一般情况下,PLC工作者通常拥有较高的技术水平和专业知识,因此他们…