本节介绍BaaS REST在密钥托管模式下支持的查询类、交易类的接口能力,并提供各接口能力的使用示例。
查询类接口
由于查询类接口不存在签名,因此和链上账户无关,密钥非托管模式下的查询类接口对于托管账号依然能够使用。
查询交易回执
根据交易Hash查询交易回执
根据交易Hash查询交易回执内容,方法名称:QUERYRECEIPT。
请求参数
参数名
必选
类型
说明
method
是
string
方法名称:QUERYRECEIPT
bizid
是
string
链ID
hash
是
string
交易hash
secretKey
否
string
使用通用隐私保护合约链发起交易时,需要自定义设置secretKey,例如:123456,如果不需要设置传空。
请求示例
CallRestBizParam callRestBizParam = CallRestBizParam.builder(). method(Method.QUERYRECEIPT). // 查询交易回执方法标识 hash(txHash). // 交易Hash,16进制编码字符串 bizid(blockChainId). // 链ID,若未设置:使用客户端配置默认链 secretKey(secretKey). // TEE链加密密钥 build(); BaseResp baseResp = restClient.chainCallForBiz(callRestBizParam); if (baseResp.isSuccess()) { // 解析返回的交易回执 ReceiptDecoration receipt = JSON.parseObject(baseResp.getData(), ReceiptDecoration.class); // ... }
返回参数
参数名
类型
说明
success
boolean
请求是否成功
code
string
状态码
data
string
交易的JSON串,可以转换为ReceiptDecoration结构,result为业务结果
根据订单ID查询交易回执
根据订单ID查询交易回执内容,方法名称:QUERYRECEIPTBIZ。
请求参数
参数名
必选
类型
说明
method
是
string
方法名称:QUERYRECEIPTBIZ
tenantId
是
string
租户ID
bizid
是
string
链ID
orderId
是
string
业务方的唯一性请求标识,用于重试去重。该参数有唯一性校验,当请求参数发生变化或接口发生变化时,需确保每次传入的值唯一,否则会引起调用失败。
secretKey
否
string
使用通用隐私保护合约链发起交易时,需要自定义设置secretKey,例如:123456,如果不需要设置传空。
请求示例
CallRestBizParam callRestBizParam = CallRestBizParam.builder(). method(Method.QUERYRECEIPTBIZ). // 查询交易回执方法标识 orderId(orderId). // 业务方的唯一性请求标识 tenantid(tenantId). //租户ID bizid(blockChainId). // 链ID,若未设置:使用客户端配置默认链 secretKey(secretKey). // TEE链加密密钥 build(); BaseResp baseResp = restClient.chainCallForBiz(callRestBizParam); if (baseResp.isSuccess()) { // 解析返回的交易回执 ReceiptDecoration receipt = JSON.parseObject(baseResp.getData(), ReceiptDecoration.class); // ... }
返回参数
参数名
类型
说明
success
boolean
请求是否成功
code
string
状态码
data
string
交易的JSON串,可以转换为ReceiptDecoration结构,result为业务结果
查询交易
根据交易Hash查询交易
根据交易Hash查询交易内容,方法名称:QUERYTRANSACTION。
请求参数
参数名
必选
类型
说明
method
是
string
方法名称:QUERYTRANSACTION
bizid
是
string
链ID
hash
是
string
交易hash
secretKey
否
string
使用通用隐私保护合约链发起交易时,需要自定义设置secretKey,例如:123456,如果不需要设置传空。
请求示例
CallRestBizParam callRestBizParam = CallRestBizParam.builder(). method(Method.QUERYTRANSACTION). // 查询交易方法标识 hash(txHash). // 交易Hash,16进制编码字符串 bizid(blockChainId). // 链ID,若未设置:使用客户端配置默认链 secretKey(secretKey). // TEE链加密密钥 build(); BaseResp baseResp=restClient.chainCallForBiz(param); if(baseResp.isSuccess()) { // 解析返回的交易内容 ReplyTransaction transaction = JSON.parseObject(resp.getData(), ReplyTransaction.class); TransactionDO transactionDO = transaction.getTransactionDO(); // ... }
返回参数
参数名
类型
说明
success
boolean
请求是否成功
code
string
状态码
data
string
交易的JSON串,可以转换为ReplyTransaction结构,result为业务结果
根据订单ID查询交易
根据订单ID查询交易内容,方法名称:QUERYTRANSACTIONBIZ。
请求参数
参数名
必选
类型
说明
method
是
string
方法名称:QUERYTRANSACTIONBIZ
tenantId
是
string
租户ID
bizid
是
string
链ID
orderId
是
string
业务方的唯一性请求标识,用于重试去重。该参数有唯一性校验,当请求参数发生变化或接口发生变化时,需确保每次传入的值唯一,否则会引起调用失败。
secretKey
否
string
使用通用隐私保护合约链发起交易时,需要自定义设置secretKey,例如:123456,如果不需要设置传空。
请求示例
CallRestBizParam callRestBizParam = CallRestBizParam.builder(). method(Method.QUERYTRANSACTIONBIZ). // 查询交易方法标识 orderId(orderId). // 业务方的唯一性请求标识 tenantid(tenantId). //租户ID bizid(blockChainId). // 链ID,若未设置:使用客户端配置默认链 secretKey(secretKey). // TEE链加密密钥 build(); BaseResp baseResp=restClient.chainCallForBiz(param); if(baseResp.isSuccess()) { // 解析返回的交易内容 ReplyTransaction transaction = JSON.parseObject(resp.getData(), ReplyTransaction.class); TransactionDO transactionDO = transaction.getTransactionDO(); // ... }
返回参数
参数名
类型
说明
success
boolean
请求是否成功
code
string
状态码
data
string
交易的JSON串,可以转换为ReplyTransaction结构,result为业务结果
交易类接口
以下给出了KMS签名类的接口函数,并提供示例帮助理解。
在部署和调用合约时,建议您使用异步接口,同步接口仅在合约本地执行模式时使用。
通用使用流程说明:
如有需要,进行链上账户的创建,调用租户创建账户接口进行账户创建。
如果是存证业务
调用存证交易接口进行存证处理。
调用查询交易回执接口查询交易结果信息(使用orderId或者根据结果返回的交易Hash来查询)。
如果是合约,先确认自己的合约类型,根据不同的合约类型,进行不同的操作。
合约部署
同步/异步,建议使用异步,调用后,调用查询交易回执,判断合约部署结果(支持WASM合约和Solidity合约)。
合约调用
同步/异步,建议使用异步,调用后,调用查询交易回执,查询交易结果(所有合约类型均支持)。
合约升级
如有需要,可以进行合约升级,同步/异步,建议使用异步,调用后,调用查询交易回执,查询升级结果(支持WASM合约和Solidity合约)。
租户创建账户
租户创建密钥托管区块链账户,方法名称:TENANTCREATEACCUNT。
该方法从2.15.2版本开始支持。
请求参数
参数名
必选
类型
说明
orderId
是
string
业务方的唯一性请求标识,用于重试去重。该参数有唯一性校验,当请求参数发生变化或接口发生变化时,需确保每次传入的值唯一,否则会引起调用失败。
bizid
是
string
区块链ID
account
是
string
(执行创建的)区块链账户名
mykmsKeyId
是
string
(执行创建的)账户KMS ID
newAccountId
是
string
自定义新建区块链账户名
newAccountKmsId
是
string
自定义新建账户KMS ID
gas
否
Long
调用花费的最大的Gas,暂未启用,设置为0L
说明目前您只能通过调用CreateAntChainKmsAccountNew接口的方式创建第一个链上账户,同时可以在返回参数中得到对应账户的mykmsKeyId。
请求示例
CallRestBizParam createParam = CallRestBizParam.builder(). account(accountName). bizid(blockChainId). mykmsKeyId(kmsId). newAccountId(newAccountName). newAccountKmsId(newKmsId). method(Method.TENANTCREATEACCUNT). orderId(UUID.randomUUID().toString()). gas(0L). build(); BaseResp createResp = restClient.chainCallForBiz(createParam);
返回参数
参数名
类型
说明
success
boolean
请求是否成功
code
string
状态码
data
string
成功:新开账户公钥;
失败:提示信息。
(异步)存证交易
KMS签名异步存证交易,方法名称:DEPOSIT。
请求参数
参数名
必选
类型
说明
orderId
是
string
业务方的唯一性请求标识,用于重试去重。该参数有唯一性校验,当请求参数发生变化或接口发生变化时,需确保每次传入的值唯一,否则会引起调用失败。
bizid
是
string
链id
account
是
string
账户名
content
是
string
存证内容
mykmsKeyId
是
string
创建账户时使用的mykmsKeyId
method
是
- Method- 枚举
DEPOSIT
tenantid
是
string
租户id
gas
否
Long
调用花费的最大的Gas,暂未启用,设置为0L。
请求示例
String orderId = "order_" + System.currentTimeMillis(); CallRestBizParam callRestBizParam=CallRestBizParam.builder(). orderId(orderId). bizid(blockChainId). account(account). tenantid("mytenant"). content("test123"). mykmsKeyId(mykmsId). gas(0L). method(Method.DEPOSIT).build(); BaseResp baseResp=restClient.chainCallForBiz(callRestBizParam);
返回参数
参数名
类型
说明
success
boolean
请求是否成功
code
string
状态码
data
string
交易hash
返回示例
{ "code":"200", "data":"0a60fd52fd9d72cb02a8b970a96bd3050b610175296eae75557bd9b3a0b5****", "success":true }
WASM合约
同步部署WASM合约(慎用)
KMS签名同步部署WASM合约,方法名称:DEPLOYWASMCONTRACT。
请求参数
参数名
必选
类型
说明
method
是
- Method- 枚举
DEPLOYWASMCONTRACT
orderId
是
string
业务方的唯一性请求标识,用于重试去重。该参数有唯一性校验,当请求参数发生变化或接口发生变化时,需确保每次传入的值唯一,否则会引起调用失败。
bizid
是
string
链id
account
是
string
账户名
tenantid
是
string
租户id
contractName
是
string
合约名
contractCode
是
string
wasc文件的二进制数据经Base64编码后的字符串
mykmsKeyId
是
string
创建账户时使用的mykmsKeyId
methodSignature
否
string
初始化方法签名
inputParamListStr
否
string
初始化参数列表
secretKey
否
string
使用通用隐私保护合约链发起交易时,需要自定义设置secretKey,例如:123456,如果不需要设置传空。
gas
否
Long
调用花费的最大的Gas,暂未启用,设置为0L
请求示例
String orderId = "order_" + System.currentTimeMillis(); CallRestBizParam callRestBizParam=CallRestBizParam.builder(). orderId(orderId). bizid(blockChainId). account(account). tenantid("mytenant"). contractName("test_biz_deploy_wasm_contract"). contractCode(Base64.encodeBase64String(FileUtils.readFileToByteArray(new File("/Users/zhuming/workspace4j/baascryptotool/01027beta_copy/contracts/113_hello_world.wasc")))). mykmsKeyId(mykmsId). gas(0L). // secretKey("mySecretKey"). 使用tee链时候,指定加密密钥,后续调用合约、查询交易、查询回执的时候也要填上对应的密钥 method(Method.DEPLOYWASMCONTRACT).build(); BaseResp baseResp=restClient.chainCallForBiz(callRestBizParam);
返回参数
参数名
类型
说明
success
boolean
请求是否成功
code
string
状态码
data
string
交易的JSON串,只用关心txData.data.transactionReceipt.result结果即可,返回0表示成功
返回示例
{ "code":"200", "data":"{"txData":{"data":{"success":true,"transactionReceipt":{"output":...}", "success":true }
异步部署WASM合约(推荐)
KMS签名异步部署WASM合约,方法名称:DEPLOYWASMCONTRACTASYNC。
请求参数
参数名
必选
类型
说明
method
是
- Method- 枚举
DEPLOYWASMCONTRACTASYNC
orderId
是
string
业务方的唯一性请求标识,用于重试去重。该参数有唯一性校验,当请求参数发生变化或接口发生变化时,需确保每次传入的值唯一,否则会引起调用失败。
bizid
是
string
链id
account
是
string
账户名
tenantid
是
string
租户id
contractName
是
string
合约名
contractCode
是
string
wasc文件的二进制数据经Base64编码后的字符串
mykmsKeyId
是
string
创建账户时使用的mykmsKeyId
methodSignature
否
string
初始化方法签名
inputParamListStr
否
string
初始化参数列表
secretKey
否
string
使用通用隐私保护合约链发起交易时,需要自定义设置secretKey,例如:123456,如果不需要设置传空。
gas
否
Long
调用花费的最大的Gas,暂未启用,设置为0L
请求示例
String orderId = "order_" + System.currentTimeMillis(); CallRestBizParam callRestBizParam=CallRestBizParam.builder(). orderId(orderId). bizid(blockChainId). account(account). tenantid("mytenant"). contractName("test_biz_deploy_wasm_contract"). contractCode(Base64.encodeBase64String(FileUtils.readFileToByteArray(new File("/Users/zhuming/workspace4j/baascryptotool/01027beta_copy/contracts/113_hello_world.wasc")))). mykmsKeyId(mykmsId). gas(0L). // secretKey("mySecretKey"). 使用tee链时候,指定加密密钥,后续调用合约、查询交易、查询回执的时候也要填上对应的密钥 method(Method.DEPLOYWASMCONTRACTASYNC).build(); BaseResp baseResp=restClient.chainCallForBiz(callRestBizParam);
返回参数
参数名
类型
说明
success
boolean
请求是否成功
code
string
状态码
data
string
成功:交易哈希
失败:失败提示信息
同步升级WASM合约(慎用)
KMS签名同步升级WASM合约,方法名称:方法名称:UPDATECONTRACTFORBIZ
请求参数
参数名
必选
类型
说明
method
是
- Method- 枚举
UPDATECONTRACTFORBIZ
orderId
是
string
业务方的唯一性请求标识,用于重试去重。该参数有唯一性校验,当请求参数发生变化或接口发生变化时,需确保每次传入的值唯一,否则会引起调用失败。
bizid
是
string
链id
account
是
string
账户名
tenantid
是
string
租户id
contractName
是
string
合约名
contractCode
是
string
wasc文件的二进制数据经Base64编码后的字符串
mykmsKeyId
是
string
创建账户时使用的mykmsKeyId
vmTypeEnum
是
VMTypeEnum 枚举
VMTypeEnum.WASM
methodSignature
否
string
初始化方法签名
inputParamListStr
否
string
初始化参数列表
secretKey
否
string
使用通用隐私保护合约链发起交易时,需要自定义设置secretKey,例如:123456,如果不需要设置传空。
gas
否
Long
调用花费的最大的Gas,暂未启用,设置为0L。
请求示例
CallRestBizParam callRestBizParam = CallRestBizParam.builder(). contractCode(Base64.encodeBase64String(ByteUtils.hexStringToBytes(new String(FileUtils.readFileToByteArray(new File("具体文件地址")))))). account(account). bizid(blockChainId). tenantid("mytenant"). mykmsKeyId(mykmsId). contractName(CONTRACT_NAME). method(Method.UPDATECONTRACTFORBIZ). vmTypeEnum(VMTypeEnum.WASM). orderId(UUID.randomUUID().toString()). gas(0L). build(); BaseResp baseResp = restClient.chainCallForBiz(callRestBizParam);
返回参数
参数名
类型
说明
success
boolean
请求是否成功
code
string
状态码
data
string
交易的JSON串,只用关心txData.data.transactionReceipt.result结果即可,返回0表示成功
返回示例
{ "code":"200", "data":"{"txData":{"data":{"success":true,"transactionReceipt":{"output":...}", "success":true }
异步升级WASM合约(推荐)
KMS签名异步升级WASM合约,方法名称:UPDATECONTRACTFORBIZASYNC。
请求参数
参数名
必选
类型
说明
method
是
- Method- 枚举
UPDATECONTRACTFORBIZASYNC
orderId
是
string
业务方的唯一性请求标识,用于重试去重。该参数有唯一性校验,当请求参数发生变化或接口发生变化时,需确保每次传入的值唯一,否则会引起调用失败。
bizid
是
string
链id
account
是
string
账户名
tenantid
是
string
租户id
contractName
是
string
合约名
contractCode
是
string
wasc文件的二进制数据经Base64编码后的字符串
mykmsKeyId
是
string
创建账户时使用的mykmsKeyId
vmTypeEnum
是
VMTypeEnum 枚举
VMTypeEnum.WASM
methodSignature
否
string
初始化方法签名
inputParamListStr
否
string
初始化参数列表
secretKey
否
string
使用通用隐私保护合约链发起交易时,需要自定义设置secretKey,例如:123456,如果不需要设置传空。
gas
否
Long
调用花费的最大的Gas,暂未启用,设置为0L。
请求示例
CallRestBizParam callRestBizParam = CallRestBizParam.builder(). contractCode(Base64.encodeBase64String(ByteUtils.hexStringToBytes(new String(FileUtils.readFileToByteArray(new File("具体文件地址")))))). account(account). bizid(blockChainId). tenantid("mytenant"). mykmsKeyId(mykmsId). contractName(CONTRACT_NAME). method(Method.UPDATECONTRACTFORBIZASYNC). vmTypeEnum(VMTypeEnum.WASM). orderId(UUID.randomUUID().toString()). gas(0L). build(); BaseResp baseResp = restClient.chainCallForBiz(callRestBizParam);
返回参数
参数名
类型
说明
success
boolean
请求是否成功
code
string
状态码
data
string
- 成功:交易哈希- 失败:失败提示信息
同步调用WASM合约(慎用)
KMS签名同步调用WASM合约,方法名称:CALLWASMCONTRACT。
请求参数
参数名
必选
类型
说明
orderId
是
string
业务方的唯一性请求标识,用于重试去重。该参数有唯一性校验,当请求参数发生变化或接口发生变化时,需确保每次传入的值唯一,否则会引起调用失败。
bizid
是
string
链id
account
是
string
账户名
contractName
是
string
合约名
methodSignature
是
string
初始化方法签名
mykmsKeyId
是
string
创建账户时使用的mykmsKeyId
method
是
- Method- 枚举
CALLWASMCONTRACT
inputParamListStr
是
string
JSON串,方法的实参
outTypes
是
string
JSON串,返回参数类型列表
tenantid
是
string
租户id
secretKey
否
string
使用通用隐私保护合约链发起交易时,需要自定义设置secretKey,例如:123456,如果不需要设置传空。
gas
否
Long
调用花费的最大的Gas,暂未启用,设置为0L
isLocalTransaction
否
boolean
是否是本地交易模式(本地交易不消耗Gas,但会做Gas检查)
请求示例
String orderId = "order_" + System.currentTimeMillis(); CallRestBizParam callRestBizParam=CallRestBizParam.builder(). orderId(orderId). bizid(blockChainId). account(account). tenantid("mytenant"). contractName("test_biz_deploy_wasm_contract"). methodSignature("add(int64,int64)"). inputParamListStr("[1,2]"). outTypes("[\"int64\"]"). mykmsKeyId(mykmsId). gas(0L). // secretKey("mySecretKey"). 使用tee链时候,指定加密密钥,后续调用合约、查询交易、查询回执的时候也要填上对应的密钥 method(Method.CALLWASMCONTRACT).build(); BaseResp baseResp=restClient.chainCallForBiz(callRestBizParam);
返回参数
参数名
类型
说明
success
boolean
请求是否成功
code
string
状态码
data
string
JSON串,具体内容可以参考返回示例
返回示例
{ "code":"200", "data":"{"transaction":{"isSuccess":true,"txHash":"123de1231xxx","data":"{"transactionReceipt":{"result":0,"output":"xxxx"},"isSuccess":true}"},"outRes":[3]}", "success":true }
异步调用WASM合约(推荐)
KMS签名异步调用WASM合约,方法名称:CALLWASMCONTRACTASYNC。
请求参数
参数名
必选
类型
说明
orderId
是
string
业务方的唯一性请求标识,用于重试去重。该参数有唯一性校验,当请求参数发生变化或接口发生变化时,需确保每次传入的值唯一,否则会引起调用失败。
bizid
是
string
链id
account
是
string
账户名
contractName
是
string
合约名
methodSignature
是
string
初始化方法签名,格式为:
methodName(parameter1Type.parameter2Type,...,parameterNType)
例如:createPromoteOrder(string[])
mykmsKeyId
是
string
创建账户时使用的mykmsKeyId
method
是
- Method- 枚举
CALLWASMCONTRACTASYNC
inputParamListStr
是
string
JSON串,方法的实参
outTypes
是
string
JSON串,返回参数类型列表
tenantid
是
string
租户id
secretKey
否
string
使用通用隐私保护合约链发起交易时,需要自定义设置secretKey,例如:123456,如果不需要设置传空。
gas
否
Long
调用花费的最大的Gas,暂未启用,设置为0L
请求示例
String orderId = "order_" + System.currentTimeMillis(); List<Object> inputParams = new LinkedList<>(); List<Object> strings = new LinkedList<>(); strings.add("say"); strings.add("hello world"); inputParams.add(strings); List<String> outTypes = new LinkedList<>(); outTypes.add("string[]"); CallRestBizParam callRestBizParam = CallRestBizParam.builder(). orderId(orderId). bizid(blockChainId). account(account). tenantid("mytenant"). // secretKey("mySecretKey"). 使用tee链时候,指定加密密钥,后续调用合约、查询交易、查询回执的时候也要填上对应的密钥 contractName("test_biz_deploy_wasm_contract_order_1566384851226"). methodSignature("createPromoteOrder(string[])"). inputParamListStr(JSONArray.toJSONString(inputParams)). outTypes(JSONArray.toJSONString(outTypes)). mykmsKeyId(mykmsId). gas(0L). method(Method.CALLWASMCONTRACTASYNC).build(); BaseResp resp = restClient.callWasmContractAsyncWithReceipt(callRestBizParam);
返回参数
参数名
类型
说明
success
boolean
请求是否成功
code
string
状态码
data
string
JSON串,内容为数组,为函数返回的值,可能有多个
返回示例
{ "code":"200", "data":"[3,4,5]", "success":true }
Solidity合约
同步部署Solidity合约(慎用)
KMS签名同步部署Solidity合约,方法名称:DEPLOYCONTRACTFORBIZ。
请求参数
参数名
必选
类型
说明
method
是
- Method- 枚举
DEPLOYCONTRACTFORBIZ
orderId
是
string
业务方的唯一性请求标识,用于重试去重。该参数有唯一性校验,当请求参数发生变化或接口发生变化时,需确保每次传入的值唯一,否则会引起调用失败。
tenantid
是
string
租户id
bizid
是
string
链id
account
是
string
账户名
contractName
是
string
合约名
contractCode
是
string
Solidity经过solc编译后的合约码,16进制编码。
mykmsKeyId
是
string
创建账户时使用的mykmsKeyId
methodSignature
否
string
初始化方法签名
inputParamListStr
否
string
初始化参数列表
secretKey
否
string
使用通用隐私保护合约链发起交易时,需要自定义设置secretKey,例如:123456,如果不需要设置传空。
gas
否
Long
调用花费的最大的Gas,暂未启用,设置为0L
请求示例
String orderId = "order_" + System.currentTimeMillis(); CallRestBizParam callRestBizParam=CallRestBizParam.builder(). orderId(orderId). bizid(blockChainId). account(account). tenantid("mytenant"). // secretKey("mySecretKey"). 使用tee链时候,指定加密密钥,后续调用合约、查询交易、查询回执的时候也要填上对应的密钥 contractName("test_biz_deploy_contract"). contractCode("608060405234801561001057600080fd5b5060df8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b114604e5780636d4ce63c146078575b600080fd5b348015605957600080fd5b5060766004803603810190808035906020019092919050505060a0565b005b348015608357600080fd5b50608a60aa565b6040518082815260200191505060405180910390f35b8060008190555050565b600080549050905600a165627a7a72305820a254750a8c7dbd3a15120b489c010dee696498d84e7e33a1980c4d490f8c85d80029"). mykmsKeyId(mykmsId). method(Method.DEPLOYCONTRACTFORBIZ). gas(0L). build(); BaseResp baseResp=restClient.chainCallForBiz(callRestBizParam);
返回参数
参数名
类型
说明
success
boolean
请求是否成功
code
string
状态码
data
string
交易的JSON串,只用关心txData.data.transactionReceipt.result结果即可,返回0表示成功
返回示例
{ "code":"200", "data":"{"txData":{"data":{"success":true,"transactionReceipt":{"output":...}", "success":true }
异步部署Solidity合约(推荐)
KMS签名异步部署Solidity合约,方法名称:DEPLOYCONTRACTFORBIZASYNC。
请求参数
参数名
必选
类型
说明
method
是
- Method- 枚举
DEPLOYCONTRACTFORBIZASYNC
orderId
是
string
业务方的唯一性请求标识,用于重试去重。该参数有唯一性校验,当请求参数发生变化或接口发生变化时,需确保每次传入的值唯一,否则会引起调用失败。
tenantid
是
string
租户id
bizid
是
string
链id
account
是
string
账户名
contractName
是
string
合约名
contractCode
是
string
Solidity经过solc编译后的合约码,16进制编码。
mykmsKeyId
是
string
创建账户时使用的mykmsKeyId
methodSignature
否
string
初始化方法签名
inputParamListStr
否
string
初始化参数列表
secretKey
否
string
使用通用隐私保护合约链发起交易时,需要自定义设置secretKey,例如:123456,如果不需要设置传空。
gas
否
Long
调用花费的最大的Gas,暂未启用,设置为0L
请求示例
String orderId = "order_" + System.currentTimeMillis(); CallRestBizParam callRestBizParam=CallRestBizParam.builder(). orderId(orderId). bizid(blockChainId). account(account). tenantid("mytenant"). // secretKey("mySecretKey"). 使用tee链时候,指定加密密钥,后续调用合约、查询交易、查询回执的时候也要填上对应的密钥 contractName("test_biz_deploy_contract"). contractCode("608060405234801561001057600080fd5b5060df8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b114604e5780636d4ce63c146078575b600080fd5b348015605957600080fd5b5060766004803603810190808035906020019092919050505060a0565b005b348015608357600080fd5b50608a60aa565b6040518082815260200191505060405180910390f35b8060008190555050565b600080549050905600a165627a7a72305820a254750a8c7dbd3a15120b489c010dee696498d84e7e33a1980c4d490f8c85d80029"). mykmsKeyId(mykmsId). gas(0L). method(Method.DEPLOYCONTRACTFORBIZASYNC). build(); BaseResp baseResp=restClient.chainCallForBiz(callRestBizParam);
返回参数
参数名
类型
说明
success
boolean
请求是否成功
code
string
状态码
data
string
- 成功:交易哈希- 失败:失败提示信息
同步升级Solidity合约(慎用)
KMS签名同步升级Solidity合约,方法名称:方法名称:UPDATECONTRACTFORBIZ。
请求参数
参数名
必选
类型
说明
method
是
- Method- 枚举
UPDATECONTRACTFORBIZ
orderId
是
string
业务方的唯一性请求标识,用于重试去重。该参数有唯一性校验,当请求参数发生变化或接口发生变化时,需确保每次传入的值唯一,否则会引起调用失败。
bizid
是
string
链id
account
是
string
账户名
tenantid
是
string
租户id
contractName
是
string
合约名
contractCode
是
string
wasc文件的二进制数据经Base64编码后的字符串
mykmsKeyId
是
string
创建账户时使用的mykmsKeyId
vmTypeEnum
是
VMTypeEnum 枚举
VMTypeEnum.EVM
methodSignature
否
string
初始化方法签名
inputParamListStr
否
string
初始化参数列表
secretKey
否
string
使用通用隐私保护合约链发起交易时,需要自定义设置secretKey,例如:123456,如果不需要设置传空。
gas
否
Long
调用花费的最大的Gas,暂未启用,设置为0L
请求示例
CallRestBizParam callRestBizParam = CallRestBizParam.builder(). contractCode(Base64.encodeBase64String(ByteUtils.hexStringToBytes(new String(FileUtils.readFileToByteArray(new File("具体文件地址")))))). account(account). bizid(blockChainId). tenantid("mytenant"). mykmsKeyId(mykmsId). contractName(CONTRACT_NAME). method(Method.UPDATECONTRACTFORBIZ). vmTypeEnum(VMTypeEnum.EVM). orderId(UUID.randomUUID().toString()). gas(0L). build(); BaseResp baseResp = restClient.chainCallForBiz(callRestBizParam);
返回参数
参数名
类型
说明
success
boolean
请求是否成功
code
string
状态码
data
string
交易的JSON串,只用关心txData.data.transactionReceipt.result结果即可,返回0表示成功
返回示例
{ "code":"200", "data":"{"success":true,"transactionReceipt":{"output":...}", "success":true }
异步升级Solidity合约(推荐)
KMS签名异步升级Solidity合约,方法名称:UPDATECONTRACTFORBIZASYNC。
请求参数
参数名
必选
类型
说明
method
是
- Method- 枚举
UPDATECONTRACTFORBIZASYNC
orderId
是
string
业务方的唯一性请求标识,用于重试去重。该参数有唯一性校验,当请求参数发生变化或接口发生变化时,需确保每次传入的值唯一,否则会引起调用失败。
bizid
是
string
链id
account
是
string
账户名
tenantid
是
string
租户id
contractName
是
string
合约名
contractCode
是
string
wasc文件的二进制数据经Base64编码后的字符串
mykmsKeyId
是
string
创建账户时使用的mykmsKeyId
vmTypeEnum
是
VMTypeEnum 枚举
VMTypeEnum.EVM
methodSignature
否
string
初始化方法签名
inputParamListStr
否
string
初始化参数列表
secretKey
否
string
使用通用隐私保护合约链发起交易时,需要自定义设置secretKey,例如:123456,如果不需要设置传空。
gas
否
Long
调用花费的最大的Gas,暂未启用,设置为0L
请求示例
CallRestBizParam callRestBizParam = CallRestBizParam.builder(). contractCode(Base64.encodeBase64String(ByteUtils.hexStringToBytes(new String(FileUtils.readFileToByteArray(new File("具体文件地址")))))). account(account). bizid(blockChainId). tenantid("mytenant"). mykmsKeyId(mykmsId). contractName(CONTRACT_NAME). method(Method.UPDATECONTRACTFORBIZASYNC). vmTypeEnum(VMTypeEnum.EVM). orderId(UUID.randomUUID().toString()). gas(0L). build(); BaseResp baseResp = restClient.chainCallForBiz(callRestBizParam);
返回参数
参数名
类型
说明
success
boolean
请求是否成功
code
string
状态码
data
string
成功:交易哈希
失败:失败提示信息
同步调用Solidity合约(慎用)
KMS签名同步调用Solidity合约,方法名称:CALLCONTRACTBIZ。
请求参数
参数名
必选
类型
说明
method
是
- Method- 枚举
CALLCONTRACTBIZ
orderId
是
string
业务方的唯一性请求标识,用于重试去重。该参数有唯一性校验,当请求参数发生变化或接口发生变化时,需确保每次传入的值唯一,否则会引起调用失败。
tenantid
是
string
租户id
bizid
是
string
链id
account
是
string
账户名
contractName
是
string
合约名
methodSignature
是
string
方法签名,例如:set(uint256,uint256)
mykmsKeyId
是
string
创建账户时使用的mykmsKeyId
inputParamListStr
是
string
实参列表,例如:[1,2]
是
string
返回参数列表,例如:[]
secretKey
否
string
使用通用隐私保护合约链发起交易时,需要自定义设置secretKey,例如:123456,如果不需要设置传空。
gas
否
Long
调用花费的最大的Gas,暂未启用,设置为0L
isLocalTransaction
否
boolean
是否是本地交易模式(本地交易不消耗Gas,但会做Gas检查)
返回参数
参数名
类型
说明
success
boolean
请求是否成功
code
string
状态码
data
string
成功:交易回执;
失败:异常提示信息。
返回示例
{ "code":"200", "data":"df316046e205b2e13668092c9b3b2801827669931136046426c861f1d0dd****", "success":true }
异步调用Solidity合约(推荐)
KMS签名异步调用Solidity合约,方法名称:CALLCONTRACTBIZASYNC。
请求参数
参数名
必选
类型
说明
orderId
是
string
业务方的唯一性请求标识,用于重试去重。该参数有唯一性校验,当请求参数发生变化或接口发生变化时,需确保每次传入的值唯一,否则会引起调用失败。
bizid
是
string
链id
account
是
string
账户名
contractName
是
string
合约名
methodSignature
是
string
方法签名,例如:set(uint256,uint256)
mykmsKeyId
是
string
创建账户时使用的mykmsKeyId
method
是
- Method- 枚举
CALLCONTRACTBIZASYNC
inputParamListStr
是
string
实参列表,例如:[1,2]
outTypes
是
string
返回参数列表,例如:[]
tenantid
是
string
租户id
secretKey
否
string
使用通用隐私保护合约链发起交易时,需要自定义设置secretKey,例如:123456,如果不需要设置传空。
gas
否
Long
调用花费的最大的Gas,暂未启用,设置为0L
返回参数
参数名
类型
说明
success
boolean
请求是否成功
code
string
状态码
data
string
- 成功:交易hash,可以使用hash来查询交易以及回执- 失败:异常提示信息。
返回示例
{ "code":"200", "data":"df316046e205b2e13668092c9b3b2801827669931136046426c861f1d0dd****", "success":true }
解析合约返回参数
填写返回值类型,解析合约返回值内容。该方式需SDK在2.11版本以上。
请求参数
参数
必选
类型
说明
orderId
是
string
业务方的唯一性请求标识,用于重试去重。该参数有唯一性校验,当请求参数发生变化或接口发生变化时,需确保每次传入的值唯一,否则会引起调用失败。
bizid
是
string
链ID 开放联盟链为:a00e36c5
content
是
string
待解析密文
method
是
Method 枚举
PARSEOUTPUT
tenantid
是
string
租户 ID
vmTypeEnum
是
VMTypeEnum 枚举
EVM/WASM
abi
是
string
如下方式填写返回值类型,[\”string\”]
请求示例
BaseResp queryBaseResp = restClient.chainCall(hash, restClientProperties.getBizid(), "", Method.QUERYRECEIPT); String s = queryBaseResp.getData(); String output = s.substring(s.indexOf("output") + 9, s.indexOf("result")).replace("\"", "").replace(",", ""); byte[] content = Hex.encode(Base64.decode(output)); CallRestBizParam callRestBizParam = CallRestBizParam.builder(). bizid(blockChainId). method(Method.PARSEOUTPUT). tenantid("mytenant"). orderId(orderId). vmTypeEnum(VMTypeEnum.EVM). content(new String(content)). abi("[\"string\"]"). //TODO 合约返回值类型需自己根据合约修改 build(); BaseResp baseResp = restClient.chainCallForBiz(callRestBizParam); assert (baseResp.isSuccess()); System.out.println("show" + baseResp);
解析合约logData
该方法需SDK在2.15版本以上
EVM解析示例
//查询交易回执 hash为调用合约交易hash BaseResp queryBaseResp = restClient.chainCall("交易hash", restClientProperties.getBizid(), "", Method.QUERYRECEIPT); ReceiptDecoration transaction = JSON.parseObject(queryBaseResp.getData(), ReceiptDecoration.class); for (LogEntry log : transaction.getLogs()) { if(log.getLogData().length>0){ //传入回执中的logdata转换为EVMoutput EVMOutput logOutput = new EVMOutput(Hex.toHexString(log.getLogData())); //根据事件传入类型按顺序传值,如event test(string a,uint256 b); 则填写asList("string","uint256") List<Object> resultList = ContractParameterUtils.getEVMOutput(logOutput, asList("string")); for (Object o : resultList) { System.out.println(o.toString()); } } }
WASM解析示例
//查询交易回执 hash为调用合约交易hash BaseResp queryBaseResp = restClient.chainCall("交易hash", restClientProperties.getBizid(), "", Method.QUERYRECEIPT); ReceiptDecoration transaction = JSON.parseObject(queryBaseResp.getData(), ReceiptDecoration.class); for (LogEntry log : transaction.getLogs()) { if(log.getLogData().length>0){ //传入回执中的logdata转换为EVMoutput WASMOutput logOutput = new WASMOutput(Hex.toHexString(log.getLogData())); //根据事件传入类型按顺序传值,如event test(string a,uint256 b); 则填写new String[]{"string","uint256"} List<Object> resultList = WasmParaUtils.getWasmReturnValues(logOutput, new String[]{"string"})); for (Object o : resultList) { System.out.println(o.toString()); } } }