华为云用户手册

  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 用户证书,每行末尾均需要增加显式换行符\n sk 是 String 用户私钥,每行末尾均需要增加显式换行符\n timestamp 是 String 时间戳 serviceID 否 String 服务的标识符
  • 响应示例 状态码: 200 UntreatedVCOrder Information List { "items" : [ { "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"}
  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 items Array of VCOrder objects 列表 表3 VCOrder 参数 参数类型 描述 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 表4 响应Body参数 参数 参数类型 描述 errorCode String 错误码 最小长度:8 最大长度:36 errorMsg String 错误描述 最小长度:2 最大长度:512
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 用户证书,每行末尾均需要增加显式换行符\n sk 是 String 用户私钥,每行末尾均需要增加显式换行符\n timestamp 是 String 时间戳 schemaIndex 是 String schema索引
  • 请求示例 { "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", "schemaIndex" : "1"}
  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 creator String 创建者身份标识 title String 名称 identifier String 凭证模板标识 attributes Array of Attribute objects 属性信息 version Integer 版本 表3 Attribute 参数 参数类型 描述 name String 名称 type String 类型 description String 描述信息 状态码: 500 表4 响应Body参数 参数 参数类型 描述 errorCode String 错误码 最小长度:8 最大长度:36 errorMsg String 错误描述 最小长度:2 最大长度:512
  • 响应示例 状态码: 200 CredentialSchema Information { "creator" : "string", "title" : "string", "identifier" : "string", "attributes" : [ { "name" : "name", "type" : "someType", "description" : "Identity number" } ], "version" : 0} 状态码: 500 失败响应 { "errorCode" : "stringst", "errorMsg" : "string"}
  • 响应参数 状态码: 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 时间戳 provider 是 String 数据集发布者身份标识 productID 是 String 数据集产品id
  • 响应示例 状态码: 200 操作结果 { "provider" : "did:example:DHkJjyD5wZwya6sd6BNBnG", "providerName" : "aws", "productName" : "prodname2", "productID" : "product2", "sampleUrl" : "http://hwcloud.com/sample.com/prodname2", "sampleSize" : "10KB", "sampleType" : "csv", "sampleName" : "data_sub1", "fileType" : "csv", "dataUrl" : "http://hwcloud.com/prodname2", "dataHash" : "2282ba7a1a2ef5700609214a997d3d4237a03bfd3632c6d089e57e7b6f467969", "dataSize" : "100MB", "dataName" : "mydata", "description" : "this is second prod", "price" : "0", "encryptedAesKey" : "BA4Ub3t3IskN8uKcEMa+4cbtsDS8OzF4V/qqb4OcPMeMvp7IL+HClzAbL6lPnhbDg/AnrStBlf0qFzRj+qvk6ZH0c7wP0aS48fSoNtecG79aFpFx0dg7rFdVYXWWzgeyI03eD3gFdXlQ/ovpxKJG5ALK39OCazUqDrawZHSDGyIlw0hGh88Q+GVORVSp+6V5Ag==", "status" : "ready", "publishTime" : "1607157244", "dataFiles" : [ { "fileType" : "csv", "dataUrl" : "http://hwcloud.com/prodname2", "dataHash" : "2282ba7a1a2ef5700609214a997d3d4237a03bfd3632c6d089e57e7b6f467969", "dataSize" : "100MB", "dataName" : "mydata" } ], "sampleFiles" : [ { "fileType" : "csv", "dataUrl" : "http://hwcloud.com/prodname2", "dataHash" : "2282ba7a1a2ef5700609214a997d3d4237a03bfd3632c6d089e57e7b6f467969", "dataSize" : "100MB", "dataName" : "mydata" } ], "category" : "string"} 状态码: 500 失败响应 { "errorCode" : " BCS .5002046", "errorMsg" : "Incorrect number of arguments"}
  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 provider String 数据集提供者身份标识 providerName String 数据集提供者名称 productName String 数据集产品名称 productID String 数据集产品id sampleUrl String 样例数据url sampleSize String 样例数据大小 sampleType String 样例数据类型 sampleName String 样例数据名称 fileType String 文件类型 dataUrl String 数据url dataHash String 数据哈希值 dataSize String 数据大小 dataName String 数据名称 description String 数据描述 price String 数据价格 encryptedAesKey String 密钥 status String 状态 publishTime String 数据发布时间 dataFiles Array of DataFile objects 数据文件列表 sampleFiles Array of DataFile objects 样例文件列表 category String 加密类型 表3 DataFile 参数 参数类型 描述 fileType String 文件类型 dataUrl String 数据url dataHash String 数据哈希 dataSize String 数据大小 dataName String 数据名称 状态码: 500 表4 响应Body参数 参数 参数类型 描述 errorCode String 错误码 errorMsg String 错误描述
  • 请求示例 { "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", "provider" : "did:example:DHkJjyD5wZwya6sd6BNBnG", "productID" : "product2"}
  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 consumer String 订单消费者身份标识 consumerName String 订单消费者名称 orderSeq String 订单序列号 provider String 订单提供者身份标识 providerName String 订单提供者名称 productID String 数据集产品id productName String 数据集产品名称 price String 订单价钱 applyTime String 订单申请时间 encryptedAesKey String 密钥 status String 订单状态 reason String 订单申请原因 lockProof String 订单锁定证明 creatorDID String 流程创建者DID,如果没有加入任何流程,为“” processID String 当前订单所属流程ID,如果没有加入任何流程,为“” 状态码: 500 表3 响应Body参数 参数 参数类型 描述 errorCode String 错误码 errorMsg String 错误描述
  • 请求示例 { "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 订单信息 { "consumer" : "did:example:3TMWx8owKHARgNwbj4ywmG", "consumerName" : "Tyler", "orderSeq" : "1", "provider" : "did:example:DHkJjyD5wZwya6sd6BNBnG", "providerName" : "hw", "productID" : "product1", "productName" : "prodname1", "price" : "0", "applyTime" : "1607332359", "encryptedAesKey" : "BNGhPwjaTgpM+V7czzw1i4mH21KKN+XLKXHLqVsRIfybUCncqZNfomkRfzX4WEHj+oty1X9oCd4h6xMnRvs8BWE5Tvg6BJ6QTW/km9EO/FSYqzJf2GqQzAleAcLJrTBZ3LRbPaF87CgJ114ae7R+VK9VvfXQ8exuH2KMRD305dXieGpM4VPVv9u1BbL15Jpd/g==", "status" : "ready", "reason" : "I want product1", "lockProof" : ""} 状态码: 500 失败响应 { "errorCode" : "B CS .5002046", "errorMsg" : "Incorrect number of arguments"}
  • 初始化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”。
  • 响应参数 状态码: 200 表2 响应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 表3 响应Body参数 参数 参数类型 描述 errorCode String 错误码 errorMsg String 错误描述
  • 响应示例 状态码: 200 ABE用户密钥订单信息 { "applyer" : "did:hwid:mfqqdiW8V64JbPFgQsoiv", "applyerName" : "", "provider" : "did:hwid:FahQr32NgQZWjGRiCZc37C", "providerName" : "", "service" : "", "price" : 0, "applyTime" : "1672985584", "encryptedABEKey" : "", "status" : "ready", "reason" : "", "lockProof" : "", "attributesJson" : "{\"att1\":\"YXR0MW5hbWU=\",\"att2\":\"YXR0Mm5hbWU=\",\"att3\":\"NQ==\"}"} 状态码: 500 失败响应 { "errorCode" : "BCS.5002046", "errorMsg" : "Incorrect number of arguments"}
  • 操作步骤 实例订购及文件下载。 订购BCS实例时,安全机制选择使用“ECDSA”同态加密。完成订购后,下载同态加密库ahex.x.x.tar.gz,客户端开发套件国密SDK包sdkx.x.x.tar.gz,peer与orderer用户证书,配置文件等。 安装客户端SDK库。 将下载的国密SDK包sdkx.x.x.tar.gz解压到用户的$GOPATH目录下。 安装同态加密库。 将下载的ahex.x.x.tar.gz解压到用户的$GOPATH目录下。 安装依赖库(仅针对Fabric1.1)。 依赖的库文件位于同态加密库目录下,当同态加密库被解压到用户的$GOPATH目录后,该文件位于$GOPATH/src/ahe/PSW/deps/lib,请将该目录下的所有文件复制至本地的/usr/local/include/openssl/目录下(如果没有该目录,请自行创建该目录),然后设置环境变量: export LD_LIBRARY_PATH=/usr/local/include/openssl:$LD_LIBRARY_PATH //以项目路径为/usr/local/include/openssl为例,若自行创建目录,请以实际创建目录为准 若提示缺少libgmp,则需要用户安装gmp库。安装方法可以参考linux操作系统包管理工具(例如ubuntu系统可以使用apt-get install libgmp10命令来安装,也可在https://gmplib.org/下载源码进行编译安装)。 开发Client程序与链代码。 请参考AHE Lib库接口和Chaincode库接口进行具体的应用和链代码(智能合约)的开发。 例如App客户端和链代码端的逻辑过程参考如下: App客户端的典型逻辑过程是: 注册用户 注册用户时可以调用密钥生成函数为用户生成公私钥。 初始化余额 初始化余额时可以调用初始余额准备函数生成具有隐私保护的初始余额信息。 发起交易 交易时可以调用交易准备函数生成具有隐私保护的交易数据。 链代码端对应的逻辑过程是: 保存用户公钥与地址的映射关系。 验证初始余额的有效性并生成初始交易。 验证交易数据的有效性并生成交易结果。 链码端可以通过调用初始余额校验函数来验证初始余额的有效性。 调用交易校验函数来验证交易数据的有效性。 安装链代码。 通过管理界面,将开发的链代码安装到用户订购的BCS实例中并实例化。 部署应用。 用户根据业务需求开发app应用,app应用可以调用同态加密库来对交易信息进行隐私保护。开发完成后,将app部署在购买的服务器上。app部署完成后,确保环境中具有配置文件、证书文件(peer和orderer的用户证书)、openssl库。
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 证书 sk 是 String 私钥 timestamp 是 String 时间戳 provider 是 String 授权者的身份标识 applyer 是 String 申请者的身份标识
  • 利用合约发送交易 背书消息构建 接口函数 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。 交易消息构建。 接口方法 func (msg *ContractRawMessage) BuildTxRawMsg(rawMessages []*common.RawMessage) (*TxRawMsg, error) 参数说明 参数 类型 说明 rawMessages []*common.RawMessage 背书请求返回结果集合。 返回值 类型 说明 *TxRawMsg 包含交易hash的交易请求信息,该消息使用transaction接口发送。 error 构建成功返回类型为nil,反之返回error。 交易消息发送。 接口方法 func (action *ContractAction) Transaction(rawMsg *common.RawMessage) (*common.RawMessage, error) 参数说明 参数 类型 说明 rawMsg *common.RawMessage 上述生成的交易消息。 返回值 类型 说明 *common.RawMessage 用于获取包含发送结果的消息。 error 发送成功返回类型为nil,反之返回error。 父主题: Go SDK介绍
  • 获取节点对象 根据节点名称,获取需要发送交易的节点对象。所有消息发送前,都必须调用该方法,获取发送节点对象,然后再获取对应的消息发送接口对象。 调用方法 public WienerChainNode getWienerChainNode(String name) throws InvalidParameterException 参数说明 参数 类型 说明 name String 节点名称。 返回值 类型 说明 WienerChainNode WienerChainNode对象。
  • 准备工作 开通CloudIDE(或者用户自己准备JDK、maven和eclipse/IntelliJ IDEA)。 CloudIDE是软件开发生产线 CodeArts的云端开发环境服务,向开发者提供按需配置、快速获取的工作空间(包含编辑器和运行环境)。 在CloudIDE上创建一个空的Java工程,如图1所示。 图1 CloudIDE上创建一个空的Java工程 下载Java SDK示例源码,获取方法:登录 区块链 服务管理控制台,进入“应用案例”,在“Java示例Demo-Java SDK Demo”下方,单击“App_Java_Src_Demo”中Java项目源码的“下载”按钮。 购买区块链实例、安装链代码及实例化链代码操作,请参见《快速入门》。
  • 通过内存传入私钥 如果用户需要对私钥文件进行加密,并在demo中解密后传入FabricSDK。 对于MSP私钥:在FabricHelper文件的genFabricUser函数中,按如下方式调用函数: //从配置文件指定路径下读取加密过的MSP私钥String adminPrivateKeyString = extractPemString(msp, "keystore"); //对adminPrivateKeyString 进行解密得到decryptedKey字符串//将解密后的MSP私钥重新赋值给变量adminPrivateKeyString String adminPrivateKeyString = decryptedKey; 当前不支持通过内存传入TLS私钥。
  • 常用接口 Fabric-sdk-java的使用主要分为:加密套件配置,通道操作,链码操作。 加密套件配置部分,根据配置文件内容,设置SDK里面的加密套件服务提供者、 加密类型、安全级别等。 通道操作包括:通道查询、通道创建、通道加入、通道删除等。 链码操作包括:链码安装、链码实例化、链码查询、链码调用等。 使用Fabric-sdk-java主要会使用HFClient和Channel两个类,其导入路径分别为:org.hyperledger.fabric.sdk.HFClient和org.hyperledger.fabric.sdk.Channel。 更多的api接口请参考Fabric官网。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全