本文作者:楊尉;原創(chuàng)作品,轉(zhuǎn)載請注明出處
[上一篇鏈接] filecoin技術(shù)架構(gòu)分析之一:1 filecoin概念
[下一篇鏈接] filecoin技術(shù)架構(gòu)分析之三:3 filecoin開發(fā)網(wǎng)絡(luò)使用
目錄
- 2 filecoin通用語言理解
- 2.1 為什么要把filecoin通用語言單獨(dú)列為一講
- 2.2 存儲證明
- 2.2.1 為什么使用存儲證明
- 2.2.2 復(fù)制證明
- 2.2.3 時空證明
- 2.3 預(yù)期共識
- 2.3.1 基礎(chǔ)前提
- 2.3.2 使用power達(dá)成共識
- 2.3.3 選舉方案
- 2.4 filecoin智能合約
- 2.4.1 文件合約
- 2.4.2 智能合約
- 2.4.3 與其他系統(tǒng)的兼容
- 2.5 交易市場
- 2.4.1 存儲市場
- 2.4.2 檢索市場
- 2.6 filecoin節(jié)點(diǎn)
2.1 為什么要把filecoin通用語言單獨(dú)列為一講
- 筆者認(rèn)為一位優(yōu)秀的軟件從業(yè)人員,必須具備兩種必備能力
- 架構(gòu)設(shè)計能力
- 架構(gòu)剖析能力
這兩者是相輔相成的,架構(gòu)設(shè)計師所設(shè)計之架構(gòu)不可能超過自己的認(rèn)知范疇,故架構(gòu)設(shè)計師必須有效高效地拓展自己的技術(shù)認(rèn)知視圖,以適應(yīng)當(dāng)代軟件架構(gòu)高速發(fā)展的現(xiàn)實(shí)。而拓展的途徑,一方面就是相關(guān)理論體系的快速學(xué)習(xí)跟進(jìn);另一方面,就是實(shí)戰(zhàn),對有顯著價值的優(yōu)秀軟件項目進(jìn)行架構(gòu)剖析。有理論、有實(shí)戰(zhàn)方是王道。理解具體架構(gòu)的通用語言就是分析他人架構(gòu)設(shè)計思維的一條捷徑。
- 理解具體技術(shù)架構(gòu)的通用語言是分析架構(gòu)的一條捷徑
- 通用語言是架構(gòu)設(shè)計人員為實(shí)現(xiàn)某個具體技術(shù)架構(gòu),所高度抽象出來的名詞或者稱謂,通過理解通用語言,可以快速理解架構(gòu)設(shè)計人員的思維和設(shè)計目的。
- 與讀書方法類似(薄讀->厚讀>再薄讀),理解通用語言就是第一次的薄讀過程,非常重要。
-
對業(yè)務(wù)的理解是非常有必要的,所以在第一講中,筆者鋪墊了filecoin的一些基本概念,任何架構(gòu)的設(shè)計不能脫離業(yè)務(wù)而行,業(yè)務(wù)驅(qū)動開發(fā)仍是非常實(shí)用的架構(gòu)模式;filecoin 技術(shù)架構(gòu)從業(yè)務(wù)來劃分,可劃分為兩個大的范疇。
- 分布式存儲解決方案
- 存儲礦工
- 檢索礦工
- 存儲客戶端
- 檢索客戶端
- 區(qū)塊鏈項目
- filecoin公鏈
- filecoin actors 智能合約
- 分布式存儲解決方案
filecoin核心通用業(yè)務(wù)組件
| 組件名稱 | 目的 |
|---|---|
| DSN | 保障數(shù)據(jù)安全、包括故障容錯、數(shù)據(jù)完整性、數(shù)據(jù)可恢復(fù)等 |
| 新型存儲證明 | 證明礦工按照協(xié)議規(guī)范存儲了客戶指定的數(shù)據(jù),數(shù)據(jù)有效性 |
| 可驗(yàn)證市場 | 對礦工與客戶組成的交易市場進(jìn)行了建模,保證交易的有效性 |
| 有效工作量證明 | 出塊的共識機(jī)制,很重要,做到激勵兼容 |
下面各節(jié)將會對filecoin技術(shù)架構(gòu)中的核心通用語言進(jìn)行解釋。
2.2 存儲證明
Proof-of-Storage包含復(fù)制證明(PoR)和時空證明(PoSt),其作用主要有兩點(diǎn):
證明礦工做了有效存儲
競爭區(qū)塊打包出塊,獲取區(qū)塊獎勵
2.2.1 為什么使用存儲證明
-
相對于PoW(Proof-of-Work)或者PoC
- PoW耗能嚴(yán)重;PoC以空間換時間,同樣存在耗能嚴(yán)重問題
- 而filecoin網(wǎng)絡(luò)的耗能必須遠(yuǎn)低于類似比特幣的PoW,參見第一講filecoin的對標(biāo)對象,filecoin必須實(shí)現(xiàn)以更低的成對去應(yīng)對商業(yè)競爭,同時提供相同級別的安全性,以及文件存儲的效用
- 存儲證明需要做要與實(shí)體經(jīng)濟(jì)掛鉤,減少無謂浪費(fèi)
-
相對于PoS(Proof-of-Stake)
- Proof-of-Storage在定向領(lǐng)域(分布式存儲)以更簡單方式,協(xié)調(diào)激勵,并驅(qū)使礦工以有競爭力的價格提供真實(shí)的新存儲,它促使礦工積極保證filecoin網(wǎng)絡(luò)的效用
- 當(dāng)然Proof-of-Stake是區(qū)塊鏈領(lǐng)域的熱點(diǎn)研究問題
Proof-of-Storage阻止網(wǎng)絡(luò)攻擊
| 攻擊類型 | 說明 | 阻止攻擊原理 |
|---|---|---|
| 女巫攻擊Sybil attack | 作惡節(jié)點(diǎn)創(chuàng)造多個女巫身份,謊稱存儲了多個副本 | 每個節(jié)點(diǎn)的副本都是有簽名的,想通過復(fù)制證明,就相當(dāng)于真實(shí)做了有效存儲 |
| 外包攻擊outsourcing attacks | 作惡節(jié)點(diǎn)快速從其他節(jié)點(diǎn)獲取內(nèi)容,謊稱他們存儲了比他們實(shí)際存儲更多的內(nèi)容 | 針對外包攻擊,從其他節(jié)點(diǎn)獲取的整個過程,滿足不了證明人隨機(jī)挑戰(zhàn)的要求,依然需要重新生成副本(重新seal需要時間),從而阻止外包攻擊 |
| 生成攻擊generation attacks | 作惡節(jié)點(diǎn)宣稱將要存儲超過其實(shí)際容量的內(nèi)容但并未存儲內(nèi)容,以此增加出塊的概率 | 宣稱無用,存儲證明一定要確認(rèn)密封動作并能應(yīng)對隨機(jī)挑戰(zhàn)才能OK,如果重新密封就來不及證明,每次挑戰(zhàn)是有時間要求的 |
2.2.2 復(fù)制證明
2.2.2.1 基礎(chǔ)
- 復(fù)制證明本質(zhì)上可以理解為一種零知識證明,既然是零知識證明,我們在后面需要理解filecoin復(fù)制證明的題目和答案
zk-SNARK zero knowledge Succinct Non-interactive ARgument of Knowledge
zero knowledge:零知識,即在證明的過程中不透露任何內(nèi)情
succinct:簡潔的,主要是指驗(yàn)證過程不涉及大量數(shù)據(jù)傳輸以及驗(yàn)證算法簡單
non-interactive:無交互。
- 生成證明的方法在filecoin架構(gòu)中稱之為seal密封
密封過程是需要時間的,Seal過程串行加密的過程,無法并行操作,seal密封過程是有意設(shè)計慢的,主要目的是為了防攻擊。
2.2.2.2 filecoin復(fù)制證明的題目和答案
-
公開的信息
- 礦工的節(jié)點(diǎn)公鑰、密封公鑰、存儲公鑰、原始Data哈希、該礦工存儲的副本根哈希
-
隱含因素理解:
- 特有節(jié)點(diǎn)的副本哈希是由哪些哈希組成(DAG),任意挑戰(zhàn)者或者攻擊者是不知情的
- 挑戰(zhàn)隨機(jī)參數(shù),通過CRH(防碰撞的哈希散列Collision-resistant hashing)生成哈希之后傳遞給證明者,作用是確定特定的葉子節(jié)點(diǎn)的哈希,比如讓證明者自行計算離H(c))最近的葉子節(jié)點(diǎn)哈希。
-
復(fù)制證明的題目與答案
- 挑戰(zhàn)參數(shù):副本哈希rt,挑戰(zhàn)隨機(jī)參數(shù)c -> H(c)
- 證明者輸入(題目):
- H(c)(每一次挑戰(zhàn)都會變)
- 隱含信息比喻:該葉子節(jié)點(diǎn)是與H(c)最近的節(jié)點(diǎn)
- 證明者輸出(答案):
- H(c)對應(yīng)的葉子節(jié)點(diǎn) ——> rt的路徑(攻擊者是很難反推的)
2.2.3 時空證明
- 時空證明可以理解為礦工持續(xù)性地生成復(fù)制證明
- 挑戰(zhàn)者輸入一個隨機(jī)參數(shù)c,后面的隨機(jī)參數(shù)由證明者基于上一個的挑戰(zhàn)答案去生成。(不用與挑戰(zhàn)者持續(xù)交互)
- 下圖中變量i會輪詢生成新的時間變量產(chǎn)生隨機(jī)挑戰(zhàn)。

