Merge branch 'stable' of https://git.d-popov.com/popov/ai-kevin into stable

This commit is contained in:
Dobromir Popov 2024-10-16 12:15:47 +03:00
commit be0e9b54ac
3 changed files with 154 additions and 41 deletions

12
.vscode/launch.json vendored
View File

@ -39,8 +39,8 @@
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"env": {
"NODE_ENV": "demo"
"OPENAI_API_KEY":
"NODE_ENV": "demo",
"OPENAI_API_KEY":""
},
"skipFiles": [
"<node_internals>/**"
@ -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}",

View File

@ -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))

View File

@ -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
}
}