審核者:shaun @DAOrayaki

原文:The Creator and Ownership Economy

簡介

隨著以太坊網絡使用需求的不斷增加,網絡擁堵現象愈發嚴重,並以此推高了對象的交易成本。擴容,作為提升以太坊性能的解決方案,在過去的兩年,一直是用戶和極客所BUILd的焦點。特別是在今年,POW到POS,區塊鏈不可能三角、Rollups+分片、zk等一系列熱點詞,在以太坊合併事件的助推下,頻繁出現在大眾視野,也催生了很多以擴容為需求場景的技術探討與實踐,這其中不乏老調重彈,也有新技術,映入眼簾。

隨著ZK技術的發展助力,對擴容及其關聯性較強的隱私計算領域的未來發展,產生很多積極的影響。 DAOrayaki認為有必要在2022年收官之際,跟社區的小伙伴做一次系統性的總結,擴容的技術發展至今都有了哪些突破,產生了哪些解決方案,ZK技術的崛起,對擴容,對隱私計算技術的未來發展,又有著怎樣的影響?與之前播客不同的是,本次我們邀請到的嘉賓,是一位來自DAOrayaki社區內部的貢獻者,DAOrayaki在該領域的部分研究文獻,就是由他加工並創作完成,今天就讓他跟大家一起來聊一聊,擴容與隱私計算技術的發展現狀。

對話HTseaat:擴容與隱私計算技術的發展現狀(文字版)

主持人:Shaun

(DAOrayaki 負責人)

對話HTseaat:擴容與隱私計算技術的發展現狀(文字版)

嘉賓:HTseaat

(在讀研究生,研究領域也是主要關注在區塊鍊和應用密碼學層面)

正文

Q:歡迎,seaat,我們從最基礎的入門課程來梳理,我覺得我們在聊整個擴容,可能第一個涉及到的話題,還是從狀態通道開始,就是state channel,所以,有請seaat先跟大家交流一下什麼是狀態通道,State channel,歡迎seaat。

狀態通道其實屬於是一個鏈下擴容的技術,而我們平時不是叫它狀態通道,而是管它叫做支付通道。支付通道和狀態通道有什麼區別呢?支付通道我們主要要解決的問題就是目前區塊鍊鍊上的處理交易性能不足,支付通道主要是把這些計算移到鏈下,我們要在鏈下開啟通道,在這個通道裡面進行交易,從而來提高鏈上的和整個區塊鏈的處理交易的性能。

而狀態通道,是一個更general一點兒的說法,就相當於說我們不光想在這個通道裡面執行交易,其實交易我們抽像出來變成計算的話,就相當於是一加一減,畢竟交易就是相當我給你一塊錢,那我的錢包就要減一,對方的錢包就要加一,而狀態通道是一個相當於是我們可以在這個通道裡面做任意的計算,通用的計算,比如說一些鏈上的遊戲,就比如說鏈上的棋類的遊戲,它需要每一個回合需要同時在線,這種遊戲我們也可以放到通道來進行,當然這個時候就不能作為支付通道了,我們需要一個更廣泛的概念,就是狀態通道,但是在接下來的討論可以先簡單的稱為支付通道,因為狀態通道這個概念還是比較廣泛我們可以先細化一下。

Q:所以作為老概念,對今天整個行業的發展有什麼影響呢,比如說接著剛才聊到的這個話題我們再談支付通道Payment channel,像Payment channel這類技術應用都會應用在哪些比較廣泛的,實際的技術應用中呢?

相信大家對於鏈上和鏈下擴容都會有些了解,畢竟區塊鏈處理性能的局限性已經有一段時間了。所以說關於我們就要運用一個公式去提高區塊鏈的性能,也就是吞吐量除以這個驗證交易的一個開銷。

所以說針對這個公式,我們可能就有不同的方法。比如說,我們針對降低這個驗證交易的開銷的話,我們可以優化一下共識算法,例如從POW換成POS,或者再來換成DPOS。另一種方式是我們可以增加吞吐量,這其實就有很多方法,比如說鏈上的就是擴大區塊的容量,是最最簡單粗暴的一種方法。當然這個帶來的問題,就是擴大區塊容量之後,我們能驗證這些區塊的硬件的條件肯定會增加,從而導致了這個礦工,也就是整個可以驗證,參與共識的這些節點,會慢慢變少。這就造成了一個中心化的問題。

所以說,其實所有的擴容技術,我們想要達到的最終目標就是打破這個區塊鏈的不可能三角。因為我們也知道,區塊鏈的不可能三角是由安全性,中心化和可擴展性組成的。安全性是我們不能妥協的一個屬性。因為安全性代表了網絡受到攻擊的運行能力。所以說,我們更多是做一個去中心化和可擴展性的一個trade off,也就是權衡取捨。所以說,我們的目標就是如何在保證去中心化的同時增加可擴展性。而如果我們簡單粗暴地把區塊鏈的擴容作為一個就增加區塊兒鏈容區塊兒的這個容量的話,其實就違背了這個區中變化的特性。所以,Sharding之類的鏈上的擴容有一個問題,就是它需要對鏈上的整個區塊鏈框架進行修改。因此,它對現存的一些區塊鏈系統,像是比特幣和以太坊的改動會是比較大的。

