【IPFS官方】js-ipfs 0.41.0釋出

買賣虛擬貨幣

隨著Filecoin主網上線日期的日益臨近,廣大投資者對Filecoin挖礦的關注度也越來越高。但是市場上銷售礦機/算力的方式多種多樣:有賣整機的、有賣算力的;有家庭礦機、有專業礦機、有礦池叢集;有人說可以自己在家裡挖,有人說必須在專業礦場裡才能挖……到底哪種說法正確呢?很多投資者對此有些迷茫。

亮點

一個巨大的飛躍

非同步等待和非同步可迭代(Async Await and Async Iterables)

我們已經完成了對js-ipfs內部構件的巨大重構,切換到使用Promises和async/ awaitover Callbacks以及使用非同步可迭代物件,而不是Node.js Streams和Pull Streams。實際上不只是js-ipfs內部,而是整個堆疊,包括libp2p,IPLD和多格式。
請注意-此版本對核心API進行了重大更改,因此,請參考下面的“ API更改 ”部分以獲取所有資訊。
這是一段漫長而激動的旅程,但這種重構為消費者、貢獻者和核心開發人員帶來了許多難以置信的即時和未來收益,使所有工作和努力都值得。總結一下,我們已經完成了如下工作:

  • 預設情況下切換到流式API以減少記憶體壓力

  • 透過刪除緩衝,Node.js和Pull Stream API減少了API表面積

  • 減少了程式碼庫中的程式碼量和我們所依賴的依賴項數量(用於較小的瀏覽器包和更快的安裝時間)

  • 切換到使用非同步可迭代物件以流式傳輸資料以幫助使流式傳輸更易於訪問

  • 切換為使用async/,await這樣我們將獲得更好的錯誤堆疊跟蹤並提高了可讀性和可維護性

在JavaScript中使用async/ await在生態系統中獲得了廣泛的關注,並且正迅速成為編寫慣用JS的實際方法。我們希望js-ipfs 與時俱進,並透過使用現代JS功能,技術和做法繼續對貢獻者有吸引力。進行這些更改的主要想法是使程式碼比以往更容易貢獻,更易於理解,更易於維護。
這個變化是如此之大,如此之重要,我們寫了整篇部落格文章來解釋這些變化背後的動機。因此這篇文章有一定的深度!
為了您的觀看樂趣,我們還對該重構進行了一些統計:

  • 從我們的27個直接依賴項中刪除了 package.json

  • 我們的瀏覽器捆綁包中減少了214個模組

  • 155 KB較輕的瀏覽器捆綁(unpkg.com/[email protected] VS unpkg.com/[email protected]) -小於18% !

  • 124 KB較輕的ipfs-http-client瀏覽器捆綁(unpkg.com/[email protected] VS unpkg.com/[email protected]) -小於60% !

  • 淨刪除約2,600行程式碼

  • 從ipfs-http-client(net)刪除了約360行程式碼

  • CI執行時間縮短約10分鐘

