Bitcoin Developers Have Technical Expertise That Users Don’t https://ift.tt/nJosS3q

Bitcoin is defined by its users, but how many node operators understand and verify protocol changes on a nuanced and deeply technical level?

This is an opinion editorial by Shinobi, a self-taught educator in the Bitcoin space and tech-oriented Bitcoin podcast host.

Bitcoin is ultimately defined by its users, by the people actually running nodes and enforcing the protocol rules to verify the payments they receive over the network. This is a fundamental and inescapable property of the Bitcoin network, so long as users choose to engage in this activity. This does not however mean that users deeply understand how the protocol works, the different effects that proposed changes would make or the most efficient way on a strictly technical level to handle a problem or improvement. Users absolutely can understand these things if they take the time to do their research and actually learn about the protocol on a strictly technical level, but to assume you as a user understand these things simply because of the reality that users are the ultimate arbiters of how the protocol works based on what software they choose to run is pure hubris.

Just because you drive a car does not mean you understand the deep and nuanced engineering trade-offs as well as the engineer who designed the car. Just because you use a cellphone every day does not mean you understand how to optimize the power consumption of all the different radio transmitters, WiFi, Bluetooth, cellular, etc. Using something does not mean understanding how it works by default. This is something that should be very obvious to a person who is being honest with themselves.

So why do so many users without much technical expertise or familiarity with how things work under the hood feel so confident in declaring how things work under the hood, while getting all the details and facts wrong? Now, I feel like in this climate, I have to add a million caveats. I’m not talking to you, the software developers building applications, or who work in some normie tech field without the time to contribute to Bitcoin in some way, but who follow it regularly; I’m not talking to, the user who has actually put in what is frankly an unhealthy amount of time (trust me, I know by experience) in understanding how things work under the hood. I am talking to you, the average user who just listens to some podcasts now and again, and dollar-cost averages (DCAs) and doesn’t really deeply follow the development of technical things in this space. I’m talking to the user who literally hasn’t even withdrawn their funds from the exchange you bought them at yet. I’m talking to you, the user who, when running your business, just had their Bitcoin friend set up a mobile wallet for you to accept Bitcoin the one out of 100 times a customer pays with it.

Why are you so confident in your opinions about the technicals of how Bitcoin works?

How familiar are you with the mempool policy of how transactions are relayed? Did you know that there is a big difference between policy rules and consensus rules? That there are transactions that are perfectly valid by consensus to be included in a block, but by mempool policy, will not be relayed by anyone’s node, so that miners have to be directly given that transaction and use custom code to include it in a block?

What about the fact that the Lightning Network actually doesn’t use hash time-locked contracts (HTLCs) for very small value payments? Did you know that for a 10 satoshi payment for example, the Lightning Network doesn’t actually use HTLCs or make the payment success or failure atomic with Bitcoin script? Those very tiny payments are actually rounded off into miner fees during the “middle period” when they are not yet finalized and confirmed with the channels. This means that if a hop along a payment path has one side stop cooperating, there is no way for that node to enforce getting paid or refunded on-chain, depending on which side you are discussing for that specific payment. It just goes to miner fees for a transaction, no actual HTLC output in the channel commitment transaction is created for routing that payment. It’s just a “best try” system of honesty with no enforcement. Did you know that?

Here’s a fun story. Bitcoin has two opcodes for time locking, check lock time verify (CLTV) and check sequence verify (CSV). CLTV prevents a coin being spent before a certain predefined Unix timestamp or a predefined block height. CSV prevents a coin being spent until after “x” amount of time has passed or “y” blocks have been found since the block or time that coin was created. When you spend a coin using CLTV or CSV in the script there is a field in the actual spending transaction called nLocktime that must be set to the value the CLTV or CSV script used. The original purpose of this field was to have presigned transactions that couldn’t be mined until that time or block had passed. But Satoshi Nakamoto himself also had another use in mind for this: a very basic form of payment channel. The idea was that you could take the nLocktime field and increment it up by one each time to create a new net payment, and have miners settle the most recent one by count.

The problem is there was no consensus rule or way to enforce miners have to settle the most recent transaction. So Nakamoto himself planned to use this field in the transaction to require miners to settle only the most recent — or highest numbered — transaction. Except there wasn’t actually any consensus rule to enforce that! Not only wasn’t there a consensus rule, but it was impossible to construct one because miners are capable of including any valid transaction in a block. Once you sign a transaction,  it is valid, it is always valid. So there was no logical way for Nakamoto’s original idea to ever work in the first place.

Think about that for a second. The creator of Bitcoin envisioned something being built on top of Bitcoin that was literally impossible to build in the way he imagined working. Think about that. The creator of the entire protocol built some function to do a certain thing, when doing that certain thing in that way is literally not possible.

Why are you so confident in your understanding of how Bitcoin works on a technical level? Why are you so confident that your ideas about what effects certain changes will have are actually correct? The creator of the protocol had such a terrible misunderstanding about how it worked that, to be frank, I am kind of embarrassed for him that he thought such a thing would be possible to build in that way.

So what is the point of all of this? That experts still exist. That users ultimately being in control of the protocol and having the ultimate choice of what software to run and what rules to enforce does not change the reality that there are people who understand how this protocol actually works better than you. People’s understanding of things is directly correlated to how much time they have spent actually trying to learn about and understand the thing.

You can’t just magically understand how Bitcoin actually works just because you buy it, or use it or buy things with it. That is not how knowledge works. So when Bitcoiners get involved in discussions of how things actually work on a technical level, when they start publicly talking about why they have made decisions about things in regards to running software and making rules, they should be aware of what they do and do not know because just owning bitcoin does not magically impart knowledge by itself.

The catch phrase of this space is “Don’t trust, verify.” So how many of you are verifying things before you start repeating them?

This is a guest post by Shinobi. Opinions expressed are entirely their own and do not necessarily reflect those of BTC Inc or Bitcoin Magazine.



from Bitcoin Magazine
Shinobi

Post a Comment

0 Comments