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

Method create_signed_request

python/ccxt/grvt.py:3014–3069  ·  view source on GitHub ↗
(self, request: Any, structureType: str, currencyObj=None, signerAddress: Str = None)

Source from the content-addressed store, hash-verified

3012 return self.convert_to_big_int_custom('10000') # multiply needed https://t.me/c/3396937126/88
3013
3014 def create_signed_request(self, request: Any, structureType: str, currencyObj=None, signerAddress: Str = None) -> dict:
3015 messageData = None
3016 if structureType == 'EIP712_TRANSFER_TYPE':
3017 amountMultiplier = self.convert_to_big_int_custom('1000000')
3018 amountInt = request['num_tokens'] * amountMultiplier
3019 messageData = {
3020 'fromAccount': request['from_account_id'],
3021 'fromSubAccount': request['from_sub_account_id'],
3022 'toAccount': request['to_account_id'],
3023 'toSubAccount': request['to_sub_account_id'],
3024 'tokenCurrency': currencyObj['numericId'],
3025 'numTokens': self.parse_to_int(amountInt),
3026 'nonce': request['signature']['nonce'],
3027 'expiration': request['signature']['expiration'],
3028 }
3029 elif structureType == 'EIP712_WITHDRAWAL_TYPE':
3030 amountMultiplier = self.convert_to_big_int_custom('1000000')
3031 messageData = {
3032 'fromAccount': request['from_account_id'],
3033 'toEthAddress': request['to_eth_address'],
3034 'tokenCurrency': currencyObj['numericId'],
3035 'numTokens': self.parse_to_int(request['num_tokens'] * amountMultiplier),
3036 'nonce': request['signature']['nonce'],
3037 'expiration': request['signature']['expiration'],
3038 }
3039 elif structureType == 'EIP712_ORDER_TYPE' or structureType == 'EIP712_ORDER_WITH_BUILDER_TYPE':
3040 messageData = self.eip_message_for_order(request, structureType)
3041 elif structureType == 'EIP712_BUILDER_APPROVAL_TYPE':
3042 amountMultiplier = self.convert_to_big_int_custom(self.fee_amount_multiplier())
3043 messageData = {
3044 'mainAccountID': request['main_account_id'],
3045 'builderAccountID': request['builder_account_id'],
3046 'maxFutureFeeRate': self.parse_to_int(float(request['max_futures_fee_rate']) * amountMultiplier),
3047 'maxSpotFeeRate': self.parse_to_int(float(request['max_spot_fee_rate']) * amountMultiplier),
3048 'nonce': request['signature']['nonce'],
3049 'expiration': request['signature']['expiration'],
3050 }
3051 elif structureType == 'EIP712_WALLETLOGIN_TYPE':
3052 messageData = {
3053 'signer': request['address'],
3054 'nonce': request['signature']['nonce'],
3055 'expiration': request['signature']['expiration'],
3056 }
3057 domainData = self.eip_domain_data()
3058 definitions = self.eip_definitions()
3059 ethEncodedMessage = self.eth_encode_structured_data(domainData, definitions[structureType], messageData)
3060 ethEncodedMessageHashed = '0x' + self.hash(ethEncodedMessage, 'keccak', 'hex')
3061 usesPrivKey = self.uses_private_key() # py transpiler needs self line separated
3062 secretOrPrivkey = self.privateKey if usesPrivKey else self.secret
3063 privateKeyWithoutZero = self.remove0x_prefix(secretOrPrivkey)
3064 signature = self.ecdsa(self.remove0x_prefix(ethEncodedMessageHashed), privateKeyWithoutZero, 'secp256k1', None)
3065 request['signature']['r'] = self.format_signature_rs(signature['r'])
3066 request['signature']['s'] = self.format_signature_rs(signature['s'])
3067 request['signature']['v'] = self.sum(27, signature['v'])
3068 request['signature']['signer'] = self.eth_get_address_from_private_key('0x' + privateKeyWithoutZero) if (signerAddress is None) else signerAddress
3069 return request
3070
3071 def format_signature_rs(self, value: str):

Callers 5

initialize_clientMethod · 0.95
transferMethod · 0.95
withdrawMethod · 0.95
create_orderMethod · 0.95

Calls 14

eip_message_for_orderMethod · 0.95
fee_amount_multiplierMethod · 0.95
eip_domain_dataMethod · 0.95
eip_definitionsMethod · 0.95
uses_private_keyMethod · 0.95
format_signature_rsMethod · 0.95
parse_to_intMethod · 0.80
remove0x_prefixMethod · 0.80
hashMethod · 0.45

Tested by

no test coverage detected