From 282dfab99eb7ae0750b08f1cb4fb72b72d7a1a3a Mon Sep 17 00:00:00 2001 From: Rima <153289003+casks-mutters@users.noreply.github.com> Date: Tue, 9 Dec 2025 02:17:06 -0500 Subject: [PATCH] =?UTF-8?q?if=20not=20Web3.is=5Faddress(sys.argv[1]):=20?= =?UTF-8?q?=20=20=20=20print("=E2=9D=8C=20Invalid=20Ethereum=20address.",?= =?UTF-8?q?=20file=3Dsys.stderr)=20=20=20=20=20sys.exit(1)=20=20address=20?= =?UTF-8?q?=3D=20checksum(sys.argv[1])?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary The main CLI in `app.py` has a bit of duplicated and redundant validation: - The Ethereum address is checked twice with `Web3.is_address(...)` (once before and once after `to_checksum_address`). - The block range swap (`if block_a > block_b`) appears twice: once inside the `try` block and again immediately afterward, with two slightly different messages. This PR simplifies the validation logic so that: - The address is checked only once, then converted to checksum format. - The `block_a`/`block_b` swap is performed in a single, clear place. ## Changes In `app.py`: 1. **Address validation** - Keep a single address validity check using `Web3.is_address(sys.argv[1])`. - If valid, convert to checksum form once and reuse it. - Remove the second `Web3.is_address(address)` check, which is redundant after checksumming. 2. **Block range swap** - Parse `block_a` and `block_b` in the `try` block. - Normalize their order exactly once (if `block_a > block_b`, swap and print a single message). - Remove the second `if block_a > block_b` branch after the `try` block. ## Rationale - Reduces duplication and makes the argument-parsing logic easier to read and maintain. - Keeps CLI behavior the same (still validates address and ensures `block_a <= block_b`), but with less surprising repetition. - Low-risk change touching only input validation. ## Testing - Run the following to ensure behavior is unchanged: ```bash # Valid address, ordered blocks python app.py 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 0x0 18000000 19000000 # Valid address, reversed blocks (should swap once and print a single swap message) python app.py 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 0x0 19000000 18000000 # Invalid address (should error once, as before) python app.py not_an_address 0x0 18000000 19000000 --- app.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app.py b/app.py index 379e956..735525c 100644 --- a/app.py +++ b/app.py @@ -58,9 +58,12 @@ def main(): print("Example: python app.py 0xA0b8...eB48 0x0 18000000 19000000") sys.exit(1) - if not Web3.is_address(sys.argv[1]): print("❌ Invalid Ethereum address."); sys.exit(1) - address = checksum(sys.argv[1]) - if not Web3.is_address(address): print("❌ Invalid Ethereum address format."); sys.exit(1) + if not Web3.is_address(sys.argv[1]): + print("❌ Invalid Ethereum address.", file=sys.stderr) + sys.exit(1) + +address = checksum(sys.argv[1]) + slot = parse_slot(sys.argv[2]) if slot < 0 or slot >= 2**256: print("❌ Slot out of range [0, 2^256)."); sys.exit(1) try: