ipfs原理与实践学习笔记

本文详细介绍IPFS(星际文件系统)的特点与优势,包括分布式存储、安全性及高速度等特性。通过实战演示如何安装配置IPFS,进行文件添加、读取及管理,展示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

1.2 ipfs daemon 重启
2. ipfs config show或vim config命令来查看和编辑内容
3. ipfs add testipfs.txt 添加文件到ipfs

added QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH testipfs.txt

4. ipfs cat CID命令读取IPFS网络中的文件内容
4.1 http://127.0.0.1:8080/ipfs/cid访问
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

hashsizename
QmX834Ukz7fZ4FsvMjVPhtutdAkTUBkFEdfoUGvkB9t1wh25testipfs.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
QmXkmqVt3B4oyxB9Hx7rHcyGm2fz5bVgNtB2kRCbznTJPvself
17. ipfs key gen创建新的RSA公钥

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

QmXkmqVt3B4oyxB9Hx7rHcyGm2fz5bVgNtB2kRCbznTJPvself
QmWvmrWLBf7MuykBFin8Q97aFoCczXSTDw9c5G7Tzi1UEcnewkey
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\"]"


linux
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["http://localhost:3000", "http://127.0.0.1:5001", "https://webui.ipfs.io"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "POST"]'


window powershell
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '[\"http://localhost:3000\", \"http://127.0.0.1:5001\", \"https://webui.ipfs.io\"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '[\"PUT\", \"POST\", \"GET\", \"OPTIONS\"]'


window cmd
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin "["""http://localhost:3000""", """http://127.0.0.1:5001""", """https://webui.ipfs.io"""]"
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods "["""PUT""", """POST"""]"
文件说明

❑ blocks:本地仓库存储的CID文件块链接目录。
❑ keystore:密钥对文件存储目录。
❑ datastore:LevelDB数据文件目录。
❑ datastore_spec:LevelDB数据文件缓存目录。
❑ config:仓库配置文件。
❑ version:版本信息文件。

IPFS(InterPlanetary File System)是一个基于内容寻址的、分布式的、新型超媒体传输协议。IPFS支持创建完全分布式的应用。它旨在使网络更快、更安全、更开放。IPFS是一个分布式文件系统,它的目标是将所有计算设备连接到同一个文件系统,从而成为一个全球统一的存储系统。某种意义上讲,这Web最初的目标非常相似,但是它是利用BitTorrent协议进行Git数据对象的交换来达到这一个目的的。IPFS正在成为现在互联网的一个子系统。IPFS有一个更加宏伟而疯狂的目标:补充和完善现有的互联网,甚至最终取代它,从而成为新一代的互联网。这听起来有些不可思议,甚至有些疯狂,但的确是IPFS正在做的事情。图1-1所示为IPFS的官方介绍。 图1-1 IPFS官方介绍IPFS项目通过整合已有的技术(BitTorrent、DHT、Git和SFS),创建一种点对点超媒体协议,试图打造一个更加快速、安全、开放的下一代互联网,实现互联网中永久可用、数据可以永久保存的全球文件存储系统。同时,该协议有内容寻址、版本化特性,尝试补充甚至最终取代伴随了我们20多年的超文本传输协议(即HTTP协议)。IPFS是一个协议,也是一个P2P网络,它类似于现在的BT网络,只是拥有更强大的功能,使得IPFS拥有可以取代HTTP的潜力。Filecoin是运行在IPFS上的一个激励层,是一个基于区块链的分布式存储网络,它把云存储变为一个算法市场,代币(FIL)在这里起到了很重要的作用。代币是沟通资源(存储和检索)使用者(IPFS用户)和资源的提供者(Filecoin矿工)之间的中介桥梁,Filecoin协议拥有两个交易市场—数据检索和数据存储,交易双方在市场里面提交自己的需求,达成交易。IPFS和Filecoin相互促进,共同成长,解决了互联网的数据存储和数据分发的问题,特别是对于无数的区块链项目IPFS和Filecoin将作为一个基础设施存在。这就是为什么我们看到越来越多的区块链项目采取了IPFS作为存储解决方案,因为它提供了更加便宜、安全、可快速集成的存储解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值