引入依赖,github可以找到
<dependency> <groupId>com.esaulpaugh</groupId> <artifactId>headlong</artifactId> <version>7.0.0</version> </dependency>
private static String abi = "自行复制合约的abi内容";
// 解码交易的入参,合约参数字节码
public static Map<String, Object> abiDecodeArgs(String code) {
Map<String, Object> map = new HashMap<String, Object>();
final List<Function> functions = ABIJSON.parseFunctions(abi);
for (Function function : functions) {
final boolean equals = function.selectorHex().equals(code.substring(0,8));
if (equals){
final Tuple objects = function.decodeCall(Strings.decode(code));
map.put("name",function.getName());
map.put("objects",objects);
}
}
return map;
}
// 解码交易的出参,合约结果字节码
public static Map<String, Object> abiDecodeResult(byte[] code,String methodSelectorHash) {
Map<String, Object> map = new HashMap<String, Object>();
final List<Function> functions = ABIJSON.parseFunctions(abi);
for (Function function : functions) {
final boolean equals = function.selectorHex().equals(methodSelectorHash);
if (equals){
final Tuple objects = function.decodeReturn(code);
objects.toString();
map.put("name",function.getName());
map.put("objects",objects);
}
}
return map;
}
相关RLP编码和kecak256哈希规范请看solidity官方文档,
应用二进制接口(Application Binary Interface(ABI)) 说明 — Solidity develop 文档
类似于以下这样,