10 grudnia 2021

Ethereum full node - VM

Uruchamiamy full node sieci ETH na potrzeby analizy danych.

ETH logo

Założenia:

  • Adres IP maszyny wirtualnej: 192.168.30.42
  • nazwa użytkownika: robert
  • System 20.04.3 LTS
  • Memory 20 GB
  • Hard drive 32GB + 2TB
ETH node hardware

Przygotowanie hosta

ssh-copy-id -i ~/.ssh/pi_rsa.pub ubuntu@192.168.30.42
ssh ubuntu@192.168.30.42
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-eth:

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

Przygotowanie dodatkowego dysku

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

Instalacja ethereum

sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum

sudo apt install ntpdate

Wygenerowanie konfiguracji

geth --syncmode "full" > /eth_data/geth.conf
.......
[Node]
DataDir = "/eth_data"
.......

Wygenerowanie uruchomienie

geth --config /eth_data/geth.conf
geth --config /eth_data/geth.conf --http --http.port 3334
geth --config /eth_data/geth.conf --http --http.port 3334 --http.addr 0.0.0.0

Podłączenie RPC

geth --exec "eth.syncing.highestBlock - eth.syncing.currentBlock" --datadir /eth_data attach
geth --exec "eth.syncing.highestBlock - eth.syncing.currentBlock" attach http://localhost:3334
geth --exec "new Date(eth.getBlock(eth.blockNumber).timestamp*1e3)" attach http://192.168.30.42:3334

Konfiguracja usługi

sudo nano /etc/systemd/system/geth.service
[Unit]
Description=The Ethereum Blockchain Command Line Interface
Documentation=man:geth(1)
After=network.target

[Service]
User=robert
RuntimeDirectory=/eth_data
RuntimeDirectoryPreserve=yes
ExecStart=/usr/bin/geth --config /eth_data/geth.conf

[Install]
WantedBy=default.target
systemctl daemon-reload
systemctl enable geth
systemctl stop geth
systemctl start geth
systemctl status geth.service

Linki