This is a rough map of the work ahead related to mutability in the follow projects:

Mutability Basics

IPFS is a content addressed data network. As such, the addresses (CIDs) are immutable.

Mutability is achieved in IPFS systems by creating some sort of mutable pointer to an immutable reference (CID, IPFS URI, etc).

IPNS is a record type for describing these pointers and resolving which one is the “winner” when multiple records are found. It uses a public key as the mutable identifier so that records can easily be verified by looking at their signature.

How do you find the latest IPNS record?

Good questions 😁

We kinda don’t want to say that there is one definitive way because, this being the decentralized web, defining this sort of thing would necessarily centralize the way this is done.

You can certainly find IPNS records on the IPFS public DHT.

You can also write the records into a blockchain.

You can also write references into DNS records.

You can also write IPNS records into any system or protocol you happen to be building a mutex in.

Building a Mutex

Whenever you’re building a system that is meant to update a mutable reference you’ll want to have transactional integrity around the update mechanism. You don’t want one actor to overwrite another actor’s update because they weren’t properly coordinated.

The easiest way to do this, when the update rate is lower than network latency, is a simple mutex.

When an update is being processed, the mutex checks the state being updated and verifies that this is in fact the state the client last read from. If two people try to update the same state at the same time, the second one to be processed would get an error and the client would need to get the new state and re-process its update locally in order to write a new state to the mutex.

Many databases use something along these lines: