Privacy Tools Guide

Running your own Bitcoin full node gives you independent verification of transactions without relying on third-party block explorers. This guide covers the complete setup process for home deployment, from hardware selection through initial synchronization, Tor integration, wallet connection, and ongoing maintenance.

Why Run Your Own Node

When you use a wallet connected to someone else’s node, you trust that node to report accurate information. Your IP address gets linked to your Bitcoin addresses, and transaction queries travel through servers you do not control. A block explorer like Blockstream.info or mempool.space receives your transaction IDs and can correlate them with your IP address. Over time, this creates a metadata trail that undermines the pseudonymous nature of Bitcoin.

A personal full node eliminates these concerns by letting you validate the entire blockchain independently. Your node checks every block, every transaction, and every signature against the consensus rules — no external server can lie to you about your balance or the state of the network.

For developers building Bitcoin applications, a local node provides reliable RPC access for testing and integration work. Power users who value financial privacy gain significant advantages by broadcasting transactions directly from their own infrastructure rather than submitting them through a third-party API.

Privacy Model: What a Node Does and Does Not Protect

Running a full node is not a complete privacy solution on its own. It prevents a block explorer or third-party node from learning your IP address. It does not:

The privacy benefit of a home node is strongest when combined with address hygiene (no address reuse), coin control when spending, and routing your node traffic through Tor.

Hardware Requirements

Bitcoin Core, the reference implementation, stores the complete blockchain. As of early 2026, the database exceeds 600GB. Plan accordingly:

A repurposed desktop computer or small-form-factor PC works well. Raspberry Pi 5 with external SSD can handle pruning modes, but a full archival node needs more hardware. Purpose-built node devices like Umbrel Home or Start9 Embassy simplify setup but cost more than DIY alternatives.

Pruned vs. archival node: An archival node stores the full blockchain history and can serve historical blocks to other nodes. A pruned node validates everything but discards old blocks after verification, keeping only recent data. For personal use — verifying your own transactions — pruning works fine.

Installing Bitcoin Core

Download Bitcoin Core from the official repository:

