async def get_transactions_history(client, pubkey, received_txs, sent_txs): """ Get transaction history Store txs in Transaction object """ tx_history = await client(history, pubkey) currency = tx_history["currency"] for received in tx_history["history"]["received"]: received_txs.append(Transaction.from_bma_history(currency, received)) for sent in tx_history["history"]["sent"]: sent_txs.append(Transaction.from_bma_history(currency, sent))
def test_fromcompact2(self): tx = Transaction.from_compact("zeta_brousouf", tx_compact_2) self.assertEqual(tx.version, 2) self.assertEqual(tx.currency, "zeta_brousouf") self.assertEqual(len(tx.issuers), 1) self.assertEqual(len(tx.inputs), 1) self.assertEqual(len(tx.unlocks), 1) self.assertEqual(len(tx.outputs), 2) self.assertEqual(tx.issuers[0], "GNPdPNwSJAYw7ixkDeibo3YpdELgLmrZ2Q86HF4cyg92") self.assertEqual(tx.inputs[0].source, 'D') self.assertEqual(tx.inputs[0].origin_id, "GNPdPNwSJAYw7ixkDeibo3YpdELgLmrZ2Q86HF4cyg92") self.assertEqual(tx.inputs[0].index, 471) self.assertEqual(tx.unlocks[0].index, 0) self.assertEqual(str(tx.unlocks[0].parameters[0]), "SIG(0)") self.assertEqual(tx.outputs[0].amount, 90) self.assertEqual(tx.outputs[0].base, 0) self.assertEqual(pypeg2.compose(tx.outputs[0].conditions, output.Condition), "SIG(5zDvFjJB1PGDQNiExpfzL9c1tQGs6xPA8mf1phr3VoVi)") self.assertEqual(type(tx.outputs[0].conditions.left), output.SIG) self.assertEqual(tx.outputs[1].amount, 10) self.assertEqual(tx.outputs[1].base, 0) self.assertEqual(pypeg2.compose(tx.outputs[1].conditions, output.Condition), "SIG(GNPdPNwSJAYw7ixkDeibo3YpdELgLmrZ2Q86HF4cyg92)") self.assertEqual(type(tx.outputs[1].conditions.left), output.SIG) self.assertEqual(tx.signatures[0], "XDQeEMcJDd+XVGaFIZc8d4kKRJgsPuWAPVNG5UKNk8mDZx2oE1kTP/hbxiFx6yDouBELCswuf/X6POK9ES7JCA==")
def prepare_tx(self, pubkey, blockstamp, amount, message, community): """ Prepare a simple Transaction document :param str pubkey: the target of the transaction :param duniterpy.documents.BlockUID blockstamp: the blockstamp :param int amount: the amount sent to the receiver :param Community community: the target community :return: the transaction document :rtype: duniterpy.documents.Transaction """ result = self.tx_sources(int(amount), community) sources = result[0] computed_outputs = result[1] overheads = result[2] self.caches[community.currency].available_sources = result[3][1:] logging.debug("Inputs : {0}".format(sources)) inputs = self.tx_inputs(sources) unlocks = self.tx_unlocks(sources) outputs = self.tx_outputs(pubkey, computed_outputs, overheads) logging.debug("Outputs : {0}".format(outputs)) tx = Transaction(3, community.currency, blockstamp, 0, [self.pubkey], inputs, unlocks, outputs, message, None) return tx
def test_transaction_document_generation(self): transaction = Transaction( version=10, currency="gtest", blockstamp=BlockUID( 8979, "000041DF0CCA173F09B5FBA48F619D4BC934F12ADF1D0B798639EB2149C4A8CC" ), locktime=0, issuers=list("8kXygUHh1vLjmcRzXVM86t38EL8dfFJgfBeHmkaWLamu"), inputs=[InputSource.from_inline(input_source_str)], unlocks=[Unlock(index=0, parameters=[SIGParameter(0)])], outputs=[OutputSource.from_inline(output_source_str)], comment="", signatures=[], ) self.assertTrue(transaction.time is None) self.assertTrue(transaction.currency == "gtest") self.assertTrue(transaction.inputs[0].amount == 30)
def test_transaction_document(self): transaction_document = """TX:10:1:6:6:2:1:0 278644-000004546FCB16F2851A8B6D1066219B0EBB3580C882850411618E35241719EA 8rYgYd64F2Y3Gfxwohjrc7K3zSNpDz79yNxRJorUwmse 1011:0:D:8rYgYd64F2Y3Gfxwohjrc7K3zSNpDz79yNxRJorUwmse:278052 1011:0:D:8rYgYd64F2Y3Gfxwohjrc7K3zSNpDz79yNxRJorUwmse:278333 1011:0:D:8rYgYd64F2Y3Gfxwohjrc7K3zSNpDz79yNxRJorUwmse:278609 1011:0:T:4116D06975AE613C96183390FC5A2BE2561F36C86F5CFE69EB23E3B517AA6F17:1 20330:0:T:56D8A0ACE3BC7E1173FF8BFB8A97A2F3353B6F3AEBCF4923C8BE2E81FDCC0685:1 11121:0:T:7CC29A8707D72936ED0EB9C618CEB3278DFAB4647B6639AA09620FA31EAD95D8:1 0:SIG(0) 1:SIG(0) 2:SIG(0) 3:SIG(0) 4:SIG(0) 5:SIG(0) 30000:0:SIG(2mKmto464oWCVsRgcYM6vpwsLsGk6MhMtrBKf7DTAU34) 5495:0:SIG(8rYgYd64F2Y3Gfxwohjrc7K3zSNpDz79yNxRJorUwmse) Solde huile Millepertuis rgjOmzFH5h+hkDbJLk1b88X7Z83HMgTa5rBckeMSdF/yZtItN3zMn09MphcXjffdrKcK+MebwoisLJqV+jXrDg== """ tx = Transaction.from_compact("g1", transaction_document) verifying_key = VerifyingKey(tx.issuers[0]) self.assertTrue(verifying_key.verify_document(tx))
def test_transaction_equality(self): t1 = Transaction.from_signed_raw(tx_raw) t2 = Transaction.from_signed_raw(tx_raw) self.assertTrue(t1 == t2) t2.signatures = ["NSTN"] self.assertFalse(t1 == t2) t2 = Transaction.from_signed_raw(tx_raw) t2.issuers = ["NSTRNRST"] self.assertFalse(t1 == t2) t2 = Transaction.from_signed_raw(tx_raw) t2.time = 123 self.assertFalse(t1 == t2) t2 = Transaction.from_signed_raw(tx_raw) t2.inputs = [InputSource.from_inline(input_source_str)] self.assertFalse(t1 == t2) t2 = Transaction.from_signed_raw(tx_raw) t2.outputs = [OutputSource.from_inline(output_source_str)] self.assertFalse(t1 == t2)
def test_is_simple(self): tx = Transaction.from_compact("zeta_brousouf", tx_compact_2) self.assertTrue(SimpleTransaction.is_simple(tx)) tx = Transaction.from_compact("zeta_brousouf", tx_compact) self.assertFalse(SimpleTransaction.is_simple(tx))
def test_compact_change(self): tx = Transaction.from_compact("gtest", compact_change) rendered_tx = tx.signed_raw() from_rendered_tx = Transaction.from_signed_raw(rendered_tx)
def test_fromraw_toraw_v3(self): tx = Transaction.from_signed_raw(tx_raw_v3) rendered_tx = tx.signed_raw() from_rendered_tx = Transaction.from_signed_raw(rendered_tx) self.assertEqual(tx.version, 3) self.assertEqual(tx.currency, "beta_brousouf") self.assertEqual(tx.blockstamp.number, 32) self.assertEqual(tx.blockstamp.sha_hash, "DB30D958EE5CB75186972286ED3F4686B8A1C2CD") self.assertEqual(len(tx.issuers), 3) self.assertEqual(len(tx.inputs), 6) self.assertEqual(len(tx.unlocks), 6) self.assertEqual(len(tx.outputs), 3) self.assertEqual(tx.issuers[0], "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY") self.assertEqual(tx.issuers[1], "CYYjHsNyg3HMRMpTHqCJAN9McjH5BwFLmDKGV3PmCuKp") self.assertEqual(tx.issuers[2], "9WYHTavL1pmhunFCzUwiiq4pXwvgGG5ysjZnjz9H8yB") self.assertEqual(tx.inputs[0].source, 'T') self.assertEqual(tx.inputs[0].origin_id, "6991C993631BED4733972ED7538E41CCC33660F554E3C51963E2A0AC4D6453D3") self.assertEqual(tx.inputs[0].index, 2) self.assertEqual(tx.inputs[1].source, 'T') self.assertEqual(tx.inputs[1].origin_id, "3A09A20E9014110FD224889F13357BAB4EC78A72F95CA03394D8CCA2936A7435") self.assertEqual(tx.inputs[1].index, 8) self.assertEqual(tx.inputs[2].source, 'D') self.assertEqual(tx.inputs[2].origin_id, "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY") self.assertEqual(tx.inputs[2].index, 46) self.assertEqual(tx.inputs[3].source, 'T') self.assertEqual(tx.inputs[3].origin_id, "A0D9B4CDC113ECE1145C5525873821398890AE842F4B318BD076095A23E70956") self.assertEqual(tx.inputs[3].index, 3) self.assertEqual(tx.inputs[4].source, 'T') self.assertEqual(tx.inputs[4].origin_id, "67F2045B5318777CC52CD38B424F3E40DDA823FA0364625F124BABE0030E7B5B") self.assertEqual(tx.inputs[4].index, 5) self.assertEqual(tx.inputs[5].source, 'D') self.assertEqual(tx.inputs[5].origin_id, "9WYHTavL1pmhunFCzUwiiq4pXwvgGG5ysjZnjz9H8yB") self.assertEqual(tx.inputs[5].index, 46) self.assertEqual(tx.unlocks[0].index, 0) self.assertEqual(str(tx.unlocks[0].parameters[0]), "SIG(0)") self.assertEqual(tx.unlocks[1].index, 1) self.assertEqual(str(tx.unlocks[1].parameters[0]), "XHX(7665798292)") self.assertEqual(tx.unlocks[2].index, 2) self.assertEqual(str(tx.unlocks[2].parameters[0]), "SIG(0)") self.assertEqual(tx.unlocks[3].index, 3) self.assertEqual(str(tx.unlocks[3].parameters[0]), "SIG(0)") self.assertEqual(str(tx.unlocks[3].parameters[1]), "SIG(2)") self.assertEqual(tx.unlocks[4].index, 4) self.assertEqual(str(tx.unlocks[4].parameters[0]), "SIG(0)") self.assertEqual(str(tx.unlocks[4].parameters[1]), "SIG(1)") self.assertEqual(str(tx.unlocks[4].parameters[2]), "SIG(2)") self.assertEqual(tx.unlocks[5].index, 5) self.assertEqual(str(tx.unlocks[5].parameters[0]), "SIG(2)") self.assertEqual(tx.outputs[0].amount, 120) self.assertEqual(tx.outputs[0].base, 2) self.assertEqual(pypeg2.compose(tx.outputs[0].conditions, output.Condition), "SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)") self.assertEqual(tx.outputs[1].amount, 146) self.assertEqual(tx.outputs[1].base, 2) self.assertEqual(pypeg2.compose(tx.outputs[1].conditions, output.Condition), "SIG(DSz4rgncXCytsUMW2JU2yhLquZECD2XpEkpP9gG5HyAx)") self.assertEqual(tx.outputs[2].amount, 49) self.assertEqual(tx.outputs[2].base, 2) self.assertEqual(pypeg2.compose(tx.outputs[2].conditions, output.Condition), "(SIG(6DyGr5LFtFmbaJYRvcs9WmBsr4cbJbJ1EV9zBbqG7A6i) || XHX(8FAA0ED653CA4D2C1156D511F0D0036F5168ABA4DAC2929676D279C8A2A12E36))") self.assertEqual(tx.comment, "-----@@@----- (why not this comment?)") self.assertEqual(tx.signatures[0], "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r") self.assertEqual(tx.signatures[1], "2D96KZwNUvVtcapQPq2mm7J9isFcDCfykwJpVEZwBc7tCgL4qPyu17BT5ePozAE9HS6Yvj51f62Mp4n9d9dkzJoX") self.assertEqual(tx.signatures[2], "2XiBDpuUdu6zCPWGzHXXy8c4ATSscfFQG9DjmqMZUxDZVt1Dp4m2N5oHYVUfoPdrU9SLk4qxi65RNrfCVnvQtQJk")
def test_compact_change(self): tx = Transaction.from_compact("gtest", compact_change) rendered_tx = tx.signed_raw() self.assertEqual(tx_from_compact_change, rendered_tx) Transaction.from_signed_raw(rendered_tx)
result1 = Transaction( version=10, currency="g1", blockstamp=BlockUID( 48000, "0000010D30B1284D34123E036B7BE0A449AE9F2B928A77D7D20E3BDEAC7EE14C" ), locktime=0, issuers=["BFb5yv8z1fowR6Z8mBXTALy5z7gHfMU976WtXhmRsUMh"], inputs=[ InputSource( 10000, 0, "T", "B37D161185A760FD81C3242D73FABD3D01F4BD9EAD98C2842061A75BAD4DFA61", 1, ), InputSource( 257, 0, "T", "16F1CF9C9B89BB8C34A945F56073AB3C3ACFD858D5FA420047BA7AED1575D1FE", 1, ), ], unlocks=[ Unlock(index=0, parameters=[SIGParameter(0)]), Unlock(index=1, parameters=[SIGParameter(0)]), ], outputs=[ OutputSource( amount=str(1000), base=0, condition="SIG(DBM6F5ChMJzpmkUdL5zD9UXKExmZGfQ1AgPDQy4MxSBw)", ), OutputSource( amount=str(4000), base=0, condition="SIG(4szFkvQ5tzzhwcfUtZD32hdoG2ZzhvG3ZtfR61yjnxdw)", ), OutputSource( amount=str(5000), base=0, condition="SIG(BFb5yv8z1fowR6Z8mBXTALy5z7gHfMU976WtXhmRsUMh)", ), ], comment="Test comment", signatures=[], )