Skip to main content
還沒有帳號?點擊這裡註冊 Polymarket 並完成入金,才能用錢包私鑰為訂單籤名、實際成交。
法律合規提醒:在使用 Polymarket 服務或 API 前,請確認您所在地區的法律規定。Polymarket 目前不支援比利時、法國、新加坡、泰國、中國大陸等地區,政策可能隨時變化。
了解如何檢查 Polymarket CLOB API 的運行狀態和健康狀況。

API 狀態檢查

健康檢查端點

Polymarket 提供健康檢查端點來驗證 API 是否正常運行。
curl https://clob.polymarket.com/health
響應示例
{
  "status": "ok",
  "timestamp": "2024-01-15T10:30:00Z"
}

Python 檢查

import requests

def check_clob_status():
    try:
        response = requests.get('https://clob.polymarket.com/health')
        if response.status_code == 200:
            data = response.json()
            print(f"✓ CLOB API 狀態: {data.get('status', 'ok')}")
            return True
        else:
            print(f"✗ CLOB API 返回狀態碼: {response.status_code}")
            return False
    except Exception as e:
        print(f"✗ 無法連接到 CLOB API: {e}")
        return False

check_clob_status()

TypeScript 檢查

async function checkClobStatus(): Promise<boolean> {
  try {
    const response = await fetch('https://clob.polymarket.com/health');
    if (response.ok) {
      const data = await response.json();
      console.log(`✓ CLOB API 狀態: ${data.status || 'ok'}`);
      return true;
    } else {
      console.log(`✗ CLOB API 返回狀態碼: ${response.status}`);
      return false;
    }
  } catch (error) {
    console.error(`✗ 無法連接到 CLOB API: ${error}`);
    return false;
  }
}

checkClobStatus();

系統狀態頁面

Polymarket 維護一個公開的狀態頁面,顯示所有服務的當前狀態和歷史正常運行時間。

Polymarket 狀態頁面

查看實時系統狀態和事件歷史

服務組件

Polymarket 的交易基礎設施包括多個組件:

1. CLOB API

  • 作用:訂單創建、取消和查詢
  • 端點https://clob.polymarket.com
  • 健康檢查/health

2. Gamma API

  • 作用:市場數據和元數據
  • 端點https://gamma-api.polymarket.com
  • 健康檢查/health

3. Data API

  • 作用:歷史數據和分析
  • 端點https://data-api.polymarket.com
  • 健康檢查/health

4. WebSocket

  • 作用:實時數據流
  • 端點wss://ws-subscriptions-clob.polymarket.com

5. 區塊鏈網絡

  • Polygon 主網:訂單結算和資金管理
  • 網絡狀態Polygon Status

監控腳本

完整的系統監控

import requests
import time
from datetime import datetime

def check_service(name: str, url: str) -> bool:
    """檢查服務是否可用"""
    try:
        response = requests.get(url, timeout=5)
        status = response.status_code == 200
        print(f"{'✓' if status else '✗'} {name}: {'在線' if status else '離線'}")
        return status
    except Exception as e:
        print(f"✗ {name}: 離線 ({e})")
        return False

def monitor_polymarket():
    """監控所有 Polymarket 服務"""
    print(f"\n=== Polymarket 系統狀態檢查 ({datetime.now().strftime('%Y-%m-%d %H:%M:%S')}) ===\n")
    
    services = {
        'CLOB API': 'https://clob.polymarket.com/health',
        'Gamma API': 'https://gamma-api.polymarket.com/health',
        'Data API': 'https://data-api.polymarket.com/health',
    }
    
    results = {}
    for name, url in services.items():
        results[name] = check_service(name, url)
    
    # 總體狀態
    all_online = all(results.values())
    print(f"\n總體狀態: {'✓ 所有服務正常' if all_online else '✗ 部分服務異常'}\n")
    
    return all_online

# 單次檢查
monitor_polymarket()

# 持續監控(每5分鐘檢查一次)
# while True:
#     monitor_polymarket()
#     time.sleep(300)  # 5分鐘

TypeScript 監控腳本

interface ServiceStatus {
  name: string;
  online: boolean;
}

