Link Search Menu Expand Document

WAX Mainnet Node aufsetzen

Frei verfügbare Token und relativ niedrige Systemanforderungen machen das WAX Testnet zu einem idealen Lernort, doch nun ist es an der Zeit, das WAX Mainnet anzugehen.

Dieser Leitfaden vermittelt Ihnen das nötige Wissen, um solide WAX Mainnet-Nodes aufzusetzen, die den Anforderungen an das Netzwerk und die Infrastruktur gerecht werden, die erfolgreiche Gilden erfüllen müssen.

Dieser Artikel wurde aktualisiert, um den Antelope _Leap-build-prozess zu berücksichtigen.

Wie man eine soliden WAX-Mainnet-Node einrichtet

Das WAX Mainnet hat, was Antelope Chains angeht, sehr hohe Anforderungen an die Infrastruktur. Natürlich wächst das WAX Mainnet ständig und es gibt zahlreiche Möglichkeiten, diese Anforderungen zu erfüllen.

In diesem Artikel wird ein Beispiel vorgestellt, das derzeit (September 2022) gültig ist und von der EOSphere Gilde verwendet wird, die mehrere Peers und Millionen von API-Anfragen pro Tag bedient.

Mainnet Anforderungen

Hardware

  • 4 Core CPU / 4Ghz+ empfohlen falls ebenfalls blöcke produzieren möchten
  • (1) 256GB+ Disk / Enterprise Grade SSD oder NVMe (Hohe Ausdaueranforderung.)
  • (2) 4TB+ Disk / SAS or SATA sind OK aber SSD aber NVMe sind ist bevorzugt
  • 128GB+ RAM

*Betriebssystem

  • Ubuntu 18.04
  • Ubuntu 20.04 (empfohlen)
  • Ubuntu 22.04

Internet

  • Moderne Breitband-/Glasfaserverbindung (100Mb/s synchron und mehr)
  • Statische öffentliche IP-Adresse (die entweder auf dieser Node endet oder mit NAT weitergeleitet wird)

Betriebssystemumgebung vorbereiten

Bevor die WAX-Software erstellt und konfiguriert wird, muss das Betriebssystem - in diesem Fall Ubuntu 20.04 - für die Leistung und die zu erwartende Belastung konfiguriert werden.

Zettabyte File System (ZFS)

Dieser Node-Build verwendet 2 separate Festplatten, um die Festplatten-IO auszugleichen und eine kostengünstigere Speicheroption für die Datei blocks.log zu bieten, die derzeit 2,1 TB groß ist und weiter wächst.

Festplatte 1 ist die Hochgeschwindigkeits-SSD oder NVMe der Enterprise-Klasse und wird als Betriebssystem-Festplatte für die WAX-Software, alle Konfigurations- und Statusdateien verwendet. Die Zustandsdateien sind extrem IO-intensiv, die Lebensdauer einer Consumer-basierten SSD wird aufgrund der hohen Anzahl von Schreibvorgängen kurz sein, weshalb eine Enterprise-SSD oder NVMe mit hoher Ausdauer verwendet werden muss.

Es muss erwähnt werden, dass es Mechanismen gibt, um diese Zustandsdateien im Arbeitsspeicher auszuführen, wenn genügend Speicherplatz vorhanden ist; dieses Thema wird in einem späteren Artikel behandelt.

In diesem Beispiel wird auf Platte 1 das Standard-Betriebssystem Ext4 File System ausgeführt, das bereits während der Installation von Ubuntu 20.04 implementiert wird.

Platte 2 ist die SATA- oder SAS-Platte mit großer Kapazität, auf der die Datei “blocks.log” gespeichert wird. Die IO-Anforderungen an das Blocks-Verzeichnis sind weitaus geringer als die Statusdateien und langsamere, spindelbasierte Festplatten mit größerer Kapazität sind immer noch geeignet.

In diesem Beispiel wird auf Platte 2 das ZFS-Dateisystem laufen, das uns zwei wesentliche Vorteile bietet. ZFS ermöglicht uns die Verwendung der LZ4-Komprimierung (was derzeit einen Gewinn von 1,3 darstellt) und verbessert die Festplatten-IO mit Adaptive Replacement Cache (ARC)

Implementieren Sie ZFS auf Platte 2 mit der folgenden Konfiguration:

# ZFS installieren  
> sudo apt-get install zfsutils-linux

