diff --git a/defichain/transactions/rawtransactions/txoutput.py b/defichain/transactions/rawtransactions/txoutput.py index b3e3e160..16f6a02d 100644 --- a/defichain/transactions/rawtransactions/txoutput.py +++ b/defichain/transactions/rawtransactions/txoutput.py @@ -188,6 +188,14 @@ def set_bytes_address(self, address: bytes) -> None: class TxDataOutput(TxOutput): + """ + An output witch includes a data. + + :param data: (required) your data in hex encoding + :type data: str + :param tokenId: (optional) which token you want to send (almost always 0 -> stands for DFI) + :type tokenId: int + """ @staticmethod def deserialize(network: Any, hex: str) -> "TxDataOutput": @@ -202,14 +210,6 @@ def deserialize(network: Any, hex: str) -> "TxDataOutput": return txDataOutput def __init__(self, data: str, tokenId: int = 0): - """ - An output witch includes a data. - - :param data: (required) your data in hex encoding - :type data: str - :param tokenId: (optional) which token you want to send (almost always 0 -> stands for DFI) - :type tokenId: int - """ self._data = None self.set_data(data) super().__init__(0, self.get_script(), tokenId) diff --git a/tests/transactions/rawtransactions/__init__.py b/tests/transactions/rawtransactions/__init__.py index 6da11356..087f8a39 100644 --- a/tests/transactions/rawtransactions/__init__.py +++ b/tests/transactions/rawtransactions/__init__.py @@ -25,8 +25,22 @@ class TestInputs: P2WPKH_Input_Serialized = "061ca2791086a0df7c4786bbf16b933873d47ef0029ea539ce7e23d398fcbc3d0100000000ffffffff" - -_p2wpkhAddressOutput = TxAddressOutput(500, "df1q29x7wpn8flcqgscre4xfjgp99mppcmaus83uzt") +class TestOutputs: + VALUE: int = 500 + DATA: str = "#ROADTO50" + Data_Output_Serialized: str = "00000000000000000b6a0923524f4144544f353000" + + DefiTx = UtxosToAccount("df1q29x7wpn8flcqgscre4xfjgp99mppcmaus83uzt", 1) + DefiTx_Serialized: str = "6a2a446654785501160014514de706674ff0044303cd4c9920252ec21c6fbc01000000000100000000000000" # UtxoToAccount DefiTx + DefiTx_Output_Serialized: str = "01000000000000002c6a2a446654785501160014514de706674ff0044303cd4c9920252ec21c6fbc" \ + "0100000000010000000000000000" + + P2PKH_Address_Output = TxAddressOutput(VALUE, Addresses.P2PKH) + P2PKH_Address_Output_Serialized = "f4010000000000001976a9145720415061b4e2feb76eebcb3a9940ae4413373588ac00" + P2SH_Address_Output = TxAddressOutput(VALUE, Addresses.P2SH) + P2SH_Address_Output_Serialized = "f40100000000000017a914453dfd6b24118d99ec767d3b6188dce50e6705b38700" + P2WPKH_Address_Output = TxAddressOutput(VALUE, Addresses.P2WPKH) + P2WPKH_Address_Output_Serialized = "f401000000000000160014514de706674ff0044303cd4c9920252ec21c6fbc00" class TestFee: diff --git a/tests/transactions/rawtransactions/test_txoutput.py b/tests/transactions/rawtransactions/test_txoutput.py new file mode 100644 index 00000000..671ca36b --- /dev/null +++ b/tests/transactions/rawtransactions/test_txoutput.py @@ -0,0 +1,78 @@ +import pytest + +from defichain.transactions.rawtransactions import TxOutput, TxAddressOutput, TxDataOutput, TxDefiOutput +from defichain.networks import DefichainMainnet + +from . import TestOutputs, Addresses + + +@pytest.mark.transactions +def test_address_output(): # 01 + txP2PKHOutput = TxAddressOutput(TestOutputs.VALUE, Addresses.P2PKH, 0) + txP2SHOutput = TxAddressOutput(TestOutputs.VALUE, Addresses.P2SH, 0) + txP2WPKHOutput = TxAddressOutput(TestOutputs.VALUE, Addresses.P2WPKH, 0) + + assert TxAddressOutput(value=TestOutputs.VALUE, address=Addresses.P2PKH, tokenId=0) + + assert txP2PKHOutput.serialize() == TestOutputs.P2PKH_Address_Output_Serialized + assert txP2SHOutput.serialize() == TestOutputs.P2SH_Address_Output_Serialized + assert txP2WPKHOutput.serialize() == TestOutputs.P2WPKH_Address_Output_Serialized + + assert TxOutput.deserialize(DefichainMainnet, TestOutputs.P2PKH_Address_Output_Serialized).serialize() == \ + TestOutputs.P2PKH_Address_Output_Serialized + assert TxOutput.deserialize(DefichainMainnet, TestOutputs.P2SH_Address_Output_Serialized).serialize() == \ + TestOutputs.P2SH_Address_Output_Serialized + assert TxOutput.deserialize(DefichainMainnet, TestOutputs.P2WPKH_Address_Output_Serialized).serialize() == \ + TestOutputs.P2WPKH_Address_Output_Serialized + assert TxOutput.deserialize(network=DefichainMainnet, + hex=TestOutputs.P2WPKH_Address_Output_Serialized).serialize() == \ + TestOutputs.P2WPKH_Address_Output_Serialized + + assert TxAddressOutput.deserialize(DefichainMainnet, TestOutputs.P2PKH_Address_Output_Serialized).serialize() == \ + TestOutputs.P2PKH_Address_Output_Serialized + assert TxAddressOutput.deserialize(DefichainMainnet, TestOutputs.P2SH_Address_Output_Serialized).serialize() == \ + TestOutputs.P2SH_Address_Output_Serialized + assert TxAddressOutput.deserialize(DefichainMainnet, TestOutputs.P2WPKH_Address_Output_Serialized).serialize() == \ + TestOutputs.P2WPKH_Address_Output_Serialized + assert TxAddressOutput.deserialize(network=DefichainMainnet, + hex=TestOutputs.P2WPKH_Address_Output_Serialized).serialize() == \ + TestOutputs.P2WPKH_Address_Output_Serialized + + +@pytest.mark.transactions +def test_data_output(): # 02 + txDataOutput = TxDataOutput(TestOutputs.DATA, 0) + + assert TxDataOutput(data=TestOutputs.DATA, tokenId=0) + + assert txDataOutput.serialize() == TestOutputs.Data_Output_Serialized + + assert TxOutput.deserialize(DefichainMainnet, TestOutputs.Data_Output_Serialized).serialize() == \ + TestOutputs.Data_Output_Serialized + assert TxOutput.deserialize(network=DefichainMainnet, hex=TestOutputs.Data_Output_Serialized).serialize() == \ + TestOutputs.Data_Output_Serialized + + assert TxDataOutput.deserialize(DefichainMainnet, TestOutputs.Data_Output_Serialized).serialize() == \ + TestOutputs.Data_Output_Serialized + assert TxDataOutput.deserialize(network=DefichainMainnet, hex=TestOutputs.Data_Output_Serialized).serialize() == \ + TestOutputs.Data_Output_Serialized + + +@pytest.mark.transactions +def test_defi_output(): # 03 + txDefiOutput = TxDefiOutput(1, TestOutputs.DefiTx, 0) + + assert TxDefiOutput(1, TestOutputs.DefiTx, 0) + + assert txDefiOutput.serialize() == TestOutputs.DefiTx_Output_Serialized + + assert TxOutput.deserialize(DefichainMainnet, TestOutputs.DefiTx_Output_Serialized).serialize() == \ + TestOutputs.DefiTx_Output_Serialized + assert TxOutput.deserialize(network=DefichainMainnet, hex=TestOutputs.DefiTx_Output_Serialized).serialize() == \ + TestOutputs.DefiTx_Output_Serialized + + assert TxDefiOutput.deserialize(DefichainMainnet, TestOutputs.DefiTx_Output_Serialized).serialize() == \ + TestOutputs.DefiTx_Output_Serialized + assert TxDefiOutput.deserialize(network=DefichainMainnet, hex=TestOutputs.DefiTx_Output_Serialized).serialize() == \ + TestOutputs.DefiTx_Output_Serialized +