← Back to Blog
Web3PrivacyZK-SNARKs

隱私鏈技術入門:Midnight Network

2026-04-06

公鏈最大的優點是透明,但這也剛好是它最不適合企業的地方。 假設一家公司用鏈上錢包付供應商,競爭對手只要知道地址,就能一路看到付款頻率、金額區間,甚至猜出你在跟誰合作。

從工程角度看,這其實是資料分層的問題: 哪些資料要交給共識層,哪些資料只該留在使用者端。 Midnight 有意思的地方就在這裡,它不是只想把轉帳藏起來,而是想把這套分層能力直接做進智能合約。

公鏈透明的問題

對個人來說,你只要公開過一次地址,別人就可能一路串出你的資產、交易習慣、還有常互動的對象。 對企業更麻煩:薪資、供應商付款、倉位調整,都可能直接變成競爭情報。

幣圈很習慣把透明當成預設美德,但透明到連 business logic 和 flow 都外露,很多場景根本上不了鏈。 所以很多企業不是不想用區塊鏈,而是不想把營運細節直播給全世界看。

隱私方案的三條路線

現在常見做法大概三種。差別不在誰比較酷,而在隱私做到哪一層。

1. 全隱私:Monero

Monero 走的是「預設全隱藏」。 發送者、收款地址、金額都盡量藏起來,隱私很強。

代價也很直接:合規很難做,而且它主要還是轉帳系統,不是拿來寫複雜 DApp 的平台。

2. 可選隱私:Zcash

Zcash 是「你可以選擇隱藏」。 公開交易跟一般鏈差不多,shielded transaction 才會把內容藏起來。

問題是隱藏交易通常比較麻煩、也比較貴,最後很多人還是走公開路徑。 而且它的隱私主要還是在轉帳,不是在智能合約層。

3. 可程式化隱私:Midnight

Midnight 想做的是「可程式化隱私」。 不是只有交易可不可以藏,而是合約可以直接規定哪些資料公開、哪些不公開。

例如使用者可以證明自己通過了 KYC、已成年、或信用分數高於某個門檻, 但不需要把名字、生日、完整信用報告交給合約。 換句話說,Monero 和 Zcash 比較像在處理「交易隱私」,Midnight 想處理的是「合約邏輯裡的資料隱私」。

ZK-SNARKs:不揭露秘密就能證明真相

ZK-SNARKs 可以先記成一句話:你可以證明「我符合條件」,但不必交出原始資料

最直觀的例子:年齡驗證

想像一下酒吧只想知道你有沒有滿 18 歲。 傳統做法是看身分證,所以店員會連生日、姓名、照片一起看到。

ZK proof 的理想狀況是:系統只收到「這個人已成年」的證明, 其他資料完全不給。放到鏈上也是同樣概念,合約驗證 proof, 不需要碰到底層文件。

這四個字到底在說什麼

  • Zero-Knowledge:只知道結果是真的,不知道原始資料
  • Succinct:proof 很短,驗證很快
  • Non-Interactive:不用來回問答,一次提交就能驗
  • Argument of Knowledge:你不是亂猜,而是真的握有那份秘密資料

在區塊鏈上怎麼用

放到區塊鏈上,可以把它想成一句更實際的話:原始資料留在本地,只有「我符合條件」這件事上鏈

對工程師來說,這比較像 validity proof。 使用者先在本地把輸入算完,再提交一個 proof,鏈上 verifier 只檢查這次狀態轉移是否合法。

例如借貸協議只需要知道你的信用分數大於 700,不需要知道完整報表; 合約只驗證 proof 是否成立,不讀原始資料本身。

這也是 ZK proof 最有價值的地方: 合約驗的是「條件」,不是「文件」。

Midnight 的架構拆解

Midnight 可以先抓三個關鍵:雙狀態、本地執行加 proof、以及能寫隱私合約。

雙狀態模型:公開 + 私有

