--- taskmaster_id: "9" status: "pending" priority: "medium" depends_on: [] parent_id: "" source: "taskmaster" generated_at: "2026-05-28T11:49:27.076Z" --- # 9 - Per-chain confirmation thresholds + admin UI - [ ] 9 - Per-chain confirmation thresholds + admin UI #taskmaster #priority/medium #status/pending ๐Ÿ”ผ ๐Ÿ†” tm-9 ## Metadata | Field | Value | | --- | --- | | Taskmaster ID | 9 | | Status | pending | | Priority | medium | | Dependencies | None | | Parent | None | ## Description Make TransactionSafetyProvider's confirmation threshold tunable at runtime per chain via admin UI, with an awaiting-confirmation payments view that shows live confirmations vs threshold. ## Details See PRD - Wallet, Multichain, Confirmations, AML, Trezor.md ยง3. Today TRANSACTION_SAFETY_MIN_CONFIRMATIONS is a global env var, default 12, baked in until redeploy. Move to runtime config: new Setting docs keyed 'confirmation_threshold:' or extend existing model; cache reads in transactionSafetyProvider.ts for 30s; GET/PATCH /api/admin/settings/confirmation-thresholds (auth: admin); new admin page /dashboard/admin/confirmation-thresholds (table: chain, current, recommended default, edit-in-place with confirm dialog, audit log of changes); new admin page /dashboard/admin/payments/awaiting-confirmation (payments where escrowState !== 'funded' AND metadata.transactionSafety.lastCheck.status === 'pending'; for each show tx hash linked to explorer, current confirmations via 12s poll on BSC, threshold, ETA). Acceptance: admin lowers BSC threshold from 12 to 3 on dev, next webhook honors new value within 30s; awaiting-confirmation table updates live; audit log records every change. Non-goals: per-asset, per-seller thresholds. Dependencies: none. This is task #9 in the PRD. ## Verification _No verification strategy._