华为云用户手册

  • 常用API接口 Fabric-sdk-go的主要入口是FabricSDK类,这个可以通过NewSDK()方法分别可以生成。 Fabric-sdk-go的常用操作基本都可以用这四个client实现:FabricClient,ChannelClient,ChannelMgmtClient,ResourceMgmtClient。 FabricSDK FabricSDK在pkg\fabsdk\fabsdk.go中,通过New ()方法生成object。New ()方法支持可变参数Option,以下是生成FabricSDK的例子: var opts []fabsdk.Option opts = append(opts, fabsdk.WithOrgid(org)) opts = append(opts, fabsdk.WithUserName("Admin")) sdk, err = fabsdk.New(config.FromFile(configFile), opts...) configFile是SDK配置文件的路径。OrgId是SDK配置文件中的组织id。 FabricSDK在def/fabapi/fabapi.go中,通过NewSDK()方法生成object。NewSDK()方法有一个Options参数,以下是生成Options参数的例子: deffab.Options{ConfigFile: configFile, LoggerFalogging.LoggerProvider(), UserName: sysadmin} ConfigFile是SDK配置文件的路径。LoggerFactory是可选的,不提供的话default会log到console。 FabricClient FabricClient主要有以下常用的接口。 接口名称 描述 参数值 返回值 CreateChannel 创建Channel的接口,用于创建channel。 request CreateChannelRequest txn.TransactionID, error QueryChannelInfo 查询Channel的接口,用于查询Channel的信息。 name string, peers []Peer Channel, error InstallChaincode 安装链码的接口,安装链码到 区块链 中。 request InstallChaincodeRequest []*txn.TransactionPropos lResponse, string, error InstallChaincode 安装链码的接口,安装链码到区块链中。 request InstallChaincodeRequest []*txn.TransactionPropos lResponse, string, error QueryChannels 查询channel的接口,查询区块链中已创建的通道。 peer Peer *pb.ChannelQueryResponse, error QueryInstalledChaincodes 查询已安装链码的接口,查询区块链中已安装的链码。 peer Peer *pb.ChaincodeQueryResponse, error ChannelClient ChannelClient主要包括链码查询和链码调用两类接口。 接口名称 描述 参数值 返回值 Query 链码查询接口,调用链码进行查询。 request QueryRequest []byte, error QueryWithOpts 带options的链码查询接口,与Query类似,但是可以通过QueryOpts指定notifier, peers,和timeout。 request QueryRequest, opt QueryOpts []byte, error ExecuteTx 链码调用接口,用于链码的调用。 request ExecuteTxRequest TransactionID, error ExecuteTxWithOpts 带options的链码调用接口,与ExecuteTx类似,但是可以通过ExecuteTxOpts指定notifier, peers,和timeout。 request ExecuteTxRequestopt ExecuteTxOpts TransactionID, error ChannelMgmtCLient ChannelMgmtClient 只有两个接口SaveChannel(req SaveChannelRequest) error 和SaveChannelWithOpts(req SaveChannelRequest, opts SaveChannelOpts) error 这两个接口是用于创建channel用的,这两个接口里面具体实现会调用到FabricClient里createChannel()接口。 ResourceMgmtClient ResourceMgmtClient主要就是与链码生命周期相关的接口和一个peer加入通道的接口。 链码的删除接口为 BCS 增加的接口,目前只实现了删除链码安装包的功能。 接口名称 描述 参数值 返回值 InstallCC 安装链码,用于安装链码。 reqInstallCCRequest []InstallCCResponse, error InstallCCWithOpts 带options的链码安装,与InstallCC类似,但是可以通过InstallCCOpts指定peers。 reqInstallCCRequest,opts InstallCCOpts []InstallCCResponse, error InstantiateCC 实例化链码接口,用于实例化链码。 channelID string,reqInstantiateCCRequest error InstantiateCCWithOpts 带options的链码实例化,与InstantiateCC类似,但是可以通过InstantiateCCOpts指定peers和timeout。 channelID string,reqInstantiateCCRequest, optsInstantiateCCOpts error UpgradeCC 升级链码,用于链码的升级。 channelID string,reqUpgradeCCRequest error UpgradeCCWithOpts 带options的链码升级,与UpgradeCC类似,但是可以通过UpgradeCCOpts指定peers和timeout。 channelID string,reqUpgradeCCRequest, optsUpgradeCCOpts error DeleteCC 删除链码,用于链码的删除,目前只有删除安装包的功能。 channelID string,reqDeleteCCRequest error DeleteCCWithOpts 带options的链码删除,与DeleteCC类似,但是可以通过DeleteCCWithOpts指定peers和timeout。 channelID string,reqDeleteCCRequest,opts DeleteCCOpts error JoinChannel Peers加入Channel的接口,用于peers加入Channel。 channelID string error JoinChannelWithOpts 带options的Peers加入Channel的接口,与JoinChannel类似,但是可以通过JoinChannelOpts指定peers。 channelID string,optsJoinChannelOpts error 带options的接口都可以指定peers,peers可通过def/fabapi/pkgfactory.go 里的NewPeer(userName string, orgName string, url string, certificate string, serverHostOverride string, config config.Config) (fab.Peer, error) 生成。这个method比原生的NewPeer多两个参数userName, orgName, 这两个参数用于peer双向tls找到对应的tls证书。
  • ValidateInitBalance 接口原型 func ValidateInitBalance(BalanceInfo, PubKey string) (InitBalance string, err error) 功能描述 校验sdk.InitBalance生成的balanceinfo中余额证明的有效性。 输入说明 参数名 类型 描述 是否必须 BalanceInfo string 初始余额数据 是 Pubkey string 余额加密的公钥信息 是 输出说明 参数名 类型 描述 是否必须 InitBalance string 初始余额密文 是 err error 错误信息 是 处理说明 验证余额有效后,返回余额的密文。 注意事项 这里用户余额真实性由用户的app逻辑保证,Chaincode端无法验证该用户的真实金额,只能验证该金额是大于0的范围。
  • ValidateTxInfo 接口原型 ValidateTxInfo(txInfo, cipherBalanceA, cipherBalanceB string) (newCipherBalanceA,newCipherBalanceB,newCipherTxA,newCipherTxB string,err error) 功能描述 校验PrepareTxInfo生成的Txinfo中交易证明的有效性。 输入说明 参数名 类型 描述 是否必须 txinfo string 交易证明数据 说明: 交易信息数据包含有交易密文数据和交易证明数据,该信息来源于sdk.PrepareTxInfo返回的txinfo信息。 是 cipherBalanceA string A当前的交易余额(密文) 是 cipherBalanceB string B当前的交易余额(密文) 是 输出说明 参数名 类型 描述 newCipherBalanceA string 交易后待更新的A的余额 newCipherBalanceB string 交易后待更新的B的余额 newCipherTxA string 交易金额(A的同态加密公钥加密) newCipherTxB string 交易金额(B的同态加密公钥加密) err error 错误 注意事项 这里A是转账方,B是收款方。
  • 功能介绍 可信数据交换基于分布式身份实现,参与数据交换的用户需要注册分布式身份,详细方法请参见分布式身份(公测)。 可信数据涉及两个主要数据结构:数据集和数据订单。数据集包括数据描述信息、访问控制信息(属性加密中的策略)等。数据订单包括数据申请、审核信息等。 可信数据交换支持三种模式:申请-授权、主动分享和细粒度访问控制。详细请参见模式介绍。 可信交换中的 数据加密 后支持多种存储服务,用户可以根据业务需要自己选择。调用者负责将密文数据存储到公开可访问的存储设备中。
  • 利用合约查询数据 查询请求消息构建 接口函数 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。 父主题: Go SDK介绍
  • 简介 本指导文档主要针对具备Go/Java开发经验的人员进行开发指导,其中合约与应用程序需客户自行开发,整体开发流程如下: 本文档主要包含以下内容: 合约开发,Go语言、Java合约、Solidity合约。 SDK介绍,主要介绍Java、Golang语言SDK。 应用程序开发,介绍Java、Golang语言客户端开发流程与示例Demo。 开发流程中的其他操作,请参考: 华为云区块链实例购买 合约安装 下载配置文件 父主题: 华为云区块链引擎管理
  • 合约结构 AssemblyScript语言合约主要包括index.ts和contract.ts两个文件,其中index.ts为开发智能合约文件(contract.ts)依赖的合约SDK,合约涉及的业务相关开发仅在contract.ts文件,智能合约文件contract.ts需要根据实际业务进行开发。 合约SDK(index.ts)主要结构如下: // 引入智能合约文件 import { invoke, init } from "./contract";// 合约的初始化(wasm_init)接口。包含合约文件的init()接口,合约启动时,需要首先执行且只需要执行一次的逻辑放到合约文件init()接口中。export function wasm_init(buffer_offset: i32, size: i32):void{ // 实际调用合约文件的init()接口} // 合约被调用(wasm_invoke)接口。包含合约文件的invoke()接口,供合约使用者通过SDK的wasm_invoke接口调用。export function wasm_invoke(buffer_offset: i32, size: i32):void{ // 实际调用合约文件的invoke()接口}// 合约被调用(wasm_prepare)接口,保持为空即可。export function wasm_prepare():void{} 智能合约文件(contract.ts)主要结构如下: // 引入合约SDK方法 import { FuncName, smlog, Str2ArrayBuffer, Parameters, PutKV, ArrayBuffer2Str, GetKV, DelKV, MakeErrRes,MakeSuccessRes, Response,IteratorNew, IteValue, IteKey, IteNext, IteratorFree } from "./index"// 智能合约的初始化(init)接口的实现。export function init(txid:string):Response{}// 智能合约被调用(invoke)接口的实现。export function invoke(txid:string):Response{} 父主题: Wasm合约开发(AssemblyScript)
  • Init初始化余额 当用户注册成功后,需要初始化该用户的余额,默认为0。 输入说明 参数名 类型 描述 是否必须 PubKey string 公钥 是 Balance string 初始金额 是 处理 调用ValidateInitBalance,校验balance范围有效性,完成余额背书。 PubKey := string(args[0])BalanceInfo := string(args[1]) //PubKey := string(args[2])hashPubkey, err := t.calcAddr(PubKey)logger.Debug("encrypt initial balance")//validate balancecipherBalance,err := pswapi_cc.ValidateInitBalance(BalanceInfo,PubKey) if err != nil { logger.Error("fail to Validate InitBalance ") return shim.Error("fail toValidate InitBalance") } 输出说明 参数名 类型 描述 newCipherBalance string 余额密文
  • Transfer转账 输入说明 参数名 类型 描述 是否必须 AddrA string A-转账者地址 是 AddrB string B-收账者地址 是 txinfo String 交易信息PrepareTxInfo 是 处理说明 根据账户地址获取账本中A,B的当前余额cipherBalanceAKeyABlock, cipherBalanceBKeyBBlock。 校验证明有效性。 newCipherBalanceA,newCipherBalanceB,newCipherTxA,newCipherTxB, err := pswapi_cc.ValidateTxInfo(txInfo, cipherBalanceAKeyABlock, cipherBalanceBKeyBBlock) if err != nil { logger.Error("fail to validate trans information") return shim.Error("fail to validate trans information") } 输出更新后的余额(密文) 业务的账本内容需要用户定制,将上面加密的金额合入到用户的账本中保存,demo中定义了一个存储结构,保存完后通过json序列化为一个交易记录对象进行保存。 type TransRecord struct { FromAddr string ToAddr string TXType string Balance string TX string remark string }
  • InitBalance 接口原型 func InitBalance(balanceStr string, pubKey string) (string, error) 功能描述 初始化余额。 输入说明 参数名 类型 描述 是否必须 pubKey string 公钥串 是 balanceStr string 初始余额,只支持大于等于0的正整数,如果数字有小数,需要扩大倍数传入 是 输出说明 参数名 类型 描述 balanceInfo string 交易金额信息 err error 返回错误 注意事项 无。
  • Add 接口原型 func Add(cipher1, cipher2 string) (cipher string, err error) 功能描述 同态加法。 输入说明 参数名 类型 描述 是否必须 cipher1 string 被加密的密文1 是 cipher2 string 被加密的密文2 是 输出说明 参数名 类型 描述 cipher string 相加后的数据 err error 返回错误 注意事项 无。
  • PrepareTxInfo 接口原型 func PrepareTxInfo(cipherBalanceA string, transNumStr string, pubKeyA, pubKeyB string, privKeyA string,pwd string) (string, error) 功能描述 交易准备。 输入说明 参数名 类型 描述 是否必须 cipherBalanceA string A的当前余额(密文),取链上当前A的余额 是 transNumStr string 转账金额(明文) 是 pubKeyA string A的公钥串 是 pubKeyB string B的公钥串 是 PrivKeyA string A的私钥串 是 pwd string 用于加密保护的字符串 否 输出说明 参数名 类型 描述 Txinfo string 交易准备数据 err error 返回错误 注意事项 无。
  • Encypt 接口原型 func Encypt (secretNumStr string, pubKeyStr string) (ciphertext string, err error) 功能描述 同态加密。 输入说明 参数名 类型 描述 是否必须 secretNumStr string 需要加密的数值,只支持大于等于0的正整数,如果数字有小数,需要扩大倍数传入。 是 pubKeyStr String 同态加密的公钥 是 输出说明 参数名 类型 描述 ciphertext string 加密后的数据 err error 返回错误 注意事项 无。
  • Decrypt 接口原型 func Decrypt(ciphertext string, privKeyStr string, pwd string) (plainText *big.Int, err error) 功能描述 同态解密。 输入说明 参数名 类型 描述 是否必须 ciphertext string 需要解密的密文 是 privKeyStr string 同态加密的私钥串(被pwd加密保护 是 pwd string 用于保护私钥的字符串 否 输出说明 参数名 类型 描述 plainText *big.int 解密后的数据 err error 返回错误 注意事项 无。
  • 附录 fabric-sdk-client/go依赖的第三方包列表: 序号 包名 1 github.com/Knetic/govaluate 2 github.com/VividCortex/gohistogram 3 github.com/cloudflare/cfssl 4 github.com/go-kit/kit 5 github.com/golang/mock 6 github.com/golang/protobuf 7 github.com/hashicorp/hcl 8 github.com/hyperledger/fabric-config 9 github.com/hyperledger/fabric-lib-go 10 github.com/hyperledger/fabric-protos-go 11 github.com/magiconair/properties 12 github.com/miekg/pkcs11 13 github.com/mitchellh/mapstructure 14 github.com/pelletier/go-toml 15 github.com/pkg/errors 16 github.com/prometheus/client_golang 17 github.com/spf13/afero 18 github.com/spf13/cast 19 github.com/spf13/jwalterweatherman 20 github.com/spf13/pflag 21 github.com/spf13/viper 22 github.com/stretchr/testify 23 github.com/tjfoc/gmsm 24 google.golang.org/grpc 25 gopkg.in/yaml.v2 父主题: 国密加密
  • 部署应用 下载SDK和证书。 在“实例管理”页面,选择“Hyperledger Fabric增强版”页签,单击对应实例卡片上的“获取客户端配置”。 勾选“SDK文件”,SDK配置参数如下: 参数名称 说明 链代码名称 chaincodedemo 证书存放路径 /home/user/gatewayjavademo/config 通道名称 channel 组织&Peer节点 选择通道中所有节点组织 勾选“共识节点证书”。 勾选“Peer节点证书”,指定节点组织选择organization,勾选“管理员证书”。 单击“下载”,下载SDK配置文件、demo-orderer组织的管理员证书和organization组织的管理员证书。 复制并解压。 先下载工程源代码gatewayjavademo.zip文件并解压。 获取方法:登录区块链服务管理控制台,进入“应用案例”,在“Java示例Demo-Java SDK Demo”下方,单击“App_Gateway_Java_Demo”中Java项目源码的“下载”按钮。 将1步骤中的zip文件解压,把configs文件夹中的orderer文件夹、peer文件夹、sdk-config.json、sdk-config.yaml文件全部复制到gatewayjavademo目录下的config目录下。然后再将gatewayjavademo目录压缩成gatewayjavademo.zip包。 部署应用。 将新压缩的gatewayjavademo工程源代码gatewayjavademo.zip文件上传到CloudIDE开发环境中。 CloudIDE编译工程如下所示: 打开工程后等待一会,会自动下载工程依赖的包,然后按下图操作执行Run,就会得到预期结果。 gatewayjavademo工程中config目录下demo-channel-sdk-config.yaml文件,必须与gatewayjavademo/src/main/java/handler/Main.java和MainForMultiTask文件中helper.setConfigCtx("config/demo-channel-sdk-config.yaml")代码路径相同,保证可以正常运行Main.java。 客户端app交易的时候,如果指定了未实例化的组织和peer,那么首次交易会超时失败,请您重新运行即可正常交易。 每次成功执行Main.java,将会执行basicTransactionSample、commitListenerSample、contractListenerSample、blockListenerSample四个方法,向区块链存入多对键值对;可以通过区块链浏览器可以查看交易记录。
  • 准备工作 开通CloudIDE(或者用户自己准备JDK、maven和eclipse/IntelliJ IDEA)。 CloudIDE是软件开发生产线 CodeArts的云端开发环境服务,向开发者提供按需配置、快速获取的工作空间(包含编辑器和运行环境)。 在CloudIDE上创建一个空的Java工程,如图1所示。 图1 CloudIDE上创建一个空的Java工程 下载Java SDK示例源码,获取方法:登录区块链服务管理控制台,进入“应用案例”,在“Java示例Demo-Java SDK Demo”下方,单击“App_Gateway_Java_Demo”中Java项目源码的“下载”按钮。 购买区块链实例、安装链代码及实例化链代码操作,请参见《快速入门》。
  • 概述 用户的应用程序通过链代码与账本数据进行交互。应用程序开发可使用的语言比较广泛,如Golang、Solidity、Java、C++、Python、Node.js等。应用程序和链代码开发语言无强对应关系,只要应用程序能通过SDK来调用链代码即可。 Hyperledger Fabric增强版对应用程序开放的接口均为gRPC协议,与开源版本保持一致,通常使用SDK进行调用,详情可参考Hyperledger Fabric增强版SDK接口定义。 Java语言,请参考Java SDK使用指导。 Python语言,请参考Python使用指导。 Node.js语言,请参考Node.js SDK使用指导。 Go语言,请参考Go SDK使用指导。 父主题: 应用程序开发
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 channel_id String 通道id block_height Integer 区块高度 transaction_num Integer 交易数量 状态码: 400 表4 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_message String 错误描述 error_msg String 错误描述
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 用户证书,每行末尾均需要增加显式换行符\n sk 是 String 用户私钥,每行末尾均需要增加显式换行符\n timestamp 是 String 时间戳 vcIndex 是 String 凭证索引 owner 是 String 凭证所有者身份标识
  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 isOwned Boolean 是否拥有 状态码: 400 表3 响应Body参数 参数 参数类型 描述 errorCode String 错误码 最小长度:8 最大长度:36 errorMsg String 错误描述 最小长度:2 最大长度:512 状态码: 500 表4 响应Body参数 参数 参数类型 描述 errorCode String 错误码 最小长度:8 最大长度:36 errorMsg String 错误描述 最小长度:2 最大长度:512
  • 响应示例 状态码: 200 VCVerifyResponeParams Information { "isOwned" : true} 状态码: 400 失败响应 { "errorCode" : "B CS .4002030", "errorMsg" : "Owner(bol) does not have credential ..."} 状态码: 500 失败响应 { "errorCode" : "BCS.5002014", "errorMsg" : "Internal Server Error"}
  • 请求示例 { "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", "vcIndex" : 1, "owner" : "did:example:ebfeb1f712ebc6f1c276e12ec21"}
  • Demo工程目录 合约开发和调测可参考合约示例Demo,单击链接获取AssemblyScript语言合约工程Demo。 build目录下optimized.wasm为合约编译后对应的wasm字节码文件(最终合约类型文件为optimized.wasm压缩成的*.zip包,合约示例Demo)。 assembly/index.ts 为开发智能合约文件(contract.ts)依赖的合约SDK。 assembly/contract.ts 为智能合约文件,本Demo中合约仅进行简单展示(实际合约文件contract.ts需自行开发)。 合约文件的安装请参考合约管理。 AssemblyScript语言类型合约不支持查询指定键的历史数据。 父主题: 示例Demo
  • 合约编译 下载Node.js软件并安装,安装成功后,执行如下命令查看对应版本(软件对应版本无强制要求)。 node -vnpm -v 设置新目录assembly,在该目录下执行 npm init 命令,其中package name输入为assembly(目录名、package name建议保持一致,具体名称无强制要求,可自行定义)。 执行如下命令通过npm安装加载器和编译器 npm install --save @assemblyscript/loader npm install --save-dev assemblyscript 若安装过程中出现“ idealTree:assembly: sill idealTree buildDeps”,请确认npm使用镜像源可正常访问。 查看npm镜像源配置命令 npm config get registry 设置npm镜像源配置命令 npm config set registry 国内镜像源地址 执行如下命令,利用编译器提供的脚手架设置新项目 npx asinit . 参考示例Demo完成合约文件contract.ts编写与合约SDK文件index.ts引用后,执行build命令编译AssemblyScript类型的合约文件,编译成功后在build目录下生成optimized.wasm字节码文件(该字节码文件可重新命名)。 npm run asbuild 父主题: 示例Demo
  • 资源下载 表1 库列表 配套社区Hyperledger Fabric版本 库版本 下载链接 Fabric 1.1.0、Fabric 1.4.0、Fabric 2.2 1.8.5 同态加密库 1.9.2 同态加密库 1.11.5 同态加密库 同态加密链代码下载 IDChaincode.go Chaincode库接口文件下载 api_ahe_cc.tar.gz 须知: 需要选择与本地编译环境相一致版本的包。例如本地使用的go编译器为1.8.5,则下载1.8.5版本的库。 使用同态加密库需要提前安装好国密SDK。 api_ahe_cc.tar.gz包仅用于本地编译。
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 证书 sk 是 String 私钥 timestamp 是 String 时间戳 consumer 是 String 订单申请者身份标识 orderSeq 是 String 订单序列号 orderStatus 是 Integer 设置订单状态(0完成,1失败,2取消) reason 否 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", "orderStatus" : 0, "reason" : "string"}
  • 响应示例 状态码: 200 Success { "transaction_summary" : { "block_number" : 29, "transaction_id" : "6d704b217e17e16de71029b70f17a1ced35c055279f655dfd096bebf978a0546", "channelName" : "channel", "creator_msp" : "282f3c713ea1cec646aa7c640defca9c4f64bd88MSP", "type" : "ENDORSER_TRANSACTION", "chaincode_name" : "kvtest", "chaincode_version" : "1.0", "timestamp" : "2021-01-20T19:30:28+08:00", "organization_name" : "organization" }, "validation_code" : "VALID", "endorser_organizations" : [ "282f3c713ea1cec646aa7c640defca9c4f64bd88MSP" ], "proposal_hash" : "k1h2ewweWGrWNmmcu7UvzJ8Aw2G190SQzV+lBAAl4gw=", "read_set" : { "kvtest" : null, "lscc" : [ { "key" : "kvtest", "version" : { "block_num" : 2 } } ] }, "write_set" : { "kvtest" : [ { "key" : "a1", "is_delete" : false, "value" : "1" } ], "lscc" : [ ] }} 状态码: 400 Bad Request { "error_code" : "BCS.4000013", "error_message" : "request body is too large"}
  • 响应参数 状态码: 200 表6 响应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,如果没有加入任何流程,为“” encryptData String base64编码的数据密文 状态码: 500 表7 响应Body参数 参数 参数类型 描述 errorCode String 错误码 errorMsg String 错误描述
共99354条