跳转到内容

2026-05-27

FEAT-009 v2 含税代币适配 — 全天主线(PRD v2.1 PM 拍板版上线测试服)

Section titled “FEAT-009 v2 含税代币适配 — 全天主线(PRD v2.1 PM 拍板版上线测试服)”

背景:PRD v2.1 把”绝对值参数 + 3 档预设”重构为「统计分布做市 + 含税代币适配 + 滑点容忍重构 + 成本透明度」。会话开始 PM 万有库已拍板 v2.1,BE zz 在 review be-scope,FE 单方推进 v2 核心闭环 5 个 Story(S1-S5)。

FE/BE 边界对齐(早段):

  • 复核 docs/FEAT-009-v2-be-scope.md —— 补 3 条遗漏 BE 工作(任务运行期 inventory snapshot / per-swap 实际滑点税字段 / runtime_stats 跨会话累计),同时把 B1/B2 升档到 A 档 P0(原文 FE 兜底”从 revert reason 解析”实际不可行)
  • 5 个根因归类给 BE:① 数据源在 BE 数据库 ② 跨钱包/时段/会话聚合 ③ 每客户端重复 RPC 浪费 ④ 配置集中管理 ⑤ schema 是 BE 事实

FE plan + feature 分支

  • docs/plans/FEAT-009-strategy-launch-v2-frontend-plan.md 轻量计划(10 story 依赖图 + Phase 节奏 + PM Q1/Q2/Q4 自决假设 + 风险)
  • feature/fe-002-feat-009-strategy-launch-v2 分支

5 个 Story 串行实施(feature 分支 19 个 atomic feature commits):

🔬 S3 引擎采样原语(commit 802aedf):

  • src/engine/sampling.ts — Box-Muller 对数正态 / 指数泊松 -ln(u)/λ / 伯努利 / mulberry32 seedable RNG
  • src/engine/sessionWeights.ts — 曼谷 UTC+7 6 段权重表(PRD §6)
  • 37 单测全过;tick.ts 集成留给 S10 + BE A6 schema 升级后做

🎨 S1 三策略 UI 重构(commits 779ab1a / 3c8f624 / 3c41035 / 2d70de5):

  • src/engine/strategyPresetsV2.ts — PRD §2.1/2.2/2.3 三策略风格档完整字段(σ / bias / safetyMul / slippage / hourlyBaseline 等 7-8 字段每策略)
  • PriceSupportForm 字段集换 v2:删 单笔金额下限/上限 + 间隔(秒);加 滑点容忍 input(PRD AC6 钦定 ≥10%)
  • VolumeWashForm:必填 1 + 进阶 2(滑点容忍 买/卖分离,PRD AC8)
  • PumpDumpForm:必填 3 + 进阶 4(滑点容忍方向相关 上推≥10% / 下砸≥15%,PRD AC9)
  • submit 内联派生 v1 兼容字段喂 tick.ts(S10 + BE A6 schema 升级后改读 derived 子对象)

🧩 S2 派生 utility + 启动前预览(commits 4a6319a / b6f3352 / 1df4d4a / d988bc5):

  • src/engine/strategyDerive.ts —— derivePriceSupport / deriveVolumeWash / derivePumpDump(PRD §3 派生公式集中化,单一源头)
  • 20 单测对照 PRD example 1(预算 5000 / 240 笔 / 平均 20.83 USDT)/ example 2(30000 量 / 720 笔 / 平均 41.67)/ example 3(推目标价 2112 预算 30min / 120 笔 / 平均 17.6)
  • 3 Form 删 inline 派生代码改用 utility
  • LaunchPreviewModal.tsx —— 6 行 derived(笔数/单笔范围/平均/平均间隔/买卖比例/预计时长)+ 守价场景含税警示 + 二次确认(PRD §AC12)

🛡️ S4 代币税探测(commits 2a33873 / 1505025):

  • src/services/tokenEconomics.ts —— BE A1 endpoint stub(throw BackendNotAvailableError)+ 24h 内存 cache + validateSlippageVsTax 工具
  • src/lib/useTokenEconomics.ts —— hook 5 态管理(idle/loading/available/manual-required/error)+ setManual + retry
  • TaxBadge.tsx —— chip 显示 买/卖/合计税 + source 标签
  • ManualTaxModal.tsx —— PM 手动输入买/卖税 + 「确认 0 税」快捷
  • 3 Form 顶部 chip 接入 + 滑点容忍 vs 买税+卖税+5% 校验(< 阻断启动 + 给建议值,PRD §AC15)
  • BE A1 未上线 → 默认走 manual-required;上线后改 service fetchFromBackend 即可
  • memory 钦定:FE 不写 viem simulateContract 兜底(每客户端重复浪费 RPC + dynamic-tax token 不可靠),归 BE 责任

