Dokumentation: erigon.gitbook.io Blog: erigon.substack.com Twitter: x.com/ErigonEth
Erigon ist eine Implementierung von Ethereum (Ausführungsschicht mit einbettbarer Konsensschicht) an der Effizienzgrenze. Standardmäßig Archivknoten.
erigon
-Portscaplin
-PortsbeaconAPI
Portsshared
Portsother
Häfensystemd
Beispielhtop
zeigt eine falsche Speichernutzung an Wichtige Standardeinstellungen : Erigon ist standardmäßig ein Archivknoten: Verwenden Sie bei Bedarf --prune.mode
um ihn zu verkleinern (Änderung nach dem ersten Start nicht zulässig).
In-depth links are marked by the microscope sign (?)
RAM: >=32GB, Golang >= 1,22; GCC 10+ oder Clang; Unter Linux: Kernel > v4. 64-Bit-Architektur.
SSD oder NVMe. Festplatte nicht empfehlen – auf der Festplatte bleibt Erigon immer N Blöcke hinter der Kettenspitze, fällt aber nicht zurück. Bedenken Sie, dass die SSD-Leistung abnimmt, wenn sie sich der Kapazitätsgrenze nähert. CloudDrives (wie gp3): Blockiert die Ausführung auf Cloud-Netzwerklaufwerken langsam
? Weitere Details zur Größe des Erigon3-Datenverzeichnisses
? Weitere Einzelheiten zu der Art der gespeicherten Daten finden Sie hier
Versionshinweise und Binärdateien
Erstellen Sie die neueste Version (dies ist für die meisten Benutzer geeignet, die nur einen Knoten ausführen möchten):
git clone --branch release/ < x.xx > --single-branch https://github.com/erigontech/erigon.git
cd erigon
make erigon
./build/bin/erigon
Erhöhen Sie die Download-Geschwindigkeit um --torrent.download.rate=20mb
. ? See Downloader docs
Verwenden Sie --datadir
, um auszuwählen, wo Daten gespeichert werden sollen.
Verwenden Sie --chain=gnosis
für Gnosis Chain, --chain=bor-mainnet
für Polygon Mainnet und --chain=amoy
für Polygon Amoy. Für Gnosis Chain benötigen Sie neben Erigon einen Consensus Layer-Client (https://docs.gnosischain.com/category/step--3---run-consensus-client).
Wenn Sie make help
ausführen, werden die im Makefile verfügbaren praktischen Befehle aufgelistet und beschrieben.
datadir
chaindata # "Recently-updated Latest State", "Recent History", "Recent Blocks"
snapshots # contains `.seg` files - it's old blocks
domain # Latest State
history # Historical values
idx # InvertedIndices: can search/filtering/union/intersect them - to find historical data. like eth_getLogs or trace_transaction
accessors # Additional (generated) indices of history - have "random-touch" read-pattern. They can serve only `Get` requests (no search/filters).
txpool # pending transactions. safe to remove.
nodes # p2p peers. safe to remove.
temp # used to sort data bigger than RAM. can grow to ~100gb. cleaned at startup.
# There is 4 domains: account, storage, code, commitment
Wenn Sie es sich leisten können, Datadir auf einem NVME-Raid zu speichern – großartig. Wenn dies nicht möglich ist, ist es möglich, den Verlauf auf einem billigen Laufwerk zu speichern.
# place (or ln -s) `datadir` on slow disk. link some sub-folders to fast (low-latency) disk.
# Example: what need link to fast disk to speedup execution
datadir
chaindata # link to fast disk
snapshots
domain # link to fast disk
history
idx
accessors
temp # buffers to sort data >> RAM. sequential-buffered IO - is slow-disk-friendly
# Example: how to speedup history access:
# - go step-by-step - first try store `accessors` on fast disk
# - if speed is not good enough: `idx`
# - if still not enough: `history`
# eth-mainnet - archive - April 2024
du -hsc /erigon/ *
6G /erigon/caplin
50G /erigon/chaindata
1.8T /erigon/snapshots
1.9T total
du -hsc /erigon/snapshots/ *
100G /erigon/snapshots/accessor
240G /erigon/snapshots/domain
260G /erigon/snapshots/history
410G /erigon/snapshots/idx
1.7T /erigon/snapshots
# bor-mainnet - archive - Jun 2024
du -hsc /erigon/ *
160M /erigon/bor
50G /erigon/chaindata
3.7T /erigon/snapshots
3.8T total
du -hsc /erigon/snapshots/ *
260G /erigon-data/snapshots/accessor
850G /erigon-data/snapshots/domain
650G /erigon-data/snapshots/history
1.4T /erigon-data/snapshots/idx
4.1T /erigon/snapshots
debug_getModifiedAccountsByNumber
gibt es zurück--internalcl
ist standardmäßig aktiviert. Zum Deaktivieren verwenden Sie --externalcl
.chaindata
ist weniger als 15gb
. Es ist in Ordnung, rm -rf chaindata
zu verwenden. (Um ein Wachstum zu verhindern: empfehlen Sie --batchSize <= 1G
)--prune
Flags geändert : siehe --prune.mode
(Standard: archive
, full: full
, EIP-4444: minimal
)--sync.loop.block.limit=5_000
standardmäßig aktiviertFlaggen:
verbosity
log.console.verbosity
(überschreibender Alias für verbosity
)log.json
log.console.json
(Alias für log.json
)log.dir.path
log.dir.prefix
log.dir.verbosity
log.dir.json
Um nur bei stdout/stderr zu protokollieren, kann das Flag --verbosity
(oder log.console.verbosity
) verwendet werden, um einen int-Wert anzugeben, der die höchste Ausgabeprotokollebene angibt:
LvlCrit = 0
LvlError = 1
LvlWarn = 2
LvlInfo = 3
LvlDebug = 4
LvlTrace = 5
Um ein Ausgabeverzeichnis für Protokolle festzulegen, die auf der Festplatte gesammelt werden sollen, legen Sie bitte --log.dir.path
fest. Wenn Sie den von erigon
erzeugten Dateinamen ändern möchten, sollten Sie auch das Flag --log.dir.prefix
auf einen alternativen Namen setzen. Das Flag --log.dir.verbosity
ist auch verfügbar, um die Ausführlichkeit dieser Protokollierung zu steuern, mit demselben int-Wert wie oben oder dem String-Wert, z. B. „debug“ oder „info“. Die Standardausführlichkeit ist „debug“ (4) für die Festplattenprotokollierung.
Das Protokollformat kann mithilfe der booleschen Flags log.json
oder log.console.json
oder für die Festplattenausgabe auf JSON festgelegt werden --log.dir.json
.
Erigon ist standardmäßig eine „All-in-One-Binärlösung“, es ist jedoch möglich, TxPool als separate Prozesse zu starten. Das Gleiche gilt für: JSON RPC-Schicht (RPCDaemon), P2P-Schicht (Sentry), Verlaufs-Download-Schicht (Downloader), Konsens. Starten Sie Dienste nicht als separate Prozesse, es sei denn, Sie haben einen klaren Grund dafür: Ressourcenbeschränkung, Skalierung, Ersetzen durch Ihre eigene Implementierung, Sicherheit. Informationen zum Starten der Dienste von Erigon als separate Prozesse finden Sie in docker-compose.yml. Jeder Dienst verfügt über eine eigene Datei ./cmd/*/README.md
. Erigon-Blog.
Integrierter Konsens für Ethereum Mainnet, Sepolia, Holesky, Gnosis. So verwenden Sie die externe Konsensschicht: --externalcl
.
Wenn Sie Erigon ausprobieren möchten: Eine gute Option besteht darin, mit der Synchronisierung eines der öffentlichen Testnetze, Holesky (oder Amoy), zu beginnen. Die Synchronisierung erfolgt viel schneller und beansprucht nicht so viel Speicherplatz:
git clone https://github.com/erigontech/erigon.git
cd erigon
make erigon
./build/bin/erigon --datadir= < your_datadir > --chain=holesky --prune.mode=full
Bitte beachten Sie die Option --datadir
, mit der Sie Erigon-Dateien an einem nicht standardmäßigen Speicherort speichern können. Der Name des Verzeichnisses --datadir
muss nicht mit dem Namen der Kette in --chain
übereinstimmen.
Die Blockproduktion wird für Ethereum und Gnosis Chain vollständig unterstützt. Für Polygon ist es noch experimentell.
Sie können Erigon-Flags über eine TOML-Konfigurationsdatei mit dem Flag --config
festlegen. Die in der Konfigurationsdatei festgelegten Flags können überschrieben werden, indem die Flags direkt in die Erigon-Befehlszeile geschrieben werden
./build/bin/erigon --config ./config.toml --chain=sepolia
Angenommen, wir haben chain : "mainnet"
in unserer Konfigurationsdatei. Durch Hinzufügen von --chain=sepolia
wird das Überschreiben des Flags in der toml-Konfigurationsdatei ermöglicht und die Kette auf „sepolia“ gesetzt
datadir = ' your datadir '
port = 1111
chain = " mainnet "
http = true
"private.api.addr" = " localhost:9090 "
"http.api" = [ " eth " , " debug " , " net " ]
Erigon kann als Execution Layer (EL) für Consensus Layer Clients (CL) verwendet werden. Die Standardkonfiguration ist in Ordnung.
Wenn sich Ihr CL-Client auf einem anderen Gerät befindet, fügen Sie --authrpc.addr 0.0.0.0
(die Engine-API lauscht standardmäßig auf localhost) sowie --authrpc.vhosts
wobei
Ihr Quellhost ist oder any
.
Um eine sichere Verbindung zwischen der Konsensschicht und der Ausführungsschicht herzustellen, wird automatisch ein geheimer JWT-Schlüssel generiert.
Der geheime JWT-Schlüssel ist im Datenverzeichnis standardmäßig unter dem Namen jwt.hex
vorhanden und sein Pfad kann mit dem Flag --authrpc.jwtsecret
angegeben werden.
Diese Information muss auch im Consensus Layer angegeben werden, um eine erfolgreiche Verbindung herzustellen. Weitere Informationen finden Sie hier.
Sobald Erigon ausgeführt wird, müssen Sie Ihren CL-Client auf
verweisen, wobei
entweder localhost
oder die IP-Adresse des Geräts ist, auf dem Erigon ausgeführt wird, und außerdem auf den von Erigon erstellten geheimen JWT-Pfad verweisen.
Caplin ist ein vollwertiger validierender Consensus-Client wie Prysm, Lighthouse, Teku, Nimbus und Lodestar. Sein Ziel ist:
Der Hauptgrund für die Entwicklung einer neuen Konsensschicht besteht darin, mit den möglichen Vorteilen zu experimentieren, die sich daraus ergeben könnten. Beispielsweise funktioniert die Engine-API nicht gut mit Erigon. Die Engine-API sendet Daten blockweise, was nicht zur Funktionsweise von Erigon passt. Erigon ist für die gleichzeitige Verarbeitung vieler Blöcke ausgelegt und muss Daten effizient sortieren und verarbeiten. Daher wäre es für Erigon besser, die Blöcke unabhängig zu verarbeiten, anstatt sich auf die Engine-API zu verlassen.
Caplin ist standardmäßig aktiviert. Um es zu deaktivieren und die Engine-API zu aktivieren, verwenden Sie das Flag --externalcl
. Ab diesem Zeitpunkt ist eine externe Konsensschicht nicht mehr erforderlich.
Caplin verfügt außerdem über einen Archivierungsmodus für historische Zustände und Blöcke. Es kann über das Flag --caplin.archive
aktiviert werden. Um die Beacon-API des Caplin zu aktivieren, muss das Flag --beacon.api=
hinzugefügt werden. Beispiel: --beacon.api=beacon,builder,config,debug,node,validator,lighthouse
aktiviert alle Endpunkte. **HINWEIS: Caplin ist nicht bereit für das Abstecken, daher müssen Aggregationsendpunkte noch implementiert werden. Die zusätzliche Aktivierung der Beacon-API führt zu einer um 6 GB höheren RAM-Nutzung.
Definieren Sie 6 Flags, um Konflikte zu vermeiden: --datadir --port --http.port --authrpc.port --torrent.port --private.api.addr
. Beispiel für mehrere Ketten auf derselben Maschine:
# mainnet
./build/bin/erigon --datadir="" --chain=mainnet --port=30303 --http.port=8545 --authrpc.port=8551 --torrent.port=42069 --private.api.addr=127.0.0.1:9090 --http --ws --http.api=eth,debug,net,trace,web3,erigon
# sepolia
./build/bin/erigon --datadir="" --chain=sepolia --port=30304 --http.port=8546 --authrpc.port=8552 --torrent.port=42068 --private.api.addr=127.0.0.1:9091 --http --ws --http.api=eth,debug,net,trace,web3,erigon
Geben Sie Ihren Pfad an, wenn er Leerzeichen enthält.
? Detailed explanation is DEV_CHAIN.
Bei guter Netzwerkbandbreite erfolgt die Synchronisierung von EthereumMainnet FullNode in 3 Stunden: OtterSync kann synchronisieren
Flache KV-Lagerung. Erigon verwendet eine Schlüsselwertdatenbank und speichert Konten und Speicher auf einfache Weise.
? See our detailed DB walkthrough here.
Vorverarbeitung . Für einige Vorgänge verwendet Erigon temporäre Dateien, um Daten vorzuverarbeiten, bevor sie in die Hauptdatenbank eingefügt werden. Dadurch wird die Schreibverstärkung reduziert und DB-Einfügungen erfolgen um Größenordnungen schneller.
? See our detailed ETL explanation here.
Einfacher Zustand
Einzelkonten/Staatsversuch . Erigon verwendet einen einzigen Merkle-Trie für beide Konten und den Speicher.
? Staged Sync Readme
Die meisten Komponenten von Erigon (txpool, rpcdaemon, Snapshots-Downloader, Sentry, ...) können innerhalb von Erigon und als unabhängiger Prozess auf demselben Server (oder einem anderen Server) arbeiten. Beispiel:
make erigon rpcdaemon
./build/bin/erigon --datadir=/my --http=false
# To run RPCDaemon as separated process: use same `--datadir` as Erigon
./build/bin/rpcdaemon --datadir=/my --http.api=eth,erigon,web3,net,debug,trace,txpool --ws
--rpc.batch.concurrency
, --rpc.batch.limit
, --db.read.concurrency
--http.compression
, --ws.compression
? See RPC-Daemon docs
docker compose up prometheus grafana
, detaillierte Dokumente.
# please use git branch name (or commit hash). don't use git tags
go mod edit -replace github.com/erigontech/erigon-lib=github.com/erigontech/erigon/erigon-lib@5498f854e44df5c8f0804ff4f0747c0dec3caad5
go get github.com/erigontech/erigon@main
go mod tidy
erigon
-PortsKomponente | Hafen | Protokoll | Zweck | Sollte entlarven |
---|---|---|---|---|
Motor | 9090 | TCP | gRPC-Server | Privat |
Motor | 42069 | TCP und UDP | Snap-Synchronisierung (Bittorrent) | Öffentlich |
Motor | 8551 | TCP | Engine-API (JWT-Authentifizierung) | Privat |
Posten | 30303 | TCP und UDP | eth/68-Peering | Öffentlich |
Posten | 30304 | TCP und UDP | eth/67-Peering | Öffentlich |
Posten | 9091 | TCP | eingehende gRPC-Verbindungen | Privat |
rpcdaemon | 8545 | TCP | HTTP & WebSockets & GraphQL | Privat |
Normalerweise sind 30303 und 30304 dem Internet zugänglich, um eingehende Peering-Verbindungen zu ermöglichen. 9090 wird nur intern für rpcdaemon oder andere Verbindungen verfügbar gemacht (z. B. rpcdaemon -> erigon). Port 8551 (JWT-authentifiziert) wird nur intern für Engine-API-JSON-RPC-Abfragen vom Consensus Layer-Knoten verfügbar gemacht.
caplin
-PortsKomponente | Hafen | Protokoll | Zweck | Sollte entlarven |
---|---|---|---|---|
Wächter | 4000 | UDP | Peering | Öffentlich |
Wächter | 4001 | TCP | Peering | Öffentlich |
Um die Ports zu konfigurieren, verwenden Sie:
--caplin.discovery.addr value Address for Caplin DISCV5 protocol (default: "127.0.0.1")
--caplin.discovery.port value Port for Caplin DISCV5 protocol (default: 4000)
--caplin.discovery.tcpport value TCP Port for Caplin DISCV5 protocol (default: 4001)
beaconAPI
PortsKomponente | Hafen | Protokoll | Zweck | Sollte entlarven |
---|---|---|---|---|
AUSRUHEN | 5555 | TCP | AUSRUHEN | Öffentlich |
shared
PortsKomponente | Hafen | Protokoll | Zweck | Sollte entlarven |
---|---|---|---|---|
alle | 6060 | TCP | pprof | Privat |
alle | 6061 | TCP | Metriken | Privat |
Es können optionale Flags aktiviert werden, die pprof oder Metriken (oder beides) aktivieren. Für weitere Informationen verwenden Sie --help
mit der Binärdatei.
other
Häfen Für zukünftige Verwendung reserviert: gRPC-Ports : 9092
Konsens-Engine, 9093
Snapshot-Downloader, 9094
TxPool
0.0.0.0/8 "This" Network RFC 1122, Section 3.2.1.3
10.0.0.0/8 Private-Use Networks RFC 1918
100.64.0.0/10 Carrier-Grade NAT (CGN) RFC 6598, Section 7
127.16.0.0/12 Private-Use Networks RFC 1918
169.254.0.0/16 Link Local RFC 3927
172.16.0.0/12 Private-Use Networks RFC 1918
192.0.0.0/24 IETF Protocol Assignments RFC 5736
192.0.2.0/24 TEST-NET-1 RFC 5737
192.88.99.0/24 6to4 Relay Anycast RFC 3068
192.168.0.0/16 Private-Use Networks RFC 1918
198.18.0.0/15 Network Interconnect
Device Benchmark Testing RFC 2544
198.51.100.0/24 TEST-NET-2 RFC 5737
203.0.113.0/24 TEST-NET-3 RFC 5737
224.0.0.0/4 Multicast RFC 3171
240.0.0.0/4 Reserved for Future Use RFC 1112, Section 4
255.255.255.255/32 Limited Broadcast RFC 919, Section 7
RFC 922, Section 7
Das Gleiche gilt für die IpTables-Syntax
systemd
Beispiel Das Ausführen von erigon über build/bin
als separater Benutzer kann zu einem Fehler führen:
error while loading shared libraries: libsilkworm_capi.so: cannot open shared object file: No such file or directory
Die Bibliothek muss für einen anderen Benutzer mit make DIST=
installiert werden. Sie könnten $HOME/erigon
oder /opt/erigon
als Installationspfad verwenden, zum Beispiel:
make DIST=/opt/erigon install
kill -SIGUSR1
, Trace abrufen und stoppen: kill -6
--pprof
hinzufügen und ausführengo tool pprof -png http://127.0.0.1:6060/debug/pprof/profile?seconds=20 > cpu.png
--pprof
hinzufügen und ausführengo tool pprof -inuse_space -png http://127.0.0.1:6060/debug/pprof/heap > mem.png
? Detailed explanation is here.
Docker verwendet den Benutzer erigon mit UID/GID 1000 (aus Sicherheitsgründen). Sie können sehen, wie dieser Benutzer in der Docker-Datei erstellt wird. Kann behoben werden, indem dem Benutzer eines Hosts der Besitz des Ordners übertragen wird, wobei die Benutzer-UID/GID des Hosts mit der Benutzer-UID/GID des Dockers (1000) übereinstimmt. Weitere Details im Beitrag
--txpool.nolocals=true
admin
zur Liste --http.api
hinzu--http.corsdomain="*"
ist eine schlechte Praxis: Legen Sie den genauen Hostnamen oder die IP fest--rpc.batch.concurrency
, --rpc.batch.limit
https://github.com/mathMakesArt/Erigon-on-RPi-4
Docker ermöglicht das Erstellen und Ausführen von Erigon über Container. Dadurch entfällt die Notwendigkeit, Build-Abhängigkeiten auf dem Host-Betriebssystem zu installieren.
Benutzer-UID/GID müssen zwischen dem Host-Betriebssystem und dem Container synchronisiert werden, damit Dateien mit der richtigen Berechtigung geschrieben werden.
Möglicherweise möchten Sie einen dedizierten Benutzer/eine dedizierte Gruppe auf dem Host-Betriebssystem einrichten. In diesem Fall stehen die folgenden make
Ziele zur Verfügung.
# create "erigon" user
make user_linux
# or
make user_macos
Es gibt eine .env.example
Datei im Stammverzeichnis des Repos.
DOCKER_UID
– Die UID des Docker-BenutzersDOCKER_GID
– Die GID des Docker-BenutzersXDG_DATA_HOME
– Das Datenverzeichnis, das in die Docker-Container eingebunden wirdWenn nicht angegeben, verwendet die UID/GID den aktuellen Benutzer.
Eine gute Wahl für XDG_DATA_HOME
ist die Verwendung des Verzeichnisses ~erigon/.ethereum
das von den Hilfszielen make user_linux
oder make user_macos
erstellt wurde.
Berechtigungen prüfen: In allen Fällen muss XDG_DATA_HOME
(angegeben oder Standard) von der Benutzer-UID/GID in Docker beschreibbar sein, was durch die DOCKER_UID
und DOCKER_GID
zum Zeitpunkt der Erstellung bestimmt wird. Wenn ein Build- oder Dienststart aufgrund von Berechtigungen fehlschlägt, überprüfen Sie, ob alle von diesen Umgebungsvariablen gesteuerten Verzeichnisse, UIDs und GIDs korrekt sind.
Der nächste Befehl wird gestartet: Erigon auf Port 30303, rpcdaemon auf Port 8545, prometheus auf Port 9090 und grafana auf Port 3000.
#
# Will mount ~/.local/share/erigon to /home/erigon/.local/share/erigon inside container
#
make docker-compose
#
# or
#
# if you want to use a custom data directory
# or, if you want to use different uid/gid for a dedicated user
#
# To solve this, pass in the uid/gid parameters into the container.
#
# DOCKER_UID: the user id
# DOCKER_GID: the group id
# XDG_DATA_HOME: the data directory (default: ~/.local/share)
#
# Note: /preferred/data/folder must be read/writeable on host OS by user with UID/GID given
# if you followed above instructions
#
# Note: uid/gid syntax below will automatically use uid/gid of running user so this syntax
# is intended to be run via the dedicated user setup earlier
#
DOCKER_UID= $( id -u ) DOCKER_GID= $( id -g ) XDG_DATA_HOME=/preferred/data/folder DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 make docker-compose
#
# if you want to run the docker, but you are not logged in as the $ERIGON_USER
# then you'll need to adjust the syntax above to grab the correct uid/gid
#
# To run the command via another user, use
#
ERIGON_USER=erigon
sudo -u ${ERIGON_USER} DOCKER_UID= $( id -u ${ERIGON_USER} ) DOCKER_GID= $( id -g ${ERIGON_USER} ) XDG_DATA_HOME= ~ ${ERIGON_USER} /.ethereum DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 make docker-compose
Makefile erstellt die anfänglichen Verzeichnisse für Erigon, Prometheus und Grafana. Der PID-Namespace wird von erigon und rpcdaemon gemeinsam genutzt und ist erforderlich, um die Datenbank von Erigon von einem anderen Prozess aus zu öffnen (lokaler RPCDaemon-Modus). Siehe: https://github.com/erigontech/erigon/pull/2392/files
Wenn Ihre Docker-Installation erfordert, dass der Docker-Daemon als Root ausgeführt wird (was standardmäßig der Fall ist), müssen Sie dem obigen Befehl sudo
voranstellen. Aus Sicherheitsgründen wird jedoch manchmal empfohlen, Docker (und damit seine Container) als Nicht-Root-Benutzer auszuführen. Weitere Informationen dazu finden Sie in diesem Artikel.
Post
--sync.loop.block.limit=10_000
SNAPSHOT_MADV_RND=false
vmtouch -vdlw /mnt/erigon/snapshots/domain/*bt
ls /mnt/erigon/snapshots/domain/*.kv | parallel vmtouch -vdlw
# if it failing with "can't allocate memory", try:
sync && sudo sysctl vm.drop_caches=3
echo 1 > /proc/sys/vm/compact_memory
Windows-Benutzer können Erigon auf drei Arten ausführen:
Erstellen Sie ausführbare Binärdateien nativ für Windows mit dem bereitgestellten PowerShell-Skript wmake.ps1
. Die Verwendungssyntax ist dieselbe wie beim Befehl make
“, daher müssen Sie .wmake.ps1 [-target]
ausführen. Beispiel: .wmake.ps1 erigon
erstellt die ausführbare Erigon-Datei. Alle Binärdateien werden im Unterordner .buildbin
abgelegt. Es gibt einige Voraussetzungen für einen erfolgreichen nativen Build unter Windows:
chocolatey
Paketmanager zu installieren – siehe folgenden Punkt).wmake.ps1 db-tools
), muss der Chocolatey-Paketmanager für Windows installiert sein. Bei Chocolatey müssen Sie die folgenden Komponenten installieren: cmake
, make
, mingw
von choco install cmake make mingw
. Stellen Sie sicher, dass die Windows-Systemvariable „Pfad“ Folgendes hat: C:ProgramDatachocolateylibmingwtoolsinstallmingw64bin Wichtiger Hinweis zu Antivirenprogrammen: Während der Compiler-Erkennungsphase von MinGW werden einige temporäre ausführbare Dateien generiert, um die Compilerfunktionen zu testen. Es wurde berichtet, dass einige Antivirenprogramme diese Dateien als möglicherweise mit dem Trojaner Win64/Kryptic.CIS
(oder einer Variante davon) infiziert erkennen. Obwohl es sich dabei um Fehlalarme handelt, haben wir keine Kontrolle über mehr als 100 Anbieter von Sicherheitsprodukten für Windows und deren jeweilige Erkennungsalgorithmen und verstehen, dass dies Ihr Erlebnis mit Windows-Builds unangenehm machen könnte. Um das Problem zu umgehen, können Sie entweder Ausschlüsse für Ihr Antivirenprogramm speziell für den Unterordner buildbinmdbxCMakeFiles
des geklonten Repositorys festlegen oder erigon mit den folgenden beiden anderen Optionen ausführen
Verwenden Sie Docker: siehe docker-compose.yml
Verwenden Sie WSL (Windows-Subsystem für Linux) ausschließlich in Version 2 . Mit dieser Option können Sie Erigon genauso erstellen, wie Sie es mit einer regulären Linux-Distribution tun würden. Sie können Ihre Daten auch auf eine der gemounteten Windows-Partitionen verweisen (z. B. /mnt/c/[...]
, /mnt/d/[...]
usw.). Beachten Sie jedoch, dass in diesem Fall die Leistung beeinträchtigt wird: Dies Dies liegt an der Tatsache, dass diese Mount-Punkte DrvFS
verwenden, ein Netzwerkdateisystem, und dass MDBX außerdem die Datenbank für den exklusiven Zugriff sperrt, was bedeutet, dass jeweils nur ein Prozess auf Daten zugreifen kann. Dies hat Auswirkungen auf die Ausführung von rpcdaemon
, der als Remote DB konfiguriert werden muss, auch wenn er auf demselben Computer ausgeführt wird. Wenn Ihre Daten stattdessen auf dem nativen Linux-Dateisystem gehostet werden, gelten keine Einschränkungen. Bitte beachten Sie auch, dass die Standard-WSL2-Umgebung eine eigene IP-Adresse hat, die nicht mit der der Netzwerkschnittstelle des Windows-Hosts übereinstimmt: Berücksichtigen Sie dies bei der Konfiguration von NAT für Port 30303 auf Ihrem Router.
Die Hauptdiskussionen finden auf unserem Discord-Server statt. Um eine Einladung zu erhalten, senden Sie eine E-Mail an bloxster [at] proton.me
mit Ihrem Namen, Beruf, einer kurzen Erklärung, warum Sie dem Discord beitreten möchten und wie Sie von Erigon erfahren haben.
erigon.substack.com
x.com/ErigonEth
Senden Sie eine E-Mail an security [at] torquem.ch
.
htop
zeigt eine falsche Speichernutzung an Erigons interne Datenbank (MDBX) verwendet MemoryMap
– wenn das Betriebssystem alle read, write, cache
-Vorgänge anstelle der Anwendung verwaltet (Linux, Windows)
htop
zeigt in der Spalte res
den Speicher von „App + Betriebssystem zum Speichern des Seitencaches für eine bestimmte App“ an, ist jedoch nicht informativ, denn wenn htop
angibt, dass die App 90 % des Speichers belegt, können Sie immer noch drei weitere Instanzen der App auf demselben Computer ausführen - weil der größte Teil dieser 90%
„OS-Seiten-Cache“ ist. Das Betriebssystem gibt diesen Cache jedes Mal automatisch frei, wenn es Speicher benötigt. Eine kleinere „Seiten-Cache-Größe“ hat möglicherweise keinerlei Auswirkungen auf die Leistung von Erigon.
Die nächsten Tools zeigen die korrekte Speichernutzung von Erigon:
vmmap -summary PID | grep -i "Physical footprint"
. Ohne grep
können Sie Details sehensection MALLOC ZONE column Resident Size
zeigt die App-Speichernutzung, section REGION TYPE column Resident Size
zeigt die Cache-Größe der Betriebssystemseiten.Prometheus
-Dashboard zeigt den Speicher der Go-App ohne Betriebssystem-Seiten-Cache an ( make prometheus
, im Browser localhost:3000
öffnen, Anmeldeinformationen admin/admin
)cat /proc//smaps
Erigon verwendet während der Genesis-Synchronisierung etwa 4 GB RAM und während der normalen Arbeit etwa 1 GB. Der Cache der Betriebssystemseiten kann eine unbegrenzte Menge an Speicher nutzen.
Warnung: Mehrere Instanzen von Erigon auf demselben Computer berühren gleichzeitig die Festplatte, was sich auf die Leistung auswirkt – eine der wichtigsten Erigon-Optimierungen: „Zufallszugriff auf die Festplatte reduzieren“. „Blocks Execution Stage“ führt immer noch viele zufällige Lesevorgänge aus – das ist der Grund, warum es die langsamste Phase ist. Wir empfehlen nicht, mehrere Genesis-Synchronisierungen auf derselben Festplatte auszuführen. Wenn die Genesis-Synchronisierung erfolgreich war, ist es in Ordnung, mehrere Erigon-Instanzen auf derselben Festplatte auszuführen.
(Wie gp3) Sie können lesen: #1516 (Kommentar) Kurz gesagt: Netzwerkfestplatten sind schlecht für die Blockausführung – weil die Blockausführung das Lesen von Daten aus der Datenbank nicht parallel und nicht stapelweise durchführt. Tricks: Wenn Sie genügend RAM bereitstellen und die Umgebungsvariable ERIGON_SNAPSHOT_MADV_RND=false
setzen, funktioniert Erigon gut genug auf Cloud-Laufwerken – allerdings mit höheren IO-Kosten.
Beispiel: Die automatische Defragmentierungsoption von btrfs kann die Schreib-E/A um das Hundertfache erhöhen
Gnome Tracker – Miner aufspüren und töten.
Für alle anderen, die beim Versuch, Erigon auf die alte Art und Weise zu starten, den BuildKit-Fehler erhalten haben, können Sie Folgendes verwenden ...
XDG_DATA_HOME=/preferred/data/folder DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 make docker-compose