它把狀態拆成公開和私有兩部分:

  • Public State:大家都看得到的部分,例如合約規則、公開更新、可驗證的鏈上狀態
  • Private State:留在使用者本地的部分,例如身份資料、私有屬性、或不想曝光的狀態

如果用工程師比較熟的講法,Public State 是共識層真正要維護的 shared state, Private State 則比較像 client-side state,只是它的狀態轉移要能被 proof 約束。

Kachina Protocol:橋接公開和私有狀態

真正關鍵不是「有私有資料」,而是「私有資料怎麼安全參與合約執行」。 Midnight 的答案可以很簡單地記成四個字:本地算,鏈上驗。

Kachina Protocol 的流程大致是:

  1. 使用者在本地執行合約,讀取公開狀態和自己的私有資料
  2. 本地算完後生成一個 proof
  3. 把 proof 和必要的公開更新一起送上鏈
  4. 鏈上只驗 proof,不看私有資料本身

這整件事最像的其實不是傳統 on-chain execution,而是off-chain execution + on-chain verification。 例如一個 KYC 合約,鏈上公開更新的可能只是「這個地址可以進入某市場」, 不是你的護照、姓名或住址。

Compact:寫隱私合約的語言

如果每次都要手寫 ZK 電路,幾乎沒幾個開發者受得了。 Compact 的價值就在這裡:你用接近 TypeScript 的方式寫規則,再把 public / private 分清楚。

typescript
// Compact 智能合約範例(類 TypeScript 語法)
contract AgeVerification {
public minimumAge: number = 18;
private birthDate: Date;
isAdult(): boolean {
return this.age() >= this.minimumAge;
}
}

對幣圈開發者來說,可以把它理解成: 你不是在寫「所有 state 都直接上鏈」的 Solidity 版本, 而是在寫一個有明確公開邊界和私有邊界的合約。

NIGHT / DUST 雙代幣模型

Midnight 還把付費資源拆成 NIGHT / DUST。

  • NIGHT:公開的治理 / 質押代幣
  • DUST:shielded、不可轉讓的資源,用來付交易手續費

直觀理解就好:如果 gas fee 本身是公開的,觀察者還是可能從付費模式猜出你的活動。 DUST 的存在,就是想把這種側漏也壓低。

選擇性揭露:隱私和合規可以共存

Midnight 想打的不是「完全躲監管」,而是「只交代必要資訊」。 這就是 Selective Disclosure。

幾個很直觀的例子:

  • KYC 合規:DeFi 只需要知道你通過 KYC,不需要拿到你的名字和住址
  • 信用驗證:借貸協議只需要知道你的信用分數大於 700,不需要整份信用報告
  • 年齡驗證:遊戲或平台只需要知道你已成年,不需要看到生日

這些例子的共同點很重要:合約驗的是條件,不是原始文件。 工程上看,這代表你不用在每個協議裡複製一份敏感資料庫,也不用讓每個合作方都接觸完整個資。

共識先知道這些就夠

共識不是這篇的主角。先記兩件事就好: Midnight 是獨立 L1,但和 Cardano 生態綁得很深;另外它現在還在很早期,驗證者開放程度也還在往外擴。

各方案的取捨

MoneroZcashAztecMidnight
隱私模式預設全隱藏可選L2 Rollup可程式化
密碼學Ring SigZK-SNARKsZK-SNARKsRecursive ZK-SNARKs
智能合約有 (Noir)有 (Compact)
合規不支援有限開發中原生支援
架構L1L1Ethereum L2L1 (Cardano partner)

如果只看一句話:Monero 偏極致隱私,Zcash 偏可選隱私, Midnight 偏合約層的可程式化隱私。 Midnight 最吸引人的點不是「更神祕」,而是它比較像給開發者用的隱私工具箱。 但它也還很早,技術方向清楚,不代表生態和採用一定跟得上。

Web3PrivacyZK-SNARKsMidnightBlockchain