fiscoBcos:联盟链,一个区块链底层平台。
解决问题:用java+webase-Front开发区块链应用,java程序与webase-Front交互时,返回的交易回执时十六进制编码,不是肉眼能读懂的信息。
问题描述:【代码在文末】
通过webase-Front平台中的合约操作,发现交易回执是可以解析的:
而返回给java客户端的信息需要解码才能读懂、使用。
FISCO BCOS的交易是一段发往区块链系统的请求数据,用于部署合约,调用合约接口,维护合约的生命周期以及管理资产,进行价值交换等。当交易确认后会产生交易回执,交易回执和交易均保存在区块里,用于记录交易执行过程生成的信息,如结果码、日志、消耗的gas量等。用户可以使用交易哈希查询交易回执,判定交易是否完成。
代码:
导入jar包:
repositories {
maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
maven { url "https://dl.bintray.com/ethereum/maven/" }
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
mavenCentral()
}
compile group: "org.fisco-bcos", name: "web3sdk", version: "2.0.34-SNAPSHOT"
代码包路径org.fisco.bcos.web3j.tx.txdecode
,使用TransactionDecoderFactory
工厂类建立交易解析对象TransactionDecoder
。
有两种方式:
//方法【一】
//本文使用的方法
//abi:合约abi bin:暂时不用,可以为空字符串
TransactionDecoder buildTransactionDecoder(String abi, String bin);
//方法【二】
//contracName:合约名
TransactionDecoder buildTransactionDecoder(String contractName);
调用decodeInputReturnJson\decodeInputReturnObject获得Json\List输出
【完整代码(解析部分)】
方法(){
/***与webase交互,发送交易,并获得交易回执**************/
//...
//交互代码...
/***与webase交互,发送交易,并获得交易回执**************/
//输出未解析的结果
String outputRes = resBody.getStr("output");
String inputRes = resBody.getStr("input");
System.out.println(outputRes);
System.out.println(inputRes);
//创建TransactionDecoder对象,用于解析结果
String abi = ABI;
String bin = "";
TransactionDecoder txDecodeSampleDecoder = buildTransactionDecoder(abi, bin);
//解析输出output字段
String jsonResult = txDecodeSampleDecoder.decodeOutputReturnJson(inputRes, outputRes);
List<ResultEntity> listResult = txDecodeSampleDecoder.decodeOutputReturnObject(inputRes, outputRes);
System.out.println("输出内容:");
System.out.println("json => \n" + jsonResult);
System.out.println("list => \n" + listResult);
//解析输入input字段
String jsonResult_in = txDecodeSampleDecoder.decodeInputReturnJson(inputRes);
List<ResultEntity> listResult_in = txDecodeSampleDecoder.decodeInputReturnObject(inputRes);
System.out.println("输入内容:");
System.out.println("json => \n" + jsonResult_in);
System.out.println("list => \n" + listResult_in);
}
突然解决困惑已久的问题,喜不自胜,写下此文记录
感谢各位大佬指正!
参考源自的fisco技术文档:https://www.bookstack.cn/read/fisco-bcos-v2.0/b69e6fc506dfa780.md