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.
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
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.