Helia是一个精简、模块化且现代的IPFS TypeScript实现,适用于广泛的JavaScript和浏览器环境。
更多信息请参阅宣言、常见问题以及2022年10月JavaScript中IPFS状态博客文章。
🌟 使用方法
以下是如何在Helia节点中存取不同类型数据的快速概览。
🪢 字符串
你可以使用@helia/strings模块轻松地在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
@helia/json模块允许你添加或获取普通JavaScript对象:
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
@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
@helia/dag-cbor的工作方式与@helia/dag-json
类似,但使用简洁二进制对象表示存储对象:
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-examples仓库,了解如何使用Helia节点完成大多数任务。
🏃♀️ 入门
查看Helia示例仓库,其中涵盖了广泛的用例。如果你觉得有什么遗漏,请遵循贡献指南,为示例仓库创建一个PR。
📗 项目文档
- 查看项目wiki。
📒 API文档
📐 系统图
graph TD;
User["用户或应用"]-->IPNS["@helia/ipns"];
User-->UnixFS["@helia/unixfs"];
User-->Libp2p;
User-->Datastore;
User-->Blockstore;
UnixFS-->Blockstore;
IPNS-->Datastore;
subgraph helia [Helia]
Datastore
Blockstore-->BlockBrokers;
BlockBrokers-->Bitswap;
BlockBrokers-->TrustlessGateways;
Libp2p-->DHT;
Libp2p-->PubSub;
Libp2p-->IPNI;
Libp2p-->Reframe;
end
Blockstore-->BlockStorage["文件系统/IDB/S3等"];
Datastore-->DataStorage["Level/S3/IDB等"];
Bitswap-->Network;
TrustlessGateways-->Gateway1;
TrustlessGateways-->GatewayN;
DHT-->Network;
PubSub-->Network;
IPNI-->Network;
Reframe-->Network;
🏭 代码结构
Helia采用模块化方法,鼓励用户根据自己的需求引入各种API的实现。
基本的Helia API定义在:
/packages/interface
Helia API
API由以下实现:
/packages/helia
一个使用bitswap、libp2p和HTTP网关作为备选的点对点实现/packages/http
一个仅使用HTTP网关的轻量级实现
Helia还提供了许多补充库和工具,可以与Helia API实现结合使用,以分布式和无信任的方式完成任务。
这些库并非旨在成为任何给定API的"唯一真实实现",而是根据特定应用程序的需求供用户选择使用:
- ./packages/car
@helia/car
模块 - ./packages/dag-cbor
@helia/dag-cbor
模块 - ./packages/dag-json
@helia/dag-json
模块 - ./packages/ipns
@helia/ipns
模块 - ./packages/json
@helia/json
模块 - ./packages/mfs
@helia/mfs
模块 - ./packages/strings
@helia/strings
模块 - ./packages/unixfs
@helia/unixfs
模块
一个互操作性套件确保一切兼容:
/packages/interop
Helia的互操作性测试
其他模块
在此仓库之外还有几个可用的模块:
@helia/verified-fetch
一个类似fetch的API,用于从分布式网络中检索可信任、经过验证的内容@helia/delegated-routing-v1-http-api
委托路由v1 HTTP API的实现,包括服务器和客户端- Helia WNFS 基于Helia构建的WNFS实现
@helia/remote-pinning
用于与IPFS固定服务通信的Helia客户端@helia/http-gateway
使用Helia构建的IPFS HTTP网关API实现
📣 项目状态
Helia v1于2023年3月发布(参见发布记录),开发工作持续进行,我们正在推进路线图中的计划,并不断进行性能改进和错误修复。
🛣️ 路线图
请在此处查看和评论路线图。
👫 参与其中
- 观看我们的Helia演示日演示这里
- 我们定期在Helia演示中分享进展。这是了解最新情况和参与方式的好地方。我们很乐意在那里见到你!
- 选择一个问题解决。
- 加入Filecoin Slack的#ip-js频道进行交流。(是的,我们应该将其连接到其他聊天环境。如果你希望这样做,请在这里发表评论。)
🤲 贡献
欢迎贡献!请查看问题列表。
另请参阅我们的贡献文档,了解更多关于我们如何工作以及如何贡献的信息。
请注意,与此仓库相关的所有互动都受IPFS行为准则约束。
除非你明确声明,否则你提交的任何贡献都将根据上述许可证双重许可,无需任何附加条款或条件。
🛍️ 著名用户
- 查看使用Helia的项目。
🌞 品牌
- 查看品牌。
🪪 许可证
根据以下两种许可之一授权