示例#1
0
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==")
示例#3
0
文件: wallet.py 项目: mmuman/sakia
    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)
示例#5
0
    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)
示例#11
0
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=[],
)