当前位置: 首页 > article >正文

Hyperledger Fabric 入门笔记(十九)Fabric V2.5 杂项 - 在开发模式下运行链码

文章目录

  • 一、说明
  • 二、流程
    • 2.1. 环境准备
    • 2.2. 排序服务
    • 2.3. 在DevMode模式下启动Peer节点
    • 2.4. 创建通道并加入Peer节点到通道中
    • 2.5. 构建链码
    • 2.6. 启动链码
    • 2.7. 批准和提交链码定义
    • 2.8. 调用链码
  • 总结


一、说明

在智能合约的开发过程中,开发人员需要一种快速迭代测试链码包而不必为每次修改运行链码生命周期命令的方法。本教程使用Fabric二进制文件,以开发模式(“DevMode”)启动对等体,然后将链码连接到对等体。它允许启动链码而无需在对等体上安装链码,并且在链码最初提交到通道后,可以绕过peer lifecycle chaincode命令。这允许快速部署、调试和更新,而无需每次更新时带来peer lifecycle chaincode命令的开销。

注:为了以开发模式启动对等体,必须在网络中的所有节点上禁用TLS通信。由于强烈建议生产网络使用TLS通信,因此永远不应该在生产网络中使用开发模式。

本节所有命令均在fabric/文件夹中执行。它会使用所有默认的配置设置(针对节点和通道),并根据需要通过命令行中的环境变量覆盖配置。无需对默认的core.yaml或orderer.yaml文件进行任何编辑。


二、流程

2.1. 环境准备

进入指定目录:

cd ~/hyfa/fabric/

将二进制文件和配置文件的目录加入环境变量:

export PATH=$PATH:${PWD}/../fabric-samples/bin/
export FABRIC_CFG_PATH=${PWD}/sampleconfig

创建/var/hyperledger目录并更改其属主:

sudo mkdir /var/hyperledger
sudo chown $USER /var/hyperledger

这是在orderer.yaml 和core.yaml 文件中定义的、默认的、存储区块的位置。

2.2. 排序服务

为排序服务生成创世区块:

configtxgen -profile SampleDevModeSolo -channelID syschannel -outputBlock genesisblock -configPath $FABRIC_CFG_PATH -outputBlock "${PWD}/sampleconfig/genesisblock"

启动排序节点:

ORDERER_GENERAL_GENESISPROFILE=SampleDevModeSolo orderer

2.3. 在DevMode模式下启动Peer节点

打开第二个终端窗口。

进入指定目录:

cd ~/hyfa/fabric/

将二进制文件和配置文件的目录加入环境变量:

export PATH=$PATH:${PWD}/../fabric-samples/bin/
export FABRIC_CFG_PATH=${PWD}/sampleconfig

设置环境变量CORE_OPERATIONS_LISTENADDRESS,避免与排序节点冲突。

export CORE_OPERATIONS_LISTENADDRESS=127.0.0.1:9444

使用--peer-chaincodedev=true标志启动Peer节点以使其进入DevMode模式:

FABRIC_LOGGING_SPEC=chaincode=debug CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052 peer node start --peer-chaincodedev=true

2.4. 创建通道并加入Peer节点到通道中

打开第三个终端窗口。

进入指定目录:

cd ~/hyfa/fabric/

将二进制文件和配置文件的目录加入环境变量:

export PATH=$PATH:${PWD}/../fabric-samples/bin/
export FABRIC_CFG_PATH=${PWD}/sampleconfig

生成应用通道创建交易:

configtxgen -channelID ch1 -outputCreateChannelTx ch1.tx -profile SampleSingleMSPChannel -configPath $FABRIC_CFG_PATH

创建通道:

peer channel create -o 127.0.0.1:7050 -c ch1 -f ch1.tx

将Peer节点加入到通道中:

peer channel join -b ch1.block

2.5. 构建链码

构建fabric/integration/chaincode目录下的simple链码:

go build -o simpleChaincode ./integration/chaincode/simple/cmd

2.6. 启动链码

启动链码并连接到Peer节点:

CORE_CHAINCODE_LOGLEVEL=debug CORE_PEER_TLS_ENABLED=false CORE_CHAINCODE_ID_NAME=mycc:1.0 ./simpleChaincode -peer.address 127.0.0.1:7052

观察启动Peer节点的终端,可以看到如下信息:

在这里插入图片描述

2.7. 批准和提交链码定义

打开第四个终端窗口。

进入指定目录:

cd ~/hyfa/fabric/

将二进制文件和配置文件的目录加入环境变量:

export PATH=$PATH:${PWD}/../fabric-samples/bin/
export FABRIC_CFG_PATH=${PWD}/sampleconfig

批准链码定义:

peer lifecycle chaincode approveformyorg -o 127.0.0.1:7050 --channelID ch1 --name mycc --version 1.0 --sequence 1 --init-required --signature-policy "OR ('SampleOrg.member')" --package-id mycc:1.0

检查批准情况:

peer lifecycle chaincode checkcommitreadiness -o 127.0.0.1:7050 --channelID ch1 --name mycc --version 1.0 --sequence 1 --init-required --signature-policy "OR ('SampleOrg.member')"

提交链码定义到通道:

peer lifecycle chaincode commit -o 127.0.0.1:7050 --channelID ch1 --name mycc --version 1.0 --sequence 1 --init-required --signature-policy "OR ('SampleOrg.member')" --peerAddresses 127.0.0.1:7051

在这里插入图片描述

2.8. 调用链码

初始化智能合约:

CORE_PEER_ADDRESS=127.0.0.1:7051 peer chaincode invoke -o 127.0.0.1:7050 -C ch1 -n mycc -c '{"Args":["init","a","100","b","200"]}' --isInit

从a转账10到b:

CORE_PEER_ADDRESS=127.0.0.1:7051 peer chaincode invoke -o 127.0.0.1:7050 -C ch1 -n mycc -c '{"Args":["invoke","a","b","10"]}'

查询:

CORE_PEER_ADDRESS=127.0.0.1:7051 peer chaincode invoke -o 127.0.0.1:7050 -C ch1 -n mycc -c '{"Args":["query","a"]}'

在这里插入图片描述


总结

在 DevMode 环境下运行Peer节点的好处在于可以迭代地对链码源代码进行更新。保存改动后,构建链码(2.5),然后再次启动它(2.6)即可,而无需每次更改时都运行peer lifecycle命令来更新链码。


http://www.kler.cn/a/560273.html

相关文章:

  • OpenCV计算摄影学Computational Photography
  • 【嵌入式Linux应用开发基础】网络编程(1):TCP/IP协议栈
  • 【备赛】点亮LED
  • 【信息系统项目管理师-案例真题】2010下半年案例分析答案和详解
  • UE5实现角色二段跳
  • DIP的实际举例
  • 垂类大模型微调(一):认识LLaMA-Factory
  • clickhouse--本地表和分布式表,副本机制,分片集群
  • DeepSeek-R1蒸馏模型与其他模型的区别
  • 【Linux知识】Linux上从源码编译到软件安装全过程详细说明
  • 冒泡排序:简单又易于实现的排序算法
  • 智能生成ER图工具。使用 SQL 生成 ER 图:让数据库设计更高效
  • C/C++高性能Web开发框架全解析:2025技术选型指南
  • 快手弹幕 websocket 分析
  • 用Deepseek直接在word中完成论文的润色(中-中,中-英, 英-中)
  • VantUI官网更新2025,移动端前端开发
  • Python在实际工作中的运用-CSV转XLSX的几个方法
  • 【多模态】46、通俗理解 RLHF/PPO/DPO/GRPO
  • Linux-SaltStack配置
  • Plantsimulation中机器人怎么通过阻塞角度设置旋转135°