# Name der 2. Festplatte ermitteln  
> lsblk

# ZFS-Pool namens "datavolume" auf dem Gerät "sdb" erstellen  
> sudo zpool create datavolume /dev/sdb

# LZ4 kompression aktivieren  
> sudo zfs set compression=lz4 datavolume

# ZFS zeitupdates deaktivieren  
> sudo zfs set atime=off datavolume

# ARC: Nur metadaten cachen  
> sudo zfs set primarycache=all datavolume

# mountpoint definieren  
> sudo zfs set mountpoint=/home/eosphere/datavolume datavolume

# ZFS Einstellungen überprüfen  
> zfs get all

Network Time Protocol (NTP)

Für eine global vernetzte Blockchain ist es von entscheidender Bedeutung, dass die Zeit über alle Nodes hinweg synchronisiert ist.

Chrony ist ein hervorragender NTP-Client und eignet sich gut für die Bedürfnisse des WAX Mainnet.

Installieren, konfigurieren und verifizieren Sie ihn wie unten beschrieben:

#Chrony installieren  
> sudo apt install chrony

# Fügen Sie bei Bedarf manuell lokale Peers hinzu, das sind AU-Server  
> sudo nano /etc/chrony/chrony.conf  
  
server 0.pool.ntp.org  
server 1.pool.ntp.org  
server 2.pool.ntp.org  
server 3.pool.ntp.org

# Chrony neustarten  
> sudo /etc/init.d/chrony restart

# Überprüfen
> chronyc sources -v  
> chronyc tracking

# ggf. Ihre lokale Zeitzone einstellen
> sudo timedatectl set-timezone Australia/Perth

Stack Limits und Openfiles

Die Adressierung des WAX-Softwarespeichers und die Anzahl der API-Anfragen, die eine Mainnet-Producer-Node erhält, machen es erforderlich, dass das standardmäßige Stack-Limit von Ubuntu 20.04 und die Anzahl der offenen Dateien erhöht werden.

Konfigurieren und überprüfen Sie die erhöhten Grenzwerte wie unten beschrieben:

> sudo nano /etc/systemd/system.conf

#Fügen Sie die folgende Konfiguration hinzu    
DefaultLimitNOFILE=64000   
DefaultLimitSTACK=65536000

#Server neu starten und verifizieren    
> ulimit -a

Software kompilieren

Die WAX-Software ist von der Open-Source-Software Antelope abgeleitet, wurde jedoch an die Bedürfnisse des WAX-Protokollnetzes angepasst.

Derzeit ist die vom WAX Block Producer akzeptierte Softwareversion v3.1.0wax01, erstellt von cc32d9, der Mitglied der EOS Amsterdam Guild ist.

Das neueste wax-Build-Tag ist derzeit auf dem cc32d9 Github verfügbar.

Build Prozess

In diesem Beispiel wird Ubuntu Linux verwendet, um die WAX-Software aus dem Quellcode zu erstellen, und zwar nach dem folgenden Verfahren:

> cd ~

> sudo apt install -y file

> git clone https://github.com/cc32d9/wax-leap.git

> cd wax-leap

> git checkout v3.1.0.wax01 

> git submodule update --init --recursive

> sudo bash scripts/install_deps.sh

> mkdir build

# Falls nötig, ergänzen Sie $(nproc) unten mit der Anzahl der Jobs, die Ihr Server aushalten kann, ich schlage 4GB RAM pro Job vor.

> nice bash scripts/pinned_build.sh ~/wax-leap/build/leap-deps ~/wax-leap/build $(nproc)

# Binaries sind in ~/wax-leap/build/programs

Konfiguration

Nachdem nun ein sauberer Build der WAX Software kompiliert wurde, können wir mit der Konfiguration für den Betrieb des WAX Mainnet beginnen.

Zum Konfigurieren und Starten der Node wird nodeos verwendet. nodeos ist der Kerndienst-Daemon, der auf jedem WAX Protocol Network-Node läuft.

“nodeos” kann so konfiguriert werden, dass es Smart Contracts verarbeitet, Transaktionen validiert, Blöcke mit gültigen Transaktionen erzeugt und Blöcke bestätigt, um sie in der Blockchain zu speichern.

