深入了解IPFS(1/6):从入门到高级指南

2023-05-16

原文:https://medium.com/hackernoon/understanding-ipfs-in-depth-1-5-a-beginner-to-advanced-guide-e937675a8c8a

这篇文章是新的系列“深入理解IPFS”中的第一篇,这一系列博文可以帮助任何人理解IPFS的基本概念。我们将尽可能保持这一系列文章的乐趣和吸引力。
这一些列分为6个部分:

  • 初级到高级指南:在这一部分中,我们将尝试理解IPFS是什么,为什么我们需要它以及我们可以用它做什么。我们将简要介绍IPFS的所有基础组件(将在后面部分进行深入解释),并了解它们如何协同工作。如果您想要一个简短的摘要,并且不想了解“幕后”发生了什么,那么这部分就是为您准备的
  • 什么是行星际关联数据(IPLD):在这一部分中,我们将深入研究内容可寻址网络的数据模型。我们将探索IPLD的详细信息和规范,并使用以更加熟悉它。原文
  • 什么是行星间命名系统(IPNS):在这一部分中,我们将深入研究分布式Web的命名系统。我们将讨论它的工作原理,规格并使用它。我们还将它与现在使用的命名系统(即DNS)进行比较。我们将IPNS与DNS的优缺点列表比较。
  • 什么是MultiFormats?:在这一部分中,我们将讨论为什么我们需要Multiformat,它是如何工作的以及您作为用户/开发人员可以用它做什么?
  • 什么是libp2p:在这一部分中,我们将研究IPFS的网络层以及它对IPFS的迷人特性有何贡献。我们将通过它的工作,规格和使用它来更清楚地理解它。
  • 什么是Filecoin:在这一部分,我们讨论了IPFS的激励层,即filecoin。我们讨论它的白皮书及其实施规范,包括DSN(分布式存储网络),复制证明,存储证明,数据存储和检索市场以及Filecoin协议上的智能合约实施。我们还讨论了文件币协议中的一些缺陷,这些缺陷在白皮书中没有提到,并提出了filecoin协议的一些改进。

希望你从这个系列中学到很多关于IPFS的知识。开始吧!


· · · · · ·

当你跟别人谈论复仇者联盟的新电影时,他们通常不会说“在这台服务器上,在这个子域名下,漫威复仇者联盟.mp4”诸如此类的描述。相反,他们会描述影片的内容“Thanos摧毁了一半宇宙的东西……”。对人类来说考虑事情的内容明显是一种直观方法,但这多数情况下不是我们获取互联网上的内容的方法。话虽如此,诸如IPFS之类的分布式协议实际上确实使用这种类型的内容寻址(使用文件内容标记和查找内容)来在分散的网络上查找内容。在本文中,我们将详细探讨整个过程的工作原理,涉及的不同组件以及它们如何协同工作。我们将通过向IPFS添加文件然后探索在向IPFS添加文件时发生了什么来探索它如何工作。

IPFS如何运作

让我们首先向IPFS添加一张照片。我们将添加这张…
在这里插入图片描述
顺便说一句,您必须在您的系统上安装IPFS才能跟随我的操作。
您可以从这里安装它(原文中给的地址失效了)。在安装完IPFS后,您必须启动IPFS守护程序daemon(与IPFS网络通信的软件,以便从网络添加和检索数据)。你可以通过ipfs daemon 来启动daemon。
将照片添加到IPFS时,会发生以下事情:
What happens when we add a photo on IPFS
在Terminal终端我们会得到:Terminal终端
但是我们没有看到与上述两个步骤(Raw和Digest)相关的任何内容。这一切都发生在引擎盖下。
这是哈希函数发挥作用的地方。

