class TestTransaction:
    ACCOUNT_SEED = "df3dd6d884714288a39af0bd973a1771c9f00f168cf040d6abb6a50dd5e055d8"
    ACCOUNT2_SEED = "cool strike recall mother true topic road bright nature dilemma glide shift return mesh strategy"

    account = AccountFactory('T').create_from_seed(ACCOUNT_SEED)
    account2 = AccountFactory('T').create_from_seed(ACCOUNT2_SEED)

    def test_sponsor_with(self):
        transaction = Transfer('3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb', 10000)
        with pytest.raises(Exception):
            transaction.sponsor_with(self.account2)
        transaction.sign_with(self.account)

        transaction.sponsor_with(self.account2)
        assert transaction.sponsor == self.account2.address
        assert transaction.sponsor_public_key == base58.b58encode(
            self.account2.public_key.__bytes__())
        assert transaction.sponsor_key_type == 'ed25519'

        assert self.account2.verify_signature(transaction.to_binary(),
                                              transaction.proofs[1])

        json = transaction.to_json()
        assert json['sponsor'] == self.account2.address
        assert json['sponsorPublicKey'] == base58.b58encode(
            self.account2.public_key.__bytes__())
        assert json['sponsorKeyType'] == self.account2.key_type
class TestCancelSponsorship:

    ACCOUNT_SEED = "df3dd6d884714288a39af0bd973a1771c9f00f168cf040d6abb6a50dd5e055d8"
    account = AccountFactory('T').create_from_seed(ACCOUNT_SEED)

    def test_construct(self):
        transaction = CancelSponsorship('3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb')
        assert transaction.recipient == '3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb'
        assert transaction.tx_fee == 500000000

    @freeze_time("2021-01-14")
    def test_sign_with(self):
        transaction = CancelSponsorship('3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb')
        assert transaction.is_signed() is False
        transaction.sign_with(self.account)
        assert transaction.is_signed() is True
        timestamp = int(time() * 1000)
        assert str(transaction.timestamp)[:-3] == str(timestamp)[:-3]
        assert transaction.sender == '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2'
        assert transaction.sender_public_key == '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz'
        assert self.account.verify_signature(transaction.to_binary(),
                                             transaction.proofs[0])

    expected_v1 = {
        "type":
        19,
        "version":
        1,
        'senderKeyType':
        'ed25519',
        "sender":
        '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2',
        "senderPublicKey":
        '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz',
        "recipient":
        '3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb',
        "fee":
        500000000,
        "timestamp":
        1326499200000,
        'height':
        '',
        'id':
        '',
        "proofs": [
            '53a2K2CqwP4TsbiBCnJbibduReCKQSH4bTvVLFQajZ41aGmr3RhizgZqT1GjRXWgRsSWfahjB2J7P8JazQAitagf'
        ]
    }

    expected_v3 = {
        'fee':
        500000000,
        'proofs': [
            '3pDCMrS6MWjczpr3iYnS5h9j7xGH4wJWzTNn5UYgXxgcVL6BZaVyXAqwV2NqpFQKcWoVWoqpM7wWrCerJ241a9Tv'
        ],
        'recipient':
        '3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb',
        'sender':
        '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2',
        'senderKeyType':
        'ed25519',
        'senderPublicKey':
        '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz',
        'timestamp':
        1326499200000,
        'type':
        19,
        'height':
        '',
        'id':
        '',
        'version':
        3
    }

    @freeze_time("2021-01-14")
    @pytest.mark.parametrize("version, expected", [(1, expected_v1),
                                                   (3, expected_v3)])
    def test_to_json(self, expected, version):
        transaction = CancelSponsorship('3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb')
        transaction.timestamp = 1326499200000
        transaction.version = version
        transaction.sign_with(self.account)
        assert transaction.to_json() == expected

    @mock.patch('src.lto.PublicNode')
    def test_broadcast(self, mock_Class):
        transaction = CancelSponsorship('3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb')
        broadcastedTransaction = CancelSponsorship(
            '3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb')
        broadcastedTransaction.id = '7cCeL1qwd9i6u8NgMNsQjBPxVhrME2BbfZMT1DF9p4Yi'
        mc = mock_Class.return_value
        mc.broadcast.return_value = broadcastedTransaction
        assert mc.broadcast(transaction) == broadcastedTransaction

    @freeze_time("2021-01-14")
    def test_from_data(self):
        data = {
            "type":
            19,
            "version":
            3,
            "recipient":
            "3N9ChkxWXqgdWLLErWFrSwjqARB6NtYsvZh",
            "id":
            "53r3mwknCUJmyacf1TP1A5zUGCF9z3N951Zegs9UrkZD",
            "sender":
            "3NBcx7AQqDopBj3WfwCVARNYuZyt1L9xEVM",
            "senderKeyType":
            "ed25519",
            "senderPublicKey":
            "7gghhSwKRvshZwwh6sG97mzo1qoFtHEQK7iM4vGcnEt7",
            "timestamp":
            1610412950000,
            "fee":
            500000000,
            "proofs": [
                "RexaACH8AVfNKQcKDRVCvF2nSAzJLZPyUTtD9KmtikBy5CVCpVeBp78m2Myy7ekkecDMaJwERjgTVxjSxeLd8Da"
            ],
            "height":
            1225860
        }
        transaction = CancelSponsorship(data['recipient']).from_data(data)
        crypto.compare_data_transaction(data, transaction)
