From 22d2fcbbd8263ca053c017cbded0f01a4a0480e8 Mon Sep 17 00:00:00 2001 From: Dobromir Popov Date: Mon, 14 Oct 2024 22:40:53 +0300 Subject: [PATCH 1/7] env --- crypto/sol/.env | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crypto/sol/.env b/crypto/sol/.env index ab435f5..120b3de 100644 --- a/crypto/sol/.env +++ b/crypto/sol/.env @@ -9,7 +9,8 @@ TELEGRAM_BOT_TOKEN="6805059978:AAHNJKuOeazMSJHc3-BXRCsFfEVyFHeFnjw" DISPLAY_CURRENCY=USD # Niki's to Sync: [PROD] - FOLLOWED_WALLET="7keSmTZozjmuX66gd9GBSJYEHnMqsyutWpvuuKtXZKDH" YOUR_WALLET="7QXGLRjvyFAmxdRaP9Wk18KwWTMfspF4Na2sr3o3PzxV" +FOLLOWED_WALLET="7keSmTZozjmuX66gd9GBSJYEHnMqsyutWpvuuKtXZKDH" +YOUR_WALLET="7QXGLRjvyFAmxdRaP9Wk18KwWTMfspF4Na2sr3o3PzxV" # Sync to main [DEV] # FOLLOWED_WALLET="7QXGLRjvyFAmxdRaP9Wk18KwWTMfspF4Na2sr3o3PzxV" From b779f9145f18790909a00ea8dcfca6b5664daa89 Mon Sep 17 00:00:00 2001 From: Dobromir Popov Date: Tue, 15 Oct 2024 08:50:36 +0300 Subject: [PATCH 2/7] increase slippage --- crypto/sol/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crypto/sol/app.py b/crypto/sol/app.py index 6efbe72..88552ac 100644 --- a/crypto/sol/app.py +++ b/crypto/sol/app.py @@ -1062,7 +1062,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=200, # Increased to 1% ) logging.info(f"Initiating move. Transaction data:\n {transaction_data}") error_logger.info(f"Initiating move. Transaction data:\n {transaction_data}") From 6bb3ec23176ca4bdf404ba2ffc39498191e58886 Mon Sep 17 00:00:00 2001 From: Dobromir Popov Date: Tue, 15 Oct 2024 08:58:23 +0300 Subject: [PATCH 3/7] slippage 3% --- crypto/sol/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crypto/sol/app.py b/crypto/sol/app.py index 88552ac..74cc8f6 100644 --- a/crypto/sol/app.py +++ b/crypto/sol/app.py @@ -1062,7 +1062,7 @@ async def follow_move(move): input_mint=move['token_in'], output_mint=move['token_out'], amount=amount, - slippage_bps=200, # 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}") From c8fdbf3c613c24ad4941ae466a5ae8bb8f5d405e Mon Sep 17 00:00:00 2001 From: Dobromir Popov Date: Tue, 15 Oct 2024 09:45:26 +0300 Subject: [PATCH 4/7] fix resubscribe timeout --- crypto/sol/app.py | 2 +- crypto/sol/logs/token_info.json | 136 +++++++++++++++++++++++++++++--- 2 files changed, 125 insertions(+), 13 deletions(-) diff --git a/crypto/sol/app.py b/crypto/sol/app.py index 74cc8f6..3ab76e2 100644 --- a/crypto/sol/app.py +++ b/crypto/sol/app.py @@ -1140,7 +1140,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): 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 From 6ab6e301ec6495f0dbb7b1c9b4088da24292ca64 Mon Sep 17 00:00:00 2001 From: Dobromir Popov Date: Tue, 15 Oct 2024 11:01:53 +0300 Subject: [PATCH 5/7] fix multiple recv() hooks on the same WS --- crypto/sol/app.py | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/crypto/sol/app.py b/crypto/sol/app.py index 3ab76e2..c14bde0 100644 --- a/crypto/sol/app.py +++ b/crypto/sol/app.py @@ -1176,7 +1176,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 +1198,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) @@ -1236,22 +1236,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 process_messages(websocket) except Exception as e: logger.error(f"An unexpected error occurred: {e}") return None @@ -1268,14 +1253,18 @@ 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: + subscription_id = response_data['result'] + logger.info(f"Subscription successful. Subscription id: {subscription_id}") + 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)) From 1ee8c6cb0b1587bb6101895da904a8f27656b362 Mon Sep 17 00:00:00 2001 From: Dobromir Popov Date: Tue, 15 Oct 2024 22:53:29 +0300 Subject: [PATCH 6/7] fix tr size, await tg messages --- crypto/sol/app.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/crypto/sol/app.py b/crypto/sol/app.py index c14bde0..9b79402 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 @@ -1236,7 +1237,7 @@ async def subscribe(websocket): try: await websocket.send(json.dumps(request)) logger.info("Subscription request sent") - return process_messages(websocket) + return await process_messages(websocket) except Exception as e: logger.error(f"An unexpected error occurred: {e}") return None @@ -1261,8 +1262,13 @@ async def process_messages(websocket): logger.debug(f"Received response: {response_data}") if 'result' in response_data: - subscription_id = response_data['result'] - logger.info(f"Subscription successful. Subscription id: {subscription_id}") + 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'] From e5d3a8025956c51138e2e0d504be182f73cfee10 Mon Sep 17 00:00:00 2001 From: Dobromir Popov Date: Wed, 16 Oct 2024 11:50:08 +0300 Subject: [PATCH 7/7] sync launch ad stability --- .vscode/launch.json | 12 +++++++++--- crypto/sol/app.py | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) 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 9b79402..a3040a6 100644 --- a/crypto/sol/app.py +++ b/crypto/sol/app.py @@ -1217,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}")