Filecoin 系列01-Filecoin 工作原理

本文簡(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

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 中的 messageactor 有點(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ò)工作流程的圖片。

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é)議完成:

  1. 首先驼侠,證明者(礦工)承諾自己將存儲(chǔ) N 個(gè)數(shù)據(jù)副本到自己的物理存儲(chǔ)設(shè)備(磁盤)
  2. 然后姿鸿,說服驗(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)目的前途是光明的桩警,只是通往光明的道路從來都是曲折的可训。

6. 參考文獻(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市捶枢,隨后出現(xiàn)的幾起案子握截,更是在濱河造成了極大的恐慌,老刑警劉巖烂叔,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谨胞,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蒜鸡,警方通過查閱死者的電腦和手機(jī)胯努,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門牢裳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叶沛,你說我怎么就攤上這事蒲讯。” “怎么了恬汁?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)辜伟。 經(jīng)常有香客問我氓侧,道長(zhǎng),這世上最難降的妖魔是什么导狡? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任约巷,我火速辦了婚禮,結(jié)果婚禮上旱捧,老公的妹妹穿的比我還像新娘独郎。我一直安慰自己,他們只是感情好枚赡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布氓癌。 她就那樣靜靜地躺著,像睡著了一般贫橙。 火紅的嫁衣襯著肌膚如雪贪婉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天卢肃,我揣著相機(jī)與錄音疲迂,去河邊找鬼。 笑死莫湘,一個(gè)胖子當(dāng)著我的面吹牛尤蒿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播幅垮,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼腰池,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了忙芒?” 一聲冷哼從身側(cè)響起巩螃,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匕争,沒想到半個(gè)月后避乏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡甘桑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年拍皮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了歹叮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铆帽,死狀恐怖咆耿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情爹橱,我是刑警寧澤萨螺,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站愧驱,受9級(jí)特大地震影響慰技,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜组砚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一吻商、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧糟红,春花似錦艾帐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至事扭,卻和暖如春揍鸟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背句旱。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工阳藻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谈撒。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓腥泥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親啃匿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蛔外,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容