主页 > imtoken最新版本 > 区块链智能合约--以太坊交易记录InputData数据分析
区块链智能合约--以太坊交易记录InputData数据分析
imtoken最新版本 2024-01-26 05:09:15
我们在开发以太坊的时候以太坊浏览器查询,会有一个请求获取交互合约时的参数的需求,那么这个时候应该怎么获取呢?
1.打开ETH浏览器:
2.点击你要查询的交易明细,下拉到底部找到你需要的inputData信息(这个信息是用户在调用合约方法时传入的参数)
那么如何在程序中获取呢以太坊浏览器查询,下面我以java为例。 (一般有两种方案,第一种是调用web3j中的方法进行分析,第二种是使用字符串截取分析,我用字符串截取分析来演示)
第一步创建一个工具类util 就是hex转码方式
/**
* 功能描述:16进制转10进制整数。
*/
public static BigInteger hexToBigInteger(String strHex) {
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;
}
/**
* 功能描述: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);
}
strHex = strHex.substring(24);
return "0x" + strHex;
}
return null;
}
第二步是编写解析代码:
@Test
public void test() {
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);
BigInteger bigInteger = hexToBigInteger(value);
System.out.println(bigInteger);
}
最终输出如下
0xa9059cbb
0x35f5992e40facfcad742fcfcc1d94ee0581e9cb1
1000000000000000000000
结束
另外,如果你想在线解析inputData,可以使用如下网址:
如有不明白或有疑问,请联系我沟通
厕所:luo425116243