Как извлечь данные из функции типа возврата «RemoteCall» в java / kotlin?

#java #ethereum #geth #web3-java

#java #ethereum #geth #web3-java

Вопрос:

Я пытаюсь прочитать баланс адреса из контракта токена erc20 с помощью web3j. Я уже сгенерировал файл контракта, эквивалентный Java. В этом файле функция возвращает объект типа RemoteCall. Теперь, как проанализировать этот вывод, чтобы я мог просто получить число (большое целое значение)?

Когда я пытаюсь зарегистрировать вывод с помощью Android log, я получаю какой-то зашифрованный вывод —

org.web3j.protocol.core.RemoteCall@48c4d84

Теперь я совершенно запутался, что делать дальше?

 public RemoteCall<BigInteger> balanceOf(String param0) {
    final Function function = new Function(FUNC_BALANCEOF, Arrays.<Type>asList(new Address(param0)),
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
    return executeRemoteCallSingleValueReturn(function, BigInteger.class);
}
  

Ожидаемый результат имеет тип большого целого числа (остаток токена адреса).

Комментарии:

1. Этот вывод не закодирован. org.web3j.protocol.core.RemoteCall@48c4d84 это просто имя класса и ссылка на память объекта. Это просто означает, что toString() это не реализовано на этом объекте.

2. Вы читали какую-либо документацию по классу RemoteCall? Какие методы доступны?

3. Эта страница не найдена. Кроме того, я уже пробовал документацию web3j, но не получил никаких подробностей о том, как анализировать результаты.

4. github.com/web3j/web3j/blob/master/core/src/main/java/org/web3j/…

Ответ №1:

Вам нужно вызвать send() экземпляр, RemoteCall<BigInteger> который возвращается из balanceOf() :

 RemoteCall<BigInteger> remoteCall = someObject.balanceOf(someParameter);
BigInteger result = remoteCall.send();