今天跟發小去樓下那個新開的洗浴中心,洗到一半他人不見了。我在休息大廳等了挺久沒看到人,就去問服務員,說見過我朋友嗎。服務員說去客房了。我說那我去找他,他攔住我說客房是私密空間,不能隨便進。


我當時覺得這個規則很合理

大堂是公開的,誰都能進都能看見;客房是私密的,外人無權進入但服務員知道你在哪個房間,緊急情況可以聯繫到你。兩套規則同時運行。


$NIGHT 所在的@MidnightNetwork ,白皮書裏有一個設計叫雙公私狀態賬本在區塊鏈上做着類似的事情


現有公鏈的問題是:全量公開。你在以太坊上做任何事,發送方接收方金額又或者時間戳,全部躺在公開賬本上可查。這對審計友好,但對商業應用是災難。一個企業把供應鏈合同放到鏈上執行,競爭對手第二天就能看到它跟誰合作、付了多少錢、合同週期多長。

這種透明度在商業環境裏不是優點,是致命缺陷。


Midnight把賬本拆成兩條平行軌道。公開狀態軌道上的數據對所有人可見,包括#night 代幣的轉賬記錄、治理投票、共識數據,這些東西需要透明才能建立信任。

私密狀態軌道上的數據只有相關方能看到,用ZK證明來驗證合法性——驗證者能確認這筆交易是合法的,但看不到交易內容本身。


這兩條軌道不是兩條鏈,而是同一條鏈上的兩種數據處理方式。開發者用Compact語言寫合約的時候,可以精確控制哪些數據走公開軌道,哪些走私密軌道。

一個醫療應用可以把患者身份信息放在私密狀態裏,把合規證明放在公開狀態裏,監管方驗證合規不需要看到患者數據,患者數據不需要上公開賬本。


我覺得這個設計真正解決的問題,是區塊鏈一直以來的一個根本矛盾:去中心化需要透明來建立信任,但商業應用需要隱私來保護數據。

這兩個需求在單一狀態賬本上是互相沖突的,你只能選一個。Midnight的雙軌設計繞開了這個非此即彼

需要透明的東西透明,需要私密的東西私密,由應用開發者根據具體場景決定

當然這個設計在實際執行中有很多細節需要處理。私密狀態的數據存在哪裏?白皮書裏說私有數據存在用戶本地機器上。這意味着如果用戶本地數據丟失,對應的私密狀態可能無法恢復

鏈上存的是ZK證明,不是原始數據,證明可以驗證合法性,但找不回原始內容。這個數據主權的設計對用戶是好事,但也意味着用戶需要自己負責數據備份,這個責任轉移在普通用戶那裏會不會變成障礙,是我目前沒想清楚的地方。


還有一個問題:私密狀態和公開狀態之間的交互怎麼處理?一筆涉及私密數據的交易,如果需要觸發公開狀態的變化,中間的驗證邏輯怎麼保證不泄露私密內容?

白皮書裏說用ZK證明來橋接,證明私密數據滿足某個條件,然後觸發公開狀態更新,整個過程不暴露私密內容本身。但實際實現的複雜度很高,測試網上跑起來是一回事,生產環境裏大規模使用是另一回事。


回到洗浴中心。我發小在客房裏幹什麼,服務員不知道我也不知道,但他在不在這棟樓裏,服務員知道。這個知道他在,但不知道他在做什麼的狀態,就是Midnight雙公私賬本在做的事。