A simple on-boarding to bitcoin

Who’da thunk a materials engineer who, for most of his life wanted nothing to do with finance and until now hadn’t coded much, would now be interested in global markets, regulatory compliance, mesh networking, learning command line…

The other day, I saw Brandon Quittem’s question on Twitter about a millenial’s guide to bitcoin:

So I thought to myself, a materials engineer who is often asked how he became interested in the “blockchain space” — why not write up a few reasons I think bitcoin is fascinating and follow it up with some information I would’ve loved to have known when I went through on-boarding myself. Here’s just a bit of what I have to say.

First off, reasons bitcoin is cool:

1. It allows you to transact with anyone, anywhere, at any time — regardless of national borders, business hours, or time zones.

And with innovations pushing transactions over radio (https://txtenna.com) or satellite (https://blockstream.com/satellite/), the transaction will always go through.

(Note: nvk’s test was carried out over amateur radio waves, and has nothing to do with txtenna.)

2. The bitcoin network has been functional 99.98+ % since launching, with a total of 14 hours and 47 minutes of downtime since the genesis block on Jan 3 2009.

This means that for over a decade now, while it may not have been the easiest to complete a transaction, and while the price relative to other currencies has fluctuated wildly, the network has remained stable, allowing all parties to interact as they wish.

3. It is specific in its intentions, but global in its effect.

Since its inception, bitcoin has been specific in goals — global, peer-to-peer money — and its developers have been conservative and, some would argue, realistic in their approach. In my limited understanding, this is part of why we now see a multitude of other blockchain projects. This certainly does not mean that all other projects are scams. Many push the conversation in technically important directions. Still, there’s something beautiful in the simplicity of bitcoin’s base layer, and I deeply respect and appreciate the community’s intention to keep it that way.

These three points barely scratch the surface, as there are still a wide array of open questions, including:

  • Bitcoin’s environmental impact: What metrics should be used to measure this? What should it be compared against?
  • How can a system so dependent on self-custody co-exist with a legacy system similarly so dependent on third-party custody?
  • Money, government, and power: How does bitcoin affect people’s understanding of such institutions? Can money undergo a separation from state in the same way the religion ostensibly did? Is the relationship between the three as inherent as previously believed?

Not to mention many of the technical questions related to:

  • Necessary vs. adequate distribution of full nodes
  • Setting up and maintaining a lightning node: channel management, whether the lightning network is ready for mainstream adoption, whether mainstream users should even have to think about such things…
  • How bitcoin interacts with local and global regulatory and legal frameworks: money transmission, taxes, securities and commodities regulation, international trade, capital controls…the list goes on and begs the further question: is bitcoin truly an exit from such ecosystems?

As well as whether any of this actually improves upon the system we currently have.

Having said all that, bitcoin is an incredibly interesting experiment in systems thinking, touching on and inter-relating more subject areas than anything I’ve encountered before.

For this reason, I simply can’t get enough.

Now onto on-boarding.

Point 1 is a simple guide to setting up a full node. And when I say simple, I mean “turn on your computer, download an app, install it, and go” simple (who knew, you don’t need to be a CS major to run bitcoin).

For more in-depth information and typical terminology, check out these links: https://bitcoin.org/en/full-node, https://en.bitcoin.it/wiki/Full_node

Points 2 and 3 are musings about mobile wallets, block explorers, the current state of lighting, and a fun optimistic conclusion.

Hope you enjoy.

1. You can run a full node on your laptop — no need for special hardware.

You heard that right. You don’t need a Raspberry Pi (although this is a fun project). Running a node has nothing to do with mining, so you don’t need anything fancy. All you need is bandwidth, patience, some hard drive space, and you’re set!

Why run a full node, you ask?

You want to run a full node to ensure all incoming transactions abide by the rules of the bitcoin network (i.e. it validates all transactions and ensures you don’t receive counterfeit bitcoin). While having everyone run a full node is good for the security of the overall network, ensuring multiple copies of the ledger are distributed across global, political, and otherwise philosophical lines — from a more selfish perspective, this means you get to be the one who verifies that you’re dealing in real bitcoin, something that would require chemical analysis for gold and is often difficult even for banks when it comes to fiat. (Not to mention that central banks can also change what constitutes fiat currency on a whim — see the recent actions of the Indian government or the discontinuation of large denomination bills and Silver Certificates in the US, as just a few notable examples.)

Now that you understand the why, here’s the how:

Go to https://github.com/bitcoin/bitcoin/releases, click on the latest version, and download the build that’s right for you!

  • .dmg for macOS users
  • .exe or .zip for Windows users — the former if you want an executable, the latter if you don’t — and pay attention to 32 or 64 bit
  • If you run linux, you know what’s going on
  • And all those tar.gz files — you can basically ignore them, they just allow you to build from source, but if you’re reading this, you don’t want to do that (hell, I don’t even really know what that means, so I don’t do it either)

Once you’ve got it downloaded and installed (and assuming you’re on macOS or Windows and chose the executable file), you’re going to want to run the application. The first time you run it, it will tell you that you’ll need upwards of 200 GB of free space — not strictly true. I’ll tell you how to save hard drive space in about two paragraphs, but for now, just know that the absolute minimum space you need to run a full node is probably ~5 GB.

Go ahead and click next, allow it to communicate over public networks, and immediately go into your settings. On macOS, this will be in the menu bar under Bitcoin Core>Preferences (not under Settings):

Bitcoin Core menu on macOS

On Windows, this will be under Settings>Options (as you might expect):

Bitcoin Core menu on Windows

Within that menu, you can choose to “prune” the blockchain. Put simply, this means that while your computer will still validate all blocks, ensuring all transactions abide by network rules, you will only keep a local copy of the last small portion of the ledger. The software defaults to 2 GB, but the exact size you’d like to store is up to you. Keep in mind, that this only refers to block data. You’ll also need to have enough space for the UTXO set (~3 GB) and block index.

Size of UTXO set, Jan 2015-Now from https://statoshi.info/dashboard/db/unspent-transaction-output-set

Once you’ve set that, you’ll have to restart the software. I’d also recommend encrypting your wallet (with a strong password), and creating a wallet backup (which comes in the form of a file for Bitcoin Core), in that order. The former can be found under Settings, while the latter is in the File tab of the menu bar.

For a more in depth discussion on running Bitcoin Core software in pruned mode, check out this link. And if you’re unsure about encrypting or backing up your wallet, check this out.

(Note that running your bitcoin node in pruned mode is currently incompatible with certain lightning implementations, so if you plan on installing lnd, c-lightning, or eclair on top of your full node, make sure to check the requirements. Installing any of these is more involved, and I’ll touch on that in 3.)

That’s it! You’ve now installed the necessary software to run a full bitcoin node on your computer! With the software open, you’ll see it count down the number of blocks left to sync and simultaneously count up the percentage completed.

This will take some time — probably >24 hours, and likely a good bit longer (I think it took me ~3 days to sync on my laptop). Unless, of course, you have an awesome setup like Jameson Lopp:

It will also take a good amount of bandwidth — remember that even though you’re running in pruned mode, you still have to download the entire chain from 2009 to now (~275 GB or ~569,000 blocks), so make sure you are on a network with unlimited download/upload capacity and keep the software open whenever your computer is open (if you stream Netflix regularly or download lots of movies, you’re probably fine).

Once the node is fully synced, you can use it as a wallet to send and receive bitcoin from your computer!

One other thing I love to do is go into the Debug Window (located in the Help tab of the menu bar in both macOS and Windows) — it gives me more of a sense of the peer-to-peer nature of bitcoin and many of the underlying principles than anything I’ve read. Want to see the peers you’re downloading from and uploading to? It’s there. Want to know how many transactions you have waiting in your local copy of the mempool (where unconfirmed transactions like to hang out)? Block height and time of last block? All there. And if you want to learn some bitcoin-cli commands, that’s your first stop.

Bitcoin Core debug window

A few typical notes I’d like to echo here:

  • Bitcoin Core sets up what’s called a Hierarchical Deterministic (HD) wallet (typical of most wallet software). This means that you can have a very large number of addresses associated with the wallet (all from one seed). Common practice is to never reuse a single address. In other words, any time you want someone to send you bitcoin, go to the “Receive” tab, create a new address (with a label if you’d like), and have the bitcoin sent there. You have control of all of these addresses, don’t worry.
  • When generating new addresses, I’d recommend checking “Generate native segwit (Bech32) address.” It’ll save you fees down the line, but be aware that some wallets don’t support sending to Bech32 addresses, so if they can’t complete a transaction, uncheck the box and generate another new address for them. More on addresses.
  • When sending from your wallet, the software will automatically take from as many addresses as necessary to reach the total you need to send. Any remaining bitcoin in any of the used addresses will be sent to what’s called a “change address.” Something special about bitcoin is it’s use of a system of Unspent Transaction Outputs, or UTXOs. Instead of having an “account,” you have a ledger of transactions. For this reason, any leftover bitcoin you don’t spend from an address used in an outgoing transaction will get sent to a “change address” under your control. You probably won’t even notice this, but it’s helpful to know (and will explain why, if you look at a block explorer, it shows many of your transactions going to two addresses, when you only really sent to one — the one with all the bitcoin you didn’t send is just a transaction to a new address you control).
  • When sending, the software will also recommend a certain transaction fees. Use them. You won’t like the feeling of setting your custom fee too low and waiting days for a transaction to clear (read: get added to a block). To check the fees are reasonable, go here: https://bitcoinfees.earn.com

One more note: I’ve had my anti-virus delete the executable file many times. This is annoying. The Bitcoin Core software is not malware, nor is it a virus, so feel free to tell whatever software you use to ignore the application and associated files.

2. Thoughts on trusting other software/services:

A major point of bitcoin is self-reliance.

You’ll often hear bitcoiners say things like “not your keys, not your coins” in reference to keeping coins in custodied services such as exchanges or custodial wallets, or “don’t trust, verify” in reference to trusting the data provided by third party companies or services.

While these are incredibly valid points, in all honesty, you can probably trust many mobile wallets and online block explorers (websites that parse the bitcoin ledger and allow you to check the status of any transaction):

All have their short-comings though, and complete security relies on maintaining your own copy of the ledger.

Still, like all things security is a spectrum, and the extent to which you protect your assets depends on what you’re trying to protect. Best practice in operational security (OpSec) is something all should strive towards, but try to remain reasonable and rational in your actions (if you have $50 of bitcoin, you probably don’t need a bunker to protect your multi-sig hardware wallet set-up — would you do the same for $50 of precious metal?).

3. Thoughts on money, lightning, and more:

First, a description (I owe this understanding to Nic Carter)— if you imagine the bitcoin blockchain (layer 1) as a global, final settlement layer, on which transactions are wholly irreversible (i.e. inter-party settlement which occurs only semi-regularly between large entities and is often a batching or netting of many smaller transactions), then you can imagine the lightning network (layer 2) as an interpersonal payment network (i.e. non-custodial, private, secure Venmo for bitcoin), which semi-regularly nets all transactions to the bitcoin blockchain in a single settlement transaction (see what I did there?). In reality, Venmo is probably something like layer 5 for fiat money such as USD, but we won’t get into that. Of course, because of how bitcoin is designed, you can easily transact on layer 1, but layer 2 offers better privacy and lower fees than you would otherwise experience on-chain.

For those interested I’ve included a simple diagram, which I think gives a sense for the analogy as described. It isn’t perfect, but it helped my understanding to draw it out. Also, note that the point is in the layered structure — layers as shown aren’t necessarily equatable (i.e. apps certainly don’t equate with banks).

Layers in legacy monetary system on the left, bitcoin on the right. Credit to Andreas M. Antonopoulos for the term “Internet of money.”

Now, some thoughts on the current state of lightning. Having attempted to on-board myself through a variety of different means (including a combination of Stadicus and Damian Mee’s guides for Raspberry Pi, Pierre Rochard’s Node Launcher in conjunction with Jack Mallers’ Zap Wallet, OpenNode and Blue Wallet’s custodial solutions, and Casa’s plug and play node), I can definitively say that the lightning network still leaves something to be desired when it comes to UX. The tech is absolutely awesome, but it is certainly still early days and requires a serious desire to transact in order to get up and running.

The easiest by far are the custodial solutions, but they beg the pretty serious question of how they differ from banks. Setting up your own node through Pierre and Casa’s solutions is growing easier by the day, but will still take some time before they catch the attention of the mainstream non-tech savvy individual.

Don’t get me wrong — these projects and guides are pushing the UX front in a way that is on-boarding more users every day, and I recommend you try them all. I’ve learned more by doing than by just reading any blog post or news article. But much of that “doing” has involved making mistakes, breaking things and trying to figure out how to fix them (through hours of google- and stackexchange-fu), and that simply isn’t acceptable for the vast majority of people who have come to expect “plug and play” or “install and go” solutions.

As someone who is curious by nature, the never ending and incessantly developing world of bitcoin, blockchain, and crypto has me hooked (for better or worse). The open discussions on Twitter are mesmerizing and informative (best to read between the trolling and try to learn as much as you can in spite of it), and the community is incredibly supportive (again, ignore the trolling — reach out to people for help and they’ll typically respond positively).

Last but not least, play around with it. This system is new enough that no one really knows where it’s going, and anyone can get involved. Make connections that people haven’t seen before. As I mentioned in the first section, this technology touches on so many different facets of human existence, that it’s only a matter of fitting new pieces together.

Thank you Nic Carter and Manasi Vora for your feedback in writing this post.