EOA 是给人类用的,Proxy 才是给机器人的。
如果你坚持用 MetaMask(EOA)跑脚本,你会遇到三个死结:
- Gas 爆炸:每笔赎回都要 0.01 Matic,高频策略的利润会被磨损殆尽。
- 并发锁死:Nonce 机制强迫你串行交易,无法并发。
- 操作繁琐:每次合并仓位都要手动签名。
要突破这些限制,我们需要引入 Relayer(中继器)。
1. 所谓“无 Gas”,其实是有人买单
Meta-Transaction Flow
Polymarket 的 "Gasless Trading" 并非魔法。它的本质是 Meta-Transaction(元交易)。
流程很简单:
- 你(User):签一张“条子”(Intent),说我要买什么。
- Relayer:拿着条子,帮你在链上发起交易,并支付 Gas。
- Proxy:验证条子是你签的,然后执行操作。
这种架构把“签名权”和“执行权”分离了。
这就是为什么我们需要 Gnosis Safe:它让账户变成了可编程的合约。
2. 核心实战:自动赎回(Auto Claim)
预测市场最麻烦的是结算。比赛结束了,你的钱还在合约里。手动点一千次?不可能。
结算机制简介(UMA Optimistic Oracle):
- 市场结果由 UMA 预言机确定,而非 Polymarket 官方
- 任何人可以提交结算提案(需 $750 USDC.e 保证金)
- 提案后有 2 小时争议期,无争议则自动生效
- 胜利方每份获得 $1.00,失败方归零
我们需要一个 7x24 小时的收割机。
第一步:告诉合约干什么(构建 Calldata)
def _encode_redeem(self, collateral, condition_id, index_sets):
# 函数签名:redeemPositions
# 这就像是在写汇编,告诉 EVM 要调用哪个函数、传什么参数
signature = "redeemPositions(address,bytes32,bytes32,uint256[])"
selector = keccak(text=signature)[:4]
payload = encode(
["address", "bytes32", "bytes32", "uint256[]"],
[str(collateral), bytes(0), bytes(condition_id), index_sets]
)
return "0x" + (selector + payload).hex()
第二步:包装成 Safe 交易
有了 Calldata,我们需要把它交给 Relayer:
# 关键:这是一个 Meta-Transaction,而不是直接发上链
tx = SafeTransaction(
to=Config.CTF_ADDRESS,
operation=OperationType.Call,
data=calldata,
value="0"
)
# Relayer 帮我们上链
relayer.execute([tx], metadata="auto-claim")
3. 守护进程:收益过滤
Auto-Claim Worker Logic
有了原子能力,还需要一个大脑。
并不是所有仓位都值得马上赎回。如果赎回金额小于 Gas 成本(虽然是 Relayer 付,但也要讲武德),或者 API 暂时不可用,都需要策略。
我的 _auto_claim_worker 遵循以下逻辑:
- 巡检:每分钟扫描
/positions?redeemable=true。 - 估算:链下计算
Expected Payout。 - 防抖:失败后冷却 2 分钟,避免死循环攻击 Relayer。
总结
通过 Gnosis Safe 和 Relayer,我们将原本需要人工点击、消耗 Gas 的链上操作,转化为了一段段静默运行的代码。
- Proxy Wallet 解决了并发和可编程性。
- Relayer 解决了 Gas 成本。
现在的机器人,已经有了大脑(策略)和钱包(Proxy)。但它的手速还不够快。
下一篇,我们将通过批量下单(Batch Orders),把它的反应速度提升 10 倍。
相关资料:sharebravery-不辞远的分享: sharebravery.com