Source code for switcheo.neo.signatures

# -*- coding:utf-8 -*-
"""
Description:
    Functions for signing data to send to the Switcheo API by using NEO Utilities to cryptographically sign
    data that gets authenticated on the NEO network.
Usage:
    from switcheo.neo.signatures import <function_name>
"""

from switcheo.utils import get_epoch_milliseconds
from switcheo.neo.utils import sign_message, sign_transaction, sign_txn_array, encode_message,\
    neo_get_scripthash_from_private_key, private_key_to_hex


[docs]def sign_create_cancellation(cancellation_params, key_pair): """ Function to sign the parameters required to create a cancellation request from the Switcheo Exchange. Execution of this function is as follows:: sign_create_cancellation(cancellation_params=signable_params, key_pair=key_pair) The expected return result for this function is as follows:: { 'order_id': 'aa647b95-d546-4d29-961e-bd62b18b07bf', 'timestamp': 1542092600331, 'address': 'fea2b883725ef2d194c9060f606cd0a0468a2c59', 'signature': '475bc3ecd2310201a3b5357b52b1866aaf5a5618932500e43503ebb....' } :param cancellation_params: Dictionary with Order ID and timestamp to sign for creating the cancellation. :type cancellation_params: dict :param key_pair: The KeyPair for the wallet being used to sign deposit message. :type key_pair: KeyPair :return: Dictionary of signed message to send to the Switcheo API. """ encoded_message = encode_message(cancellation_params) create_params = cancellation_params.copy() create_params['address'] = neo_get_scripthash_from_private_key(private_key=key_pair.PrivateKey).ToString() create_params['signature'] = sign_message(encoded_message=encoded_message, private_key_hex=private_key_to_hex(key_pair=key_pair)) return create_params
[docs]def sign_execute_cancellation(cancellation_params, key_pair): """ Function to sign the parameters required to execute a cancellation request on the Switcheo Exchange. Execution of this function is as follows:: sign_execute_cancellation(cancellation_params=signable_params, key_pair=key_pair) The expected return result for this function is as follows:: { 'signature': '6a40d6c011b7517f8fd3f2d0de32dd486adfd1d424d06d56c80eb....' } :param cancellation_params: Parameters the Switcheo Exchange returns from the create cancellation. :type cancellation_params: dict :param key_pair: The KeyPair for the wallet being used to sign deposit message. :type key_pair: KeyPair :return: Dictionary of signed message to send to the Switcheo API. """ signature = sign_transaction(transaction=cancellation_params['transaction'], private_key_hex=private_key_to_hex(key_pair=key_pair)) return {'signature': signature}
[docs]def sign_create_deposit(deposit_params, key_pair): """ Function to create a deposit request by generating a transaction request from the Switcheo API. Execution of this function is as follows:: sign_create_deposit(deposit_details=create_deposit, key_pair=key_pair) The expected return result for this function is as follows:: { 'blockchain': 'neo', 'asset_id': 'SWTH', 'amount': '100', 'timestamp': 1542091927575, 'contract_hash': 'a195c1549e7da61b8da315765a790ac7e7633b82', 'address': 'fea2b883725ef2d194c9060f606cd0a0468a2c59', 'signature': '24ef6c63964988a2efe5fe67f04f46fdc2f1504fb5....' } :param deposit_params: The parameters generated by the create deposit function that now requires signature. :type deposit_params: dict :param key_pair: The KeyPair for the wallet being used to sign deposit message. :type key_pair: KeyPair :return: Dictionary response of signed deposit request that is ready to be executed on the NEO blockchain. """ encoded_message = encode_message(deposit_params) create_params = deposit_params.copy() create_params['address'] = neo_get_scripthash_from_private_key(private_key=key_pair.PrivateKey).ToString() create_params['signature'] = sign_message(encoded_message=encoded_message, private_key_hex=private_key_to_hex(key_pair=key_pair)) return create_params
[docs]def sign_execute_deposit(deposit_params, key_pair): """ Function to execute the deposit request by signing the transaction generated by the create deposit function. Execution of this function is as follows:: sign_execute_deposit(deposit_details=create_deposit, key_pair=key_pair) The expected return result for this function is as follows:: { 'signature': '3cc4a5cb7b7d50383e799add2ba35382b6f2f1b2e3b97802....' } :param deposit_params: The parameters generated by the create deposit function that now requires signature. :type deposit_params: dict :param key_pair: The KeyPair for the wallet being used to sign deposit message. :type key_pair: KeyPair :return: Dictionary with the result status of the deposit attempt. """ signature = sign_transaction(transaction=deposit_params['transaction'], private_key_hex=private_key_to_hex(key_pair=key_pair)) return {'signature': signature}
[docs]def sign_create_order(order_params, key_pair): """ Function to sign the create order parameters and send to the Switcheo API. Execution of this function is as follows:: sign_create_order(order_params=signable_params, key_pair=key_pair) The expected return result for this function is as follows:: { 'blockchain': 'neo', 'pair': 'SWTH_NEO', 'side': 'buy', 'price': '0.00001000', 'want_amount': '1000000000000', 'use_native_tokens': True, 'order_type': 'limit', 'timestamp': 1542091535839, 'contract_hash': 'a195c1549e7da61b8da315765a790ac7e7633b82', 'address': 'fea2b883725ef2d194c9060f606cd0a0468a2c59', 'signature': '88e93c14a7d3c2cf30dec012ad5cb69f5ff26fe2a....' } :param order_params: Parameters to create an order to be submitted to the Switcheo Order Book. :type order_params: dict :param key_pair: The NEO key pair to be used to sign messages for the NEO Blockchain. :type key_pair: KeyPair :return: Dictionary of signed message to send to the Switcheo API. """ encoded_message = encode_message(order_params) create_params = order_params.copy() create_params['address'] = neo_get_scripthash_from_private_key(private_key=key_pair.PrivateKey).ToString() create_params['signature'] = sign_message(encoded_message=encoded_message, private_key_hex=private_key_to_hex(key_pair=key_pair)) return create_params
[docs]def sign_execute_order(order_params, key_pair): """ Function to execute the order request by signing the transaction generated from the create order function. Execution of this function is as follows:: sign_execute_order(order_params=signable_params, key_pair=key_pair) The expected return result for this function is as follows:: { 'signatures': { 'fill_groups': {}, 'fills': {}, 'makes': { '952defd3-ad8a-4db3-bbd1-27d58ff6c7bd': '3f5aa331a731a808fe260502421cbb06ae3d5ea5ddfb1....' } } } :param order_params: The parameters generated by the create function that now require signing. :type order_params: dict :param key_pair: The NEO key pair to be used to sign messages for the NEO Blockchain. :type key_pair: KeyPair :return: Dictionary of the signed transaction to place an order on the Switcheo Order Book. """ execute_params = { 'signatures': { 'fill_groups': {}, 'fills': sign_txn_array(messages=order_params['fills'], private_key_hex=private_key_to_hex(key_pair=key_pair)), 'makes': sign_txn_array(messages=order_params['makes'], private_key_hex=private_key_to_hex(key_pair=key_pair)) } } return execute_params
[docs]def sign_create_withdrawal(withdrawal_params, key_pair): """ Function to create the withdrawal request by signing the parameters necessary for withdrawal. Execution of this function is as follows:: sign_create_withdrawal(withdrawal_params=signable_params, private_key=eth_private_key) The expected return result for this function is as follows:: { 'blockchain': 'neo', 'asset_id': 'SWTH', 'amount': '100', 'timestamp': 1542090737236, 'contract_hash': 'a195c1549e7da61b8da315765a790ac7e7633b82', 'address': 'fea2b883725ef2d194c9060f606cd0a0468a2c59', 'signature': 'f66d604c0a80940bf70ce9e13c0fd47bc79de....' } :param withdrawal_params: Dictionary specifications for withdrawal from the Switcheo Smart Contract. :type withdrawal_params: dict :param key_pair: The NEO key pair to be used to sign messages for the NEO Blockchain. :type key_pair: KeyPair :return: Dictionary of parameters to be sent to the Switcheo API """ encoded_message = encode_message(withdrawal_params) create_params = withdrawal_params.copy() create_params['address'] = neo_get_scripthash_from_private_key(private_key=key_pair.PrivateKey).ToString() create_params['signature'] = sign_message(encoded_message=encoded_message, private_key_hex=private_key_to_hex(key_pair=key_pair)) return create_params
[docs]def sign_execute_withdrawal(withdrawal_params, key_pair): """ Function to execute the withdrawal request by signing the transaction generated from the create withdrawal function. Execution of this function is as follows:: sign_execute_withdrawal(withdrawal_params=signable_params, private_key=eth_private_key) The expected return result for this function is as follows:: { 'id': '3e1c0802-b44e-4681-a94d-29c1dec2f518', 'timestamp': 1542090738192, 'signature': 'e05a7b7bd30eb85959d75ea634cee06ad35d96502a763ae40....' } :param withdrawal_params: Parameters passed from the create withdrawal function to be signed and confirmed. :type withdrawal_params: dict :param key_pair: The NEO key pair to be used to sign messages for the NEO Blockchain. :type key_pair: KeyPair :return: Dictionary of parameters to be sent to the Switcheo API """ withdrawal_id = withdrawal_params['id'] signable_params = { 'id': withdrawal_id, 'timestamp': get_epoch_milliseconds() } encoded_message = encode_message(signable_params) execute_params = signable_params.copy() execute_params['signature'] = sign_message(encoded_message=encoded_message, private_key_hex=private_key_to_hex(key_pair=key_pair)) return execute_params