One call, dispatched by size
You call write; the engine picks the path. Small payloads become inline tracks that ride the transaction itself. Mid-size payloads become erasure-coded tracks. Large payloads stream in segments with a manifest (tracks covers the model, tape replay covers why small writes are cheap). The size boundaries are client configuration with sensible defaults. They are not protocol limits.One write call, three paths, all ending at a certified track.
The write options
Names and content types are method arguments. Thewrite_named variants and put_object take them directly (objects). A delegate can sign on the owner’s behalf without holding the owner’s wallet. WriteOptions holds the tuning knobs, covered under operational configuration.
The receipt
write_bytes and write_stream return a StreamReceipt. Its fields:
tape: the tape’s address.manifest: the manifest track’s address. This is what you read back.manifest_track_number: the manifest’s track number on the tape.manifest_value_hash: the manifest’s value hash, used as the content ETag.
Certify: finishing the write
An erasure-coded write is finished when certified. Certification is the network’s proof that your data is held: a quorum of the storage nodes that received your slices signs, and the aggregate signature lands on-chain (what certification promises). There is nothing to call. Every one-call write path runs peer discovery, signature collection, aggregation, and the certification transaction internally before it returns.Error recovery mid-write
What an interruption leaves behind, stage by stage:- A failed setup transaction leaves nothing.
- A registered-but-undistributed track holds tape capacity but is uncertified. Retry distribution, or delete it to free the capacity.
- A distributed-but-uncertified track needs only certify retried.
Operational configuration
The engine exposes three kinds of tuning: distribution concurrency, retry and pacing, and progress callbacks. All are client-side defaults, none are protocol limits. Touch them for large batches, constrained networks, or UI progress feedback.The staged pipeline
For pipeline builders who need control between stages, or anyone who wants to see what the one-call write does. The same upload, stage by stage:- Encode. Slice the file and compute its commitments locally. Nothing has touched the network yet (slicing).
- Register. Submit the registration transaction: it commits the track’s Merkle root to the tape, deducts capacity, and assigns the spool group, the set of nodes that will hold its slices (tracks).
- Distribute. Push each slice with its proof to the group’s nodes. Each node verifies against the on-chain commitment before accepting, and returns its signature.
- Certify. Aggregate the collected signatures and submit. The write is finished when this lands.
Managing tapes
The lifecycle operations, each a line here and a full entry on docs.rs. Semantics live on the tapes page.- Price before reserving: cost estimation for a capacity and duration.
- Extend: add capacity or epochs. Permissionless, so anyone can pay to extend any tape.
- Delegate / revoke: grant or remove a write delegate.
- Delete tracks: an on-chain operation that frees capacity.