diff --git a/crates/precompiles/src/error.rs b/crates/precompiles/src/error.rs index 304c21f87c..d9a324027d 100644 --- a/crates/precompiles/src/error.rs +++ b/crates/precompiles/src/error.rs @@ -95,7 +95,8 @@ pub fn add_errors_to_registry( let converter = Arc::new(converter); for selector in T::selectors() { let converter = Arc::clone(&converter); - registry.insert( + + let old_selector = registry.insert( selector.into(), Box::new(move |data: &[u8]| { T::abi_decode(data) @@ -106,6 +107,7 @@ pub fn add_errors_to_registry( }) }), ); + debug_assert!(old_selector.is_none(), "Duplicate selector {selector:x?}"); } } @@ -254,3 +256,14 @@ impl IntoPrecompileResult for TempoPrecompileError { Ok(PrecompileOutput::new_reverted(gas, bytes)) } } + +#[cfg(test)] +mod tests { + use crate::error::error_decoder_registry; + + // Test that initializes the error decoder registry and fails if there are any duplicates. + #[test] + fn test_error_decoder_registry_init() { + error_decoder_registry(); + } +}