Skip to content

Commit ac56480

Browse files
usmansaleemdaniellehrner
authored andcommitted
fix: eth_call deserialization to correctly ignore unknown fields in the transaction object (hyperledger#7323)
* fix: Use Builder for JsonCallParameter * changelog * add additional unit tests * fix: Update builder to withGas to match the json eth_call --------- Signed-off-by: Usman Saleem <usman@usmans.info> Signed-off-by: Daniel Lehrner <daniel.lehrner@consensys.net>
1 parent 0e72845 commit ac56480

File tree

15 files changed

+725
-692
lines changed

15 files changed

+725
-692
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
- Added EIP-7702 [#7237](https://github.com/hyperledger/besu/pull/7237)
1616

1717
### Bug fixes
18+
- Fix `eth_call` deserialization to correctly ignore unknown fields in the transaction object. [#7323](https://github.com/hyperledger/besu/pull/7323)
1819

1920
## 24.7.0
2021

ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/frontier/EthCallIntegrationTest.java

+94-197
Large diffs are not rendered by default.

ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/fork/frontier/EthCreateAccessListIntegrationTest.java

+46-82
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,11 @@ public void shouldSucceedWhenCreateAccessListMultipleReads() {
7979
"0x0000000000000000000000000000000000000000000000000000000000000003"))));
8080

8181
final JsonCallParameter callParameter =
82-
createAccessListJsonCallParameters(
83-
"0x658bdf435d810c91414ec09147daa6db62406379",
84-
"0xbb00000000000000000000000000000000000000",
85-
null);
82+
new JsonCallParameter.JsonCallParameterBuilder()
83+
.withFrom(Address.fromHexString("0x658bdf435d810c91414ec09147daa6db62406379"))
84+
.withTo(Address.fromHexString("0xbb00000000000000000000000000000000000000"))
85+
.withAccessList(null)
86+
.build();
8687

8788
assertAccessListExpectedResult(callParameter, expectedAccessListEntryList, expectedGasUsed);
8889
}
@@ -101,10 +102,11 @@ public void shouldSucceedWhenCreateAccessListMultipleReads_withAccessListParam()
101102
"0x0000000000000000000000000000000000000000000000000000000000000003"))));
102103

103104
final JsonCallParameter callParameter =
104-
createAccessListJsonCallParameters(
105-
"0x658bdf435d810c91414ec09147daa6db62406379",
106-
"0xbb00000000000000000000000000000000000000",
107-
expectedAccessListEntryList);
105+
new JsonCallParameter.JsonCallParameterBuilder()
106+
.withFrom(Address.fromHexString("0x658bdf435d810c91414ec09147daa6db62406379"))
107+
.withTo(Address.fromHexString("0xbb00000000000000000000000000000000000000"))
108+
.withAccessList(expectedAccessListEntryList)
109+
.build();
108110

109111
assertAccessListExpectedResult(callParameter, expectedAccessListEntryList, expectedGasUsed);
110112
}
@@ -115,10 +117,11 @@ public void shouldSucceedWhenCreateAccessListSimpleTransfer() {
115117
final List<AccessListEntry> expectedAccessListEntryList = new ArrayList<>();
116118

117119
final JsonCallParameter callParameter =
118-
createAccessListJsonCallParameters(
119-
"0x658bdf435d810c91414ec09147daa6db62406379",
120-
"0x0100000000000000000000000000000000000000",
121-
expectedAccessListEntryList);
120+
new JsonCallParameter.JsonCallParameterBuilder()
121+
.withFrom(Address.fromHexString("0x658bdf435d810c91414ec09147daa6db62406379"))
122+
.withTo(Address.fromHexString("0x0100000000000000000000000000000000000000"))
123+
.withAccessList(expectedAccessListEntryList)
124+
.build();
122125

123126
assertAccessListExpectedResult(callParameter, expectedAccessListEntryList, expectedGasUsed);
124127
}
@@ -129,19 +132,20 @@ public void shouldSucceedWhenCreateAccessListSimpleContract() {
129132
final List<AccessListEntry> expectedAccessListEntryList = new ArrayList<>();
130133

131134
final JsonCallParameter callParameter =
132-
createAccessListJsonCallParameters(
133-
"0x658bdf435d810c91414ec09147daa6db62406379",
134-
"0xaa00000000000000000000000000000000000000",
135-
null);
135+
new JsonCallParameter.JsonCallParameterBuilder()
136+
.withFrom(Address.fromHexString("0x658bdf435d810c91414ec09147daa6db62406379"))
137+
.withTo(Address.fromHexString("0xaa00000000000000000000000000000000000000"))
138+
.withAccessList(null)
139+
.build();
136140

137141
assertAccessListExpectedResult(callParameter, expectedAccessListEntryList, expectedGasUsed);
138142
}
139143

