首页
/ Serval DNA 项目中的 Rhizome REST API 详解

Serval DNA 项目中的 Rhizome REST API 详解

2025-06-02 10:16:14作者:虞亚竹Luna

概述

在 Serval DNA 项目中,Rhizome 是一个创新的分布式内容存储和转发服务。与传统的中心化云存储不同,Rhizome 采用去中心化设计,通过网状网络中的节点间自发同步来实现内容分发。本文将深入解析 Rhizome 的 REST API 接口,帮助开发者理解其核心概念和使用方法。

核心概念

Rhizome 存储机制

Rhizome 采用独特的分布式存储方式:

  1. 本地存储:每个节点都维护自己的 Rhizome 存储(数据库),保存所有接收和插入的内容副本
  2. 无中心服务器:内容分散存储在网状网络的所有设备上
  3. 自动同步:当节点建立直接网络连接时,会自动交换内容列表并选择需要同步的内容

Bundle(数据包)结构

Rhizome 中的内容组织单元称为 Bundle,每个 Bundle 包含:

  1. Manifest(清单):包含元数据和签名
    • 元数据部分:键值对形式的各种字段
    • 签名部分:用于验证 Bundle 完整性的数字签名
  2. Payload(有效载荷):实际内容数据(可选)

Bundle 标识与版本控制

  1. Bundle ID (BID):256位 Curve25519 公钥,作为 Bundle 的唯一标识符
  2. Bundle 版本:64位无符号整数,用于版本控制
    • 高版本号自动覆盖低版本号
  3. Bundle Secret:生成 BID 的 Curve25519 私钥,用于签名验证

安全机制

  1. Rhizome Secret:每个身份独有的加密密钥
  2. Bundle Key (BK):可选字段,用于在不暴露身份的情况下恢复 Bundle Secret
  3. 签名验证:所有 Bundle 都使用其 Bundle Secret 进行签名

Manifest 详解

必需字段

每个有效的 Manifest 必须包含以下核心字段:

字段名 描述 格式
id Bundle ID 64位十六进制大写
version 版本号 ASCII十进制
filesize 有效载荷大小 ASCII十进制
service 创建 Bundle 的服务名 字符串
date 创建时间戳 Unix时间戳(毫秒)

可选字段

字段名 描述
sender 发送者 SID
recipient 接收者 SID
name 人类可读标识/文件名
crypt 是否加密(0/1)
BK Bundle Key
tail 日志类型 Bundle 的起始偏移量

签名格式

Manifest 签名采用特定二进制格式:

  1. 元数据与签名间用 NUL(0)字节分隔
  2. 签名块以类型字节开头
  3. 目前仅支持类型23(0x17)的96字节 Curve25519 签名

特殊 Bundle 类型

Journal(日志)

Journal 是一种特殊的 Bundle 类型,具有以下特性:

  1. 只能追加或截断内容,不能修改现有内容
  2. 通过 tail 字段标识已截断的数据量
  3. 同步时只传输新增部分,节省带宽
  4. 存储时会自动回收被截断部分的空间

REST API 详解

通用特性

内容类型

Rhizome API 使用特殊的内容类型:

  1. rhizome/manifest:用于 Manifest 数据

    • 当前仅支持 text+binarysig 格式
    • Content-Type: rhizome/manifest; format=text+binarysig
  2. rhizome/bid:用于 Bundle ID

    • 当前仅支持 hex 格式
    • Content-Type: rhizome/bid; format=hex
  3. rhizome/bundlesecret:用于 Bundle Secret

    • 当前仅支持 hex 格式
    • Content-Type: rhizome/bundlesecret; format=hex

响应头

所有涉及单个 Bundle 的操作都会返回以下响应头:

Serval-Rhizome-Result-Bundle-Status-Code: <状态码>
Serval-Rhizome-Result-Bundle-Status-Message: <状态信息>
Serval-Rhizome-Result-Payload-Status-Code: <有效载荷状态码>
Serval-Rhizome-Result-Payload-Status-Message: <有效载荷状态信息>

实际应用场景

内容分发

  1. 应用程序只需将文件插入本地 Rhizome 存储
  2. Rhizome 自动负责在网络中分发内容
  3. 接收方节点会自动获取并存储内容副本

版本更新

  1. 创建新版本的 Bundle(相同 BID,更高版本号)
  2. 新版本会自动替换网络中的旧版本
  3. 确保所有节点最终获得最新内容

安全通信

  1. 使用 crypt=1 标记加密内容
  2. 结合 recipient 字段实现端到端加密
  3. 只有目标接收者可以解密内容

总结

Serval DNA 的 Rhizome REST API 提供了一套完整的分布式内容存储和分发解决方案。通过理解 Bundle 结构、Manifest 格式和安全机制,开发者可以构建出能在不稳定网络环境中可靠工作的分布式应用。Rhizome 的去中心化设计使其特别适合应急通信、偏远地区网络等场景。

登录后查看全文
热门项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
176
261
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
860
511
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
182
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
259
300
kernelkernel
deepin linux kernel
C
22
5
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
596
57
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
371
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
332
1.08 K