Arseeding 原理
架构
技术实现
Arseeding 是一种 Arweave 轻节点,需要与 Arweave 全节点进行数据交互,Arseeding 具备全网广播和获取数据的能力。
Arseeding 节点会维护一份 Arweave 全网节点的 ip 地址名单,用于和 Arweave 网络中的全节点进行通讯。该名单使用 Arweave node 提供的 /peers
接口并对 peers
进行过滤筛选出高可用的节点名单。
交易广播
Arseeding 完全兼容 Arweave 节点,提供基础的交易广播功能。当开发者将 Arweave 交易和对应的数据提交到 Arseeding 后,交易将通过节点名单向全网 Arweave 节点进行广播。
Arseeding 使用了 goar
(golang 的 Arweave SDK)提供的 uploader
进行交易和数据广播给节点名单上的每一个 Arweave 节点。
数据做种
Arseeding 提供数据做种功能,开发者可以提交一个有效的 Arweave 交易 ID,Arseeding 如果存在该笔交易数据,会发起一个定时任务向全网 Arweave 节点广播这笔交易的数据。Arseeding 如果没有存储该笔交易数据,会先像全网发起数据拉取任务,获得数据后再向全网进行广播。
数据同步
Arseeding 接收到用户提交的 arId 之后,首先从 arweave.net 网关获取交易 data,如果获取失败,则从全网节点获取交易 data, 直到获取成功为止。 Arseeding 会缓存同步到的数据,缓存数据可以为开发者提供一个该数据高速访问的数据源。
上传 chunk
Arseeding 完全兼容 Arweave HTTP API 接口,Arseeding 对 chunk 的处理完全符合 Arweave 节点原生的 chunk 模式。
chunk 上传结构如下:
{
DataRoot string `json:"data_root"` // tx data root
DataSize string `json:"data_size"` // tx data size
DataPath string `json:"data_path"` // chunk data path; ignore
Offset string `json:"offset"` // chunk offset on tx data
Chunk string `json:"chunk"` // chunk data content
}
Arseeding 接收到每个上传的 Chunk 之后,会重新计算 chunk offset 并记录到 db。
流程图如下:
ANS-104 实现
Arseeding 支持 ANS-104 数据 bundle 到 Arweave, 使用者只需要把 data 上传到 Arseeding 节点, Arseeding 收集到 bundle items 之后组装 bundle 并发送到 Arweave.
Arseeding 支持 ANS-104 数据解析。如果同步的交易是 ANS-104 Bundle 交易,Arseeding 将自动解析数据,为开发者提供 ANS-104 数据下载服务。