☰
OpenClaw 配 TaoToken:Polymarket 交易 Bot 的 config.toml 骨架与 py-clob-client 验证
2026/9/26 16:02:37 网站建设 项目流程

1. 为什么要在 OpenClaw 里给 Polymarket Bot 单独配一条模型通道

OpenClaw 驱动 Polymarket 交易 Bot,本质上是把「AI 决策」和「链上下单」拼成一条流水线:OpenClaw 负责读市场、算价差、生成下单意图,py-clob-client 负责在 Polygon 上把意图变成真实成交。这条链路里最容易被忽略、也最容易在半夜炸掉的,不是策略,而是模型调用的通道管理——信号层要频繁问模型「这个价差值不值得打」,风控层要问「当前仓位要不要平」,如果每个 Skill 各自散落一个 Key,轮换、限流、审计全乱套。

我试过把模型调用统一收口到 TaoToken,用一套 Key 管住 OpenClaw 里所有需要推理的节点,config.toml 只写一份通道配置,py-clob-client 那边专心做交易。这篇就把这套骨架拆开:一份可复制的 config.toml、一份环境变量清单,再加一笔最小验证下单,目标是让你从配置一路跑到成交回执。

适合谁看:已经在 Polygon 上有钱包、装过 py-clob-client、想让 OpenClaw 的 Bot 稳定跑起来的人。如果你还没碰过 Polymarket,建议先把 SDK 跑通再回来配通道。

2. TaoToken 前置:把模型通道和交易通道分开管

先说清楚分工。TaoToken 在这里管的是「模型调用」这一层:OpenClaw 的推理节点、信号打分、风控判断,都通过它统一走。交易那一层仍然是 py-clob-client 直连 Polymarket 的 CLOB,两者互不干扰。这样设计的好处是,模型 Key 轮换不会动到交易逻辑,交易私钥也不会因为模型配置外泄。

你需要准备两样东西:

第一,一个 TaoToken 的 API Key。到控制台的 API Keys 页面创建,建议按用途命名,比如openclaw-polymarket-bot,方便后面在日志里对账。创建入口在这里:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite

第二,确认你要用的模型和接入方式。OpenClaw 的 Skill 通常走 OpenAI 兼容协议,TaoToken 的 API 基址是https://taotoken.net/api,注意这个地址不带任何查询参数,直接作为 base_url 填进去。模型名按你实际要用的填,比如做信号判断用轻量模型、做复杂风控推理用强模型,可以在 config.toml 里分节点指定。

注意:API Key 只放在环境变量或本地.env里,不要写进 config.toml 提交到 Git。下面骨架里所有敏感值都用占位符。

如果你还想先验证模型通道本身通不通,可以到模型对话页面手动发一条请求,确认 Key 有效再往下配:https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite

3. 可复制的 config.toml 骨架

下面这份骨架按 OpenClaw 常见结构组织,分三段:模型通道、交易参数、风控阈值。字段名按你本地 OpenClaw 版本微调,结构可以直接抄。

# config.toml —— OpenClaw + Polymarket Bot 骨架 [model] # 统一走 TaoToken,OpenAI 兼容协议 provider = "openai-compatible" base_url = "https://taotoken.net/api" api_key_env = "TAOTOKEN_API_KEY" # 从环境变量读,不写明文 timeout_seconds = 30 max_retries = 3 [model.nodes.signal] # 信号层:判断价差是否值得下单,用轻量模型降延迟 model = "gpt-4o-mini" temperature = 0.1 max_tokens = 256 [model.nodes.risk] # 风控层:仓位与止损判断,用强模型 model = "gpt-4o" temperature = 0.0 max_tokens = 512 [polymarket] clob_host = "https://clob.polymarket.com" chain_id = 137 # Polygon 主网 signature_type = 1 # MagicLink 账户填 1,EOA 钱包填 0 private_key_env = "POLY_PRIVATE_KEY" funder_env = "POLY_FUNDER_ADDRESS" # 代理钱包地址,EOA 可留空 [polymarket.order] default_price = 0.55 default_size = 20 # 单笔下注金额(USDC) side = "BUY" # 永远填 BUY,做空方向靠买 NO 实现 [risk] max_position_pct = 0.10 # 单笔不超过总资金 10% stop_loss_pct = 0.30 # 亏损超 30% 触发平仓 min_market_time_left = 180 # 剩余时间少于 3 分钟不开新仓 trade_log_db = "trades.sqlite" [signal] price_source = "binance_ws" ws_url = "wss://stream.binance.com:9443/ws/btcusdt@aggTrade" threshold_pct = 0.003 # 60 秒内波动 0.3% 触发 window_seconds = 60

几个关键点解释一下。api_key_env这种写法是让程序运行时去读环境变量,而不是把 Key 硬编码进文件,这样 config.toml 可以安全地进版本库。signature_type是最容易配错的地方:如果你用的是邮箱登录生成的代理钱包,填 1;如果是自己导入私钥的 EOA 钱包,填 0。填错的表现是订单签名验证失败,报错信息通常不会直接告诉你类型不对。