而鏈下擴容的核心思想是這樣的:既然鏈上的驗證成本開銷這麼大,我們為什麼不能把這個計算放到鏈下來執行呢?畢竟並不是所有的交易,我們都有必要把它記錄在鏈上的。所以說,鏈下計算這個核心思想告訴我們並不需要對現存的區塊鏈的整個架構進行一個改變,而鏈下擴容這些方案是更適合,也可以更加容易地融入到比特幣,或者以太坊這些現存的區塊鏈系統。而且這些現存區塊鏈系統,它確實都有自己的這個鏈下擴容的一些方案。比如說比特幣,它有閃電網絡,以太坊,它有雷電網絡。

目前的這些應用的話可以等會再講。我們可以先把整個過程先梳理一下。其實主要的問題,就是區塊鏈目前存在一個鏈上處理能力不足的一個問題,所以說我們要怎麼解決問題呢?我們就是分出了兩部分,一部分鏈上擴容,就是通過修改區塊鏈,它本身來提高整個區塊鏈的處理交易的性能,或者我們另外一個技能樹呢就是把交易放到鏈下來就行,也就是鏈下擴容。而支付通道,也是屬於鏈下擴容的技術之一,當然這個鏈下擴容裡也會涵蓋其他的一些技術。

Q:所以聽下來,目前支付通道應該算是在鏈下擴容裡面比較主流的方式。

對,其實目前主流的幾種鏈下擴容有Payment channel支付通道和Rollups。其實大家可能聽的更多的是Rollups這個技術,比如說zk rollups,或者optimistic rollup,現在很多項目其實是這個。我先來簡單介紹一下這個支付通道和Rollups,它倆雖然都是鏈下擴容的技術,但它倆有些什麼區別?

首先,支付通道想解決的問題是頻次高的一個小微交易,就像我們日常生活中的場景。但是我們目前關於區塊鏈的共識以及它的整個特性,決定了它並不適合於普及到我們的日常生活中這種小微交易的場景,為什麼呢?首先是它的處理交易速度相對於主流的那些交易方式根本不是一個數量級的,這個得承認。其次就是,因為這些共識算法的不同,我們需要給礦工支付一定的手續費,而這一部分就很大程度上限制了它作為日常生活的一種支付的方式。比如說不可能我在商店裡面買兩塊錢的水,我需要給礦工支付五塊錢的手續費,那肯定是不可能的。所以說,支付通道就是為了解決這樣的問題。

其實我們也剛才也說了,我們並不是需要所有的交易都要放在鏈上進行記錄,所以我們就把這個交易放到鏈下來執行,支付通道簡單來說,其實就是這個通道的雙方各自在鏈上鎖定一筆錢,然後在鏈下開啟一個通道。這個通道,這個鏈上鎖定的錢,它可以作為面向通道雙方的初始餘額。比如我在鏈上鎖了十塊錢,你在鏈上鎖了八塊錢,那麼我們開啟了這個通道之後,我的初始餘額就是十塊錢,而你的這個初始餘額就是八塊錢。而且在這個通道內,所有的交易,是可以及時發送的,相當於說我就可以使用日常的那些支付方式直接轉給你。這個速度一般按理論上來說是一樣的,並且它不需要礦工進行驗證。這個為什麼不需要礦工驗證呢?換一個角度來看,我們為什麼要曠工來驗證這個交易?我們需要全部的節點,對這個交易的有效性達成一個共識,而在我們的這個鏈下通道裡面,我們的通道只有兩方,所以說,就不需要那麼多節點來對這個交易的有效性進行共識了。只要我給你轉了一塊錢,錢上面帶了我的簽名,你驗證了我的簽名,那麼就可以驗證錢是由我來發出的。這個共識其實就是我們兩方達成的共識,不需要一個多麼複雜的共識算法,也就免去了礦工驗證的成本。

也就是說我們在鏈上鎖定了錢,我們開啟了通道,因此我們可以在這個通道裡進行任意筆次的交易,而且不需要手續費之類的。只需要在我們做完所有的交易後上傳,比如我有十塊錢,你有八塊錢,我一塊錢一塊錢地轉給你,最後我把所有錢都轉給你了,你有18,我沒有錢了,我們只需要把最終的通道裡面各自的餘額,我們也可以叫狀態,然後上傳到鏈上,鏈上根據我們最終的狀態進行餘額的分配,核心思想就是我們不需要把所有的交易都記錄在鏈上,我們只需要記錄最終的交易多少錢就行了。

