Dweb:利用 IPFS 将协作和信任融入网络

在这个系列中,我们介绍了一些项目,这些项目探索了当网络变得去中心化或分布式时,可以实现哪些可能性。这些项目与 Mozilla 无关,其中一些项目改写了我们对网页浏览器的思考方式。它们的共同点在于:这些项目都是开源的,并开放参与,并且与 Mozilla 的使命一致,即保持网络开放和可访问,让所有人受益。

有些项目从小型开始,旨在逐步改进。另一些项目则从宏伟愿景开始,通过构建理想化的世界来跨越当今的问题。星际文件系统 (IPFS) 无疑属于后者 - 它试图完全取代 HTTP,使用一种新的网络层,该层将规模、信任和反 DDoS 措施都构建到协议中。我们很高兴今天能从 Kyle DrakeNeocities 的创始人)和 Marcin RatajIPFS Companion 的创造者)那里获得对 IPFS 的介绍,他们都是 Protocol Labs 的 IPFS 团队成员 -Dietrich Ayala

IPFS - 星际文件系统

我们是一支遍布全球的团队,致力于开发 IPFS,这是一种分布式网络的实现,它试图用一种由互联网上的个人驱动的新的协议来取代 HTTP。IPFS 的目标是通过用一个不需要信任第三方内容的、面向内容的协议取代以位置为中心的 HTTP 来“重新去中心化”网络。这使得网站和网络应用程序可以由互联网上任何支持 IPFS 的计算机“提供服务”,而无需由原始内容创建者运行服务器。IPFS 和分布式网络将信息从物理位置和单一发行中分离出来,最终创造一个更经济、更平等、更可用、更快、更不易审查的网络。

IPFS 旨在实现“分布式”或“逻辑上分散”的设计。IPFS 由一个节点网络组成,这些节点通过 分布式哈希表 (DHT) 互相帮助找到数据。结果是,所有节点都帮助查找和提供网站,即使网站的原始提供者宕机,只要网络中的另一台计算机拥有该网站的副本,您仍然可以加载它。网络不再依赖于有能力构建大型内容交付网络并提供大量流量的大型组织,而是由个人赋能。

IPFS 堆栈是在 IPLDlibp2p 之上构建的抽象层。

The IPFS Stack: High Level Overview

Hello World

我们在 Go 中有一个参考实现 (go-ipfs),并且在 Javascript 中有一个不断改进的实现 (js-ipfs)。此外,还有针对其他语言的众多 API 客户端。

由于 JS 实现的存在,在 Web 开发中使用 IPFS 非常容易。以下代码片段…

  • 启动一个 IPFS 节点
  • 向 IPFS 添加一些数据
  • 获取数据的 内容标识符 (CID)
  • 使用 CID 从 IPFS 读取回该数据
<br /><script src="https://unpkg.com/ipfs/dist/index.min.js"></script>

Open Console (Ctrl+Shift+K)

<script>
  const ipfs = new Ipfs()
  const data = 'Hello from IPFS, <YOUR NAME HERE>!'

  // Once the ipfs node is ready
  ipfs.once('ready', async () => {
    console.log('IPFS node is ready! Current version: ' + (await ipfs.id()).agentVersion)

    // convert your data to a Buffer and add it to IPFS
    console.log('Data to be published: ' + data)
    const files = await ipfs.files.add(ipfs.types.Buffer.from(data))

    // 'hash', known as CID, is a string uniquely addressing the data
    // and can be used to get it again. 'files' is an array because
    // 'add' supports multiple additions, but we only added one entry
    const cid  = files[0].hash
    console.log('Published under CID: ' + cid)

    // read data back from IPFS: CID is the only identifier you need!
    const dataFromIpfs = await ipfs.files.cat(cid)
    console.log('Read back from IPFS: ' + String(dataFromIpfs))

    // Compatibility layer: HTTP gateway
    console.log('Bonus: open at one of public HTTP gateways: https://ipfs.io/ipfs/' + cid)
  })
</script>

就是这样!

在深入研究之前,让我们先回答一些关键问题。

还有谁可以访问它?

拥有 CID 的每个人都可以访问它。敏感文件应在发布之前进行加密。

