什么是IPFS(星际文件系统)?它是如何工作的以及如何使用IPFS?

  • getblock
  • 发布于 2023-09-05 20:28
  • 阅读 19

本文介绍了IPFS(星际文件系统)的基础知识,以及如何使用IPFS来增强以太坊dApp的开发体验。IPFS是一种点对点的分布式文件存储协议,通过内容寻址而非位置寻址来查找文件,并提供数据校验功能。文章还介绍了如何部署本地IPFS节点,以及IPFS在以太坊NFT和dApp中的应用。

文章封面

IPFS 指南:如何使用以太坊进行去中心化数据存储

随着我们在区块链的帮助下走向一切去中心化,拥有一个稳固的去中心化文件存储解决方案才符合 Web3 的原则,星际文件系统是其中的一个基本组成部分。

本 IPFS 教程将向你介绍 IPFS 的基础知识,并提供有关如何使用 IPFS 来增强以太坊 dApp 开发体验的技巧。

主要内容

  • 与 torrent 的工作方式类似,IPFS 协议用于托管数据并在点对点之间传输数据,而无需依赖中心化服务器;
  • 该协议提供了一种通过基于实际内容而非位置来查找文件,从而寻址互联网上消费内容的新方法;
  • 任何人都可以下载专用软件并开始利用该技术进行个人使用;
  • 随着人们对 非同质化代币 的兴趣日益浓厚,以及安全存储它们的方式,去中心化存储工具正变得越来越重要;
  • 以太坊开发者可以通过在去中心化存储库中托管 dApp 数据,而不是在区块链上保存数据这种相当昂贵的替代方案中获益。

什么是 IPFS?

IPFS,星际文件系统,是一种协议,使全球各地的各种服务器能够相互通信、存储和交换文件,而无需中间人参与。 任何熟悉 BitTorrent 的人都可能已经掌握了这个概念。

建立在 HTTP 上的传统 Web 一直受到批评,因为它容易受到政府和托管提供商的审查,更不用说 DDoS 攻击和服务器中断了。 IPFS 核心技术背后的公司 Protocol Labs 正在开发一种通过加密保护的去中心化 Web 浏览方法,作为 HTTP 协议的替代方案。

客户端-服务器_vs_P2P_models

图片来自 IPFS

因此,我们通常存储在 HTTP 上的任何类型的文件都可以容纳在 IPFS 中。 然而,与传统 Web 相比,无需联系远程中心化服务器来存储或获取该内容。

IPFS 如何工作?

与区块链类似,星际文件系统网络由节点或本地计算机组成。 然而,与区块链不同,这些节点指的是运行 IPFS 软件的计算机,并且仅托管它们愿意保留的内容。

相关:https://getblock.io/blog/what-is-a-blockchain-node-and-how-does-it-work/

现在让我们解决使去中心化内容共享成为 HTTP 最强大竞争对手的关键特性:

内容检测

与 URL 的工作方式相反,IPFS 上的数据可以通过实际内容找到,而与其位置无关。 只要该内容位于 IPFS 上的某个节点上,它就会由其 CID 提供服务。

IPFS 和加密算法

每个注册到 IPFS 的内容都会经过哈希处理,并被赋予内容 ID (CID) —— 一个唯一的哈希值。 要与世界分享文件,只需传播哈希值。 由于与原始数据的加密关系,一个 CID 始终指代相同的内容。

可验证的数据

对内容的每一个细微的编辑都会完全改变其哈希值或 CID。 IPFS 的这个特性有几个优点。 首先,它消除了重复的需要,因为相同的内容将返回相同的标识符。 最重要的是,我们可以确定特定 CID 背后的数据永远不会被替换。

文件固定

仅仅将文件上传到 IPFS 并检索其哈希值默认不会开始将其提供给网络上的其他对等点。“固定”选项应用于文件,以告知其他节点你拥有此 CID 并且可以根据请求共享它。

正如我们所看到的,虽然 IPFS 的基本概念并不新鲜,但该协议的实现方式使其成为一项值得关注的技术。

如何探索 IPFS 数据?