我們舉一個不是很恰當的例子,比如在一個大型商超裡面,我們購物後,在結賬的時候,不可能把每個購物車裡面的每個商品都掃一下,然後打張發票;我們肯定是需要把購物車裡的所有商品都掃描一遍,掃描完了之後打出來一張總賬單,根據這個來付款。

所以在支付通道也是同理,我們只需要把最終的錢,最終的各自通道內的餘額上鍊,進行一個金額的分配就可以了。而rollups技術跟支付通道技術,有區別的一點是在哪裡呢?支付通道是只需要把最終的狀態上傳到鏈上,但是rollups技術,我也不具體說是用什麼技術了,主要來說它很簡單,就是需要把一些中間的狀態上傳到鏈上。其實rollups技術,就是在鏈上,只存儲鏈下這些節點的一些狀態信息,而狀態信息是什麼?狀態就相當於是你鏈下的節點,它的地址是什麼,它在鏈下的餘額是什麼。這個我們都可以統稱為狀態。也就是說,鏈上的合約,其實只是存儲鏈下節點的狀態,而鏈下,整個過程之中發生的一些交易就會導致這些節點狀態的改變,就比如有些賬戶鏈下節點的賬戶餘額減少,有些節點的鏈下餘額增多,而在這個鏈下發生交易周圍當中狀態的改變會導致了鏈上記錄的合約狀態發生一些更改。每隔一段時間,鏈下需要把這一段時間內更新的這些交易以及這個更新的節點狀態打包上鍊,供鏈上進行驗證,以防止一些節點惡意篡改自己的狀態。比如這個鏈下節點裡面只有十塊錢,但是我偷偷把自己的狀態改成我有50塊錢,這種問題是需要避免的,所以我們需要把這段時間所有的交易放到鏈上,供大家來做交易有效性的驗證。

而支付通道和rollups技術這兩個鏈下擴容技術有什麼區別?其實大家也能看出來這些區別,就是這個支付通道只是提供最終的狀態,而rollups技術它需要提交一個中間的狀態,其實我們也能換個角度思考,就是支付通道它是把鏈上的計算和存儲全都轉移到鏈下,其實在這個鏈下開啟通道之後,在這個通道裡面進行任意的交易,其實是除了你通道之外是沒有人知道的,你也不需要放到鏈上去記錄,而rollups技術,是將這個計算和一部分存儲轉移到了鏈下,因為支付通道它是沒有一個時間限制的,你想開啟這個支付通道不想關的話,它是可以永久不關的。

所以如果只是單純的和通道內的這一方進行交易的話,其實完全不需要和鏈上做任何交互。而這個rollups技術是有時間限制的,是需要隔一段時間將這段時間內的這個交易類似壓縮包的形式上傳到鏈上,但這同時也會導致一個問題,就是支付通道的話就是兩個點,所以如果我這個節點想和別人做一些交易,沒有直接連接建立通道交易的話,這是個非常麻煩的過程,但是在rollups技術他的這種實踐邏輯下面,其實可以和鏈下的任意節點進行任意相互的交易,畢竟他是要每隔一段時間要把這一段時間內的所有交易更新後的狀態要打包上鍊,是要驗證的,所以這就是這兩個技術帶來的一個區別。

Q:感謝感謝,講的很詳細,我也認真的在聽,邊學習邊在思考。

有什麼不懂的嗎?不懂的也可以再問。

Q:但我聽下來,實際上rollups它的技術在應用層次會更方便一些,是嗎?我這麼理解對吧?

對,畢竟更多的場景並不是我們兩個節點之間建立通道就一直交易,更多日常生活中的場景是在這個商店買一點兒,下次再去另一個商店,並不會建立一個永久的通道進行交易。其實這個場景是比較有限的。所以rollups是更加貼合現實場景的一種技術,但它的缺點也是有的,就是你需要隔一段時間把這段時間內的信息上鍊。所以它就是把一部分的計算和存儲放到鏈下,另一部分存儲是在鏈上的。

Q:所以接著我們剛才聊到的,因為現在主流應用Payment channel的可能會更多。那您可以分享一下更多關於Payment channel的主流應用場景嗎?

就目前來說,Payment channel的應用場景更多還是放在鏈下計算,如果你要說具體應用在什麼場景比如說醫院或者什麼之類的話,其實我倒也舉不出來比較詳細的例子。因為線下擴容的這個技術,大家更多是把目光放在了rollsup上面。在支付通道這方面其實是比較小眾的。最近還有很多zk rollsup的方案很火熱。

Q:但實際上會有一個支付通道網絡的概念是不是?這個可以跟大家聊一聊嗎?

