Skip to content

Commit

Permalink
fix: make the empty key of storage proof in EIP1186ProofResponse co…
Browse files Browse the repository at this point in the history
…uld be deserialized (#2754)

* Support deserialization for `0x` in get proof API.

* Add a test case.
  • Loading branch information
silathdiir committed Mar 4, 2024
1 parent e6056b7 commit 0644a65
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 1 deletion.
13 changes: 12 additions & 1 deletion ethers-core/src/types/proof.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
use crate::types::{Address, Bytes, H256, U256, U64};
use crate::types::{
serde_helpers::deserialize_stringified_numeric, Address, Bytes, H256, U256, U64,
};
use serde::{Deserialize, Serialize};

#[derive(Debug, Default, Clone, PartialEq, Eq, Deserialize, Serialize)]
pub struct StorageProof {
#[serde(deserialize_with = "deserialize_stringified_numeric")]
pub key: U256,
pub proof: Vec<Bytes>,
pub value: U256,
Expand Down Expand Up @@ -37,4 +40,12 @@ mod tests {
))
.unwrap();
}

#[test]
fn can_deserialize_proof_empty_key() {
serde_json::from_str::<EIP1186ProofResponse>(include_str!(
"../../testdata/proof_empty_key.json"
))
.unwrap();
}
}
26 changes: 26 additions & 0 deletions ethers-core/testdata/proof_empty_key.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"accountProof": [
"0xf90211a0d5d588997b487ce82bddf0953533c31939f2d2033175ed1d4b7d38afa99e4521a009e03688b33d852aa50b09451ea59c5415376e83a8e9d71954649bf2a51ad20fa0a1ebfed635af08ace40bac535e2ee9717e6fee7fb517bb0811f827b91cbf9082a06d422bb4dbaa605faa49c646fd5f0b68ca49a1f6b9ceea33106535e2eccb23cba05bc7ace8529068c61a536d18f8391a87d3d6221576c640add83d622ba444f3b3a0555b1ad955bd4223450a818385a15d00c4335a6a253d8130a14b11363aa63af3a091be792b8ec10f44ecb471746eedd7e82f979d817c6472f470db90ce991c65bfa05d84a0c4cee08c1c72d58371a8d2d4195afb907cd1a3acb9b90a7ccb2ef4070fa0569fbbb431939844bc566f4b59650cb370ceac41e0aaa9e829d4538f8edd90d1a04dd8c492b8a96ea313f03d33d134d93cb8ec1fd77cb9183a3df7c6ef2e1b9859a08b25b1e3e40f48540b217024af9544ff54671064dae60b3bb144a9c07fb19300a07d6e5c0271d0eec0c70f6e7f7c58068ea63c7f0de1244f52069d93e3c4ac24cca0230835a9d1c68bac8c7de9c6e4f67aea6f241952ba9a70885436791dfcf04e91a0e34719b0399535e253a87bf3b8e85af2089620a2c70a9175155616a7187d88fba0a654011b063018c430f6e43424873832f816241d701efdd38ecd7eca2ede7800a014412bb3799813d56a6ae4ee76d1ffd25b1802dd6ff5a5d3766a33625d9d24eb80",
"0xf90211a0365486b075cb4455560274492457c3af25277e570bab8145e39dd580c4d6f45fa0e8dce92fc6f7c17c2d29471de55837159c8e15af7d3111a038916aafa8fb6517a0b34e9cc028f3f0ce76e78828a91c1d803eea459280a4bdc8b074ecf2cf2c2af5a0a34a3e7dd9ad544ce488e8d2fb204b7af65df09f335ba6c0300ff416592ac383a04dd8c8fb17830a6b9ec1f7fd51d5f49cf0310a2a29d3253814f2abe039e391c3a021a0b4788b967d81ac0e8a587f31cc13c42be513a9b834e3b7bf2e109356cd74a01c3d514d427031d1c5a0fbd339bb8afb11ae7fb08cc90c35a4fcacaa39f9d66aa03c22232e77791f7a649d15f332c4bf56057d63208e34e3cd1bcc8dfd9c0f69a0a0a9e39f607c403069afdc3350bf9f180ce76c7ead03ad9dedb659d5828b0fc20aa058076897b7032f129460cd79afb6b0766171ac6bb09113e9a7ee2dc0fbfe250aa06d12c59d1afbe2b7355bf60ba58b1b3f47385626f2477fd4a68c1f2c8c45f614a0fbcbb1eed513b79bee580f71223995082365f4e4bce11226060cfa82c77441d3a00a33bb61c4292845d113f5a8782ccaa48c8a68ae097b93d81c3b4317aec46691a0868c20d8d58a9d64d55cd07f55731065d01bdaec4e3a95116ef485cf59d684e2a0b7f64a08eb94566daee2104efae9775595cf18a1b2b7ce90087acdc7d9a1dc0ba04be64fa1d1f14c62a1c6b6c059266a116e8d605d5e16847f3ec0dece2d591c4f80",
"0xf90211a08534e8546ec72b9553a048b0f043d81af938407f79fb65cdada5c042c0550564a006cc41c3e1bf268ebdf2704ee22890f1bf09fa06a12be3ffaf8f7a9b7c69277da006f5c1b48992ca9248d817f47a875587ac2ce084fc663ecedc521a2f3652e511a0d21e2e56c0cb7e8c6728b002e34f83b17907c5cd0b320d6a587fcfdd17b7646ca087a2ef0f638fe0a67b621d24a33a145cecfe2e7534f15f7622d7954e5c539011a0ef046ba9db9969ac72765598b8f8b93fb56c57cd66f19d1f5fc940555293989ca0637809a5008cb3f8188b26e5eecadbe07e41c28aa635795b0759a5d33124091ba0d70825488ff8ae5601a8da5b491a1d8eee0129a3c83efd3fc6e9302015d7e7cca0d4cf00646397d7f1b44f3ac4303f6c81c1c42d73d79d3c74ecac9661471e8020a0a229b014acc8d3beb6a1c7e04f804d52ca948519eaf0d5165c18b040f8fdc430a064011f2ab1e71ce9e437cf56d5f84d19398264453f2cd6275669c86a5f1e3710a026f55f712334b5a00615a759263a82fd5c0604ba74f1ffd7420a25c22daad4c3a004024544f9b76374cf4eb577e51c4459268ef6188d966179e099f2f73b75dedaa07331c48b5a2bd78003e679543460d7c0f1cac125d2175138e05eb26e2dea46aea00ff72b46738a76696c88018bae8920f816a15a94a845a3866df7d361ed24f3f8a04a9b2ae18a5acfee98f6b2acf988ea66ecfc465d27be174ed993558f0b71862c80",
"0xf90211a0a6a917269f6c6bf2fce980b61d9331bad25099bcd07fe09254d772784e8f0380a07f78172947651254e89e0dcef91efc03a644647a51558c32bec884ede74e0a27a08f256ac0b6492098a2a765d7bf05a46c3800a84b5486c6fce129bac913a04559a05e3829b12df4ee0a1ad18098a95cf5f43f6e68b8bf7569cdb96557f7dae98188a023b9746186b9539a510e9ff3887d1d81300aeeba2234648a7d066e14f5caee0ca0bd3c65b3e9c928b06508953aac5284536e523e011f3c137181bbab30b5893576a0e07972701f204f5b6c59f8f7cd016cb8afa81ec277a90246b380627ba4acc025a043d582180b5ae849ab02bc5f94fc42f79867d9001639ca81491a19550496ad29a01b59562f4096abf7f8a8d8279b7ba7a15610b6932748e74a19110838fd67ce92a04a5f8ea93508f2a7e5315806716fa078f1185ec9bbfd66ae001d3b2eeb43ed83a0871a40bf31a2679d0266dd4264177f8b9cb6f3b0b4315afe461d93f57e0d8320a06819eaba8fae3052bc624bbda981271e6b179a66f6f353c81922f17a863cfc67a0ebcdd195a4fdc75e16c3684426295b1c18b80281d29b7cda2145a6bf61a15698a0523ee96be088855563f107dd4df23277c73b57ae893909f682cd4059322394eca0d68e1ec9148d135f9779394e4f4c114981a3fbab457aae0b275d62e7a4d090fea040fc10fff45ab410a5de737b2f05ea03741987dd268bf8aa9fb01527ee1f70f180",
"0xf90211a02529b3a1d25af0e682196014acb2d5c595d3a63b551c589084eb386b5f7f7dfda024a121f933aeb933c35d57845f15400d69d37478a1935865e460a7d178856a49a05967715df346b56c3ac456de4690e94664848dd7beb42d25106318e74d85de35a02fb2fccbc1b19b990bd82e9b956c15343c2085c1da838e17b242477d33dea7eca0721808e57ac3f0f639c2ecfdb7180f19860c517051b1c28bf355e6aaa42ac5c2a0d4389c37a517d115f174f8916b176f4e2f29bc98d3e3bace655e735f28537bf8a0746a0ee6283cdb76bdcadf4e08645811d806f7c52c7ab18fe1ef9fd8e2e556eea0b2b5f219f4dc43cf026c84070f17d3ad9bf368006c72d4c0b4eeceb988df9b4ba0106fe50943242093841b4bea96d47dfc5a421c1d82d0b6f0e4355f71c0052e0ea037b2538648f9a1be56262993ec6d2c23034972ca726dd4a975109ab0184c9caaa01b3ffbfcb9504e187820371bdf6f7393e5a0625de768ea66f54c39b3315b30bfa0f1a4e596578bc9a688694dada887a8db4ba08a2e8360f2bdb29272b43e539de7a05882de90c2fc0c83d5d2c53fcafa5cb6119d886dcdd2b108b117bc437da157bea0d810497050f97d8770634d58c41ece18437db7df50dfb66735001942dca8031ea0afaff4e99a272edc83bbb3006b76e587aeabef37a67ce8c2992646f628e8034ba0046c75a34f9c573e55e1b5040503d1abf665c497ce5a61c802638d2e5937303880",
"0xf90211a0445a85d1e9dc69be710335e71d613286eb68af450d6404c7d31613e66e5cc20da07707f65e3f83d02cddb3d94726007240bc5dead7369e380c33160b5b1e53aa4ea0926924732b70ae651a001986345e34cd83d568e6c4da86ccb6cfecd4e22e67c5a03984b3636748d304b3f943569325c7192fb080855d6a5610950e970a52842708a0ae10ea5787105920826ba40bc51637876e54f385776063a6c0512db92bd65c03a09e417fd8a9d0585c513049791ab98a797c2fb77a559bd325d02da21caf82c181a0fec6912ac7603ef0ac1a6564fef92f43937d63bf6afff1a4678691bc51bc310fa0319a27abfcd2a59c8685bef705f9d382349780a0b7243d44a5f28e3c4fcca40da0bbc6869645e4c5e303cbee8f65b82ba55b5865a46bf7f213dffb0d2b4518a28ba089d8d67e8550ad9e0a8b0f426109da993024f573a30a178191d4200fdf6d6166a0479a3020c5fd717f0846fd067993b48bbd5221226d5a5136b640eed2e54f786aa043672b0105dbe93a747ca8c33c67a0b0f4b76bf669a5d94139ca693e7dc3561ea0161a5465269e6e13ec9e867e8703c6928faeba4e4ff4238623112692c2aab2fca00a781434ebfef341e78d138ff04426d9af68b2d9a4f8e74c634c81cc5574110fa07b11f2b96d18fad91bd46e0cf022ab494d5cf87d3689378e18525eabdf786e37a0b037d5d51c72e1a02305e6d3f444835258e734bec19af13b81250488a354eb9980",
"0xf901b180a08e1f65551979105bbe4e80e1aa8809039187586aa5fae4390d55e9293437c6c4a0731284e111afff49463c85f92e6dc17448d3154a05f80dba46829156b794e7a7a0d8153ac96806f362c77aab96f16520cd3407456d58bb3a2e82e85f9f826e2240a06ee41cbac7437fd488d926ce6183ea8d02d11f39d73fe669ef359cb3a1bc437ba0619a4faf16434986420e470df4b4f154a924c25bb1188c1c3ee891cabe9598dca075fa9555263c98622547a3d102bd8de6e8bc2d6a8b15f8143c59b2d14c100aeba0c821876d9d7118dff8b65e42b829c8a750a74d9aba4d0628dcc3140e744e71d5a063565334cab469c86f17b4774815423c30f1e5a5c04152454a3dad9188a1cfc1a0b29e907893cf522318b0c6f0ad9dee46205eb73b32004bac4c3d7f8e8b0a71b6a08039191c005f9b65fb1bdcff4314ee4abf1353d9a84a3f082bba78e5c54b148380a048812cefa2c6d869c042c932022653846386c250b9b9c7955984a01eec8340aaa05e39f0f174b2c026753f76cb3f876a0c6a576b055585e15562470b04f0986e9380a0f53970d0242808cad2bed2c9f3a679597d44394055fb8109cbb345853d76f37580",
"0xf8669d3b1fc083b71c693bc8e86266ce835d604111e23581b700b4ca6e6dfe44b846f8440180a07b437cb531972501349eb51fbce4b21dea36869efcf0bd597da3a4702f76dc15a0e6915aad9387f0e30f3b1e001506fb1019065292d60981a96b0d7b54f075c3dd"
],
"address": "0x105dd0ef26b92a3698fd5aaaf688577b9cafd970",
"balance": "0x0",
"codeHash": "0xe6915aad9387f0e30f3b1e001506fb1019065292d60981a96b0d7b54f075c3dd",
"nonce": "0x1",
"storageHash": "0x7b437cb531972501349eb51fbce4b21dea36869efcf0bd597da3a4702f76dc15",
"storageProof": [
{
"key": "0x",
"proof": [
"0xf901b1a06963f1b45deef8462b6dbb67ed2d6dc1803a4e8864bbcea33d7f5d47048572f0a00d62c04f6d589cdb15673c5b350b256aa06a4c7196ebb0bbcba98bc03d7fc4e78080a0d0ecd8ddd11c24d9696a6ccdbe4ce5680afd65f7926a886e2f0a69cd15ac3934a001be9467615bd2096a2c46dfee2ab52e8f88c1b97d4775d92d7cbeda097d8e63a04178c1752b21759d5ffeca397eed6ef1ef37cdb3fff82f739af8d688d9085271a0d43739067961fa2393618654be299ed641b19008218f61ae540f800050a0e049a05c27502e40a85b01d842b056caa7d9f5f2982317a512240c167d2085956871d380a026ee06e32e89fe361b00829797287449d6630253133a107052aba8a2ea9f7231a0ff4b5da285747b5b861bcf18d79451730a45e928e3f07d6d67691a52c464f815a07f03d6a9e9431ae90cc6fc437769cdfc030a9abc79a972e285af8a1514f1d957a0ad4b7f1ac4dd9d021eb1e83614c183c8e2f80a1d3f84572426c14744743a9be6a042ba61999ab80a23ea6d774667c8eaf401289deb7df8dd8b96b92e481d1e742ca0facca1ee966b3b1326d61e3a435e6beb0698ed6803e4db62b4b1918712d00a3980"
],
"value": "0x0"
}
]
}

0 comments on commit 0644a65

Please sign in to comment.