اکوسیستم سولانا، با سرعت بالا و کارمزدهای ناچیز، به یک کانون داغ برای عرضه توکنهای جدید تبدیل شده است. این محیط پویا، در کنار فرصتهای بیشمار، ریسکهای قابل توجهی نیز بههمراه دارد؛ مهمترین آنها، توکنهای کلاهبرداری یا هانیپات (Honeypot) هستند. این توکنها با فریب سرمایهگذاران، به آنها اجازه خرید میدهند اما امکان فروش را مسدود کرده و عملاً سرمایه را بهسرقت میبرند.
این مقاله یک راهنمای جامع و قدم به قدم است که به شما نشان میدهد چگونه یک ابزار تحلیل حرفهای و ماژولار با زبان پایتون بهعنوان چکر هانی پات بسازید. ما با استفاده از APIهای رایگان و قدرتمند هلیوس (Helius) و ژوپیتر (Jupiter)، یاد میگیریم که چگونه توکنهای خطرناک را در شبکه سولانا شناسایی کرده و از سرمایه خود محافظت کنیم.
پیشنیازها: ابزارهای لازم برای شروع
قبل از آنکه به عمق منطق تحلیل و معماری ابزارمان بپردازیم، باید ابتدا جعبه ابزار خود را آماده کنیم. ساخت این چکر حرفهای نیازمند چند ابزار کلیدی است که خوشبختانه همگی رایگان و بهراحتی در دسترس هستند.
- زبان برنامهنویسی پایتون (نسخه ۳ یا بالاتر): این زبان بهدلیل سادگی و داشتن کتابخانههای قدرتمند، پایه و اساس ابزار ما خواهد بود. نگران نباشید، برای دنبال کردن این راهنما به دانش پایتون بسیار کمی نیاز دارید و تمام کدها بهصورت کامل توضیح داده خواهند شد.
- کلید API رایگان از Helius: ما برای استخراج دادههای دقیق آنچین مانند اختیارات Mint و Freeze و همچنین مالکیت برنامه، از Helius استفاده خواهیم کرد. این سرویس یک پلن رایگان بسیار کارآمد دارد که برای پروژه ما کاملاً کافی است.
- استفاده از Jupiter API: برای تست نهایی، یعنی شبیهسازی فروش و بررسی نقدینگی، از API عمومی صرافی Jupiter بهره میبریم که برای استفاده پایه نیازی به کلید ثبتنام ندارد.
- کتابخانه
requests
در پایتون: یک ابزار ساده و استاندارد برای ارسال درخواستهای لازم به این دو API و دریافت اطلاعات از آنها.
پس از آمادهسازی این موارد، میتوانیم بهسراغ معماری و منطق اصلی تحلیل خود برویم و ببینیم چگونه از این ابزارها برای شناسایی توکنهای خطرناک استفاده خواهیم کرد.
هانیپات (Honeypot) چیست و چرا در سولانا بسیار رایج است؟
هانیپات در دنیای ارزهای دیجیتال، نوعی کلاهبرداری هوشمندانه است که در قالب یک قرارداد هوشمند مخرب پیادهسازی میشود. این قرارداد بهگونهای طراحی شده که سرمایهگذاران بهراحتی میتوانند یک توکن را بخرند، اما هنگام فروش با مشکل مواجه میشوند یا فروش برایشان کاملا غیرممکن است. به زبان ساده، هانیپات یک خیابان یکطرفه برای سرمایه شماست: پول شما وارد میشود، اما هرگز نمیتواند خارج شود.
این تله از طریق دستکاری در کدهای قرارداد هوشمند عمل میکند. توسعهدهندگان مخرب میتوانند توابعی را در کد قرار دهند که فروش را برای همه بهجز آدرسهای خاص (مانند کیف پول خودشان) غیرفعال کند، مالیات فروش را به ۱۰۰٪ افزایش دهد یا آدرس کیف پول شما را در لیست سیاه قرار دهد.
شبکه سولانا، بهدلیل کارمزدهای بسیار پایین و سرعت بالای ایجاد توکن، متأسفانه به بستری ایدهآل برای این نوع کلاهبرداریها تبدیل شده است. رونق انفجاری میمکوینها نیز به این موضوع دامن زده و باعث شده روزانه تعداد بسیار زیادی توکن هانیپات با هدف به دام انداختن سرمایهگذاران تازهکار و هیجانزده ایجاد شود. بههمین دلیل، تشخیص این توکنها قبل از هرگونه سرمایهگذاری، امری حیاتی برای حفظ سرمایه شماست.
معماری تحلیل ما: نگاهی عمیق به شاخصهای کلیدی سولانا
تحلیل یک توکن در سولانا با شبکههایی مانند اتریوم یا BSC کاملاً متفاوت است. بهجای بررسی سورس کد قرارداد، ما باید روی شاخصهای فنی مختص معماری سولانا تمرکز کنیم. ابزار ما بر پایه سه ستون تحلیلی قدرتمند بنا خواهد شد.
بررسی اختیارات کلیدی: Mint و Freeze Authority
این مهمترین و اولین قدم در تحلیل ماست. در استاندارد توکن SPL سولانا مخفف Solana Program Library، هر توکن دارای دو اختیار مدیریتی حیاتی است:
- اختیار صدور (Mint Authority): به آدرس کنترلکننده این اختیار، اجازه میدهد تا بینهایت توکن جدید از آن نوع بسازد. اگر این اختیار پس از عرضه اولیه لغو نشود، توسعهدهنده میتواند با ایجاد و فروش توکنهای جدید، ارزش دارایی شما را کاملاً از بین ببرد که به آن راگ پول (Rug Pull) نیز گفته میشود.
- اختیار مسدودسازی (Freeze Authority): این اختیار به مالک آن اجازه میدهد تا هر کیف پولی را از انجام تراکنش (ارسال یا فروش) توکنها منع کند. این یعنی دارایی شما میتواند در کیف پولتان برای همیشه گروگان گرفته شود. نتیجه کلیدی: در یک پروژه امن و غیرمتمرکز، هر دو اختیار باید لغو (Revoked) شده باشند؛ یعنی آدرس آنها به
null
تنظیم شده باشد.
بررسی مالکیت برنامه (Program Ownership)
هر توکن در سولانا توسط برنامههای (Programs) عمومی مدیریت میشود. یک توکن SPL استاندارد و امن باید تحت حاکمیت برنامه توکن رسمی سولانا با آدرس TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
باشد. اگر توکن توسط برنامه دیگری مثلا یک برنامه سفارشی و ناشناس کنترل شود، این یک پرچم قرمز بزرگ است، زیرا آن برنامه میتواند حاوی کدهای مخرب باشد.
شبیهسازی فروش با Jupiter API (تست نهایی نقدینگی)
مطمئنترین راه برای تشخیص هانیپات بودن یک توکن، تست قابلیت فروش آن است. ما از Jupiter API، بهعنوان بزرگترین تجمیعکننده نقدینگی (Aggregator) در سولانا، برای این کار استفاده میکنیم. ما یک معامله فروش کوچک را شبیهسازی میکنیم. اگر Jupiter نتواند یک مسیر و نرخ معتبر (Quote) برای فروش پیدا کند، به دو دلیل است:
- هیچ نقدینگی برای آن توکن وجود ندارد.
- فروش بهصورت عمدی در برنامه توکن غیرفعال شده است. در هر دو صورت، شما با یک توکن بیارزش یا یک کلاهبرداری هانیپات روبرو هستید.
راهاندازی پروژه: ساختار یک ابزار حرفهای
برای اینکه ابزار ما تمیز، قابل توسعه و حرفهای باشد، آن را به چند فایل مجزا تقسیم میکنیم.
ساختار فایلها
پوشه پروژه خود را با ساختار زیر ایجاد کنید:
solana-honeypot-checker/
│
├── core/
│ └── token_checker.py
│
├── providers/
│ ├── helius_provider.py
│ └── jupiter_provider.py
│
├── config.py
├── main.py
└── requirements.txt
config.py
: برای نگهداری کلید API.providers/
: ماژولهایی برای ارتباط با APIهای خارجی.core/
: منطق اصلی تحلیل و بررسی توکن.main.py
: نقطه ورود برنامه که با کاربر تعامل دارد.requirements.txt
: لیست کتابخانههای مورد نیاز پروژه.
نصب وابستگیها
فایل requirements.txt
را با محتوای زیر ایجاد کنید:
requests
سپس، ترمینال را در پوشه اصلی پروژه باز کرده و با دستور زیر، کتابخانههای لازم را نصب کنید:
pip install -r requirements.txt
گام به گام تا ساخت چکر: بخش کدنویسی
حالا هر فایل را بهترتیب تکمیل میکنیم.
گام اول: پیکربندی (config.py)
این فایل فقط شامل کلید API شماست تا از قرار دادن آن در کد اصلی جلوگیری شود.
# config.py
# کلید API خود را که از Helius دریافت کردهاید، اینجا قرار دهید
HELIUS_API_KEY = "YOUR_HELIUS_API_KEY"
گام دوم: ساخت ارائهدهنده هلیوس (providers/helius_provider.py)
این کلاس مسئول تمام ارتباطات با Helius API برای دریافت اطلاعات توکن است.
# providers/helius_provider.py
import requests
import json
from config import HELIUS_API_KEY
class HeliusProvider:
"""
ارائهدهنده داده برای تعامل با Helius API.
"""
API_URL = f"https://mainnet.helius-rpc.com/?api-key={HELIUS_API_KEY}"
HEADERS = {'Content-Type': 'application/json'}
@staticmethod
def get_token_metadata(token_address: str) -> dict | None:
"""
متادیتای کامل یک توکن را از Helius دریافت میکند.
"""
payload = {
"jsonrpc": "2.0",
"id": "helius-test",
"method": "getAsset",
"params": {"id": token_address}
}
try:
response = requests.post(HeliusProvider.API_URL, headers=HeliusProvider.HEADERS, data=json.dumps(payload))
response.raise_for_status()
data = response.json()
if "error" in data:
print(f"❌ خطای Helius: {data['error']['message']}")
return None
return data.get('result')
except requests.exceptions.RequestException as e:
print(f"❌ خطای شبکه در ارتباط با Helius: {e}")
return None
گام سوم: ساخت ارائهدهنده ژوپیتر (providers/jupiter_provider.py)
این کلاس مسئول شبیهسازی فروش و دریافت نرخ از Jupiter API است.
# providers/jupiter_provider.py
import requests
class JupiterProvider:
"""
ارائهدهنده داده برای تعامل با Jupiter Quote API.
"""
QUOTE_API_URL = "https://quote-api.jup.ag/v6/quote"
USDC_MINT_ADDRESS = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
@staticmethod
def get_sell_quote(token_address: str, amount_lamports: int = 1_000_000) -> dict | None:
"""
تلاش میکند تا یک نرخ فروش برای توکن به USDC دریافت کند.
مقدار amount_lamports باید بر اساس اعشار توکن تنظیم شود.
"""
params = {
"inputMint": token_address,
"outputMint": JupiterProvider.USDC_MINT_ADDRESS,
"amount": amount_lamports,
"slippageBps": 1000 # لغزش 10% برای اطمینان از یافتن مسیر
}
try:
response = requests.get(JupiterProvider.QUOTE_API_URL, params=params)
if response.status_code == 200:
return response.json()
return None
except requests.exceptions.RequestException as e:
print(f"❌ خطای شبکه در ارتباط با Jupiter: {e}")
return None
گام چهارم: پیادهسازی منطق اصلی (core/token_checker.py)
این کلاس قلب تپنده برنامه است. از providers
برای دریافت داده استفاده کرده و تحلیلها را انجام میدهد.
# core/token_checker.py
from providers.helius_provider import HeliusProvider
from providers.jupiter_provider import JupiterProvider
class TokenChecker:
"""
منطق اصلی برای تحلیل و بررسی توکنهای سولانا.
"""
SPL_TOKEN_PROGRAM_ID = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
def __init__(self, token_address: str):
self.token_address = token_address
self.flags = []
self.metadata = None
def run_all_checks(self):
"""
تمام بررسیها را به ترتیب اجرا کرده و نتایج را ذخیره میکند.
"""
print(f"\n--- 🔎 شروع تحلیل برای توکن: {self.token_address} ---\n")
self.metadata = HeliusProvider.get_token_metadata(self.token_address)
if not self.metadata:
self.flags.append("❌ تحلیل متوقف شد: اطلاعات توکن از Helius دریافت نشد.")
return
self._check_authorities()
self._check_program_owner()
self._check_liquidity_via_jupiter()
def _check_authorities(self):
print("🔬 بررسی اختیارات Mint و Freeze...")
token_info = self.metadata.get('token_info', {})
if token_info.get('mint_authority') is not None:
self.flags.append("🚩 پرچم قرمز: اختیار صدور (Mint Authority) فعال است!")
else:
self.flags.append("✅ نشانه مثبت: اختیار صدور لغو شده است.")
if token_info.get('freeze_authority') is not None:
self.flags.append("🚩 پرچم قرمز: اختیار مسدودسازی (Freeze Authority) فعال است!")
else:
self.flags.append("✅ نشانه مثبت: اختیار مسدودسازی لغو شده است.")
def _check_program_owner(self):
print("🔬 بررسی برنامه حاکم بر توکن...")
owner_program = self.metadata.get('owner')
if owner_program == TokenChecker.SPL_TOKEN_PROGRAM_ID:
self.flags.append("✅ نشانه مثبت: توکن توسط برنامه رسمی SPL کنترل میشود.")
else:
self.flags.append(f"🚩 پرچم قرمز: توکن توسط یک برنامه ناشناس کنترل میشود: {owner_program}")
def _check_liquidity_via_jupiter(self):
print("🔄 شبیهسازی فروش از طریق Jupiter...")
# مقدار فروش را بر اساس اعشار توکن تنظیم میکنیم
decimals = self.metadata.get('token_info', {}).get('decimals', 6)
amount_to_sell = 1 * (10 ** decimals) # فروش معادل ۱ توکن کامل
quote = JupiterProvider.get_sell_quote(self.token_address, amount_to_sell)
if quote and quote.get('outAmount'):
self.flags.append("✅ نشانه مثبت: مسیر فروش در Jupiter یافت شد و نقدینگی وجود دارد.")
else:
self.flags.append("🚩 پرچم قرمز نهایی: هیچ مسیر فروشی در Jupiter یافت نشد! (ریسک بالای هانیپات)")
def get_report(self) -> list:
return self.flags
گام پنجم: ایجاد نقطه ورود برنامه (main.py)
این فایل نهایی، همه چیز را بههم متصل کرده و با کاربر تعامل میکند.
# main.py
from core.token_checker import TokenChecker
def print_report(flags: list):
"""
گزارش نهایی را به صورت خوانا چاپ میکند.
"""
print("\n--- 📜 گزارش نهایی تحلیل ---")
is_honeypot = False
for flag in flags:
print(flag)
if "🚩" in flag:
is_honeypot = True
print("-" * 30)
if is_honeypot:
print("\n🚨 نتیجهگیری: این توکن دارای نشانههای قوی هانیپات یا ریسک شدید است. از سرمایهگذاری خودداری کنید!")
else:
print("\n✅ نتیجهگیری: در تحلیل فنی، پرچمهای قرمز آشکار یافت نشد. این به معنای بیخطر بودن پروژه نیست. همیشه خودتان تحقیق کنید (DYOR).")
print("-" * 30)
def main():
print("--- ابزار حرفهای بررسی هانیپات برای شبکه سولانا ---")
token_address = input("لطفاً آدرس توکن (Mint Address) را وارد کنید: ")
if not token_address:
print("خطا: آدرس توکن نمیتواند خالی باشد.")
return
checker = TokenChecker(token_address)
checker.run_all_checks()
report = checker.get_report()
print_report(report)
if __name__ == "__main__":
main()
اجرای ابزار و تفسیر نتایج
برای اجرای برنامه، ترمینال را در پوشه اصلی باز کرده و دستور زیر را اجرا کنید:
python main.py
برنامه از شما آدرس توکن را میخواهد. آدرس را وارد کنید و منتظر گزارش نهایی بمانید. گزارش به شما نشانههای مثبت (✅) و پرچمهای قرمز (🚩) را به وضوح نشان میدهد و در نهایت یک نتیجهگیری کلی ارائه میکند.
در صورت نیاز میتوانید از این لینک (Solana Honeypot Cheker) پوشه و تمامی کدها را بهصورت آماده دانلود کنید.
از کدنویسی تا سرمایهگذاری هوشمندانه
تبریک میگوییم! شما با موفقیت یک ابزار کاربردی و حرفهای برای تحلیل توکنهای سولانا ساختید. این کدها فراتر از چند خط برنامه، نماد یک گام مهم در مسیر سرمایهگذاری هوشمندانه و آگاهانه شما هستند. شما اکنون میتوانید با دیدی بازتر و با تکیه بر دادههای واقعی، پروژههای جدید را ارزیابی کنید.
به یاد داشته باشید که این چکر، یک سپر دفاعی قدرتمند در برابر تلههای فنی مانند هانیپات است. با این حال، امنیت در دنیای کریپتو یک مفهوم چندلایه است. این ابزار نمیتواند نیت توسعهدهندگان یا آینده یک پروژه را پیشبینی کند.
بنابراین، همواره از این ابزار بهعنوان نقطه شروع تحلیل خود استفاده و آن را با تحقیق شخصی (DYOR) تکمیل کنید. جامعه پروژه را بسنجید، اهداف آن را درک کنید و بهدنبال شفافیت در تیم توسعهدهنده باشید.
دنیای کریپتو پر از فرصتها و چالشهاست. با مسلح شدن به دانش و ابزارهای مناسب، میتوانید با اطمینان بیشتری در این اکوسیستم هیجانانگیز حرکت کنید. امیدواریم این راهنما، قطبنمای مفیدی برای شما در این مسیر باشد. هوشمندانه سرمایهگذاری کنید و همواره کنجکاو بمانید.