Web3j - Transfer.sendFunds esperar para siempre

Después de luchar con el problema de Geth (entonces decidí usar Geth 1.8.2, mágicamente resolvió el problema).

Encontré 2 enfoques para enviar ether: el primer enfoque son los siguientes códigos

     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();

Y el segundo enfoque es:

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

Ambos funcionan sin problemas, hasta que me di cuenta de que el primero creará directamente un hash de transacción y la siguiente operación puede continuar, pero el segundo enviará una transacción, requiere que inicie el minero para que se complete. ¿Hay alguna forma de que el segundo genere su hash de transacción y no requiera que el programa espere hasta que finalice primero y luego continúe?

Además, ¿cuál es la buena/mala práctica? ¿Por qué? Me gustaría usar el segundo enfoque porque es más ordenado y más corto, también mi forma de enviar el token ERC20 a otra billetera es simplemente usar el envoltorio en lugar de crear su transacción sin procesar.

Respuestas (1)

En el primer enfoque, puede manipular el nonce :), eso es útil si una transacción suya se atascó