Il existe des méthodes send et sendAsync pour envoyer une transaction signée à l'aide de la bibliothèque Java d'Ethereum "Web3j". Dans cet article, j'ai décrit comment envoyer une transaction à l'aide de send, mais j'ai également implémenté une méthode utilisant sendAsync, je la conserverai donc comme un enregistrement. Envoyer la transaction signée via Web3j
Le code.
SendTransaction.java
public TransactionReceipt sendTransactionAsync(Credentials credentials, String password, String toAddress, long value) {
CompletableFuture<TransactionReceipt> receipt = null;
try {
//Générer une transaction
// "personal_unlockAccount"Envoyez une demande et recevez une réponse
PersonalUnlockAccount unlockAccountResponse = web3j.personalUnlockAccount(
credentials.getAddress(), //adresse
password //mot de passe
).send();
//Si le déverrouillage est réussi, envoyez Ether
if (unlockAccountResponse.getResult()) {
//Envoyez une transaction.
receipt = Transfer.sendFunds(web3j, credentials, toAddress, BigDecimal.valueOf(value), Unit.ETHER).sendAsync();
}
return receipt.get();
}catch(IOException | TransactionException ex) {
ex.printStackTrace();
}catch(Exception ex) {
ex.printStackTrace();
}
return null;
}
Les différences sont les suivantes.
SendTransaction.java
receipt = Transfer.sendFunds(web3j, credentials, toAddress, BigDecimal.valueOf(value), Unit.ETHER).send();
SendTransaction.java
receipt = Transfer.sendFunds(web3j, credentials, toAddress, BigDecimal.valueOf(value), Unit.ETHER).sendAsync();
Send ne renvoie pas de réponse tant que la transaction n'est pas incluse dans le bloc. sendAsync renvoie une réponse lorsqu'une transaction est envoyée, vous n'avez donc pas à attendre qu'elle soit capturée dans un bloc.
Cependant, lors de l'utilisation de la méthode get de "CompletableFuture
Il semble préférable d'utiliser sendAsync lorsque vous n'avez pas à attendre qu'une transaction entre dans un bloc.
Recommended Posts