Reorganize project structure

This commit is contained in:
zv
2026-03-06 18:20:43 +01:00
parent 04c209ae23
commit 7e0c0afddf
26 changed files with 1520 additions and 1311 deletions

View File

@@ -0,0 +1,33 @@
from __future__ import annotations
from ..constants import BCH_CASHADDR_RE
from .common import base58check_verify
def validate_bch_address(address: str) -> tuple[bool, str]:
address = address.strip()
lower = address.lower()
if lower.startswith("bitcoincash:"):
payload = lower.split(":", 1)[1]
else:
payload = lower
if payload.startswith("q") or payload.startswith("p"):
if not BCH_CASHADDR_RE.fullmatch(payload):
return False, "Invalid characters in BCH CashAddr payload"
if len(payload) < 30:
return False, "BCH CashAddr payload is too short"
# Future improvement: replace this with full BCH CashAddr checksum verification.
return True, "CashAddr format (checksum not verified)"
if address.startswith("1") or address.startswith("3"):
valid, reason, version, payload_len = base58check_verify(address)
if not valid:
return False, reason
if payload_len != 21:
return False, "Unexpected Base58 payload length"
if version not in (0x00, 0x05):
return False, "Invalid BCH legacy version byte"
return True, "Valid legacy Base58Check address"
return False, "BCH addresses must be CashAddr or legacy Base58"