复制指定钱包在 Polymarket 上的买卖与赎回操作,自动按自定义资金占比同步跟单。内置 Builder/Relayer 支持、历史去重、风险控制等机制,可直接接入真实账户运行。
- 实时监控多钱包:轮询 Polymarket Data API,自动去重并支持黑名单过滤。
- 余额占比下单:每笔信号按自己钱包 USDC 余额 ×
ORDER_BALANCE_RATIO计算预算,使用官方 CLOB 市价单(FAK)立即成交。 - 自动卖出/赎回:检测到目标钱包卖出或赎回时,机器人会卖掉在该 token 上的全部持仓,赎回操作通过 Builder Relayer 免 gas 完成。
- 历史去重与持久化:本地
state/state.json记录每个目标地址的最新时间戳与已处理交易,配合SKIP_HISTORY_ON_START避免首启“补单”。 - 官方合规签名:统一走
@polymarket/clob-client与@polymarket/builder-relayer-client,自动注入 Builder 认证头,无需手写 EIP712。 - 日志友好:全部中文日志;成功日志只包含“买入/卖出/赎回完成”,失败时直接返回原因,便于排查。
┌──────────────┐ 1. 轮询 Data API trades
│ TradeMonitor │ ─────────────────────────┐
└──────────────┘ │
trade signals ▼
┌────────────────┐
│ TradeExecutor │
├───────────────┬┴───────────────┐
│ │ │
buy/sell via CLOB redeem via Relayer 状态缓存
- TradeMonitor:按目标地址依次抓取成交,结合
stateStore只推送新信号,并在首次启动时执行“跳过历史”。 - TradeExecutor:根据信号构建跟单指令,校验余额/滑点/最小金额,使用官方 SDK (
createMarketOrder + postOrder) 下 FAK 市价单,或通过 Relayer 执行redeemPositions。 - stateStore:保存本地时间戳与已处理哈希,支持手动删除
state/state.json重置。
- Node.js 18+、npm
- Polygon RPC(Infura/Alchemy/自建均可)
- 已开通 Polymarket Builder Profile,并能导出 Proxy/EOA 私钥
npm install
cp .env.example .env # 根据自身配置修改- 所有变量都在
.env.example中给出示例,请至少填写钱包、私钥、RPC、CLOB/Relayer 地址、Builder 凭证。 SIGNATURE_TYPE:0=EOA,1=Polymarket Proxy/Magic,2=Gnosis Safe,务必与PROXY_WALLET的实际登录方式一致。
npm run build # 或直接使用 ts-node
npx ts-node src/index.ts默认会跳过首次抓到的历史成交;若想重新同步,请删除 state/state.json。
| 变量 | 说明 | 示例 |
|---|---|---|
PROXY_WALLET |
用于复制交易的钱包地址 | 0xabc... |
PRIVATE_KEY |
对应的钱包私钥(加密保存) | 0x...... |
RPC_URL |
Polygon RPC 链接 | https://polygon-mainnet.infura.io/v3/... |
CLOB_HTTP_URL / CLOB_WS_URL |
Polymarket CLOB HTTP/WS 入口 | https://clob.polymarket.com/ |
DATA_API_URL |
Polymarket Data API | https://data-api.polymarket.com |
TARGET_WALLETS |
逗号分隔的目标钱包列表 | 0xaaa,0xbbb |
BLACKLIST_WALLETS |
可选,剔除不想复制的地址 | 0xccc |
SKIP_HISTORY_ON_START |
true=首次启动跳过历史成交 |
true |
FETCH_INTERVAL |
轮询间隔(毫秒) | 1000 |
ORDER_BALANCE_RATIO |
单笔跟单占余额比例 | 0.2 |
MIN_TRADE_USDC |
最小跟单金额 | 5 |
MAX_SLIPPAGE |
允许的最大滑点(比例) | 0.05 |
USDC_CONTRACT_ADDRESS |
Polygon USDC 合约地址 | 0x2791... |
POLY_RELAYER_URL |
Builder Relayer 地址 | https://relayer-v2.polymarket.com/ |
POLY_BUILDER_API_KEY/SECRET/PASSPHRASE |
Builder 凭证(Settings → Builders 获取) | ... |
SIGNATURE_TYPE |
0/1/2,详见上文 |
1 |
- 日志:
INFO表示成功(启动、心跳、买入/卖出/赎回完成),WARN直接给出失败原因,例如 “盘口没有足够流动性” 或 “invalid amounts”。 - 订单类型:FAK 市价单,能成交多少吃多少,剩余立即取消;打到 400(没有可成交量)会被跳过。
- 余额与精度:预算始终以自己钱包 USDC 余额 × 比例为上限,且下单前会自动截断为 2 位(USDC)/4 位(份额),满足 CLOB 的精度规则。
- 赎回流程:当信号类型为
REDEEM时,机器人会检查本地持仓并通过 Relayer 执行redeemPositions,日志会返回链上 tx hash。
| 问题 | 可能原因与处理 |
|---|---|
invalid signature |
SIGNATURE_TYPE 与实际登录方式不符,或 PROXY_WALLET/PRIVATE_KEY 不匹配。请确认 .env 设置后重启。 |
invalid amounts, ... 2 decimals |
旧版本未上线。请 npm run build && npx ts-node src/index.ts 重新启动,确保已加载最新代码。 |
no orders found to match ... FAK |
该信号触发时盘口已被吃光,属正常现象。机器人会记录 WARN 并等待下一笔信号。 |
Client network socket disconnected ... TLS |
数据 API 请求时网络抖动,稍后会自动恢复,可忽略。 |
state/state.json记录每个目标地址的lastTimestamp、已处理 tx 哈希,以及是否需要跳过历史。- 删除该文件即可强制重新同步(谨慎操作,可能触发重复跟单)。
- 日志会提示 “首次运行跳过历史成交” 说明跳过逻辑生效。
npm run recent:查看TARGET_WALLETS中每个地址最近 10 笔交易(买/卖/赎回,含价格与份额)。- 需要以源码实时调试可使用
npx ts-node src/index.ts,无需重新构建。
.env内的私钥/Builder 凭证必须妥善保管,建议chmod 600 .env。- Builder API Key 建议区分环境使用;如需远程签名,可将
builderConfig替换为官方 Signing Server。
若对 Polymarket CLOB/Relayer 有疑问,可参考官方文档:
docs/developers_CLOB_clients.md,docs/developers_CLOB_orders_create-order.md,docs/developers_builders_order-attribution.md,docs/developers_builders_relayer-client.md。