diff --git a/docs/requirements.txt b/docs/requirements.txt index 96de3798..1331d5bf 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -21,7 +21,9 @@ ecpy==1.2.5 ; python_version >= "3.7" and python_version < "4.0" exceptiongroup==1.1.1 ; python_version >= "3.7" and python_version < "3.11" execnet==1.9.0 ; python_version >= "3.7" and python_version < "4.0" flake8==5.0.4 ; python_version >= "3.7" and python_version < "4.0" -flask==2.2.3 ; python_version >= "3.7" and python_version < "4.0" +flask==2.2.4 ; python_version >= "3.7" and python_version < "4.0" +frozendict==2.3.8 ; python_version >= "3.7" and python_version < "4.0" +frozenlist==1.3.3 ; python_version >= "3.7" and python_version < "4.0" idna==3.4 ; python_version >= "3.7" and python_version < "4" imagesize==1.4.1 ; python_version >= "3.7" and python_version < "4.0" importlib-metadata==4.2.0 ; python_version >= "3.7" and python_version < "3.10" @@ -37,7 +39,7 @@ mypy==1.2.0 ; python_version >= "3.7" and python_version < "4.0" oscrypto==1.3.0 ; python_version >= "3.7" and python_version < "4.0" packaging==23.1 ; python_version >= "3.7" and python_version < "4.0" pathspec==0.11.1 ; python_version >= "3.7" and python_version < "4.0" -platformdirs==3.2.0 ; python_version >= "3.7" and python_version < "4.0" +platformdirs==3.3.0 ; python_version >= "3.7" and python_version < "4.0" pluggy==1.0.0 ; python_version >= "3.7" and python_version < "4.0" pprintpp==0.4.0 ; python_version >= "3.7" and python_version < "4.0" py==1.11.0 ; python_version >= "3.7" and python_version < "4.0" @@ -52,7 +54,7 @@ pytest==7.3.1 ; python_version >= "3.7" and python_version < "4.0" pytz==2023.3 ; python_version >= "3.7" and python_version < "3.9" requests==2.28.2 ; python_version >= "3.7" and python_version < "4" retry==0.9.2 ; python_version >= "3.7" and python_version < "4.0" -setuptools==67.7.1 ; python_version >= "3.7" and python_version < "4.0" +setuptools==67.7.2 ; python_version >= "3.7" and python_version < "4.0" six==1.16.0 ; python_version >= "3.7" and python_version < "4.0" snowballstemmer==2.2.0 ; python_version >= "3.7" and python_version < "4.0" sphinx-copybutton==0.5.2 ; python_version >= "3.7" and python_version < "4.0" diff --git a/docs/source/guides/plutus.rst b/docs/source/guides/plutus.rst index 4662917a..959c6914 100644 --- a/docs/source/guides/plutus.rst +++ b/docs/source/guides/plutus.rst @@ -24,7 +24,7 @@ To calculate the hash of a datum, we can leverage the helper class `PlutusData`. Empty datum:: >>> empty_datum = PlutusData() - >>> empty_datum.to_cbor() + >>> empty_datum.to_cbor_hex() 'd87980' Sample datum with int, bytes, List and hashmap inputs:: @@ -39,7 +39,7 @@ Sample datum with int, bytes, List and hashmap inputs:: ... d: dict >>> datum = MyDatum(123, b"1234", IndefiniteList([4, 5, 6]), {1: b"1", 2: b"2"}) - >>> datum.to_cbor() + >>> datum.to_cbor_hex() 'd87a9f187b43333231ff' You can also wrap `PlutusData` within `PlutusData`:: @@ -55,7 +55,7 @@ You can also wrap `PlutusData` within `PlutusData`:: >>> deadline = 1643235300000 >>> other_datum = MyDatum(123, b"1234", IndefiniteList([4, 5, 6]), {1: b"1", 2: b"2"}) >>> include_datum = InclusionDatum(key_hash, deadline, other_datum) - >>> include_datum.to_cbor() + >>> include_datum.to_cbor_hex() 'd87a9f581cc2ff616e11299d9094ce0a7eb5b7284b705147a822f4ffbd471f971a1b0000017e9874d2a0d8668218829f187b44313233349f040506ffa2014131024132ffff' `PlutusData` supports conversion from/to JSON format, which @@ -67,7 +67,7 @@ Similarly, redeemer can be serialized like following:: >>> data = MyDatum(123, b"234", IndefiniteList([]), {1: b"1", 2: b"2"}) >>> redeemer = Redeemer(data, ExecutionUnits(1000000, 1000000)) - >>> redeemer.to_cbor() + >>> redeemer.to_cbor_hex() '840000d8668218829f187b433233349fffa2014131024132ff821a000f42401a000f4240' ----------------------- @@ -178,7 +178,7 @@ Note that we will just use the datatype defined in the contract, as it also uses Build, sign and submit the transaction: >>> signed_tx = builder.build_and_sign([payment_skey], giver_address) - >>> context.submit_tx(signed_tx.to_cbor()) + >>> context.submit_tx(signed_tx.to_cbor_hex()) Step 6 @@ -219,7 +219,7 @@ Now lets try to resubmit this:: >>> signed_tx = builder.build_and_sign([payment_skey_2], taker_address) - >>> context.submit_tx(signed_tx.to_cbor()) + >>> context.submit_tx(signed_tx.to_cbor_hex()) The funds locked in script address is successfully retrieved to the taker address. diff --git a/docs/source/guides/serialization.rst b/docs/source/guides/serialization.rst index 171affd1..6da1c18f 100644 --- a/docs/source/guides/serialization.rst +++ b/docs/source/guides/serialization.rst @@ -34,7 +34,7 @@ Examples:: ... outputs=[output1, output2], ... fee=fee ... ) - >>> cbor_hex = tx_body.to_cbor() + >>> cbor_hex = tx_body.to_cbor_hex() a50081825820732bfd67e66be8e8288349fcaaa2294973ef6271cc189a239bb431275401b8e500018282581d60f6532850e1bccee9c72a9113ad98bcc5dbb30d2ac960262444f6e5f41b000000174876e80082581d60f6532850e1bccee9c72a9113ad98bcc5dbb30d2ac960262444f6e5f41b000000ba43b4b7f7021a000288090d800e80 >>> restored_tx_body = TransactionBody.from_cbor(cbor_hex) diff --git a/docs/source/guides/transaction.rst b/docs/source/guides/transaction.rst index eec9da5e..b75d2c7e 100644 --- a/docs/source/guides/transaction.rst +++ b/docs/source/guides/transaction.rst @@ -178,5 +178,5 @@ Transaction submission Once we have a signed transaction, it could be submitted to the network. The easiest way to do so is through a chain context:: - >>> context.submit_tx(signed_tx.to_cbor()) + >>> context.submit_tx(signed_tx.to_cbor_hex()) diff --git a/examples/full_stack/server.py b/examples/full_stack/server.py index e67792c3..7e423447 100644 --- a/examples/full_stack/server.py +++ b/examples/full_stack/server.py @@ -65,7 +65,7 @@ def home_page(): @app.route("/build_tx", methods=["POST"]) def build_tx(): tx = build_transaction(request.json) - cbor_hex = tx.to_cbor() + cbor_hex = tx.to_cbor_hex() print(cbor_hex) return {"tx": cbor_hex} @@ -75,7 +75,7 @@ def submit_tx(): tx = compose_tx_and_witness(request.json) tx_id = tx.transaction_body.hash().hex() print(f"Transaction: \n {tx}") - print(f"Transaction cbor: {tx.to_cbor()}") + print(f"Transaction cbor: {tx.to_cbor_hex()}") print(f"Transaction ID: {tx_id}") chain_context.submit_tx(tx) return {"tx_id": tx_id} diff --git a/examples/native_token.py b/examples/native_token.py index dbf6e4b3..a3671269 100644 --- a/examples/native_token.py +++ b/examples/native_token.py @@ -168,7 +168,7 @@ def load_or_create_key_pair(base_dir, base_name): print("############### Transaction created ###############") print(signed_tx) -print(signed_tx.to_cbor()) +print(signed_tx.to_cbor_hex()) # Submit signed transaction to the network print("############### Submitting transaction ###############") diff --git a/examples/plutus/forty_two/forty_two.py b/examples/plutus/forty_two/forty_two.py index 2d723978..17d21af3 100644 --- a/examples/plutus/forty_two/forty_two.py +++ b/examples/plutus/forty_two/forty_two.py @@ -41,7 +41,7 @@ def wait_for_tx(tx_id): def submit_tx(tx): print("############### Transaction created ###############") print(tx) - print(tx.to_cbor()) + print(tx.to_cbor_hex()) print("############### Submitting transaction ###############") chain_context.submit_tx(tx) wait_for_tx(str(tx.id)) diff --git a/integration-test/test/base.py b/integration-test/test/base.py index 0aaa2a2b..005c2e8d 100644 --- a/integration-test/test/base.py +++ b/integration-test/test/base.py @@ -67,7 +67,7 @@ def fund(self, source_address, source_key, target_address, amount=5000000): print("############### Transaction created ###############") print(signed_tx) - print(signed_tx.to_cbor()) + print(signed_tx.to_cbor_hex()) print("############### Submitting transaction ###############") self.chain_context.submit_tx(signed_tx) self.assert_output(target_address, target_output=output) diff --git a/integration-test/test/test_certificate.py b/integration-test/test/test_certificate.py index 3897e98c..cb6cdcd1 100644 --- a/integration-test/test/test_certificate.py +++ b/integration-test/test/test_certificate.py @@ -31,7 +31,7 @@ def test_stake_delegation(self): print("############### Transaction created ###############") print(signed_tx) - print(signed_tx.to_cbor()) + print(signed_tx.to_cbor_hex()) print("############### Submitting transaction ###############") self.chain_context.submit_tx(signed_tx) @@ -58,7 +58,7 @@ def test_stake_delegation(self): print("############### Transaction created ###############") print(signed_tx) - print(signed_tx.to_cbor()) + print(signed_tx.to_cbor_hex()) print("############### Submitting transaction ###############") self.chain_context.submit_tx(signed_tx) @@ -84,6 +84,6 @@ def test_stake_delegation(self): print("############### Transaction created ###############") print(signed_tx) - print(signed_tx.to_cbor()) + print(signed_tx.to_cbor_hex()) print("############### Submitting transaction ###############") self.chain_context.submit_tx(signed_tx) diff --git a/integration-test/test/test_min_utxo.py b/integration-test/test/test_min_utxo.py index cbd88447..0c86af49 100644 --- a/integration-test/test/test_min_utxo.py +++ b/integration-test/test/test_min_utxo.py @@ -98,7 +98,7 @@ class MyPlutusData(PlutusData): print("############### Transaction created ###############") print(signed_tx) - print(signed_tx.to_cbor()) + print(signed_tx.to_cbor_hex()) # Submit signed transaction to the network print("############### Submitting transaction ###############") diff --git a/integration-test/test/test_mint.py b/integration-test/test/test_mint.py index 37b493ba..87ad1aac 100644 --- a/integration-test/test/test_mint.py +++ b/integration-test/test/test_mint.py @@ -132,7 +132,7 @@ def load_or_create_key_pair(base_dir, base_name): print("############### Transaction created ###############") print(signed_tx) - print(signed_tx.to_cbor()) + print(signed_tx.to_cbor_hex()) # Submit signed transaction to the network print("############### Submitting transaction ###############") @@ -158,7 +158,7 @@ def load_or_create_key_pair(base_dir, base_name): print("############### Transaction created ###############") print(signed_tx) - print(signed_tx.to_cbor()) + print(signed_tx.to_cbor_hex()) # Submit signed transaction to the network print("############### Submitting transaction ###############") @@ -247,7 +247,7 @@ def test_mint_nft_with_script(self): print("############### Transaction created ###############") print(signed_tx) - print(signed_tx.to_cbor()) + print(signed_tx.to_cbor_hex()) # Submit signed transaction to the network print("############### Submitting transaction ###############") @@ -334,7 +334,7 @@ class MyPlutusData(PlutusData): print("############### Transaction created ###############") print(signed_tx) - print(signed_tx.to_cbor()) + print(signed_tx.to_cbor_hex()) # Submit signed transaction to the network print("############### Submitting transaction ###############") diff --git a/integration-test/test/test_plutus.py b/integration-test/test/test_plutus.py index c5d78a5c..c57119f0 100644 --- a/integration-test/test/test_plutus.py +++ b/integration-test/test/test_plutus.py @@ -35,7 +35,7 @@ def test_plutus_v1(self): print("############### Transaction created ###############") print(signed_tx) - print(signed_tx.to_cbor()) + print(signed_tx.to_cbor_hex()) print("############### Submitting transaction ###############") self.chain_context.submit_tx(signed_tx) time.sleep(3) @@ -53,7 +53,7 @@ def test_plutus_v1(self): print("############### Transaction created ###############") print(signed_tx) - print(signed_tx.to_cbor()) + print(signed_tx.to_cbor_hex()) print("############### Submitting transaction ###############") self.chain_context.submit_tx(signed_tx) time.sleep(3) @@ -87,7 +87,7 @@ def test_plutus_v1(self): print("############### Transaction created ###############") print(signed_tx) - print(signed_tx.to_cbor()) + print(signed_tx.to_cbor_hex()) print("############### Submitting transaction ###############") self.chain_context.submit_tx(signed_tx) @@ -119,7 +119,7 @@ def test_plutus_v2_datum_hash(self): print("############### Transaction created ###############") print(signed_tx) - print(signed_tx.to_cbor()) + print(signed_tx.to_cbor_hex()) print("############### Submitting transaction ###############") self.chain_context.submit_tx(signed_tx) time.sleep(3) @@ -162,7 +162,7 @@ def test_plutus_v2_datum_hash(self): print("############### Transaction created ###############") print(signed_tx) - print(signed_tx.to_cbor()) + print(signed_tx.to_cbor_hex()) print("############### Submitting transaction ###############") self.chain_context.submit_tx(signed_tx) @@ -196,7 +196,7 @@ def test_plutus_v2_inline_script_inline_datum(self): print("############### Transaction created ###############") print(signed_tx) - print(signed_tx.to_cbor()) + print(signed_tx.to_cbor_hex()) print("############### Submitting transaction ###############") self.chain_context.submit_tx(signed_tx) time.sleep(3) @@ -257,7 +257,7 @@ def test_plutus_v2_ref_script(self): print("############### Transaction created ###############") print(signed_tx) - print(signed_tx.to_cbor()) + print(signed_tx.to_cbor_hex()) print("############### Submitting transaction ###############") self.chain_context.submit_tx(signed_tx) time.sleep(3) @@ -274,7 +274,7 @@ def test_plutus_v2_ref_script(self): print("############### Transaction created ###############") print(signed_tx) - print(signed_tx.to_cbor()) + print(signed_tx.to_cbor_hex()) print("############### Submitting transaction ###############") self.chain_context.submit_tx(signed_tx) time.sleep(3) @@ -306,7 +306,7 @@ def test_plutus_v2_ref_script(self): print("############### Transaction created ###############") print(signed_tx) - print(signed_tx.to_cbor()) + print(signed_tx.to_cbor_hex()) print("############### Submitting transaction ###############") self.chain_context.submit_tx(signed_tx) diff --git a/pycardano/backend/base.py b/pycardano/backend/base.py index ada2f547..63aa09b7 100644 --- a/pycardano/backend/base.py +++ b/pycardano/backend/base.py @@ -3,8 +3,8 @@ from dataclasses import dataclass from typing import Dict, List, Union -from pycardano.exception import InvalidArgumentException from pycardano.address import Address +from pycardano.exception import InvalidArgumentException from pycardano.network import Network from pycardano.plutus import ExecutionUnits from pycardano.transaction import Transaction, UTxO @@ -170,7 +170,7 @@ def submit_tx(self, tx: Union[Transaction, bytes, str]): :class:`TransactionFailedException`: When fails to submit the transaction to blockchain. """ if isinstance(tx, Transaction): - return self.submit_tx_cbor(tx.to_cbor("bytes")) + return self.submit_tx_cbor(tx.to_cbor()) elif isinstance(tx, bytes): return self.submit_tx_cbor(tx) else: @@ -199,7 +199,7 @@ def evaluate_tx(self, tx: Transaction) -> Dict[str, ExecutionUnits]: Returns: List[ExecutionUnits]: A list of execution units calculated for each of the transaction's redeemers """ - return self.evaluate_tx_cbor(tx.to_cbor("bytes")) + return self.evaluate_tx_cbor(tx.to_cbor()) def evaluate_tx_cbor(self, cbor: Union[bytes, str]) -> Dict[str, ExecutionUnits]: """Evaluate execution units of a transaction. diff --git a/pycardano/key.py b/pycardano/key.py index 485ee433..335a5649 100644 --- a/pycardano/key.py +++ b/pycardano/key.py @@ -83,7 +83,7 @@ def to_json(self) -> str: { "type": self.key_type, "description": self.description, - "cborHex": self.to_cbor(), + "cborHex": self.to_cbor_hex(), } ) diff --git a/pycardano/metadata.py b/pycardano/metadata.py index a9aaf211..7a280017 100644 --- a/pycardano/metadata.py +++ b/pycardano/metadata.py @@ -127,5 +127,5 @@ def from_primitive(cls: Type[AuxiliaryData], value: Primitive) -> AuxiliaryData: def hash(self) -> AuxiliaryDataHash: return AuxiliaryDataHash( - blake2b(self.to_cbor("bytes"), AUXILIARY_DATA_HASH_SIZE, encoder=RawEncoder) # type: ignore + blake2b(self.to_cbor(), AUXILIARY_DATA_HASH_SIZE, encoder=RawEncoder) # type: ignore ) diff --git a/pycardano/nativescript.py b/pycardano/nativescript.py index a05fc8eb..2dc6254b 100644 --- a/pycardano/nativescript.py +++ b/pycardano/nativescript.py @@ -58,7 +58,7 @@ def from_primitive( raise DeserializeException(f"Unknown script type indicator: {script_type}") def hash(self) -> ScriptHash: - cbor_bytes = cast(bytes, self.to_cbor("bytes")) + cbor_bytes = cast(bytes, self.to_cbor()) return ScriptHash( blake2b(bytes(1) + cbor_bytes, SCRIPT_HASH_SIZE, encoder=RawEncoder) ) diff --git a/pycardano/plutus.py b/pycardano/plutus.py index b52b82a8..85d05cb2 100644 --- a/pycardano/plutus.py +++ b/pycardano/plutus.py @@ -455,7 +455,7 @@ class will reduce the complexity of serialization and deserialization tremendous ... a: int ... b: bytes >>> test = Test(123, b"321") - >>> test.to_cbor() + >>> test.to_cbor_hex() 'd87a9f187b43333231ff' >>> assert test == Test.from_cbor("d87a9f187b43333231ff") """ @@ -667,7 +667,7 @@ def from_json(cls: Type[PlutusData], data: str) -> PlutusData: return cls.from_dict(obj) def __deepcopy__(self, memo): - return self.__class__.from_cbor(self.to_cbor()) + return self.__class__.from_cbor(self.to_cbor_hex()) @dataclass @@ -696,7 +696,7 @@ def from_primitive(cls: Type[RawPlutusData], value: CBORTag) -> RawPlutusData: return cls(value) def __deepcopy__(self, memo): - return self.__class__.from_cbor(self.to_cbor()) + return self.__class__.from_cbor(self.to_cbor_hex()) Datum = Union[PlutusData, dict, int, bytes, IndefiniteList, RawCBOR, RawPlutusData] diff --git a/pycardano/serialization.py b/pycardano/serialization.py index b4b3588f..87aabd42 100644 --- a/pycardano/serialization.py +++ b/pycardano/serialization.py @@ -2,8 +2,6 @@ from __future__ import annotations -from frozenlist import FrozenList -from frozendict import frozendict import re import typing from collections import OrderedDict, UserList, defaultdict @@ -27,14 +25,12 @@ ) from cbor2 import CBOREncoder, CBORSimpleValue, CBORTag, dumps, loads, undefined +from frozendict import frozendict +from frozenlist import FrozenList from pprintpp import pformat -from pycardano.exception import ( - DeserializeException, - InvalidArgumentException, - SerializeException, -) -from pycardano.types import typechecked, check_type +from pycardano.exception import DeserializeException, SerializeException +from pycardano.types import check_type, typechecked __all__ = [ "default_encoder", @@ -359,14 +355,11 @@ def from_primitive(cls: Type[CBORBase], value: Any) -> CBORBase: f"'from_primitive()' is not implemented by {cls.__name__}." ) - def to_cbor(self, encoding: str = "hex") -> Union[str, bytes]: - """Encode a Python object into CBOR format. - - Args: - encoding (str): Encoding to use. Choose from "hex" or "bytes". + def to_cbor(self) -> bytes: + """Encode a Python object into CBOR bytes. Returns: - Union[str, bytes]: CBOR encoded in a hex string if encoding is hex (default) or bytes if encoding is bytes. + bytes: Python object encoded in cbor bytes. Examples: >>> class Test(CBORSerializable): @@ -384,22 +377,18 @@ def to_cbor(self, encoding: str = "hex") -> Union[str, bytes]: ... def __repr__(self): ... return f"Test({self.number1}, {self.number2})" >>> a = Test(1, 2) - >>> a.to_cbor() + >>> a.to_cbor().hex() '820102' """ - valid_encodings = ("hex", "bytes") + return dumps(self, default=default_encoder) - # Make sure encoding is selected correctly before proceeding further. - if encoding not in ("hex", "bytes"): - raise InvalidArgumentException( - f"Invalid encoding: {encoding}. Please choose from {valid_encodings}" - ) + def to_cbor_hex(self) -> str: + """Encode a Python object into CBOR hex. - cbor = dumps(self, default=default_encoder) - if encoding == "hex": - return cbor.hex() - else: - return cbor + Returns: + str: Python object encoded in cbor hex string. + """ + return self.to_cbor().hex() @classmethod def from_cbor(cls, payload: Union[str, bytes]) -> CBORSerializable: @@ -430,7 +419,7 @@ def from_cbor(cls, payload: Union[str, bytes]) -> CBORSerializable: ... def __repr__(self): ... return f"Test({self.number1}, {self.number2})" >>> a = Test(1, 2) - >>> cbor_hex = a.to_cbor() + >>> cbor_hex = a.to_cbor_hex() >>> print(Test.from_cbor(cbor_hex)) Test(1, 2) @@ -457,7 +446,7 @@ def from_cbor(cls, payload: Union[str, bytes]) -> CBORSerializable: >>> b = TestParent(3, a) >>> b TestParent(3, Test(1, 2)) - >>> cbor_hex = b.to_cbor() + >>> cbor_hex = b.to_cbor_hex() >>> cbor_hex '8203820102' >>> print(TestParent.from_cbor(cbor_hex)) @@ -579,7 +568,7 @@ class ArrayCBORSerializable(CBORSerializable): >>> t = Test2(c="c", test1=Test1(a="a")) >>> t Test2(c='c', test1=Test1(a='a', b=None)) - >>> cbor_hex = t.to_cbor() # doctest: +SKIP + >>> cbor_hex = t.to_cbor_hex() # doctest: +SKIP >>> cbor_hex # doctest: +SKIP '826163826161f6' >>> Test2.from_cbor(cbor_hex) # doctest: +SKIP @@ -608,7 +597,7 @@ class ArrayCBORSerializable(CBORSerializable): Test2(c='c', test1=Test1(a='a', b=None)) >>> t.to_primitive() # Notice below that attribute "b" is not included in converted primitive. ['c', ['a']] - >>> cbor_hex = t.to_cbor() # doctest: +SKIP + >>> cbor_hex = t.to_cbor_hex() # doctest: +SKIP >>> cbor_hex # doctest: +SKIP '826163816161' >>> Test2.from_cbor(cbor_hex) # doctest: +SKIP @@ -695,7 +684,7 @@ class MapCBORSerializable(CBORSerializable): Test2(c=None, test1=Test1(a='a', b='')) >>> t.to_primitive() {'c': None, 'test1': {'a': 'a', 'b': ''}} - >>> cbor_hex = t.to_cbor() # doctest: +SKIP + >>> cbor_hex = t.to_cbor_hex() # doctest: +SKIP >>> cbor_hex # doctest: +SKIP 'a26163f6657465737431a261616161616260' >>> Test2.from_cbor(cbor_hex) # doctest: +SKIP @@ -719,7 +708,7 @@ class MapCBORSerializable(CBORSerializable): Test2(c=None, test1=Test1(a='a', b='')) >>> t.to_primitive() {'1': {'0': 'a', '1': ''}} - >>> cbor_hex = t.to_cbor() # doctest: +SKIP + >>> cbor_hex = t.to_cbor_hex() # doctest: +SKIP >>> cbor_hex # doctest: +SKIP 'a16131a261306161613160' >>> Test2.from_cbor(cbor_hex) # doctest: +SKIP @@ -850,7 +839,7 @@ def to_shallow_primitive(self) -> dict: # Sort keys in a map according to https://datatracker.ietf.org/doc/html/rfc7049#section-3.9 def _get_sortable_val(key): if isinstance(key, CBORSerializable): - cbor_bytes = key.to_cbor("bytes") + cbor_bytes = key.to_cbor() else: cbor_bytes = dumps(key) return len(cbor_bytes), cbor_bytes diff --git a/pycardano/transaction.py b/pycardano/transaction.py index eed7e1c2..a5400dfd 100644 --- a/pycardano/transaction.py +++ b/pycardano/transaction.py @@ -466,9 +466,7 @@ def __repr__(self): return pformat(vars(self)) def __hash__(self): - return hash( - blake2b(self.input.to_cbor("bytes") + self.output.to_cbor("bytes"), 32) - ) + return hash(blake2b(self.input.to_cbor() + self.output.to_cbor(), 32)) class Withdrawals(DictCBORSerializable): @@ -572,7 +570,7 @@ class TransactionBody(MapCBORSerializable): ) def hash(self) -> bytes: - return blake2b(self.to_cbor(encoding="bytes"), TRANSACTION_HASH_SIZE, encoder=RawEncoder) # type: ignore + return blake2b(self.to_cbor(), TRANSACTION_HASH_SIZE, encoder=RawEncoder) # type: ignore @property def id(self) -> TransactionId: diff --git a/pycardano/txbuilder.py b/pycardano/txbuilder.py index 4e652149..b2292e20 100644 --- a/pycardano/txbuilder.py +++ b/pycardano/txbuilder.py @@ -596,7 +596,7 @@ def _adding_asset_make_output_overflow( ) attempt_amount.coin = required_lovelace - return len(attempt_amount.to_cbor("bytes")) > max_val_size + return len(attempt_amount.to_cbor()) > max_val_size def _pack_tokens_for_change( self, @@ -656,7 +656,7 @@ def _pack_tokens_for_change( ) updated_amount.coin = required_lovelace - if len(updated_amount.to_cbor("bytes")) > max_val_size: + if len(updated_amount.to_cbor()) > max_val_size: output.amount = old_amount break @@ -732,9 +732,7 @@ def _set_redeemer_index(self): # https://hydra.iohk.io/build/13099856/download/1/alonzo-changes.pdf if self.mint: - sorted_mint_policies = sorted( - self.mint.keys(), key=lambda x: x.to_cbor("bytes") - ) + sorted_mint_policies = sorted(self.mint.keys(), key=lambda x: x.to_cbor()) else: sorted_mint_policies = [] @@ -811,7 +809,7 @@ def _build_full_fake_tx(self) -> Transaction: witness = self._build_fake_witness_set() tx = Transaction(tx_body, witness, True, self.auxiliary_data) - size = len(tx.to_cbor("bytes")) + size = len(tx.to_cbor()) if size > self.context.protocol_param.max_tx_size: raise InvalidTransactionException( f"Transaction size ({size}) exceeds the max limit " @@ -869,7 +867,7 @@ def _estimate_fee(self): estimated_fee = fee( self.context, - len(self._build_full_fake_tx().to_cbor("bytes")), + len(self._build_full_fake_tx().to_cbor()), plutus_execution_units.steps, plutus_execution_units.mem, ) @@ -1130,14 +1128,14 @@ def _add_collateral_input(cur_total, candidate_inputs): sorted_inputs = sorted( self.inputs.copy(), - key=lambda i: (len(i.output.to_cbor()), -i.output.amount.coin), + key=lambda i: (len(i.output.to_cbor_hex()), -i.output.amount.coin), ) _add_collateral_input(tmp_val, sorted_inputs) if tmp_val.coin < collateral_amount: sorted_inputs = sorted( self.context.utxos(collateral_return_address), - key=lambda i: (len(i.output.to_cbor()), -i.output.amount.coin), + key=lambda i: (len(i.output.to_cbor_hex()), -i.output.amount.coin), ) _add_collateral_input(tmp_val, sorted_inputs) diff --git a/pycardano/utils.py b/pycardano/utils.py index 80034791..c2ea0c72 100644 --- a/pycardano/utils.py +++ b/pycardano/utils.py @@ -36,7 +36,7 @@ def fee( Args: context (ChainConext): A chain context. length (int): The length of CBOR bytes, which could usually be derived - by `len(tx.to_cbor("bytes"))`. + by `len(tx.to_cbor())`. exec_steps (Optional[int]): Number of execution steps run by plutus scripts in the transaction. max_mem_unit (Optional[int]): Max numer of memory units run by plutus scripts in the transaction. @@ -180,7 +180,7 @@ def min_lovelace_post_alonzo(output: TransactionOutput, context: ChainContext) - ) return ( - constant_overhead + len(tmp_out.to_cbor("bytes")) + constant_overhead + len(tmp_out.to_cbor()) ) * context.protocol_param.coins_per_utxo_byte diff --git a/test/pycardano/test_certificate.py b/test/pycardano/test_certificate.py index 7786010c..2c30717d 100644 --- a/test/pycardano/test_certificate.py +++ b/test/pycardano/test_certificate.py @@ -17,7 +17,7 @@ def test_stake_credential(): stake_credential = StakeCredential(TEST_ADDR.staking_part) assert ( - stake_credential.to_cbor() + stake_credential.to_cbor_hex() == "8200581c4828a2dadba97ca9fd0cdc99975899470c219bdc0d828cfa6ddf6d69" ) @@ -27,7 +27,7 @@ def test_stake_registration(): stake_registration = StakeRegistration(stake_credential) assert ( - stake_registration.to_cbor() + stake_registration.to_cbor_hex() == "82008200581c4828a2dadba97ca9fd0cdc99975899470c219bdc0d828cfa6ddf6d69" ) @@ -37,7 +37,7 @@ def test_stake_deregistration(): stake_deregistration = StakeDeregistration(stake_credential) assert ( - stake_deregistration.to_cbor() + stake_deregistration.to_cbor_hex() == "82018200581c4828a2dadba97ca9fd0cdc99975899470c219bdc0d828cfa6ddf6d69" ) @@ -49,7 +49,7 @@ def test_stake_delegation(): ) assert ( - stake_delegation.to_cbor() + stake_delegation.to_cbor_hex() == "83028200581c4828a2dadba97ca9fd0cdc99975899470c219bdc0d828cfa6ddf" "6d69581c31313131313131313131313131313131313131313131313131313131" ) diff --git a/test/pycardano/test_plutus.py b/test/pycardano/test_plutus.py index 298d5f98..35cc9ff0 100644 --- a/test/pycardano/test_plutus.py +++ b/test/pycardano/test_plutus.py @@ -82,7 +82,7 @@ def test_plutus_data(): assert ( "d87a9f581cc2ff616e11299d9094ce0a7eb5b7284b705147a822f4ffbd471f971a1b0000017e9" "874d2a0d905019fd8668218829f187b44313233349f040506ffa2014131024132ffffd9050280ff" - == my_vesting.to_cbor() + == my_vesting.to_cbor_hex() ) check_two_way_cbor(my_vesting) @@ -125,7 +125,7 @@ def test_plutus_data_json_list(): def test_plutus_data_cbor_list(): test = ListTest([LargestTest(), LargestTest()]) - encoded_cbor = test.to_cbor() + encoded_cbor = test.to_cbor_hex() assert "d8799f82d9050280d9050280ff" == encoded_cbor @@ -148,7 +148,7 @@ def test_plutus_data_json_dict(): def test_plutus_data_cbor_dict(): test = DictTest({0: LargestTest(), 1: LargestTest()}) - encoded_cbor = test.to_cbor() + encoded_cbor = test.to_cbor_hex() assert "d87c9fa200d905028001d9050280ff" == encoded_cbor @@ -225,7 +225,7 @@ def test_redeemer(): redeemer.tag = RedeemerTag.SPEND assert ( "840000d8668218829f187b433233349f040506ffa2014131024132ff821a000f42401a000f4240" - == redeemer.to_cbor() + == redeemer.to_cbor_hex() ) check_two_way_cbor(redeemer) @@ -236,7 +236,7 @@ def test_redeemer_empty_datum(): redeemer.tag = RedeemerTag.SPEND assert ( "840000d8668218829f187b433233349fffa2014131024132ff821a000f42401a000f4240" - == redeemer.to_cbor() + == redeemer.to_cbor_hex() ) check_two_way_cbor(redeemer) @@ -256,7 +256,7 @@ def test_cost_model(): "7e2318760001011a000242201a00067e2318760001011a0025cea81971f704001a00014" "1bb041a000249f019138800011a000249f018201a000302590001011a000249f018201a" "000249f018201a000249f018201a000249f018201a000249f018201a000249f018201a0" - "00249f018201a00330da70101ff" == COST_MODELS.to_cbor() + "00249f018201a00330da70101ff" == COST_MODELS.to_cbor_hex() ) @@ -284,7 +284,7 @@ def test_raw_plutus_data(): "140d8799f00a1401a004c7a20ffffffff" ) raw_plutus_data = RawPlutusData.from_cbor(raw_plutus_cbor) - assert raw_plutus_data.to_cbor() == raw_plutus_cbor + assert raw_plutus_data.to_cbor_hex() == raw_plutus_cbor check_two_way_cbor(raw_plutus_data) @@ -293,7 +293,7 @@ def test_clone_raw_plutus_data(): cloned_tag = copy.deepcopy(tag) assert cloned_tag == tag - assert cloned_tag.to_cbor() == tag.to_cbor() + assert cloned_tag.to_cbor_hex() == tag.to_cbor_hex() tag.data.value = [1001] @@ -311,7 +311,7 @@ def test_clone_plutus_data(): cloned_vesting = copy.deepcopy(my_vesting) assert cloned_vesting == my_vesting - assert cloned_vesting.to_cbor() == my_vesting.to_cbor() + assert cloned_vesting.to_cbor_hex() == my_vesting.to_cbor_hex() my_vesting.deadline = 1643235300001 diff --git a/test/pycardano/test_serialization.py b/test/pycardano/test_serialization.py index 8526bf94..8da4fa6b 100644 --- a/test/pycardano/test_serialization.py +++ b/test/pycardano/test_serialization.py @@ -51,7 +51,7 @@ class Test2(ArrayCBORSerializable): test1: Test1 t = Test2(c="c", test1=Test1(a="a")) - assert t.to_cbor() == "826163826161f6" + assert t.to_cbor_hex() == "826163826161f6" check_two_way_cbor(t) @@ -78,7 +78,7 @@ class Test2(ArrayCBORSerializable): t = Test2(c="c", test1=Test1(a="a")) assert t.test1.to_shallow_primitive() == ["a"] - assert t.to_cbor() == "826163816161" + assert t.to_cbor_hex() == "826163816161" check_two_way_cbor(t) @@ -94,7 +94,7 @@ class Test2(MapCBORSerializable): test1: Test1 = field(default_factory=Test1) t = Test2(test1=Test1(a="a")) - assert t.to_cbor() == "a26163f6657465737431a261616161616260" + assert t.to_cbor_hex() == "a26163f6657465737431a261616161616260" check_two_way_cbor(t) @@ -111,7 +111,7 @@ class Test2(MapCBORSerializable): t = Test2(test1=Test1(a="a")) assert t.to_primitive() == {"1": {"0": "a", "1": ""}} - assert t.to_cbor() == "a16131a261306161613160" + assert t.to_cbor_hex() == "a16131a261306161613160" check_two_way_cbor(t) @@ -130,11 +130,11 @@ class MyTestDict(DictCBORSerializable): b[b"1"] = 3 b[b"110"] = 1 - assert a.to_cbor() == "a341310343313030024331313001" + assert a.to_cbor_hex() == "a341310343313030024331313001" check_two_way_cbor(a) # Make sure the cbor of a and b are exactly the same even when their items are inserted in different orders. - assert a.to_cbor() == b.to_cbor() + assert a.to_cbor_hex() == b.to_cbor_hex() def test_dict_complex_key_cbor_serializable(): @@ -150,7 +150,7 @@ class MyTestDict(DictCBORSerializable): a[MyTest(0)] = 1 a[MyTest(1)] = 2 - assert a.to_cbor() == "a2810001810102" + assert a.to_cbor_hex() == "a2810001810102" check_two_way_cbor(a) @@ -214,7 +214,7 @@ class Test1(MapCBORSerializable): a: str = "" with pytest.raises(TypeError): - Test1(a=1).to_cbor() + Test1(a=1).to_cbor_hex() def test_wrong_union_type(): @@ -223,7 +223,7 @@ class Test1(MapCBORSerializable): a: Union[str, int] = "" with pytest.raises(TypeError): - Test1(a=1.0).to_cbor() + Test1(a=1.0).to_cbor_hex() def test_wrong_optional_type(): @@ -232,7 +232,7 @@ class Test1(MapCBORSerializable): a: Optional[str] = "" with pytest.raises(TypeError): - Test1(a=1.0).to_cbor() + Test1(a=1.0).to_cbor_hex() def test_wrong_list_type(): @@ -241,7 +241,7 @@ class Test1(MapCBORSerializable): a: List[str] = "" with pytest.raises(TypeError): - Test1(a=[1]).to_cbor() + Test1(a=[1]).to_cbor_hex() def test_wrong_dict_type(): @@ -250,7 +250,7 @@ class Test1(MapCBORSerializable): a: Dict[str, int] = "" with pytest.raises(TypeError): - Test1(a={1: 1}).to_cbor() + Test1(a={1: 1}).to_cbor_hex() def test_wrong_tuple_type(): @@ -259,7 +259,7 @@ class Test1(MapCBORSerializable): a: Tuple[str, int] = "" with pytest.raises(TypeError): - Test1(a=(1, 1)).to_cbor() + Test1(a=(1, 1)).to_cbor_hex() def test_wrong_set_type(): @@ -268,7 +268,7 @@ class Test1(MapCBORSerializable): a: Set[str] = "" with pytest.raises(TypeError): - Test1(a={1}).to_cbor() + Test1(a={1}).to_cbor_hex() def test_wrong_nested_type(): @@ -282,7 +282,7 @@ class Test2(MapCBORSerializable): b: Optional[Test1] = None with pytest.raises(TypeError): - Test2(a=1).to_cbor() + Test2(a=1).to_cbor_hex() with pytest.raises(TypeError): - Test2(a=Test1(a=1)).to_cbor() + Test2(a=Test1(a=1)).to_cbor_hex() diff --git a/test/pycardano/test_transaction.py b/test/pycardano/test_transaction.py index bf3020cd..b9f2e48b 100644 --- a/test/pycardano/test_transaction.py +++ b/test/pycardano/test_transaction.py @@ -26,7 +26,7 @@ def test_transaction_input(): tx_id_hex = "732bfd67e66be8e8288349fcaaa2294973ef6271cc189a239bb431275401b8e5" tx_in = TransactionInput(TransactionId(bytes.fromhex(tx_id_hex)), 0) assert ( - tx_in.to_cbor() + tx_in.to_cbor_hex() == "825820732bfd67e66be8e8288349fcaaa2294973ef6271cc189a239bb431275401b8e500" ) check_two_way_cbor(tx_in) @@ -38,7 +38,7 @@ def test_transaction_output(): ) output = TransactionOutput(addr, 100000000000) assert ( - output.to_cbor() + output.to_cbor_hex() == "82581d60f6532850e1bccee9c72a9113ad98bcc5dbb30d2ac960262444f6e5f41b000000174876e800" ) check_two_way_cbor(output) @@ -48,7 +48,7 @@ def test_transaction_output_str_address(): addr = "addr_test1vrm9x2zsux7va6w892g38tvchnzahvcd9tykqf3ygnmwtaqyfg52x" output = TransactionOutput(addr, 100000000000) assert ( - output.to_cbor() + output.to_cbor_hex() == "82581d60f6532850e1bccee9c72a9113ad98bcc5dbb30d2ac960262444f6e5f41b000000174876e800" ) check_two_way_cbor(output) @@ -61,7 +61,7 @@ def test_transaction_output_inline_datum(): datum = 42 output = TransactionOutput(addr, 100000000000, datum=datum) assert ( - output.to_cbor() + output.to_cbor_hex() == "a300581d60f6532850e1bccee9c72a9113ad98bcc5dbb30d2ac960262444f6e5f4011b000000174876e800028201d81842182a" ) check_two_way_cbor(output) @@ -77,7 +77,7 @@ def test_transaction_output_datum_hash_inline_plutus_script(): addr, 100000000000, datum_hash=datum_hash(datum), script=script ) assert ( - output.to_cbor() + output.to_cbor_hex() == "a400581d60f6532850e1bccee9c72a9113ad98bcc5dbb30d2ac960262444f6e5f4011b000000174876" "e80002820058209e1199a988ba72ffd6e9c269cadb3b53b5f360ff99f112d9b2ee30c4d74ad88b03d8" "184f82014c6d6167696320736372697074" @@ -92,7 +92,7 @@ def test_transaction_output_inline_plutus_script_v1(): script = PlutusV1Script(b"magic script") output = TransactionOutput(addr, 100000000000, script=script) assert ( - output.to_cbor() + output.to_cbor_hex() == "a300581d60f6532850e1bccee9c72a9113ad98bcc5dbb30d2ac960262444f6e5f401" "1b000000174876e80003d8184f82014c6d6167696320736372697074" ) @@ -106,7 +106,7 @@ def test_transaction_output_inline_plutus_script_v2(): script = PlutusV2Script(b"magic script") output = TransactionOutput(addr, 100000000000, script=script) assert ( - output.to_cbor() + output.to_cbor_hex() == "a300581d60f6532850e1bccee9c72a9113ad98bcc5dbb30d2ac960262444f6e5" "f4011b000000174876e80003d8184f82024c6d6167696320736372697074" ) @@ -120,7 +120,7 @@ def test_transaction_output_inline_native_script(): script = ScriptPubkey(addr.payment_part) output = TransactionOutput(addr, 100000000000, script=script) assert ( - output.to_cbor() + output.to_cbor_hex() == "a300581d60f6532850e1bccee9c72a9113ad98bcc5dbb30d2ac960262444f6e5" "f4011b000000174876e80003d818582282008200581cf6532850e1bccee9c72a" "9113ad98bcc5dbb30d2ac960262444f6e5f4" @@ -134,7 +134,7 @@ def test_invalid_transaction_output(): ) output = TransactionOutput(addr, -100000000000) with pytest.raises(InvalidDataException): - output.to_cbor() + output.to_cbor_hex() value = Value.from_primitive( [ @@ -147,7 +147,7 @@ def test_invalid_transaction_output(): ) output = TransactionOutput(addr, value) with pytest.raises(InvalidDataException): - output.to_cbor() + output.to_cbor_hex() def make_transaction_body(): @@ -172,7 +172,7 @@ def make_transaction_body(): def test_transaction_body(): tx_body = make_transaction_body() assert ( - tx_body.to_cbor() + tx_body.to_cbor_hex() == "a50081825820732bfd67e66be8e8288349fcaaa2294973ef6271cc189a239bb431275401b8e" "500018282581d60f6532850e1bccee9c72a9113ad98bcc5dbb30d2ac960262444f6e5f41b00" "0000174876e80082581d60f6532850e1bccee9c72a9113ad98bcc5dbb30d2ac960262444f6e" @@ -448,6 +448,6 @@ class TestDatum(PlutusData): datum=TestDatum(1, b"test"), ) - cbor = output.to_cbor() + cbor = output.to_cbor_hex() - assert cbor == TransactionOutput.from_cbor(cbor).to_cbor() + assert cbor == TransactionOutput.from_cbor(cbor).to_cbor_hex() diff --git a/test/pycardano/test_txbuilder.py b/test/pycardano/test_txbuilder.py index 91e8c094..862c75dd 100644 --- a/test/pycardano/test_txbuilder.py +++ b/test/pycardano/test_txbuilder.py @@ -933,7 +933,7 @@ def test_build_and_sign(chain_context): "a300818258203131313131313131313131313131313131313131313131313131313131313131" "00018282581d60f6532850e1bccee9c72a9113ad98bcc5dbb30d2ac960262444f6e5f41a0007" "a12082581d60f6532850e1bccee9c72a9113ad98bcc5dbb30d2ac960262444f6e5f41a004223" - "fb021a00028625" == tx_body.to_cbor() + "fb021a00028625" == tx_body.to_cbor_hex() ) @@ -1005,7 +1005,7 @@ def test_tx_builder_exact_fee_no_change(chain_context): } assert expected == tx.transaction_body.to_primitive() - assert tx.transaction_body.fee >= fee(chain_context, len(tx.to_cbor("bytes"))) + assert tx.transaction_body.fee >= fee(chain_context, len(tx.to_cbor())) def test_tx_builder_certificates(chain_context): diff --git a/test/pycardano/test_types.py b/test/pycardano/test_types.py index c936a89e..c9f17511 100644 --- a/test/pycardano/test_types.py +++ b/test/pycardano/test_types.py @@ -1,6 +1,6 @@ import typeguard -from pycardano.types import typechecked, check_type +from pycardano.types import check_type, typechecked def test_types(monkeypatch): diff --git a/test/pycardano/util.py b/test/pycardano/util.py index c69c268f..9334ff7f 100644 --- a/test/pycardano/util.py +++ b/test/pycardano/util.py @@ -12,7 +12,7 @@ def check_two_way_cbor(serializable: CBORSerializable): - restored = serializable.from_cbor(serializable.to_cbor()) + restored = serializable.from_cbor(serializable.to_cbor_hex()) assert restored == serializable