مشهد العملات المشفرة مليء بالفرص، ولكنه أيضًا ينطوي على مخاطر كبيرة. عمليات السحب الاحتيالي (Rug pulls) والرموز المميزة سيئة التصميم يمكن أن تؤدي إلى خسائر فادحة. يقدم Rugcheck.xyz خدمة حيوية من خلال تحليل مشاريع العملات المشفرة بحثًا عن العلامات الحمراء المحتملة. تسمح واجهة برمجة التطبيقات (API) الخاصة به للمطورين والمتداولين والمحللين بالوصول إلى هذه الرؤى برمجيًا، مما يؤدي إلى أتمتة وتوسيع نطاق جهود العناية الواجبة الخاصة بهم. سيركز هذا الدليل بشكل كبير على كيفية استخدام واجهة برمجة التطبيقات Rugcheck.xyz، وتزويدك بأمثلة عملية بلغة بايثون.
هل تريد منصة متكاملة وشاملة لفريق المطورين الخاص بك للعمل معًا بأقصى قدر من الإنتاجية؟
يقدم Apidog جميع طلباتك، ويحل محل Postman بسعر معقول جدًا!
نظرة عامة موجزة عن Rugcheck.xyz وواجهة برمجة التطبيقات (API) الخاصة به
ما هو Rugcheck.xyz؟
Rugcheck.xyz هي منصة مصممة لفحص رموز العملات المشفرة والعقود الذكية بحثًا عن علامات النية الخبيثة (مثل عمليات السحب الاحتيالي أو المصائد) أو المخاطر الكامنة. تقوم بفحص كود العقد، والسيولة، واقتصاديات الرموز، ومحافظ المطورين، والمزيد، وتوفر تقييمات للمخاطر وتقارير مفصلة.
لماذا واجهة برمجة التطبيقات (API)؟
تمنح واجهة برمجة التطبيقات وصولاً برمجيًا إلى محرك التحليل الخاص بـ Rugcheck.xyz، مما يتيح:
- الأتمتة: دمج عمليات التحقق في روبوتات التداول أو أنظمة تنبيه الرموز الجديدة.
- قابلية التوسع: تحليل عدد كبير من الرموز بشكل أسرع بكثير من الفحوصات اليدوية.
- التخصيص: بناء لوحات تحكم ونماذج مخاطر مخصصة باستخدام بيانات واجهة برمجة التطبيقات الأولية.
الحصول على مفتاح واجهة برمجة التطبيقات (API) الخاص بك من Rugcheck.xyz – الأساسيات
لاستخدام واجهة برمجة التطبيقات (API)، تحتاج إلى مفتاح API. تشير وثائق واجهة برمجة التطبيقات Rugcheck.xyz (https://api.rugcheck.xyz/swagger/index.html
) إلى وجود نظام حساب مستخدم لإدارة المفاتيح من خلال نقاط النهاية مثل /user/api-keys
.
- التسجيل/تسجيل الدخول: قم بزيارة الموقع الرئيسي لـ Rugcheck.xyz وأنشئ حسابًا أو سجل الدخول.
- البحث عن إعدادات API: ابحث عن قسم "API" أو "Developer" (المطور) أو "API Keys" (مفاتيح API) في لوحة تحكم المستخدم الخاصة بك.
- إنشاء مفتاح: قم بإنشاء مفتاح API جديد. قد تتمكن من تسميته لتسهيل التعرف عليه.
- تأمين مفتاحك: انسخ المفتاح الذي تم إنشاؤه وقم بتخزينه بأمان (مثل مدير كلمات المرور، متغير بيئة). لا تعرضه أبدًا في مستودعات الكود العامة أو تطبيقات جانب العميل.
تتطلب جميع طلبات واجهة برمجة التطبيقات (API) إرسال هذا المفتاح في رأس الطلب X-API-KEY
.
قبل الخوض في الكود، إليك بعض نقاط النهاية الأساسية التي سنتعامل معها (ارجع إلى وثائق Swagger للحصول على تفاصيل شاملة):
GET /tokens/scan/{chain}/{contractAddress}
: يقوم بفحص رمزي في الوقت الفعلي. يعيد مستويات المخاطر، التحذيرات، تفاصيل العقد، معلومات السيولة، إلخ.GET /tokens/source-code/{chain}/{contractAddress}
: يسترد الكود المصدري للعقد الذكي الموثق للرمز وABI الخاص به.GET /wallets/risk-rating/{chain}/{walletAddress}
: يقيم ملف المخاطر لعنوان محفظة معين.GET /tokens/search
: يبحث عن الرموز بالاسم أو الرمز.GET /utils/chains
: يسرد جميع شبكات البلوك تشين المدعومة من قبل واجهة برمجة التطبيقات.
عنوان URL الأساسي لجميع الطلبات هو: https://api.rugcheck.xyz
كيفية استخدام واجهة برمجة التطبيقات Rugcheck.xyz: أمثلة مفصلة بلغة بايثون
هنا ننتقل إلى الجانب العملي. سنستخدم بايثون مع مكتبة requests
.
المتطلبات المسبقة:
- تثبيت بايثون 3.x.
- مكتبة
requests
:pip install requests
- مفتاح واجهة برمجة التطبيقات Rugcheck.xyz الخاص بك.
1. الإعداد ودالة استدعاء API الأساسية
أولاً، دعنا نعد بيئتنا وننشئ دالة قابلة لإعادة الاستخدام للتعامل مع استدعاءات API. أفضل ممارسة هي تخزين مفتاح API الخاص بك كمتغير بيئة.Python
import requests
import json
import os
# Load API key from environment variable for security
API_KEY = os.getenv('RUGCHECK_API_KEY')
BASE_URL = "https://api.rugcheck.xyz"
if not API_KEY:
print("Error: RUGCHECK_API_KEY environment variable not set.")
# You might want to exit or raise an exception here in a real application
# For demonstration, we'll allow it to proceed but calls will fail.
# API_KEY = "YOUR_FALLBACK_API_KEY_FOR_TESTING_ONLY" # Not recommended for actual use
HEADERS = {
"X-API-KEY": API_KEY,
"Accept": "application/json" # Good practice to specify accepted response type
}
def make_api_request(endpoint, params=None):
"""
Makes a GET request to the Rugcheck.xyz API.
Args:
endpoint (str): The API endpoint path (e.g., "/utils/chains").
params (dict, optional): Query parameters for the request.
Returns:
dict or None: The JSON response as a Python dictionary, or None if an error occurs.
"""
if not API_KEY or API_KEY == "YOUR_FALLBACK_API_KEY_FOR_TESTING_ONLY":
print("Error: API Key is not properly configured.")
return None
url = f"{BASE_URL}{endpoint}"
try:
response = requests.get(url, headers=HEADERS, params=params, timeout=30) # 30-second timeout
response.raise_for_status() # Raises HTTPError for bad responses (4xx or 5xx)
return response.json()
except requests.exceptions.HTTPError as http_err:
print(f"HTTP error occurred: {http_err}")
print(f"Status Code: {response.status_code}")
try:
# Try to print error details from API if available in JSON
print(f"Error Response: {response.json()}")
except json.JSONDecodeError:
print(f"Error Response (not JSON): {response.text}")
except requests.exceptions.ConnectionError as conn_err:
print(f"Connection error occurred: {conn_err}")
except requests.exceptions.Timeout as timeout_err:
print(f"Timeout error occurred: {timeout_err}")
except requests.exceptions.RequestException as req_err:
print(f"An unexpected error occurred with the request: {req_err}")
except json.JSONDecodeError: # If response.json() fails for non-HTTPError cases
print("Failed to decode JSON response from API.")
print(f"Response content: {response.text if 'response' in locals() else 'No response object'}")
return None
هام: لكي تعمل الأمثلة التالية، تأكد من تعيين RUGCHECK_API_KEY
في بيئتك. ستحتاج أيضًا إلى عناوين عقود وعناوين محافظ صالحة للسلاسل المعنية.
2. المثال 1: الغوص العميق في فحص الرمز (/tokens/scan/{chain}/{contractAddress}
)
هذه إحدى أقوى نقاط النهاية. دعنا نفحص رمزًا ونحلل الاستجابة.Python
def get_token_scan_details(chain, contract_address, include_dex=True, include_events=False):
"""
Scans a token and prints detailed information.
"""
print(f"\n--- Scanning Token: {contract_address} on {chain} ---")
endpoint = f"/tokens/scan/{chain}/{contract_address}"
params = {
"includeDexScreenerData": str(include_dex).lower(), # API expects string "true" or "false"
"includeSignificantEvents": str(include_events).lower()
}
data = make_api_request(endpoint, params=params)
if data:
print(f"Scan ID: {data.get('id')}")
print(f"Risk Level: {data.get('riskLevel')}")
trust_score_data = data.get('trustScore', {})
print(f"Trust Score: {trust_score_data.get('value')} ({trust_score_data.get('rating')})")
print("\nScams Found:")
scams = data.get('scams', [])
if scams:
for scam in scams:
print(f" - Type: {scam.get('type')}, Severity: {scam.get('severity')}, Message: {scam.get('message')}")
else:
print(" No specific scam indicators found by this scan.")
print("\nWarnings:")
warnings = data.get('warnings', [])
if warnings:
for warning in warnings:
print(f" - Type: {warning.get('type')}, Severity: {warning.get('severity')}, Message: {warning.get('message')}")
else:
print(" No warnings found by this scan.")
contract_details = data.get('contractDetails', {})
print("\nContract Details:")
print(f" Name: {contract_details.get('name')}")
print(f" Symbol: {contract_details.get('symbol')}")
print(f" Decimals: {contract_details.get('decimals')}")
print(f" Owner: {contract_details.get('ownerAddress')}")
print(f" Creator: {contract_details.get('creatorAddress')}")
print(f" Verified: {contract_details.get('isVerified')}")
if contract_details.get('isProxy'):
print(f" Proxy Implementation: {contract_details.get('proxyImplementationAddress')}")
taxes = data.get('taxes', {})
print("\nTaxes:")
print(f" Buy Tax: {taxes.get('buyTax')}%")
print(f" Sell Tax: {taxes.get('sellTax')}%")
print(f" Transfer Tax: {taxes.get('transferTax')}%")
if taxes.get('isBuyTaxModifiable') or taxes.get('isSellTaxModifiable') or taxes.get('isTransferTaxModifiable'):
print(" Warning: One or more taxes may be modifiable.")
liquidity = data.get('liquidityDetails', {})
print("\nLiquidity Details:")
if liquidity.get('dexes'):
for dex in liquidity['dexes']:
print(f" DEX: {dex.get('name')} ({dex.get('pairAddress')})")
print(f" Liquidity: {dex.get('liquidityAmountInUsd')} USD")
print(f" Total LP Supply: {dex.get('totalSupply')}")
if dex.get('locks'):
for lock in dex['locks']:
print(f" Lock: Amount {lock.get('amountLocked')} until {lock.get('unlockDate')}, Vendor: {lock.get('vendorName')}")
else:
print(" No explicit LP locks found for this DEX.")
else:
print(" No DEX liquidity information found.")
holder_analysis = data.get('holderAnalysis', {})
print("\nHolder Analysis:")
print(f" Holder Count: {holder_analysis.get('holderCount')}")
if holder_analysis.get('topHolders'):
print(" Top Holders:")
for i, holder in enumerate(holder_analysis['topHolders'][:3]): # Display top 3 for brevity
print(f" {i+1}. Address: {holder.get('address')}, Balance: {holder.get('balance')}, % Supply: {holder.get('percentage')}%")
if include_dex and 'dexScreenerData' in data and data['dexScreenerData']:
dex_data = data['dexScreenerData']
print("\nDEX Screener Data:")
print(f" Price (USD): {dex_data.get('priceUsd')}")
print(f" FDV (USD): {dex_data.get('fdv')}")
print(f" Volume (24h USD): {dex_data.get('volume', {}).get('h24')}")
# Add more fields as needed
# You can similarly process 'significantEvents' if include_events was True
# print(json.dumps(data, indent=2)) # To print the full raw response for exploration
else:
print("Failed to retrieve token scan details.")
# --- Usage Example for Token Scan ---
# Replace with a valid contract address and chain from the supported list (e.g., 'bsc', 'ethereum')
# For BSC (BEP-20 tokens): e.g., WBNB contract "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"
# For Ethereum (ERC-20 tokens): e.g., USDC contract "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
# test_chain = "bsc"
# test_contract = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c" # WBNB on BSC (example)
# get_token_scan_details(test_chain, test_contract, include_dex=True)
تفسير نتائج الفحص:
riskLevel
: يعطي شعورًا فوريًا بالخطر المحتمل. "CRITICAL" (حرج) أو "HIGH" (مرتفع) يتطلب أقصى درجات الحذر.trustScore
: درجة رقمية يمكن تتبعها أو مقارنتها.scams
وwarnings
: هذه المصفوفات حاسمة. تفصل القضايا المحددة مثلHONEYPOT
(مصيدة عسل)،PROXY_CONTRACT
(عقد وكيل)،HIGH_TAXES
(ضرائب مرتفعة)،OWNERSHIP_NOT_RENOUNCED
(الملكية لم يتم التنازل عنها)،BLACKLIST_FUNCTIONS
(وظائف القائمة السوداء)، إلخ. راجع هذه الرسائل دائمًا بعناية.taxes
: الضرائب المرتفعة أو القابلة للتعديل هي علامات حمراء.liquidityDetails
: ابحث عن سيولة كبيرة غير مقفلة أو جزء كبير يحتفظ به الناشر. السيولة المقفلة علامة جيدة، ولكن تحقق من مدة القفل والمورد.holderAnalysis
: التركيز العالي للرموز في عدد قليل من المحافظ (خاصة محافظ الناشر أو الفريق إذا لم تكن مخصصة) يمكن أن يكون محفوفًا بالمخاطر.
3. المثال 2: استرداد الكود المصدري (/tokens/source-code/{chain}/{contractAddress}
)
معرفة ما إذا كان العقد موثقًا والقدرة على فحص الكود المصدري الخاص به أمر حيوي.Python
def get_token_source_code(chain, contract_address):
"""
Retrieves and displays information about a token's source code.
"""
print(f"\n--- Retrieving Source Code for: {contract_address} on {chain} ---")
endpoint = f"/tokens/source-code/{chain}/{contract_address}"
data = make_api_request(endpoint)
if data:
print(f"Contract Name: {data.get('contractName')}")
print(f"Is Verified: {data.get('isVerified')}")
if data.get('isVerified'):
# The ABI can be very long, so just print a snippet or its presence
print(f"ABI: {'Present' if data.get('abi') else 'Not available'}")
source_code = data.get('sourceCode')
if isinstance(source_code, str):
print(f"Source Code Snippet (first 500 chars):\n{source_code[:500]}...")
# In a real app, you might save this to a file:
# with open(f"{contract_address}_source.sol", "w") as f:
# f.write(source_code)
# print(f"Full source code saved to {contract_address}_source.sol")
elif isinstance(source_code, dict): # For multi-file sources
print("Source Code (multiple files):")
for filename, content in source_code.items():
print(f" File: {filename}, Snippet (first 200 chars): {content.get('content', '')[:200]}...")
else:
print("Source Code: Not available or unexpected format.")
else:
print("Contract source code is not verified or not available.")
else:
print("Failed to retrieve source code information.")
# --- Usage Example for Source Code ---
# test_chain_eth = "ethereum"
# usdc_contract_eth = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" # USDC on Ethereum (verified)
# get_token_source_code(test_chain_eth, usdc_contract_eth)
4. المثال 3: تقييم مخاطر المحفظة (/wallets/risk-rating/{chain}/{walletAddress}
)
يمكن أن يكشف تحليل المحافظ المرتبطة بمشروع (مثل محافظ الناشر، محافظ الفريق) عن المخاطر.Python
def get_wallet_risk_rating(chain, wallet_address):
"""
Retrieves and displays the risk rating for a wallet.
"""
print(f"\n--- Getting Risk Rating for Wallet: {wallet_address} on {chain} ---")
endpoint = f"/wallets/risk-rating/{chain}/{wallet_address}"
data = make_api_request(endpoint)
if data:
print(f"Overall Wallet Risk Level: {data.get('riskLevel')}")
print(f"Summary: {data.get('summary')}")
print("\nAssociated Tokens with Risk:")
associated_tokens = data.get('associatedTokens', [])
if associated_tokens:
for token_info in associated_tokens:
print(f" - Token: {token_info.get('symbol')} ({token_info.get('contractAddress')})")
print(f" Chain: {token_info.get('chain')}")
print(f" Risk Level: {token_info.get('riskLevel')}")
print(f" Role: {token_info.get('roleInTokenContext')} (e.g., Deployer, Owner)")
else:
print(" No associated tokens with notable risk found linked to this wallet by the scan.")
# Other fields like 'activitySummary', 'knownAssociations' could also be parsed.
# print(json.dumps(data, indent=2)) # For full response
else:
print("Failed to retrieve wallet risk rating.")
# --- Usage Example for Wallet Risk Rating ---
# Replace with a real wallet address and chain
# Example: A deployer wallet address you are investigating
# test_wallet_chain = "bsc"
# test_wallet_address = "0x000000000000000000000000000000000000dead" # Example, use a real one
# get_wallet_risk_rating(test_wallet_chain, test_wallet_address)
5. المثال 4: البحث عن الرموز (/tokens/search
)
إذا كان لديك اسم الرمز أو رمزه فقط، يمكنك محاولة العثور على عنوان العقد الخاص به.Python
def search_for_token(query, chain=None, page_size=5):
"""
Searches for tokens and displays results.
"""
print(f"\n--- Searching for tokens with query: '{query}' ---")
endpoint = "/tokens/search"
params = {
"query": query,
"pageSize": page_size
}
if chain:
params["chain"] = chain
print(f"Filtering by chain: {chain}")
data = make_api_request(endpoint, params=params)
if data and 'items' in data:
tokens_found = data['items']
print(f"Found {len(tokens_found)} token(s) (showing up to {page_size}):")
if tokens_found:
for token in tokens_found:
print(f" Name: {token.get('name')} ({token.get('symbol')})")
print(f" Contract: {token.get('contractAddress')}")
print(f" Chain: {token.get('chain')}")
print(f" Risk Level: {token.get('riskLevel')}")
print(f" DEX Screener Link: {token.get('dexScreenerLink')}")
print("-" * 20)
else:
print("No tokens found matching your query.")
# Pagination details are also available if you want to implement full pagination
# print(f"Total Items: {data.get('totalItems')}, Page: {data.get('pageNumber')}, Total Pages: {data.get('totalPages')}")
else:
print("Failed to perform token search or no items found.")
# --- Usage Example for Token Search ---
# search_for_token("CAKE", chain="bsc")
# search_for_token("Shiba Inu") # Broad search across chains
6. المثال 5: سرد السلاسل المدعومة (/utils/chains
)
استدعاء أداة بسيط للحصول على قائمة بالسلاسل التي تدعمها واجهة برمجة التطبيقات. يمكن أن يكون هذا مفيدًا للتحقق من صحة إدخال المستخدم أو ملء القوائم المنسدلة في تطبيق ما.Python
def list_supported_chains():
"""
Lists all chains supported by the Rugcheck.xyz API.
"""
print("\n--- Supported Blockchains by Rugcheck.xyz API ---")
endpoint = "/utils/chains"
data = make_api_request(endpoint)
if data:
for chain_info in data:
print(f" ID: {chain_info.get('id'):<15} Name: {chain_info.get('name'):<20} Native: {chain_info.get('nativeCurrencySymbol')}")
else:
print("Failed to retrieve supported chains.")
# --- Usage Example for Listing Chains ---
# list_supported_chains()
تشغيل الأمثلة:
- احفظ الكود كملف بايثون (على سبيل المثال،
rugcheck_user.py
). - عيّن مفتاح API الخاص بك:
export RUGCHECK_API_KEY="YOUR_ACTUAL_API_KEY"
(على Linux/macOS) أو عيّنه في متغيرات البيئة لنظامك (Windows). - قم بإلغاء التعليق عن أسطر مثال الاستخدام في نهاية كل كتلة دالة تريد اختبارها.
- شغّل من الطرفية الخاصة بك:
python rugcheck_user.py
الجزء الخامس: أفضل الممارسات والنصائح المتقدمة
- أمان مفتاح API: نكرر: استخدم متغيرات البيئة أو خدمة إدارة الأسرار. لا تقم أبدًا بتضمين المفاتيح مباشرة في الكود.
- تحديد المعدل: كن حذرًا بشأن حدود معدل طلبات API. إذا تلقيت أخطاء
429 Too Many Requests
، فبطئ طلباتك. نفّذ التراجع الأسي (exponential backoff) للمحاولات المتكررة. يجب أن تحدد وثائق API أو تفاصيل خطتك الحدود. - معالجة الأخطاء: تتضمن دالة
make_api_request
معالجة أساسية للأخطاء. وسّع نطاقها حسب الحاجة لتطبيقك (مثل تسجيل الأخطاء في ملف، منطق إعادة محاولة محدد لرموز أخطاء معينة). - الرجوع إلى Swagger: واجهة مستخدم Swagger (
https://api.rugcheck.xyz/swagger/index.html
) هي مصدرك النهائي لجميع نقاط النهاية، المعلمات، نصوص الطلبات، ومخططات الاستجابة. تحقق منها بشكل متكرر للحصول على التحديثات. - التخزين المؤقت (Caching): بالنسبة للبيانات التي لا تتغير بشكل متكرر (مثل الكود المصدري لعقد تم نشره أو نتيجة فحص ما لم يتم استخدام
forceRescan
)، فكر في تخزين استجابات API مؤقتًا لتحسين الأداء وتقليل حجم استدعاءات API. - فهم القيود: الأدوات المؤتمتة مثل Rugcheck.xyz قيمة للغاية ولكنها ليست معصومة عن الخطأ. تحدد الأنماط المعروفة والمخاطر المحتملة. قد يبتكر المحتالون المتطورون تقنيات جديدة. اجمع دائمًا بيانات API مع بحثك الخاص (DYOR - Do Your Own Research) والتفكير النقدي.
- تفسير البيانات: توفر واجهة برمجة التطبيقات البيانات؛ أنت تقدم التفسير. افهم معنى كل حقل (على سبيل المثال، "تحذير" حول
OWNERSHIP_NOT_RENOUNCED
هو عامل خطر كبير).
الخلاصة
توفر واجهة برمجة التطبيقات Rugcheck.xyz طريقة قوية ومفصلة لتقييم المخاطر المرتبطة بمشاريع العملات المشفرة برمجيًا. من خلال إتقان استخدامها عبر البرمجة العملية، كما هو موضح في هذا الدليل، يمكنك تعزيز عملية العناية الواجبة بشكل كبير، وبناء أنظمة تداول آلية أكثر أمانًا، والمساهمة في نظام DeFi بيئي أكثر شفافية. تذكر دائمًا استخدام مثل هذه الأدوات بمسؤولية وبالتزامن مع البحث الشامل. تكمن قوة واجهة برمجة التطبيقات في قدرتك على استعلام البيانات التي توفرها وتحليلها وتفسيرها بفعالية.
هل تريد منصة متكاملة وشاملة لفريق المطورين الخاص بك للعمل معًا بأقصى قدر من الإنتاجية؟
يقدم Apidog جميع طلباتك، ويحل محل Postman بسعر معقول جدًا!