Helios ist ein vertrauenswürdiger, effizienter und portabler Multichain-Light-Client, der in Rust geschrieben ist.
Helios wandelt einen nicht vertrauenswürdigen zentralen RPC-Endpunkt in einen sicheren, nicht manipulierbaren lokalen RPC für seine Benutzer um. Die Synchronisierung erfolgt in Sekundenschnelle, erfordert keinen Speicher und ist leicht genug, um auf mobilen Geräten ausgeführt zu werden.
Helios hat eine kleine Binärgröße und lässt sich in WebAssembly kompilieren. Dies macht es zu einem perfekten Ziel für die direkte Einbettung in Wallets und Dapps.
Installieren Sie zuerst heliosup
, das Installationsprogramm von Helios:
curl https://raw.githubusercontent.com/a16z/helios/master/heliosup/install | bash
Um Helios zu installieren, führen Sie heliosup
aus.
Um Helios auf Ethereum auszuführen, führen Sie den folgenden Befehl aus und ersetzen Sie $ETH_RPC_URL
durch eine RPC-Anbieter-URL wie Alchemy:
helios ethereum --execution-rpc $ETH_RPC_URL
$ETH_RPC_URL
muss ein unterstützter Ethereum Execution API-Anbieter sein, der den eth_getProof
Endpunkt bereitstellt. Infura unterstützt dies derzeit nicht. Wir empfehlen die Verwendung von Alchemie.
Helios führt jetzt einen lokalen RPC-Server unter http://127.0.0.1:8545
aus.
Helios stellt außerdem eine Dokumentation seiner unterstützten RPC-Methoden in der Datei rpc.md bereit.
Um Helios in einer OP-Stack-Kette auszuführen, führen Sie den folgenden Befehl aus und ersetzen Sie $ETH_RPC_URL
durch eine RPC-Anbieter-URL wie Alchemy und $NETWORK
durch ein unterstütztes OP-Stack-Netzwerk:
helios opstack --network $NETWORK --execution-rpc $ETH_RPC_URL
Derzeit unterstützte Netzwerkwerte sind op-mainnet
und base
, weitere folgen in Kürze.
--consensus-rpc
oder -c
können verwendet werden, um einen benutzerdefinierten RPC-Endpunkt für die Konsensschicht festzulegen. Dies muss ein Konsensknoten sein, der die Light-Client-Beaconchain-API unterstützt. Wir empfehlen hierfür Nimbus. Wenn kein Konsens-RPC angegeben wird, wird standardmäßig https://www.lightclientdata.org
verwendet, das von uns betrieben wird.
--checkpoint
oder -w
können verwendet werden, um einen benutzerdefinierten Prüfpunkt für schwache Subjektivität festzulegen. Dieser muss dem ersten Beacon-Block-Hash einer Epoche entsprechen. Schwache Subjektivitätskontrollpunkte sind die Wurzel des Vertrauens in das System. Wenn dieser Wert auf einen böswilligen Wert eingestellt ist, kann ein Angreifer dazu führen, dass der Client mit der falschen Kette synchronisiert wird. Helios legt zunächst einen Standardwert fest und speichert dann den letzten finalisierten Block, den es gesehen hat, für die spätere Verwendung zwischen.
--network
oder -n
legt das Netzwerk fest, mit dem synchronisiert werden soll. Derzeit gültige Optionen sind mainnet
, sepolia
und holesky
Benutzer können jedoch benutzerdefinierte Netzwerke in ihren Konfigurationsdateien hinzufügen.
--rpc-port
oder -p
legt den Port fest, auf dem der lokale RPC ausgeführt werden soll. Der Standardwert ist 8545
.
--rpc-bind-ip
oder -b
legt die IP fest, die an den JSON-RPC-Server gebunden wird. Standardmäßig verwendet Helios 127.0.0.1
. Verwenden Sie 0.0.0.0
um den Fernzugriff zu ermöglichen.
--data-dir
oder -d
legt das Verzeichnis fest, in dem Helios zwischengespeicherte Prüfpunkte für schwache Subjektivität speichern soll. Jedes Netzwerk speichert nur den neuesten Prüfpunkt, der nur 32 Byte groß ist.
--fallback
oder -f
legt die Checkpoint-Fallback-URL (eine Zeichenfolge) fest. Dies wird nur verwendet, wenn der durch das Flag --checkpoint
bereitgestellte Prüfpunkt zu veraltet ist, als dass Helios ihn für die Synchronisierung verwenden könnte. Wenn keine angegeben wird und das Flag --load-external-fallback
nicht gesetzt ist, gibt Helios einen Fehler aus. Sie können den Fallback beispielsweise wie folgt angeben: helios --fallback "https://sync-mainnet.beaconcha.in"
(oder mit einer Abkürzung wie folgt: helios -f "https://sync-mainnet.beaconcha.in"
)
--load-external-fallback
oder -l
ermöglicht einen schwachen Subjektivitäts-Checkpoint-Fallback (kein Wert erforderlich). Angenommen, Sie legen einen Prüfpunktwert fest, der zu veraltet ist und Helios nicht damit synchronisieren kann. Wenn dieses Flag gesetzt ist, fragt Helios alle Netzwerk-APIs in der von der Community verwalteten Liste unter ethpandaops/checkpoint-sync-health-checks nach ihren neuesten Slots ab. Die Liste der Slots wird nach fehlerfreien APIs gefiltert und der in der letzten Epoche am häufigsten auftretende Prüfpunkt wird zurückgegeben. Hinweis: Dies ist eine von der Community gepflegte Liste und daher werden keine Sicherheitsgarantien gegeben. Verwenden Sie dies als letzten Ausweg, wenn Ihr an --checkpoint
übergebener Prüfpunkt fehlschlägt. Dies wird nicht empfohlen, da bösartige Prüfpunkte von den aufgelisteten APIs zurückgegeben werden können, selbst wenn sie als fehlerfrei gelten. Dies kann wie folgt ausgeführt werden: helios --load-external-fallback
(oder helios -l
mit der Abkürzung).
--strict-checkpoint-age
oder -s
ermöglicht eine strikte Überprüfung des Checkpoint-Alters. Wenn der Prüfpunkt älter als zwei Wochen ist und dieses Flag aktiviert ist, gibt Helios einen Fehler aus. Ohne dieses Flag zeigt Helios dem Benutzer stattdessen eine Warnung an und fährt fort. Wenn der Prüfpunkt älter als zwei Wochen ist, gibt es theoretisch Angriffe, die dazu führen können, dass Helios und Overlight-Clients falsch synchronisiert werden. Da diese Angriffe komplex und teuer sind, deaktiviert Helios sie standardmäßig.
--help
oder -h
gibt die Hilfemeldung aus.
Alle Konfigurationsoptionen können auf Netzwerkebene in ~/.helios/helios.toml
festgelegt werden. Hier ist eine Beispielkonfigurationsdatei:
[mainnet]consensus_rpc = "https://ethereum.operationsolarstorm.org"execution_rpc = "https://eth-mainnet.g.alchemy.com/v2/XXXXX"checkpoint = „0x85e6151a246e8fdba36db27a0c7678a575346272fe978c9281e13a8b26cdfa68“[op-mainnet]consensus_rpc = „https://op-mainnet.operationsolarstorm.org“execution_rpc = „https://opt-mainnet.g.alchemy.com/v2/XXXXX“[base]consensus_rpc = „https://base.operationsolarstorm.org“execution_rpc = „https://base-mainnet.g.alchemy. com/v2/XXXXX"
Eine umfassende Aufschlüsselung der Konfigurationsoptionen ist in der Datei config.md verfügbar.
Beispiele für die Ausführung von Helios als Rust-Bibliothek finden Sie im Beispielverzeichnis.
Ein Checkpoint ist ein Beacon Chain Consensus Layer-Block-Hash und kein Execution Layer-Block-Hash. Ein Beispiel für einen Execution Layer-Block-Hash für Holesky wird unter https://holesky.etherscan.io/blocks gezeigt
Kontrollpunkte können über die folgenden Links abgerufen werden:
Ethereum-Mainnet https://beaconcha.in
Holesky Testnet https://holesky.beaconcha.in
Es wird empfohlen, einen Block-Hash als Prüfpunkt zu verwenden, der weniger als zwei Wochen alt ist. Sie können jedoch auch ältere Prüfpunkte verwenden, die weiterhin funktionieren, Ihnen aber eine Warnung anzeigen. Die Verwendung eines Kontrollpunkts, der weniger als zwei Wochen alt ist, verhindert einige Angriffe, die ziemlich schwer durchzuführen sind.
Um beispielsweise einen aktuellen Prüfpunkt für Holesky Testnet zu erhalten, gehen Sie zu https://holesky.beaconcha.in/ und rufen Sie den Block-Hash des ersten Blocks in einer abgeschlossenen Epoche ab. Zum Zeitpunkt des Schreibens ist der erste Block-Hash in Epoche 78425 der älteste Slot 2509600, der einen Block-Root von 0x60409a013161b33c8c68c6183c7753e779ec6c24be2f3c50c6036c30e13b34a6 hat und der neueste zu verwendende Prüfpunktwert ist.
Dieser neueste Prüfpunkt kann als zusätzliche CLI-Option in der Befehlszeile bereitgestellt werden, um einen Helios Light Client-Knoten im Ethereum Holesky Testnet auszuführen:
Helios Ethereum --network holesky --consensus-rpc http://testing.holesky.beacon-api.nimbus.team --execution-rpc https://ethereum-holesky.g.allthatnode.com --checkpoint 0x60409a013161b33c8c68c6183c7753e779ec6c24be2f3c50c6036c30e13b34a6
Um beispielsweise einen aktuellen Prüfpunkt für das Ethereum Mainnet zu erhalten, gehen Sie zu https://beaconcha.in und rufen Sie den Block-Hash des ersten Blocks in einer abgeschlossenen Epoche ab. Zum Zeitpunkt des Schreibens ist der erste Block-Hash in Epoche 222705 der älteste Slot 7126560, der einen Block-Root von 0xe1912ca8ca3b45dac497cae7825bab055b0f60285533721b046e8fefb5b076f2 hat und der neueste zu verwendende Prüfpunktwert ist.
Dieser neueste Prüfpunkt kann als zusätzliche CLI-Option in der Befehlszeile bereitgestellt werden, um einen Helios Light Client-Knoten im Ethereum Mainnet auszuführen:
Helios Ethereum --network Hauptnetz --consensus-rpc https://www.lightclientdata.org --execution-rpc https://ethereum-mainnet.g.allthatnode.com --checkpoint 0xe1912ca8ca3b45dac497cae7825bab055b0f60285533721b046e8fefb5b076f2
Wenn Sie eine Konfigurationsdatei anstelle von CLI-Argumenten verwenden möchten, sollten Sie die Beispielprüfpunkte in der Konfigurationsdatei durch die neuesten oben erhaltenen Prüfpunkte ersetzen.
Um sicherzustellen, dass Helios wie erwartet funktioniert, verfügen wir über eine umfassende Testsuite, die Sie ausführen können. Stellen Sie vor dem Ausführen der Tests sicher, dass Sie eine .env
Datei im Stammverzeichnis des Projektverzeichnisses erstellen. Sie können den Inhalt der Datei .env.example
kopieren und Ihre eigenen Geheimnisse eingeben.
cp .env.example .env
Um alle Tests auszuführen, verwenden Sie den folgenden Befehl:
Frachttest-alles
Um Tests für ein einzelnes Paket auszuführen, verwenden Sie diesen Befehl und ersetzen Sie ihn durch das Paket, das Sie testen möchten:
Ladungstest -p <Paketname>
Alle Beiträge zu Helios sind willkommen. Bevor Sie eine PR öffnen, reichen Sie bitte ein Problem ein, in dem der Fehler oder die Funktion detailliert beschrieben wird. Stellen Sie beim Öffnen einer PR bitte sicher, dass Ihr Beitrag aufgebaut ist, mit cargo fmt
versehen wurde und ggf. Tests enthält.
Wenn Sie Probleme mit Helios haben oder darüber nachdenken, einen Beitrag zu leisten, können Sie sich gerne hier an unserem Telegram beteiligen.
Dieser Code wird unverändert bereitgestellt. Es wird weder ausdrücklich noch stillschweigend eine Garantie, Zusicherung oder Gewährleistung hinsichtlich der Sicherheit oder Richtigkeit des Codes gegeben. Es wurde nicht geprüft und daher kann nicht garantiert werden, dass es wie vorgesehen funktioniert. Bei Benutzern kann es zu Verzögerungen, Ausfällen, Fehlern, Auslassungen oder dem Verlust übertragener Informationen kommen. Nichts in diesem Repo sollte als Anlageberatung oder Rechtsberatung für bestimmte Tatsachen oder Umstände ausgelegt werden und ist nicht dazu gedacht, eine kompetente Beratung zu ersetzen. Es wird Ihnen dringend empfohlen, sich bei diesbezüglichen Fragen oder Bedenken an einen seriösen Anwalt in Ihrer Gerichtsbarkeit zu wenden. a16z haftet nicht für die Nutzung des Vorstehenden und Benutzer sollten mit Vorsicht vorgehen und die Nutzung auf eigenes Risiko durchführen. Weitere Informationen finden Sie unter a16z.com/disclosures.