The Beginning
I started my journey in the midst of the pandemic after many years developing video games as a hobby. The Defluencer protocol was my first project in the web3 space although it was not called that at the time. It was born out of a hackathon organized by the Filecoin foundation that I participated in that summer. All I wanted to do after the 6 weeks is live stream video via IPFS. I was also learning Rust at the time and to my surprise I succeeded. I did not win any prize but building shit that works was all the winning I needed. After it was all over I was still eager to continue working on that project, I was dreaming BIG, why not build a decentralized social media protocol? I applied for a grant and it was decided that I was worthy of receiving money. I just had to build a decentralized protocol, web app, testing sdk, ENS API and Ledger API in a year with no experience
The Design
Hash linked data structures can express any kind of information you would want for social media purposes. IPFS and IPLD were used for content, metadata, indices, web of trust and cryptographic schemes. A timecode based index for video, crypto signed content hashes and a key value map for comments were designed. The immutability of the resulting DAG is a boon and a curse. Easy to share but how do you update? The root of a Merkle tree or a DAG always changes when even one linked element changes. IPNS was the answer, a cryptographically signed mutable pointer searchable via the DHT, it can be used to refer to the root of a DAG and voila! Problem solved right?
The Downfall
Major problems in usability. Even with a hardware wallet and a ENS API the user has to sign every update, atrocious! Maybe delegating to the browser? Nope, because then you have to revoke keys you previously delegated? How? “Just use a blockchain bro!” You have to pay and sign transactions instead, how is that better? Even worse, IPNS addresses are hashes of public keys which implies that those keys CANNOT be rotated because if you do then the address changes and other users can’t find you via the DHT. Now think about a user that want to use the same “account” on her phone, desktop and laptop. Managing all the keys is a nightmare in UX and security. I was also foolishly planning to add social recovery…
I abandoned the project after trying my best to find a solution to this identity, key management and delegation problem.
The Future
Fast forward 2 years, blockchains are still not easy to use but decentralized identity is now a solved problem. The solution is not what I would call simple but it does work. Identifiers are not tied to key material anymore and thus NEVER changes. Said identifiers can be cryptographically tied to a log of updates of some state. This state can list delegated keys and theirs capabilities. A hierarchy of delegation is used for social recovery and revocation. Multi-devices use case can now be implemented easily, delegate to a new device, revoke an old one. No blockchain and not tied to any network, just some good old cryptography, infinitely scalable. Store your state anywhere even on physical paper via QR codes, 100% verifiable.
The Conclusion
I’m hoping this postmortem of my own project can help you dear reader in understanding better the problem of decentralized identity and hopefully cue you in as to the solution as I firmly believe that ALL projects of the LOGOS stack can benefit from this advancement in decentralized technology.
Thank you.
P.S.
P.P.S.
I wanted to go in more technical details but ended up “vibe” writing this instead. Deal with it