ipfs原理與實踐學習筆記

ipfs 是啥 有什麼特點

1. InterPlanetary File System

是一個基於內容尋址的、分佈式的、新型超媒體傳輸協議

2. BitTorrent、DHT、Git和SFS

分佈式存儲:
全稱爲分佈式哈希表(Distributed Hash Table),是一種分佈式存儲方法
安全:
自驗證功能的分佈式文件系統(Self-certifying File System, SFS)
持續存儲
速度快

hash-> ip-> object

ipsf 有啥用

ipsf 怎麼用

實戰

安裝IPFS 下載zip 然後配置環境變量 就可以使用ipfs命令了
1. ipfs init

在這裏插入圖片描述

QmXkmqVt3B4oyxB9Hx7rHcyGm2fz5bVgNtB2kRCbznTJPv
C:\Users\aaa.ipfs

2. ipfs config show或vim config命令來查看和編輯內容
3. ipfs add testipfs.txt 添加文件到ipfs

added QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH testipfs.txt

4. ipfs cat CID命令讀取IPFS網絡中的文件內容
5. echo “version 1 of my text” | ipfs add 添加內容到IPFS文件系統中

added QmX834Ukz7fZ4FsvMjVPhtutdAkTUBkFEdfoUGvkB9t1wh QmX834Ukz7fZ4FsvMjVPhtutdAkTUBkFEdfoUGvkB9t1wh

6. ipfs cat CID > testipfs.txt

如果後面的文件存在就會直接寫入,不存在就會重新創建並把內容寫入
ipfs cat QmX834Ukz7fZ4FsvMjVPhtutdAkTUBkFEdfoUGvkB9t1wh > testipfs.txt (存在)
ipfs cat QmX834Ukz7fZ4FsvMjVPhtutdAkTUBkFEdfoUGvkB9t1wh > othertestipfs.txt(不存在,新建)

以上總結:只要內容保持不變,將始終獲得相同的哈希值

在這裏插入圖片描述

7.ipfs add -w testipfs.txt

第一個hash 和上面的一致
第二個hash:(IPFS Wrapped) 包括了與內容相關的目錄和文件名等信息
added QmX834Ukz7fZ4FsvMjVPhtutdAkTUBkFEdfoUGvkB9t1wh testipfs.txt
added QmUuQx21RSyhmFCXkwrGpSRSEGUv7rX5QQowF6EUNg39mv

8. ipfs ls -v(可選項) 展示IPFS Wrapped包含的全部信息

ipfs ls -v QmUuQx21RSyhmFCXkwrGpSRSEGUv7rX5QQowF6EUNg39mv

hash size name
QmX834Ukz7fZ4FsvMjVPhtutdAkTUBkFEdfoUGvkB9t1wh 25 testipfs.txt
9. 通過父目錄內容哈希來獲取文件內容

ipfs cat QmUuQx21RSyhmFCXkwrGpSRSEGUv7rX5QQowF6EUNg39mv/testipfs.txt
“version 1 of my text”

10. ipfs dht findprovs CID (無效)

查詢有多少個節點存儲了CID
ipfs dht findprovs QmX834Ukz7fZ4FsvMjVPhtutdAkTUBkFEdfoUGvkB9t1wh

11. ipfs id 查看id

在這裏插入圖片描述

12. IPFS命令發佈一個內容,並賦予其動態變化
  • echo “version 1 of my text” > test-ipns.txt
  • ipfs add test-ipns.txt
13. ipfs name publish (add生成的hash) 命令掛載目標文件
  • ipfs name publish QmX834Ukz7fZ4FsvMjVPhtutdAkTUBkFEdfoUGvkB9t1wh
  • Published to QmXkmqVt3B4oyxB9Hx7rHcyGm2fz5bVgNtB2kRCbznTJPv: /ipfs/QmX834Ukz7fZ4FsvMjVPhtutdAkTUBkFEdfoUGvkB9t1wh
14. ipfs name resolve (13命令以後返回的數據) 綁定節點ID信息
  • ipfs name resolve QmXkmqVt3B4oyxB9Hx7rHcyGm2fz5bVgNtB2kRCbznTJPv(節點ID)/ipfs/QmX834Ukz7fZ4FsvMjVPhtutdAkTUBkFEdfoUGvkB9t1wh
  • 直接可以用ID訪問 而不用CID
    http://127.0.0.1:8080/ipns/QmXkmqVt3B4oyxB9Hx7rHcyGm2fz5bVgNtB2kRCbznTJPv(節點ID)
