From 37aa4773a55c6c399804adde4bb14ac6010ace01 Mon Sep 17 00:00:00 2001 From: carneiro-cw <156914855+carneiro-cw@users.noreply.github.com> Date: Thu, 30 Jan 2025 08:42:55 -0300 Subject: [PATCH] enha: handle duplicate input/data when deserializing the CallInput (#1985) --- e2e/test/external/e2e-json-rpc.test.ts | 14 ++++++-------- src/eth/primitives/call_input.rs | 22 +++++++++++++++++++++- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/e2e/test/external/e2e-json-rpc.test.ts b/e2e/test/external/e2e-json-rpc.test.ts index 323266a46..082805787 100644 --- a/e2e/test/external/e2e-json-rpc.test.ts +++ b/e2e/test/external/e2e-json-rpc.test.ts @@ -378,14 +378,12 @@ describe("JSON-RPC", () => { { tracer: "prestateTracer", tracerConfig: { diffMode: false } }, ]); - expect(trace.data.result[(await contract.getAddress()).toLowerCase()]).to.deep.equal({ - balance: "0x0", - code: "0x608060405234801561001057600080fd5b50600436106100675760003560e01c80633825d828116100505780633825d828146100b1578063c2bc2efc146100c4578063f5d82b6b146100ed57600080fd5b806326ffee081461006c57806327e235e314610091575b600080fd5b61007f61007a3660046102db565b610100565b60405190815260200160405180910390f35b61007f61009f366004610305565b60006020819052908152604090205481565b61007f6100bf3660046102db565b61020a565b61007f6100d2366004610305565b6001600160a01b031660009081526020819052604090205490565b61007f6100fb3660046102db565b610255565b6001600160a01b038216600090815260208190526040812054821115610186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f496e73756666696369656e742062616c616e6365000000000000000000000000604482015260640160405180910390fd5b6001600160a01b038316600090815260208190526040812080548492906101ae908490610356565b90915550506040518281526001600160a01b038416907ff9c652bcdb0eed6299c6a878897eb3af110dbb265833e7af75ad3d2c2f4a980c906020015b60405180910390a250336000908152602081905260409020545b92915050565b6001600160a01b038216600081815260208181526040808320859055518481529192917ffd28ec3ec2555238d8ad6f9faf3e4cd10e574ce7e7ef28b73caa53f9512f65b991016101ea565b6001600160a01b03821660009081526020819052604081208054839190839061027f908490610369565b90915550506040518281526001600160a01b038416907f2728c9d3205d667bbc0eefdfeda366261b4d021949630c047f3e5834b30611ab906020016101ea565b80356001600160a01b03811681146102d657600080fd5b919050565b600080604083850312156102ee57600080fd5b6102f7836102bf565b946020939093013593505050565b60006020828403121561031757600080fd5b610320826102bf565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561020457610204610327565b808201808211156102045761020461032756fea2646970667358221220d9e0843c97e3be54f0f2da0b4f159ccb1fd0e9b3189aef5dacb44af21dbfd22564736f6c63430008180033", - nonce: 1, - storage: { - "0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722": - "0x000000000000000000000000000000000000000000000000000000000000001e", - }, + const resultObj = trace.data.result[(await contract.getAddress()).toLowerCase()]; + expect(resultObj.balance).to.equal("0x0"); + expect(resultObj.nonce).to.equal(1); + expect(resultObj.storage).to.deep.equal({ + "0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722": + "0x000000000000000000000000000000000000000000000000000000000000001e", }); }); diff --git a/src/eth/primitives/call_input.rs b/src/eth/primitives/call_input.rs index 727bf4e35..8d5fffa33 100644 --- a/src/eth/primitives/call_input.rs +++ b/src/eth/primitives/call_input.rs @@ -1,10 +1,11 @@ use display_json::DebugAsJson; +use serde::Deserialize; use crate::eth::primitives::Address; use crate::eth::primitives::Bytes; use crate::eth::primitives::Wei; -#[derive(DebugAsJson, Clone, PartialEq, Eq, fake::Dummy, serde::Serialize, serde::Deserialize)] +#[derive(DebugAsJson, Clone, PartialEq, Eq, fake::Dummy, serde::Serialize)] pub struct CallInput { #[serde(rename = "from")] pub from: Option
, @@ -18,3 +19,22 @@ pub struct CallInput { #[serde(rename = "data", alias = "input", default)] pub data: Bytes, } + +impl<'de> Deserialize<'de> for CallInput { + fn deserialize