Uncensorable, immutable microblogging platform that is completely decentralized and does not rely on any centralized systems.

Overview

Zooko

Truly decentralized, immutable and uncensorable microblogging

Zooko is a working-example, proof-of-concept proving that you can have a decentralized, immutable, and uncensorable microblog platform (like "twitter") in a truly decentralized manner without needing any 3rd party APIs and simply relying on cryptography.

What is Zooko?

Zooko uses the Handshake blockchain which allows you to fully own and control a name. While many use cases exist for Handshake, including federalist, DNS, and decentralized identity, Handshake is a versatile blockchain that also allows you to build any number of applications on top of it, without the need of smart contracts.

Zooko was named after Zooko Wilcox O'Hearn, one of the few remaining, original, Cypherpunks.

We're still writing code.

Zooko

How it Works

Handshake is an incredibly secure blockchain. While many other chains are easy to abuse, Handshake is not one of them. That being said, there was one outlet that we could take advantage of, and that is the UPDATE covenant which allows for a DNS resource record with several types, GLUE, NS, among others, and most importantly, TXT.

This is what we take advantage of.

UPDATE Limitations

You can only call 1 UPDATE per block. This means that with our implementation, you can only Zooko once per block. Additionally, TXT has a limit. We are prepending our TXT with "zooko:" so the limit is 249 characters (255 less 6). That's 9 more than the leading microblog!

Writing a new post

Zooko will copy your DNS resource records over everytime you post, while replacing the last Zooko. Since TXT records are ignored when a NS record is present, this will not affect anything as we are using on-chain TXT records as opposed to authoritative server served TXT records which are preferred when an NS is present.

Proof of Concept

This is a quick, and simple, proof of concept. If someone was to build this into a full blown microblogging platform, a lot more "protocol" would likely need to be developed to integrate different kinds of interactions as well as 'compound interactions' using multiple strings in TXT records, which could allow for more than 1 action per block only limited by resource record max size limit. One could also hook this into the websocket to watch both the mempool and, as well, for new blocks. Finally, of course, someone could utilize web technologies and build a beautiful interface for this.

How to Install

  1. Clone
git clone https://github.com/publiusfederalist/zooko
  1. Get prepared
cd zooko
npm install hs-client hsd prepend readline stream
  1. Setup wallet and node keys in the keys folder. If you use Bob, it is in the Setup. If you use hsd, you probably know how to do this already.

  2. Now, just try it!

Commands

zpull

Updates the latest posts.

./zpull

zread

Reads the posts.

./zread
./zread <name>
./zread <block>

zpost

Posts a new microblog.

./zpost <wallet-id> <name> "<message>"

This will prompt you for your password (the password will not echo back to the terminal).

License and Copyright

(C) 2022 Publius Federalist

All Rights Reserved.

MIT LICENSED

You might also like...

Decentralized, token-gated discussion platform for DAOs

ETHCC Hackathon 2022 -- Debate3 This is the official ETHCC Hackathon 2022 submission for our project Debate3 🌈 . Project Description Debate 3 is a De

Nov 8, 2022

Decentralized video-sharing social media platform, built using Lens protocol. 🌿

Decentralized video-sharing social media platform, built using Lens protocol. 🌿

Lenstube Decentralized video-sharing social media platform. lenstube.xyz About Lenstube is a decentralized video-sharing social media platform, built

Jan 1, 2023

🧩 TypeScript utility type in order to ensure to return only properties (not methods) containing values in primitive types such as number or boolean (not Value Objects)

🧩 TypeScript utility type in order to ensure to return only properties (not methods) containing values in primitive types such as number or boolean (not Value Objects)

🧩 TypeScript Primitives type TypeScript utility type in order to ensure to return only properties (not methods) containing values in primitive types

Dec 7, 2022

A quick and easy to use security reconnaissance webapp tool, does OSINT, analysis and red-teaming in both passive and active mode. Written in nodeJS and Electron.

