Hyperledger Fabric 2.0 Chaincode Dev

基于 Fabric v2.0.1,以前的版本应该也能通用。

一、准备工作


Fabric Network

  • 单节点 Peer
  • 单节点 Orderer
  • 已经创建的Channel
  • Peer Join 该 Channel
  • Peer 启用 external builder 参考 Fabric 2.0 external builder
  • Peer 预安装了 Fake Chaincode

Mac or Linux 环境可以快速基于脚本搭建 Fabric Debug 环境

二、以 Dev 模式启动 Peer


启动 Peer 时带上 dev mode 标识,通过命令行选项 --peer-chaincodedev 启用 dev mode。

启动命令如下:

bin/peer node start --peer-chaincodedev

正确启动有如下关键日志,注意 WARN 的日志 peer 会选择一个网卡地址监听7052端口(见日志信息 peer.chaincodeListenAddress )用于注册 Chaincode

...
2020-03-17 17:38:00.099 CST [nodeCmd] serve -> INFO 00b Running in chaincode development mode
2020-03-17 17:38:00.099 CST [nodeCmd] serve -> INFO 00c Disable loading validity system chaincode
...
2020-03-17 17:38:00.099 CST [nodeCmd] createChaincodeServer -> WARN 00f peer.chaincodeListenAddress is not set, using 192.168.43.62:7052
...

三、启动 Chaincode


Peer 以 dev mode 运行时,允许 Chaincode 从外部直接连接注册到 Peer 。

2.0 Chaincode 启动有所改变是以 Chaincode PackageID 为标识注册启动的,调用时又会检测 Chaincode 是否安装,因此先 install 一个 fake Chaincode 使用这个 fake chaincode 的 PackageID 注册。

将PackageID设置到环境变量 FAKE_PACKAGE_ID 供下面使用。

Chaincode 启动是需要以下信息:

  • CORE_CHAINCODE_ID_NAME环境变量,指定 ChaincodePackageID ,这里使用 $FAKE_PACKAGE_ID
  • CORE_PEER_TLS_ENABLED环境变量,指定是否启用 TLS,启用 TLS 还需要配置 TLS Key,Cert文件,这里不启用 TLS 运行(peer 也不能配置 TLS)
  • --peer.address命令行选项,peer 的注册地址,见 peer 启动日志

注意,需要调试的 Chaincode 同样需要 approvecommit 才能调用,并且要在 commit 之前启动注册(否则peer会自动运行fake chaincode )

首先运行 Chaincode (注意替换成自己的 peer address)

CORE_PEER_TLS_ENABLED=false CORE_CHAINCODE_ID_NAME=$FAKE_PACKAGE_ID ./module --peer.address 192.168.43.62:7052

IDE 运行
在这里插入图片描述

approve & commit

# 设置配置文件路径
export FABRIC_CFG_PATH=/tmp/fabric
# approve 替换下面的变量,--init-required 选项根据自己chaincode觉得是否需要
bin/peer lifecycle chaincode approveformyorg --channelID $CHANNEL_NAME --name $CC_NAME --version $CC_VERSION --init-required --package-id $FAKE_PACKAGE_ID --sequence $CC_SEQUENCE --waitForEvent

# commit
bin/peer lifecycle chaincode commit --channelID $CHANNEL_NAME --name $CC_NAME --version $CC_VERSION --init-required --sequence $CC_SEQUENCE

我这里设置了 --init-required 所以需要先 Init

# init
bin/peer chaincode invoke -o 127.0.0.1:7050 --peerAddresses 127.0.0.1:7051 -C wagaga -n $CC_NAME -I -c '{"Args":["Init", "a","1000","b", "1000"]}'

2020-03-17 17:59:32.799 CST [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200
# query
bin/peer chaincode query -C wagaga -n $CC_NAME -c '{"Args":["query","a"]}'
1000

在这里插入图片描述

四、注意事项


由于 2.0 Peer 启动时会自动加载运行已经 commit 过的 Chaincode,如果Peer 重启过,会自动启动 Fake Chaincode,自己的 Chaincode 会注册失败。

解决方式:
启动自己的 Chaincode 失败后,停止后再启动一次,停止时会向 Peer Deregister Chaincode 会把自动启动的 chaincode 也 Deregister

五、另一种方式


2.0 新增了 Chaincode as Service ,支持 Peer 主动去连接 Chaincode (需要 external builder 配合支持)。

参考 官网 配置 Chaincode as Service

发布了10 篇原创文章 · 获赞 1 · 访问量 625

猜你喜欢

转载自blog.csdn.net/DAOSHUXINDAN/article/details/104924631