最近在做 AllSwap ,先说明利益关系:我是项目参与者。下面想讨论的是工程问题,不是发优惠码,也不把产品包装成第三方推荐。

跨链聚合器最直观的排序方式,是选择“预计到账最多”的路线。但实际做下来发现,只按输出数量排序容易选到不稳定路线。

举个例子:

- 路线 A 预计到账 100.2 USDT ,历史完成率 91%,P95 时间 18 分钟;

- 路线 B 预计到账 99.9 USDT ,历史完成率 99.4%,P95 时间 4 分钟。

如果只看报价,A 是最优;如果考虑失败、退款和等待成本,很多用户可能会选择 B 。

我们现在考虑把路线评分拆成下面几项:```
score = output_value
- gas_cost
- time_penalty
- failure_risk_penalty
- liquidity_penalty
- stale_quote_penalty
```这里有几个比较难定的点。

1. 时间惩罚不是线性的

从 1 分钟增加到 3 分钟,大部分用户可能可以接受;从 10 分钟增加到 30 分钟,用户的不确定感会明显增加。因此时间惩罚可能更适合分段函数,而不是简单乘以秒数。

2. 历史成功率可能存在幸存者偏差

如果只统计已经被路由器选中的订单,低流动性路线样本很少,成功率看起来可能反而很高。需要同时记录候选报价、未选路线和失效原因。

3. 小额和大额不应该共用权重

小额用户更在意固定费用;大额用户更在意滑点、深度和失败风险。评分权重应该根据金额区间动态调整。

4. 报价新鲜度需要单独处理

报价数值很漂亮,但生成时间已经超过几个区块,这种路线不应继续排在前面。除了 TTL ,还可以监控连续区块中的输出变化率。

产品流程可以在 https://allswap.io/ 看到。当前是用户选择资产和网络后获取报价,不连接钱包,通过订单地址完成源链转账,再跟踪目标链结算。

想请教做过交易路由、支付通道或聚合器的朋友:

- 你们会把失败率直接折算成期望价值,还是作为硬阈值先过滤?

- 路线耗时应该使用最近窗口的 P95 ,还是按链上拥堵状态实时修正?

- 面向用户展示时,是给一个“推荐路线”,还是同时展示“到账更多”和“更稳定”两个选项?

欢迎讨论评分模型和可观测性设计。涉及真实资产时,任何新路线都应该先小额测试;本文不构成投资建议。

主楼