全部产品

原生存证接口

为方便存证场景的开发,合约平台提供原生存证交易接口以实现存证目的。

存证交易

depositData

存证交易,同步方式调用。

  • 函数原型
  1. public MychainBaseResult<ReplyTransactionReceipt> depositData(DepositDataRequest request)
  • 请求参数
参数 必选 类型 说明
request true DepositDataRequest 存证交易的请求
  • 返回字段
返回字段 字段类型 说明
result MychainBaseResult<ReplyTransactionReceipt> MychainBaseResult 持有所有 response 类型
  • 示例:
  1. // 存证数据
  2. private static String depositData() {
  3. // 准备参数 params
  4. MychainParams params = new MychainParams.Builder()
  5. .gas(BigInteger.valueOf(4000000))
  6. .privateKeyList(adminPrivateKeys)
  7. .build();
  8. // 存证数据,实际中可根据需求序列化目标数据到 byte[] 传入,ByteUtils 是Java SDK提供的工具库
  9. byte[] data = ByteUtils.hexStringToBytes("0x1234");
  10. DepositDataRequest depositDataRequest = DepositDataRequest.build(adminAccount.getIdentity(),
  11. adminAccount.getIdentity(), BigInteger.ZERO, data, params);
  12. MychainBaseResult<ReplyTransactionReceipt> depositDataResult = sdk.getAccountService().depositData(depositDataRequest);
  13. if (!depositDataResult.isSuccess() || depositDataResult.getData().getTransactionReceipt().getResult() != 0) {
  14. exit("depositData", getErrorMsg((int)depositDataResult.getData().getTransactionReceipt().getResult()));
  15. }
  16. return depositDataResult.getTxHash();
  17. }
  18. // 查询存证数据
  19. private static String queryDepositData(String hash) {
  20. // 存证后,如果需要查询存证数据,可通过 QueryTransaction 传入存证交易的 hash 查询
  21. MychainBaseResult<ReplyTransaction> queryTxResult = sdk.getQueryService().queryTransaction(hash);
  22. if (!queryTxResult.isSuccess()) {
  23. exit("depositData", queryTxResult.getData().getErrorCode().toString());
  24. }
  25. // 通过 QueryTransaction 查询到存证交易,证明交易发生,通过 QueryTransactionReceipt 可以验证交易成功(return_code 为0),共识后进入区块
  26. MychainBaseResult<ReplyTransactionReceipt> queryTxReceiptResult = sdk.getQueryService().queryTransactionReceipt(hash);
  27. if (!queryTxReceiptResult.isSuccess() || queryTxReceiptResult.getData().getTransactionReceipt().getResult() != 0) {
  28. exit("depositData", getErrorMsg((int)queryTxReceiptResult.getData().getTransactionReceipt().getResult()));
  29. }
  30. // 查询存证内容,转换为hex 返回
  31. return ByteUtils.toHexString(queryTxResult.getData().getTransactionDO().getData());
  32. }

asyncDepositData

存证交易,异步方式调用。

  • 函数原型
  1. public MychainBaseResult<Response> asyncDepositData(DepositDataRequest request, ICallback callback)
  • 请求参数
参数 必选 类型 说明
request true DepositDataRequest 存证的请求
callback true ICallback 回调函数
  • 返回字段
返回字段 字段类型 说明
result MychainBaseResult<ReplyTransactionReceipt> MychainBaseResult 持有所有 response 类型

注意:存证交易的 data 数据大小有上限限制,此限制为合约链的一个配置选项,通常默认 1 MB,实际根据合约链的配置情况而定。

示例:

  1. private static void depositDataAsync() {
  2. // 准备参数 params
  3. MychainParams params = new MychainParams.Builder()
  4. .gas(BigInteger.valueOf(4000000))
  5. .privateKeyList(adminPrivateKeys)
  6. .build();
  7. // 存证数据,实际中可根据需求序列化目标数据到 byte[] 传入,ByteUtils 是 Java SDK 提供的工具库
  8. byte[] data = ByteUtils.hexStringToBytes("0x1234");
  9. DepositDataRequest request = DepositDataRequest.build(adminAccount.getIdentity(),
  10. adminAccount.getIdentity(), BigInteger.ZERO, data, params);
  11. MychainBaseResult<Response> depositDataResult = sdk.getAccountService().asyncDepositData(request, new ICallback() {
  12. @Override
  13. public void onResponse(String txHash, Response response) {
  14. System.out.println("depositDataAsync, txHash:" + txHash + ", result: "
  15. + response.getErrorCode());
  16. // 存证后,如果需要查询存证数据,可通过 QueryTransaction 传入存证交易的 hash 查询
  17. MychainBaseResult<ReplyTransaction> queryTxResult = sdk.getQueryService().queryTransaction(txHash);
  18. if (!queryTxResult.isSuccess()) {
  19. exit("depositDataAsync", queryTxResult.getData().getErrorCode().toString());
  20. }
  21. // 查询存证内容,转换为 hex
  22. System.out.println("depositDataAsync success: " + ByteUtils.toHexString(queryTxResult.getData().getTransactionDO().getData()));
  23. }
  24. });
  25. }

存证交易的请求参数

DepositDataRequest,具体参数如下表所示。

存证交易请求所需要的参数如下表所示。

参数 类型 说明
identity Identity 交易发起者的 identity
identity Identity 目标账户 identity
value BigInteger 转账金额
data byte[] 待存储数据,可自定义数据内容,然后序列化存证,存证后读取数据再反序列化。
value MychainParams 接口通用扩展参数

注意:存证交易的 data 数据大小有上限限制,此限制为合约链的一个配置选项,通常默认 1 MB,实际根据合约链的配置情况而定。

存证交易的返回参数

DepositDataResponse,具体参数如下表所示。

参数 类型 说明
transactionReceipt TransactionReceipt 交易收据
blockNumber BigInteger 区块号