class TestMassTransfer:

    ACCOUNT_SEED = "df3dd6d884714288a39af0bd973a1771c9f00f168cf040d6abb6a50dd5e055d8"
    account = AccountFactory('T').create_from_seed(ACCOUNT_SEED)
    transfers = ({
        "recipient": "3HUQa6qtLhNvBJNyPV1pDRahbrcuQkaDQv2",
        "amount": 100000000
    }, {
        "recipient": "3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb",
        "amount": 200000000
    })

    def test_construct(self):
        transaction = MassTransfer(self.transfers, attachment='Hello')
        assert transaction.transfers == self.transfers
        assert transaction.BASE_FEE == 100000000
        assert transaction.VAR_FEE == 10000000
        assert transaction.tx_fee == 120000000
        assert transaction.attachment == 'Hello'

    @freeze_time("2021-01-14")
    def test_sign_with(self):
        transaction = MassTransfer(self.transfers, attachment='Hello')
        assert transaction.is_signed() is False
        transaction.sign_with(self.account)
        assert transaction.is_signed() is True
        timestamp = int(time() * 1000)
        assert str(transaction.timestamp)[:-3] == str(timestamp)[:-3]
        assert transaction.sender == '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2'
        assert transaction.sender_public_key == '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz'
        assert self.account.verify_signature(transaction.to_binary(),
                                             transaction.proofs[0])

    expected_v1 = {
        "type":
        11,
        "version":
        1,
        "sender":
        '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2',
        'senderKeyType':
        'ed25519',
        "senderPublicKey":
        '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz',
        "fee":
        120000000,
        'height':
        '',
        'id':
        '',
        "timestamp":
        1326499200000,
        "attachment":
        '9Ajdvzr',
        'transfers': ({
            'amount': 100000000,
            'recipient': '3HUQa6qtLhNvBJNyPV1pDRahbrcuQkaDQv2'
        }, {
            'amount': 200000000,
            'recipient': '3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb'
        }),
        "proofs": [
            '48THooU3mE2NU7TPPeTp8FzRWQ3YUMZFFrUQbVdRkV6xiYoQbJYqZxUc7hhmGJVvKEy93E3g9SKgX5R5BwTkMfYS'
        ]
    }

    expected_v3 = {
        "type":
        11,
        "version":
        3,
        "sender":
        '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2',
        "senderKeyType":
        "ed25519",
        "senderPublicKey":
        '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz',
        "fee":
        120000000,
        'height':
        '',
        'id':
        '',
        "timestamp":
        1326499200000,
        "proofs": [
            '5Sd62Xcjp3rxcwLZShSYWgZ74eWXkdY8cAzyZpd4ejKRXbSNX9a66WrZPc4Vo8VoetqX9jn5wC7e5iyTSc9GC8vg'
        ],
        "attachment":
        '9Ajdvzr',
        'transfers': ({
            'amount': 100000000,
            'recipient': '3HUQa6qtLhNvBJNyPV1pDRahbrcuQkaDQv2'
        }, {
            'amount': 200000000,
            'recipient': '3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb'
        })
    }

    @freeze_time("2021-01-14")
    @pytest.mark.parametrize("version, expected", [(1, expected_v1),
                                                   (3, expected_v3)])
    def test_to_json(self, expected, version):
        transaction = MassTransfer(self.transfers, attachment='Hello')
        transaction.timestamp = 1326499200000
        transaction.version = version
        transaction.sign_with(self.account)
        assert transaction.to_json() == expected

    @mock.patch('src.lto.PublicNode')
    def test_broadcast(self, mock_Class):
        transaction = MassTransfer(self.transfers, attachment='Hello')
        broadcastedTransaction = MassTransfer(self.transfers,
                                              attachment='Hello')
        broadcastedTransaction.id = '7cCeL1qwd9i6u8NgMNsQjBPxVhrME2BbfZMT1DF9p4Yi'
        mc = mock_Class.return_value
        mc.broadcast.return_value = broadcastedTransaction
        assert mc.broadcast(transaction) == broadcastedTransaction

    @freeze_time("2021-01-14")
    def test_from_data(self):
        data = {
            "type":
            11,
            "version":
            3,
            "id":
            "BG7MQF8KffVU6MMbJW5xPowVQsohwJhfEJ4wSF8cWdC2",
            "sender":
            "3HhQxe5kLwuTfE3psYcorrhogY4fCwz2BSh",
            "senderKeyType":
            "Ed25519",
            "senderPublicKey":
            "7eAkEXtFGRPQ9pxjhtcQtbH889n8xSPWuswKfW2v3iK4",
            "fee":
            200000,
            "timestamp":
            1518091313964,
            "proofs": ["4Ph6RpcPFfBhU2fx6JgcHLwBuYSpn..."],
            "attachment":
            "59QuUcqP6p",
            "transfers": [{
                "recipient": "3HUQa6qtLhNvBJNyPV1pDRahbrcuQkaDQv2",
                "amount": 100000000
            }, {
                "recipient": "3HaAdZcCXAqhvFj113Gbe3Kww4rCGMUZaEZ",
                "amount": 200000000
            }]
        }
        transaction = MassTransfer(transfers='').from_data(data)
        crypto.compare_data_transaction(data, transaction)