该内容将存在多长时间?在什么情况下它会被删除?如何删除它?

IPFS 中基于内容寻址的数据的持久性本质上与对提供该数据的其他对等体的积极参与相关联。从其他对等体中删除数据是不可能的,但如果没有任何对等体保持数据存活,那么该数据将被“遗忘” by the swarm.

公共 HTTP 网关将保留数据几个小时 - 如果您想确保长期可用性,请确保在您控制的节点上固定重要数据。试试 IPFS 集群:一个独立的应用程序和一个 CLI 客户端,用于在 IPFS 守护程序集群中分配、复制和跟踪固定。

开发者快速入门

您可以使用 js-ipfs 来制作简单的浏览器应用程序。如果您想运行一个 IPFS 服务器,您可以 安装 go-ipfs,或者 运行一个集群,如上所述。

越来越多的 示例 可供参考,请务必查看使用 js-ipfs 构建的 双向文件交换演示

您可以通过安装适用于 Firefox 的 IPFS Companion 扩展 来将 IPFS 添加到浏览器中。

了解更多

请访问我们的文档网站 https://docs.ipfs.io,了解有关 IPFS 概念的更多信息。

读者可以通过以下方式参与:改进文档,访问 https://ipfs.io,使用 IPFS 开发分布式 Web 应用程序和网站,探索和贡献 我们的 Git 代码库 以及 社区 创建的各种内容。

我们的友好社区论坛是提出问题的绝佳场所:https://discuss.ipfs.io
我们还有一个 IRC 频道,#ipfs 在 Freenode 上(或 #freenode_#ipfs:matrix.org 在 Matrix 上)。加入我们吧!

关于 Kyle Drake

Kyle Drake 是一名开发者,目前在 Protocol Labs 从事 IPFS 相关工作。

Kyle Drake 的更多文章…

关于 Marcin Rataj

Marcin Rataj 是一位基于碳的生物,在 Protocol Labs 从事 IPFS 在 Web 浏览器中的工作。

Marcin Rataj 的更多文章…


2 条评论

  1. Strypey

    那么 IPFS 与 FreeNet 和其他类似项目有什么区别?这些项目从 20 世纪 90 年代末就存在了。为什么 IPFS 会成功,而这些项目却未能获得广泛关注?此外,IPFS 与 Solid 或 Urbit 等类似的当代项目有什么区别?

    2018 年 9 月 7 日 下午 10:31

    1. Marcin Rataj

      您的问题有很多方面需要解开。我会尽量给出通用的答案,抱歉我无法做得更简短 :)

      我们生活在一个充满活力的世界,预测未来是困难的。
      IPFS 的设计考虑到了这一点:规范驱动,建立在当代技术之上,并包含了开箱即用的防未来化原语。

      IPFS 不会强迫用户选择特定的身份管理方式、访问控制方式、使用任意数据格式,或永远受限于相同的加密原语。
      得益于模块化架构,传输、数据存储、路由,甚至用于内容寻址的加密哈希等组件都可以进行交换或升级,以满足特定需求或应对技术未来的变化。
      代码由高级抽象驱动。即使不运行 IPFS 本身,也可以使用 IPFS 堆栈的某些部分。
      我们已经看到围绕这一理念不断涌现的独立项目 (https://libp2p.iohttps://multiformats.iohttp://ipld.io)。

      这是更大的拼图的一部分,但我认为这种构建可重用组件的防未来化方式是人们和组织加入我们社区的关键原因之一。IPFS 正在获得越来越广泛的关注。

      如果您对“IPFS 与 X 的区别”的细微之处感兴趣,
      http://discuss.ipfs.io 上搜索或提问是获得详细答案的更好途径。
      思考/指向先前讨论的指针
      关于 IPFS 与 FreeNet:https://discuss.ipfs.io/t/how-does-ipfs-compare-to-freenet-wip/401
      关于 IPFS 与 Urbit:https://urbit.org/posts/objections/#sand
      据我所知,SOLID 的重点在更高抽象层,即链接数据,这意味着像“pod”存储这样的东西理论上可以构建在 IPFS 和 IPLD 之上。

      2018 年 9 月 15 日 下午 11:21

本文评论已关闭。