def _unpack_proof(raw: bytes) -> TxProof: io = BytesIO(raw) pack_version = bitcoinx.read_varint(io.read) if pack_version == 1: position = bitcoinx.read_varint(io.read) branch_count = bitcoinx.read_varint(io.read) merkle_branch = [ bitcoinx.read_varbytes(io.read) for i in range(branch_count) ] return TxProof(position, merkle_branch) raise DataPackingError(f"Unhandled packing format {pack_version}")
def read(cls, read): prev_hash = read(32) prev_idx = read_le_uint32(read) script_sig = Script(read_varbytes(read)) sequence = read_le_uint32(read) kwargs = {'x_pubkeys': [], 'address': None, 'threshold': 0, 'signatures': []} if prev_hash != bytes(32): _parse_script_sig(script_sig.to_bytes(), kwargs) result = cls(prev_hash, prev_idx, script_sig, sequence, value=0, **kwargs) if not result.is_complete(): result.value = read_le_int64(read) return result