华为云用户手册

  • 利用合约查询数据 查询请求消息构建 接口函数 func (msg *ContractRawMessage) BuildInvokeMessage(chainID string, name string, function string, args []string) (*common.RawMessage, error) 参数说明 参数 类型 说明 chainID string 链ID。 name string 合约名称。 function string 调用合约中的方法名。 args []string 合约方法参数。 返回值 类型 说明 *common.RawMessage 查询请求需发送的消息。 error 发送成功返回类型为nil,反之返回error。 查询请求消息发送。 接口函数 func (action *ContractAction) Invoke(rawMsg *common.RawMessage) (*common.RawMessage, error) 参数说明 参数 类型 说明 rawMsg *common.RawMessage 上述查询请求需发送的消息。 返回值 类型 说明 *common.RawMessage 查询请求返回的消息。 error 发送成功返回类型为nil,反之返回error。 父主题: Go SDK介绍
  • 请求示例 { "orgID" : "4f1439758ebb41f7411b5f684b67713c08b89198", "channelID" : "mychannel", "cryptoMethod" : "SW", "cert" : "-----BEGIN CERTIFICATE-----\n...\n...\n-----END CERTIFICATE-----", "sk" : "------BEGIN PRIVATE KEY-----\n...\n...\n-----END PRIVATE KEY-----", "timestamp" : "2020-10-27T17:28:16+08:00", "did" : "did:example:ebfeb1f712ebc6f1c276e12ec21", "service" : [ { "type" : "VerifiableCredentialService", "serviceEndpoint" : "https://example.com/vc/", "credentialApplySchema" : { "type" : "file", "name" : "Test Enterprise Certification", "description" : "this is test apply info", "attributes" : [ { "name" : "bob", "type" : "string", "description" : "Attribute's description" } ] } } ] }
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 用户证书,每行末尾均需要增加显式换行符\n sk 是 String 用户私钥,每行末尾均需要增加显式换行符\n timestamp 是 String 时间戳 did 是 String 分布式身份标识 service 否 Array of DIDService objects 服务列表 表2 DIDService 参数 是否必选 参数类型 描述 type 是 String 类型 serviceEndpoint 是 String 接入点 credentialApplySchema 否 CredentialApplySchema object 申请凭证所需数据的Schema 表3 CredentialApplySchema 参数 是否必选 参数类型 描述 type 否 String 类型 name 否 String 名称 description 否 String 描述信息 attributes 否 Array of Attribute objects 属性列表 表4 Attribute 参数 是否必选 参数类型 描述 name 否 String 名称 type 否 String 类型 description 否 String 描述信息
  • 响应参数 状态码: 200 表5 响应Body参数 参数 参数类型 描述 context String context id String 分布式身份标识 publicKey Array of DocPublicKey objects 公钥列表 authentication Array of strings did主公钥标识 recovery String 备用公钥标识,可用于修改主密钥 service Array of Service objects 服务列表 proof Proof object 证明结构,可为空 created String 创建时间 updated String 更新时间 status String 状态 表6 DocPublicKey 参数 参数类型 描述 id String 公钥标识 type String 公钥类型 controller String 公钥的控制者标识 publicKeyPem String 公钥证书 表7 Service 参数 参数类型 描述 id String 服务标识 type String 服务类型 serviceEndpoint String 服务介绍网址 credentialApplySchema CredentialApplySchema object 申请凭证所需数据的Schema 表8 CredentialApplySchema 参数 参数类型 描述 type String 类型 name String 名称 description String 描述信息 attributes Array of Attribute objects 属性列表 表9 Attribute 参数 参数类型 描述 name String 名称 type String 类型 description String 描述信息 表10 Proof 参数 参数类型 描述 creator String 创建者身份标识 type String 签名类型 created String 签名创建时间 signatureValue String 签名值 状态码: 500 表11 响应Body参数 参数 参数类型 描述 errorCode String 错误码 最小长度:8 最大长度:36 errorMsg String 错误描述 最小长度:2 最大长度:512
  • 初始化SDK客户端 基于标准配置文件模板初始化Gateway SDK。 调用方法 func NewGatewayClient(configPath string, decrypts ...func(bytes []byte) ([]byte, error)) (*GatewayClient, error) 参数说明 参数 类型 说明 configPath String 必填参数,客户端SDK配置文件的绝对路径。 decrypts func(bytes []byte) ([]byte, error) 非必填参数,指定证书密文解密算法,默认为明文,无须解密(可变参数)。
  • 初始化SDK文件存储客户端 基于已初始化的SDK Gateway客户端模板初始化富媒体存储客户端。 调用方法 func NewBsClient(gatewayClient *client.GatewayClient, chainId string, endorserName, consenterName string) (*BsClient, error) 参数说明 参数 类型 说明 gatewayClient *client.GatewayClient 必填参数,已初始化过的Gateway客户端。 chainID string 链名称。 endorserName string 背书节点名称,如“node-0.organization1”。 consenterName string 共识节点名称,如“node-0.organization”。
  • 请求参数 表1 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token 表2 FormData参数 参数 是否必选 参数类型 描述 chaincode_name 是 String 链代码名称,以小写字母开头,支持小写字母和数字 最小长度:6 最大长度:25 chaincode_version 是 String 链代码版本,只允许使用数字、点(.)、横杠(-),必须以数字开头和结尾,且点和横杠不能相邻 最小长度:1 最大长度:14 target_peers 是 String 链代码安装Peer列表信息,例如:[{"org_id":"9fb42c91458763990a45b62af92546a21f168dae","org_name":"organization3","peer_id":"peer-9fb42c91458763990a45b62af92546a21f168dae-0.peer-9fb42c91458763990a45b62af92546a21f168dae.default.svc.cluster.local","peer_name":"peer-0"}] description 否 String 链代码描述 chaincode_language 是 String 链代码编程语言,例如 golang db_type 否 String 账本数据存储方式,请按照实例创建时的账本数据存储方式填写。例如 goleveldb,couchdb security_check 否 String 链代码安全检查选项,目前只对golang语言链代码有效,true表示开启,false表示关闭,默认为false file 是 File 链代码zip文件
  • 请求示例 POST https://192.168.0.90:30603/v2/agent/apis/chaincode/install {chaincode_name:gochaincode3chaincode_version:2.0target_peers:[{"org_id":"9802af57cfab764dc12b860c44b01969575e83c9","org_name":"organization","peer_id":"peer-9802af57cfab764dc12b860c44b01969575e83c9-1.peer-9802af57cfab764dc12b860c44b01969575e83c9.default.svc.cluster.local","peer_name":"node-1"}]description:22222222chaincode_language:golangdb_type:goleveldbsecurity_check:true}
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 total_peer_num Integer 链代码操作Peer总数 success_peer_num Integer 操作成功Peer数量 fail_peer_num Integer 操作失败Peer数量 fail_peers Array of strings 操作失败Peer信息 状态码: 400 表4 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_message String 错误描述 error_msg String 错误描述
  • 响应示例 状态码: 200 Success { "total_peer_num" : 4, "success_peer_num" : 4, "fail_peer_num" : 0, "fail_peers" : [ ] } 状态码: 400 Bad Request { "error_code" : " BCS .4000013", "error_message" : "request body is too large" }
  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 applyer String 申请者身份标识 orderSeq String 订单序列号 applyTime String 申请时间 price String 价格 status String 状态 service String 服务 reason String 理由信息 dataUri String 凭证数据URI encryptedAesKey String 加密的AES密钥 uriType String URI类型 dataHash String 数据的hash lockProof String 锁定证明 vcIndex String 凭证索引 状态码: 500 表3 响应Body参数 参数 参数类型 描述 errorCode String 错误码 最小长度:8 最大长度:36 errorMsg String 错误描述 最小长度:2 最大长度:512
  • 请求示例 { "orgID" : "4f1439758ebb41f7411b5f684b67713c08b89198", "channelID" : "mychannel", "cryptoMethod" : "SW", "cert" : "-----BEGIN CERTIFICATE-----\n...\n...\n-----END CERTIFICATE-----", "sk" : "------BEGIN PRIVATE KEY-----\n...\n...\n-----END PRIVATE KEY-----", "timestamp" : "2020-10-27T17:28:16+08:00", "orderIndex" : 1 }
  • 响应示例 状态码: 200 VCOrder Information { "applyer" : "string", "orderSeq" : "string", "applyTime" : "string", "price" : "string", "status" : "string", "service" : "string", "reason" : "string", "dataUri" : "string", "encryptedAesKey" : "string", "uriType" : "string", "dataHash" : "string", "lockProof" : "string", "vcIndex" : "string" } 状态码: 500 失败响应 { "errorCode" : "stringst", "errorMsg" : "string" }
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 用户证书,每行末尾均需要增加显式换行符\n sk 是 String 用户私钥,每行末尾均需要增加显式换行符\n timestamp 是 String 时间戳 orderIndex 是 String 订单索引
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 证书 sk 是 String 私钥 timestamp 是 String 时间戳 owner 是 String 密钥生成者的身份标识 keyManagerMode 否 String abe系统首次使用时,需选择中心模式“central”或者多中心模式“distributed”,该模式仅可选择一次,默认为多中心模式。
  • 请求示例 { "orgID" : "ce0ac69b0c8648cd25b44a551780409767c8890b", "channelID" : "mychannel", "cryptoMethod" : "SW", "cert" : "-----BEGIN CERTIFICATE-----\\n...\\n-----END CERTIFICATE-----", "sk" : "-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----", "timestamp" : "2020-10-27T17:28:16+08:00", "owner" : "did:example:8poVETnVCry9ecfHSDeQaR" }
  • 示例Demo Java语言示例Demo基于Java SDK开发,主要用于帮助开发人员理解并开发Java客户端应用程序,使用步骤如下: 单击链接获取Java客户端示例[链接]。 完成客户端初始化参数配置(App.java),进行使用(配置可参考SDK客户端配置)。 示例Demo项目结构如下: . 表1 示例Demo目录结构 文件 介绍 App.java 业务端调用的示例,客户端的初始化配置。 Contract.java 通过合约对业务数据交互。对数据有修改的操作如插入和删除,需要调用其中的send方法。对数据的查询操作如查询某个键的历史,需要调用其中的query方法。 BlockUtil.java BlockUtil用于从区块上获取数据。 TxUtil.java TxUtil用于从交易上获取数据。 pom.xml 配置SDK仓库地址、SDK版本号。 README.md 提供详细的接口调用示例。 父主题: Java应用程序开发
  • 文件下载 接口方法 func (bc *BsClient) DownloadFile(filePath, fileName string, versionId int) error 参数说明 参数 类型 说明 filePath string 文件下载到本地的路径。 fileName string 待下载文件在链上的名称。不允许包含 "/" versionId int 待下载文件的版本号。版本号要求大于等于1,可以通过查询文件历史版本获取文件的版本号信息。 返回值 类型 说明 error 下载成功返回类型为nil,反之返回error。 父主题: Go SDK介绍
  • Go SDK Go SDK升级过程如下: 删除旧版本huaweichain SDK。 下载新版本的SDK文件解压至原有的SDK文件路径。 表1 Go SDK版本与变更 版本号 下载 说明 0.4.9 链接 适配实例版本1.0.2.1。 0.2.15 链接 适配实例版本1.0.2.0。 2.1.0.6.41 链接 适配实例版本1.0.1.1-1.0.1.10。 2.1.0.2.52升级至2.1.0.6.41时,合约发送、查询类方法需要适配,详细适配内容如下: BuildTransactionMessage更新为BuildTxRawMsg,参考利用合约发送交易 2.1.0.2.52 不涉及 适配实例版本1.0.0.39。 版本查看方法:实例创建成功后,单击实例名称,进入概览页面,在链信息下方查看实例版本信息。 父主题: SDK升级与变更
  • 请求示例 { "orgID" : "ce0ac69b0c8648cd25b44a551780409767c8890b", "channelID" : "mychannel", "cryptoMethod" : "SW", "cert" : "-----BEGIN CERTIFICATE-----\\n...\\n-----END CERTIFICATE-----", "sk" : "-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----", "timestamp" : "2020-10-27T17:28:16+08:00", "consumer" : "did:example:3TMWx8owKHARgNwbj4ywmG", "orderSeq" : "1" }
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 证书 sk 是 String 私钥 timestamp 是 String 时间戳 consumer 是 String 订单申请者身份标识 orderSeq 是 String 订单序列号
  • 响应示例 状态码: 200 Success { "count" : 12, "chaincodes" : [ { "chaincode_name" : "test001", "chaincode_version" : "1.0", "update_time" : "2021-01-12T11:32:04.193358708+08:00", "instantiated_info" : { "channels" : [ { "channel_id" : "channel", "versions" : [ "1.0" ] }, { "channel_id" : "testchannel", "orgs" : null, "versions" : [ "1.0" ] } ] }, "chaincode_language" : "golang" } ] } 状态码: 400 Bad Request { "error_code" : "B CS .4000013", "error_message" : "request body is too large" }
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 count Integer 链码总数 chaincodes Array of ChaincodeInfo objects 链码列表 表4 ChaincodeInfo 参数 参数类型 描述 chaincode_name String 链码名称 chaincode_language String 链码开发语言 update_time String 链码更新时间 chaincode_version String 链码版本,多个链码之间以逗号(,)分割 install_org_infos Array of PeerInfo objects 链码的安装信息 instantiated_channel instantiated_channel object 链码通道信息 instantiated_info instantiated_info object 实例化信息 表5 PeerInfo 参数 参数类型 描述 org_name String 组织名称 org_id String 组织id peer_name String 节点名称 peer_id String 节点id status String 节点状态 channels Array of strings 未实例化的peer信息 url String Peer节点的url信息 peer String Peer节点的内部 域名 表6 instantiated_channel 参数 参数类型 描述 error Array of CCInstantiatedChannelError objects 实例化错误信息 success Array of strings 成功的通道 inprogress Array of strings 实例化进度 表7 CCInstantiatedChannelError 参数 参数类型 描述 channel_name String 错误通道名 error_detail String 错误详情 表8 instantiated_info 参数 参数类型 描述 channels Array of channels objects 通道信息 表9 channels 参数 参数类型 描述 channel_id String 通道名称 orgs Array of orgs objects 通道内组织信息 versions Array of strings 版本信息 表10 orgs 参数 参数类型 描述 org_name String 组织名 org_id String 组织id 状态码: 400 表11 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_message String 错误描述 error_msg String 错误描述
  • 响应示例 状态码: 200 查询指定流程创建者的所有流程响应参数 { "items" : [ { "creatorDID" : "did:example:8sAvsS4tB3NYgMJ4uqbVYj", "processID" : "442a6b42-82b7-415a-a0e6-deaaee59f582", "stages" : [ { "stageName" : "Seconde transaction", "createTime" : "1639824526", "consumer" : "did:example:8sAvsS4tB3NYgMJ4uqbVYj", "orderSeq" : "N6UhspZ5cQY7NtHsxuFTZ" } ] }, { "creatorDID" : "did:example:8sAvsS4tB3NYgMJ4uqbVYj", "processID" : "a779dd88-f7a3-4ac9-bf1c-a0ed1d827632", "stages" : [ { "stageName" : "First transaction", "createTime" : "1639824239", "consumer" : "did:example:8sAvsS4tB3NYgMJ4uqbVYj", "orderSeq" : "FKCx1Cfatj7RRsKMWPQ7wQ" }, { "stageName" : "", "createTime" : "1639826471", "consumer" : "did:example:8sAvsS4tB3NYgMJ4uqbVYj", "orderSeq" : "8PuuWWg521bZDXadzwPdMn" }, { "stageName" : "Seconde transaction", "createTime" : "1639826898", "consumer" : "did:example:8sAvsS4tB3NYgMJ4uqbVYj", "orderSeq" : "SCkh1rQ6aD5SYTYkojn44W" } ] }, { "creatorDID" : "did:example:8sAvsS4tB3NYgMJ4uqbVYj", "processID" : "d15b5213-5cb8-4af4-97dc-143379369f35", "stages" : [ { "stageName" : "564econde transaction", "createTime" : "1639827681", "consumer" : "did:example:8sAvsS4tB3NYgMJ4uqbVYj", "orderSeq" : "XCXtVZsdKFDLaErzpSZYAN" } ] } ], "pagination" : { "currentPage" : 1, "pageSizeNum" : 100, "totalItems" : 3 } }
  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 items Array of DatasetShareProcessResponseBody objects 数据集分享流程列表 pagination PaginationResp object 分页信息 表3 DatasetShareProcessResponseBody 参数 参数类型 描述 creatorDID String 流程创建者身份标识 processID String 流程ID stages Array of StageInProcess objects 流程中的阶段信息 表4 StageInProcess 参数 参数类型 描述 stageName String 阶段名称 createTime String 阶段信息上链时间戳 consumer String 消费者身份标识 orderSeq String 订单序列号 表5 PaginationResp 参数 参数类型 描述 currentPage Integer 当前页码 pageSizeNum Integer 每页条数 totalItems Integer 总条数 状态码: 500 表6 响应Body参数 参数 参数类型 描述 errorCode String 错误码 errorMsg String 错误描述
  • 请求示例 /v1/datashare/dataset/query-processes { "orgID" : "{{orgID}}", "channelID" : "{{channelID}}", "cryptoMethod" : "{{cryptoMethod}}", "cert" : "{{cert}}", "sk" : "{{sk}}", "timestamp" : "{{timestamp}}", "creatorDID" : "did:example:8sAvsS4tB3NYgMJ4uqbVYj", "currentPage" : "1", "pageSizeNum" : "100" }
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 证书 sk 是 String 私钥 timestamp 是 String 时间戳 currentPage 否 String 分页参数:当前页码(默认1) pageSizeNum 否 String 分页参数:每页条数(默认100) creatorDID 是 String 流程创建者身份标识
  • 合约结构 Java语言合约由合约文件及依赖包构成,包含包声明、依赖包导入、智能合约的方法定义。 合约文件中,用户可自定义合约函数,需要实现Contract的init和invoke方法。 合约的结构如下: package com.huawei.poissonchain; import com.huawei.huaweichain.contract.Contract; import com.huawei.huaweichain.contract.ContractException; import com.huawei.huaweichain.contract.ContractStub; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ExampleContract implements Contract { // 功能:合约的初始化(Init)接口,需要合约开发者在智能合约中实现此接口,供合约使用者在启动合约之后调用。注意,一般将合约启动时,首先需要执行且只需要执行一次的逻辑放到此方法中 // 入参:stub是智能合约SDK为本次合约执行交易准备的上下文对象,可以通过stub提供的API函数,获取交易请求相关信息、读写状态数据库、写日志等 // 返回值:需要返回给合约调用者( 区块链 客户端)的信息,没有信息需要返回时,返回值可以为null // 抛出异常:初始化过程的异常信息,可由合约编写者自行设定异常逻辑 @Override public byte[] init(ContractStub stub) throws ContractException { } // 功能:合约被调用(invoke)接口,需要合约开发者在智能合约中实现此接口,将主要的合约执行逻辑,放到此接口内,供合约使用者调用。 // 入参:stub是智能合约合约SDK为本次合约执行交易准备的上下文对象,可以通过stub提供的API函数,获取交易请求相关信息、读写状态数据库、写日志等 // 返回值:需要返回给合约调用者(区块链客户端)的信息,没有信息需要返回时,返回值可以为null // 抛出异常:初始化过程的异常信息,可由合约编写者自行设定异常逻辑 @Override public byte[] invoke(ContractStub stub) throws ContractException { } } 父主题: JAVA合约开发
  • 查询交易执行结果 消息构建。 接口方法 func (msg *QueryRawMessage) BuildTxRawMessage(chainID string, txHash []byte) (*common.RawMessage, error) 参数说明 参数 类型 说明 chainID string 链ID。 txHash []byte 交易Hash。 返回值 类型 说明 *common.RawMessage 查询交易执行结果需发送的消息。 error 构建成功返回类型为nil,反之返回error。 消息发送。 接口方法 QueryAction.class func (action *QueryAction) GetTxResultByTxHash(rawMsg *common.RawMessage) (*common.RawMessage, error) 参数说明 参数 类型 说明 rawMsg *common.RawMessage 上述生成的查询指定交易执行结果的消息。 返回值 类型 说明 *common.RawMessage 用于获取包含发送结果的消息。 error 发送成功返回类型为nil,反之返回error。 父主题: 其他查询
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 applyer String 申请者的身份标识 applyerName String 申请者的名称 provider String 授权者的身份标识 providerName String 授权者的名称 service String 授权者的服务名 price Integer 价格 applyTime String 申请时间 encryptedABEKey String 被加密的ABE密钥 status String 申请状态,request表示未授权;ready表示申请已处理 reason String 原因 lockProof String 证明 attributesJson String 属性 状态码: 500 表4 响应Body参数 参数 参数类型 描述 errorCode String 错误码 errorMsg String 错误描述
共100000条