import struct from hashlib import sha256 from typing import Set from binascii import unhexlify from typing import NamedTuple, List from chiabip158 import PyBIP158 from lbry.crypto.hash import double_sha256 from lbry.blockchain.transaction import Transaction from lbry.blockchain.bcd_data_stream import BCDataStream ZERO_BLOCK = bytes((0,)*32) def create_block_filter(addresses: Set[str]) -> bytes: return bytes(PyBIP158([bytearray(a.encode()) for a in addresses]).GetEncoded()) def get_block_filter(block_filter: str) -> PyBIP158: return PyBIP158(bytearray(unhexlify(block_filter))) class Block(NamedTuple): height: int version: int file_number: int block_hash: bytes prev_block_hash: bytes merkle_root: bytes claim_trie_root: bytes timestamp: int bits: int nonce: int txs: List[Transaction] @staticmethod def from_data_stream(stream: BCDataStream, height: int, file_number: int): header = stream.data.read(112) version, = struct.unpack('