這是因為,如果我想和沒有建立通道的鏈下節點進行交易的話, 我們應該怎麼做呢?這其實是支付通道的一個問題。支付通道不管是從學術上,還是工程實現上來說的話就是非常簡單的。在鏈上,不管是在合約還是什麼東西里面,我們存一筆錢,其實就相當於是在鏈下做一些協議的要求。相當於是在鏈下開啟一個通道,抽像出來一個通道,所以說它並沒有什麼問題可研究的。主要的問題就在於如果我想和沒有和我直接建立通道的節點進行交易,那我這時候應該怎麼做呢?這時候其實就引入了一個叫支付通道網絡的概念。為了解決問題,這裡就引入了六度空間理論(又,六度分隔理論(英語:Six Degrees of Separation)認為世界上任何互不相識的兩人,只需要很少的中間人就能夠建立起聯繫。哈佛大學心理學教授斯坦利·米爾格拉姆證明平均只需要6步就可以聯繫任何兩個互不相識的人。),通過六個中間人就可以認識一個陌生人。如果我們把每個人之間的聯繫抽象成線的話,我們就得到了一張社交網絡的圖。在支付通道中也是同理。我們把鏈下節點作為點,而把兩個點之間連接的支付通道作為一條線,我們得到類似的一張圖。所以說就算我和別人沒有直接的通道的連接,我們可以通過一些中間的節點合建通道連接,讓他們作為轉發。如果A想和D進行一筆交易的話,A和B連接了有支付通道,B和C有連接,C和D有支付通道連接,那麼我們就可以把這個錢從A轉到B,從B轉到C,然後從C轉到D。這其實就間接地完成了這筆交易,通過了B和C兩個節點的轉發,就能在鏈下的整個支付通道網絡裡面完成這種間接的交易。所以這也是為什麼比特幣的Payment channel項目叫閃電網絡,而以太坊的叫雷電網絡。都帶了“網絡“這個詞。這也會引出來一些理所當然的問題。我們怎麼能保證中間B和C收到錢之後繼續往後轉呢?為了解決這種問題,我們就會有一些技術來解決這樣的問題。

比如說閃電網絡,就提出了一種智能合約,我們也就是Hashed Timelock Contract,簡稱一般都叫HTLC,這個技術是什麼意思呢?比如接收方D,它隨機生成一個密鑰,以及對密鑰生成一個哈希,相當於是這個D,它有一把鎖和一把鑰匙,它需要把這個鑰匙給這個交易的發送方,於是這個我們把這個錢先放到一個箱子裡面,然後拿鎖鎖上,然後我們一直傳遞的是帶上鎖的箱子,一直傳遞到了D這塊,如果B和C節點想要得到中間轉發的這些錢的話,就需要最終的接收方D在收到消息之後,要把這個鑰匙給其他人,才能把這個金額拿出來,簡單來說就是這麼一個思想,也就是通過技術是要保證原子性,原子性是什麼呢?就是多通道路由的轉發交易,我們要保證這個交易要么成功,要么失敗,就是不可能存在一個零和一之間的狀態,不可能一個交易卡在B這里永遠不動了,所以說用了HTLC技術,就能保證這個錢要么成功的轉到了D這裡,要么這個錢原封不動的再退回A,這個技術主要解決的是之前中間這些節點轉發交易的做惡的問題。

Q:他壓縮了B和C作惡的空間,不給他們做惡的機會。

其實後面也能衍生出來一些支付通道網絡特有的問題,我也可以和大家簡單說一說,比如兩個節點建立了一個支付通道,在通道裡面我們都有100塊錢,這時候通道就是雙向的,我可以給你支付,你也可以給我支付,但如果我們通道裡面錢變成了我是0,你是200的話,那通道變成了一條單向的通道,這個場景有什麼應用場景呢?

兩個節點的身份可能是一個是商店,一個是買家,交易的流向只有買家一直給商家轉錢,因為買家需要買東西,萬一這個通道裡面金額耗盡了會怎麼辦?

一般的話是需要把這個通道關閉,然後再從鏈上重新開啟一個通道。但是這個方法帶來一個問題,就是需要和鏈上進行交互,交互的話就會產生手續費,這就是比較小的問題,所以比特幣的閃電網絡提供了比如loop的非託管服務來解決這樣的問題,相當於是我們可以不和鏈上進行交互,相當於通過一些技術能夠把錢再轉回我這里而不造成金額的損失,這個就是通道再平衡的問題。這是一個比較小的問題。還有一個問題就是如何保證轉發的交易是成功的呢?比如我想轉發10塊錢,但是B和C的通道,B只有5塊錢,就算B和C沒有做惡,這個交易必定是不成功的,因為通道裡的金額是小於我想交易的金額。

這個問題有兩個解決辦法,第一種解決辦法就是,比如節點A知道網絡裡面所有其他節點個餘額,比如知道B和C通道裡面有所有的錢了,可以走這條路轉換發交易,但這就會帶來隱私的問題,畢竟誰都不希望讓別人知道自己錢包裡面有多少錢。

