news 2026/5/10 15:30:37

后端接收并解析合约回执信息【FISCOBCOS】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
后端接收并解析合约回执信息【FISCOBCOS】

在区块链后端题目中,WeBASEUtils包基本上绕不开的话题,其中返回值解析一直是一个很让人头疼的事情,面对从合约上传来的数据的处理,我进行了相关整理;

一般考试时会遇到诸如图示中的JSON解析问题:

下面以一个简单的_注册/登录_案例,来进行简单讲解:

一、合约返回单个数据【状态判断】

(1)打开VM虚拟机、搭链、进入“节点控制台”界面,选择“合约管理/合约IDE”,新建AccountTest.sql

pragma solidity ^0.4.24; contract AccountTest { uint8 userIndex; mapping(address => uint8) userMapping; constructor() public { userIndex = 0; } //用户注册 function register(address user) public returns(uint8) { if (userMapping[user] > 0) { return userMapping[user]; } userIndex++; userMapping[user] = userIndex; return userIndex; } //用户登录 function login(address user) public view returns(uint8) { return userMapping[user]; } }

这个合约的作用是创建一个mapping,这个mapping可以看作一个“双向键值对”使用。

- 在这个“键值对”mapping中,

可以通过user作为键,查询其对应的userIndex索引;

也可以将userIndex作为键,查询user值。

- register【注册方法】:

将从后端传入的注册地址user与方法内自增的索引值userIndex建立“双向键值对”mapping;

并返回 索引值userIndex。

- login 【登录方法】:

输入地址,通过mapping获取索引值,并将索引值返回给后端。

(2)保存、编译、部署、合约调用:

注册任意一个“测试用户”使用。

点击确认会返回一个“ 交易回执 ”,上方背景里弹框显示“ 交易成功 ”

注: 点击output中data元素下的方格可以直接复制

具体内容如下:

{ transactionHash: "0x0a0155ccc84b4397f8fd1f4eed956f41408a5b7a485670fdbb2b309d7df0907b" transactionIndex: "0x0" root: "0x0000000000000000000000000000000000000000000000000000000000000000" blockNumber: "9" blockHash: "0xdbbcd5e55e00675c56c93875393c917c130e0732e0f1b467647282106170248c" from: "0xe67baff4c8cb7950212fbfc778255f8bd445225b" to: "0x3b3893e2402a9aa029cfad1d670f5ce3ede15189" gasUsed: "23678" contractAddress: "0x0000000000000000000000000000000000000000" logs: [] logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" status: 0x0 statusMsg: "None" input: "0x4420e486000000000000000000000000e67baff4c8cb7950212fbfc778255f8bd445225b" output: "0x0000000000000000000000000000000000000000000000000000000000000002" txProof: null receiptProof: null message: "Success" statusOK: true }

(3)其中我们需要着重注意的有以下几个内容:

- blockNumber(区块数量-块高)【原生SDK方法】

- blockHash(区块哈希)【原生SDK方法】

- status(区块链底层交易执行状态码)

-- 0x0 = 交易执行成功

-- 0x1 = 执行失败

-- 0x1a = 调用地址错误

- output()

-- 返回十六进制数据

-- 若返回的数据为十进制数字,则直接截掉前两位0x,并将16进制转为10进制数据

-- HexUtil 是Hutool工具包的“ 十六进制处理工具类 ”

Dict _result = weBASEUtuils.funcPost(xxx,xxx,xxx); // 获取“ 交易回执 ”---> obj JSONObject obj = JSONUtil.parseobj(_result.get("result")); // 提取output String output = obj.get("output"); // 若output数据为十进制数据 long resInt = HexUtil.hexToLong(output.substring(2)); /* long型数据:表示十进制数字 hex型数据: 表示十六进制数字 hexToLong:表示将十六进制转入十进制数据 */

- message

-- 交易成功:"Sucess"

-- 交易失败:"Error:xxxxxx... ..."

若存在data.equals("Success")

则使用get("message")

- statusOK【广泛使用来交易状态判断】

-- false

-- true

例如:开头的问题,一般最后返回成功值为success("ok")时,都使用statusOK

二、合于返回 数组/结构体/多个数据【获取链上数据】

JSONObject obj = JSONUtil,parseObj(_result.get("result"));

String output = obj.get("output").toString();

JSONArray array = JSONUtil.prarseArray(poutput);

// 在数组中取值

String value0 = dataArray.get(0).toString();

String value1 = dataAray.get(1).toString();

注:本内容不适用于实际项目开发,仅作个别区块链技术比赛案例使用

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 15:30:37

org.openpnp.vision.pipeline.stages.DetectFixedCirclesHough

文章目录org.openpnp.vision.pipeline.stages.DetectFixedCirclesHough功能参数固定参数(在 XML 中配置)动态参数(必须通过 pipeline.setProperty() 预先设置)例子效果ENDorg.openpnp.vision.pipeline.stages.DetectFixedCirclesH…

作者头像 李华
网站建设 2026/4/15 6:45:18

本地安装部署vllm并运行大模型

一、前置条件 1、NVIDIA 独立显卡(笔记本 / 台式都行) 2、显存 ≥ 4GB(能跑小模型) 3、安装python(参考我的文章:用Python生成二维码) 4、可以进入Windows下的WSL2(参考我的文章…

作者头像 李华
网站建设 2026/4/15 6:45:09

AI 智能体联动短剧:创作完成自动分发矩阵账号,省心高效

做短剧矩阵运营,最耗时的不是创作,而是 “剪完视频手动分发、多账号切换、重复操作”—— 每天花几小时传视频、改标题、配封面,累且效率低。AI 智能体联动短剧系统,实现 “创作→分发→运营” 全自动化,创作完成无需人…

作者头像 李华
网站建设 2026/4/15 6:43:17

【无标题】健身这件事,说起来容易,吃起来难

蛋白吃得够,碳水不敢碰。代餐粉喝了两周,看见就想吐。沙拉吃到最后,嘴里淡出个鸟来,怀疑人生。跟我一起健身的哥们说:"你要不试试五仁油锅盔,粗粮的,配着吃,比那些代餐强多了。…

作者头像 李华
网站建设 2026/4/15 6:42:11

基于深度学习的车辆测距识别 yolov8双目测距 yolov8+sgbm(原理+代码)

YOLOv8结合SGBM立体匹配算法进行双目测距的工作流程和原理主要包括以下几个核心步骤: 往期热门博客项目回顾: 计算机视觉项目大集合 改进的yolo目标检测-测距测速 路径规划算法 图像去雨去雾目标检测测距项目 交通标志识别项目 yolo系列-重磅yo…

作者头像 李华
网站建设 2026/4/15 6:42:10

【移动端知识,vw单位适配

移动端知识移动端不需要设置版心物料像素和css像素物料像素css像素物料像素和css像素的关系设计稿都是按物理像素给的,我们开发的时候要写css像素,所以要改总结实现移动端适配方案vw单位适配vw和vh的介绍一直占页面宽度和高度的一半移动端适配

作者头像 李华