Esempio n. 4
0
class TestLease:

    ACCOUNT_SEED = "df3dd6d884714288a39af0bd973a1771c9f00f168cf040d6abb6a50dd5e055d8"
    account = AccountFactory('T').create_from_seed(ACCOUNT_SEED)

    def test_construct(self):
        transaction = Lease('3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb', 10000)
        assert transaction.amount == 10000
        assert transaction.recipient == '3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb'
        assert transaction.tx_fee == 100000000


    @freeze_time("2021-01-14")
    def test_sign_with(self):
        transaction = Lease('3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb', 10000)
        assert transaction.is_signed() is False
        transaction.sign_with(self.account)
        assert transaction.is_signed() is True
        timestamp = int(time() * 1000)
        assert str(transaction.timestamp)[:-3] == str(timestamp)[:-3]
        assert transaction.sender == '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2'
        assert transaction.sender_public_key == '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz'
        assert self.account.verify_signature(transaction.to_binary(), transaction.proofs[0])

    expected_v2 = {
            "type": 8,
            "version": 2,
            'senderKeyType': 'ed25519',
            'sender': '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2',
            "senderPublicKey": '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz',
            "recipient": '3N9ChkxWXqgdWLLErWFrSwjqARB6NtYsvZh',
            "amount": 120000000,
            "fee": 100000000,
            "timestamp": 1326499200000,
            'height': '',
            'id': '',
            "proofs": ['2rgvnVB6s5yvrUX85S2MkjH19G6p9QpmGAXVKjzkFFbaFE89m4gYa8tZs1ATEEiKQybvgL8wCviY4nHx1bqSw87k']
        }

    expected_v3 = {
            "type": 8,
            "version": 3,
            "sender": '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2',
            "senderKeyType": "ed25519",
            "senderPublicKey": '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz',
            "recipient": '3N9ChkxWXqgdWLLErWFrSwjqARB6NtYsvZh',
            "amount": 120000000,
            "fee": 100000000,
            "timestamp": 1326499200000,
            'height': '',
            'id': '',
            "proofs": ['4kuKVaN2HjoYacitKePaThXg4e5vTZBawvateHPfgaEQzueUkJQwZY7F9zP5uogxAb6Pv6bjh92DX9LEnrRW1PV7']
        }

    @freeze_time("2021-01-14")
    @pytest.mark.parametrize("version, expected", [(2, expected_v2), (3, expected_v3)])
    def test_to_json(self, expected, version):
        transaction = Lease('3N9ChkxWXqgdWLLErWFrSwjqARB6NtYsvZh', 120000000)
        transaction.timestamp = 1326499200000
        transaction.version = version
        transaction.sign_with(self.account)
        assert transaction.to_json() == expected


    @mock.patch('src.lto.PublicNode')
    def test_broadcast(self, mock_Class):
        transaction = Lease('3N9ChkxWXqgdWLLErWFrSwjqARB6NtYsvZh', 120000000)
        broadcastedTransaction = transaction
        broadcastedTransaction.id = '7cCeL1qwd9i6u8NgMNsQjBPxVhrME2BbfZMT1DF9p4Yi'
        mc = mock_Class.return_value
        mc.broadcast.return_value = broadcastedTransaction
        assert mc.broadcast(transaction) == broadcastedTransaction

    @freeze_time("2021-01-14")
    def test_from_data(self):
        data = {
            "id": "895ryYABK7KQWLvSbw8o8YSjTTXHCqRJw1yzC63j4Fgk",
            "type" : 8,
            "version": 3,
            "sender" : "3HgqG68qfeVz5dqbyvqnxQceFaH49xmGvUS",
            "amount" : 1,
            "senderKeyType": 'ed25519',
            "senderPublicKey" : "DddGQs63eWAA1G1ZJnJDVSrCpMS97NH4odnggwUV42kE",
            "fee" : 500000000,
            "timestamp" : 1495625418143,
            "proofs" : "2SUmFj4zo7NfZK7Xoqvqh7m7bhzFR8rT7eLtqe9Rrp18ugFH9SSvoTx1BtekWhU7PN1uLrnQCpJdS8JhmcBAjmb9",
            "recipient": "3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb"
        }
        transaction = Lease(amount=1, recipient='3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb').from_data(data)
        crypto.compare_data_transaction(data, transaction)
Esempio n. 5
0
class TestData:
    ACCOUNT_SEED = "df3dd6d884714288a39af0bd973a1771c9f00f168cf040d6abb6a50dd5e055d8"
    account = AccountFactory('T').create_from_seed(ACCOUNT_SEED)
    data_entries = {"test": 1, "second": True}

    def test_construct(self):
        transaction = Data(self.data_entries)
        data_objects = transaction.data
        assert (data_objects[0].key == 'test')
        assert (data_objects[0].type == 'integer')
        assert (data_objects[0].value == 1)
        assert (data_objects[1].key == 'second')
        assert (data_objects[1].type == 'boolean')
        assert (data_objects[1].value is True)

    @freeze_time("2021-01-14")
    def test_sign_with(self):
        transaction = Data(self.data_entries)
        assert transaction.is_signed() is False
        transaction.sign_with(self.account)
        assert transaction.is_signed() is True
        timestamp = int(time() * 1000)
        assert str(transaction.timestamp)[:-3] == str(timestamp)[:-3]
        assert transaction.sender == '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2'
        assert transaction.sender_public_key == '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz'
        assert self.account.verify_signature(transaction.to_binary(),
                                             transaction.proofs[0])

    expected_v3 = {
        "type":
        12,
        "version":
        3,
        "senderPublicKey":
        '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz',
        'sender':
        '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2',
        'senderKeyType':
        'ed25519',
        "fee":
        110000000,
        "timestamp":
        1610582400000,
        'height':
        '',
        'id':
        '',
        "proofs": [
            '2vdpwvUijg5Q2k7tuEWUvM5umLoGhNiHkbhddhEVPzcPqXkAGyKT8B7JhYo6intRqzrn18MbX3jFA5sGHVq4pLNB'
        ]
    }

    @freeze_time("2021-01-14")
    def test_to_json(self):
        transaction = Data(self.data_entries)
        assert transaction.version == 3
        transaction.sign_with(self.account)
        json_transaction = transaction.to_json()
        map = json_transaction.pop('data')
        assert json_transaction == self.expected_v3
        assert map == [{
            'key': 'test',
            'type': 'integer',
            'value': 1
        }, {
            'key': 'second',
            'type': 'boolean',
            'value': True
        }]

    def test_from_data(self):
        data = [{
            'key': 'test',
            'type': 'integer',
            'value': 1
        }, {
            'key': 'second',
            'type': 'boolean',
            'value': True
        }]
        for entry in data:
            ret = DataEntry.from_data(entry)
            for key in entry:
                assert getattr(ret, key) == entry[key]