2.3 預(yù)期共識
2.3.1 基礎(chǔ)前提
- filecoin基于存儲證明(有效存儲量)來作為礦工在整個網(wǎng)絡(luò)中的power
| power屬性 | 說明 |
|---|---|
| 公開 | 1 某一時刻,整個網(wǎng)絡(luò)存儲總量是公開的 2 單個礦工某一時刻,有效存儲總量是公開的 |
| 可公開驗(yàn)證的 | 對于每個存儲任務(wù),礦工都需要生成”時空證明“,證明持續(xù)提供服務(wù)。通過讀取區(qū)塊鏈,任何人都可以驗(yàn)證礦工的power聲明是否是正確的。 |
| 變化 | 在任意時間點(diǎn),礦工都可以通過增加新增扇區(qū)和扇區(qū)補(bǔ)充的抵押來增加新的存儲。這樣礦工就能變更他們能提供的power。 |
2.3.2 使用power達(dá)成共識
- 目的:
每一輪選舉一個(或多個)礦工,使得贏得選舉的概率與每個礦工分配的存儲成比例
- filecoin預(yù)期共識(Expected Consensus,EC)
- 預(yù)期共識的基本直覺是確定性的,不可預(yù)測的
- 預(yù)期的期望是每個周期內(nèi)當(dāng)選的Leader是1,但一些周期內(nèi)可能有0個或者許多的Leader。
- 在每個周期,每個區(qū)塊鏈被延伸一個或多個區(qū)塊
- 區(qū)塊線性擴(kuò)展,但是數(shù)據(jù)結(jié)構(gòu)是DAG
- EC是一個概率共識,每個周期都使得比前面的區(qū)塊更加確定,最終達(dá)到了足夠的確定性
2.3.3 選舉方案
預(yù)期共識通過選舉方案產(chǎn)生


