Es gibt die send-Methode und die sendAsync-Methode, um eine signierte Transaktion mit der Java-Bibliothek "Web3j" von Ethereum zu senden. In diesem Artikel habe ich beschrieben, wie eine Transaktion mit send gesendet wird, aber ich habe auch eine Methode mit sendAsync implementiert, damit ich sie als Aufzeichnung aufbewahre. Signierte Transaktion mit Web3j senden
Der Code.
SendTransaction.java
public TransactionReceipt sendTransactionAsync(Credentials credentials, String password, String toAddress, long value) {
CompletableFuture<TransactionReceipt> receipt = null;
try {
//Eine Transaktion generieren
// "personal_unlockAccount"Senden Sie eine Anfrage und erhalten Sie eine Antwort
PersonalUnlockAccount unlockAccountResponse = web3j.personalUnlockAccount(
credentials.getAddress(), //Adresse
password //Passwort
).send();
//Wenn das Entsperren erfolgreich ist, senden Sie Ether
if (unlockAccountResponse.getResult()) {
//Senden Sie eine Transaktion.
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;
}
Die Unterschiede sind wie folgt.
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();
Senden gibt keine Antwort zurück, bis die Transaktion im Block enthalten ist. sendAsync gibt eine Antwort zurück, wenn eine Transaktion gesendet wird, sodass Sie nicht warten müssen, bis sie in einem Block erfasst wird.
Wenn Sie jedoch die get-Methode von "CompletableFuture
Es scheint besser, sendAsync zu verwenden, wenn Sie nicht warten müssen, bis eine Transaktion in einen Block gelangt.
Recommended Posts