返回实战项目
Day 15

【实战5.3】异常交易监控系统:告警规则与实时Dashboard

定义链上异常交易模式,设计分级告警规则(LP抽离/巨额转出/价格操纵/异常授权),构建监控Dashboard原型

2026-03-20
实战项目Dune异常检测监控告警实时监控安全运营

实战项目 5.3:异常交易监控系统

项目信息

项目编号:5.3
所属方向:反欺诈分析
难度:⭐⭐⭐⭐ 高级
预计时间:5-6小时
前置技能:Rug Pull 检测(实战5.1)、Dune 进阶(Day 31-32)

项目目标

设计实时异常监控告警系统,在安全事件发生前预警

产出清单:
├── ✅ 异常模式定义文档
├── ✅ 告警规则设计
└── ✅ 监控 Dashboard 原型(Dune SQL)

Task 1:异常模式定义

八大异常交易模式

P0 — 立即响应(资产可能正在流失)
═══════════════════════════════════════════════════════════

模式 1:大额 LP 移除
├── 定义:单次移除 > 总 LP 的 30%
├── 信号强度:🔴 极高
├── 历史案例:几乎所有 Rug Pull 都有此信号
├── 响应:暂停交易建议 + 社区告警
└── SQL 检测:监控 Burn 事件金额

模式 2:巨额单笔转出
├── 定义:协议合约转出 > $1M
├── 信号强度:🔴 极高
├── 历史案例:Euler ($197M), Ronin ($625M)
├── 响应:立即通知安全团队
└── SQL 检测:大额 Transfer 事件

模式 3:闪电贷攻击特征
├── 定义:同一区块内借款→操作→还款
├── 信号强度:🔴 极高
├── 历史案例:bZx, Pancake Bunny
├── 响应:暂停相关功能
└── SQL 检测:同区块借还款模式
═══════════════════════════════════════════════════════════

P1 — 1小时内响应(潜在风险)
═══════════════════════════════════════════════════════════

模式 4:异常批量授权
├── 定义:短时间内 100+ 地址授权同一合约
├── 信号强度:🟠 高
├── 场景:可能是钓鱼合约正在活跃
├── 响应:标记合约 + 预警用户
└── SQL 检测:approve 事件聚合

模式 5:价格异常偏离
├── 定义:价格 1 小时内偏离 > 50%
├── 信号强度:🟠 高
├── 场景:价格操纵 / 预言机攻击
├── 响应:暂停依赖该价格的功能
└── SQL 检测:DEX 价格 vs 预言机对比

模式 6:大户持续卖出
├── 定义:Top20 持有者连续 3 天净卖出
├── 信号强度:🟡 中
├── 场景:内部人抛售 / Slow Rug
├── 响应:预警社区
└── SQL 检测:大户地址交易方向分析
═══════════════════════════════════════════════════════════

P2 — 每日检查
═══════════════════════════════════════════════════════════

模式 7:合约升级
├── 定义:代理合约实现地址变更
├── 信号强度:🟡 中
├── 场景:可能是正常升级也可能是恶意修改
├── 响应:审查新实现合约代码
└── SQL 检测:Upgraded 事件

模式 8:治理异常
├── 定义:大量 Token 集中转移后立即投票
├── 信号强度:🟡 中
├── 场景:治理攻击(如 Beanstalk)
├── 响应:通知治理委员会
└── SQL 检测:投票前的 Token 转移
═══════════════════════════════════════════════════════════

Task 2:告警规则设计

告警规则引擎

告警规则格式:
═══════════════════════════════════════════════════════════

RULE: [规则名称]
WHEN: [触发条件]
THEN: [告警动作]
SEVERITY: [P0/P1/P2]
COOLDOWN: [重复告警间隔]

示例:

RULE: LP_DRAIN_ALERT
WHEN: LP_removed_pct > 30% AND timeframe < 1_block
THEN: push_telegram + push_discord + email_security_team
SEVERITY: P0
COOLDOWN: 0 (每次都告警)

RULE: WHALE_SELL_ALERT
WHEN: top20_holder_net_sell > 3_consecutive_days
THEN: push_discord + dashboard_flag
SEVERITY: P2
COOLDOWN: 24h

RULE: PRICE_ANOMALY
WHEN: price_change_1h > 50% AND volume_spike > 10x
THEN: push_telegram + pause_oracle_dependent_features
SEVERITY: P1
COOLDOWN: 1h
═══════════════════════════════════════════════════════════

告警分级与响应矩阵

级别响应时间通知渠道自动动作人工动作
P0即时Telegram+电话+Discord暂停交易/提款安全团队集合
P1< 1 小时Telegram+Discord标记风险安全团队评估
P2< 24 小时Discord+邮件Dashboard 标记下次会议讨论

核心 SQL — LP 异常监控

-- 项目5.3 Task 2: 监控大额 LP 移除事件
WITH recent_lp_events AS (
  SELECT
    contract_address as pool,
    evt_block_time,
    CASE
      WHEN evt_tx_hash IN (
        SELECT evt_tx_hash FROM uniswap_v3_ethereum.NonfungibleTokenPositionManager_evt_DecreaseLiquidity
      ) THEN 'remove'
      ELSE 'add'
    END as action,
    liquidity
  FROM uniswap_v3_ethereum.NonfungibleTokenPositionManager_evt_DecreaseLiquidity
  WHERE evt_block_time >= NOW() - INTERVAL '24' HOUR
),