唯一的哈希字符串是在 IPFS 网络上查找任何文件的关键。 当通过 CID 发起请求时,节点会通信以定位所需的数据。 想象一下,你正在问你的朋友谁拥有你想与其他人分享的 梗图 或视频。

扫描 IPFS 的方法取决于你是否选择在你的计算机上设置节点。

通过 HTTP 读取 IPFS 链接

公共网关允许在不运行节点的情况下导航去中心化存储。 多个 IPFS 网关,例如 ipfs.io 和 cloudflare-ipfs.com 将 HTTP 请求路由到多个 IPFS 服务器,以向你提供查看器模式访问。

此类请求可以通过任何 Web 浏览器以以下格式执行,具体取决于网关:https://ipfs.io/ipfs/[CID], https://cloudflare-ipfs.com/ipfs/[CID].

虽然网关有助于有效地桥接 Web2 和 Web3,但请注意,使用此方法与信任第三方为你获取内容相关联,因此它并不符合点对点原则。

通过你自己的节点直接访问 IPFS

将你的计算机变成一个节点就像下载桌面应用程序一样简单 —— 我们将在本文中进一步指导你完成该过程。 如果你只是在应用程序中浏览 CID,桌面应用程序将返回理想的结果:

IPFS_Desktop_Search_Bar

来自 IPFS Desktop 的图片

除此之外,流行的浏览器支持官方 IPFS Companion 扩展 以在 Chrome 或 Firefox 中查看文件,并将它们重定向到你的节点,前提是你已设置了应用程序。

托管你自己的 IPFS 服务器的另一种方法是使用 Brave 和 Opera 浏览器。 虽然默认情况下它们与公共网关交互以获取内容,但可以选择在任何这些浏览器中设置本地节点。

Brave_IPFS_support

图片来自 Brave

在这种情况下,节点将在后台运行,以便用户可以通过提交“ipfs://”前缀后跟 CID,直接从搜索栏访问文件。 一个例子是 ipfs://QmaoWVmfgfpayKvaSEaAuu6YDwkUz8Fr9easDchoPsKuxT.

为什么要使用 IPFS?

在回顾了 IPFS 背后的所有技术细节之后,现在让我们将其总结为三个优点,使其成为一种领先于 HTTP 的技术。

1) 没有单点故障

在传统 Web 中,我们通过 URL 访问网站的数据,URL 指向实际存储内容的服务器。 管理这些服务器的公司对委托给它们的每一份数据拥有集中控制权,并且可以单独切断对网站的访问。 更重要的是,一台服务器可能难以处理繁重的流量。

相反,星际文件系统由许多独立于政府或中介机构的服务器组成。 虽然多个节点可能会关闭,但如果至少有一个节点为该文件提供服务,则仍然可以检索信息。

2) 连接速度

由于 IPFS 的数据交换不涉及中间人,因此直接从一个节点向另一个节点发送文件会显着加快该过程。 此外,该协议能够扫描网络以找到多个具有所需内容的最邻近节点,从而防止瓶颈问题。

3) 安全性

IPFS 的主要思想是让人们安全地托管自己的数据,这由加密哈希保证。 一个 CID 不可能引用不同的内容,因此你可以随时检查提供给你的 CID 和收到的文件的唯一标识符,以证明数据没有被篡改。 此外,拥有多个节点而不是一个中心使 IPFS 免受数据泄露的影响。

毫无疑问,HTTP 的客户端-服务器模型彻底改变了我们使用 Web 的方式。 然而,我们今天所知道的互联网越来越与几个问题相关联,这只会强调对适当的去中心化解决方案的需求。

IPFS 教程:如何部署本地节点

在你本地计算机上启动 IPFS 节点是免费且简单的,并且仍然可以让你从该技术提供的所有优势中受益。 本教程将展示如何通过桌面客户端或命令行开始使用 IPFS。

桌面应用程序:最用户友好的方式

IPFS Desktop 是最方便和最适合初学者的工具,它会在安装后在你的计算机上部署一个本地 IPFS 节点,并支持共享和读取文件。 按照我们的引导,只需点击几下即可设置你的服务器:

  1. 从 IPFS GitHub 存储库 下载适用于 Windows、macOS 或 Linux 的软件包,并安装 IPFS 桌面应用程序。 你的 IPFS 节点已立即连接并可以使用!

