Bitcoin vs. National Currencies — Response
Hi Stephen,
Sorry for the delayed response — travel & sparse Internet
I appreciate your well-considered response. It certainly reveals my sloppy use of the word node when I always meant at least fully validating nodes, and usually mining nodes — and bitcoin has other partial node types. I should probably go back and clarify that in the main article. As a geek, I often tend to think of the whole dynamic in terms of the computer science problem of Byzantine Fault Tolerance, and node is a generic term in that context.
You make some good points, and there are many things to address in your reply. So, as you suggest, in the spirit of “being correct about how Bitcoin works” lets get some things cleared up. Each section header, summarizes your key point(s).
(#1) It’s the Speed of Clearing Algorithm
I don’t want to split semantic hairs, but I think it is really powerful for currency designers to understand what makes cryptocurrencies different from existing digital accounting is precisely that they are NOT performing clearing. They are simply doing a transaction — a digital transfer of value of a “bearer instrument.” Whoever bears the proper private key, can spend those funds without any “clearing” required.
A valid crypto transaction is complete in itself. It is not a message about the intent to transact, which must pierce through layers of organizations and disparate accounting systems, to pre-authorize, record, clear, settle, and reconcile. All of those steps are completed in the transaction itself. If it is cryptographically valid, it is signed to the chain — done.
So, it is not really about clearing algorithms at all.
Signatures take very little processing to validate, you can easily do tens of thousands of those each second. The rub comes when you also have to confirm whether this token is valid to be spent, and that is where every cryptocoin/token-based/fiat system has to manage consensus — and where the independent/mutual-credit ones I propose do not have to worry about that consensus.
You are certainly correct that just because something doesn’t require global consensus it isn’t automatically fast (like SWIFT, in spite of the name). But remember, they are doing all those other stages of old-school digital accounting across silo-ed ledgers: authorizing, recording, clearing, settling, and reconciling, not simply executing a self-contained transaction. It’s a lot faster than the old-school shipping gold and valued commodities around the world.
(#2) It doesn’t take time to synchronize / There’s not increasing difficulty
Global consensus across many nodes is a notoriously tough problem in computer science. The complexity increases exponentially with each (full) node you add, because if each peer can introduce information, then there needs to be time to send that information and synchronize with EVERY other peer and the connections increase exponentially.
Bitcoin truncates and shortcuts some of this synchronization process with it’s construct of a block, and the validation rules for blocks. The block means we don’t have to get every peer to agree on a sequence for EVERY transaction, we just have to agree all the transactions in this block are valid (properly signed, and not previously spent), and that this block is the longest one we’ve seen for this cycle which has a special nonce with enough leading zeroes. Any peer with some leftover transactions that didn’t make it into that block will roll them into the next one and start mining.
But it absolutely does take time. Why do you think Bitcoin makes miners do busy work for 10 minutes doing brute-force cracking on a variant of the Hashcash algorithm? It means that during that window of time, the nodes have also had time to send, receive, and validate a mass of transactions that are going to go into the next block. Even with truncating the consensus process with block validation rules, it is an utter fallacy that it takes no time.
So back to the point of Bitcoin’s unique cryptographic tokens as it’s coins, The big consensus Bitcoin has to manage is about those tokens (whether they exist and have not been spent yet). Miners validate the issuance of new fiat coins and blocks (by confirming the nonce has enough leading zeroes on the block with longest chain of valid transactions). Validating nodes are basically consuming the blocks some miner poops out every 10 minutes, and checking signatures and UTXOs, after that layer of transaction consensus work has been compressed into a block. Lightweight nodes don’t even do that much validation, and hence they can be fooled into doing invalid transactions.
And in addition to the exponential complexity of peer communication as a network grows, add to that other failures. Memory or hard drives and can glitch. Network packets get corrupted. Then there is willful fraud, DDOS, and sabotage, and you can have all kinds of headaches trying to maintain consensus across multiple machines.
(#3) It is incorrect that there are more tokens the longer the blockchain grows & longer to validate transactions
Remember, I’m referring to synchronizing transactions between validating nodes, not simply replicating accepted blocks to non-validating nodes.
A transaction has to be validated before being added to a block: validating the signature and confirming that the coin(s) used in the transaction exist and have not already been spent. Originally, the whole chain had to be scanned for the coins to see when they were created and spent, but as the chain grew (now about 65 GB) that process took too long, so the developers added a faster way to find just the currently spendable coins, or Unspent Transaction Outputs (UTXO). That index is much smaller than the whole blockchain — small enough to keep in memory for faster searching.
Yet as you mention above, there are clearly more tokens in each block because the number of coins grows every 10 minutes just from mining — there are 25 new ones. However, real source of the multiplication of tokens comes from remainders of partial spends. If I have 1 Bitcoin and buy something less than $400 or $600 or whatever the current value of a coin is, then it gets split. My old coin becomes spent, but two new partial coin/tokens get created. My one token just became two. The size of the UTXO index was doubling annually, last year it was 4 GB when these concerns were raised.
As Bitcoin usage increases, then proliferation of fragments increases accelerating beyond annual doubling. Even in 2140 once all the coins are issued, fragmentation will continue causing this index to grow. Keeping the conservative rate of doubling annually means: 8 GB this year, 16 GB next year, 1 TB in 7 years, a Petabyte by 2033, 1 Exabyte by 2043, 1 Zetabyte by 2053, 1 Yottabyte by 2063 (Each step x 1000). By 2140 we have 1000⁸ steps (that 8 powers of 1000 steps higher for which I don’t even know the names).
Please remember we are talking about RAM not hard drive space (at least to be a competitive miner) just for the UTXO index to look up whether a coin exists and has not been spent. RAM prices are not halving annually, so this will knock more people out of the game for running fully validating nodes (not even considering specialized GPU mining hardware). Either it will need to be kept on disk, or the structure re-optimized. Even with SSDs the time it takes to page the index into memory through the device bus for each transaction validation will increase manyfold from having it in RAM.
So, yes, even if hash crunching continues to take 10 minutes, and a miner spits out a block, it could propagate at the same frequency. But when your lookup index outstrips the RAM capacities of your system, it absolutely takes longer to validate every transaction in every block — for miners and full nodes.
(#4) Not true that blockchain requires majority consensus across many copies of a single ledger
Hmmm… You seem to contradict your own prior paragraph here. If running full nodes helps prevent 51% attacks as you mention in your #3 paragraph, then your #4 paragraph saying that once the miners agree, the block just propagates like DNS to anyone not competing for mining rewards doesn’t make a lot of sense.
Without consensus, when different parts of the network don’t follow the same validation rules, basically Bitcoin forks into separate currencies with different blockchains.
Also worth noting about DNS, every domain registry entry provides nameservers that are a central authority from which this propagation can spread. Even with this centralized authority, propagation is not always smooth. Changes to nameservers often take a whole day, and sometimes old DNS entries get cached in strange and seemingly random places, failing to update in a timely manner, with stray nameservers that still “believe” themselves to be the authority even after registry records have demoted them. This system has challenges and doesn’t even require consensus.
Satoshi Nakamoto and her/his team were not trying to recreate the existing system
YES! First, I love the HER/his! Thank you for that. :) Seriously. More people should think that way.
Second, of course they weren’t trying to recreate the current system, but that’s the point of my article. Bitcoin unwittingly looks more and more like the system they were trying to create an alternative to. In part, because people don’t know the full architecture of the system they want to replace and the currency design principles of what is most detrimental. (I have another article on this almost complete.)
I have no magical regard for mutual credit as the one, holy, true pattern for proper currency design. Fiat currencies are absolutely valid and necessary (although typically they work best for application in reputation currencies, and not money). I provide the mutual credit example of a cryptocurrency architecture precisely because nobody is doing it that way (No not even the Ethereum implementation of a mutual credit currency app) and because it COMPLETELY ELIMINATES THE NEED FOR GLOBAL CONSENSUS FOR TOKENS and ENABLES FULL PARALLEL PROCESSING OF TRANSACTIONS. It removes all the blockchain bottlenecks.
Those technical features alone make it worthy of consideration, not because mutual credit is morally superior to fiat, but because the architectural strategy completely dodges the bullet Bitcoin is struggling to scale around by starting from different assumptions (the subject of another article I’m writing).
Both national currencies and Bitcoin are designed for artificial scarcity with different enforcement mechanisms of that scarcity — debt issuance with interest so there is always more owed than exists to pay vs. significant energy investment for extraction as a commodity, just like physical “mining.”
Both national currencies and Bitcoin are locked in a growth trajectory — the need to pay the compounding interest on the debt to keep the system from crashing vs. an arbitrary 130 year curvilinear growth trajectory set by complexity requirements of the hashcash-like algorithm.
It sounds a little like you’re referencing Bitcoin’s lack of debt issuance with interest as if it is morally superior to non-debt/non-interest (as you implied that I might be relating to mutual credit). Generally, I would agree that the system-wide symptoms of debt-interest issuance are terrible and best to be avoided. Yet those symptoms were engineered into Bitcoin using different means as I mentioned in the previous paragraphs. So I can’t personally grant Bitcoin the goodwill that should accompany escaping the debt-interest issuance pattern.
Therefore Mining is not Useless Computation
I am by no means attributing ill will to any of the Bitcoin developers or to Satoshi. Believe me when I say I understand not being compensated for years of development on these kinds of systems, and an unfaltering commitment to not give anyone, including myself, an unfair advantage (although most cryptocoin launches seem to give massive advantage to the early users).
Yet as the adage goes: “Those who do not learn history are condemned to repeat it.”
Here I speak as a super-geeky currency designer, who designs and builds systems most people don’t even realize are currencies. Decentralized issuance (and by extension accounting) is not the only, and possibly not even in the top five, problems with our national currency system. To change only that, and go out of your way to engineer in other systemic problems, is to miss the mark.
So while I have a lot of respect for the developers and crypto-heads, it still does not make the mining computation useful. Hashcash (and the bitcoin variant) is precisely an algorithm just for generating busy-work. You are simply asserting the conclusion… “I like Bitcoin, therefore all that wasted electricity must be useful.”
As far as I can tell, proof-of-work is really being used for two things: to randomize the miner who gets to commit the next block and to create a 10 minute delay for synchronizing transactions for the next block. I assert that when you understand that, there are ways to do that with less electricity.
But I’m not going to provide you with that way of doing global consensus with less wasted electricity, instead I’m offering a way to operate cryptocurrencies without the need for global consensus — because that bypasses the core problem altogether.
In Closing
So… in the spirit of being correct about how Bitcoin works, do you feel we’re closer? Our replies are getting longer than the original article, I think. :)
I hope it proves useful to others to go into this level of detail.
So, thank you for pushing back on the areas where you did. It gave me a chance to clarify some things I haven’t said or written yet.