Merge branch 'master' of https://git.d-popov.com/popov/ai-kevin - reset
This commit is contained in:
@ -1,19 +1,26 @@
|
||||
|
||||
SOLANA_WS_URL="wss://api.mainnet-beta.solana.com"
|
||||
SOLANA_WS_URL2="wss://mainnet.rpcpool.com"
|
||||
SOLANA_HTTP_URL="https://api.mainnet-beta.solana.com"
|
||||
|
||||
DEVELOPER_CHAT_ID="777826553"
|
||||
TELEGRAM_BOT_TOKEN="6805059978:AAHNJKuOeazMSJHc3-BXRCsFfEVyFHeFnjw"
|
||||
|
||||
DISPLAY_CURRENCY=USD
|
||||
|
||||
# Niki's to Sync: [PROD]
|
||||
FOLLOWED_WALLET="7keSmTZozjmuX66gd9GBSJYEHnMqsyutWpvuuKtXZKDH"
|
||||
YOUR_WALLET="7QXGLRjvyFAmxdRaP9Wk18KwWTMfspF4Na2sr3o3PzxV"
|
||||
PK=3FxXjNrtEqwAKYj4BpkuLAJPzuKRWykkvjeBYQEVuFqRFWRm9eVcWrrYKbns2M31ESMoASG2WV39w9Dpx532sPUH
|
||||
|
||||
# Sync to main [DEV]
|
||||
#FOLLOWED_WALLET="7QXGLRjvyFAmxdRaP9Wk18KwWTMfspF4Na2sr3o3PzxV"
|
||||
#YOUR_WALLET="65nzyZXTLC81MthTo52a2gRJjqryTizWVqpK2fDKLye5"
|
||||
|
||||
SOLANA_WS_URL="wss://api.mainnet-beta.solana.com"
|
||||
SOLANA_WS_URL2="wss://mainnet.rpcpool.com"
|
||||
SOLANA_HTTP_URL="https://api.mainnet-beta.solana.com"
|
||||
|
||||
# prod, @kevin_ai_robot:
|
||||
BOT_NAME="Solower"
|
||||
DEVELOPER_CHAT_ID="777826553" # https://api.telegram.org/bot{token}/getUpdates
|
||||
TELEGRAM_BOT_TOKEN="6805059978:AAHNJKuOeazMSJHc3-BXRCsFfEVyFHeFnjw"
|
||||
|
||||
# dev, @artitherobot:
|
||||
BOT_NAME="DEV"
|
||||
DEVELOPER_CHAT_ID="777826553"
|
||||
TELEGRAM_BOT_TOKEN="6749075936:AAHUHiPTDEIu6JH7S2fQdibwsu6JVG3FNG0"
|
||||
|
||||
DISPLAY_CURRENCY=USD
|
||||
|
||||
# Niki's to Sync: [PROD]
|
||||
FOLLOWED_WALLET="7keSmTZozjmuX66gd9GBSJYEHnMqsyutWpvuuKtXZKDH"
|
||||
YOUR_WALLET="7QXGLRjvyFAmxdRaP9Wk18KwWTMfspF4Na2sr3o3PzxV"
|
||||
PK=3FxXjNrtEqwAKYj4BpkuLAJPzuKRWykkvjeBYQEVuFqRFWRm9eVcWrrYKbns2M31ESMoASG2WV39w9Dpx532sPUH
|
||||
|
||||
# Sync to main [DEV]
|
||||
#FOLLOWED_WALLET="7QXGLRjvyFAmxdRaP9Wk18KwWTMfspF4Na2sr3o3PzxV"
|
||||
#YOUR_WALLET="65nzyZXTLC81MthTo52a2gRJjqryTizWVqpK2fDKLye5"
|
||||
#PK=5ccrMf3BFFE1HMsXt17btK1tMSNay7aBoY27saPHrqg2JEjxKBmBbxUABD9Jh7Gisf1bhM51oGzWdyLUgHdrUJPw
|
@ -1,15 +0,0 @@
|
||||
|
||||
SOLANA_WS_URL="wss://api.mainnet-beta.solana.com"
|
||||
SOLANA_WS_URL2="wss://mainnet.rpcpool.com"
|
||||
SOLANA_HTTP_URL="https://api.mainnet-beta.solana.com"
|
||||
DEVELOPER_CHAT_ID="777826553"
|
||||
# Niki's
|
||||
# FOLLOWED_WALLET="9U7D916zuQ8qcL9kQZqkcroWhHGho5vD8VNekvztrutN"
|
||||
# My test Brave sync wallet
|
||||
FOLLOWED_WALLET="7QXGLRjvyFAmxdRaP9Wk18KwWTMfspF4Na2sr3o3PzxV"
|
||||
|
||||
TELEGRAM_BOT_TOKEN="6805059978:AAHNJKuOeazMSJHc3-BXRCsFfEVyFHeFnjw"
|
||||
DISPLAY_CURRENCY=USD
|
||||
|
||||
YOUR_WALLET="65nzyZXTLC81MthTo52a2gRJjqryTizWVqpK2fDKLye5"
|
||||
PK={}
|
@ -1,11 +1,12 @@
|
||||
import asyncio
|
||||
import uvicorn
|
||||
from asgiref.wsgi import WsgiToAsgi
|
||||
import websockets
|
||||
import json
|
||||
from flask import Flask, render_template, request, jsonify
|
||||
from solana.rpc.async_api import AsyncClient
|
||||
from solana.transaction import Signature
|
||||
from solana.rpc.websocket_api import connect
|
||||
from solana.rpc.types import TokenAccountOpts, TxOpts
|
||||
from solana.rpc.commitment import Confirmed, Processed
|
||||
from solana.transaction import Transaction
|
||||
from spl.token.client import Token
|
||||
@ -24,8 +25,8 @@ from solders.instruction import CompiledInstruction
|
||||
from solders import message
|
||||
from jupiter_python_sdk.jupiter import Jupiter, Jupiter_DCA
|
||||
from dexscreener import DexscreenerClient
|
||||
from telegram import Bot
|
||||
from telegram.constants import ParseMode
|
||||
from solana.rpc.types import TokenAccountOpts, TxOpts
|
||||
|
||||
import datetime
|
||||
import logging
|
||||
from logging.handlers import RotatingFileHandler
|
||||
@ -35,7 +36,6 @@ from dotenv import load_dotenv,set_key
|
||||
import aiohttp
|
||||
from typing import List, Dict
|
||||
import requests
|
||||
import threading
|
||||
import re
|
||||
from typing import List, Dict, Any, Tuple
|
||||
import random
|
||||
@ -131,6 +131,7 @@ def get_latest_log_file():
|
||||
return None
|
||||
|
||||
# Flask route to retry processing the last log
|
||||
@app.route('/retry', methods=['GET'])
|
||||
@app.route('/retry-last-log', methods=['GET'])
|
||||
async def retry_last_log():
|
||||
latest_log_file = get_latest_log_file()
|
||||
@ -155,9 +156,42 @@ async def retry_last_log():
|
||||
return jsonify({"error": "Failed to process log"}), 500
|
||||
|
||||
|
||||
#const webhookPath = `/tr/${followedWallet.toBase58()}/${logs.signature}`;
|
||||
@app.route('/tr/<wallet>/<tx_signature>', methods=['GET', 'POST'])
|
||||
async def transaction_notified(wallet, tx_signature):
|
||||
try:
|
||||
logger.info(f"Processing transaction notification for wallet: {wallet}, tx: {tx_signature}")
|
||||
# Process the transaction
|
||||
# tr = await get_swap_transaction_details(tx_signature)
|
||||
tr = await get_transaction_details_info(tx_signature, [])
|
||||
# ToDo - probably optimize
|
||||
await get_token_metadata_symbol(tr['token_in'])
|
||||
await get_token_metadata_symbol(tr['token_out'])
|
||||
await follow_move(tr)
|
||||
await save_token_info()
|
||||
return jsonify(tr), 200
|
||||
except Exception as e:
|
||||
logging.error(f"Error processing transaction: {e}")
|
||||
return jsonify({"error": "Failed to process transaction"}), 500
|
||||
|
||||
|
||||
|
||||
# Configuration
|
||||
DEVELOPER_CHAT_ID = os.getenv("DEVELOPER_CHAT_ID")
|
||||
FOLLOWED_WALLET = os.getenv("FOLLOWED_WALLET")
|
||||
YOUR_WALLET = os.getenv("YOUR_WALLET")
|
||||
TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
|
||||
SOLANA_WS_URL = os.getenv("SOLANA_WS_URL")
|
||||
SOLANA_HTTP_URL = os.getenv("SOLANA_HTTP_URL")
|
||||
DISPLAY_CURRENCY = os.getenv('DISPLAY_CURRENCY', 'USD')
|
||||
|
||||
|
||||
# Use the production Solana RPC endpoint
|
||||
solana_client = AsyncClient(SOLANA_HTTP_URL)
|
||||
dexscreener_client = DexscreenerClient()
|
||||
|
||||
|
||||
|
||||
# Create the bot with the custom connection pool
|
||||
bot = None
|
||||
# Token addresses (initialize with some known tokens)
|
||||
TOKEN_ADDRESSES = {
|
||||
"SOL": "So11111111111111111111111111111111111111112",
|
||||
@ -173,208 +207,27 @@ except Exception as e:
|
||||
logging.error(f"Error loading token info: {str(e)}")
|
||||
|
||||
# # # # # # # # # # TELEGRAM # # # # # # # # # #
|
||||
async def send_telegram_message(message):
|
||||
if not telegram_utils.bot:
|
||||
try:
|
||||
await bot.send_message(chat_id=DEVELOPER_CHAT_ID, text=message, parse_mode=ParseMode.HTML)
|
||||
logging.info(f"Telegram message sent: {message}")
|
||||
# logging.info(f"Telegram message dummy sent: {message}")
|
||||
asyncio.run(telegram_utils.initialize())
|
||||
except Exception as e:
|
||||
logging.error(f"Error sending Telegram message: {str(e)}")
|
||||
logging.error(f"Error initializing Telegram bot: {str(e)}")
|
||||
# async def telegram_utils.send_telegram_message(message):
|
||||
# try:
|
||||
# await bot.send_message(chat_id=DEVELOPER_CHAT_ID, text=f"[{BOT_NAME}] {message}", parse_mode=ParseMode.HTML)
|
||||
# logging.info(f"Telegram message sent: {message}")
|
||||
# # logging.info(f"Telegram message dummy sent: {message}")
|
||||
# except Exception as e:
|
||||
# logging.error(f"Error sending Telegram message: {str(e)}")
|
||||
|
||||
|
||||
|
||||
# # # # # # # # # # DATABASE # # # # # # # # # #
|
||||
|
||||
|
||||
|
||||
# # # # # # # # # # CRYPTO PUBLIC # # # # # # # # # #
|
||||
|
||||
async def get_token_prices(token_addresses: List[str]) -> Dict[str, float]:
|
||||
global TOKENS_INFO
|
||||
|
||||
# Skip for USD
|
||||
prices = {addr: 1.0 for addr in token_addresses if addr == "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"}
|
||||
remaining_tokens = [addr for addr in token_addresses if addr not in prices]
|
||||
|
||||
# Try CoinGecko
|
||||
coingecko_prices = await get_prices_from_coingecko(remaining_tokens)
|
||||
prices.update(coingecko_prices)
|
||||
|
||||
|
||||
# For remaining missing tokens, try Jupiter
|
||||
missing_tokens = set(remaining_tokens) - set(prices.keys())
|
||||
if missing_tokens:
|
||||
jupiter_prices = await get_prices_from_jupiter(list(missing_tokens))
|
||||
prices.update(jupiter_prices)
|
||||
|
||||
|
||||
# For tokens not found in CoinGecko, use DexScreener
|
||||
missing_tokens = set(remaining_tokens) - set(coingecko_prices.keys())
|
||||
if missing_tokens:
|
||||
dexscreener_prices = await get_prices_from_dexscreener(list(missing_tokens))
|
||||
prices.update(dexscreener_prices)
|
||||
|
||||
# For remaining missing tokens, try Raydium
|
||||
missing_tokens = set(remaining_tokens) - set(prices.keys())
|
||||
if missing_tokens:
|
||||
raydium_prices = await get_prices_from_raydium(list(missing_tokens))
|
||||
prices.update(raydium_prices)
|
||||
|
||||
# For remaining missing tokens, try Orca
|
||||
missing_tokens = set(remaining_tokens) - set(prices.keys())
|
||||
if missing_tokens:
|
||||
orca_prices = await get_prices_from_orca(list(missing_tokens))
|
||||
prices.update(orca_prices)
|
||||
|
||||
# If any tokens are still missing, set their prices to 0
|
||||
for token in set(token_addresses) - set(prices.keys()):
|
||||
prices[token] = 0.0
|
||||
logging.warning(f"Price not found for token {token}. Setting to 0.")
|
||||
|
||||
for token, price in prices.items():
|
||||
token_info = TOKENS_INFO.setdefault(token, {})
|
||||
if 'symbol' not in token_info:
|
||||
token_info['symbol'] = await get_token_metadata_symbol(token)
|
||||
token_info['price'] = price
|
||||
|
||||
return prices
|
||||
|
||||
|
||||
async def get_prices_from_coingecko(token_addresses: List[str]) -> Dict[str, float]:
|
||||
base_url = "https://api.coingecko.com/api/v3/simple/token_price/solana"
|
||||
prices = {}
|
||||
|
||||
async def fetch_single_price(session, address):
|
||||
params = {
|
||||
"contract_addresses": address,
|
||||
"vs_currencies": DISPLAY_CURRENCY.lower()
|
||||
}
|
||||
try:
|
||||
async with session.get(base_url, params=params) as response:
|
||||
if response.status == 200:
|
||||
data = await response.json()
|
||||
if address in data and DISPLAY_CURRENCY.lower() in data[address]:
|
||||
return address, data[address][DISPLAY_CURRENCY.lower()]
|
||||
else:
|
||||
logging.warning(f"Failed to get price for {address} from CoinGecko. Status: {response.status}")
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching price for {address} from CoinGecko: {str(e)}")
|
||||
return address, None
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
tasks = [fetch_single_price(session, address) for address in token_addresses]
|
||||
results = await asyncio.gather(*tasks)
|
||||
|
||||
for address, price in results:
|
||||
if price is not None:
|
||||
prices[address] = price
|
||||
|
||||
return prices
|
||||
|
||||
async def get_prices_from_dexscreener(token_addresses: List[str]) -> Dict[str, float]:
|
||||
base_url = "https://api.dexscreener.com/latest/dex/tokens/"
|
||||
prices = {}
|
||||
|
||||
try:
|
||||
async with aiohttp.ClientSession() as session:
|
||||
tasks = [fetch_token_data(session, f"{base_url}{address}") for address in token_addresses]
|
||||
results = await asyncio.gather(*tasks)
|
||||
|
||||
for address, result in zip(token_addresses, results):
|
||||
if result and 'pairs' in result and result['pairs']:
|
||||
pair = result['pairs'][0] # Use the first pair (usually the most liquid)
|
||||
prices[address] = float(pair['priceUsd'])
|
||||
else:
|
||||
logging.warning(f"No price data found on DexScreener for token {address}")
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching token prices from DexScreener: {str(e)}")
|
||||
|
||||
return prices
|
||||
|
||||
async def get_prices_from_jupiter(token_addresses: List[str]) -> Dict[str, float]:
|
||||
url = "https://price.jup.ag/v4/price"
|
||||
params = {
|
||||
"ids": ",".join(token_addresses)
|
||||
}
|
||||
prices = {}
|
||||
|
||||
try:
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url, params=params) as response:
|
||||
if response.status == 200:
|
||||
data = await response.json()
|
||||
for address, price_info in data.get('data', {}).items():
|
||||
if 'price' in price_info:
|
||||
prices[address] = float(price_info['price'])
|
||||
else:
|
||||
logging.error(f"Failed to get token prices from Jupiter. Status: {response.status}")
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching token prices from Jupiter: {str(e)}")
|
||||
return prices
|
||||
|
||||
# New function for Raydium
|
||||
async def get_prices_from_raydium(token_addresses: List[str]) -> Dict[str, float]:
|
||||
url = "https://api.raydium.io/v2/main/price"
|
||||
prices = {}
|
||||
|
||||
try:
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url) as response:
|
||||
if response.status == 200:
|
||||
data = await response.json()
|
||||
for address in token_addresses:
|
||||
if address in data:
|
||||
prices[address] = float(data[address])
|
||||
else:
|
||||
logging.error(f"Failed to get token prices from Raydium. Status: {response.status}")
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching token prices from Raydium: {str(e)}")
|
||||
return prices
|
||||
|
||||
# New function for Orca
|
||||
async def get_prices_from_orca(token_addresses: List[str]) -> Dict[str, float]:
|
||||
url = "https://api.orca.so/allTokens"
|
||||
prices = {}
|
||||
|
||||
try:
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url) as response:
|
||||
if response.status == 200:
|
||||
data = await response.json()
|
||||
for token_info in data:
|
||||
if token_info['mint'] in token_addresses:
|
||||
prices[token_info['mint']] = float(token_info['price'])
|
||||
else:
|
||||
logging.error(f"Failed to get token prices from Orca. Status: {response.status}")
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching token prices from Orca: {str(e)}")
|
||||
return prices
|
||||
|
||||
|
||||
async def fetch_token_data(session, url):
|
||||
try:
|
||||
async with session.get(url) as response:
|
||||
if response.status == 200:
|
||||
return await response.json()
|
||||
else:
|
||||
logging.error(f"Failed to fetch data from {url}. Status: {response.status}")
|
||||
return None
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching data from {url}: {str(e)}")
|
||||
return None
|
||||
|
||||
async def get_sol_price() -> float:
|
||||
url = f"https://api.coingecko.com/api/v3/simple/price?ids=solana&vs_currencies={DISPLAY_CURRENCY.lower()}"
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url) as response:
|
||||
if response.status == 200:
|
||||
data = await response.json()
|
||||
return data['solana'][DISPLAY_CURRENCY.lower()]
|
||||
else:
|
||||
logging.error(f"Failed to get SOL price from CoinGecko. Status: {response.status}")
|
||||
return await get_sol_price_from_dexscreener()
|
||||
|
||||
async def get_sol_price_from_dexscreener() -> float:
|
||||
sol_address = "So11111111111111111111111111111111111111112" # Solana's wrapped SOL address
|
||||
prices = await get_prices_from_dexscreener([sol_address])
|
||||
return prices.get(sol_address, 0.0)
|
||||
|
||||
|
||||
# # # # # # # # # # SOLANA BLOCKCHAIN # # # # # # # # # #
|
||||
|
||||
@ -439,44 +292,9 @@ from spl.token.async_client import AsyncToken
|
||||
from spl.token.constants import TOKEN_PROGRAM_ID
|
||||
from borsh_construct import String, CStruct
|
||||
|
||||
async def get_token_metadata_symbol(mint_address):
|
||||
global TOKENS_INFO
|
||||
|
||||
|
||||
|
||||
if mint_address in TOKENS_INFO and 'symbol' in TOKENS_INFO[mint_address]:
|
||||
return TOKENS_INFO[mint_address].get('symbol')
|
||||
|
||||
try:
|
||||
account_data_result = await solana_jsonrpc("getAccountInfo", mint_address)
|
||||
if 'value' in account_data_result and 'data' in account_data_result['value']:
|
||||
account_data_data = account_data_result['value']['data']
|
||||
if 'parsed' in account_data_data and 'info' in account_data_data['parsed']:
|
||||
account_data_info = account_data_data['parsed']['info']
|
||||
if 'decimals' in account_data_info:
|
||||
if mint_address in TOKENS_INFO:
|
||||
TOKENS_INFO[mint_address]['decimals'] = account_data_info['decimals']
|
||||
else:
|
||||
TOKENS_INFO[mint_address] = {'decimals': account_data_info['decimals']}
|
||||
if 'tokenName' in account_data_info:
|
||||
if mint_address in TOKENS_INFO:
|
||||
TOKENS_INFO[mint_address]['name'] = account_data_info['tokenName']
|
||||
else:
|
||||
TOKENS_INFO[mint_address] = {'name': account_data_info['tokenName']}
|
||||
|
||||
metadata = await get_token_metadata(mint_address)
|
||||
if metadata:
|
||||
if mint_address in TOKENS_INFO:
|
||||
TOKENS_INFO[mint_address].update(metadata)
|
||||
else:
|
||||
TOKENS_INFO[mint_address] = metadata
|
||||
await save_token_info()
|
||||
# TOKENS_INFO[mint_address] = metadata
|
||||
# return metadata.get('symbol') or metadata.get('name')
|
||||
return TOKENS_INFO[mint_address].get('symbol')
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching token name for {mint_address}: {str(e)}")
|
||||
return None
|
||||
|
||||
|
||||
METADATA_STRUCT = CStruct(
|
||||
"update_authority" / String,
|
||||
"mint" / String,
|
||||
@ -610,7 +428,7 @@ async def get_wallet_balances(wallet_address, doGetTokenName=True):
|
||||
# sleep for 1 second to avoid rate limiting
|
||||
await asyncio.sleep(2)
|
||||
|
||||
TOKENS_INFO[mint]['holdedAmount'] = round(amount,decimals)
|
||||
TOKENS_INFO[mint]['holdedAmount'] = round(amount, decimals)
|
||||
TOKENS_INFO[mint]['decimals'] = decimals
|
||||
balances[mint] = {
|
||||
'name': token_name or 'N/A',
|
||||
@ -697,244 +515,10 @@ async def get_swap_transaction_details(tx_signature_str):
|
||||
|
||||
return None
|
||||
|
||||
|
||||
# # # RAW Solana API RPC # # #
|
||||
|
||||
#this is the meat of the application
|
||||
async def get_transaction_details_rpc(tx_signature, readfromDump=False):
|
||||
global FOLLOWED_WALLET_VALUE, YOUR_WALLET_VALUE, TOKEN_PRICES, TOKENS_INFO
|
||||
try:
|
||||
if readfromDump and os.path.exists('./logs/transation_details.json'):
|
||||
with open('./logs/transation_details.json', 'r') as f: # trump_swap_tr_details
|
||||
transaction_details = json.load(f)
|
||||
return transaction_details
|
||||
else:
|
||||
transaction_details = await solana_jsonrpc("getTransaction", tx_signature)
|
||||
with open('./logs/transation_details.json', 'w') as f:
|
||||
json.dump(transaction_details, f, indent=2)
|
||||
|
||||
if transaction_details is None:
|
||||
logging.error(f"Error fetching transaction details for {tx_signature}")
|
||||
return None
|
||||
|
||||
# Initialize default result structure
|
||||
parsed_result = {
|
||||
"order_id": None,
|
||||
"token_in": None,
|
||||
"token_out": None,
|
||||
"amount_in": 0,
|
||||
"amount_out": 0,
|
||||
"amount_in_USD": 0,
|
||||
"amount_out_USD": 0,
|
||||
"percentage_swapped": 0
|
||||
}
|
||||
|
||||
# Extract order_id from logs
|
||||
log_messages = transaction_details.get("meta", {}).get("logMessages", [])
|
||||
for log in log_messages:
|
||||
if "order_id" in log:
|
||||
parsed_result["order_id"] = log.split(":")[2].strip()
|
||||
break
|
||||
|
||||
# Extract token transfers from innerInstructions
|
||||
inner_instructions = transaction_details.get('meta', {}).get('innerInstructions', [])
|
||||
for instruction_set in inner_instructions:
|
||||
for instruction in instruction_set.get('instructions', []):
|
||||
if instruction.get('program') == 'spl-token' and instruction.get('parsed', {}).get('type') == 'transferChecked':
|
||||
info = instruction['parsed']['info']
|
||||
mint = info['mint']
|
||||
amount = float(info['tokenAmount']['amount']) / 10 ** info['tokenAmount']['decimals'] # Adjust for decimals
|
||||
|
||||
# Determine which token is being swapped in and out based on zero balances
|
||||
if parsed_result["token_in"] is None and amount > 0:
|
||||
parsed_result["token_in"] = mint
|
||||
parsed_result["amount_in"] = amount
|
||||
|
||||
|
||||
if parsed_result["token_in"] is None or parsed_result["token_out"] is None:
|
||||
# if we've failed to extract token_in and token_out from the transaction details, try a second method
|
||||
inner_instructions = transaction_details.get('meta', {}).get('innerInstructions', [])
|
||||
transfers = []
|
||||
|
||||
for instruction_set in inner_instructions:
|
||||
for instruction in instruction_set.get('instructions', []):
|
||||
if instruction.get('program') == 'spl-token' and instruction.get('parsed', {}).get('type') in ['transfer', 'transferChecked']:
|
||||
info = instruction['parsed']['info']
|
||||
amount = float(info['amount']) if 'amount' in info else float(info['tokenAmount']['amount'])
|
||||
decimals = info['tokenAmount']['decimals'] if 'tokenAmount' in info else 0
|
||||
adjusted_amount = amount / (10 ** decimals)
|
||||
# adjusted_amount = float(info["amount"]) / (10 ** (info["tokenAmount"]["decimals"] if 'tokenAmount' in info else 0))
|
||||
transfers.append({
|
||||
'mint': info.get('mint'),
|
||||
'amount': adjusted_amount,
|
||||
'source': info['source'],
|
||||
'destination': info['destination']
|
||||
})
|
||||
|
||||
# Identify token_in and token_out
|
||||
if len(transfers) >= 2:
|
||||
parsed_result["token_in"] = transfers[0]['mint']
|
||||
parsed_result["amount_in"] = transfers[0]['amount']
|
||||
parsed_result["token_out"] = transfers[-1]['mint']
|
||||
parsed_result["amount_out"] = transfers[-1]['amount']
|
||||
|
||||
# If mint is not provided, query the Solana network for the account data
|
||||
if parsed_result["token_in"] is None or parsed_result["token_out"] is None:
|
||||
#for transfer in transfers:
|
||||
# do only first and last transfer
|
||||
for transfer in [transfers[0], transfers[-1]]:
|
||||
if transfer['mint'] is None:
|
||||
# Query the Solana network for the account data
|
||||
account_data_result = await solana_jsonrpc("getAccountInfo", transfer['source'])
|
||||
|
||||
if 'value' in account_data_result and 'data' in account_data_result['value']:
|
||||
account_data_value = account_data_result['value']
|
||||
account_data_data = account_data_value['data']
|
||||
if 'parsed' in account_data_data and 'info' in account_data_data['parsed']:
|
||||
account_data_info = account_data_data['parsed']['info']
|
||||
if 'mint' in account_data_info:
|
||||
transfer['mint'] = account_data_info['mint']
|
||||
if transfer['mint'] in TOKENS_INFO or 'decimals' not in TOKENS_INFO[transfer['mint']]:
|
||||
await get_token_metadata_symbol(transfer['mint'])
|
||||
# get actual prices
|
||||
current_price = await get_token_prices([transfer['mint']])
|
||||
|
||||
if parsed_result["token_in"] is None:
|
||||
parsed_result["token_in"] = transfer['mint']
|
||||
parsed_result["symbol_in"] = TOKENS_INFO[transfer['mint']]['symbol']
|
||||
parsed_result["amount_in"] = transfer['amount']/10**TOKENS_INFO[transfer['mint']]['decimals']
|
||||
parsed_result["amount_in_USD"] = parsed_result["amount_in"] * TOKENS_INFO[transfer['mint']].get('price', current_price[transfer['mint']])
|
||||
elif parsed_result["token_out"] is None:
|
||||
parsed_result["token_out"] = transfer['mint']
|
||||
parsed_result["symbol_out"] = TOKENS_INFO[transfer['mint']]['symbol']
|
||||
parsed_result["amount_out"] = transfer['amount']/10**TOKENS_INFO[transfer['mint']]['decimals']
|
||||
parsed_result["amount_out_USD"] = parsed_result["amount_out"] * TOKENS_INFO[transfer['mint']]['price']
|
||||
|
||||
pre_balalnces = transaction_details.get('meta', {}).get('preTokenBalances', [])
|
||||
for balance in pre_balalnces:
|
||||
if balance['mint'] == parsed_result["token_in"] and balance['owner'] == FOLLOWED_WALLET:
|
||||
parsed_result["before_source_balance"] = float(balance['uiTokenAmount']['amount']) / 10 ** balance['uiTokenAmount']['decimals']
|
||||
break
|
||||
|
||||
|
||||
# Calculate percentage swapped
|
||||
try:
|
||||
if parsed_result["amount_in"] > 0 and 'before_source_balance' in parsed_result and parsed_result["before_source_balance"] > 0:
|
||||
parsed_result["percentage_swapped"] = (parsed_result["amount_in"] / parsed_result["before_source_balance"]) * 100
|
||||
else:
|
||||
# calculate based on total wallet value: FOLLOWED_WALLET_VALUE
|
||||
parsed_result["percentage_swapped"] = (parsed_result["amount_in_USD"] / FOLLOWED_WALLET_VALUE) * 100
|
||||
except Exception as e:
|
||||
logging.error(f"Error calculating percentage swapped: {e}")
|
||||
|
||||
return parsed_result
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print("Error fetching transaction details:", e)
|
||||
|
||||
|
||||
async def solana_jsonrpc(method, params = None, jsonParsed = True):
|
||||
# target json example:
|
||||
# data = {
|
||||
# "jsonrpc": "2.0",
|
||||
# "id": 1,
|
||||
# "method": "getTransaction",
|
||||
# "params": [
|
||||
# tx_signature,
|
||||
# {
|
||||
# "encoding": "jsonParsed",
|
||||
# "maxSupportedTransactionVersion": 0
|
||||
# }
|
||||
# ]
|
||||
# }
|
||||
# if param is not array, make it array
|
||||
if not isinstance(params, list):
|
||||
params = [params]
|
||||
|
||||
data = {
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1,
|
||||
"method": method,
|
||||
"params": params or []
|
||||
}
|
||||
data["params"].append({"maxSupportedTransactionVersion": 0})
|
||||
if jsonParsed:
|
||||
data["params"][1]["encoding"] = "jsonParsed"
|
||||
|
||||
|
||||
try:
|
||||
# url = 'https://solana.drpc.org'
|
||||
response = requests.post(SOLANA_HTTP_URL, headers={"Content-Type": "application/json"}, data=json.dumps(data))
|
||||
response.raise_for_status() # Raises an error for bad responses
|
||||
result = response.json()
|
||||
if not 'result' in result or 'error' in result:
|
||||
print("Error fetching data from Solana RPC:", result)
|
||||
return None
|
||||
return result['result']
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching data from Solana RPC: {e}")
|
||||
return None
|
||||
|
||||
|
||||
|
||||
# # # # # # # # # # Functionality # # # # # # # # # #
|
||||
|
||||
|
||||
async def list_initial_wallet_states():
|
||||
global TOKEN_ADDRESSES, FOLLOWED_WALLET_VALUE, YOUR_WALLET_VALUE, TOKEN_PRICES
|
||||
global TOKENS_INFO # new
|
||||
|
||||
followed_wallet_balances = await get_wallet_balances(FOLLOWED_WALLET)
|
||||
your_wallet_balances = await get_wallet_balances(YOUR_WALLET)
|
||||
|
||||
all_token_addresses = list(set(followed_wallet_balances.keys()) |
|
||||
set(your_wallet_balances.keys()) |
|
||||
set(TOKEN_ADDRESSES.values()))
|
||||
|
||||
TOKEN_PRICES = await get_token_prices(all_token_addresses)
|
||||
sol_price = await get_sol_price()
|
||||
|
||||
followed_converted_balances = await convert_balances_to_currency(followed_wallet_balances, sol_price)
|
||||
your_converted_balances = await convert_balances_to_currency(your_wallet_balances, sol_price)
|
||||
|
||||
|
||||
TOKEN_ADDRESSES = {
|
||||
address: info for address,
|
||||
info in {**followed_converted_balances, **your_converted_balances}.items() if info['value'] is not None and info['value'] > 0
|
||||
}
|
||||
logging.info(f"Monitoring balances for tokens: {[info['name'] for info in TOKEN_ADDRESSES.values()]}")
|
||||
|
||||
followed_wallet_state = []
|
||||
FOLLOWED_WALLET_VALUE = 0
|
||||
for address, info in followed_converted_balances.items():
|
||||
if info['value'] is not None and info['value'] > 0:
|
||||
followed_wallet_state.append(f"{info['name']}: {info['value']:.2f} {DISPLAY_CURRENCY} ({info['address']})")
|
||||
FOLLOWED_WALLET_VALUE += info['value']
|
||||
|
||||
your_wallet_state = []
|
||||
YOUR_WALLET_VALUE = 0
|
||||
for address, info in your_converted_balances.items():
|
||||
if info['value'] is not None and info['value'] > 0:
|
||||
your_wallet_state.append(f"{info['name']}: {info['value']:.2f} {DISPLAY_CURRENCY}")
|
||||
YOUR_WALLET_VALUE += info['value']
|
||||
|
||||
message = (
|
||||
f"<b>Initial Wallet States (All balances in {DISPLAY_CURRENCY}):</b>\n\n"
|
||||
f"<b>Followed Wallet ({FOLLOWED_WALLET}):</b>\n"
|
||||
f"{chr(10).join(followed_wallet_state)}\n"
|
||||
f"<b>Total Value:</b> {FOLLOWED_WALLET_VALUE:.2f} {DISPLAY_CURRENCY}\n\n"
|
||||
f"<b>Your Wallet ({YOUR_WALLET}):</b>\n"
|
||||
f"{chr(10).join(your_wallet_state)}\n"
|
||||
f"<b>Total Value:</b> {YOUR_WALLET_VALUE:.2f} {DISPLAY_CURRENCY}\n\n"
|
||||
f"<b>Monitored Tokens:</b>\n"
|
||||
f"{', '.join([safe_get_property(info, 'name') for info in TOKEN_ADDRESSES.values()])}"
|
||||
)
|
||||
|
||||
logging.info(message)
|
||||
await send_telegram_message(message)
|
||||
|
||||
# save token info to file
|
||||
await save_token_info()
|
||||
|
||||
def safe_get_property(info, property_name, default='Unknown'):
|
||||
if not isinstance(info, dict):
|
||||
@ -952,12 +536,13 @@ async def get_transaction_details_with_retry(transaction_id, retry_delay = 5, ma
|
||||
# query every 5 seconds for the transaction details until not None or 30 seconds
|
||||
for _ in range(max_retries):
|
||||
try:
|
||||
tx_details = await get_transaction_details_rpc(transaction_id)
|
||||
tx_details = await solanaAPI.get_transaction_details_rpc(transaction_id)
|
||||
if tx_details is not None:
|
||||
break
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching transaction details for '{transaction_id}': {e}")
|
||||
logging.info(f"({_} of {max_retries}) Waiting for transaction details for {transaction_id}")
|
||||
logging.error(f"Error fetching transaction details: {e}")
|
||||
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)
|
||||
retry_delay *= 1.2
|
||||
return tx_details
|
||||
@ -1006,7 +591,7 @@ async def process_log(log_result):
|
||||
|
||||
before_source_balance = 0
|
||||
source_token_change = 0
|
||||
|
||||
|
||||
i = 0
|
||||
while i < len(logs):
|
||||
log_entry = logs[i]
|
||||
@ -1029,7 +614,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",
|
||||
@ -1080,14 +665,15 @@ async def process_log(log_result):
|
||||
f"{tr_details['amount_in_USD']:.2f} worth of {tr_details['symbol_in']} ({tr_details['percentage_swapped']:.2f}% ) swapped for " # ({tr_details['token_in']}) ({tr_details['token_out']})
|
||||
f"{tr_details['symbol_out']} \n"
|
||||
)
|
||||
await send_telegram_message(message_text)
|
||||
await telegram_utils.send_telegram_message(message_text)
|
||||
await follow_move(tr_details)
|
||||
await save_token_info()
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"Error aquiring log details and following: {e}")
|
||||
error_logger.info(f"Error aquiring log details and following:\n {tr_details}")
|
||||
await send_telegram_message(f"Not followed! Error following move.")
|
||||
|
||||
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"Error processing log: {e}")
|
||||
@ -1095,6 +681,7 @@ async def process_log(log_result):
|
||||
|
||||
PROCESSING_LOG = False
|
||||
return tr_details
|
||||
|
||||
# "Program log: Instruction: Swap2",
|
||||
# "Program log: order_id: 13985890735038016",
|
||||
# "Program log: AbrMJWfDVRZ2EWCQ1xSCpoVeVgZNpq1U2AoYG98oRXfn", source
|
||||
@ -1136,14 +723,13 @@ def _get_pre_balance(transaction_details: Dict[str, Any], token: str) -> float:
|
||||
|
||||
|
||||
async def follow_move(move):
|
||||
tx_details = None
|
||||
your_balances = await get_wallet_balances(YOUR_WALLET, doGetTokenName=False)
|
||||
your_balance_info = next((balance for balance in your_balances.values() if balance['address'] == move['token_in']), None)
|
||||
if your_balance_info is not None:
|
||||
# Use the balance
|
||||
print(f"Your balance: {your_balance_info['amount']} {move['symbol_in']}")
|
||||
else:
|
||||
print("No ballance found for {move['symbol_in']}. Skipping move.")
|
||||
print(f"No ballance found for {move['symbol_in']}. Skipping move.")
|
||||
await send_telegram_message(f"No ballance found for {move['symbol_in']}. Skipping move.")
|
||||
return
|
||||
|
||||
@ -1152,12 +738,12 @@ async def follow_move(move):
|
||||
|
||||
token_info = TOKENS_INFO.get(move['token_in'])
|
||||
token_name_in = token_info.get('symbol') or await get_token_metadata(move['token_in'])
|
||||
token_name_out = TOKENS_INFO[move['token_out']].get('symbol') or await get_token_metadata_symbol(move['token_out'])
|
||||
token_name_out = TOKENS_INFO[move['token_out']].get('symbol') or await solanaAPI.get_token_metadata_symbol(move['token_out'])
|
||||
|
||||
if not your_balance:
|
||||
msg = f"<b>Move not followed:</b>\nNo balance found for token {move['symbol_in']}. Cannot follow move."
|
||||
logging.warning(msg)
|
||||
await send_telegram_message(msg)
|
||||
await telegram_utils.send_telegram_message(msg)
|
||||
return
|
||||
|
||||
if FOLLOW_AMOUNT == 'percentage':
|
||||
@ -1176,15 +762,13 @@ async def follow_move(move):
|
||||
return
|
||||
|
||||
amount_to_swap = min(amount_to_swap, your_balance) # Ensure we're not trying to swap more than we have
|
||||
|
||||
amount = int(amount)
|
||||
logging.debug(f"Calculated amount in lamports: {amount}")
|
||||
|
||||
decimals = token_info.get('decimals')
|
||||
# Convert to lamports
|
||||
# if decimals is 6, then amount = amount * 1e6; if 9, then amount = amount * 1e9
|
||||
amount = int(amount_to_swap * 10**decimals)
|
||||
|
||||
amount = int(amount)
|
||||
logging.debug(f"Calculated amount in lamports: {amount}")
|
||||
|
||||
if your_balance < amount_to_swap: # should not happen
|
||||
msg = (
|
||||
@ -1192,7 +776,7 @@ async def follow_move(move):
|
||||
f"Insufficient balance: {your_balance:.6f} {token_name_in}. We want to swap {amount_to_swap:.6f}\n({move['symbol_in']}, decimals {token_info.get('decimals')} amount {amount}).\n This will probably fail. But we will try anyway."
|
||||
)
|
||||
logging.warning(msg)
|
||||
await send_telegram_message(msg)
|
||||
await telegram_utils.send_telegram_message(msg)
|
||||
try:
|
||||
|
||||
try:
|
||||
@ -1202,7 +786,7 @@ async def follow_move(move):
|
||||
)
|
||||
# logging.info(notification)
|
||||
# error_logger.info(notification)
|
||||
# await send_telegram_message(notification)
|
||||
# await telegram_utils.send_telegram_message(notification)
|
||||
except Exception as e:
|
||||
logging.error(f"Error sending notification: {e}")
|
||||
|
||||
@ -1215,7 +799,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}")
|
||||
@ -1232,7 +816,7 @@ async def follow_move(move):
|
||||
# append to notification
|
||||
notification += f"\n\n<b>Transaction:</b> <a href='https://solscan.io/tx/{transaction_id}'>{transaction_id}</a>"
|
||||
|
||||
await send_telegram_message(f"Follow Transaction Sent: {transaction_id}")
|
||||
await telegram_utils.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:
|
||||
@ -1246,7 +830,7 @@ async def follow_move(move):
|
||||
# log the errors to /logs/errors.log
|
||||
error_logger.error(error_message)
|
||||
error_logger.exception(e)
|
||||
await send_telegram_message(error_message)
|
||||
await telegram_utils.send_telegram_message(error_message)
|
||||
amount = amount * 0.75
|
||||
|
||||
await get_wallet_balances(YOUR_WALLET, doGetTokenName=False)
|
||||
@ -1273,11 +857,6 @@ async def follow_move(move):
|
||||
)
|
||||
logging.info(notification)
|
||||
await send_telegram_message(notification)
|
||||
|
||||
# Log successful swap details
|
||||
success_logger_accounting_csv.info(
|
||||
f"{move['symbol_in']},{move['symbol_out']},{amount_to_swap:.6f},{tx_details['amount_out']:.6f},{move['amount_in_USD']:.2f},{tx_details['amount_out_USD']:.2f},{move['percentage_swapped']:.2f}"
|
||||
)
|
||||
except Exception as e:
|
||||
logging.error(f"Error sending notification: {e}")
|
||||
|
||||
@ -1289,9 +868,9 @@ async def follow_move(move):
|
||||
error_logger.exception(e) \
|
||||
# if error_message contains 'Program log: Error: insufficient funds'
|
||||
if 'insufficient funds' in error_message:
|
||||
await send_telegram_message("Insufficient funds. Cannot follow move. Please check your balance.")
|
||||
await telegram_utils.send_telegram_message("Insufficient funds. Cannot follow move. Please check your balance.")
|
||||
else:
|
||||
await send_telegram_message(error_message)
|
||||
await telegram_utils.send_telegram_message(error_message)
|
||||
|
||||
|
||||
# Helper functions
|
||||
@ -1302,7 +881,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):
|
||||
@ -1335,11 +914,11 @@ async def wallet_watch_loop():
|
||||
|
||||
subscription_id = await subscribe(websocket)
|
||||
if subscription_id is not None:
|
||||
await send_telegram_message(f"Solana mainnet connected ({subscription_id})...")
|
||||
# await send_telegram_message(f"Solana mainnet connected ({subscription_id})...")
|
||||
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:# drop subscription now
|
||||
await process_messages(websocket, subscription_id)
|
||||
@ -1363,7 +942,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)
|
||||
@ -1379,9 +958,9 @@ async def wallet_watch_loop():
|
||||
logger.error(f"An unexpected error occurred: {e}")
|
||||
|
||||
await unsubscribe(websocket, subscription_id)
|
||||
# await send_telegram_message("reconnecting...")
|
||||
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}")
|
||||
|
||||
@ -1401,22 +980,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
|
||||
@ -1433,14 +997,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))
|
||||
@ -1449,7 +1022,7 @@ async def process_messages(websocket, subscription_id):
|
||||
|
||||
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 send_telegram_message("Connection to Solana network was closed. Not listening for transactions right now. Attempting to reconnect...")
|
||||
pass
|
||||
except json.JSONDecodeError as e:
|
||||
logger.error(f"Failed to decode JSON: {e}")
|
||||
@ -1476,56 +1049,77 @@ async def check_PK():
|
||||
if not pk:
|
||||
logging.error("Private key not found in environment variables. Will not be able to sign transactions.")
|
||||
# send TG warning message
|
||||
await send_telegram_message("<b>Warning:</b> Private key not found in environment variables. Will not be able to sign transactions.")
|
||||
await telegram_utils.send_telegram_message("<b>Warning:</b> Private key not found in environment variables. Will not be able to sign transactions.")
|
||||
|
||||
|
||||
|
||||
# Convert Flask app to ASGI
|
||||
asgi_app = WsgiToAsgi(app)
|
||||
solanaAPI = SolanaAPI()
|
||||
|
||||
async def main():
|
||||
global bot, PROCESSING_LOG
|
||||
# Initialize Telegram Bot
|
||||
# Create a custom connection pool
|
||||
conn_pool = aiohttp.TCPConnector(limit=100) # Increase the connection limit
|
||||
timeout = aiohttp.ClientTimeout(total=30) # Set a longer timeout
|
||||
global solanaAPI, bot, PROCESSING_LOG
|
||||
|
||||
bot = Bot(TELEGRAM_BOT_TOKEN) # , request=aiohttp.ClientSession(connector=conn_pool, timeout=timeout).request)
|
||||
|
||||
await send_telegram_message("Solana Agent Started. Connecting to mainnet...")
|
||||
telegram_utils.initialize()
|
||||
await telegram_utils.send_telegram_message("Solana Agent Started. Connecting to mainnet...")
|
||||
await check_PK()
|
||||
# new: restart wallet_watch_loop every hour
|
||||
while True:
|
||||
wallet_watch_task = asyncio.create_task(wallet_watch_loop())
|
||||
await solanaAPI.wallet_watch_loop()
|
||||
|
||||
# while True:
|
||||
# wallet_watch_task = asyncio.create_task(solanaAPI.wallet_watch_loop())
|
||||
|
||||
try:
|
||||
# Wait for an hour or until the task completes, whichever comes first
|
||||
await asyncio.wait_for(wallet_watch_task, timeout=3600)
|
||||
except asyncio.TimeoutError:
|
||||
# If an hour has passed, cancel the task if not PROCESSING
|
||||
if PROCESSING_LOG:
|
||||
logging.info("wallet_watch_loop is processing logs. Will not restart.")
|
||||
await send_telegram_message("wallet_watch_loop is processing logs. Will not restart.")
|
||||
else:
|
||||
wallet_watch_task.cancel()
|
||||
try:
|
||||
await wallet_watch_task
|
||||
except asyncio.CancelledError:
|
||||
logging.info("wallet_watch_loop was cancelled after running for an hour")
|
||||
except Exception as e:
|
||||
logging.error(f"Error in wallet_watch_loop: {str(e)}")
|
||||
await send_telegram_message(f"Error in wallet_watch_loop: {str(e)}")
|
||||
# try:
|
||||
# # Wait for an hour or until the task completes, whichever comes first
|
||||
# await asyncio.wait_for(wallet_watch_task, timeout=3600)
|
||||
# except asyncio.TimeoutError:
|
||||
# # If an hour has passed, cancel the task if not PROCESSING
|
||||
# if PROCESSING_LOG:
|
||||
# logging.info("wallet_watch_loop is processing logs. Will not restart.")
|
||||
# await telegram_utils.send_telegram_message("wallet_watch_loop is processing logs. Will not restart.")
|
||||
# else:
|
||||
# wallet_watch_task.cancel()
|
||||
# try:
|
||||
# await wallet_watch_task
|
||||
# except asyncio.CancelledError:
|
||||
# logging.info("wallet_watch_loop was cancelled after running for an hour")
|
||||
# except Exception as e:
|
||||
# logging.error(f"Error in wallet_watch_loop: {str(e)}")
|
||||
# await telegram_utils.send_telegram_message(f"Error in wallet_watch_loop: {str(e)}")
|
||||
|
||||
logging.info("Restarting wallet_watch_loop")
|
||||
await send_telegram_message("Restarting wallet_watch_loop")
|
||||
# logging.info("Restarting wallet_watch_loop")
|
||||
# await telegram_utils.send_telegram_message("Restarting wallet_watch_loop")
|
||||
|
||||
async def run_flask():
|
||||
loop = asyncio.get_running_loop()
|
||||
await loop.run_in_executor(None, lambda: app.run(debug=False, port=3001, use_reloader=False))
|
||||
|
||||
|
||||
def run_asyncio_loop(loop):
|
||||
asyncio.set_event_loop(loop)
|
||||
loop.run_forever()
|
||||
|
||||
async def run_all():
|
||||
await asyncio.gather(
|
||||
main(),
|
||||
run_flask()
|
||||
)
|
||||
main_task = asyncio.create_task(main())
|
||||
await main_task
|
||||
|
||||
if __name__ == '__main__':
|
||||
asyncio.run(run_all())
|
||||
# Create a new event loop
|
||||
loop = asyncio.new_event_loop()
|
||||
asyncio.set_event_loop(loop)
|
||||
|
||||
# Start the asyncio loop in a separate thread
|
||||
thread = Thread(target=run_asyncio_loop, args=(loop,))
|
||||
thread.start()
|
||||
|
||||
# Schedule the run_all coroutine in the event loop
|
||||
asyncio.run_coroutine_threadsafe(run_all(), loop)
|
||||
|
||||
# Run Uvicorn in the main thread
|
||||
uvicorn.run(
|
||||
"app:asgi_app", # Replace 'app' with the actual name of this Python file if different
|
||||
host="127.0.0.1",
|
||||
port=3001,
|
||||
log_level="debug",
|
||||
reload=True
|
||||
)
|
||||
|
||||
# When Uvicorn exits, stop the asyncio loop
|
||||
loop.call_soon_threadsafe(loop.stop)
|
||||
thread.join()
|
59
crypto/sol/config.py
Normal file
59
crypto/sol/config.py
Normal file
@ -0,0 +1,59 @@
|
||||
# config.py
|
||||
|
||||
import os
|
||||
import logging
|
||||
from dotenv import load_dotenv
|
||||
from logging.handlers import RotatingFileHandler
|
||||
|
||||
# Load environment variables
|
||||
load_dotenv()
|
||||
load_dotenv('.env.secret')
|
||||
|
||||
# Configuration
|
||||
DEVELOPER_CHAT_ID = os.getenv("DEVELOPER_CHAT_ID")
|
||||
FOLLOWED_WALLET = os.getenv("FOLLOWED_WALLET")
|
||||
YOUR_WALLET = os.getenv("YOUR_WALLET")
|
||||
TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
|
||||
SOLANA_WS_URL = os.getenv("SOLANA_WS_URL")
|
||||
SOLANA_HTTP_URL = os.getenv("SOLANA_HTTP_URL")
|
||||
DISPLAY_CURRENCY = os.getenv('DISPLAY_CURRENCY', 'USD')
|
||||
BOT_NAME = os.getenv("BOT_NAME")
|
||||
|
||||
# Token addresses (initialize with some known tokens)
|
||||
TOKEN_ADDRESSES = {
|
||||
"SOL": "So11111111111111111111111111111111111111112",
|
||||
"USDC": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
|
||||
"TARD": "4nfn86ssbv7wiqcsw7bpvn46k24jhe334fudtyxhp1og",
|
||||
}
|
||||
|
||||
# Logging configuration
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Set up error logger
|
||||
log_dir = './logs'
|
||||
log_file = os.path.join(log_dir, 'error.log')
|
||||
os.makedirs(log_dir, exist_ok=True)
|
||||
error_file_handler = RotatingFileHandler(
|
||||
log_file,
|
||||
maxBytes=10*1024*1024,
|
||||
backupCount=5
|
||||
)
|
||||
error_file_handler.setLevel(logging.ERROR)
|
||||
error_file_handler.setFormatter(logging.Formatter('%(asctime)s [%(levelname)s] %(message)s', datefmt='%Y-%m-%d %H:%M:%S'))
|
||||
error_logger = logging.getLogger('error_logger')
|
||||
error_logger.setLevel(logging.ERROR)
|
||||
error_logger.addHandler(error_file_handler)
|
||||
|
||||
# Function to get all configuration
|
||||
def get_config():
|
||||
return {
|
||||
"DEVELOPER_CHAT_ID": DEVELOPER_CHAT_ID,
|
||||
"FOLLOWED_WALLET": FOLLOWED_WALLET,
|
||||
"YOUR_WALLET": YOUR_WALLET,
|
||||
"TELEGRAM_BOT_TOKEN": TELEGRAM_BOT_TOKEN,
|
||||
"SOLANA_WS_URL": SOLANA_WS_URL,
|
||||
"SOLANA_HTTP_URL": SOLANA_HTTP_URL,
|
||||
"DISPLAY_CURRENCY": DISPLAY_CURRENCY,
|
||||
"BOT_NAME": BOT_NAME,
|
||||
}
|
@ -1,740 +0,0 @@
|
||||
2024-10-09 07:59:16 [ERROR] <b>Swap Follow Error:</b>
|
||||
'NoneType' object has no attribute 'rstrip'
|
||||
2024-10-09 07:59:16 [ERROR] 'NoneType' object has no attribute 'rstrip'
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1014, in follow_move
|
||||
private_key = Keypair.from_bytes(base58.b58decode(pk))
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/base58/__init__.py", line 117, in b58decode
|
||||
v = v.rstrip()
|
||||
^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'rstrip'
|
||||
2024-10-09 08:02:14 [ERROR] <b>Swap Follow Error:</b>
|
||||
'NoneType' object has no attribute 'rstrip'
|
||||
2024-10-09 08:02:14 [ERROR] 'NoneType' object has no attribute 'rstrip'
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1014, in follow_move
|
||||
private_key = Keypair.from_bytes(base58.b58decode(pk))
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/base58/__init__.py", line 117, in b58decode
|
||||
v = v.rstrip()
|
||||
^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'rstrip'
|
||||
2024-10-09 08:48:26 [ERROR] <b>Swap Follow Error:</b>
|
||||
'NoneType' object has no attribute 'rstrip'
|
||||
2024-10-09 08:48:26 [ERROR] 'NoneType' object has no attribute 'rstrip'
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1021, in follow_move
|
||||
private_key = Keypair.from_bytes(base58.b58decode(pk))
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/base58/__init__.py", line 117, in b58decode
|
||||
v = v.rstrip()
|
||||
^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'rstrip'
|
||||
2024-10-09 09:08:18 [ERROR] <b>Swap Follow Error:</b>
|
||||
'NoneType' object has no attribute 'rstrip'
|
||||
2024-10-09 09:08:18 [ERROR] 'NoneType' object has no attribute 'rstrip'
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1007, in follow_move
|
||||
private_key = Keypair.from_bytes(base58.b58decode(pk))
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/base58/__init__.py", line 117, in b58decode
|
||||
v = v.rstrip()
|
||||
^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'rstrip'
|
||||
2024-10-09 09:15:19 [ERROR] <b>Swap Follow Error:</b>
|
||||
'NoneType' object has no attribute 'rstrip'
|
||||
2024-10-09 09:15:19 [ERROR] 'NoneType' object has no attribute 'rstrip'
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1007, in follow_move
|
||||
private_key = Keypair.from_bytes(base58.b58decode(pk))
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/base58/__init__.py", line 117, in b58decode
|
||||
v = v.rstrip()
|
||||
^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'rstrip'
|
||||
2024-10-09 09:17:10 [ERROR] <b>Swap Follow Error:</b>
|
||||
'NoneType' object has no attribute 'rstrip'
|
||||
2024-10-09 09:17:10 [ERROR] 'NoneType' object has no attribute 'rstrip'
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1007, in follow_move
|
||||
private_key = Keypair.from_bytes(base58.b58decode(pk))
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/base58/__init__.py", line 117, in b58decode
|
||||
v = v.rstrip()
|
||||
^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'rstrip'
|
||||
2024-10-09 09:23:01 [ERROR] <b>Swap Follow Error:</b>
|
||||
'NoneType' object has no attribute 'rstrip'
|
||||
2024-10-09 09:23:01 [ERROR] 'NoneType' object has no attribute 'rstrip'
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1007, in follow_move
|
||||
private_key = Keypair.from_bytes(base58.b58decode(pk))
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/base58/__init__.py", line 117, in b58decode
|
||||
v = v.rstrip()
|
||||
^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'rstrip'
|
||||
2024-10-09 09:38:53 [ERROR] <b>Swap Follow Error:</b>
|
||||
'NoneType' object has no attribute 'rstrip'
|
||||
2024-10-09 09:38:53 [ERROR] 'NoneType' object has no attribute 'rstrip'
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1007, in follow_move
|
||||
private_key = Keypair.from_bytes(base58.b58decode(pk))
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/base58/__init__.py", line 117, in b58decode
|
||||
v = v.rstrip()
|
||||
^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'rstrip'
|
||||
2024-10-09 10:40:35 [ERROR] <b>Swap Follow Error:</b>
|
||||
'NoneType' object has no attribute 'rstrip'
|
||||
2024-10-09 10:40:35 [ERROR] 'NoneType' object has no attribute 'rstrip'
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1007, in follow_move
|
||||
logging.error(f"Error sending notification: {e}")
|
||||
^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/base58/__init__.py", line 117, in b58decode
|
||||
v = v.rstrip()
|
||||
^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'rstrip'
|
||||
2024-10-09 10:46:28 [ERROR] <b>Swap Follow Error:</b>
|
||||
|
||||
2024-10-09 10:46:28 [ERROR]
|
||||
Traceback (most recent call last):
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 59, in make_request
|
||||
raw = await self.make_request_unparsed(body)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 66, in make_request_unparsed
|
||||
return _after_request_unparsed(raw_response)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 137, in _after_request_unparsed
|
||||
raw_response.raise_for_status()
|
||||
File "/usr/local/lib/python3.12/site-packages/httpx/_models.py", line 763, in raise_for_status
|
||||
raise HTTPStatusError(message, request=request, response=self)
|
||||
httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'wss://api.mainnet-beta.solana.com'
|
||||
For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429
|
||||
|
||||
The above exception was the direct cause of the following exception:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1026, in follow_move
|
||||
result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 62, in argument_decorator
|
||||
raise internal_exception_cls(exc, func, *args, **kwargs) from exc
|
||||
solana.exceptions.SolanaRpcException
|
||||
2024-10-09 11:03:02 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1394295 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1387708 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1383826 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 20345 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1362911 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 20744 of 1379355 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(41389), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 11:03:02 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1394295 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1387708 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1383826 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 20345 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1362911 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 20744 of 1379355 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(41389), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1026, in follow_move
|
||||
result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1394295 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1387708 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1383826 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 20345 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1362911 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 20744 of 1379355 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(41389), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 11:03:58 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1394295 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1387708 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1383826 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 20345 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1358884 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 24771 of 1379355 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(45416), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 11:03:58 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1394295 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1387708 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1383826 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 20345 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1358884 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 24771 of 1379355 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(45416), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1026, in follow_move
|
||||
result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1394295 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1387708 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1383826 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 20345 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1358884 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 24771 of 1379355 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(45416), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 11:08:15 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1391445 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1384858 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1380976 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 23345 of 1399850 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: Route", "Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc invoke [2]", "Program log: Instruction: Swap", "Program log: fee_growth: 815311374053", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1326322 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc consumed 42021 of 1364043 compute units", "Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 54483 of 1376505 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(77978), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 11:08:15 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1391445 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1384858 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1380976 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 23345 of 1399850 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: Route", "Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc invoke [2]", "Program log: Instruction: Swap", "Program log: fee_growth: 815311374053", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1326322 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc consumed 42021 of 1364043 compute units", "Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 54483 of 1376505 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(77978), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1026, in follow_move
|
||||
result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1391445 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1384858 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1380976 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 23345 of 1399850 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: Route", "Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc invoke [2]", "Program log: Instruction: Swap", "Program log: fee_growth: 815311374053", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1326322 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc consumed 42021 of 1364043 compute units", "Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 54483 of 1376505 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(77978), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 13:46:47 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1383977 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 20023 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(20323), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 13:46:47 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1383977 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 20023 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(20323), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1031, in follow_move
|
||||
result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1383977 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 20023 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(20323), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 13:57:11 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1394295 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1387708 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1383826 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 20345 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1366470 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 17185 of 1379355 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(37830), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 13:57:11 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1394295 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1387708 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1383826 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 20345 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1366470 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 17185 of 1379355 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(37830), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1031, in follow_move
|
||||
result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1394295 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1387708 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1383826 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 20345 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1366470 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 17185 of 1379355 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(37830), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 15:03:06 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1386815 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 17185 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(17485), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 15:03:06 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1386815 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 17185 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(17485), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1031, in follow_move
|
||||
f"<b>Initiating move:</b>\n (decimals: {token_info.get('decimals')})\n"
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1386815 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 17185 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(17485), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 15:08:30 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: Program failed to complete", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, ProgramFailedToComplete)), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program log: panicked at src/token.rs:539:43:\nrange end index 64 out of range for slice of length 0", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 13251 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: SBF program panicked"]), accounts: None, units_consumed: Some(13551), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 15:08:30 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: Program failed to complete", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, ProgramFailedToComplete)), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program log: panicked at src/token.rs:539:43:\nrange end index 64 out of range for slice of length 0", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 13251 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: SBF program panicked"]), accounts: None, units_consumed: Some(13551), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1031, in follow_move
|
||||
f"<b>Initiating move:</b>\n (decimals: {token_info.get('decimals')})\n"
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: Program failed to complete", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, ProgramFailedToComplete)), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program log: panicked at src/token.rs:539:43:\nrange end index 64 out of range for slice of length 0", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 13251 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: SBF program panicked"]), accounts: None, units_consumed: Some(13551), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 15:14:20 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1382246 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 21754 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(22054), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 15:14:20 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1382246 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 21754 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(22054), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1031, in follow_move
|
||||
f"<b>Initiating move:</b>\n (decimals: {token_info.get('decimals')})\n"
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1382246 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 21754 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(22054), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 15:16:20 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1392795 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1386208 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1382326 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 21845 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1361725 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 20430 of 1377855 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(42575), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 15:16:20 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1392795 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1386208 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1382326 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 21845 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1361725 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 20430 of 1377855 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(42575), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1031, in follow_move
|
||||
f"<b>Initiating move:</b>\n (decimals: {token_info.get('decimals')})\n"
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1392795 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1386208 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1382326 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 21845 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1361725 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 20430 of 1377855 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(42575), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 15:19:07 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1392795 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1386208 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1382326 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 21845 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1357384 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 24771 of 1377855 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(46916), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 15:19:07 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1392795 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1386208 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1382326 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 21845 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1357384 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 24771 of 1377855 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(46916), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1031, in follow_move
|
||||
f"<b>Initiating move:</b>\n (decimals: {token_info.get('decimals')})\n"
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1392795 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1386208 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1382326 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 21845 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1357384 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 24771 of 1377855 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(46916), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 15:20:44 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1595 of 1391295 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1384682 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4214 of 1380800 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 23397 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1363114 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 17489 of 1376303 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(41186), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 15:20:44 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1595 of 1391295 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1384682 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4214 of 1380800 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 23397 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1363114 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 17489 of 1376303 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(41186), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1031, in follow_move
|
||||
f"<b>Initiating move:</b>\n (decimals: {token_info.get('decimals')})\n"
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1595 of 1391295 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1384682 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4214 of 1380800 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 23397 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1363114 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 17489 of 1376303 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(41186), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 15:22:24 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1595 of 1391295 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1384682 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4214 of 1380800 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 23397 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1358283 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 22320 of 1376303 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(46017), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 15:22:24 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1595 of 1391295 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1384682 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4214 of 1380800 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 23397 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1358283 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 22320 of 1376303 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(46017), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1031, in follow_move
|
||||
f"<b>Initiating move:</b>\n (decimals: {token_info.get('decimals')})\n"
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1595 of 1391295 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1384682 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4214 of 1380800 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 23397 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1358283 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 22320 of 1376303 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(46017), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 16:13:48 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1379229 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 24771 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(25071), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 16:13:48 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1379229 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 24771 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(25071), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1061, in follow_move
|
||||
result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1379229 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 24771 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(25071), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 16:37:40 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1386729 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 17271 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(17571), return_data: None, inner_instructions: None }) }
|
||||
2024-10-09 16:37:40 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1386729 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 17271 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(17571), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1061, in follow_move
|
||||
result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1386729 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 17271 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(17571), return_data: None, inner_instructions: None }) }
|
||||
2024-10-10 12:17:44 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: Program failed to complete", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, ProgramFailedToComplete)), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program log: panicked at src/token.rs:539:43:\nrange end index 64 out of range for slice of length 0", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 16186 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: SBF program panicked"]), accounts: None, units_consumed: Some(16486), return_data: None, inner_instructions: None }) }
|
||||
2024-10-10 12:17:44 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: Program failed to complete", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, ProgramFailedToComplete)), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program log: panicked at src/token.rs:539:43:\nrange end index 64 out of range for slice of length 0", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 16186 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: SBF program panicked"]), accounts: None, units_consumed: Some(16486), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1064, in follow_move
|
||||
result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: Program failed to complete", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, ProgramFailedToComplete)), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program log: panicked at src/token.rs:539:43:\nrange end index 64 out of range for slice of length 0", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 16186 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: SBF program panicked"]), accounts: None, units_consumed: Some(16486), return_data: None, inner_instructions: None }) }
|
||||
2024-10-10 12:38:57 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1382010 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 21990 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(22290), return_data: None, inner_instructions: None }) }
|
||||
2024-10-10 12:38:57 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1382010 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 21990 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(22290), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1064, in follow_move
|
||||
result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1382010 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 21990 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(22290), return_data: None, inner_instructions: None }) }
|
||||
2024-10-10 12:41:59 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1382864 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 21136 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(21436), return_data: None, inner_instructions: None }) }
|
||||
2024-10-10 12:41:59 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1382864 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 21136 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(21436), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1064, in follow_move
|
||||
result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1382864 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 21136 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(21436), return_data: None, inner_instructions: None }) }
|
||||
2024-10-10 13:01:13 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1394295 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1387708 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1383826 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 20345 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1361916 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 21739 of 1379355 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(42384), return_data: None, inner_instructions: None }) }
|
||||
2024-10-10 13:01:13 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1394295 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1387708 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1383826 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 20345 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1361916 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 21739 of 1379355 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(42384), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1065, in follow_move
|
||||
result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 3: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(3, Custom(1))), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: GetAccountDataSize", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1394295 compute units", "Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Initialize the associated token account", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeImmutableOwner", "Program log: Please upgrade to SPL Token 2022 for immutable owner support", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1387708 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: InitializeAccount3", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4188 of 1383826 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 20345 of 1399700 compute units", "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1361916 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 21739 of 1379355 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(42384), return_data: None, inner_instructions: None }) }
|
||||
2024-10-10 13:01:16 [ERROR] <b>Swap Follow Error:</b>
|
||||
|
||||
2024-10-10 13:01:16 [ERROR]
|
||||
Traceback (most recent call last):
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 59, in make_request
|
||||
raw = await self.make_request_unparsed(body)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 66, in make_request_unparsed
|
||||
return _after_request_unparsed(raw_response)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 137, in _after_request_unparsed
|
||||
raw_response.raise_for_status()
|
||||
File "/usr/local/lib/python3.12/site-packages/httpx/_models.py", line 763, in raise_for_status
|
||||
raise HTTPStatusError(message, request=request, response=self)
|
||||
httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'wss://api.mainnet-beta.solana.com'
|
||||
For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429
|
||||
|
||||
The above exception was the direct cause of the following exception:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1065, in follow_move
|
||||
result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 62, in argument_decorator
|
||||
raise internal_exception_cls(exc, func, *args, **kwargs) from exc
|
||||
solana.exceptions.SolanaRpcException
|
||||
2024-10-10 13:17:33 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: Program failed to complete", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, ProgramFailedToComplete)), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program log: panicked at src/token.rs:539:43:\nrange end index 64 out of range for slice of length 0", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 15768 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: SBF program panicked"]), accounts: None, units_consumed: Some(16068), return_data: None, inner_instructions: None }) }
|
||||
2024-10-10 13:17:33 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: Program failed to complete", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, ProgramFailedToComplete)), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program log: panicked at src/token.rs:539:43:\nrange end index 64 out of range for slice of length 0", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 15768 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: SBF program panicked"]), accounts: None, units_consumed: Some(16068), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1065, in follow_move
|
||||
result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: Program failed to complete", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, ProgramFailedToComplete)), logs: Some(["Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program ComputeBudget111111111111111111111111111111 invoke [1]", "Program ComputeBudget111111111111111111111111111111 success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]", "Program log: Instruction: SharedAccountsRoute", "Program log: panicked at src/token.rs:539:43:\nrange end index 64 out of range for slice of length 0", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 15768 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: SBF program panicked"]), accounts: None, units_consumed: Some(16068), return_data: None, inner_instructions: None }) }
|
||||
2024-10-10 13:25:04 [ERROR] <b>Swap Follow Error:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1383021 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 20979 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(21279), return_data: None, inner_instructions: None }) }
|
||||
2024-10-10 13:25:04 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1383021 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 20979 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(21279), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1065, in follow_move
|
||||
result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(1))), logs: Some(["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 log: Error: insufficient funds", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4300 of 1383021 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0x1", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 20979 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1"]), accounts: None, units_consumed: Some(21279), return_data: None, inner_instructions: None }) }
|
||||
2024-10-20 21:57:29 [ERROR] <b>Move Failed:</b>
|
||||
The read operation timed out
|
||||
2024-10-20 21:57:29 [ERROR] The read operation timed out
|
||||
Traceback (most recent call last):
|
||||
File "/usr/local/lib/python3.12/site-packages/httpx/_transports/default.py", line 72, in map_httpcore_exceptions
|
||||
yield
|
||||
File "/usr/local/lib/python3.12/site-packages/httpx/_transports/default.py", line 236, in handle_request
|
||||
resp = self._pool.handle_request(req)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/httpcore/_sync/connection_pool.py", line 216, in handle_request
|
||||
raise exc from None
|
||||
File "/usr/local/lib/python3.12/site-packages/httpcore/_sync/connection_pool.py", line 196, in handle_request
|
||||
response = connection.handle_request(
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/httpcore/_sync/connection.py", line 101, in handle_request
|
||||
return self._connection.handle_request(request)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/httpcore/_sync/http11.py", line 143, in handle_request
|
||||
raise exc
|
||||
File "/usr/local/lib/python3.12/site-packages/httpcore/_sync/http11.py", line 113, in handle_request
|
||||
) = self._receive_response_headers(**kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/httpcore/_sync/http11.py", line 186, in _receive_response_headers
|
||||
event = self._receive_event(timeout=timeout)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/httpcore/_sync/http11.py", line 224, in _receive_event
|
||||
data = self._network_stream.read(
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/httpcore/_backends/sync.py", line 124, in read
|
||||
with map_exceptions(exc_map):
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/contextlib.py", line 158, in __exit__
|
||||
self.gen.throw(value)
|
||||
File "/usr/local/lib/python3.12/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions
|
||||
raise to_exc(exc) from exc
|
||||
httpcore.ReadTimeout: The read operation timed out
|
||||
|
||||
The above exception was the direct cause of the following exception:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1166, in follow_move
|
||||
async_client = AsyncClient(SOLANA_WS_URL)
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/jupiter_python_sdk/jupiter.py", line 679, in swap
|
||||
quoteResponse = await self.quote(
|
||||
^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/jupiter_python_sdk/jupiter.py", line 627, in quote
|
||||
quote_response = httpx.get(url=quote_url).json()
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/httpx/_api.py", line 210, in get
|
||||
return request(
|
||||
^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/httpx/_api.py", line 118, in request
|
||||
return client.request(
|
||||
^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/httpx/_client.py", line 837, in request
|
||||
return self.send(request, auth=auth, follow_redirects=follow_redirects)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/httpx/_client.py", line 926, in send
|
||||
response = self._send_handling_auth(
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/httpx/_client.py", line 954, in _send_handling_auth
|
||||
response = self._send_handling_redirects(
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/httpx/_client.py", line 991, in _send_handling_redirects
|
||||
response = self._send_single_request(request)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/httpx/_client.py", line 1027, in _send_single_request
|
||||
response = transport.handle_request(request)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/httpx/_transports/default.py", line 235, in handle_request
|
||||
with map_httpcore_exceptions():
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/contextlib.py", line 158, in __exit__
|
||||
self.gen.throw(value)
|
||||
File "/usr/local/lib/python3.12/site-packages/httpx/_transports/default.py", line 89, in map_httpcore_exceptions
|
||||
raise mapped_exc(message) from exc
|
||||
httpx.ReadTimeout: The read operation timed out
|
||||
2024-10-20 21:57:30 [ERROR] <b>Move Failed:</b>
|
||||
Query parameter amount cannot be parsed: ParseIntError { kind: InvalidDigit }
|
||||
2024-10-20 21:57:30 [ERROR] Query parameter amount cannot be parsed: ParseIntError { kind: InvalidDigit }
|
||||
Traceback (most recent call last):
|
||||
File "/usr/local/lib/python3.12/site-packages/jupiter_python_sdk/jupiter.py", line 629, in quote
|
||||
quote_response['routePlan']
|
||||
~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||
KeyError: 'routePlan'
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1166, in follow_move
|
||||
async_client = AsyncClient(SOLANA_WS_URL)
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/jupiter_python_sdk/jupiter.py", line 679, in swap
|
||||
quoteResponse = await self.quote(
|
||||
^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/jupiter_python_sdk/jupiter.py", line 632, in quote
|
||||
raise Exception(quote_response['error'])
|
||||
Exception: Query parameter amount cannot be parsed: ParseIntError { kind: InvalidDigit }
|
||||
2024-10-20 21:57:33 [ERROR] <b>Move Failed:</b>
|
||||
Query parameter amount cannot be parsed: ParseIntError { kind: InvalidDigit }
|
||||
2024-10-20 21:57:33 [ERROR] Query parameter amount cannot be parsed: ParseIntError { kind: InvalidDigit }
|
||||
Traceback (most recent call last):
|
||||
File "/usr/local/lib/python3.12/site-packages/jupiter_python_sdk/jupiter.py", line 629, in quote
|
||||
quote_response['routePlan']
|
||||
~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||
KeyError: 'routePlan'
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1166, in follow_move
|
||||
async_client = AsyncClient(SOLANA_WS_URL)
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/jupiter_python_sdk/jupiter.py", line 679, in swap
|
||||
quoteResponse = await self.quote(
|
||||
^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/jupiter_python_sdk/jupiter.py", line 632, in quote
|
||||
raise Exception(quote_response['error'])
|
||||
Exception: Query parameter amount cannot be parsed: ParseIntError { kind: InvalidDigit }
|
||||
2024-10-20 21:57:33 [ERROR] <b>Swap Follow Error:</b>
|
||||
cannot access local variable 'response' where it is not associated with a value
|
||||
2024-10-20 21:57:33 [ERROR] cannot access local variable 'response' where it is not associated with a value
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1204, in follow_move
|
||||
amount = amount * 0.75
|
||||
File "/app/app.py", line 599, in get_wallet_balances
|
||||
logging.error(f"Error getting wallet balances: {str(e)}")
|
||||
^^^^^^^^
|
||||
UnboundLocalError: cannot access local variable 'response' where it is not associated with a value
|
||||
2024-10-21 07:26:41 [ERROR] <b>Move Failed:</b>
|
||||
SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1771", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(6001))), logs: Some(["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 1382793 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc invoke [2]", "Program log: Instruction: Swap", "Program log: fee_growth: 7413317027569", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 1333603 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 1325901 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc consumed 52246 of 1370756 compute units", "Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [2]", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 471 of 1316195 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 success", "Program 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 invoke [2]", "Program log: ray_log: A16OGBUAAAAAAAAAAAAAAAABAAAAAAAAABtgGxUAAAAAcFGzMhIGAABUUQ3EYwgAAGccOg8AAAAA", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 1289657 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4736 of 1282031 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 consumed 30451 of 1306892 compute units", "Program 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [2]", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 471 of 1274067 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 success", "Program H8W3ctz92svYg6mkn1UtGfu2aQr2fnUFHM1RhScEtQDt invoke [2]", "Program log: Instruction: Swap", "Program log: fee_growth: 673018345630", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4736 of 1225740 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 1218087 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program H8W3ctz92svYg6mkn1UtGfu2aQr2fnUFHM1RhScEtQDt consumed 56495 of 1266396 compute units", "Program H8W3ctz92svYg6mkn1UtGfu2aQr2fnUFHM1RhScEtQDt success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [2]", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 471 of 1207586 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 success", "Program log: AnchorError thrown in programs/jupiter/src/lib.rs:585. Error Code: SlippageToleranceExceeded. Error Number: 6001. Error Message: Slippage tolerance exceeded.", "Program log: Left: 43339729", "Program log: Right: 43362050", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 199316 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1771"]), accounts: None, units_consumed: Some(199616), return_data: None, inner_instructions: None }) }</b>
|
||||
AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAFEF8ss0Ijtep7x/QSQpelS9R/BLJJV8nYbkzHEgl6DWzmOFd2n25tuM+O/1eD2ihdf9x3I0z28Sq/iT8zbzEp8G1IH3U7ixqCaqbGoeydkTdTUUCkOQYTvNcEdWHVAFRzK0lvQkeFrHOnH/VIZV2eHsP0MRaqDX7AAqfqmHnGeMCOZn/LU4VSNrEZJg9hJjEvfwMjmNLCvJDpEyG0zH7Y1yRxM32R3yvnX/HBzojB9fApPOfuRWL27j4EX6B/qtMR3ZZQr5cDjeIUDo36Z8fIYs5w5bQtIw7N8HaurmKKk51Dsq78ybAhS/z3pI+NLtAmg7awmWSpft2HqsztqRU8ax3Mj/r/oP5ATGc5hI7qeU5QuiWjtLinKPbfRqPX7fjmctCBOG4edSvPLw1jCYM6gSsw50WSxwTyJCwZwPgQ5L2823zDUsxqG5ijrqPCB6f2lyFhze9/3f+5F5Y5m+Bc+cwDBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAR51VvyMcBu7nTFbs5oFQf9sbLeo/SOUQKxzaJWvBOPmoAL/0yHNoiWwg/BQHPr8ctao3X+gf5NvcgrpN+3XniyIKaZBLbu2IoL6YkUKYD80agehUczMoMmMcu2LhFij7Q/+if11/ZKdMCbHylYed5LCas238ndUUsyGqezjOXoEd8rjajwoFmY8jrhaBvsDL5Zahs5Z/FF0O6SMfd1QaoDCwAFAsBcFQALAAkDBBcBAAAAAAAMNxsNAAcBBAIOIQwMDwwcGw0YARYJGhkXCCIeGxMdExUUExMTExMTExMJBQ0gGw0QBREEEgYDCh8uwSCbM0HWnIECAwAAABEBZAABB2QBAhEBZAID2h5mBwAAAADyVZwCAAAAAGQAAAPvQyb1eS9sOzNqJRRfI95OXS0XoerHLNQS97NH9b7hxQMShg8GDUUEDBQRUjCdc1ZN5rgbYDY4PCgOqwZ3z8ZhitSJO/hZ8YdkSRwDn56cAQSklxFTCCj5aaUf2LjhOBzA/gejCiAKOXuMbjkdddnfkAUDAgABhAGF</b>
|
||||
{'order_id': None, 'token_in': 'CzLSujWBLFsSjncfkh59rUFqvafWcY5tzedWJSuypump', 'token_out': 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', 'amount_in': 3000.0, 'amount_out': 1055.732395, 'amount_in_USD': 1045.452, 'amount_out_USD': 1055.732395, 'percentage_swapped': 28.03275520023629, 'symbol_in': 'GOAT', 'symbol_out': 'USDC', 'before_source_balance': 10701.766482}
|
||||
2024-10-21 07:26:41 [ERROR] SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1771", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(6001))), logs: Some(["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 1382793 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc invoke [2]", "Program log: Instruction: Swap", "Program log: fee_growth: 7413317027569", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 1333603 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 1325901 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc consumed 52246 of 1370756 compute units", "Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [2]", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 471 of 1316195 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 success", "Program 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 invoke [2]", "Program log: ray_log: A16OGBUAAAAAAAAAAAAAAAABAAAAAAAAABtgGxUAAAAAcFGzMhIGAABUUQ3EYwgAAGccOg8AAAAA", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 1289657 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4736 of 1282031 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 consumed 30451 of 1306892 compute units", "Program 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [2]", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 471 of 1274067 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 success", "Program H8W3ctz92svYg6mkn1UtGfu2aQr2fnUFHM1RhScEtQDt invoke [2]", "Program log: Instruction: Swap", "Program log: fee_growth: 673018345630", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4736 of 1225740 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 1218087 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program H8W3ctz92svYg6mkn1UtGfu2aQr2fnUFHM1RhScEtQDt consumed 56495 of 1266396 compute units", "Program H8W3ctz92svYg6mkn1UtGfu2aQr2fnUFHM1RhScEtQDt success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [2]", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 471 of 1207586 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 success", "Program log: AnchorError thrown in programs/jupiter/src/lib.rs:585. Error Code: SlippageToleranceExceeded. Error Number: 6001. Error Message: Slippage tolerance exceeded.", "Program log: Left: 43339729", "Program log: Right: 43362050", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 199316 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1771"]), accounts: None, units_consumed: Some(199616), return_data: None, inner_instructions: None }) }
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1222, in follow_move
|
||||
result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/async_api.py", line 1002, in send_raw_transaction
|
||||
resp = await self._provider.make_request(body, SendTransactionResp)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/exceptions.py", line 60, in argument_decorator
|
||||
return await func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/async_http.py", line 60, in make_request
|
||||
return _parse_raw(raw, parser=parser)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/solana/rpc/providers/core.py", line 98, in _parse_raw
|
||||
raise RPCException(parsed)
|
||||
solana.rpc.core.RPCException: SendTransactionPreflightFailureMessage { message: "Transaction simulation failed: Error processing Instruction 2: custom program error: 0x1771", data: RpcSimulateTransactionResult(RpcSimulateTransactionResult { err: Some(InstructionError(2, Custom(6001))), logs: Some(["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 1382793 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc invoke [2]", "Program log: Instruction: Swap", "Program log: fee_growth: 7413317027569", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 1333603 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 1325901 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc consumed 52246 of 1370756 compute units", "Program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [2]", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 471 of 1316195 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 success", "Program 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 invoke [2]", "Program log: ray_log: A16OGBUAAAAAAAAAAAAAAAABAAAAAAAAABtgGxUAAAAAcFGzMhIGAABUUQ3EYwgAAGccOg8AAAAA", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 1289657 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4736 of 1282031 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 consumed 30451 of 1306892 compute units", "Program 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [2]", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 471 of 1274067 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 success", "Program H8W3ctz92svYg6mkn1UtGfu2aQr2fnUFHM1RhScEtQDt invoke [2]", "Program log: Instruction: Swap", "Program log: fee_growth: 673018345630", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4736 of 1225740 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 1218087 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program H8W3ctz92svYg6mkn1UtGfu2aQr2fnUFHM1RhScEtQDt consumed 56495 of 1266396 compute units", "Program H8W3ctz92svYg6mkn1UtGfu2aQr2fnUFHM1RhScEtQDt success", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [2]", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 471 of 1207586 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 success", "Program log: AnchorError thrown in programs/jupiter/src/lib.rs:585. Error Code: SlippageToleranceExceeded. Error Number: 6001. Error Message: Slippage tolerance exceeded.", "Program log: Left: 43339729", "Program log: Right: 43362050", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 199316 of 1399700 compute units", "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x1771"]), accounts: None, units_consumed: Some(199616), return_data: None, inner_instructions: None }) }
|
||||
2024-10-21 07:26:43 [ERROR] <b>Move Failed:</b>
|
||||
Query parameter amount cannot be parsed: ParseIntError { kind: InvalidDigit }</b>
|
||||
AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAFEF8ss0Ijtep7x/QSQpelS9R/BLJJV8nYbkzHEgl6DWzmOFd2n25tuM+O/1eD2ihdf9x3I0z28Sq/iT8zbzEp8G1IH3U7ixqCaqbGoeydkTdTUUCkOQYTvNcEdWHVAFRzK0lvQkeFrHOnH/VIZV2eHsP0MRaqDX7AAqfqmHnGeMCOZn/LU4VSNrEZJg9hJjEvfwMjmNLCvJDpEyG0zH7Y1yRxM32R3yvnX/HBzojB9fApPOfuRWL27j4EX6B/qtMR3ZZQr5cDjeIUDo36Z8fIYs5w5bQtIw7N8HaurmKKk51Dsq78ybAhS/z3pI+NLtAmg7awmWSpft2HqsztqRU8ax3Mj/r/oP5ATGc5hI7qeU5QuiWjtLinKPbfRqPX7fjmctCBOG4edSvPLw1jCYM6gSsw50WSxwTyJCwZwPgQ5L2823zDUsxqG5ijrqPCB6f2lyFhze9/3f+5F5Y5m+Bc+cwDBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAR51VvyMcBu7nTFbs5oFQf9sbLeo/SOUQKxzaJWvBOPmoAL/0yHNoiWwg/BQHPr8ctao3X+gf5NvcgrpN+3XniyIKaZBLbu2IoL6YkUKYD80agehUczMoMmMcu2LhFij7Q/+if11/ZKdMCbHylYed5LCas238ndUUsyGqezjOXoEd8rjajwoFmY8jrhaBvsDL5Zahs5Z/FF0O6SMfd1QaoDCwAFAsBcFQALAAkDBBcBAAAAAAAMNxsNAAcBBAIOIQwMDwwcGw0YARYJGhkXCCIeGxMdExUUExMTExMTExMJBQ0gGw0QBREEEgYDCh8uwSCbM0HWnIECAwAAABEBZAABB2QBAhEBZAID2h5mBwAAAADyVZwCAAAAAGQAAAPvQyb1eS9sOzNqJRRfI95OXS0XoerHLNQS97NH9b7hxQMShg8GDUUEDBQRUjCdc1ZN5rgbYDY4PCgOqwZ3z8ZhitSJO/hZ8YdkSRwDn56cAQSklxFTCCj5aaUf2LjhOBzA/gejCiAKOXuMbjkdddnfkAUDAgABhAGF</b>
|
||||
{'order_id': None, 'token_in': 'CzLSujWBLFsSjncfkh59rUFqvafWcY5tzedWJSuypump', 'token_out': 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', 'amount_in': 3000.0, 'amount_out': 1055.732395, 'amount_in_USD': 1045.452, 'amount_out_USD': 1055.732395, 'percentage_swapped': 28.03275520023629, 'symbol_in': 'GOAT', 'symbol_out': 'USDC', 'before_source_balance': 10701.766482}
|
||||
2024-10-21 07:26:43 [ERROR] Query parameter amount cannot be parsed: ParseIntError { kind: InvalidDigit }
|
||||
Traceback (most recent call last):
|
||||
File "/usr/local/lib/python3.12/site-packages/jupiter_python_sdk/jupiter.py", line 629, in quote
|
||||
quote_response['routePlan']
|
||||
~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||
KeyError: 'routePlan'
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1208, in follow_move
|
||||
transaction_data = await jupiter.swap(
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/jupiter_python_sdk/jupiter.py", line 679, in swap
|
||||
quoteResponse = await self.quote(
|
||||
^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/jupiter_python_sdk/jupiter.py", line 632, in quote
|
||||
raise Exception(quote_response['error'])
|
||||
Exception: Query parameter amount cannot be parsed: ParseIntError { kind: InvalidDigit }
|
||||
2024-10-21 07:26:44 [ERROR] <b>Move Failed:</b>
|
||||
Query parameter amount cannot be parsed: ParseIntError { kind: InvalidDigit }</b>
|
||||
AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAFEF8ss0Ijtep7x/QSQpelS9R/BLJJV8nYbkzHEgl6DWzmOFd2n25tuM+O/1eD2ihdf9x3I0z28Sq/iT8zbzEp8G1IH3U7ixqCaqbGoeydkTdTUUCkOQYTvNcEdWHVAFRzK0lvQkeFrHOnH/VIZV2eHsP0MRaqDX7AAqfqmHnGeMCOZn/LU4VSNrEZJg9hJjEvfwMjmNLCvJDpEyG0zH7Y1yRxM32R3yvnX/HBzojB9fApPOfuRWL27j4EX6B/qtMR3ZZQr5cDjeIUDo36Z8fIYs5w5bQtIw7N8HaurmKKk51Dsq78ybAhS/z3pI+NLtAmg7awmWSpft2HqsztqRU8ax3Mj/r/oP5ATGc5hI7qeU5QuiWjtLinKPbfRqPX7fjmctCBOG4edSvPLw1jCYM6gSsw50WSxwTyJCwZwPgQ5L2823zDUsxqG5ijrqPCB6f2lyFhze9/3f+5F5Y5m+Bc+cwDBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAR51VvyMcBu7nTFbs5oFQf9sbLeo/SOUQKxzaJWvBOPmoAL/0yHNoiWwg/BQHPr8ctao3X+gf5NvcgrpN+3XniyIKaZBLbu2IoL6YkUKYD80agehUczMoMmMcu2LhFij7Q/+if11/ZKdMCbHylYed5LCas238ndUUsyGqezjOXoEd8rjajwoFmY8jrhaBvsDL5Zahs5Z/FF0O6SMfd1QaoDCwAFAsBcFQALAAkDBBcBAAAAAAAMNxsNAAcBBAIOIQwMDwwcGw0YARYJGhkXCCIeGxMdExUUExMTExMTExMJBQ0gGw0QBREEEgYDCh8uwSCbM0HWnIECAwAAABEBZAABB2QBAhEBZAID2h5mBwAAAADyVZwCAAAAAGQAAAPvQyb1eS9sOzNqJRRfI95OXS0XoerHLNQS97NH9b7hxQMShg8GDUUEDBQRUjCdc1ZN5rgbYDY4PCgOqwZ3z8ZhitSJO/hZ8YdkSRwDn56cAQSklxFTCCj5aaUf2LjhOBzA/gejCiAKOXuMbjkdddnfkAUDAgABhAGF</b>
|
||||
{'order_id': None, 'token_in': 'CzLSujWBLFsSjncfkh59rUFqvafWcY5tzedWJSuypump', 'token_out': 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', 'amount_in': 3000.0, 'amount_out': 1055.732395, 'amount_in_USD': 1045.452, 'amount_out_USD': 1055.732395, 'percentage_swapped': 28.03275520023629, 'symbol_in': 'GOAT', 'symbol_out': 'USDC', 'before_source_balance': 10701.766482}
|
||||
2024-10-21 07:26:44 [ERROR] Query parameter amount cannot be parsed: ParseIntError { kind: InvalidDigit }
|
||||
Traceback (most recent call last):
|
||||
File "/usr/local/lib/python3.12/site-packages/jupiter_python_sdk/jupiter.py", line 629, in quote
|
||||
quote_response['routePlan']
|
||||
~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||
KeyError: 'routePlan'
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/app/app.py", line 1208, in follow_move
|
||||
transaction_data = await jupiter.swap(
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/jupiter_python_sdk/jupiter.py", line 679, in swap
|
||||
quoteResponse = await self.quote(
|
||||
^^^^^^^^^^^^^^^^^
|
||||
File "/usr/local/lib/python3.12/site-packages/jupiter_python_sdk/jupiter.py", line 632, in quote
|
||||
raise Exception(quote_response['error'])
|
||||
Exception: Query parameter amount cannot be parsed: ParseIntError { kind: InvalidDigit }
|
@ -1,544 +0,0 @@
|
||||
{
|
||||
"HnKkzR1YtFbUUxM6g3iVRS2RY68KHhGV7bNdfF1GCsJB": {
|
||||
"price": 0.007885,
|
||||
"decimals": 9,
|
||||
"name": "Kamala Horris",
|
||||
"symbol": "KAMA",
|
||||
"address": "HnKkzR1YtFbUUxM6g3iVRS2RY68KHhGV7bNdfF1GCsJB",
|
||||
"holdedAmount": 33500.0,
|
||||
"priice": 0.007923
|
||||
},
|
||||
"HUdqc5MR5h3FssESabPnQ1GTgTcPvnNudAuLj5J6a9sU": {
|
||||
"price": 0.004041,
|
||||
"decimals": 9,
|
||||
"name": "BONGO CAT",
|
||||
"symbol": "BONGO",
|
||||
"address": "HUdqc5MR5h3FssESabPnQ1GTgTcPvnNudAuLj5J6a9sU"
|
||||
},
|
||||
"4y9E3tJpGNzRr1592oWTPECgyp2VDSc1Bf3DqAm5FZsK": {
|
||||
"decimals": 6,
|
||||
"name": "FATGF",
|
||||
"symbol": "FATGF",
|
||||
"address": "4y9E3tJpGNzRr1592oWTPECgyp2VDSc1Bf3DqAm5FZsK",
|
||||
"holdedAmount": 30000.0,
|
||||
"priice": 0.001662,
|
||||
"price": 0.001539
|
||||
},
|
||||
"4GniFbshqU6VtWCLJnKadswa8QCk2cFg8cgBZrhe9dam": {
|
||||
"price": 0.005201,
|
||||
"decimals": 6,
|
||||
"name": "GOOFY",
|
||||
"symbol": "GOOFY",
|
||||
"address": "4GniFbshqU6VtWCLJnKadswa8QCk2cFg8cgBZrhe9dam",
|
||||
"holdedAmount": 4500.0,
|
||||
"priice": 0.004851
|
||||
},
|
||||
"3psH1Mj1f7yUfaD5gh6Zj7epE8hhrMkMETgv5TshQA4o": {
|
||||
"price": 0.008097,
|
||||
"decimals": 9,
|
||||
"name": "jeo boden",
|
||||
"symbol": "boden",
|
||||
"address": "3psH1Mj1f7yUfaD5gh6Zj7epE8hhrMkMETgv5TshQA4o",
|
||||
"holdedAmount": 6400.0
|
||||
},
|
||||
"8NNXWrWVctNw1UFeaBypffimTdcLCcD8XJzHvYsmgwpF": {
|
||||
"price": 0.02584,
|
||||
"decimals": 6,
|
||||
"name": "Brainlet",
|
||||
"symbol": "BRAINLET",
|
||||
"address": "8NNXWrWVctNw1UFeaBypffimTdcLCcD8XJzHvYsmgwpF",
|
||||
"holdedAmount": 7380.54934
|
||||
},
|
||||
"6D7NaB2xsLd7cauWu1wKk6KBsJohJmP2qZH9GEfVi5Ui": {
|
||||
"price": 0.02995,
|
||||
"decimals": 6,
|
||||
"name": "Shark Cat",
|
||||
"symbol": "SC",
|
||||
"address": "6D7NaB2xsLd7cauWu1wKk6KBsJohJmP2qZH9GEfVi5Ui",
|
||||
"holdedAmount": 5000.0
|
||||
},
|
||||
"Faf89929Ni9fbg4gmVZTca7eW6NFg877Jqn6MizT3Gvw": {
|
||||
"price": 0.002301,
|
||||
"decimals": 8,
|
||||
"name": "LandWolf",
|
||||
"symbol": "WOLF",
|
||||
"address": "Faf89929Ni9fbg4gmVZTca7eW6NFg877Jqn6MizT3Gvw",
|
||||
"holdedAmount": 108000.0
|
||||
},
|
||||
"3W52uCb8NW8ruMF9mmJX3oKiYAjdPai4633srsZFQCS6": {
|
||||
"decimals": 6,
|
||||
"name": "Biao Coin",
|
||||
"symbol": "$BIAO",
|
||||
"address": "3W52uCb8NW8ruMF9mmJX3oKiYAjdPai4633srsZFQCS6",
|
||||
"holdedAmount": 1650000.0
|
||||
},
|
||||
"5xNLcLCaXfJJiHKzzPuEqFBLJMETaPKcnEfCNL5SB2cT": {
|
||||
"decimals": 9,
|
||||
"name": "Dallino",
|
||||
"symbol": "Dall",
|
||||
"address": "5xNLcLCaXfJJiHKzzPuEqFBLJMETaPKcnEfCNL5SB2cT",
|
||||
"holdedAmount": 708677.532051592,
|
||||
"priice": 4.026e-06,
|
||||
"price": 4.026e-06
|
||||
},
|
||||
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v": {
|
||||
"price": 1.0,
|
||||
"decimals": 6,
|
||||
"name": "USD Coin",
|
||||
"symbol": "USDC",
|
||||
"address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
|
||||
"holdedAmount": 11.528114,
|
||||
"priice": 1.00073
|
||||
},
|
||||
"Akev8YDBQfuCv33M1tjDcaUFAsY4Q5izMSfhbozL1Q6j": {
|
||||
"decimals": 9,
|
||||
"name": "Ceiling Cat",
|
||||
"symbol": "CEILINGCAT",
|
||||
"address": "Akev8YDBQfuCv33M1tjDcaUFAsY4Q5izMSfhbozL1Q6j",
|
||||
"holdedAmount": 511117.33566278,
|
||||
"priice": 3.585e-06,
|
||||
"price": 0.000102038145
|
||||
},
|
||||
"BkVeSP2GsXV3AYoRJBSZTpFE8sXmcuGnRQcFgoWspump": {
|
||||
"price": 0.001581,
|
||||
"decimals": 6,
|
||||
"name": "autism",
|
||||
"symbol": "autism",
|
||||
"address": "BkVeSP2GsXV3AYoRJBSZTpFE8sXmcuGnRQcFgoWspump",
|
||||
"holdedAmount": 71123.480231
|
||||
},
|
||||
"6cvrZWgEUkr82yKAmxp5cQu7wgYYBPULf16EUBp4pump": {
|
||||
"price": 0.01385,
|
||||
"decimals": 6,
|
||||
"name": "Manifest",
|
||||
"symbol": "MANIFEST",
|
||||
"address": "6cvrZWgEUkr82yKAmxp5cQu7wgYYBPULf16EUBp4pump",
|
||||
"holdedAmount": 12940.81255
|
||||
},
|
||||
"D8r8XTuCrUhLheWeGXSwC3G92RhASficV3YA7B2XWcLv": {
|
||||
"price": 0.002363,
|
||||
"holdedAmount": 66511.860358533,
|
||||
"decimals": 9,
|
||||
"name": "catwifbag",
|
||||
"symbol": "BAG",
|
||||
"address": "D8r8XTuCrUhLheWeGXSwC3G92RhASficV3YA7B2XWcLv"
|
||||
},
|
||||
"2GPJhV9jNrj7TaLYMRgWkcy6sTKLcwntv7nZ7qDyMRGM": {
|
||||
"price": 0.006397,
|
||||
"decimals": 6,
|
||||
"name": "Believe In Something",
|
||||
"symbol": "bis",
|
||||
"address": "2GPJhV9jNrj7TaLYMRgWkcy6sTKLcwntv7nZ7qDyMRGM",
|
||||
"holdedAmount": 21000.0
|
||||
},
|
||||
"8mtVH6ZKf3c8zYMHKdgRyXPKJoSR6d56FPDQDUdSQxdA": {
|
||||
"decimals": 6,
|
||||
"name": "Fart Coin",
|
||||
"symbol": "Fart",
|
||||
"address": "8mtVH6ZKf3c8zYMHKdgRyXPKJoSR6d56FPDQDUdSQxdA",
|
||||
"holdedAmount": 672875.569584,
|
||||
"price": 0.0
|
||||
},
|
||||
"r8kCxSyaKCQBgs5v1dSTqheUU2ur8bLiYgBThMpAVyb": {
|
||||
"decimals": 6,
|
||||
"name": "Retardigrade",
|
||||
"symbol": "TARD",
|
||||
"address": "r8kCxSyaKCQBgs5v1dSTqheUU2ur8bLiYgBThMpAVyb",
|
||||
"holdedAmount": 176920.153819
|
||||
},
|
||||
"8Ki8DpuWNxu9VsS3kQbarsCWMcFGWkzzA8pUPto9zBd5": {
|
||||
"price": 0.06036,
|
||||
"decimals": 9,
|
||||
"name": "LOCK IN",
|
||||
"symbol": "LOCKIN",
|
||||
"address": "8Ki8DpuWNxu9VsS3kQbarsCWMcFGWkzzA8pUPto9zBd5",
|
||||
"holdedAmount": 562.91513794
|
||||
},
|
||||
"fESbUKjuMY6jzDH9VP8cy4p3pu2q5W2rK2XghVfNseP": {
|
||||
"price": 0.0004163,
|
||||
"decimals": 6,
|
||||
"name": "CatFrogDogShark",
|
||||
"symbol": "SOLANA",
|
||||
"address": "fESbUKjuMY6jzDH9VP8cy4p3pu2q5W2rK2XghVfNseP",
|
||||
"holdedAmount": 211284.151827,
|
||||
"priice": 0.0005751
|
||||
},
|
||||
"Av6qVigkb7USQyPXJkUvAEm4f599WTRvd75PUWBA9eNm": {
|
||||
"price": 0.0107,
|
||||
"decimals": 9,
|
||||
"name": "Costco Hot Dog",
|
||||
"symbol": "COST",
|
||||
"address": "Av6qVigkb7USQyPXJkUvAEm4f599WTRvd75PUWBA9eNm",
|
||||
"holdedAmount": 22669.168723884,
|
||||
"priice": 0.008802
|
||||
},
|
||||
"69kdRLyP5DTRkpHraaSZAQbWmAwzF9guKjZfzMXzcbAs": {
|
||||
"price": 2.147e-06,
|
||||
"decimals": 6,
|
||||
"name": "American Coin",
|
||||
"symbol": "USA",
|
||||
"address": "69kdRLyP5DTRkpHraaSZAQbWmAwzF9guKjZfzMXzcbAs",
|
||||
"holdedAmount": 936370585.712574
|
||||
},
|
||||
"DEJiPKx5GActUtB6qUssreUxkhXtL4hTQAAJZ7Ccw8se": {
|
||||
"price": 0.01023,
|
||||
"decimals": 6,
|
||||
"name": "Rawr",
|
||||
"symbol": "XD",
|
||||
"address": "DEJiPKx5GActUtB6qUssreUxkhXtL4hTQAAJZ7Ccw8se",
|
||||
"holdedAmount": 31264.506258
|
||||
},
|
||||
"DPaQfq5sFnoqw2Sh9WMmmASFL9LNu6RdtDqwE1tab2tB": {
|
||||
"price": 0.5156,
|
||||
"decimals": 9,
|
||||
"name": "Skibidi Toilet",
|
||||
"symbol": "SKBDI",
|
||||
"address": "DPaQfq5sFnoqw2Sh9WMmmASFL9LNu6RdtDqwE1tab2tB",
|
||||
"holdedAmount": 1e-09,
|
||||
"priice": 0.3638
|
||||
},
|
||||
"dekNoN3D8mXa4JHLwTbVXz8aPAyJUkk443UjcSpJKi4": {
|
||||
"price": 0.004308,
|
||||
"decimals": 6,
|
||||
"name": "peanie",
|
||||
"symbol": "peanie",
|
||||
"address": "dekNoN3D8mXa4JHLwTbVXz8aPAyJUkk443UjcSpJKi4",
|
||||
"holdedAmount": 29097.22112,
|
||||
"priice": 0.004563
|
||||
},
|
||||
"PzuaVAUH2tfxGZcbBR6kMxeJsBngnsPLFotGJNCtcsd": {
|
||||
"price": 0.04829,
|
||||
"decimals": 8,
|
||||
"name": "ZynCoin (Wormhole)",
|
||||
"symbol": "ZYN",
|
||||
"address": "PzuaVAUH2tfxGZcbBR6kMxeJsBngnsPLFotGJNCtcsd",
|
||||
"holdedAmount": 2424.00722783,
|
||||
"priice": 0.0591
|
||||
},
|
||||
"So11111111111111111111111111111111111111112": {
|
||||
"decimals": 9,
|
||||
"name": "Wrapped SOL",
|
||||
"symbol": "SOL",
|
||||
"address": "So11111111111111111111111111111111111111112",
|
||||
"priice": 142.85,
|
||||
"price": 170.71
|
||||
},
|
||||
"4nfn86ssbv7wiqcsw7bpvn46k24jhe334fudtyxhp1og": {
|
||||
"symbol": null,
|
||||
"price": 0.0
|
||||
},
|
||||
"SOL": {
|
||||
"symbol": null,
|
||||
"price": 170.668067692
|
||||
},
|
||||
"UwU8RVXB69Y6Dcju6cN2Qef6fykkq6UUNpB15rZku6Z": {
|
||||
"decimals": 6,
|
||||
"name": "Unicorn",
|
||||
"symbol": "UWU",
|
||||
"address": "UwU8RVXB69Y6Dcju6cN2Qef6fykkq6UUNpB15rZku6Z",
|
||||
"holdedAmount": 238181.964433,
|
||||
"price": 0.001013
|
||||
},
|
||||
"GtDZKAqvMZMnti46ZewMiXCa4oXF4bZxwQPoKzXPFxZn": {
|
||||
"decimals": 9,
|
||||
"name": "nubcat",
|
||||
"symbol": "nub",
|
||||
"address": "GtDZKAqvMZMnti46ZewMiXCa4oXF4bZxwQPoKzXPFxZn",
|
||||
"holdedAmount": 62626.296625781,
|
||||
"price": 0.03326
|
||||
},
|
||||
"DtR4D9FtVoTX2569gaL837ZgrB6wNjj6tkmnX9Rdk9B2": {
|
||||
"decimals": 6,
|
||||
"name": "aura",
|
||||
"symbol": "aura",
|
||||
"address": "DtR4D9FtVoTX2569gaL837ZgrB6wNjj6tkmnX9Rdk9B2",
|
||||
"holdedAmount": 9919.76735,
|
||||
"price": 0.02653
|
||||
},
|
||||
"24gG4br5xFBRmxdqpgirtxgcr7BaWoErQfc2uyDp2Qhh": {
|
||||
"decimals": 6,
|
||||
"name": "NOSTALGIA",
|
||||
"symbol": "NOS",
|
||||
"address": "24gG4br5xFBRmxdqpgirtxgcr7BaWoErQfc2uyDp2Qhh",
|
||||
"holdedAmount": 24367.98915,
|
||||
"price": 0.00271846
|
||||
},
|
||||
"EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm": {
|
||||
"decimals": 6,
|
||||
"name": "dogwifhat",
|
||||
"symbol": "$WIF",
|
||||
"address": "EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm",
|
||||
"holdedAmount": 0.00935,
|
||||
"price": 2.39
|
||||
},
|
||||
"26KMQVgDUoB6rEfnJ51yAABWWJND8uMtpnQgsHQ64Udr": {
|
||||
"decimals": 6,
|
||||
"name": "SAD HAMSTER",
|
||||
"symbol": "HAMMY",
|
||||
"address": "26KMQVgDUoB6rEfnJ51yAABWWJND8uMtpnQgsHQ64Udr",
|
||||
"holdedAmount": 1610.696945,
|
||||
"price": 0.02781
|
||||
},
|
||||
"6yjNqPzTSanBWSa6dxVEgTjePXBrZ2FoHLDQwYwEsyM6": {
|
||||
"decimals": 6,
|
||||
"name": "Chudjak",
|
||||
"symbol": "Chud",
|
||||
"address": "6yjNqPzTSanBWSa6dxVEgTjePXBrZ2FoHLDQwYwEsyM6",
|
||||
"holdedAmount": 4124.745134,
|
||||
"price": 0.02795
|
||||
},
|
||||
"4ytpZgVoNB66bFs6NRCUaAVsLdtYk2fHq4U92Jnjpump": {
|
||||
"decimals": 6,
|
||||
"name": "Banana Tape Wall",
|
||||
"symbol": "BTW",
|
||||
"address": "4ytpZgVoNB66bFs6NRCUaAVsLdtYk2fHq4U92Jnjpump",
|
||||
"holdedAmount": 0.996778,
|
||||
"price": 0.00360963
|
||||
},
|
||||
"2JcXacFwt9mVAwBQ5nZkYwCyXQkRcdsYrDXn6hj22SbP": {
|
||||
"decimals": 6,
|
||||
"name": "mini",
|
||||
"symbol": "mini",
|
||||
"address": "2JcXacFwt9mVAwBQ5nZkYwCyXQkRcdsYrDXn6hj22SbP",
|
||||
"holdedAmount": 3633.845994,
|
||||
"price": 0.06975
|
||||
},
|
||||
"5Wd2ALxQfnpgQKCyH4WL9giBiiuuLuJs84CJxfQccvmN": {
|
||||
"decimals": 6,
|
||||
"name": "real fast",
|
||||
"symbol": "speed",
|
||||
"address": "5Wd2ALxQfnpgQKCyH4WL9giBiiuuLuJs84CJxfQccvmN",
|
||||
"holdedAmount": 1.000531,
|
||||
"price": 0.002678
|
||||
},
|
||||
"BsTRFEVZhXbBuy5fhxbttuim8iwzXqMdRCfFftDAkkeu": {
|
||||
"decimals": 6,
|
||||
"name": "mao",
|
||||
"symbol": "mao",
|
||||
"address": "BsTRFEVZhXbBuy5fhxbttuim8iwzXqMdRCfFftDAkkeu",
|
||||
"holdedAmount": 1313337.849751,
|
||||
"price": 0.001587
|
||||
},
|
||||
"7EYnhQoR9YM3N7UoaKRoA44Uy8JeaZV3qyouov87awMs": {
|
||||
"decimals": 9,
|
||||
"name": "Silly Dragon",
|
||||
"symbol": "SILLY",
|
||||
"address": "7EYnhQoR9YM3N7UoaKRoA44Uy8JeaZV3qyouov87awMs",
|
||||
"holdedAmount": 125575.793823971,
|
||||
"price": 0.01472
|
||||
},
|
||||
"3ag1Mj9AKz9FAkCQ6gAEhpLSX8B2pUbPdkb9iBsDLZNB": {
|
||||
"decimals": 9,
|
||||
"name": "Honk",
|
||||
"symbol": "HONK",
|
||||
"address": "3ag1Mj9AKz9FAkCQ6gAEhpLSX8B2pUbPdkb9iBsDLZNB",
|
||||
"holdedAmount": 70780.323867533,
|
||||
"price": 0.00369
|
||||
},
|
||||
"7M9KJcPNC65ShLDmJmTNhVFcuY95Y1VMeYngKgt67D1t": {
|
||||
"decimals": 6,
|
||||
"name": "reddit dog",
|
||||
"symbol": "r/snoofi",
|
||||
"address": "7M9KJcPNC65ShLDmJmTNhVFcuY95Y1VMeYngKgt67D1t",
|
||||
"holdedAmount": 118734.201549,
|
||||
"price": 0.01307
|
||||
},
|
||||
"Bde151hvHepcj3DnkbdrXVBrTSTdeWj8kUEGU464V3Gm": {
|
||||
"decimals": 0,
|
||||
"name": "Raydium Concentrated Liquidity",
|
||||
"symbol": "RCL",
|
||||
"address": "Bde151hvHepcj3DnkbdrXVBrTSTdeWj8kUEGU464V3Gm",
|
||||
"holdedAmount": 1.0,
|
||||
"price": 0.0
|
||||
},
|
||||
"67PDPxcgJo6tCrfb8oStAEfqdSNWh5RoCun3frYtg4my": {
|
||||
"decimals": 9,
|
||||
"holdedAmount": 2.062218393,
|
||||
"symbol": null,
|
||||
"price": 0.0
|
||||
},
|
||||
"CzLSujWBLFsSjncfkh59rUFqvafWcY5tzedWJSuypump": {
|
||||
"decimals": 6,
|
||||
"name": "Goatseus Maximus",
|
||||
"symbol": "GOAT",
|
||||
"address": "CzLSujWBLFsSjncfkh59rUFqvafWcY5tzedWJSuypump",
|
||||
"holdedAmount": 442.814421,
|
||||
"price": 0.348484
|
||||
},
|
||||
"HfmWWtL3a6ZQAvM74nirtTkXJyjedLRj7Ljp3YMdVVBK": {
|
||||
"decimals": 0,
|
||||
"name": "Raydium Concentrated Liquidity",
|
||||
"symbol": "RCL",
|
||||
"address": "HfmWWtL3a6ZQAvM74nirtTkXJyjedLRj7Ljp3YMdVVBK",
|
||||
"holdedAmount": 1.0,
|
||||
"price": 0.0
|
||||
},
|
||||
"F6E9Wpxgi5DjoqEMJQNTCgsXYUcuQfnsTJpqYZ1i71se": {
|
||||
"decimals": 0,
|
||||
"name": "Raydium Concentrated Liquidity",
|
||||
"symbol": "RCL",
|
||||
"address": "F6E9Wpxgi5DjoqEMJQNTCgsXYUcuQfnsTJpqYZ1i71se",
|
||||
"holdedAmount": 1.0,
|
||||
"price": 0.0
|
||||
},
|
||||
"6Fb84TUdMNAVgwRinLeTgLov8dJnk5yhNt41Xq2a6s4c": {
|
||||
"decimals": 9,
|
||||
"holdedAmount": 56106.968899379,
|
||||
"name": "RIZZ",
|
||||
"symbol": "RIZZ",
|
||||
"address": "6Fb84TUdMNAVgwRinLeTgLov8dJnk5yhNt41Xq2a6s4c",
|
||||
"price": 0.002393
|
||||
},
|
||||
"BSqMUYb6ePwKsby85zrXaDa4SNf6AgZ9YfA2c4mZpump": {
|
||||
"decimals": 6,
|
||||
"holdedAmount": 57821.753872,
|
||||
"name": "Look bro...",
|
||||
"symbol": "LOOK",
|
||||
"address": "BSqMUYb6ePwKsby85zrXaDa4SNf6AgZ9YfA2c4mZpump",
|
||||
"price": 0.00247115
|
||||
},
|
||||
"CemfE7uJXwtcYRPNeiYYA8Qb1zi9BcosKKGYpnUxJe2C": {
|
||||
"decimals": 0,
|
||||
"name": "Raydium Concentrated Liquidity",
|
||||
"symbol": "RCL",
|
||||
"address": "CemfE7uJXwtcYRPNeiYYA8Qb1zi9BcosKKGYpnUxJe2C",
|
||||
"holdedAmount": 1.0,
|
||||
"price": 0.0
|
||||
},
|
||||
"CFyaDC9yjmE71wYw633HavRN3VQ3aq37sYujARR1pump": {
|
||||
"decimals": 6,
|
||||
"name": "Cafe",
|
||||
"symbol": "CAFE",
|
||||
"address": "CFyaDC9yjmE71wYw633HavRN3VQ3aq37sYujARR1pump",
|
||||
"holdedAmount": 30501.416679,
|
||||
"price": 0.006098
|
||||
},
|
||||
"AMjzRn1TBQwQfNAjHFeBb7uGbbqbJB7FzXAnGgdFPk6K": {
|
||||
"decimals": 6,
|
||||
"name": "SolCex ",
|
||||
"symbol": "SOLCEX",
|
||||
"address": "AMjzRn1TBQwQfNAjHFeBb7uGbbqbJB7FzXAnGgdFPk6K",
|
||||
"holdedAmount": 92.918643,
|
||||
"price": 0.01439
|
||||
},
|
||||
"HyxPoEjAggia3ZjkZWNPhChaBUZxxLt61UDxfeqkfqVE": {
|
||||
"decimals": 0,
|
||||
"name": "Raydium Concentrated Liquidity",
|
||||
"symbol": "RCL",
|
||||
"address": "HyxPoEjAggia3ZjkZWNPhChaBUZxxLt61UDxfeqkfqVE",
|
||||
"holdedAmount": 1.0,
|
||||
"price": 0.0
|
||||
},
|
||||
"AtTUzJVrPkBTXwiMZivVRKvWmCnVpRfnKq3cc5fopump": {
|
||||
"decimals": 6,
|
||||
"name": "Flying Spaghetti Monster",
|
||||
"symbol": "CFSM",
|
||||
"address": "AtTUzJVrPkBTXwiMZivVRKvWmCnVpRfnKq3cc5fopump",
|
||||
"holdedAmount": 985305.676094,
|
||||
"price": 0.0005911
|
||||
},
|
||||
"GQxrVxTHRvJ85gW9VpQdxURvD1NbkWkAVqa93CEMJYrC": {
|
||||
"decimals": 0,
|
||||
"name": "Raydium Concentrated Liquidity",
|
||||
"symbol": "RCL",
|
||||
"address": "GQxrVxTHRvJ85gW9VpQdxURvD1NbkWkAVqa93CEMJYrC",
|
||||
"holdedAmount": 1.0,
|
||||
"price": 0.0
|
||||
},
|
||||
"J7tYmq2JnQPvxyhcXpCDrvJnc9R5ts8rv7tgVHDPsw7U": {
|
||||
"decimals": 6,
|
||||
"name": "George Droyd",
|
||||
"symbol": "FLOYDAI",
|
||||
"address": "J7tYmq2JnQPvxyhcXpCDrvJnc9R5ts8rv7tgVHDPsw7U",
|
||||
"holdedAmount": 126823.452121,
|
||||
"price": 0.005168
|
||||
},
|
||||
"H7ed7UgcLp3ax4X1CQ5WuWDn6d1pprfMMYiv5ejwLWWU": {
|
||||
"decimals": 6,
|
||||
"name": "CHONKY",
|
||||
"symbol": "CHONKY",
|
||||
"address": "H7ed7UgcLp3ax4X1CQ5WuWDn6d1pprfMMYiv5ejwLWWU",
|
||||
"holdedAmount": 4571249.855977,
|
||||
"price": 3.409e-05
|
||||
},
|
||||
"4JZppS73qUrwaUfrgAjTvAxrBTNWECsZAoPQT6YysXV1": {
|
||||
"decimals": 0,
|
||||
"name": "Raydium Concentrated Liquidity",
|
||||
"symbol": "RCL",
|
||||
"address": "4JZppS73qUrwaUfrgAjTvAxrBTNWECsZAoPQT6YysXV1",
|
||||
"holdedAmount": 1.0,
|
||||
"price": 0.0
|
||||
},
|
||||
"7NQSHjuEGENZDWfSvPZz7oP2D6c5Jc3LjFC6uh179ufr": {
|
||||
"decimals": 9,
|
||||
"name": "\ud83d\uddff",
|
||||
"symbol": "MOAI",
|
||||
"address": "7NQSHjuEGENZDWfSvPZz7oP2D6c5Jc3LjFC6uh179ufr",
|
||||
"holdedAmount": 1e-09,
|
||||
"price": 0.1547
|
||||
},
|
||||
"ermX4zfUwUh5gcFbhWxpH4YSphZtaKHkxfX3GMRkoRu": {
|
||||
"decimals": 9,
|
||||
"name": "what the sigma?",
|
||||
"symbol": "erm",
|
||||
"address": "ermX4zfUwUh5gcFbhWxpH4YSphZtaKHkxfX3GMRkoRu",
|
||||
"holdedAmount": 100.0,
|
||||
"price": 0.0003534
|
||||
},
|
||||
"EKEWAk7hfnwfR8DBb1cTayPPambqyC7pwNiYkaYQKQHp": {
|
||||
"decimals": 6,
|
||||
"name": "Roaring Kitty",
|
||||
"symbol": "KITTY",
|
||||
"address": "EKEWAk7hfnwfR8DBb1cTayPPambqyC7pwNiYkaYQKQHp",
|
||||
"holdedAmount": 0.284553,
|
||||
"price": 0.002791
|
||||
},
|
||||
"7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr": {
|
||||
"decimals": 9,
|
||||
"name": "POPCAT",
|
||||
"symbol": "POPCAT",
|
||||
"address": "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr",
|
||||
"holdedAmount": 0.000847952,
|
||||
"price": 1.4
|
||||
},
|
||||
"ENKS64JiF1zqUoDK8co94H56jyeSLk7reCL9JMgb9kvN": {
|
||||
"decimals": 9,
|
||||
"name": "KODOG",
|
||||
"symbol": "KODOG",
|
||||
"address": "ENKS64JiF1zqUoDK8co94H56jyeSLk7reCL9JMgb9kvN",
|
||||
"holdedAmount": 99.0,
|
||||
"price": 0.00290011857
|
||||
},
|
||||
"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB": {
|
||||
"decimals": 6,
|
||||
"name": "USDT",
|
||||
"symbol": "USDT",
|
||||
"address": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
|
||||
"holdedAmount": 0.060209,
|
||||
"price": 0.9996
|
||||
},
|
||||
"3XxvmED354933DwSPJuzB7SE9uiWpD1ErydDuhmbFRMk": {
|
||||
"decimals": 6,
|
||||
"name": "doginthpool",
|
||||
"symbol": "DIP",
|
||||
"address": "3XxvmED354933DwSPJuzB7SE9uiWpD1ErydDuhmbFRMk",
|
||||
"holdedAmount": 754903.229049,
|
||||
"price": 0.00323517
|
||||
},
|
||||
"ukHH6c7mMyiWCf1b9pnWe25TSpkDDt3H5pQZgZ74J82": {
|
||||
"decimals": 6,
|
||||
"name": "BOOK OF MEME",
|
||||
"symbol": "BOME",
|
||||
"address": "ukHH6c7mMyiWCf1b9pnWe25TSpkDDt3H5pQZgZ74J82",
|
||||
"holdedAmount": 0.790596,
|
||||
"price": 0.009356
|
||||
},
|
||||
"FkBF9u1upwEMUPxnXjcydxxVSxgr8f3k1YXbz7G7bmtA": {
|
||||
"decimals": 6,
|
||||
"holdedAmount": 331150.293776,
|
||||
"name": "glorp",
|
||||
"symbol": "glorp",
|
||||
"address": "FkBF9u1upwEMUPxnXjcydxxVSxgr8f3k1YXbz7G7bmtA",
|
||||
"price": 0.0101
|
||||
}
|
||||
}
|
@ -1,179 +0,0 @@
|
||||
{
|
||||
"9jca8QgA8b95FTSSANzp54LPmsSoqPijnhMsqgghAQTP": {
|
||||
"decimals": 6,
|
||||
"name": "Throne PePe",
|
||||
"symbol": "TEPE",
|
||||
"address": "9jca8QgA8b95FTSSANzp54LPmsSoqPijnhMsqgghAQTP",
|
||||
"holdedAmount": 2000.0
|
||||
},
|
||||
"TyHkZNXAvRCLfNrXp83zMYTSe4V3fkX2ZE1jNX2sjV1": {
|
||||
"decimals": 9,
|
||||
"name": "ICECAT",
|
||||
"symbol": "ICECAT",
|
||||
"address": "TyHkZNXAvRCLfNrXp83zMYTSe4V3fkX2ZE1jNX2sjV1",
|
||||
"holdedAmount": 555.0
|
||||
},
|
||||
"GoRnxWR5h4HMYAbCWhfPxsTF6N27jTRkBDFpAsvLpump": {
|
||||
"decimals": 6,
|
||||
"name": "KING SUGAR GLIDER",
|
||||
"symbol": "KSG",
|
||||
"address": "GoRnxWR5h4HMYAbCWhfPxsTF6N27jTRkBDFpAsvLpump",
|
||||
"holdedAmount": 2000.0
|
||||
},
|
||||
"AcV2T3mwLUqMiiqcsafVm35zwPQkmLrfRtaW3716Fzvi": {
|
||||
"decimals": 6,
|
||||
"name": "rexwifhat",
|
||||
"symbol": "REXHAT",
|
||||
"address": "AcV2T3mwLUqMiiqcsafVm35zwPQkmLrfRtaW3716Fzvi",
|
||||
"holdedAmount": 1000.0
|
||||
},
|
||||
"jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL": {
|
||||
"decimals": 9,
|
||||
"name": "JITO",
|
||||
"symbol": "JTO",
|
||||
"address": "jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL",
|
||||
"holdedAmount": 0.002967742
|
||||
},
|
||||
"BuNthH8oEupwa3HUHNiTgfvvdSMgk3uAHyJMmMuGUAEK": {
|
||||
"decimals": 6,
|
||||
"holdedAmount": 85000.0
|
||||
},
|
||||
"DTEqTxxGFn3SZ4C8tNP35X8iegCCgCBrX974WFSuYVZh": {
|
||||
"decimals": 9,
|
||||
"holdedAmount": 136.0
|
||||
},
|
||||
"5qd7F8VLHiLWwx13UbxU5v5hPKCSSXYEE5pSjkYr7ytp": {
|
||||
"decimals": 9,
|
||||
"name": "KEVO",
|
||||
"symbol": "KEVO",
|
||||
"address": "5qd7F8VLHiLWwx13UbxU5v5hPKCSSXYEE5pSjkYr7ytp",
|
||||
"holdedAmount": 297.0
|
||||
},
|
||||
"BrMXXZ5PkyAQpyWNT8AGjK8s3EVUQkGjS5rsCAXQQHVj": {
|
||||
"decimals": 9,
|
||||
"name": "BONANO",
|
||||
"symbol": "BONANO",
|
||||
"address": "BrMXXZ5PkyAQpyWNT8AGjK8s3EVUQkGjS5rsCAXQQHVj",
|
||||
"holdedAmount": 333.0
|
||||
},
|
||||
"C2DbRWaoDJKMgegEKQuYCnViM9VdhrVR6FptPLm6stY7": {
|
||||
"decimals": 9,
|
||||
"name": "Trump PePe",
|
||||
"symbol": "TRUPE",
|
||||
"address": "C2DbRWaoDJKMgegEKQuYCnViM9VdhrVR6FptPLm6stY7",
|
||||
"holdedAmount": 32000.0
|
||||
},
|
||||
"9HvM3nS2eDKWxNvi8vSFXRhHA1xhDW33rt4ZA1bE1DbV": {
|
||||
"decimals": 9,
|
||||
"name": "Relend",
|
||||
"symbol": "REL",
|
||||
"address": "9HvM3nS2eDKWxNvi8vSFXRhHA1xhDW33rt4ZA1bE1DbV",
|
||||
"holdedAmount": 100.0
|
||||
},
|
||||
"3UfknvCm4No13GHBPwNvXqJt9kroZcPv3psWswqpzixt": {
|
||||
"decimals": 6,
|
||||
"name": "Turtle Pepe",
|
||||
"symbol": "TUPE",
|
||||
"address": "3UfknvCm4No13GHBPwNvXqJt9kroZcPv3psWswqpzixt",
|
||||
"holdedAmount": 2000.0
|
||||
},
|
||||
"217onbknQpFVEpyTCknieq3KVE8a9o4R7WhQGN4opQck": {
|
||||
"decimals": 9,
|
||||
"name": "MOCHO",
|
||||
"symbol": "MOCHO",
|
||||
"address": "217onbknQpFVEpyTCknieq3KVE8a9o4R7WhQGN4opQck",
|
||||
"holdedAmount": 198.0
|
||||
},
|
||||
"3psH1Mj1f7yUfaD5gh6Zj7epE8hhrMkMETgv5TshQA4o": {
|
||||
"decimals": 9,
|
||||
"name": "jeo boden",
|
||||
"symbol": "boden",
|
||||
"address": "3psH1Mj1f7yUfaD5gh6Zj7epE8hhrMkMETgv5TshQA4o",
|
||||
"holdedAmount": 1000.0
|
||||
},
|
||||
"3W52uCb8NW8ruMF9mmJX3oKiYAjdPai4633srsZFQCS6": {
|
||||
"decimals": 6,
|
||||
"name": "Biao Coin",
|
||||
"symbol": "$BIAO",
|
||||
"address": "3W52uCb8NW8ruMF9mmJX3oKiYAjdPai4633srsZFQCS6",
|
||||
"holdedAmount": 1061644.458127
|
||||
},
|
||||
"Faf89929Ni9fbg4gmVZTca7eW6NFg877Jqn6MizT3Gvw": {
|
||||
"decimals": 8,
|
||||
"name": "LandWolf",
|
||||
"symbol": "WOLF",
|
||||
"address": "Faf89929Ni9fbg4gmVZTca7eW6NFg877Jqn6MizT3Gvw",
|
||||
"holdedAmount": 5000.0
|
||||
},
|
||||
"5xNLcLCaXfJJiHKzzPuEqFBLJMETaPKcnEfCNL5SB2cT": {
|
||||
"decimals": 9,
|
||||
"name": "Dallino",
|
||||
"symbol": "Dall",
|
||||
"address": "5xNLcLCaXfJJiHKzzPuEqFBLJMETaPKcnEfCNL5SB2cT",
|
||||
"holdedAmount": 708677.532051592
|
||||
},
|
||||
"6D7NaB2xsLd7cauWu1wKk6KBsJohJmP2qZH9GEfVi5Ui": {
|
||||
"decimals": 6,
|
||||
"name": "Shark Cat",
|
||||
"symbol": "SC",
|
||||
"address": "6D7NaB2xsLd7cauWu1wKk6KBsJohJmP2qZH9GEfVi5Ui",
|
||||
"holdedAmount": 5000.0
|
||||
},
|
||||
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v": {
|
||||
"price": 1.00058,
|
||||
"decimals": 6,
|
||||
"name": "USD Coin",
|
||||
"symbol": "USDC",
|
||||
"address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
|
||||
"holdedAmount": 21.023377
|
||||
},
|
||||
"4GniFbshqU6VtWCLJnKadswa8QCk2cFg8cgBZrhe9dam": {
|
||||
"decimals": 6,
|
||||
"name": "GOOFY",
|
||||
"symbol": "GOOFY",
|
||||
"address": "4GniFbshqU6VtWCLJnKadswa8QCk2cFg8cgBZrhe9dam",
|
||||
"holdedAmount": 1936.132216
|
||||
},
|
||||
"4y9E3tJpGNzRr1592oWTPECgyp2VDSc1Bf3DqAm5FZsK": {
|
||||
"decimals": 6,
|
||||
"name": "FATGF",
|
||||
"symbol": "FATGF",
|
||||
"address": "4y9E3tJpGNzRr1592oWTPECgyp2VDSc1Bf3DqAm5FZsK",
|
||||
"holdedAmount": 138268.428197
|
||||
},
|
||||
"Akev8YDBQfuCv33M1tjDcaUFAsY4Q5izMSfhbozL1Q6j": {
|
||||
"decimals": 9,
|
||||
"name": "Ceiling Cat",
|
||||
"symbol": "CEILINGCAT",
|
||||
"address": "Akev8YDBQfuCv33M1tjDcaUFAsY4Q5izMSfhbozL1Q6j",
|
||||
"holdedAmount": 398526.085798546
|
||||
},
|
||||
"HnKkzR1YtFbUUxM6g3iVRS2RY68KHhGV7bNdfF1GCsJB": {
|
||||
"decimals": 9,
|
||||
"name": "Kamala Horris",
|
||||
"symbol": "KAMA",
|
||||
"address": "HnKkzR1YtFbUUxM6g3iVRS2RY68KHhGV7bNdfF1GCsJB",
|
||||
"holdedAmount": 33733.684394767
|
||||
},
|
||||
"r8kCxSyaKCQBgs5v1dSTqheUU2ur8bLiYgBThMpAVyb": {
|
||||
"decimals": 6,
|
||||
"name": "Retardigrade",
|
||||
"symbol": "TARD",
|
||||
"address": "r8kCxSyaKCQBgs5v1dSTqheUU2ur8bLiYgBThMpAVyb",
|
||||
"holdedAmount": 176920.153819
|
||||
},
|
||||
"8mtVH6ZKf3c8zYMHKdgRyXPKJoSR6d56FPDQDUdSQxdA": {
|
||||
"decimals": 6,
|
||||
"name": "Fart Coin",
|
||||
"symbol": "Fart",
|
||||
"address": "8mtVH6ZKf3c8zYMHKdgRyXPKJoSR6d56FPDQDUdSQxdA",
|
||||
"holdedAmount": 672875.569584
|
||||
},
|
||||
"HUdqc5MR5h3FssESabPnQ1GTgTcPvnNudAuLj5J6a9sU": {
|
||||
"price": 0.003448,
|
||||
"decimals": 9,
|
||||
"name": "BONGO CAT",
|
||||
"symbol": "BONGO",
|
||||
"address": "HUdqc5MR5h3FssESabPnQ1GTgTcPvnNudAuLj5J6a9sU"
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
747
crypto/sol/modules/SolanaAPI.py
Normal file
747
crypto/sol/modules/SolanaAPI.py
Normal file
@ -0,0 +1,747 @@
|
||||
import sys
|
||||
import os
|
||||
|
||||
import aiohttp
|
||||
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
import asyncio
|
||||
import json
|
||||
import logging
|
||||
import random
|
||||
import websockets
|
||||
from typing import Dict, List, Optional
|
||||
import requests
|
||||
from datetime import datetime
|
||||
from solana.rpc.types import TokenAccountOpts, TxOpts
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
SOLANA_ENDPOINTS = [
|
||||
"wss://api.mainnet-beta.solana.com",
|
||||
]
|
||||
PING_INTERVAL = 30
|
||||
SUBSCRIBE_INTERVAL = 1*60 # Resubscribe every 1 minute
|
||||
|
||||
from config import (
|
||||
FOLLOWED_WALLET, SOLANA_HTTP_URL, DISPLAY_CURRENCY
|
||||
)
|
||||
|
||||
from modules.utils import telegram_utils
|
||||
|
||||
class SolanaWS:
|
||||
def __init__(self, on_message: Optional[callable] = None):
|
||||
self.websocket = None
|
||||
self.subscription_id = None
|
||||
self.message_queue = asyncio.Queue()
|
||||
self.on_message = on_message
|
||||
self.websocket = None
|
||||
|
||||
async def connect(self):
|
||||
while True:
|
||||
try:
|
||||
current_url = random.choice(SOLANA_ENDPOINTS)
|
||||
self.websocket = await websockets.connect(current_url, ping_interval=30, ping_timeout=20)
|
||||
logger.info(f"Connected to Solana websocket: {current_url}")
|
||||
return
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to connect to {current_url}: {e}")
|
||||
await asyncio.sleep(5)
|
||||
|
||||
async def ws_jsonrpc(self, ws, method, params=None, doProcessResponse = True):
|
||||
if not isinstance(params, list):
|
||||
params = [params] if params is not None else []
|
||||
|
||||
request = {
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1,
|
||||
"method": method,
|
||||
"params": params
|
||||
}
|
||||
|
||||
await ws.send(json.dumps(request))
|
||||
if not doProcessResponse:
|
||||
return None
|
||||
else:
|
||||
response = await self.websocket.recv()
|
||||
response_data = json.loads(response)
|
||||
|
||||
if 'result' in response_data:
|
||||
return response_data['result']
|
||||
elif 'error' in response_data:
|
||||
logger.error(f"Error in WebSocket RPC call: {response_data['error']}")
|
||||
return None
|
||||
else:
|
||||
logger.warning(f"Unexpected response: {response_data}")
|
||||
return None
|
||||
|
||||
async def subscribe(self):
|
||||
params = [
|
||||
{"mentions": [FOLLOWED_WALLET]},
|
||||
{"commitment": "confirmed"}
|
||||
]
|
||||
result = await self.ws_jsonrpc("logsSubscribe", params, doProcessResponse=False)
|
||||
response = process_messages(self.websocket)
|
||||
if result is not None:
|
||||
self.subscription_id = result
|
||||
logger.info(f"Subscription successful. Subscription id: {self.subscription_id}")
|
||||
else:
|
||||
logger.error("Failed to subscribe")
|
||||
|
||||
async def unsubscribe(self):
|
||||
if self.subscription_id:
|
||||
result = await self.ws_jsonrpc("logsUnsubscribe", [self.subscription_id])
|
||||
if result:
|
||||
logger.info(f"Unsubscribed from subscription id: {self.subscription_id}")
|
||||
self.subscription_id = None
|
||||
else:
|
||||
logger.error(f"Failed to unsubscribe from subscription id: {self.subscription_id}")
|
||||
|
||||
async def receive_messages(self):
|
||||
while True:
|
||||
try:
|
||||
message = await self.websocket.recv()
|
||||
await self.message_queue.put(message)
|
||||
except websockets.exceptions.ConnectionClosedError:
|
||||
logger.error("WebSocket connection closed")
|
||||
break
|
||||
except Exception as e:
|
||||
logger.error(f"Error receiving message: {e}")
|
||||
break
|
||||
|
||||
async def process_messages(self):
|
||||
while True:
|
||||
message = await self.message_queue.get()
|
||||
if self.on_message:
|
||||
await self.on_message(message)
|
||||
logger.info(f"Received message: {message}")
|
||||
|
||||
async def close(self):
|
||||
if self.websocket:
|
||||
await self.websocket.close()
|
||||
logger.info("WebSocket connection closed")
|
||||
|
||||
async def solana_jsonrpc(method, params=None, jsonParsed=True):
|
||||
if not isinstance(params, list):
|
||||
params = [params] if params is not None else []
|
||||
|
||||
data = {
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1,
|
||||
"method": method,
|
||||
"params": params
|
||||
}
|
||||
|
||||
if jsonParsed:
|
||||
data["params"].append({"encoding": "jsonParsed", "maxSupportedTransactionVersion": 0})
|
||||
else:
|
||||
data["params"].append({"maxSupportedTransactionVersion": 0})
|
||||
|
||||
try:
|
||||
response = requests.post(SOLANA_HTTP_URL, headers={"Content-Type": "application/json"}, data=json.dumps(data))
|
||||
response.raise_for_status()
|
||||
result = response.json()
|
||||
if 'result' not in result or 'error' in result:
|
||||
logger.error("Error fetching data from Solana RPC:", result)
|
||||
return None
|
||||
return result['result']
|
||||
except Exception as e:
|
||||
logger.error(f"Error fetching data from Solana RPC: {e}")
|
||||
return None
|
||||
|
||||
class SolanaAPI:
|
||||
def __init__(self, process_transaction_callback, on_initial_subscription_callback = None, on_bot_message=None):
|
||||
self.process_transaction = process_transaction_callback
|
||||
self.on_initial_subscription = on_initial_subscription_callback
|
||||
self.on_bot_message = on_bot_message,
|
||||
|
||||
self.dex = SolanaDEX(DISPLAY_CURRENCY)
|
||||
self.solana_ws = SolanaWS(on_message=self.process_transaction)
|
||||
|
||||
async def process_messages(self, solana_ws):
|
||||
while True:
|
||||
message = await solana_ws.message_queue.get()
|
||||
await self.process_transaction(message)
|
||||
|
||||
async def wallet_watch_loop(self):
|
||||
|
||||
solana_ws = SolanaWS(on_message=self.process_transaction)
|
||||
first_subscription = True
|
||||
|
||||
while True:
|
||||
try:
|
||||
await solana_ws.connect()
|
||||
await solana_ws.subscribe()
|
||||
|
||||
if first_subscription:
|
||||
asyncio.create_task(self.on_initial_subscription())
|
||||
first_subscription = False
|
||||
|
||||
await self.on_bot_message(f"Solana mainnet connected ({solana_ws.subscription_id})...")
|
||||
|
||||
receive_task = asyncio.create_task(solana_ws.receive_messages())
|
||||
process_task = asyncio.create_task(solana_ws.process_messages())
|
||||
|
||||
try:
|
||||
await asyncio.gather(receive_task, process_task)
|
||||
except asyncio.CancelledError:
|
||||
pass
|
||||
finally:
|
||||
receive_task.cancel()
|
||||
process_task.cancel()
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"An unexpected error occurred: {e}")
|
||||
finally:
|
||||
await solana_ws.unsubscribe()
|
||||
if solana_ws.websocket:
|
||||
await solana_ws.close()
|
||||
await self.on_bot_message("Reconnecting...")
|
||||
await asyncio.sleep(5)
|
||||
|
||||
async def process_transaction(self, signature):
|
||||
print(f"Processing transaction: {signature['signature']}")
|
||||
# Add your transaction processing logic here
|
||||
|
||||
async def get_last_transactions(self, account_address, check_interval=300, limit=1000):
|
||||
last_check_time = None
|
||||
last_signature = None
|
||||
|
||||
while True:
|
||||
current_time = datetime.now()
|
||||
|
||||
if last_check_time is None or (current_time - last_check_time).total_seconds() >= check_interval:
|
||||
params = [
|
||||
account_address,
|
||||
{
|
||||
"limit": limit
|
||||
}
|
||||
]
|
||||
|
||||
if last_signature:
|
||||
params[1]["before"] = last_signature
|
||||
|
||||
result = await solana_jsonrpc("getSignaturesForAddress", params)
|
||||
|
||||
if result:
|
||||
for signature in result:
|
||||
if last_signature and signature['signature'] == last_signature:
|
||||
break
|
||||
|
||||
await self.process_transaction(signature)
|
||||
|
||||
if result:
|
||||
last_signature = result[0]['signature']
|
||||
|
||||
last_check_time = current_time
|
||||
|
||||
await asyncio.sleep(1)
|
||||
|
||||
async def get_token_metadata_symbol(mint_address):
|
||||
global TOKENS_INFO
|
||||
|
||||
if mint_address in TOKENS_INFO and 'symbol' in TOKENS_INFO[mint_address]:
|
||||
return TOKENS_INFO[mint_address].get('symbol')
|
||||
|
||||
try:
|
||||
account_data_result = await self.solana_ws.solana_jsonrpc("getAccountInfo", mint_address)
|
||||
if 'value' in account_data_result and 'data' in account_data_result['value']:
|
||||
account_data_data = account_data_result['value']['data']
|
||||
if 'parsed' in account_data_data and 'info' in account_data_data['parsed']:
|
||||
account_data_info = account_data_data['parsed']['info']
|
||||
if 'decimals' in account_data_info:
|
||||
if mint_address in TOKENS_INFO:
|
||||
TOKENS_INFO[mint_address]['decimals'] = account_data_info['decimals']
|
||||
else:
|
||||
TOKENS_INFO[mint_address] = {'decimals': account_data_info['decimals']}
|
||||
if 'tokenName' in account_data_info:
|
||||
if mint_address in TOKENS_INFO:
|
||||
TOKENS_INFO[mint_address]['name'] = account_data_info['tokenName']
|
||||
else:
|
||||
TOKENS_INFO[mint_address] = {'name': account_data_info['tokenName']}
|
||||
|
||||
metadata = await get_token_metadata(mint_address)
|
||||
if metadata:
|
||||
if mint_address in TOKENS_INFO:
|
||||
TOKENS_INFO[mint_address].update(metadata)
|
||||
else:
|
||||
TOKENS_INFO[mint_address] = metadata
|
||||
await save_token_info()
|
||||
# TOKENS_INFO[mint_address] = metadata
|
||||
# return metadata.get('symbol') or metadata.get('name')
|
||||
return TOKENS_INFO[mint_address].get('symbol')
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching token name for {mint_address}: {str(e)}")
|
||||
return None
|
||||
|
||||
async def get_transaction_details_rpc(tx_signature, readfromDump=False):
|
||||
global FOLLOWED_WALLET_VALUE, YOUR_WALLET_VALUE, TOKEN_PRICES, TOKENS_INFO
|
||||
try:
|
||||
if readfromDump and os.path.exists('./logs/transation_details.json'):
|
||||
with open('./logs/transation_details.json', 'r') as f: # trump_swap_tr_details
|
||||
transaction_details = json.load(f)
|
||||
return transaction_details
|
||||
else:
|
||||
transaction_details = await solana_jsonrpc("getTransaction", tx_signature)
|
||||
with open('./logs/transation_details.json', 'w') as f:
|
||||
json.dump(transaction_details, f, indent=2)
|
||||
|
||||
if transaction_details is None:
|
||||
logging.error(f"Error fetching transaction details for {tx_signature}")
|
||||
return None
|
||||
|
||||
# Initialize default result structure
|
||||
parsed_result = {
|
||||
"order_id": None,
|
||||
"token_in": None,
|
||||
"token_out": None,
|
||||
"amount_in": 0,
|
||||
"amount_out": 0,
|
||||
"amount_in_USD": 0,
|
||||
"amount_out_USD": 0,
|
||||
"percentage_swapped": 0
|
||||
}
|
||||
|
||||
# Extract order_id from logs
|
||||
log_messages = transaction_details.get("meta", {}).get("logMessages", [])
|
||||
for log in log_messages:
|
||||
if "order_id" in log:
|
||||
parsed_result["order_id"] = log.split(":")[2].strip()
|
||||
break
|
||||
|
||||
# Extract token transfers from innerInstructions
|
||||
inner_instructions = transaction_details.get('meta', {}).get('innerInstructions', [])
|
||||
for instruction_set in inner_instructions:
|
||||
for instruction in instruction_set.get('instructions', []):
|
||||
if instruction.get('program') == 'spl-token' and instruction.get('parsed', {}).get('type') == 'transferChecked':
|
||||
info = instruction['parsed']['info']
|
||||
mint = info['mint']
|
||||
amount = float(info['tokenAmount']['amount']) / 10 ** info['tokenAmount']['decimals'] # Adjust for decimals
|
||||
|
||||
# Determine which token is being swapped in and out based on zero balances
|
||||
if parsed_result["token_in"] is None and amount > 0:
|
||||
parsed_result["token_in"] = mint
|
||||
parsed_result["amount_in"] = amount
|
||||
|
||||
|
||||
if parsed_result["token_in"] is None or parsed_result["token_out"] is None:
|
||||
# if we've failed to extract token_in and token_out from the transaction details, try a second method
|
||||
inner_instructions = transaction_details.get('meta', {}).get('innerInstructions', [])
|
||||
transfers = []
|
||||
|
||||
for instruction_set in inner_instructions:
|
||||
for instruction in instruction_set.get('instructions', []):
|
||||
if instruction.get('program') == 'spl-token' and instruction.get('parsed', {}).get('type') in ['transfer', 'transferChecked']:
|
||||
info = instruction['parsed']['info']
|
||||
amount = float(info['amount']) if 'amount' in info else float(info['tokenAmount']['amount'])
|
||||
decimals = info['tokenAmount']['decimals'] if 'tokenAmount' in info else 0
|
||||
adjusted_amount = amount / (10 ** decimals)
|
||||
# adjusted_amount = float(info["amount"]) / (10 ** (info["tokenAmount"]["decimals"] if 'tokenAmount' in info else 0))
|
||||
transfers.append({
|
||||
'mint': info.get('mint'),
|
||||
'amount': adjusted_amount,
|
||||
'source': info['source'],
|
||||
'destination': info['destination']
|
||||
})
|
||||
|
||||
# Identify token_in and token_out
|
||||
if len(transfers) >= 2:
|
||||
parsed_result["token_in"] = transfers[0]['mint']
|
||||
parsed_result["amount_in"] = transfers[0]['amount']
|
||||
parsed_result["token_out"] = transfers[-1]['mint']
|
||||
parsed_result["amount_out"] = transfers[-1]['amount']
|
||||
|
||||
# If mint is not provided, query the Solana network for the account data
|
||||
if parsed_result["token_in"] is None or parsed_result["token_out"] is None:
|
||||
#for transfer in transfers:
|
||||
# do only first and last transfer
|
||||
for transfer in [transfers[0], transfers[-1]]:
|
||||
if transfer['mint'] is None:
|
||||
# Query the Solana network for the account data
|
||||
account_data_result = await solana_jsonrpc("getAccountInfo", transfer['source'])
|
||||
|
||||
if 'value' in account_data_result and 'data' in account_data_result['value']:
|
||||
account_data_value = account_data_result['value']
|
||||
account_data_data = account_data_value['data']
|
||||
if 'parsed' in account_data_data and 'info' in account_data_data['parsed']:
|
||||
account_data_info = account_data_data['parsed']['info']
|
||||
if 'mint' in account_data_info:
|
||||
transfer['mint'] = account_data_info['mint']
|
||||
if transfer['mint'] in TOKENS_INFO or 'decimals' not in TOKENS_INFO[transfer['mint']]:
|
||||
await get_token_metadata_symbol(transfer['mint'])
|
||||
# get actual prices
|
||||
current_price = await get_token_prices([transfer['mint']])
|
||||
|
||||
if parsed_result["token_in"] is None:
|
||||
parsed_result["token_in"] = transfer['mint']
|
||||
parsed_result["symbol_in"] = TOKENS_INFO[transfer['mint']]['symbol']
|
||||
parsed_result["amount_in"] = transfer['amount']/10**TOKENS_INFO[transfer['mint']]['decimals']
|
||||
parsed_result["amount_in_USD"] = parsed_result["amount_in"] * TOKENS_INFO[transfer['mint']].get('price', current_price[transfer['mint']])
|
||||
elif parsed_result["token_out"] is None:
|
||||
parsed_result["token_out"] = transfer['mint']
|
||||
parsed_result["symbol_out"] = TOKENS_INFO[transfer['mint']]['symbol']
|
||||
parsed_result["amount_out"] = transfer['amount']/10**TOKENS_INFO[transfer['mint']]['decimals']
|
||||
parsed_result["amount_out_USD"] = parsed_result["amount_out"] * TOKENS_INFO[transfer['mint']]['price']
|
||||
|
||||
pre_balalnces = transaction_details.get('meta', {}).get('preTokenBalances', [])
|
||||
for balance in pre_balalnces:
|
||||
if balance['mint'] == parsed_result["token_in"] and balance['owner'] == FOLLOWED_WALLET:
|
||||
parsed_result["before_source_balance"] = float(balance['uiTokenAmount']['amount']) / 10 ** balance['uiTokenAmount']['decimals']
|
||||
break
|
||||
|
||||
|
||||
# Calculate percentage swapped
|
||||
try:
|
||||
if parsed_result["amount_in"] > 0 and 'before_source_balance' in parsed_result and parsed_result["before_source_balance"] > 0:
|
||||
parsed_result["percentage_swapped"] = (parsed_result["amount_in"] / parsed_result["before_source_balance"]) * 100
|
||||
else:
|
||||
# calculate based on total wallet value: FOLLOWED_WALLET_VALUE
|
||||
parsed_result["percentage_swapped"] = (parsed_result["amount_in_USD"] / FOLLOWED_WALLET_VALUE) * 100
|
||||
except Exception as e:
|
||||
logging.error(f"Error calculating percentage swapped: {e}")
|
||||
|
||||
return parsed_result
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print("Error fetching transaction details:", e)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class SolanaDEX:
|
||||
def __init__(self, DISPLAY_CURRENCY):
|
||||
self.DISPLAY_CURRENCY = DISPLAY_CURRENCY
|
||||
pass
|
||||
|
||||
async def get_token_prices(token_addresses: List[str]) -> Dict[str, float]:
|
||||
global TOKENS_INFO
|
||||
|
||||
# Skip for USD
|
||||
prices = {addr: 1.0 for addr in token_addresses if addr == "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"}
|
||||
remaining_tokens = [addr for addr in token_addresses if addr not in prices]
|
||||
|
||||
# Try CoinGecko
|
||||
coingecko_prices = await self.get_prices_from_coingecko(remaining_tokens)
|
||||
prices.update(coingecko_prices)
|
||||
|
||||
|
||||
# For remaining missing tokens, try Jupiter
|
||||
missing_tokens = set(remaining_tokens) - set(prices.keys())
|
||||
if missing_tokens:
|
||||
jupiter_prices = await get_prices_from_jupiter(list(missing_tokens))
|
||||
prices.update(jupiter_prices)
|
||||
|
||||
|
||||
# For tokens not found in CoinGecko, use DexScreener
|
||||
missing_tokens = set(remaining_tokens) - set(coingecko_prices.keys())
|
||||
if missing_tokens:
|
||||
dexscreener_prices = await get_prices_from_dexscreener(list(missing_tokens))
|
||||
prices.update(dexscreener_prices)
|
||||
|
||||
# For remaining missing tokens, try Raydium
|
||||
missing_tokens = set(remaining_tokens) - set(prices.keys())
|
||||
if missing_tokens:
|
||||
raydium_prices = await get_prices_from_raydium(list(missing_tokens))
|
||||
prices.update(raydium_prices)
|
||||
|
||||
# For remaining missing tokens, try Orca
|
||||
missing_tokens = set(remaining_tokens) - set(prices.keys())
|
||||
if missing_tokens:
|
||||
orca_prices = await get_prices_from_orca(list(missing_tokens))
|
||||
prices.update(orca_prices)
|
||||
|
||||
# If any tokens are still missing, set their prices to 0
|
||||
for token in set(token_addresses) - set(prices.keys()):
|
||||
prices[token] = 0.0
|
||||
logging.warning(f"Price not found for token {token}. Setting to 0.")
|
||||
|
||||
for token, price in prices.items():
|
||||
token_info = TOKENS_INFO.setdefault(token, {})
|
||||
if 'symbol' not in token_info:
|
||||
token_info['symbol'] = await get_token_metadata_symbol(token)
|
||||
token_info['price'] = price
|
||||
|
||||
return prices
|
||||
|
||||
async def get_prices_from_coingecko(token_addresses: List[str]) -> Dict[str, float]:
|
||||
base_url = "https://api.coingecko.com/api/v3/simple/token_price/solana"
|
||||
prices = {}
|
||||
|
||||
async def fetch_single_price(session, address):
|
||||
params = {
|
||||
"contract_addresses": address,
|
||||
"vs_currencies": DISPLAY_CURRENCY.lower()
|
||||
}
|
||||
try:
|
||||
async with session.get(base_url, params=params) as response:
|
||||
if response.status == 200:
|
||||
data = await response.json()
|
||||
if address in data and DISPLAY_CURRENCY.lower() in data[address]:
|
||||
return address, data[address][DISPLAY_CURRENCY.lower()]
|
||||
else:
|
||||
logging.warning(f"Failed to get price for {address} from CoinGecko. Status: {response.status}")
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching price for {address} from CoinGecko: {str(e)}")
|
||||
return address, None
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
tasks = [fetch_single_price(session, address) for address in token_addresses]
|
||||
results = await asyncio.gather(*tasks)
|
||||
|
||||
for address, price in results:
|
||||
if price is not None:
|
||||
prices[address] = price
|
||||
|
||||
return prices
|
||||
|
||||
async def get_prices_from_dexscreener(token_addresses: List[str]) -> Dict[str, float]:
|
||||
base_url = "https://api.dexscreener.com/latest/dex/tokens/"
|
||||
prices = {}
|
||||
|
||||
try:
|
||||
async with aiohttp.ClientSession() as session:
|
||||
tasks = [fetch_token_data(session, f"{base_url}{address}") for address in token_addresses]
|
||||
results = await asyncio.gather(*tasks)
|
||||
|
||||
for address, result in zip(token_addresses, results):
|
||||
if result and 'pairs' in result and result['pairs']:
|
||||
pair = result['pairs'][0] # Use the first pair (usually the most liquid)
|
||||
prices[address] = float(pair['priceUsd'])
|
||||
else:
|
||||
logging.warning(f"No price data found on DexScreener for token {address}")
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching token prices from DexScreener: {str(e)}")
|
||||
|
||||
return prices
|
||||
|
||||
async def get_prices_from_jupiter(token_addresses: List[str]) -> Dict[str, float]:
|
||||
url = "https://price.jup.ag/v4/price"
|
||||
params = {
|
||||
"ids": ",".join(token_addresses)
|
||||
}
|
||||
prices = {}
|
||||
|
||||
try:
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url, params=params) as response:
|
||||
if response.status == 200:
|
||||
data = await response.json()
|
||||
for address, price_info in data.get('data', {}).items():
|
||||
if 'price' in price_info:
|
||||
prices[address] = float(price_info['price'])
|
||||
else:
|
||||
logging.error(f"Failed to get token prices from Jupiter. Status: {response.status}")
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching token prices from Jupiter: {str(e)}")
|
||||
return prices
|
||||
|
||||
# New function for Raydium
|
||||
async def get_prices_from_raydium(token_addresses: List[str]) -> Dict[str, float]:
|
||||
url = "https://api.raydium.io/v2/main/price"
|
||||
prices = {}
|
||||
|
||||
try:
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url) as response:
|
||||
if response.status == 200:
|
||||
data = await response.json()
|
||||
for address in token_addresses:
|
||||
if address in data:
|
||||
prices[address] = float(data[address])
|
||||
else:
|
||||
logging.error(f"Failed to get token prices from Raydium. Status: {response.status}")
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching token prices from Raydium: {str(e)}")
|
||||
return prices
|
||||
|
||||
# New function for Orca
|
||||
async def get_prices_from_orca(token_addresses: List[str]) -> Dict[str, float]:
|
||||
url = "https://api.orca.so/allTokens"
|
||||
prices = {}
|
||||
|
||||
try:
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url) as response:
|
||||
if response.status == 200:
|
||||
data = await response.json()
|
||||
for token_info in data:
|
||||
if token_info['mint'] in token_addresses:
|
||||
prices[token_info['mint']] = float(token_info['price'])
|
||||
else:
|
||||
logging.error(f"Failed to get token prices from Orca. Status: {response.status}")
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching token prices from Orca: {str(e)}")
|
||||
return prices
|
||||
|
||||
async def fetch_token_data(session, url):
|
||||
try:
|
||||
async with session.get(url) as response:
|
||||
if response.status == 200:
|
||||
return await response.json()
|
||||
else:
|
||||
logging.error(f"Failed to fetch data from {url}. Status: {response.status}")
|
||||
return None
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching data from {url}: {str(e)}")
|
||||
return None
|
||||
|
||||
async def get_sol_price() -> float:
|
||||
sol_address = "So11111111111111111111111111111111111111112" # Solana's wrapped SOL address
|
||||
return await get_token_prices([sol_address]).get(sol_address, 0.0)
|
||||
|
||||
async def get_wallet_balances(wallet_address, doGetTokenName=True):
|
||||
balances = {}
|
||||
logging.info(f"Getting balances for wallet: {wallet_address}")
|
||||
global TOKENS_INFO
|
||||
try:
|
||||
response = await solana_client.get_token_accounts_by_owner_json_parsed(
|
||||
Pubkey.from_string(wallet_address),
|
||||
opts=TokenAccountOpts(
|
||||
program_id=Pubkey.from_string("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA")
|
||||
),
|
||||
commitment=Confirmed
|
||||
)
|
||||
|
||||
if response.value:
|
||||
for account in response.value:
|
||||
try:
|
||||
parsed_data = account.account.data.parsed
|
||||
if isinstance(parsed_data, dict) and 'info' in parsed_data:
|
||||
info = parsed_data['info']
|
||||
if isinstance(info, dict) and 'mint' in info and 'tokenAmount' in info:
|
||||
mint = info['mint']
|
||||
decimals = info['tokenAmount']['decimals']
|
||||
amount = float(info['tokenAmount']['amount'])/10**decimals
|
||||
if amount > 0:
|
||||
if mint in TOKENS_INFO:
|
||||
token_name = TOKENS_INFO[mint].get('symbol')
|
||||
elif doGetTokenName:
|
||||
token_name = await get_token_metadata_symbol(mint) or 'N/A'
|
||||
# sleep for 1 second to avoid rate limiting
|
||||
await asyncio.sleep(2)
|
||||
|
||||
TOKENS_INFO[mint]['holdedAmount'] = round(amount,decimals)
|
||||
TOKENS_INFO[mint]['decimals'] = decimals
|
||||
balances[mint] = {
|
||||
'name': token_name or 'N/A',
|
||||
'address': mint,
|
||||
'amount': amount,
|
||||
'decimals': decimals
|
||||
}
|
||||
# sleep for 1 second to avoid rate limiting
|
||||
logging.debug(f"Account balance for {token_name} ({mint}): {amount}")
|
||||
else:
|
||||
logging.warning(f"Unexpected data format for account: {account}")
|
||||
except Exception as e:
|
||||
logging.error(f"Error parsing account data: {str(e)}")
|
||||
|
||||
sol_balance = await solana_client.get_balance(Pubkey.from_string(wallet_address))
|
||||
if sol_balance.value is not None:
|
||||
balances['SOL'] = {
|
||||
'name': 'SOL',
|
||||
'address': 'SOL',
|
||||
'amount': sol_balance.value / 1e9
|
||||
}
|
||||
else:
|
||||
logging.warning(f"SOL balance response missing for wallet: {wallet_address}")
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"Error getting wallet balances: {str(e)}")
|
||||
logging.info(f"Found {len(response.value)} ({len(balances)} non zero) token accounts for wallet: {wallet_address}")
|
||||
return balances
|
||||
|
||||
async def convert_balances_to_currency(balances , sol_price):
|
||||
converted_balances = {}
|
||||
for address, info in balances.items():
|
||||
converted_balance = info.copy() # Create a copy of the original info
|
||||
if info['name'] == 'SOL':
|
||||
converted_balance['value'] = info['amount'] * sol_price
|
||||
elif address in TOKEN_PRICES:
|
||||
converted_balance['value'] = info['amount'] * TOKEN_PRICES[address]
|
||||
else:
|
||||
converted_balance['value'] = None # Price not available
|
||||
logging.warning(f"Price not available for token {info['name']} ({address})")
|
||||
converted_balances[address] = converted_balance
|
||||
return converted_balances
|
||||
|
||||
|
||||
async def list_initial_wallet_states():
|
||||
global TOKEN_ADDRESSES, FOLLOWED_WALLET_VALUE, YOUR_WALLET_VALUE, TOKEN_PRICES
|
||||
global TOKENS_INFO # new
|
||||
|
||||
followed_wallet_balances = await get_wallet_balances(FOLLOWED_WALLET)
|
||||
your_wallet_balances = await get_wallet_balances(YOUR_WALLET)
|
||||
|
||||
all_token_addresses = list(set(followed_wallet_balances.keys()) |
|
||||
set(your_wallet_balances.keys()) |
|
||||
set(TOKEN_ADDRESSES.values()))
|
||||
|
||||
TOKEN_PRICES = await get_token_prices(all_token_addresses)
|
||||
sol_price = await get_sol_price()
|
||||
|
||||
followed_converted_balances = await convert_balances_to_currency(followed_wallet_balances, sol_price)
|
||||
your_converted_balances = await convert_balances_to_currency(your_wallet_balances, sol_price)
|
||||
|
||||
|
||||
TOKEN_ADDRESSES = {
|
||||
address: info for address,
|
||||
info in {**followed_converted_balances, **your_converted_balances}.items() if info['value'] is not None and info['value'] > 0
|
||||
}
|
||||
logging.info(f"Monitoring balances for tokens: {[info['name'] for info in TOKEN_ADDRESSES.values()]}")
|
||||
|
||||
followed_wallet_state = []
|
||||
FOLLOWED_WALLET_VALUE = 0
|
||||
for address, info in followed_converted_balances.items():
|
||||
if info['value'] is not None and info['value'] > 0:
|
||||
followed_wallet_state.append(f"{info['name']}: {info['value']:.2f} {DISPLAY_CURRENCY} ({info['address']})")
|
||||
FOLLOWED_WALLET_VALUE += info['value']
|
||||
|
||||
your_wallet_state = []
|
||||
YOUR_WALLET_VALUE = 0
|
||||
for address, info in your_converted_balances.items():
|
||||
if info['value'] is not None and info['value'] > 0:
|
||||
your_wallet_state.append(f"{info['name']}: {info['value']:.2f} {DISPLAY_CURRENCY}")
|
||||
YOUR_WALLET_VALUE += info['value']
|
||||
|
||||
message = (
|
||||
f"<b>Initial Wallet States (All balances in {DISPLAY_CURRENCY}):</b>\n\n"
|
||||
f"<b>Followed Wallet ({FOLLOWED_WALLET}):</b>\n"
|
||||
f"{chr(10).join(followed_wallet_state)}\n"
|
||||
f"<b>Total Value:</b> {FOLLOWED_WALLET_VALUE:.2f} {DISPLAY_CURRENCY}\n\n"
|
||||
f"<b>Your Wallet ({YOUR_WALLET}):</b>\n"
|
||||
f"{chr(10).join(your_wallet_state)}\n"
|
||||
f"<b>Total Value:</b> {YOUR_WALLET_VALUE:.2f} {DISPLAY_CURRENCY}\n\n"
|
||||
f"<b>Monitored Tokens:</b>\n"
|
||||
f"{', '.join([safe_get_property(info, 'name') for info in TOKEN_ADDRESSES.values()])}"
|
||||
)
|
||||
|
||||
logging.info(message)
|
||||
await telegram_utils.send_telegram_message(message)
|
||||
|
||||
# save token info to file
|
||||
await save_token_info()
|
||||
|
||||
|
||||
|
||||
#example
|
||||
# async def main():
|
||||
# await telegram_utils.initialize()
|
||||
|
||||
# async def process_log(log):
|
||||
# print(f"Processing log: {log}")
|
||||
|
||||
# async def list_initial_wallet_states():
|
||||
# print("Listing initial wallet states")
|
||||
|
||||
|
||||
# wallet_watch_task = asyncio.create_task(solana_api.wallet_watch_loop())
|
||||
|
||||
# try:
|
||||
# await asyncio.gather(wallet_watch_task)
|
||||
# except asyncio.CancelledError:
|
||||
# pass
|
||||
# finally:
|
||||
# await telegram_utils.close()
|
||||
|
||||
# if __name__ == "__main__":
|
||||
# asyncio.run(main())
|
0
crypto/sol/modules/__init__.py
Normal file
0
crypto/sol/modules/__init__.py
Normal file
328
crypto/sol/modules/storage.py
Normal file
328
crypto/sol/modules/storage.py
Normal file
@ -0,0 +1,328 @@
|
||||
import sys
|
||||
import os
|
||||
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
import aiosqlite
|
||||
import json
|
||||
from datetime import datetime
|
||||
|
||||
DATABASE_FILE = "./app_data.db"
|
||||
|
||||
async def init_db():
|
||||
async with aiosqlite.connect(DATABASE_FILE) as db:
|
||||
await db.executescript("""
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
username TEXT UNIQUE NOT NULL,
|
||||
password_hash TEXT NOT NULL,
|
||||
email TEXT UNIQUE NOT NULL,
|
||||
api_key TEXT UNIQUE,
|
||||
plan TEXT DEFAULT 'free'
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS wallets (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER,
|
||||
address TEXT NOT NULL,
|
||||
name TEXT,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS transactions (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
wallet_id INTEGER,
|
||||
timestamp TEXT,
|
||||
type TEXT,
|
||||
sell_currency TEXT,
|
||||
sell_amount REAL,
|
||||
sell_value REAL,
|
||||
buy_currency TEXT,
|
||||
buy_amount REAL,
|
||||
buy_value REAL,
|
||||
closed BOOLEAN DEFAULT 0,
|
||||
details TEXT,
|
||||
solana_signature TEXT UNIQUE,
|
||||
FOREIGN KEY (wallet_id) REFERENCES wallets(id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS holdings (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
wallet_id INTEGER,
|
||||
currency TEXT,
|
||||
amount REAL,
|
||||
last_updated TEXT,
|
||||
FOREIGN KEY (wallet_id) REFERENCES wallets(id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS price_alerts (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER,
|
||||
currency TEXT,
|
||||
target_price REAL,
|
||||
alert_type TEXT,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS followed_accounts (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER,
|
||||
address TEXT,
|
||||
followed_address TEXT,
|
||||
name TEXT,
|
||||
FOREIGN KEY (address) REFERENCES wallets(address),
|
||||
FOREIGN KEY (followed_address) REFERENCES wallets(address),
|
||||
FOREIGN KEY (user_id) REFERENCES users(id)
|
||||
);
|
||||
""")
|
||||
await db.commit()
|
||||
|
||||
async def store_transaction(wallet_id, transaction_type, sell_currency, sell_amount, sell_value, buy_currency, buy_amount, buy_value, solana_signature, details=None):
|
||||
async with aiosqlite.connect(DATABASE_FILE) as db:
|
||||
await db.execute("""
|
||||
INSERT INTO transactions (wallet_id, timestamp, type, sell_currency, sell_amount, sell_value, buy_currency, buy_amount, buy_value, solana_signature, details)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
""", (wallet_id, datetime.now().isoformat(), transaction_type, sell_currency, sell_amount, sell_value, buy_currency, buy_amount, buy_value, solana_signature, json.dumps(details or {})))
|
||||
await db.commit()
|
||||
|
||||
|
||||
async def update_holdings(wallet_id, currency, amount_change):
|
||||
async with aiosqlite.connect(DATABASE_FILE) as db:
|
||||
cursor = await db.execute("SELECT amount FROM holdings WHERE wallet_id = ? AND currency = ?", (wallet_id, currency))
|
||||
result = await cursor.fetchone()
|
||||
if result:
|
||||
new_amount = result[0] + amount_change
|
||||
await db.execute("UPDATE holdings SET amount = ?, last_updated = ? WHERE wallet_id = ? AND currency = ?",
|
||||
(new_amount, datetime.now().isoformat(), wallet_id, currency))
|
||||
else:
|
||||
await db.execute("INSERT INTO holdings (wallet_id, currency, amount, last_updated) VALUES (?, ?, ?, ?)",
|
||||
(wallet_id, currency, amount_change, datetime.now().isoformat()))
|
||||
await db.commit()
|
||||
|
||||
async def get_wallet_holdings(wallet_id):
|
||||
async with aiosqlite.connect(DATABASE_FILE) as db:
|
||||
cursor = await db.execute("SELECT currency, amount FROM holdings WHERE wallet_id = ?", (wallet_id,))
|
||||
return await cursor.fetchall()
|
||||
|
||||
async def get_transaction_history(wallet_id, start_date=None, end_date=None, include_closed=False):
|
||||
async with aiosqlite.connect(DATABASE_FILE) as db:
|
||||
query = "SELECT * FROM transactions WHERE wallet_id = ?"
|
||||
params = [wallet_id]
|
||||
if not include_closed:
|
||||
query += " AND closed = 0"
|
||||
if start_date:
|
||||
query += " AND timestamp >= ?"
|
||||
params.append(start_date)
|
||||
if end_date:
|
||||
query += " AND timestamp <= ?"
|
||||
params.append(end_date)
|
||||
query += " ORDER BY timestamp DESC"
|
||||
cursor = await db.execute(query, params)
|
||||
return await cursor.fetchall()
|
||||
|
||||
# New utility functions
|
||||
|
||||
async def close_transaction(transaction_id):
|
||||
async with aiosqlite.connect(DATABASE_FILE) as db:
|
||||
await db.execute("UPDATE transactions SET closed = 1 WHERE id = ?", (transaction_id,))
|
||||
await db.commit()
|
||||
|
||||
async def get_open_transactions(wallet_id, currency):
|
||||
async with aiosqlite.connect(DATABASE_FILE) as db:
|
||||
cursor = await db.execute("""
|
||||
SELECT * FROM transactions
|
||||
WHERE wallet_id = ? AND buy_currency = ? AND closed = 0
|
||||
ORDER BY timestamp ASC
|
||||
""", (wallet_id, currency))
|
||||
return await cursor.fetchall()
|
||||
|
||||
async def calculate_current_holdings(wallet_id):
|
||||
async with aiosqlite.connect(DATABASE_FILE) as db:
|
||||
cursor = await db.execute("""
|
||||
SELECT
|
||||
buy_currency AS currency,
|
||||
SUM(buy_amount) - COALESCE(
|
||||
(SELECT SUM(sell_amount)
|
||||
FROM transactions t2
|
||||
WHERE t2.wallet_id = t1.wallet_id
|
||||
AND t2.sell_currency = t1.buy_currency
|
||||
AND t2.closed = 0),
|
||||
0
|
||||
) AS amount
|
||||
FROM transactions t1
|
||||
WHERE wallet_id = ? AND closed = 0
|
||||
GROUP BY buy_currency
|
||||
HAVING amount > 0
|
||||
""", (wallet_id,))
|
||||
return await cursor.fetchall()
|
||||
|
||||
STABLECOINS = ['USDC', 'USDT', 'SOL']
|
||||
|
||||
async def is_transaction_closed(wallet_id, transaction_id):
|
||||
async with aiosqlite.connect(DATABASE_FILE) as db:
|
||||
cursor = await db.execute("""
|
||||
SELECT t1.buy_currency, t1.buy_amount,
|
||||
(SELECT SUM(sell_amount)
|
||||
FROM transactions t2
|
||||
WHERE t2.wallet_id = t1.wallet_id
|
||||
AND t2.sell_currency = t1.buy_currency
|
||||
AND t2.timestamp > t1.timestamp) AS sold_amount
|
||||
FROM transactions t1
|
||||
WHERE t1.id = ? AND t1.wallet_id = ?
|
||||
""", (transaction_id, wallet_id))
|
||||
result = await cursor.fetchone()
|
||||
|
||||
if result:
|
||||
buy_currency, buy_amount, sold_amount = result
|
||||
return sold_amount is not None and sold_amount >= buy_amount
|
||||
return False
|
||||
|
||||
async def close_completed_transactions(wallet_id):
|
||||
async with aiosqlite.connect(DATABASE_FILE) as db:
|
||||
cursor = await db.execute("""
|
||||
SELECT id FROM transactions
|
||||
WHERE wallet_id = ? AND closed = 0 AND buy_currency NOT IN (?)
|
||||
""", (wallet_id, ','.join(STABLECOINS)))
|
||||
transactions = await cursor.fetchall()
|
||||
|
||||
for (transaction_id,) in transactions:
|
||||
if await is_transaction_closed(wallet_id, transaction_id):
|
||||
await close_transaction(transaction_id)
|
||||
|
||||
async def get_profit_loss(wallet_id, currency, start_date=None, end_date=None):
|
||||
async with aiosqlite.connect(DATABASE_FILE) as db:
|
||||
query = """
|
||||
SELECT
|
||||
SUM(CASE WHEN sell_currency = ? THEN sell_value ELSE -buy_value END) as profit_loss
|
||||
FROM transactions
|
||||
WHERE wallet_id = ? AND (sell_currency = ? OR buy_currency = ?)
|
||||
"""
|
||||
params = [currency, wallet_id, currency, currency]
|
||||
|
||||
if start_date:
|
||||
query += " AND timestamp >= ?"
|
||||
params.append(start_date)
|
||||
if end_date:
|
||||
query += " AND timestamp <= ?"
|
||||
params.append(end_date)
|
||||
|
||||
cursor = await db.execute(query, params)
|
||||
result = await cursor.fetchone()
|
||||
return result[0] if result else 0
|
||||
|
||||
# # # # # # USERS
|
||||
|
||||
# For this example, we'll use a simple dictionary to store users
|
||||
users = {
|
||||
"db": {"id": 1, "username": "db", "email": "user1@example.com", "password": "db"},
|
||||
"popov": {"id": 2, "username": "popov", "email": "user2@example.com", "password": "popov"}
|
||||
}
|
||||
|
||||
def get_or_create_user(email, google_id):
|
||||
user = next((u for u in users.values() if u['email'] == email), None)
|
||||
if not user:
|
||||
user_id = max(u['id'] for u in users.values()) + 1
|
||||
username = email.split('@')[0] # Use the part before @ as username
|
||||
user = {
|
||||
'id': user_id,
|
||||
'username': username,
|
||||
'email': email,
|
||||
'google_id': google_id
|
||||
}
|
||||
users[username] = user
|
||||
return user
|
||||
|
||||
def authenticate_user(username, password):
|
||||
"""
|
||||
Authenticate a user based on username and password.
|
||||
Returns user data if authentication is successful, None otherwise.
|
||||
"""
|
||||
user = users.get(username)
|
||||
if user and user['password'] == password:
|
||||
return {"id": user['id'], "username": user['username'], "email": user['email']}
|
||||
return None
|
||||
|
||||
def get_user_by_id(user_id):
|
||||
"""
|
||||
Retrieve a user by their ID.
|
||||
"""
|
||||
for user in users.values():
|
||||
if user['id'] == int(user_id):
|
||||
return {"id": user['id'], "username": user['username'], "email": user['email']}
|
||||
return None
|
||||
|
||||
def store_api_key(user_id, api_key):
|
||||
"""
|
||||
Store the generated API key for a user.
|
||||
"""
|
||||
# In a real application, you would store this in a database
|
||||
# For this example, we'll just print it
|
||||
print(f"Storing API key {api_key} for user {user_id}")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# async def get_new_transactions(wallet_address, rpc_url):
|
||||
# async with AsyncClient(rpc_url) as client:
|
||||
# last_tx = await get_last_stored_transaction(wallet_address)
|
||||
|
||||
# if last_tx:
|
||||
# last_signature, last_timestamp = last_tx
|
||||
# else:
|
||||
# # If no transactions are stored, we'll fetch all transactions
|
||||
# last_signature = None
|
||||
# last_timestamp = None
|
||||
|
||||
# new_transactions = []
|
||||
|
||||
# # Get the transaction history for the wallet
|
||||
# tx_history = await client.get_signatures_for_address(wallet_address, before=last_signature)
|
||||
|
||||
# for tx in tx_history.value:
|
||||
# # Check if the transaction is newer than the last stored one
|
||||
# if not last_timestamp or tx.block_time > datetime.fromisoformat(last_timestamp).timestamp():
|
||||
# # Fetch the full transaction details
|
||||
# tx_details = await client.get_transaction(tx.signature, commitment=Confirmed)
|
||||
# new_transactions.append(tx_details)
|
||||
|
||||
# return new_transactions
|
||||
|
||||
# async def process_new_transactions(wallet_id, wallet_address, rpc_url):
|
||||
# new_transactions = await get_new_transactions(wallet_address, rpc_url)
|
||||
|
||||
# for tx in new_transactions:
|
||||
# # Process the transaction and extract relevant information
|
||||
# # This is a placeholder - you'll need to implement the actual logic based on your requirements
|
||||
# transaction_type = "swap" # Determine the type based on the transaction data
|
||||
# sell_currency = "SOL" # Extract from transaction data
|
||||
# sell_amount = 1.0 # Extract from transaction data
|
||||
# sell_value = 100.0 # Extract from transaction data
|
||||
# buy_currency = "USDC" # Extract from transaction data
|
||||
# buy_amount = 100.0 # Extract from transaction data
|
||||
# buy_value = 100.0 # Extract from transaction data
|
||||
# solana_signature = tx.transaction.signatures[0]
|
||||
|
||||
# # Store the transaction in the database
|
||||
# await store_transaction(
|
||||
# wallet_id, transaction_type, sell_currency, sell_amount, sell_value,
|
||||
# buy_currency, buy_amount, buy_value, solana_signature
|
||||
# )
|
||||
|
||||
# # Update holdings
|
||||
# await update_holdings(wallet_id, sell_currency, -sell_amount)
|
||||
# await update_holdings(wallet_id, buy_currency, buy_amount)
|
||||
|
||||
# # After processing all new transactions, close completed transactions
|
||||
# await close_completed_transactions(wallet_id)
|
||||
|
||||
|
||||
|
||||
# Example usage
|
||||
if __name__ == "__main__":
|
||||
import asyncio
|
||||
|
||||
async def main():
|
||||
await init_db()
|
||||
# Add more test functions here
|
||||
|
||||
asyncio.run(main())
|
43
crypto/sol/modules/utils.py
Normal file
43
crypto/sol/modules/utils.py
Normal file
@ -0,0 +1,43 @@
|
||||
# telegram_utils.py
|
||||
import sys
|
||||
import os
|
||||
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
import aiohttp
|
||||
import logging
|
||||
from telegram import Bot
|
||||
from telegram.constants import ParseMode
|
||||
from config import TELEGRAM_BOT_TOKEN, DEVELOPER_CHAT_ID, BOT_NAME
|
||||
|
||||
class TelegramUtils:
|
||||
def __init__(self):
|
||||
self.bot = None
|
||||
self.conn_pool = None
|
||||
self.timeout = None
|
||||
|
||||
async def initialize(self):
|
||||
# Create a custom connection pool
|
||||
self.conn_pool = aiohttp.TCPConnector(limit=100) # Increase the connection limit
|
||||
self.timeout = aiohttp.ClientTimeout(total=30) # Set a longer timeout
|
||||
|
||||
# Initialize Telegram Bot
|
||||
self.bot = Bot(token=TELEGRAM_BOT_TOKEN)
|
||||
|
||||
async def send_telegram_message(self, message):
|
||||
if not self.bot:
|
||||
await self.initialize()
|
||||
|
||||
try:
|
||||
# await self.bot.send_message(chat_id=DEVELOPER_CHAT_ID, text=f"[{BOT_NAME}] {message}", parse_mode=ParseMode.HTML)
|
||||
logging.info(f"Telegram message sent: {message}")
|
||||
except Exception as e:
|
||||
logging.error(f"Error sending Telegram message: {str(e)}")
|
||||
|
||||
async def close(self):
|
||||
if self.conn_pool:
|
||||
await self.conn_pool.close()
|
||||
|
||||
# Create a global instance of TelegramUtils
|
||||
telegram_utils = TelegramUtils()
|
||||
|
||||
# You can add more Telegram-related methods to the TelegramUtils class if needed
|
112
crypto/sol/modules/webui.py
Normal file
112
crypto/sol/modules/webui.py
Normal file
@ -0,0 +1,112 @@
|
||||
from flask import Flask, jsonify, request, render_template, redirect, url_for
|
||||
# from flask_oauthlib.client import OAuth
|
||||
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
|
||||
import secrets
|
||||
from modules import storage
|
||||
import os
|
||||
|
||||
def init_app():
|
||||
app = Flask(__name__, template_folder='../templates', static_folder='../static')
|
||||
app.config['SECRET_KEY'] = 'your-secret-key'
|
||||
login_manager = LoginManager(app)
|
||||
login_manager.login_view = 'login'
|
||||
|
||||
# oauth = OAuth(app)
|
||||
# google = oauth.remote_app(
|
||||
# 'google',
|
||||
# consumer_key='YOUR_GOOGLE_CLIENT_ID',
|
||||
# consumer_secret='YOUR_GOOGLE_CLIENT_SECRET',
|
||||
# request_token_params={
|
||||
# 'scope': 'email'
|
||||
# },
|
||||
# base_url='https://www.googleapis.com/oauth2/v1/',
|
||||
# request_token_url=None,
|
||||
# access_token_method='POST',
|
||||
# access_token_url='https://accounts.google.com/o/oauth2/token',
|
||||
# authorize_url='https://accounts.google.com/o/oauth2/auth',
|
||||
# )
|
||||
|
||||
|
||||
login_manager = LoginManager()
|
||||
login_manager.init_app(app)
|
||||
|
||||
@app.route('/login/google/authorized')
|
||||
def authorized():
|
||||
# resp = google.authorized_response()
|
||||
# if resp is None or resp.get('access_token') is None:
|
||||
# return 'Access denied: reason={} error={}'.format(
|
||||
# request.args['error_reason'],
|
||||
# request.args['error_description']
|
||||
# )
|
||||
# session['google_token'] = (resp['access_token'], '')
|
||||
# user_info = google.get('userinfo')
|
||||
# user = storage.get_or_create_user(user_info.data['email'], user_info.data['id'])
|
||||
# login_user(user)
|
||||
return redirect(url_for('index'))
|
||||
|
||||
|
||||
class User(UserMixin):
|
||||
def __init__(self, id, username, email):
|
||||
self.id = id
|
||||
self.username = username
|
||||
self.email = email
|
||||
|
||||
@login_manager.user_loader
|
||||
def load_user(user_id):
|
||||
user_data = storage.get_user_by_id(user_id)
|
||||
if user_data:
|
||||
return User(id=user_data['id'], username=user_data['username'], email=user_data['email'])
|
||||
return None
|
||||
|
||||
@app.route('/')
|
||||
def index():
|
||||
return render_template('index.html')
|
||||
|
||||
@app.route('/login', methods=['GET', 'POST'])
|
||||
def login():
|
||||
if request.method == 'POST':
|
||||
username = request.form.get('username')
|
||||
password = request.form.get('password')
|
||||
user = storage.authenticate_user(username, password)
|
||||
if user:
|
||||
login_user(User(id=user['id'], username=user['username'], email=user['email']))
|
||||
return redirect(url_for('dashboard'))
|
||||
else:
|
||||
return render_template('login.html', error='Invalid credentials')
|
||||
elif request.args.get('google'):
|
||||
return google.authorize(callback=url_for('authorized', _external=True))
|
||||
return render_template('login.html')
|
||||
|
||||
@app.route('/logout')
|
||||
@login_required
|
||||
def logout():
|
||||
logout_user()
|
||||
return redirect(url_for('index'))
|
||||
|
||||
@app.route('/dashboard')
|
||||
@login_required
|
||||
def dashboard():
|
||||
return render_template('dashboard.html')
|
||||
|
||||
@app.route('/generate_api_key', methods=['POST'])
|
||||
@login_required
|
||||
def generate_api_key():
|
||||
api_key = secrets.token_urlsafe(32)
|
||||
storage.store_api_key(current_user.id, api_key)
|
||||
return jsonify({'api_key': api_key})
|
||||
|
||||
@app.route('/wallet/<int:wallet_id>/transactions', methods=['GET'])
|
||||
@login_required
|
||||
def get_transactions(wallet_id):
|
||||
transactions = storage.get_transactions(wallet_id)
|
||||
return jsonify(transactions)
|
||||
|
||||
@app.route('/wallet/<int:wallet_id>/holdings', methods=['GET'])
|
||||
@login_required
|
||||
def get_holdings(wallet_id):
|
||||
holdings = storage.get_holdings(wallet_id)
|
||||
return jsonify(holdings)
|
||||
|
||||
# Implement other routes for reports, price alerts, following accounts, etc.
|
||||
|
||||
return app
|
@ -1,12 +0,0 @@
|
||||
aiohttp==3.10.9
|
||||
aiohttp==3.10.5
|
||||
base58==2.1.1
|
||||
dexscreener==1.1
|
||||
Flask==3.0.3
|
||||
jupiter_python_sdk==0.0.2.0
|
||||
python-dotenv==1.0.1
|
||||
python-telegram-bot==21.6
|
||||
Requests==2.32.3
|
||||
solana==0.34.3
|
||||
solders==0.21.0
|
||||
websockets==10.4
|
@ -1,7 +1,10 @@
|
||||
aiohttp==3.10.9
|
||||
aiosqlite
|
||||
base58==2.1.1
|
||||
dexscreener==1.1
|
||||
Flask==3.0.3
|
||||
flask-login
|
||||
flask-oauthlib
|
||||
jupiter_python_sdk==0.0.2.0
|
||||
python-dotenv==1.0.1
|
||||
python-telegram-bot==21.6
|
||||
|
@ -1,28 +0,0 @@
|
||||
document.getElementById('connectWallet').addEventListener('click', async () => {
|
||||
try {
|
||||
const { solana } is window;
|
||||
if (solana && solana.isPhantom) {
|
||||
const response = await solana.connect({ onlyIfTrusted: true });
|
||||
console.log('Connected with Public Key:', response.publicKey.toString());
|
||||
} else {
|
||||
alert('Phantom wallet not found. Please install it.');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
alert('Connection to Phantom Wallet failed');
|
||||
}
|
||||
});
|
||||
|
||||
document.getElementById('swapToken').addEventListener('click', () => {
|
||||
const tokenName = document.getElementById('tokenName').value;
|
||||
const amount = document.getElementById('amount').value;
|
||||
fetch('/swap', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({token_name: tokenName, amount: amount})
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => alert(data.message));
|
||||
});
|
46
crypto/sol/static/css/styles.css
Normal file
46
crypto/sol/static/css/styles.css
Normal file
@ -0,0 +1,46 @@
|
||||
/* Add your custom styles here */
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
header {
|
||||
background-color: #4A90E2;
|
||||
color: white;
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
nav ul {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
nav ul li {
|
||||
display: inline;
|
||||
margin-right: 1rem;
|
||||
}
|
||||
|
||||
nav ul li a {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
main {
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
footer {
|
||||
background-color: #333;
|
||||
color: white;
|
||||
text-align: center;
|
||||
padding: 1rem;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
/* Add responsive styles for mobile devices */
|
||||
}
|
0
crypto/sol/static/images/logo.png
Normal file
0
crypto/sol/static/images/logo.png
Normal file
49
crypto/sol/static/js/app.js
Normal file
49
crypto/sol/static/js/app.js
Normal file
@ -0,0 +1,49 @@
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const connectWalletButton = document.getElementById('connectWallet');
|
||||
const swapTokenButton = document.getElementById('swapToken');
|
||||
const generateApiKeyButton = document.getElementById('generate-api-key');
|
||||
const apiKeyDisplay = document.getElementById('api-key-display');
|
||||
|
||||
if (connectWalletButton) {
|
||||
connectWalletButton.addEventListener('click', async () => {
|
||||
try {
|
||||
const { solana } = window;
|
||||
if (solana && solana.isPhantom) {
|
||||
const response = await solana.connect({ onlyIfTrusted: true });
|
||||
console.log('Connected with Public Key:', response.publicKey.toString());
|
||||
} else {
|
||||
alert('Phantom wallet not found. Please install it.');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
alert('Connection to Phantom Wallet failed');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (swapTokenButton) {
|
||||
swapTokenButton.addEventListener('click', () => {
|
||||
const tokenName = document.getElementById('tokenName').value;
|
||||
const amount = document.getElementById('amount').value;
|
||||
fetch('/swap', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({token_name: tokenName, amount: amount})
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => alert(data.message));
|
||||
});
|
||||
}
|
||||
|
||||
if (generateApiKeyButton) {
|
||||
generateApiKeyButton.addEventListener('click', async () => {
|
||||
const response = await fetch('/generate_api_key', { method: 'POST' });
|
||||
const data = await response.json();
|
||||
apiKeyDisplay.textContent = `Your API Key: ${data.api_key}`;
|
||||
});
|
||||
}
|
||||
|
||||
// Add more JavaScript for fetching and displaying wallet data, transactions, and holdings
|
||||
});
|
20
crypto/sol/static/manifest.json
Normal file
20
crypto/sol/static/manifest.json
Normal file
@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "Crypto Portfolio Tracker",
|
||||
"short_name": "CryptoTracker",
|
||||
"start_url": "/",
|
||||
"display": "standalone",
|
||||
"background_color": "#ffffff",
|
||||
"theme_color": "#4A90E2",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/static/images/logo-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/static/images/logo-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
]
|
||||
}
|
8
crypto/sol/static/service-worker.js
Normal file
8
crypto/sol/static/service-worker.js
Normal file
@ -0,0 +1,8 @@
|
||||
// Add service worker code for offline functionality and caching
|
||||
self.addEventListener('install', (event) => {
|
||||
// Perform install steps
|
||||
});
|
||||
|
||||
self.addEventListener('fetch', (event) => {
|
||||
// Handle fetch events
|
||||
});
|
36
crypto/sol/templates/base.html
Normal file
36
crypto/sol/templates/base.html
Normal file
@ -0,0 +1,36 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{% block title %}Crypto Portfolio Tracker{% endblock %}</title>
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}">
|
||||
<link rel="manifest" href="{{ url_for('static', filename='manifest.json') }}">
|
||||
<meta name="theme-color" content="#4A90E2">
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="{{ url_for('index') }}">Home</a></li>
|
||||
{% if current_user.is_authenticated %}
|
||||
<li><a href="{{ url_for('dashboard') }}">Dashboard</a></li>
|
||||
<li><a href="{{ url_for('logout') }}">Logout</a></li>
|
||||
{% else %}
|
||||
<li><a href="{{ url_for('login') }}">Login</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
{% block content %}{% endblock %}
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<p>© 2023 Crypto Portfolio Tracker</p>
|
||||
</footer>
|
||||
|
||||
<script src="{{ url_for('static', filename='js/app.js') }}"></script>
|
||||
</body>
|
||||
</html>
|
23
crypto/sol/templates/dashboard.html
Normal file
23
crypto/sol/templates/dashboard.html
Normal file
@ -0,0 +1,23 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Dashboard</h1>
|
||||
<p>Welcome, {{ current_user.username }}!</p>
|
||||
|
||||
<h2>Your Wallets</h2>
|
||||
<div id="wallets"></div>
|
||||
|
||||
<h2>Recent Transactions</h2>
|
||||
<div id="transactions"></div>
|
||||
|
||||
<h2>Holdings</h2>
|
||||
<div id="holdings"></div>
|
||||
|
||||
<button id="generate-api-key">Generate API Key</button>
|
||||
<p id="api-key-display"></p>
|
||||
|
||||
<script>
|
||||
// Add JavaScript to fetch and display wallet data, transactions, and holdings
|
||||
// Also add functionality for generating API key
|
||||
</script>
|
||||
{% endblock %}
|
@ -1,21 +1,6 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Token Swapper</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Token Swapper</h1>
|
||||
<div>
|
||||
<button id="connectWallet">Connect Phantom Wallet</button>
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" id="tokenName" placeholder="Enter Token Name">
|
||||
<input type="number" id="amount" placeholder="Enter Amount">
|
||||
<button id="swapToken">Swap Token</button>
|
||||
</div>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@solana/web3.js"></script>
|
||||
<script src="app.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Welcome to Crypto Portfolio Tracker</h1>
|
||||
<p>Track your cryptocurrency investments with ease.</p>
|
||||
{% endblock %}
|
18
crypto/sol/templates/login.html
Normal file
18
crypto/sol/templates/login.html
Normal file
@ -0,0 +1,18 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Login</h1>
|
||||
{% if error %}
|
||||
<p style="color: red;">{{ error }}</p>
|
||||
{% endif %}
|
||||
<form method="POST">
|
||||
<label for="username">Username:</label>
|
||||
<input type="text" id="username" name="username" required><br><br>
|
||||
<label for="password">Password:</label>
|
||||
<input type="password" id="password" name="password" required><br><br>
|
||||
<input type="submit" value="Login">
|
||||
</form>
|
||||
<br>
|
||||
<a href="{{ url_for('login', google=1) }}">Login with Google</a>
|
||||
|
||||
{% endblock %}
|
21
crypto/sol/templates/swap.html
Normal file
21
crypto/sol/templates/swap.html
Normal file
@ -0,0 +1,21 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Token Swapper</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Token Swapper</h1>
|
||||
<div>
|
||||
<button id="connectWallet">Connect Phantom Wallet</button>
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" id="tokenName" placeholder="Enter Token Name">
|
||||
<input type="number" id="amount" placeholder="Enter Amount">
|
||||
<button id="swapToken">Swap Token</button>
|
||||
</div>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@solana/web3.js"></script>
|
||||
<script src="app.js"></script>
|
||||
</body>
|
||||
</html>
|
Reference in New Issue
Block a user