IPFS_Desktop

来自 IPFS Desktop 的图片

  1. 点击侧边栏上的“文件”,按“导入”,然后从弹出的窗口中选择所需的文档。

How_to_import_files_to_IPFS

来自 IPFS Desktop 的图片

  1. 上传完成后,你将看到为你文件生成的唯一 CID。 按右侧的图钉图标,使你的导入可被其他参与者发现。

How_to_pin_files_to_IPFS

来自 IPFS Desktop 的图片

  1. 要发送文件,请导航到三点图标以复制 CID 或查找可共享的链接。 要检索与你共享的文件,请导航到顶部的搜索栏并输入内容 ID。

How_to_share_IPFS_files

来自 IPFS Desktop 的图片

现在你已做好充分准备,可以开始进行去中心化的 Web 浏览之旅。

适用于高级用户的 IPFS

Kubo 是 IPFS 的 Golang 实现,Helia 是用 JavaScript 编写的,它们都适用于命令行界面使用。 为了说明,让我们使用 Go 客户端在 macOS 上部署 IPFS 节点并与之交互。

  1. 前往 Kubo 下载页面。 安装并解压缩该软件包。
  2. 在终端中,导航到 Kubo 目录:cd Kubo
  3. 要启动节点,请使用以下命令:ipfs init
  4. 发出测试请求并检查节点是否已启动:

ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

如果成功,将显示欢迎消息,这意味着我们可以继续。 尝试打开同一文件夹中的其他文件,这些文件将指导你完成关键功能。

Kubo_directory_IPFS_cat

来自 Kubo CLI 的图片

例如,我们已经使用了 ipfs cat 命令来读取上面的文件,其他一些功能将是:

  • 创建文件:echo “your text here” >[name the file]
  • 将其移动到你的本地节点:ipfs add [file name]
  • 让你的节点与其他节点共享本地托管的内容:ipfs daemon

利用 IPFS 的 CLI 版本可以访问广泛的 API 库,这些 API 库可以自定义和配置以适应各种用例,因此对于开发人员将 IPFS 与他们的应用程序集成很有用。

以太坊区块链的 IPFS 用例

以太坊是加密货币的智能合约强大引擎,是 NFT 和大量去中心化应用程序的舒适家园。 关于基于以太坊的应用程序和 非同质化代币 需要了解的一件事是,由于多种原因,应用程序文件和 NFT 原始数据通常不会链上存储。

ETH 链并非旨在处理大量数据,即使从理论上讲你可以这样做,gas 费用也会非常高昂。 一种流行的安全保存数据的方式是通过中心化的云托管服务,如 AWS 或 Google Cloud,这看起来并不可靠。 如果存储该数据的中心化服务器消失,NFT 就会变得毫无意义。

这就是区块链和 IPFS 可以很好地互补的地方。

为以太坊 NFT 提供动力

在区块链上铸造的 NFT 具有对元数据文件和实际图像的引用,这些元数据文件和实际图像都保存在链下。 将此数据存储在 IPFS 上而不是中心化服务器上可能是一个更明智的解决方案。 它的工作原理:

  • 引导至 NFT 元数据中包含的资产的 URL 链接引用 CID;
  • IPFS 帮助确保Token永远不会被篡改,因为即使更改了该 JPEG 的一个像素,CID 也会完全改变;

How_to_find_NFT_metadata

图片来自 OpenSea

类似地,通过在你的本地节点上固定 CID 来承担存储你购买的 NFT 的责任,以确保它不会消失。 你还可以使用 Protocol Labs 套件中的免费工具,如 Nft.storage 和 Web3.storage 来简化该过程。

相关:https://getblock.io/blog/how-to-create-an-nft-collection-five-easy-steps/

dApp 的去中心化存储

许多以太坊应用程序利用 IPFS 技术通过将哈希值发送到智能合约而不是将整个数据块放入链中,以去中心化的方式存储应用程序文件。

请看下面的图片,了解 IPFS 和以太坊智能合约如何协同工作:

Integrating_IPFS_into_Smart_Contracts

