原生存证接口

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

存证交易

depositData

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

  • 函数原型

public DepositDataResponse depositData(DepositDataRequest request)
  • 请求参数

参数

必选

类型

说明

request

true

DepositDataRequest

存证交易的请求

DepositDataRequest,具体参数见下表。

返回字段

字段类型

说明

senderId

Identity

发起交易者的 identity

receiverId

Identity

目标账户 identity

amount

BigInteger

转账金额,默认值为0,不支持修改(即不支持转账交易)

depositData

byte[]

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

注意

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

  • 返回字段

返回字段

字段类型

说明

response

DepositDataResponse

存证交易的响应

DepositDataResponse,具体参数见下表。

返回字段

字段类型

说明

transactionReceipt

TransactionReceipt

交易收据

blockNumber

BigInteger

区块号

TransactionReceipt,具体参数见下表。

参数

类型

说明

result

long

交易执行结果,0 代表成功,其他值代表失败

gasUsed

BigInteger

交易执行所花费的gas费用

logs

List<logEntry>

交易结果日志输出

output

byte[]

交易的输出,此处为虚拟机的执行结果

LogEntry,具体参数见下表。

参数

类型

说明

from

Identity

交易结果日志中的字段,代表交易发送者

to

Identity

交易结果日志中的字段,代表交易接收者

topics

List<String>

交易结果日志中的字段,交易执行的事件主题

logData

byte[]

交易结果日志中的字段,交易执行中的日志数据

  • 示例

public void depositData() {
        String content = "hello world";
        DepositDataRequest depositDataRequest = new DepositDataRequest(
                Utils.getIdentityByName("Administrator"),
                Utils.getIdentityByName("Tester001"),
                content.getBytes(), new BigInteger("0"));
        DepositDataResponse depositDataResponse = sdk.getAccountService().depositData(depositDataRequest);
        if (!depositDataResponse.isSuccess()) {
            logger.error("depositData failed, errorCode :{}, errorDesc: {}", depositDataResponse.getErrorCode().getErrorCode(), depositDataResponse.getErrorCode().getErrorDesc());
        } else {
            // 交易收据
            TransactionReceipt transactionReceipt = depositDataResponse.getTransactionReceipt();
            if (transactionReceipt.getResult() != 0) {
                logger.error("depositData failed, errorCode :{}, errorDesc: {}", ErrorCode.valueOf((int) transactionReceipt.getResult()).getErrorCode(), ErrorCode.valueOf((int) transactionReceipt.getResult()).getErrorDesc());
            } else {
                logger.info("depositData success.返回信息: {}", transactionReceipt.toString());
            }
        }
    }

asyncDepositData

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

  • 函数原型

public int asyncDepositData(DepositDataRequest request, IAsyncCallback callback)
  • 请求参数

参数

必选

类型

说明

request

true

DepositDataRequest

存证的请求

callback

true

IAsyncCallback

回调函数

注意

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

  • 同步返回字段

返回字段

字段类型

说明

result

int

发送返回值

  • 异步返回字段

返回字段

字段类型

说明

errorCode

int

SDK发送消息返回的错误码,success时为0。

response

Response

平台返回的响应,其中 response.getErrorCode()是平台返回的错误码。

DepositDataResponse,具体参数见下表。

返回字段

字段类型

说明

transactionReceipt

TransactionReceipt

交易收据

blockNumber

BigInteger

区块号

  • 示例

public void asyncDepositData() {
        String content = "hello world";
        DepositDataRequest depositDataRequest = new DepositDataRequest(
                Utils.getIdentityByName("Administrator"),
                Utils.getIdentityByName("Tester001"),
                content.getBytes(), new BigInteger("0"));
        int result = sdk.getAccountService().asyncDepositData(depositDataRequest, new IAsyncCallback() {
            @Override
            public void onResponse(int errorCode, Response response) {
                // 参考错误信息说明文档,检查返回的数据  
                DepositDataResponse depositDataResponse = (DepositDataResponse) response;
                if (!depositDataResponse.isSuccess()) {
                    logger.error("depositData failed, errorCode :{}, errorDesc: {}", depositDataResponse.getErrorCode().getErrorCode(), depositDataResponse.getErrorCode().getErrorDesc());
                } else {
                    // 交易收据
                    TransactionReceipt transactionReceipt = depositDataResponse.getTransactionReceipt();
                    if (transactionReceipt.getResult() != 0) {
                        logger.error("depositData failed, errorCode :{}, errorDesc: {}", ErrorCode.valueOf((int) transactionReceipt.getResult()).getErrorCode(), ErrorCode.valueOf((int) transactionReceipt.getResult()).getErrorDesc());
                    } else {
                        logger.info("depositData success.返回信息: {}", transactionReceipt.toString());
                    }
                }
            }
        });
    }
阿里云首页 区块链服务 BaaS 相关技术圈