Walrus assurance and security properties
The properties below hold true subject to the assumption that for all storage epochs 2/3 of shards are operated by storage nodes that faithfully and correctly follow the Walrus protocol.
As described before, each blob is encoded into slivers using an erasure code and a blob ID is cryptographically derived. For a given blob ID there is a point of availability (PoA) and an availability period, observable through an event on the Sui chain.
The following properties relate to the PoA:
- After the PoA, for a blob ID, any correct user that performs a read within the availability period
will eventually terminate and get a value which is either the blob contents or
None
. - After the PoA, if two correct users perform a read and get and , respectively, then .
- A correct user with an appropriate storage resource can always perform store for a blob with a blob ID and advance the protocol until the PoA.
- A read after the PoA for a blob stored by a correct user, will result in .
Some assurance properties ensure the correct internal processes of Walrus storage nodes. For the purposes of defining these, an inconsistency proof proves that a blob ID was stored by a user that incorrectly encoded a blob.
- After the PoA and for a blob ID stored by a correct user, a storage node is always able to recover the correct slivers for its shards for this blob ID.
- After the PoA, if a correct storage node cannot recover a sliver, it can produce an inconsistency proof for the blob ID.
- If a blob ID is stored by a correct user, an inconsistently proof cannot be derived for it.
- A read by a correct user for a blob ID for which an inconsistency proof may exist returns
None
.
Note that there is no delete operation and a blob ID past the PoA will be available for the full availability period.
Before the PoA it is the responsibility of a client to ensure the availability of a blob and its upload to Walrus. After the PoA it is the responsibility of Walrus as a system to maintain the availability of the blob as part of its operation for the full availability period remaining. Emission of the event corresponding to the PoA for a blob ID attests its availability.