Skip to content

Commit b952b16

Browse files
committed
feat(encode-args): add test to length validation
1 parent f00f085 commit b952b16

File tree

1 file changed

+40
-5
lines changed

1 file changed

+40
-5
lines changed

crates/common/src/abi.rs

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,7 @@ where
1818
let args: Vec<S> = args.into_iter().collect();
1919

2020
if inputs.len() != args.len() {
21-
eyre::bail!(
22-
"encode length mismatch: expected {} types, got {}",
23-
inputs.len(),
24-
args.len()
25-
)
21+
eyre::bail!("encode length mismatch: expected {} types, got {}", inputs.len(), args.len())
2622
}
2723

2824
std::iter::zip(inputs, args)
@@ -267,4 +263,43 @@ mod tests {
267263
assert_eq!(parsed.indexed[1], DynSolValue::Uint(U256::from_be_bytes([3; 32]), 256));
268264
assert_eq!(parsed.indexed[2], DynSolValue::Address(Address::from_word(param2)));
269265
}
266+
267+
#[test]
268+
fn test_encode_args_length_validation() {
269+
use alloy_json_abi::Param;
270+
271+
let params = vec![
272+
Param {
273+
name: "a".to_string(),
274+
ty: "uint256".to_string(),
275+
internal_type: None,
276+
components: vec![],
277+
},
278+
Param {
279+
name: "b".to_string(),
280+
ty: "address".to_string(),
281+
internal_type: None,
282+
components: vec![],
283+
},
284+
];
285+
286+
// Less arguments than parameters
287+
let args = vec!["1"];
288+
let res = encode_args(&params, &args);
289+
assert!(res.is_err());
290+
assert!(format!("{}", res.unwrap_err()).contains("encode length mismatch"));
291+
292+
// Exact number of arguments and parameters
293+
let args = vec!["1", "0x0000000000000000000000000000000000000001"];
294+
let res = encode_args(&params, &args);
295+
assert!(res.is_ok());
296+
let values = res.unwrap();
297+
assert_eq!(values.len(), 2);
298+
299+
// More arguments than parameters
300+
let args = vec!["1", "0x0000000000000000000000000000000000000001", "extra"];
301+
let res = encode_args(&params, &args);
302+
assert!(res.is_err());
303+
assert!(format!("{}", res.unwrap_err()).contains("encode length mismatch"));
304+
}
270305
}

0 commit comments

Comments
 (0)