> ## Documentation Index
> Fetch the complete documentation index at: https://polymarketcn.com/llms.txt
> Use this file to discover all available pages before exploring further.

# CLOB 認證

> 了解如何認證 Polymarket CLOB API 請求

<Callout type="success">
  還沒有帳號？[點擊這裡註冊 Polymarket](https://polymarket.com/?r=2026VIP) 並完成入金，才能用錢包私鑰為訂單籤名、實際成交。
</Callout>

<Warning>
  **法律合規提醒**：在使用 Polymarket 服務或 API 前，請確認您所在地區的法律規定。Polymarket 目前不支援比利時、法國、新加坡、泰國、中國大陸等地區，政策可能隨時變化。
</Warning>

Polymarket CLOB API 使用基於籤名的認證機制來驗證訂單和 API 請求。本指南將解釋不同的認證方法和籤名類型。

## 認證概述

CLOB 認證涉及兩個主要組件：

1. **API 憑據**：用於認證 REST API 請求
2. **訂單籤名**：用於驗證訂單的真實性

## API 憑據

### 創建 API 憑據

API 憑據用於認證對 CLOB 的 HTTP 請求。

```python theme={null}
# Python
from py_clob_client.client import ClobClient

client = ClobClient(
    host="https://clob.polymarket.com",
    key=private_key,
    chain_id=137
)

# 創建或派生 API 憑據
api_creds = client.create_or_derive_api_creds()
client.set_api_creds(api_creds)

print(f"API Key: {api_creds['apiKey']}")
print(f"API Secret: {api_creds['apiSecret']}")
print(f"API Passphrase: {api_creds['apiPassphrase']}")
```

```typescript theme={null}
// TypeScript
import { ClobClient } from '@polymarket/clob-client';
import { ethers } from 'ethers';

const wallet = new ethers.Wallet(privateKey);
const client = new ClobClient('https://clob.polymarket.com', 137, wallet);

// 創建或派生 API 憑據
const apiCreds = client.createOrDeriveApiCreds();
await client.setApiCreds(apiCreds);

console.log(`API Key: ${apiCreds.apiKey}`);
console.log(`API Secret: ${apiCreds.apiSecret}`);
console.log(`API Passphrase: ${apiCreds.apiPassphrase}`);
```

### API 憑據的工作原理

API 憑據基於您的私鑰派生，確保：

* **唯一性**：每個錢包地址有唯一的憑據
* **安全性**：憑據可以從私鑰重新派生
* **持久性**：相同的私鑰總是生成相同的憑據

## 籤名類型

Polymarket 支援三種籤名類型，取決於您如何創建帳戶：

### Type 0: EOA（外部擁有帳戶）

用於直接使用以太坊錢包地址交易的高級用戶。

```python theme={null}
# Python
client = ClobClient(
    host="https://clob.polymarket.com",
    key=private_key,
    chain_id=137
    # 不指定 signature_type 和 funder，默認為 EOA
)
```

```typescript theme={null}
// TypeScript
const client = new ClobClient(
  'https://clob.polymarket.com',
  137,
  wallet
  // 不指定 signatureType 和 funder，默認為 EOA
);
```

**特點**：

* 直接控制資金
* 需要設置 USDC 授權
* 適合有經驗的用戶

### Type 1: Poly Proxy（Magic/Email 登錄）

用於通過電子郵件或 Magic Link 登錄的用戶。

```python theme={null}
# Python
client = ClobClient(
    host="https://clob.polymarket.com",
    key=private_key,
    chain_id=137,
    signature_type=1,
    funder=proxy_address  # 您的代理錢包地址
)
```

```typescript theme={null}
// TypeScript
const client = new ClobClient(
  'https://clob.polymarket.com',
  137,
  wallet,
  1,  // signatureType
  proxyAddress  // 您的代理錢包地址
);
```

**特點**：

* 最簡單的登錄方式
* 無需手動設置授權
* 適合大多數用戶

### Type 2: Poly Gnosis Safe（瀏覽器錢包）

用於通過 MetaMask、Coinbase Wallet 等瀏覽器錢包登錄的用戶。

```python theme={null}
# Python
client = ClobClient(
    host="https://clob.polymarket.com",
    key=private_key,
    chain_id=137,
    signature_type=2,
    funder=proxy_address
)
```

```typescript theme={null}
// TypeScript
const client = new ClobClient(
  'https://clob.polymarket.com',
  137,
  wallet,
  2,
  proxyAddress
);
```

**特點**：

* 使用現有錢包
* 代理錢包管理資金
* 適合錢包用戶

## 訂單籤名

訂單必須使用 EIP-712 籤名進行籤署，以證明您授權該訂單。

### EIP-712 籤名

EIP-712 是一種標準化的籤名格式，使訂單：

* **可讀**：錢包可以顯示您正在籤署的內容
* **安全**：防止籤名重放攻擊
* **標準化**：符合以太坊標準

### 訂單籤名流程

```python theme={null}
# Python
from py_clob_client.clob_types import OrderArgs
from py_clob_client.order_builder.constants import BUY

# 1. 創建訂單參數
order_args = OrderArgs(
    price=0.55,
    size=100.0,
    side=BUY,
    token_id="YOUR_TOKEN_ID"
)

# 2. 客戶端自動籤署訂單
signed_order = client.create_order(order_args)

# 3. 提交已籤名的訂單
response = client.post_order(signed_order, OrderType.GTC)
```

籤名的訂單包含：

* **訂單數據**：價格、數量、方向等
* **籤名**：EIP-712 籤名
* **Nonce**：防止重放的唯一數字
* **到期時間**：訂單的有效期

## 獲取代理地址

### 方法 1：從網站獲取

1. 訪問 [Polymarket.com](https://polymarket.com)
2. 登錄您的帳戶
3. 點擊右上角的個人資料圖片
4. 複製顯示的地址

### 方法 2：通過 API 獲取

```python theme={null}
# Python
# 如果您不知道代理地址，可以先創建一個不帶 funder 的客戶端
temp_client = ClobClient(
    host="https://clob.polymarket.com",
    key=private_key,
    chain_id=137
)

# 然後查詢您的代理地址
# 注意：這需要您之前在 Polymarket 上創建過代理錢包
```

## 安全最佳實踐

<Warning>
  **重要安全提示**：

  1. **永遠不要共享私鑰**
     * 私鑰等同於您的資金
     * 不要將私鑰提交到 Git
     * 使用環境變量存儲敏感信息

  2. **使用環境變量**
     ```python theme={null}
     import os
     private_key = os.getenv('POLYMARKET_PRIVATE_KEY')
     proxy_address = os.getenv('POLYMARKET_PROXY_ADDRESS')
     ```

  3. **定期輪換 API 憑據**
     * 如果懷疑洩露，重新生成憑據

  4. **限制 API 密鑰權限**
     * 只授予必要的權限

  5. **使用 HTTPS**
     * 始終通過 HTTPS 連接到 API
</Warning>

## 環境變量設置

### Python 示例

創建 `.env` 文件：

```bash theme={null}
# .env
POLYMARKET_PRIVATE_KEY=your_private_key_here
POLYMARKET_PROXY_ADDRESS=your_proxy_address_here
POLYMARKET_SIGNATURE_TYPE=1
```

使用 python-dotenv：

```python theme={null}
from dotenv import load_dotenv
import os

load_dotenv()

client = ClobClient(
    host="https://clob.polymarket.com",
    key=os.getenv('POLYMARKET_PRIVATE_KEY'),
    chain_id=137,
    signature_type=int(os.getenv('POLYMARKET_SIGNATURE_TYPE')),
    funder=os.getenv('POLYMARKET_PROXY_ADDRESS')
)
```

### TypeScript 示例

創建 `.env` 文件：

```bash theme={null}
# .env
POLYMARKET_PRIVATE_KEY=your_private_key_here
POLYMARKET_PROXY_ADDRESS=your_proxy_address_here
POLYMARKET_SIGNATURE_TYPE=1
```

使用 dotenv：

```typescript theme={null}
import * as dotenv from 'dotenv';
dotenv.config();

const client = new ClobClient(
  'https://clob.polymarket.com',
  137,
  new ethers.Wallet(process.env.POLYMARKET_PRIVATE_KEY!),
  parseInt(process.env.POLYMARKET_SIGNATURE_TYPE!),
  process.env.POLYMARKET_PROXY_ADDRESS
);
```

## 常見認證錯誤

### "Invalid Signature" 錯誤

**原因**：

1. 使用了錯誤的籤名類型
2. 私鑰與代理地址不匹配
3. NegRisk 市場需要特殊標誌

**解決方案**：

```python theme={null}
# 確認籤名類型
# Magic/Email: signature_type=1
# Browser Wallet: signature_type=2

# 對於 NegRisk 市場
order_args = OrderArgs(
    price=0.55,
    size=100.0,
    side=BUY,
    token_id="YOUR_TOKEN_ID",
    negrisk=True  # 添加這個標誌
)
```

### "Unauthorized" 錯誤

**原因**：

1. API 憑據未設置
2. API 憑據已過期

**解決方案**：

```python theme={null}
# 重新創建並設置 API 憑據
api_creds = client.create_or_derive_api_creds()
client.set_api_creds(api_creds)
```

### "Insufficient Allowance" 錯誤（僅 EOA）

**原因**：
USDC 授權額度不足

**解決方案**：
需要在鏈上批准 Polymarket 合約使用您的 USDC。詳見[官方文檔](https://docs.polymarket.com)。

## 驗證認證設置

```python theme={null}
# Python: 驗證設置的腳本
def verify_authentication(client):
    try:
        # 1. 檢查 API 憑據
        api_creds = client.create_or_derive_api_creds()
        client.set_api_creds(api_creds)
        print("✓ API 憑據設置成功")
        
        # 2. 嘗試獲取餘額
        balance = client.get_balance()
        print(f"✓ 認證成功，餘額: {balance}")
        
        # 3. 嘗試獲取訂單
        orders = client.get_orders()
        print(f"✓ 可以訪問訂單，當前活躍訂單: {len(orders)}")
        
        return True
    except Exception as e:
        print(f"✗ 認證失敗: {e}")
        return False

# 使用
verify_authentication(client)
```

## 下一步

<CardGroup cols={2}>
  <Card title="第一筆訂單" icon="rocket" href="/api-tutorial/first-order">
    使用認證設置下第一筆訂單
  </Card>

  <Card title="訂單管理" icon="list-check" href="/api-tutorial/clob/order-management">
    學習如何管理訂單
  </Card>

  <Card title="REST API" icon="code" href="/api-tutorial/clob/rest-api">
    探索完整的 REST API
  </Card>

  <Card title="地理限制" icon="globe" href="/api-tutorial/clob/geographic-restrictions">
    了解地理限制政策
  </Card>
</CardGroup>