Hash函数将数据(来自文本,照片等的任何数据)作为输入,并为我们提供输出(摘要),该输出在其输出方面是唯一的。如果我们改变该图像中的像素,那么输出将是不同的。这显示了它的防篡改属性,因此使IPFS成为自我认证文件系统。因此,如果您将此图像传输给任何人,他/她可以检查收到的照片是否已被篡改。
此外,你无法分辨输入是什么(在这里是我们上传的猫的照片),但只是看到它的输出(摘要)。因此,这也很大程度上确保了安全性。

现在我们将Raw图像数据传递给SHA256哈希函数并获得唯一的摘要。现在,我们需要将此摘要转换为CID(内容标识符)。当我们尝试取回图像时,此CID是IPFS将搜索的内容。为此,IPFS使用名为Multihasah的东西。

要了解Multihash的重要性,请考虑这种情况。
你将这张图片存在互联网上,并且您拥有其CID,您可以将其提供给任何想要获取此图像的人。现在,如果您将来发现SHA256被破坏(这意味着此过程不再具有防篡改和安全性)并且您想要使用SHA3(以确保防篡改和安全性),那该怎么办呢?这意味着要改变将照片转换为CID的整个过程,之前的CID将毫无用处…
在这种情况下,上述问题似乎可能是一个小问题,但您应该知道这些哈希函数保护着数十亿美元的资金。所有银行,国家安全机构等都使用这些散列函数来安全地运行。如果没有它,即使是浏览器上每个站点地址旁边看到的绿色锁也无法运行。

为了解决这个问题,IPFS使用Multihash。 Multihash允许我们定义自定义的散列。因此,根据使用的哈希函数,我们可以有多个版本的CID。我们将在本系列的第4部分中详细讨论Multihashes,它将深入研究Multiformat。

那么,现在我们已将我们的照片添加到IPFS,但这不是全部故事。实际发生的事情是这样的:
Large files are chunked, hashed, and organized into an IPLD (Merkle DAG object)

如果文件大于256 kB,则它们被分解为更小的部分,因此所有部分都等于或小于256 kb。我们可以使用此命令查看照片的块:

ipfs object get Qmd286K6pohQcTKYqnS1YhWrCiS4gz7Xi34sdwMe9USZ7u

这给了我们15个块,每个块小于256kb。首先将这些块中的每一个转换为摘要,然后转换为CID。

{
  "Links": [
    {
      "Name": "",
      "Hash": "QmZ5RgT3jJhRNMEgLSEsez9uz1oDnNeAysLLxRco8jz5Be",
      "Size": 262158
    },
    {
      "Name": "",
      "Hash": "QmUZvm5TertyZagJfoaw5E5DRvH6Ssu4Wsdfw69NHaNRTc",
      "Size": 262158
    },
    {
      "Name": "",
      "Hash": "QmTA3tDxTZn5DGaDshGTu9XHon3kcRt17dgyoomwbJkxvJ",
      "Size": 262158
    },
    {
      "Name": "",
      "Hash": "QmXRkS2AtimY2gujGJDXjSSkpt2Xmgog6FjtmEzt2PwcsA",
      "Size": 262158
    },
    {
      "Name": "",
      "Hash": "QmVuqvYLEo76hJVE9c5h9KP2MbQuTxSFyntV22qdz6F1Dr",
      "Size": 262158
    },
    {
      "Name": "",
      "Hash": "QmbsEhRqFwKAUoc6ivZyPa1vGUxFKBT4ciH79gVszPcFEG",
      "Size": 262158
    },
    {
      "Name": "",
      "Hash": "QmegS44oDgNU2hnD3j8r1WH8xZ2RWfe3Z5eb6aJRHXwJsw",
      "Size": 262158
    },
    {
      "Name": "",
      "Hash": "QmbC1ZyGUoxZrmTTjgmiB3KSRRXJFkhpnyKYkiVC6PUMzf",
      "Size": 262158
    },
    {
      "Name": "",
      "Hash": "QmZvpEyzP7C8BABesRvpYWPec2HGuzgnTg4VSPiTpQWGpy",
      "Size": 262158
    },
    {
      "Name": "",
      "Hash": "QmZhzU2QJF4rUpRSWZxjutWz22CpFELmcNXkGAB1GVb26H",
      "Size": 262158
    },
    {
      "Name": "",
      "Hash": "QmZeXvgS1NTxtVv9AeHMpA9oGCRrnVTa9bSCSDgAt52iyT",
      "Size": 262158
    },
    {
      "Name": "",
      "Hash": "QmPy1wpe1mACVrXRBtyxriT2T5AffZ1SUkE7xxnAHo4Dvs",
      "Size": 262158
    },
    {
      "Name": "",
      "Hash": "QmcHbhgwAVddCyFVigt2DLSg8FGaQ1GLqkyy5M3U5DvTc6",
      "Size": 262158
    },
    {
      "Name": "",
      "Hash": "QmNsx32qEiEcHRL1TFcy2bPvwqjHZGp62mbcVa9FUpY9Z5",
      "Size": 262158
    },
    {
      "Name": "",
      "Hash": "QmVx2NfXEvHaS8uaRTYaF4ExeLaCSGpTSDhhYBEAembdbk",
      "Size": 69716
    }
  ],
  "Data": "\b\u0002\u0018Ơ�\u0001 ��\u0010 ��\u0010 ��\u0010 ��\u0010 ��\u0010 ��\u0010 ��\u0010 ��\u0010 ��\u0010 ��\u0010 ��\u0010 ��\u0010 ��\u0010 ��\u0010 Ơ\u0004"
}

