IPFS Home - killelder/cryptocurrency GitHub Wiki

原理

這篇底下會講解IPFS的相關操作
想知道原理的參考下面這個連結
IPFS原理

IPFS 優缺點

slow download 這篇提到ipfs的速度

下載安裝

IPFS下載設定都相當簡單, IPFS官網
就是那種點點下一步就可以完成的那種
我決定使用linux(所以windows的就不用問我嘍)

Initialize

初始化也相當簡單, (看來IPFS真的野心勃勃想讓他大眾化)
先自己開設一個目錄, 在目錄底下打上

ipfs init

用下面的cmd來確認是不是成功了

ipfs id

如果成功的話應該會看到自己的ID, PublicKey, Addresses, AgentVersion, ProtocolVersion
然後預設一下ipfs的編輯器, 這裡以vim為例

export EDITOR=/usr/bin/vim

ipfs config

這邊有著自己ipfs的設定, 適用JSON格式寫的
有剛剛的ID, publicKey
比較有可能會更動的是Datastore
但整個ipfs config決定拉到另外一篇去講 ipfs config

開始使用ipfs

連上ipfs網路

ipfs daemon &
Initializing daemon... API server listening on /ip4/127.0.0.1/tcp/5001
Gateway server listening on /ip4/127.0.0.1/tcp/8080

此時打開http://localhost:5001/webui 會看到UI介面。
(加上&是為了可以在background執行)
應該會顯示API, Gateway server, 此時ipfs應該已經連上線
可以使用來確認

ipfs swarm peers

來確認連上線的節點
節點會呈現 /ipfs/ 的形式
這時候照理來說我們就能存取該節點上面的資料了

新增檔案

先隨便創造一個檔案

echo "first file in ipfs" > test

然後加入ipfs裡面

ipfs add test
added QmZsvMqfF5Wg8STfyTKgjdNEHR5tdJg9HRzyg4QZ5bJtRe test
21 B / 21 B [=========================================================] 100.00%

嘗試cat看看

ipfs cat QmZsvMqfF5Wg8STfyTKgjdNEHR5tdJg9HRzyg4QZ5bJtRe
first file in ipfs

避免被垃圾回收

ipfs會自動做垃圾回收, 為了避免我們剛剛上傳的檔案被回收, 可以把它pin起來

ipfs pin add xxxxxxx

幾個常用指令

ipfs get 路徑 下載路徑的檔案

DHT CMD

告訴DHT我們有甚麼

ipfs dht provide Qmxxxxxx

這點我還搞不太懂的是他不會自己幫我們上傳DHT嗎??每次都還要自己push的樣子
push完以後, 我們可以查查看哪些peers有這個檔案的內容

ipfs dht findprovs Qmxxxxxx

查這個節點的ip

ipfs dht findpeer Qmxxxxxx

發佈到IPNS

因為只要改檔案, hash就會發生變化, 我們可以將網頁發佈到IPNS
在IPNS中, 允許我們的節點的域名空間引用一個IPFS hash
也就是我們可以通過節點ID對項目根目錄的IPFS hash進行綁定
當更新以後, 只要重新發布到IPNS即可

ipfs name publish obj_hash

這會花上大約30s的時間, 因為必須要把這個資訊發送給各個DHT
結束會顯示

Published to Qmxxxxxx: /ipfs/QmdRKBFyhEg99i1SAMqiHaKKYt7ybudqwmFPL2kqXsHaLM

其中第一個hash就是你的id, 表示ipfs上的檔案將以你的id作為入口

要關掉ipfs連線

ipfs shutdown

就可以了
實際測試了以後, 覺得有點空虛
而且ipfs速度很慢, 目前覺得他們把餅畫得太大
但實際上做起來沒有那麼簡單

還有一些東西想了解pubsub(訂閱者模式, 只會把東西publish給訂閱者)
pubsub教學

IPFS 源代碼下載

go-ipfs
看起來IPFS應該跟大部分區塊鏈一樣, 要使用go語言來實現
所以這邊可能要花點工夫在go語言上面


根據這篇作者的 IPFS
IPFS命令解說
IPFS 教學
IPFS 教學2
根據自己邊學邊做來做延伸