def test_contains_transaction(self): storage = MemPoolStorage(self.storage_filepath) storage.delete_all_transactions_from_mempool() tx1 = Transaction([], [], 10) tx2 = Transaction([], [], 20) storage.add_transaction_to_mempool(tx1) self.assertTrue(storage.contains_transaction(tx1)) self.assertFalse(storage.contains_transaction(tx2))
def test_get_three_last_tx_two_items_list(self): storage = MemPoolStorage(self.storage_filepath) storage.delete_all_transactions_from_mempool() tx1 = Transaction([], [], 10) tx2 = Transaction([], [], 20) storage.add_transaction_to_mempool(tx1) storage.add_transaction_to_mempool(tx2) last_tx_list = storage.get_three_first_transactions() self.assertEqual(2, len(last_tx_list)) self.assertTrue(tx1 in last_tx_list) self.assertTrue(tx2 in last_tx_list)
def test_delete_transaction_if_exists(self): storage = MemPoolStorage(self.storage_filepath) storage.delete_all_transactions_from_mempool() tx1 = Transaction([], [], 10) tx2 = Transaction([], [], 20) tx3 = Transaction([], [], 30) storage.add_transaction_to_mempool(tx1) storage.add_transaction_to_mempool(tx2) self.assertEqual(2, len(storage.get_all_transactions())) self.assertFalse(storage.delete_transaction_if_exists(tx3)) self.assertEqual(2, len(storage.get_all_transactions())) self.assertTrue(storage.delete_transaction_if_exists(tx2)) self.assertEqual(1, len(storage.get_all_transactions()))
def construct_transaction(sender_privkey, sender, recipient, amount, utxo_list): # collect all outputs necessary to pay that amount of money outputs_to_spend = [] value_to_spend = 0 for outp in utxo_list: outputs_to_spend.append(outp) value_to_spend += outp.value if value_to_spend >= amount: break # convert all outputs we are going to use in the ouputs # create outputs: to the recipient and change for the sender(if needed) outputs = [Output(amount, construct_transaction_locking_script(recipient))] if value_to_spend > amount: outputs.append( Output(value_to_spend - amount, construct_transaction_locking_script(sender))) inputs_with_no_script = [ Input(outp.txid, outp.vout, "") for outp in outputs_to_spend ] inputs = [] for inp in inputs_with_no_script: inputs.append( Input( inp.txid, inp.vout, construct_transaction_unlocking_script(sender_privkey, inputs_with_no_script, outputs, 0, utxo_list))) return Transaction(inputs, outputs, locktime=0)
def test_deleting_last_transaction(self): storage = MemPoolStorage(self.storage_filepath) storage.delete_all_transactions_from_mempool() tx1 = Transaction([], [], 10) tx2 = Transaction([], [], 20) tx3 = Transaction([], [], 30) storage.add_transaction_to_mempool(tx1) storage.add_transaction_to_mempool(tx2) storage.add_transaction_to_mempool(tx3) self.assertEqual(3, storage.get_transactions_count()) storage.delete_last_transaction_from_mempool() self.assertEqual(2, storage.get_transactions_count()) tx_list = storage.get_all_transactions() self.assertFalse(tx3 in tx_list)
def test_adding_to_mempool(self): storage = MemPoolStorage(self.storage_filepath) storage.delete_all_transactions_from_mempool() tx = Transaction([], [], 10) storage.add_transaction_to_mempool(tx) tx_list = storage.get_all_transactions() self.assertTrue(tx in tx_list)
def test_raw_transaction_creation(self): inputs = [Input( "fc9e4f9c334d55c1dc535bd691a1c159b0f7314c54745522257a905e18a56779", 1, "" )] outputs = [Output( 2207563, "0014db4d1141d0048b1ed15839d0b7a4c488cd368b0e" )] witness = ["47304402206a2eb16b7b92051d0fa38c133e67684ed064effada1d7f925c842da401d4f22702201f196b10e6e4b4a9fff948e5c5d71ec5da53e90529c8dbd122bff2b1d21dc8a90121039b7bcd0824b9a9164f7ba098408e63e5b7e3cf90835cceb19868f54f8961a825"] tx = Transaction(inputs, outputs, locktime=0, witness=witness, version=2) raw_tx = "020000000001017967a5185e907a25225574544c31f7b059c1a191d65b53dcc1554d339c4f9efc0100000000ffffffff014baf210000000000160014db4d1141d0048b1ed15839d0b7a4c488cd368b0e016a47304402206a2eb16b7b92051d0fa38c133e67684ed064effada1d7f925c842da401d4f22702201f196b10e6e4b4a9fff948e5c5d71ec5da53e90529c8dbd122bff2b1d21dc8a90121039b7bcd0824b9a9164f7ba098408e63e5b7e3cf90835cceb19868f54f8961a82500000000" self.assertEqual(raw_tx, Serializer.serialize_transaction(tx))
def test_updating_utxo_pool_with_tx(self): storage = UTXOStorage(self.storage_filepath) storage.delete_all_otputs() outp0 = Output("", 10, txid="07c0efe33946c5f81b5a86d79eda89e47979d4796d5ec675a9fccde7c31c4f50", vout=1) storage.add_new_output(outp0) outp1 = Output( 900, "76a914cabf271134a5f9228132598c8b4e6ad4586532f888ac", txid="1423215db125380dd21051c0d22f31fd4be2a25794b8789796343f4015c1baff", vout=1 ) outp2 = Output( 4999999100, "76a914e8e4b375038b0a1a1dc70543eab7ea6ce279df4388ac", txid="1423215db125380dd21051c0d22f31fd4be2a25794b8789796343f4015c1baff", vout=2 ) tx = Transaction( [ Input( "07c0efe33946c5f81b5a86d79eda89e47979d4796d5ec675a9fccde7c31c4f50", 1, "404bb493aa8509356c1295c65acd3a44c339729d865422a47cb15631cda545ee3fc2eb86b418a5bb90202040430b723fdbf8429ff232bfa521c25da09539644093410450e829ca678c60031a11b990fea865e03ba35d0579aa62750b918b98c4b935d803ecc57a4bb2fc2ab1193a87fca5386d71516aca89df267fc907bcb3b84d396a" ) ], [outp1, outp2], 0 ) storage.update_with_new_transaction(tx) outp_list = storage.get_all_outputs() self.assertFalse(outp0 in outp_list) self.assertTrue(outp1 in outp_list) self.assertTrue(outp2 in outp_list)