Как использовать web3j для декодирования outputParameters для типа возвращаемого значения "string []" ABI - PullRequest
0 голосов
/ 13 июля 2020

Мой смарт-контракт имеет одну функцию 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 может быть вызвана из ремикса и он работал хорошо и возвращал соответствующее значение. введите описание изображения здесь

Так есть ли какой-нибудь эксперт по web3j, который может сказать мне, что не так с моим кодом? Как решить проблему декодирования выходных параметров? Большое спасибо.

...