try even if we report no ballance
This commit is contained in:
parent
3471f6aa6d
commit
12769cd3cc
@ -58,8 +58,6 @@ error_logger.setLevel(logging.ERROR)
|
|||||||
error_logger.addHandler(error_file_handler)
|
error_logger.addHandler(error_file_handler)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
||||||
ENV_FILE = '.env'
|
ENV_FILE = '.env'
|
||||||
@ -911,7 +909,7 @@ async def process_log(log_result):
|
|||||||
logging.error(f"Error fetching token prices: {e}")
|
logging.error(f"Error fetching token prices: {e}")
|
||||||
|
|
||||||
message_text = (
|
message_text = (
|
||||||
f"<b>Swap detected:</b>\n"
|
f"<b>Swap detected: </b>\n"
|
||||||
f"Token In: {tr_details['symbol_in']} ({tr_details['token_in']})\n"
|
f"Token In: {tr_details['symbol_in']} ({tr_details['token_in']})\n"
|
||||||
f"Token Out: {tr_details['symbol_out']} ({tr_details['token_out']})\n"
|
f"Token Out: {tr_details['symbol_out']} ({tr_details['token_out']})\n"
|
||||||
f"Amount In USD: {tr_details['amount_in_USD']:.2f}\n"
|
f"Amount In USD: {tr_details['amount_in_USD']:.2f}\n"
|
||||||
@ -990,91 +988,97 @@ async def follow_move(move):
|
|||||||
# amount_to_swap = amount_to_swap * 0.99
|
# amount_to_swap = amount_to_swap * 0.99
|
||||||
|
|
||||||
if your_balance >= amount_to_swap:
|
if your_balance >= amount_to_swap:
|
||||||
try:
|
|
||||||
# Convert to lamports
|
|
||||||
# if decimals is 6, then amount = amount * 1e6; if 9, then amount = amount * 1e9
|
|
||||||
amount = int(amount_to_swap * 10**token_info.get('decimals') )
|
|
||||||
|
|
||||||
try:
|
|
||||||
notification = (
|
|
||||||
f"<b>Initiating move:</b>\n (decimals: {token_info.get('decimals')})\n"
|
|
||||||
f"Swapping {move['percentage_swapped']:.2f}% ({amount_to_swap:.2f}) {token_name_in} for {token_name_out}"
|
|
||||||
)
|
|
||||||
logging.info(notification)
|
|
||||||
error_logger.info(notification)
|
|
||||||
await send_telegram_message(notification)
|
|
||||||
except Exception as e:
|
|
||||||
logging.error(f"Error sending notification: {e}")
|
|
||||||
|
|
||||||
for retry in range(2):
|
|
||||||
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=100, # Increased to 1%
|
|
||||||
)
|
|
||||||
error_logger.info(f"Initiating move. Transaction data:\n {transaction_data}")
|
|
||||||
raw_transaction = VersionedTransaction.from_bytes(base64.b64decode(transaction_data))
|
|
||||||
signature = private_key.sign_message(message.to_bytes_versioned(raw_transaction.message))
|
|
||||||
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)
|
|
||||||
|
|
||||||
transaction_id = json.loads(result.to_json())['result']
|
|
||||||
print(f"Follow Transaction Sent: https://solscan.io/tx/{transaction_id}")
|
|
||||||
send_telegram_message(f"Follow Transaction Sent: {transaction_id}")
|
|
||||||
tx_details = await 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(5)
|
|
||||||
await 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"<b>Move Followed:</b>\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\n<b>Transaction:</b> <a href='https://solscan.io/tx/{transaction_id}'>{transaction_id}</a>"
|
|
||||||
)
|
|
||||||
|
|
||||||
else:
|
|
||||||
notification = (
|
|
||||||
f"<b>Move Followed:</b>\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\n<b>Transaction:</b> <a href='https://solscan.io/tx/{transaction_id}'>{transaction_id}</a>"
|
|
||||||
)
|
|
||||||
logging.info(notification)
|
|
||||||
await send_telegram_message(notification)
|
|
||||||
except Exception as e:
|
|
||||||
logging.error(f"Error sending notification: {e}")
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
error_message = f"<b>Swap Follow Error:</b>\n{str(e)}"
|
|
||||||
logging.error(error_message)
|
|
||||||
# log the errors to /logs/errors.log
|
|
||||||
error_logger.error(error_message)
|
|
||||||
error_logger.exception(e)
|
|
||||||
# await send_telegram_message(error_message)
|
|
||||||
else:
|
|
||||||
msg = (
|
msg = (
|
||||||
f"<b>Move Not Followed:</b>\n"
|
f"<b>Warning:</b>\n"
|
||||||
f"Insufficient balance to swap {amount_to_swap:.6f} {token_name_in} ({move['token_in']})"
|
f"We have {your_balance:.6f} {token_name_in}. Insufficient balance to swap {amount_to_swap:.6f} ({move['token_in']}). This will probably fail. But we will try anyway."
|
||||||
)
|
)
|
||||||
logging.warning(msg)
|
logging.warning(msg)
|
||||||
await send_telegram_message(msg)
|
await send_telegram_message(msg)
|
||||||
|
try:
|
||||||
|
# Convert to lamports
|
||||||
|
# if decimals is 6, then amount = amount * 1e6; if 9, then amount = amount * 1e9
|
||||||
|
amount = int(amount_to_swap * 10**token_info.get('decimals') )
|
||||||
|
|
||||||
|
try:
|
||||||
|
notification = (
|
||||||
|
f"<b>Initiating move:</b>\n (decimals: {token_info.get('decimals')})\n"
|
||||||
|
f"Swapping {move['percentage_swapped']:.2f}% ({amount_to_swap:.2f}) {token_name_in} for {token_name_out}"
|
||||||
|
)
|
||||||
|
logging.info(notification)
|
||||||
|
error_logger.info(notification)
|
||||||
|
await send_telegram_message(notification)
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"Error sending notification: {e}")
|
||||||
|
|
||||||
|
for retry in range(2):
|
||||||
|
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=100, # Increased to 1%
|
||||||
|
)
|
||||||
|
error_logger.info(f"Initiating move. Transaction data:\n {transaction_data}")
|
||||||
|
raw_transaction = VersionedTransaction.from_bytes(base64.b64decode(transaction_data))
|
||||||
|
signature = private_key.sign_message(message.to_bytes_versioned(raw_transaction.message))
|
||||||
|
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)
|
||||||
|
|
||||||
|
transaction_id = json.loads(result.to_json())['result']
|
||||||
|
print(f"Follow Transaction Sent: https://solscan.io/tx/{transaction_id}")
|
||||||
|
send_telegram_message(f"Follow Transaction Sent: {transaction_id}")
|
||||||
|
tx_details = await 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(5)
|
||||||
|
await 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"<b>Move Followed:</b>\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\n<b>Transaction:</b> <a href='https://solscan.io/tx/{transaction_id}'>{transaction_id}</a>"
|
||||||
|
)
|
||||||
|
|
||||||
|
else:
|
||||||
|
notification = (
|
||||||
|
f"<b>Move Followed:</b>\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\n<b>Transaction:</b> <a href='https://solscan.io/tx/{transaction_id}'>{transaction_id}</a>"
|
||||||
|
)
|
||||||
|
logging.info(notification)
|
||||||
|
await send_telegram_message(notification)
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"Error sending notification: {e}")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
error_message = f"<b>Swap Follow Error:</b>\n{str(e)}"
|
||||||
|
logging.error(error_message)
|
||||||
|
# log the errors to /logs/errors.log
|
||||||
|
error_logger.error(error_message)
|
||||||
|
error_logger.exception(e)
|
||||||
|
# await send_telegram_message(error_message)
|
||||||
|
# else:
|
||||||
|
# msg = (
|
||||||
|
# f"<b>Move Not Followed:</b>\n"
|
||||||
|
# f"Insufficient balance to swap {amount_to_swap:.6f} {token_name_in} ({move['token_in']})"
|
||||||
|
# )
|
||||||
|
# logging.warning(msg)
|
||||||
|
# await send_telegram_message(msg)
|
||||||
|
|
||||||
|
|
||||||
# Helper functions (implement these according to your needs)
|
# Helper functions (implement these according to your needs)
|
||||||
@ -1181,7 +1185,6 @@ if not pk:
|
|||||||
|
|
||||||
|
|
||||||
async def main():
|
async def main():
|
||||||
# Initialize logging
|
|
||||||
await send_telegram_message("Solana Agent Started. Connecting to mainnet...")
|
await send_telegram_message("Solana Agent Started. Connecting to mainnet...")
|
||||||
asyncio.create_task( list_initial_wallet_states())
|
asyncio.create_task( list_initial_wallet_states())
|
||||||
await subscribe_to_wallet()
|
await subscribe_to_wallet()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user