跳到主要内容

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 数据下载服务。