Document not found (404)
-This URL is invalid, sorry. Please use the navigation bar or search to continue.
- -diff --git a/pr-preview/pr-70/404.html b/pr-preview/pr-70/404.html deleted file mode 100644 index ace28a68..00000000 --- a/pr-preview/pr-70/404.html +++ /dev/null @@ -1,218 +0,0 @@ - - -
- - -This URL is invalid, sorry. Please use the navigation bar or search to continue.
- -We will use this section of the Walrus documentation to publish news and updates about Walrus' -development!
- -Walrus is an innovative decentralized storage network for blockchain apps and autonomous agents. The -Walrus storage system is released today as a developer preview to Sui developers to gather -feedback. We expect a general rollout to other web3 communities very soon!
-Leveraging innovations in erasure coding, Walrus enables fast and robust encoding of unstructured -data blobs into smaller slivers distributed and stored over a network of storage nodes. A subset of -slivers can be used to rapidly reconstruct the original blob reliably, even when up to two thirds of -the slivers are missing. This is possible while keeping the replication factor down to a minimal -4x-5x, similar to existing cloud-based services, but with the additional benefits of -decentralization and resilience to more widespread faults.
-Sui is the most advanced blockchain system in relation to storage on validators, with innovations -such as a storage fund that future proofs -the cost of storing on-chain data. Nevertheless, Sui still requires complete data replication among -all validators, resulting in a replication factor of 100x or more in today's Sui mainnet. This is -necessary for replicated computing and smart contracts acting on the state of the blockchain, but is -inefficient when it comes to simply storing unstructured data blobs, such as music, video, -blockchain history, etc.
-To tackle the challenge of high replication costs, Mysten Labs has developed Walrus, a decentralized -storage network offering exceptional data availability and robustness with a minimal replication -factor of 4x-5x. Walrus provides two key benefits:
-Cost-Effective Blob Storage: Walrus allows for the upload of gigabytes of data at a time with -minimal cost, making it an ideal solution for storing large volumes of data.\ Walrus can do this -because the data blob is transmitted only once over the network, and storage nodes only spend a -fraction of resources compared to the blob size. As a result, the more storage nodes the system -has, the fewer resources each storage node uses per blob.
-High Availability and Robustness: Data stored on Walrus enjoys enhanced reliability and -availability under fault conditions. Data recovery is still possible even if two-thirds of the -storage nodes crash or come under adversarial control. Further, availability may be certified -efficiently without downloading the full blob.
-Decentralized storage can take multiple forms in modern ecosystems. For instance, it offers better -guarantees for digital assets traded as NFTs. Unlike current designs that store data off-chain, -decentralized storage ensures users own the actual resource, not just metadata, mitigating risks of -data being taken down or misrepresented.
-Additionally, decentralized storage is not only useful for storing data such as pictures or files -with high availability; it can also double as a low-cost data availability layer for rollups. Here, -sequencers can upload transactions on Walrus, and the rollup executor only needs to temporarily -reconstruct them for execution.
-We also believe Walrus will accompany existing disaster recovery strategies for millions of -enterprise companies. Not only is Walrus low-cost, but it also provides unmatched layers of data -availability, integrity, transparency, and resilience that centralized solutions by design cannot -offer.
-Walrus is powered by the Sui Network and scales horizontally to hundreds of networked decentralized -storage nodes. This should enable Walrus to offer Exabytes of storage at costs competitive with -current centralized offerings, given the higher assurance and decentralization.
-By releasing this developer preview we hope to share some of the design decisions with the -decentralized app developer community, and gather feedback on the approach and the APIs for storing, -retrieving, and certifying blobs. In this developer preview, all storage nodes are operated by -Mysten Labs to help us understand use-cases, fix bugs, and improve the performance of the software.
-Future updates to Walrus will allow for dynamically changing the set of decentralized storage nodes, -as well as changing the mapping of what slivers are managed by each storage node. The available -operations and tools will also be expanded to cover more storage related use-cases. Many of these -functions will be designed with the feedback we gather in mind.
-Stay tuned for more updates on how Walrus will revolutionize data storage in the web3 ecosystem.
-As part of this developer preview we provide a binary client (currently macos, ubuntu) that can be -operated from the command line interface, a JSON -API, and an HTTP -API. We also offer the community an aggregator and -publisher service, and a Devnet deployment of 10 storage nodes operated by Mysten Labs.
-We hope Sui developers experiment with building applications that leverage the Walrus Decentralized -Store in a variety of ways. As examples we hope to see the community build:
-Storage of media for NFT or dapps: Walrus can directly store and serve media such as images, -sounds, sprites, videos, other game assets, etc. This is publicly available media that can be -accessed using HTTP requests at caches to create multimedia dapps.
-AI related use cases: Walrus can store clean data sets of training data, datasets with a known -and verified provenance, models weights, and proofs of correct training for AI models. Or it may -be used to store and ensure the availability and authenticity of an AI model output.
-Storage of long term archival of blockchain history: Walrus can be used as a lower cost -decentralized store to store blockchain history. For Sui this can include sequences of checkpoints -with all associated transaction and effects content. As well as historic snapshots of the -blockchain state, code or binaries.
-Support availability for L2s: Walrus allows parties to certify the availability of blobs, as -required by L2s that need data to be stored and be attested as available to all. This may also -include availability of extra audit data such as validity proofs, zero knowledge proofs of correct -execution or large fraud proofs.
-Support a full decentralized web experience: Walrus can host full decentralized web -experiences including all resources (such as js, css, html, media). These can provide content but -also host the UX of dapps, enabling fully decentralized front end and back ends on chain. It -brings the full "web" back in "web3".
-Support subscription models for media: Creators can store encrypted media on Walrus and only -provide access via decryption keys to parties that have paid a subscription fee or have paid for -contents. (Note that Walrus provides the storage, encryption and decryption must be done off -Walrus).
-We are excited to see what else the web3 developer community can imagine!
-For this developer preview the public Walrus Devnet is openly available to all developers. Developer -documentation is available at https://docs.walrus.site.
-SUI Testnet token is the main currency for interacting with Walrus. Developers pay for Walrus -Devnet storage using SUI Testnet tokens which can be acquired at the Sui Testnet Discord -faucet.
-The Walrus Sites website, the Walrus docs, and -this very blog are hosted on Walrus. To learn more about Walrus Sites -and how you can deploy your own, click -here.
- -From a developer perspective, some Walrus components are objects and smart contracts on -Sui, and some components are Walrus-specific binaries and services. As a rule Sui is used to -manage blob and storage node metadata, while Walrus-specific services are used to store and -read blob contents, which can be very large.
-Walrus defines a number of objects and smart contracts on Sui:
-The Walrus system object ID can be found in the Walrus client_config.yaml
file (see
-Configuration). You may use any Sui explorer to look at its
-content, as well as explore the content of blob objects. There is more information about these in
-the quick reference to the Walrus Sui structures.
Walrus is also composed of a number of Walrus-specific services and binaries:
-Aggregators, publishers and other services use the client APIs to interact with Walrus. End-users -of services using Walrus interact with the store via custom services, aggregators or publishers that -expose HTTP APIs to avoid the need to run locally a binary client.
- -This guide introduces all the concepts needed to build applications that use Walrus as a storage -or availability layer. The overview provides more background and explains -in more detail how Walrus operates internally.
-This developer guide describes:
-A glossary of terms used is also available for reference.
-This release of Walrus & Walrus Sites is a -developer preview, to showcase the technology and solicit feedback from builders. All storage nodes -and aggregators are operated by Mysten Labs, all transactions are executed on the Sui testnet, -and use testnet SUI which has no value. The state of the store can be, and will be wiped, at any -point and possibly with no warning. Do not rely on this developer preview for any production -purposes, it comes with no availability or persistence guarantees.
-Also see the Devnet terms of service under which this developer preview is made -available.
- -Walrus stores blobs across storage nodes in an encoded form, and refers -to blobs by their blob ID. The blob ID is deterministically derived from the content of a blob -and the Walrus configuration. The blob ID of two files with the same content will be the same.
-You can derive the blob ID of a file locally using the command: walrus blob-id <file path>
Walrus may be used to store a blob, via the native client APIs or a publisher.
---All blobs -stored in Walrus are public and discoverable by all. Therefore you must not use Walrus to store -anything that contains secrets or private data without additional measures to protect -confidentiality.
-
Under the hood a number of operations happen both on Sui as well as on storage nodes:
-u256
often encoded as a URL safe base64 string.A blob is considered available on Walrus once the corresponding Sui blob object has been -certified in the final step. The steps involved in a store operation can be executed by the binary -client, or a publisher that accepts and publishes blobs via HTTP.
-Walrus currently allows the storage of blobs up to a maximum size that may be determined
-through the walrus info
CLI command. The
-maximum blob size is currently 957 MiB. You may store larger blobs by splitting them into
-smaller chunks.
Blobs are stored for a certain number of epochs, as specified at the time they were stored. Walrus -storage nodes ensure that within these epochs a read succeeds. The Walrus devnet only uses a single -epoch today, and blobs uploaded will be available in that single epoch (until the devnet is wiped). -Future devnets may span across multiple epochs.
-Walrus can also be used to read a blob after it is stored by providing its blob ID. -A read is executed by performing the following steps:
-The steps involved in the read operation are performed by the binary client, or the aggregator -service that exposes an HTTP interface to read blobs. Reads are extremely resilient and will -succeed in recovering the blob stored even if up to one-third of storage nodes are -unavailable in all cases. Eventually, after synchronization is complete, even if two-thirds -of storage nodes are down reads will succeed.
-Walrus can be used to certify the availability of a blob using Sui. Checking that this happened -may currently be done in 3 different ways:
-walrus blob-status
command may be used to identify the event ID that needs to be checked.The underlying protocol of the -Sui light client -returns digitally signed evidence for emitted events -or objects, and can be used by off-line or non-interactive applications as a proof of availability -for the blob ID for a certain number of epochs.
-Once a blob is certified, Walrus will ensure that sufficient slivers will always be -available on storage nodes to recover it within the specified epochs.
- -This section is optional and enables advanced use cases.
-You can interact with Walrus purely -through the client CLI, and JSON or HTTP APIs provided, without querying or executing transactions -on Sui directly. However, Walrus uses Sui to manage its metadata and smart contract developers can -read information about the Walrus system, as well as stored blobs, on Sui.
-This section provides an overview of how you may use Walrus objects in your Sui smart contracts.
-Walrus blobs are represented as Sui objects of type Blob
. A blob is first registered, indicating
-that the storage nodes should expect slivers from a Blob ID to be stored. Then a blob is certified
-indicating that a sufficient number of slivers have been stored to guarantee the blob's
-availability. When a blob is certified its certified_epoch
field contains the epoch in which it
-was certified.
A Storage
object is always associated with a Blob
object, reserving enough space for
-a long enough period for the blob's storage. A certified blob is available for the period the
-underlying storage resource guarantees storage.
Concretely, Blob
and Storage
objects have the following fields, that can be read through the
-Sui SDKs:
/// The blob structure represents a blob that has been registered to with some
-/// storage, and then may eventually be certified as being available in the
-/// system.
-public struct Blob has key, store {
- id: UID,
- stored_epoch: u64,
- blob_id: u256,
- size: u64,
- erasure_code_type: u8,
- certified_epoch: option::Option<u64>, // The epoch first certified,
- // or None if not certified.
- storage: Storage,
-}
-
-/// Reservation for storage for a given period, which is inclusive start,
-/// exclusive end.
-public struct Storage has key, store {
- id: UID,
- start_epoch: u64,
- end_epoch: u64,
- storage_size: u64,
-}
-
-All fields of Blob
and Storage
objects can be read using the expected functions:
// Blob functions
-public fun stored_epoch(b: &Blob) : u64;
-public fun blob_id(b: &Blob) : u256;
-public fun size(b: &Blob) : u64;
-public fun erasure_code_type(b: &Blob) : u8;
-public fun certified_epoch(b: &Blob) : &Option<u64>;
-public fun storage(b: &Blob) : &Storage;
-
-// Storage functions
-public fun start_epoch(self: &Storage) : u64;
-public fun end_epoch(self: &Storage) : u64;
-public fun storage_size(self: &Storage) : u64;
-
-When a blob is first registered a BlobRegistered
event is emitted that informs storage nodes
-that they should expect slivers associated with its Blob ID. Eventually when the blob is
-certified a BlobCertified
is emitted containing information about the blob ID and the epoch
-after which the blob will be deleted. Before that epoch the blob is guaranteed to be available.
/// Signals a blob with metadata is registered.
-public struct BlobRegistered has copy, drop {
- epoch: u64,
- blob_id: u256,
- size: u64,
- erasure_code_type: u8,
- end_epoch: u64,
-}
-
-/// Signals a blob is certified.
-public struct BlobCertified has copy, drop {
- epoch: u64,
- blob_id: u256,
- end_epoch: u64,
-}
-
-The InvalidBlobID
event is emitted when storage nodes detect an incorrectly encoded blob.
-Anyone attempting a read on such a blob is guaranteed to also detect it as invalid.
/// Signals that a BlobID is invalid.
-public struct InvalidBlobID has copy, drop {
- epoch: u64, // The epoch in which the blob ID is first registered as invalid
- blob_id: u256,
-}
-
-The Walrus system object contains metadata about the available and used storage, as well as the -price of storage per Kib of storage in MIST. The committee -structure within the system object can be used to read the current epoch number, as well as -information about the committee.
-const BYTES_PER_UNIT_SIZE : u64 = 1_024;
-
-public struct System<phantom WAL> has key, store {
-
- id: UID,
-
- /// The current committee, with the current epoch.
- /// The option is always Some, but need it for swap.
- current_committee: Option<Committee>,
-
- /// When we first enter the current epoch we SYNC,
- /// and then we are DONE after a cert from a quorum.
- epoch_status: u8,
-
- // Some accounting
- total_capacity_size : u64,
- used_capacity_size : u64,
-
- /// The price per unit size of storage.
- price_per_unit_size: u64,
-
- /// Tables about the future and the past.
- past_committees: Table<u64, Committee>,
- future_accounting: FutureAccountingRingBuffer<WAL>,
-}
-
-public struct Committee has store {
- epoch: u64,
- bls_committee : BlsCommittee,
-}
-
-A few public functions of the committee allow contracts to read Walrus metadata:
-/// Get epoch. Uses the committee to get the epoch.
-public fun epoch<WAL>(self: &System<WAL>) : u64;
-
-/// Accessor for total capacity size.
-public fun total_capacity_size<WAL>(self: &System<WAL>) : u64;
-
-/// Accessor for used capacity size.
-public fun used_capacity_size<WAL>(self: &System<WAL>) : u64;
-
-// The number of shards
-public fun n_shards<WAL>(self: &System<WAL>) : u16;
-
-
- To make communication as clear and efficient as possible, we make sure to use a single term for -every Walrus entity/concept and do not use any synonyms. The following table lists various -concepts, their canonical name, and how they relate to or differ from other terms.
-Italicized terms in the description indicate other specific Walrus terms contained in the table.
-Approved name | Description |
---|---|
storage node (SN) | entity storing data for Walrus; holds one or several shards |
blob | single unstructured data object stored on Walrus |
shard | (disjoint) subset of erasure-encoded data of all blobs; at every point in time, a shard is assigned to and stored on a single SN |
sliver | erasure-encoded data of one shard corresponding to a single blob for one of the two encodings; this contains several erasure-encoded symbols of that blob but not the blob metadata |
blob ID | cryptographic ID computed from a blob’s slivers |
blob metadata | metadata of one blob; in particular, this contains a hash per shard to enable the authentication of slivers and recovery symbols |
(end) user | any entity/person that wants to store or read blobs on/from Walrus; can act as a Walrus client itself or use the simple interface exposed by publishers and caches |
publisher | service interacting with Sui and the SNs to store blobs on Walrus; offers a simple HTTP POST endpoint to end users |
aggregator | service that reconstructs blobs by interacting with SNs and exposes a simple HTTP GET endpoint to end users |
cache | an aggregator with additional caching capabilities |
(Walrus) client | entity interacting directly with the SNs; this can be an aggregator/cache, a publisher, or an end user |
(blob) reconstruction | decoding of the primary slivers to obtain the blob; includes re-encoding the blob and checking the Merkle proofs |
(shard/sliver) recovery | process of an SN recovering a sliver or full shard by obtaining recovery symbols from other SNs |
storage attestation | process where SNs exchange challenges and responses to demonstrate that they are storing their currently assigned shards |
certificate of availability (CoA) | a blob ID with signatures of SNs holding at least $2f+1$ shards in a specific epoch |
point of availability (PoA) | point in time when a CoA is submitted to Sui and the corresponding blob is guaranteed to be available until its expiration |
inconsistency proof | set of several recovery symbols with their Merkle proofs such that the decoded sliver does not match the corresponding hash; this proves an incorrect/inconsistent encoding by the client |
inconsistency certificate | an aggregated signature from 2/3 of SNs (weighted by their number of shards) that they have seen and stored an inconsistency proof for a blob ID |
storage committee | the set of SNs for a storage epoch, including metadata about the shards they are responsible for and other metadata |
member | an SN that is part of a committee at some epoch |
storage epoch | the epoch for Walrus as distinct to the epoch for Sui |
availability period | the period specified in storage epochs for which a blob is certified to be available on Walrus |
expiry | the end epoch at which a blob is no longer available and can be deleted |
Welcome to the developer documentation for Walrus, a decentralized storage and data availability -protocol designed specifically for large binary files, or "blobs". Walrus focuses on providing a -robust, but affordable solution for storing unstructured content on decentralized storage nodes -while ensuring high availability and reliability even in the presence of Byzantine faults.
-Fun fact: If you are viewing this site at https://docs.walrus.site, you are fetching this from -Walrus behind the scenes. See the Walrus Sites chapter for further -details on how this works.
-Storage and retrieval: Walrus supports storage operations to write and read blobs. It also -allows anyone to prove that a blob has been stored and is available for retrieval at a later -time.
-Cost efficiency: By utilizing advanced error correction coding, Walrus maintains storage -costs at approximately five times the size of the stored blobs and encoded parts of each blob -are stored on each storage node. This is significantly more cost-effective compared to -traditional full replication methods and much more robust against failures compared to -protocols that only store each blob on a subset of storage nodes.
-Integration with Sui blockchain: Walrus leverages Sui -for coordination, attesting availability and payments. Storage space can be owned as a resource on -Sui, split, merged, and transferred. Blob storage is represented using storage objects on Sui, and -smart contracts can check whether a blob is available and for how long.
-Flexible access: Users can interact with Walrus through a command-line interface (CLI), -software development kits (SDKs), and web2 HTTP technologies. Walrus is designed to work well -with traditional caches and content distribution networks (CDNs), while ensuring all operations -can also be run using local tools to maximize decentralization.
-Walrus's architecture ensures that content remains accessible and retrievable even when many -storage nodes are unavailable or malicious. Under the hood it uses modern error correction -techniques based on fast linear fountain codes, augmented to ensure resilience against Byzantine -faults, and a dynamically changing set of storage nodes. The core of Walrus remains simple, and -storage node management and blob certification leverages Sui smart contracts.
-This documentation is split into three parts:
-Finally, we provide a glossary that explains the terminology used throughout the -documentation.
-This documentation is built using mdBook from source files in -github.com/MystenLabs/walrus-docs/. Please report or -fix any errors you find in this documentation in that GitHub project.
- -