本指南教你使用自己的钱包(EOA 或 Polymarket 代理钱包),通过 CLOB API(中心化限价订单簿)提交(place/submit)你的第一个限价订单。所有操作均使用官方开源 SDK @polymarket/clob-client(TypeScript 示例),适用于 Polygon 主网(Chain ID 137)。前置要求
- Polygon 主网上的钱包,已充值足够 USDC.e(用于买入)或持仓代币(用于卖出)。
- 完成必要的 token approval(授权 Exchange 合约,通常在 Polymarket 官网首次交易时自动完成)。
- 安装 Node.js 和 npm。
- 准备好私钥(环境变量 PRIVATE_KEY),严禁硬编码或泄露!
- 如果使用 Polymarket.com 账户(邮箱/Google登录),资金在代理钱包(proxy wallet,可在个人资料下拉查看地址)。
安装 SDK
bash
npm install @polymarket/clob-client ethers@5
步骤 1:用私钥初始化客户端(临时版)
typescript
import { ClobClient } from "@polymarket/clob-client";
import { Wallet } from "ethers";
// v5.8.0
const HOST = "https://clob.polymarket.com";
const CHAIN_ID = 137; // Polygon 主网
const signer = new Wallet(process.env.PRIVATE_KEY!);
const client = new ClobClient(HOST, CHAIN_ID, signer);
步骤 2:派生或创建用户 API 凭证私钥仅用于一次性派生 API 凭证(Key + Secret + Passphrase),后续所有请求都靠这些凭证认证。
typescript
// 如果已存在则派生,否则新建
const userApiCreds = await client.createOrDeriveApiKey();
console.log("API Key:", userApiCreds.apiKey);
console.log("Secret:", userApiCreds.secret);
console.log("Passphrase:", userApiCreds.passphrase);
重要:保存好这些凭证!丢失后无法恢复(除非自定义 nonce 重建,不推荐)。步骤 3:确定签名类型(Signature Type)和资金地址(Funder Address)根据钱包类型选择:
| 交易方式 | Signature Type | 值 | Funder Address |
|---|---|---|---|
| 独立 EOA 钱包(自己付 gas) | EOA | 0 | 你的 EOA 钱包地址 |
| Polymarket.com 邮箱/Magic Link 登录 | POLY_PROXY | 1 | 你的代理钱包地址 |
| Polymarket.com 浏览器钱包连接(如 MetaMask) | GNOSIS_SAFE | 2 | 你的代理钱包地址 |
常见错误:不要混用 Builder API 凭证!Builder 只用于订单归属(排行榜统计)。步骤 4:用完整认证重新初始化客户端
typescript
// 示例:EOA 类型
const SIGNATURE_TYPE = 0;
const FUNDER_ADDRESS = signer.address; // EOA 就是自己
const client = new ClobClient(
HOST,
CHAIN_ID,
signer,
userApiCreds,
SIGNATURE_TYPE,
FUNDER_ADDRESS
);
步骤 5:提交第一个限价订单(Place an Order)先从 Gamma API 获取 tokenID(https://gamma-api.polymarket.com/events 或 /markets),然后提交订单。
typescript
import { Side, OrderType } from "@polymarket/clob-client";
// 先获取市场 tickSize 等信息(必需)
const market = await client.getMarket("YOUR_TOKEN_ID_HERE"); // 替换为真实 tokenID
const response = await client.createAndPostOrder(
{
tokenID: "YOUR_TOKEN_ID_HERE", // Yes 或 No 的 tokenID
price: 0.50, // 每股价格(0.01~0.99 USDC,代表概率)
size: 10, // 股数(shares)
side: Side.BUY, // BUY 或 SELL
},
{
tickSize: market.tickSize, // 市场最小价格单位
negRisk: market.negRisk, // 多结果事件为 true
},
OrderType.GTC // Good-Til-Cancelled 永久有效
);
console.log("订单 ID:", response.orderID);
console.log("状态:", response.status);
小贴士:
- tokenID:从 Gamma API 的 clobTokenIds 数组取(通常 [0] 为 Yes,[1] 为 No)。
- price:必须符合 tickSize(如 0.01 的倍数)。
- 用 OrderType.FOK(全成或取消)或 FAK 可模拟市价单。
步骤 6:查看和管理订单
typescript
// 查看所有挂单
const openOrders = await client.getOpenOrders();
console.log(`你有 ${openOrders.length} 个挂单`);
// 查看成交历史
const trades = await client.getTrades();
console.log(`你完成了 ${trades.length} 笔成交`);
// 取消订单
await client.cancelOrder(response.orderID);
常见问题排查
- Invalid Signature / L2 Auth Not Available:签名类型、funder 或私钥错。重新检查凭证创建过程。
- Unauthorized / Invalid API Key:凭证无效,重新运行 createOrDeriveApiKey()。
- Not Enough Balance / Allowance:余额不足或未授权。去官网检查余额,并完成授权。
- Cloudflare / Geoblock:地区受限,参考地理限制文档。
可选:添加 Builder 凭证(用于订单归属/排行榜)如果你是构建者(为用户路由订单),可添加 Builder API 凭证(单独申请):
typescript
import { BuilderConfig, BuilderApiKeyCreds } from "@polymarket/builder-signing-sdk";
// Builder 凭证(环境变量)
const builderCreds: BuilderApiKeyCreds = {
key: process.env.POLY_BUILDER_API_KEY!,
secret: process.env.POLY_BUILDER_SECRET!,
passphrase: process.env.POLY_BUILDER_PASSPHRASE!,
};
const builderConfig = new BuilderConfig({ localBuilderCreds: builderCreds });
// 在 ClobClient 初始化时加到最后
const client = new ClobClient(
HOST, CHAIN_ID, signer, userApiCreds,
SIGNATURE_TYPE, FUNDER_ADDRESS,
undefined, false, builderConfig
);
一句话总结:
通过以上步骤,你就能用代码提交(place)订单了!这是自动化交易、做市机器人、套利脚本的基础。先在小额测试市场验证余额、授权和地区无误。
