Esempio n. 1
0
    def mining_blob(self) -> bytes:
        blob = self.block_number.to_bytes(8, byteorder='big', signed=False) \
               + self.timestamp.to_bytes(8, byteorder='big', signed=False) \
               + self.prev_headerhash \
               + self.block_reward.to_bytes(8, byteorder='big', signed=False) \
               + self.fee_reward.to_bytes(8, byteorder='big', signed=False) \
               + self.tx_merkle_root

        # reduce mining blob: 1 byte zero + 4 bytes nonce + 8 bytes extra_nonce by pool + 5 bytes for pool (17 bytes)
        blob = bytes(shake128(config.dev.mining_blob_size - 18, blob))

        zero = 0
        blob = zero.to_bytes(1, byteorder='big', signed=False) + blob

        if len(blob) < self.nonce_offset:
            raise Exception("Mining blob size below 56 bytes")

        # Now insert mining nonce and extra nonce in offset 56 for compatibility
        mining_nonce_bytes = \
            self.mining_nonce.to_bytes(4, byteorder='big', signed=False) + \
            self.extra_nonce.to_bytes(8, byteorder='big', signed=False) + \
            zero.to_bytes(5, byteorder='big', signed=False)

        blob = blob[:self.nonce_offset] + mining_nonce_bytes + blob[
            self.nonce_offset:]

        return bytes(blob)
Esempio n. 2
0
    def check_shake_result(self, data_text, expected):
        hex_in_before = pyqrllib.bin2hstr(pyqrllib.str2bin(data_text))
        data_out = pyqrllib.shake128(32, pyqrllib.str2bin(data_text))

        # This is just to keep as an example. Things could be compared without converting to hex
        hex_in = pyqrllib.bin2hstr(pyqrllib.str2bin(data_text))
        hex_out = pyqrllib.bin2hstr(data_out)

        self.assertEqual(hex_in, hex_in_before)
        self.assertEqual(hex_out, expected)
Esempio n. 3
0
    def mining_blob(self) -> bytes:
        blob = self.block_number.to_bytes(8, byteorder='big', signed=False) \
               + self.timestamp.to_bytes(8, byteorder='big', signed=False) \
               + self.prev_blockheaderhash \
               + self.block_reward.to_bytes(8, byteorder='big', signed=False) \
               + self.fee_reward.to_bytes(8, byteorder='big', signed=False) \
               + self.tx_merkle_root

        # reduce mining blob considering nonce (4 byte)
        blob = bytes(shake128(config.dev.mining_blob_size - 4, blob))

        if len(blob) < self.nonce_offset:
            raise Exception("Mining blob size below 39 bytes")

        # Now insert mining nonce in offset 39 for compatibility
        mining_nonce_bytes = self.mining_nonce.to_bytes(4, byteorder='big', signed=False)
        blob = blob[:self.nonce_offset] + mining_nonce_bytes + blob[self.nonce_offset:]

        return bytes(blob)
Esempio n. 4
0
def qrladdress(address_seed_str: str) -> bytes:
    extended_seed = QRLDescriptor(SHA2_256, pyqrllib.pyqrllib.XMSS, 4, 0).getBytes() + \
                    shake128(48, address_seed_str.encode())
    return bytes(QRLHelper.getAddress(extended_seed))