導語
在之前的文章裡,我們曾提及CPoC(條件容量證明)是一個在PoC(容量證明)的基礎上,吸收了PoS(權益證明)等當前流行且有效的共識而形成的一種博採眾家之長的共識,並且憑藉它更加公平合理地進行數字資產的分配以帶動整個生態社區的繁榮。而CPoC所有的諸如抗算力集中化、抗ASIC化和節能問題等,我們已做了深入討論,在此不再贅述。
Figure 1:PoW與PoC在單位時間內的功耗對比
但我們之前還留有一個問題未能解決,即CPoC的技術細節究竟是如何架構的。本文將盡可能地討論CPoC在技術方面的基本原理,增加讀者一個對該共識的全面理解,以此增強用戶對採用該共識的區塊鏈項目的信心。
此前我們已經提及,CPoC本質上是在PoC的基礎上,引入了PoS的質押激勵,並且將一部分通證作為激勵的手段發放給質押者的一種複合式共識。打一個簡單的比喻,假如我們把CPoC看作一棵樹,那麼PoS就是它的葉子和花,而PoC則是其莖幹與根。由此可見,如果要深度理解QitChain所採用的CPoC共識,那麼理解其根基與先驅者——PoC便是必不可少的一步了。
枝幹與根:PoC的基本技術原理
PoC是一種基於容量證明的共識機制,即存儲服務的提供商通過提供存儲空間來爭奪區塊鏈的打包記賬權力,由此獲得對應區塊中所包含的數字通證激勵。顯而易見,在PoC的共識下,存儲服務商提供的存儲空間越大,獲得打包記賬和獲取數字資產的機會也越大。
在分佈式存儲領域,存儲內容的擁有者和請求者無疑是兩個最為重要的角色。擁有者提供存儲空間,請求者基於文件的閱讀、編輯和使用等權限向擁有者發起請求,二者之間明顯存在驗證與被驗證的關係。從角色扮演來看,請求者是驗證者,擁有者則是證明者。舉一個簡單例子,假如Alice向Bob發起要求查詢其磁盤內的某一個文件F,這就相當於Bob向Alice證明,該文件F確實存在於其磁盤中。
需要重點強調的是,PoC的核心理念之一,在於致力在存儲資源上達到“證明者低效,存儲者高效”。該理念保證了驗證者可以花費很少的資源和時間,用以證明所有者對某個空間或某個文件的權屬關係。這在技術上實施並不困難,在此我們會盡量簡單地討論一些技術上的細節。假若讀者對密碼學或圖論知識有一定了解,則易理解下述闡述。
現在我們開始設想一個情境,Alice準備向Bob發起驗證,要求後者證明有一個擁有特定空間大小的文件F儲存在Bob的磁盤之中。
在PoC的語境下,文件F的目的是為了證明以下事實:證明者確實使用了一定量的存儲空間。因此它對於該文件F並沒有形式上的要求。在PoC中,文件的內容是一種有向無環圖結構,該結構圖示如下:
Figure 2, 3:有向無環圖
有向無環圖的定義為,對於該圖中的所有點x,按照箭頭所示的路徑都無法返回其本身。在文件F的有向無環圖結構中,我們定義其任意節點k,定義函數E(k):
該函數中,點k’是點k的直接前驅節點。而如果k沒有直接前驅結點,即當沒有任何一個節點指向節點k的時候,則函數
。對於文件F的有向無環圖,作為證明者的Bob需要將每一個屬於F的節點k進行運算並且儲存每一個E(k)以備Alice進行隨機抽取檢驗。
從以上過程中我們發現,在Bob儲存的所有數據中,每一個節點的值都經過至少一次哈希運算,且任意一個有直接前驅節點的哈希值來源於其所有前驅節點的哈希值運算。因此,Bob所生成的數據集實質上已經構成了一棵Merkle樹。而整個驗證的過程,也即是由這棵樹開始的。
整個驗證過程的第一步是由證明者Bob開始的,Bob計算該Merkle樹的根節點θ並將其發送給Alice。作為驗證者,她需要向Bob發起驗證請求,Alice將會在整棵Merkle樹中隨機抽取一個節點j,並要求Bob給出E(j)的值,以及該值在Merkle樹中所處的位置。如果Alice能夠驗證Bob所計算出的哈希值E(j)的合法性,並驗證E(j)確然地存在於頂點為θ的樹中,則該證明成立。
通過以上步驟,我們完成了一個在PoC共識下進行計算的過程。通過對該過程的描述,我們可以很明顯得看出,當存儲供應商所能夠提供的硬盤越大時,則所能夠儲存的有向無環圖越多,首先完成計算並獲得區塊打包權及其數字資產獎勵的概率也越大。
作為PoC的改良共識,CPoC基本上繼承了PoC的算法原理。儘管我們之前已經說明了PoC在相比於PoW和PoS時的優勢,但我們也必須看到,PoC仍然有其本身弱點,這些弱點包括:
目前願意接觸PoC共識的開發人員還相對較少,目前只有諸如HDFS和Burst等幾個項目(而且就目前的發展情況來看這幾個項目還算不上成功)。因此目前還無法形成強有力的團隊和完善的項目去推動整個PoC的生態環境的發展。
由於P盤過程需要將存儲服務商的硬盤空間全部用plot文件填滿,但這些能夠填滿全部硬盤的plot文件除了爭搶區塊的打包記賬權之外並沒有其他的作用。因此其從本質上來說,仍然是對大量的存儲空間的浪費。
雖然PoC共識解決了當前PoW共識所帶來的一系列問題,諸如能耗過大、硬件的ASIC化以及過高的技術門檻等問題。但它依然沒有從根本上解決硬件競爭的問題,換而言之,存儲服務商仍然可以聯合起來用大量的存儲空間去進行壟斷,從而對分佈式的數字資產分配造成威脅。
如果PoC共識在區塊鏈業界內大受歡迎並由此變得有利可圖,計算機病毒或者惡意軟件可能入侵並非屬於PoC共識下的存儲系統的計算機並且將它們變成“肉雞”用以爭奪區塊的打包記賬權。在PoW共識下,許多計算機會因為這些惡意軟件的入侵導致自身速度明顯變慢;但在PoC的共識下,這種攻擊會變得更加隱蔽——因為“肉雞”的使用者很難分清楚佔用量過大的文件究竟是產生於系統自身還是受到攻擊被plot文件所填充。
葉與繁花:基於PoS的條件化模型
與採用單純存儲空間進行計算的PoC不同的是,CPoC引入了PoS的質押機制,並且將這種質押機制變成了一種條件化證明。該條件化證明由兩個元素所共同組成,即存儲提供商和全網中質押數字通證前十的用戶。
根據QitChain團隊所提供的白皮書,每一個被打包記賬的新生成區塊內涵的數字資產被存儲提供商和質押數字通證前十的用戶所分成。而這也就是CPoC機制中,第一個字母C所代表的條件(Conditional),而這個條件則是基於團隊為服務提供商所規定的一個閾值,該閾值的意義是存儲提供商達到條件化模型所必須的質押量門檻。而根據實際的存儲提供商提供的質押量是否越過這個門檻,對存儲提供商和全網質押數字資產前十的用戶所進行的QitCoin通證分配是天差地別的。為了讓讀者明白這個天差地別究竟是多大的差距,我們直接引用白皮書中的公式來說明:
我們用θ1和θ2分別表示一個區塊中分別分給存儲提供商和全網質押資產前十的用戶的部分,而該區塊中的全部數字資產則用ρ表示,那麼很明顯,θ1+θ2 = ρ。現在,我們令χ表示出塊的存儲服務商的質押門檻,而staking表示該服務商的實際質押量。則對於每一個區塊,其數字資產的分成公式為:
由此可見,對於CPoC而言,這個工時證明在本質上是鼓勵,甚至於逼迫存儲提供商進行數字資產的質押的,或者說,該共識能夠有效地抑制存儲提供商單獨通過大範圍的兼併存儲硬件來破壞分佈式的經濟分配,藉以解決PoC共識下所仍然存在的“硬件軍備競賽”問題。
結語
在上文中,我們深入討論了PoC的原理以及PoS的條件化模型。實質上,QitChain所採用的CPoC共識正是以上二者的結合。通過比較CPoC與其先驅者的優劣勢,我們可以清晰地看到,新的共識正是以不斷的修補舊的共識的缺陷的需求下誕生的。儘管CPoC共識仍然有它自身所難以解決的弱點,例如它本身並不具備抗惡意軟件、plot文件浪費等問題。但考慮到區塊鏈作為一個新興且前途無量的行業,仍舊處於一種路漫漫其修遠兮的狀態。 CPoC已經算是一種經過上下而求索的過程所得出的優秀果實了。至於CPoC共識與QitChain能走多遠;以及何時會有更新、更優良的共識證明及其所支撐的區塊鏈項目出現,始終都是一件值得拭目以待的事。
參考資料
QitChain Network, Qitcoin Whitepaper
GeeksforGeeks, Proof of Capacity
Andrew, P., What is Proof of Capacity? An Eco-Friendly Mining Solution
MASS Docs, Proof of Capacity
Dzeimbowski, S., Faust, S., Kolmogorov, V., Pietrzak, K., Proofs of Space, Cryptology ePrint Archive
Hayes, A., Proof of Capacity