# Verify the download (instructions from bitcoin.org)
wget https://bitcoin.org/bin/bitcoin-core-27.0/bitcoin-27.0-x86_64-linux-gnu.tar.gz
tar -xzf bitcoin-27.0-x86_64-linux-gnu.tar.gz
sudo cp -r bitcoin-27.0/bin/* /usr/local/bin/

Verify signatures using the provided PGP keys:

# Import maintainer keys and verify
gpg --keyserver hkps://keys.openpgp.org --recv-keys 0x94844409D5BFECCE
gpg --verify SHA256SUMS.asc

The verification step ensures you have not installed tampered software. This step is non-negotiable for financial software — a compromised binary could silently redirect funds.

Initial Configuration

Create a configuration file tailored for privacy and functionality:

mkdir -p ~/.bitcoin
cat > ~/.bitcoin/bitcoin.conf << EOF
# Network settings
listen=1
bind=127.0.0.1

# RPC interface for local access
server=1
rpcuser=bitcoinuser
rpcpassword=generatestrongpassword
rpcallowip=127.0.0.1

# Privacy: disable unnecessary network features
upnp=0
natpmp=0
discover=0
dnsseed=0
dns=0

# Pruning for storage efficiency (set to 0 for archival node)
prune=550

# Logging for debugging
logips=1
logtimestamps=1
EOF

Change rpcpassword to a strong random value. The pruning setting keeps the node functional while limiting disk usage to around 550MB of retained block data.

Starting the Node

Launch Bitcoin Core in the background:

bitcoind -daemon

Monitor progress with:

bitcoin-cli getblockchaininfo

The output shows synchronization status:

{
  "blocks": 892345,
  "headers": 892345,
  "verificationprogress": 0.9999,
  "size_on_disk": 523456789012,
  "pruned": true
}

Initial synchronization takes 2-7 days depending on your hardware and bandwidth. The node downloads and verifies every block since 2009. Do not interrupt this process — partial state can require restarting from scratch.

Set up Bitcoin Core to start automatically on system boot:

sudo nano /etc/systemd/system/bitcoind.service
[Unit]
Description=Bitcoin Core Daemon
After=network.target

[Service]
ExecStart=/usr/local/bin/bitcoind -daemon -conf=/home/yourusername/.bitcoin/bitcoin.conf
ExecStop=/usr/local/bin/bitcoin-cli stop
Restart=on-failure
User=yourusername

[Install]
WantedBy=multi-user.target
sudo systemctl enable bitcoind
sudo systemctl start bitcoind

Verifying Transactions

Once synchronized, verify any Bitcoin transaction independently:

# Get transaction details by txid
bitcoin-cli gettransaction "your-txid-here"

# Look up block height containing your transaction
bitcoin-cli getrawtransaction "your-txid-here" true | grep -A2 blockhash

The true parameter returns decoded JSON with block information. Compare the returned block hash against what your node reports to confirm the transaction reached the blockchain.

To check the number of confirmations:

bitcoin-cli gettransaction "your-txid" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('confirmations','unconfirmed'))"

Broadcasting Transactions

Broadcast transactions directly from your node without using external services:

# Create raw transaction
bitcoin-cli createrawtransaction '[{"txid":"source-txid","vout":0}]' '[{"address":"destination-amount","data":"0000"}]'

# Sign with your wallet
bitcoin-cli signrawtransactionwithwallet "signed-hex"

# Broadcast to network
bitcoin-cli sendrawtransaction "signed-hex"

This flow keeps your transaction within your infrastructure until it reaches peers. Your node propagates it across the network just like any other participant. No third-party service sees your IP address or knows you created the transaction.

Connecting Your Wallet

Link your preferred wallet to your node for enhanced privacy:

Electrum (desktop):

# In Electrum, go to Network > Spv Servers
# Enter: 127.0.0.1:50001:s

Bitcoin Core wallet (built-in):

# Create a wallet
bitcoin-cli createwallet "my-wallet"

# Generate addresses
bitcoin-cli getnewaddress "legacy" "legacy"

The Core wallet provides node integration but lacks some convenience features of modern alternatives. Sparrow Wallet is a recommended alternative — it supports hardware wallets, coin control, and connects to a local node through RPC.

Routing Node Traffic Through Tor

Running your node over Tor hides your home IP address from peers and prevents network-level surveillance of your Bitcoin activity:

# Install Tor
sudo apt install tor

# Add to bitcoin.conf
proxy=127.0.0.1:9050
listenonion=1
torcontrol=127.0.0.1:9051
onlynet=onion

The onlynet=onion setting restricts connections to Tor hidden services only. This is the most private configuration but reduces peer count since fewer nodes operate exclusively on Tor. Remove onlynet=onion if your node cannot find enough peers.

After restarting Bitcoin Core, verify Tor is active:

bitcoin-cli getnetworkinfo | grep reachable

For remote access to your node’s RPC interface without exposing a port on your router, add a Tor hidden service:

# In /etc/tor/torrc, add:
HiddenServiceDir /var/lib/tor/bitcoin-rpc/
HiddenServicePort 8332 127.0.0.1:8332

Network Security

Restrict RPC access to local connections unless you need remote administration:

# Testnet for experimentation
bitcoind -testnet -daemon
bitcoin-cli -testnet getblockchaininfo

Testnet uses a separate blockchain with no real-value coins. Use it for testing wallet integrations, transaction construction, and broadcast workflows before moving to mainnet.

Maintenance and Monitoring

Regular health checks keep your node performing optimally:

# Check peer connections
bitcoin-cli getconnectioncount

# View memory pool size
bitcoin-cli getmempoolinfo

# Rescan after restoring wallet
bitcoin-cli rescanblockchain

Monitor disk usage for pruned nodes:

du -sh ~/.bitcoin/blocks/
bitcoin-cli getblockchaininfo | python3 -c "import sys,json; d=json.load(sys.stdin); print('pruned:', d['pruned'], '| size on disk:', d['size_on_disk'])"

Set up alerts for chain reorganizations or extended downtime:

# Monitor via cron
*/15 * * * * /usr/local/bin/bitcoin-cli getblockcount | mail -s "Node Status" admin@example.com

Frequently Asked Questions

Does running a full node make me an anonymous Bitcoin user? No. A full node protects your IP address from block explorers and third-party nodes. It does not obscure on-chain transaction patterns. Combine it with CoinJoin, address hygiene, and Tor for stronger privacy.

Can I run a node on a VPS? Yes, but a VPS means trusting the hosting provider with your node data. For financial privacy, a home node is preferable because you physically control the hardware.

How much bandwidth does a running node consume after initial sync? An active node uses roughly 20-30GB per month serving blocks to peers. If bandwidth is constrained, set maxuploadtarget=5000 in bitcoin.conf to cap outbound traffic at 5GB per month.

What is the difference between a full node and a mining node? A full node validates blocks and transactions but does not produce new blocks. A mining node does both. Home users running full nodes for privacy purposes do not need mining capabilities.

Built by theluckystrike — More at zovo.one