S5 滑点重构 + 重试 + 熔断(commit cb7b05c):

  • types/index.ts —— PriceSupportConfig + PumpDumpConfig 加 slippageTolerance?: number(optional,v1 task 兼容)
  • engine pickSlippage 去 v1 时代 10% 硬上限(v2 含税场景需 10-25%,砸盘到 25%),上限提到 50%(防误输入)
  • isSlippageRevert —— 检测 INSUFFICIENT_OUTPUT_AMOUNT / INSUFFICIENT_AMOUNT
  • emitSignedSwap 加重试:撞墙 → 临时上调 +2% 重试 1 次(PRD AC16);slippageBoost map 注入 pickSlippage,避免改函数签名
  • recordSlippageFailure —— per-task 时间戳 ring buffer,10min 内 5 次 → taskStore.pause + toast 告警(PRD §11)
  • 新增 SkipReason 'slippage-revert' 桶 + 文案;reconcile 清理 slippageBoost + slippageFailWindow
  • feature/fe-002-feat-009-strategy-launch-v2 --no-ff merge 到 test,21 commits 上线
  • npm run build:bsc:test 重建 363 个 build artifacts(commit 648bdf6
  • 修复 3b4de23 误把 test 分支 deploy.sh SERVICE 改成 prod 值(iro-novamarketdapp-prodiro-novamarket-test,commit 665fa68
  • push origin test → 测试服自动 deploy(部署 webhook 跟 deploy.sh 联动)
  • TG 通知 IRO 小组群(msg 2881 撤回 2882 改为按 PRD AC 点 6 条重组 + 5 条「测试说明」预防 QA 误报 bug)

写 plan 时把 PM 4 议题做了判断:

  • Q1 σ 精确语义 —— PRD §5 Step 1 已明确(对数正态采样 + 裁剪到 [size_min, size_max]),FE 自决落地,无需 PM 拍
  • Q2 守价 / 做活跃度目标笔数公式 —— 风格档表 + example 推导可得(每小时基准 × 24),FE 自决,example 1 数值对照通过
  • Q3 守价反馈环”价偏时长占比”映射规则 —— PRD §9 只说改用,没给阈值和方向;FE 暂用 D3 临时假设(占比 >30% → ×1.15),Phase 4 S7 启动前必须 PM 拍
  • Q4 v1 已跑 task 兼容性 —— FE/BE 自决:新 task 走 v2 schema + v1 老 task 跑完禁 edit,BE align 时口头确认
  • 沿用 [feedback-onchain-economics-estimator-be-responsibility]:S4 代币税探测 FE 端只做 manual 兜底 + 渲染,不写 viem simulate fallback。沿用既有判断没新增 memory(DDD1 事故经验已在 memory 里)

today 累计 23 个 atomic commit(19 个 feature + 3 个 merge/build/deploy fix + 1 个 plan 跟踪)。tsc 全过;engine 117 单测全过(含 S3 sampling 25 + sessionWeights 12 + strategyDerive 20 + 既有 60)。


  • 16:25 · 前端已部署 · [iro-bsc] · FEAT-012 K 线 history HTTP 游标分页正式服上线(dapp.novahub.global)—— 后端 zz 反馈正式服 api.novahub.global 已上 /api/kline/{coinId}/history,把 test 分支三个 commit cherry-pick 到 master-v2(接入 → limit 1500→1000 → AbortController + limit 收到 200),跑 build:bsc:prod 出产物提交并推远端。
  • 16:25 · 前端已部署 · [nova-market] · FEAT-003 K 线 history HTTP 游标分页正式服上线(market.novahub.global)—— 与 iro-bsc 共用同一份后端 K 线接口升级,TG 已统一发通知到 IRO 小组群。
  • 18:29 · 前端已部署 · [nova-market] · FEAT-009 v2 含税代币适配测试服上线(21 commits + 按 PRD AC 点 6 条变更 + 测试说明 5 条预防 QA 误报)

主线:等下游反馈,FE 进入”反应式”模式

FEAT-009 v2 剩余 5 个 Story(S6-S10)全部有外部依赖,硬推会写占位代码 + 增加 QA 验收混淆,不主动推进。

具体下游信号 + 对应行动:

  • 等 QA Ada 验收 FEAT-009 v2 → 按 PRD AC6/8/9/11/12/15/16 + §11 滑点失败熔断逐条;如有 P0/P1 bug 直接接修
  • 等 BE zz 给 7 个 P0 endpoint ETA
    • A1 代币税探测 → 解锁 S4 切真接口(半小时工作量)
    • A6 task schema 升级 + derived 字段 → 解锁 S10 + S3 引擎采样真正集成
    • A2/A3/A4 池子滑点 / MEV / dex_config → 解锁 S6 完整成本估算
    • A7 per-swap 实际滑点税 + A8 runtime_stats 跨会话累计 → 解锁 S8 异常防护完整版
    • A5 + 任务运行期 inventory snapshot → 解锁 S9 任务结束成本核算
  • 等 PM tony / 万有库 拍 Q3 守价反馈环阈值方向 → 解锁 Phase 4 S7 启动;FE 暂用临时假设落 plan,Phase 1-3 不依赖

轻量任务(如果上游全 idle)

  • 加单测覆盖 LaunchPreviewModal / TaxBadge / ManualTaxModal 三个组件(约 0.5d)
  • 转其他 feature / 修其他 backlog bug(如有)
  • 清理 v2 schema 升级后的兼容 shim TODO 注释
  • BE 7 个 P0 endpoint 全部未实现 → 阻塞 FEAT-009 v2 剩余 5 Story(S6-S10);FE 单方推会写占位代码(memory 钦定 BE 责任,避免重蹈 DDD1 含税代币事故)
  • BE A1 代币税探测 最关键阻塞 → 当前 FE manual-required 兜底可用,但 QA 测着像「自动探测坏了」,TG 通知已在测试说明里预防误报
  • PM Q3 守价反馈环阈值未拍 → 阻塞 Phase 4 S7 启动;非紧急(FE 已用临时假设落 plan,Phase 1-3 不依赖;Phase 4 启动前必须解决)