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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

使用 Solid 私有化存储 IPFS 文件哈希值

發(fā)布時(shí)間:2023/12/9 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用 Solid 私有化存储 IPFS 文件哈希值 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背景

星際文件系統(tǒng) IPFS(InterPlanetary File System)是一個(gè)面向全球的、點(diǎn)對(duì)點(diǎn)的分布式文件系統(tǒng),目標(biāo)是為了補(bǔ)充(甚至是取代)目前統(tǒng)治互聯(lián)網(wǎng)的超文本傳輸協(xié)議(HTTP),將所有具有相同文件系統(tǒng)的計(jì)算設(shè)備連接在一起。原理用基于內(nèi)容的地址替代基于域名的地址,也就是用戶尋找的不是某個(gè)地址而是儲(chǔ)存在某個(gè)地方的內(nèi)容,不需要驗(yàn)證發(fā)送者的身份,而只需要驗(yàn)證內(nèi)容的哈希,通過(guò)這樣可以讓網(wǎng)頁(yè)的速度更快、更安全、更健壯、更持久。

社交互聯(lián)數(shù)據(jù) Solid (Social Linked Data) 由萬(wàn)維網(wǎng)發(fā)明者 Tim Berners-Lee 發(fā)起,該項(xiàng)目旨在從根本上改變 Web 應(yīng)用程序的中心化趨勢(shì), 它將真正地讓數(shù)據(jù)所有權(quán)屬于用戶,并改善隱私問(wèn)題。它是一組約定和工具,主要用于構(gòu)建基于關(guān)聯(lián)數(shù)據(jù)的分布式社交應(yīng)用。

簡(jiǎn)單來(lái)說(shuō),IPFS 是一個(gè)任何人都可以訪問(wèn)的點(diǎn)對(duì)點(diǎn)存儲(chǔ)平臺(tái)(可以存儲(chǔ)大量非結(jié)構(gòu)化數(shù)據(jù)),Solid 是一個(gè)必須授權(quán)才可以使用的結(jié)構(gòu)化數(shù)據(jù)計(jì)算和存儲(chǔ)平臺(tái)。

