為什么要把 filecoin 通用語(yǔ)言單獨(dú)列為一講
筆者認(rèn)為一位優(yōu)秀的軟件從業(yè)人員伸蚯,必須具備兩種必備能力
架構(gòu)設(shè)計(jì)能力
架構(gòu)剖析能力
這兩者是相輔相成的缠沈,架構(gòu)設(shè)計(jì)師所設(shè)計(jì)之架構(gòu)不可能超過(guò)自己的認(rèn)知范疇膘壶,故架構(gòu)設(shè)計(jì)師必須有效高效地拓展自己的技術(shù)認(rèn)知視圖,以適應(yīng)當(dāng)代軟件架構(gòu)高速發(fā)展的現(xiàn)實(shí)洲愤。而拓展的途徑颓芭,一方面就是相關(guān)理論體系的快速學(xué)習(xí)跟進(jìn);另一方面柬赐,就是實(shí)戰(zhàn)亡问,對(duì)有顯著價(jià)值的優(yōu)秀軟件項(xiàng)目進(jìn)行架構(gòu)剖析。有理論躺率、有實(shí)戰(zhàn)方是王道玛界。理解具體架構(gòu)的通用語(yǔ)言就是分析他人架構(gòu)設(shè)計(jì)思維的一條捷徑。
理解具體技術(shù)架構(gòu)的通用語(yǔ)言是分析架構(gòu)的一條捷徑
通用語(yǔ)言是架構(gòu)設(shè)計(jì)人員為實(shí)現(xiàn)某個(gè)具體技術(shù)架構(gòu)悼吱,所高度抽象出來(lái)的名詞或者稱謂慎框,通過(guò)理解通用語(yǔ)言,可以快速理解架構(gòu)設(shè)計(jì)人員的思維和設(shè)計(jì)目的后添。
與讀書方法類似(薄讀-> 厚讀 > 再薄讀)笨枯,理解通用語(yǔ)言就是第一次的薄讀過(guò)程,非常重要。
對(duì)業(yè)務(wù)的理解是非常有必要的馅精,所以在第一章中严嗜,筆者鋪墊了 filecoin 的一些基本概念,任何架構(gòu)的設(shè)計(jì)不能脫離業(yè)務(wù)而行洲敢,業(yè)務(wù)驅(qū)動(dòng)開(kāi)發(fā)仍是非常實(shí)用的架構(gòu)模式漫玄;filecoin 技術(shù)架構(gòu)從業(yè)務(wù)來(lái)劃分,可劃分為兩個(gè)大的范疇压彭。
分布式存儲(chǔ)解決方案
存儲(chǔ)礦工
檢索礦工
存儲(chǔ)客戶端
檢索客戶端
區(qū)塊鏈項(xiàng)目
filecoin 公鏈
filecoin actors 智能合約
filecoin 核心通用業(yè)務(wù)組件
組件名稱 目的
DSN 保障數(shù)據(jù)安全睦优、包括故障容錯(cuò)、數(shù)據(jù)完整性壮不、數(shù)據(jù)可恢復(fù)等
新型存儲(chǔ)證明 證明礦工按照協(xié)議規(guī)范存儲(chǔ)了客戶指定的數(shù)據(jù)汗盘,數(shù)據(jù)有效性
可驗(yàn)證市場(chǎng) 對(duì)礦工與客戶組成的交易市場(chǎng)進(jìn)行了建模,保證交易的有效性
有效工作量證明 出塊的共識(shí)機(jī)制询一,很重要隐孽,做到激勵(lì)兼容
下面各節(jié)將會(huì)對(duì) filecoin 技術(shù)架構(gòu)中的核心通用語(yǔ)言進(jìn)行解釋。
存儲(chǔ)證明
Proof-of-Storage 包含復(fù)制證明(PoR)和時(shí)空證明(PoSt)健蕊,其作用主要有兩點(diǎn):
證明礦工做了有效存儲(chǔ)
競(jìng)爭(zhēng)區(qū)塊打包出塊菱阵,獲取區(qū)塊獎(jiǎng)勵(lì)
1
2
3
2.2.1 為什么使用存儲(chǔ)證明
相對(duì)于 PoW(Proof-of-Work)或者 PoC
? ? PoW 耗能嚴(yán)重;PoC 以空間換時(shí)間缩功,同樣存在耗能嚴(yán)重問(wèn)題
? ? 而 filecoin 網(wǎng)絡(luò)的耗能必須遠(yuǎn)低于類似比特幣的 PoW送粱,參見(jiàn)第一講 filecoin 的對(duì)標(biāo)對(duì)象,filecoin 必須實(shí)現(xiàn)以更低的成對(duì)去應(yīng)對(duì)商業(yè)競(jìng)爭(zhēng)掂之,同時(shí)提供相同級(jí)別的安全性,以及文件存儲(chǔ)的效用
? ? 存儲(chǔ)證明需要做要與實(shí)體經(jīng)濟(jì)掛鉤脆丁,減少無(wú)謂浪費(fèi)
相對(duì)于 PoS(Proof-of-Stake)或者 PoC
? ? Proof-of-Storage 在定向領(lǐng)域(分布式存儲(chǔ))以更簡(jiǎn)單方式世舰,協(xié)調(diào)激勵(lì),并驅(qū)使礦工以有競(jìng)爭(zhēng)力的價(jià)格提供真實(shí)的新存儲(chǔ)槽卫,它促使礦工積極保證 filecoin 網(wǎng)絡(luò)的效用
? ? 當(dāng)然 Proof-of-Stake 是區(qū)塊鏈領(lǐng)域的熱點(diǎn)研究問(wèn)題
Proof-of-Storage 阻止網(wǎng)絡(luò)攻擊
1
2
3
4
5
6
7
8
9
10
攻擊類型 說(shuō)明 阻止攻擊原理
女巫攻擊 Sybil attack 作惡節(jié)點(diǎn)創(chuàng)造多個(gè)女巫身份跟压,謊稱存儲(chǔ)了多個(gè)副本 每個(gè)節(jié)點(diǎn)的副本都是有簽名的,想通過(guò)復(fù)制證明歼培,就相當(dāng)于真實(shí)做了有效存儲(chǔ)
外包攻擊 outsourcing attacks 作惡節(jié)點(diǎn)快速?gòu)钠渌?jié)點(diǎn)獲取內(nèi)容震蒋,謊稱他們存儲(chǔ)了比他們實(shí)際存儲(chǔ)更多的內(nèi)容 針對(duì)外包攻擊,從其他節(jié)點(diǎn)獲取的整個(gè)過(guò)程躲庄,滿足不了證明人隨機(jī)挑戰(zhàn)的要求查剖,依然需要重新生成副本(重新 seal 需要時(shí)間),從而阻止外包攻擊
生成攻擊 generation attacks 作惡節(jié)點(diǎn)宣稱將要存儲(chǔ)超過(guò)其實(shí)際容量的內(nèi)容但并未存儲(chǔ)內(nèi)容噪窘,以此增加出塊的概率 宣稱無(wú)用笋庄,存儲(chǔ)證明一定要確認(rèn)密封動(dòng)作并能應(yīng)對(duì)隨機(jī)挑戰(zhàn)才能 OK,如果重新密封就來(lái)不及證明,每次挑戰(zhàn)是有時(shí)間要求的
復(fù)制證明
基礎(chǔ)
復(fù)制證明本質(zhì)上可以理解為一種零知識(shí)證明直砂,既然是零知識(shí)證明菌仁,我們?cè)诤竺嫘枰斫?filecoin 復(fù)制證明的題目和答案
zk-SNARK zero knowledge Succinct Non-interactive ARgument of Knowledge
zero knowledge:零知識(shí),即在證明的過(guò)程中不透露任何內(nèi)情
succinct:簡(jiǎn)潔的静暂,主要是指驗(yàn)證過(guò)程不涉及大量數(shù)據(jù)傳輸以及驗(yàn)證算法簡(jiǎn)單
non-interactive:無(wú)交互济丘。
生成證明的方法在 filecoin 架構(gòu)中稱之為 seal 密封
密封過(guò)程是需要時(shí)間的,Seal 過(guò)程串行加密的過(guò)程洽蛀,無(wú)法并行操作摹迷,seal 密封過(guò)程是有意設(shè)計(jì)慢的,主要目的是為了防攻擊辱士。
1
2
3
4
5
6
7
8
9
10
filecoin 復(fù)制證明的題目和答案
公開(kāi)的信息
? ? 礦工的節(jié)點(diǎn)公鑰泪掀、密封公鑰、存儲(chǔ)公鑰颂碘、原始 Data 哈希异赫、該礦工存儲(chǔ)的副本根哈希
隱含因素理解:
? ? 特有節(jié)點(diǎn)的副本哈希是由哪些哈希組成(DAG),任意挑戰(zhàn)者或者攻擊者是不知情的
? ? 挑戰(zhàn)隨機(jī)參數(shù)头岔,通過(guò) CRH(防碰撞的哈希散列 Collision-resistant hashing)生成哈希之后傳遞給證明者塔拳,作用是確定特定的葉子節(jié)點(diǎn)的哈希,比如讓證明者自行計(jì)算離 H(c))最近的葉子節(jié)點(diǎn)哈希峡竣。
復(fù)制證明的題目與答案
? ? 挑戰(zhàn)參數(shù):副本哈希 rt靠抑,挑戰(zhàn)隨機(jī)參數(shù) c -> H(c)
? ? 證明者輸入(題目):
? ? ? ? H(c)(每一次挑戰(zhàn)都會(huì)變)
? ? ? ? 隱含信息比喻:該葉子節(jié)點(diǎn)是與 H(c)最近的節(jié)點(diǎn)
? ? 證明者輸出(答案):
? ? ? ? H(c)對(duì)應(yīng)的葉子節(jié)點(diǎn) ——> rt 的路徑(攻擊者是很難反推的)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
時(shí)空證明
時(shí)空證明可以理解為礦工持續(xù)性地生成復(fù)制證明
? ? 挑戰(zhàn)者輸入一個(gè)隨機(jī)參數(shù) c,后面的隨機(jī)參數(shù)由證明者基于上一個(gè)的挑戰(zhàn)答案去生成适掰。(不用與挑戰(zhàn)者持續(xù)交互)
? ? 下圖中變量 i 會(huì)輪詢生成新的時(shí)間變量產(chǎn)生隨機(jī)挑戰(zhàn)颂碧。
1
2
3
時(shí)空證明
預(yù)期共識(shí)
基礎(chǔ)前提
filecoin 基于存儲(chǔ)證明(有效存儲(chǔ)量)來(lái)作為礦工在整個(gè)網(wǎng)絡(luò)中的 power
1
power 屬性 說(shuō)明
公開(kāi) 1 某一時(shí)刻,整個(gè)網(wǎng)絡(luò)存儲(chǔ)總量是公開(kāi)的
2 單個(gè)礦工某一時(shí)刻类浪,有效存儲(chǔ)總量是公開(kāi)的
可公開(kāi)驗(yàn)證的 對(duì)于每個(gè)存儲(chǔ)任務(wù)载城,礦工都需要生成”時(shí)空證明“,證明持續(xù)提供服務(wù)费就。通過(guò)讀取區(qū)塊鏈诉瓦,任何人都可以驗(yàn)證礦工的 power 聲明是否是正確的。
變化 在任意時(shí)間點(diǎn)力细,礦工都可以通過(guò)增加新增扇區(qū)和扇區(qū)補(bǔ)充的抵押來(lái)增加新的存儲(chǔ)睬澡。這樣礦工就能變更他們能提供的 power。
使用 power 達(dá)成共識(shí)
目的:
每一輪選舉一個(gè)(或多個(gè))礦工眠蚂,使得贏得選舉的概率與每個(gè)礦工分配的存儲(chǔ)成比例
filecoin 預(yù)期共識(shí)(Expected Consensus,EC)
? ? 預(yù)期共識(shí)的基本直覺(jué)是確定性的煞聪,不可預(yù)測(cè)的
? ? 預(yù)期的期望是每個(gè)周期內(nèi)當(dāng)選的 Leader 是 1,但一些周期內(nèi)可能有 0 個(gè)或者許多的 Leader河狐。
? ? 在每個(gè)周期米绕,每個(gè)區(qū)塊鏈被延伸一個(gè)或多個(gè)區(qū)塊瑟捣,見(jiàn)下圖
? ? 區(qū)塊線性擴(kuò)展,但是數(shù)據(jù)結(jié)構(gòu)是 DAG
? ? EC 是一個(gè)概率共識(shí)栅干,每個(gè)周期都使得比前面的區(qū)塊更加確定迈套,最終達(dá)到了足夠的確定性
1
2
3
4
5
6
7
8
9
10
選舉方案
預(yù)期共識(shí)通過(guò)選舉方案產(chǎn)生
1
選舉方案
選舉方案
選舉方案屬性 說(shuō)明
公平 每個(gè)參與者每次選舉只有一次試驗(yàn),因?yàn)楹灻谴_定性的碱鳞,而且 t 和 rand(t)是固定的桑李。隨機(jī)值 rand(t)在時(shí)刻 t 之前是未知的
保密 由于有能力的攻擊者不擁有 Mi 用來(lái)計(jì)算簽名的秘鑰
公開(kāi)可驗(yàn)證 當(dāng)選 Leader i ∈ Lt 可以通過(guò)給出 t,rand(t)窿给,H(i)/2L贵白,來(lái)說(shuō)服一個(gè)有效的驗(yàn)證者。鑒于前面的觀點(diǎn)(復(fù)制證明與時(shí)間證明)崩泡,有能力的攻擊者在不擁有獲勝秘密秘鑰的情況下不能生成證明禁荒。
filecoin 智能合約
文件合約
允許用戶對(duì)他們提供的存儲(chǔ)服務(wù)進(jìn)行條件編程,會(huì)形成一個(gè)多樣化市場(chǎng)角撞。
承包礦工:客戶可以提前指定礦工提供服務(wù)而不參與市場(chǎng)
付款策略:客戶可以為礦工設(shè)計(jì)不同的獎(jiǎng)勵(lì)策略呛伴,例如合約可以給礦工支付隨著時(shí)間的推移越來(lái)高的費(fèi)用
票務(wù)服務(wù):合約可以允許礦工存放 token 和用于代表用戶的存儲(chǔ)/檢索的支付
更復(fù)雜的操作:客戶可以創(chuàng)建合約來(lái)運(yùn)行數(shù)據(jù)更新
1
2
3
4
5
6
智能合約
用戶可以將程序關(guān)聯(lián)到其他系統(tǒng)(如以太坊)的交易上,他們不直接依賴存儲(chǔ)的使用谒所。
1
與其他系統(tǒng)的兼容
規(guī)格支持跨鏈交互热康,以便能將 filecoin 存儲(chǔ)帶入其他基于區(qū)塊鏈的平臺(tái),同時(shí)也將其他平臺(tái)的功能帶入 filecoin劣领。
1
交易市場(chǎng)
存儲(chǔ)需求和供給組成了兩個(gè) Filecoin 市場(chǎng):存儲(chǔ)市場(chǎng)和檢索市場(chǎng)姐军。這兩個(gè)市場(chǎng)是兩個(gè)去中心化交易所,簡(jiǎn)而言之尖淘,客戶和礦工們通過(guò)向各自的市場(chǎng)提交訂單來(lái)設(shè)定他們請(qǐng)求服務(wù)或者提供服務(wù)的訂單的價(jià)格奕锌。交易所為客戶和礦工們提供了一種方式來(lái)查看匹配出價(jià)并執(zhí)行訂單。如果服務(wù)請(qǐng)求被成功滿足村生,通過(guò)運(yùn)行管理協(xié)議歇攻,網(wǎng)絡(luò)保證了礦工得到報(bào)酬,客戶將被收取費(fèi)用梆造。
可以類比為淘寶商城
1
2
存儲(chǔ)市場(chǎng)
交易數(shù)據(jù)會(huì)上鏈,包含于區(qū)塊之中葬毫。
本質(zhì)上也屬于 filecoin 智能合約中的文件合約镇辉。
20190214 上線的開(kāi)發(fā)網(wǎng)絡(luò)已支持
1
2
3
檢索市場(chǎng)
交易數(shù)據(jù)不會(huì)上鏈,屬于 offchain 的方式贴捡。
本質(zhì)上也屬于 filecoin 智能合約中的文件合約忽肛。
1
2
filecoin 節(jié)點(diǎn)
filecoin 節(jié)點(diǎn)相關(guān)
? ? node id 表示 filecoin 網(wǎng)絡(luò)節(jié)點(diǎn)
? ? account id 并表示賬號(hào),默認(rèn)與錢包地址一致
? ? wallet addr 表示錢包地址
? ? miner id 表示礦工 id
1
2
3
4
5
filecoin 節(jié)點(diǎn)
深入淺出區(qū)塊鏈 - 打造高質(zhì)量區(qū)塊鏈技術(shù)博客烂斋,學(xué)區(qū)塊鏈都來(lái)這里屹逛,關(guān)注知乎础废、微博 掌握區(qū)塊鏈技術(shù)動(dòng)態(tài)。