from __future__ import annotations from binascii import hexlify, unhexlify import struct from monero import base58, const, ed25519 from monero.address import Address from monero.keccak import keccak_256 # Override monero library network constants for Wownero from monero import const as _mc _mc.NETS = ('main',) _mc.MASTERADDR_NETBYTES = (53,) # Wownero mainnet address prefix _mc.SUBADDR_NETBYTES = (63,) # Wownero subaddress prefix _mc.INTADDRR_NETBYTES = (54,) # Wownero integrated address prefix def derive_subaddress( *, payment_address: str, view_key: str, account_index: int, address_index: int, ) -> str: address = Address(payment_address) view_key_bytes = unhexlify(view_key) spend_pub_bytes = unhexlify(address.spend_key()) data = ( b"SubAddr\0" + view_key_bytes + struct.pack("