日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pb blob存储到image_【Filecoin相关】速懂 Filecoin 自认证存储设计

發布時間:2025/3/11 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pb blob存储到image_【Filecoin相关】速懂 Filecoin 自认证存储设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文由IPFS原力區 Taosheng shi 原創

Filecoin項目的發起人胡安于2019/10/22,在‘slack’討論群中公開了filecoin數據存儲格式的細節,供團隊討論和審閱。眾所周知,filecoin是基于存儲(IPFS)的區塊鏈項目,數據存儲設計,特別是區塊鏈與數據存儲的配合就至關重要。據筆者觀察,協議實驗室一直善于在借鑒和研究已有的成熟技術之上,進行基礎性的創新。本文不僅對胡安公布的ppt進行解讀,也會梳理其借鑒的設計思想。

思想來源

目前主流的服務器都安裝類Unix的操作系統,其中文件存儲都是基于POSXI 的IO語義。POSIX I/O API 是我們最熟悉的,因為它就是應用程序讀寫數據調用的接口,包括open()/close()/read()/write()/lseek()等等。POSIX I/O API 是當今應用程序和程序庫的一個必要組成部分。一個典型的 POSXI ?IO 程序的流程如下:
  • 使用open()打開文件;

  • 然后read()文件數據;

  • 接著seek()到文件中的新位置;

  • 在該位置write()一些數據;

  • 最后close()文件。

伴隨著類Unix系統的流行,文件組織的目錄樹結構也深入人心:POSXI 抽象的語義在很長的時間里成為類Unix環境下的事實標準,但隨著技術的發展,也逐漸無法滿足新的業務需求,POSXI 開始被業內所詬病,詳細請參閱《糟糕的 POSIX IO》一文。filecoin數據存儲借鑒了傳統的POSIX語義,在IPFS的設計中,文件可能太大而無法容納在單個數據塊中,因此需要元數據來將其所有數據塊鏈接在一起。也可能是符號鏈接或目錄,因此它需要元數據才能鏈接到其他文件。因此,IPFS中的UnixFS是一種數據格式,用于表示IPFS中的文件及其所有鏈接和元數據,并且寬松地遵循POSIX語義。將文件添加到IPFS時,您將以UnixFS格式創建一個塊(或塊樹)。https://github.com/ipfs/go-unixfs/blob/master/pb/unixfs.protosyntax = "proto2";package unixfs.pb;message Data {enum DataType {Raw = 0;Directory = 1;File = 2;Metadata = 3;Symlink = 4;HAMTShard = 5;}required DataType Type = 1;optional bytes Data = 2;optional uint64 filesize = 3;repeated uint64 blocksizes = 4;optional uint64 hashType = 5;optional uint64 fanout = 6;}message Metadata {optional string MimeType = 1;}Textile 網絡Textile的線程(Thread)抽象也是協議實驗室借鑒來源。線程是Textile的加密,可恢復,基于模式和跨應用程序數據存儲的基礎。每個線程的核心都是一個密鑰。只有擁有密鑰的對等方才能解密線程內容或跟隨鏈接。與區塊鏈不同,線程不是基于共識的思想。相反,他們遵循類似于全息鏈的以代理為中心的方法。每個對等方都具有線程訪問控制和存儲的權限。因為線程只是更新消息或塊的哈希鏈,所以它們可以表示任何類型的數據集。一些塊指向存儲在IPFS上的鏈下數據。例如,一組照片,PDF甚至整個網站。應用程序開發人員能夠通過使用schmea在線程中添加結構并使它們與其他應用程序互操作。添加到線程的所有數據最終都將作為文件。大多數情況下,schema用于在線程中定義一種或多種數據類型,以便其他用戶和應用程序可以理解它。目前支持以下輸入類型:原始數據Blob,圖像,EXIF數據和JSON文檔。一個個線程只能有一個模式。它具有兩個主要功能:
  • 定義線程的數據DAG結構

  • 定義從輸入生成此結構所需的轉換順序

如上圖所示:通過定義一個數據工廠,就可以轉換任意格式的數據:

