ant_node/ant_protocol/mod.rs
1//! ANT protocol implementation for the Autonomi network.
2//!
3//! This module implements the wire protocol for storing and retrieving
4//! data on the Autonomi network.
5//!
6//! # Data Types
7//!
8//! The ANT protocol supports a single data type:
9//!
10//! - **Chunk**: Immutable, content-addressed data (hash == address)
11//!
12//! # Protocol Overview
13//!
14//! The protocol uses postcard serialization for compact, fast encoding.
15//! Each data type has its own message types for PUT/GET operations.
16//!
17//! ## Chunk Messages
18//!
19//! - `ChunkPutRequest` / `ChunkPutResponse` - Store chunks
20//! - `ChunkGetRequest` / `ChunkGetResponse` - Retrieve chunks
21//! - `ChunkQuoteRequest` / `ChunkQuoteResponse` - Request storage quotes
22//!
23//! ## Payment Flow
24//!
25//! 1. Client requests a quote via `ChunkQuoteRequest`
26//! 2. Node returns signed `PaymentQuote` in `ChunkQuoteResponse`
27//! 3. Client pays on Arbitrum via `PaymentVault.payForQuotes()`
28//! 4. Client sends `ChunkPutRequest` with `payment_proof`
29//! 5. Node verifies payment and stores chunk
30//!
31//! # Example
32//!
33//! ```rust,ignore
34//! use ant_node::ant_protocol::{ChunkMessage, ChunkPutRequest, ChunkGetRequest};
35//!
36//! // Create a PUT request
37//! let address = compute_address(&data);
38//! let request = ChunkPutRequest::with_payment(address, data, payment_proof);
39//! let message = ChunkMessage::PutRequest(request);
40//! let bytes = message.encode()?;
41//!
42//! // Decode a response
43//! let response = ChunkMessage::decode(&response_bytes)?;
44//! ```
45
46pub mod chunk;
47
48// Re-export chunk types for convenience
49pub use chunk::{
50 ChunkGetRequest, ChunkGetResponse, ChunkMessage, ChunkMessageBody, ChunkPutRequest,
51 ChunkPutResponse, ChunkQuoteRequest, ChunkQuoteResponse, MerkleCandidateQuoteRequest,
52 MerkleCandidateQuoteResponse, ProtocolError, XorName, CHUNK_PROTOCOL_ID, DATA_TYPE_CHUNK,
53 MAX_CHUNK_SIZE, MAX_WIRE_MESSAGE_SIZE, PROOF_TAG_MERKLE, PROOF_TAG_SINGLE_NODE,
54 PROTOCOL_VERSION,
55};