为方便存证场景的开发,合约平台提供原生存证交易接口以实现存证目的。
存证内容上链
depositData
发起存证内容上链的交易,同步方式调用。
函数原型
public DepositDataResponse depositData(DepositDataRequest request)
请求参数
参数 | 必选 | 类型 | 说明 |
request | true |
| 发起存证的请求 |
DepositDataRequest,具体参数见下表。
返回字段 | 字段类型 | 说明 |
senderId | Identity | 发起内容存证的账户地址 |
receiverId | Identity | 接收内容存证的账户地址 |
amount | BigInteger | 转账金额,默认值为0,不支持修改(即不支持转账交易) |
depositData | byte[] | 待存储数据,可自定义数据内容,然后序列化存证,存证后读取数据再反序列化 |
存证交易的 data 数据大小有上限限制,此限制为合约链的一个配置选项,通常默认 1 MB,实际根据合约链的配置情况而定。
返回字段
返回字段 | 字段类型 | 说明 |
response |
| 存证交易的响应 |
DepositDataResponse,具体参数见下表。
返回字段 | 字段类型 | 说明 |
transactionReceipt |
| 交易收据 |
blockNumber | BigInteger | 区块号 |
TransactionReceipt,具体参数见下表。
参数 | 类型 | 说明 |
result | long | 交易执行结果,0 代表成功,其他值代表失败 |
gasUsed | BigInteger | 交易执行所花费的gas费用 |
logs |
| 交易结果日志输出 |
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 | 发起存证的请求 | |
callback | true | IAsyncCallback | 回调函数 |
存证交易的 data 数据大小有上限限制,此限制为合约链的一个配置选项,通常默认 1 MB,实际根据合约链的配置情况而定。
同步返回字段
返回字段 | 字段类型 | 说明 |
result | int | 发送返回值 |
异步返回字段
返回字段 | 字段类型 | 说明 |
errorCode | int | SDK发送消息返回的错误码,success时为0。 |
response |
| 平台返回的响应,其中 |
DepositDataResponse,具体参数见下表。
返回字段 | 字段类型 | 说明 |
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());
}
}
}
});
}