From 75f02b5de0ceca4efb76d5aab30418a705b10ac4 Mon Sep 17 00:00:00 2001 From: dripsmvcp <0xpaullee@gmail.com> Date: Sat, 25 Apr 2026 18:13:02 +0900 Subject: [PATCH] fix(subtensor-provider): SS58 checksum-validate receive addresses is_valid_address only checked 48-char Base58 charset via regex, so typos like 'xxxx...xxxx' passed. Replace with scalecodec's ss58_decode which verifies the checksum, matching how BTC bech32/base58check is already validated. A user mistyping their TAO destination now fails at the CLI gate rather than seeing miner-sent funds become unrecoverable. Closes #200 --- allways/chain_providers/subtensor.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/allways/chain_providers/subtensor.py b/allways/chain_providers/subtensor.py index 2e701543..b56024cb 100644 --- a/allways/chain_providers/subtensor.py +++ b/allways/chain_providers/subtensor.py @@ -274,11 +274,14 @@ def get_balance(self, address: str) -> int: return 0 def is_valid_address(self, address: str) -> bool: - """Validate an SS58 address.""" + """Validate an SS58 address (length, charset, and checksum).""" + if not address: + return False try: - if not address or len(address) != 48: - return False - return bool(re.match(r'^[1-9A-HJ-NP-Za-km-z]{48}$', address)) + from scalecodec.utils.ss58 import ss58_decode + + ss58_decode(address) + return True except Exception: return False