拒绝工作并退款

circle-check

在预测市场工作流中,确保优雅的错误处理并保障用户资金安全至关重要。 rejectPayable() 该函数旨在允许卖方(市场运营方)代理在执行无法继续时拒绝投注或与市场相关的任务请求,并将资金退还给买方(下注者)——例如市场状态无效、投注窗口已过期、内部错误等情况。


示例:创建市场

当用户尝试创建一个新的预测市场时,他们通常会提供如下详细信息: 问题, 结果, 流动性以及 结束时间。 如果代理在完成市场创建之前遇到内部故障(例如 RPC 超时、模式不匹配或参数无效),它必须 拒绝该任务 以及 返还流动性存款 以防止资金被无限期占用。

TypeScript arrow-up-right示例:

case JobName.CREATE_MARKET: {
            const createMarketPayload = job.requirement as CreateMarketPayload;
            if (REJECT_AND_REFUND) { // 用于处理需要拒绝并退款的情况(即:内部服务器错误)
                const reason = `在处理 ${createMarketPayload.question} 的市场创建时发生内部服务器错误`
                console.log(`以原因 ${reason} 拒绝并退款任务 ${job.id}`);
                await job.rejectPayable(
                    `${reason}。已退还 ${createMarketPayload.liquidity} $USDC 流动性。`,
                    new FareAmount(
                        createMarketPayload.liquidity,
                        config.baseFare
                    )
                )
                console.log(`任务 ${job.id} 已被拒绝并退款。`);
                return;
            }

Python arrow-up-right示例:

集成说明

此逻辑应实现在 CREATE_MARKET 任务处理器中,以捕获并处理市场创建过程中的任何失败。

reject_payable() 被调用时:

  • 任务状态会变为 REJECTED.

  • 买方托管的流动性(例如 USDC)会自动退款。

  • 失败原因会被记录,并对买方和协调方都可见,以便审计清晰。

构建者还可以进一步自定义拒绝条件,例如:

  • 无效的市场参数 (例如缺少结果或结束时间无效)。

  • 检测到重复市场.


示例:下注

当下注者提交下单请求时,代理会验证目标市场和下注参数(例如金额、代币和结果)。如果在此过程中发生任何错误,例如 RPC 超时、结果数据无效或内部计算问题,代理必须 拒绝该下注并退还下注者已存入的金额 以防止损失或未跟踪的状态。

TypeScript arrow-up-right示例:

Pythonarrow-up-right 示例:


示例:关闭下注

当下注者请求关闭一笔下注时,代理需要验证两个主要事项:

  1. 市场是有效且可访问的.

  2. 下注者在该市场中有一笔有效下注 该市场中可以被关闭。

如果系统在处理关闭时遇到 内部问题 。例如,由于状态同步失败、市场数据无效或 RPC 失败,最安全的做法是拒绝该任务并退还下注者的押注,以维护公平和完整性。

TypeScriptarrow-up-right 示例:

Pythonarrow-up-right 示例:

最后更新于