Run your own Bitcoin node
Every lesson so far said “the network verifies the rules.” But who is the network? It’s the thousands of people running full nodes — and you can be one of them. A full node downloads and independently checks every block and every transaction against the consensus rules. It’s how you personally enforce the 21-million cap and trust no one.
Why run one
- Verify, don’t trust. Your node checks every rule itself. You’re no longer taking a company’s word that a coin is valid or that the supply cap holds — you enforce it.
- Privacy. Point your wallet at your own node and you stop leaking your addresses and balances to someone else’s server.
- Sovereignty. No one can change the rules on you. If a change violates the rules your node enforces, your node simply rejects it.
What you need
Modest hardware: a Raspberry Pi 4/5, an old laptop, or a small server. Roughly 4 GB+ of RAM, and either ~650 GB of disk for a full archival node or as little as ~10 GB if you prune. The one-time initial sync (downloading and verifying the whole chain from the genesis block) takes anywhere from a few hours to a couple of days depending on your machine and connection.
Install Bitcoin Core
Download the binaries for your platform from bitcoincore.org, then — this step is not optional — verify them before you run anything. Bitcoin is about trusting no one, and that includes the download.
# 1. Download the release + the signature files (from bitcoincore.org/en/download)
# e.g. bitcoin-27.0-x86_64-linux-gnu.tar.gz, SHA256SUMS, SHA256SUMS.asc
# 2. Check the file’s hash is listed in SHA256SUMS
sha256sum --ignore-missing --check SHA256SUMS
# 3. Verify SHA256SUMS was really signed by the builders (import their keys first,
# from github.com/bitcoin-core/guix.sigs). This proves the file wasn’t tampered with.
gpg --verify SHA256SUMS.asc SHA256SUMS
# 4. Only now, extract and install
tar -xzf bitcoin-27.0-x86_64-linux-gnu.tar.gz
sudo install -m 0755 bitcoin-27.0/bin/* /usr/local/bin/
Prefer a turnkey route? Projects like Umbrel, Start9, RaspiBlitz and myNode bundle Bitcoin Core (and Lightning) with a friendly interface — a great way to start before you hand-roll your own.
The configuration file: bitcoin.conf
Bitcoin Core reads its settings from a plain text file, by default at ~/.bitcoin/bitcoin.conf (Linux). Here’s a well-commented starting point — every line explains what it does, so you can keep or delete each one deliberately.
# ~/.bitcoin/bitcoin.conf
# --- General ---
server=1 # Accept RPC commands so wallets and tools can control the node
daemon=1 # Run quietly in the background as a service
# txindex=1 # Keep an index of EVERY transaction (needed by explorers/some tools; adds ~50 GB)
# prune=550 # OR: throw away old blocks to save disk (min 550 MiB). Cannot combine with txindex.
# Great for small disks; note a pruned node can’t rescan old history or fully serve Lightning.
# --- RPC access: how wallets and apps talk to your node ---
rpcauth=alice:SALT$HASH # A hashed username/password made by Bitcoin Core’s rpcauth.py — safer than plaintext
# rpcuser=alice # (simpler alternative) plaintext RPC username
# rpcpassword=change-me # (simpler alternative) plaintext password — anyone who has it controls your wallet
rpcbind=127.0.0.1 # Listen for RPC on localhost only
rpcallowip=127.0.0.1 # Accept RPC from localhost only — NEVER expose RPC to the open internet
# rpcport=8332 # RPC port (default 8332 mainnet · 18332 testnet · 18443 regtest)
# --- Peer-to-peer network ---
listen=1 # Accept inbound connections from other nodes (needs port 8333 reachable)
maxconnections=40 # Cap how many peers you connect to
# --- Performance ---
dbcache=2000 # Megabytes of RAM for the UTXO cache. A big cache HUGELY speeds up the initial sync.
# --- ZeroMQ notifications (optional) ---
# zmqpubrawblock=tcp://127.0.0.1:28332 # Push new blocks to subscribers (used by LND, electrs, etc.)
# zmqpubrawtx=tcp://127.0.0.1:28333 # Push new transactions
# Core Lightning polls over RPC and does NOT need ZMQ.
# --- Compact block filters (optional): lets light wallets sync privately from your node ---
# blockfilterindex=1
# peerblockfilters=1
# --- Test networks: safest place to learn. Per-network settings go in a [section]. ---
# signet=1
# [regtest]
# fallbackfee=0.0002 # test chains have no fee market — give wallets a fee to use
rpcauth vs. a plaintext password. Bitcoin Core ships a small script (share/rpcauth/rpcauth.py) that turns a username + password into a salted hash. You put the hash in bitcoin.conf and keep the password out of the file entirely — so a leaked config doesn’t hand over your wallet. Use it in preference to rpcuser/rpcpassword.
Start it and watch it sync
bitcoind # start (daemon=1 sends it to the background)
bitcoin-cli getblockchaininfo # check progress: "verificationprogress" climbs from 0 to 1.0
bitcoin-cli getnetworkinfo # peers, version, reachability
The first sync is the slow part — it is verifying years of history from scratch, precisely so it never has to trust anyone about it. After that, keeping up with a new block every ~10 minutes is effortless.
A running, trusted node is the foundation for Bitcoin’s second layer. Before we install one, though, it’s worth understanding how the Lightning Network actually works — instant, near-free payments built on top of the chain you now verify. That’s next.
Key takeaways
- A full node independently downloads and verifies every block and transaction against the consensus rules — so you enforce Bitcoin’s rules yourself instead of trusting anyone.
- Bitcoin Core is configured via bitcoin.conf; always verify the downloaded binaries (SHA256SUMS + a GPG signature) before running them.
Check yourself
What does running your own full node let you do?
A full node checks every block and transaction against the consensus rules — “don’t trust, verify.” It doesn’t mine or change the supply.
Why GPG-verify SHA256SUMS before installing Bitcoin Core?
Verifying the signature on SHA256SUMS proves the binaries really came from the builders and weren’t swapped by an attacker.
Spotted an error or have feedback on this lesson? Suggest a correction ↗
Comments
Powered by Nostr — reply from any Nostr client, and zap the lesson over Lightning.