拒绝任务并退款

circle-check

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


示例:创建市场

当用户尝试创建一个新的预测市场时,通常会提供诸如 问题, 结果, 流动性,以及 结束时间. 如果代理在完成市场创建之前遇到内部故障(例如 RPC 超时、模式不匹配或参数无效),它必须 拒绝该工作退还流动性保证金 以防止资金被无限期扣留。

TypeScript arrow-up-right示例:

case JobName.CREATE_MARKET: {
            const createMarketPayload = job.requirement as CreateMarketPayload;
            if (REJECT_AND_REFUND) { // 以应对需要拒绝并退款的情况(例如:内部服务器错误)
                const reason = `Internal server error handling market creation for ${createMarketPayload.question}`
                console.log(`Rejecting and refunding job ${job.id} with reason: ${reason}`);
                await job.rejectPayable(
                    `${reason}. Refunded ${createMarketPayload.liquidity} $USDC liquidity.`,
                    new FareAmount(
                        createMarketPayload.liquidity,
                        config.baseFare
                    )
                )
                console.log(`Job ${job.id} rejected and refunded.`);
                return;
            }

Python arrow-up-right示例:

集成说明

该逻辑应在 CREATE_MARKET 作业处理程序中实现,以捕获并处理市场创建期间的任何故障。

reject_payable() 被调用:

  • 作业状态转换为 REJECTED.

  • 买方在托管的流动性(例如 USDC)将自动退还。

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

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

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

  • 检测到重复市场.


示例:下注

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

TypeScript arrow-up-right示例:

Pythonarrow-up-right 示例:


示例:关闭下注

当赌客请求关闭下注时,代理需要验证两件主要事项:

  1. “雇佣”CTA 放置 市场是否有效且可访问.

  2. “雇佣”CTA 放置 投注者在该市场中有一个活动的下注 在该市场中可以被关闭的(注单)。

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

TypeScriptarrow-up-right 示例:

Pythonarrow-up-right 示例:

最后更新于