O cenário das criptomoedas é repleto de oportunidades, mas também de riscos significativos. Rug pulls e tokens mal projetados podem levar a perdas substanciais. O Rugcheck.xyz oferece um serviço essencial ao analisar projetos de criptomoedas em busca de potenciais sinais de alerta. Sua API permite que desenvolvedores, traders e analistas acessem programaticamente essas informações, automatizando e escalando seus esforços de due diligence. Este guia focará intensamente em como usar a API do Rugcheck.xyz, equipando você com exemplos práticos em Python.
Quer uma plataforma integrada e completa para sua Equipe de Desenvolvedores trabalhar em conjunto com máxima produtividade?
Apidog atende a todas as suas demandas e substitui o Postman por um preço muito mais acessível!
Uma Breve Visão Geral do Rugcheck.xyz e Sua API
O que é Rugcheck.xyz?
Rugcheck.xyz é uma plataforma projetada para examinar tokens de criptomoedas e contratos inteligentes em busca de sinais de intenção maliciosa (como rug pulls ou honeypots) ou riscos inerentes. Ela examina o código do contrato, liquidez, tokenomics, carteiras de desenvolvedores e mais, fornecendo avaliações de risco e relatórios detalhados.
Por que a API?
A API concede acesso programático ao motor analítico do Rugcheck.xyz, permitindo:
- Automação: Integrar verificações em bots de negociação ou sistemas de alerta de novos tokens.
- Escalabilidade: Analisar inúmeros tokens muito mais rápido do que verificações manuais.
- Customização: Construir dashboards e modelos de risco personalizados usando dados brutos da API.
Obtendo Sua Chave de API do Rugcheck.xyz – O Essencial
Para usar a API, você precisa de uma chave de API. A documentação da API do Rugcheck.xyz (https://api.rugcheck.xyz/swagger/index.html
) implica um sistema de conta de usuário para gerenciamento de chaves através de endpoints como /user/api-keys
.
- Registrar/Entrar: Visite o site principal do Rugcheck.xyz e crie uma conta ou faça login.
- Encontrar Configurações de API: Procure por uma seção "API", "Desenvolvedor" ou "Chaves de API" no seu painel de usuário.
- Gerar Chave: Crie uma nova chave de API. Você pode ser capaz de nomeá-la para facilitar a identificação.
- Proteja Sua Chave: Copie a chave gerada e armazene-a de forma segura (por exemplo, gerenciador de senhas, variável de ambiente). Nunca a exponha em repositórios de código públicos ou aplicações do lado do cliente.
Todas as requisições da API exigem que esta chave seja enviada no cabeçalho X-API-KEY
.
Antes de mergulhar no código, aqui estão alguns endpoints primários com os quais trabalharemos (consulte a documentação Swagger para detalhes exaustivos):
GET /tokens/scan/{chain}/{contractAddress}
: Realiza uma varredura em tempo real de um token. Retorna níveis de risco, avisos, detalhes do contrato, informações de liquidez, etc.GET /tokens/source-code/{chain}/{contractAddress}
: Recupera o código fonte verificado do contrato inteligente de um token e o ABI.GET /wallets/risk-rating/{chain}/{walletAddress}
: Avalia o perfil de risco de um determinado endereço de carteira.GET /tokens/search
: Busca por tokens por nome ou símbolo.GET /utils/chains
: Lista todas as redes blockchain suportadas pela API.
A URL Base para todas as requisições é: https://api.rugcheck.xyz
Como Usar a API do Rugcheck.xyz: Exemplos Detalhados em Python
É aqui que nos tornamos práticos. Usaremos Python com a biblioteca requests
.
Pré-requisitos:
- Python 3.x instalado.
- Biblioteca
requests
:pip install requests
- Sua chave de API do Rugcheck.xyz.
1. Configuração e Função Central de Chamada da API
Primeiro, vamos configurar nosso ambiente e criar uma função reutilizável para lidar com chamadas de API. É uma boa prática armazenar sua chave de API como uma variável de ambiente.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
Importante: Para que os exemplos a seguir funcionem, certifique-se de que RUGCHECK_API_KEY
esteja definida em seu ambiente. Você também precisará de endereços de contrato e endereços de carteira válidos para as respectivas cadeias.
2. Exemplo 1: Análise Profunda da Varredura de Token (/tokens/scan/{chain}/{contractAddress}
)
Este é um dos endpoints mais poderosos. Vamos varrer um token e dissecar a resposta.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)
Interpretação dos Resultados da Varredura:
riskLevel
: Dá uma sensação imediata de perigo potencial. "CRITICAL" ou "HIGH" exigem extrema cautela.trustScore
: Uma pontuação numérica que pode ser rastreada ou usada como benchmark.scams
ewarnings
: Esses arrays são cruciais. Eles detalham problemas específicos comoHONEYPOT
,PROXY_CONTRACT
,HIGH_TAXES
,OWNERSHIP_NOT_RENOUNCED
,BLACKLIST_FUNCTIONS
, etc. Sempre revise essas mensagens cuidadosamente.taxes
: Impostos altos ou modificáveis são sinais de alerta.liquidityDetails
: Procure por liquidez significativa desbloqueada ou uma grande porção detida pelo deployer. Liquidez bloqueada é um bom sinal, mas verifique a duração do bloqueio e o fornecedor.holderAnalysis
: Alta concentração de tokens em poucas carteiras (especialmente as carteiras do deployer ou da equipe se não estiverem em vesting) pode ser arriscada.
3. Exemplo 2: Recuperando Código Fonte (/tokens/source-code/{chain}/{contractAddress}
)
Saber se um contrato é verificado e ser capaz de inspecionar seu código fonte é vital.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. Exemplo 3: Classificação de Risco de Carteira (/wallets/risk-rating/{chain}/{walletAddress}
)
Analisar carteiras associadas a um projeto (por exemplo, carteiras do deployer, da equipe) pode revelar riscos.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. Exemplo 4: Buscando Tokens (/tokens/search
)
Se você só tem um nome ou símbolo de token, pode tentar encontrar seu endereço de contrato.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. Exemplo 5: Listando Cadeias Suportadas (/utils/chains
)
Uma chamada de utilidade simples para obter uma lista das cadeias suportadas pela API. Isso pode ser útil para validar a entrada do usuário ou preencher menus suspensos em uma aplicação.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()
Executando os Exemplos:
Para executar esses exemplos:
- Salve o código como um arquivo Python (por exemplo,
rugcheck_user.py
). - Defina sua chave de API:
export RUGCHECK_API_KEY="SUA_CHAVE_DE_API_REAL"
(no Linux/macOS) ou defina-a nas variáveis de ambiente do seu sistema (Windows). - Descomente as linhas de exemplo de uso no final de cada bloco de função que você deseja testar.
- Execute a partir do seu terminal:
python rugcheck_user.py
Parte 5: Melhores Práticas e Dicas Avançadas
- Segurança da Chave de API: Reitere: Use variáveis de ambiente ou um serviço de gerenciamento de segredos. Nunca codifique chaves diretamente.
- Rate Limiting: Esteja atento aos limites de taxa da API. Se você receber erros
429 Too Many Requests
, diminua a frequência das suas requisições. Implemente backoff exponencial para retentativas. A documentação da API ou os detalhes do seu plano devem especificar os limites. - Tratamento de Erros: A função
make_api_request
inclui tratamento básico de erros. Expanda isso conforme necessário para sua aplicação (por exemplo, registrar erros em um arquivo, lógica de retentativa específica para certos códigos de erro). - Consulte o Swagger: A UI do Swagger (
https://api.rugcheck.xyz/swagger/index.html
) é sua fonte definitiva para todos os endpoints, parâmetros, corpos de requisição e esquemas de resposta. Verifique-o frequentemente para atualizações. - Cache: Para dados que não mudam frequentemente (como código fonte de um contrato implantado ou um resultado de varredura, a menos que
forceRescan
seja usado), considere armazenar em cache as respostas da API para melhorar o desempenho e reduzir o volume de chamadas à API. - Entenda as Limitações: Ferramentas automatizadas como Rugcheck.xyz são incrivelmente valiosas, mas não infalíveis. Elas identificam padrões conhecidos e riscos potenciais. Golpistas sofisticados podem criar novas técnicas. Sempre combine dados da API com sua própria pesquisa (DYOR - Do Your Own Research) e pensamento crítico.
- Interpretação de Dados: A API fornece dados; você fornece a interpretação. Entenda o que cada campo significa (por exemplo, um "warning" sobre
OWNERSHIP_NOT_RENOUNCED
é um fator de risco significativo).
Conclusão
A API do Rugcheck.xyz oferece uma maneira robusta e detalhada de avaliar programaticamente os riscos associados a projetos de criptomoedas. Ao dominar seu uso através de codificação prática, como demonstrado neste guia, você pode aprimorar significativamente seu processo de due diligence, construir sistemas de negociação automatizados mais seguros e contribuir para um ecossistema DeFi mais transparente. Lembre-se de sempre usar essas ferramentas de forma responsável e em conjunto com pesquisa abrangente. O poder da API reside na sua capacidade de consultar, analisar e interpretar eficazmente a riqueza de dados que ela fornece.
Quer uma plataforma integrada e completa para sua Equipe de Desenvolvedores trabalhar em conjunto com máxima produtividade?
Apidog atende a todas as suas demandas e substitui o Postman por um preço muito mais acessível!