关于solidity解析abi方法,入参和结果字节码

引入依赖,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 文档

类似于以下这样,

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值