标签: IPFS

  • DWeb教程:去中心化网络上的内容寻址(第四课)

    欢迎来到ProtoSchool的第四课!今天我们将深入探讨密码学哈希内容标识符(CIDs)。准备好了吗?让我们一起揭开这些概念的神秘面纱。

    🖼️ 不只是可爱的图片

    在之前的课程中,我们一直在讨论可爱的图片,但内容寻址不仅限于此。实际上,它可以应用于所有类型的文件和数据,从JSON对象到论文再到视频,内容寻址的应用范围非常广泛。为了使密码学哈希正常工作,我们需要了解正在处理的数据格式,并使用适当的工具。

    🔑 什么是内容标识符(CID)?

    内容标识符(CID)是去中心化网络中一种特定形式的内容寻址。它是为IPFS(一个去中心化网络协议)开发的,但它的应用前景非常广泛。CID的魅力在于它是一个单一的标识符,包含了一个密码学哈希和一个编解码器(codec),后者提供了有关如何解释该数据的信息。编解码器的作用是对数据进行编码和解码。

    +-------+------------------------------+
    | Codec | Multihash                    |
    +-------+------------------------------+

    许多格式和协议已经在使用内容寻址,例如Git、以太坊和比特币,但它们在解释数据和使用的加密哈希函数方面有所不同。CID使我们能够为任何这些系统创建一个通用标识符。

    🔍 CID的构成

    每个CID都是一个标识符,包含用于解释数据的编解码器和一个自描述哈希(multihash),即一个告诉你使用了哪种哈希函数来创建它的哈希值。

    +------------------------------+
    | Codec                        |
    +------------------------------+
    |                              |
    | Multihash                    |
    | +----------+---------------+ |
    | |Hash Type | Hash Value    | |
    | +----------+---------------+ |
    |                              |
    +------------------------------+

    如果你想了解更多关于CID如何在IPFS中构建的细节,可以查看我们的《CID的解剖》教程。

    🌐 小结

    今天我们探讨了CID的概念,它为我们在去中心化网络中标识和处理各种类型的数据提供了便利。通过结合密码学哈希和编解码器,CID为内容寻址带来了新的可能性。

    在接下来的课程中,我们将继续深入探讨如何在去中心化网络上利用这些工具。若你在学习过程中有任何疑问,ProtoSchool非常欢迎你的反馈,以帮助我们改进课程内容。准备好迎接最后一课的挑战了吗?

    参考文献

    • ProtoSchool. (n.d.). DWeb Tutorial | Content Addressing on the Decentralized Web (Lesson 4). Retrieved from ProtoSchool.
  • DWeb教程:去中心化网络上的内容寻址(第三课)

    欢迎回到ProtoSchool!在这一课中,我们将深入探讨去中心化网络中的内容寻址。准备好揭开这一崭新世界的面纱了吗?

    🔗 走出中心化的阴影

    在中心化网络中,我们依赖可信的权威机构来托管我们的数据,使用基于位置的URL来访问。然而,在去中心化网络中,我们有了另一种选择:每个人都可以托管彼此的数据,这种链接方式更加安全,从而使我们更容易信任我们的“邻居”。

    🔐 密码学哈希:去中心化的核心工具

    密码学哈希是去中心化数据结构中最重要的工具。它为我们打开了一种新的链接形式——内容寻址,使我们不再依赖中心化的权威。

    哈希过程会将任何大小和类型的数据转换为一个固定大小的“哈希值”。这个哈希值就像是数据的独特名称,虽然看起来像是一串乱码(例如:bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi),但它的安全性却让人印象深刻。

    🖼️ 哈希的神奇之处

    密码学哈希是基于数据本身生成的,这意味着使用相同算法处理相同数据的人会得到相同的哈希。例如,如果Ada和Grace都在使用IPFS共享同一张小猫的照片,那么两张照片的哈希值将完全相同。通过比较这些哈希,我们可以确认这两张照片每一个像素都是一致的。

    而且,哈希是唯一的。如果Grace在Photoshop中删除了一根猫胡子,更新后的图像将生成一个新的哈希。即使不访问文件本身,仅通过哈希,我们也能轻易识别出文件内容已经不同。

    🛡️ 去中心化网络中的信任

    在中心化网络中,我们习惯于信任某些权威机构,而不信任其他机构。虽然我们尽力从URL中获取线索,但仍然有一些恶意行为者利用位置寻址的缺陷来欺骗我们。

    然而,在去中心化网络中,我们共同托管彼此的数据,内容寻址使我们能够信任共享的信息。我们可能对托管数据的同伴知之甚少,但哈希可以防止恶意行为者欺骗我们。这就是密码学哈希在去中心化网络中如此重要的原因。

    🕵️‍♀️ 向节点请求内容

    在传统的基于位置的寻址中,我们知道需要访问puppies.com来找到存储为beagle.jpg的内容。如果puppies.com域名出现问题,我们将失去访问那张图片的权限。

    然而,在去中心化网络中,情况就大不相同。当我们想要获取一张可爱的宠物照片时,我们是通过内容地址(哈希)来请求的。我们要向谁询问呢?整个网络!如果Ada在线,我们会看到她拥有我们需要的内容,并且由于哈希匹配,我们知道这正是我们需要的文件。如果她下线,我们可能仍然可以从Grace或其他节点获取同样的照片。

    在去中心化网络上,由于我们使用哈希来请求数据,我们可以将哈希视为一种链接,而不仅仅是一个名称。

    参考文献

    • ProtoSchool. (n.d.). DWeb Tutorial | Content Addressing on the Decentralized Web (Lesson 3). Retrieved from ProtoSchool.
  • DWeb教程:去中心化网络上的内容寻址(第一课)

    欢迎来到ProtoSchool!在这里,我们将为你揭开去中心化网络的神秘面纱。准备好了吗?让我们一起探索如何识别和检索网络上的数据。

    📚 什么是内容寻址?

    在我们深入之前,你可能在想:什么是内容寻址?简单来说,它是我们在去中心化网络中识别和获取数据的方式。与我们熟悉的中心化网络不同,去中心化网络有其独特的方式来处理数据。

    🏙️ 位置寻址与内容寻址的对比

    想象一下,你有两个朋友,Lars和Courtney,他们向你推荐同一本书。Lars告诉你:“去纽约市的Strand书店,在二楼的儿童区找到第三个书架,去左边16英寸的地方找书。”而Courtney则说:“看一下Anna Claybourne写的《Cutest Kittens Ever》,它的ISBN-13是9781682972168。”

    如果你的目标是获取这本书,你会更倾向于哪个描述呢?是Lars的详细位置,还是Courtney的内容信息?

    • 位置寻址:Lars的描述指向的是一个特定的地点,他希望书店依然有这本书。这在中心化网络中是常见的,数据定位依赖于特定实体。
    • 内容寻址:Courtney的方式则是基于内容提供一个独特的标识符。通过ISBN号,你可以在多个来源中确认找到的书籍,这就是去中心化网络的强大之处。

    🔍 深入理解这两种模型

    在去中心化网络中,内容寻址让我们能够从多个来源检索数据,而不必依赖单一的存储位置。这种方式提高了数据的可访问性和灵活性,使得用户能够更自由地获取信息。

    🌐 小结

    总而言之,去中心化网络与中心化网络的最大不同在于如何识别和获取数据。位置寻址依赖于特定的存储位置,而内容寻址则通过内容的唯一标识符使数据的获取变得更加灵活。

    如果你对这些概念还有疑问,ProtoSchool非常乐意听取你的反馈,以不断改进我们的课程。准备好迎接下一课的挑战了吗?让我们继续探索去中心化网络的奇妙世界吧!

    参考文献

    • ProtoSchool. (n.d.). DWeb Tutorial | Content Addressing on the Decentralized Web (Lesson 1). Retrieved from ProtoSchool.
  • Helia FAQ 摘要 🤔

    在这里,我们将探讨Helia的相关问题,帮助您更好地理解这个现代化的IPFS实现及其与其他项目的关系。

    👩‍👧 Helia与js-IPFS的关系是什么?

    Helia是IPFS的一种新实现,旨在提供更模块化和轻量级的解决方案。js-IPFS曾是IPFS在JavaScript中的实现,但随着Helia的推出,js-IPFS将逐步被替代。Helia借鉴了js-IPFS的一些组件(如libp2p和bitswap),但重新设计了API,以便更好地支持分布式应用程序的开发。

    🤝 Helia如何保证与Kubo及其他IPFS实现的兼容性?

    Helia的每个组件都配备了互操作性测试套件,确保与其他IPFS实现(特别是Kubo)的兼容性。这些测试在持续集成(CI)过程中自动运行,以确保每个拉取请求和发布版本的兼容性。

    🏎️ 性能与其他实现(包括js-IPFS)相比如何?

    根据现有的基准测试,Helia在多个方面的性能表现都非常出色。Helia的基准测试套件会涵盖数据传输等功能区域,以便进行全面的性能分析。

    🗑️ 垃圾收集机制是什么?

    Helia使用引用计数机制进行垃圾收集,这种方法比js-IPFS或Kubo采用的其他方式更具可扩展性。

    🙃 为什么考虑使用Helia而不是js-IPFS?

    Helia提供了一个全新的视角,重新审视JavaScript中完整功能的IPFS实现。与js-IPFS不同,Helia并不受限于Kubo的API,可以自由创新,满足JavaScript特有的使用场景。

    🤷 为什么选择Helia而不是kubo-rpc-client?

    Helia允许您将IPFS节点嵌入到应用程序中,从而实现最低延迟和最佳性能。与需要运行单独的Kubo守护进程的kubo-rpc-client不同,Helia简化了部署任务,并为用户提供了使用相同技能集监控和调优节点的能力。

    🧭 Helia有哪些内容和对等路由机制?

    Helia支持所有现有的libp2p内容和对等路由机制,包括@libp2p/kad-dht、@libp2p/ipni-content-routing和@libp2p/reframe-content-routing等。

    🚌 Helia支持哪些数据传输方式?

    Helia支持所有现有的libp2p传输方式,例如@libp2p/webtransport、@libp2p/webrtc和@libp2p/websockets等。

    👋 Helia如何“识别”自己?

    Helia在libp2p实例中标识自身,默认情况下使用以下字符串进行标识:

    helia/x.x.x libp2p/x.x.x UserAgent=$USER_AGENT

    其中$USER_AGENT是当前Node.js版本或浏览器的用户代理字符串。

    通过解答这些常见问题,希望能帮助您更好地了解Helia的功能和优势。如果您有更多问题,欢迎查阅Helia Wiki获取详细信息!

  • Helia:为现代应用设计的分布式网络解决方案 🌐

    在当今的数字时代,数据的存储和管理变得愈发重要。Helia作为一款现代化的分布式网络解决方案,致力于为开发者提供高效、灵活的数据存储方式。它不仅是IPFS(InterPlanetary File System)的一个实现,还积极响应了现代应用的需求,尤其是在JavaScript和浏览器环境中。

    🌟 Helia的核心特性

    Helia采用模块化设计,使其能够轻松适应各种使用场景。无论你是想存储简单的字符串,还是处理复杂的JSON对象,Helia都能轻松搞定。以下是Helia的一些核心特性:

    • 字符串支持:通过@helia/strings模块,Helia允许用户快速添加和检索字符串数据。
    • JSON对象处理:使用@helia/json模块,可以方便地将普通JavaScript对象存储在Helia节点中。
    • DAG结构:Helia支持DAG(有向无环图)数据结构,通过@helia/dag-json@helia/dag-cbor模块,用户可以存储引用对象和简洁的二进制表示。
    • 自定义哈希功能:Helia允许用户选择不同的哈希算法,以满足特定应用的需求。

    🌐 如何开始使用Helia

    使用Helia的第一步是创建一个Helia节点。以下是一个简单的示例,展示如何将字符串数据添加到节点中:

    import { createHelia } from 'helia'
    import { strings } from '@helia/strings'
    
    const helia = await createHelia()
    const s = strings(helia)
    const myImmutableAddress = await s.add('hello world')
    console.log(await s.get(myImmutableAddress))
    // 输出:hello world

    📚 深入学习与贡献

    对于希望深入了解Helia的开发者,可以访问Helia的项目文档API文档。如果你对这个项目感兴趣,欢迎参与贡献,Helia团队鼓励开发者提交PR和反馈。

    🚀 未来展望

    随着技术的不断发展,Helia将持续优化和更新,以满足开发者的需求。无论是性能提升还是功能扩展,Helia都在不断努力,成为分布式存储领域的一颗新星。

    通过Helia,您可以享受更高效的分布式数据管理体验,助力您的应用开发。快来探索Helia的无限可能吧!

  • Helia:现代化的IPFS实现 🚀

    在当今这个数据如潮水般涌来的时代,如何高效、灵活地管理这些数据成为了一个重要的挑战。Helia应运而生,它是一款轻量级、模块化且现代化的TypeScript实现,专门为JS和浏览器环境设计的IPFS(InterPlanetary File System)解决方案。无论你是开发者还是好奇的用户,Helia都为你提供了一个友好的起点。

    🌟 使用Helia

    使用Helia非常简单。首先,你需要创建一个Helia节点。以下是如何将字符串数据添加到Helia节点的示例代码:

    import { createHelia } from 'helia'
    import { strings } from '@helia/strings'
    
    const helia = await createHelia()
    const s = strings(helia)
    const myImmutableAddress = await s.add('hello world')
    console.log(await s.get(myImmutableAddress))
    // 输出:hello world

    通过上面的代码,你可以轻松地将“hello world”存储到Helia节点中,并在需要时取出它。

    🌃 JSON数据的存取

    Helia不仅支持字符串,还可以处理更复杂的数据结构,比如JSON对象。使用@helia/json模块,你可以轻松地将JavaScript对象添加到Helia节点中:

    import { createHelia } from 'helia'
    import { json } from '@helia/json'
    
    const helia = await createHelia()
    const j = json(helia)
    const myImmutableAddress = await j.add({ hello: 'world' })
    console.log(await j.get(myImmutableAddress))
    // 输出:{ hello: 'world' }

    这段代码展示了如何将一个简单的对象存储到Helia中,并随时检索出来。

    🌠 DAG-JSON:链接对象的存储

    如果你需要存储链接对象,可以使用@helia/dag-json模块。这个模块允许你将对象的引用作为CID(内容标识符)存储。以下是一个示例:

    import { createHelia } from 'helia'
    import { dagJson } from '@helia/dag-json'
    
    const helia = await createHelia()
    const d = dagJson(helia)
    const object1 = { hello: 'world' }
    const myImmutableAddress1 = await d.add(object1)
    const object2 = { link: myImmutableAddress1 }
    const myImmutableAddress2 = await d.add(object2)
    
    const retrievedObject = await d.get(myImmutableAddress2)
    console.log(retrievedObject)
    // 输出:{ link: CID(baguqeerasor...) }
    console.log(await d.get(retrievedObject.link))
    // 输出:{ hello: 'world' }

    在这个例子中,我们首先添加了一个对象,然后创建了一个包含该对象链接的新对象。这样就实现了对象之间的引用关系。

    🌌 DAG-CBOR:简洁的二进制表示

    与DAG-JSON类似,@helia/dag-cbor模块使用Concise Binary Object Representation(CBOR)来存储对象。这种方法在存储效率上有显著优势,特别是当你需要处理大量数据时。以下是示例代码:

    import { createHelia } from 'helia'
    import { dagCbor } from '@helia/dag-cbor'
    
    const helia = await createHelia()
    const d = dagCbor(helia)
    const object1 = { hello: 'world' }
    const myImmutableAddress1 = await d.add(object1)
    const object2 = { link: myImmutableAddress1 }
    const myImmutableAddress2 = await d.add(object2)
    
    const retrievedObject = await d.get(myImmutableAddress2)
    console.log(retrievedObject)
    // 输出:{ link: CID(baguqeerasor...) }
    console.log(await d.get(retrievedObject.link))
    // 输出:{ hello: 'world' }

    通过这些示例,您可以看到Helia的强大之处。它不仅提供了灵活的数据存储解决方案,还通过不同的模块满足各种需求。

    🔒 自定义哈希器

    在Helia中,内容的不可变地址(CID)是由哈希器决定的。默认情况下,Helia使用sha2-256多哈希技术,但您可以根据需要选择其他哈希器。这对于需要特定属性的应用程序尤其有用。以下是如何使用不同哈希器的示例:

    import { createHelia } from 'helia'
    import { dagCbor } from '@helia/dag-cbor'
    import { sha512 } from 'multiformats/hashes/sha2'
    
    const helia = await createHelia()
    const d = dagCbor(helia)
    const object1 = { hello: 'world' }
    const cidWithSHA256 = await d.add(object1)
    const cidWithSHA512 = await d.add(object1, { hasher: sha512 })
    
    console.log(cidWithSHA256)
    // 输出:CID(bafyreidykglsfhoixmivffc5uwhcgshx4j465xwqntbmu43nb2dzqwfvae)
    console.log(cidWithSHA512)
    // 输出:CID(bafyrgqhai26anf3i7pips7q22coa4sz2fr4gk4q4sqdtymvvjyginfzaqewveaeqdh524nsktaq43j65v22xxrybrtertmcfxufdam3da3hbk)

    🐾 下一步

    想要更深入地了解Helia的使用?请查看Helia示例库,里面涵盖了各种用例。如果你觉得还有什么遗漏的地方,可以按照贡献指南创建一个PR。

    📗 项目文档与API文档

    有关Helia的详细信息和API文档,请访问项目文档API文档

    📣 项目状态与贡献

    Helia v1于2023年3月发布,开发团队正在积极进行性能改进和bug修复。如果你对项目感兴趣,我们欢迎你的参与!请查看我们的贡献文档了解更多信息。

    🛍️ 知名用户

    想知道有哪些项目正在使用Helia?请查看使用Helia的项目

    🌞 许可证信息

    Helia在Apache 2.0和MIT许可证下发布,详情请查看相关许可证文件。

    通过Helia,您可以轻松地在分布式网络中存储和检索数据,享受现代化的开发体验。快来体验吧!

  • 📦 迎接 Boxo:构建 IPFS 应用的新工具箱

    在当今数字化的世界中,去中心化网络的重要性愈加凸显,特别是对于数据存储和共享的需求。IPFS(星际文件系统)作为一个去中心化的文件存储协议,正逐渐成为开发者们的宠儿。然而,创建与 IPFS 互动的应用并非易事。为此,Boxo 应运而生,它是一个专为 Go 语言开发的 IPFS SDK,旨在为开发者提供构建 IPFS 应用所需的工具和组件。

    🚀 Boxo 的动机与愿景

    Boxo 的核心目标是简化 IPFS 应用的构建过程。开发者们过去常常面临寻找可重用代码的困境,或者在使用现有的代码时感到无从下手。Boxo 的诞生正是为了应对这一挑战。它不仅提供了一系列高质量的组件,还使这些组件更容易被发现和使用。

    考虑到 IPFS 的复杂性,Boxo 的维护者们希望通过提供易用的库,降低开发者的学习曲线。这不仅能帮助那些希望用 Go 语言开发 IPFS 应用的开发者,也能减轻维护者的负担,让他们有更多时间投入到社区贡献中。

    🔍 Boxo 的范围与功能

    Boxo 包含了一系列与 IPFS 相关的高质量组件,适用于公共和私有 IPFS 网络的交互。这些组件涵盖了内容路由、数据传输、命名和可变性等多个方面。具体来说,Boxo 提供了以下几类功能:

    • 内容路由:包括 DHT(分布式哈希表)、委托内容路由等功能。
    • 数据传输:支持通过网关、Bitswap 和增量验证等方式进行数据传输。
    • 命名与可变性:实现名称解析和 IPNS(InterPlanetary Naming System)功能。
    • 与公共和私有 IPFS 网络的交互:无论是公共网络还是私有网络,Boxo 都能提供支持。

    值得注意的是,Boxo 并不是一个全面的 IPFS 解决方案,而是一个高质量的组件库,旨在为开发者提供一个良好的起点。

    🛠️ 如何开始使用 Boxo

    对于新手来说,Boxo 的使用非常简单。开发者可以通过阅读示例代码快速上手。如果你是在迁移到 Boxo,Boxo 还提供了迁移工具,能够自动化处理大部分工作,只需几个简单的命令即可完成:

    cd /path/to/your/module
    go run github.com/ipfs/boxo/cmd/boxo-migrate@latest update-imports
    go run github.com/ipfs/boxo/cmd/boxo-migrate@latest check-dependencies

    这些命令将帮助你将模块升级至 Boxo 的最新版本,并检查未维护的依赖项,以便于后续的维护和更新。

    🏗️ 开发与贡献

    Boxo 鼓励开发者为其贡献代码,但必须满足一定的质量标准。所有被接受的代码必须经过充分测试,且具备良好的文档支持。这意味着,开发者需要提供至少单元测试,并为复杂的组件编写详细的说明文档。

    对于那些希望将自己的 IPFS 组件加入 Boxo 的开发者,建议先在个人仓库中开发,待社区需求明确后再提出合并请求。

    📊 项目依赖与生态

    Boxo 不仅仅是一个工具库,它还为多个重要项目提供支持,包括 Kubo 和 Lotus 等。这些项目在 IPFS 生态系统中扮演着重要角色,Boxo 的出现使得这些项目能够更高效地开发和迭代。

    具体来说,Boxo 支持以下一些知名项目:

    • Kubo:最受欢迎的 IPFS 实现。
    • Lotus:Filecoin 的实现。
    • rainbow:一个专用的 IPFS 网关。

    通过为这些项目提供底层组件,Boxo 使得开发者能够专注于构建更高层次的功能,而不必重蹈造轮子的覆辙。

    📝 结语

    随着去中心化网络的不断发展,Boxo 的出现为 IPFS 应用的开发提供了新的可能性。它以其简洁、易用的设计理念,帮助开发者更轻松地构建和维护与 IPFS 相关的应用。无论你是资深开发者还是刚刚入门的新人,Boxo 都将是你在 IPFS 世界中探险的得力助手。

    📚 参考文献

    1. IPFS 官方网站: ipfs.tech
    2. Boxo GitHub 仓库: github.com/ipfs/boxo
    3. Kubo 项目: github.com/ipfs/kubo
    4. Lotus 项目: github.com/filecoin-project/lotus
    5. Boxo 迁移指南: docs

    希望这篇文章能够激发你对 Boxo 的兴趣,助你在去中心化网络的浩瀚海洋中乘风破浪!

  • IPFS 的新宠:Helia,让 JavaScript 开发者拥抱去中心化

    IPFS(星际文件系统)作为一种去中心化的文件存储和分发协议,正逐渐成为 Web3 世界的基石。而 Helia 作为 IPFS 在 JavaScript 和浏览器端的现代化实现,为开发者提供了更便捷、高效的工具,让他们能够轻松地将 IPFS 集成到自己的应用中。

    Helia 的优势

    Helia 拥有以下几个关键优势:

    • 模块化: Helia 采用模块化设计,开发者可以根据自己的需求选择不同的模块组合,例如选择使用 HTTP 网关或 libp2p 进行网络连接。
    • 现代化: Helia 基于 TypeScript 开发,提供类型安全和代码提示等现代化开发体验。
    • 易用性: Helia 提供了一系列易于使用的 API,让开发者能够快速上手,将 IPFS 集成到自己的应用中。

    Helia 的应用场景

    Helia 可以应用于多种场景,例如:

    • 去中心化存储: 使用 Helia 存储网站、应用程序、数据等,避免依赖中心化的服务器。
    • 内容分发: 使用 Helia 分发内容,提高内容的可用性和安全性。
    • 去中心化应用开发: 使用 Helia 开发去中心化的应用,例如去中心化的社交网络、去中心化的存储服务等。

    Helia 的使用示例

    以下是一些使用 Helia 的示例:

    • 存储字符串:
    import { createHelia } from 'helia';
    import { strings } from '@helia/strings';
    
    const helia = await createHelia();
    const s = strings(helia);
    
    const myImmutableAddress = await s.add('hello world');
    
    console.log(await s.get(myImmutableAddress));
    // hello world
    • 存储 JSON 对象:
    import { createHelia } from 'helia';
    import { json } from '@helia/json';
    
    const helia = await createHelia();
    const j = json(helia);
    
    const myImmutableAddress = await j.add({ hello: 'world' });
    
    console.log(await j.get(myImmutableAddress));
    // { hello: 'world' }
    • 存储 DAG-JSON 对象:
    import { createHelia } from 'helia';
    import { dagJson } from '@helia/dag-json';
    
    const helia = await createHelia();
    const d = dagJson(helia);
    
    const object1 = { hello: 'world' };
    const myImmutableAddress1 = await d.add(object1);
    
    const object2 = { link: myImmutableAddress1 };
    const myImmutableAddress2 = await d.add(object2);
    
    const retrievedObject = await d.get(myImmutableAddress2);
    console.log(retrievedObject);
    // { link: CID(baguqeerasor...) }
    
    console.log(await d.get(retrievedObject.link));
    // { hello: 'world' }

    Helia 的未来

    Helia 正在不断发展,未来将会有更多功能和改进,例如:

    • 更强大的 API: 提供更丰富的 API,支持更多功能,例如文件系统操作、数据加密等。
    • 更好的性能: 优化性能,提高数据存储和检索速度。
    • 更广泛的应用: 支持更多应用场景,例如 Web3 应用、物联网应用等。

    总结

    Helia 是 IPFS 在 JavaScript 和浏览器端的现代化实现,为开发者提供了更便捷、高效的工具,让他们能够轻松地将 IPFS 集成到自己的应用中。随着 IPFS 的不断发展,Helia 将会扮演越来越重要的角色,推动 Web3 世界的构建。

    参考文献

  • 逃离中心化:星际文件系统 IPFS 的崛起

    互联网正变得越来越中心化。从域名解析到内容托管,再到路由和证书颁发,越来越多的服务都集中在少数几家大型公司手中。这种中心化趋势带来了单点故障风险,一旦这些公司出现问题,整个互联网都可能陷入瘫痪。2013 年亚马逊电商平台的宕机事件就是一个典型的例子,每分钟的损失超过 66000 美元。

    为了解决这个问题,近年来兴起了一场“网络去中心化”技术运动,旨在赋予用户更多控制权。IPFS (星际文件系统) 就是这场运动中的重要一员。IPFS 是一个完全去中心化的、内容寻址的媒体对象存储和检索平台。 它将内容的名称与其存储位置分离,并依赖去中心化的对等网络来索引和存储数据,从而避免了单一实体对网络的控制。

    IPFS 的核心概念

    IPFS 的设计基于四个主要概念:

    • 内容寻址: IPFS 使用基于哈希的内容标识符 (CID) 来标识数据,而不是使用传统的基于位置的地址。这意味着数据可以由任何对等点提供,而无需依赖特定的服务器。
    • 去中心化对象索引: IPFS 使用去中心化的 P2P 覆盖网络来索引对象的可用位置,即使一些节点失效,也不会影响数据的访问。
    • 不可变性及自认证: IPFS 使用加密哈希来自认证对象,确保数据的完整性和真实性,无需依赖证书颁发机构。
    • 开放参与: 任何人都可以部署 IPFS 节点并参与网络,无需特殊权限。

    IPFS 如何工作?

    IPFS 通过以下步骤发布和检索内容:

    1. 内容发布: 当用户将数据导入 IPFS 时,数据会被分割成块,每个块都会被分配一个唯一的 CID。然后,IPFS 会构建一个 Merkle DAG (默克尔有向无环图) 来存储这些块,并生成一个根 CID,代表整个数据的标识符。
    2. 提供者记录: 为了让其他用户找到数据,发布者需要生成一个提供者记录,将 CID 映射到自己的 PeerID (对等点标识符) 和 Multiaddress (网络地址)。
    3. DHT 索引: 提供者记录会被发布到一个去中心化的哈希表 (DHT) 上,DHT 会将 CID 和 PeerID 存储起来,并帮助用户找到数据。
    4. 内容检索: 当用户想要检索数据时,他们会向 DHT 发送请求。DHT 会根据 CID 找到最近的提供者记录,并返回提供者的 PeerID 和 Multiaddress。
    5. 对等点连接: 用户会连接到提供者,并使用 Bitswap 协议从提供者获取数据。

    IPFS 的优势

    IPFS 带来了许多优势,包括:

    • 名称持久性: 数据的标识符是不可变的,即使数据被复制或移动,其标识符也不会改变。
    • 文件完整性: IPFS 使用加密哈希来验证数据的完整性,确保数据没有被篡改。
    • 数据去重: IPFS 会自动识别和删除重复数据,节省存储空间和带宽。
    • 抗审查性: 由于数据分布在多个节点上,任何人都无法轻易删除或修改数据。
    • 网络分区容错性: 即使网络出现故障,IPFS 仍然可以正常工作。

    IPFS 的挑战

    IPFS 也面临着一些挑战,包括:

    • 激励机制: 目前 IPFS 缺乏有效的激励机制,导致用户参与度不高。
    • 访问控制: IPFS 默认不提供访问控制机制,需要用户自行实现。
    • 内容可用性: 由于 IPFS 是一个尽力而为的网络,无法保证所有数据都始终可用。

    IPFS 的未来

    尽管面临着挑战,IPFS 仍然拥有巨大的潜力。它有可能改变我们存储和访问数据的方式,并为互联网带来更去中心化、更安全、更可靠的未来。

    参考文献


    https://ipfs.io/ipfs/QmePKXH5VsUmRrWr5iQgz1gvf5AujoRpd9yxFtcx7CgeZ2?filename=IPFS%E5%8E%9F%E7%90%86%E8%AF%A6%E8%A7%A3.pdf


    https://ipfs.io/ipfs/QmSX6abumAo8BGGawLx2nRrKy4885oFiKEnpKec1oLKjxK?filename=IPFS%E4%B8%AD%E7%9A%84%E5%88%86%E5%B8%83%E5%BC%8F%E5%93%88%E5%B8%8C%E8%A1%A8DHT.pdf


人生梦想 - 关注前沿的计算机技术 acejoy.com