本文简述
记录第一次使用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/Admin@org1.example.com/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/Admin@org2.example.com/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,但是上链时修改链码名称,因为删除已有链码比较繁琐不如直接重新给个名字再来。
成功
文章来源:https://www.toymoban.com/news/detail-507330.html
4.测试:以ID 查某资产
# 查询调用cc中函数是,指定通道,cc名,以及函数名和参数
peer chaincode query -C channeltest2 -n svcmatrix_2 -c '{"Args":["ReadAsset","1020001"]}
下一篇会记录一下,简单应用程序与Chaincode交互过程,以及实现过程中一些我认为需要注意的地方。第一次写go和使用Hyperledger Fabric,多有不足,请各位大佬包含指正。文章来源地址https://www.toymoban.com/news/detail-507330.html
到了这里,关于浅试Hyperledger Fabric go 小项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!