0

我的智能合约有一个功能balanceOf,它的 ABI 如下:

    {
        "constant": true,
        "inputs": [
            {
                "name": "_ss",
                "type": "string[]"
            }
        ],
        "name": "balanceOf",
        "outputs": [
            {
                "name": "result",
                "type": "string[]"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },

我使用web3j来调用这个函数,代码片段如下:

    @Test
    public void testCallBalanceOfHTLC() throws IOException {
        Web3j web3j = Web3j.build(new HttpService(
                "http://10.100.128.231:8545/"));
        Function function =
                new Function(
                        "balanceOf",
                        Arrays.asList(
                                new DynamicArray<>(
                                        new Utf8String("0xD3Ac266C12B0f198B1F103Ef87EadAb1162E39ed"))),
                        Collections.singletonList(new TypeReference<DynamicArray<Utf8String>>() {
                        }));
        String data = FunctionEncoder.encode(function);
        Transaction transaction = Transaction.createEthCallTransaction("0xD3Ac266C12B0f198B1F103Ef87EadAb1162E39ed", "0x3e6e547bC917001Cef35a3dDd6376BAd2e4Ab7Db", data);
        EthCall ethCall = web3j.ethCall(transaction, DefaultBlockParameterName.LATEST).send();

        List<Type> results = FunctionReturnDecoder.decode(ethCall.getValue(), function.getOutputParameters());

        System.out.println(((DynamicArray)results.get(0)).getValue().get(0));
    }

调用成功但是输出的ABI解码结果((DynamicArray)results.get(0)).getValue().get(0)空字符串“”,所以我怀疑是不是new Function特别是第三个参数有什么问题outputParameters,但是我已经非常仔细地通过了所有web3j对abi的单元测试并且没有没有发现我的代码有问题。

相反,balanceOf可以从 remix 中调用函数,它运行良好并返回了正确的值。 在此处输入图像描述

那么有没有 web3j 专家可以告诉我我的代码有什么问题?如何解决输出参数解码问题?非常感谢。

4

0 回答 0