| 選舉方案屬性 | 說明 |
|---|---|
| 公平 | 每個參與者每次選舉只有一次試驗(yàn),因?yàn)楹灻谴_定性的,而且t和rand(t)是固定的。隨機(jī)值rand(t)在時刻t之前是未知的 |
| 保密 | 由于有能力的攻擊者不擁有Mi用來計算簽名的秘鑰 |
| 公開可驗(yàn)證 | 當(dāng)選Leader i ∈ Lt 可以通過給出t,rand(t),H(i)/2L,來說服一個有效的驗(yàn)證者。鑒于前面的觀點(diǎn)(復(fù)制證明與時間證明),有能力的攻擊者在不擁有獲勝秘密秘鑰的情況下不能生成證明。 |
2.4 filecoin智能合約
2.4.1 文件合約
允許用戶對他們提供的存儲服務(wù)進(jìn)行條件編程,會形成一個多樣化市場。
- 承包礦工:客戶可以提前指定礦工提供服務(wù)而不參與市場
- 付款策略:客戶可以為礦工設(shè)計不同的獎勵策略,例如合約可以給礦工支付隨著時間的推移越來高的費(fèi)用
- 票務(wù)服務(wù):合約可以允許礦工存放token和用于代表用戶的存儲/檢索的支付
- 更復(fù)雜的操作:客戶可以創(chuàng)建合約來運(yùn)行數(shù)據(jù)更新
2.4.2 智能合約
用戶可以將程序關(guān)聯(lián)到其他系統(tǒng)(如以太坊)的交易上,他們不直接依賴存儲的使用。
2.4.3 與其他系統(tǒng)的兼容
規(guī)格支持跨鏈交互,以便能將filecoin存儲帶入其他基于區(qū)塊鏈的平臺,同時也將其他平臺的功能帶入filecoin。
2.5 交易市場
- 存儲需求和供給組成了兩個Filecoin市場:存儲市場和檢索市場。這兩個市場是兩個去中心化交易所,簡而言之,客戶和礦工們通過向各自的市場提交訂單來設(shè)定他們請求服務(wù)或者提供服務(wù)的訂單的價格。交易所為客戶和礦工們提供了一種方式來查看匹配出價并執(zhí)行訂單。如果服務(wù)請求被成功滿足,通過運(yùn)行管理協(xié)議,網(wǎng)絡(luò)保證了礦工得到報酬,客戶將被收取費(fèi)用。
- 可以類比為淘寶商城
2.5.1 存儲市場
- 交易數(shù)據(jù)會上鏈,包含于區(qū)塊之中。
- 本質(zhì)上也屬于filecoin智能合約中的文件合約。
- 20190214上線的開發(fā)網(wǎng)絡(luò)已支持
2.5.2 檢索市場
- 交易數(shù)據(jù)不會上鏈,屬于offchain的方式。
- 本質(zhì)上也屬于filecoin智能合約中的文件合約。
2.6 filecoin節(jié)點(diǎn)
- filecoin節(jié)點(diǎn)相關(guān)
- node id表示filecoin網(wǎng)絡(luò)節(jié)點(diǎn)
- account id并表示賬號,默認(rèn)與錢包地址一致
- wallet addr表示錢包地址
- miner id表示礦工id

[上一篇鏈接] filecoin技術(shù)架構(gòu)分析之一:1 filecoin概念
[下一篇鏈接] filecoin技術(shù)架構(gòu)分析之三:3 filecoin開發(fā)網(wǎng)絡(luò)使用