原生存证接口

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

存证交易

depositData

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

  • 函数原型

public MychainBaseResult<ReplyTransactionReceipt> depositData(DepositDataRequest request)
  • 请求参数

参数

必选

类型

说明

request

true

DepositDataRequest

存证交易的请求

  • 返回字段

返回字段

字段类型

说明

result

MychainBaseResult<ReplyTransactionReceipt>

MychainBaseResult 持有所有 response 类型

  • 示例:

// 存证数据
private static String depositData() {
        // 准备参数 params
        MychainParams params = new MychainParams.Builder()
                .gas(BigInteger.valueOf(4000000))
                .privateKeyList(adminPrivateKeys)
                .build();

        // 存证数据,实际中可根据需求序列化目标数据到 byte[] 传入,ByteUtils 是Java SDK提供的工具库
        byte[] data = ByteUtils.hexStringToBytes("0x1234");
        DepositDataRequest depositDataRequest = DepositDataRequest.build(adminAccount.getIdentity(),
                adminAccount.getIdentity(), BigInteger.ZERO, data, params);

        MychainBaseResult<ReplyTransactionReceipt> depositDataResult = sdk.getAccountService().depositData(depositDataRequest);

        if (!depositDataResult.isSuccess() || depositDataResult.getData().getTransactionReceipt().getResult() != 0) {
            exit("depositData", getErrorMsg((int)depositDataResult.getData().getTransactionReceipt().getResult()));
        }

        return depositDataResult.getTxHash();
}


// 查询存证数据
private static String queryDepositData(String hash) {
        // 存证后,如果需要查询存证数据,可通过 QueryTransaction 传入存证交易的 hash 查询
        MychainBaseResult<ReplyTransaction> queryTxResult = sdk.getQueryService().queryTransaction(hash);

        if (!queryTxResult.isSuccess()) {
            exit("depositData", queryTxResult.getData().getErrorCode().toString());
        }

        // 通过 QueryTransaction 查询到存证交易,证明交易发生,通过 QueryTransactionReceipt 可以验证交易成功(return_code 为0),共识后进入区块
        MychainBaseResult<ReplyTransactionReceipt> queryTxReceiptResult = sdk.getQueryService().queryTransactionReceipt(hash);
        if (!queryTxReceiptResult.isSuccess() || queryTxReceiptResult.getData().getTransactionReceipt().getResult() != 0) {
            exit("depositData", getErrorMsg((int)queryTxReceiptResult.getData().getTransactionReceipt().getResult()));
        }

        // 查询存证内容,转换为hex 返回
        return ByteUtils.toHexString(queryTxResult.getData().getTransactionDO().getData());
}

asyncDepositData

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

  • 函数原型

public MychainBaseResult<Response> asyncDepositData(DepositDataRequest request, ICallback callback)
  • 请求参数

参数

必选

类型

说明

request

true

DepositDataRequest

存证的请求

callback

true

ICallback

回调函数

  • 返回字段

返回字段

字段类型

说明

result

MychainBaseResult<ReplyTransactionReceipt>

MychainBaseResult 持有所有 response 类型

说明

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

示例:

private static void depositDataAsync() {
        // 准备参数 params
        MychainParams params = new MychainParams.Builder()
                .gas(BigInteger.valueOf(4000000))
                .privateKeyList(adminPrivateKeys)
                .build();

        // 存证数据,实际中可根据需求序列化目标数据到 byte[] 传入,ByteUtils 是 Java SDK 提供的工具库
        byte[] data = ByteUtils.hexStringToBytes("0x1234");

        DepositDataRequest request = DepositDataRequest.build(adminAccount.getIdentity(),
                adminAccount.getIdentity(), BigInteger.ZERO, data, params);

        MychainBaseResult<Response> depositDataResult = sdk.getAccountService().asyncDepositData(request, new ICallback() {
            @Override
            public void onResponse(String txHash, Response response) {
                System.out.println("depositDataAsync, txHash:" + txHash + ", result: "
                        + response.getErrorCode());

                // 存证后,如果需要查询存证数据,可通过 QueryTransaction 传入存证交易的 hash 查询
                MychainBaseResult<ReplyTransaction> queryTxResult = sdk.getQueryService().queryTransaction(txHash);

                if (!queryTxResult.isSuccess()) {
                    exit("depositDataAsync", queryTxResult.getData().getErrorCode().toString());
                }
                // 查询存证内容,转换为 hex
                System.out.println("depositDataAsync success: " + ByteUtils.toHexString(queryTxResult.getData().getTransactionDO().getData()));
            }
        });
    }

存证交易的请求参数

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

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

参数

类型

说明

identity

Identity

交易发起者的 identity

identity

Identity

目标账户 identity

value

BigInteger

转账金额

data

byte[]

待存储数据,可自定义数据内容,然后序列化存证,存证后读取数据再反序列化。

value

MychainParams

接口通用扩展参数

说明

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

存着交易的返回参数

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

参数

类型

说明

transactionReceipt

TransactionReceipt

交易收据

blockNumber

BigInteger

区块号