Skip to content

Commit

Permalink
add tests for outputs
Browse files Browse the repository at this point in the history
  • Loading branch information
eric-volz committed Jul 18, 2023
1 parent 8af3d97 commit bc9ea8d
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 10 deletions.
16 changes: 8 additions & 8 deletions defichain/transactions/rawtransactions/txoutput.py
Original file line number Diff line number Diff line change
Expand Up @@ -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":
Expand All @@ -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)
Expand Down
18 changes: 16 additions & 2 deletions tests/transactions/rawtransactions/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
78 changes: 78 additions & 0 deletions tests/transactions/rawtransactions/test_txoutput.py
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit bc9ea8d

Please sign in to comment.