2025-01-23 08:22:41 -05:00
|
|
|
use alloy_sol_types::SolCall;
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn selector_collisions() {
|
|
|
|
|
assert_eq!(
|
|
|
|
|
crate::abi::IERC20::transferCall::SELECTOR,
|
|
|
|
|
crate::abi::SeraiIERC20::transferWithInInstruction01BB244A8ACall::SELECTOR
|
|
|
|
|
);
|
|
|
|
|
assert_eq!(
|
|
|
|
|
crate::abi::IERC20::transferFromCall::SELECTOR,
|
|
|
|
|
crate::abi::SeraiIERC20::transferFromWithInInstruction00081948E0Call::SELECTOR
|
|
|
|
|
);
|
|
|
|
|
}
|
2025-01-27 15:39:55 -05:00
|
|
|
|
2025-04-12 08:09:09 -04:00
|
|
|
#[test]
|
|
|
|
|
fn abi_decode_panic() {
|
|
|
|
|
use alloy_sol_types::SolInterface;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
The following code panics with alloy-core 0.8, when the validate flag (commented out) is set to
|
|
|
|
|
`false`. This flag was removed with alloy-core 1.0, leaving the default behavior of
|
|
|
|
|
`abi_decode` to be `validate = false`. This test was added to ensure when we removed our
|
|
|
|
|
practice of `validate = true`, we didn't open ourselves up this as a DoS risk.
|
|
|
|
|
*/
|
|
|
|
|
assert!(crate::SeraiIERC20Calls::abi_decode(
|
|
|
|
|
&alloy_core::primitives::hex::decode(concat!(
|
|
|
|
|
"a9059cbb",
|
|
|
|
|
"0000000000000000000000000000000000000000000000000000000000000000",
|
|
|
|
|
"0000000000000000000000000000000000000000000000000000000000000000",
|
|
|
|
|
"000000000000000000000000000000000000000000000000000000000000006f",
|
|
|
|
|
"ffffffffff000000000000000000000000000000000000000000000000000023",
|
|
|
|
|
"000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
|
|
|
|
|
"ffffff0000000000000000000000000000000000000000000000000000000000",
|
|
|
|
|
))
|
|
|
|
|
.unwrap(),
|
|
|
|
|
// false
|
|
|
|
|
)
|
|
|
|
|
.is_err());
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-27 15:39:55 -05:00
|
|
|
// This is primarily tested via serai-processor-ethereum-router
|