diff --git a/pyproject.toml b/pyproject.toml index 15adee2..951a7bd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,30 @@ +[project] +name = "pump_bot" +version = "2.0" +description = "Trade tokens on pump.fun" +readme = "README.md" +requires-python = ">=3.9" + +dependencies = [ + "base58>=2.1.1", + "borsh-construct>=0.1.0", + "construct>=2.10.67", + "construct-typing>=0.5.2", + "solana==0.36.6", + "solders>=0.26.0", + "websockets>=15.0", + "python-dotenv>=1.0.1", + "aiohttp>=3.11.13", +] + +[project.optional-dependencies] +dev = [ + "ruff>=0.10.0" +] + +[project.scripts] +pump_bot = "cli:sync_main" + [tool.ruff] line-length = 88 target-version = "py311" @@ -8,4 +35,4 @@ ignore = ["E501"] [tool.ruff.format] quote-style = "double" -indent-style = "space" \ No newline at end of file +indent-style = "space" diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index c84165e..0000000 --- a/requirements.txt +++ /dev/null @@ -1,9 +0,0 @@ -base58>=2.1.1 -borsh-construct>=0.1.0 -construct>=2.10.67 -construct-typing>=0.5.2 -solana==0.36.6 -solders>=0.26.0 -websockets>=15.0 -python-dotenv>=1.0.1 -aiohttp==3.11.13 \ No newline at end of file diff --git a/setup.py b/setup.py deleted file mode 100644 index 28ea38b..0000000 --- a/setup.py +++ /dev/null @@ -1,8 +0,0 @@ -from setuptools import find_packages, setup - -setup( - name="pump_bot", - version="0.1", - package_dir={"": "src"}, - packages=find_packages(where="src"), -) diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cli.py b/src/cli.py similarity index 95% rename from cli.py rename to src/cli.py index 7f0c2dc..fe35bdd 100644 --- a/cli.py +++ b/src/cli.py @@ -8,9 +8,9 @@ import asyncio import os import sys -import config -from src.trading.trader import PumpTrader -from src.utils.logger import get_logger, setup_file_logging +import config as config +from trading.trader import PumpTrader +from utils.logger import get_logger, setup_file_logging logger = get_logger(__name__) @@ -122,5 +122,9 @@ async def main() -> None: pass +def sync_main(): + asyncio.run(main()) + + if __name__ == "__main__": asyncio.run(main()) diff --git a/config.py b/src/config.py similarity index 100% rename from config.py rename to src/config.py diff --git a/src/core/client.py b/src/core/client.py index a6d4b3b..7542613 100644 --- a/src/core/client.py +++ b/src/core/client.py @@ -18,7 +18,7 @@ from solders.message import Message from solders.pubkey import Pubkey from solders.transaction import Transaction -from src.utils.logger import get_logger +from utils.logger import get_logger logger = get_logger(__name__) diff --git a/src/core/curve.py b/src/core/curve.py index c332170..2ffaa5c 100644 --- a/src/core/curve.py +++ b/src/core/curve.py @@ -8,9 +8,9 @@ from typing import Final from construct import Flag, Int64ul, Struct from solders.pubkey import Pubkey -from src.core.client import SolanaClient -from src.core.pubkeys import LAMPORTS_PER_SOL, TOKEN_DECIMALS -from src.utils.logger import get_logger +from core.client import SolanaClient +from core.pubkeys import LAMPORTS_PER_SOL, TOKEN_DECIMALS +from utils.logger import get_logger logger = get_logger(__name__) diff --git a/src/core/priority_fee/dynamic_fee.py b/src/core/priority_fee/dynamic_fee.py index b8a1ff8..b04235d 100644 --- a/src/core/priority_fee/dynamic_fee.py +++ b/src/core/priority_fee/dynamic_fee.py @@ -2,9 +2,9 @@ import statistics from solders.pubkey import Pubkey +from core.client import SolanaClient from core.priority_fee import PriorityFeePlugin -from src.core.client import SolanaClient -from src.utils.logger import get_logger +from utils.logger import get_logger logger = get_logger(__name__) diff --git a/src/core/priority_fee/manager.py b/src/core/priority_fee/manager.py index db5b12d..8497cbb 100644 --- a/src/core/priority_fee/manager.py +++ b/src/core/priority_fee/manager.py @@ -1,9 +1,9 @@ from solders.pubkey import Pubkey -from src.core.client import SolanaClient -from src.core.priority_fee.dynamic_fee import DynamicPriorityFee -from src.core.priority_fee.fixed_fee import FixedPriorityFee -from src.utils.logger import get_logger +from core.client import SolanaClient +from core.priority_fee.dynamic_fee import DynamicPriorityFee +from core.priority_fee.fixed_fee import FixedPriorityFee +from utils.logger import get_logger logger = get_logger(__name__) diff --git a/src/trading/buyer.py b/src/trading/buyer.py index c38dfe7..858dde1 100644 --- a/src/trading/buyer.py +++ b/src/trading/buyer.py @@ -9,18 +9,18 @@ from solders.instruction import AccountMeta, Instruction from solders.pubkey import Pubkey from spl.token.instructions import create_associated_token_account +from core.client import SolanaClient +from core.curve import BondingCurveManager from core.priority_fee.manager import PriorityFeeManager -from src.core.client import SolanaClient -from src.core.curve import BondingCurveManager -from src.core.pubkeys import ( +from core.pubkeys import ( LAMPORTS_PER_SOL, TOKEN_DECIMALS, PumpAddresses, SystemAddresses, ) -from src.core.wallet import Wallet -from src.trading.base import TokenInfo, Trader, TradeResult -from src.utils.logger import get_logger +from core.wallet import Wallet +from trading.base import TokenInfo, Trader, TradeResult +from utils.logger import get_logger logger = get_logger(__name__) diff --git a/src/trading/seller.py b/src/trading/seller.py index 14da81d..48dc7b1 100644 --- a/src/trading/seller.py +++ b/src/trading/seller.py @@ -8,18 +8,18 @@ from typing import Final from solders.instruction import AccountMeta, Instruction from solders.pubkey import Pubkey +from core.client import SolanaClient +from core.curve import BondingCurveManager from core.priority_fee.manager import PriorityFeeManager -from src.core.client import SolanaClient -from src.core.curve import BondingCurveManager -from src.core.pubkeys import ( +from core.pubkeys import ( LAMPORTS_PER_SOL, TOKEN_DECIMALS, PumpAddresses, SystemAddresses, ) -from src.core.wallet import Wallet -from src.trading.base import TokenInfo, Trader, TradeResult -from src.utils.logger import get_logger +from core.wallet import Wallet +from trading.base import TokenInfo, Trader, TradeResult +from utils.logger import get_logger logger = get_logger(__name__) diff --git a/src/trading/trader.py b/src/trading/trader.py index 55cb9e2..e9def64 100644 --- a/src/trading/trader.py +++ b/src/trading/trader.py @@ -8,17 +8,17 @@ import json import os from datetime import datetime -import config +import config as config +from core.client import SolanaClient +from core.curve import BondingCurveManager from core.priority_fee.manager import PriorityFeeManager -from src.core.client import SolanaClient -from src.core.curve import BondingCurveManager -from src.core.pubkeys import PumpAddresses -from src.core.wallet import Wallet -from src.monitoring.listener import PumpTokenListener -from src.trading.base import TokenInfo, TradeResult -from src.trading.buyer import TokenBuyer -from src.trading.seller import TokenSeller -from src.utils.logger import get_logger +from core.pubkeys import PumpAddresses +from core.wallet import Wallet +from monitoring.listener import PumpTokenListener +from trading.base import TokenInfo, TradeResult +from trading.buyer import TokenBuyer +from trading.seller import TokenSeller +from utils.logger import get_logger logger = get_logger(__name__) diff --git a/tests/test_listener.py b/tests/test_listener.py index 13a40d8..09a5063 100644 --- a/tests/test_listener.py +++ b/tests/test_listener.py @@ -6,8 +6,11 @@ Tests websocket monitoring for new pump.fun tokens import asyncio import logging import os +import sys +from pathlib import Path + +sys.path.append(str(Path(__file__).parent.parent / "src")) -import config from core.pubkeys import PumpAddresses from monitoring.listener import PumpTokenListener from trading.base import TokenInfo @@ -45,8 +48,7 @@ async def test_pump_token_listener( ): """Test the token listener functionality""" wss_endpoint = os.environ.get( - "SOLANA_NODE_WSS_ENDPOINT", config.PUBLIC_WSS_ENDPOINT - ) + "SOLANA_NODE_WSS_ENDPOINT") logger.info(f"Connecting to WebSocket: {wss_endpoint}") listener = PumpTokenListener(wss_endpoint, PumpAddresses.PROGRAM) callback = TestTokenCallback()