<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def rollback(self, cb=None):
        '''
        Abandon all message publications and acks in the current transaction.
        Caller can specify a callback to use when the transaction has been
        aborted.
        '''
        # Could call select() but spec 1.9.2.5 says to raise an exception
        if not self.enabled:
            raise self.TransactionsNotEnabled()

        self.send_frame(MethodFrame(self.channel_id, 90, 30))
        self._rollback_cb.append(cb)
        self.channel.add_synchronous_cb(self._recv_rollback_ok)