聊聊IPFS

一.概念:

IPFS是一个点对点的分布式超媒体分发协议,愿景是取代HTTP成为新一代协议

二.IPFS工作原理:

  • IPNS(去中心化的命名系统),每个文件都可以被命名为易读的名字。通过搜索名字来找到文件。(思考:命名系统原理)
  • 查找文件时,通过文件的哈希在网络中查找存储该文件的节点,再找到想要的文件
  • IPFS网络节点只存储感兴趣的内容及相关索引信息
  • IPFS通过网络删除具有相同哈希值的文件,通过计算判断文件的重复,还可以跟踪每个文件的历史记录
  • 每个文件以及其中所有内容都被赋予一个加密散列的唯一指纹

三.HTTP与IPFS

HTTP:超文本传输协议

HTTP目前所存在的问题:

  • 效率低下
  • 历史文件存储,--网页平均使用寿命有限,大量的网站文件不能长期保存。也可能因为操作等原因永久删除一些重要文件
  • 中心化:中心化网络容易被控制
  • HTTP网络应用太依赖骨干网络,通过大量备份保证数据安全

IPFS:IPFS是一个分布式存储和共享文件网络传输的协议。它是一种内容寻址的超媒体分发协议,在IPFS网络中,所有节点构成一个分布式文件系统。

IPFS特点:

  • 内容寻址,而不是域名寻址。文件(内容)具有存在的唯一性,一个文件加入IPFS网络之后,会被赋予一个唯一的哈希值。
  • 历史版本控制器(git),可追溯
  • IPFS网络数据基于区块链
  • 通过使用FILECOIN代币进行激励,让每一个网络节点有动力存储数据。
  • FileCoin:ipfs的加密货币。矿工提供开放的硬盘空间获取filecoin,用户使用FileCoin来支付在去中心网络中所需要获取的文件的费用。

四.IPFS相关操作

安装与配置:

创建一个IPFS节点,ipfs init

查看: ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

进入    cd ~/.ipfs

设置环境变量:export EDITOR=/usr/bin/vim

查看配置:ipfs config edit       

PeerID:就是当前节点id

查看节点ID: ipfs id

启动节点:ipfs daemon

验证:在浏览器中输入http://localhost:5001/webui

跨域设置

  • 概念:当一个资源从与服务器不同的域或者端口请求其它资源时,发起的是一个跨域请求。在浏览器中,是会限制从脚本内发起的跨域HTTP请求。
  • 同源:域名、协议、端口都相同被称为同源
  • 添加跨域资源共享配置
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods ‘[“PUT”,”GET”,”POST”,”OPTIONS”]’

ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin ‘[“*”]’ 

IPFS基本操作

在IPFS中新增文件:

  • ipfs add filename

  • 通过地址查找内容:ipfs cat 地址

通过IPFS创建目录存储文件:

  1. 创建目录: ipfs files mkdir /troy
  2. 拷贝文件: ipfs files cp /ipfs/hash /troy/test.txt
  3. 查看目录内容: ipfs files ls /troy/
  4. 查看拷贝的文件内容: ipfs files read /troy/test.txt

上传目录到IPFS:

  • 新建目录,添加文件:ipfs add -r(递归添加) dir(新建的包含文件内容的目录)

  • 通过路径访问指定目录中的文件
  • 通过目录访问: ipfs cat  txt地址

  • 直接通过文件访问: ipfs cat 目录地址

  • 在网络中查看:可以通过目录访问,也可以通过文件哈希直接访问

创建简易网页发布到IPFS:

  • 新建html页面
  • 添加到ipfs

  • 重启服务,同步数据 ipfs daemon
  • 访问数据
  • 发布到IPNS,返回当前节点的ID,如果修改了网站内容,哈希值会发生变化,在网站更新的时候可以将网站发布到IPNS上面。
  1. 命令:ipfs name publish hash     

发布一个极简博客:

  • Hugo:一个用go语言写的静态网站生成器
  • 安装:sudo apt-get install hugo
  • 检查:hugo version
  • 新建网站模型:hugo new site 1801
  • 添加主题:
  1. Git init
  2. git submodule add https://github.com/themefisher/navigator-hugo.git
  3. git submodule add:将一个已经存在的git仓库添加为正在工作的仓库的子模块
  4. echo 'theme = "ananke"' >> config.toml


js-ipfs-api的使用:

  • 前端框架:create-react-app
  • 安装:sudo npm install -g create-react-app
  • 创建react项目:create-react-app projectname(翻墙)

  • 安装ipfs-api : npm install --save ipfs-api

  • 要实现的功能:通过浏览器将内容文本存入IPFS中
  1. 导入IPFS
  2. 实现后台逻辑
  3. 实现前端渲染

实现图片的上传与下载

实现IPFS+以太坊存储:truffle unbox react

猜你喜欢

转载自blog.csdn.net/super_lixiang/article/details/83311904