引入依赖,github可以找到
com.esaulpaugh headlong 7.0.0
- private static String abi = "自行复制合约的abi内容";
-
- // 解码交易的入参,合约参数字节码
- public static Map
abiDecodeArgs(String code) { - Map
map = new HashMap(); - final List
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
abiDecodeResult(byte[] code,String methodSelectorHash) { - Map
map = new HashMap(); - final List
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 文档
类似于以下这样,