所以比特幣的閃電網絡,就想了這麼一個辦法,不公佈通道裡面各方的餘額是多少,但是公佈在網絡上的是什麼信息?是兩方通道餘額加起來的總和,把這個信息公佈在網絡之上,你可以根據公佈在網絡上的通道的餘額總和,去猜它有沒有足夠的錢來完成交易,這個是能保護隱私的,但帶來的問題是整個網絡的交易成功率不高,這個問題怎麼解決?其實有一些方法,比如既不能公佈真實的餘額在網絡裡面,它可能會造成隱私洩露,那麼能不能在網絡上公佈虛假的餘額,比如我和你這個通道裡面,我們分別有十塊錢和八塊錢,那麼能不能公佈在網絡上各自通道裡面的餘額是七塊錢和七塊錢,就是相當於是用臨時證明技術,我證明通道裡面的真實餘額是要大於等於公佈在網絡上的虛假餘額的,這樣既能保護到隱私又可以保證交易成功率。另一個問題就是,比如我B和C公佈在網絡上的餘額,是一和八,而我想轉六塊錢,這時候我就能確定它的通道裡面是至少有七塊錢和八塊錢的,比如說用零知識證明我生成一個proof來證明這個通道內的真實餘額是要大於公佈在網絡上的餘額的,相當於是用了一些密碼學的技術來statement真實餘額是要大於虛假餘額的。

我給其他人證明這個陳述是正確的,其他人就可以看虛假餘額,進行交易的轉發,這個就是一些大家在新研究的技術來能在保證隱私的情況下,提高整個網絡的交易成功率,但這些其實還沒有實際部署在這些具體的工程實踐上。

Q:OK,我稍微做個總結,不對你糾正我,因為我不是技術背景出身,實際上現在用到的其實更多的是引出了支付通道整體網絡的概念。那在支付網絡裡面,其實能夠發現現在有些問題,比如有一個存在這種多通道多通道交易的問題,A轉B轉C,那麼CB和C的作惡的問題,它現在有一個大體的解決思路,它會有HTLC這種技術去解決通道交易,同時,好像在整個的這個環節中,它還會有一個金額的問題,因為它涉及到了一個可能重新關閉再開啟通道,和鏈上交互的開銷的問題,那可過這種像loop這種你談到的非託管的服務來解決。

當然還有一個可能就是涉及到剛才我覺得還是蠻重要的,就是你談到的這個隱私的問題。因為確實我們本身在在做這個領域研究時候,會從各個角度去去討論,那最終都會落到一個點,就是關於隱私,因為去中心化這件事情本身,它對於對於隱私來講,就是有一點兒矛盾的,當去中心化對隱私屬性就要變弱,但是隱私,本身它又是一個強屬性的東西,所以剛才我們有聊到了關於問題去解決方案,所以在這裡,就會引出話題也是我想問到的,我這兩年在研究隱私計算,其實我對隱私計算,我還沒有特別明確的概念,所以今天也是想藉這個機會,我想請教您的隱私計算

它大體說通俗化理解是一個什麼概念?它跟我們今天談到的,這種隱私問題什麼的,它是有什麼樣的關係呢?

其實我對隱私這方面研究也不深,我只能提出個人的一些拙見。

其實隱私計算,我們通俗化理解就是,隱私計算,一個隱私一個計算,那其實把這兩個詞拆解出來看的話,就是我有一些隱私的數據,而我們想用這些隱私的數據進行計算,得到的一些結果,這就是隱私計算一個通俗化理解,這個理解起來也會有一些有些拗口,有感覺是個矛盾的問題。就不想把這些數據公開,但是我們一百個想把這些數據不公開,又想把這個數據拿出去做計算,但其實這個場景也在我們生活中其實挺常見的,比如說拿最常見的醫院,醫院病人的數據,我們想去拿這些數據去訓練一些模型,比如說訓練出來這個模型,可能就是能輸入一些病人的一些這個病狀特徵,他能通過訓練出來的模型,我們能夠得到診斷,可以簡單的歸咎到哪一哪一類的病例,可能這個就其實很大程度上其實能減少醫院的壓力,相當於這相當於是就是馬上就醫,但是醫院的病人的病例數據,他是不能公開出來的

所以說,這其實就和隱私計算的場景非常非常符合了。這樣的場景其實還有很多的,比如說一些公司的一些客戶的一些數據是不能公開出來的,但是我們又想拿這些數據和其他的公司進行一些交流,這個場景是在生活中是有很多的。

Q:那現有的就是區塊鏈領域,圍繞隱私計算的技術的類型都會有哪些?它會解決什麼?區塊鏈的分類之類的。

