From 568934e4e36d3ce7a3ff2e9367417038b2ede42b Mon Sep 17 00:00:00 2001 From: Noah Citron Date: Wed, 26 Oct 2022 16:12:35 -0400 Subject: [PATCH] documentation: write readme (#73) * documentation: write readme * fix build badge * fix badge * fix badge * fix badge * fix typo * typo --- README.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..89674b1 --- /dev/null +++ b/README.md @@ -0,0 +1,46 @@ +## Helios +[![build](https://github.com/a16z/helios/actions/workflows/test.yml/badge.svg)](https://github.com/a16z/helios/actions/workflows/test.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-brightgreen.svg)](https://opensource.org/licenses/MIT) + +Helios is a fully trustless, efficient, and portable Ethereum light client written in Rust. + +Helios converts an untrusted centralized RPC endoint into a safe unmanipulable local RPC for its users. It syncs in seconds, requires no storage, and is lightweight enough to run on mobile devices. + +The entire size of Helios's binary is 13Mb and should be easy to compile into WebAssembly. This makes it a perfect target to embed directly inside wallets and dapps. + +## Installing +First install `heliosup`, Helios's installer: +``` +curl https://github.com/a16z/helios/blob/master/heliosup/install | bash +``` +To install Helios, run `heliosup`. + +## Usage +To run Helios, run the below command, replacing `$ETH_RPC_URL` with an RPC provider URL such as Alchemy or Infura: +``` +helios --consensus-rpc https://www.lightclientdata.org --execution-rpc $ETH_RPC_URL +``` +Helios will now run a local RPC server at `http://127.0.0.1:8545`. + +### Additional Options +`--checkpoint` or `-w` can be used to set a custom weak subjectivity checkpoint. This must be equal the first beacon blockhash of an epoch. Weak subjectivity checkpoints are the root of trust in the system. If this is set to a malicious value, an attacker can cause the client to sync to the wrong chain. Helios sets a default value initially, then caches the most recent finalized block it has seen for later use. + +`--network` or `-n` sets the network to sync to. Current valid option are `mainnet` and `goerli`, however users can add custom networks in their configurationf files. + +`--rpc-port` or `-p` sets the port that the local RPC should run on. The default value is `8545`. + +### Configuration Files +All configuration options can be set on a per-network level in `~/.helios/helios.toml`. Here is an example config file: +``` +[mainnet] +consensus_rpc = "https://www.lightclientdata.org" +execution_rpc = "https://eth-mainnet.g.alchemy.com/v2/XXXXX" +checkpoint = "0x85e6151a246e8fdba36db27a0c7678a575346272fe978c9281e13a8b26cdfa68" + +[goerli] +consensus_rpc = "http://testing.prater.beacon-api.nimbus.team" +execution_rpc = "https://eth-goerli.g.alchemy.com/v2/XXXXX" +checkpoint = "0xb5c375696913865d7c0e166d87bc7c772b6210dc9edf149f4c7ddc6da0dd4495" +``` + +## Contributing +All contributions to Helios are welcome. Before opening a PR, please submit an issue detailing the bug or feature. When opening a PR, please ensure that your contribution builds on the nightly rust toolchain, has been linted with `cargo fmt`, and contains tests when applicable.