message FileMeta { string?mill??????=?1;??//?Mill?used?to?process?the?file?(e.g.,?`/image/resize`,?`/json`)????string?checksum??=?2;??//?Pre-milled?(md5)?checksum?of?the?input?file????string?source????=?3;??//?Source?file?CID????string?opts??????=?4;??//?md5?checksum?of?input?mill?options????string?hash??????=?5;??//?CID?hash?of?milled?file????string?key???????=?6;??//?AES?encryption?key????string?media?????=?7;??//?Media?type?(e.g.,?`'application/json'`,?`'image/jpeg'`)????string?name??????=?8;??//?Name?of?the?input?file????int64?size???????=?9;??//?Size?of?the?milled?file?in?bytes????google.protobuf.Timestamp?added?=?10;?//?Date?the?file?was?added?to?the?thread????google.protobuf.Struct?meta?????=?11;?//?Additional?metadata????repeated?string?targets?????????=?12;?//?DAG?targets?the?file?belongs?to?(kept?only?by?the?local?peer)}

更多內容,請參閱:https://docs.textile.io/concepts/threads/

Cryptree 也是filecoin數據存儲的借鑒來源,由《Cryptree: A Folder Tree Structure for Cryptographic File Systems》一文詳細介紹。Cryptree是一種加密樹結構,它有助于在不可信存儲上實現文件系統的訪問控制。Cryptree利用文件系統的文件夾層次結構實現高效、直觀、簡單的訪問控制。最突出的是Cryptree可以遞歸地在固定時間內訪問一個文件夾及其所有子文件夾,并且訪問權的動態繼承從本質上防止了訪問權的分散,另外Cryptree允許某人訪問文件或文件夾而不暴露其他訪問者身份。為了推理和形象化加密樹,論文引入了加密鏈接的概念。我們描述了在我們自己的文件系統中用來強制讀寫訪問的加密樹。加密鏈接是一個重要基本抽象,也是協議實驗室的重要借鑒之處。加密鏈接原理上很簡單,從一個密鑰K1到另一個密鑰K2的加密鏈接使每個擁有K1的人都能推導出K2。連接多個鏈接可以構建加密數據結構。注意,當K1變臟時,K2也變臟。論文區分了兩種類型的密碼鏈路:對稱鏈路和非對稱鏈路。更多內容參閱《Cryptree: A Folder Tree Structure for Cryptographic File Systems》。filecoin數據存儲借鑒的Git分支的原理。要真正理解Git管理分支的原理,需要打開Git的引擎蓋,了解Git如何存儲數據。假設你的目錄下面有三個文件,然后執行第一步add(stage)第二步commit。$ git add README test.rb LICENSE$ git commit -m 'initial commit of my project'add操作計算文件的校驗和(SHA-1 ),存儲這個版本的文件到Git倉庫中(blob)。commit操作計算所有目錄和文件的校驗和(SHA-1 ),然后存儲到tree對象中。commit操作還會創建一個 commit 對象存儲元數據和指向tree對象的指針。現在,Git倉庫包含五個對象,對應于每個文件的三個blob對象,包含目錄內容和文件映射的tree對象,包含元數據信息和指向tree指針的commit對象。區塊鏈基于時間戳的鏈式存儲也是filecoin數據存儲借鑒來源。如下圖所示,區塊鏈存儲結構眾所周知,這里不再贅言。

總體設計

基于以上思想來源,包含了一下關鍵要點:
  • 文件存儲的目錄結構

  • 鏈式加密

  • 鏈式存儲

  • 元數據設計

  • 分支管理

  • Merkle tree

這些為filecoin數據存儲的Dags + Pieces 設計奠定了基礎。filecoin把其數據存儲更為自認證歸檔存儲( Certified ARchives)。filecoin自認證歸檔存儲分為三部分:證明樹(Proving Tree)、真實數據載荷(payload)和填充數據(padding)。其中,證明樹是一個merkle tree,其root id為PieceCID,真實數據載荷的merkle root為PayloadCID。需要padding數據的原因是,merkle tree是一個平衡二叉樹,對于無能滿足約束的數據填充一些數據來補齊。顯然,證明樹需要真實數據之外的額外存儲空間,為了優化帶寬占用,可以不存儲證明樹部分,只存儲證明樹的root id(證明樹的內容可以臨時從真實數據中構建)。然后證明樹的merkle root id(CommD) 和真實數據的merkle root id一起構成自認證歸檔格式的元數據部分,然后這部分元數據和真實數據一起,序列化為filecoin數據存儲格式的CAR文件(Certified ARchives)。所謂自認證歸檔存儲,其實就是把IPLD 數據序列化為順序字節,然后把證明樹內容和真實數據內容一起序列化存儲,就是自認證歸檔存儲。如下圖所示。filecoin既支持原始數據的自認證歸檔存儲,也支持數據副本的自認證歸檔存儲。下圖是原始數據分片的自認證歸檔存儲過程,上面已經解釋,不在贅述。對于數據副本的自認證歸檔存儲,需要引入filecoin 的sector的概念。sector是一個數據結構,用于存儲和證明一個或多個數據分片。從原始數據構建副本的過程被成為seal,這個過程同樣是構建自認證歸檔存儲的過程,其證明樹的merkle root id 是CommR。

IPFS unixfs 設計

由于filecoin的自認證歸檔存儲基于IPFS的數據存儲格式,傳統posix 語義的文件需要轉換為IPFS unixfs的文件格式,才能比較方便地參與filecoin區塊鏈的復制證明和時空證明。IPFS unixfs 使用可插拔的數據分片算法對傳統posix 語義的文件進行分片。傳統posix 語義的文件是順序存儲的字節,IPFS unixfs 是基于分片的有向無環圖。IPFS unixfs的最小單位是分片,這些分片(leaves)被稱為葉子或者數據片(pieces),為了構建有向無環圖,必然需要引入中間文件對象(File objects),這些中間對象通過一定拓撲hash為一個root CID。IPFS unixfs 這種構建圖式數據存儲的方式被稱為IPLD,即是星際鏈式數據,這也是IPFS 內容尋址的基礎。如下圖所示,ipfs文件系統存儲一只貓的圖片形象表示:IPFS unixfs的這種設計代表了文件存儲范式的一種轉變,即從posix 語義(單機順序字節存儲、文件名檢索)向網絡化鏈式存儲的轉變(全網鏈式存儲,內容尋址)。

IPFS unixfs 目錄設計

目錄設計,或者是元數據設計,是所有文件系統設計的重中之重。對比傳統posix 語義的目錄設計和IPFS unixfs的目錄設計,可以更好的理解IPFS unixfs是如何把傳統類unix文件系統中文件轉化為鏈式文件存儲的傳統文件系統組織成樹形的目錄和文件,要么存儲在本地,要么存儲在云中。這種樹形結構已經成為人們認知數據存儲的基本方式。類似于這種組織方式,IPFS unixfs使用IPLD graph來表示目錄,來指向其他目錄或文件。由于IPLD graph的這種遞歸指向方式,IPFS unixfs可以存儲超大文件。當然,IPFS unixfs也可以單機存儲,把IPLD目錄對象單獨存儲一部分,和數據文件一起序列化存儲。

IPFS unixfs 應用

Textile本身就是基于ipfs的,非常適合存儲在filecoin中。Peergos cryptree 內置了IPFS unixfs 能力,可以輸出加密的IPLD graph。Git 也是基于DAG的方式存儲。一些區塊鏈的數據存儲格式本身就是IPLD 組織方式。可以通過修改代碼存儲為IPLD存儲方式。參考資料:《糟糕的 POSIX IO》
  • http://guleilab.com/2019/05/12/bad-posix-io/

  • https://git-scm.com/book/en/v1/Git-Branching-What-a-Branch-Is

  • https://github.com/ipfs/go-unixfs/blob/master/pb/unixfs.proto

  • https://docs.textile.io/concepts/threads/

《Cryptree: A Folder Tree Structure for Cryptographic File Systems》
  • https://training-course-material.com/training/Git_-_Under_the_Bonnet

—END—

【IPFS原力區】

價值觀:價值 共建 共享 榮耀

總部位于上海,聚集基于分布式網絡&存儲的眾多技術大咖和愛好者,深耕基于 IPFS 的商業生態建設和社區發展。

每周二舉辦“分布式存儲網絡”主題沙龍,聚集了眾多技術大咖和 IPFS 愛好者,通過持續輸出全面、精細、優質的IPFS咨詢和技術支持,將生態中的愛好者轉化為IPFS支持者和參與者,共建IPFS生態的健康發展。

協議學院活動? 快速了解

總結

以上是生活随笔為你收集整理的pb blob存储到image_【Filecoin相关】速懂 Filecoin 自认证存储设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。