Balances

如何使用 web3j 獲取已部署 ERC20 合約的 balanceOf?

  • December 5, 2017

我是乙太坊的新手,我一直在嘗試在已部署的 ERC20 合約上呼叫balanceOf

這是我到目前為止的程式碼:

   Web3j web3j = Web3j.build(new HttpService());

   RemoteCall<BigInteger> customerBalance;
   Function function = new Function(
           "balanceOf",
           Arrays.asList(new Address(<address_of_the_account>,
           new ArrayList<>());
   String encodedFunction = FunctionEncoder.encode(function);
   org.web3j.protocol.core.methods.response.EthCall response = web3j.ethCall(
           Transaction.createEthCallTransaction(<not_sure_what_the _FROM_address_is>, <not_sure_what_the_TO_address_is>, encodedFunction),
           DefaultBlockParameterName.LATEST)
           .sendAsync().get();

   List<Type> result = FunctionReturnDecoder.decode(
           response.getValue(), function.getOutputParameters());

在文件中(https://docs.web3j.io/transactions.html#querying-the-state-of-a-smart-contract)有不同的簽名(Transaction.createEthCallTransaction(contractAddress, encodedFunction),但那沒有編譯。

我正在使用 3.1.1 版本的 web3j(最新)。我不知道tofrom地址是什麼(在文件中只有一個地址,我假設它是部署的契約的地址)。

文件中的範例是錯誤的。

如果程式碼是真的,Transaction#createEthCallTransaction 函式總是有三個參數:

public static Transaction createEthCallTransaction(String from, String to, String data) {
       return new Transaction(from, null, null, null, to, null, data);
}

文件描述了交易的“來自”屬性,如下所示:

web3j 中不同類型的事務處理 Transaction 和 RawTransaction 對象。關鍵區別在於 Transaction 對象必須始終有一個發件人地址,以便處理 eth_sendTransaction 請求的乙太坊客戶端知道使用哪個錢包來代表消息發送者簽署和發送交易。如上所述,對於離線簽名的原始交易,這不是必需的。

因此,您只需要將查詢合約的地址映射到“發件人”欄位,並將合約地址(如您已經假設的)映射到“收件人”欄位。

引用自:https://ethereum.stackexchange.com/questions/32407