Bitcoin’s protocol is open source. So is its narrative. The story and the code evolve. We all contribute. Each pulls in a direction. Themes emerge: engage or disengage with regulators, build for anonymity or transparency, embrace or shun agorist beginnings.
There is no one way, just individual frames-of-reference. Bitcoin is greater than the sum of these arguments. Ultimately it will be moulded in our collective image.
A good entrepreneur sits, smiles, nods and focuses on reduced transaction fees. A libertarian has loftier ideals. Many wear two hats. After all, many businesses today were once on display at events like Porcfest.
Those who fell in love with Bitcoin as libertarians, every day add value as entrepreneurs. There are still a great number in the ecosystem. Over time perhaps this will change. There are those who believe it will.
There is a lot of noise in the space. It can drown out the music of what matters, like protocol implementations. Libbitcoin is one such implementation. Payment processing, pretty interfaces, congressional hearings and financial oversight committees are all irrelevant without a solid technological foundation.
The opportunity to talk about this subject with Amir is something I relish. It’s good to get back to basics.
Amir, what is a protocol implementation?
Protocol dictates how two parties formally interact with each other. With Bitcoin, this means how the software underpinning the network speaks to other nodes.
In a world of diversified Bitcoin software, for those nodes to understand one another, they need to speak a common language. This common language is the Bitcoin protocol, as set down by Satoshi.
An implementation is merely one individual realisation of Bitcoin, as written by a specific group of coders. They might choose to write the code in a dozen different ways as appeals to their preferred style (code is art). And each of those different implementations may act no differently. A protocol implementation, is an implementation of Bitcoin that implements the protocol as defined by the network.
So, what is Libbitcoin?
Libbitcoin is an asynchronous C++ toolkit library for Bitcoin. The first commit on Git was in May 2011.
I have a strong dislike of frameworks, which I see as programs that are already written containing some stubs for you to fill-in. They are a place to hang your hat. Instead I prefer the toolkit approach, which is a flexible collection of classes and functions that can be assembled into different programs.
And what are some of its unique features?
Libbitcoin is asynchronous, operating around the concept of threadpools. Operations take a completion handler that returns an std::error_code indicating success and arguments (depending on the operation used) for return values.
I’m also a big believer in the UNIX philosophy of building bricks, and “worse is better” which emphasizes simplicity of implementation over interface. A simple implementation is important for system’s software to remain pure and focused in its operation without side effects.
Why is it important for a system like Bitcoin to have many implementations?
It’s important to have a diversified ecosystem of open software around Bitcoin. There are two big reasons why: the health of Bitcoin and maintaining our independence.
A Bitcoin, which runs the same code everywhere is a Bitcoin susceptible to the same flaws and bugs. If everybody runs the same Bitcoin software then any attack vector has the ability to burn down the entire network overnight.
The strongest operating system is Linux because there are so many different versions of Linux, and no single way to attack Linux. Linux is an organism with diverse and healthy genetics.
The other risk is that a monoculture surrounded by proprietary tools in the hands of a few will come under pressure from regulators or corporate interests who seek to coopt this technology for their own ends.
People will begin to compromise on Satoshi’s principles in small ways, opening the path towards more and more corruption of Bitcoin.
It’s not sufficient that Bitcoin alone is open source, as there are many difficult decisions where the choice between A and B is not always clear.
Sometimes only a very select few understand the deep implications and trade-offs of certain development choices. Sometimes the decision is a small or insignificant one. But if our intentions are not pure (or are corrupted by pressures) then it’s easy to take the million small decisions that morph Bitcoin into ‘Govcoin’ or ‘Corpcoin’.
But I thought Bitcoin had a “reference implementation”?
There is no reference implementation. This is a self-given title to a project by people seeking to establish and cement their official status and legitimacy.
The real reference implementation is the software people use. We are in the same boat, so whoever has the users has the power to dictate decisions. If the users choose to use software that advocates for government or corporate interests, then the users are voting for development decisions that benefit government or corporate interests.
If however, the users use and deploy software in critical infrastructure that promotes black market, p2p trade and small business then they are voting and pushing the consensus of Bitcoin towards a Bitcoin for the people.
In the end, it’s all different mafias. And you have the power to choose.
How big an issue is protocol implementation for the success of Bitcoin?
It’s not only about the consensus as agreed by the network; it’s also about the features and where the energies of developers go.
There are features in Bitcoin that threaten the freedom of Bitcoin users such as triangulating Bitcoin transactions, logging network info in big surveillance databases or address blacklists (as proposed by Agent Hearn).
If we don’t have a push back of development that is actively developing technology to free people then people will be forced to rely on technology that is abusing them.
Are there plans to adapt Libbitcoin for any alt-coins?
Yes, I plan to support Litecoin and Dogecoin.
What do you see as the future for Libbitcoin? Where do you hope to take it?
I have a big focus on blockchain scalability, and my aim is to rip out LevelDB and replace it with custom databases.
There’s a lot more juice that can be squeezed out of the blockchain by creating custom databases. You can make several assumptions about blockchain operation that allow big performance gains and some nice features.
Dark Wallet aims to have Coinjoin operational by default. What is Coinjoin and how is that progressing?
CoinJoin is the ability to indistinguishably join my Bitcoin transaction with another person’s. Another term is “trustless mixing”.
CoinJoin protects sender privacy. DarkWallet has CoinJoin already functioning, and it will be available upon release in the send dialog (activated by default).
Stealth addresses are the other side of the equation, protecting receiver privacy. I can publish a single stealth address and only I will know the payments belonging to that stealth address (despite the transactions being public).
Nobody will be able to recover the transaction history for a stealth address despite it being public.
CoinJoin + Stealth = Bitcoin anonymity
Bitcoin is an open architecture in which we all imbue our values. The decisions of those working on Bitcoin at a core level will, over time, greatly affect the Bitcoin we end up with.
There is a purity of purpose to Libbitcoin that transcends the desire for material gain. It is Zen: a million dollars of code, written in painstaking detail, over three years, with no financial compensation, at great personal sacrifice, across the squats of Europe. There is a kind of poetry in that.
Much like Bitcoin itself, it smacks of hope.
Libbitcoin does not seek endorsement, or tacit approval, from the current financial paradigm.
The Libbitcoin code library is careful to remind us of Satoshi’s original message, left inside Bitcoin’s genesis block. At inception, forged in the immutable blockchain, the words “// The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”.
The message offers a haunting glimpse into Satoshi’s mind, as he mined the genesis block on that fateful day in 2009. How ironic will that message become? Only time will tell. But, regardless of where Bitcoin is taken, no one can ever remove that timestamp. There’s a weird poetry in that too.