import hashlib def header_hex_to_block_hash(header_hex: str) -> str: """Block hash from a raw Electrum header: sha256d, byte-reversed, hex. Verified against a real mainnet block (blockchain.transaction.get's own reported blockhash) during development.""" header_bytes = bytes.fromhex(header_hex) digest = hashlib.sha256(hashlib.sha256(header_bytes).digest()).digest() return digest[::-1].hex() def draw_winner(participants: list[str], block_hash_hex: str) -> str: """v1 draw algorithm (flowchart.mmd, node R): seed = block hash as an integer, index = seed mod participant_count, winner = participants[index]. Anyone can recompute and verify it from public data. Deliberately simple/replaceable.""" if not participants: raise ValueError("no participants to draw from") seed = int(block_hash_hex, 16) index = seed % len(participants) return participants[index]