После борьбы с проблемой от 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 в другой кошелек — просто использовать оболочку вместо создания необработанной транзакции.
В первом подходе вы можете манипулировать одноразовым номером :), это полезно, если ваша транзакция застряла.