1 sat \ 1 reply \ @03bcf114f6 28 Nov 2021 \ on: Leaving Twitter bitcoin
Would you use social media if there were a viable decentralized alternative?
Yes. Each squeak has a block hash embedded in it (before it gets signed). So when you download a squeak from another peer, you can verify that it was created after the block time.
The purpose of referencing the Bitcoin block hash is to create a provable timestamp for the creation time of the squeak. It guarantees that the squeak was created at least after the time when the block was mined.
No consensus needed, just relay. It's a layer-3 protocol, so it piggybacks on top of Bitcoin and Lightning for all of the trustless stuff (timestamps, invoice payments)
The docs are very sparse right now, I'm working on improving the docs.
The high level summary of the protocol is:
When you open a connection to another node:
- send "msg_subscribe" containing the list of addresses that you are following (plus block range that you are interested in)
When a node saves a new squeak:
- forward a "msg_inv" containing that squeak hash to all connected peers that have indicated that they are interested in following squeaks signed by that author.
When a node receives a "msg_inv" from another node:
- check if that hash already exists in the local database, and send a "msg_getdata" message back to the other node to get the data if needed.
When a node receives a "msg_getdata" (containing MSG_SQUEAK) from another node:
- send a "msg_squeak" containing the full squeak (encrypted, without the decryption) back to the other node.
When a node receives a "msg_squeak" from another node:
- save the received squeak in the database if it is valid (and in the following list). Send a "msg_getdata" request to get the decryption key for this squeak from all connected peers.
When a node receives a "msg_getdata" (containing MSG_SECRET_KEY) from another node:
- send a "msg_offer" containing a Lightning invoice that will provide the preimage to get the decryption key after being paid.
When a node receives a "msg_offer" from another node:
- save it in the local database (after validation). Now the user has the option to pay the invoice the invoice to get the decryption key and unlock the squeak.
I would like to release an Android app in the future, but it would not be a full squeaknode. It would be a client that connects to your Umbrel/RaspiBlitz, etc.
Thanks for the feedback! this is useful for me.
"The onboarding steps are confusing."
Anything in particular?
"Login page could use css ;)"
I'm not very good at frontend development, so most of the frontend stuff is just what I could hack together. If you have frontend skills, you are welcome to open PR's :)
"When I open squeaknode it lands on Timeline page. It's not clear what to do next."
When the timeline is empty, there should be a welcome message that gives some basic instructions (follow people/create posts). Were you able to see the welcome message?
"I click on the pen button (the FAB action button with primary color means "the most important next action"), but in the dialog I don't have a profile, so I have to close it again."
I should probably have a button directly in the dialog to navigate to the "Profiles" page, to make this easier.
"When I post first squeak it says "9 minutes ago" even though I just literally posted it."
This happens because the timestamp inside the squeak is based on the most recent bitcoin block hash. That's how I am able to share timestamps trustlessly between peers.
"When I try replying to the squeak - my profile should be selected by default (also profile should just be selected globally, I don't want to toggle it in every. dialog)"
I am working on this... it is currently an open issue: https://github.com/yzernik/squeaknode/issues/1146
"The CSS could use some help - fonts are too big in replies, missing paddings, random box shadows, too many colors, unclear next action."
Yeah, I know :) it needs a lot of work
"Buttons are missing titles, so it's not clear what it does. When I click on resqueak button on my own post, it looks enabled, but then does nothing."
There should be an alert message that says "Unimplemented" when you click. Can you make sure that you are running on the latest Umbrel release?
"It's not clear how to find anyone else. It would be great if you have some nice account to follow by default, e.g. yours. That would help a lot if I want to actually try some interactions early on."
That's an idea that I am considering.
GENESIS