class TestPublicNode:

    ACCOUNT_SEED = "df3dd6d884714288a39af0bd973a1771c9f00f168cf040d6abb6a50dd5e055d8"
    account = AccountFactory('T').create_from_seed(ACCOUNT_SEED)
    node = PublicNode('https://tesnet.lto.network')

    def test_construct(self):
        node = PublicNode('https://nodes.lto.network')
        assert node.url == 'https://nodes.lto.network'

    @mock.patch.object(requests,
                       'get',
                       return_value=resp(300, '{ "message":"test"}'))
    def test_wrapper(self, mocks):
        with pytest.raises(Exception):
            self.node.wrapper('api')
        with mock.patch.object(requests,
                               'post',
                               return_value=resp(300, '{ "message":"test"}')):
            with pytest.raises(Exception):
                self.node.wrapper(api='/transactions/broadcast',
                                  post_data={
                                      "type": 4,
                                      "version": 2
                                  })

    @mock.patch.object(requests, 'get', return_value=resp(200, 'test'))
    def test_wrapper(self, mock):
        api = '/blocks/last'
        assert {'code': 200, 'text': 'test'} == self.node.wrapper(api)

    def test_broadcast(self):
        transaction = Transfer('3N6MFpSbbzTozDcfkTUT5zZ2sNbJKFyRtRj', 10000000)
        with mock.patch.object(
                PublicNode,
                "wrapper",
                return_value=
            {
                'type':
                4,
                'version':
                3,
                'id':
                '74MeWagvnJ2MZTV7wEUQVWG8mTVddS9pJuqvtyG8b5eP',
                'sender':
                '3N5PoiMisnbNPseVXcCa5WDRLLHkj7dz4Du',
                'senderKeyType':
                'ed25519',
                'senderPublicKey':
                'AneNBwCMTG1YQ5ShPErzJZETTsHEWFnPWhdkKiHG6VTX',
                'fee':
                100000000,
                'timestamp':
                1631613596742,
                'recipient':
                '3N6MFpSbbzTozDcfkTUT5zZ2sNbJKFyRtRj',
                'amount':
                10000000,
                'attachment':
                '',
                'proofs': [
                    'j2q6isq2atpXBADMZ2Vz7oRozfUKGuDkLnVMqtnXkwDhw6tyHmMMHTbaVknP4JmYiVWN5PuNp6i4f5TBhuc9QSm'
                ]
            }):
            response = PublicNode('https://tesnet.lto.network').broadcast(
                transaction)
        assert response.to_json() == {
            'type':
            4,
            'version':
            3,
            'sender':
            '3N5PoiMisnbNPseVXcCa5WDRLLHkj7dz4Du',
            'senderKeyType':
            'ed25519',
            'senderPublicKey':
            'AneNBwCMTG1YQ5ShPErzJZETTsHEWFnPWhdkKiHG6VTX',
            'fee':
            100000000,
            'timestamp':
            1631613596742,
            'amount':
            10000000,
            'height':
            '',
            'id':
            '74MeWagvnJ2MZTV7wEUQVWG8mTVddS9pJuqvtyG8b5eP',
            'recipient':
            '3N6MFpSbbzTozDcfkTUT5zZ2sNbJKFyRtRj',
            'attachment':
            '',
            'proofs': [
                'j2q6isq2atpXBADMZ2Vz7oRozfUKGuDkLnVMqtnXkwDhw6tyHmMMHTbaVknP4JmYiVWN5PuNp6i4f5TBhuc9QSm'
            ]
        }

    @mock.patch.object(PublicNode, 'wrapper')
    def test_compile(self, mock):
        self.node.compile('sddsfdsf')
        mock.assert_called()

    @mock.patch.object(PublicNode, 'wrapper')
    def test_height(self, mock):
        self.node.height()
        mock.assert_called()

    @mock.patch.object(PublicNode, 'wrapper')
    def test_last_block(self, mock):
        self.node.last_block()
        mock.assert_called()

    @mock.patch.object(PublicNode, 'wrapper')
    def test_block(self, mock):
        self.node.block(20)
        mock.assert_called()

    def test_balance(self):
        with mock.patch.object(PublicNode, "wrapper", return_value=1):
            self.node.balance('3N6MFpSbbzTozDcfkTUT5zZ2sNbJKFyRtRj')
        with pytest.raises(Exception):
            self.node.balance()

    def test_leasae_list(self):
        with mock.patch.object(PublicNode, "wrapper"):
            self.node.lease_list('3N6MFpSbbzTozDcfkTUT5zZ2sNbJKFyRtRj')
        with pytest.raises(Exception):
            self.node.lease_list()

    def test_sponsorship_list(self):
        with mock.patch.object(PublicNode, "wrapper"):
            self.node.sponsorship_list('3N6MFpSbbzTozDcfkTUT5zZ2sNbJKFyRtRj')
        with pytest.raises(Exception):
            self.node.sponsorship_list()

    def test_transactions(self):
        with mock.patch.object(PublicNode, "wrapper", return_value=1):
            self.node.transactions('3N6MFpSbbzTozDcfkTUT5zZ2sNbJKFyRtRj')

    @mock.patch.object(
        PublicNode,
        'wrapper',
        return_value={
            'type':
            4,
            'version':
            3,
            'id':
            '74MeWagvnJ2MZTV7wEUQVWG8mTVddS9pJuqvtyG8b5eP',
            'sender':
            '3N5PoiMisnbNPseVXcCa5WDRLLHkj7dz4Du',
            'senderKeyType':
            'ed25519',
            'senderPublicKey':
            'AneNBwCMTG1YQ5ShPErzJZETTsHEWFnPWhdkKiHG6VTX',
            'fee':
            100000000,
            'timestamp':
            1631613596742,
            'recipient':
            '3N6MFpSbbzTozDcfkTUT5zZ2sNbJKFyRtRj',
            'amount':
            10000000,
            'attachment':
            '',
            'proofs': [
                'j2q6isq2atpXBADMZ2Vz7oRozfUKGuDkLnVMqtnXkwDhw6tyHmMMHTbaVknP4JmYiVWN5PuNp6i4f5TBhuc9QSm'
            ]
        })
    def test_tx(self, mock):
        response = self.node.tx('id')
        mock.assert_called()
        assert response.to_json() == {
            'type':
            4,
            'version':
            3,
            'sender':
            '3N5PoiMisnbNPseVXcCa5WDRLLHkj7dz4Du',
            'senderKeyType':
            'ed25519',
            'senderPublicKey':
            'AneNBwCMTG1YQ5ShPErzJZETTsHEWFnPWhdkKiHG6VTX',
            'fee':
            100000000,
            'timestamp':
            1631613596742,
            'amount':
            10000000,
            'recipient':
            '3N6MFpSbbzTozDcfkTUT5zZ2sNbJKFyRtRj',
            'attachment':
            '',
            'height':
            '',
            'id':
            '74MeWagvnJ2MZTV7wEUQVWG8mTVddS9pJuqvtyG8b5eP',
            'proofs': [
                'j2q6isq2atpXBADMZ2Vz7oRozfUKGuDkLnVMqtnXkwDhw6tyHmMMHTbaVknP4JmYiVWN5PuNp6i4f5TBhuc9QSm'
            ]
        }
