什么是IPFS?IPFS与区块链有什么关系

1.什么是IPFS?

  IPFSInter Planetary File System(星际文件系统)的缩写,是一个典型的点对点分布式文件系统, 旨在用同一个文件系统连接所有的计算设备。这时候有些小伙伴可能会问,为什么要使用分布式文件系统,我将我的文件存储在本地笔记本上,或者上传到云端(典型的云端提供商有AWS S3, Azure Cloud 等等)保管就好了呀,可用性高而且一般不会丢。其实对区块链技术有一点了解的小伙伴不难想到,这种中心化的服务器模式,很容易造成单点故障(服务提供商中断服务或者以违反规定为由,移除/屏蔽你的文件)。此外,随着文件存储数量的增加,存储成本也将变得越来越昂贵。在这种背景下,IPFS应用而生。

  在 IPFS 的世界里,这些服务提供商将不再是中心化服务器,而是 P2P 网络里的计算机。与任何人都可以 运行一个以太坊节点一样,任何人也都可以运行一个 IPFS 节点,并加入网络来形成全球的文件系统。 文件可以在很多节点间复制,几乎不可能出现无法访问文件的情况(IPFS 没有单故障点, 节点不需要相互信任)。附上两种文件系统的对比图。

此外,IPFS也被称为颠覆HTTP协议的协议,目前已成为事实上的分布式HTTP协议的工业标准。之所以这么讲是因为,目前我们所使用的WEB网络(即日常浏览的各大网站:百度,github,淘宝等等)都是基于HTTP协议的,HTTP底层基于TCP协议,是一种典型的中心化的网络,即无论内容分发如何分布式进行,无论有多少服务器分布在世界各地。中心化的本质仍然存在。为了从根本上解决这种中心化的模式,IPFS将相同的文件进行了hash计算,确定了其唯一的地址。说的再直白点就是,我们平时所浏览的每一个网页其实都是前端工程师对文字、图片、声音、视频等一系列文件的打包处理,如果我们将这些文件放到IPFS进行哈希计算唯一化处理,则我们以后直接使用这个哈希地址对同一份文件进行访问,无论从任何设备,任意地点,地址的唯一性都可以帮助我们找到相同的资源。此外,文件在IPFS中是可共享的。你的邻居如果访问过相同的网站,你就可以从他那里直接获取,而不需要再访问云端,物理距离更近,打开速度也更快。有了IPFS,我们或不再需要中心化的WEB服务器,一切资源可以去中心化的发布。将网页,图片,脚本等等资源,提交到IPFS进行唯一化发布,得到了这些地址,便可以访问你的网站。地址太长不好记,还可以生成一个短地址,就像现在的网站域名(此说法来自 IPFS:下一代分布式文件系统(filenet))。至于用户的登录验证等功能,则可以使用智能合约来完成 (msg.sender=owner)。


2.IPFS在区块链中的应用

 

正如文档中所说,因在以太坊中存储数据需要gas,如果存储的文件过多,则花费十分昂贵,由于以太坊虚拟机的限制, 有时甚至是不可行的。以分布式电商系统为例,如果我们将用于商品展示的图片和描述超文本都存储在以太坊上的话,则会给以太坊网络造成很大的压力,消耗大量的带宽。因此,为了减缓区块链的存储压力,我们可以将商品图片和商品描述信息等信息存储在 同样去中心化的星际文件系统(IPFS)中,而仅仅在链上保存这些数据的ID

需要注意的是,在IPFS中只关心文件内容,而不关心文件的名称。也就是说只要两个文件的内容一样,即使是不同的文件名,也将得到同样的 哈希值。这对于医疗数据分享这种应用场景下,是十分重要且必要的。


3.IPFS节点软件安装与自定义设置

3.1软件安装

~$ wget https://dist.ipfs.io/go-ipfs/v0.4.13/go-ipfs_v0.4.13_linux-amd64.tar.gz
  • 解压