IPFS使用IPLD(IPLD使用Merkle DAG或有向非循环图)来管理所有块并将其链接到基本CID。

IPLD(对象)由2个组成部分组成:

  • data——大小<256 kB的非结构化二进制数据块
  • Links——链接结构数组。这些是指向其他IPFS对象的链接

每个IPLD链接Link(在我们的例子中是我们上面提到的15个链接)又有3个部分:

  • Name——链接的名称
  • Hash——链接的IPFS对象的哈希值
  • Size——链接的IPFS对象的累积大小,包括其链接

IPLD建立在关联数据的思想基础之上,这实际上分散的网络社区中的人们已经谈论了很长一段时间。这是Tim Berners-Lee多年来一直在努力的事情,他的新公司Solid正在围绕它开展业务。

使用IPLD还有其他好处。为了看到这一点,让我们创建一个名为photos的文件夹,并在其中添加2张照片(猫的照片和同一张照片的副本)。
在这里插入图片描述

正如您所看到的,这两张照片都具有相同的哈希值(这证明我没有更改图像副本中的任何内容)。这为IPFS添加了重复数据删除属性。因此,即使您的朋友将相同的猫照片添加到IPFS,他也不会复制图像。这节省了大量的存储空间。

想象一下,如果我将这篇文章存储在IPFS上,并且它的每个字母都是分块的并且具有唯一的CID,那么这整篇文章可以通过字母表(大写和小写),数字和一些特殊字符的组合来构建。我们只会存储每个字母,数字和字符ONCE,并根据数据结构中的链接重新排列它。这是强大的东西…

IPFS还有一个名为InterPlanetary命名系统(IPNS)的命名系统。要了解它的重要性,让我们假设您创建了一个网站,并将其托管在某个域上。对于此示例,我们将访问我的网站: https://vaibhavsaini.com

如果我想在IPFS上托管它,我只需在IPFS上添加网站文件夹。为此,我使用wget下载了网站。如果您使用的是基于Linux的操作系统,如Ubuntu或MAC,那么您可以和我一起试用。

如果我想在IPFS上托管它,我只需在IPFS上添加网站文件夹。为此,我使用wget下载了网站。如果您使用的是基于Linux的操作系统,如Ubuntu或MAC,那么您可以和我一起试用。

下载网站(或任何网站):

wget --mirror --convert-links --adjust-extension --page-requisites --no-parent https://vaibhavsaini.com

将名为vaibhavsaini.com的文件夹添加到IPFS:

