解析 ETH 区块数据交易input

2023-10-29

这里使用了一个开源项目:https://github.com/rvullriede/evm-abi-decoder

在pom中添加依赖即可:

    <dependency>
      <groupId>net.osslabz.evm</groupId>
      <artifactId>evm-abi-decoder</artifactId>
      <version>0.0.6</version>
    </dependency>

这个jar需要jdk11,想使用jdk8的同学可以把项目中net.osslabz.evm.abi.definition.AbiDefinition#fromJson(java.lang.String) 的入参 Files.readString(Path.of(abiFilePath)) 改一下,这个Files.readString(Path.of(abiFilePath)) 方法只有jdk11有,是读取文件中所有内容为一个string,可以自己实现下。

示例:

package com.mathieu.blockchain;

import com.alibaba.fastjson.JSONObject;
import net.osslabz.evm.abi.decoder.AbiDecoder;
import net.osslabz.evm.abi.decoder.DecodedFunctionCall;

import java.io.IOException;

/**
 * 解析不同的input需要使用其对应的abi
 * abi查询网址 : https://www.smartcontracttoolkit.com/abi
 * <p>
 * 一条input对应的api类型可以通过txn的token去查询tokenMeta获取,tokenMeta中的 tokenType就是abi类型
 * https://docs.nodereal.io/reference/nr_gettokenmeta#example
 * <p>
 * curl https://bsc-mainnet.nodereal.io/v1/your-api-key \
 * -X POST \
 * -H "Content-Type: application/json" \
 * -d '{"jsonrpc":"2.0","method":"nr_getTokenMeta","params":["0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d"],"id": 0 }'
 * <p>
 * {
 *   "id": "0",
 *   "jsonrpc": "2.0",
 *   "result": {
 *     "name": "USD Coin",
 *     "symbol": "USDC",
 *     "decimails": 18,
 *     "tokenType": "erc20"
 *   }
 * }
 *
 * @author wangxianghu
 */
public class AbiDecodeDemo {
  public static void main(String[] args) throws IOException {
    AbiDecoder abiDecoder = new AbiDecoder("abiFiles/ERC20.json");
    String input = "0xa9059cbb0000000000000000000000006eba81f430ff5ab8daee861832c015701db87b2400000000000000000000000000000000000000000000001ffbe5120bc8780000";
    // 解析input
    DecodedFunctionCall decodedFunctionCall = abiDecoder.decodeFunctionCall(input);
    System.out.println(JSONObject.toJSONString(decodedFunctionCall.getParams()));
    // 结果
    // [{"name":"_to","type":"address","value":"0x6eba81f430ff5ab8daee861832c015701db87b24"},{"name":"_value","type":"uint256","value":590000000000000000000}]
  }
}

https://github.com/wangxianghu/learn-blockchain/blob/main/src/main/java/com/mathieu/blockchain/AbiDecodeDemo.java

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析 ETH 区块数据交易input 的相关文章

  • 华为OD机试-MVP争夺战

    题目描述 在星球争霸篮球赛对抗赛中 强大的宇宙战队 希望每个人都能拿到MVP MVP的条件是 单场最高分得分获得者 可以并列 所以宇宙战队决定在比赛中 尽可能让更多的队员上场 且让所有有得分的队员得分都相同 然而比赛过程中的每一分钟的得分都

