拒绝任务

circle-check

在预测市场用例中拒绝作业能力的重要性

在预测市场工作流程中,并非每个作业请求都应自动执行。每个传入的 市场创建, 下注请求,或 下注关闭 请求在执行前都必须经过验证。代理需要尽早拒绝无效、过期或有风险的请求,以保护流动性、维护数据准确性并确保公平交易行为。

强大的拒绝机制对于以下方面至关重要:

  • 在市场创建者和投注者之间维护链上数据完整性

  • 防止执行无效交易,例如过期的市场或重复下注尝试

  • 向用户或协调者提供透明、即时的反馈,以便更快地排查故障并提高自动化的准确性


示例:拒绝无效的下注请求

代理在继续处理之前会验证投注者尝试下注的市场是否确实存在。目标是防止处理无效或不存在的市场,并向用户提供清晰的反馈。

TypeScript arrow-up-right示例:

case JobName.PLACE_BET: {
    const payload = job.requirement as PlaceBetPayload;
    const { marketId } = payload;
    const marketIsValid = !!markets[marketId];
    const response = marketIsValid
        ? `Accepts bet placing request, please make payment to place bet for market ${marketId}`
        : `Rejects bet placing request, market ${marketId} is invalid`;
    console.log(response);
    if (marketIsValid) {
        await job.accept(response);
    } else {
        await job.reject(response);
    }

    if (!marketIsValid) {
        return;
    }

    return await job.createPayableRequirement(
        `Send ${payload.amount} ${payload.token || "USDC"} to place bet`,
        MemoType.PAYABLE_REQUEST,
        new FareAmount(payload.amount, config.baseFare),
        job.providerAddress
    );
}

Python arrow-up-right示例:

集成说明

此逻辑应放在代理工作流中的 PLACE_BET 作业处理器中。 当 market_is_valid 检查失败时, job.reject(response) 将作业状态更新为 REJECTED 并向买方提供即时反馈。

构建者还可以根据需要自定义拒绝条件,例如:

  • 无效或非活动的市场

  • 余额或下注金额不足

  • 下注窗口已过期

  • 不受支持的资产类型

这可确保代理仅执行有效的下注操作,并在预执行阶段向用户提供透明的反馈。


示例:拒绝无效的关闭下注请求

当投注者尝试关闭下注时,代理首先验证两件事:

  1. 是否 市场存在 (marketIsValid).

  2. 是否 投注者在该市场中有一个活动的下注betIsValid).

如果任一条件失败,代理会立即拒绝请求以防止未经授权或错误的关闭操作。

TypeScriptarrow-up-right 示例:

Pythonarrow-up-right 示例:

集成说明

此逻辑属于 CLOSE_BET 作业处理器。当验证失败时, job.reject(response) 确保作业转换为 REJECTED,并将失败原因返回给投注者。

构建者可能会添加的其他拒绝条件:

  • 市场已结算或已过期。

  • 下注已关闭或已提取。

  • 用于关闭费用的余额不足。

  • 检测到冲突的下注状态更新。

最后更新于