Skip to main content

Arseeding Implementation

Architecture

Technical Implementation

Arseeding is an Arweave light node that needs to interact with Arweave full nodes for data, Arseeding has the ability to broadcast and fetch data across the network.

Arseeding nodes maintain a list of Arweave network-wide node ip addresses for communication with the full nodes in the Arweave network. This list uses the /peers interface provided by the Arweave node and filters the peers to for getting the list of nodes with high availabilities.

Transaction Broadcasting

Arseeding is fully compatible with Arweave nodes and provides basic transaction broadcasting functionality. When a developer submits an Arweave transaction and the corresponding data to Arseeding, the transaction is broadcast to the entire network of Arweave nodes via a list of nodes.

Arseeding uses the uploader provided by goar (golang's Arweave SDK) to broadcast transactions and data to every Arweave node in the node list.

Data Seeding

Arseeding provides a data seeding feature where developers can submit a valid Arweave transaction ID and Arseeding will initiate a timed task to broadcast the transaction data to all Arweave nodes on the network if the transaction data exists. If the transaction data is not stored, Arseeding will first launch a data pulling task to the network and then broadcasts the data to the network.

Data Access

After Arseeding receives the arId submitted by the user, it first fetches the transaction data from the arweave.net gateway, and if the fetching fails, it fetches the transaction data from the whole network of nodes until it succeeds.

Arseeding caches the synchronized data, which provides developers with a data source for high-speed access to that data.

Chunk Uploading

Arseeding is fully compatible with the Arweave HTTP API interface, and Arseeding's handling of chunks is fully compliant with the Arweave node's native chunk model.

The chunk upload structure is as follows:

{
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
}

After Arseeding receives each uploaded chunk, it recalculates the chunk offset and records it to the db.

The flowchart is as follows:

ANS-104 Implementation

Arseeding supports ANS-104 data bundle to Arweave, users only need to upload data to Arseeding node. Arseeding will collect the bundle items and then assembles the bundle and sends it to Arweave.

Arseeding supports ANS-104 data parsing. If the synchronized transaction is an ANS-104 Bundle transaction, Arseeding will automatically parse the data and provide the developer with ANS-104 data download service.