diff --git a/.gitignore b/.gitignore
index f2239b2..e4a1ce7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,3 +27,4 @@ crypto/sol/logs/error.log
crypto/sol/logs/token_info.json
crypto/sol/logs/transation_details.json
.env
+app_data.db
diff --git a/app_data.db b/app_data.db
index 1d388bb..91105cc 100644
Binary files a/app_data.db and b/app_data.db differ
diff --git a/crypto/sol/app.py b/crypto/sol/app.py
index ce16f04..990f9b7 100644
--- a/crypto/sol/app.py
+++ b/crypto/sol/app.py
@@ -207,161 +207,161 @@ async def process_log(log_result):
-async def follow_move_legacy(move):
- global pk
- if pk is None:
- pk = await get_pk()
- your_balances = await SAPI.dex.get_wallet_balances(YOUR_WALLET, doGetTokenName=False)
- your_balance_info = next((balance for balance in your_balances.values() if balance['address'] == move['token_in']), None)
- if your_balance_info is not None:
- # Use the balance
- print(f"Your balance: {your_balance_info['amount']} {move['symbol_in']}")
- else:
- print(f"No ballance found for {move['symbol_in']}. Skipping move.")
- await telegram_utils.send_telegram_message(f"No ballance found for {move['symbol_in']}. Skipping move.")
- return
+# async def follow_move_legacy(move):
+# global pk
+# if pk is None:
+# pk = await get_pk()
+# your_balances = await SAPI.dex.get_wallet_balances(YOUR_WALLET, doGetTokenName=False)
+# your_balance_info = next((balance for balance in your_balances.values() if balance['address'] == move['token_in']), None)
+# if your_balance_info is not None:
+# # Use the balance
+# print(f"Your balance: {your_balance_info['amount']} {move['symbol_in']}")
+# else:
+# print(f"No ballance found for {move['symbol_in']}. Skipping move.")
+# await telegram_utils.send_telegram_message(f"No ballance found for {move['symbol_in']}. Skipping move.")
+# return
- your_balance = your_balance_info['amount']
+# your_balance = your_balance_info['amount']
- token_info = SAPI.dex.TOKENS_INFO.get(move['token_in'])
- token_name_in = token_info.get('symbol') or await SAPI.get_token_metadata(move['token_in'])
- token_name_out = SAPI.dex.TOKENS_INFO[move['token_out']].get('symbol') or await SAPI.get_token_metadata_symbol(move['token_out'])
+# token_info = SAPI.dex.TOKENS_INFO.get(move['token_in'])
+# token_name_in = token_info.get('symbol') or await SAPI.get_token_metadata(move['token_in'])
+# token_name_out = SAPI.dex.TOKENS_INFO[move['token_out']].get('symbol') or await SAPI.get_token_metadata_symbol(move['token_out'])
- if not your_balance:
- msg = f"Move not followed:\nNo balance found for token {move['symbol_in']}. Cannot follow move."
- logging.warning(msg)
- await telegram_utils.send_telegram_message(msg)
- return
+# if not your_balance:
+# msg = f"Move not followed:\nNo balance found for token {move['symbol_in']}. Cannot follow move."
+# logging.warning(msg)
+# await telegram_utils.send_telegram_message(msg)
+# return
- if FOLLOW_AMOUNT == 'percentage':
- # Calculate the amount to swap based on the same percentage as the followed move
- amount_to_swap = your_balance * (move['percentage_swapped'] / 100)
- elif FOLLOW_AMOUNT == 'exact':
- amount_to_swap = move['amount_in']
- else:
- try:
- fixed_amount = float(FOLLOW_AMOUNT) # un USD
- fixed_amount_in_token = fixed_amount / move["token_in_price"]
- amount_to_swap = min(fixed_amount_in_token, your_balance)
- except ValueError:
- msg = f"Move not followed:\nInvalid FOLLOW_AMOUNT '{FOLLOW_AMOUNT}'. Must be 'percentage' or a number."
- logging.warning(msg)
- await telegram_utils.send_telegram_message(msg)
- return
+# if FOLLOW_AMOUNT == 'percentage':
+# # Calculate the amount to swap based on the same percentage as the followed move
+# amount_to_swap = your_balance * (move['percentage_swapped'] / 100)
+# elif FOLLOW_AMOUNT == 'exact':
+# amount_to_swap = move['amount_in']
+# else:
+# try:
+# fixed_amount = float(FOLLOW_AMOUNT) # un USD
+# fixed_amount_in_token = fixed_amount / move["token_in_price"]
+# amount_to_swap = min(fixed_amount_in_token, your_balance)
+# except ValueError:
+# msg = f"Move not followed:\nInvalid FOLLOW_AMOUNT '{FOLLOW_AMOUNT}'. Must be 'percentage' or a number."
+# logging.warning(msg)
+# await telegram_utils.send_telegram_message(msg)
+# return
- amount_to_swap = min(amount_to_swap, your_balance) # Ensure we're not trying to swap more than we have
+# amount_to_swap = min(amount_to_swap, your_balance) # Ensure we're not trying to swap more than we have
- decimals = token_info.get('decimals')
- # Convert to lamports
- # if decimals is 6, then amount = amount * 1e6; if 9, then amount = amount * 1e9
- amount = int(amount_to_swap * 10**decimals)
- amount = int(amount)
- logging.debug(f"Calculated amount in lamports: {amount}")
+# decimals = token_info.get('decimals')
+# # Convert to lamports
+# # if decimals is 6, then amount = amount * 1e6; if 9, then amount = amount * 1e9
+# amount = int(amount_to_swap * 10**decimals)
+# amount = int(amount)
+# logging.debug(f"Calculated amount in lamports: {amount}")
- if your_balance < amount_to_swap: # should not happen
- msg = (
- f"Warning:\n"
- f"Insufficient balance: {your_balance:.6f} {token_name_in}. We want to swap {amount_to_swap:.6f}\n({move['symbol_in']}, decimals {token_info.get('decimals')} amount {amount}).\n This will probably fail. But we will try anyway."
- )
- logging.warning(msg)
- await telegram_utils.send_telegram_message(msg)
- try:
+# if your_balance < amount_to_swap: # should not happen
+# msg = (
+# f"Warning:\n"
+# f"Insufficient balance: {your_balance:.6f} {token_name_in}. We want to swap {amount_to_swap:.6f}\n({move['symbol_in']}, decimals {token_info.get('decimals')} amount {amount}).\n This will probably fail. But we will try anyway."
+# )
+# logging.warning(msg)
+# await telegram_utils.send_telegram_message(msg)
+# try:
- try:
- notification = (
- f"Initiating move:\n"
- f"Swapping {amount_to_swap:.2f} {token_name_in} for {token_name_out}"
- + (f" ({move['percentage_swapped']:.2f}%)" if 'percentage_swapped' in move else "")
- )
- # logging.info(notification)
- # error_logger.info(notification)
- await telegram_utils.send_telegram_message(notification)
- except Exception as e:
- logging.error(f"Error sending notification: {e}")
+# try:
+# notification = (
+# f"Initiating move:\n"
+# f"Swapping {amount_to_swap:.2f} {token_name_in} for {token_name_out}"
+# + (f" ({move['percentage_swapped']:.2f}%)" if 'percentage_swapped' in move else "")
+# )
+# # logging.info(notification)
+# # error_logger.info(notification)
+# await telegram_utils.send_telegram_message(notification)
+# except Exception as e:
+# logging.error(f"Error sending notification: {e}")
- for retry in range(3):
- try:
- private_key = Keypair.from_bytes(base58.b58decode(pk))
- async_client = AsyncClient(SOLANA_WS_URL)
- jupiter = Jupiter(async_client, private_key)
- transaction_data = await jupiter.swap(
- input_mint=move['token_in'],
- output_mint=move['token_out'],
- amount=amount,
- slippage_bps=300, # Increased to 3%
- )
- logging.info(f"Initiating move. Transaction data:\n {transaction_data}")
- error_logger.info(f"Initiating move. Transaction data:\n {transaction_data}")
- raw_transaction = VersionedTransaction.from_bytes(base64.b64decode(transaction_data))
- message = raw_transaction.message
- signature = private_key.sign_message(message.to_bytes_versioned())
- signed_txn = VersionedTransaction.populate(raw_transaction.message, [signature])
- opts = TxOpts(skip_preflight=False, preflight_commitment=Processed)
+# for retry in range(3):
+# try:
+# private_key = Keypair.from_bytes(base58.b58decode(pk))
+# async_client = AsyncClient(SOLANA_WS_URL)
+# jupiter = Jupiter(async_client, private_key)
+# transaction_data = await jupiter.swap(
+# input_mint=move['token_in'],
+# output_mint=move['token_out'],
+# amount=amount,
+# slippage_bps=300, # Increased to 3%
+# )
+# logging.info(f"Initiating move. Transaction data:\n {transaction_data}")
+# error_logger.info(f"Initiating move. Transaction data:\n {transaction_data}")
+# raw_transaction = VersionedTransaction.from_bytes(base64.b64decode(transaction_data))
+# message = raw_transaction.message
+# signature = private_key.sign_message(message.to_bytes_versioned())
+# signed_txn = VersionedTransaction.populate(raw_transaction.message, [signature])
+# opts = TxOpts(skip_preflight=False, preflight_commitment=Processed)
- # send the transaction
- result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
+# # send the transaction
+# result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
- transaction_id = json.loads(result.to_json())['result']
- print(f"Follow Transaction Sent: https://solscan.io/tx/{transaction_id}")
- # append to notification
- notification += f"\n\nTransaction: {transaction_id}"
+# transaction_id = json.loads(result.to_json())['result']
+# print(f"Follow Transaction Sent: https://solscan.io/tx/{transaction_id}")
+# # append to notification
+# notification += f"\n\nTransaction: {transaction_id}"
- await telegram_utils.send_telegram_message(f"Follow Transaction Sent: {transaction_id}")
- tx_details = await SAPI.get_transaction_details_with_retry(transaction_id)
+# await telegram_utils.send_telegram_message(f"Follow Transaction Sent: {transaction_id}")
+# tx_details = await SAPI.get_transaction_details_with_retry(transaction_id)
- if tx_details is not None:
- break
- else:
- logging.warning(f"Failed to get transaction details for {transaction_id}. Probably transaction failed. Retrying again...")
- await asyncio.sleep(3)
- except Exception as e:
- error_message = f"Move Failed:\n{str(e)}\n{transaction_data}\n{move}"
- logging.error(error_message)
- # log the errors to /logs/errors.log
- error_logger.error(error_message)
- error_logger.exception(e)
- await telegram_utils.send_telegram_message(error_message)
- amount = amount * 0.75
+# if tx_details is not None:
+# break
+# else:
+# logging.warning(f"Failed to get transaction details for {transaction_id}. Probably transaction failed. Retrying again...")
+# await asyncio.sleep(3)
+# except Exception as e:
+# error_message = f"Move Failed:\n{str(e)}\n{transaction_data}\n{move}"
+# logging.error(error_message)
+# # log the errors to /logs/errors.log
+# error_logger.error(error_message)
+# error_logger.exception(e)
+# await telegram_utils.send_telegram_message(error_message)
+# amount = amount * 0.75
- await SAPI.dex.get_wallet_balances(YOUR_WALLET, doGetTokenName=False)
+# await SAPI.dex.get_wallet_balances(YOUR_WALLET, doGetTokenName=False)
- try:
- if tx_details is None:
- logging.info(f"Failed to get transaction details for {transaction_id}")
- notification = (
- f"Move Followed, failed to get transaction details.\n"
- f"Swapped {amount_to_swap:.6f} {token_name_in} ({move['token_in']}) "
- f"(same {move['percentage_swapped']:.2f}% as followed wallet)\n"
- f"\n\nTransaction: {transaction_id}"
- # log_successful_swap ()
- )
+# try:
+# if tx_details is None:
+# logging.info(f"Failed to get transaction details for {transaction_id}")
+# notification = (
+# f"Move Followed, failed to get transaction details.\n"
+# f"Swapped {amount_to_swap:.6f} {token_name_in} ({move['token_in']}) "
+# f"(same {move['percentage_swapped']:.2f}% as followed wallet)\n"
+# f"\n\nTransaction: {transaction_id}"
+# # log_successful_swap ()
+# )
- else:
- notification = (
- f"Move Followed:\n"
- f"Swapped {amount_to_swap:.6f} {token_name_in} ({move['symbol_in']}) "
- f"(same {move['percentage_swapped']:.2f}% as followed wallet)\n"
- f"for {tx_details['amount_out']:.2f} {token_name_out}"
- # f"Amount In USD: {tr_details['amount_in_USD']}\n"
- f"\n\nTransaction: {transaction_id}"
- )
- logging.info(notification)
- await telegram_utils.send_telegram_message(notification)
- except Exception as e:
- logging.error(f"Error sending notification: {e}")
+# else:
+# notification = (
+# f"Move Followed:\n"
+# f"Swapped {amount_to_swap:.6f} {token_name_in} ({move['symbol_in']}) "
+# f"(same {move['percentage_swapped']:.2f}% as followed wallet)\n"
+# f"for {tx_details['amount_out']:.2f} {token_name_out}"
+# # f"Amount In USD: {tr_details['amount_in_USD']}\n"
+# f"\n\nTransaction: {transaction_id}"
+# )
+# logging.info(notification)
+# await telegram_utils.send_telegram_message(notification)
+# except Exception as e:
+# logging.error(f"Error sending notification: {e}")
- except Exception as e:
- error_message = f"Swap Follow Error:\n{str(e)}"
- logging.error(error_message)
- # log the errors to /logs/errors.log
- error_logger.error(error_message)
- error_logger.exception(e) \
- # if error_message contains 'Program log: Error: insufficient funds'
- if 'insufficient funds' in error_message:
- await telegram_utils.send_telegram_message("Insufficient funds. Cannot follow move. Please check your balance.")
- else:
- await telegram_utils.send_telegram_message(error_message)
+# except Exception as e:
+# error_message = f"Swap Follow Error:\n{str(e)}"
+# logging.error(error_message)
+# # log the errors to /logs/errors.log
+# error_logger.error(error_message)
+# error_logger.exception(e) \
+# # if error_message contains 'Program log: Error: insufficient funds'
+# if 'insufficient funds' in error_message:
+# await telegram_utils.send_telegram_message("Insufficient funds. Cannot follow move. Please check your balance.")
+# else:
+# await telegram_utils.send_telegram_message(error_message)
# Helper functions
@@ -401,7 +401,8 @@ async def process_messages(websocket):
pk = None
-app = init_app(follow_move_legacy)
+app = init_app()
+# app = init_app(follow_move_legacy)
# Convert Flask app to ASGI
asgi_app = WsgiToAsgi(app)
diff --git a/crypto/sol/modules/SolanaAPI.py b/crypto/sol/modules/SolanaAPI.py
index b152671..82c1435 100644
--- a/crypto/sol/modules/SolanaAPI.py
+++ b/crypto/sol/modules/SolanaAPI.py
@@ -276,15 +276,15 @@ class SolanaAPI:
if solana_ws.websocket:
await solana_ws.close()
await async_safe_call(self.on_bot_message,"Reconnecting...")
- if self.receive_task and not self.receive_task.cancelled():
+ if receive_task and not receive_task.cancelled():
receive_task.cancel()
- if self.process_task and not self.process_task.cancelled():
+ if process_task and not process_task.cancelled():
process_task.cancel()
except Exception as e:
logger.error(f"An error occurred while unsubscribing: {e}")
finally:
- self.receive_task = None
- self.process_task = None
+ receive_task = None
+ process_task = None
await asyncio.sleep(5)
diff --git a/crypto/sol/modules/webui.py b/crypto/sol/modules/webui.py
index 0ea4aec..142d0c6 100644
--- a/crypto/sol/modules/webui.py
+++ b/crypto/sol/modules/webui.py
@@ -304,7 +304,7 @@ def get_latest_log_file(wh:bool):
# files = [f for f in os.listdir(log_dir) if os.path.isfile(os.path.join(log_dir, f))]
# filter files mask log_20241005_004103_143116.json
if wh:
- files = [f for f in os.listdir(log_dir) if os.path.isfile(os.path.join(log_dir, f)) and f.startswith('wh-')]
+ files = [f for f in os.listdir(log_dir) if os.path.isfile(os.path.join(log_dir, f)) and f.startswith('wh_')]
else:
files = [f for f in os.listdir(log_dir) if os.path.isfile(os.path.join(log_dir, f)) and f.startswith('log_')]