async function checkService(name: string, url: string): Promise<ServiceStatus> {
  try {
    const response = await fetch(url, {
      method: 'GET',
      signal: AbortSignal.timeout(5000), // 5秒超時
    });
    const online = response.ok;
    console.log(`${online ? '✓' : '✗'} ${name}: ${online ? '在線' : '離線'}`);
    return { name, online };
  } catch (error) {
    console.log(`✗ ${name}: 離線 (${error})`);
    return { name, online: false };
  }
}

async function monitorPolymarket(): Promise<boolean> {
  console.log(`\n=== Polymarket 系統狀態檢查 (${new Date().toLocaleString()}) ===\n`);
  
  const services = {
    'CLOB API': 'https://clob.polymarket.com/health',
    'Gamma API': 'https://gamma-api.polymarket.com/health',
    'Data API': 'https://data-api.polymarket.com/health',
  };
  
  const results = await Promise.all(
    Object.entries(services).map(([name, url]) => checkService(name, url))
  );
  
  const allOnline = results.every(r => r.online);
  console.log(`\n總體狀態: ${allOnline ? '✓ 所有服務正常' : '✗ 部分服務異常'}\n`);
  
  return allOnline;
}

// 單次檢查
monitorPolymarket();

// 持續監控(每5分鐘檢查一次)
// setInterval(monitorPolymarket, 5 * 60 * 1000);

性能指標

響應時間

正常情況下的預期響應時間:
端點類型平均響應時間
健康檢查< 100ms
市场查询< 200ms
订单簿查询< 300ms
订单创建< 500ms
订单取消< 400ms

测量响应时间

import requests
import time

def measure_response_time(url: str) -> float:
    start = time.time()
    response = requests.get(url)
    end = time.time()
    return (end - start) * 1000  # 轉換為毫秒

# 測試 CLOB API
clob_time = measure_response_time('https://clob.polymarket.com/health')
print(f"CLOB API 響應時間: {clob_time:.2f}ms")

# 測試 Gamma API
gamma_time = measure_response_time('https://gamma-api.polymarket.com/health')
print(f"Gamma API 響應時間: {gamma_time:.2f}ms")

常見問題

API 返回 502/503 錯誤

可能原因
  • 服務暫時不可用
  • 正在進行維護
  • 網絡問題
解決方案
  1. 檢查 Polymarket 狀態頁面
  2. 等待幾分鐘後重試
  3. 實施指數退避重試策略

WebSocket 連接失敗

可能原因
  • WebSocket 服務離線
  • 網絡防火牆阻止 WebSocket
解決方案
  1. 檢查 WebSocket 端點狀態
  2. 驗證防火牆設置
  3. 使用備用 REST API 輪詢

訂單延遲

可能原因
  • 高負載期間
  • 網絡延遲
  • Polygon 網絡擁堵
解決方案
  1. 檢查 Polygon 網絡狀態
  2. 增加超時時間
  3. 監控訂單狀態

狀態通知

設置警報

import requests
import smtplib
from email.mime.text import MIMEText

def send_alert(subject: str, message: str):
    """發送郵件警報"""
    # 配置您的郵件設置
    sender = "[email protected]"
    recipient = "[email protected]"
    
    msg = MIMEText(message)
    msg['Subject'] = subject
    msg['From'] = sender
    msg['To'] = recipient
    
    # 發送郵件(需要配置 SMTP 伺服器)
    # smtp = smtplib.SMTP('smtp.gmail.com', 587)
    # smtp.send_message(msg)
    print(f"警報: {subject} - {message}")

def monitor_with_alerts():
    """監控並在出現問題時發送警報"""
    previous_status = True
    
    while True:
        current_status = check_clob_status()
        
        # 狀態變化時發送警報
        if previous_status and not current_status:
            send_alert(
                "Polymarket CLOB 離線",
                "CLOB API 當前無法訪問"
            )
        elif not previous_status and current_status:
            send_alert(
                "Polymarket CLOB 恢復",
                "CLOB API 已恢復正常"
            )
        
        previous_status = current_status
        time.sleep(60)  # 每分鐘檢查一次

下一步