side永远填BUY,这是 Polymarket 的机制决定的。YES 和 NO 是两个独立代币,你想表达「看跌」,操作是买入 NO 代币,而不是卖出 YES。很多人第一次写 Bot 发现订单被拒,就是这里理解反了。

4. 环境变量清单与加载方式

config.toml 里所有_env结尾的字段,都要有对应的环境变量。建议用一个.env文件集中管理,再用 python-dotenv 加载。

# .env —— 不要提交到 Git TAOTOKEN_API_KEY=sk-你的TaoToken密钥 POLY_PRIVATE_KEY=0x你的Polygon钱包私钥 POLY_FUNDER_ADDRESS=0x你的代理钱包地址

加载代码长这样:

import os from dotenv import load_dotenv load_dotenv() TAOTOKEN_API_KEY = os.environ["TAOTOKEN_API_KEY"] POLY_PRIVATE_KEY = os.environ["POLY_PRIVATE_KEY"] POLY_FUNDER_ADDRESS = os.environ.get("POLY_FUNDER_ADDRESS", "")

环境变量清单对照表:

变量名用途是否必填
TAOTOKEN_API_KEY模型通道鉴权必填
POLY_PRIVATE_KEYPolygon 钱包签名必填
POLY_FUNDER_ADDRESS代理钱包地址MagicLink 账户必填
CLOB_HOST覆盖 config 里的 CLOB 地址可选

注意:私钥一旦泄露,钱包里的 USDC 会被瞬间转走。.env加进.gitignore,服务器上用最小权限账户运行 Bot,别用 root。

5. 用 py-clob-client 跑一笔最小验证下单

配置齐了,先别急着上策略。用一笔最小金额的订单验证「配置 → 签名 → 提交 → 成交」整条链路,确认没问题再放大。

先装依赖:

pip install py-clob-client python-dotenv web3

初始化客户端并下单:

import os from dotenv import load_dotenv from py_clob_client.client import ClobClient from py_clob_client.clob_types import OrderArgs load_dotenv() client = ClobClient( host="https://clob.polymarket.com", key=os.environ["POLY_PRIVATE_KEY"], chain_id=137, signature_type=1, funder=os.environ.get("POLY_FUNDER_ADDRESS"), ) # 换成你要交易的市场 token_id TOKEN_ID = "你的目标市场YES代币ID" order = client.create_and_post_order( OrderArgs( token_id=TOKEN_ID, price=0.55, size=5, # 最小验证用 5 USDC side="BUY", ) ) print("下单回执:", order)

跑通后你会看到类似这样的回执,包含orderID、status和success字段:

{ "orderID": "0x9f3c...", "status": "matched", "success": true }

status是matched说明订单已经撮合成交,live说明挂在订单簿上等对手方。第一次验证建议挑一个流动性好的市场,价格填得离中间价近一点,容易立刻成交,方便确认链路。

这里有个必须避开的坑:SDK 里有create_order和create_and_post_order两个函数。前者只在本地构造订单对象,不会提交到交易所,你调用完会发现「怎么一笔都没成交」。下单一定要用create_and_post_order。

6. 本篇常见错排查

报错一:签名验证失败 / invalid signature。九成是signature_type填错。MagicLink 代理钱包填 1,EOA 填 0,同时确认funder地址和签名钱包匹配。改完重启进程再试。

报错二:模型调用 401 或 403。检查TAOTOKEN_API_KEY是否加载成功,可以在代码里打印os.environ.get("TAOTOKEN_API_KEY")[:8]确认前缀。另外确认base_url是https://taotoken.net/api,不要多加路径或参数。

报错三:订单提交成功但余额没变。大概率是用了create_order而不是create_and_post_order,订单根本没提交。也可能是 CLOB 内部额度没同步,这时候不要急着调update_balance_allowance(),它会用链上数据覆盖内部额度,刚成交完链上还没确认时调用,会导致后续卖单全部失败。

报错四:Bot 跑着跑着模型请求超时。信号层用轻量模型、把timeout_seconds设成 30、max_retries设成 3,基本能扛住偶发抖动。如果持续超时,到控制台看下 Key 的调用量是否触顶:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite

报错五:成交记录对不上。一定要用 SQLite 记录每一笔订单的orderID、时间、价格、数量。出问题时先查是策略判断错了,还是执行层没提交成功,两者排查方向完全不同。

7. 把通道固定下来,再谈策略放大

链路跑通之后,下一步才是策略。做市、YES+NO 套利、延迟套利这些玩法,都建立在「模型调用稳定 + 下单执行可靠」这两个前提上。我的建议是先把 TaoToken 这条模型通道固定成 config.toml 里的标准配置,所有 Skill 共用一份,Key 轮换只改环境变量,不动交易代码。

如果你打算长期跑编码类或 Agent 类任务,比如让 OpenClaw 持续生成和调优策略脚本,可以看下 Coding Plan 的额度方案,比按次调用更划算:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite

接入细节和字段说明都在文档里,配 config.toml 时对着查更快:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite

最后一句实在话:先用 5 USDC 的最小单验证整条链路,确认回执里success是 true,再考虑加资金。策略可以慢慢调,通道必须先稳。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询