From d9aee80925c910ccfe83e7b17ceaf2cf3a0295d2 Mon Sep 17 00:00:00 2001 From: Dobromir Popov Date: Wed, 2 Oct 2024 17:33:01 +0300 Subject: [PATCH] subscription works --- crypto/sol/.env | 5 ++- crypto/sol/app.py | 61 ++++++++++++++++++++++--------------- crypto/sol/example.rpc.json | 51 +++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+), 25 deletions(-) create mode 100644 crypto/sol/example.rpc.json diff --git a/crypto/sol/.env b/crypto/sol/.env index 37bcf00..6f7332e 100644 --- a/crypto/sol/.env +++ b/crypto/sol/.env @@ -1,5 +1,8 @@ SOLANA_NET_URL="wss://api.mainnet-beta.solana.com" DEVELOPER_CHAT_ID="777826553" -FOLLOWED_WALLET="9U7D916zuQ8qcL9kQZqkcroWhHGho5vD8VNekvztrutN" +# Niki's +# FOLLOWED_WALLET="9U7D916zuQ8qcL9kQZqkcroWhHGho5vD8VNekvztrutN" +# My test +FOLLOWED_WALLET="7QXGLRjvyFAmxdRaP9Wk18KwWTMfspF4Na2sr3o3PzxV" YOUR_WALLET="65nzyZXTLC81MthTo52a2gRJjqryTizWVqpK2fDKLye5" TELEGRAM_BOT_TOKEN="6805059978:AAHNJKuOeazMSJHc3-BXRCsFfEVyFHeFnjw" \ No newline at end of file diff --git a/crypto/sol/app.py b/crypto/sol/app.py index bafaa14..fd5df46 100644 --- a/crypto/sol/app.py +++ b/crypto/sol/app.py @@ -189,30 +189,43 @@ async def follow_move(move): await send_telegram_message(message) async def on_logs(log): - print(f"Received log: {log}") - if 'err' in log and log['err']: - return - - tx = log['signature'] - tx_result = await solana_client.get_transaction(tx) - - if tx_result and 'result' in tx_result and tx_result['result']: - transaction = tx_result['result']['transaction'] - message = transaction['message'] - for instruction in message['instructions']: - if instruction['programId'] == TOKEN_ADDRESSES['SOL']: - # This is a token transfer - from_pubkey = instruction['accounts'][0] - to_pubkey = instruction['accounts'][1] - amount = int(instruction['data'], 16) / 1e9 # Convert lamports to SOL - - if from_pubkey == FOLLOWED_WALLET: - move = { - 'token': 'SOL', - 'amount': amount, - 'to_token': 'Unknown' # You might want to determine this based on the receiving address - } - await follow_move(move) + try: + print(f"Received log: {log}") + if 'err' in log and log['err']: + return + + if 'value' in log and 'logs' in log['value']: + tx = log['value']['signature'] + logs = log['value']['logs'] + + # Fetch transaction details + tx_result = await solana_client.get_transaction(tx) + + if tx_result and 'result' in tx_result and tx_result['result']: + transaction = tx_result['result']['transaction'] + message = transaction['message'] + + for log_entry in logs: + if 'Program log: Instruction: Swap' in log_entry: + # Handle swap event + for instruction in message['instructions']: + if instruction['programId'] == TOKEN_ADDRESSES['SOL']: + # This is a token transfer + from_pubkey = instruction['accounts'][0] + to_pubkey = instruction['accounts'][1] + amount = int(instruction['data'], 16) / 1e9 # Convert lamports to SOL + + if from_pubkey == FOLLOWED_WALLET: + move = { + 'token': 'SOL', + 'amount': amount, + 'to_token': 'Unknown' # You might want to determine this based on the receiving address + } + await follow_move(move) + else: + print(f"Unexpected log format: {log}") + except: + print(f"error logging: {log}") async def subscribe_to_wallet(): uri = SOLANA_URL async with websockets.connect(uri) as websocket: diff --git a/crypto/sol/example.rpc.json b/crypto/sol/example.rpc.json new file mode 100644 index 0000000..247d6bb --- /dev/null +++ b/crypto/sol/example.rpc.json @@ -0,0 +1,51 @@ +{ + "jsonrpc": "2.0", + "method": "logsNotification", + "p..."subscription":687833}}' [5623 bytes] +Received log: {'context': {'slot': 293284750 + }, 'value': {'signature': '2fyKzryr86FVD6fi8C3CDpdbcQW1MhtV48n1iMiD2Nhi9DizLzpNiGHbrnXkvSHvntmGxLddEhf4kvuSPzs4tvui', 'err': None, 'logs': ['Program ComputeBudget111111111111111111111111111111 invoke [ + 1 + ]', 'Program ComputeBudget111111111111111111111111111111 success', 'Program ComputeBudget111111111111111111111111111111 invoke [ + 1 + ]', 'Program ComputeBudget111111111111111111111111111111 success', 'Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [ + 1 + ]', 'Program log: Instruction: SharedAccountsRoute', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [ + 2 + ]', 'Program log: Instruction: Transfer', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 308347 compute units', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success', 'Program Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB invoke [ + 2 + ]', 'Program log: Instruction: Swap', 'Program 24Uqj9JCLxUeoC3hGfh5W3s9FM9uCHDS2SG3LYwBpyTi invoke [ + 3 + ]', 'Program log: Instruction: Deposit', 'Program data: H159WuM0PbqlwOWsDgAAAKXA5awOAAAA', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [ + 4 + ]', 'Program log: Instruction: Transfer', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 245952 compute units', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [ + 4 + ]', 'Program log: Instruction: MintTo', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4492 of 238215 compute units', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success', 'Program 24Uqj9JCLxUeoC3hGfh5W3s9FM9uCHDS2SG3LYwBpyTi consumed 30967 of 261328 compute units', 'Program 24Uqj9JCLxUeoC3hGfh5W3s9FM9uCHDS2SG3LYwBpyTi success', 'Program 24Uqj9JCLxUeoC3hGfh5W3s9FM9uCHDS2SG3LYwBpyTi invoke [ + 3 + ]', 'Program log: Instruction: Withdraw', 'Program data: dPRh6GcfmDpCiGtKAAAAAEKIa0oAAAAA', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [ + 4 + ]', 'Program log: Instruction: Transfer', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 201327 compute units', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [ + 4 + ]', 'Program log: Instruction: Burn', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4616 of 193814 compute units', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success', 'Program 24Uqj9JCLxUeoC3hGfh5W3s9FM9uCHDS2SG3LYwBpyTi consumed 30630 of 216508 compute units', 'Program 24Uqj9JCLxUeoC3hGfh5W3s9FM9uCHDS2SG3LYwBpyTi success', 'Program data: UWzjvs3QCsSFwOWsDgAAAEKIa0oAAAAAU6iRJQAAAAAAAAAAAAAAAAAAAAAAAAAA', 'Program Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB consumed 118660 of 294582 compute units', 'Program Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB success', 'Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [ + 2 + ]', 'Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 471 of 173550 compute units', 'Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 success', 'Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc invoke [ + 2 + ]', 'Program log: Instruction: Swap', 'Program log: fee_growth: 6608640885', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [ + 3 + ]', 'Program log: Instruction: Transfer', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 134531 compute units', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [ + 3 + ]', 'Program log: Instruction: Transfer', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4736 of 126826 compute units', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success', 'Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc consumed 46541 of 165885 compute units', 'Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc success', 'Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [ + 2 + ]', 'Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 471 of 117029 compute units', 'Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 success', 'Program 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 invoke [ + 2 + ]', 'Program log: ray_log: A8ZohAAAAAAAAAAAAAAAAAABAAAAAAAAAKk8pB0AAAAAjou8M3XdiwBroLt8/QIAAA9s6CEYAAAA', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [ + 3 + ]', 'Program log: Instruction: Transfer', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4736 of 90401 compute units', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [ + 3 + ]', 'Program log: Instruction: Transfer', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 82684 compute units', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success', 'Program 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 consumed 30542 of 107727 compute units', 'Program 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 success', 'Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [ + 2 + ]', 'Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 471 of 74811 compute units', 'Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 success', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [ + 2 + ]', 'Program log: Instruction: Transfer', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 70533 compute units', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success', 'Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 260421 of 324867 compute units', 'Program return: JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 D2zoIRgAAAA=', 'Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 success' + ] + } + } \ No newline at end of file