摘要:理解白皮書第部分原文鏈接哦不,白皮書加密貨幣區(qū)塊鏈?zhǔn)澜缦矏郯灼?,也不例外。要理解的工作原理,最好一步一步地學(xué)習(xí)白皮書。從開始,白皮書中明確提到了三個實現(xiàn)。白皮書指出小值等于或小于直接存儲在上。
理解 IPFS 白皮書 第 1 部分
原文鏈接:https://decentralized.blog/un...
哦不,白皮書!加密貨幣 / 區(qū)塊鏈?zhǔn)澜缦矏郯灼?,IPFS 也不例外。 它起源于著名的由中本聰編寫的白皮書 Bitcoin: A Peer-to-Peer Electronic Cash System(反過來又引用了另一篇你不想知道的白皮書)。 當(dāng)我們深入加密貨幣時,我們將在后續(xù)的文章中看看比特幣白皮書。
關(guān)于白皮書,你需要了解的兩件事:
它們以 PDF 格式分發(fā)(因為它比 HTML 更難更改?。?/p>
白皮書很難,看起來很可怕并且包含至少一個數(shù)學(xué)公式。
IPFS 白皮書原文在這里: IPFS - Content Addressed, Versioned, P2P File System (DRAFT 3) 。 并且,理所應(yīng)當(dāng)?shù)赝泄茉?IPFS 上。
要理解 IPFS 的工作原理,最好一步一步地學(xué)習(xí)白皮書。 我將用兩個章節(jié)內(nèi)來一窺 IPFS 的底層技術(shù):
Distributed Hash Tables 分布式哈希表
Block Exchanges - BitTorrent 塊交換
Version Control Systems - Git 版本控制系統(tǒng)
Self-Certified Filesystems - SFS 自我認(rèn)證的文件系統(tǒng)
對應(yīng)到 ISO 協(xié)議棧如下圖:
好了,我們開始吧!
分布式散列表 (DHT) 什么是 DHT?DHT 就像 Python 中的 dict 對象或 Perl 的哈希(如果你有鍵,你就可以檢索到相應(yīng)的值),但 DHT 的數(shù)據(jù)分布在多個節(jié)點上。 維基百科文章 Distributed hash table 給出了很好的介紹。
在 IPFS 的例子中,鍵是內(nèi)容的哈希。 因此,向 IPFS 節(jié)點詢問具有哈希 QmcPx9ZQboyHw8T7Afe4DbWFcJYocef5Pe4H3u7eK1osnQ 的內(nèi)容,于是 IPFS 節(jié)點將在 DHT 中查找哪些節(jié)點保存了對應(yīng)的內(nèi)容。
如何有效地找到特定值(快速,盡可能少的網(wǎng)絡(luò)請求)以及如何管理 DHT 以便更改(進(jìn)入 / 離開網(wǎng)絡(luò)的節(jié)點或表中的新條目)容易被承受。這兩個問題在已有的 DHT 的實現(xiàn)方式各不相同。
其中一種實現(xiàn)稱為 Pastry,我喜歡這兩個視頻,其中 路由 (如何查找值)和 動態(tài) (如何處理節(jié)點添加 / 刪除)得到了很好的解釋。
Kademlia 和它的朋友們回到白皮書。 從 Kademlia 開始,白皮書中明確提到了三個 DHT 實現(xiàn)。 Kademlia 有自己的 白皮書 ,但我們暫時不去管。
Kademlia 是幾乎所有流行的 P2P 系統(tǒng)中都會使用的 DHT 協(xié)議,另外關(guān)于 Kedemlia 的 維基百科 也有很好介紹。
簡而言之,Kedemlia 使用節(jié)點的 ID 逐步接近具有所需哈希的節(jié)點(來自維基百科文章):
在搜索某些值時,算法需要知道相關(guān)的密鑰并分幾步探索網(wǎng)絡(luò)。 每個步驟都會找到更靠近密鑰的節(jié)點,直到聯(lián)系的節(jié)點返回該值或找不到更近的節(jié)點。 這非常有效:與許多其他 DHT 一樣,Kademlia 在總共 n 個節(jié)點的系統(tǒng)中僅需要聯(lián)系 O(log(n)) 個節(jié)點。
這里面的細(xì)節(jié)開始變得非常復(fù)雜,我認(rèn)為它不會幫助我們達(dá)到理解 IPFS 的目標(biāo),所以我們繼續(xù)前進(jìn)。 如果你喜歡類似的東西:這里有一個 很好的介紹 ,如果你想深入挖掘 Kademlia 白皮書的鏈接是 ^^^(譯者注:沒有理解這個符號的涵義,在和作者溝通中)。
IPFS 白皮書提到了另外兩個改進(jìn)了標(biāo)準(zhǔn) Kedemlia 的 DHT 實現(xiàn):
Coral DSHT:提高查找性能并減少資源使用。
S/Kademlia:使 Kademlia 更能抵御惡意攻擊。
IPFS DHT 實戰(zhàn)DHT 在 IPFS 中用于路由,換句話說:
宣布向網(wǎng)絡(luò)添加數(shù)據(jù)
幫助定位任何節(jié)點請求的數(shù)據(jù)。
白皮書指出:
小值(等于或小于 1KB)直接存儲在 DHT 上。 對于更大的值,DHT 存儲引用,即存儲數(shù)據(jù)塊對等的節(jié)點的 ID 值。
那么我們來看一下我們是否可以通過直接訪問 DHT 并添加和檢索小數(shù)據(jù)塊。
$ ipfs daemon # 確保能成功運行(首先安裝配置好 ipfs) $ echo "my tiny text" | ipfs add # 向當(dāng)前節(jié)點添加一個小于 1KB 的文本文件 QmfQKcXMLGvCxx6opNDwb1ptD1LJER6MPHdsMHCB1CXpFF $ ipfs cat QmfQKcXMLGvCxx6opNDwb1ptD1LJER6MPHdsMHCB1CXpFF # 檢查 my tiny text $ ipfs dht get /ipfs/QmfQKcXMLGvCxx6opNDwb1ptD1LJER6MPHdsMHCB1CXpFF # returns not found
所以現(xiàn)在我們有那個文本,我們想從 DHT 訪問它,但顯然,支持的 ipfs dht get 請求是以 / ipns / 開頭的鍵。
好的,所以我們創(chuàng)建了一個 IPNS ,看看我們是否可以直接查詢:
$ ipfs name publish QmfQKcXMLGvCxx6opNDwb1ptD1LJER6MPHdsMHCB1CXpFF # point a IPNS address to our content Published to QmYebHWdWStasXWZQiXuFacckKC33HTbicXPkdSi5Yfpz6: /ipfs/QmfQKcXMLGvCxx6opNDwb1ptD1LJER6MPHdsMHCB1CXpFF $ ipfs resolve QmYebHWdWStasXWZQiXuFacckKC33HTbicXPkdSi5Yfpz6 # check it # never returns, hmm IPNS doesn"t seem to be ready for production $ ipfs dht get /ipns/QmYebHWdWStasXWZQiXuFacckKC33HTbicXPkdSi5Yfpz6 # same thing but directly # does return binary data starting with 4/ipfs/QmfQKcXMLGvCxx6opNDwb1ptD1LJER6MPHdsMHCB1CXpFF
它確實有效,但現(xiàn)在似乎僅限于 IPNS 。我們還可以用 DHT 做些什么?
使用 DHT 找出哪些節(jié)點可以提供指定的數(shù)據(jù):
$ ipfs dht findprovs QmfQKcXMLGvCxx6opNDwb1ptD1LJER6MPHdsMHCB1CXpFF QmYebHWdWStasXWZQiXuFacckKC33HTbicXPkdSi5Yfpz6 QmRf4ERGvYpVo6HRa2VueZT8pWi8YvyLS3rW6ad2y83tdN # ^^^ there are both my nodes, so that works # Now ask the DHT for the address of the first peer that was returned $ ipfs dht findpeer QmYebHWdWStasXWZQiXuFacckKC33HTbicXPkdSi5Yfpz6 /ip4/176.92.234.78/tcp/4001 /ip4/85.74.239.218/tcp/38689 /ip4/127.0.0.1/tcp/4001 /ip4/192.168.1.30/tcp/4001 /ip6/::1/tcp/4001 /ip4/192.168.1.3/tcp/4001 /ip4/176.92.234.78/tcp/40443 # Oooh nice! We will visit this address notation in the next episode.
總而言之,我們在實踐中看到了一些和 DHT 相關(guān)的東西,但這項技術(shù)不像我希望的那樣直觀和實用。
是時候轉(zhuǎn)向應(yīng)用在 IPFS 的下一個令人興奮的技術(shù)了:
BitTorrent BitTorrent 如何運作?我們都知道 BitTorrent,但我們中的一些人(對,我也是)需要深入挖掘才能真正理解它。 這個演講是一個很好的介紹: Feross Aboukhadijeh:WebTorrent - JSConf.Asia 2014 。 演講者討論了他如何實現(xiàn)可以在瀏覽器中運行的 BitTorrent 客戶端,這要歸功于 WebRTC(一種很酷的技術(shù),可能以后會在我們的項目派上用場)。 它同樣徹底闡述了 DHT 的工作機制。
更多資料:
Peer-to-peer networking with BitTorrent (PDF)。 如果你只想讀一篇文章,那就選這篇。
Peer to Peer Content Delivery - BitTorrent(視頻)+ 幻燈片 (PDF)。
The BitTorrent Protocol Specification v2(標(biāo)準(zhǔn)規(guī)范,讀起來不會很困難)。
BitTorrent 和 IPFSIPFS 中的數(shù)據(jù)(塊)交換受 BitTorrent 的啟發(fā),但并不是和 BitTorrent 完全一樣的機制。 白皮書提到了 IPFS 使用的兩個 BitTorrent 的特性:
tit-for-tat(譯者注:針鋒相對)的策略(如果你不分享數(shù)據(jù),你也不會收到數(shù)據(jù))
優(yōu)先獲取稀有的數(shù)據(jù)(提高性能等等,請參閱上面的第一個 PDF)
一個值得注意的區(qū)別是,在 BitTorrent 中,每個文件都有多帶帶的一組對等節(jié)點(彼此形成一個 P2P 網(wǎng)絡(luò)),而 IPFS 則是所有數(shù)據(jù)都在對等節(jié)點形成的一個大集群中。 IPFS BitTorrent 的變種被稱為 BitSwap,我將在下一篇中討論它。
我們在實踐一下 swarm 吧。
# Make sure you have the daemon running $ ipfs swarm peers /ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ /ip4/104.236.151.122/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx /ip4/128.199.219.111/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu /ip4/178.62.61.185/tcp/4001/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3
當(dāng)你剛啟動守護(hù)進(jìn)程時,你會連接到幾個 “種子對等節(jié)點”。 過了一會兒,對等節(jié)點的數(shù)量迅速增長。
另一個查詢 swarm 的命令:
$ ipfs swarm addrs QmNRuQrwtGgeVQgndTny4A4Rukg7GR7vzDJrVJxUBfqevk (4) /ip4/127.0.0.1/tcp/4001 /ip4/172.31.41.39/tcp/4001 /ip4/35.167.26.28/tcp/4001 /ip6/::1/tcp/4001 QmNSJohkvvBVmHeN7KUZnm4X84GA6Znbv6ZmvsTAjbw3AB (5) /ip4/10.0.1.8/tcp/4001 /ip4/127.0.0.1/tcp/4001 /ip4/174.44.163.74/tcp/16012 /ip6/::1/tcp/4001 /ip6/fd15:462e:f8fd:695e:9161:27dd:7f78:d242/tcp/4001 QmNTJyhCYcbv5GdnqtdEwTfJCgY6pV4PJiNTtAmuoxnQak (3) /ip4/127.0.0.1/tcp/4001 /ip4/94.176.232.68/tcp/4001 /ip6/::1/tcp/4001 QmNTZy7TfXvsHczwwV3EYbxRZN5gthgicG9GiroD7C4ZrP (4) /ip4/127.0.0.1/tcp/4001 /ip4/172.20.255.127/tcp/4001 /ip4/54.229.227.53/tcp/4001 /ip6/::1/tcp/4001 .
這些是本地節(jié)點在 swarm 中已知的地址,頂部的哈希是 peerId。
有了這些信息,您就可以連接到對等節(jié)點,比如這樣:
$ ipfs swarm connect /ip4/114.91.202.180/tcp/34746/ipfs/QmfTgdg6GkqJtUrWAYo69GjcLrjQq9LjTjgW3KZ1ux1X6U connect QmfTgdg6GkqJtUrWAYo69GjcLrjQq9LjTjgW3KZ1ux1X6U success
后面會介紹更多的關(guān)于 BitSwap 的信息。
休息一下吧Pfew(?),到這里已經(jīng)學(xué)習(xí)到了很多理論和干貨,但是我們的 IPFS 白皮書的學(xué)習(xí)路程甚至還未過半! 因此,為了讓它們更全面地被理解,并為了休息,放空大腦,去公園散散步,順便聽聽這個播客:The Quiet Master of Cryptocurrency — Nick Szabo。 它到無處不在,但我發(fā)現(xiàn)它非常有趣。它把觀察視角從比特級別拉遠(yuǎn)到一些到 “什么是錢?” 之類的(宏觀的)東西。
強烈建議聽一下,當(dāng)你聽完后,我們繼續(xù)。
版本控制系統(tǒng) - Git白皮書關(guān)于版本控制系統(tǒng)的整個部分都復(fù)制在這里:
版本控制系統(tǒng)提供了對隨時間變化的文件進(jìn)行建模的設(shè)施,并有效地分發(fā)不同的版本。
流行版本控制系統(tǒng) Git 提供了強大的 Merkle DAG 對象模型,以分布式友好的方式捕獲對文件系統(tǒng)樹的更改。
不可更改的對象表示文件(blob),目錄(樹)和更改(提交)。
通過加密 hash 對象的內(nèi)容,讓對象可尋址。
鏈接到其他對象是嵌入的,形成一個 Merkle DAG。這提供了有用的完整性和 workflow 屬性。
大多數(shù)版本元數(shù)據(jù)(分支,標(biāo)簽等等)都只是指針引用,因此創(chuàng)建和更新的代價都很小。
版本改變只是更新引用或者添加對象。
分布式版本改變對其他用戶而言只是轉(zhuǎn)移對象和更新遠(yuǎn)程引用。
讓我們逐行理解它:
Ad 1. 不可變對象表示文件(blob),目錄(樹)和更改(提交)。
Git 只添加數(shù)據(jù)。 所以 blob,樹和提交是不可變的。 其中任何一個數(shù)據(jù)的最終版本是由特殊的引用決定的(見第 4 和第 5 點)。
Ad 2. 通過加密 hash 對象的內(nèi)容,讓對象可尋址。
在 git 中,引用它們時不使用文件或目錄名。 Git 使用 SHA1 散列內(nèi)容(或列出或提交)并在其數(shù)據(jù)庫中使用這些散列值。這篇文章對于它的工作機制有很深刻的洞察: Git under the hood (從 “現(xiàn)在讓我們來看看 Git 如何做到這一切” 這一節(jié)開始閱讀)
Ad 3. 鏈接到其他對象是嵌入的,形成一個 Merkle DAG。這提供了有用的完整性和 workflow 屬性。
哦,天哪,一個 Merkle DAG! 不用擔(dān)心,它實際上并不像聽起來那么可怕。
Merkle 樹是二叉樹,其中父級包含兩個子節(jié)點的哈希值的拼接后內(nèi)容的哈希值。 這解釋了完整性屬性的由來:數(shù)據(jù)塊中的任何更改都會導(dǎo)致根節(jié)點發(fā)生更改。 只需要一點點元數(shù)據(jù)(叔節(jié)點和父節(jié)點,可以是不受信任的)和受信任的根節(jié)點,我們就可以驗證塊的有效性。
現(xiàn)在,Merkle DAG 與 Merkle 樹不同。不同之處在于解釋:Merkle DAG 和 JRFC 20 - Merkle DAG
簡而言之:Merkle DAG 更通用,因為它不是二叉樹而是圖,任何節(jié)點都可以包含數(shù)據(jù),而不僅僅是 Merkle 樹中的葉子節(jié)點。
它仍然有點模糊,當(dāng)我們看一下 IPFS Merkle DAG 時,我會再次討論它。
Ad 4. 和 5. 大多數(shù)版本控制元數(shù)據(jù)(分支,標(biāo)簽等)只是指針引用,因此創(chuàng)建和更新成本低廉。版本更改僅更新引用或添加對象。
這里提供了一個可視化的方式觀察 git 的運行機制: Git for Computer Scientists 這里可以看出分支,HEAD 和標(biāo)簽僅僅是對提交的引用。
Ad 6. 將版本更改分發(fā)給其他用戶只是傳輸對象和更新遠(yuǎn)程引用。
這里說的是什么,我覺得沒有必要解釋:)
自我認(rèn)證的文件系統(tǒng) - SFS這項技術(shù)用于實現(xiàn) IPFS 的 IPNS 名稱系統(tǒng)。它允許我們?yōu)檫h(yuǎn)程文件系統(tǒng)生成地址,用戶可以驗證地址的有效性。
白皮書指出:
SFS 引入了一種用于構(gòu)建自我認(rèn)證文件系統(tǒng)的技術(shù):使用以下方案尋址遠(yuǎn)程文件系統(tǒng)
/sfs/:
其中 Location 是服務(wù)器網(wǎng)絡(luò)地址,另外:
HostID = hash(public_key || Location)
因此,SFS 文件系統(tǒng)的命名實際上對其服務(wù)器進(jìn)行認(rèn)證。
這已經(jīng)不言而喻了,我們將在下一篇中看到它的實際應(yīng)用:Understanding the IPFS White Paper part 2
希望你將對這篇文章的看法通過推特給我 @pors。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/24141.html
摘要:資深區(qū)塊鏈技術(shù)開發(fā)者,現(xiàn)致力于在中國的技術(shù)推廣的競爭對手。接上一篇,今天繼續(xù)講的競爭對手們。小編對比了里面各個項目的源代碼熱度,顯然遠(yuǎn)遠(yuǎn)超過其他競爭對手。 作者簡介:董天一 ,IPFS/Filecoin中國區(qū)技術(shù)布道人 ,《IPFS指南》作者。畢業(yè)于北京大學(xué)軟件與微電子學(xué)院曾擔(dān)任甲骨文亞洲研發(fā)中心(中國)數(shù)據(jù)庫開發(fā)工程師。資深區(qū)塊鏈技術(shù)開發(fā)者,現(xiàn)致力于IPFS/Filecoin在中國的...
摘要:作者簡介董天一,中國區(qū)技術(shù)布道人,指南作者。相關(guān)文章和視頻推薦董天一什么是二圓方圓學(xué)院匯集大批區(qū)塊鏈名師,打造精品的區(qū)塊鏈技術(shù)課程。 作者簡介:董天一,IPFS/Filecoin中國區(qū)技術(shù)布道人,《IPFS指南》作者。畢業(yè)于北京大學(xué)軟件與微電子學(xué)院曾擔(dān)任甲骨文亞洲研發(fā)中心(中國)數(shù)據(jù)庫開發(fā)工程師資深區(qū)塊鏈技術(shù)開發(fā)者,現(xiàn)致力于IPFS/Filecoin在中國的技術(shù)推廣。 前兩篇介紹了IP...
摘要:作者簡介董天一中國區(qū)技術(shù)布道人指南作者。資深區(qū)塊鏈技術(shù)開發(fā)者,現(xiàn)致力于在中國的技術(shù)推廣的競爭對手。的共享硬盤代幣每月支付一次。相關(guān)文章和視頻推薦董天一和競爭對手們二圓方圓學(xué)院匯集大批區(qū)塊鏈名師,打造精品的區(qū)塊鏈技術(shù)課程。 作者簡介:董天一 ,IPFS/Filecoin中國區(qū)技術(shù)布道人 ,《IPFS指南》作者。畢業(yè)于北京大學(xué)軟件與微電子學(xué)院曾擔(dān)任甲骨文亞洲研發(fā)中心(中國)數(shù)據(jù)庫開發(fā)工程師...
摘要:區(qū)塊鏈技術(shù)導(dǎo)航收集整理最全面最優(yōu)質(zhì)的區(qū)塊鏈技術(shù)開發(fā)相關(guān)資源。以后找不到文檔資料的時候去導(dǎo)航站看看。先亮個像,我長這樣導(dǎo)航站內(nèi)容區(qū)塊鏈開發(fā)所涉及的資源如項目白皮書黃皮書文檔及翻譯地址庫開發(fā)工具鏈開發(fā)案例音視頻課程等。 區(qū)塊鏈技術(shù)導(dǎo)航:收集整理最全面最優(yōu)質(zhì)的區(qū)塊鏈(BlockChain)技術(shù)開發(fā)相關(guān)資源。以后找不到文檔資料的時候去導(dǎo)航站看看。 先亮個像,我長這樣:showImg(https...
摘要:白皮書官網(wǎng)安裝參考安裝如果沒有環(huán)境,首先需要安裝環(huán)境配置環(huán)境變量執(zhí)行加入執(zhí)行強制保存退出。預(yù)編譯安裝包安裝上述這個問題暫時還沒解決,依賴以及中國網(wǎng)關(guān)的問題。 filecoin白皮書 官網(wǎng):ipfs.io [TOC] 安裝 參考: IPFS Alpha Demo go-ipfs#build-from-source 安裝Go IPFS 如果沒有Go環(huán)境,首先需要安裝Go環(huán)境: br...
閱讀 920·2021-09-29 09:35
閱讀 1265·2021-09-28 09:36
閱讀 1535·2021-09-24 10:38
閱讀 1083·2021-09-10 11:18
閱讀 645·2019-08-30 15:54
閱讀 2510·2019-08-30 13:22
閱讀 1975·2019-08-30 11:14
閱讀 711·2019-08-29 12:35