在區塊鏈共識這個領域,過去三年最值得追蹤的一條技術線,是 DAG-based BFT 的演化。它不像 ZK 那樣有炫目的數學門面,也不像 restaking 那樣有資本敘事,但它直接決定了一條鏈「每一筆交易要多久才算數」。Mysticeti 是這條線上的一個分水嶺;而真正有趣的,是它之後分成了兩條路。
這篇筆記只想回答三個問題:Mysticeti v1 精妙在哪、不足在哪;Sui 的 Mysticeti v2 往哪個方向修;IOTA 的 Starfish 又往哪個方向修。要看懂這個分岔點,我們必須先從第一原理理解——它們共同放棄、又各自試圖找回的那個東西,叫做 certification。
章 01回到原點:certified DAG 的成本結構
要看懂 Mysticeti 的巧妙,先看清楚它到底取代了什麼
DAG-based 共識的上一代代表是 Narwhal + Bullshark。它的 DAG 是一個已認證的 DAG(certified DAG):每個 block 必須先收集 2f+1 個簽名、形成一個 quorum certificate,才能被下一輪的 block 引用。換句話說,共識協議真正運行其上的那個圖,每一個頂點本身就已經是一張 certificate。
這個設計等於「免費」送你兩個很有用的性質。第一是 equivocation-freedom:一個 Byzantine validator 沒辦法讓兩個互相矛盾的 block 同時被 certified,因為誠實節點不會對矛盾的版本各簽一次。第二是 block availability:一張 certificate 證明了 2f+1 個 validator 持有這個 block,因此其中至少 f+1 個誠實節點手上有它——任何人都能向這群誠實節點要回資料。
但這兩個看似「免費」的性質,其實是用很貴的價格買來的。每一次 certification 本身就是一次 reliable broadcast,需要一個完整的 round-trip;而且每個 block 要花 O(n) 次簽名生成與驗證的運算。Bullshark 雖然每兩輪就能 commit 一個 leader,但把 certification 的開銷算進去,leader block 的端到端延遲高達約 6 個 message delay。對一條想做即時體驗的鏈來說,這是沉重的稅。
章 02Mysticeti v1 的賭注與三個精妙之處
把認證拿掉之後,DAG 結構自己變成了憑證
Mysticeti 的核心決定,是運行在一個 uncertified DAG 上——block 只由提案者簽一次名,就直接廣播出去。它推進 DAG 的方式,是收到 n−f 個 block,而不是認證 n−f 個 簽名。這一字之差,省下了 certified DAG 那整層 round-trip 與 O(n) 簽名開銷。
問題回到第一原理:拿掉了 certificate,equivocation-freedom 與 availability 就不再免費。Mysticeti 必須用別的東西把 safety 找回來。它的答案,是讓 DAG 結構本身充當「virtual certificate」。要理解這句話,先看一個更基礎的觀念。
觀念一個 reference,就是一張票
在 Mysticeti 裡,當你提出自己下一輪的 block 時,你會把所有你看過的、上一輪的 block 列為 parent。這個 parent link 不只是「我看過你」的紀錄——它同時就是一張投票。你不需要、也不會發送任何獨立的 vote message;投票被編織進了 DAG 的邊裡。這是整個協議省下通訊量的關鍵直覺:把 voting 變成 DAG 結構的副產品。
精妙之一Direct decision rule —— 用 DAG 推導出 commit
既然沒有 certificate,我們怎麼判斷一個 block 該不該 commit?Mysticeti 的 direct decision rule 把這件事變成「在 DAG 上找一個特定的形狀」。形式上:
2f+1 個 round R+1 的 block 引用 B —— 稱為 witnesses(見證)2f+1 個 round R+2 的 block 引用上述那些 witness —— 稱為 confirmation(確認)3δ用一句話翻譯這個規則:「我看見一個 quorum 的見證者(R+1)都聲稱看過這個 block(R);而我又有一個 quorum 的確認者(R+2),證明見證者的這個聲稱是穩定的、不會被翻盤的。」 這本質上就是 PBFT 那個經典的「兩輪投票(prepare / commit)」——只是這裡的每一票,都是一條 DAG 的邊,沒有任何額外訊息。下圖把這個推導畫出來。
精妙之二Multi-proposer 與 pipelining
Bullshark 每兩輪才有一個 proposer slot,這天然就拉高了延遲。Mysticeti 把每一個 (validator, round) 都變成潛在的 proposer slot,而且每個 block 都是「first-class」——可以被直接提案、直接套用 decision rule 決定。結果是每一輪都在產生 commit,而不是每個 wave 才產生一次。對非 leader 的 block 來說,這把延遲從「要等到下個 wave」壓回了最優的三輪。
精妙之三Crash-fault masking —— 不讓崩潰拖垮 pipeline
但 pipelining 有個脆弱點:它只在「每個 proposer slot 都準時 commit」時才順暢。一旦某個 slot 的 leader 崩潰了,naive 的做法會 stall——後面所有 block 卡在它後面等,這就是 head-of-line blocking。Mysticeti 的 commit rule 自帶一條 skip rule 來化解這件事。
2f+1 個 block 都不引用 B ⇒ B 標記為 to-skip。可在 2Δ+δ 內偵測到崩潰的提案者並跳過,不打斷 pipeline。R' > R+2、已被 direct rule 決定的 anchor,讓 B 繼承 anchor 的判定。2f+1 個 R+1 block 都不見證 B,協議判定 B 崩潰並跳過,pipeline 不中斷。右:indirect rule。當 direct 與 skip 都判不出來,B 維持 undecided,改由一個較晚、已被 direct rule 決定的 anchor 把判定「繼承」回來——這保證了即使各 validator 的本地視角不同步,最終仍會收斂到同一個全域順序。三件事合起來,Mysticeti v1 在生產環境交出的成績單相當漂亮:相較 Bullshark,Sui 主網延遲下降約 80%(約 1900ms → 400ms),共識的 CPU 開銷下降約 40%,3δ 的 good-case 延遲在 99% 的情況下都達成。它確實「reached the latency limits」。
章 03不足之處:那個被讓出去的東西
「拿掉 certification」這個取捨,同時讓出了三樣東西
這一段是整篇分析的關鍵。一個漂亮的協議,它的缺口往往不在「做錯了什麼」,而在「為了換取主要優勢,悄悄讓出了什麼」。Mysticeti v1 讓出的東西,正好就是 v2 與 Starfish 各自要去補的。
缺口一沒有嚴格的 liveness 證明 —— 而且有真實的攻擊
這是最關鍵的一點。Mysticeti 原始論文嚴格證明了 safety(在 asynchrony 下都成立),但它的 liveness 論證明顯較弱——原論文只保證 GST 之後「每輪一個 primary block」的 liveness,還要求 validator 等一個 timeout。後續研究進一步給出了明確的反例:存在一個 desynchronization attack,讓誠實節點永久失去同步、完全停止 commit,即使網路在 GST 後已經恢復。
根本原因很微妙:Mysticeti 的 round-advancement 允許誠實節點在沒有產生自己該輪 block 的情況下推進 round。這會在 DAG 裡留下「洞」。洞一多,協議就湊不齊 commit leader 所需要的 2f+1 見證 / 確認形狀——結構不在,就 commit 不了。獨立的 Yale FLINT Group 團隊也指出,Mysticeti 規格對 round-jumping 的定義不夠明確,必須謹慎限制才能保住 liveness。多個團隊不約而同戳到同一個軟肋,這不是巧合。
缺口二Block availability 落在 critical path 上
certified DAG 的 certificate 直接就是 availability 的證明;uncertified DAG 沒有。於是當一個 validator 引用了它看過、但別人沒看過的 block,那個沒看過的 validator 就得去「抓」。Mysticeti 用的是 pull synchronization——缺 parent 就發請求去要。但 pull 在負載下會自我放大:慢的 validator 發出更多請求,快的 validator 燒更多頻寬回應;網路最忙的時刻,正好是它最需要恢復的時刻。這是延遲變異與 liveness 的雙重隱患。
缺口三規模化時的 metadata 爆炸與全量儲存
Starfish 論文把這一點量化得很殘酷:120 個 validator 以每秒 20 輪運行 Mysticeti DAG,未壓縮的 metadata 在 24 小時內可膨脹到約 1 TB,最壞情況下 metadata 頻寬可達約 10 Gbps。再加上每個 validator 都儲存每個 block 的完整交易資料(沒有任何 erasure coding),這構成一道真實的擴展牆。
缺口四Sui 整合缺口 —— 共識很快,但週邊不快
還有一個不在協議本身、而在「協議怎麼被用」的缺口。即使 Mysticeti 在共識層達到最優延遲,Sui 的交易處理另有一個 pre-consensus 步驟:validator 要先投票決定一筆交易是否「夠格」進共識(input 是否過期、Move package 是否有效等)。這個步驟需要每筆交易收集一個 quorum 的 BLS 簽名。它 CPU 很貴(2f+1 stake 的 validator 要簽每一筆),也拉高了非 fastpath 交易的延遲。Mysticeti 的理論最優,在生產上其實沒被完全兌現。
v1 讓出的四樣東西,可以歸成兩類缺口:整合冗餘,與 robustness。Sui 盯前者,IOTA 盯後者。
章 04分岔點:同一個協議,兩個方向
先補上一個常被忽略的事實 —— IOTA 在 Starfish 之前,跑的也是 Mysticeti
在進入兩條路線之前,要先點明一件容易被忽略的事:這不是兩個不同協議在競爭。IOTA 的生產環境在 Starfish 之前,跑的本來就是 Mysticeti-C(每輪單一 leader 的版本)。Starfish 在 IOTA 的官方提案 IIP-2 裡,被明確定位為「一個增強 Mysticeti 的 DAG-based 共識協議」。
所以比較準確的圖像是:Sui 與 IOTA 拿著同一個基礎協議,沿著兩條正交的軸各自演化。Mysticeti v1 那個「為了延遲而放棄認證」的單一取捨,打開了上一章的四個缺口;把它們歸類,就是兩個方向——Sui 去補「整合冗餘」缺口(缺口四),IOTA 去補「robustness」缺口(缺口一、二、三)。
章 05Sui 路線:Mysticeti v2
論點 —— 共識核心已經接近最優,浪費在「外圍的層」
Mysticeti v2 的核心主張很簡單:共識引擎本身沒問題,該砍的是它外面那層 pre-consensus 交易驗證。v2 的做法,是把交易驗證直接併入共識流程。
機制上,這是一個很漂亮的「同構複用」:原本套用在 block 上的 Mysticeti commit rule(commit / skip 一個 proposer slot),被概念性地擴展成並行套用在每一筆交易上。每筆交易在同一個 DAG 上被獨立地 finalize 或 reject,與 block 的 commit / skip 同時進行。一筆交易在累積到一個 quorum 的 finalization certificate 時被 finalize;與 block commit rule 不同的是,對交易投票或認證的 block,可以落在比交易所在 block 晚很多的 round——這是刻意設計的,為了讓網路連線差的 validator 提交的交易仍有機會 finalize。
客戶端側,v2 用 Transaction Driver 取代了舊的 Quorum Driver。舊的 Quorum Driver 把每筆交易廣播給所有 validator、收集 BLS 簽名、再廣播一次認證後的交易、再從所有節點收結果——每筆交易廣播兩次、要 2f+1 個簽名。新的 Transaction Driver 則把交易送給單一選定的 validator,取得其共識位置,再用一個 quorum 取回完整 effects;validator 把交易有效性的簽名併入共識 block 的簽名、批次處理,而不是逐筆簽。成效是亞洲 full node 延遲下降約 35%(1.00s → 0.65s)、歐洲約 25%(0.55s → 0.40s)。從 Sui node v1.60 起,v2 與 Transaction Driver 成為預設。
章 06IOTA 路線:Starfish
論點 —— agreement 本身沒問題,底下的 dissemination 與 liveness 才是壞掉的
Starfish 的主張站在另一個角度:共識的「agreement(達成一致)」問題本身沒問題,真正脆弱的是它底下那個常被當成底層水電來看待、卻形塑了整個協議的部分——dissemination(傳播);而且,liveness 證明根本還不存在。Starfish 用四個設計動作來回應。
動作一metadata 與 payload 分離
Starfish 把 block 拆成兩半:header(references、votes、acknowledgments、commitments——共識立即需要的東西)與 payload(交易資料本體)。header 很小,可以 aggressively 地 push;payload 很重,不全量推送。共識的 critical path 因此變輕。
動作二Reed-Solomon erasure coding
一個 block 的交易資料,被用 Reed-Solomon code 編碼成 n 個 fragment(每個 validator 一份),帶有足夠冗餘,使得任何 f+1 個有效 fragment 就能重建出完整 payload。每個 validator 廣播自己 block 的完整資料,但對別人的 block 只分享一個編碼過的 shard。IOTA 把這套機制叫做 Encoded Cordial Dissemination。
f+1 個 fragment,不是 2f+1。2f+1 出現在「availability certificate」這一層:若有 2f+1 個 validator 確認可用性,則即使其中 f 個是 Byzantine,也仍有至少 f+1 個誠實 validator 持有有效 fragment——剛好足以重建。Availability 不等於「大家都已有完整資料」,而是「網路裡已有足夠多經驗證的碎片,誠實節點能把資料拼回來」。
動作三Data Availability Certificate 長在 DAG 上
這是整個設計最優雅的一筆。一個 validator 在自己的 header 裡確認:它已驗證過某個較早 block 的 payload。當這樣的確認累積到 2f+1 個、且全都能在某個較晚 committed block 的因果歷史裡被觸及時,那個較晚的 block 本身就成了那份較早 payload 的可用性憑證(DAC)。沒有任何額外的 availability round 被外掛上去——availability 隨著 DAG 自然成長而累積。
f+1 個有效 shard 即可重建。最關鍵的是下半部:validator 在自己 header 裡確認「已驗證 payload P」,當 2f+1 個這樣的 ack 落入某個較晚 committed block 的因果歷史,那個 block 就自動成了 P 的可用性憑證。Starfish 等於把 certified DAG 的 availability 性質找了回來——但是用懶惰累積、而非每 block 同步認證的方式。動作四Push pacemaker —— 修掉那個 liveness bug
針對缺口一,Starfish 的解法叫 Push pacemaker,直覺上,一句話就能講完:不能空著手往前跳。 一個 validator 必須先產生自己該輪的 block,才能推進到下一輪;落後的 validator 要先看到一個 quorum 的當前輪 block,才能追上。這直接封掉了「誠實節點不產 block 就推進 round、在 DAG 裡留洞」的那個漏洞,DAG 結構因此始終保持健康,leader 在 GST 後仍然可被 commit。憑著這一點,Starfish 提供了 uncertified DAG 的第一個嚴格 liveness 證明。同時,RS 分片把 Mysticeti pull 同步在最壞情況下會退化成的 O(n²) 通訊複雜度,壓回了線性。
3δ 對 Starfish [5δ, 7δ]。Mysticeti 的 3δ 比較像理想條件下 leader block 的 direct-decision 延遲;若採用實務上更常見的 single-leader-per-round 設定,non-leader block 在同樣乾淨條件下更接近 4δ。同樣條件下,Starfish 約為 5δ。若改用更接近現實、但仍全誠實 validator 的排程條件,Mysticeti worst case 可到約 6δ,Starfish 可到約 7δ,Mysticeti average 也可能到約 5⅓δ。所以 Starfish 仍付出延遲稅,但在可比條件下更接近多一個 message delay,而不是戲劇性的差距。IOTA 自己把這個取捨講得很白:那個額外的 commit round,某種程度上就是一個 variance trade-off——用略高的平均延遲,換負載下更緊的分布。Starfish 犧牲 best-case / 平均延遲,買 worst-case / tail 延遲與 provable liveness。對 IOTA 宣稱的目標市場(貿易、物流、受監管環境的基礎設施),tail latency 與可預測性比峰值更重要——這是站得住腳的選擇,但它是真實的取捨,不是雙贏。
還有一個值得寫進筆記的細節:IOTA 拿去上主網的 Starfish,只是一篇論文裡三個協議之一。該論文(eprint 2025/567,標題《Making Uncertified DAG BFT Provably Live with Linear Payload》)提出了 Starfish、Starfish-L 與 Mysticeti-L:Starfish 提供 uncertified DAG 的第一個嚴格 liveness 證明,並達成 order-optimal 的線性 payload 通訊;Starfish-L 與 Mysticeti-L 進一步把 metadata 通訊在 happy case 壓到 quadratic。而論文白紙黑字寫明:「Mysticeti(with Push)」指的是 Mysticeti 加上他們的 Push pacemaker——而這是 liveness 所需的,因為原始 Mysticeti 的 round-advancement 對 liveness attack 是脆弱的。
章 07收斂判斷:三個 Pareto 點
同一個 design space,因 business thesis 不同而產生的三個解
把三者放在一起,最尖銳的一個觀察是這個——它值得單獨拉出來說。
Mysticeti 的整個賣點是「uncertified DAG = 沒有 certificate」。而 Starfish,把 certificate 帶回來了。
——只是帶回來的方式不一樣Starfish 帶回的 certificate,不是 certified DAG 那種「每 block、同步」的 certificate,而是懶惰累積在 DAG 上的 Data Availability Certificate。所以 Starfish 本質上是一個綜合:它把 certified DAG 的 safety / availability 性質找了回來,卻不付 certified DAG 每 block 一次 round-trip 的代價。真正的智識內容在這裡——「uncertified」從來就不是一個二元的開關,而是一條光譜;Starfish 在這條光譜上,找到了一個比 Mysticeti 更靠「安全」、又比 Bullshark 更靠「便宜」的新點。
而 Mysticeti v2 走的是相反方向。它在「uncertified」上加倍下注,完全不去碰共識核心的 dissemination 哲學,反而把刀口對準了共識之外的開銷——Sui 那層 pre-consensus 交易驗證。
用一組對句把三者收束起來:
| 面向 | Mysticeti v1 | Mysticeti v2 · Sui | Starfish · IOTA |
|---|---|---|---|
| 一句話 | 為了延遲,犧牲認證 | 認證的浪費跑到了共識「外面」,把它收進來 | 把認證以更便宜的形態,重新放回共識「裡面」 |
| 攻擊的缺口 | —(它是起點) | 整合冗餘(pre-consensus 驗證) | robustness(liveness、dissemination、metadata) |
| 核心機制 | uncertified DAG + 隱式投票 commit rule | commit rule 下放到交易粒度 · Transaction Driver | header/payload 分離 · RS 編碼 · DAC · Push pacemaker |
| 優化的是 | leader block direct decision 可達 3δ;乾淨實務比較約 4δ | happy path · end-to-end 產品延遲 | bad path · tail latency · provable liveness |
| 付出的代價 | liveness、availability、metadata 三個缺口 | liveness 形式化仰賴外部工作 | 乾淨比較約 5δ;worst case 可接近 7δ · 約 2× 頻寬 |
| liveness 證明 | 弱(已知 desync 攻擊) | 靠外部形式化驗證變體補 | uncertified DAG 的第一個嚴格證明 |
| 目標市場隱喻 | — | 消費級 / DeFi / 高 TPS | enterprise / 受監管 / 貿易基礎設施 |
| 生產狀態 | Sui 主網 2024-07 起 | Sui node v1.60 起為預設 | IOTA 主網 v1.21.1 · protocol v24 |
所以最後的判斷不該是「誰贏」,而是它們本來就不是在比同一場比賽。Sui 是消費級、DeFi、高 TPS 的鏈,延遲與吞吐就是它的產品,Mysticeti v2 的方向忠於這個定位。IOTA 押注的是 enterprise、受監管、貿易與物流的基礎設施,degraded 條件下的可預測性與形式化保證才是它的產品,Starfish 接受延遲稅去換 robustness,也忠於它的定位。協議會分岔,是因為商業命題先分岔了。