starting to add moduls, solana rpc module

This commit is contained in:
Dobromir Popov
2024-10-13 23:23:33 +03:00
parent a655c5bd88
commit 2c2c4ee4df
4 changed files with 377 additions and 90 deletions

View File

@ -24,8 +24,7 @@ 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
import datetime
import logging
from logging.handlers import RotatingFileHandler
@ -41,35 +40,52 @@ from typing import List, Dict, Any, Tuple
import random
from modules.webui import init_app
from modules.storage import init_db, store_transaction
app = Flask(__name__)
# config = load_config()
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")
from config import (
FOLLOWED_WALLET,
YOUR_WALLET,
SOLANA_WS_URL,
SOLANA_HTTP_URL,
DISPLAY_CURRENCY,
logger,
error_logger
)
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)
#logging.basicConfig(level=logging.INFO)
from modules.utils import (send_telegram_message, get_token_prices, get_sol_price, get_wallet_balances, convert_balances_to_currency, get_swap_transaction_details)
# 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)
from modules.SolanaAPI import SolanaAPI, solana_jsonrpc
# # config = load_config()
# 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")
# logger = logging.getLogger(__name__)
# logging.basicConfig(level=logging.DEBUG)
# #logging.basicConfig(level=logging.INFO)
# # 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 find the latest log file
@ -114,12 +130,6 @@ async def retry_last_log():
# Create the bot with the custom connection pool
bot = None
# Token addresses (initialize with some known tokens)
TOKEN_ADDRESSES = {
"SOL": "So11111111111111111111111111111111111111112",
"USDC": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"TARD": "4nfn86ssbv7wiqcsw7bpvn46k24jhe334fudtyxhp1og",
}
TOKENS_INFO = {}
try:
@ -129,13 +139,13 @@ except Exception as e:
logging.error(f"Error loading token info: {str(e)}")
# # # # # # # # # # TELEGRAM # # # # # # # # # #
async def 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)}")
# async def 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)}")
@ -437,6 +447,8 @@ async def get_token_metadata_symbol(mint_address):
return None
METADATA_STRUCT = CStruct(
"update_authority" / String,
"mint" / String,
@ -793,49 +805,6 @@ async def get_transaction_details_rpc(tx_signature, readfromDump=False):
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 # # # # # # # # # #
@ -1429,12 +1398,7 @@ async def check_PK():
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
bot = Bot(TELEGRAM_BOT_TOKEN) # , request=aiohttp.ClientSession(connector=conn_pool, timeout=timeout).request)
await send_telegram_message("Solana Agent Started. Connecting to mainnet...")
await check_PK()
@ -1464,8 +1428,6 @@ async def main():
await send_telegram_message("Restarting wallet_watch_loop")
from modules.webui import init_app
from modules.storage import init_db
async def run_flask():
# loop = asyncio.get_running_loop()