140144
@Test
141145
public void shouldReturnExpectedValueForEmptyCallParameter() {
142146
final JsonCallParameter callParameter =
143-
new JsonCallParameter(
144-
null, null, null, null, null, null, null, null, null, null, null, null, null);
147+
new JsonCallParameter.JsonCallParameterBuilder().build();
148+
145149
final JsonRpcRequestContext request = requestWithParams(callParameter);
146150
final JsonRpcResponse expectedResponse =
147151
new JsonRpcSuccessResponse(null, new CreateAccessListResult(new ArrayList<>(), 0xcf08));
@@ -154,20 +158,12 @@ public void shouldReturnExpectedValueForEmptyCallParameter() {
154158
@Test
155159
public void shouldReturnExpectedValueForTransfer() {
156160
final JsonCallParameter callParameter =
157-
new JsonCallParameter(
158-
Address.fromHexString("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b"),
159-
Address.fromHexString("0x8888f1f195afa192cfee860698584c030f4c9db1"),
160-
null,
161-
null,
162-
null,
163-
null,
164-
Wei.ZERO,
165-
null,
166-
null,
167-
null,
168-
null,
169-
null,
170-
null);
161+
new JsonCallParameter.JsonCallParameterBuilder()
162+
.withFrom(Address.fromHexString("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b"))
163+
.withTo(Address.fromHexString("0x8888f1f195afa192cfee860698584c030f4c9db1"))
164+
.withValue(Wei.ZERO)
165+
.build();
166+
171167
final JsonRpcRequestContext request = requestWithParams(callParameter);
172168
final JsonRpcResponse expectedResponse =
173169
new JsonRpcSuccessResponse(null, new CreateAccessListResult(new ArrayList<>(), 0x5208));
@@ -180,21 +176,13 @@ public void shouldReturnExpectedValueForTransfer() {
180176
@Test
181177
public void shouldReturnExpectedValueForContractDeploy() {
182178
final JsonCallParameter callParameter =
183-
new JsonCallParameter(
184-
Address.fromHexString("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b"),
185-
null,
186-
null,
187-
null,
188-
null,
189-
null,
190-
null,
191-
Bytes.fromHexString(
192-
"0x608060405234801561001057600080fd5b50610157806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633bdab8bf146100515780639ae97baa14610068575b600080fd5b34801561005d57600080fd5b5061006661007f565b005b34801561007457600080fd5b5061007d6100b9565b005b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60016040518082815260200191505060405180910390a1565b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60026040518082815260200191505060405180910390a17fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60036040518082815260200191505060405180910390a15600a165627a7a7230582010ddaa52e73a98c06dbcd22b234b97206c1d7ed64a7c048e10c2043a3d2309cb0029"),
193-
null,
194-
null,
195-
null,
196-
null,
197-
null);
179+
new JsonCallParameter.JsonCallParameterBuilder()
180+
.withFrom(Address.fromHexString("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b"))
181+
.withInput(
182+
Bytes.fromHexString(
183+
"0x608060405234801561001057600080fd5b50610157806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633bdab8bf146100515780639ae97baa14610068575b600080fd5b34801561005d57600080fd5b5061006661007f565b005b34801561007457600080fd5b5061007d6100b9565b005b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60016040518082815260200191505060405180910390a1565b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60026040518082815260200191505060405180910390a17fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60036040518082815260200191505060405180910390a15600a165627a7a7230582010ddaa52e73a98c06dbcd22b234b97206c1d7ed64a7c048e10c2043a3d2309cb0029"))
184+
.build();
185+
198186
final JsonRpcRequestContext request = requestWithParams(callParameter);
199187
final JsonRpcResponse expectedResponse =
200188
new JsonRpcSuccessResponse(null, new CreateAccessListResult(new ArrayList<>(), 0x1f081));
@@ -207,21 +195,16 @@ public void shouldReturnExpectedValueForContractDeploy() {
207195
@Test
208196
public void shouldIgnoreSenderBalanceAccountWhenStrictModeDisabledAndReturnExpectedValue() {
209197
final JsonCallParameter callParameter =
210-
new JsonCallParameter(
211-
Address.fromHexString("0x0000000000000000000000000000000000000000"),
212-
null,
213-
1L,
214-
Wei.fromHexString("0x9999999999"),
215-
null,
216-
null,
217-
null,
218-
Bytes.fromHexString(
219-
"0x608060405234801561001057600080fd5b50610157806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633bdab8bf146100515780639ae97baa14610068575b600080fd5b34801561005d57600080fd5b5061006661007f565b005b34801561007457600080fd5b5061007d6100b9565b005b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60016040518082815260200191505060405180910390a1565b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60026040518082815260200191505060405180910390a17fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60036040518082815260200191505060405180910390a15600a165627a7a7230582010ddaa52e73a98c06dbcd22b234b97206c1d7ed64a7c048e10c2043a3d2309cb0029"),
220-
null,
221-
false,
222-
null,
223-
null,
224-
null);
198+
new JsonCallParameter.JsonCallParameterBuilder()
199+
.withFrom(Address.fromHexString("0x0000000000000000000000000000000000000000"))
200+
.withGas(1L)
201+
.withGasPrice(Wei.fromHexString("0x9999999999"))
202+
.withInput(
203+
Bytes.fromHexString(
204+
"0x608060405234801561001057600080fd5b50610157806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633bdab8bf146100515780639ae97baa14610068575b600080fd5b34801561005d57600080fd5b5061006661007f565b005b34801561007457600080fd5b5061007d6100b9565b005b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60016040518082815260200191505060405180910390a1565b7fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60026040518082815260200191505060405180910390a17fa53887c1eed04528e23301f55ad49a91634ef5021aa83a97d07fd16ed71c039a60036040518082815260200191505060405180910390a15600a165627a7a7230582010ddaa52e73a98c06dbcd22b234b97206c1d7ed64a7c048e10c2043a3d2309cb0029"))
205+
.withStrict(false)
206+
.build();
207+
225208
final JsonRpcRequestContext request = requestWithParams(callParameter);
226209
final JsonRpcResponse expectedResponse =
227210
new JsonRpcSuccessResponse(null, new CreateAccessListResult(new ArrayList<>(), 0x1f081));
@@ -234,8 +217,7 @@ public void shouldIgnoreSenderBalanceAccountWhenStrictModeDisabledAndReturnExpec
234217
@Test
235218
public void shouldReturnExpectedValueForInsufficientGas() {
236219
final JsonCallParameter callParameter =
237-
new JsonCallParameter(
238-
null, null, 1L, null, null, null, null, null, null, null, null, null, null);
220+
new JsonCallParameter.JsonCallParameterBuilder().withGas(1L).build();
239221
final JsonRpcRequestContext request = requestWithParams(callParameter);
240222
final JsonRpcResponse expectedResponse =
241223
new JsonRpcSuccessResponse(null, new CreateAccessListResult(new ArrayList<>(), 0xcf08));
@@ -257,24 +239,6 @@ private void assertAccessListExpectedResult(
257239
assertThat(response).usingRecursiveComparison().isEqualTo(expectedResponse);
258240
}
259241

260-
private JsonCallParameter createAccessListJsonCallParameters(
261-
final String from, final String to, final List<AccessListEntry> accessList) {
262-
return new JsonCallParameter(
263-
Address.fromHexString(from),
264-
Address.fromHexString(to),
265-
null,
266-
null,
267-
null,
268-
null,
269-
null,
270-
null,
271-
null,
272-
null,
273-
accessList,
274-
null,
275-
null);
276-
}
277-
278242
private JsonRpcRequestContext requestWithParams(final Object... params) {
279243
return new JsonRpcRequestContext(new JsonRpcRequest("2.0", "eth_createAccessList", params));
280244
}

0 commit comments

Comments
 (0)