Happy Monday ya’ll!
Today...we will change things up. Instead of a coin review, we are itching to drop a bit more of our technical knowledge.
Today we will be discussing privacy, how transactions are broadcasted and more specifically a new privacy-focused implementation called Dandelion.
Let’s dig in….(let us blow your minds)
Wtf is this shit?
Alright n00bs, listen up. Read this carefully and you’ll learn a bit more about how your precious blockchain works.
Simply put - Dandelion is a method which helps to mask the IP address of the original sender, making it much more difficult for douchebags (malicious actors) to find the source IP address, and thus, the sender’s personal identity.
LET’S BACK BACK, BACK IT UP!
Let’s gather some background info here.
Bitcoin is pseudonymous. There can be surveillance nodes deployed strategically across the web and globe. For example, some might purposely host nodes in AWS and also place nodes physically in popular mining areas around the globe. THE POINT is that these nodes can actually gather enough meta data from following transactions to actually identify origin IP addresses and furthermore, personal identities of people behind these “anonymous” Bitcoin transactions.
To put things straight, it is precisely when a transaction is broadcasted that lots of data can be extracted. A typical transaction in Bitcoin’s blockchain is publicly broadcasted to the network, from there a node will grab that transaction, and pass it along to other nodes. Nodes can query this transaction from other nodes. Eventually, all nodes in the network are aware of the transaction. This process of broadcasting the transaction and the transaction sending is technically referred to as propagation…
Now...when a transaction is grabbed by a node, the transaction goes into the node's mempool. A memory pool of unconfirmed transactions not yet hashed into a block. Each node can have different transactions in their mempool (but a large majority will be the same), and when the time comes when a miner says “I WON!” and found the answer to the next block, any unconfirmed transactions in the mempool of the node which are now confirmed, leaves the mempool.
Inspired by an excellent article on the topic, we will use an analogy. Think of this propagation process, of a transaction moving to get confirmed as similar to riders walking to a bus stop.
You are a transaction, you leave your house - BOOM you broadcasted, you then walk to the bus stop and wait for the bus. We all know which house you left from and how you got to the bus stop. You waiting at the bus stop is like you waiting in a node’s mempool.
When the bus comes, people pack into the bus and off they go. They are now confirmed and on the blockchain. NOTE for any haters: yes, there are different nodes, full-nodes, lightweight nodes...but we are just saying generic nodes for simplicity’s sake.
NOW...we are concerned with the process of hiding the broadcast, meaning people see you waiting at the bus stop, but no one knows how you got there.
Thanks to Dandelion, we can mask the source IP of the broadcaster.
With Dandelion, a transaction is randomly handed off to one node, in a private fashion where other nodes cannot query the transaction. Then, this node might hand it off to another node. Eventually, there are a few private nodes that are aware of this transaction. This is called going up the “stem” of the dandelion.
Now...we can’t stay private forever, eventually, we have to get to the bus stop and be public.
The second stage after “stem” is “fluff” much like how a dandelion has its puff-things break off and float away.
When does it fluff?
Each node plays a small probability game which actually has a 90% chance of keeping the transaction private, but eventually it will lose and broadcast (there's a bit more to it, but yeah...). In this case a node (or multiple nodes) a few hops away from you will publicly broadcast the transaction. Now, you are at the mempool I MEAN bus stop and no one knows exactly how you got there.
So...instead of a typical transaction where you just broadcast to any node and your transaction can be queried by any other node….you privately hand off the transaction to a random node, and then that goes to a couple more individuals until BOOM it is randomly broadcasted by one or multiple nodes - distancing the sender from his or her own transaction.
There ya go...instead of immediately broadcasting publicly, you privately handoff to a few nodes, THEN it is broadcasted.
Dandelion was first introduced in Bitcoin Improvement Proposal 156 (BIP 156).
Well...this was a bit different, but hope you learned some shit! If you want some more technical explanations like this, let us know! And as always, be sure to follow us on Twitter!
- Mike and Aaron