Die primären Betriebsfunktionen von nodeos sind die eines Blockproduzenten, eines Netzwerk-API-Endpunkts, einer P2P-Seed-Node oder einer State-History-Node. In einem stark frequentierten Netzwerk wie dem WAX Mainnet werden diese Funktionen in der Regel auf physisch getrennte Server verteilt.

In diesem WAX-Mainnet-Beispiel werden Sie Ihre Node mit anderen Netzwerk-Peers verbinden, einen P2P Seed Node-Dienst anbieten und die Node als Netzwerk-API-Endpunkt zur Verfügung stellen. Diese Node wird keine Unterstützung für die Abfrage historischer Daten bieten.

nodeos” benötigt zwei Dateien, um sich mit Peers zu verbinden und im WAX Mainnet zu laufen:

config.ini

Erstellen Sie eine Standard-“config.ini”, indem Sie “nodeos” ohne “config” mit dem unten stehenden Befehl ausführen:

> mkdir ~/waxdata

> cd ~/wax-leap/build/programs/nodeos

> ./nodeos --data-dir ~/waxdata --config-dir ~/waxdata

Sie können dann die neu erstellte config.ini bearbeiten und alle verfügbaren Parameter sehen:

> cd ~/waxdata

> nano config.ini

Bearbeiten Sie nun die Datei config.ini und fügen Sie die folgenden Konfigurationseinstellungen hinzu:

# Ort des Blocks-Verzeichnisses auf Festplatte 2  
blocks-dir = /home/eosphere/datavolume/blocks

wasm-runtime = eos-vm-jit
chain-state-db-size-mb = 131072  
chain-state-db-guard-size-mb = 1024  
enable-account-queries = true  
http-server-address = 0.0.0.0:8888  
access-control-allow-origin = *  
access-control-allow-headers = Origin, X-Requested-With, Content-Type, Accept  
http-max-response-time-ms = 100  
verbose-http-errors = true  
http-validate-host = false  
p2p-listen-endpoint = 0.0.0.0:9876

# 3dkrenderwax: FI, wax-peer  
p2p-peer-address = peer.3dkrender.com:9880  
  
# 3dkrenderwax: FI, query  
p2p-peer-address = query.3dkrender.com:9880  
  
# amsterdamwax: NL, Amsterdam  
p2p-peer-address = wax.eu.eosamsterdam.net:9101  
  
# blacklusionx: DE, Germany  
p2p-peer-address = peer1.wax.blacklusion.io:4646  
  
# blokcrafters: US, Reston, Virginia  
p2p-peer-address = wax-seed1.blokcrafters.io:9876  
  
# blokcrafters: US, Reston, Virginia  
p2p-peer-address = wax-seed2.blokcrafters.io:9876  
  
# bountyblokbp: US, UnitedStates  
p2p-peer-address = p2p.wax.bountyblok.io:29876  
  
# cryptolions1: DE, Germany-Finland  
p2p-peer-address = wax.cryptolions.io:9876  
  
# csxcommunity: DE, Nuremberg,Bavaria  
p2p-peer-address = wax.csx.io:9876  
  
# dapplica: DE, Germany-Finland  
p2p-peer-address = wax.dapplica.io:9876  
  
# eosarabianet: DE, Munich  
p2p-peer-address = p2p-wax.eosarabia.net:9876  
  
# eosauthority: DE, Falkenstein  
p2p-peer-address = node-wax.eosauthority.com:10301  
  
# eosauthority: FI, Helsinki  
p2p-peer-address = node-wax-p2p.eosauthority.com:10301  
  
# eosdublinwow: FI, Finland  
p2p-peer-address = wax.p2p.eosdublin.io:9876  
  
# eoseouldotio: JP, Seoul  
p2p-peer-address = p2p.wax.eoseoul.io:29876  
  
# eosiodetroit: IN, wax-seed1-do-blr1  
p2p-peer-address = p2p.wax.eosdetroit.io:1337  
  
# eosphereiobp: AU, Sydney  
p2p-peer-address = peer1-wax.eosphere.io:9876  
  
# eosphereiobp: CA, Beauharnois  
p2p-peer-address = peer2-wax.eosphere.io:9876  
  
# greeneosiobp: DE, Germany  
p2p-peer-address = p2p1.wax.greeneosio.com:9876  
  
# ledgerwiseio: FI, LB  
p2p-peer-address = waxp2p.ledgerwise.io:21877  
  
# nation.wax: CA, Canada  
p2p-peer-address = wax.eosn.io:9876  
  