随机推荐

  • SpringCloud-消息总线

    消息总线 Spring Cloud Bus 概述 一言以蔽之 分布式自动刷新配置功能 Spring Cloud Bus配合Spring Cloud Config使用可以实现配置的动态刷新 是什么 Spring Cloud Bus 配合Spr
  • 关于 volatile——可见性,有序性,内存屏障

    并发编程的三大特性 原子性 有序性 可见性 从这三个方面去看一下 volatile volatile 保证了可见性 public class Demo1 private boolean flag true public void test
  • ​LeetCode刷题实战540:有序数组中的单一元素

    算法的重要性 我就不多说了吧 想去大厂 就必须要经过基础知识和业务逻辑面试 算法面试 所以 为了提高大家的算法能力 这个公众号后续每天带大家做一道算法题 题目就从LeetCode上面选 今天和大家聊的问题叫做 有序数组中的单一元素 我们先来
  • 模拟实现库函数strlen(详解)

    模拟实现库函数strlen 的意思是 不用strlen函数 但要求出字符串长度 1 先打印主函数 记字符串长度为len 并引入自己定义的strilen函数 含arr int main char str abcdef int len strl
  • 【python图像处理】python的图像处理模块Image【原创】

    版本信息 2 7 11 环境 windows 7 64位系统 编辑器 PyCharm 运行工具 PyCharm 文件地址 D phpStudy WWW python Image 一 引入图像模块 1 PIL简介 PIL Python Ima
  • 经典场效应管如何快速关断技巧-KIA MOS管

    mos管的快速关断原理 R4是Q1的导通电阻没有Q1就没有安装的必要了 当低电位来时Q1为泻放扩流管 功率MOS管怎样关断 能否用PWM实现 怎样实现 功率mosfet的三个端口 G极 D极 S极 G极控制mosfet的开通 关断 给GS极
  • Linux查看文件命令

    文章目录 Linux查看文件命令 1 使用vim命令 查看并编辑文件 2 使用cat命令 一次性显示文件的所有内容 3 使用head 命令 显示文件开头 默认10行 4 使用tail 命令 显示文件结尾 默认10行 vi vim工具共分为三
  • MongoDB shell操作

    MongoDB shell操作 实验目的 1 了解MongoDB的shell操作语法 2 掌握MongoDB中对数据增删改查的命令 实验原理 MongoDB shell是一个可执行文件 是MongoDB自带的一个交互式JavaScript
  • 仅需一个参数,开启微信小程序长按图片转发朋友,发送给朋友功能。小程序转发图片给朋友功能。

    原来 只需要在 image 属性加入 show menu by longpress 1 就可以实现了 太方便了吧 你是不是在这里找到答案了 给个赞呗
  • 信息收集——根据图中信息找到图中的餐厅

    这是一道网络迷踪类型的题目 先观察图片 图中比较明显的特征便是薯条和汉堡下面的小票和海报 或者类似于海报的东西 小票明显是英文的 所以初步判定该餐厅不是大陆的 去百度上搜索国外麦当劳餐厅小票 由以上三张图片可知 英文小票上对于麦当劳餐厅的描
  • 27道多线程核心面试题(附答案),你真的准备好面试了吗?

    今天给大家分享的是比较全面的多线程面试题 大家在面试的过程中不免会被问到很多专业性的问题 有的时候回答的并不是那么全面和精细 这仅仅代表个人观点 1 如何预防死锁 1 首先需要将死锁发生的是个必要条件讲出来 互斥条件 同一时间只能有一个线程
  • 常成员函数和常对象

    const回顾 const int a 10 a不能被改变 int const p 指针的指向可变 指向里的值不可变 int const p 指针的指向不可变 指向里的值可变 int const const p 都不可变 const int
  • PageHelper分页插件使用

    http blog csdn net nz360 article details 52326232 主要记录自己使用PageHelper分页的过程 需要的jar包 java view plain copy
  • 关于Context(上下文)的理解

    一直听到上下文一说 一直没弄清楚到底是啥意思 今天总结一下 不知道对不对 感觉对Context这个词翻译的不太好 不应该叫上下文 应该直接就叫 环境 不过都这么叫 就叫上下文好了 所谓的上下文就是指语境 每一段程序都有很多的外部变量 只有想
  • Python四种常用的高阶函数,你会用了吗

    1 什么是高阶函数 把函数作为参数传入 这样的函数称为高阶函数 例如 def func1 x y f return f x f y num func1 10 2 abs print num 注意 把函数作为参数传入的时候 不要再传入函数后面
  • Latex中cases环境引入报错

    编写 begin equation C i begin cases 0 i 0 max 0 x i bar x C i 1 i neq 0 end cases end equation 时报错 需要导入宏包 usepackage amsma
  • 利用云主机搭建游戏加速器(仅限国内加速)

    利用云主机搭建游戏加速器 仅限用于中国大陆内游戏加速服务 注意 仅限用于中国大陆内游戏加速服务 禁止开飞机 最近在玩西山居公司的剑网三游戏 因为自己用的是联通宽带 但是玩的是电信区的服务器 我使用的是腾讯云的云主机 大家可以根据需要自己来做
  • BES2300x笔记(20) -- IIC驱动

    哈喽大家好 这是该系列博文的第二十篇 篇 lt lt 系列博文索引 快速通道 gt gt 一 前言 说到IIC驱动 绝对是一个老生常谈的话题 但凡入坑了嵌入式开发的道友 肯定都能说的头头是道 编写个驱动 调试个外设 那更是信手拈来 不在话下
  • java 静态分析工具_了解您的Java静态分析工具

    java 静态分析工具 有许多Java静态分析工具在起作用 每个人都专注于特定领域并具有自己独特的优势 这是一个有用的摘要 Pmd 基于静态规则集的Java源代码分析器 它识别潜在的问题 例如 可能的错误 尝试 捕获 最终 切换块为空 无效
  • 解析 ETH 区块数据交易input

    这里使用了一个开源项目 https github com rvullriede evm abi decoder 在pom中添加依赖即可