Пример #1
0
def header_from_insight_block(d):
    version = int(d['version'])
    prev_block = lx(d['previousblockhash'])
    merkle_root = lx(d['merkleroot'])
    time = int(d['time'])
    bits = int(d['bits'], 16)
    nonce = int(d['nonce'])
    return BlockHeader(version, prev_block, merkle_root, time, bits,
                       nonce).as_hex()
Пример #2
0
    def deserialize(self, raw):
        """Deserialize hex-encoded block/block header.

        Returns:
            Two-tuple of (block, block_header)
        """
        raw = x(raw)
        try:
            if len(raw) == BlockHeader.header_length():
                block_header = BlockHeader.deserialize(raw)
                return (None, block_header)
            else:
                # We don't use block.get_header() in case the header is
                # correct but the rest of the block isn't.
                block_header = BlockHeader.deserialize(raw[0:BlockHeader.header_length()])
                block = Block.deserialize(raw)
                return (block, block_header)
        except Exception as e:
            return (None, None)
Пример #3
0
    def set_header(self, header):
        """Reset the model to reflect blk."""
        if header.__class__ not in [BlockHeader, CBlockHeader] or header is None:
            return self.clear()
        self.beginResetModel()
        self.header = BlockHeader.from_header(header)

        field_names = [i[0] for i in self.header.fields]
        for i, field in enumerate(self.header.fields):
            self.setHeaderData(i, Qt.Vertical, field[0])
        self.endResetModel()
Пример #4
0
    def deserialize(self, raw):
        """Deserialize hex-encoded block/block header.

        Returns:
            Two-tuple of (block, block_header)
        """
        raw = x(raw)
        try:
            if len(raw) == BlockHeader.header_length():
                block_header = BlockHeader.deserialize(raw)
                return (None, block_header)
            else:
                # We don't use block.get_header() in case the header is
                # correct but the rest of the block isn't.
                block_header = BlockHeader.deserialize(
                    raw[0:BlockHeader.header_length()])
                block = Block.deserialize(raw)
                return (block, block_header)
        except Exception as e:
            return (None, None)
Пример #5
0
    def set_header(self, header):
        """Reset the model to reflect blk."""
        if header.__class__ not in [BlockHeader, CBlockHeader
                                    ] or header is None:
            return self.clear()
        self.beginResetModel()
        self.header = BlockHeader.from_header(header)

        field_names = [i[0] for i in self.header.fields]
        for i, field in enumerate(self.header.fields):
            self.setHeaderData(i, Qt.Vertical, field[0])
        self.endResetModel()
Пример #6
0
    def select_block_field(self, selected, deselected):
        if len(self.raw_block_edit.toPlainText()) < BlockHeader.header_length() * 2:
            return
        if not len(selected.indexes()):
            return
        index = selected.indexes()[0]
        row = index.row()
        header = [i[2] * 2 for i in self.header.fields]

        start = sum(header[0:row])
        length = header[row]

        cursor = QTextCursor(self.raw_block_edit.document())
        cursor.setPosition(start)
        cursor.setPosition(start + length, QTextCursor.KeepAnchor)
        self.raw_block_edit.setTextCursor(cursor)
Пример #7
0
    def select_block_field(self, selected, deselected):
        if len(self.raw_block_edit.toPlainText()
               ) < BlockHeader.header_length() * 2:
            return
        if not len(selected.indexes()):
            return
        index = selected.indexes()[0]
        row = index.row()
        header = [i[2] * 2 for i in self.header.fields]

        start = sum(header[0:row])
        length = header[row]

        cursor = QTextCursor(self.raw_block_edit.document())
        cursor.setPosition(start)
        cursor.setPosition(start + length, QTextCursor.KeepAnchor)
        self.raw_block_edit.setTextCursor(cursor)
Пример #8
0
    def on_tx_selection(self, selected, deselected):
        if not self.block or not len(selected.indexes()):
            return
        index = selected.indexes()[0]
        row = index.row()

        def tx_len(i):
            return len(self.block.vtx[i].serialize()) * 2

        start = BlockHeader.header_length() * 2 + sum(tx_len(i) for i in range(row))
        # Account for VarInt.
        _buf = BytesIO()
        VarIntSerializer.stream_serialize(len(self.block.vtx), _buf)
        start += len(_buf.getvalue()) * 2

        length = len(self.block.vtx[row].serialize()) * 2
        self.select_block_text(start, length)
Пример #9
0
    def on_tx_selection(self, selected, deselected):
        if not self.block or not len(selected.indexes()):
            return
        index = selected.indexes()[0]
        row = index.row()

        def tx_len(i):
            return len(self.block.vtx[i].serialize()) * 2

        start = BlockHeader.header_length() * 2 + sum(
            tx_len(i) for i in range(row))
        # Account for VarInt.
        _buf = BytesIO()
        VarIntSerializer.stream_serialize(len(self.block.vtx), _buf)
        start += len(_buf.getvalue()) * 2

        length = len(self.block.vtx[row].serialize()) * 2
        self.select_block_text(start, length)
Пример #10
0
 def test_serialize_as_hex(self):
     header = BlockHeader.deserialize(bitcoin_raw_header)
     self.assertEqual(bitcoin_raw_header.encode('hex'), header.as_hex())
Пример #11
0
 def test_bitcoin_fields(self):
     self.assertEqual(BlockHeader.header_length(), 80)
     header = BlockHeader.deserialize(bitcoin_raw_header)
     self.assertEqual(bitcoin_header_fields, header.fields)
Пример #12
0
 def coerce_header(v):
     return BlockHeader.from_header(v)
Пример #13
0
 def coerce_hex_string(v):
     return BlockHeader.deserialize(x(v))
Пример #14
0
 def coerce_hex_string(v):
     return BlockHeader.deserialize(x(v))
Пример #15
0
 def coerce_header(v):
     return BlockHeader.from_header(v)
Пример #16
0
 def test_serialize_as_hex(self):
     header = BlockHeader.deserialize(bitcoin_raw_header)
     self.assertEqual(bitcoin_raw_header.encode('hex'), header.as_hex())
Пример #17
0
 def test_bitcoin_fields(self):
     self.assertEqual(BlockHeader.header_length(), 80)
     header = BlockHeader.deserialize(bitcoin_raw_header)
     self.assertEqual(bitcoin_header_fields, header.fields)