class TestCancelLease:

    ACCOUNT_SEED = "df3dd6d884714288a39af0bd973a1771c9f00f168cf040d6abb6a50dd5e055d8"
    account = AccountFactory('T').create_from_seed(ACCOUNT_SEED)

    def test_construct(self):
        transaction = CancelLease(
            'B22YzYdNv7DCqMqdK2ckpt53gQuYq2v997N7g8agZoHo')
        assert transaction.lease_id == 'B22YzYdNv7DCqMqdK2ckpt53gQuYq2v997N7g8agZoHo'
        assert transaction.tx_fee == 100000000

    @freeze_time("2021-01-14")
    def test_sign_with(self):
        transaction = CancelLease('3N3Cn2pYtqzj7N9pviSesNe8KG9Cmb718Y1')
        assert transaction.is_signed() is False
        transaction.sign_with(self.account)
        assert transaction.is_signed() is True
        timestamp = int(time() * 1000)
        assert str(transaction.timestamp)[:-3] == str(timestamp)[:-3]
        assert transaction.sender == '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2'
        assert transaction.sender_public_key == '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz'
        assert self.account.verify_signature(transaction.to_binary(),
                                             transaction.proofs[0])

    expected_v2 = {
        'fee':
        100000000,
        'senderKeyType':
        'ed25519',
        'leaseId':
        'B22YzYdNv7DCqMqdK2ckpt53gQuYq2v997N7g8agZoHo',
        'proofs': [
            'r293ec6yhFaVxqg72y1HVqS1UspqMvS97HzontVfrV2T4i6VdhqTe9MxJhutanvAYXUu8fXv4AEx9vgC4BPht47'
        ],
        'sender':
        '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2',
        'senderPublicKey':
        '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz',
        'timestamp':
        1326499200000,
        'type':
        9,
        'height':
        '',
        'id':
        '',
        'version':
        2
    }

    expected_v3 = {
        "type":
        9,
        "version":
        3,
        "sender":
        '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2',
        "senderKeyType":
        "ed25519",
        "senderPublicKey":
        '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz',
        "fee":
        100000000,
        "timestamp":
        1326499200000,
        "proofs": [
            '2oRKZ1wTUHzhwxfQCseUNCREiKh9aG46KChQJDPHievdbmMTfJpyGaayD3eXQK89odDwCShDyiD1Dp5SUWZJuPEB'
        ],
        "leaseId":
        "B22YzYdNv7DCqMqdK2ckpt53gQuYq2v997N7g8agZoHo",
        'height':
        '',
        'id':
        ''
    }

    @freeze_time("2021-01-14")
    @pytest.mark.parametrize("version, expected", [(2, expected_v2),
                                                   (3, expected_v3)])
    def test_to_json(self, expected, version):
        transaction = CancelLease(
            'B22YzYdNv7DCqMqdK2ckpt53gQuYq2v997N7g8agZoHo')
        transaction.timestamp = 1326499200000
        transaction.version = version
        transaction.sign_with(self.account)
        assert transaction.to_json() == expected

    @mock.patch('src.lto.PublicNode')
    def test_broadcast(self, mock_Class):
        transaction = CancelLease(
            'B22YzYdNv7DCqMqdK2ckpt53gQuYq2v997N7g8agZoHo')
        broadcastedTransaction = CancelLease(
            'B22YzYdNv7DCqMqdK2ckpt53gQuYq2v997N7g8agZoHo')
        broadcastedTransaction.id = '7cCeL1qwd9i6u8NgMNsQjBPxVhrME2BbfZMT1DF9p4Yi'
        mc = mock_Class.return_value
        mc.broadcast.return_value = broadcastedTransaction
        assert mc.broadcast(transaction) == broadcastedTransaction

    @freeze_time("2021-01-14")
    def test_from_data(self):
        data = {
            "type":
            9,
            "version":
            3,
            "id":
            "BLMA4vkfe2S5UFHnoPyTh8SJmpTA1deh5SnWk1bdfjhq",
            "sender":
            "3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2",
            "senderKeyType":
            'ed25519',
            "senderPublicKey":
            "4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz",
            "timestamp":
            1519862400,
            "fee":
            100000000,
            "leaseId":
            "B22YzYdNv7DCqMqdK2ckpt53gQuYq2v997N7g8agZoHo",
            "proofs": [
                "2AKUBja93hF8AC2ee21m9AtedomXZNQG5J3FZMU85avjKF9B8CL45RWyXkXEeYb13r1AhpSzRvcudye39xggtDHv"
            ]
        }
        transaction = CancelLease(lease_id='').from_data(data)
        crypto.compare_data_transaction(data, transaction)
