当前位置: 首页 > news >正文

后端接收并解析合约回执信息【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();

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

http://www.jsqmd.com/news/643468/

相关文章:

  • 第四讲:曲面 Pattern 缺陷检测的核心几何机制——两层配准与注册集、测量集的角色分工
  • org.openpnp.vision.pipeline.stages.DetectLinesHough
  • 谁在定义企业级Agent标准?一次硬核测评给出了答案
  • 财务法务福音!Qwen3-VL-30B智能合同字段提取保姆级教程
  • AI人体骨骼关键点检测作品集:多场景骨架图生成,效果直观一目了然
  • 像素史诗效果展示:研报生成过程中的‘能量值’反馈与推理稳定性监测
  • 4月15日成都地区振鸿产焊管(Q235B;内径DN15-200mm)现货报价 - 四川盛世钢联营销中心
  • 移动端架构演进
  • MySQL8.0升级到MySQL8.4避坑:密码插件问题
  • Qwen2.5-VL-7B-Instruct快速上手:网页截图→响应式HTML→CSS样式生成
  • Pixel Epic智识终端入门教程:动态卷轴流式输出与中断续写功能详解
  • 忍者像素绘卷:天界画坊Proteus仿真联动:为电子设计添加像素艺术界面
  • UiPath003 创建基本库
  • Ubuntu 20.04下快速配置Fcitx框架与谷歌拼音输入法
  • 2026年行业内二次元投影仪生产公司,影像测量仪/2.5次元测量仪/二次元检测仪/三次元测量仪,二次元投影仪研发哪个好 - 品牌推荐师
  • JS逆向|猿人学逆向反混淆练习平台第13题加密分析
  • Gemma-3-12b-it API封装教程:FastAPI接口开发与图文请求适配
  • OpenClaw人人养虾:openclaw logs
  • 亚洲美女-造相Z-Turbo创意工坊案例:独立艺术家用其生成NFT系列《东方十二时辰》
  • 2026奇点大会多模态翻译系统深度拆解(语音-文本-图像三模态联合推理引擎首次公开)
  • 【仅限首批读者】AIAgent隐私合规自检工具包(含12项自动扫描规则+OWASP AI-Top10映射矩阵)限时开放下载
  • 可灵会员邀请码6B3CRST3TFBL
  • Qwen3-32B长文本处理实战:128K上下文,轻松分析整本电子书
  • Java的java.util.random.RandomGenerator随机数算法实现细节
  • 196.删除重复的电子邮箱
  • MiniCPM-o-4.5-nvidia-FlagOS构建智能知识库:结合向量数据库实现精准问答
  • Nanbeige4.1-3B应用场景:制造业设备维修手册QA系统,支持PDF/图片OCR混合输入
  • 单细胞蛋白组Abseq联合流式技术,深度解锁肿瘤与感染免疫差异奥秘
  • PySide6多线程避坑指南:手把手教你用QMutex和QWaitCondition安全地暂停与恢复线程
  • Canvas Quest提示词安全与内容过滤配置教程