其實區塊鏈的話,目前的應用場景主要還是金融以及虛擬貨幣方面,它的隱私保護其實就是保護交易的隱私,畢竟現在電商的一些交易,輸入取款哈希的話,都能查到交易,但有時候我們就是不希望交易是被大家看到的,這方面對隱私計算的關係,更多的就是保護支付的隱私。我不想讓網絡上所有的節點知道我給誰轉錢了,轉給誰,轉了多少錢,但是其實是跟目前去中心化的想法是違背的,就是既然我不知道這筆交易是由誰發送的,是發送到哪裡,那我怎麼判斷這個就是他發送這筆金額,他到底有沒有大於他自己本身的錢?

比如說我在這筆匿名的交易裡面,我說我要發送90塊錢,但是我本身賬戶裡面我只有50塊錢,如果是在一個驅動性化公開的網絡裡的話,他可以通過交易發送方的地址很容易查到賬戶裡面是有多少錢的,但是如果把這個交易的發送方和接收方連起來的話,就並不知道交易的發送方,他到底有多少錢,到底他的錢數能不能夠支撐他完成這筆交易,所以這其實就是隱私計算和區塊鏈之間矛盾的一個地方,也是主要研究的一個地方,這也就是為什麼這時候大家特別想用零知識證明,就是之前火的,他其實用零知識證明可以做匿名交易的區塊鏈,他們主要用了零知識證明的什麼屬性呢?其實他們用的那個方案,基本都叫ZK ,大家其實應該聽說過,就是零知識證明就是listproof裡面的一條技術路線,這條技術線比較好的一點是什麼呢?它生成的proof具有簡潔性,就相當於它到proof,不管輸入,電路,你前端的電路是多大,但它最後生成出來的proof,它都是一個常數,而且都是很小的大小,而且驗證時間都是在微秒級的,相當於是就是把所有的交易接收方作為隱私輸入,放到這個零知識證明里面,我們通過生成一個證明去向大家去驗證,大家只要驗證了這個證明proof放到鏈上,而鏈上這個共識節點,只要驗證這個proof。通過了之後,就證明我們這個交易是沒有問題了,那麼這個交易通過這個proof,也看不出來交易的發送方是誰,其實方是誰,然後就能完成這一點其實這就其實也挺奇妙的,這個如果大家對這個零知識證明這個概念不是很熟悉的話,其實我這裡可以簡單介紹用一個例子,舉個一個例子,我們在一張全是海豹的圖裡面我說這個圖裡面它有一隻企鵝,但是我又不想指出來這個企鵝在哪裡,那麼這時候我們可以怎麼做?就可以把整個張圖拿一張黑布蓋上,我們在企鵝在的位置,把那一塊兒挖出來,把企鵝在的那個地方暴露出來,剩下的地方全是拿黑布我們蓋上,然後給大家看黑布,這樣的話,我既沒有暴露企鵝的位置在哪,我也向大家證明了這個圖裡面確實是有企鵝的,這其實就是零知識證明,其實它也沒有洩露企鵝的位置在哪,但是也向大家證明了這個圖裡面確實是有企鵝的,這就是一個非常簡單易懂的零知識證明的例子,當然這個具體複雜的零知識證明的一些技術的話,它就涉及非常非常複雜一些數學密碼,所以說這裡話就不跟大家介紹,然後還有一種技術,就是多方安全計算,想想大家也是應該是比較熟悉的,它主要應用的場景和區塊鏈的是什麼場景呢?其實它的場景主要是每一方都有一些隱私輸入,而我們都想用這個隱私輸入,都將把各方的隱私輸入結合起來,進行計算得到一些結果之類的,那麼就是舉個最簡單的例子,我有兩個百萬富翁,這兩個百萬富翁,想在就不自己不想暴露自己的這個錢多少,但又想兩方比較一下,這個誰的這個錢數更多,這其實是很經典的一個多方計算的場景。

所以說,放到區塊鏈裡面,我們可能肯定是會有這樣的場景的,我們在智能合約裡面,我們有一點隱私輸入,而這個隱私輸入我並不想暴露出來,而我我們又想在這個鏈上進行一些通用的計算,比如說我們在一些這個圖靈語,有圖靈完備的計算語言的,圖靈完備語言的,我們在智能合約上想計算一些東西,想用一些隱私的數據,這時候的話就就會用到安全多方計算,目前安全多方計算在區塊鏈裡面應用的場景,更多的就是智能分類裡面,因為安全多方計算就是需要進行複雜計算的,它並不是一個比如說只是物理交易,這個一下一點這樣的簡單的算術,所以說,它可能更多應用場景,就是在能處理稍微複雜計算的一些區塊鏈,就比如說以太坊,它有智能合約,它可以處理一些計算,那麼就是就可以把這個安全多方計算部署到合約裡面進行計算,其實零知識證明大家都能看到,其實零知識證明它的應用場景,更多的像是一個外方計算的場景,相當於是我們有數據,但是我們這個本地的算力又不夠。那時候我們需要再做到雲上的服務器之類的計算,可能還是把這個數據給到服務器,計算跑出來的結果,然後同時生成證明,我們是通過用了服務器上指定的模型跑出來結果,而不是用了個隨便的模型,我們來拋出來結果。這兩個隱私計算的場景,它並不是一個互斥的。

