参考
从0到1:Hyperledger Fabric开发精要【最系统】
hubwiz私人博客
CSDN TLpigff博客
CSDN 烟火不完美博客
github.com/hyperledger/fabric/core/chaincode/shim
github.com/hyperledger/fabric/protos/peer
改为github.com/hyperledger/fabric-chaincode-go/shim
github.com/hyperledger/fabric-protos-go/peer
报错:undefined:discovery.ChaincodeCall
go.mod中github.com/hyperledger/fabric-protos-go v0.0.0-20211006172752-14f4318ce71c
改为github.com/hyperledger/fabric-protos-go v0.0.0-20200707132912-fee30f3ccd23
开发流程
以目录为检索结构
1 | │ config.yaml |
fixtures
三种配置文件、根据配置文件生成的组织结构以及基础区块
crypto-config.yaml
用于生成相关组织的私钥和证书
Fabric 中会有两种类型的公私钥和证书
- 给节点之间通讯安全而准备的TLS证书
- 用户登录和权限控制的用户证书。
configtx.yaml
configtx.yaml主要用来配置fabric的组织结构,通道及锚节点的配置。它主要完成以下几个功能:
- 生成启动 Orderer 需要的创世区块orderer.block(genesis.block)
- 创建应用通道所需的配置交易文件
- 生成组织锚节点更新配置交易文件
配置参考configtx配置参考
之后可以使用configtxgen进行生成操作
docker-compose.yaml
用以配置fabric网络的相关容器
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。
fabric区块链中多使用docker来创建虚拟容器
chaincode
链码,合约,或者这里我们理解为接口API
是在可执行代码中定义不同组织之间业务规则的代码
是业务逻辑中需要的组织交互逻辑而不是全部业务逻辑
sdkinit
这一块结合main.go主函数理解,主要用于初始化启动SDK
按执行顺序
.sh脚本内容:
1 | sudo docker rm -f $(sudo docker ps -aq) |
第一步:
sdkInit.Setup
包含
- fabsdk.New
- sdk.Context
主要工作:初始化SDK
第二步:
sdkInit.CreateAndJoinChannel
包含
- createChannel
- org.OrgResMgmt.JoinChannel
主要工作:创建通道并将组织加入通道
第三步:
sdkInit.CreateCCLifecycle
分为:
- 打包智能合约
- 安装智能合约
- “认可”智能合约(Approve)
- 智能合约初始化
主要工作:智能合约上链与初始化
第四步:
service.InitService
包含
- sdk.ChannelContext
- channel.New
主要功能:创建通道客户端实例。
通道客户端用于查询链码,执行链码,注册/取消特定通道上的链码事件。
第五步
serviceSetup.SaveEdu
进行交易实验(添加信息)
可跳过
第六步
serviceSetup.FindEduInfoByEntityID
进行交易实验(查询信息)
可跳过
第七步
1 | fmt.Println("第七步") |
启动服务
第八步
1 | fmt.Println("第八步") |
建立服务网站
怎么调用链码的
req := channel.Request{ChaincodeID: t.ChaincodeID, Fcn: "addEdu", Args: [][]byte{b, []byte(eventID)}}
用这种语句在GO中调用链码写入信息
couchDB
fabric支持的唯二数据库,是一个NoSQL文档存储数据库。
它使用JSON存储数据(文档),使用http协议为api访问文档,使用Web浏览器查询索引。
问题:为什么老是运行的以前的链码?
太大意了!
已经将文件命名为5edu了,却没有改对应路径QAQ