# niftylifewax: FI, Helsinki, Finland  
p2p-peer-address = p2p.niftylife.io:9876  
  
# niftylifewax: DE, Berlin, Germany  
p2p-peer-address = p2p2.niftylife.io:9876  
  
# oneinacilian: GB, United Kingdom  
p2p-peer-address = p2p.oiac.io:9896  
  
# teamgreymass: DE, FRA  
p2p-peer-address = wax.greymass.com:35777  
  
# wax.eastern: DE, Frankfurt  
p2p-peer-address = p2p.waxeastern.cn:9876  
  
# waxhiveguild: FI, Finnland  
p2p-peer-address = peer1.hivebp.io:9876  
  
# waxhiveguild: DE, Germany  
p2p-peer-address = peer2.hivebp.io:9876  
  
# waxswedenorg: SE, Sweden  
p2p-peer-address = p2p.waxsweden.org:35777  
  
# wizardsguild: US, wax-seed  
p2p-peer-address = wax-bp.wizardsguild.one:8876

# Always check for the latest PeerList - https://validate.eosnation.io/wax/reports/config.html

agent-name = "<yourname> WAX Mainnet"  
max-clients = 100  
sync-fetch-span = 500  

plugin = eosio::http_plugin  
plugin = eosio::chain_plugin  
plugin = eosio::chain_api_plugin

genesis.json

Dies sind die anfänglichen Zustandsparameter, die von jeder neu gestarteten Node im WAX Mainnet benötigt werden. Erstellen Sie die Datei wie unten angegeben:

> cd ~/waxdata

> nano genesis.json

Fügen Sie die folgenden Parameter in die Datei “genesis.json” für das WAX Public Mainnet ein:

{  
  "initial_timestamp": "2019-06-05T12:00:00.000",  
  "initial_key": "EOS8i2pkwtv2JmdYWNJdcy5BcJ7wCE5q6mpE1hwT25HdgHMzeRday",  
  "initial_configuration": {  
    "max_block_net_usage": 1048576,  
    "target_block_net_usage_pct": 1000,  
    "max_transaction_net_usage": 524288,  
    "base_per_transaction_net_usage": 12,  
    "net_usage_leeway": 500,  
    "context_free_discount_net_usage_num": 20,  
    "context_free_discount_net_usage_den": 100,  
    "max_block_cpu_usage": 500000,  
    "target_block_cpu_usage_pct": 2000,  
    "max_transaction_cpu_usage": 150000,  
    "min_transaction_cpu_usage": 100,  
    "max_transaction_lifetime": 3600,  
    "deferred_trx_expiration_window": 600,  
    "max_transaction_delay": 3888000,  
    "max_inline_action_size": 4096,  
    "max_inline_action_depth": 4,  
    "max_authority_depth": 6  
  }  
}

Nodeos starten

Nachdem die config.ini konfiguriert und die anfänglichen WAX Mainnet chainparameter genesis.json erstellt wurden, können Sie nun dem Netzwerk beitreten und die Node synchronisieren.

Verwenden Sie screen, um Ihre Sitzung auch dann aufrechtzuerhalten, wenn Sie die Verbindung trennen, wie unten beschrieben:

#Erstelle eine neue Screen-Sitzung  
  
> screen -US wax 

#Trennt die Screen-Sitzung  
  
> ctrl-a+d 

#Bildschirm-Sitzung wiederherstellen  
  
> screen -r wax

Führen Sie nodeos mit Zeigern auf die Konfigurations-, Daten- und Genesis-Datei aus:

> cd ~/wax-leap/build/programs/nodeos

> nodeos --data-dir ~/waxdata --config-dir ~/waxdata --genesis-json ~/waxdata/genesis.json

Ihre WAX Mainnet-Node beginnt nun mit der Synchronisierung mit den konfigurierten Peers, bis er die WAX Mainnet-Chain eingeholt hat und auf dem neuesten Stand ist.

Es ist möglich, den Synchronisierungsprozess zu beschleunigen, indem Sie mit einem Snapshot und einer gültigen blocks.log beginnen. Der Prozess wird im WAX Snapshots Guide erklärt.

Diese WAX Developer Technical Guides wurden unter Verwendung von Quellmaterial aus der EOSphere WAX Technical How To Series erstellt.

Stellen Sie Ihre Fragen im EOSphere Telegram