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