class TestSponsorship:

    ACCOUNT_SEED = "df3dd6d884714288a39af0bd973a1771c9f00f168cf040d6abb6a50dd5e055d8"
    account = AccountFactory('T').create_from_seed(ACCOUNT_SEED)

    def test_construct(self):
        transaction = Sponsorship('3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb')
        assert transaction.tx_fee == 500000000
        assert transaction.recipient == '3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb'

    @freeze_time("2021-01-14")
    def test_sign_with(self):
        transaction = Sponsorship('3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb')
        assert transaction.is_signed() is False
        transaction.sign_with(self.account)
        assert transaction.is_signed() is True
        timestamp = int(time() * 1000)
        assert str(transaction.timestamp)[:-3] == str(timestamp)[:-3]
        assert transaction.sender == '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2'
        assert transaction.sender_public_key == '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz'
        assert self.account.verify_signature(transaction.to_binary(),
                                             transaction.proofs[0])

    expected_v1 = {
        "type":
        18,
        "version":
        1,
        "recipient":
        '3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb',
        "sender":
        '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2',
        "senderPublicKey":
        '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz',
        "fee":
        500000000,
        'senderKeyType':
        'ed25519',
        "timestamp":
        1326499200000,
        'height':
        '',
        'id':
        '',
        "proofs": [
            '3gEX99xgnNbbbTVsqZ2mVc1ed1pcAzsAmVoxTXYmhY2xnANNW9NoxXsLyy2m5xot2qXhXb5ZHgL6ZmeYeB1CctWe'
        ]
    }

    expected_v3 = {
        "type":
        18,
        "version":
        3,
        "senderKeyType":
        "ed25519",
        "sender":
        '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2',
        "senderPublicKey":
        '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz',
        "recipient":
        '3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb',
        "timestamp":
        1326499200000,
        "fee":
        500000000,
        'height':
        '',
        'id':
        '',
        "proofs": [
            '3tTspKV5QemQsxPwoUttaLc7UabQquhSxw1m8qgA9ugiEuDJp2mV2hbcp1C959VrJ1iG8bNgnrTC55E43MDYqPqa'
        ]
    }

    @freeze_time("2021-01-14")
    @pytest.mark.parametrize("version, expected", [(1, expected_v1),
                                                   (3, expected_v3)])
    def test_to_json(self, expected, version):
        transaction = Sponsorship('3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb')
        transaction.timestamp = 1326499200000
        transaction.version = version
        transaction.sign_with(self.account)
        assert transaction.to_json() == expected

    @mock.patch('src.lto.PublicNode')
    def test_broadcast(self, mock_Class):
        transaction = Sponsorship('3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb')
        broadcastedTransaction = Sponsorship(
            '3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb')
        broadcastedTransaction.id = '7cCeL1qwd9i6u8NgMNsQjBPxVhrME2BbfZMT1DF9p4Yi'

        mc = mock_Class.return_value
        mc.broadcast.return_value = broadcastedTransaction

        assert mc.broadcast(transaction) == broadcastedTransaction

    @freeze_time("2021-01-14")
    def test_from_data(self):
        data = {
            "type":
            18,
            "version":
            1,
            "id":
            "8S2vD5dGCPhwS8jLzNQpSRYDBGXv6GKq6qT5yXUBWPgb",
            "sender":
            "3NBcx7AQqDopBj3WfwCVARNYuZyt1L9xEVM",
            "senderPublicKey":
            "7gghhSwKRvshZwwh6sG97mzo1qoFtHEQK7iM4vGcnEt7",
            "recipient":
            "3N9ChkxWXqgdWLLErWFrSwjqARB6NtYsvZh",
            "timestamp":
            1610410901000,
            "fee":
            500000000,
            "proofs": [
                "QKef6R8LrMBupBF9Ry8zjFTu3mexC55J6XNofDDQEcJnZJsRjZPnAk6Yn2eiHkqqd2uSjB2r58fC8QVLaVegQEz"
            ],
            "height":
            1225821
        }
        transaction = Sponsorship(data['recipient']).from_data(data)
        crypto.compare_data_transaction(data, transaction)
