<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def withdraw(self, currency, amount, address):
 """Withdraw a major currency from QuadrigaCX to the given wallet. :param currency: Major currency name in lowercase (e.g. "btc", "eth"). :type currency: str | unicode :param amount: Withdrawal amount. :type amount: int | float | str | unicode | decimal.Decimal :param address: Wallet address. :type address: str | unicode .. warning:: Specifying incorrect major currency or wallet address could result in permanent loss of your coins. Please be careful when using this method! """

        self._validate_currency(currency)
        self._log('withdraw {} {} to {}'.format(amount, currency, address))
        coin_name = self.major_currencies[currency]
        return self._rest_client.post(
            endpoint='/{}_withdrawal'.format(coin_name)
        )