而是一個可以交叉重疊的一個場景,在區塊鏈裡面應用的話,我可以簡單簡講一個,現在還應用場景沒有那麼那麼廣泛的一個例子,就比如安全多方計算,計算出來的結果,參與安全多方計算的這個中間內,是認可這個計算結果的正確性的,但是如果把計算結果放到成員以外,就是讓其他人去看我們的這個結果的話,他憑什麼認定這個結果就是正確的?因為首先他不知道你的隱私輸入是什麼,他可能知道你計算的流程過程,但是他不知道你的輸入,所以說他不知道這個結果是否是正確的。它會存在這樣的問題,所以我們這時候就可以用零知識證明對安全多方計算的結果,我們生成一個prove,去驗證,去給所有人去公開,然後給所有人來驗證成員內的安全多方計算的結果,它是正確的。其實這個問題也叫公開可驗證的一個MPC,這個更多的是在學術研究上比較關心這個問題。工程實踐,是這種例子是不是很多的,但是我舉這個例子就是這兩個技術,它是可以交叉融合在一起的,並不是互斥的關係,隱私計算目前技術,和區塊鍊主結合比較緊密的就是零知識證明和MPC,關於這個還有一部分,就是這個聯邦學習,但聯邦學習這塊兒和和這個區塊鏈的聯繫,它並不是那麼的緊密。而且還有一部分就是基於硬件的隱私計算,隱私計算也說來也很簡單,就相當於是我們把這個計算放到特定設計的一個硬件上面進行計算,在這個硬件上,跑我們的隱私數據,這就能算隱私計算了,可信執行環境一般都叫PE,這但是其實說實話目前這些。零知識證明也好,安全通話計算也好,它雖然有比較強的密碼學,以及理論上的安全性的證明的嚴格的理論證明,但代價就開銷非常的大,目前其實更多的應用,如果想應用一次計算的話,還是應用一億這種的可信硬件來做計算,雖然你的這個計算說實話,這是依託於你相信這個這個硬件是安全的,其實這類的方法其實都可以叫直覺的,就隱私內存,其實就是你相信它很安全的。那也可以用,就是但是它是沒有經過嚴格的一個理論證明,就是嚴格的安全性證明,而像靈零知識明或者ipc,用一套UC框架,能證明它的安全性,但代價就是它的這個計算成本非常高。

尤其是在我們鏈上,算力本來就非常有限的情況下,我們再去計算這些密碼學的計算,不是特別現實,這也是目前阻礙,比如說這些密碼學知識,密碼學的這些技術,這就證明進一步放大鍊上進行計算的問題但其實。零知識證明它是和我們之前說的roll ups,是每隔一段時間需要提交這段時間一些交易的數據,相當於是打包上傳鏈上,這種我們其實可以用零知識證明,其實零知識證明是作為一個很好鏈上和鏈下的一個橋接點,相當於是就是dick snack,就我們比如說我們用dick snack 。還有一個特性就是剛剛說的那個簡潔性的那個特性,我們生成的proof,它是一個常數級別的。比如說最近特別火的那種ZKZKY,那我們是否就可以通過生成一個proof,把這個proof放到鏈上,供這個大家進行一個驗證,來驗證這段時間的交易的這個是否是正確的狀態的轉換是否是正確的,而不需要把所有的交易在。在一併上傳了,當然這個雖然這個鏈上的交易都是經過壓縮的,但其實還是會有一定開銷的,所以說,用零知識證明的話是可以,就是把這個開銷再降,當然這裡它是其實沒有用到零知識證明的,因為它不需要隱藏什麼內容,它更多是用到了簡潔性,就相當於是我們生成了一個常數大小的一個prove,我們只是把這個proof鏈上進行驗證就能行,我們這段時間所有的交易所有的狀態更新都是正確的,而不需要把所有的交易來放到鏈上並行存儲,這其實也是一筆比較大的開銷的,就是零知識證明做放在這裡,作為這個點的話,其實是蠻好的。

所以說這也是為什麼目前這麼多的這些項目,現在在研究,就比如說bk rap,像那個研究CPVMCPVM,現在有很多項目在研究這些。

Q:OK,感謝感謝,今天最後一個話題了,就是我們剛剛聊到擴容,聊到計算,然後我們其實也聊了一些通訊的和一些新型的一些技術。你怎麼看待未來,不管是擴容,或者是我們今天聊到隱私計算的,技術的發展,尤其是剛才我們談了一部分,就是ZK這種老技術新應用,你怎麼看待未來整個這個領域的發展,這是開放式問題,你隨便聊這個這個問題。

