标签: IPFS

  • 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</code></pre> <!-- /wp:code -->  <!-- wp:paragraph --> 其中USER_AGENT是当前Node.js版本或浏览器的用户代理字符串。

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

  • 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,您可以轻松地在分布式网络中存储和检索数据,享受现代化的开发体验。快来体验吧!

  • 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