主页 > imtoken最新版本 > 区块链智能合约--以太坊交易记录InputData数据分析

区块链智能合约--以太坊交易记录InputData数据分析

imtoken最新版本 2024-01-26 05:09:15

我们在开发以太坊的时候以太坊浏览器查询,会有一个请求获取交互合约时的参数的需求,那么这个时候应该怎么获取呢?

1.打开ETH浏览器:

2.点击你要查询的交易明细,下拉到底部找到你需要的inputData信息(这个信息是用户在调用合约方法时传入的参数)

以太坊区块浏览_以太坊浏览器查询_sitehqz.com 以太坊和以太坊贸易的关系

那么如何在程序中获取呢以太坊浏览器查询,下面我以java为例。 (一般有两种方案,第一种是调用web3j中的方法进行分析,第二种是使用字符串截取分析,我用字符串截取分析来演示)

第一步创建一个工具类util 就是hex转码方式

/**
     *  功能描述:16进制转10进制整数。 
     */
    public static BigInteger hexToBigInteger(String strHex) {

以太坊区块浏览_以太坊浏览器查询_sitehqz.com 以太坊和以太坊贸易的关系

if (strHex.length() > 2) { if (strHex.charAt(0) == '0' && (strHex.charAt(1) == 'X' || strHex.charAt(1) == 'x')) { strHex = strHex.substring(2); } BigInteger bigInteger = new BigInteger(strHex, 16); return bigInteger; } return null; }

以太坊区块浏览_sitehqz.com 以太坊和以太坊贸易的关系_以太坊浏览器查询

/** * 功能描述:hex地址转地址。 */ public static String hexToAddress(String strHex) { if (strHex.length() > 42) { if (strHex.charAt(0) == '0' && (strHex.charAt(1) == 'X' || strHex.charAt(1) == 'x')) { strHex = strHex.substring(2);

以太坊浏览器查询_sitehqz.com 以太坊和以太坊贸易的关系_以太坊区块浏览

} strHex = strHex.substring(24); return "0x" + strHex; } return null; }

第二步是编写解析代码:

@Test
    public void test() {

以太坊区块浏览_sitehqz.com 以太坊和以太坊贸易的关系_以太坊浏览器查询

String inputData = "0xa9059cbb00000000000000000000000035f5992e40facfcad742fcfcc1d94ee0581e9cb100000000000000000000000000000000000000000000003635c9adc5dea00000"; //前十位是methodID由于他是Keccak-256加密生成的无法逆只能通过库来判断是否你需要的 String methodID= inputData.substring(0, 10); System.out.println(methodID); //截取前64位值 String to = inputData.substring(10, 74); //将Hex转码Address System.out.println(hexToAddress(to)); String value = inputData.substring(74);

sitehqz.com 以太坊和以太坊贸易的关系_以太坊区块浏览_以太坊浏览器查询

BigInteger bigInteger = hexToBigInteger(value); System.out.println(bigInteger); }

最终输出如下

0xa9059cbb
0x35f5992e40facfcad742fcfcc1d94ee0581e9cb1
1000000000000000000000

结束

另外,如果你想在线解析inputData,可以使用如下网址:

如有不明白或有疑问,请联系我沟通

厕所:luo425116243