图片来源

这是一个用于将 IPFS 文件导入到 Solidity 智能合约中的示例代码片段:

pragma solidity ^0.8.0;

contract IPFSExample {
    function importFileFromIPFS(string memory ipfsHash) public {
        // Connect to IPFS HTTP API and fetch the file
        // Convert the file to a byte array
        // Assuming you have fetched the file and converted it to a byte array called 'fileData'
        // Pass the byte array to a smart contract function
        yourSmartContractFunction(fileData);
    }

    function yourSmartContractFunction(bytes memory fileData) private {
        // Process the file data here
        // Store it or perform any other operations you require
    }
}

要使用此代码,你需要用智能合约中处理文件导入的实际函数替换 yourSmartContractFunction。 请注意,你可能需要在你的后端代码中使用像 ipfs-http-client 这样的库才能执行该函数。

IPFS 成本和费用

前提是你已经设置好你每天使用的具有常见存储容量的硬件和可靠的互联网连接,那么使用基于 IPFS 的存储将不会产生额外的成本。 为保证你的 IPFS 文件的可用性和寿命,请尝试所谓的“固定”服务,这些服务会付费将你的内容传播到多个节点。

这种类型的一个突出的服务示例是原生 Protocol Labs 工具 Filecoin。 该平台将帮助你找到准备在指定时间内固定你的数据的服务器,以换取 Filecoin 原生Token的奖励,这大约只需每月 20 美分

此外,以下表格比较了将数据直接存储在以太坊链上与将哈希值存储在链上的价格:

链上数据存储 在链上存储 1 个 IPFS 哈希值
以太坊 Gas,每个 32 字节(256 位)插槽 21,000 gas
平均 Gas 价格 ≈ 36 gwei
存储大小 > 32 字节 32 字节
最终价格(以 ETH 计) 1 Kb = (32 x 21,000 gas) = 672,000 gas<br>↓<br>672,000 gas = 24,192,000 gwei = 0.024 ETH 21,000 gas <br>↓<br>756,000 gwei = 0.0008 ETH
最终价格(以美元计) ≈ 每 Kb 40 美元 ≈ 1.35 美元

IPFS、以太坊和 GetBlock 以简化 Web3 开发

在你让 IPFS 安全地将以太坊应用程序数据存储在链下的同时,是时候关注 dApp 基础架构了。

GetBlock 是一家经过时间考验的 RPC 端点提供商,提供只需点击几下即可将 Web3 应用程序连接到以太坊区块链的服务。

在本视频中探索如何开始使用带有 GetBlock 的 ETH RPC 的区块链数据:

嵌入视频:https://www.youtube.com/watch?v=NYGpLFLFzFI

更好的是,获取免费套餐并亲自测试:https://account.getblock.io/


结束语

虽然传统的基于 HTTP 的 Web 结构定义明确且被广泛采用,但在万维网上使用 IPFS 尚未标准化,这为公众使用设置了某些进入壁垒。 然而,数据的透明度和弹性是互联网用户和 Web3 开发人员今天倾向于 IPFS 的主要原因。

在以太坊上构建? 让 GetBlock 处理基础架构并确保你的 dApps 的高性能:https://account.getblock.io/.

试用一下并邀请也可能觉得它有用的朋友以获得不错的奖励:https://getblock.io/affiliate-program/

常见问题解答

  • IPFS 是 Web3 中去中心化文件存储解决方案的支柱技术,为 Filecoin 区块链、Nft.storage、Web3.storage 以及许多其他平台和应用程序提供支持。

  • 星际文件系统从定义上来说不是区块链,但由于它按照相同的去中心化模式运行,因此它与加密货币技术兼容。

  • 是的,IPFS 和以太坊是构建依赖于 P2P 文件存储而不是中心化 Web 托管的、防审查的去中心化服务和产品的强大组合。

  • 由 Protocol Labs 制造的桌面应用程序是在星际文件系统上发布数据并将其置于用户控制之下的一个不错且简单的工具。

还有更多问题? 联系 chevron-right

  • 原文链接: getblock.io/blog/what-is...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
getblock
getblock
江湖只有他的大名,没有他的介绍。