社区用户经常询问:FISCOBCOS的智能合约支持发送交易后,直接获取返回值吗?交易和交易回执中的input、output和logs字段存的是什么?想来很多朋友都存在相同的疑惑,今天的文章就将主要讨论这个问题。 【一、What:解析什么?】 解析工具解析的是交易和交易回执中的三个重要字段,分别是input、output和logs。这个三个字段分别代表什么,与智能合约有什么关系?下面请出一张图进行分析: 从图中可以看到,蓝色部分是insert方法的签名,方法签名部分和调用该方法传入的参数,将编码到交易和交易回执的input字段(十六进制字符串)。绿色部分是方法的返回值,这部分将编码到交易回执的output字段(十六进制字符串)。这里可以解答用户的一个疑问,即FISCOBCOS的智能合约支持发送交易后获取返回值,该返回值将会编码保存在交易回执的output字段,并且利用交易解析工具可以解析返回值。橙色部分是方法调用的event,可以记录eventlog信息,这部分将编码到交易回执的logs字段(其中address为调用的合约地址,data是eventlog数据的十六进制编码,topic是event签名的十六进制编码)。由此可知,合约方法的输入,输出以及eventlog均编码到了交易和交易回执对应的input、output和logs字段。要知道一个交易或交易回执是调用了合约的哪个方法,输入、输出和eventlog分别是什么数据,只要解析这个三个字段即可,这正是交易解析工具要解决的问题!
交易解析是web3sdk2.0.4及以上版本提供的功能。其使用非常简单,三步曲如下: step1:引入web3sdk2.0.5依赖
step2:创建交易解析对象TransactionDecoder 使用TransactionDecoderFactory工厂类创建交易解析对象TransactionDecoder,提供两种方式: TransactionDecoderbuildTransactionDecoder(Stringabi,Stringbin),传入的参数分别是合约的abi和bin字符串(bin字符串暂不使用,可以直接传入空字符串)。 TransactionDecoderbuildTransactionDecoder(StringcontractName),传入合约名称。需要在应用的根目录下创建solidity目录,将交易相关的合约放在solidity目录,通过指定合约名获取交易解析对象。注意:创建交易解析对象前,请确定解析该交易对应的合约(即该交易是由调用该合约产生的),可以直接提供solidity合约或者用户自行编译,然后传入合约的abi,两种方式均可创建交易解析对象。 step3:调用交易解析对象进行解析任务 TransactionDecoder对input,output和logs的解析结果均分别提供返回java对象和json字符串(java对象的json字符串形式)的方法。详细设计文档请参考: https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/sdk/sdk.html#id11。 java对象方便服务端处理数据,json字符串方便客户端处理数据。交易解析对象的方法列表如下: 其中InputAndOutputResult类,ResultEntity类和EventResultEntity类的结构如下: 根据交易对象,可以获取其input字段;根据交易回执对象,可以获取其input、output和logs字段。调用交易解析对象对应的方法即可解析相关字段。 注意:如果解析FISCOBCOS2.0.0之前的版本(即rc1、rc2、rc3版本)返回的交易回执中的output字段,因为解析output字段的方法需要传入input字段,但交易回执中缺少input字段,则可以根据交易回执中的hash字段,查询一次web3j对象的getTransactionByHash方法获取交易对象,然后从交易对象获取input字段,即可解析output字段。 解析示例: 由解析结果可知,根据TableTest.sol合约的abi和交易回执中的input、output以及logs字段,通过交易解析工具可以解析出其调用的合约方法名、参数类型、参数值、返回类型、返回值以及eventlog数据。这就是我们期待的交易解析效果! 【三、Where:使用场景在哪里?】是英雄,一定有用武之地!交易解析工具入场的地方包括如下场景:
—- 编译者/作者:高校区块链技术社 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
FISCO BCOS的智能合约
2020-01-21 高校区块链技术社 来源:区块链网络
- 上一篇:比特币喜迎新年市场交投清淡
- 下一篇:「链游玩家说」爆量广告与游戏品质,难以兼得?
LOADING...
相关阅读:
- 首期币赢跑腿计划圆满结束,代买项目PAR涨幅超20%2020-08-03
- 8月3晚间行情:日内盘窄幅震荡、成交量萎靡、晚间风控为主2020-08-03
- 58TOP天团集体亮相与你浪漫相“豫”2020-08-03
- BitZ玩币总监:BTC任何一笔交易都是基于当下某一级别走势完成-参与其后2020-08-03
- 大盘企稳多主力借机起势2020-08-03