Web3j - Transfer.sendFunds ждут вечно

После борьбы с проблемой от Geth (потом я решил использовать Geth 1.8.2, волшебным образом это решило проблему).

Я нашел 2 подхода к отправке эфира: первый подход - это следующие коды

     EthGetTransactionCount ethGetTransactionCount = web3.ethGetTransactionCount(
     creds.getAddress(), DefaultBlockParameterName.LATEST).sendAsync().get();
     BigInteger nonce = ethGetTransactionCount.getTransactionCount();

     RawTransaction rawTransaction = RawTransaction.createEtherTransaction(
     nonce, gasPrice, gasLimit, "0x<TO_ADDRESS>",
     new BigInteger("10000"));

     byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, creds);
     String hexValue = Numeric.toHexString(signedMessage);
     // FROM here you can get the tx hash.
     EthSendTransaction ethSendTransaction =
     web3.ethSendRawTransaction(hexValue).send();

И 2-й подход:

TransactionReceipt transactionReceipt = Transfer.sendFunds(
     web3, creds, "0x<TO_ADDRESS>",
     BigDecimal.valueOf(1.0),Convert.Unit.ETHER).sendAsync().get();
     String etherReceipt = transactionReceipt.getTransactionHash();

Оба работают гладко, пока я не понял, что первый напрямую создаст хэш транзакции, и следующую операцию можно будет продолжить, но второй отправит транзакцию, для ее завершения мне потребуется запустить майнер. Есть ли способ для второго сгенерировать свой хэш транзакции и не требует, чтобы программа ждала, пока она сначала не завершится, а затем продолжится.

Кроме того, что является хорошей/плохой практикой? Почему? Я хотел бы использовать второй подход, потому что он аккуратнее и короче, а также мой способ отправить токен ERC20 в другой кошелек — просто использовать оболочку вместо создания необработанной транзакции.

Ответы (1)

В первом подходе вы можете манипулировать одноразовым номером :), это полезно, если ваша транзакция застряла.