开发指南
链码开发
概述
链码,即区块链智能合约,在 Hyperledger Fabric 中称为链码,主要用于操作区块链账本数据。联盟链服务当前版本支持Go开发的链码部署。
链码API接口(Go)
Hyperledger Fabric提供了丰富的链码API接口,开发者通过实现这些接口完成区块链账本操作(包括数据写链、链数据查询等)。以下对链码开发过程中常见的API接口进行说明,完整API接口可参照Hyperledger Fabric官方文档:
ChaincodeStubInterface接口
链码调用相关
接口名称 | 功能说明 |
---|---|
GetArgs() [][]byte | 获取链码调用请求的参数 |
GetStringArgs() []string | 获取链码调用请求的参数 |
GetFunctionAndParameters() (string, []string) | 获取链码调用请求的函数名和参数, 默认第一个参数为函数名 |
InvokeChaincode(chaincodeName string, args [][]byte, channel string) pb.Response | 调用其它链码的 Invoke 方法 |
账本交易相关
接口名称 | 功能说明 |
---|---|
GetTxID() string | 获取当前交易 ID |
GetChannelID() string | 获取当前通道名称 |
GetCreator() ([]byte, error) | 获取交易提交者信息 |
GetSignedProposal() (*pb.SignedProposal, error) | 获取交易提案数据 |
GetTxTimestamp() (*timestamp.Timestamp, error) | 获取交易时间戳 |
GetState() ([]byte, error) | 获取指定key的账本数据 |
PutState(key string, value []byte) error | 新增或更新一条账本数据 |
DelState(key string) error | 删除一条账本数据,删除后通过GetState无法查询 |
DelState(key string) error | 删除一条账本数据,删除后通过GetState无法查询 |
GetHistoryForKey(key string) (HistoryQueryIteratorInterface, error) | 获取指定key的历史账本数据 |
链码调试
开发者部署链码后,可以使用链码管理提供的调用功能,进行写链、查询链上数据调试等操作。
以下步骤为链码调试方法:
- 打开链码管理页面,点击要调试的链码名称,进入联盟详情页面,如下图:
- 点击调用按钮,打开链码调用弹出对话框,选择、输入链码部署信息以及链码参数,点击执行,发起链码调用请求;如下图:
所属通道:链码部署通道
链码版本:要调用的链码版本
选择连接节点:即部署链码的成员Peer节点
链码参数:要调用链码的方法参数,类型为字符串数组,数组的第一个item
为固定值invoke
或query
,表示通过哪种调用方式调用链码,如写链方法要使用invoke
,查询方法可以使用invoke
或query
,从数组的第二个item
开始就是调用链码方法的实际参数,根据链码输入; - 发起调用后,会在执行结果输出链码调用响应结果。
应用集成
开发者可通过fabric-sdk
集成已部署的联盟链网络,通过SDK
调用链码、查询区块链交易和区块信息。
集成步骤:
- 联盟管理点击购买的联盟实例名称进入联盟详情,点击右上角下载证书下载联盟根证书、Orderer节点证书;
- 成员管理点击成员名称进入成员详情,点击右上角下载证书下载该成员的根证书、CA证书、以及成员下所有Peer节点证书;
- 联盟、成员证书下载后,根据联盟实例的Orderer、成员、成员Peer节点信息,配置
fabric
连接配置文件(以Java SDK为例,如下所示):
......
org.hyperledger.fabric.sdk.integration.org.${成员名称}.mspid=${成员MSP ID}
org.hyperledger.fabric.sdk.integration.org.${成员名称}.domname=${成员域名}
org.hyperledger.fabric.sdk.integration.org.${成员名称}.ca_location=http://${成员EIP地址}:7054
org.hyperledger.fabric.sdk.integration.org.${成员名称}.peer_locations=peer0.org-70364us3d3@grpc://10.110.32.5:7051
org.hyperledger.fabric.sdk.integration.org.${成员名称}.orderer_locations=${联盟Orderer节点1名称}@grpc://${联盟Orderer节点1 EIP地址}:7050,orderer1-lianmeng01@grpc://${联盟Orderer节点2 EIP地址}:7050,${联盟Orderer节点3名称}@grpc://${联盟Orderer节点3 EIP地址}:7050
org.hyperledger.fabric.sdk.integration.org.${成员名称}.eventhub_locations=${Peer节点名称}@grpc://${成员EIP地址}:7052
org.hyperledger.fabric.sdk.integration.tls=true
orderer.domname=${联盟域名}
- 按上述步骤执行后,开发者即可通过
fabric-sdk
调用链码、查询区块链交易信息。详情见fabric-sdk-demo.zip
fabric-sdk-demo说明
- 下载联盟、成员证书到
src/main/resources/channel/crypto-config/
目录下; - 编辑
src/main/resources/fabric.properties
连接配置文件; Main.java
入口类设置通道名称、链码名称、版本、CA用户身份等信息,详见fabric-sdk-demo
。