From 9014fa49ae22734a09837d40f28616d5b25ba50b Mon Sep 17 00:00:00 2001 From: Gabriel Fukushima Date: Thu, 26 Oct 2023 11:49:14 -0300 Subject: [PATCH 1/4] Accept input or data as payload for RPC calls Signed-off-by: Gabriel Fukushima --- .../parameters/JsonCallParameter.java | 38 +++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) 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..61fef1e6c58 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 @@ -40,6 +40,31 @@ public class JsonCallParameter extends CallParameter { private final Optional strict; + public JsonCallParameter( + @JsonProperty("from") final Address from, + @JsonProperty("to") final Address to, + @JsonDeserialize(using = HexLongDeserializer.class) @JsonProperty("gas") final Long gasLimit, + @JsonProperty("gasPrice") final Wei gasPrice, + @JsonProperty("maxPriorityFeePerGas") final Wei maxPriorityFeePerGas, + @JsonProperty("maxFeePerGas") final Wei maxFeePerGas, + @JsonProperty("value") final Wei value, + @JsonDeserialize(using = HexStringDeserializer.class) @JsonProperty("data") final Bytes data, + @JsonProperty("strict") final Boolean strict, + @JsonProperty("accessList") final List accessList) { + this( + from, + to, + gasLimit, + gasPrice, + maxPriorityFeePerGas, + maxFeePerGas, + value, + data, + null, + strict, + accessList); + } + @JsonCreator public JsonCallParameter( @JsonProperty("from") final Address from, @@ -49,10 +74,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("input") + final Bytes input, + @JsonDeserialize(using = HexStringDeserializer.class) @JsonProperty("data") final Bytes data, @JsonProperty("strict") final Boolean strict, @JsonProperty("accessList") final List accessList) { + super( from, to, @@ -61,8 +88,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); } From 34bb2f4e27b20adb5ace4ba21f7ce58751dc26dc Mon Sep 17 00:00:00 2001 From: Gabriel Fukushima Date: Thu, 26 Oct 2023 11:49:46 -0300 Subject: [PATCH 2/4] Add json new rpc valid and invalid request to test the changes Signed-off-by: Gabriel Fukushima --- ...call_invalidWithInputAndDataAttribute.json | 25 +++++++++++++++++++ .../eth/eth_call_withInputAttribute.json | 21 ++++++++++++++++ 2 files changed, 46 insertions(+) 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/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 From 8d5fd5d142f4173bc844ca5d672b08f4979356d1 Mon Sep 17 00:00:00 2001 From: Gabriel Fukushima Date: Fri, 27 Oct 2023 14:22:48 -0300 Subject: [PATCH 3/4] Change JsonCallParameter signature to avoid duplicating constructor Signed-off-by: Gabriel Fukushima --- .../fork/frontier/EthCallIntegrationTest.java | 13 +++++++++ .../EthCreateAccessListIntegrationTest.java | 8 ++++-- .../EthEstimateGasIntegrationTest.java | 8 ++++-- .../fork/london/EthCallIntegrationTest.java | 9 +++++++ .../london/EthEstimateGasIntegrationTest.java | 4 +++ .../parameters/JsonCallParameter.java | 27 +------------------ .../jsonrpc/internal/methods/EthCallTest.java | 4 ++- .../methods/EthCreateAccessListTest.java | 2 ++ .../internal/methods/EthEstimateGasTest.java | 2 ++ .../privacy/methods/priv/PrivCallTest.java | 14 +++++++++- 10 files changed, 59 insertions(+), 32 deletions(-) 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 61fef1e6c58..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 @@ -40,31 +40,6 @@ public class JsonCallParameter extends CallParameter { private final Optional strict; - public JsonCallParameter( - @JsonProperty("from") final Address from, - @JsonProperty("to") final Address to, - @JsonDeserialize(using = HexLongDeserializer.class) @JsonProperty("gas") final Long gasLimit, - @JsonProperty("gasPrice") final Wei gasPrice, - @JsonProperty("maxPriorityFeePerGas") final Wei maxPriorityFeePerGas, - @JsonProperty("maxFeePerGas") final Wei maxFeePerGas, - @JsonProperty("value") final Wei value, - @JsonDeserialize(using = HexStringDeserializer.class) @JsonProperty("data") final Bytes data, - @JsonProperty("strict") final Boolean strict, - @JsonProperty("accessList") final List accessList) { - this( - from, - to, - gasLimit, - gasPrice, - maxPriorityFeePerGas, - maxFeePerGas, - value, - data, - null, - strict, - accessList); - } - @JsonCreator public JsonCallParameter( @JsonProperty("from") final Address from, @@ -74,9 +49,9 @@ 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 data, @JsonDeserialize(using = HexStringDeserializer.class) @JsonProperty("input") final Bytes input, - @JsonDeserialize(using = HexStringDeserializer.class) @JsonProperty("data") final Bytes data, @JsonProperty("strict") final Boolean strict, @JsonProperty("accessList") final List accessList) { 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); } From 24e4cf9ec0027218458491fe269577dc3b5cf0c1 Mon Sep 17 00:00:00 2001 From: Gabriel Fukushima Date: Fri, 27 Oct 2023 14:48:04 -0300 Subject: [PATCH 4/4] Add changelog Signed-off-by: Gabriel Fukushima --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a2079ba147..dbe463c5520 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,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