Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
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()
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
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()