Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
On this website you can learn how to:
Create a bitcoin wallet [in progress]
Secure your bitcoins [in progress]
For in-person workshops checkout Bitcoin Network NYC.
Make your own Bitcoin node from source.
This tutorial is for advanced users with good technical skills. For a more guided setup, follow the Umbrel OS tutorial instead.
In this tutorial we setup our own Bitcoin node from scratch! What is covered:
Buy, assemble and flash a Raspberry Pi
Download, compile and install the original Bitcoin Core software
Download, compile and install a modern Electrum server in Rust
Connect your wallets to your node through the Tor protocol
We assume the reader might not own their internet connection or have access to the router's admin interface. Therefore, this guide defaults to a Tor-only setup.
This tutorial would have not been possible without TheRoadToNode and Harry Bawsac.
This page recaps the necessary hardware to run your node from sources.
This is the hardware I use in this tutorial:
Raspberry Pi 5 or Raspberry Pi 4 with 8GB of RAM
2TB portable SSD
You'll find that on Amazon or anywhere else.
Lock your Jade when you're done using it
When you're done you should always lock your Jade.
Simply select Session > Logout:
Now you can power off the Jade by pressing and holding the power button.
Get your own bitcoin lightning wallet on your IPhone or Android.
On your phone, install the following apps:
Now back to your phone:
Start Orbot, wait to be successfully connected to Tor
Open BlueWallet, click on the 3 dots at the top right
Got to Network > Lightning Settings
Scan the LNDHub QR code
and save the changes
You can now create as many Lightning wallets as you’d like from your phone.
Back on the BlueWallet home screen, click the "+" in the top right.
To create a new wallet, select the Lightning
option
You should see your Node URI pre-completed
Click Create
and you’re done, you have a new mobile lightning wallet!
You can share the LNDHub QR code
with friends and family and they will also be able to create wallets and manage their funds.
Friends and family must be aware that the owner of the Lightning node controls the funds in every wallet. If they close all channels, the funds will be withdrawn on-chain to the owner’s wallet.
Congratulations, you are done!
You are now able to send & receive Bitcoin on the Lightning network through invoices.
Make sure to securely backup the wallet connection string.
: An open source mobile wallet that connects to your Lightning node
: Used to connect to Tor (for BlueWallet to reach your node)
On the Umbrel App Store, download the application. Open the application and at the top right, notice the LNDHub QR code
.
Configure and secure Umbrel OS
From a computer on the same network, access your node at http://umbrel.local.
Follow the setup steps. Leave all settings at default and choose a strong password.
For now, the node is only accessible on your home network. To enable remote access from anywhere, we'll use Tor. In Umbrel OS, go to Settings and turn on Remote Tor access.
A .onion address is generated and you can now access your node from anywhere through Tor.
Restore your Jade wallet from your seed phrase
If you had to factory reset your Jade or lost it and had to buy a new one, you can easily restore your wallet as long as you have your seed phrase.
Select Setup Jade > Continue > Begin Setup > Restore Wallet > 12 Words and enter each of your seed works in the correct order.
Then you'll be prompted to pair the Jade with green wallet and setup a new PIN the same way than during the wallet creation step.
Lightning wallets can be recovered with their BlueWallet connection string.
Funds in channels can be recovered using Static Channel Backups (SCBs)
/umbrel/lnd/data/chain/bitcoin/mainnet/channel.backup
Enable sending payments on the Lightning network.
To be able to send payments we must open channels on other nodes and lock BTC.
This is called outbound liquidity, where locked funds are on our side of the channel.
Open the Lightning Node
application. Scroll down and click on + OPEN CHANNEL
.
Copy the Node ID (format pubkey@ip:port
)
Example, Kraken’s Node ID ⇒ 02f1a8c87607f415c8f22c00593002775941dea48869ce23096af27b0cfdcc0b69@52.13.118.208:9735
Select the amount of BTC to be locked in the channel
Adjust the transaction fee (the higher the fee, the faster the channel opens)
It can take anywhere from ~30 minutes to 24 hours.
Download and flash Raspberry Pi OS onto the SSD.
Now connect the portable SSD to your computer and launch the Pi Imager. First you have to select 3 options:
Raspberry Pi Device: Choose Raspberry Pi 5 or Raspberry Pi 4 depending on the model you use.
Operating System: Choose Raspberry Pi OS Lite (64-bit)
Storage: Select your portable SSD
Click on Next. The imager will now show a popup to ask you if you want to apply customisation settings. Click on Edit Settings.
Set a hostname for the Pi on your local network
Set a username and password (this will create a new user)
Add your Wi-fi settings (that way the Pi will auto-connect at boot)
Set locale settings by inputing your timezone and keyboard layout
In the previous tab, we ensured the creation of a new user and automatic Wi-Fi connection at boot. In this tab, we will set up an SSH service to enable direct login to the Pi after it boots.
We won't use password authentication. It's better practice and safer to use public-key authentication.
First we must generate a pair of keys for our user:
Next we must copy the content of the public key (*.pub
). Now in the Services tab of the Pi Imager:
Click Enable SSH
Choose Allow public-key authentication only
Copy the content of the public key
Click Save, we are now done with the customizations.
Back on the customisation popup, click Yes to apply the settings you just inputed. Click Yes again to flash the OS onto the SSD.
Once it's done, safely eject the SSD from your computer.
Make sure to safely backup your user credentials and your SSH private key.
Update the operating system
Do this frequently:
Funds can be recovered using the .
Find a well-connect node
In our example, Kraken has a 0.01 BTC
minimum requirement ()
To flash the OS onto the portable SSD we will use a software utility called Raspberry Pi Imager. You can download it .
ssh-keygen -t ed25519 -C "[email protected]"
sudo apt update && sudo apt upgrade -y
Connect your wallet to your Bitcoin node via the Electrum server.
Open Electrs, you'll notice 2 methods of connecting: Local Network and Tor.
If you connect via local network, your wallet won’t be able to reach your node when you leave home. In addition SSL is disabled by default which means your data transits in clear on your local network.
Unless you do the above by yourself, I would recommend to avoid connecting this way. Your ISP and unexpected network guests could spy on you.
Tor is excellent for security and privacy. Additionally, by having our Electrum server behind an onion hidden service, we benefit from:
End-to-end encryption
Client and server anonymization
Make sure your wallet supports connecting to Electrum servers. Most wallets do.
The setup is simple: just add your Electrum server's address and port to your wallet's node settings.
If you're connecting through Tor, you'll likely need to configure your wallet to use Tor's proxy (127.0.0.1:9050) and ensure Tor is running (unless your wallet comes bundled with it).
Assemble the node's hardware.
Plug the portable SSD into a USB 3.0 port on the Pi, then connect the Pi to power. Wait approximately 10 minutes for the installation process and the first boot to complete.
Connect wallets to your node
To connect your wallet to your node, simply add your Electrum server's address and port in the wallet's network settings.
You will find your Electrum server's address here:
sudo cat /var/lib/tor/electrs_hidden_service/hostname
The port is 50001 unless you specified otherwise.
When connecting your wallet, ensure Tor is enabled (or bundled with your wallet); otherwise, you won’t be able to access your node.
Setup your own Bitcoin node on a raspberry pi the easy way by leveraging Umbrel, a home server OS. This tutorial will also cover the installation of an Electrum server to easily connect your wallets.
This tutorial is ideal for beginners with basic or limited technical skills.
Setup your own lightning node (bitcoin layer 2) for instant and low cost transactions.
Before setting up Lightning, you need a fully synchronized Bitcoin node up and running. You can find tutorials on how to do this here.
The way you have set up your Bitcoin node will determine which Lightning node tutorial you should follow from the options below.
We will cover two methods of setting up your own Lightning node:
The advanced way from sources
Assemble the node's hardware
Make sure you got everything from the Hardware list. Then assemble it as follow:
Insert the microSD card into the Raspberry Pi.
Connect the SSD to the Raspberry Pi via a USB 3.0 port.
Use an RJ45 cable to connect the Raspberry Pi to your modem/router.
Plug in the Raspberry Pi’s power supply.
Once the Pi boots, wait for 10 minutes for Umbrel OS to install.
This page recaps the necessary hardware to setup your node with Umbrel.
This is the hardware I use in this tutorial.
Raspberry Pi 4 or 5, with 8GB of RAM
2TB external SSD with USB connectivity
32GB micro SD card
micro SD adapter
RJ 45 cable
You'll find that on Amazon or anywhere else.
Eventually you can also buy a protective case for the pi.
Setup a bitcoin hardware wallet with Blockstream's Jade.
Jade wallet is designed and manufactured by Blockstream, a company founded by Adam Back.
The Jade is 100% open source:
Enable receiving payments on the Lightning network.
For us to receive payments, other nodes must open channels to our node & lock BTC.
This is inbound liquidity, where locked funds are on the other side of the channel.
Select how much BTC you want LNBig to lock into the channel
The larger the channel, the higher the opening fee LNBig charges
Make a pre-payment via lightning
Enter your Lightning Node ID, which is exposed via Tor. To find it:
In Umbrel open the Lightning Node
application
Click the three dots on the top right side
Click on Node ID
Select Network > Tor
and copy the the Node ID
LNBig will now attempt to connect to your node; this may take some time
As soon as you’re done, you’ll see the incoming channel from LNBig opening.
Update Bitcoin Core to newer version
Verify what your current version is:
Fetch the latest changes:
Show the latest version tags:
Switch to the latest stable version:
Clear files and outputs from the previous build process:
Now create the configuration files:
Use one of the following two commands to apply the configuration files:
Compile the source code:
Once the compilation is done, we stop Electrs and bitcoind:
Now we can update the binaries system-wide:
Finally we can restart bitcoind and Electrs:
You can check your new version with:
Download and flash Umbrel OS on the micro SD
Download either umbrelos-pi4.img.zip or umbrelos-pi5.img.zip depending on your pi model.
Once it's downloaded, unzip it and find the .img file.
Connect the micro SD to your computer via the adapter. Next, find your micro SD block device name:
We assume it's /dev/sda
for this tutorial but make sure to replace by yours.
If the micro SD was automatically mounted, ensure you unmount it along with any potentially mounted partitions. For example:
Now we can flash the .img into the micro SD:
Wait for the prompt to return, this can take a while. Once finished you can safely eject the micro SD.
Update Rust to newer versions
If Rust and Cargo binaries aren't in your path, run:
Update Rust and Cargo:
Update rustup:
Check the new versions:
Now, update all packages installed with Cargo by running:
If you encounter an error because cargo-update
is not installed, install it using:
Login into the Raspberry Pi via SSH.
You can now connect to your Pi via SSH using the private key you created previously:
or
List of the necessary hardware.
For this tutorial, we use the original Jade wallet, which can be purchased from Blockstream's shop:
The Jade comes with a battery. To charge it, you can use the provided USB to USB-C cable.
Make sure your Jade has enough battery before starting this tutorial.
Update Node.js to newer versions
Update Node.js to the latest version:
Update npm to the latest version globally:
Update all globally installed npm packages:
Setup an Electrum server with Electrs.
An Electrum server is an indexing layer built on top of Bitcoin Core. It enables more efficient blockchain queries and easier wallet connections. Most wallets support Electrum connections.
The electrum server syncs and re-indexes the blockchain to enable more efficient queries. This process will take approximately 12 hours to complete.
Setup your own Lightnin node on a raspberry pi the easy way by leveraging Umbrel, a home server OS. This tutorial will also cover the setup of a mobile
Manage the process of updating all programs to their latest stable version
Unless you know other node operators who are willing to open a channel to your node, we’ll use a service called . With LNBig, you can have inbound channels opened to your node in exchange for a small fee.
To purchase am inbound channel, go to and follow the steps below:
LNBig may ask you to to their node first before they open one on yours. This is usually required only the first time.
For more details and context on this process, refer to the .
Download Page ⇒
Windows & MacOS users can use instead and follow .
Alternatively, for more security, you can purchase a or use a to avoid connecting to a PC.
Download on the Umbrel app store. It's a Rust implementation of Electrum server (). Then launch it, leave all settings at default and let it synchronize with the blockchain.
This tutorial assumes you have already set up a fully synchronized Bitcoin node with Umbrel OS with .
bitcoind --version
cd ~/bitcoin
git fetch --all
git describe --tags `git rev-list --tags --max-count=20`
git checkout -f <version-tag>
make clean
./autogen.sh
./configure --without-gui # OPTION 1: Wallet functionalty enabled
./configure --without-gui --disable-wallet # OPTION 2: Wallet functionality disabled
make -j $(nproc)
sudo systemctl stop electrs.service
sudo systemctl stop bitcoind.service
sudo make install
sudo systemctl start bitcoind.service
sudo systemctl start electrs.service
bitcoind --version
lsblk -o NAME,FSTYPE,FSSIZE,FSAVAIL,MOUNTPOINT
sudo umount /dev/sda1
sudo umount /dev/sda2
sudo umount /dev/sda
sudo dd if=/home/alex/Downloads/umbrelos-pi4.img of=/dev/sda bs=1M status=progress
. "$HOME/.cargo/env"
rustup update
rustup self update
rustc --version
cargo --version
rustup --version
cargo install-update -a
cargo install cargo-update
ssh -i your_private_key [email protected]
ssh -i your_private_key username@IP
sudo apt update && sudo apt upgrade -y nodejs
sudo npm install -g npm@latest
sudo npm update -g
Compile and install Bitcoin Core from sources to spawn your node.
First clone the repo:
cd ~
git clone https://github.com/bitcoin/bitcoin.git
Next we need to make sure to use the latest stable version. To find it, list the latest tags:
cd bitcoin/
git describe --tags `git rev-list --tags --max-count=20`
The output will look like this:
v28.1
v28.1rc2-6-g36314b8da2
v28.1rc2-5-g58910279dc
v28.1rc2-4-g6a68ef9bfb
v28.1rc2-3-g5b368f88a9
v28.1rc2-2-g05cd448e33
v28.1rc2-1-g621c634b7f
v28.1rc2
v28.1rc1-10-g5576618152
v28.1rc1-9-g01fe07a2ce
v28.1rc1-8-g7ddfcf32da
v28.1rc1-7-ge0b27b234c
v28.1rc1-6-gbdc6b3e531
v28.1rc1-5-ga0585b6087
v28.1rc1-4-gbbde830b97
v28.1rc1-3-g227642d5af
v28.1rc1-2-gb8112cf422
v28.1rc1-1-g2835158be0
v28.1rc1
v28.0-15-g8fef83a0a0
From top (newest) to bottom (oldest) tags, the latest stable version is v28.1.
Now we can switch to that version:
git checkout <version-tag> # Example: git checkout v28.1
Create the configuration files:
./autogen.sh
Use one of the following two commands to apply the configuration files:
./configure --without-gui # OPTION 1: Wallet functionalty enabled
./configure --without-gui --disable-wallet # OPTION 2: Wallet functionality disabled
Now compile the source code:
make -j $(nproc)
On Raspberry Pi the compilation process can take a while to complete.
Finally, copy the binaries to system-wide directories:
sudo make install
Setup the Lightning node with LND.
Go to the Umbrel app store and install the Lightning node application. This app is a GUI for the Lightning Network Daemon (LND), the most common Bitcoin Lightning implementation. Launch the application and leave all settings at default.
You will get prompted to link a wallet to the node. You can use an existing wallet or create a new one.
The Lightning Node needs a Bitcoin wallet to manage funds and open channels.
If you create a new one, make sure to safely backup your seed.
Update Electrs to newer versions
Make sure to update Rust first before proceeding.
Fetch the latest changes:
cd ~/electrs
git fetch --all
Show the latest version tags:
git describe --tags `git rev-list --tags --max-count=20`
Switch to the latest stable version:
git checkout -f <version-tag>
Stop Electrs:
sudo systemctl stop electrs.service
Source the env file and compile
. "$HOME/.cargo/env"
cargo build --locked --release
Start electrs:
sudo systemctl start electrs.service
Verify the new version:
~/electrs/target/release/electrs --version
Add bitcoin liquidity to the Lightning node
We must fund our node to enable sending and receiving payments on the Lightning Network.
Open the Lightning Node
application. Under the Bitcoin Wallet
section, click Deposit
. You can now send some bitcoin to the address displayed.
Connect your Jade to the Green Wallet mobile application via Bluetooth.
The Jade supports multiple modes:
Bluetooth: Wireless connection to the Green Wallet app on your phone.
USB: Direct connection to your computer using a cable.
QR: Air-gapped communication by scanning QR codes.
Micro SD: Air-gapped communication by using microSD cards.
For this tutorial we will focus on the Bluetooth mode because it is the easiest to setup. Future tutorials will cover the other modes.
Before you get started with the tutorial, install Green wallet on your phone:
This wallet is fully open source:
Update BTC RPC Explorer to newer versions.
Make sure to Node.js first before proceeding.
Fetch the latest changes:
cd ~/btc-rpc-explorer
git fetch --all
Show the latest version tags:
git describe --tags `git rev-list --tags --max-count=20`
Switch to the latest stable version:
git checkout -f <version-tag>
Stop BTC RPC Explorer:
sudo systemctl stop btc-rpc-explorer.service
Update the dependencies:
npm update
Install the updates:
npm install
Once it's done, you can start BTC RPC Explorer again:
sudo systemctl start btc-rpc-explorer.service
Set up the Bitcoin node with Bitcoin Core
Go to the Umbrel app store and download the Bitoin Node application. This app is pretty much a wrapper of Bitcoin Core with a very nice GUI (sources here).
Launch it and go through the setup by simply leaving all settings at default. Your node will now connect to remote peers to download and verify the entire blockchain.
Even with a great internet connection this will take from a few days to a week to complete. If you sync through Tor-only this can take even longer.
Unlock your Jade to send and receive bitcoins.
Anytime you want to use your wallet to send or receive bitcoins you will have to unlock it.
Press and hold the power button to turn on the Jade. Then select Unlock Jade:
Now on your phone, open Green Wallet and proceed with Bluetooth pairing using the same method as for the wallet creation in the previous step. Once the pairing is complete, you will be prompted to enter your PIN on your Jade.
Once you've entered your PIN, your Jade is unlocked and you can use the mobile app to send and receive BTC.
Receive bitcoin on your Jade wallet.
To receive Bitcoin, simply hit Receive at the bottom right of Green wallet:
Share the QR code or Bitcoin address to the sender. Once the funds are sent, the incoming transaction should show up pretty quickly in Green wallet.
Install an Electrum server with Electrs.
An Electrum server is an indexing layer built on top of Bitcoin Core. It enables more efficient blockchain queries and easier wallet connections. Most wallets support Electrum.
Clone the repo:
Source the env file to update your $PATH with Rust & Cargo binaries:
Now you can compile electrs:
Once it's done, test the compilation was successful by checking the version:
Create the configuration file:
Add the following configuration to the config.toml file we just created:
daemon_rpc_addr: Bitcoin JSON-RPC API address and port.
daemon_p2p_addr: Bitcoin P2P address and port.
db_dir: Directory where Electrs store its index file.
electrum_rpc_addr: Electrum will run only on localhost, on port 50001.
We need to create a Tor hidden service to connect our wallets to the Electrum server. Edit the conf file:
Add the following:
Save it then restart tor:
Create the service file:
Add the following:
Line 6,7,8 and 9 make sure to replace your_user by your own user. Finally, reload systemd:
Configure Electrs to automatically start at boot:
Start Electrs:
Electrum will now connect to Bitcoin Core to build its own index of the blockchain.
Indexing is in progress. This operation may take 12 to 24 hours to complete.
Check the logs and monitor progress in real time:
Send bitcoin from your Jade wallet.
To send Bitcoin, hit Send at the bottom left of Green wallet:
Next, enter the recipient's bitcoin address or scan the QR code and hit Next:
Select the amount of bitcoin you wish to send and hit Next:
Slide to send the transaction:
You are now informed that you must confirm the transaction on your Jade:
Review the transaction:
And finally, confirm it:
On Green wallet you should see a confirmation that the transaction has been sent:
In this section we learn how to setup our own bitcoin node with different methods.
We will cover two methods of setting up your own bitcoin node:
In this section we explore different miners you can run at home:
We're going to use , a Rust implementation of an Electrum Server.
Make sure .
Make sure your node is before proceeding.
With the configuration below the Electrum server will be accessible only on localhost and on the Tor network. Refer to if you wish to also expose your node via IPv4/IPv6.
cookie_file: Electrs can use the Bitcoin JSON-RPC API with .
cd ~
git clone https://github.com/romanz/electrs.git
. "$HOME/.cargo/env"
cd electrs
cargo build --locked --release
~/electrs/target/release/electrs --version
mkdir ~/.electrs && mkdir ~/.electrs/db && touch ~/.electrs/config.toml
cookie_file = "/home/alex/.bitcoin/.cookie"
daemon_rpc_addr = "127.0.0.1:8332"
daemon_p2p_addr = "127.0.0.1:8333"
db_dir = "/home/alex/.electrs/db"
network = "bitcoin"
electrum_rpc_addr = "127.0.0.1:50001"
log_filters = "INFO"
sudo vim /etc/tor/torrc
HiddenServiceDir /var/lib/tor/electrs_hidden_service/
HiddenServicePort 50001 127.0.0.1:50001
sudo systemctl restart tor
sudo vim /etc/systemd/system/electrs.service
[Unit]
Description=electrs
Requires=bitcoind.service
After=bitcoind.service
[Service]
WorkingDirectory=/home/your_user/electrs
ExecStart=/home/your_user/electrs/target/release/electrs
User=your_user
Group=your_user
Type=simple
Restart=on-failure
TimeoutSec=120
RestartSec=30
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable electrs.service
sudo systemctl start electrs.service
journalctl -u electrs.service -f
Update the system and install dependencies before compiling Bitcoin Core.
sudo apt update && sudo apt upgrade -y
In the SSH configuration, make sure password login is disabled (PasswordAuthentication no
)
sudo cat /etc/ssh/sshd_config | grep PasswordAuthentication
We need to setup a firewall to restrict inbound traffic for our node.
First we install it:
sudo apt install ufw
By default ufw
denies all incoming traffic so we must allow inbound SSH traffic before we enable it:
sudo ufw allow 22/tcp
Now we can enable the firewall:
sudo ufw enable
We can check the status with those commands:
sudo ufw status
sudo ufw status verbose
Install Tor:
sudo apt install tor
Add your user:
sudo usermod -a -G debian-tor your-user
You must log out and log back in for the changes to take effect.
Finally we can enable Tor at boot and start it:
sudo systemctl enable tor
sudo systemctl start tor
The following packages will be needed to install Bitcoin Core:
sudo apt install git automake autoconf autotools-dev build-essential cmake make pkg-config protobuf-compiler libminiupnpc-dev libprotobuf-dev libdb++-dev libzmq3-dev libsqlite3-dev libboost-thread-dev libboost-test-dev libboost-all-dev libevent-dev libtool libssl-dev libboost-system-dev libboost-filesystem-dev
The steps to install Node.js 23 are detailed here.
Install curl:
sudo apt install curl
Download the setup script:
curl -fsSL https://deb.nodesource.com/setup_23.x -o nodesource_setup.sh
Run it:
sudo -E bash nodesource_setup.sh
Install node:
sudo apt install nodejs
Verify the installation:
node -v
And also update npm to the latest version:
sudo npm install -g npm@latest
Install dependencies:
sudo apt install -y clang cmake
Install Rust and Cargo:
curl https://sh.rustup.rs -sSf | sh
Start your Bitcoin node and download the blockchain.
Configure bitcoind to automatically start at boot:
sudo systemctl enable bitcoind.service
Start bitcoind:
sudo systemctl start bitcoind.service
Your node will now connect to other peers to download and verify the entire blockchain, block by block, starting from the genesis block on January 3, 2009.
Sync is in progress. This operation may take 3 to 7 days to complete.
To view the Bitcoin Core logs:
tail -f ~/.bitcoin/debug.log
You can monitor progress live by checking for height= or progress=.
bitcoin-cli is part of Bitcoin Core and serves as a command-line interface for the JSON-RPC API.
You can use it to monitor the status of your node and the synchronization progress:
bitcoin-cli -getinfo
You can use it to check your integration with the P2P network:
bitcoin-cli getnetworkinfo
If you're using Tor, note in the output how Bitcoin used the Tor control port to create an onion service for P2P on port 8333.
[...]
"localaddresses": [
{
"address": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.onion",
"port": 8333,
"score": 4
}
[...]
Get the current block height:
bitcoin-cli getblockcount
Get some blockchain statstics:
bitcoin-cli getblockchaininfo
Once fully synchronized, edit Bitcoin's config file located at ~/.bitcoin/bitcoin.conf
, and lower the value of dbcache
to 500. Then, restart Bitcoin:
sudo systemctl restart bitcoind.service
Create your own Bitcoin wallet to store, send and receive bitcoins.
Bitcoin wallets:
Jade Hardware Wallet
Get started with mining Bitcoin
You can learn how to mine bitcoin remotely using managed solution or how to mine at home using open source miners.
Install BTC RPC Explorer on your Bitcoin node.
BTC RPC Explorer is essentially a web GUI for the Bitcoin JSON-RPC API. It is highly useful for node monitoring, management, and as a blockchain explorer.
Clone the repo:
cd ~
git clone https://github.com/janoside/btc-rpc-explorer.git
cd btc-rpc-explorer/
Show the latest version tags:
git describe --tags `git rev-list --tags --max-count=20`
Switch to the latest stable version:
git checkout -f <version-tag>
Update local dependencies within version ranges specified in package.json:
npm update
Install:
npm install
If you get an error try updating the following packages to their latest version instead:
npm install zeromq@latest
npm install nan@latest
Then try installing again:
npm install
Create the config file:
touch .env
Add the following:
BTCEXP_HOST=192.168.1.52
BTCEXP_PORT=3002
BTCEXP_BITCOIND_HOST=127.0.0.1
BTCEXP_BITCOIND_PORT=8332
BTCEXP_BITCOIND_COOKIE=/home/your_user/.bitcoin/.cookie
BTCEXP_BITCOIND_RPC_TIMEOUT=5000
BTCEXP_PRIVACY_MODE=true
BTCEXP_BASIC_AUTH_PASSWORD=your_secure_password
BTCEXP_ADDRESS_API=electrum
BTCEXP_ELECTRUM_SERVERS=tcp://127.0.0.1:50001
BTCEXP_HOST: Replace with your Pi's local IP to make BTC RPC Explorer accessible on your LAN.
BTCEXP_BITCOIND_COOKIE: Update the path with your own user.
BTCEXP_BASIC_AUTH_PASSWORD: Set a strong password to secure access.
Create the service file:
sudo cat /etc/systemd/system/btc-rpc-explorer.service
Add the following:
[Unit]
Description=BTC-RPC-Explorer
Requires=electrs.service
After=electrs.service
[Service]
WorkingDirectory=/home/your_user/btc-rpc-explorer
ExecStart=npm run start
User=your_user
Group=your_user
Type=simple
Restart=on-failure
TimeoutSec=120
RestartSec=30
[Install]
WantedBy=multi-user.target
Line 6,8 and 9 make sure to replace your_user by your own user.
Finally, reload systemd:
sudo systemctl daemon-reload
Configure BTC-RPC Explorer to automatically start at boot:
sudo systemctl enable btc-rpc-explorer.service
Start BTC-RPC Explorer:
sudo systemctl start btc-rpc-explorer.service
Access BTC RPC Explorer at http://NODE-IP:3002 from any device on your LAN.
You'll see a popup asking you to enter a username and password. The username doesn't matter; just use the password you set up in the .env
file.
The page /node-details
of BTC RPC Explorer throws an error. I suck at coding but I was able to fix it with ChatGPT.
Edit the below file:
vim views/node-details.pug
At line 29, replace this block of code:
if (getblockchaininfo.warnings && getblockchaininfo.warnings.trim().length > 0)
+contentSection("Active Warnings")
if (getblockchaininfo.warnings && getblockchaininfo.warnings.trim().length > 0)
span.text-danger #{getblockchaininfo.warnings}
else
span.text-success None
By this one:
if (getblockchaininfo.warnings)
+contentSection("Active Warnings")
if (getblockchaininfo.warnings)
span.text-danger #{getblockchaininfo.warnings}
else
span.text-success None
(Basically I removed getblockchaininfo.warnings.trim().length > 0 in both if statements).
This is a dirty DIY way of patching it, but it does the job lol.
Make sure to restart BTC RPC Explorer and the page should be working:
sudo systemctl restart btc-rpc-explorer.service
I personally wouldn't risk exposing this app to the outside world. It has some bugs, is vulnerable to brute-force attacks, and stores the password in a plain text .env
file.
If I ever do, I will ensure that the features enabling manual Bitcoin JSON-RPC API calls are disabled.
Create a new Bitcoin wallet with the Jade
Press and hold the power button to start the Jade.
Select Setup Jade > Continue > Begin Setup:
Next select Create Wallet > Continue:
Write down your seed words on a piece of paper or another non-digital medium.
The seed consists of 12 words, with 4 displayed per screen. Use the arrows at the top to navigate between pages and verify that you've correctly written down your seed. Your seed phrase is your only way to recover your funds if you lose your Jade.
Next, go through the seed verification process by confirming a few words:
Next we must select the connection mode we will use with the Jade. Choose Bluetooth:
Notice your device name, here Jade 800E88:
Now open Green wallet on your phone, accept the terms & conditions and choose On Hardware Wallet:
Next click on Connect Jade:
Select your Jade wallet:
If prompted, allow bluetooth pairing and take note of the code:
On your Jade, make sure that the code is the same and confirm authentication:
Your Jade and Green wallet should now be paired. Hit Continue:
You should now see a screen prompting you to create a PIN. Hit Continue:
On your Jade you should now be prompted to choose a PIN:
Take note of this PIN and store it safely, you won't be able to unlock your Jade without it.
Back on Green wallet, you should see a success screen. Now Hit Create Account:
Choose Standard:
Your Bitcoin wallet is now ready to send and receive BTC!
Mine Bitcoin remotely with no hardware setup or maintenance, using managed solutions.
With remote mining you can get into Bitcoin mining without worrying about hardware installation and maintenance.
For short term ROI, you're better of buying Bitcoin directly. Long term, I believe it has 2 benefits:
Diversification: In terms of energy flow, I like the idea of a small continuous amount of Bitcoin flowing into my wallet. I believe in redundancy and I don't want 100% of my Bitcoin sitting in cold storage.
Acquisition: Getting your hands on new Bitcoins could become much harder as countries fomo into it. The available supply of BTC on exchanges is continuously decreasing:
Below are the most important costs to consider before you start mining Bitcoin remotely:
Hardware cost (A single miner costs thousand of dollars)
Energy cost (expressed in dollar per kilowatt-hour, or in short $/kWh)
Management fee (mining farms can charge you an extra fee for hardware maintenance)
When buying a new Bitcoin miner, there are 2 important things you must consider.
The computational power of a Bitcoin miner is measured by its hasharate. The hashrate indicates how many hashes per second the miner can compute.
In 2025, the hashrate is commonly expressed in terahashes per second (TH/s).
1 TH/s = 1 trillion hashes per second
For example, the Antminer S21 Pro has a hashrate of 234 TH/s.
The efficiency of a miner is measured by how much energy the miner needs to consume to compute 1 terahash (TH). It's usually expressed in joules per terahash (J/TH) or watt per terahash (W/TH).
Efficiency (J/TH or W/TH) = Power (W) / Hashrate (TH/s)
Example, the S21 Pro has a hashrate of 234 TH/s and a power of 3510 W
3510 / 234 = 15
The S21 Pro has an efficiency of 15J/TH which is Tier 1 (excellent).
You need to find the best combination of hashrate and efficiency for your budget.
This is a more complex topic for which I will make a dedicated section. Roughly speaking, 3 key factors will impact your day to day profitability:
Fluctuations in the price of Bitcoin
Fluctuations in your electricity bill
Flucutations in the mining difficulty
Miners must also consider halvings, which occur approximately every four years and reduce the block reward by half.
To start mining Bitcoin remotely you need to find a farm where you can buy or rent Bitcoin miners. You must also make sure that they offer managed services (miners setup & maintenance).
So far I found one reliable farm but I will update this page when I find more.
Cyberian Mine is a german company with mining farms located in Siberia (Russia).
Cheap cost per kWh (as I write this, $0.0608/kWh)
Recent hardware
Quick onboarding (same-day)
Lifetime hosting contract (you don't pay for hardware repair or replacement)
Stable hashrate (you keep earning during repairs/replacements)
Almost all cryptos are accepted for payment
New farm locations opening in Ethiopia and USA
No management fee
Awesome team and fast support
You can buy partial miners (e.g. 1/10 of an Antminer T21)
You can resell your hardware instantly (at a discount) or on their marketplace
Miners are more expensive (to cover for the lifetime warranty, automatic failover & 0 mngmt fees)
They only mine on F2Pool and the minimum payout is 0.005 BTC
You have a claim to the miner but do not own it physically (it cannot be shipped to you)
Location (Russian laws & regulations can be unstable and change quickly)
Create an account
Fund your account with crypto or fiat
Go to the store
Buy a full or partial miner
Wait a few hours for your miner to go live
Cyberian charges daily for the electricity (called the hosting fee). Make sure you keep enough cash in your balance to avoid interruptions.
Once your miner is live, you're able to see your performance metrics:
More metrics are also available on your Cyberian Dashboard, such as the hashrate report, Bitcoin earnings and pool payout schedule. You will also find your invoices for the electricity (hosting fee) with a daily breakdown in your profile's settings.
In your profile's personal data, make sure to add your Bitcoin wallet address for the payouts.
If you keep more than 500 euros in your balance, you get hosting discounts.
Cyberian has a great telegram channel for support and updates.
Configure Bitcoin Core before starting your node.
Let's create the needed files:
Add the following configuration to the bitcoin.conf
file we just created:
Bitcoin provides a control interface via a JSON-RPC API on port 8332. We enabled with server=1
in the bitcoin.conf
file.
Other locally running applications that need to interact with Bitcoin's JSON-RPC API will use the cookie located at ~/.bitcoin/.cookie
.
If you ever want to connect remotely running applications to the JSON-RPC API, you can create a set of credentials with the command below:
Verify the output and append the mentioned line to the bottom of the bitcoin.conf
file.
Save the plain text password securely because the line added to bitcoin.conf
contains only the hash.
Bitcoin Core and other applications you install will heavily rely on Tor to connect with peers and ensure our wallets remain accessible. Proper configuration is critical.
Edit the configuration file:
Add the following lines:
SocksPort ⇒ SOCKS proxy, routes traffic through the Tor network
ControlPort ⇒ Allows other programs to interact with the Tor daemon
CookieAuthentication ⇒ Requires local cookie authentication to access the control port (/run/tor/control.authcookie)
CookieAuthFileGroupReadable ⇒ Only users in the debian-tor
group can authenticate with the cookie
Exposing the RPC API is not recommended unless you fully understand the risks. It is a prime target for brute-force attacks and zero-day exploits. If compromised, an attacker could steal your Bitcoin.
Bitcoin Core's main program is bitcoind
(short for Bitcoin Daemon). We will configure it as a systemd
service to simplify management:
Add the following:
In User=, replace your_user with your own user
Do the same in the path of PIDFile=
Verify the path of ExecStart= by running the command which bitcoind
Finally, reload systemd:
With the configuration below the node will be accessible only on localhost and on the Tor network. Refer to if you wish to also expose your node via IPv4/IPv6.
As configured, the JSON-RPC API is accessible only from localhost. To expose this port externally, you can , but as mentioned above it's not recommended.
cd ~
mkdir ~/.bitcoin
touch ~/.bitcoin/bitcoin.conf
# Enable JSON-RPC API on port 8332
server=1
# Restrict JSON-RPC API to localhost only
rpcbind=127.0.0.1
rpcallowip=127.0.0.1
# Run Bitcoin Core as a background daemon
daemon=1
# Accept incoming P2P traffic (port 8333) to be a full participant in the network
# If set to 0, other nodes can't sync from us, but we can still sync from them
listen=1
# Keep full index of all transactions, not just those of the node's wallet.
# Uses more space but allows querying any transaction by its txid
# We need it if we want to run an Electrum Server or a blockchain explorer
txindex=1
# Cache size in MBs. Lower it to 500 after the first blockchain sync is complete.
dbcache=3000
# Run the node **only** on the Tor network
onlynet=onion
proxy=127.0.0.1:9050
bind=127.0.0.1
# Use native segwit addresses by default
addresstype=bech32
changetype=bech32
python3 ~/bitcoin/share/rpcauth/rpcauth.py <username-of-your-choice>
sudo vim /etc/tor/torrc
SocksPort 9050
ControlPort 9051
CookieAuthentication 1
CookieAuthFileGroupReadable 1
sudo vim /etc/systemd/system/bitcoind.service
[Unit]
Description=Bitcoin Daemon
After=network.target
[Service]
User=your_user
PIDFile=/home/your_user/.bitcoin/bitcoind.pid
ExecStart=/usr/local/bin/bitcoind
Restart=always
TimeoutSec=120
RestartSec=30
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
Bitaxe miners are quiet, cool, low-power, and fully open-source Bitcoin miners that you can run at home.
The official website explains it perfectly ⇒ https://bitaxe.org/
Bitaxe is a Bitcoin miner based on an open-source design and a modern mining ASIC, offering efficiency and customization for users.
The open-source nature allows users to inspect, modify, and enhance the hardware and software to optimize performance based on specific needs or mining environments. Bitaxe is ideal for miners looking for greater control over their operations while contributing to the decentralization of the Bitcoin network.
To me, this project is all green lights. Both the hardware and firmware are open source. You can run them at home, they won't take much space, won't consume much power and won't make much noise.
Initiatives like this help the fight against mining centralization. You can make a donation here.
There are several Bitaxe models:
1 x BM1370
~ 1.2 TH/s
Antminer S21 Pro
1 x BM1368
~ 700 GH/s
Antminer S21
1 x BM1366
~ 500 GH/s
Antminer S19XP
1 x BM1397
~ 300 GH/s
Antminer S17
6 x BM1368
~ 4.2 TH/s
Antminer S21
6 x BM1366
~ 3 TH/s
Antminer S19XP
Some of those models are still under development and receiving revisions. You can find more details on Bitaxe's official website.
You can find a list of vendors here.
Remember: Bitaxe miners are 100% open source. Performances should remain consistent regardless of the vendor, though slight variations in assembly and design may occur.
You are also free to purchase all the parts and assemble your miner yourself.
Once you've received or assembled your Bitaxe, you can set it up and start mining.
Bitaxe is under active development, with new features and bug fixes frequently released. In addition to your model, you must also note your version/revision number to ensure you flash the correct firmware in the next steps.
In my case, my model is a Bitaxe Supra. My version/revision number is 401. It can be found on the Bitaxe's motheboard:
Go to this page and download the latest stable firmware for your model and version. In my case:
esp-miner-factory-401-v2.5.0.bin
This file contains:
The bitaxe firmware
The web UI (to interact with and configure your Bitaxe)
A default configuration
Plug your Bitaxe into power, then connect it to your PC using a USB-A to USB-C cable.
When I use a USB-C to USB-C cable (since my PC also has USB-C ports), the Bitaxe is not detected. I'm forced to connect it to my PC with USB-A for it to be detected.
To identify your Bitaxe's device file, run the following command in your terminal:
sudo dmesg | grep tty
You should see an output similar to this:
[66383.261520] cdc_acm 3-3.2:1.0: ttyACM0: USB ACM device
In my case, this indicates that the miner's device file is /dev/ttyACM0
Create a working directory for the flashing process:
mkdir flashing_bitaxe && mv ./esp-miner-factory-401-v2.5.0.bin flashing_bitaxe/ && cd flashing_bitaxe
Next we install the flashing software bitaxetool in a python virtual environment:
python3 -m venv venv
source venv/bin/activate
pip install --upgrade bitaxetool
We must also create a config file. You can find templates with default values for each model here.
Here is the template for the Supra 401, also shown below:
key,type,encoding,value
main,namespace,,
hostname,data,string,my-super-bitaxe
wifissid,data,string,wifi-name
wifipass,data,string,wifi-password
stratumurl,data,string,public-pool.io
stratumport,data,u16,21496
stratumuser,data,string,replace-this-with-your-btc-address.my_super_bitaxe.my-super-bitaxe
stratumpass,data,string,password1234
fbstratumurl,data,string,solo.ckpool.org
fbstratumport,data,u16,3333
fbstratumuser,data,string,replace-this-with-your-btc-address.my_super_bitaxe.my-super-bitaxe
fbstratumpass,data,string,password1234
asicfrequency,data,u16,490
asicvoltage,data,u16,1166
asicmodel,data,string,BM1368
devicemodel,data,string,supra
boardversion,data,string,401
rotation,data,u16,0
autofanspeed,data,u16,1
fanspeed,data,u16,100
selftest,data,u16,1
overheat_mode,data,u16,0
Let's look into some of the parameters.
First we got the network config for the Bitaxe to connect automatically to your wifi:
hostname
: It will identify the bitaxe on your local network instead of having to remember its IP
wifissid
: Your Wi-Fi name
wifipass
: Your Wi-Fi password
The Supra 401 model only supports 2.4GHz Wi-Fi. Verify whether this applies to your model.
Then we got the hardware config:
devicemodel
: Model name
boardversion
: Revision number
asicmodel
: The ASIC chip model used by the miner (as detailed here)
asicfrequency
: ASIC cycles per second, expressed in MHz
asicvoltage
: ASIC voltage, expressed in mV
Then we got the pools config. This is for the main pool (here we're using public-pool.io):
stratumurl
stratumport
stratumuser
stratumpass
And this is for the fallback pool in case the main fails (here we're using ckpool):
fbstratumurl
fbstratumport
fbstratumuser
fbstratumpass
Make sure to replace replace-this-with-your-btc-address.my-super-bitaxe
with your Bitcoin address and a custom name for your miner to help you identify it.
Save the config file in the same working directory. We're now ready to flash with this command:
sudo venv/bin/bitaxetool --port /dev/ttyACM0 --firmware ./esp-miner-factory-401-v2.5.0.bin --config ./config.csv
Once its done, unplug the miner from your PC and from power.
Once your miner is up and running, you can manage it via its web UI at http://your-miner-IP
.
You can also monitor your miners and hashrate on Public Pool by entering the BTC address used in the stratumuser
.
When a new firmware version is released, you can flash it the same way as before.
Alternatively, you can manually update the esp-miner.bin
(the firmware) and the ww-bin
(the frontend) from the Bitaxe web UI. Just go to Settings and scroll to the very bottom.
If you choose this update method, do it from a modern up to date web browser and disable your ad blocker. I've had issues with Firefox failing during the update process so now I do it from Chrome.
This link is a good base ⇒ https://d-central.tech/troubleshooting/bitaxe-troubleshooting-guide/
On my 401s I constantly have issues with the display screens not working so I've stopped using them.