公鏈最大的優點是透明,但這也剛好是它最不適合企業的地方。 假設一家公司用鏈上錢包付供應商,競爭對手只要知道地址,就能一路看到付款頻率、金額區間,甚至猜出你在跟誰合作。
從工程角度看,這其實是資料分層的問題: 哪些資料要交給共識層,哪些資料只該留在使用者端。 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 的流程大致是:
- 使用者在本地執行合約,讀取公開狀態和自己的私有資料
- 本地算完後生成一個 proof
- 把 proof 和必要的公開更新一起送上鏈
- 鏈上只驗 proof,不看私有資料本身
這整件事最像的其實不是傳統 on-chain execution,而是off-chain execution + on-chain verification。 例如一個 KYC 合約,鏈上公開更新的可能只是「這個地址可以進入某市場」, 不是你的護照、姓名或住址。
Compact:寫隱私合約的語言
如果每次都要手寫 ZK 電路,幾乎沒幾個開發者受得了。 Compact 的價值就在這裡:你用接近 TypeScript 的方式寫規則,再把 public / private 分清楚。
// 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 生態綁得很深;另外它現在還在很早期,驗證者開放程度也還在往外擴。
各方案的取捨
| Monero | Zcash | Aztec | Midnight | |
|---|---|---|---|---|
| 隱私模式 | 預設全隱藏 | 可選 | L2 Rollup | 可程式化 |
| 密碼學 | Ring Sig | ZK-SNARKs | ZK-SNARKs | Recursive ZK-SNARKs |
| 智能合約 | 無 | 無 | 有 (Noir) | 有 (Compact) |
| 合規 | 不支援 | 有限 | 開發中 | 原生支援 |
| 架構 | L1 | L1 | Ethereum L2 | L1 (Cardano partner) |
如果只看一句話:Monero 偏極致隱私,Zcash 偏可選隱私, Midnight 偏合約層的可程式化隱私。 Midnight 最吸引人的點不是「更神祕」,而是它比較像給開發者用的隱私工具箱。 但它也還很早,技術方向清楚,不代表生態和採用一定跟得上。