华为云用户手册

  • 示例Demo 应用程序开发需要使用go mod,因此请确保GO111MODULE为on、镜像源配置。请确保可正常访问华为云镜像网站,环境设置命令如下 go env -w GO111MODULE=ongo env -w GOPROXY=https://repo.huaweicloud.com/repository/goproxy/go env -w GONOSUMDB=* Go语言示例Demo基于Go SDK开发,主要用于帮助开发人员理解并开发Go客户端应用程序,使用步骤如下: 单击链接下载客户端示例[链接]。 单击链接下载客户端所使用的Go SDK[链接]。 添加Go SDK文件到客户端示例Demo目录下,完成Go SDK配置。 完成客户端初始化参数配置(utils/config.go),详情可参考SDK客户端配置。 示例Demo项目结构如下: 表1 示例Demo目录结构 文件 介绍 huaweichain Go语言客户端SDK,相关介绍请参考Go SDK介绍。 main.go Go语言客户端主程序。 contract.go 通过合约对业务数据交互。对数据有修改的操作如插入和删除,需要调用其中的send方法。对数据的查询操作如查询某个键的历史,需要调用其中的query方法。 block.go 用于从区块上获取数据。 tx.go 用于从交易上获取数据。 config.go 客户端的初始化配置。 readme.md 提供详细的接口调用示例。 父主题: Go应用程序开发
  • 组织解密 接口方法 func (client *GatewayClient) DecryptDataWithE2EE(consensusOrgID, decOrgID string, txID string) (data string, err error) 参数说明 参数 类型 说明 consensusOrgID string 共识组织ID decOrgID string 执行解密操作的组织ID。 txID string 密文对应的交易ID。 返回值 参数 类型 说明 data string 解密后的明文信息。 err error 解密成功返回nil,否则返回error。 父主题: Go SDK介绍
  • 文件上链 接口方法 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配置和证书。 父主题: 应用程序开发
共100000条
提示

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