华为云用户手册

  • 文件上链 接口方法 func (bc *BsClient) UploadFile(filePath, fileName string) (*UploadFileResponse, error) 参数说明 参数 类型 说明 filePath string 待上链文件在本地的路径。当前支持不大于100MB的任意格式文件。 fileName string 文件在链上的名称。不允许包含 "/"。 返回值 类型 说明 *UploadFileResponse 文件上链返回信息。 error 上链成功返回类型为nil,反之返回error。 父主题: Go SDK介绍
  • 合约示例 进入在线编译器 https://remix.ethereum.org 创建solidity合约文件,并粘贴示例合约。 pragma solidity ^0.4.26;contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; } function get() public view returns (uint) { return storedData; }} 编译solidity合约,并复制bytecode结构体中的object值为合约字节码。 {"linkReferences": {},"object":"***","opcodes": "****","sourceMap": "****"} 父主题: Solidity合约开发
  • 请求消息 表1 请求参数 参数 是否必选 参数类型 描述 channelId 是 String 区块链 通道ID chaincodeId 是 String 链代码ID chaincodeVersion 否 String 链代码版本 userId 是 String 由组织CA签发的用户ID,目前区块链服务默认生成的都为User1 orgId 是 String 区块链组织ID orgPeers 是 String 由组织中每个节点的组织ID和 域名 组成的数组,形如: [{"orgId":"7258adda1803f4137eff4813e7aba323018200c5","peerDomainName":"peer-7258adda1803f4137eff4813e7aba323018200c5-0.peer-7258adda1803f4137eff4813e7aba323018200c5.default.svc.cluster.local"}] opmethod 是 String 区块链链码调用类型,目前只有两类调用方法:invoke和query。 args 是 String 链码调用参数,形如:["invoke","a","b","1"] timestamp 是 String 格式为2018-10-31T17:28:16+08:00 cert 是 String 用户的证书文件,以字符串形式上传 以上参数获取方式,详细参见用户指南中的链代码管理和区块浏览器章节。 在链代码管理页面中,单击链代码名称前的,展开链代码详细信息,您可以查看当前链代码的版本列表、安装列表和实例化情况。 在区块浏览器页面中,在通道下拉框中选择一个通道,下方的数据即可实时刷新供您查看多项数据。区块链相关信息的查询功能,包括区块数量、交易数量、区块详细信息、交易详细信息、性能数据及节点状态等。 为了保证交易安全性,需要使用Fabric用户证书(证书获取方式请见下载用户证书)中的私钥对请求消息体进行签名(目前只支持椭圆曲线,暂不支持国密等其他加密算法),并将签名结果放到消息头部x-bcs-signature-sign字段。 链码REST API自定义了一些消息头,请参见表2。 表2 自定义消息头 名称 是否必选 描述 x-bcs-signature-sign 是 链码调用请求消息体签名。 x-bcs-signature-method 是 加密类型,目前固定是SW。 x-bcs-signature-sign-gzip 是 Sign是否选择Gzip压缩。0表示否,1表示是。 x-bcs-signature-sign:为了保证只允许有权限的调用端才能够进行合法的链码调用,需要使用下载用户证书中下载的用户私钥以ECDSA椭圆曲线的加密方式对整个请求消息体的SHA256摘要进行加密签名,x-bcs-signature-sign值即为签名结果。
  • 示例 下面是调用invoke类型的链代码示例。 请求示例 { "channelId": "testchannel", "chaincodeId": "zmmcode", "chaincodeVersion": "1.0", "userId": "User1", "orgId": "7258adda1803f4137eff4813e7aba323018200c5", "orgPeers": "[{\"orgId\":\"7258adda1803f4137eff4813e7aba323018200c5\",\"peerDomainName\":\"peer-7258adda1803f4137eff4813e7aba323018200c5-0.peer-7258adda1803f4137eff4813e7aba323018200c5.default.svc.cluster.local\"}]", "opmethod": "invoke", "args": "[\"invoke\",\"a\",\"b\",\"1\"]", "timestamp": "2018-10-31T17:28:16+08:00", "cert": "-----BEGIN CERTIFICATE-----\nMIIDBzCCAq2gAwIBAgIQEXPZlMsReamxVtVNnKwCCzAKBggqhkjOPQQDAjCCAQQx\nDjAMBgNVBAYTBUNISU5BMRAwDgYDVQQIEwdCRUlKSU5HMRAwDgYDVQQHEwdCRUlK\nSU5HMXkwdwYDVQQKE3A3MjU4YWRkYTE4MDNmNDEzN2VmZjQ4MTNlN2FiYTMyMzAx\nODIwMGM1LnBlZXItNzI1OGFkZGExODAzZjQxMzdlZmY0ODEzZTdhYmEzMjMwMTgy\nMDBjNS5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsMVMwUQYDVQQDE0pjYS5wZWVy\nLTcyNThhZGRhMTgwM2Y0MTM3ZWZmNDgxM2U3YWJhMzIzMDE4MjAwYzUuZGVmYXVs\ndC5zdmMuY2x1c3Rlci5sb2NhbDAeFw0xODEwMzAwMjQ5MjZaFw0yODEwMjcwMjQ5\nMjZaMIG1MQ4wDAYDVQQGEwVDSElOQTEQMA4GA1UECBMHQkVJSklORzEQMA4GA1UE\nBxMHQkVJSklORzF/MH0GA1UEAwx2VXNlcjFANzI1OGFkZGExODAzZjQxMzdlZmY0\nODEzZTdhYmEzMjMwMTgyMDBjNS5wZWVyLTcyNThhZGRhMTgwM2Y0MTM3ZWZmNDgx\nM2U3YWJhMzIzMDE4MjAwYzUuZGVmYXVsdC5zdmMuY2x1c3Rlci5sb2NhbDBZMBMG\nByqGSM49AgEGCCqGSM49AwEHA0IABPMrzoJL/MHeSFPFOJWLqnJ0sqB0it7wDIOq\n+eTSvvPpGk1BIDmb2n13K5V04RO8xNezDQ7I6rW4LF2elq14eH+jTTBLMA4GA1Ud\nDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIFBXQ5TC4acFeTlT\nJuDZg62XkXCdnOfvbejSeKI2TXoIMAoGCCqGSM49BAMCA0gAMEUCIQCadHIKl0Mk\nYn0WZizyDZYR4rT2q0nzjFaiW+YfV5FBjAIgNalKUe3rIwXJvXORV4ZXurEua2Ag\nQmhcjRnVwPTjpTE=\n-----END CERTIFICATE-----\n"} 响应示例 After invoke the count of a is 188 b is 262
  • 下载用户证书 进行API调用前,需要下载区块链服务中已经配置生成的用户证书。 登录华为云区块链服务控制台。 进入“实例管理”界面,可以看到已经购买的区块链实例卡片。 单击卡片上的“获取客户端配置”,勾选“Peer节点证书”。选择指定节点组织,勾选“用户证书”。 单击“下载”,下载相应组织的用户证书。 解压证书,其中msp文件夹中,keystore文件夹存储的是组织用户私钥,signcerts文件夹存储的是用户证书(公钥)。
  • URI GET /v2/agent/apis/channel/{channel_name}/blocks 表1 路径参数 参数 是否必选 参数类型 描述 channel_name 是 String 通道名称,名称长度限制:4-24,不能与系统通道名称(testchainid)相同 表2 Query参数 参数 是否必选 参数类型 描述 is_pagination 否 Boolean 是否分页,默认为否 offset 否 Integer 偏移量,默认为0 limit 否 Integer 每页显示的条目数量,默认为10,取值范围为1-50
  • 链代码相关的API Fabric源码包中的shim包提供了如下几种类型的接口,您可以参考使用: 参数解析API:调用链代码时需要给被调用的目标函数/方法传递参数,该API提供解析这些参数的方法。 账本状态数据操作API:该API提供了对账本数据状态进行操作的方法,包括对状态数据的查询及事务处理等。 交易信息获取API:获取提交的交易信息的相关API。 对PrivateData操作的API: Hyperledger Fabric在1.2.0版本中新增的对私有数据操作的相关API。 其他API:其他的API,包括事件设置、调用其他链代码操作。 父主题: Go语言链代码开发
  • 响应示例 状态码: 200 Success { "count" : 1, "data" : [ { "block_number" : 0, "block_hash" : "Yux2Ea0RNZM95+3R95mvdlI8mH1dvmTSTylPwwzMsbY", "transaction_count" : 1, "data_hash" : "+3B6RFfbQisE8zt2BeWTvCwP1JbmQLIPeQoiKxoCQVA", "previous_hash" : "FlEClYDQJ4cHaEslex9usupte0EqbHyymQ+zUaQcjyE", "timestamp" : "2021-01-20T14:38:39+08:00", "organization_maps" : "{\"d565e95144ae53b9b3f556de613513f257e720ecMSP\":49}" } ]} 状态码: 400 Bad Request { "error_code" : " BCS .4000013", "error_msg" : "request body is too large"}
  • 请求参数 表1 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token 表2 FormData参数 参数 是否必选 参数类型 描述 chaincode_name 是 String 链代码名称,以小写字母开头,支持小写字母和数字 chaincode_version 是 String 链代码版本,只允许使用数字、点(.)、横杠(-),必须以数字开头和结尾,且点和横杠不能相邻 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" : "B CS .4000013", "error_message" : "request body is too large"}
  • 响应示例 状态码: 200 Success { "peers" : { "peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5-0.peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5.default.svc.cluster.local" : { "org_name" : "organization", "org_id" : "a9e940a9e947e8af0c9c2fb98d0129e56210d6b5", "peer" : "peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5-0.peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5.default.svc.cluster.local", "peer_name" : "peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5-0", "url" : "100.95.146.117:30610", "channels" : [ "channel" ], "status" : "running" }, "peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5-1.peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5.default.svc.cluster.local" : { "org_name" : "organization", "org_id" : "a9e940a9e947e8af0c9c2fb98d0129e56210d6b5", "peer" : "peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5-1.peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5.default.svc.cluster.local", "peer_name" : "peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5-1", "url" : "100.95.146.117:30611", "channels" : [ "channel" ], "status" : "running" } }} 状态码: 400 Bad Request { "error_code" : "BCS.4000013", "error_message" : "request body is too large"}
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 证书 sk 是 String 私钥 timestamp 是 String 时间戳 consumer 是 String 订单申请者身份标识 orderSeq 是 String 订单序列号 encryptData 否 String 数据密文,当onChainStore设置为“true”时,可不输入 watermarkType 否 String 水印类型,visible明水印,blind暗水印,嵌入水印时,必须填写本字段。如果发布或主动分享数据集的时候嵌入的是暗水印,则无法再次嵌入暗水印。嵌入的水印内容为:使用人did_orderID。 onChainStore 否 String 数据密文是否在链上存储,可设置为“true”或“false”,默认为“false”。如果设置为“true”,则不需要输入encryptData,可自动在链上获取数据密文
  • 请求示例 { "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", "encryptData" : "base64 encoding string", "watermarkType" : "string", "onChainStore" : "string"}
  • 响应示例 状态码: 200 订单信息。 { "provider" : "did:example:DHkJjyD5wZwya6sd6BNBnG", "productID" : "product1", "plaintext" : "base64 encoding string"} 状态码: 500 失败响应 { "errorCode" : "BCS.5002046", "errorMsg" : "Incorrect number of arguments"}
  • 请求参数 表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 凭证数据明文
  • 请求示例 { "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}"}
  • URI GET /v2/agent/apis/channel/{channel_name}/transactions 表1 路径参数 参数 是否必选 参数类型 描述 channel_name 是 String 通道名称,名称长度限制:4-24,不能与系统通道名称(testchainid)相同 表2 Query参数 参数 是否必选 参数类型 描述 is_pagination 否 Boolean 是否分页,默认为否 offset 否 Integer 偏移量,默认为0 limit 否 Integer 每页显示的条目数量,默认为10,取值范围为1-50
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 count Integer 交易总数 data Array of TransactionSummary objects 交易 表5 TransactionSummary 参数 参数类型 描述 organization_name String 创建者组织 type String 交易类型 transaction_id String 交易id chaincode_name String 链码名称 timestamp String 时间戳 channel_name String 通道名称 creator_msp String 身份信息 chaincode_version String 链码版本 block_number Integer 区块号 状态码: 400 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_message String 错误描述 error_msg String 错误描述
  • 请求示例 默认模式请求 GET https://192.168.0.90:30603/v2/agent/apis/channel/channel/transactions 分页模式请求 GET https://192.168.0.90:30603/v2/agent/apis/channel/channel/transactions?is_pagination=true&offset=1&limit=50
  • 响应示例 状态码: 200 Success { "count" : 1, "data" : [ { "block_number" : 0, "transaction_id" : "", "channel_name" : "channel", "creator_msp" : "e784724be5ed75f59b2809e4f0965a10679ae113MSP", "type" : "CONFIG", "chaincode_name" : "", "chaincode_version" : "", "timestamp" : "2021-01-20T14:38:27+08:00", "organization_name" : "orderer" } ]} 状态码: 400 Bad Request { "error_code" : "BCS.4000013", "error_msg" : "request body is too large"}
  • 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升级与变更
  • 链代码相关的API Fabric源码包中的shim包提供了如下几种类型的接口,您可以参考使用: 参数解析API:调用链代码时需要给被调用的目标函数/方法传递参数,该API提供解析这些参数的方法。 账本状态数据操作API:该API提供了对账本数据状态进行操作的方法,包括对状态数据的查询及事务处理等。 交易信息获取API:获取提交的交易信息的相关API。 其他API:其他的API,包括事件设置、调用其他链代码操作。 父主题: Java语言链代码开发
  • 组织加密 接口方法 func (client *GatewayClient) EncryptDataWithE2EE(consensusOrgID, encOrgID string, decOrgIDs []string, data string, options ...interface{}) (txID string, err error) 参数说明 参数 类型 说明 consensusOrgID string 共识组织ID encOrgID string 执行加密操作的组织ID。 decOrgIDs []string 除了执行加密操作的组织ID以外,可以解密该消息的组织ID列表。 data string 需要加密的数据明文。 options interface{} 其他选项,目前支持输入一个bool类型,用于指定加密后,是否更新群组密钥。 返回值 参数 类型 说明 txID string 加密后返回密文对应的交易ID,解密时输入交易ID可以获得对应明文。 err error 加密成功返回nil,否则返回error。 父主题: Go SDK介绍
  • 概述 目前区块链智能合约编写门槛高,开发人员需要掌握区块链基础知识以及对底层区块链支持的合约语言有所了解,同时编写出高效和安全的智能合同需要拥有丰富的经验;并且在处理业务合约时,操作人员需实时监控链上交易以获取业务流程进展,增加了业务管理流程和编程人员的开发工作量。 本功能旨在提升区块链的易用性,消除开发人员对区块链知识和智能合约编程的依赖,同时创新性地以业务为维度提供流程管理功能,让区块链操作人员更多地关注于业务本身,提供简单便捷、安全可靠的区块链业务开发和流程管理功能。 图1 系统逻辑 若需要使用该功能,请联系技术支持工程师。 父主题: 区块链应用低代码开发功能
  • 配置组织ID Fabric架构版本的区块链实例: 您需要修改应用程序中配置实例组织ID的相关代码,下载证书文件解压后的peer文件包括目录名和对应组织ID。 如下图所示,仅供示例参考,请以实际操作的证书文件为准。 证书文件解压后目录名是6c448740d50d6197dc86b36b0abd0bc639a788a7.peer,组织ID为6c448740d50d6197dc86b36b0abd0bc639a788a7。 图1 证书文件解压
  • 开发前准备 用户的应用程序通过链代码与账本数据进行交互。应用程序开发可使用的语言比较广泛,如Golang、Solidity、Java、C++、Python、Node.js等。应用程序和链代码开发语言无强对应关系,只要应用程序能通过SDK来调用链代码即可。 您需要购买区块链实例。 Fabric架构版本的区块链实例支持在CCE集群和边缘集群上部署,具体可参见基于CCE集群。 您需要获取对应实例的SDK配置文件,具体可参见下载SDK配置和证书。 父主题: 应用程序开发
  • 配置SDK文件 您需要修改应用程序中SDK配置文件相关代码,如下面示例所示,您需要填写正确的SDK配置文件绝对路径。 var ( configFile = "/root/gosdkdemo/config/go-sdk-demo-channel-sdk-config.yaml" org = " 6c448740d50d6197dc86b36b0abd0bc639a788a7" )
  • 低代码合约开发 传统的智能合约开发需要开发人员使用底层区块链支持的合约语言进行相关业务开发和测试,开发人员不仅要求具备一定的编程能力,还需具备区块链等相关知识以保障合约的安全性。华为区块链提供低代码开发能力,开发人员仅需要根据实际业务画出业务流程建模符号(Business Process Modeling Notation,简称BPMN)和少量辅助功能代码的开发,即可完成安全可靠的智能合约编写。 通过设计以下模块实现低代码开发和部署: BPMN业务图绘制 BCS提供的BPMN绘制页面简单易用,用户通过拖拽方式将开始事件、活动、网关、连接对象、结束事件、泳道等组合起来,通过实际业务逻辑绘制定制化BPMN业务图。其中,用户仅需编写少量业务需要的代码和查询功能代码即可完成智能合约的制作。通过绘制页面可实时验证BPMN的有效性,验证无误后单击构建,生成智能合约。 智能合约部署 Package Management界面用于智能合约的管理,用户登录业务管理页面后跳转到该界面,可查看和管理已生成的智能合约。通过对生成的智能合约选择背书策略、安装合约的组织等配置,完成合约的安装和实例化,智能合约最终运行在背书节点中的一个Docker容器内。 智能合约触发 实例化后的智能合约,可以通过外部条件来触发合约执行过程,支持事件触发和交易触发的方式,两种模式均会触发背书节点进行一致性共识,避免恶意节点作恶。 智能合约变更 业务更替升级后,用户绘制新的BPMN业务图并改变版本号,构建新版本的智能合约,重新部署合约即完成智能合约的变更。为保证安全性,合约的变更需要一定数量的背书节点达成共识后才能完成。 父主题: 区块链应用低代码开发功能
共99354条