本文簡(jiǎn)單介紹一下 Filecoin 的工作原理以及工作流程咽笼,讓讀者可以對(duì)整個(gè) Filecoin 去中心化存儲(chǔ)解決方案有個(gè)大概的認(rèn)知来颤。如果想要詳細(xì)深入了解細(xì)節(jié)的杨名, 請(qǐng)閱讀 Filecoin 和 IPFS 白皮書(在文末參考文獻(xiàn)中有鏈接)雁刷。另外呕诉,本文為作者完全原創(chuàng)缘厢,轉(zhuǎn)載請(qǐng)注明來源,謝謝甩挫。
1. 什么是 Filecoin贴硫?
Filecoin 是一個(gè)去中心化的存儲(chǔ)網(wǎng)絡(luò),簡(jiǎn)稱 DSN(下面我們稱之為 Filecoin 網(wǎng)絡(luò)), 她將全球的閑置的存儲(chǔ)資源轉(zhuǎn)變?yōu)橐粋€(gè)存儲(chǔ)算法市場(chǎng)伊者, 其最終目標(biāo)是創(chuàng)建一個(gè)永久的,安全的,不受監(jiān)管的新一代存儲(chǔ)網(wǎng)絡(luò)跺撼。
在 Filecoin 的網(wǎng)絡(luò)里悲龟,礦工通過提供存儲(chǔ)或者檢索資源來賺錢 Token(FIL), 客戶付錢給礦工存儲(chǔ)或檢索數(shù)據(jù)。
Filecoin 與 IPFS 之間的聯(lián)系
Filecoin 和 IPFS 都是 IPFS 協(xié)議實(shí)驗(yàn)室提出的,他們屬于同門師兄弟,F(xiàn)ilecoin 是 IPFS 的補(bǔ)充協(xié)議。IPFS 作為一個(gè)開源項(xiàng)目已經(jīng)被很多系統(tǒng)在使用均函, 它允許節(jié)點(diǎn)之間相互請(qǐng)求,傳輸菱涤,和存儲(chǔ)可驗(yàn)證的數(shù)據(jù)苞也,但是節(jié)點(diǎn)之間并沒有形成一個(gè)統(tǒng)一的網(wǎng)絡(luò),各個(gè)節(jié)點(diǎn)都是各自存儲(chǔ)自己認(rèn)為重要的數(shù)據(jù)粘秆, 沒有簡(jiǎn)單的方法可以激勵(lì)他人加入網(wǎng)絡(luò)或存儲(chǔ)特定數(shù)據(jù)如迟。
Filecoin 的出現(xiàn)就是為了解決這一關(guān)鍵問題,它旨在提供一個(gè)可以用來持久存儲(chǔ)的系統(tǒng)攻走,作為 IPFS 的激勵(lì)層殷勘。 至于 Filecoin 是如何解決這個(gè)問題的,我們會(huì)在后面詳細(xì)講解昔搂。
2. Filecoin 架構(gòu)概述
Filecoin 的架構(gòu)可以簡(jiǎn)單拆分成兩個(gè)模塊玲销,一個(gè)去中心化存儲(chǔ)市場(chǎng),一個(gè)是區(qū)塊鏈
2.1 去中心化的存儲(chǔ)市場(chǎng)
Filecoin 的 DSN 主要包含 4 個(gè)角色:
- 存儲(chǔ)礦工: 類似傳統(tǒng)的 http 網(wǎng)站中的服務(wù)器摘符,他們存儲(chǔ)數(shù)據(jù)贤斜,不過在 Filecoin 中,普通的家用主機(jī)也可以用來做存儲(chǔ)礦工逛裤。
- 檢索礦工: 檢索礦工可以獲取數(shù)據(jù)并將其提供給客戶端瘩绒,類似傳統(tǒng)的 CDN
- 存儲(chǔ)客戶端: 想要存儲(chǔ)數(shù)據(jù)的用戶
- 檢索客戶端: 想要獲取數(shù)據(jù)的用戶
任何節(jié)點(diǎn)都可以同時(shí)扮演這四個(gè)角色,但也可以選擇僅扮演其中某一個(gè)或者幾個(gè)角色带族。
2.2 Filecoin 作為區(qū)塊鏈
區(qū)塊鏈?zhǔn)且粋€(gè)公開的分布式賬本锁荔,不依賴中央權(quán)威機(jī)構(gòu),而是由成千上萬個(gè)自由節(jié)點(diǎn)組成的網(wǎng)絡(luò)炉菲,每個(gè)節(jié)點(diǎn)都參與網(wǎng)絡(luò)并通過特定的共識(shí)協(xié)議來達(dá)成決策堕战。 Filecoin 作為一條公鏈坤溃,它記錄整個(gè) DSN 網(wǎng)絡(luò)中所有的交易訂單拍霜,復(fù)制證明,時(shí)空證明等重要的交易憑證薪介,所有這些數(shù)據(jù)不可篡改祠饺,作為用戶和礦工維權(quán)的證明。
在共識(shí)協(xié)議上 Filecoin 采用的是 POS(Proof-of-Storage) 共識(shí)算法汁政,注意這個(gè)并不是以太坊的 POS(Proof of Stake)道偷,前者是基于存儲(chǔ)證明缀旁,后者是基于權(quán)益證明。 這也說明作為 Filecoin 礦工勺鸦,如果你的存儲(chǔ)能力越強(qiáng)并巍,你挖到區(qū)塊的概率就會(huì)越高。
值得一提的是换途,F(xiàn)ilecoin 主鏈的架構(gòu)跟以太坊設(shè)計(jì)的很相似懊渡,F(xiàn)ilecoin 中的 message 大致相當(dāng)于以太坊交易,而 Filecoin actor 與以太坊智能合約類似军拟。 甚至還引入了以太坊中 Gas 這個(gè)概念剃执。
這里可能有同學(xué)對(duì) Filecoin 中的 message
和 actor
有點(diǎn)懵逼,這里簡(jiǎn)單解釋一下懈息,其實(shí) message 你可以把它理解成一條信息肾档,比如 A 向 B 轉(zhuǎn)一筆賬, 然后 Filecoin 就往區(qū)塊鏈上記錄一條 message, 就像以太坊上發(fā)送一筆交易(send a transaction) 一樣辫继。
Actor 比較難解釋怒见,我們先看 Filecoin 項(xiàng)目中源碼是怎么定義 actor 的:
// Actor is the central abstraction of entities in the system.//// Both individual accounts, as well as contracts (user & system level) are// represented as actors. An actor has the following core functionality implemented on a system level:// - track a Filecoin balance, using the `Balance` field// - execute code stored in the `Code` field// - read & write memory// - replay protection, using the `Nonce` field//// Value sent to a non-existent address will be tracked as an empty actor that has a Balance but// nil Code and Memory. You must nil check Code cids before comparing them.//// More specific capabilities for individual accounts or contract specific must be implemented// inside the code.//// Not safe for concurrent access.type Actor struct { Code cid.Cid `refmt:",omitempty"` Head cid.Cid `refmt:",omitempty"` Nonce types.Uint64 Balance *types.AttoFIL}
代碼注釋寫的很清楚,它其實(shí)就是整個(gè)區(qū)塊鏈系統(tǒng)中涉及到的實(shí)體的一個(gè)抽象骇两,學(xué)過面向?qū)ο缶幊痰耐瑢W(xué)可以把它理解成一個(gè)基類速种,就像 Java 中的 Object, 它是所有其他實(shí)體的父類低千。這些實(shí)體包括 Accounts
(賬戶), Contracts
(智能合約)等配阵。
Actor
定義一些基礎(chǔ)字段:
- Code: 待執(zhí)行的智能合約代碼
- Head: 目前本人沒有完全明白 Head 的作用,估計(jì)是用于通用的內(nèi)存讀寫
- Nonce: 這個(gè)跟以太坊一樣示血,用來對(duì)抗重放攻擊
- Balance: 賬戶余額
從
Actor
的數(shù)據(jù)結(jié)構(gòu)我們可以看出棋傍,合約賬戶也是有余額的,也就是說我們也可以往合約中轉(zhuǎn)入 FIL 代幣难审, 這個(gè)跟以太坊是一模一樣瘫拣,所以預(yù)測(cè) Filecoin 的智能 合約功能應(yīng)該也是比較強(qiáng)大的,開發(fā)者可以基于它開發(fā)強(qiáng)大的第三方去中心化存儲(chǔ)的 DAPP告喊。
3. Filecoin 工作流程
接下來講(敲)重(黑)點(diǎn)(板)了麸拄,不了解 Filecoin 存儲(chǔ)流程的礦工不是好的程序員。畢竟假如 Filecoin 這個(gè) DSN 網(wǎng)絡(luò)真能穩(wěn)定跑起來黔姜, 那么理論上是人人都可以是礦工的拢切。
在講工作流程之前我們簡(jiǎn)單介紹一下 Filecoin 中幾個(gè)基本的數(shù)據(jù)結(jié)構(gòu),這對(duì)我們理解下面的存儲(chǔ)流程很有幫助秆吵。
-
Pieces:
數(shù)據(jù)單元淮椰,是 Filecoin 網(wǎng)絡(luò)中最小存儲(chǔ)單位,每個(gè) Pieces 大小為 512KB主穗, Filecoin 會(huì)把大文件拆分成很多個(gè) Pieces, 交給不同的礦工存儲(chǔ)泻拦。 -
Sectors:
扇區(qū),礦工提供存儲(chǔ)空間的最小單元忽媒,也就是說在我們創(chuàng)建礦工的時(shí)候抵押存儲(chǔ)空間大小必須是 Sector 的整數(shù)倍(這個(gè)后面我們?cè)诮榻B如何創(chuàng)建礦工的時(shí)候會(huì)細(xì)講争拐,這里略過)。目前測(cè)試網(wǎng)絡(luò)一個(gè) Sector 的大小是 256MB -
AllocationTable:
數(shù)據(jù)分配追蹤表晦雨,它記錄了每個(gè) Pieces 和 Sector 的對(duì)應(yīng)關(guān)系陆错,如某個(gè) Pieces 存儲(chǔ)在了哪個(gè) Sector. 當(dāng)某個(gè) Sector 被存滿(Fill)了之后,系統(tǒng)將會(huì)把該 Sector 封存(Sealing the Sector)金赦,然后生成存儲(chǔ)證明音瓷,這是一個(gè)緩慢的操作(slow, sequential operation)。 -
Orders:
訂單夹抗,系統(tǒng)中有兩種訂單绳慎,一種是競(jìng)價(jià)訂單(bid order), 由客戶發(fā)起,另一種是要價(jià)訂單(ask order), 由礦工發(fā)起漠烧。 -
Orderbook:
訂單簿杏愤,也就是訂單列表,包括 bid order 和 ask order已脓,系統(tǒng)根據(jù)訂單列表進(jìn)行自動(dòng)撮合匹配交易珊楼。 -
Pledge:
抵押,礦工必須需要向 Filecoin 網(wǎng)絡(luò)抵押 FIL 代幣才能才能開始接受存儲(chǔ)市場(chǎng)的訂單度液。
理解一個(gè)復(fù)雜的概念最好的辦法就是把它拆解成多個(gè)簡(jiǎn)單易懂的簡(jiǎn)單概念厕宗。首先我們看下 Filecoin 白皮書上提供的一張關(guān)于 DSN 網(wǎng)絡(luò)工作流程的圖片。
通過這張圖我們可以從橫向(操作)和縱向(角色)來了解整個(gè)流程堕担。我們對(duì)文件的操作無非就兩種已慢,存(Put)和取(Get), 而這兩種操作分別對(duì)應(yīng)兩種角色,客戶和礦工霹购。 外加一個(gè)區(qū)塊鏈網(wǎng)絡(luò)和市場(chǎng)管理者(Manage), 這就構(gòu)成了整個(gè) Filecoin 的 DSN
網(wǎng)絡(luò)佑惠,具體交易流程如下。
(1)客戶和礦工分別發(fā)送一個(gè)競(jìng)價(jià)訂單和出價(jià)訂單到交易市場(chǎng)(Market)齐疙,這里需要注意的是膜楷,如果是 bid order, 需要注明你這個(gè)文件的存儲(chǔ)時(shí)間(比如三個(gè)月), 以及需要備份的數(shù)量(比如 3 份),備份數(shù)量越多贞奋,文件丟失的概率就越低赌厅,當(dāng)然價(jià)格也就更高一些。
(2)交易網(wǎng)絡(luò)管理中心(Manage)分別驗(yàn)證訂單是否合法忆矛,如果是競(jìng)價(jià)訂單察蹲,系統(tǒng)會(huì)鎖定客戶資金,如果是出價(jià)訂單催训,系統(tǒng)會(huì)鎖定礦工的存儲(chǔ)空間洽议。
(3)分別執(zhí)行 Put.MatchOrders 和 Get.MatchOrders 進(jìn)行訂單撮合,成功之后會(huì)運(yùn)行 Manage.AssignOrders 來標(biāo)記該訂單為
Deal Orders
(成交訂單)漫拭, 并在 AllocationTable 中記訂單的 Pieces 和 Sector 信息亚兄。
(4)執(zhí)行文件的 Put 操作,即把文件存儲(chǔ)到礦工的硬盤采驻,并生成 PoRep(復(fù)制證明)發(fā)送給交易網(wǎng)絡(luò)存儲(chǔ)到區(qū)塊鏈审胚。
(5)礦工需要定期(every epoch)需要向交易網(wǎng)絡(luò)發(fā)送PoSt(時(shí)空證明)來證明你這段時(shí)間確實(shí)存儲(chǔ)了指定的文件,交易網(wǎng)絡(luò)在驗(yàn)證之后礼旅,支付你相應(yīng)費(fèi)用(FIL).
至此膳叨,整個(gè)存儲(chǔ)交易流程就完成了,礦工需要注意的并不是你存儲(chǔ)了數(shù)據(jù)痘系,交易就會(huì)把幣打給你菲嘴,而是通過小額支付(Micro pay)的方式分次支付給你。
比如 Rock 需要把他的照片一共10GB存儲(chǔ)一年汰翠,出價(jià) 12 個(gè) FIL 代幣龄坪,然后你接了這筆訂單,交易網(wǎng)絡(luò)的 epoch 設(shè)置是一個(gè)月复唤,那么你每個(gè)月都要向交易網(wǎng)絡(luò)提供這 10GB 照片的存儲(chǔ)時(shí)空證明健田,交易網(wǎng)絡(luò)驗(yàn)證成功之后會(huì)發(fā)送給你 1 個(gè) FIL,下個(gè)月你還得提交證明佛纫,驗(yàn)證通過之后又給你發(fā)送一個(gè)幣...直到12個(gè)月后你才會(huì)收到這筆訂單的所有資金妓局。
不過檢索礦工是服務(wù)一次之后就可以收到訂單的所有費(fèi)用,因?yàn)橐淮螜z索服務(wù)執(zhí)行完之后呈宇,整個(gè)交易就完成了跟磨。
4. 核心概念
整個(gè) Filecoin 最核心的概念某過于復(fù)制證明和時(shí)空證明了,事實(shí)證明攒盈,這也是這個(gè)系統(tǒng)難點(diǎn)所在抵拘,根據(jù) Filecoin 測(cè)試網(wǎng)絡(luò)的測(cè)試結(jié)果來看,如何快速生成 有效的復(fù)制證明和時(shí)空證明型豁,將是整個(gè)項(xiàng)目最大的挑戰(zhàn)僵蛛。本文只是對(duì)這兩個(gè)概念的定義做下簡(jiǎn)單說明,如果想要研究其核心算法迎变,請(qǐng)閱讀下面的參考文獻(xiàn)充尉。
4.1 復(fù)制證明
復(fù)制證明(PoRep)是一種新穎的存儲(chǔ)證明,它允許服務(wù)器(即證明者P)說服用戶(即驗(yàn)證者V)某些數(shù)據(jù)D已被復(fù)制到其自己的唯一專用物理存儲(chǔ)設(shè)備上了衣形。 Filecoin 是通過一個(gè)交互協(xié)議完成:
- 首先驼侠,證明者(礦工)承諾自己將存儲(chǔ) N 個(gè)數(shù)據(jù)副本到自己的物理存儲(chǔ)設(shè)備(磁盤)
- 然后姿鸿,說服驗(yàn)證者(客戶)自己確實(shí)存儲(chǔ)了這些數(shù)據(jù)
4.2 時(shí)空證明
復(fù)制證明只能證明你當(dāng)時(shí)接單的時(shí)候確實(shí)存儲(chǔ)的用戶的文件,但是礦工可能一轉(zhuǎn)身就把數(shù)據(jù)轉(zhuǎn)移到其他地方去了倒源,這就是 Filecoin 中所說的外包攻擊苛预,即你自己并沒有 存儲(chǔ)客戶的數(shù)據(jù)。那么如何證明你確實(shí)在這段時(shí)間內(nèi)實(shí)實(shí)在在存儲(chǔ)了指定的數(shù)據(jù)呢笋熬? 時(shí)空證明(PoSt)就是為了解決這個(gè)問題热某。
簡(jiǎn)單來說就是要求存儲(chǔ)礦工每隔一段時(shí)間(例如5分鐘)來發(fā)送一次存儲(chǔ)證明到區(qū)塊鏈網(wǎng)絡(luò), 但是 Filecoin 每次交互的通信都比較復(fù)雜胳螟,有各種加密簽名昔馋,如此頻繁的 網(wǎng)絡(luò)通信將會(huì)成為整個(gè)系統(tǒng)的瓶頸,所以需要調(diào)整 epoch(時(shí)間間隔) 的值糖耸,使系統(tǒng)達(dá)到一個(gè)平衡點(diǎn)秘遏,或者使用其他的更優(yōu)的解決方案。
5. 總結(jié)
不得不說嘉竟,F(xiàn)ilecoin 確實(shí)是一個(gè)偉大的構(gòu)想垄提,如果落地了將會(huì)是一個(gè)很好的去中心化存儲(chǔ)網(wǎng)絡(luò)的解決方案,能降低存儲(chǔ)成本和帶寬成本周拐, 提升了資源的使用效率铡俐。但是它的整個(gè)工作流程(相對(duì)于傳統(tǒng)的中心化存儲(chǔ))有點(diǎn)復(fù)雜了一些,還就是從技術(shù)的層面妥粟,它還有一些問題审丘, 比如 nat 穿透問題(這是 IPFS 的問題),PoSt 的算法也需要進(jìn)一步優(yōu)化才能應(yīng)用到工程層面勾给。 Filecoin 社區(qū)發(fā)展還比較快滩报,開發(fā)者也比較活躍,說明業(yè)界對(duì)它的關(guān)注度還是 比較高的播急。目前開發(fā)者都在積極的幫助測(cè)試和優(yōu)化項(xiàng)目脓钾,據(jù)說新的復(fù)制證明的生成算法已經(jīng)將效率提高了接近一倍。
所以個(gè)人覺得整個(gè)項(xiàng)目的前途是光明的桩警,只是通往光明的道路從來都是曲折的可训。