浅试Hyperledger Fabric go 小项目

本文简述

记录第一次使用go语言编写项目的一些流程tips,以及在linux中使用Hyperledger Fabric官方test-network运行自己的Chaincode流程。

第一次,go项目中的小tips

1.包名一定要有

package chaincode

注意,一个项目中,在main函数(启动函数)所在代码中注明package main,如果没有main包会出现类似以下错误:
error starting container: error starting container: API error (400): OCI runtime create failed: container_linux.go:380: starting container process caused: exec: “chaincode”: executable file not found in $PATH: unknown"在这里插入图片描述

2.import 导入 要使用的包

import (
	"fmt"
	"io/ioutil"
	"net/http"
	"net/url"
	_ "net/http/pprof"
)
// 在import中导包,路径从项目的包名开始写
import (
	manufacture "channel1/manufacture"
)

3.写完后 进行 go mod init 项目名,生成go.mod

go mod init channel1

4.当在go.mod中填写了 require

// 用以下命令将模块添加到项目
go mod tidy
// 生成sum 文件

5.按下载的包 生成对应的verdor目录

go mod vendor

6.添加某一个包模块基本流程

//下载包以及对应文件
go get github.com/gin-gonic/gin
//在其中 go get 模块包时 报错时
// 开启代理命令,再尝试
go env -w GOPROXY=https://goproxy.cn

Linux中使用Hyperledger Fabric官方test-network运行自己CC

搭建Hyperledger Fabric参考:
https://blog.csdn.net/sinat_36082782/article/details/112793386
官方运行案参考:
https://hyperledger-fabric.readthedocs.io/zh_CN/release-2.2/test_network.html
Chaincode编写 参考官方任何一个案例 都可以。
注意:Chaincode 和 应用代码 要分为两个项目,也就是 编写出来应该要经历两次 上文中阐述的步骤。
我的 Chaincode 目录结构:
在这里插入图片描述
注意 chaincode中,如果你的项目中 main函数所在代码中首行包名
在这里插入图片描述
准备好Chaincode 项目后 以及 test-network 已经 启动后,创建通道,上链,初始化账本,测试。
创建通道

1.创建通道

# 创建通道
./network.sh createChannel -c channeltest2

没有报错出现以下界面则成功
在这里插入图片描述

2.部署链码

# -c channeltest2 指定通道名
# -ccn svcmatrix_2 指定链码名
# -ccp /root/SCC/c2/c2cc 指定 链码路径 
# -ccl go -指定语言
./network.sh deployCC -c channeltest2  -ccn svcmatrix_2  -ccp /root/SCC/c2/c2cc  -ccl go

没有报错出现以下界面则成功
在这里插入图片描述
启动链码后需要给配置一些配置文件,以及命令的环境变量,按官方文档的配置文件,在test-network目录下:

# 注意,export 命令是临时设置环境变量,当切换终端后就可能会失效,若永久设置 写入环境变量文件。
# 命令的全局变量使用
export PATH=${
    
    PWD}/../bin:$PATH
# 配置文件环境变量
export FABRIC_CFG_PATH=$PWD/../config/
# 设置环境变量,以允许您作为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/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:7051
# 若要交给Org2操作
export CORE_PEER_TLS_ENABLED=true
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/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:9051

3.初始化账本

# 命令 与官方给的几乎一样 需要修改的参数
# -C channeltest2 -n svcmatrix_2  
# -C 通道名 -n 链码名称 应与上文中创建通道 部署链码时名称一致。
# 注意'{"function":"InitLedger","Args":[]}' function后面的值要与你的Chaincode中对应
[root@xuegod63 test-network]# 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 channeltest2 -n svcmatrix_2  --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":"InitLedger","Args":[]}'

出现错误

在这里插入图片描述

将只能合约起始包名改为main,返回步骤2,但是上链时修改链码名称,因为删除已有链码比较繁琐不如直接重新给个名字再来。
在这里插入图片描述

成功

在这里插入图片描述

4.测试:以ID 查某资产

# 查询调用cc中函数是,指定通道,cc名,以及函数名和参数
peer chaincode query -C channeltest2 -n svcmatrix_2 -c '{
    
    "Args":["ReadAsset","1020001"]}

在这里插入图片描述
下一篇会记录一下,简单应用程序与Chaincode交互过程,以及实现过程中一些我认为需要注意的地方。第一次写go和使用Hyperledger Fabric,多有不足,请各位大佬包含指正。

猜你喜欢

转载自blog.csdn.net/qq_43341918/article/details/124041740
今日推荐