コード例 #1
0
ファイル: transaction.py プロジェクト: cherubtorch/electrumsv
 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),
     )
コード例 #2
0
ファイル: spv.py プロジェクト: mickeystone/simple_spv
    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
コード例 #3
0
ファイル: spv.py プロジェクト: mickeystone/simple_spv
    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