ipfs add -r vaibhavsaini.com

你会得到这样的东西:
在这里插入图片描述

我们可以看到,我们的网站现在托管在最后一个CID(该文件夹的CID)上:QmYVd8qstdXtTd1quwv4nJen6XprykxQRLo67Jy7WyiLMB

我们可以使用http协议访问该站点:

https://gateway.pinata.cloud/ipfs/QmYVd8qstdXtTd1quwv4nJen6XprykxQRLo67Jy7WyiLMB/

假设我想在网站上更改我的个人资料图片。正如我们上面已经了解到的,如果我们改变输入的内容,我们会得到一个不同的摘要,这意味着我的最终“基本CID”会有所不同。
这意味着每次更新我的网站时都必须更新哈希。每个拥有我之前网站链接(上述网址)的人都将无法看到我的新网站
这可能会导致很大的问题。

为解决此问题,IPFS使用InterPlanetary命名系统(IPNS)。使用IPNS链接指向CID。如果我想更新我的网站CID,我只会将新的CID指向相应的IPNS链接(这类似于今天的DNS)。我们将在本系列的第3部分中深入探讨IPNS。

但是现在,让我们为我的网站生成一个IPNS链接。
ipfs name publish QmYVd8qstdXtTd1quwv4nJen6XprykxQRLo67Jy7WyiLMB

这可能需要几分钟时间。你会得到这样的输出:

Published to Qmb1VVr5xjpXHCTcVm3KF3i88GLFXSetjcxL7PQJRviXSy: /ipfs/QmYVd8qstdXtTd1quwv4nJen6XprykxQRLo67Jy7WyiLMB

现在,如果我想添加更新的CID,我将使用相同的命令

ipfs name publish <my_new_CID>

使用此功能,您可以使用以下链接访问我的网站的更新版本:
https://gateway.pinata.cloud/ipns/Qmb1VVr5xjpXHCTcVm3KF3i88GLFXSetjcxL7PQJRviXSy

上述链接仍然不是人类可读的。我们习惯于这样的名字:https://vaibhavsaini.com。在本系列的第3部分中,我们将看到如何将IPNS链接链接到域名,以便您可以在https://vaibhavsaini.com上查看我的IPFS托管网站。

IPFS也是HTTP协议的潜在替代品。但为什么我们要替换HTTP呢?它似乎工作正常,对吧?我的意思是你能够阅读这篇文章并在Netflix上看电影,所有这些都使用HTTP协议。
即使它似乎对我们很好,它也有一些大问题

假设您正坐在演讲厅,您的教授会要求您访问特定网站。讲座中的每个学生都向该网站提出请求并得到回复。这意味着相同的确切数据被单独发送给房间中的每个学生。如果有100名学生,则有100个请求和100个回复。这显然不是最有效的做事方式。理想情况下,学生将能够利用他们的物理接近度来更有效地检索他们所需的信息。

如果网络通信线路中存在某些问题并且客户端无法与服务器连接,则HTTP也会出现大问题。如果ISP发生中断,某个国家/地区阻止某些内容,或者内容只是被删除或移动,就会发生这种情况。这些类型的断开链接存在于HTTP Web上的任何位置。

HTTP的基于位置的寻址模型鼓励集中化。使用我们的所有数据信任少数几个应用程序很方便,但由于这一点,网络上的大部分数据都变得很脏。这使得这些提供商对我们的信息负有巨大的责任和权力。

这是Libp2p的用武之地。Libp2p用于在IPFS网络上传输数据并发现其他对等设备(计算机和智能手机)。这种方式的工作方式是,如果每台计算机和智能手机都运行IPFS软件,那么我们将成为像网络这样的大型BitTorrent的一部分,每个系统都可以充当客户端和服务器。因此,如果100名学生请求相同的网站,他们可以互相请求网站数据。如果大规模实施这种系统,可以显着提高上网速度。