A quick and easy to use security reconnaissance webapp tool, does OSINT, analysis and red-teaming in both passive and active mode. Written in nodeJS and Electron.

ᵔᴥᵔ RedJoust A quick and easy to use security reconnaissance webapp tool, does OSINT, analysis and red-teaming in both passive and active mode. Writte

Oct 31, 2022

🤪 A linter, prettier, and test suite that does everything as-simple-as-possible.

🤪 A linter, prettier, and test suite that does everything as-simple-as-possible.

Features Fully Featured Code Grading Knowing if you need to work on your code is important- that's why we grade your code automatically. But, unlike o

Sep 25, 2022

📦 Fully typed and immutable store made on top of Immer with mutation, action, subscription and validation!

Riux is a fully typed and immutable store made on top of Immer with mutation, action, subscription and validation! Table of contents 👀 Installation U

Aug 27, 2022

Userland module that implements the module path mapping that Node.js does with "exports" in package.json

exports-map Userland module that implements the module path mapping that Node.js does with "exports" in package.json npm install exports-map Usage co

May 31, 2022

Serverless for Web3, which is Immutable and Verifiable✅

Tender Layer 2 for IPFS / API Renderer for Web3 / Serverless for Ethereum Tender is dynamic content serving P2P Protocol for Ethereum. V1 Design A Cod

Nov 18, 2022
Owner
Publius Federalist
Farewell! a long farewell to all my greatness. One for all. I am here.
Publius Federalist
A completely decentralized way of sharing temporary messages.

Debin A completely decentralized way of sharing temporary and permanent messages. Debin uses Waku and IPFS decentralized networks to temporarily or pe

Paolo D'Amico 5 Jun 29, 2022
Clone of a certain microblogging site. Based on Remix Indie Stack.

Microblog No guarantees that any of this works. I'm new at this and experimenting. Built on top of Remix's Indie Stack. Database query organisation mi

Kuldar Kalvik 0 Nov 18, 2022
Plain JavaScript version of jQuery's slideToggle(), slideDown(), & slideUp(), but does not use display: none.

dom-slider It works like jQuery's slideToggle(), slideDown(), & slideUp(), but does not use display: none. Uses CSS3 transitions and element.scrollHei

Brenton Cozby 56 Dec 27, 2022
Feel free to create new file, don't hesitate to pull your code, the most important thing is that the file name here must match your nickname so that file does not conflict with other people.

Hacktoberfest Indonesia Apa Itu Hacktoberfest ? Hacktoberfest adalah acara tahunan yang bertujuan untuk mendorong berkontribusi kedalam ekosistem open

Juan Daniel 5 Dec 15, 2022
Bitloops is Low-Code Workflow Orchestration platform that helps you build backend systems and APIs 10x faster.

Bitloops Bitloops is a scalable open source Firebase substitute that can support any database and workflow orchestration. We’re building Bitloops usin

Bitloops 21 Aug 9, 2022
A decentralized streaming platform to incentivize anyone to be a producer and earn from their supporters

Web3Swim Tools Utilized: Front-End: NEXTjs with TypeScript Back-End: Solidity (Smart Contracts) + Moralis (Database) + Thirdweb (Middleware) Blockchai

Brian H. Hough | brianhhough.eth 12 Oct 14, 2022
ChainLook is a decentralized blockchain analytics platform based on TheGraph and IPFS.

ChainLook https://chainlook.xyz ChainLook is a decentralized blockchain analytics platform based on TheGraph and IPFS. You can create beautiful widget

Saleel 11 Nov 21, 2022
A "Basic-to-Lisp" compiler. But Basic is not real Basic, and Lisp is not real Lisp.

Basic2Lisp A "Basic-to-Lisp" compiler. But Basic is not real Basic, and Lisp is not real Lisp. Syntax Print-Sth Put some-value to standard output. PRI

Hana Yabuki 5 Jul 10, 2022
Decentralized Finance platform (frontend)

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: ya

DJS Tech Group-Dev 2 Mar 28, 2022