def test_sign_transaction(self): w = Wallet() w.create_keys() t = Transaction(w.get_address(), 1, 1) th = t.get_hash() self.assertIsNone(t.signature) self.assertTrue(w.sign_transaction(t)) self.assertIsNotNone(t.signature) self.assertEqual(t.get_hash(), th) self.assertTrue(w.verify_transaction(t))
def test_transaction_serialize(self): t1 = Transaction(0, 1, 2) t2 = Transaction(0, 1, 2) self.assertNotEqual(t1.get_hash(), t2.get_hash()) t3 = Transaction.from_json(t1.to_json()) self.assertEqual(t1.get_hash(), t3.get_hash()) self.assertEqual(t1.src, t3.src) self.assertEqual(t1.dst, t3.dst) self.assertEqual(t1.qty, t3.qty) w = Wallet() w.create_keys() w.sign_transaction(t1) t4 = Transaction.from_json(t1.to_json()) self.assertEqual(t1.get_hash(), t4.get_hash())
def test_add_transactions(self): tp = TransactionPool() w = Wallet() w.create_keys() t = Transaction(w.get_address(), 1, 1) # Transaction is not signed self.assertFalse(tp.add_transaction(t)) w.sign_transaction(t) self.assertTrue(tp.add_transaction(t)) # Canot add the same transaciton multiple times self.assertFalse(tp.add_transaction(t)) self.assertEqual(len(tp), 1) t2 = tp.pull_transaction() self.assertEqual(t.get_hash(), t2.get_hash())
def test_import_transactions(self): b = Block(0, 0) w = Wallet() w.create_keys() t = Transaction(w.get_address(), 1, 1) w.sign_transaction(t) b.add_transaction(t) tp = TransactionPool() self.assertTrue(tp.import_transactions(b)) self.assertEqual(len(tp), 1) t2 = tp.pull_transaction() self.assertEqual(t.get_hash(), t2.get_hash()) # Importing unsigned transactions returns False tp = TransactionPool() t2 = Transaction(0, 1, 1) b.add_transaction(t2) self.assertFalse(tp.import_transactions(b))