<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def post(self, endpoint, payload=None):
 """Send an HTTP POST request to QuadrigaCX. :param endpoint: API endpoint. :type endpoint: str | unicode :param payload: Request payload. :type payload: dict :return: Response body from QuadrigaCX. :rtype: dict :raise quadriga.exceptions.RequestError: If HTTP OK was not returned. """

        nonce = int(time.time() * 10000)
        hmac_msg = str(nonce) + self._client_id + self._api_key
        signature = hmac.new(
            key=self._hmac_key,
            msg=hmac_msg.encode('utf-8'),
            digestmod=hashlib.sha256
        ).hexdigest()

        if payload is None:
            payload = {}
        payload['key'] = self._api_key
        payload['nonce'] = nonce
        payload['signature'] = signature

        response = self._session.post(
            url=self._url + endpoint,
            json=payload,
            timeout=self._timeout
        )
        return self._handle_response(response)