Esempio n. 9
0
class TestRevokeAssociation:

    ACCOUNT_SEED = "df3dd6d884714288a39af0bd973a1771c9f00f168cf040d6abb6a50dd5e055d8"
    account = AccountFactory('T').create_from_seed(ACCOUNT_SEED)

    def test_construct(self):
        transaction = RevokeAssociation('3N3Cn2pYtqzj7N9pviSesNe8KG9Cmb718Y1',
                                        1)
        assert transaction.recipient == '3N3Cn2pYtqzj7N9pviSesNe8KG9Cmb718Y1'
        assert transaction.association_type == 1
        assert transaction.tx_fee == 100000000

    @freeze_time("2021-01-14")
    def test_sign_with(self):
        transaction = RevokeAssociation(
            '3N3Cn2pYtqzj7N9pviSesNe8KG9Cmb718Y1',
            1,
            anchor='3yMApqCuCjXDWPrbjfR5mjCPTHqFG8Pux1TxQrEM35jj')
        assert transaction.is_signed() is False
        transaction.sign_with(self.account)
        assert transaction.is_signed() is True
        timestamp = int(time() * 1000)
        assert str(transaction.timestamp)[:-3] == str(timestamp)[:-3]
        assert transaction.anchor == '3yMApqCuCjXDWPrbjfR5mjCPTHqFG8Pux1TxQrEM35jj'
        assert transaction.sender == '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2'
        assert transaction.sender_public_key == '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz'
        assert self.account.verify_signature(transaction.to_binary(),
                                             transaction.proofs[0])

    expected_v1 = {
        "type":
        17,
        "version":
        1,
        "sender":
        '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2',
        "senderPublicKey":
        '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz',
        "hash":
        'Hjh8aEYykDxvjksNKKM2SSun3nAmXvjg5cT8zqXubqrZPburn9qYebuJ5cFb',
        "associationType":
        1,
        "recipient":
        '3N3Cn2pYtqzj7N9pviSesNe8KG9Cmb718Y1',
        "fee":
        100000000,
        'senderKeyType':
        'ed25519',
        "timestamp":
        1326499200000,
        'height':
        '',
        'id':
        '',
        "proofs": [
            'AAMdmyMsgQwU7jSdZYWCq8yoaooUEMmGCcRwy2Ra7Lm9XcvhXPuAwuEJVqaqZqwa8iiYCGk4DqVaVozVe55HrCc'
        ]
    }

    expected_v3 = {
        "type":
        17,
        "version":
        3,
        "sender":
        '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2',
        "senderKeyType":
        "ed25519",
        "senderPublicKey":
        '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz',
        "recipient":
        '3N3Cn2pYtqzj7N9pviSesNe8KG9Cmb718Y1',
        "associationType":
        1,
        "hash":
        'Hjh8aEYykDxvjksNKKM2SSun3nAmXvjg5cT8zqXubqrZPburn9qYebuJ5cFb',
        "timestamp":
        1326499200000,
        "fee":
        100000000,
        'height':
        '',
        'id':
        '',
        "proofs": [
            '5DKPadoJ1urwY9vySiBWEFn6EcSNieZnTbBYeA82iXRiwySnBwRjUi6XqkwejRNcQ1FKCPGmW7AnaJ6dMzxVEnnS'
        ]
    }

    @freeze_time("2021-01-14")
    @pytest.mark.parametrize("version, expected", [(1, expected_v1),
                                                   (3, expected_v3)])
    def test_to_json(self, expected, version):
        transaction = RevokeAssociation(
            '3N3Cn2pYtqzj7N9pviSesNe8KG9Cmb718Y1', 1,
            '3yMApqCuCjXDWPrbjfR5mjCPTHqFG8Pux1TxQrEM35jj')
        transaction.timestamp = 1326499200000
        transaction.version = version
        transaction.sign_with(self.account)
        assert transaction.to_json() == expected

    @mock.patch('src.lto.PublicNode')
    def test_broadcast(self, mock_Class):
        transaction = RevokeAssociation(
            '3N3Cn2pYtqzj7N9pviSesNe8KG9Cmb718Y1', 1,
            '3yMApqCuCjXDWPrbjfR5mjCPTHqFG8Pux1TxQrEM35jj')
        broadcastedTransaction = RevokeAssociation(
            '3N3Cn2pYtqzj7N9pviSesNe8KG9Cmb718Y1', 1,
            '3yMApqCuCjXDWPrbjfR5mjCPTHqFG8Pux1TxQrEM35jj')
        broadcastedTransaction.id = '7cCeL1qwd9i6u8NgMNsQjBPxVhrME2BbfZMT1DF9p4Yi'

        mc = mock_Class.return_value
        mc.broadcast.return_value = broadcastedTransaction

        assert mc.broadcast(transaction) == broadcastedTransaction

    @freeze_time("2021-01-14")
    def test_from_data(self):
        data = {
            "type":
            16,
            "version":
            1,
            "recipient":
            "3N9ChkxWXqgdWLLErWFrSwjqARB6NtYsvZh",
            "associationType":
            1,
            "hash":
            "3yMApqCuCjXDWPrbjfR5mjCPTHqFG8Pux1TxQrEM35jj",
            "id":
            "1uZqDjRjaehEceSxrVxz6WD6wt8su8TBHyDLQ1KFnJo",
            "sender":
            "3NBcx7AQqDopBj3WfwCVARNYuZyt1L9xEVM",
            "senderPublicKey":
            "7gghhSwKRvshZwwh6sG97mzo1qoFtHEQK7iM4vGcnEt7",
            "timestamp":
            1610404930000,
            "fee":
            100000000,
            "proofs": [
                "2jQMruoLoshfKe6FAUbA9vmVVvAt8bVpCFyM75Z2PLJiuRmjmLzFpM2UmgQ6E73qn46AVQprQJPBhQe92S7iSXbZ"
            ],
            "height":
            1225712
        }
        transaction = RevokeAssociation(recipient='',
                                        association_type='').from_data(data)
        crypto.compare_data_transaction(data, transaction)
