def METHOD_NAME(self):
    add_new_blocks(self.manager, 6, advance_clock=1)
    add_blocks_unlock_reward(self.manager)
    self.assertEqual(len(self.get_tips()), 0)
    tx1 = add_new_transactions(self.manager, 1, advance_clock=1)[0]
    tx2 = add_new_transactions(self.manager, 1, advance_clock=1)[0]
    tx3 = add_new_transactions(self.manager, 1, advance_clock=1)[0]
    # 3 txs and the last one is still a tip
    self.assertCountEqual(self.get_tips(), set([tx3.hash]))
    # A new tx with custom parents, so tx3 and tx4 will become two tips
    tx4 = add_new_transactions(self.manager, 1, advance_clock=1, propagate=False)[0]
    tx4.parents = [tx1.hash, tx2.hash]
    tx4.resolve()
    self.manager.propagate_tx(tx4, fails_silently=False)
    self.manager.reactor.advance(10)
    self.assertCountEqual(self.get_tips(), set([tx4.hash, tx3.hash]))
    # A twin tx with tx4, that will be voided initially, then won't change the tips
    tx5 = Transaction.create_from_struct(tx4.get_struct())
    tx5.parents = [tx2.hash, tx3.hash]
    tx5.resolve()
    self.manager.propagate_tx(tx5)
    self.manager.reactor.advance(10)
    # tx4 and tx5 are twins, so both are voided
    self.assertIsNotNone(tx4.get_metadata(force_reload=True).voided_by)
    self.assertIsNotNone(tx5.get_metadata(force_reload=True).voided_by)
    self.assertCountEqual(self.get_tips(), set([tx3.hash]))
    # add new tx confirming tx5, which will become valid and tx4 becomes voided
    tx6 = add_new_transactions(self.manager, 1, advance_clock=1, propagate=False)[0]
    tx6.parents = [tx5.hash, tx2.hash]
    tx6.resolve()
    self.manager.propagate_tx(tx6, fails_silently=False)
    self.manager.reactor.advance(10)
    self.assertIsNotNone(tx4.get_metadata(force_reload=True).voided_by)
    self.assertIsNone(tx5.get_metadata(force_reload=True).voided_by)
    # tx6 is the only one left
    self.assertCountEqual(self.get_tips(), set([tx6.hash]))