Helios es un cliente ligero multicadena portátil, eficiente y confiable escrito en Rust.
Helios convierte un punto final RPC centralizado que no es de confianza en un RPC local seguro e inmanipulable para sus usuarios. Se sincroniza en segundos, no requiere almacenamiento y es lo suficientemente liviano como para ejecutarlo en dispositivos móviles.
Helios tiene un tamaño binario pequeño y se compila en WebAssembly. Esto lo convierte en un objetivo perfecto para insertar directamente dentro de billeteras y dapps.
Primero instale heliosup
, el instalador de Helios:
curl https://raw.githubusercontent.com/a16z/helios/master/heliosup/install | bash
Para instalar Helios, ejecute heliosup
.
Para ejecutar Helios en Ethereum, ejecute el siguiente comando, reemplazando $ETH_RPC_URL
con una URL de proveedor de RPC como Alchemy:
helios ethereum --execution-rpc $ETH_RPC_URL
$ETH_RPC_URL
debe ser un proveedor de API de ejecución de Ethereum compatible que proporcione el punto final eth_getProof
. Actualmente, Infura no admite esto. Recomendamos utilizar Alquimia.
Helios ahora ejecutará un servidor RPC local en http://127.0.0.1:8545
.
Helios también proporciona documentación de sus métodos RPC admitidos en el archivo rpc.md.
Para ejecutar Helios en una cadena OP Stack, ejecute el siguiente comando, reemplazando $ETH_RPC_URL
con una URL de proveedor RPC como Alchemy y $NETWORK
con una red OP Stack compatible:
helios opstack --network $NETWORK --execution-rpc $ETH_RPC_URL
Los valores de red actualmente admitidos son op-mainnet
y base
, y pronto habrá más.
--consensus-rpc
o -c
se pueden utilizar para establecer un punto final rpc de capa de consenso personalizado. Debe ser un nodo de consenso que admita la API de cadena de balizas del cliente ligero. Recomendamos utilizar Nimbus para esto. Si no se proporciona un rpc de consenso, el valor predeterminado es https://www.lightclientdata.org
, que ejecutamos nosotros.
--checkpoint
o -w
se pueden utilizar para establecer un punto de control de subjetividad débil personalizado. Debe ser igual al primer hash del bloque de baliza de una época. Los puntos de control de subjetividad débiles son la raíz de la confianza en el sistema. Si se establece en un valor malicioso, un atacante puede hacer que el cliente se sincronice con la cadena incorrecta. Helios establece un valor predeterminado inicialmente y luego almacena en caché el bloque finalizado más reciente que ha visto para su uso posterior.
--network
o -n
configura la red con la que se sincronizará. Las opciones válidas actuales son mainnet
, sepolia
y holesky
sin embargo, los usuarios pueden agregar redes personalizadas en sus archivos de configuración.
--rpc-port
o -p
establece el puerto en el que debe ejecutarse el RPC local. El valor predeterminado es 8545
.
--rpc-bind-ip
o -b
establece la ip que se vincula al servidor JSON-RPC. De forma predeterminada, Helios utilizará 127.0.0.1
. Utilice 0.0.0.0
para permitir el acceso remoto.
--data-dir
o -d
establece el directorio que Helios debe usar para almacenar puntos de control de subjetividad débil en caché. Cada red solo almacena el último punto de control, que tiene solo 32 bytes.
--fallback
o -f
establece la URL alternativa del punto de control (una cadena). Esto solo se usa si el punto de control proporcionado por el indicador --checkpoint
está demasiado desactualizado para que Helios lo use para sincronizar. Si no se proporciona ninguno y el indicador --load-external-fallback
no está configurado, Helios generará un error. Por ejemplo, puede especificar el respaldo de esta manera: helios --fallback "https://sync-mainnet.beaconcha.in"
(o usando una abreviatura como esta: helios -f "https://sync-mainnet.beaconcha.in"
)
--load-external-fallback
o -l
habilita un punto de control de subjetividad débil (no se necesita ningún valor). Por ejemplo, supongamos que establece un valor de punto de control que está demasiado desactualizado y Helios no puede sincronizarse con él. Si se establece este indicador, Helios consultará todas las API de red en la lista mantenida por la comunidad en ethpandaops/checkpoint-sync-health-checks para conocer sus espacios más recientes. La lista de espacios se filtra para detectar API en buen estado y se devolverá el punto de control más frecuente que se produzca en la última época. Nota: esta es una lista mantenida por la comunidad y, por lo tanto, no se ofrecen garantías de seguridad. Utilice esto como último recurso si su punto de control pasó a --checkpoint
falla. Esto no se recomienda ya que las API enumeradas pueden devolver puntos de control maliciosos, incluso si se consideran en buen estado . Esto se puede ejecutar así: helios --load-external-fallback
(o helios -l
con la abreviatura).
--strict-checkpoint-age
o -s
permite una verificación estricta de la edad del punto de control. Si el punto de control tiene más de dos semanas y este indicador está habilitado, Helios generará un error. Sin esta bandera, Helios mostrará una advertencia al usuario y continuará. Si el punto de control tiene más de dos semanas, existen ataques teóricos que pueden provocar que Helios y los clientes overlight se sincronicen incorrectamente. Estos ataques son complejos y costosos, por lo que Helios los desactiva de forma predeterminada.
--help
o -h
imprime el mensaje de ayuda.
Todas las opciones de configuración se pueden configurar a nivel de red en ~/.helios/helios.toml
. Aquí hay un archivo de configuración de ejemplo:
[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. es/v2/XXXXXX"
Un desglose completo de las opciones de configuración está disponible en el archivo config.md.
Se pueden ver ejemplos de ejecución de Helios como una biblioteca Rust en el directorio de ejemplos.
Un punto de control es un hash de bloque de la capa de consenso de Beacon Chain en lugar de un hash de bloque de la capa de ejecución. En https://holesky.etherscan.io/blocks se muestra un ejemplo de un hash de bloque de capa de ejecución para Holesky.
Los puntos de control se pueden obtener en los siguientes enlaces:
Red principal de Ethereum https://beaconcha.in
Red de prueba Holesky https://holesky.beaconcha.in
Se recomienda usar un hash de bloque como punto de control que tenga menos de dos semanas; sin embargo, puede usar puntos de control más antiguos y seguirá funcionando, pero le dará una advertencia. Usar un punto de control que tenga menos de dos semanas previene algunos ataques que son bastante difíciles de llevar a cabo.
Por ejemplo, para obtener un punto de control reciente para Holesky Testnet, vaya a https://holesky.beaconcha.in/ y obtenga el hash del primer bloque en cualquier época finalizada. Al momento de escribir este artículo, el primer hash de bloque en la época 78425 es la ranura 2509600 más antigua que tiene una raíz de bloque de 0x60409a013161b33c8c68c6183c7753e779ec6c24be2f3c50c6036c30e13b34a6 y es el último valor de punto de control que se utilizará.
Este último punto de control se puede proporcionar como una opción CLI adicional en la línea de comando para ejecutar un nodo Helios Light Client en Ethereum Holesky Testnet:
helio etéreo --red agujerosky --consensus-rpc http://testing.holesky.beacon-api.nimbus.team --ejecución-rpc https://ethereum-holesky.g.allthatnode.com --punto de control 0x60409a013161b33c8c68c6183c7753e779ec6c24be2f3c50c6036c30e13b34a6
Por ejemplo, para obtener un punto de control reciente para Ethereum Mainnet, vaya a https://beaconcha.in y obtenga el hash del primer bloque en cualquier época finalizada. Al momento de escribir este artículo, el primer hash de bloque en la época 222705 es la ranura más antigua 7126560 que tiene una raíz de bloque de 0xe1912ca8ca3b45dac497cae7825bab055b0f60285533721b046e8fefb5b076f2 y es el último valor de punto de control que se utilizará.
Este último punto de control se puede proporcionar como una opción CLI adicional en la línea de comando para ejecutar un nodo Helios Light Client en Ethereum Mainnet:
helio etéreo --red principal --consenso-rpc https://www.lightclientdata.org --ejecución-rpc https://ethereum-mainnet.g.allthatnode.com --punto de control 0xe1912ca8ca3b45dac497cae7825bab055b0f60285533721b046e8fefb5b076f2
Si desea utilizar un archivo de configuración en lugar de argumentos CLI, debe reemplazar los puntos de control de ejemplo en el archivo de configuración con los puntos de control más recientes obtenidos anteriormente.
Para garantizar que Helios funcione como se espera, contamos con un conjunto de pruebas completo que puede ejecutar. Antes de ejecutar las pruebas, asegúrese de crear un archivo .env
en la raíz del directorio del proyecto. Puede copiar el contenido del archivo .env.example
y completar sus propios secretos.
cp .env.ejemplo .env
Para ejecutar todas las pruebas, utilice el siguiente comando:
prueba de carga todo
Para ejecutar pruebas para un paquete individual, use este comando, reemplazándolo con el paquete que desea probar:
prueba de carga -p <nombre-paquete>
Todas las contribuciones a Helios son bienvenidas. Antes de abrir un PR, envíe un problema que detalle el error o la característica. Al abrir un PR, asegúrese de que su contribución se desarrolle, se haya modificado con cargo fmt
y contenga pruebas cuando corresponda.
Si tiene problemas con Helios o está considerando contribuir, no dude en unirse a nuestro telegrama aquí.
Este código se proporciona tal cual. No se ofrece ninguna garantía, representación o garantía, expresa o implícita, en cuanto a la seguridad o corrección del código. No ha sido auditado y, como tal, no se puede garantizar que funcionará según lo previsto y los usuarios pueden experimentar retrasos, fallas, errores, omisiones o pérdida de la información transmitida. Nada en este reporto debe interpretarse como asesoramiento de inversión o asesoramiento legal para hechos o circunstancias particulares y no pretende reemplazar a un abogado competente. Le recomendamos encarecidamente que se comunique con un abogado acreditado en su jurisdicción si tiene alguna pregunta o inquietud al respecto. a16z no es responsable del uso de lo anterior, y los usuarios deben proceder con precaución y utilizarlo bajo su propio riesgo. Consulte a16z.com/disclosures para obtener más información.