Esempio n. 10
0
class TestTransfer:
    ACCOUNT_SEED = "df3dd6d884714288a39af0bd973a1771c9f00f168cf040d6abb6a50dd5e055d8"
    ACCOUNT2_SEED = "cool strike recall mother true topic road bright nature dilemma glide shift return mesh strategy"
    account = AccountFactory('T').create_from_seed(ACCOUNT_SEED)
    account2 = AccountFactory('T').create_from_seed(ACCOUNT2_SEED)

    def test_construct(self):
        transaction = Transfer('3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb', 10000)
        assert transaction.amount == 10000
        assert transaction.recipient == '3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb'
        assert transaction.tx_fee == 100000000

    @freeze_time("2021-01-14")
    def test_sign_with(self):
        transaction = Transfer('3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb', 10000)
        assert transaction.is_signed() is False
        transaction.sign_with(self.account)
        assert transaction.is_signed() is True
        timestamp = int(time() * 1000)
        assert str(transaction.timestamp)[:-3] == str(timestamp)[:-3]
        assert transaction.sender == '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2'
        assert transaction.sender_public_key == '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz'
        assert self.account.verify_signature(transaction.to_binary(),
                                             transaction.proofs[0])

    def test_sign_with_multi_sig(self):
        transaction = Transfer('3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb', 10000)
        transaction.timestamp = 1629883934685
        transaction.sender = '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2'
        transaction.sender_public_key = '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz'
        transaction.proofs = [
            'PTEgvxqiUswaKiHoamMpTDRDS6u9msGoS2Hz56c16xSTHRfMnNPgbGBrDtonCspE9RErdsei7RQaFBbPWZgTJbj'
        ]

        transaction.sign_with(self.account2)
        assert transaction.is_signed() is True
        assert transaction.timestamp == 1629883934685
        assert transaction.sender == '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2'
        assert transaction.sender_public_key == '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz'
        assert len(transaction.proofs) == 2
        assert transaction.proofs[
            0] == 'PTEgvxqiUswaKiHoamMpTDRDS6u9msGoS2Hz56c16xSTHRfMnNPgbGBrDtonCspE9RErdsei7RQaFBbPWZgTJbj'
        assert self.account2.verify_signature(transaction.to_binary(),
                                              transaction.proofs[1])

    expected_v2 = {
        "type":
        4,
        "version":
        2,
        "senderPublicKey":
        '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz',
        "recipient":
        '3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb',
        'sender':
        '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2',
        "amount":
        120000000,
        'senderKeyType':
        'ed25519',
        "fee":
        100000000,
        "timestamp":
        1326499200000,
        "attachment":
        'Cn8eVZg',
        'height':
        '',
        'id':
        '',
        "proofs": [
            '4CsQsDkWnaE6qQ5YuuoWLwqXrijHCCQ9cHmtV54hNtnrpr6WYtvF2x85Mp5GpJKGd8aRFvPch3isaQmT7djsaBYH'
        ]
    }

    expected_v3 = {
        "type":
        4,
        "version":
        3,
        "senderPublicKey":
        '4EcSxUkMxqxBEBUBL2oKz3ARVsbyRJTivWpNrYQGdguz',
        "recipient":
        '3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb',
        "sender":
        '3MtHYnCkd3oFZr21yb2vEdngcSGXvuNNCq2',
        "senderKeyType":
        'ed25519',
        "amount":
        120000000,
        "fee":
        100000000,
        "timestamp":
        1326499200000,
        "attachment":
        'Cn8eVZg',
        'height':
        '',
        'id':
        '',
        "proofs": [
            '4staSFnwWde1TW2t4kZUehQ4QFRH7jH1NWJW6PARetvdFej1EcEq2pXf419TnaxCp8LZsR9JSr6PH46fyad7p1sz'
        ]
    }

    @freeze_time("2021-01-14")
    @pytest.mark.parametrize("version, expected", [(2, expected_v2),
                                                   (3, expected_v3)])
    def test_to_json(self, expected, version):
        transaction = Transfer('3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb',
                               120000000, 'hello')
        transaction.timestamp = 1326499200000
        transaction.version = version
        transaction.sign_with(self.account)
        assert transaction.to_json() == expected

    @mock.patch('src.lto.PublicNode')
    def test_broadcast(self, mock_Class):
        transaction = Transfer('3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb',
                               120000000, 'Hello')
        broadcastedTransaction = Transfer(
            '3N8TQ1NLN8KcwJnVZM777GUCdUnEZWZ85Rb', 120000000, 'Hello')
        broadcastedTransaction.id = '7cCeL1qwd9i6u8NgMNsQjBPxVhrME2BbfZMT1DF9p4Yi'
        mc = mock_Class.return_value
        mc.broadcast.return_value = broadcastedTransaction
        assert transaction.broadcast_to(
            node=mock_Class()) == broadcastedTransaction

    @freeze_time("2021-01-14")
    def test_from_data(self):
        data = {
            "id":
            "5a1ZVJTu8Y7mPA6BbkvGdfmbjvz9YSppQXPnb5MxihV5",
            "type":
            4,
            "version":
            3,
            "sender":
            "3N9ChkxWXqgdWLLErWFrSwjqARB6NtYsvZh",
            "senderPublicKey":
            "9NFb1rvMyr1k8f3wu3UP1RaEGsozBt9gF2CmPMGGA42m",
            "fee":
            100000000,
            "timestamp":
            1609639213556,
            "amount":
            100000000000,
            "recipient":
            "3NBcx7AQqDopBj3WfwCVARNYuZyt1L9xEVM",
            "attachment":
            "9Ajdvzr",
            "proofs": [
                "3ftQ2ArKKXw655WdHy2TK1MGXeyzKRqMQYwFidekkyxLpzFGsTziSFsbM5RCFxrn32EzisMgPWtQVQ4e5UqKUcES"
            ],
            "height":
            1212761
        }
        transaction = Transfer(recipient=data['recipient'],
                               amount=data['amount']).from_data(data)
        crypto.compare_data_transaction(data, transaction)