為方便存證場景的開發,合約平臺提供原生存證交易接口以實現存證目的。
存證內容上鏈
depositData
發起存證內容上鏈的交易,同步方式調用。
函數原型
public DepositDataResponse depositData(DepositDataRequest request)
請求參數
參數 | 必選 | 類型 | 說明 |
request | true |
| 發起存證的請求 |
DepositDataRequest,具體參數見下表。
返回字段 | 字段類型 | 說明 |
senderId | Identity | 發起內容存證的賬戶地址 |
receiverId | Identity | 接收內容存證的賬戶地址 |
amount | BigInteger | 轉賬金額,默認值為0,不支持修改(即不支持轉賬交易) |
depositData | byte[] | 待存儲數據,可自定義數據內容,然后序列化存證,存證后讀取數據再反序列化 |
存證交易的data數據大小存在上限限制,此限制為合約鏈的一個配置選項,通常默認設置為1MB。具體的數據大小上限可根據合約鏈的配置情況,通過提交工單的形式由后臺技術人員進行調整。
返回字段
返回字段 | 字段類型 | 說明 |
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,具體參數見下表。
返回字段 | 字段類型 | 說明 |
交易收據 | ||
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());
}
}
}
});
}