15.修改內容 用12,13,14 實現通過ID訪問變化的內容

在這裏插入圖片描述

16. ipfs key list -l 查看key self 就是默認的ID
QmXkmqVt3B4oyxB9Hx7rHcyGm2fz5bVgNtB2kRCbznTJPv self
17. ipfs key gen創建新的RSA公鑰

ipfs key gen --type=rsa --size=2048 newkey

QmXkmqVt3B4oyxB9Hx7rHcyGm2fz5bVgNtB2kRCbznTJPv self
QmWvmrWLBf7MuykBFin8Q97aFoCczXSTDw9c5G7Tzi1UEc newkey
18 .ipfs name publish --key
  • ipfs name publish --key=newkey QmRN5gqoqupGEZoXWtfmDWryUj6uvzspYnFQBBLqJKhWSq
  • ipfs name resolve QmWvmrWLBf7MuykBFin8Q97aFoCczXSTDw9c5G7Tzi1UEc/ipfs/QmRN5gqoqupGEZoXWtfmDWryUj6uvzspYnFQBBLqJKhWSq
19 訪問(key)

http://127.0.0.1:8080/ipns/QmWvmrWLBf7MuykBFin8Q97aFoCczXSTDw9c5G7Tzi1UEc

20. ipfs pin ls驗證固定資源的存在性,並通過ipfs pin rm -r遞歸刪除固定資源

ipfs pin ls --type=all
ipfs> ipfs pin rm -r QmYSzZb92D5igzbjVr1pxkQd7Qd4DgsmR7xCUtRqe5oU92(資源hash)

21. ipfs repo gc 倉庫資源回收操作

ipfs cat QmYSzZb92D5igzbjVr1pxkQd7Qd4DgsmR7xCUtRqe5oU92 訪問失敗 以被回收

22. ipfs object links -v (未成功)

驗證MerkleDAG的創建情況,並從內部查看該文件的MerkleDAG結構信息和子對象信息

23.操作Block
  • echo “ipfs block put test” | ipfs block put
  • ipfs block get QmXe274qqe53q2Zads1V9j2J4jbUK41PyixjxP2oWQVrqJ
  • ipfs block stat QmXe274qqe53q2Zads1V9j2J4jbUK41PyixjxP2oWQVrqJ
  • ipfs block rm QmXe274qqe53q2Zads1V9j2J4jbUK41PyixjxP2oWQVrqJ
24. 操作object
  • echo “ipfs object put test” | ipfs add
  • ipfs object get QmdcDQbdDY541NUP57dxwfmvy5QiD7JWxAeSiNbAmYApow
  • ipfs object patch append-data QmdcDQbdDY541NUP57dxwfmvy5QiD7JWxAeSiNbAmYApow ./patch.txt (向patch.txt 添加內容)
  • ipfs object data QmSDU52L5J1962Jkcj7Lr2jkyvCvmUvgPEnvjNzpgmbTLM (添加完以後返回的hash)
    查詢父層對象的key
  • ipfs object links QmVysc6EVyZ1W5a3P4U2UbuXSrDHaEdmncRbpnaQaWGx8G
    統計子層對象的links數
  • ipfs object stat QmVysc6EVyZ1W5a3P4U2UbuXSrDHaEdmncRbpnaQaWGx8G
共享KEY
  • 下載
    git clone https://github.com/Kubuxu/go-ipfs-swarm-key-gen.git
    進入到包含main.go的目錄 go build 會生成一個二進制文件,然後雙擊就會生成swarm.key(sudo ./ipfs-swarm-key-gen > swarm.key)
  • 共享其他,然後放到.ipfs文件夾下
  • ipfs bootstrap rm all 清空節點信息,
  • ipfs bootstrap add /ip4/0.0.0.0(ip地址)/tcp/4001/ipfs/Qmc2AH2MkZtwa11LcpHGE8zW4noQrn6xue7VcZCMNYTpuP(節點ID)
配置信息
  ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods "[\"PUT\",\"GET\",\"POST\",\"OPTIONS\"]"
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin "[\"*\"]"
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Headers "[\"Authorization\"]"
ipfs config --json API.HTTPHeaders.Access-Control-Expose-Headers "[\"Location\"]"
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Credentials "[\"true\"]"
文件說明

❑ blocks:本地倉庫存儲的CID文件塊鏈接目錄。
❑ keystore:密鑰對文件存儲目錄。
❑ datastore:LevelDB數據文件目錄。
❑ datastore_spec:LevelDB數據文件緩存目錄。
❑ config:倉庫配置文件。
❑ version:版本信息文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章