Helios est un client léger multichaîne sans confiance, efficace et portable écrit en Rust.
Helios convertit un point de terminaison RPC centralisé non fiable en un RPC local sécurisé et non manipulable pour ses utilisateurs. Il se synchronise en quelques secondes, ne nécessite aucun stockage et est suffisamment léger pour fonctionner sur des appareils mobiles.
Helios a une petite taille binaire et se compile en WebAssembly. Cela en fait une cible parfaite à intégrer directement dans les portefeuilles et les dapps.
Installez d'abord heliosup
, l'installateur d'Helios :
curl https://raw.githubusercontent.com/a16z/helios/master/heliosup/install | bash
Pour installer Helios, exécutez heliosup
.
Pour exécuter Helios sur Ethereum, exécutez la commande ci-dessous, en remplaçant $ETH_RPC_URL
par l'URL d'un fournisseur RPC tel que Alchemy :
helios ethereum --execution-rpc $ETH_RPC_URL
$ETH_RPC_URL
doit être un fournisseur d'API d'exécution Ethereum pris en charge qui fournit le point de terminaison eth_getProof
. Infura ne prend actuellement pas en charge cela. Nous vous recommandons d'utiliser l'alchimie.
Helios exécutera désormais un serveur RPC local à l' http://127.0.0.1:8545
.
Helios fournit également une documentation sur ses méthodes RPC prises en charge dans le fichier rpc.md.
Pour exécuter Helios sur une chaîne OP Stack, exécutez la commande ci-dessous, en remplaçant $ETH_RPC_URL
par une URL de fournisseur RPC telle que Alchemy et $NETWORK
par un réseau OP Stack pris en charge :
helios opstack --network $NETWORK --execution-rpc $ETH_RPC_URL
Les valeurs de réseau actuellement prises en charge sont op-mainnet
et base
, et d'autres seront bientôt disponibles.
--consensus-rpc
ou -c
peut être utilisé pour définir un point de terminaison RPC de couche consensus personnalisé. Il doit s'agir d'un nœud de consensus qui prend en charge l'API beaconchain du client léger. Nous vous recommandons d'utiliser Nimbus pour cela. Si aucun RPC de consensus n'est fourni, la valeur par défaut est https://www.lightclientdata.org
qui est géré par nous.
--checkpoint
ou -w
peut être utilisé pour définir un point de contrôle de subjectivité faible personnalisé. Cela doit être égal au premier hachage de bloc de balise d’une époque. La faiblesse des points de contrôle de la subjectivité est à l’origine de la confiance dans le système. Si cette valeur est malveillante, un attaquant peut amener le client à se synchroniser sur la mauvaise chaîne. Helios définit initialement une valeur par défaut, puis met en cache le bloc finalisé le plus récent qu'il a vu pour une utilisation ultérieure.
--network
ou -n
définit le réseau avec lequel se synchroniser. Les options actuellement valides sont mainnet
, sepolia
et holesky
, mais les utilisateurs peuvent ajouter des réseaux personnalisés dans leurs fichiers de configuration.
--rpc-port
ou -p
définit le port sur lequel le RPC local doit s'exécuter. La valeur par défaut est 8545
.
--rpc-bind-ip
ou -b
définit l'adresse IP qui se lie au serveur JSON-RPC. Par défaut, Helios utilisera 127.0.0.1
. Utilisez 0.0.0.0
pour autoriser l'accès à distance.
--data-dir
ou -d
définit le répertoire qu'Helios doit utiliser pour stocker les points de contrôle de subjectivité faible mis en cache. Chaque réseau ne stocke que le dernier point de contrôle, qui ne fait que 32 octets.
--fallback
ou -f
définit l'URL de secours du point de contrôle (une chaîne). Ceci n'est utilisé que si le point de contrôle fourni par l'indicateur --checkpoint
est trop obsolète pour qu'Helios puisse l'utiliser pour la synchronisation. Si aucun n'est fourni et que l'indicateur --load-external-fallback
n'est pas défini, Helios générera une erreur. Par exemple, vous pouvez spécifier la solution de secours comme ceci : helios --fallback "https://sync-mainnet.beaconcha.in"
(ou en utilisant un raccourci comme ceci : helios -f "https://sync-mainnet.beaconcha.in"
)
--load-external-fallback
ou -l
active le repli du point de contrôle de subjectivité faible (aucune valeur nécessaire). Par exemple, disons que vous définissez une valeur de point de contrôle trop obsolète et qu'Helios ne peut pas se synchroniser avec elle. Si cet indicateur est défini, Helios interrogera toutes les API réseau de la liste maintenue par la communauté sur ethpandaops/checkpoint-sync-health-checks pour connaître leurs derniers emplacements. La liste des emplacements est filtrée pour les API saines et le point de contrôle le plus fréquent se produisant au cours de la dernière époque sera renvoyé. Remarque : il s'agit d'une liste maintenue par la communauté et aucune garantie de sécurité n'est donc fournie. Utilisez-le en dernier recours si votre point de contrôle passé dans --checkpoint
échoue. Cela n'est pas recommandé car des points de contrôle malveillants peuvent être renvoyés à partir des API répertoriées, même s'ils sont considérés comme sains . Cela peut être exécuté comme ceci : helios --load-external-fallback
(ou helios -l
avec le raccourci).
--strict-checkpoint-age
ou -s
permet une vérification stricte de l'âge du point de contrôle. Si le point de contrôle date de plus de deux semaines et que cet indicateur est activé, Helios générera une erreur. Sans cet indicateur, Helios affichera un avertissement à l'utilisateur et continuera. Si le point de contrôle date de plus de deux semaines, il existe des attaques théoriques qui peuvent entraîner une synchronisation incorrecte des clients Helios et Over Light. Ces attaques sont complexes et coûteuses, Helios les désactive donc par défaut.
--help
ou -h
imprime le message d'aide.
Toutes les options de configuration peuvent être définies au niveau de chaque réseau dans ~/.helios/helios.toml
. Voici un exemple de fichier de configuration :
[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"
Une ventilation complète des options de configuration est disponible dans le fichier config.md.
Des exemples d'exécution d'Helios en tant que bibliothèque Rust peuvent être vus dans le répertoire d'exemples.
Un point de contrôle est un hachage de bloc de couche de consensus de chaîne de balise plutôt qu'un hachage de bloc de couche d'exécution. Un exemple de hachage de bloc de couche d'exécution pour Holesky est présenté sur https://holesky.etherscan.io/blocks
Les points de contrôle peuvent être obtenus à partir des liens suivants :
Réseau principal Ethereum https://beaconcha.in
Holesky Testnet https://holesky.beaconcha.in
Il est recommandé d'utiliser un hachage de bloc comme point de contrôle datant de moins de deux semaines. Cependant, vous pouvez réellement utiliser des points de contrôle plus anciens et cela fonctionnera toujours mais vous donnera un avertissement. Utiliser un point de contrôle datant de moins de deux semaines permet d’éviter quelques attaques assez difficiles à réaliser.
Par exemple, pour obtenir un point de contrôle récent pour Holesky Testnet, accédez à https://holesky.beaconcha.in/ et obtenez le hachage de bloc du premier bloc de n'importe quelle époque finalisée. Au moment de la rédaction de cet article, le premier hachage de bloc de l'époque 78425 est l'emplacement le plus ancien 2509600 qui a une racine de bloc de 0x60409a013161b33c8c68c6183c7753e779ec6c24be2f3c50c6036c30e13b34a6 et constitue la dernière valeur de point de contrôle à utiliser.
Ce dernier point de contrôle peut être fourni en tant qu'option CLI supplémentaire sur la ligne de commande pour exécuter un nœud Helios Light Client sur Ethereum Holesky Testnet :
hélios ethereum --réseau troué --consensus-rpc http://testing.holesky.beacon-api.nimbus.team --execution-rpc https://ethereum-holesky.g.allthatnode.com --point de contrôle 0x60409a013161b33c8c68c6183c7753e779ec6c24be2f3c50c6036c30e13b34a6
Par exemple, pour obtenir un point de contrôle récent pour Ethereum Mainnet, accédez à https://beaconcha.in et obtenez le hachage de bloc du premier bloc de n'importe quelle époque finalisée. Au moment de la rédaction, le premier hachage de bloc de l'époque 222705 est l'emplacement le plus ancien 7126560 qui a une racine de bloc de 0xe1912ca8ca3b45dac497cae7825bab055b0f602855533721b046e8fefb5b076f2 et constitue la dernière valeur de point de contrôle à utiliser.
Ce dernier point de contrôle peut être fourni en tant qu'option CLI supplémentaire sur la ligne de commande pour exécuter un nœud Helios Light Client sur Ethereum Mainnet :
hélios ethereum --réseau principal --consensus-rpc https://www.lightclientdata.org --execution-rpc https://ethereum-mainnet.g.allthatnode.com --point de contrôle 0xe1912ca8ca3b45dac497cae7825bab055b0f60285533721b046e8fefb5b076f2
Si vous souhaitez utiliser un fichier de configuration au lieu d'arguments CLI, vous devez remplacer les exemples de points de contrôle dans le fichier de configuration par les derniers points de contrôle obtenus ci-dessus.
Pour garantir qu'Helios fonctionne comme prévu, nous disposons d'une suite de tests complète que vous pouvez exécuter. Avant d'exécuter les tests, assurez-vous de créer un fichier .env
à la racine du répertoire du projet. Vous pouvez copier le contenu du fichier .env.example
et renseigner vos propres secrets.
cp .env.exemple .env
Pour exécuter tous les tests, utilisez la commande suivante :
test de fret tout
Pour exécuter des tests pour un package individuel, utilisez cette commande, en la remplaçant par le package que vous souhaitez tester :
cargo test -p <nom du paquet>
Toutes les contributions à Helios sont les bienvenues. Avant d'ouvrir un PR, veuillez soumettre un problème détaillant le bogue ou la fonctionnalité. Lors de l'ouverture d'un PR, veuillez vous assurer que votre contribution est structurée, a été doublée de cargo fmt
et contient des tests le cas échéant.
Si vous rencontrez des problèmes avec Helios ou envisagez de contribuer, n'hésitez pas à rejoindre notre télégramme ici.
Ce code est fourni tel quel. Aucune garantie, représentation ou garantie n'est faite, expresse ou implicite, quant à la sécurité ou à l'exactitude du code. Il n'a pas été audité et, par conséquent, rien ne garantit qu'il fonctionnera comme prévu, et les utilisateurs peuvent subir des retards, des pannes, des erreurs, des omissions ou une perte des informations transmises. Rien dans ce référentiel ne doit être interprété comme un conseil en investissement ou un conseil juridique pour des faits ou circonstances particuliers et n'est pas destiné à remplacer un conseil compétent. Il vous est fortement conseillé de contacter un avocat réputé dans votre juridiction pour toute question ou préoccupation à ce sujet. a16z n'est pas responsable de toute utilisation de ce qui précède, et les utilisateurs doivent procéder avec prudence et utiliser à leurs propres risques. Voir a16z.com/disclosures pour plus d'informations.