IPCM

InterPlanetary CID Mapping

Blog Post
Star on GitHub

IPFS has been the go-to decentralized network for sharing content and websites. However it's greatest strength, immutability, is also it's greatest weakness. There are cases where you might need to update content on IPFS, but that would result in a new CID. IPCM (InterPlanetary CID Mapping) aims to solve this by storing a simple IPFS string onchain and letting the contract be the point of reference for the latest state.

With this approach the contract address acts as the static address, and the state it holds can be dynamic. This results in several benefits:

With IPCM you can easily host content on IPFS and update it onchain. For example, this webpage is currently hosted on IPFS and proxied through a Cloudflare worker, where the code simply gets the latest mapping of the contract and fetches the content through an IPFS Gateway. The contract address acts as the main point of reference to a CID that can only be changed by the user, and with smart contract events recorded onchain anyone can index the history of the state.

					sequenceDiagram
    participant User
    participant IPFS
    participant IPCM
    participant Reader

    User->>IPFS: Upload siteA.html
    IPFS-->>User: Return CID1
    User->>IPCM: Set state to ipfs://CID1
    User->>IPFS: Upload siteB.html
    IPFS-->>User: Return CID2
    User->>IPCM: Update state to ipfs://CID2
    Reader->>IPCM: Query latest state
    IPCM-->>Reader: Return ipfs://CID2
    Reader->>IPFS: Fetch CID2
    IPFS-->>Reader: Return html2.html content
    

The IPCM contract for this website can be viewed here: 0xD5B0CE88928569Cdc4DBF47F0A4a1D8B31f6311D

To learn more please visit the GitHub repo with the link below!

GitHub Repo
Built by Pinata