def test_block_serialize(self): a = Block(0, 1, datetime.datetime.utcnow().timestamp()) t1 = Transaction(0, 1, 2) a.add_transaction(t1) t2 = Transaction(0, 1, 2) a.add_transaction(t2) b = Block.from_json(a.to_json()) self.assertEqual(a.get_hash(), b.get_hash())
def test_walk_transactions(self): b = Block(0, 0, 0) t = Transaction(0, 1, 2) b.add_transaction(t) self.assertEqual(len(list(b.get_transactions())), 1) t = Transaction(0, 1, 2) b.add_transaction(t) self.assertEqual(len(list(b.get_transactions())), 2) for x in b.get_transactions(): self.assertIsInstance(x, Transaction)
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))
def test_create_block(self): b = Block(0, 0, 0) self.assertIsInstance(b, Block) t = Transaction(0, 1, 2) self.assertTrue(b.add_transaction(t)) header = b.get_header() header = json.loads(header) self.assertIsInstance(header, dict) self.assertIsInstance(header["trans_tree"], str)
def test_discard_block(self): bc = BlockChain() cbtx = WalletHelper.generate_coinbase_with_unused_wallet() b = bc.new_block(cbtx) mine(b) self.assertTrue(bc.discard_block(b)) b = Block(1337, bc.get_block_from_index(1).get_hash()) cbtx = WalletHelper.generate_coinbase_with_unused_wallet() b.add_transaction(cbtx) mine(b) self.assertFalse(bc.discard_block(b)) self.assertEqual(len(bc.chain), 2) b = Block(bc.get_block_from_index(-1).index, "obviously_fake_hash") cbtx = WalletHelper.generate_coinbase_with_unused_wallet() b.add_transaction(cbtx) mine(b) self.assertFalse(bc.discard_block(b)) self.assertEqual(len(bc.chain), 2) b = Block( bc.get_block_from_index(1).index + 1, bc.get_block_from_index(1).get_hash()) cbtx = WalletHelper.generate_coinbase_with_unused_wallet() b.add_transaction(cbtx) # coinbase mine(b) self.assertTrue(bc.discard_block(b)) self.assertEqual(len(bc.chain), 3)