├── README.md ├── test.py └── token_data.py /README.md: -------------------------------------------------------------------------------- 1 | # NewSolPools 2 | Scans raydium for new solana tokens and lists them to users through an API 3 | -------------------------------------------------------------------------------- /test.py: -------------------------------------------------------------------------------- 1 | import httpx 2 | import time 3 | from flask import Flask 4 | import threading 5 | 6 | 7 | class TokenTracker: 8 | def __init__(self): 9 | self.previous_tokens = set() 10 | self.new_tokens = set() 11 | self.printtokens = set() 12 | self.r = 1 13 | 14 | def getraydium(self): 15 | response = httpx.get("https://api.raydium.io/v2/sdk/token/raydium.mainnet.json") 16 | 17 | if response.status_code == 200: 18 | return [j["mint"] for j in response.json()["unNamed"]] 19 | else: 20 | print("ERR") 21 | return None 22 | 23 | def track(self): 24 | while True: 25 | time.sleep(15) 26 | current_tokens = set(self.getraydium()) 27 | 28 | self.new_tokens = current_tokens - self.previous_tokens 29 | 30 | if self.new_tokens: 31 | self.printtokens = self.new_tokens.copy() 32 | self.r += 1 33 | print(f"New tokens added {self.new_tokens}") 34 | self.previous_tokens = current_tokens 35 | 36 | 37 | tr = TokenTracker() 38 | 39 | tracking_thread = threading.Thread(target=tr.track) 40 | tracking_thread.start() 41 | app = Flask(__name__) 42 | 43 | 44 | @app.route("/new_tokens", methods=["GET"]) 45 | def get_new_tokens(): 46 | return list(tr.printtokens), 200 47 | 48 | 49 | if __name__ == "__main__": 50 | app.run(port=5000) 51 | -------------------------------------------------------------------------------- /token_data.py: -------------------------------------------------------------------------------- 1 | import httpx 2 | import time 3 | 4 | 5 | def getdata(token): 6 | url = "https://multichain-api.birdeye.so/solana/token/tokensecurity?token=" + token 7 | 8 | headers = { 9 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0", 10 | "Accept": "application/json, text/plain, */*", 11 | "Accept-Language": "en-US,en;q=0.5", 12 | "agent-id": "43514db9-66d4-4715-9e21-25c054bwa93b", 13 | "Sec-Fetch-Site": "same-site", 14 | "Sec-Fetch-Mode": "cors", 15 | "Sec-Fetch-Dest": "empty", 16 | "Referer": "https://birdeye.so/", 17 | "Connection": "keep-alive", 18 | "Origin": "https://birdeye.so", 19 | } 20 | 21 | resp = httpx.get(url, headers=headers) 22 | 23 | data = resp.json()["data"]["result"]["data"] 24 | liquidity = None 25 | price = None 26 | mut = str(data["mutable_metadata"]) 27 | mint = str(data["mintable"]) 28 | ownership = str(data["renounce"]) 29 | print(f"{mut} {mint} {ownership}") 30 | resp = httpx.get( 31 | "https://multichain-api.birdeye.so/solana/overview/token?address=" + token, 32 | headers=headers, 33 | ).json()["data"] 34 | if "liquidity" in list(resp.keys()): 35 | liquidity = resp["liquidity"] 36 | 37 | if "price" in list(resp.keys()): 38 | price = resp["price"] 39 | 40 | return mut, mint, ownership, liquidity, price 41 | 42 | 43 | def x(): 44 | for values in httpx.get("http://localhost:5000/new_tokens").json(): 45 | a, b, c, d, e = getdata(values) 46 | print(a, b, c, d, e) 47 | 48 | 49 | while True: 50 | x() 51 | time.sleep(10) 52 | --------------------------------------------------------------------------------