云服务器内容精选

  • 简介 在使用 区块链 服务时,您需要开发自己的链代码和应用。本文档主要介绍链代码的开发及其应用配置,支持具备Go/Java开发经验的开发人员使用。 区块链服务使用流程如下: 图1 使用流程 购买区块链实例 Fabric架构版本的区块链实例支持在CCE集群和边缘集群上部署,具体可参见基于CCE集群。 开发链代码 链代码是用Go、Java或Node.js语言编写的程序,主要用于操作账本上的数据,具体可参见链代码开发。 安装、实例化链代码 区块链服务为您提供界面化链代码管理功能,包括链代码安装、实例化等,具体可参见链代码管理。 下载SDK配置和证书 应用程序开发前,您需要获取对应实例的SDK配置文件和证书,具体可参见下载SDK配置和证书。 开发应用程序 您需要自行开发应用程序业务逻辑代码。针对Fabric架构版本的区块链实例,应用开发过程中可使用 BCS 提供的国密加密SDK,也可使用Fabric官方社区提供的和您自身的实例版本匹配的SDK,具体可参见应用程序开发。 另外,Fabric架构版本的区块链实例提供同态加密库供您使用,相关资料及资源请参见同态加密。 如果您对业务链代码和客户端APP的设计和开发有需求,可以联系华为云区块链合作伙伴提供进一步服务,华为云区块链合作伙伴会结合您的业务以及华为云的优势和特点为您提供完善的解决方案,联系邮箱如下:sales@huaweicloud.com 父主题: Hyperledger Fabric增强版管理
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 peer_num Number peer数量 chaincodes Number 合约数量 block_num Number 区块数量 transaction_num Number 交易数量 bph Array of bph objects 区块产生数量统计,按小时统计 bpm Array of bpm objects 区块产生数量统计,按每5分钟统计 tph Array of tph objects 合约交易数量统计,按小时统计 tpm Array of tpm objects 合约交易数量统计,按每5分钟统计 orgs_map Array of orgs_map objects 组织交易统计 peers_list Array of peers_list objects peer列表 表4 bph 参数 参数类型 描述 block Number 区块数量 time String 时间 表5 bpm 参数 参数类型 描述 block Number 区块数量 time String 时间 表6 tph 参数 参数类型 描述 tx Number 交易数量 time String 时间 表7 tpm 参数 参数类型 描述 tx Number 交易数量 time String 时间 表8 orgs_map 参数 参数类型 描述 org_name String 组织名称 tx_num Number 交易数量 表9 peers_list 参数 参数类型 描述 org_name String 组织名称 org_id String 组织ID peer String Peer名称 url String PeerURL status String Peer状态 状态码: 400 表10 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_message String 错误描述 error_msg String 错误描述
  • 基于SDK开发流程 初始化:创建SDK实例对象,然后进行初始化。可以通过以下两种方式进行初始化: 使用标准模板配置文件,调用 init 接口。 调用接口自定义设置属性,包括:msp设置、TLS设置、节点信息设置。 构造消息:由于消息类型较多,所以根据消息类型进行了消息类型进行封装,在构造消息之前,必须先获取消息类型对象,然后再基于获取对象中对应的方法封装消息。 获取节点:获取消息发送节点对象。 发送消息:所有的发送接口都封装在节点类中,发送消息时,先获取节点,再调用节点的消息发送对象获取方法。不同的消息对应不同的构建接口,同理,消息发送接口也根据接口类型进行了分装,在发送消息前,必须先获取接口类型对象,然后再基于获取对象中对应的方法发送消息。 结果解析:服务端返回的消息中,均包含交易最后执行结果的标志位,以此判断交易是否执行成功。若结果为不成功,则info字段还包含了错误原因,用于分析定位。 结果监听:对于业务交易和投票类型等需要落盘的交易,即使消息发送成功,后续落盘时还可能产生各种校验失败,导致交易无效。因此还需要监听交易是否最终落盘成功。
  • SDK逻辑结构 SDK主要提供消息封装、发送模块及相应的配套组件。配套组件主要包含异常处理、配置文件解析、节点获取等功能接口。 消息封装 由于消息类型较多,因此按类型进行了分类封装。消息封装相关接口均在build这个包下面,包含了ContractRawMessage、QueryRawMessage这几种消息构造的封装类。 ContractRawMessage:包含交易背书、落盘两阶段消息的构建。 QueryRawMessage:包含所有查询相关接口的消息构建,目前支持交易详情查询、链状态查询、区块查询、合约信息查询等接口。 消息发送 同消息封装类接口,按类型进行了分类封装。消息发送相关接口均包含在action这个包下面,包含了ContractAction、QueryAction、EventAction这几种消息发送的封装类。 ContractAction:对应ContractRawMessage封装的消息的发送。 QueryAction:对应QueryRawMessage中封装的消息的发送。 EventAction:主要用于监听消息的最终状态,因为参数仅包含交易ID,消息封装的方法直接内置。同时所有的消息发送接口均提供同步和异步两种接口。 同步接口入参均为需要发送的消息,返回值为一个ListenableFuture对象,用于监听消息发送结果。 异步接口则传入需要发送消息的同时,还需要传入一个StreamObserver对象,用于异步获取消息发送结果。
  • SDK说明 华为云区块链引擎目前提供Java、Golang两种语言SDK,区块链服务启动时会启动一系列grpc接口,监听客户端发送的消息,与客户端交互完成各种请求。在开发客户端时,如果从底层grpc接口开始,进行各种消息封装、消息发送、返回值解析等工作,不仅会导致开发量过大,并且造成重复劳动。 SDK则是将区块链服务提供的各种grpc接口进行封装,同时封装各接口所需类型的消息。在开发客户端时,只需要关注自己的业务逻辑,调用相应接口封装并发送消息即可,不需要关注底层消息发送接收的具体过程。 SDK中相关方法的使用示例,可参考应用程序开发对应语言的示例Demo。 SDK在不同环境下支持的实例安全机制如下: windows环境:ECDSA linux环境:国密算法、ECDSA
  • 响应示例 状态码: 200 分布式身份文档结构体 { "context" : "https://www.w3.org/ns/did/v1", "id" : "did:example:ebfeb1f712ebc6f1c276e12ec21", "publicKey" : [ { "id" : "string", "type" : "string", "controller" : "string", "publicKeyPem" : "string" } ], "authentication" : [ "did:example:ebfeb1f712ebc6f1c276e12ec21#key-0" ], "recovery" : "string", "service" : [ { "id" : "did:example:ebfeb1f712ebc6f1c276e12ec21#xdi", "type" : "XdiService", "serviceEndpoint" : "https://xdi.example.com/8377464", "credentialApplySchema" : { "type" : "LegalCitizen", "name" : "LegalCitizen", "description" : "Certified Chinese citizens", "attributes" : [ { "name" : "name", "type" : "someType", "description" : "Identity number" } ] } } ], "proof" : { "creator" : "did:example:ebfeb1f712ebc6f1c276e12ec21", "type" : "RsaSignature2018", "created" : "1606720551", "signatureValue" : "eyJhbGciOiJSUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0I PAYuNzVBAh4vGHSrQyHUdBBPM" }, "created" : "1588921521", "updated" : "", "status" : "active"} 状态码: 500 失败响应 { "errorCode" : "B CS .5002034", "errorMsg" : "request timed out or been cancelled"}
  • 请求示例 { "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"}
  • 响应参数 状态码: 200 表2 响应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 状态 表3 DocPublicKey 参数 参数类型 描述 id String 公钥标识 type String 公钥类型 controller String 公钥的控制者标识 publicKeyPem String 公钥证书 表4 Service 参数 参数类型 描述 id String 服务标识 type String 服务类型 serviceEndpoint String 服务介绍网址 credentialApplySchema CredentialApplySchema object 申请凭证所需数据的Schema 表5 CredentialApplySchema 参数 参数类型 描述 type String 类型 name String 名称 description String 描述信息 attributes Array of Attribute objects 属性列表 表6 Attribute 参数 参数类型 描述 name String 名称 type String 类型 description String 描述信息 表7 Proof 参数 参数类型 描述 creator String 创建者身份标识 type String 签名类型 created String 签名创建时间 signatureValue String 签名值 状态码: 500 表8 响应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 时间戳 did 是 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"}
  • 请求示例 /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" } ]}