From 6dd558b532fd9f9c5d5ea09ba0f2c7949288c7f1 Mon Sep 17 00:00:00 2001 From: Gabriel Fukushima Date: Sat, 28 Oct 2023 05:47:53 +1100 Subject: [PATCH] RPC Parameters to accept input and data field (#6094) * Accept input or data as payload for RPC calls Signed-off-by: Gabriel Fukushima * Add json new rpc valid and invalid request to test the changes Signed-off-by: Gabriel Fukushima * Change JsonCallParameter signature to avoid duplicating constructor Signed-off-by: Gabriel Fukushima * Add changelog Signed-off-by: Gabriel Fukushima --------- Signed-off-by: Gabriel Fukushima --- CHANGELOG.md | 1 + .../fork/frontier/EthCallIntegrationTest.java | 13 ++++++++++ .../EthCreateAccessListIntegrationTest.java | 8 ++++-- .../EthEstimateGasIntegrationTest.java | 8 ++++-- .../fork/london/EthCallIntegrationTest.java | 9 +++++++ .../london/EthEstimateGasIntegrationTest.java | 4 +++ .../parameters/JsonCallParameter.java | 13 +++++++--- .../jsonrpc/internal/methods/EthCallTest.java | 4 ++- .../methods/EthCreateAccessListTest.java | 2 ++ .../internal/methods/EthEstimateGasTest.java | 2 ++ .../privacy/methods/priv/PrivCallTest.java | 14 ++++++++++- ...call_invalidWithInputAndDataAttribute.json | 25 +++++++++++++++++++ .../eth/eth_call_withInputAttribute.json | 21 ++++++++++++++++ 13 files changed, 115 insertions(+), 9 deletions(-) create mode 100644 ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/eth/eth_call_invalidWithInputAndDataAttribute.json create mode 100644 ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/eth/eth_call_withInputAttribute.json diff --git a/CHANGELOG.md b/CHANGELOG.md index b31523aab0a..f77745e7d43 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ ### Additions and Improvements - Ethereum Classic Spiral network upgrade [#6078](https://github.com/hyperledger/besu/pull/6078) - Add a method to read from a `Memory` instance without altering its inner state [#6073](https://github.com/hyperledger/besu/pull/6073) +- Accept `input` and `data` field for the payload of transaction-related RPC methods [#6094](https://github.com/hyperledger/besu/pull/6094) ### Bug fixes diff --git a/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/frontier/EthCallIntegrationTest.java b/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/frontier/EthCallIntegrationTest.java index fd7145214ba..f80fa0c3a7a 100644 --- a/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/frontier/EthCallIntegrationTest.java +++ b/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/frontier/EthCallIntegrationTest.java @@ -74,6 +74,7 @@ public void shouldReturnExpectedResultForCallAtLatestBlock() { null, Bytes.fromHexString("0x12a7b914"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = @@ -98,6 +99,7 @@ public void shouldReturnExpectedResultForCallAtSpecificBlock() { null, Bytes.fromHexString("0x12a7b914"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "0x8"); final JsonRpcResponse expectedResponse = @@ -123,6 +125,7 @@ public void shouldReturnSuccessWhenCreatingContract() { Bytes.fromHexString( "0x608060405234801561001057600080fd5b50610157806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633bdab8bf146100515780639ae97baa14610068575b600080fd5b34801561005d57600080fd5b5061006661007f565b005b34801561007457600080fd5b5061007d6100b9565b005b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60016040518082815260200191505060405180910390a1565b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60026040518082815260200191505060405180910390a17fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60036040518082815260200191505060405180910390a15600a165627a7a7230582010ddaa52e73a98c06dbcd22b234b97206c1d7ed64a7c048e10c2043a3d2309cb0029"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = @@ -148,6 +151,7 @@ public void shouldReturnErrorWithGasLimitTooLow() { null, Bytes.fromHexString("0x12a7b914"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = @@ -170,6 +174,7 @@ public void shouldReturnErrorWithGasPriceTooHighAndStrict() { null, null, Bytes.fromHexString("0x12a7b914"), + null, true, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); @@ -193,6 +198,7 @@ public void shouldReturnSuccessWithGasPriceTooHighNotStrict() { null, null, Bytes.fromHexString("0x12a7b914"), + null, false, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); @@ -218,6 +224,7 @@ public void shouldReturnErrorWithGasPriceTooHigh() { null, Bytes.fromHexString("0x12a7b914"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = @@ -241,6 +248,7 @@ public void shouldReturnSuccessWithValidGasPrice() { null, Bytes.fromHexString("0x12a7b914"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = @@ -265,6 +273,7 @@ public void shouldReturnErrorWithGasPriceAndEmptyBalance() { null, Bytes.fromHexString("0x12a7b914"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = @@ -288,6 +297,7 @@ public void shouldReturnSuccessWithZeroGasPriceAndEmptyBalance() { null, Bytes.fromHexString("0x12a7b914"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = @@ -312,6 +322,7 @@ public void shouldReturnSuccessWithoutGasPriceAndEmptyBalance() { null, Bytes.fromHexString("0x12a7b914"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = @@ -336,6 +347,7 @@ public void shouldReturnSuccessWithInvalidGasPricingAndEmptyBalance() { null, Bytes.fromHexString("0x12a7b914"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = @@ -360,6 +372,7 @@ public void shouldReturnEmptyHashResultForCallWithOnlyToField() { null, null, null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = new JsonRpcSuccessResponse(null, "0x"); diff --git a/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/frontier/EthCreateAccessListIntegrationTest.java b/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/frontier/EthCreateAccessListIntegrationTest.java index a499a9f37e6..fe4dc6316ec 100644 --- a/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/frontier/EthCreateAccessListIntegrationTest.java +++ b/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/frontier/EthCreateAccessListIntegrationTest.java @@ -140,7 +140,7 @@ public void shouldSucceedWhenCreateAccessListSimpleContract() { @Test public void shouldReturnExpectedValueForEmptyCallParameter() { final JsonCallParameter callParameter = - new JsonCallParameter(null, null, null, null, null, null, null, null, null, null); + new JsonCallParameter(null, null, null, null, null, null, null, null, null, null, null); final JsonRpcRequestContext request = requestWithParams(callParameter); final JsonRpcResponse expectedResponse = new JsonRpcSuccessResponse(null, new CreateAccessListResult(new ArrayList<>(), 0xcf08)); @@ -163,6 +163,7 @@ public void shouldReturnExpectedValueForTransfer() { Wei.ZERO, null, null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter); final JsonRpcResponse expectedResponse = @@ -187,6 +188,7 @@ public void shouldReturnExpectedValueForContractDeploy() { Bytes.fromHexString( "0x608060405234801561001057600080fd5b50610157806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633bdab8bf146100515780639ae97baa14610068575b600080fd5b34801561005d57600080fd5b5061006661007f565b005b34801561007457600080fd5b5061007d6100b9565b005b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60016040518082815260200191505060405180910390a1565b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60026040518082815260200191505060405180910390a17fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60036040518082815260200191505060405180910390a15600a165627a7a7230582010ddaa52e73a98c06dbcd22b234b97206c1d7ed64a7c048e10c2043a3d2309cb0029"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter); final JsonRpcResponse expectedResponse = @@ -210,6 +212,7 @@ public void shouldIgnoreSenderBalanceAccountWhenStrictModeDisabledAndReturnExpec null, Bytes.fromHexString( "0x608060405234801561001057600080fd5b50610157806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633bdab8bf146100515780639ae97baa14610068575b600080fd5b34801561005d57600080fd5b5061006661007f565b005b34801561007457600080fd5b5061007d6100b9565b005b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60016040518082815260200191505060405180910390a1565b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60026040518082815260200191505060405180910390a17fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60036040518082815260200191505060405180910390a15600a165627a7a7230582010ddaa52e73a98c06dbcd22b234b97206c1d7ed64a7c048e10c2043a3d2309cb0029"), + null, false, null); final JsonRpcRequestContext request = requestWithParams(callParameter); @@ -224,7 +227,7 @@ public void shouldIgnoreSenderBalanceAccountWhenStrictModeDisabledAndReturnExpec @Test public void shouldReturnExpectedValueForInsufficientGas() { final JsonCallParameter callParameter = - new JsonCallParameter(null, null, 1L, null, null, null, null, null, null, null); + new JsonCallParameter(null, null, 1L, null, null, null, null, null, null, null, null); final JsonRpcRequestContext request = requestWithParams(callParameter); final JsonRpcResponse expectedResponse = new JsonRpcSuccessResponse(null, new CreateAccessListResult(new ArrayList<>(), 0xcf08)); @@ -258,6 +261,7 @@ private JsonCallParameter createAccessListJsonCallParameters( null, null, null, + null, accessList); } diff --git a/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/frontier/EthEstimateGasIntegrationTest.java b/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/frontier/EthEstimateGasIntegrationTest.java index 9e589a9ebca..5bc57774c2b 100644 --- a/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/frontier/EthEstimateGasIntegrationTest.java +++ b/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/frontier/EthEstimateGasIntegrationTest.java @@ -64,7 +64,7 @@ public void setUp() { @Test public void shouldReturnExpectedValueForEmptyCallParameter() { final JsonCallParameter callParameter = - new JsonCallParameter(null, null, null, null, null, null, null, null, null, null); + new JsonCallParameter(null, null, null, null, null, null, null, null, null, null, null); final JsonRpcRequestContext request = requestWithParams(callParameter); final JsonRpcResponse expectedResponse = new JsonRpcSuccessResponse(null, "0x5208"); @@ -86,6 +86,7 @@ public void shouldReturnExpectedValueForTransfer() { Wei.ONE, null, null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter); final JsonRpcResponse expectedResponse = new JsonRpcSuccessResponse(null, "0x5208"); @@ -109,6 +110,7 @@ public void shouldReturnExpectedValueForContractDeploy() { Bytes.fromHexString( "0x608060405234801561001057600080fd5b50610157806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633bdab8bf146100515780639ae97baa14610068575b600080fd5b34801561005d57600080fd5b5061006661007f565b005b34801561007457600080fd5b5061007d6100b9565b005b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60016040518082815260200191505060405180910390a1565b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60026040518082815260200191505060405180910390a17fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60036040518082815260200191505060405180910390a15600a165627a7a7230582010ddaa52e73a98c06dbcd22b234b97206c1d7ed64a7c048e10c2043a3d2309cb0029"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter); final JsonRpcResponse expectedResponse = new JsonRpcSuccessResponse(null, "0x1b551"); @@ -131,6 +133,7 @@ public void shouldIgnoreSenderBalanceAccountWhenStrictModeDisabledAndReturnExpec null, Bytes.fromHexString( "0x608060405234801561001057600080fd5b50610157806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633bdab8bf146100515780639ae97baa14610068575b600080fd5b34801561005d57600080fd5b5061006661007f565b005b34801561007457600080fd5b5061007d6100b9565b005b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60016040518082815260200191505060405180910390a1565b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60026040518082815260200191505060405180910390a17fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60036040518082815260200191505060405180910390a15600a165627a7a7230582010ddaa52e73a98c06dbcd22b234b97206c1d7ed64a7c048e10c2043a3d2309cb0029"), + null, false, null); final JsonRpcRequestContext request = requestWithParams(callParameter); @@ -154,6 +157,7 @@ public void shouldNotIgnoreSenderBalanceAccountWhenStrictModeDisabledAndThrowErr null, Bytes.fromHexString( "0x608060405234801561001057600080fd5b50610157806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633bdab8bf146100515780639ae97baa14610068575b600080fd5b34801561005d57600080fd5b5061006661007f565b005b34801561007457600080fd5b5061007d6100b9565b005b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60016040518082815260200191505060405180910390a1565b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60026040518082815260200191505060405180910390a17fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60036040518082815260200191505060405180910390a15600a165627a7a7230582010ddaa52e73a98c06dbcd22b234b97206c1d7ed64a7c048e10c2043a3d2309cb0029"), + null, true, null); final JsonRpcRequestContext request = requestWithParams(callParameter); @@ -167,7 +171,7 @@ public void shouldNotIgnoreSenderBalanceAccountWhenStrictModeDisabledAndThrowErr @Test public void shouldReturnExpectedValueForInsufficientGas() { final JsonCallParameter callParameter = - new JsonCallParameter(null, null, 1L, null, null, null, null, null, null, null); + new JsonCallParameter(null, null, 1L, null, null, null, null, null, null, null, null); final JsonRpcRequestContext request = requestWithParams(callParameter); final JsonRpcResponse expectedResponse = new JsonRpcSuccessResponse(null, "0x5208"); diff --git a/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/london/EthCallIntegrationTest.java b/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/london/EthCallIntegrationTest.java index 170fc38b0ed..f72a452db9d 100644 --- a/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/london/EthCallIntegrationTest.java +++ b/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/london/EthCallIntegrationTest.java @@ -74,6 +74,7 @@ public void shouldReturnSuccessWithoutGasPriceAndEmptyBalance() { null, Bytes.fromHexString("0x2e64cec1"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = @@ -98,6 +99,7 @@ public void shouldReturnErrorWithGasPriceTooHigh() { null, Bytes.fromHexString("0x2e64cec1"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = @@ -121,6 +123,7 @@ public void shouldReturnSuccessWithValidGasPrice() { null, Bytes.fromHexString("0x2e64cec1"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = @@ -145,6 +148,7 @@ public void shouldReturnErrorWithGasPriceLessThanCurrentBaseFee() { null, Bytes.fromHexString("0x2e64cec1"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = @@ -168,6 +172,7 @@ public void shouldReturnSuccessWithValidMaxFeePerGas() { null, Bytes.fromHexString("0x2e64cec1"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = @@ -192,6 +197,7 @@ public void shouldReturnSuccessWithValidMaxFeePerGasAndMaxPriorityFeePerGas() { null, Bytes.fromHexString("0x2e64cec1"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = @@ -216,6 +222,7 @@ public void shouldReturnErrorWithValidMaxFeePerGasLessThanCurrentBaseFee() { null, Bytes.fromHexString("0x2e64cec1"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = @@ -239,6 +246,7 @@ public void shouldReturnErrorWithValidMaxFeePerGasLessThanMaxPriorityFeePerGas() null, Bytes.fromHexString("0x2e64cec1"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = @@ -263,6 +271,7 @@ public void shouldReturnErrorWithMaxFeePerGasAndEmptyBalance() { null, Bytes.fromHexString("0x2e64cec1"), null, + null, null); final JsonRpcRequestContext request = requestWithParams(callParameter, "latest"); final JsonRpcResponse expectedResponse = diff --git a/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/london/EthEstimateGasIntegrationTest.java b/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/london/EthEstimateGasIntegrationTest.java index fe4cfa9cd92..e34466a644a 100644 --- a/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/london/EthEstimateGasIntegrationTest.java +++ b/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/london/EthEstimateGasIntegrationTest.java @@ -77,6 +77,7 @@ public void shouldReturnExpectedValueForTransfer() { Wei.ONE, null, null, + null, null); final JsonRpcResponse response = method.response(requestWithParams(callParameter)); @@ -98,6 +99,7 @@ public void shouldReturnExpectedValueForTransfer_WithAccessList() { Wei.ONE, null, null, + null, createAccessList()); final JsonRpcResponse response = method.response(requestWithParams(callParameter)); @@ -119,6 +121,7 @@ public void shouldReturnExpectedValueForContractDeploy() { Bytes.fromHexString( "0x608060405234801561001057600080fd5b50610157806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633bdab8bf146100515780639ae97baa14610068575b600080fd5b34801561005d57600080fd5b5061006661007f565b005b34801561007457600080fd5b5061007d6100b9565b005b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60016040518082815260200191505060405180910390a1565b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60026040518082815260200191505060405180910390a17fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60036040518082815260200191505060405180910390a15600a165627a7a7230582010ddaa52e73a98c06dbcd22b234b97206c1d7ed64a7c048e10c2043a3d2309cb0029"), null, + null, null); final JsonRpcResponse response = method.response(requestWithParams(callParameter)); final JsonRpcResponse expectedResponse = new JsonRpcSuccessResponse(null, "0x1f081"); @@ -139,6 +142,7 @@ public void shouldReturnExpectedValueForContractDeploy_WithAccessList() { Bytes.fromHexString( "0x608060405234801561001057600080fd5b50610157806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633bdab8bf146100515780639ae97baa14610068575b600080fd5b34801561005d57600080fd5b5061006661007f565b005b34801561007457600080fd5b5061007d6100b9565b005b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60016040518082815260200191505060405180910390a1565b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60026040518082815260200191505060405180910390a17fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60036040518082815260200191505060405180910390a15600a165627a7a7230582010ddaa52e73a98c06dbcd22b234b97206c1d7ed64a7c048e10c2043a3d2309cb0029"), null, + null, createAccessList()); final JsonRpcResponse response = method.response(requestWithParams(callParameter)); diff --git a/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/parameters/JsonCallParameter.java b/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/parameters/JsonCallParameter.java index 3fd9635dc47..4141278c883 100644 --- a/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/parameters/JsonCallParameter.java +++ b/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/parameters/JsonCallParameter.java @@ -49,10 +49,12 @@ public JsonCallParameter( @JsonProperty("maxPriorityFeePerGas") final Wei maxPriorityFeePerGas, @JsonProperty("maxFeePerGas") final Wei maxFeePerGas, @JsonProperty("value") final Wei value, - @JsonDeserialize(using = HexStringDeserializer.class) @JsonProperty("data") - final Bytes payload, + @JsonDeserialize(using = HexStringDeserializer.class) @JsonProperty("data") final Bytes data, + @JsonDeserialize(using = HexStringDeserializer.class) @JsonProperty("input") + final Bytes input, @JsonProperty("strict") final Boolean strict, @JsonProperty("accessList") final List accessList) { + super( from, to, @@ -61,8 +63,13 @@ public JsonCallParameter( Optional.ofNullable(maxPriorityFeePerGas), Optional.ofNullable(maxFeePerGas), value, - payload, + Optional.ofNullable(input != null ? input : data).orElse(null), Optional.ofNullable(accessList)); + + if (input != null && data != null) { + throw new IllegalArgumentException("Only one of 'input' or 'data' should be provided"); + } + this.strict = Optional.ofNullable(strict); } diff --git a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthCallTest.java b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthCallTest.java index 7580d511df8..00c5af2f94c 100644 --- a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthCallTest.java +++ b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthCallTest.java @@ -115,7 +115,8 @@ public void shouldReturnInternalErrorWhenProcessorReturnsEmpty() { @Test public void shouldAcceptRequestWhenMissingOptionalFields() { final JsonCallParameter callParameter = - new JsonCallParameter(null, null, null, null, null, null, null, null, Boolean.FALSE, null); + new JsonCallParameter( + null, null, null, null, null, null, null, null, null, Boolean.FALSE, null); final JsonRpcRequestContext request = ethCallRequest(callParameter, "latest"); final JsonRpcResponse expectedResponse = new JsonRpcSuccessResponse(null, Bytes.of().toString()); @@ -453,6 +454,7 @@ private JsonCallParameter callParameter( Wei.ZERO, Bytes.EMPTY, null, + null, null); } diff --git a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthCreateAccessListTest.java b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthCreateAccessListTest.java index b17f00acfb3..ec74d82991a 100644 --- a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthCreateAccessListTest.java +++ b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthCreateAccessListTest.java @@ -308,6 +308,7 @@ private JsonCallParameter legacyTransactionCallParameter(final Wei gasPrice) { null, Wei.ZERO, Bytes.EMPTY, + null, false, null); } @@ -336,6 +337,7 @@ private JsonCallParameter eip1559TransactionCallParameter( Wei.fromHexString("0x10"), Wei.ZERO, Bytes.EMPTY, + null, false, accessListEntries); } diff --git a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthEstimateGasTest.java b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthEstimateGasTest.java index 038aed5baa2..6f1d748030f 100644 --- a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthEstimateGasTest.java +++ b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthEstimateGasTest.java @@ -436,6 +436,7 @@ private JsonCallParameter legacyTransactionCallParameter( null, Wei.ZERO, Bytes.EMPTY, + null, isStrict, null); } @@ -467,6 +468,7 @@ private JsonCallParameter eip1559TransactionCallParameter(final Optional ga Wei.fromHexString("0x10"), Wei.ZERO, Bytes.EMPTY, + null, false, null); } diff --git a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/privacy/methods/priv/PrivCallTest.java b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/privacy/methods/priv/PrivCallTest.java index d36291e25c6..3542ff5100a 100644 --- a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/privacy/methods/priv/PrivCallTest.java +++ b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/privacy/methods/priv/PrivCallTest.java @@ -85,6 +85,7 @@ public void shouldThrowInvalidJsonRpcParametersExceptionWhenMissingToField() { Wei.ZERO, Bytes.EMPTY, null, + null, null); final JsonRpcRequestContext request = ethCallRequest(privacyGroupId, callParameter, "latest"); @@ -111,7 +112,17 @@ public void shouldReturnNullWhenProcessorReturnsEmpty() { public void shouldAcceptRequestWhenMissingOptionalFields() { final JsonCallParameter callParameter = new JsonCallParameter( - null, Address.fromHexString("0x0"), null, null, null, null, null, null, null, null); + null, + Address.fromHexString("0x0"), + null, + null, + null, + null, + null, + null, + null, + null, + null); final JsonRpcRequestContext request = ethCallRequest(privacyGroupId, callParameter, "latest"); final JsonRpcResponse expectedResponse = new JsonRpcSuccessResponse(null, Bytes.of().toString()); @@ -191,6 +202,7 @@ private JsonCallParameter callParameter() { Wei.ZERO, Bytes.EMPTY, null, + null, null); } diff --git a/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/eth/eth_call_invalidWithInputAndDataAttribute.json b/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/eth/eth_call_invalidWithInputAndDataAttribute.json new file mode 100644 index 00000000000..eda5c99c0bc --- /dev/null +++ b/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/eth/eth_call_invalidWithInputAndDataAttribute.json @@ -0,0 +1,25 @@ +{ + "request": { + "id": 3, + "jsonrpc": "2.0", + "method": "eth_call", + "params": [ + { + "to": "0x6295ee1b4f6dd65047762f924ecd367c17eabf8f", + "from": "a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "input": "0x12a7b914", + "data": "0x12a7b914" + }, + "0x19" + ] + }, + "response": { + "jsonrpc": "2.0", + "id": 3, + "error" : { + "code" : -32602, + "message" : "Invalid params" + } + }, + "statusCode": 200 +} \ No newline at end of file diff --git a/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/eth/eth_call_withInputAttribute.json b/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/eth/eth_call_withInputAttribute.json new file mode 100644 index 00000000000..8822f2bcde0 --- /dev/null +++ b/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/eth/eth_call_withInputAttribute.json @@ -0,0 +1,21 @@ +{ + "request": { + "id": 3, + "jsonrpc": "2.0", + "method": "eth_call", + "params": [ + { + "to": "0x6295ee1b4f6dd65047762f924ecd367c17eabf8f", + "from": "a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "input": "0x12a7b914" + }, + "0x19" + ] + }, + "response": { + "jsonrpc": "2.0", + "id": 3, + "result": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "statusCode": 200 +} \ No newline at end of file