From 15781beda869c5db682bb408d8228b90045d3471 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Mon, 24 Jul 2023 12:09:05 +0200 Subject: [PATCH] fix: convert empty topic vec to vec None (#3856) --- crates/rpc/rpc-types/src/eth/filter.rs | 51 +++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/crates/rpc/rpc-types/src/eth/filter.rs b/crates/rpc/rpc-types/src/eth/filter.rs index 13af9216b4..d4b6365ccc 100644 --- a/crates/rpc/rpc-types/src/eth/filter.rs +++ b/crates/rpc/rpc-types/src/eth/filter.rs @@ -379,7 +379,13 @@ impl Filter { ValueOrArray::Value(s) => { vec![*s] } - ValueOrArray::Array(s) => s.clone(), + ValueOrArray::Array(s) => { + if s.is_empty() { + vec![None] + } else { + s.clone() + } + } } } else { vec![None] @@ -1007,6 +1013,49 @@ mod tests { serde_json::to_value(t).expect("Failed to serialize value") } + #[test] + fn test_empty_filter_topics_list() { + let s = r#"{"fromBlock": "0xfc359e", "toBlock": "0xfc359e", "topics": [["0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925"], [], ["0x0000000000000000000000000c17e776cd218252adfca8d4e761d3fe757e9778"]]}"#; + let filter = serde_json::from_str::(s).unwrap(); + similar_asserts::assert_eq!( + filter.topics, + [ + Some(ValueOrArray::Array(vec![Some( + "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925" + .parse() + .unwrap() + ),])), + Some(ValueOrArray::Array(vec![])), + Some(ValueOrArray::Array(vec![Some( + "0x0000000000000000000000000c17e776cd218252adfca8d4e761d3fe757e9778" + .parse() + .unwrap() + )])), + None + ] + ); + + let filtered_params = FilteredParams::new(Some(filter)); + let topics = filtered_params.flat_topics; + assert_eq!( + topics, + vec![ValueOrArray::Array(vec![ + Some( + "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925" + .parse() + .unwrap() + ), + None, + Some( + "0x0000000000000000000000000c17e776cd218252adfca8d4e761d3fe757e9778" + .parse() + .unwrap() + ), + None + ])] + ) + } + #[test] fn can_serde_value_or_array() { #[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]