diff --git a/.vscode/launch.json b/.vscode/launch.json index 8906574..b7e847f 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -39,8 +39,8 @@ "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "env": { - "NODE_ENV": "demo" - "OPENAI_API_KEY": + "NODE_ENV": "demo", + "OPENAI_API_KEY":"" }, "skipFiles": [ "/**" @@ -69,7 +69,13 @@ "program": "${file}" }, { - "name": "Python Debugger: Python File with Conda", + "name": "py: Sol app.py", + "type": "debugpy", + "request": "launch", + "program": "${workspaceFolder}/crypto/sol/app.py", + }, + { + "name": "Python Debugger: Python File with Conda (py)", "type": "debugpy", "request": "launch", "program": "${file}", diff --git a/crypto/sol/app.py b/crypto/sol/app.py index 6efbe72..a3040a6 100644 --- a/crypto/sol/app.py +++ b/crypto/sol/app.py @@ -816,7 +816,8 @@ async def get_transaction_details_with_retry(transaction_id, retry_delay = 8, ma break except Exception as e: logging.error(f"Error fetching transaction details: {e}") - logging.info(f"({_} of {max_retries}) Waiting for transaction details for {transaction_id}") + retry_delay = retry_delay * 1.2 + logging.info(f"({_} of {max_retries}) Waiting for transaction details for {transaction_id}. retry in {retry_delay} s.") await asyncio.sleep(retry_delay) return tx_details @@ -886,7 +887,7 @@ async def process_log(log_result): i += 1 - # calculatte percentage swapped by digging before_source_balance, source_token_change and after_source_balance + # calculate percentage swapped by digging before_source_balance, source_token_change and after_source_balance # "Program log: before_source_balance: 19471871, before_destination_balance: 0, amount_in: 19471871, expect_amount_out: 770877527, min_return: 763168752", # "Program log: after_source_balance: 0, after_destination_balance: 770570049", @@ -1023,7 +1024,7 @@ async def follow_move(move): # Calculate the amount to swap based on the same percentage as the followed move amount_to_swap = your_balance * (move['percentage_swapped'] / 100) - amount_to_swap = min( min(amount_to_swap, your_balance), 300) + # amount_to_swap = min( min(amount_to_swap, your_balance), 300) # # always get 99% of the amount to swap # amount_to_swap = amount_to_swap * 0.95 @@ -1062,7 +1063,7 @@ async def follow_move(move): input_mint=move['token_in'], output_mint=move['token_out'], amount=amount, - slippage_bps=100, # Increased to 1% + 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}") @@ -1140,7 +1141,7 @@ SOLANA_ENDPOINTS = [ # "wss://mainnet.rpcpool.com", ] PING_INTERVAL = 30 -SUBSCRIBE_INTERVAL = 1*60 # Resubscribe every 10 minutes +SUBSCRIBE_INTERVAL = 10*60 # Resubscribe every 10 minutes # async def heartbeat(websocket): @@ -1176,7 +1177,7 @@ async def wallet_watch_loop(): if first_subscription: asyncio.create_task( list_initial_wallet_states()) first_subscription = False - process_task = asyncio.create_task(process_messages(websocket, subscription_id)) + process_task = asyncio.create_task(process_messages(websocket)) while True: try: await asyncio.wait_for(process_task, timeout=SUBSCRIBE_INTERVAL) @@ -1198,7 +1199,7 @@ async def wallet_watch_loop(): # Already subscribed logger.info("Already subscribed, continuing with existing subscription") if subscription_id: - process_task = asyncio.create_task(process_messages(websocket, subscription_id)) + process_task = asyncio.create_task(process_messages(websocket)) else: # process_messages completed (shouldn't happen unless there's an error) @@ -1216,7 +1217,7 @@ async def wallet_watch_loop(): await unsubscribe(websocket, subscription_id) await send_telegram_message("reconnecting...") logger.info(f"Attempting to reconnect in {reconnect_delay} seconds...") - websocket.close() + await websocket.close() except Exception as e: logger.error(f"An unexpected error occurred - breaking watch loop: {e}") @@ -1236,22 +1237,7 @@ async def subscribe(websocket): try: await websocket.send(json.dumps(request)) logger.info("Subscription request sent") - - response = await websocket.recv() - response_data = json.loads(response) - - if 'result' in response_data: - subscription_id = response_data['result'] - logger.info(f"Subscription successful. Subscription id: {subscription_id}") - return subscription_id - else: - logger.warning(f"Unexpected response: {response_data}") - return None - except websockets.exceptions.ConnectionClosedError as e: - logger.error(f"Connection closed unexpectedly: {e}") - await send_telegram_message("Connection to Solana network was closed. Not listening for transactions right now. Attempting to reconnect...") - await websocket.close() - return None + return await process_messages(websocket) except Exception as e: logger.error(f"An unexpected error occurred: {e}") return None @@ -1268,14 +1254,23 @@ async def unsubscribe(websocket, subscription_id): logger.info(f"Unsubscribed from subscription id: {subscription_id}") subscription_id = None -async def process_messages(websocket, subscription_id): +async def process_messages(websocket): try: while True: response = await websocket.recv() response_data = json.loads(response) logger.debug(f"Received response: {response_data}") - if 'params' in response_data: + if 'result' in response_data: + new_sub_id = response_data['result'] + if int(new_sub_id) > 1: + subscription_id = new_sub_id + logger.info(f"Subscription successful. New id: {subscription_id}") + elif new_sub_id: + logger.info(f"Existing subscription confirmed: {subscription_id}") + else: return None + return subscription_id + elif 'params' in response_data: log = response_data['params']['result'] logger.debug(f"Received transaction log: {log}") asyncio.create_task(process_log(log)) diff --git a/crypto/sol/logs/token_info.json b/crypto/sol/logs/token_info.json index 792d788..f39e369 100644 --- a/crypto/sol/logs/token_info.json +++ b/crypto/sol/logs/token_info.json @@ -82,12 +82,12 @@ "price": 4.026e-06 }, "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v": { - "price": 1.001, + "price": 1.00028, "decimals": 6, "name": "USD Coin", "symbol": "USDC", "address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", - "holdedAmount": 160.755238, + "holdedAmount": 51.117694, "priice": 1.00073 }, "Akev8YDBQfuCv33M1tjDcaUFAsY4Q5izMSfhbozL1Q6j": { @@ -97,7 +97,7 @@ "address": "Akev8YDBQfuCv33M1tjDcaUFAsY4Q5izMSfhbozL1Q6j", "holdedAmount": 511117.33566278, "priice": 3.585e-06, - "price": 2.696e-06 + "price": 1.714e-09 }, "BkVeSP2GsXV3AYoRJBSZTpFE8sXmcuGnRQcFgoWspump": { "price": 0.001581, @@ -146,12 +146,12 @@ "holdedAmount": 176920.153819 }, "8Ki8DpuWNxu9VsS3kQbarsCWMcFGWkzzA8pUPto9zBd5": { - "price": 0.06036, + "price": 0.0721, "decimals": 9, "name": "LOCK IN", "symbol": "LOCKIN", "address": "8Ki8DpuWNxu9VsS3kQbarsCWMcFGWkzzA8pUPto9zBd5", - "holdedAmount": 562.91513794 + "holdedAmount": 3666.718751598 }, "fESbUKjuMY6jzDH9VP8cy4p3pu2q5W2rK2XghVfNseP": { "price": 0.0004163, @@ -220,7 +220,7 @@ "symbol": "SOL", "address": "So11111111111111111111111111111111111111112", "priice": 142.85, - "price": 138.13 + "price": 154.21 }, "4nfn86ssbv7wiqcsw7bpvn46k24jhe334fudtyxhp1og": { "symbol": null, @@ -291,8 +291,8 @@ "name": "Banana Tape Wall", "symbol": "BTW", "address": "4ytpZgVoNB66bFs6NRCUaAVsLdtYk2fHq4U92Jnjpump", - "holdedAmount": 54542.700895, - "price": 0.002082 + "holdedAmount": 53869.113034, + "price": 0.003814 }, "2JcXacFwt9mVAwBQ5nZkYwCyXQkRcdsYrDXn6hj22SbP": { "decimals": 6, @@ -307,8 +307,8 @@ "name": "real fast", "symbol": "speed", "address": "5Wd2ALxQfnpgQKCyH4WL9giBiiuuLuJs84CJxfQccvmN", - "holdedAmount": 561240.789081, - "price": 0.002958 + "holdedAmount": 59475.003778, + "price": 0.005088 }, "BsTRFEVZhXbBuy5fhxbttuim8iwzXqMdRCfFftDAkkeu": { "decimals": 6, @@ -331,8 +331,8 @@ "name": "Honk", "symbol": "HONK", "address": "3ag1Mj9AKz9FAkCQ6gAEhpLSX8B2pUbPdkb9iBsDLZNB", - "holdedAmount": 70780.323867533, - "price": 0.00369 + "holdedAmount": 51532.310973239, + "price": 0.005597 }, "7M9KJcPNC65ShLDmJmTNhVFcuY95Y1VMeYngKgt67D1t": { "decimals": 6, @@ -341,5 +341,117 @@ "address": "7M9KJcPNC65ShLDmJmTNhVFcuY95Y1VMeYngKgt67D1t", "holdedAmount": 118734.201549, "price": 0.01307 + }, + "9MBzpyMRkj2r5nTQZMMnxnCm5j1MAAFSYUtbSKjAF3WU": { + "decimals": 9, + "name": "Zoomer", + "symbol": "ZOOMER", + "address": "9MBzpyMRkj2r5nTQZMMnxnCm5j1MAAFSYUtbSKjAF3WU", + "holdedAmount": 14933.802262203, + "price": 0.01624 + }, + "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr": { + "decimals": 9, + "name": "POPCAT", + "symbol": "POPCAT", + "address": "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr", + "holdedAmount": 0.000847952, + "price": 1.35 + }, + "ENKS64JiF1zqUoDK8co94H56jyeSLk7reCL9JMgb9kvN": { + "decimals": 9, + "name": "KODOG", + "symbol": "KODOG", + "address": "ENKS64JiF1zqUoDK8co94H56jyeSLk7reCL9JMgb9kvN", + "holdedAmount": 99.0, + "price": 0.0 + }, + "8yJ15ee2AUQmwbWPxXLTTeBTzyMGn4MtSRKMqVHw1J1G": { + "decimals": 6, + "name": "KITTY AI", + "symbol": "KITTY", + "address": "8yJ15ee2AUQmwbWPxXLTTeBTzyMGn4MtSRKMqVHw1J1G", + "holdedAmount": 129276.709668, + "price": 0.0009348 + }, + "Fch1oixTPri8zxBnmdCEADoJW2toyFHxqDZacQkwdvSP": { + "decimals": 9, + "name": "HARAMBE", + "symbol": "HARAMBE", + "address": "Fch1oixTPri8zxBnmdCEADoJW2toyFHxqDZacQkwdvSP", + "holdedAmount": 64709.32823393, + "price": 0.04215 + }, + "5AnPDx9GposBi9jSW2dFfE5QQD3FmXbudoquMNDxpump": { + "decimals": 6, + "holdedAmount": 96454.077139, + "name": "Dollar", + "symbol": "DOLLAR", + "address": "5AnPDx9GposBi9jSW2dFfE5QQD3FmXbudoquMNDxpump", + "price": 0.001738 + }, + "6n7Janary9fqzxKaJVrhL9TG2F61VbAtwUMu1YZscaQS": { + "decimals": 6, + "holdedAmount": 165800.081237, + "name": "Ansem's Cat", + "symbol": "Hobbes", + "address": "6n7Janary9fqzxKaJVrhL9TG2F61VbAtwUMu1YZscaQS", + "price": 0.001806 + }, + "9jaZhJM6nMHTo4hY9DGabQ1HNuUWhJtm7js1fmKMVpkN": { + "decimals": 9, + "name": "AMC", + "symbol": "AMC", + "address": "9jaZhJM6nMHTo4hY9DGabQ1HNuUWhJtm7js1fmKMVpkN", + "holdedAmount": 151990.888522526, + "price": 0.001647 + }, + "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB": { + "decimals": 6, + "name": "USDT", + "symbol": "USDT", + "address": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", + "holdedAmount": 0.060209, + "price": 0.9998 + }, + "8vCAUbxejdtaxn6jnX5uaQTyTZLmXALg9u1bvFCAjtx7": { + "decimals": 6, + "name": "ZACK MORRIS", + "symbol": "ZACK", + "address": "8vCAUbxejdtaxn6jnX5uaQTyTZLmXALg9u1bvFCAjtx7", + "holdedAmount": 7313.78243, + "price": 0.02023 + }, + "EKEWAk7hfnwfR8DBb1cTayPPambqyC7pwNiYkaYQKQHp": { + "decimals": 6, + "name": "Roaring Kitty", + "symbol": "KITTY", + "address": "EKEWAk7hfnwfR8DBb1cTayPPambqyC7pwNiYkaYQKQHp", + "holdedAmount": 228658.544423, + "price": 0.003091 + }, + "FtHCi9cxJSSizrzMzsPjAfTfJi32V1CGRDM5Skqn4QBF": { + "decimals": 6, + "name": "pixi", + "symbol": "pixi", + "address": "FtHCi9cxJSSizrzMzsPjAfTfJi32V1CGRDM5Skqn4QBF", + "holdedAmount": 211191.26677, + "price": 0.001234 + }, + "BuxH23osRyFFLbWG3czrTsfBQYbxzVZ8f7QV4cjTHN5x": { + "decimals": 6, + "name": "John", + "symbol": "JOHN", + "address": "BuxH23osRyFFLbWG3czrTsfBQYbxzVZ8f7QV4cjTHN5x", + "holdedAmount": 69195.568536, + "price": 0.004173 + }, + "J7tYmq2JnQPvxyhcXpCDrvJnc9R5ts8rv7tgVHDPsw7U": { + "decimals": 6, + "name": "George Droyd", + "symbol": "FLOYDAI", + "address": "J7tYmq2JnQPvxyhcXpCDrvJnc9R5ts8rv7tgVHDPsw7U", + "holdedAmount": 22523.013616, + "price": 0.007335 } } \ No newline at end of file