diff --git a/ethereum/jsonrpc/src/main/java/tech/pegasys/pantheon/ethereum/jsonrpc/JsonRpcMethodsFactory.java b/ethereum/jsonrpc/src/main/java/tech/pegasys/pantheon/ethereum/jsonrpc/JsonRpcMethodsFactory.java index d00e26edcf..3e8a3ffce1 100644 --- a/ethereum/jsonrpc/src/main/java/tech/pegasys/pantheon/ethereum/jsonrpc/JsonRpcMethodsFactory.java +++ b/ethereum/jsonrpc/src/main/java/tech/pegasys/pantheon/ethereum/jsonrpc/JsonRpcMethodsFactory.java @@ -65,6 +65,7 @@ import tech.pegasys.pantheon.ethereum.jsonrpc.internal.methods.EthNewFilter; import tech.pegasys.pantheon.ethereum.jsonrpc.internal.methods.EthNewPendingTransactionFilter; import tech.pegasys.pantheon.ethereum.jsonrpc.internal.methods.EthProtocolVersion; import tech.pegasys.pantheon.ethereum.jsonrpc.internal.methods.EthSendRawTransaction; +import tech.pegasys.pantheon.ethereum.jsonrpc.internal.methods.EthSendTransaction; import tech.pegasys.pantheon.ethereum.jsonrpc.internal.methods.EthSyncing; import tech.pegasys.pantheon.ethereum.jsonrpc.internal.methods.EthUninstallFilter; import tech.pegasys.pantheon.ethereum.jsonrpc.internal.methods.JsonRpcMethod; @@ -234,6 +235,7 @@ public class JsonRpcMethodsFactory { new EthSyncing(synchronizer), new EthGetStorageAt(blockchainQueries, parameter), new EthSendRawTransaction(transactionPool, parameter), + new EthSendTransaction(), new EthEstimateGas( blockchainQueries, new TransactionSimulator( diff --git a/ethereum/jsonrpc/src/main/java/tech/pegasys/pantheon/ethereum/jsonrpc/RpcMethod.java b/ethereum/jsonrpc/src/main/java/tech/pegasys/pantheon/ethereum/jsonrpc/RpcMethod.java index 5a05fd2202..9ccb95f8f7 100644 --- a/ethereum/jsonrpc/src/main/java/tech/pegasys/pantheon/ethereum/jsonrpc/RpcMethod.java +++ b/ethereum/jsonrpc/src/main/java/tech/pegasys/pantheon/ethereum/jsonrpc/RpcMethod.java @@ -73,6 +73,7 @@ public enum RpcMethod { ETH_NEW_PENDING_TRANSACTION_FILTER("eth_newPendingTransactionFilter"), ETH_PROTOCOL_VERSION("eth_protocolVersion"), ETH_SEND_RAW_TRANSACTION("eth_sendRawTransaction"), + ETH_SEND_TRANSACTION("eth_sendTransaction"), ETH_SUBSCRIBE("eth_subscribe"), ETH_SYNCING("eth_syncing"), ETH_UNINSTALL_FILTER("eth_uninstallFilter"), diff --git a/ethereum/jsonrpc/src/main/java/tech/pegasys/pantheon/ethereum/jsonrpc/internal/methods/EthSendTransaction.java b/ethereum/jsonrpc/src/main/java/tech/pegasys/pantheon/ethereum/jsonrpc/internal/methods/EthSendTransaction.java new file mode 100644 index 0000000000..6e4d19401a --- /dev/null +++ b/ethereum/jsonrpc/src/main/java/tech/pegasys/pantheon/ethereum/jsonrpc/internal/methods/EthSendTransaction.java @@ -0,0 +1,32 @@ +/* + * Copyright 2018 ConsenSys AG. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package tech.pegasys.pantheon.ethereum.jsonrpc.internal.methods; + +import tech.pegasys.pantheon.ethereum.jsonrpc.RpcMethod; +import tech.pegasys.pantheon.ethereum.jsonrpc.internal.JsonRpcRequest; +import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcError; +import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcErrorResponse; +import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcResponse; + +public class EthSendTransaction implements JsonRpcMethod { + + @Override + public String getName() { + return RpcMethod.ETH_SEND_TRANSACTION.getMethodName(); + } + + @Override + public JsonRpcResponse response(final JsonRpcRequest request) { + return new JsonRpcErrorResponse(request.getId(), JsonRpcError.ETH_SEND_TX_NOT_AVAILABLE); + } +} diff --git a/ethereum/jsonrpc/src/main/java/tech/pegasys/pantheon/ethereum/jsonrpc/internal/response/JsonRpcError.java b/ethereum/jsonrpc/src/main/java/tech/pegasys/pantheon/ethereum/jsonrpc/internal/response/JsonRpcError.java index 90467a57ba..2c1fd806bc 100644 --- a/ethereum/jsonrpc/src/main/java/tech/pegasys/pantheon/ethereum/jsonrpc/internal/response/JsonRpcError.java +++ b/ethereum/jsonrpc/src/main/java/tech/pegasys/pantheon/ethereum/jsonrpc/internal/response/JsonRpcError.java @@ -27,6 +27,11 @@ public enum JsonRpcError { INTERNAL_ERROR(-32603, "Internal error"), METHOD_NOT_ENABLED(-32604, "Method not enabled"), + // eth_sendTransaction specific error message + ETH_SEND_TX_NOT_AVAILABLE( + -32604, + "The method eth_sendTransaction is not supported. Use eth_sendRawTransaction to send a signed transaction to Pantheon."), + // P2P related errors P2P_DISABLED(-32000, "P2P has been disabled. This functionality is not available"), P2P_NETWORK_NOT_RUNNING(-32000, "P2P network is not running"), diff --git a/ethereum/jsonrpc/src/test/java/tech/pegasys/pantheon/ethereum/jsonrpc/internal/methods/EthSendTransactionTest.java b/ethereum/jsonrpc/src/test/java/tech/pegasys/pantheon/ethereum/jsonrpc/internal/methods/EthSendTransactionTest.java new file mode 100644 index 0000000000..22f7cd0460 --- /dev/null +++ b/ethereum/jsonrpc/src/test/java/tech/pegasys/pantheon/ethereum/jsonrpc/internal/methods/EthSendTransactionTest.java @@ -0,0 +1,51 @@ +/* + * Copyright 2019 ConsenSys AG. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package tech.pegasys.pantheon.ethereum.jsonrpc.internal.methods; + +import static org.assertj.core.api.Assertions.assertThat; + +import tech.pegasys.pantheon.ethereum.jsonrpc.internal.JsonRpcRequest; +import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcError; +import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcErrorResponse; +import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcResponse; + +import org.junit.Before; +import org.junit.Test; + +public class EthSendTransactionTest { + + private JsonRpcMethod method; + + @Before + public void before() { + method = new EthSendTransaction(); + } + + @Test + public void methodReturnExpectedName() { + assertThat(method.getName()).isEqualTo("eth_sendTransaction"); + } + + @Test + public void requestIsMissingParameter() { + final JsonRpcRequest request = + new JsonRpcRequest("2.0", "eth_sendTransaction", new String[] {}); + + final JsonRpcResponse expectedResponse = + new JsonRpcErrorResponse(request.getId(), JsonRpcError.ETH_SEND_TX_NOT_AVAILABLE); + + final JsonRpcResponse actualResponse = method.response(request); + + assertThat(actualResponse).isEqualToComparingFieldByField(expectedResponse); + } +}