开发指南

链码开发

概述

链码,即区块链智能合约,在 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的历史账本数据

链码调试

开发者部署链码后,可以使用链码管理提供的调用功能,进行写链、查询链上数据调试等操作。 以下步骤为链码调试方法:

  1. 打开链码管理页面,点击要调试的链码名称,进入联盟详情页面,如下图:
    image
  2. 点击调用按钮,打开链码调用弹出对话框,选择、输入链码部署信息以及链码参数,点击执行,发起链码调用请求;如下图:
    image
    所属通道:链码部署通道
    链码版本:要调用的链码版本
    选择连接节点:即部署链码的成员Peer节点
    链码参数:要调用链码的方法参数,类型为字符串数组,数组的第一个item为固定值invokequery,表示通过哪种调用方式调用链码,如写链方法要使用invoke,查询方法可以使用invokequery,从数组的第二个item开始就是调用链码方法的实际参数,根据链码输入;
  3. 发起调用后,会在执行结果输出链码调用响应结果。

应用集成

开发者可通过fabric-sdk集成已部署的联盟链网络,通过SDK调用链码、查询区块链交易和区块信息。 集成步骤:

  1. 联盟管理点击购买的联盟实例名称进入联盟详情,点击右上角下载证书下载联盟根证书、Orderer节点证书; image
  2. 成员管理点击成员名称进入成员详情,点击右上角下载证书下载该成员的根证书、CA证书、以及成员下所有Peer节点证书; image
  3. 联盟、成员证书下载后,根据联盟实例的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=${联盟域名}
  1. 按上述步骤执行后,开发者即可通过fabric-sdk调用链码、查询区块链交易信息。详情见fabric-sdk-demo.zip

fabric-sdk-demo说明

  1. 下载联盟、成员证书到src/main/resources/channel/crypto-config/目录下;
  2. 编辑src/main/resources/fabric.properties连接配置文件;
  3. Main.java入口类设置通道名称、链码名称、版本、CA用户身份等信息,详见fabric-sdk-demo