mcpField
I
ipfs

ipfs

github.com/alphaonedev云与 DevOps45 次安装
代码仓库

关于 ipfs

ipfs 是围绕 IPFS 构建的技能,面向需要在去中心化网络中存储和共享文件的开发者。它涵盖内容寻址、节点连接、固定存储及常用命令。

主要功能

  1. 01按内容哈希寻址文件
  2. 02通过 DHT 发现节点
  3. 03使用 IPLD 组织数据
  4. 04固定文件以防回收
  5. 05通过 CLI 和 HTTP API 操作

适用场景

  1. 01归档区块链数据
  2. 02在点对点网络中共享文件
  3. 03存储 NFT 元数据
  4. 04从 CID 获取并验证文件

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/alphaonedev/openclaw-graph --skill ipfs

安装后在 Claude Code 中输入/ipfs确认已加载。

详细介绍

ipfs

用途

IPFS(星际文件系统)是一种用于在去中心化网络中存储和共享文件的点对点协议,无需中央服务器即可确保数据持久性。

适用场景

构建需要分布式存储来增强韧性的应用时,可使用 IPFS,例如区块链数据归档、点对点文件共享,或在不可靠网络中分发内容。对于涉及大文件或抗审查数据的场景也可使用,例如存储 NFT 元数据或构建去中心化应用。

主要功能

  • 去中心化存储:文件通过内容哈希寻址(例如 CID,如 Qm...abc),可通过任意节点进行全局访问。
  • 节点发现:使用 DHT 自动连接节点;可通过 ipfs config Addresses.Swarm --json '["/ip4/0.0.0.0/tcp/4001"]' 进行配置。
  • 版本管理:支持 IPLD,用于链接数据结构;使用 ipfs dag put 添加 DAG 节点。
  • 加密:可借助外部工具加密文件;添加文件前,可集成 libsodium 进行对称加密。
  • 固定:使用 ipfs pin add <CID> 手动将文件固定在本地存储中,避免被垃圾回收。

使用模式

添加文件时,在 CLI 中运行 ipfs add path/to/file.txt,然后通过 CID 引用该文件。在代码中,可使用 Go IPFS 库:导入 "github.com/ipfs/go-ipfs-api",并调用 sh := shell.NewShell("localhost:5001"); cid, err := sh.Add(strings.NewReader("data"))。在脚本中,使用 try-catch 封装命令以处理错误,例如先运行 ipfs daemon 检查守护进程是否正在运行。调用 API 时,可使用 HTTP 端点,例如通过 multipart 表单数据调用 POST /api/v0/add。

常用命令/API

  • 添加文件:ipfs add -r /path/to/dir(目录的递归标志);API:使用包含文件的请求体调用 POST /api/v0/add。
  • 获取文件:使用 ipfs cat <CID> 将内容输出到 stdout;API:GET /api/v0/cat?arg=。
  • 列出固定项:ipfs pin ls --type=recursive;使用 --enc=json 获取 JSON 输出。
  • 配置设置:使用 ipfs config --json Datastore.StorageMax "10GB" 设置存储上限;配置文件为 ~/.ipfs/config 中的 JSON 文件。
  • 启动守护进程:使用 ipfs daemon --enable-pubsub 启用 pubsub 功能;如果需要 API 密钥(例如用于企业网关),请设置环境变量,例如 export IPFS_API_KEY=$SERVICE_API_KEY,并将其加入请求头。 使用 curl 添加文件的代码片段:
    curl -X POST -F [email protected] http://localhost:5001/api/v0/add Go 代码片段:
    cid, err := sh.AddFile("/path/to/file.txt")

集成说明

可通过在本地运行守护进程或使用公共网关(例如 https://ipfs.io/ipfs/)将 IPFS 与其他工具集成。对于区块链,可将 IPFS 与 Ethereum 结合以存储合约元数据;使用 web3.js 获取 CID。在代码中设置 API 端点:shell.NewShell("http://$IPFS_GATEWAY:5001"),其中 $IPFS_GATEWAY 是环境变量。若使用私有 API 进行身份验证,请添加类似 Authorization: Bearer $IPFS_API_KEY 的请求头。对于多网络配置,可在配置文件中指定 swarm 地址,例如添加 ipfs bootstrap add /ip4/1.2.3.4/tcp/4001/ipfs/Qm... 来指定自定义节点。

错误处理

先运行 ipfs id 检查常见错误,例如“守护进程未运行”;如果失败,请启动 ipfs daemon。遇到网络问题时,可使用 ipfs swarm connect /ip4/host/tcp/port 手动连接节点。解析 API 错误时,请注意响应包含带有 "Message" 字段的 JSON,例如 {"Message": "file not found"}。在代码中,在调用 sh.Add() 后进行如下错误处理:
if err != nil { log.Fatal(err) }。对于权限错误,请确保已设置有效的 $IPFS_API_KEY;对于暂时性故障,请使用指数退避重试。执行操作前,使用 ipfs validate <CID> 验证 CID。

具体使用示例

  1. 上传文件以存储在区块链上:首先,确保 IPFS 守护进程正在运行。添加文件:ipfs add contract.json 会输出一个 CID,例如 Qmabcd。将此 CID 存储在智能合约中。在 Node.js 中:
    const ipfsApi = require('ipfs-api'); const ipfs = ipfsApi('localhost', '5001', {protocol: 'http'}); ipfs.add(Buffer.from('contract data')).then(response => console.log(response[0].hash));
  2. 检索并验证文件:通过 CID 获取文件:ipfs get Qmabcd -o output.txt。在脚本中验证完整性:运行 ipfs cat Qmabcd | sha256sum,并与原始哈希值匹配。对于分布式应用,可在循环中使用:获取多个 CID,并通过 try-catch 处理缺失的文件。

图关系

  • 相关项:区块链(集群),因为 IPFS 为区块链数据提供去中心化存储。
  • 通过标签关联:p2p(链接到其他 P2P 协议)、decentralized-storage(与分布式数据库相关)、distributed-filesystem(与文件共享技能重叠)。

评论

支持 Markdown