而且其中許多統計資訊僅適用於js-ipfs和js-ipfs-http-client-冰山一角!對於IPFS,libp2p,IPLD和多格式之間的60-70個依賴關係(https://github.com/ipfs/js-ipfs/issues/1670),也有與此類似的更改。

UnixFS v1.5

事實證明,對於程式包管理器來說,保留檔案後設資料(尤其是上次修改時間mtime)非常重要。檔案mtime允許他們選擇性地僅同步已更改的資料。到目前為止,如果要在IPFS上託管大型資料集(如程式包管理器的儲存庫),將很難進行更新。

“那麼永久網路呢?” 這絕對不會妨礙軟體包管理器儲存庫的特定快照永久可用。後設資料僅使差異能夠匯入,而不是整個資料。因此,當我說“難以更新”時,就像我在那裡所做的那樣,我的意思是緩慢和/或不可能。當擁有TB級(或更多)軟體包資料並且有人釋出了一個新軟體包時,只更改了很小一部分,那麼再次匯入所有內容是很不方便的。檔案確實可以很好地指示發生了什麼變化,現在就可以在IPFS中使用它!
例如,在將檔案新增到IPFS時,有兩個jsipfs add允許mode和mtime保留的新選項:

$ jsipfs add -r --preserve-mtime --preserve-mode ~/Desktop/gif

added QmT6WX9McZyx5ZoisRgpsjYKDBWnYpMnBLpfAgjW5kavBA gif/yesthisisdog.jpg
added QmXMrFfZ9zHLZKN7xP2dX76YFFhvBJsQkd4fLnTDkyR31Q gif

在新的選擇之外並沒有大的改變,現在,當你列出目錄內容模式Mode和Mtime資訊時:

$ jsipfs ls QmXMrFfZ9zHLZKN7xP2dX76YFFhvBJsQkd4fLnTDkyR31Q -v

Mode       Mtime                           Hash                                           Size  Name
-rw-r--r-- Apr 16, 2018, 12:20:33 PM GMT+1 QmT6WX9McZyx5ZoisRgpsjYKDBWnYpMnBLpfAgjW5kavBA 87779 yesthisisdog.jpg

持久儲存該檔案模式mode也非常有效,因為它開啟了以前不可能的NFS型別用例。想象一下,node_modules目錄由IPFS支援並安裝在檔案系統上-該檔案mode將允許其中的所有node_modules/.bin檔案按照您的期望執行。

最酷的事情是它完全向後相容。僅當您選擇加入後設資料時,給定檔案/目錄的CID才會更改,否則CID保持不變。這真的太棒了 !

同時存在大量更改,為輸入和輸出的CLI,HTTP和核心API新增了後設資料功能。還有兩個新的MFS命令touch,chmod它們允許您隨時更改後設資料!
有關所有新UnixFS v1.5內容的詳細資訊,請參見下面的“ API更改”部分。

API變更

核心API

此版本中有重大且重大的核心API更改。請參閱遷移指南。

  • IPFS不是可以例項化使用的類IPFS.create。IPFS節點例項不是事件發射器。

  • 如果設定為,init傳遞給的選項IPFS.create現在將不執行任何初始化步驟false。以前,如果儲存庫已經存在,它將被初始化。這已不再是這種情況。如果您希望初始化節點,但僅在儲存庫存在的情況下,則傳遞init: { allowNew: false }給建構函式。

  • 例項.ready屬性已刪除。請IPFS.create改用。

  • IPFS.createNode已被刪除,請IPFS.create改用。

  • 任何API方法均不再支援回撥。請使用諸如callbackifyAPI方法之類的實用程式,該實用程式返回Promises來模擬以前的行為。有關更多資訊,請參見遷移指南。

  • 委派的對等和內容路由模組不再作為核心的一部分包含在內(但如果從命令列啟動js-ipfs守護程式,則仍然可用)。如果您希望使用委託路由並在Node.js或瀏覽器中以程式設計方式建立節點,則必須npm install libp2p-delegated-content-routing和/或在中npm install libp2p-delegated-peer-routing提供它們的配置例項options.libp2p。有關更多說明,請參見模組儲存庫:

  • https://github.com/libp2p/js-libp2p-delegated-content-routing

  • https://github.com/libp2p/js-libp2p-delegated-peer-routing

  • add 現在返回非同步可迭代。

  • add現在接受輸入的mode和mtime選項,以允許為新增的檔案設定模式和mtime後設資料。有關更多資訊,請參見核心介面文件。

  • add結果現在包含一個cid屬性(一個CID例項),而不是一個字串hash屬性。

  • add結果現在包括mode和mtime屬性(如果已設定)。

  • addReadableStream,addPullStream已被刪除。請參閱遷移指南以獲取更多資訊。

  • addFromStream已被刪除。使用add代替。

  • addFromFs已被刪除。請使用匯出的globSource實用程式並將結果傳遞給add。有關更多詳細資訊和示例,請參見glob源文件。

  • addFromURL已被刪除。請使用匯出的urlSource實用程式並將結果傳遞給add。有關更多詳細資訊和示例,請參見URL源文件。

  • bitswap.stat結果已更改- wantlist值現在是CID例項的陣列,peers現在是string[]對等ID的一個。

  • bitswap.wantlist現在返回一個CID例項陣列。

  • block.rm 現在返回非同步可迭代。

  • block.rm現在產生的物件{ cid: CID, error: Error }。

  • block.stat結果現在包含一個cid屬性(其值為CID例項)而不是一個key屬性。

  • dht.findProvs,dht.provide,dht.put和dht.query現在所有的非同步迭代返回。

  • dht.findPeer,dht.findProvs,dht.provide,dht.put和dht.query現在產量/返回一個物件{ id: string, addrs: Multiaddr[] },而不是一個的PeerInfo例項(或多個)。

  • added files.chmod已新增。有關資訊,請參見核心介面文件。

  • files.flush現在返回已重新整理路徑的根CID(/預設情況下)

  • files.lsPullStream並files.lsReadableStream已被刪除。請參閱遷移指南以獲取更多資訊。

  • files.ls 現在返回非同步可迭代。

  • files.ls結果現在包含一個cid屬性(其值為CID例項)而不是一個hash屬性。

  • files.ls結果現在包括mode和mtime屬性(如果已設定)。有關更多資訊,請參見核心介面文件。

  • files.ls不再需要long(核心)選項-預設情況下,您將接收所有資料。

  • files.mkdir現在接受mode和mtime選項以允許設定模式和mtime後設資料。有關更多資訊,請參見核心介面文件。

  • files.readPullStream並files.readReadableStream已被刪除。請參閱遷移指南以獲取更多資訊。

  • files.read 現在返回非同步可迭代。

  • files.stat結果現在包含一個cid屬性(其值為CID例項)而不是一個hash屬性。

  • files.stat結果現在包括mode和mtime屬性(如果已設定)。有關更多資訊,請參見核心介面文件。

  • added files.touch已新增。有關資訊,請參見核心介面文件。

  • files.write現在接受mode和mtime選項以允許設定模式和mtime後設資料。有關更多資訊,請參見核心介面文件。

  • get現在返回非同步可迭代。content從迭代器產生的物件的屬性值現在是一個非同步可迭代的BufferList物件。

  • id結果已更改,該addresses屬性現在為Multiaddr[]

  • name.resolve現在返回非同步可迭代。在發現數量之前,它會產生越來越精確的解析值,直到從仲裁群體16中選擇出最佳值為止。“最佳”解析值是迭代器生成的最後一項。如果您只對這個最佳價值感興趣,可以it-last像這樣提取它:const last = require()
    await last(ipfs.name.resolve())

  • object.get現在接受一個timeout選項。TimeoutError如果在超時視窗內未收到任何資料,將導致該方法丟擲。可以將其作為a number或a 傳遞string。如果number傳遞了a,則將其解釋為毫秒;如果傳遞了字串,則將其解釋為人類可讀的duration。

  • ls 現在返回非同步可迭代。

  • ls結果現在包含一個cid屬性(其值為CID例項)而不是一個hash屬性。

  • ls結果現在包括mode和mtime屬性(如果已設定)。有關更多資訊,請參見核心介面文件。

  • pin.add結果現在包含一個cid屬性(一個CID例項),而不是一個字串hash屬性。

  • pin.add現在接受一個timeout選項。TimeoutError如果在超時視窗內未收到任何資料,將導致該方法丟擲。可以將其作為a number或a 傳遞string。如果number傳遞了a,則將其解釋為毫秒;如果傳遞了字串,則將其解釋為人類可讀的duration。

  • pin.ls 現在返回非同步可迭代。

  • pin.ls結果現在包含一個cid屬性(一個CID例項),而不是一個字串hash屬性。

  • pin.rm結果現在包含一個cid屬性(一個CID例項),而不是一個字串hash屬性。

  • ping 現在返回非同步可迭代。

  • refs而refs.local現在非同步迭代返回。

  • refs現在接受一個timeout選項。TimeoutError如果在超時視窗內未收到任何資料,將導致該方法丟擲。可以將其作為a number或a 傳遞string。如果number傳遞了a,則將其解釋為毫秒;如果傳遞了字串,則將其解釋為人類可讀的duration。

  • repo.gc 現在返回非同步可迭代。

  • stats.bw 現在返回非同步可迭代。

  • swarm.peers現在返回一個物件陣列,其peer屬性為string,而不是PeerId例項。

  • swarm.addrs現在返回物件陣列,{ id: string, addrs: Multiaddr[] }而不是PeerInfo例項。

HTTP API

  •  /api/v0/add現在支援以下附加多頭,允許mode和mtime後設資料,對單個檔案進行設定:

  • mode 檔案模式以應用於建立的UnixFS條目 [string]

  • mtime 在Unix紀元之前或之後的修改時間(以秒為單位),以應用於建立的UnixFS條目 [number]

  • mtime-nsecs 修改時間分數(以納秒為單位) [number]

  • /api/v0/add現在返回檔案Mode,Mtime並且MtimeNsecs如果集。

  • /api/v0/file/ls已被刪除,請/api/v0/ls改用。

  • added /api/v0/files/chmod已新增,並且支援以下查詢字串args:

  • arg 要應用模式的檔案的路徑 [string]

  • mode 檔案模式適用 [string]

  •  /api/v0/files/ls現在返回檔案Mode,Mtime並且MtimeNsecs如果集。

  • /api/v0/files/mkdir現在支援支援以下附加查詢字串args:

  • mode 檔案模式適用 [string]

  • mtime 修改時間(以Unix紀元為準)之前或之後的秒數 [number]

  •  /api/v0/files/stat現在返回檔案Mode,Mtime並且MtimeNsecs如果集。

  • added /api/v0/files/touch已新增,並且支援以下查詢字串args:

  • arg 要應用模式的檔案的路徑 [string]

  • mtime 修改時間(以Unix紀元為準)之前或之後的秒數 [number]

  •  /api/v0/files/write現在支援以下其他多部分標題:

  • mode 檔案模式以應用於建立的UnixFS條目 [string]

  • mtime 在Unix紀元之前或之後的修改時間(以秒為單位),以應用於建立的UnixFS條目 [number]

  •  /api/v0/ls現在返回檔案Mode,Mtime並且MtimeNsecs如果集。

命令列介面

  • 🆕 jsipfs add [file...]現在支援以下標誌,以尊重和應用mode以及mtime後設資料從檔案系統中新增或明確設定它們的檔案:

  • --preserve-mode 自動將許可權應用於從檔案系統建立的UnixFS條目 [boolean] [default: false]

  • --preserve-mtime 自動將修改時間應用於從檔案系統建立的UnixFS條目 [boolean] [default: false]

  • --mode 檔案模式以應用於建立的UnixFS條目 [string]

  • --mtime 在Unix紀元之前或之後的修改時間(以秒為單位),以應用於建立的UnixFS條目 [number]

  • --mtime-nsecs 修改時間分數(以納秒為單位) [number]

  • jsipfs file ls已被刪除,請jsipfs ls改用。

  • added jsipfs files chmod [mode] [path]已新增。

  • jsipfs files ls現在將列印檔案mode和mtime。

  • jsipfs files mkdir現在支援以下標誌:

  • --mode 檔案模式以應用於建立的UnixFS條目 [string]

  • --mtime 在Unix紀元之前或之後的修改時間(以秒為單位),以應用於建立的UnixFS條目 [number]

  • jsipfs files stat現在將列印檔案mode和mtime。

  • jsipfs files touch [path]已新增,並支援以下標誌:

  • --mtime 在Unix紀元之前或之後的修改時間(以秒為單位),以應用於建立的UnixFS條目 [number]

  • jsipfs files write現在支援以下標誌:

  • --mode 檔案模式以應用於建立的UnixFS條目 [string]

  • --mtime 在Unix紀元之前或之後的修改時間(以秒為單位),以應用於建立的UnixFS條目 [number]

  •  jsipfs ls現在將列印檔案mode和mtime。

其他變化

  • libp2p已升級到0.27,其中還包括對其核心API的重大更改。請參閱發行公告以獲取更多資訊:

  • https://blog.ipfs.io/2020-02-07-js-libp2p-0-27/

  • 多地址中對等ID 的協議名稱已從“ ipfs”更改為“ p2p”。線路上的資料沒有任何更改,但是當將多位地址轉換為字串時可以看到此更改。

​參與貢獻

有幾個地方可以開始使用:

檢查js-ipfs儲存庫中help wanted標籤的問題,加入IPFS的“全力以赴”,自我介紹,讓我們知道您想在哪裡做出貢獻-https://github.com/ipfs/team-mgmt/#weekly-ipfs-all-hands

用IPFS破解並向我們展示您的成就!All Hands呼叫也是演示的理想場所,請加入並向我們展示您的構建內容,透過https://discuss.ipfs.io/加入討論,並幫助使用者找到答案。
加入IPFS核心實施每週同步,並參與其中!

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;