def read_extended(cls, read): '''Overridden to specialize reading the inputs.''' return cls( read_le_int32(read), read_list(read, XTxInput.read_extended), read_list(read, XTxOutput.read), read_le_uint32(read), )
def deserialize_version(cls, f): version = bitcoinx.read_le_int32(f.read) services = bitcoinx.read_le_uint64(f.read) timestamp = time.ctime(bitcoinx.read_le_int64(f.read)) addr_recv = cls.deserialize_IPv4_addr_from_version(f) addr_from = cls.deserialize_IPv4_addr_from_version(f) nonce = bitcoinx.read_le_uint64(f.read) user_agent = bitcoinx.packing.read_varbytes(f.read) start_height = bitcoinx.read_le_int32(f.read) v = {'version': version, 'services': services, 'timestamp': timestamp, 'addr_recv': addr_recv, 'addr_from': addr_from, 'nonce': nonce, 'user_agent': user_agent, 'start_height': start_height} return v
def deserialize_headers(cls, f): """deserialize block headers into a list of dicts""" lst_headers = [] global headers_stream global hashes_stream # Store headers temporarily to memory as binary stream headers_stream.seek(0) headers_stream.write(f.read()) # make a list of block hashes for validating headers_stream.seek(0) count = bitcoinx.read_varint(headers_stream.read) # count of headers for i in range(count): header = headers_stream.read(80) # minus final txn count (1 byte) headers_stream.read(1) # discard txn count _hash = simple_spv.tools.get_block_hash(header) # calculates hash as part of validation hashes_stream.write(_hash + '\n') f.seek(0) number_headers = bitcoinx.read_varint(f.read) for i in range(number_headers): # TODO make into single function call for readability and reuse version = bitcoinx.read_le_int32(f.read) prev_block = bitcoinx.hash_to_hex_str(f.read(32)) merkle_root = bitcoinx.hash_to_hex_str(f.read(32)) timestamp = bitcoinx.read_le_uint32(f.read) bits = ut.int_to_hex(bitcoinx.read_le_uint32(f.read)) nonce = bitcoinx.read_le_uint32(f.read) txn_count = bitcoinx.read_varint(f.read) block_header = {'version': version, 'prev_block_hash': prev_block, 'merkle_root': merkle_root, 'timestamp': timestamp, 'bits': bits, 'nonce': nonce, 'txn_count': txn_count} lst_headers.append(block_header) return lst_headers