From ad20af3a64a1ab93021c98247e978b2794358898 Mon Sep 17 00:00:00 2001 From: Rayyan Alam Date: Thu, 17 Sep 2026 10:40:58 -0400 Subject: [PATCH] fix(smoke): AbiDecodeFailed reverts now carry a bare selector, no message Backport of the chain.py portion of #226/#227 to v1.0.x. AbiDecodeFailed reverts carry a bare function selector with no message now, so the harness's length check (and docs) is relaxed from requiring > 4 bytes to >= 4 bytes. The stablecoin burnBlocked ABI-fragment fix from #226 doesn't apply here: that workaround was added after v1.0.x branched, so this line never carried it. Co-Authored-By: Claude --- script/smoke/chain.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/script/smoke/chain.py b/script/smoke/chain.py index 550e7f10..cb5f43ae 100644 --- a/script/smoke/chain.py +++ b/script/smoke/chain.py @@ -272,8 +272,8 @@ def _revert_bytes(exc: ContractLogicError) -> bytes | None: def expect_abi_decode_failed(self, desc: str, fn, frm: ChecksumAddress) -> None: """Simulate `fn` via eth_call; assert Rust precompile AbiDecodeFailed revert shape. - Dispatch decode failures encode as `function_selector || utf8_error`, not a typed - custom error such as InvalidVariant(). + Dispatch decode failures encode as a bare `function_selector` (no message; the error + string was dropped), not a typed custom error such as InvalidVariant(). """ fn_selector = bytes(HexBytes(fn.selector)) try: @@ -302,7 +302,7 @@ def _assert_abi_decode_revert( if raw is None: self._diagnose(f"expected ABI decode failure: {desc}", repro_fn, repro_overrides, repro_call) die(f"expected ABI decode failure for {desc} but revert had no data") - if len(raw) <= 4: + if len(raw) < 4: self._diagnose(f"expected ABI decode failure: {desc}", repro_fn, repro_overrides, repro_call) die(f"expected ABI decode failure for {desc} but revert was only {len(raw)} byte(s): 0x{raw.hex()}") if raw[:4] != fn_selector: @@ -323,7 +323,7 @@ def expect_raw_abi_decode_failed( value: int = 0, frm: ChecksumAddress | None = None, ) -> None: - """Assert hand-built calldata reverts with AbiDecodeFailed (selector || utf8).""" + """Assert hand-built calldata reverts with AbiDecodeFailed (bare selector, no message).""" if len(data) < 4: die(f"expected ABI decode failure for {desc} but calldata is shorter than 4 bytes") fn_selector = data[:4]