9 grudnia 2021

Bitcoin full node - VM

Uruchamiamy full node sieci BTC na potrzeby analizy danych. W moim przypadku będzie to środowisko Proxmox jednak nie ma to większego znaczenia, może być VirtualBox, Vmware albo dowolne inne.

BTC logo

Założenia:

  • Adres IP maszyny wirtualnej: 192.168.30.41
  • nazwa użytkownika: robert
  • System 20.04.3 LTS
  • Memory 6 GB
  • Hard drive 32GB + 600GB
BTC node hardware

Przygotowanie hosta

ssh-copy-id -i ~/.ssh/pi_rsa.pub ubuntu@192.168.30.41
ssh ubuntu@192.168.30.41
sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade

echo "alias cls="clear"" >> ~/.bashrc
source ~/.bashrc

Zmieniamy nazwę hosta z domyślnej ubuntu na node-btc:

sudo nano /etc/hostname
sudo nano /etc/hosts
sudo reboot

Przygotowanie dodatkowego dysku

Formatowanie i montowanie dysku:

sudo fdisk -l
sudo cfdisk /dev/sdb
sudo mkfs.ext3 /dev/sdb1
sudo mkdir /btc_data
sudo mount -t ext3 /dev/sdb1 /btc_data
echo "/dev/sdb1 /btc_data ext3 defaults,errors=remount-ro 0 1" | sudo tee -a /etc/fstab
ln -s /btc_data/ ~/btc_data
sudo chown -R "$USER" /btc_data/

Kompilacja bitcoin-core

Instalujemy zależności oraz pobieramy kod źródłowy:

sudo apt-get install git
mkdir -p ~/btc_code && cd ~/btc_code
git clone https://github.com/bitcoin/bitcoin.git

sudo apt-get install build-essential libtool autotools-dev automake pkg-config bsdmainutils python3 libevent-dev
sudo apt-get install libboost-system-dev libboost-filesystem-dev libboost-test-dev libboost-thread-dev libsqlite3-dev
sudo apt-get install libminiupnpc-dev libzmq3-dev libqrencode-dev

cd ~/btc_code/bitcoin

Przełączamy się na najświeższą wersję v22.0, następnie budujemy aplikacje. Interesuje nas zbieranie danych na potrzeby analizy, wyłączamy GUI oraz funkcjonalność portfela.

cd ~/btc_code/bitcoin

git describe --tags $(git rev-list --tags --max-count=5)
git checkout tags/v22.0

./autogen.sh
./configure --disable-wallet --enable-hardening --without-gui

make -j 4
sudo make install

bitcoind --version

Plik konfiguracyjny

Zapisujemy plik konfiguracyjny w niestandardowej lokalizacji

mkdir /btc_data/blocks     
nano ~/.bitcoin/bitcoin.conf

Definiujemy katalogi, hasło dla RPC oraz limity pamięci. config generator (opens new window)

blocksdir=/btc_data/blocks
datadir=/btc_data
dbbatchsize=16777214
dbcache=900
mempoolexpiry=30
txindex=1
assumevalid=0

# [rpc]
server=1
rpccookiefile=/btc_data/cookie

rpcuser=AAA
rpcpassword=BBB

rpcport=8332
rpcthreads=2
rpcclienttimeout=500

rpcbind=127.0.0.1
rpcbind=192.168.30.41
rpcallowip=192.168.30.0/24

Ręczne uruchomienie

bitcoind -conf=/btc_data/bitcoin.conf

Zapytania o dane

bitcoin-cli -conf=/btc_data/bitcoin.conf  getblockchaininfo
bitcoin-cli -conf=/btc_data/bitcoin.conf  getblockcount

# Z innej maszyny w naszej sieci
bitcoin-cli -rpcconnect=192.168.30.41 getblockcount
# [rpc]
server=1
rpcuser=robert
rpcpassword=AAA
rpcport=BBB

Aktualna wysokość poznamy tak:

wget -q -O- https://blockchain.info/q/getblockcount; echo

Konfiguracja usługi systemd

Jeśli chcemy uruchamiać bitcoind jako usługę to powinniśmy ustawić w pliku /etc/systemd/system/bitcoind.service następującą zawartość:

[Unit]
Description=Bitcoin daemon
After=network.target

[Service]
ExecStart=/usr/local/bin/bitcoind -daemon -conf=/btc_data/bitcoin.conf -pid=/btc_data/bitcoind_1.pid
RuntimeDirectory=/btc_data
RuntimeDirectoryPreserve=yes
User=robert
Type=forking
PIDFile=/btc_data/bitcoind_1.pid
Restart=on-failure
StandardOutput=/var/log/bitcoind.log
StandardError=/var/log/bitcoind.log

PrivateTmp=true
ProtectSystem=full
NoNewPrivileges=true

PrivateDevices=true

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable bitcoind
systemctl stop bitcoind
systemctl start bitcoind
systemctl status bitcoind.service

Dodatkowo

Aby przyśpieszyć synchronizacje, powinniśmy otworzyć port 8333 na bramie.

Linki