pool_totals AS (
  SELECT
    pool,
    SUM(CASE WHEN action = 'remove' THEN liquidity ELSE 0 END) as removed,
    SUM(liquidity) as total_activity
  FROM recent_lp_events
  GROUP BY pool
)

SELECT
  pool,
  removed,
  total_activity,
  ROUND(100.0 * removed / NULLIF(total_activity, 0), 1) as removal_pct,
  CASE
    WHEN 100.0 * removed / NULLIF(total_activity, 0) > 50
      THEN '🔴 P0 - 大规模 LP 移除'
    WHEN 100.0 * removed / NULLIF(total_activity, 0) > 30
      THEN '🟠 P1 - 显著 LP 移除'
    ELSE '🟢 正常'
  END as alert_level
FROM pool_totals
WHERE 100.0 * removed / NULLIF(total_activity, 0) > 30
ORDER BY removal_pct DESC

核心 SQL — 价格异常检测

-- 价格异常波动检测
WITH hourly_prices AS (
  SELECT
    token_bought_symbol as token,
    DATE_TRUNC('hour', block_time) as hour,
    AVG(amount_usd / NULLIF(token_bought_amount, 0)) as avg_price
  FROM dex.trades
  WHERE block_time >= NOW() - INTERVAL '48' HOUR
    AND blockchain = 'ethereum'
    AND amount_usd > 100
  GROUP BY 1, 2
),

price_changes AS (
  SELECT
    token,
    hour,
    avg_price,
    LAG(avg_price) OVER (PARTITION BY token ORDER BY hour) as prev_price,
    ROUND(100.0 * (avg_price - LAG(avg_price) OVER (PARTITION BY token ORDER BY hour))
      / NULLIF(LAG(avg_price) OVER (PARTITION BY token ORDER BY hour), 0), 1) as pct_change
  FROM hourly_prices
)

SELECT
  token,
  hour,
  avg_price,
  prev_price,
  pct_change,
  CASE
    WHEN ABS(pct_change) > 50 THEN '🔴 P1 - 价格异常'
    WHEN ABS(pct_change) > 20 THEN '🟡 P2 - 价格波动'
    ELSE '🟢 正常'
  END as alert_level
FROM price_changes
WHERE ABS(pct_change) > 20
ORDER BY ABS(pct_change) DESC
LIMIT 50

Task 3:监控 Dashboard 原型

Dashboard 布局

监控 Dashboard 四象限布局:
═══════════════════════════════════════════════════════════

┌─────────────────────┬─────────────────────┐
│  实时告警 Feed       │  异常指标概览        │
│  ├── P0: 🔴 0 条     │  ├── 24h 异常事件: 12│
│  ├── P1: 🟠 2 条     │  ├── LP 移除事件: 5  │
│  └── P2: 🟡 5 条     │  ├── 价格异常: 3     │
│                     │  └── 大额转出: 4     │
│  [最新告警详情...]   │  [趋势图表...]      │
├─────────────────────┼─────────────────────┤
│  Top 风险 Token      │  大户动向追踪        │
│  ├── TOKEN_A: 🔴 82  │  ├── 鲸鱼净卖出: 3天│
│  ├── TOKEN_B: 🟠 65  │  ├── LP 移除: 2 笔   │
│  └── TOKEN_C: 🟡 45  │  └── 大额转入 CEX: 5│
│                     │                     │
│  [点击查看详情...]   │  [地址列表...]      │
└─────────────────────┴─────────────────────┘
═══════════════════════════════════════════════════════════

方向五完成总结

三个项目串联:
═══════════════════════════════════════════════════════════

实战 5.1 Rug Pull 检测
  → 事前防护:在买入前识别风险 Token
  → 产出:风险评分模型 + Token 扫描工具 PRD

实战 5.2 钓鱼防护
  → 交易时防护:在签名/授权时拦截钓鱼
  → 产出:钓鱼分类手册 + 钱包安全 PRD

实战 5.3 异常监控
  → 事后预警:在攻击发生时快速检测响应
  → 产出:告警规则 + 监控 Dashboard

安全防护时间线:
  买入前 → Token 扫描(5.1)
  交易时 → 钓鱼拦截(5.2)
  持有中 → 异常监控(5.3)

PM 核心能力验证:
  ✅ 能设计安全评估模型
  ✅ 能设计安全产品功能(不牺牲 UX)
  ✅ 能设计监控运营体系
═══════════════════════════════════════════════════════════

面试题准备

Q: 协议被攻击了,你作为 PM 如何应对?

30 秒版本: 分三阶段 — (1) 前 10 分钟:确认攻击范围(哪些池/多少资金),启动紧急暂停(如果有 Pause 功能),在 Discord/Twitter 发第一条公告("我们发现异常,正在调查");(2) 前 1 小时:与安全团队确认攻击方式,评估是否可追回资金,发布详细声明(受影响范围+临时建议);(3) 后续:制定补偿方案,复盘根因,修复并审计,透明公开全过程。核心:速度>完美,先止血再治疗。


下一步

完成方向五后,推荐继续:

  • 方向六 项目 6.1:DEX 协议竞品对比
  • 方向七 项目 7.1:治理参与度分析