這個問題的話,其實我感覺就是目前這個區塊鏈擴容肯定是一個已經延沿用了很多年的問題,而鏈下擴容,我覺得相比鏈上擴容來說,它能更好的和這個鏈上,在不改變區塊鏈本質框架情況下,它能和區塊鏈能做更好的結合,就我覺得雖說鏈下擴容相比鏈上擴容,我覺得是未來。可能是個更火爆的發展的方向,而且從目前來看的話,不管是我們,而且從目前來看不管是這個項目的數量,以及項目的開發,不管是規模來看的話,鏈下尤其是rollups,這一系列的這些鏈框和技術,它是這些規模是遠遠大於鏈上控,比如說沙琳,或者是這個共識,修改工人算法之類的,這種方案以及像支付通道這種方案,他們這個質量是完全不一樣的,所以我感覺就是目前未來的話,更多的是會關注點是在鏈下這一塊兒,我覺得未來模塊的區塊鍊是好的方向,就相當於是把各個層結構,之前的話是相當於是共識節點,區塊鍊鍊上的一個節點,既要共識驗證交易有效性,又要存儲這些交易所有的佈局,然後又要發交易,其實這個算力有限的,就是絕大多數人靠自己的算力有限的這些設備的編輯的,這些設備的話,它是實現不了這一點的。所以說這也會導致了隨著區塊鏈它的這個區塊的鏈越來越長,這個體量越來越大,能夠參與共識的這些共識節點,它會越來越少,因為它的硬件成本會越來越高,因為它畢竟要把整條鏈都要盪下來,就是所有的這個鏈的數據都要盪下來。

所以,這其實跟我們去中心化的思想是背道而馳的。所以我們我覺得未來更多可能就是把區塊鏈的各層結構,就比如共識層,就是分給共識節點來做。還有一些可能是存儲節點,就是專門存儲鏈上的數據,還有一些新節點,可能就是從這個存儲節點,就是單純的就是從那拿出數據來用,比如說鏈下擴容,這些技術能更好的結合起來,這種其實就也就不太分鏈上鍊下了,這時候可能就分各個層了,這時候可能鏈下的話,我們可能就能叫他。上層,比如說共識化為共識層,就是說可能就不是分鏈上鍊下這麼細了,但目前想把比如目前這些現存的這些區塊鏈,以太坊,比特幣改成模塊化,區塊鏈它當然也有工作也在改,但是這個效率,以及並不是比較慢的,但我覺得模塊化區塊鍊是未來很好一個發展方向,我覺得是能從根本上來解決的交易的擴容的問題,並且隱私計算它雖然是個老概念,但它並沒有說它老概念的話,它可以很老,它可以八幾年提出來零知識證明這些技術,但它實際應用的話還是在最近在一零年以後,就比如說第一個協議,它是可以相當於是能把研製證明能夠真正實際應用起來,但所以說它離真正的怎麼降低密碼學的計算開銷,其實還是需要很大的一段路來走的,所以說未來零知識證明以及東華經濟。不管是學術研究還是實踐,他如何對去跟我們區塊鏈結合是一個研究的方向,它有一很大一部分是在研究,可能這這很大一部分是與學術研究,就是研究我們怎麼去把這些開銷降低一級,可能我們針對某些特定的場景,我們去做怎麼做零知識證明的優化,而且肯定不可能就是把這個零知識證明這個組件,按這個密碼鍵組件先搬過來用,我們就能做一個很好的結合,這肯定是有難度的,所以目前發展的話,就是我們如何這個提高性能,降低這些計算開銷。

另一個就是如何和目前現存的這些一些方向,比如說匿名交易,或者是rollups,和這些做更好的結合,可能前面一個降低開銷,這個是學術界做的事情,而後面這個人事證明MPC和區塊鏈間結合,這可能更多是工業界需要研究的一個問題。其實我對計算區塊鏈發展,我是這麼看的,

總結

以太坊的「共識邏輯改變」與「擴容」,構成了以太坊升級的兩大主題。其中以太坊的擴容進程,旨在提升以太坊的處理性能/TPS,只有在供給能力提升後,依靠供需關係定價的手續費才能變得更加便宜。短期來看, 現有rollup技術更加成熟、運用更廣泛,但從長遠來看,ZK Rollup隨著大量優秀的開發人員投入到相關研究中,在未來會是更優的擴容方案。 ZK-Rollup 技術的基本原理,將使其,有能力達到更快的速度、更高的安全性,更全的性能,從而帶來更加廣泛的應用。而ZK技術本身,除了用於交易隱私保護,也可以用於數據隱私保護,結合隱私計算旨在打破數據孤島,促進數據流通的背景,輔助於區塊鏈技術良好的可擴展性,未來可以支持更大規模的隱私計算場景,滿足不斷增長的數據分析需求。

再次感謝HTseaat的分享,讓社區的小伙伴收益良多,關於擴容與隱私計算,我們今天只是開了個小小的話頭,在新的一年,我們會更加不斷的進行相關領域的研究、探討與分享。