好的,我们就此止步。如果你已经到了这里,那么你值得被拍拍后背。做得好!

到目前为止,我们已经学到了很多关于IPFS的知识。让我们回顾一下:

  • IPFS是内容可寻址的。 IPFS上的数据使用CID进行识别。
  • 这些CID对于它引用的数据是唯一的。
  • IPFS使用散列函数来实现防篡改属性,这使得IPFS成为自我认证文件系统。
  • IPFS使用Multihash,它允许它为相同的数据提供不同版本的CID(这并不意味着CID不是唯一的。如果我们使用相同的哈希函数,那么我们将拥有相同的CID。我们将更多地讨论这个问题。 在本系列的第4部分中)。
  • IPFS使用IPLD来管理和链接所有数据块。
  • IPLD使用Merkle DAG(aka Directed Acyclic Graph)数据结构来链接数据块。
  • IPLD还为IPFS添加了重复数据删除属性。
  • IPFS使用IPNS将CID链接到固定IPNS链路,这类似于当前集中式互联网的DNS。
  • IPFS使用Libp2p在IPFS网络上传输数据并发现其他对等方(计算机和智能手机),这可以显着提高网上冲浪的速度。

下面是IPFS协议栈的图解表示
IPFS协议栈



关于作者
Vaibhav Saini是麻省理工学院剑桥创新中心TowardsBlockchain的联合创始人。
他是高级区块链开发人员,曾参与多个区块链平台,包括以太坊,Quorum,EOS,Nano,Hashgraph,IOTA等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入了解IPFS(1/6):从入门到高级指南 的相关文章

  • 深入了解IPFS(1/6):从入门到高级指南

    原文 xff1a https medium com hackernoon understanding ipfs in depth 1 5 a beginner to advanced guide e937675a8c8a 这篇文章是新的系列
  • 深入了解ROS之编写无人机控制程序包

    深入了解ROS之编写无人机控制程序包 这篇教程来详细介绍一下如何编写出一个控制无人机的ROS程序包 编写ROS程序包推荐roboware studio xff0c 这款软件是在开源的vscode基础上二次开发 xff0c 用于ROS程序包的
  • 深入了解Vue.js的作用域插槽

    作用域槽是Vue js的一个有用特性 xff0c 它可以使组件更加通用和可重用 唯一的问题是它们很难理解 试着让你的头在父母和孩子的范围内交织 xff0c 就像解决一个棘手的数学方程 当你不能很容易地理解某件事时 xff0c 一个好的方法是
  • buffer是什么?深入了解Nodejs中的buffer模块

    buffer是什么 xff1f 下面本篇文章带大家深入了解一下Nodejs中的buffer模块 xff0c 介绍一下创建 复制 拼接 截取 填充Buffer xff0c 以及Buffer与String相互转换的方法 xff0c 希望对大家有
  • 深入了解Object.freeze()和Object.seal()

    目录 Object freeze Object seal 对比Object freeze 和Object seal 拓展Object preventExtensions Object freeze 官方MDN对Object freeze 的
  • 【机器人】机械臂与动捕Nokov的深入了解

    导语 xff1a 每次的实践操作后 xff0c 总能刷新我对机械臂以及Nokov的认识 xff0c 既让我惊喜不已 xff0c 同时也让我知道我掌握的还远远不够 xff0c 需要不断的学习 关于机械臂 示教器上NOA姿态表示方式 xff1a
  • IPFS星际文件系统下载及安装

    ipfs的下载与安装 ipfs星际文件系统是一个面向全球的 P2P的分布式文件系统 目标是补充 甚至是取代 目前通知互联网的超文本传输协议http 与传统的基于域名寻址的http协议相比较 ipfs的原理是基于内容寻址 也就是说用户寻找的不
  • ipfs使用二进制文件部署私有链

    注 此版本仅适用于ipfs go ipfs v0 4 18 版本 IPFS多节点 才能构建一个本地的分布式文件系统 在联盟链开发环境下 多数会使用到IPFS多节点私有网存储文件 一 IPFS二进制安装 1 1 下载ipfs二进制文件 wge
  • IPFS在Ubuntu中的安装步骤

    1 下载资源包 1 通过IPFS官网 https dist ipfs io go ipfs下载go ipfs 的预编译版本 需要挂Vpn 2 通过官方开放在GitHub上的源码仓库来获取最新发布的安装包 https github com i
  • ipfs-hdfs分布式文件系统

    HDFS hadoop项目的核心子项目 基于流数据模式访问和处理超大文件的需求而开发的 数据的分布式存储和处理 namenode 和 datanode 的内置服务器可帮助用户轻松检查群集的状态 namenode 管理维护着文件系统树以及整个
  • IPFS方得社区周欢:web3.0时代的分布式存储畅想

    链茶访是链茶馆新开辟的区块链项目报道专栏 每周会对一个项目团队进行专访 链茶馆将挖掘不同项目的闪光点 讲述区块链开发者的创业故事 为各位区块链同侪提供最新的项目资讯与行业动向 链茶馆今天采访了IPFS方得社区创始人周欢 该社区目前有4万用户
  • IPFS环境搭建和用ipfs-api访问ipfs网络

    ipfs是去中心化星际文件系统 本文介绍节点软件ipfs环境搭建和使用方法 学习ipfs api在nodejs代码中访问ipfs网络 一 ipfs节点安装与使用 1 1下载节点软件 到官网下载windows版的ipfs节点软件 32位 64
  • 【区块链】#区块链 ipfs介绍及环境配置

    需要在答辩之前做一点demo进行展示 好给评委老师展示我们的预期成果 组长最后挑选了IPFS作为初级的展示工具 我们的第一次在链上操作就开始了 区块链具有去中心化 不可篡改 智能合约的一些特性 其实大家都知道区块链是这几年因为比特币的火而赶
  • 今天我们来分享一下著名的分布式存储项目IPFS吧嘻嘻(最近在金融科技大赛,有相关的了解调用)

    我们先来了解一下HTTP的机制和原理吧 对于我们现在的网页协议来说 所有的HTML等前端的页面结构显示和文件都是通过HTTP请求来进行对中心化服务的访问 就像某一些时候 我们会发现自己的网页是不存在 是因为在服务器的中间无法的接受到我们的请
  • 星际文件存储IPFS是如何颠覆云存储的?

    一句话概括 IPFS The InterPlanetary File System 星际文件存储系统是一种点到点的分布式文件系统 它连接的计算设备都拥有相同的文件管理模式 从某种意义上来说这个概念跟Web的最初理念很类似 但是实际上IPFS
  • java-ipfs-api.jar的食用方法

    引入java ipfs api jar 从仓库引入 在pom xml中添加仓库
  • 如何在 IPFS 中重新创建多重哈希的哈希摘要

    假设我像这样向 IPFS 添加数据 echo Hello World ipfs add 这会给我QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u CID 它是 Base58 编码的多重哈希 将其转
  • IPFS:如何将文件添加到现有文件夹?

    给定一个相当大的文件夹 它已经被推送到网络 并在本地删除 如何将文件添加到该文件夹 而不重新下载整个文件夹 你只能通过使用来做到这一点ipns再次下载后ipfs get 如果它仍然固定到本地存储 那么应该会很快 1 首先将您的文件夹递归添加
  • 将目录上传到 pinata ipfs API

    我正在尝试将 png 目录上传到 pinata 但我不断收到此错误 error Invalid file path C Users myname Documents Coding Projects nft art reveal 1 png
  • 如何从我的计算机中取消固定并删除所有 IPFS 内容?

    我通过添加了一堆文件ipfs add 如何立即取消固定并删除所有这些内容 取消固定所有添加的内容 ipfs pin ls type recursive cut d f1 xargs n1 ipfs pin rm 然后可以选择运行存储垃圾收集

随机推荐