MCPcopy Create free account
hub / github.com/ccxt/ccxt / sign

Method sign

python/ccxt/async_support/xt.py:4863–4927  ·  view source on GitHub ↗
(self, path, api: Any = [], method='GET', params={}, headers: dict = None, body: Str = None)

Source from the content-addressed store, hash-verified

4861 return None
4862
4863 def sign(self, path, api: Any = [], method='GET', params={}, headers: dict = None, body: Str = None):
4864 signed = api[0] == 'private'
4865 endpoint = api[1]
4866 request = '/' + self.implode_params(path, params)
4867 payload = None
4868 if (endpoint == 'spot') or (endpoint == 'user'):
4869 if signed:
4870 payload = '/' + self.version + request
4871 else:
4872 payload = '/' + self.version + '/public' + request
4873 else:
4874 payload = request
4875 url = self.urls['api'][endpoint] + payload
4876 query = self.omit(params, self.extract_params(path))
4877 urlencoded = self.urlencode(self.keysort(query))
4878 headers = {
4879 'Content-Type': 'application/json',
4880 }
4881 if signed:
4882 self.check_required_credentials()
4883 defaultRecvWindow = self.safe_string(self.options, 'recvWindow')
4884 recvWindow = self.safe_string(query, 'recvWindow', defaultRecvWindow)
4885 timestamp = self.number_to_string(self.nonce())
4886 body = query
4887 if (payload == '/v4/order') or (payload == '/future/trade/v1/order/create') or (payload == '/future/trade/v1/entrust/create-plan') or (payload == '/future/trade/v1/entrust/create-profit') or (payload == '/future/trade/v1/order/create-batch'):
4888 id = 'CCXT'
4889 if payload.find('future') > -1:
4890 body['clientMedia'] = id
4891 else:
4892 body['media'] = id
4893 isUndefinedBody = ((method == 'GET') or (path == 'order/{orderId}') or (path == 'ws-token'))
4894 if (method == 'PUT') and (endpoint == 'spot'):
4895 isUndefinedBody = False
4896 body = None if isUndefinedBody else self.json(body)
4897 payloadString = None
4898 if (endpoint == 'spot') or (endpoint == 'user'):
4899 payloadString = 'xt-validate-algorithms=HmacSHA256&xt-validate-appkey=' + self.apiKey + '&xt-validate-recvwindow=' + recvWindow + '&xt-validate-t' + 'imestamp=' + timestamp
4900 if isUndefinedBody:
4901 if urlencoded:
4902 url += '?' + urlencoded
4903 payloadString += '#' + method + '#' + payload + '#' + self.rawencode(self.keysort(query))
4904 else:
4905 payloadString += '#' + method + '#' + payload
4906 else:
4907 payloadString += '#' + method + '#' + payload + '#' + body
4908 headers['xt-validate-algorithms'] = 'HmacSHA256'
4909 headers['xt-validate-recvwindow'] = recvWindow
4910 else:
4911 payloadString = 'xt-validate-appkey=' + self.apiKey + '&xt-validate-t' + 'imestamp=' + timestamp # we can't glue timestamp, breaks in php
4912 if method == 'GET':
4913 if urlencoded:
4914 url += '?' + urlencoded
4915 payloadString += '#' + payload + '#' + urlencoded
4916 else:
4917 payloadString += '#' + payload
4918 else:
4919 payloadString += '#' + payload + '#' + body
4920 signature = self.hmac(self.encode(payloadString), self.encode(self.secret), hashlib.sha256)

Callers

nothing calls this directly

Calls 13

nonceMethod · 0.95
implode_paramsMethod · 0.80
extract_paramsMethod · 0.80
safe_stringMethod · 0.80
findMethod · 0.80
omitMethod · 0.45
urlencodeMethod · 0.45
keysortMethod · 0.45
jsonMethod · 0.45
rawencodeMethod · 0.45
hmacMethod · 0.45

Tested by

no test coverage detected