~$ tar xzvf go-ipfs_v0.4.13_linux-386.tar.gz 
  • 配置环境变量(类似于java中的jdk配置)
~$ echo "export PATH=$HOME/go-ipfs:$PATH" >> .bashrc
~$ source .bashrc

3.2自定义设置

  • 初始化仓库

IPFS的实现与Git相似,在开始使用前都需要初始化一个本地仓库进行工作。

~$ ipfs init

默认情况下,init命令将在当前用户主目录下建立.ipfs目录作为本地仓库根目录。 如果你希望设置一个其他的目录作为仓库根目录,可以使用环境变量IPFS_PATH来指向期望 的目录,如下图所示:

~$ export IPFS_PATH=/path/to/ipfsrepo
~$ ipfs init
  • 节点配置

IPFS节点软件提供了REST API接口,默认在本地5001端口监听,但也可以自己设置。通过设置监听地址和CORS(允许跨域资源共享),可以在其他主机的浏览器中通过AJAX技术访问到这个API.

~$ ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
~$ ipfs config --json Addresses.API '"/ip4/0.0.0.0/tcp/5001"'

配置默认网关(该网关可以让我们通过HTTP协议访问IPFS网络中的文件),默认是8080。由于我们项目中的默认web服务器端口也是8080,因此,为了避免冲突,我们最好设置一个新的值,在这里我设置为5000

~$ ipfs config --json Addresses.Gateway '"/ip4/0.0.0.0/tcp/5000"'

3.3加入IPFS网络

~$ ipfs daemon

 


 4. IPFS网络的文件上传与下载

4.1 文件上传

类似于Git,在IPFS中,文件的添加是在本地仓库中进行的。而且 和Git一样,都是使用add命令向本地仓库中添加文件。假设我们现在要将一个写着 “Hello IPFS!!!”的文件hello.txt 上传到IPFS网络。

可以注意到系统为该文件返回了一个唯一的hash索引。

在 上面 2.IPFS在区块链中的应用 中我们有提到,IPFS只关心文件的内容,而与文件名无关,即相同的内容必定会是相同的哈希值,让我们在这里验证一下这个神奇的功能。

4.2 文件的下载

在IPFS中,你要获取一个文件的唯一办法,是知道它的哈希值。使用唯一的哈希值进行文件下载的方式有两种:命令行使用cat 或者HTTP网关(这里我们的端口是5000)访问远程容器

 

参考文献:

IPFS:下一代分布式文件系统(filenet)

 


 

 

转载于:https://www.cnblogs.com/dxtlearningblockchain/p/11053997.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
结合区块链IPFS可以实现数据共享的方式是通过将数据存储在IPFS网络,并在区块链记录相关的元数据和访问权限。 首先,IPFS一个分布式文件系统,它使用内容寻址来存储和检索数据。每个文件都有一个唯一的哈希值作为其地址,并且可以通过这个地址来验证和获取文件内容。这意味着我们可以在IPFS网络存储数据,并且只需存储一次,即可在全球范围内轻松共享。 然后,区块链可以用于记录和管理数据的元数据和访问权限。例如,我们可以在区块链创建一个智能合约来管理特定数据集的所有权和访问权限。该智能合约可以包含数据集的名称、描述、创建者、所有者和访问控制规则等信息。只有满足访问控制规则的用户才能够使用该数据集。 当用户想要共享数据时,他们可以将数据上传到IPFS网络,并在区块链上创建一个记录来指示该数据集的存在和访问规则。其他用户可以通过查询区块链来获取数据集的元数据,然后使用IPFS哈希值来获取实际数据。只有在满足访问规则时,才能成功获取数据。 使用区块链IPFS结合提供了诸多优势。首先,IPFS的分布式特性可以确保数据的高可用性和抗审查。其次,通过将元数据和访问规则记录在区块链,可以实现透明的数据共享和权限管理。最后,由于数据只需存储一次,可以减少存储成本并提高数据获取的效率。 综上所述,结合区块链IPFS可以实现一种安全、透明和高效的数据共享方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值