Workshop: Security Agents, Not Alerts:A New Metalanguage for Live Threat Detection in DeFi
三句話摘要
DUB 公司技術共同創辦人介紹 DWQL——一種基於 PostgreSQL 的 EVM 鏈上即時監控查詢語言,讓安全研究者無需手寫複雜程式即可部署監控代理。 --- DWQL 把「EVM 執行歷史 + 靜態分析結果」統一建模為可 JOIN 的時間序列表,讓安全研究者只需幾行 SQL 就能部署覆蓋歷史與實時的鏈上監控代理,是目前少見同時解決增量計算、ABI 解碼與漏洞情報整合的一體化方案。 查詢即監控代理:DWQL 查詢在每個排程週期由新區塊資料觸發,並設定物化策略(唯一鍵 + 去重)確保同一筆警報不重複發出,讓有限的 SQL 查詢語義模擬出「無限資料流持續處理」的行為。
重點整理
重點- 1
查詢即監控代理:DWQL 查詢在每個排程週期由新區塊資料觸發,並設定物化策略(唯一鍵 + 去重)確保同一筆警報不重複發出,讓有限的 SQL 查詢語義模擬出「無限資料流持續處理」的行為。
- 2
EVM 堆疊幀被結構化為時間序列表:每個 CALL/DELEGATECALL/CREATE 都對應一筆 `transaction_details` 紀錄,以 `vm_step_start` 作為唯一識別符;程式計數器記錄呼叫點,調用資料與返回資料按 ABI 即時解碼,永不預先儲存解碼結果(原始二進位體積是解碼後的 1/3)。
- 3
Gadget 是 DWQL 的核心抽象:Gadget 以子查詢形式展開,自動插入 ABI 解碼邏輯與查詢區間限制,讓使用者只需宣告「我要監聽哪個事件/函式」,不必手動處理底層 ABI 解析與索引範圍。
- 4
回填 + 增量計算分離首次執行與後續觸發:首次回填時物化所有歷史結果,後續執行改為增量模式,只對新資料與已物化集合的差集發警報,實現「歷史提案人不觸發、新提案人才警報」的語義。
- 5
--
實用技巧與重點
乾貨- 平台
- 網址:app.dub.com(目前限時免費,約 1 萬名用戶)
- 底層資料庫:PostgreSQL(自訂擴充為 DWQL/DubQL)
- DWQL 時間序列表清單
- `transaction_details`:含所有 EVM 堆疊幀,索引欄位為 block_number + tx_index + vm_step
- `external_transactions`:每筆交易一條紀錄
- `logs`:所有事件,含 topic0(事件 ABI 雜湊)、topic1–topic4(已索引欄位)、data(未索引欄位)
- `token_ledger`:複式記帳,每筆轉帳兩條,含 ERC-20 轉帳、ETH 轉帳、自毀
- `contracts`:從 block 0 至今所有已部署合約,含 MD5 bytecode 唯一識別符
- `vulnerabilities`:靜態分析結果,以合約唯一識別符索引,含漏洞類型
- 監控代理設定參數
- 排程頻率:30 秒(適合大額轉帳)、10 分鐘(適合 DAO 治理類)
- 唯一鍵範例:`transaction_hash`(每筆交易最多一條警報);加入 `vuln_type + target` 則每種漏洞各一條
- 物化策略:回填(Backfill)立即物化歷史資料,之後切換增量計算
- 具體數字
- 解碼後資料體積約為原始二進位的 3 倍 → 系統選擇只存原始格式,即時解碼
- 以太坊目前約 2400 萬個區塊
- 頻率高於 10.5 分鐘時,系統對資料正確性提供更強保證
- 示範門檻:先設 100 萬美元觸發大額轉帳警報,實測發現過多,調整為 1000 萬美元
- 工具 / 函式
- `tx_hash(block_number, tx_index)`:由區塊號與交易索引計算交易雜湊
- `token_to_usd(amount, token_address)`:即時將代幣數量換算為美元
- Lateral Join:用於展開 JSONB 陣列(如 DAO 提案的 targets 陣列)
- CTE(Common Table Expression):作為查詢優化隔離模組,避免多 JOIN 時優化器失效
- Webhook 通知:可在設定頁面配置,將警報連同 calldata 一起送出
- 案例
- 大額轉帳監控:`token_ledger` + `token_to_usd` + 門檻條件,30 秒週期
- DAO 新提案人監控:`transaction_details` gadget 篩選 `propose()` 函式的 msg.sender,10 分鐘週期
- DAO 跨鏈提案人去重:UNION Arbitrum + Ethereum 兩條查詢,`NOT IN (SELECT proposer FROM ref(query_id))`
- DAO 提案漏洞掃描:解析 targets 陣列 → JOIN contracts(MD5 bytecode)→ JOIN vulnerabilities
- --
結論
結論“DWQL 把「EVM 執行歷史 + 靜態分析結果」統一建模為可 JOIN 的時間序列表,讓安全研究者只需幾行 SQL 就能部署覆蓋歷史與實時的鏈上監控代理,是目前少見同時解決增量計算、ABI 解碼與漏洞情報整合的一體化方案。”
完整解析
詳細Web3 安全公司 DUB(約 23 人,主力在地中海地區)長期以白帽駭客身份進行智慧合約審計,並自研靜態分析與反編譯工具。當他們著手為各類協議建構即時監控系統時,很快發現每個項目的需求差異極大——DEX 需要監控特定 API 的大額交易,L2 關注 gas 統計與橋接大額提領,DAO 則需要追蹤治理提案人身份。與其為每個協議各自維護一套程式,DUB 決定退一步,找到所有監控需求的共同底層語義,最終設計出 DWQL(DubQL)。
DWQL 的核心設計是「讓 SQL 運行在無限的區塊鏈資料流上」。傳統 SQL 是拉取式管線(Volcano Model),查詢一旦迭代器耗盡便終止。DWQL 則調整了執行語義:查詢由新區塊資料觸發,結果必須以單調遞增的方式累積(越多資料 → 越多警報,絕不減少),並搭配物化策略對每條警報做去重,從而模擬出監控代理「全天候持續運行」的行為。底層資料統一表示為時間序列表,核心欄位是 block_number + tx_index + vm_step_start,涵蓋 EVM 堆疊幀(transaction_details)、事件日誌(logs)、代幣轉帳(token_ledger)等。所有原始資料以二進位格式儲存,ABI 解碼僅在查詢時即時執行,因為解碼後的資料體積約是原始格式的三倍。
DWQL 引入「Gadget」概念作為高層抽象,本質上是預定義的子查詢模板,使用者只需在雙花括號中宣告要監聽的合約地址與函式/事件 ABI,系統會自動展開為完整的 SQL、插入 ABI 解碼邏輯,並注入查詢區間限制,確保不對同一區塊資料重複執行。演講者現場示範了三個遞進的監控場景:第一,利用 token_ledger + token_to_usd 函式偵測以太坊上超過百萬美元的大額轉帳;第二,在 Arbitrum 上監聽 Compound Governor Bravo 風格 DAO 的 propose() 函式,透過回填策略將歷史提案人全部物化後,後續只對「從未提過案的新提案人」發出警報;第三,解析 DAO 提案的 targets 陣列,透過 Lateral Join 展開後與 contracts 表(MD5 bytecode 索引)及 vulnerabilities 靜態分析結果表做 JOIN,實現「DAO 提案觸及有已知漏洞合約時自動警報」的功能。
最後,DWQL 也支援查詢間的依賴關係——若查詢 A 依賴查詢 B,系統會確保 B 先執行,類似程式語言的模組抽象。所有監控代理皆可透過 Webhook 將結果送至外部系統,並可附帶解析後的 calldata。DUB 目前在 app.dub.com 免費提供此監控服務以擴大採用率,反編譯器的靜態分析結果亦同步存入資料庫,可直接被監控查詢引用。
---
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

