Vincent - Polymarket
Vincent - 为智能体打造的Polymarket功能
使用此技能为您的智能体创建Polymarket钱包并在预测市场进行交易。您可以浏览市场、下注、跟踪持仓以及管理订单——所有这些都无需向智能体暴露私钥。钱包采用Polygon网络上的Gnosis Safe,并通过Polymarket的中继器实现无燃料费交易。
智能体永远不会看到私钥。所有操作均在服务器端执行。智能体会收到一个限定范围的API密钥,该密钥只能执行钱包所有者策略所允许的操作。私钥永远不会离开Vincent服务器。

所有命令均使用@vincentai/cli软件包。API密钥会被自动存储和解析——您无需处理原始密钥或文件路径。
安全模型
此技能专为通过服务器端控制实现人工监督的自主智能体交易而设计。理解此模型非常重要:
无需配置环境变量因为此技能采用智能体优先的接入方式:智能体在运行时通过调用Vincent API来创建自己的Polymarket钱包,该API会返回一个限定范围的API密钥。无需预先配置任何凭证。CLI会在钱包创建过程中自动存储返回的API密钥。密钥持久化存储的配置路径(${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/credentials/agentwallet/或./agentwallet/)在此技能的元数据中声明。
代理的API密钥并非私钥。它是一个有作用域的Bearer令牌,只能执行钱包所有者设定的策略范围内的操作。Vincent服务器在服务端强制执行所有策略——无论代理发送什么请求,都无法绕过这些策略。如果交易违反策略,服务器会拒绝执行。如果交易需要批准,服务器会暂停交易,并通过Telegram通知钱包所有者进行带外人工审批。
模型调用功能是特意启用的。此技能的目的是赋予AI代理自主进行Polymarket交易的能力。代理应在人类操作员设定的边界内,自主调用交易操作(浏览市场、下注、管理仓位)。人类通过策略(支出限额、审批阈值)来控制代理的行为——而非通过限制每次调用来实现。存储的密钥具有作用域且受策略约束——即使其他进程读取了该密钥,也只能执行钱包所有者策略允许的操作,并且所有者可以立即撤销该密钥。
所有API调用均专门发送至heyvincent.ai通过HTTPS/TLS。不会联系其他端点、服务或外部主机。代理除了Polymarket钱包操作所需的数据外,不会读取、收集或传输任何数据。
密钥生命周期:
- 创建:代理运行
secret create——CLI会自动存储API密钥,并返回一个keyId和claimUrl。 - 认领:人类操作员使用认领URL在
https://heyvincent.ai上取得所有权并配置策略。 - 撤销:钱包所有者可以随时通过Vincent前端撤销代理的API密钥。服务器会立即拒绝已撤销的密钥。
- 重新链接:如果代理丢失了其API密钥,钱包所有者会生成一个一次性重新链接令牌,代理通过
secret relink将其交换为新的密钥。 - 轮换:钱包所有者可以随时撤销当前密钥并签发重新链接令牌以轮换凭证。
快速开始
1. 检查现有密钥
在创建新钱包前,请检查是否已存在:
npx @vincentai/cli@latest secret list --type POLYMARKET_WALLET
如果返回了密钥,请使用其id作为--key-id用于所有后续命令。如果不存在密钥,则创建新钱包。
2. 创建 Polymarket 钱包
npx @vincentai/cli@latest secret create --type POLYMARKET_WALLET --memo "My prediction market wallet"
返回keyId(用于所有未来命令)、claimUrl(与用户共享)以及walletAddress(EOA 地址;Safe 将在首次使用时延迟部署)。
创建后,请告知用户:
"这是您的钱包领取链接:
<claimUrl>". 使用此功能来申明所有权、设置支出策略,并在以下网址监控您的代理钱包活动:https://heyvincent.ai。"
重要提示:创建后,钱包内没有资金。用户必须在投注前将USDC.e(桥接的 USDC)发送到 Polygon 网络上的 Safe 地址。
3. 获取余额
npx @vincentai/cli@latest polymarket balance --key-id <KEY_ID>
返回:
walletAddress— Safe 地址(如果需要,在首次调用时部署)collateral.balance— 可用于交易的 USDC.e 余额collateral.allowance— 授权给 Polymarket 合约的金额
注意:首次余额查询会触发 Safe 部署和抵押品授权(通过中继器实现无 gas 费)。此过程可能需要 30-60 秒。
4. 为钱包注资
在投注前,用户必须将 USDC.e 发送到 Safe 地址:
- 从余额命令中获取钱包地址
- 发送USDC.e(桥接版USDC,合约地址
0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174)到该地址,需在Polygon网络上进行 - 每次投注最低需1美元(Polymarket平台最低要求)
切勿发送原生USDC(0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359)。Polymarket仅接受桥接版USDC.e。
5. 从Vincent EVM钱包转账(替代资金存入方法)
若您拥有资金的Vincent EVM钱包,可直接使用钱包的跨钱包转账功能(参见钱包技能说明)将资金转入Polymarket钱包。Vincent会验证您同时拥有两个钱包的密钥,并自动处理代币兑换和跨链桥接,确保资金以Polygon网络上的USDC.e形式到账。
# Preview the transfer first (use your EVM wallet key-id)
npx @vincentai/cli@latest wallet transfer-between preview --key-id <EVM_KEY_ID> \
--to-secret-id <POLYMARKET_SECRET_ID> --from-chain 8453 --to-chain 137 \
--token-in 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 --amount 10 \
--token-out 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 --slippage 100
# Execute the transfer
npx @vincentai/cli@latest wallet transfer-between execute --key-id <EVM_KEY_ID> \
--to-secret-id <POLYMARKET_SECRET_ID> --from-chain 8453 --to-chain 137 \
--token-in 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 --amount 10 \
--token-out 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 --slippage 100
关键要点:
- 请使用您的EVM钱包密钥标识(而非Polymarket钱包的密钥标识)执行相关命令
- 其中
--to-secret-id参数必须填写您Polymarket钱包的密钥ID - 对于Polymarket目的地,仅允许
--to-chain 137(Polygon)和--token-out 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174(USDC.e) - 服务器会验证您同时拥有两个密钥——向其他用户钱包的转账将被拒绝
- 对于跨链转账,使用以下命令检查状态:
wallet transfer-between status --key-id <EVM_KEY_ID> --relay-id <RELAY_REQUEST_ID>
6. 浏览和搜索市场
# Search markets by keyword (recommended)
npx @vincentai/cli@latest polymarket markets --key-id <KEY_ID> --query bitcoin --limit 20
# Search by Polymarket URL or slug
npx @vincentai/cli@latest polymarket markets --key-id <KEY_ID> --slug btc-updown-5m-1771380900
# Or use a full Polymarket URL as the slug parameter
npx @vincentai/cli@latest polymarket markets --key-id <KEY_ID> --slug https://polymarket.com/event/btc-updown-5m-1771380900
# Get all active markets
npx @vincentai/cli@latest polymarket markets --key-id <KEY_ID> --active --limit 50
# Get specific market by condition ID
npx @vincentai/cli@latest polymarket market --key-id <KEY_ID> --condition-id <CONDITION_ID>
市场响应包括:
question:市场问题outcomes:类似["是", "否"]或["A队", "B队"]outcomePrices:每个结果的当前价格tokenIds:每个结果对应的代币ID数组— 用于下注acceptingOrders:市场是否开放交易closed:市场是否已结算
重要提示:始终使用tokenIds数组(来自市场响应)。每个结果在相同索引位置都有一个对应的代币ID。对于“是/否”市场:
tokenIds[0]= “是”代币IDtokenIds[1]= “否”代币ID
7. 获取订单簿
npx @vincentai/cli@latest polymarket orderbook --key-id <KEY_ID> --token-id <TOKEN_ID>
返回包含价格和数量的买单与卖单。在下单前使用此功能来确定当前市场价格。
8. 下注
npx @vincentai/cli@latest polymarket bet --key-id <KEY_ID> --token-id <TOKEN_ID> --side BUY --amount 5 --price 0.55
参数:
--token-id:结果代币ID(来自市场数据或订单簿)--side:买入或卖出--数量:对于买入订单,指花费的美元金额。对于卖出订单,指要卖出的股票数量。--价格:可选的限价(0.01至0.99)。市价单请省略此参数。除非用户指定限价,否则请始终使用市价单。
买入订单:
数量指您想要花费的美元金额(例如,5= 5美元)- 您将收到
数量 / 价格股股票(例如,5美元以0.50美元价格 = 10股) - 最低订单金额为1美元
卖出订单:
数量指要卖出的股票数量- 您将收到
数量 * 价格美元 - 必须首先拥有这些股票(来自之前的买入)
重要时间说明:买入成交后,等待几秒再卖出。代币需要时间在链上完成结算。
如果交易违反策略规则,服务器会返回错误信息说明触发了哪条策略。如果交易需要人工审批(基于审批阈值策略),服务器会返回状态:"pending_approval"钱包所有者将收到Telegram通知以批准或拒绝该交易。
9. 查看持仓、未成交订单与交易记录
# Get current holdings with P&L (recommended for viewing positions)
npx @vincentai/cli@latest polymarket holdings --key-id <KEY_ID>
# Get open orders (unfilled limit orders in the order book)
npx @vincentai/cli@latest polymarket open-orders --key-id <KEY_ID>
# Filter open orders by market
npx @vincentai/cli@latest polymarket open-orders --key-id <KEY_ID> --market <CONDITION_ID>
# Get trade history
npx @vincentai/cli@latest polymarket trades --key-id <KEY_ID>
持仓查询返回所有持仓头寸,包含持有代币数量、平均入场价格、当前价格和未实现盈亏。此接口最适合用于:
- 下达卖出订单前核对当前持仓
- 设置止损或止盈规则
- 计算投资组合总价值与表现
- 向用户展示其活跃投注
未成交订单返回订单簿中等待成交的限价订单。
交易记录返回历史交易活动数据。
10. 取消订单
# Cancel specific order
npx @vincentai/cli@latest polymarket cancel-order --key-id <KEY_ID> --order-id <ORDER_ID>
# Cancel all open orders
npx @vincentai/cli@latest polymarket cancel-all --key-id <KEY_ID>
11. 赎回已结算头寸
市场结算后,获胜头寸可被赎回,将条件代币转换回USDC.e。使用持仓查询指令检查哪些头寸具有可赎回状态:true,然后调用赎回功能。
# Redeem all redeemable positions
npx @vincentai/cli@latest polymarket redeem --key-id <KEY_ID>
# Redeem specific markets by condition ID
npx @vincentai/cli@latest polymarket redeem --key-id <KEY_ID> --condition-ids 0xabc123,0xdef456
若无头寸可赎回,赎回结果将返回空数组且不会提交任何交易。
运作原理:赎回操作免燃气费(通过Polymarket中继器经由Safe执行)。对于标准市场,系统将调用CTF合约中的redeemPositions函数。对于负风险市场,则调用NegRiskAdapter中的redeemPositions函数。两种类型均由系统自动处理。
赎回时机:建议定期检查持仓。市场结算后,头寸可能需要一段时间才会变为可赎回状态。请关注持仓响应中的可赎回状态:true标识。
12. 提取USDC
将USDC.e从您的Polymarket Safe钱包转账至Polygon链上任意以太坊地址。此操作免燃气费——通过Polymarket中继器执行。
npx @vincentai/cli@latest polymarket withdraw --key-id <KEY_ID> --to <RECIPIENT_ADDRESS> --amount <AMOUNT>
参数:
--to:接收方以太坊地址(0x...,42个字符)--amount:USDC金额(人类可读格式,例如"100"表示100 USDC)
响应:
status:"executed"、"pending_approval"或"denied"transactionHash:Polygon交易哈希(仅在已执行时返回)walletAddress:发送资金的Safe地址
如果金额超过钱包的USDC余额,服务器将返回INSUFFICIENT_BALANCE错误。策略检查(支出限额、审批阈值)适用于提现,其方式与适用于投注的方式相同。
输出格式
CLI命令将JSON返回至标准输出。市场搜索结果:
{
"markets": [
{
"question": "Will Bitcoin exceed $100k?",
"outcomes": ["Yes", "No"],
"outcomePrices": ["0.65", "0.35"],
"tokenIds": ["123456...", "789012..."],
"acceptingOrders": true
}
]
}
投注下单:
{
"orderId": "0x...",
"status": "MATCHED",
"side": "BUY",
"price": "0.55",
"size": "9.09"
}
对于需要人工批准的交易:
{
"status": "pending_approval",
"message": "Transaction requires owner approval via Telegram"
}
错误处理
| 错误 | 原因 | 解决方法 |
|---|---|---|
401 未授权 | API密钥无效或缺失 | 检查密钥ID是否正确;如有需要,请重新关联 |
403 策略违规 | 交易被服务器端策略阻止 | 用户必须在heyvincent.ai调整策略 |
余额不足 | 没有足够的USDC.e进行交易 | 在Polygon网络上为钱包充值USDC.e |
429 请求频率过高 | 请求过多 | 等待并采用退避策略重试 |
待批准 | 交易超出批准阈值 | 用户将收到Telegram通知以批准/拒绝交易 |
订单簿不存在 | 市场已关闭或令牌ID错误 | 验证acceptingOrders: true并使用tokenIds[],而非conditionId |
密钥未找到 | API密钥已被撤销或从未创建 | 使用钱包所有者的新令牌重新链接 |
策略(服务器端强制执行)
钱包所有者通过https://heyvincent.ai上的声明URL设置策略来控制代理可执行的操作。所有策略均由Vincent API在服务器端强制执行——代理无法绕过或修改它们。如果交易违反策略,API会拒绝该交易。如果交易触发审批阈值,API会暂停交易,并向钱包所有者发送Telegram通知,以进行线下人工审批。
| 策略 | 作用 |
|---|---|
| 单笔交易支出限额 | 每笔交易的最大美元价值 |
| 每日支出限额 | 每滚动24小时内的最大美元价值 |
| 支出限额(每周) | 每滚动7天内的最大美元价值 |
| 需要审批 | 每笔交易都需要通过Telegram进行人工审批 |
| 审批阈值 | 超过一定美元金额的交易需要通过Telegram进行人工审批 |
在钱包被认领之前,代理可以在没有策略限制的情况下操作。这是设计使然:代理优先的入门流程允许代理立即开始交易。一旦人类操作者通过认领链接认领了钱包,他们可以添加任何策略组合来约束代理的行为。钱包所有者也可以随时完全撤销代理的API密钥。
重新链接(恢复API访问权限)
如果代理丢失了其API密钥,钱包所有者可以从前端生成一个重新链接令牌
。然后代理将此令牌交换为一个新的限定范围API密钥。
- 工作原理:
用户从 - https://heyvincent.ai
- 代理执行重新链接命令:
npx @vincentai/cli@latest secret relink --token <TOKEN_FROM_USER>
CLI将令牌交换为新的API密钥,自动存储并返回新的密钥ID。请将此密钥ID用于所有后续命令。
重要提示:重新链接令牌为一次性使用,并在10分钟后过期,因此用户通过聊天发送重新链接令牌是安全的,因为您会立即使用它。
工作流程示例
-
创建钱包:
npx @vincentai/cli@latest secret create --type POLYMARKET_WALLET --memo "Betting wallet" -
获取Safe地址(触发部署):
npx @vincentai/cli@latest polymarket balance --key-id <KEY_ID> # Returns walletAddress — give this to user to fund -
用户将USDC.e发送至Polygon上的Safe地址
-
搜索市场:
# Search by keyword — returns only active, tradeable markets # Tip: use short keyword phrases; stop-words like "or" can cause empty results npx @vincentai/cli@latest polymarket markets --key-id <KEY_ID> --query "bitcoin up down" --active -
检查您想要的结果的订单簿:
npx @vincentai/cli@latest polymarket orderbook --key-id <KEY_ID> --token-id 123456... -
使用正确的代币ID下买单:
# tokenId must be from the tokenIds array, NOT the conditionId npx @vincentai/cli@latest polymarket bet --key-id <KEY_ID> --token-id 123456... --side BUY --amount 5 --price 0.55 -
等待结算(几秒钟)
-
出售持仓:
npx @vincentai/cli@latest polymarket bet --key-id <KEY_ID> --token-id 123456... --side SELL --amount 9.09 --price 0.54 -
市场解决后赎回(如果持有至解决):
# Check holdings for redeemable positions npx @vincentai/cli@latest polymarket holdings --key-id <KEY_ID> # If redeemable: true, redeem to get USDC.e back npx @vincentai/cli@latest polymarket redeem --key-id <KEY_ID> -
将USDC提现到另一个钱包:
npx @vincentai/cli@latest polymarket withdraw --key-id <KEY_ID> --to 0xRecipientAddress --amount 50
重要说明
- 在任何投注或交易后,分享用户的Polymarket个人资料链接,以便他们验证和查看自己的持仓:
https://polymarket.com/profile/<polymarketWalletAddress>(使用钱包的Safe地址)。 - 无需燃料费。所有Polymarket交易均通过Polymarket的中继器实现无燃料费。
- 切勿尝试访问原始密钥值。私钥始终保留在服务器端——这是核心原则。
- 创建钱包后,务必与用户分享认领URL。
- 如果交易被拒绝,可能是被服务器端策略阻止。请告知用户检查其策略设置,网址为
https://heyvincent.ai。 - 如果交易需要批准,它将返回
状态:"pending_approval"。钱包所有者将收到Telegram通知以批准或拒绝。
请参阅错误处理请参阅上一部分以获取常见错误及其解决方法的完整列表。


微信扫一扫,打赏作者吧~