def select_transactions(self) -> "Block": redis_client = redis.Redis(host=Config.REDIS_HOST, port=Config.REDIS_PORT, db=Config.REDIS_DB) keys = redis_client.keys() transactions = [] for key in sorted(keys): serialized_tx = redis_client.get(key) txn = Transaction() txn.deserialize(serialized_tx.hex()) transactions.append(txn) self.txns = transactions return self
def test_serializer_with_coinbase_signatures(): transaction_original = Transaction( chain=1, nonce=4_294_967_295, fee=57000, value=5_000_000, to_address="1H7NtUENrEbwSVm52fHePzBnu4W3bCqimP", unlock_sig=Config.COINBASE_UNLOCK_SIGNATURE, ) expected_serialization_hex = "01ffffffffa8de0000404b4c00000000003148374e7455454e7245627753566d3532664865507a426e75345733624371696d500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" expected_serialization_bytes = b"\x01\xff\xff\xff\xff\xa8\xde\x00\x00@KL\x00\x00\x00\x00\x001H7NtUENrEbwSVm52fHePzBnu4W3bCqimP\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" assert transaction_original.serialize().hex() == expected_serialization_hex assert transaction_original.serialize() == expected_serialization_bytes transaction = Transaction() transaction.deserialize(expected_serialization_bytes) assert transaction_original.json() == transaction.json()
def deserialize(self, block_serialized: bytes) -> "Block": self.version = int.from_bytes(block_serialized[0:4], byteorder="little") self.prev_block_hash = block_serialized[36:68].hex() self.height = int.from_bytes(block_serialized[68:72], byteorder="little") self.miner = block_serialized[72:106].decode("utf-8") self.timestamp = int.from_bytes(block_serialized[106:110], byteorder="big") self.bits = block_serialized[110:114] self.nonce = int.from_bytes(block_serialized[114:118], byteorder="little") self.txns = [] block_transations = block_serialized[118:] for i in range(0, len(block_transations), 179): txn = Transaction() txn.deserialize(block_transations[i:i + 179]) self.txns.append(txn) return self
def test_transaction_serializer_to_sign(): transaction_original = Transaction( chain=1, nonce=4_294_967_295, fee=57000, value=5_000_000, to_address="1H7NtUENrEbwSVm52fHePzBnu4W3bCqimP", ) expected_serialization_hex = "01ffffffffa8de0000404b4c00000000003148374e7455454e7245627753566d3532664865507a426e75345733624371696d50" expected_serialization_bytes = b"\x01\xff\xff\xff\xff\xa8\xde\x00\x00@KL\x00\x00\x00\x00\x001H7NtUENrEbwSVm52fHePzBnu4W3bCqimP" assert (transaction_original.serialize( to_sign=True).hex() == expected_serialization_hex) assert (transaction_original.serialize( to_sign=True) == expected_serialization_bytes) transaction = Transaction() transaction.deserialize(expected_serialization_bytes) assert transaction_original.json() == transaction.json()