我們想要解決的問(wèn)題是,如何私有化存儲(chǔ) IPFS 文件的哈希值。存儲(chǔ)在 IPFS 上的文件哈希如果被泄漏,任何人都可以訪問(wèn)該文件,這是極不安全的,不是每個(gè)人都想把自己的文件上傳到公有網(wǎng)絡(luò)里。解決哈希值的泄漏有兩種方案:

  • 自建 IPFS 私有節(jié)點(diǎn)。該方案成本比較大,需要根據(jù) IPFS 開放的協(xié)議重頭來(lái)寫;
  • 自己寫一套或使用成熟的互聯(lián)網(wǎng)訪問(wèn)控制(WAC,Web Access Control)方案;
  • 綜合考慮成本、時(shí)間等因素,我們使用第二種方案。而第二種方案有非常多的實(shí)現(xiàn),同時(shí) Solid 是所有實(shí)現(xiàn)中最具開放性、代表性和權(quán)威性的。WAC 本身就是由 Tim Berners-Lee 在 2009 年提出的方案,如今用于 Solid 項(xiàng)目中是天作之合。

    Solid 一個(gè)巨大的優(yōu)勢(shì)在于,它想將數(shù)據(jù)的所有權(quán)還歸用戶。如果想讓用戶愿意上傳隱私數(shù)據(jù)到 IPFS 網(wǎng)絡(luò)中,一個(gè)重要的因素在于如何保證用戶上傳的文件哈希不被其他人非法獲取到,而 Solid 不僅可以安全的存儲(chǔ)文件哈希值,還可以保證文件哈希值僅為用戶所有。

    于是我們寫了個(gè) solid-ipfs 框架用來(lái)解決這個(gè)問(wèn)題。

    解決方案

    代碼在 Github 上已開源:Eximua/solid-ipfs。

    以下是以一個(gè) WebId (用戶在 Solid 網(wǎng)絡(luò)中的唯一標(biāo)識(shí))為 https://alicea.solid.authing.... 的用戶舉例。


    這是用戶 Alicea 在 Solid 上的個(gè)人主頁(yè),其中 Profile 和 Public Folder 是可以公開被讀取的數(shù)據(jù)(但是寫入需要 Alicea 的權(quán)限確認(rèn)),Inbox 為隱私數(shù)據(jù),只有 Alicea 本人可以讀取和寫入。我們上傳到 IPFS 網(wǎng)絡(luò)中的私有文件哈希值將被存儲(chǔ)到 Inbox 中。

    簡(jiǎn)單來(lái)說(shuō)的話,Profile、Public Folder 和 Inbox 可以理解為公有文件夾和私有文件夾。你所有的公有文件可以放到到公有文件夾里,私有的隱私數(shù)據(jù)可以放到私有文件夾內(nèi)。

    更簡(jiǎn)單來(lái)說(shuō),這就是 Solid Pod。

    Solid 的數(shù)據(jù)存儲(chǔ)使用 RDF,RDF 是用來(lái)描述網(wǎng)絡(luò)資源的一個(gè)框架,他把所有資源以三元組的形式進(jìn)行描述。比如(姚明,身高,226cm)定義了姚明的身高是 226 厘米。

    示例中的 (alicea, type, Person) 則定義了 Alicea 的類型是人。同理,(alicea, hash, QmVCZeNR7eQNEu5Gekqqbnmk85v66cFHHjZZTGZxAqA2hD) 定義了 Alicea 的哈希值為 "QmVCZeNR7eQNEu5Gekqqbnmk85v66cFHHjZZTGZxAqA2hD"(該哈希來(lái)自于 IPFS 的某個(gè)文件)。

    當(dāng)然這種描述方式不是語(yǔ)義化的,僅供示例參考。

    為了對(duì)這些 RDF 進(jìn)行讀寫操作,RDF 官方封裝了 rdflib.js ,使語(yǔ)義計(jì)算可以在 Web 上執(zhí)行(也就是可以在瀏覽器里執(zhí)行語(yǔ)義計(jì)算啦)。

    我們最終語(yǔ)義化的私有存儲(chǔ)樣例如下:

    可以看到,我們使用了 "ipfs/hash" 這個(gè)命名空間(可以理解成文件夾)來(lái)存儲(chǔ)相應(yīng)的 IPFS 文件哈希值,并且把每一個(gè)哈希值作為一個(gè)文件(哈希值.txt)存儲(chǔ)到 Solid Pod 中。這樣用戶在使用 Solid 賬號(hào)登錄之后我們就可以讀取用戶的文件哈希值列表,然后從 IPFS 網(wǎng)絡(luò)中拉取文件了。

    具體的技術(shù)細(xì)節(jié)就不再細(xì)講了,感興趣的可以自行查看代碼:Eximua/solid-ipfs。

    使用 solid-ipfs

    最后介紹一下 solid-ipfs 的使用方法。

    solid-ipfs 其實(shí)不止可以寫入私有數(shù)據(jù),還可以寫入公有數(shù)據(jù)。

    安裝

    $ npm install solid-ipfs --save

    使用

    import SolidIPFS from 'solid-ipfs';const main = async () => {const solidIpfs = new SolidIPFS({url: 'YOUR_SOLID_URL', // e.g. https://alicea.solid.authing.cn/inbox/});const result = await solidIpfs.storeHash({hash: 'YOUR_IPFS_HASH',});console.log(result, result ? '保存成功' : '保存失敗'); }main();

    通過(guò)訪問(wèn)<YOURL_SOLID_URL>/ipfs/hash/ 之后即可獲得用戶的 IPFS 哈希值列表

    如果你還沒有 Solid 賬號(hào),可以點(diǎn)擊這里注冊(cè)。

    私有文件示例

  • https://alicea.solid.authing....
  • import SolidIPFS from 'solid-ipfs';const main = async () => {const solidIpfs = new SolidIPFS({url: 'https://alicea.solid.authing.cn/inbox/', // inbox -> private});const result = await solidIpfs.storeHash({hash: 'YOUR_IPFS_HASH',});console.log(result, result ? '保存成功' : '保存失敗'); }main();

    公有文件示例

  • https://alicea.solid.authing....
  • https://alicea.solid.authing....
  • import SolidIPFS from 'solid-ipfs';const main = async () => {const solidIpfs = new SolidIPFS({url: 'https://alicea.solid.authing.cn/public/', // public -> public});const result = await solidIpfs.storeHash({hash: 'YOUR_IPFS_HASH',});console.log(result, result ? '保存成功' : '保存失敗'); }main();

    題外話,有的人可能對(duì) RDF、語(yǔ)義計(jì)算這些概念不熟悉,這里再簡(jiǎn)單介紹下。

    RDF 為什么叫資源描述框架,這個(gè)資源具體指代什么?

    RDF 中的資源指代一切資源,它是一個(gè)通用的,可以定義一切的規(guī)范。比如:文件夾、文件、文件類型、代碼、聊天內(nèi)容、郵件等都屬于資源,RDF 主要定義了這些不同類型資源的存儲(chǔ)方式和數(shù)據(jù)規(guī)范。

    我們?yōu)槭裁葱枰?RDF,它能解決什么問(wèn)題?

    RDF 看重語(yǔ)義化,可移植性和互操作性。語(yǔ)義化指你的數(shù)據(jù)存儲(chǔ)規(guī)范必須是人類能理解的;可移植性代表當(dāng)我想把我的數(shù)據(jù)從 A 平臺(tái)移植到 B 平臺(tái)時(shí),不需要做任何的數(shù)據(jù)格式兼容;互操作性指我在 A 平臺(tái)存儲(chǔ)的數(shù)據(jù)在 B 平臺(tái)上也可以進(jìn)行讀取和計(jì)算。

    簡(jiǎn)單來(lái)說(shuō),就是所有的數(shù)據(jù)都共享同一套規(guī)范,減少為了兼容而產(chǎn)生的數(shù)據(jù)對(duì)齊時(shí)間,提升效率。RDF 是語(yǔ)義互聯(lián)網(wǎng)(Web 3.0)的重要組成部分,它的愿景是全萬(wàn)維網(wǎng)的數(shù)據(jù)互通,變成一個(gè)大型計(jì)算平臺(tái),目前這個(gè)概念更有名的叫法為“知識(shí)圖譜”。

    Solid 資源列表:

  • Solid 中文網(wǎng)
  • Solid 中文社區(qū)
  • ?3. Solid Pod 中國(guó)節(jié)點(diǎn)
    ?4. solid-ipfs
    ?

    總結(jié)

    以上是生活随笔為你收集整理的使用 Solid 私有化存储 IPFS 文件哈希值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。