华为云用户手册

  • 请求示例 { "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", "applyer" : "did:example:Mb4SshJeN5ukWXkbMJK8xC", "provider" : "did:example:Mb4SshJeN5ukWXkbMJK8xC", "attrJson" : "[{\"name\":\"att1\",\"type\":\"plain\",\"value\":\"att1name\"},{\"name\":\"att2\",\"type\":\"plain\",\"value\":\"att2name\"},{\"name\":\"att3\",\"type\":\"plain\",\"value\":\"5\"}]" }
  • 响应示例 状态码: 200 ABE用户密钥订单信息 { "applyer" : "did:hwid:mfqqdiW8V64JbPFgQsoiv", "applyerName" : "", "provider" : "did:hwid:FahQr32NgQZWjGRiCZc37C", "providerName" : "", "service" : "", "price" : 0, "applyTime" : "", "encryptedABEKey" : "", "status" : "ready", "reason" : "", "lockProof" : "", "attributesJson" : "[{\"name\":\"att3\",\"type\":\"comparable\",\"value\":\"3\",\"maxValue\":\"1000\"}]" } 状态码: 500 失败响应 { "errorCode" : " BCS .5002046", "errorMsg" : "Incorrect number of arguments" }
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 证书 sk 是 String 私钥 timestamp 是 String 时间戳 applyer 是 String 申请者的身份标识 provider 是 String 授权者的身份标识 attrJson 否 Array of attribute objects 属性列表 表2 attribute 参数 是否必选 参数类型 描述 name 是 String 属性名 type 是 String 属性类型(plain,comparable) value 是 String 属性值(当type为plain时,value为属性值。当type为comparable时,value必须是整数。) maxValue 否 String 属性值上限,value可能取到的最大值。只在type为comparable时可选使用
  • 请求示例 { "orgID" : "org1", "channelID" : "mychannel", "cryptoMethod" : "this is a demo", "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", "applyer" : "did:example:ebfeb1f712ebc6f1c276e12ec21", "issuer" : "did:example:fdsafre767f8a3hr773j4h1jkhr", "sequence" : "10025469331", "schemaIndex" : "did:example:ebfeb1f712ebc6f1c276e12ec21_IDCard", "data" : "{\"name\": \"xm\",\"age\": 18}" }
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 用户证书,每行末尾均需要增加显式换行符\n sk 是 String 用户私钥,每行末尾均需要增加显式换行符\n timestamp 是 String 时间戳 credentialInfo 是 CredentialSubjectInfo object 凭证主题信息 表2 CredentialSubjectInfo 参数 是否必选 参数类型 描述 applyer 是 String 申请者身份标识 issuer 是 String 签发者身份标识 sequence 是 String 凭证的序列号 schemaIndex 是 String 凭证模板索引 expirationDate 否 String 过期时间 data 是 String 凭证数据明文
  • 合约结构 Go语言合约由合约文件及依赖包构成,包含包声明、依赖包导入、智能合约的结构体定义和方法定义。 合约文件中,用户可自定义结构体以及合约函数。以下内容不可更改: package名:package usercontract 函数的签名:NewSmartContract()、Init(stub contractapi.ContractStub)、Invoke(stub contractapi.ContractStub) 合约的结构如下: package usercontract // 引入必要的包 import ( "git.huawei.com/poissonsearch/wienerchain/contract/docker-container/contract-go/contractapi" ) // 声明合约的结构体 type example01 struct {} // 创建合约 func NewSmartContract() contractapi.Contract { return &example01{} } // 合约的初始化(Init)接口。将合约启动时,需要首先执行且只需要执行一次的逻辑放到此方法中。 func (e *example01) Init(stub contractapi.ContractStub) ([]byte, error) { // 编写时可灵活使用stub中的API } // 合约被调用(invoke)接口。将主要的合约执行逻辑,放到此方法内,供合约使用者调用。 func (e *example01) Invoke(stub contractapi.ContractStub) ([]byte, error) { // 编写时可灵活使用stub中的API } 父主题: Go合约开发
  • 请求示例 { "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, "vcIndex" : 0 }
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 用户证书,每行末尾均需要增加显式换行符\n sk 是 String 用户私钥,每行末尾均需要增加显式换行符\n timestamp 是 String 时间戳 orderIndex 是 String 订单索引 vcIndex 是 String 凭证索引
  • 响应示例 状态码: 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", "encryptData" : "string" } 状态码: 500 失败响应 { "errorCode" : "B CS .5002046", "errorMsg" : "Incorrect number of arguments" }
  • 响应参数 状态码: 200 表5 响应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 加密类型 encryptData String 加密后的数据 表6 DataFile 参数 参数类型 描述 fileType String 文件类型 dataUrl String 数据url dataHash String 数据哈希 dataSize String 数据大小 dataName String 数据名称 状态码: 500 表7 响应Body参数 参数 参数类型 描述 errorCode String 错误码 errorMsg String 错误描述
  • 响应示例 状态码: 200 Success { "user" : "admin", "token" : "ACiUxRlk2Jcu2d5bp2SyfP7abHV1nVKlo9Mm2AxI9dDN7mdHXXHBdg=kaIglHeZLTu6UeIu5YRcXTlpUPXylEG3ESNu0vIukrikG6SVhO393ds8rG+aRnZ+mMyookApP", "expire_time" : 1605867860701 } 状态码: 400 Bad Request { "error_code" : "BCS.4000013", "error_message" : "request body is too large" }
  • 查询区块详情 消息构建。 接口方法 func (msg *QueryRawMessage) BuildBlockRawMessage(chainID string, blockNum uint64) (*common.RawMessage, error) 参数说明 参数 类型 说明 chainID string 链ID。 blockNum uint64 区块高度。 返回值 类型 说明 *common.RawMessage 根据块高查询区块详情需发送的消息。 error 查询成功返回类型为nil,反之返回error。 消息发送。 接口方法 func (action *QueryAction) GetBlockByNum(rawMsg *common.RawMessage) (*common.RawMessage, error) 参数说明 参数 类型 说明 rawMsg *common.RawMessage 上述根据块高查询区块详情消息。 返回值 类型 说明 *common.RawMessage 用于获取包含发送结果的消息。 error 发送成功返回类型为nil,反之返回error。 父主题: 其他查询
  • SDK逻辑结构 SDK主要提供消息封装、发送模块及相应的配套组件。配套组件主要包含异常处理、配置文件解析、节点获取等功能接口。 消息封装 由于消息类型较多,因此按类型进行了分类封装。消息封装相关接口均在build这个包下面,包含了ContractRawMessage、QueryRawMessage这几种消息构造的封装类。 ContractRawMessage:包含交易背书、落盘两阶段消息的构建。 QueryRawMessage:包含所有查询相关接口的消息构建,目前支持交易详情查询、链状态查询、区块查询、合约信息查询等接口。 消息发送 同消息封装类接口,按类型进行了分类封装。消息发送相关接口均包含在action这个包下面,包含了ContractAction、QueryAction、EventAction这几种消息发送的封装类。 ContractAction:对应ContractRawMessage封装的消息的发送。 QueryAction:对应QueryRawMessage中封装的消息的发送。 EventAction:主要用于监听消息的最终状态,因为参数仅包含交易ID,消息封装的方法直接内置。同时所有的消息发送接口均提供同步和异步两种接口。 同步接口入参均为需要发送的消息,返回值为一个ListenableFuture对象,用于监听消息发送结果。 异步接口则传入需要发送消息的同时,还需要传入一个StreamObserver对象,用于异步获取消息发送结果。
  • 基于SDK开发流程 初始化:创建SDK实例对象,然后进行初始化。可以通过以下两种方式进行初始化: 使用标准模板配置文件,调用 init 接口。 调用接口自定义设置属性,包括:msp设置、TLS设置、节点信息设置。 构造消息:由于消息类型较多,所以根据消息类型进行了消息类型进行封装,在构造消息之前,必须先获取消息类型对象,然后再基于获取对象中对应的方法封装消息。 获取节点:获取消息发送节点对象。 发送消息:所有的发送接口都封装在节点类中,发送消息时,先获取节点,再调用节点的消息发送对象获取方法。不同的消息对应不同的构建接口,同理,消息发送接口也根据接口类型进行了分装,在发送消息前,必须先获取接口类型对象,然后再基于获取对象中对应的方法发送消息。 结果解析:服务端返回的消息中,均包含交易最后执行结果的标志位,以此判断交易是否执行成功。若结果为不成功,则info字段还包含了错误原因,用于分析定位。 结果监听:对于业务交易和投票类型等需要落盘的交易,即使消息发送成功,后续落盘时还可能产生各种校验失败,导致交易无效。因此还需要监听交易是否最终落盘成功。
  • SDK说明 华为云 区块链 引擎目前提供Java、Golang两种语言SDK,区块链服务启动时会启动一系列grpc接口,监听客户端发送的消息,与客户端交互完成各种请求。在开发客户端时,如果从底层grpc接口开始,进行各种消息封装、消息发送、返回值解析等工作,不仅会导致开发量过大,并且造成重复劳动。 SDK则是将区块链服务提供的各种grpc接口进行封装,同时封装各接口所需类型的消息。在开发客户端时,只需要关注自己的业务逻辑,调用相应接口封装并发送消息即可,不需要关注底层消息发送接收的具体过程。 SDK中相关方法的使用示例,可参考应用程序开发对应语言的示例Demo。 SDK在不同环境下支持的实例安全机制如下: windows环境:ECDSA linux环境:国密算法、ECDSA
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 证书 sk 是 String 私钥 timestamp 是 String 时间戳 creatorDID 是 String 流程创建者身份标识 processID 是 String 流程ID
  • 请求示例 /v1/datashare/dataset/query-process { "orgID" : "{{orgID}}", "channelID" : "{{channelID}}", "cryptoMethod" : "{{cryptoMethod}}", "cert" : "{{cert}}", "sk" : "{{sk}}", "timestamp" : "{{timestamp}}", "creatorDID" : "did:example:8sAvsS4tB3NYgMJ4uqbVYj", "processID" : "a779dd88-f7a3-4ac9-bf1c-a0ed1d827632" }
  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 creatorDID String 流程创建者身份标识 processID String 流程ID stages Array of StageInProcess objects 流程中的阶段信息 表3 StageInProcess 参数 参数类型 描述 stageName String 阶段名称 createTime String 阶段信息上链时间戳 consumer String 消费者身份标识 orderSeq String 订单序列号 状态码: 500 表4 响应Body参数 参数 参数类型 描述 errorCode String 错误码 errorMsg String 错误描述
  • 响应示例 状态码: 200 查询指定的数据集分享流程响应参数 { "creatorDID" : "did:example:YLgvmFcukyigJpRsqRbFMn", "processID" : "25f46489-29bb-4f58-8f4c-e12da0a4bd66", "stages" : [ { "stageName" : "transaction1", "createTime" : "1640574210", "consumer" : "did:example:My8PRB5dKDVvBKXT76oJoB", "orderSeq" : "8zLQUpyswA8kpiHEsAUhZN" }, { "stageName" : "transaction2", "createTime" : "1640574304", "consumer" : "did:example:T1kFDUQAqo2z2X7hJWiRtQ", "orderSeq" : "3oKCPSKLGvaebT6z3a4PvY" }, { "stageName" : "transaction2", "createTime" : "1640587323", "consumer" : "did:example:T1kFDUQAqo2z2X7hJWiRtQ", "orderSeq" : "GPSta7mTScEEaQVRB62wUF" }, { "stageName" : "transaction2", "createTime" : "1640680918", "consumer" : "did:example:T1kFDUQAqo2z2X7hJWiRtQ", "orderSeq" : "8kzahSLi2kBxY8GGBZdLhp" } ] }
  • 查询文件历史版本 接口方法 func (bc *BsClient) GetFileHistory(fileName string) ([]*bstore.FileHistory, error) 参数说明 参数 类型 说明 fileName string 查询的链上文件名。 返回值 类型 说明 []*FileHistory 文件历史版本信息列表,每条历史版本信息包含版本号、文件哈希值、首次上链时间、更新时间、上传者数据。 error 查询成功返回类型为nil,反之返回error。 父主题: 其他查询
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 schemaIndex String 模板存储在链上的索引 credentialSchema CredentialSchema object CredentialSchema 表4 CredentialSchema 参数 参数类型 描述 creator String 创建者身份标识 title String 名称 identifier String 凭证模板标识 attributes Array of Attribute objects 属性信息 version Integer 版本 表5 Attribute 参数 参数类型 描述 name String 名称 type String 类型 description String 描述信息 状态码: 500 表6 响应Body参数 参数 参数类型 描述 errorCode String 错误码 最小长度:8 最大长度:36 errorMsg String 错误描述 最小长度:2 最大长度:512
  • 响应示例 状态码: 200 VCSchemaResponeParams { "schemaIndex" : "string", "credentialSchema" : { "creator" : "string", "title" : "string", "identifier" : "string", "attributes" : [ { "name" : "name", "type" : "someType", "description" : "Identity number" } ], "version" : 0 } } 状态码: 500 失败响应 { "errorCode" : "BCS.5002035", "errorMsg" : "Schema Already Exist" }
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 用户证书,每行末尾均需要增加显式换行符\n sk 是 String 用户私钥,每行末尾均需要增加显式换行符\n timestamp 是 String 时间戳 title 否 String 名称 identifier 是 String 标识 attributes 否 Array of Attribute objects 属性信息 issuer 是 String 签发者身份标识 表2 Attribute 参数 是否必选 参数类型 描述 name 否 String 名称 type 否 String 类型 description 否 String 描述信息
  • 请求示例 { "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", "title" : "string", "identifier" : "string", "attributes" : [ { "name" : "name", "type" : "someType", "description" : "Identity number" } ], "issuer" : "did:example:ebfeb1f712ebc6f1c276e12ec21" }
  • SDK接口 表1 ContractStub合约信息&状态数据库访问接口 接口 说明 String funcName() 功能:获取智能合约请求中指定的智能合约函数名称 入参:无 返回值:智能合约函数名称 byte[][] parameters() 功能: 获取请求参数 入参:无 返回值:用户执行智能合约逻辑时传入的多个参数,每个参数以[]byte表示 String chainId() 功能:获取智能合约所在链ID 入参:无 返回值:链ID String contractName() 功能:获取智能合约名称 入参:无 返回值:智能合约名称 byte[] getKv(String key) throws ContractException 功能:获取状态数据库中某个key对应的value; 入参:某个键值对的key信息,只支持string类型,不可为空 返回值:value值,目前只支持[]byte类型;当key不存在时,value为null 抛出异常:当网络出错,消息超时等,抛出异常 void putKv(String key, byte[] value) throws ContractException 功能:写状态数据库操作,此接口只是将key、value形成写集,打包到交易中,只有当交易排序、出块、并校验通过之后,才会将key/value写入到状态数据库中 入参:要写入的键值对,要求key != "",并且value != null 抛出异常:当网络出错,消息超时等,抛出异常 void delKv(String key) throws ContractException 功能:删除状态数据库中的key及其对应的value,此接口只是将待删除的key放入写集,打包到交易中,只有当交易排序、出块、并校验通过之后,才会将key删除 入参:要删除的key,要求key != "" 抛出异常:当网络出错,消息超时等,抛出异常 Iterator getIterator(String startKey, String endKey) throws ContractException 功能:查询状态数据库中,按字典序,以startKey开头,以endKey结尾的所有状态数据,结果以迭代器的形式呈现;注意,查询范围是左闭右开的,[startKey, endKey) 例如:startKey="11",endKey="14",所有key都是整数的话,则查询的结果中,key值包括:"11","12","13",不包括"14" 入参:startKey是待查询状态数据的按字典序的起始key,startKey != "",endKey是待查询的状态数据的按字典序的结束key,endKey!= ""; 返回值:Iterator是查询结果的迭代器,可以通过此迭代器,按顺序读取查询结果 抛出异常:当网络出错,消息超时等,抛出异常 HistoryIterator getKeyHistoryIterator(String key) throws ContractException 功能:查询一个key对应的所有历史的value 例如:一个key的value曾经为1,2,3,当前value为4,则返回的迭代器结果中按顺序包含了1,2,3,4 入参:key是待查询历史value值的key信息,key != "" 返回值:HistoryIterator是按顺序包含了历史value结果的迭代器结构体变量 抛出异常:当网络出错,消息超时等,抛出异常 void saveComIndex(String indexName, String[] attributes, String objectKey) throws ContractException 功能:为objectKey保存索引信息,indexName_attributes_objectKey构成索引信息,注意,此处只是形成索引信息的写集,只有当含有此写集的交易经过排序、出块,并校验通过后,才会写入状态数据库 例如:存储key/value信息,key="zhangsan",value={height=175, sex="male"},如果以sex="male"作为查询条件,查询所有的key/value, 则需要反序列化所有的value,性能损耗较大,因此,为当前key/value建立一个sex相关的索引:indexName="sex",attributes=[]string{"male"},objectKey="zhangsan, 入参:indexName 索引标记,indexName != "",attributes需要当做索引的属性,至少包含一个属性信息,objectKey 待索引的key值,objectKey != "" 抛出异常:当网络出错,消息超时等,抛出异常 Iterator getKvByComIndex(String indexName, String[] attributes) throws ContractException 功能:通过索引信息,查找满足某种查询条件的key/value,key/value以迭代器的形式输出 入参:indexName 索引标记,indexName != "",attributes需要当做索引的属性,至少包含一个属性信息 返回值:满足索引条件的key/value的迭代器变量 抛出异常:当网络出错,消息超时等,抛出异常 void delComIndexOneRow(String indexName, String[] attributes, String objectKey) throws ContractException 功能:删除objectKey的某个索引,indexName_attributes_objectKey构成索引信息,注意,此处只是形成索引信息的写集,只有当含有此写集的交易经过排序、出块,并校验通过后,才会写入状态数据库 入参:indexName 索引标记,indexName != "",attributes需要当做索引的属性,至少包含一个属性信息,objectKey 待索引的key值,objectKey != "" 抛出异常:当网络出错,消息超时等,抛出异常 表2 Iterator迭代器接口 接口 说明 boolean next() throws ContractException 功能:检查迭代器中是否还有下一个key/value 入参:无 返回值:bool值,true代表还有下一个值 抛出异常:当网络出错,消息超时等,抛出异常 String key() throws ContractException 功能:从迭代器中获取key 入参:无 返回值:key值 抛出异常:当网络出错,消息超时等,抛出异常 byte[] value() throws ContractException 功能:从迭代器中获取value 入参:无 返回值:value值类型为字节数组 抛出异常:当网络出错,消息超时等,抛出异常 void close() 功能:使用完迭代器之后,需要关闭迭代器 入参:无 抛出异常:当网络出错,消息超时等,抛出异常 表3 HistoryIterator查询某个key历史value信息的迭代器接口 接口 说明 long blockNum(); 功能:获取当前迭代位置(某笔交易)的 BlockNum 入参:无 int txNum(); 功能:获取当前迭代位置(某笔交易)的 TxNum 入参:无 byte[] txHash(); 功能:获取当前迭代位置((某笔交易))的hash 入参:无 boolean isDeleted(); 功能:被查询的key,当前是否已经在状态数据库中被删除 入参:无 long timestamp(); 功能:返回当前迭代位置(某笔交易)的时间戳 入参:无 父主题: JAVA合约开发
  • 响应示例 状态码: 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" }
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 证书 sk 是 String 私钥 timestamp 是 String 时间戳 provider 是 String 数据集发布者身份标识 productID 是 String 数据集产品id
  • 响应参数 状态码: 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参数 参数 参数类型 描述 oldSecretJson String 旧ABE主私钥 oldPublicKeyJson String 旧ABE主公钥 newSecretJson String 新ABE主私钥 newPublicKeyJson String 新ABE主公钥 状态码: 500 表3 响应Body参数 参数 参数类型 描述 errorCode String 错误码 errorMsg String 错误描述
共100000条