Skip to content

Commit da1a1fc

Browse files
authored
Clean up TransactionTransmitter (Consensys#206)
1 parent a07a0dc commit da1a1fc

File tree

1 file changed

+37
-21
lines changed

1 file changed

+37
-21
lines changed

ethsigner/core/src/main/java/tech/pegasys/ethsigner/core/requesthandler/sendtransaction/TransactionTransmitter.java

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,14 @@
2727

2828
import java.net.SocketException;
2929
import java.net.SocketTimeoutException;
30+
import java.util.Optional;
3031

3132
import io.vertx.core.buffer.Buffer;
3233
import io.vertx.core.http.HttpClient;
3334
import io.vertx.core.http.HttpClientRequest;
3435
import io.vertx.core.http.HttpClientResponse;
3536
import io.vertx.core.http.HttpServerRequest;
37+
import io.vertx.core.json.EncodeException;
3638
import io.vertx.core.json.Json;
3739
import io.vertx.ext.web.RoutingContext;
3840
import org.apache.logging.log4j.LogManager;
@@ -62,21 +64,48 @@ public TransactionTransmitter(
6264
}
6365

6466
public void send() {
65-
createSignedTransactionBody();
66-
}
67+
final Optional<JsonRpcRequest> request = createSignedTransactionBody();
68+
69+
if (request.isEmpty()) {
70+
return;
71+
}
6772

68-
private void createSignedTransactionBody() {
69-
final String signedTransactionHexString;
7073
try {
71-
if (!transaction.isNonceUserSpecified()) {
72-
transaction.updateNonce();
74+
sendTransaction(Json.encodeToBuffer(request.get()));
75+
} catch (final IllegalArgumentException | EncodeException e) {
76+
LOG.debug("JSON Serialization failed for: {}", request, e);
77+
routingContext.fail(BAD_REQUEST.code(), new JsonRpcException(INTERNAL_ERROR));
78+
}
79+
}
80+
81+
private Optional<JsonRpcRequest> createSignedTransactionBody() {
82+
83+
if (!transaction.isNonceUserSpecified()) {
84+
if (!populateNonce()) {
85+
return Optional.empty();
7386
}
87+
}
7488

89+
final String signedTransactionHexString;
90+
try {
7591
signedTransactionHexString = transactionSerializer.serialize(transaction);
7692
} catch (final IllegalArgumentException e) {
7793
LOG.debug("Failed to encode transaction: {}", transaction, e);
7894
routingContext.fail(BAD_REQUEST.code(), new JsonRpcException(JsonRpcError.INVALID_PARAMS));
79-
return;
95+
return Optional.empty();
96+
} catch (final Throwable thrown) {
97+
LOG.debug("Failed to encode transaction: {}", transaction, thrown);
98+
routingContext.fail(BAD_REQUEST.code(), new JsonRpcException(INTERNAL_ERROR));
99+
return Optional.empty();
100+
}
101+
102+
return Optional.of(transaction.jsonRpcRequest(signedTransactionHexString, transaction.getId()));
103+
}
104+
105+
private boolean populateNonce() {
106+
try {
107+
transaction.updateNonce();
108+
return true;
80109
} catch (final RuntimeException e) {
81110
LOG.warn("Unable to get nonce from web3j provider.", e);
82111
final Throwable cause = e.getCause();
@@ -86,21 +115,8 @@ private void createSignedTransactionBody() {
86115
} else {
87116
routingContext.fail(GATEWAY_TIMEOUT.code(), new JsonRpcException(INTERNAL_ERROR));
88117
}
89-
return;
90-
} catch (final Throwable thrown) {
91-
LOG.debug("Failed to encode/serialize transaction: {}", transaction, thrown);
92-
routingContext.fail(BAD_REQUEST.code(), new JsonRpcException(INTERNAL_ERROR));
93-
return;
94-
}
95-
96-
final JsonRpcRequest rawTransaction =
97-
transaction.jsonRpcRequest(signedTransactionHexString, transaction.getId());
98-
try {
99-
sendTransaction(Json.encodeToBuffer(rawTransaction));
100-
} catch (final IllegalArgumentException e) {
101-
LOG.debug("JSON Serialization failed for: {}", rawTransaction, e);
102-
routingContext.fail(BAD_REQUEST.code(), new JsonRpcException(INTERNAL_ERROR));
103118
}
119+
return false;
104120
}
105121

106122
private void sendTransaction(final Buffer bodyContent) {

0 commit comments

Comments
 (0)