Helios — это надежный, эффективный и портативный многоцепочный легкий клиент, написанный на Rust.
Helios преобразует ненадежную централизованную конечную точку RPC в безопасный и неуправляемый локальный RPC для своих пользователей. Он синхронизируется за секунды, не требует места для хранения данных и достаточно легок для работы на мобильных устройствах.
Helios имеет небольшой двоичный размер и компилируется в WebAssembly. Это делает его идеальной целью для встраивания непосредственно в кошельки и децентрализованные приложения.
Сначала установите heliosup
, установщик Helios:
curl https://raw.githubusercontent.com/a16z/helios/master/heliosup/install | bash
Чтобы установить Helios, запустите heliosup
.
Чтобы запустить Helios на Ethereum, выполните приведенную ниже команду, заменив $ETH_RPC_URL
URL-адресом поставщика RPC, например Alchemy:
helios ethereum --execution-rpc $ETH_RPC_URL
$ETH_RPC_URL
должен быть поддерживаемым поставщиком API выполнения Ethereum, который предоставляет конечную точку eth_getProof
. Infura в настоящее время не поддерживает это. Мы рекомендуем использовать Алхимию.
Теперь Helios запустит локальный сервер RPC по адресу http://127.0.0.1:8545
.
Helios также предоставляет документацию по поддерживаемым методам RPC в файле rpc.md.
Чтобы запустить Helios в цепочке стека OP, выполните приведенную ниже команду, заменив $ETH_RPC_URL
URL-адресом поставщика RPC, например Alchemy, и $NETWORK
с поддерживаемой сетью стека OP:
helios opstack --network $NETWORK --execution-rpc $ETH_RPC_URL
В настоящее время поддерживаются сетевые значения op-mainnet
и base
. В ближайшее время появятся новые.
--consensus-rpc
или -c
можно использовать для установки пользовательской конечной точки rpc уровня консенсуса. Это должен быть узел консенсуса, который поддерживает API-интерфейс маяковой цепи легкого клиента. Мы рекомендуем использовать для этого Nimbus. Если согласованный RPC не указан, по умолчанию используется https://www.lightclientdata.org
, которым мы управляем.
--checkpoint
или -w
можно использовать для установки специальной контрольной точки слабой субъективности. Он должен быть равен первому хешу блока маяка эпохи. Слабые контрольные точки субъективности являются корнем доверия к системе. Если для этого параметра установлено вредоносное значение, злоумышленник может заставить клиент синхронизироваться с неправильной цепочкой. Helios изначально устанавливает значение по умолчанию, а затем кэширует самый последний финализированный блок, который он видел, для дальнейшего использования.
--network
или -n
задает сеть для синхронизации. Текущие допустимые параметры — mainnet
, sepolia
holesky
, однако пользователи могут добавлять собственные сети в свои файлы конфигурации.
--rpc-port
или -p
устанавливает порт, на котором должен работать локальный RPC. Значение по умолчанию — 8545
.
--rpc-bind-ip
или -b
устанавливает IP-адрес, который привязывается к серверу JSON-RPC. По умолчанию Гелиос будет использовать 127.0.0.1
. Используйте 0.0.0.0
чтобы разрешить удаленный доступ.
--data-dir
или -d
устанавливает каталог, который Helios должен использовать для хранения кэшированных контрольных точек слабой субъективности. Каждая сеть хранит только последнюю контрольную точку, размер которой составляет всего 32 байта.
--fallback
или -f
устанавливает резервный URL-адрес контрольной точки (строка). Это используется только в том случае, если контрольная точка, предоставляемая флагом --checkpoint
слишком устарела для синхронизации с Helios. Если ничего не указано и флаг --load-external-fallback
не установлен, Helios выдаст ошибку. Например, вы можете указать резервный вариант следующим образом: helios --fallback "https://sync-mainnet.beaconcha.in"
(или использовать такое сокращение: helios -f "https://sync-mainnet.beaconcha.in"
)
--load-external-fallback
или -l
включает слабый резервный вариант контрольной точки субъективности (значение не требуется). Например, предположим, что вы установили слишком устаревшее значение контрольной точки, и Helios не может с ним синхронизироваться. Если этот флаг установлен, Helios будет запрашивать все сетевые API в списке, поддерживаемом сообществом, по адресу ethpandaops/checkpoint-sync-health-checks, чтобы узнать их последние слоты. Список слотов фильтруется для работоспособных API, и будет возвращена наиболее частая контрольная точка, возникшая в последней эпохе. Примечание. Этот список поддерживается сообществом, поэтому никаких гарантий безопасности не предоставляется. Используйте это как последнее средство, если ваша контрольная точка, переданная в --checkpoint
не удалась. Это не рекомендуется, поскольку вредоносные контрольные точки могут быть возвращены из перечисленных API, даже если они считаются работоспособными . Это можно запустить так: helios --load-external-fallback
(или helios -l
со сокращенным обозначением).
--strict-checkpoint-age
или -s
включает строгую проверку возраста контрольной точки. Если контрольной точке больше двух недель и этот флаг включен, Helios выдаст ошибку. Без этого флага Helios вместо этого выдаст пользователю предупреждение и продолжит работу. Если контрольной точке больше двух недель, теоретически существуют атаки, которые могут привести к неправильной синхронизации Helios и более легких клиентов. Эти атаки сложны и дорогостоящи, поэтому Helios по умолчанию отключает их.
--help
или -h
печатает справочное сообщение.
Все параметры конфигурации можно настроить на уровне каждой сети в ~/.helios/helios.toml
. Вот пример файла конфигурации:
[mainnet]consensus_rpc = "https://ethereum.operationssolarstorm.org"execution_rpc = "https://eth-mainnet.g.alchemy.com/v2/XXXXX"checkpoint = "0x85e6151a246e8fdba36db27a0c7678a575346272fe978c9281e13a8b26cdfa68"[op-mainnet]consensus_rpc = "https://op-mainnet.operationssolarstorm.org"execution_rpc = "https://opt-mainnet.g.alchemy.com/v2/XXXXX"[base]consensus_rpc = "https://base.operationssolarstorm.org"execution_rpc = "https://base-mainnet.g.alchemy. ком/v2/XXXXX"
Подробное описание параметров конфигурации доступно в файле config.md.
Примеры запуска Helios в качестве библиотеки ржавчины можно увидеть в каталоге примеров.
Контрольная точка — это хеш блока консенсусного уровня Beacon Chain, а не хэш блока уровня выполнения. Пример хеша блока уровня выполнения для Holesky показан по адресу https://holesky.etherscan.io/blocks.
Контрольные точки можно получить по следующим ссылкам:
Основная сеть Эфириума https://beaconcha.in
Тестовая сеть Holesky https://holesky.beaconcha.in
В качестве контрольной точки рекомендуется использовать хэш блока, возраст которого составляет менее двух недель, однако вы можете использовать более старые контрольные точки, и они все равно будут работать, но выдадут вам предупреждение. Использование контрольной точки, созданной менее двух недель, предотвращает несколько атак, которые довольно сложно осуществить.
Например, чтобы получить недавнюю контрольную точку для Holesky Testnet, перейдите на https://holesky.beaconcha.in/ и получите хеш первого блока в любой завершенной эпохе. На момент написания статьи первый хэш блока в эпоху 78425 — это самый старый слот 2509600, имеющий корень блока 0x60409a013161b33c8c68c6183c7753e779ec6c24be2f3c50c6036c30e13b34a6 и являющийся последним значением контрольной точки, которое можно использовать.
Эту последнюю контрольную точку можно предоставить в качестве дополнительной опции CLI в командной строке для запуска узла Helios Light Client в Ethereum Holesky Testnet:
Гелиос Эфириум --сеть холескай --consensus-rpc http://testing.holesky.beacon-api.nimbus.team --execution-rpc https://ethereum-holesky.g.allthatnode.com --контрольная точка 0x60409a013161b33c8c68c6183c7753e779ec6c24be2f3c50c6036c30e13b34a6
Например, чтобы получить недавнюю контрольную точку для основной сети Ethereum, перейдите на https://beaconcha.in и получите хеш первого блока в любой завершенной эпохе. На момент написания статьи первый хэш блока в эпоху 222705 — это самый старый слот 7126560, имеющий корень блока 0xe1912ca8ca3b45dac497cae7825bab055b0f60285533721b046e8fefb5b076f2 и являющийся последним значением контрольной точки, которое можно использовать.
Эта последняя контрольная точка может быть предоставлена как дополнительная опция CLI в командной строке для запуска узла Helios Light Client в основной сети Ethereum:
Гелиос Эфириум --основная сеть сети --consensus-rpc https://www.lightclientdata.org --execution-rpc https://ethereum-mainnet.g.allthatnode.com --контрольная точка 0xe1912ca8ca3b45dac497cae7825bab055b0f60285533721b046e8fefb5b076f2
Если вы хотите использовать файл конфигурации вместо аргументов CLI, вам следует заменить примеры контрольных точек в файле конфигурации последними контрольными точками, полученными выше.
Чтобы убедиться, что Helios работает должным образом, у нас есть комплексный набор тестов, который вы можете запустить. Перед запуском тестов обязательно создайте файл .env
в корне каталога проекта. Вы можете скопировать содержимое файла .env.example
и добавить свои собственные секреты.
cp .env.example .env
Чтобы запустить все тесты, используйте следующую команду:
грузовой тест-все
Чтобы запустить тесты для отдельного пакета, используйте эту команду, заменив ее пакетом, который вы хотите протестировать:
грузовой тест -p <имя-пакета>
Все вклады в Helios приветствуются. Прежде чем открывать запрос на запрос, отправьте сообщение о проблеме с подробным описанием ошибки или функции. Открывая PR, убедитесь, что ваш вклад создан, дополнен cargo fmt
и содержит тесты, если это применимо.
Если у вас возникли проблемы с Helios или вы планируете внести свой вклад, присоединяйтесь к нашей телеграмме здесь.
Этот код предоставляется как есть. Никакие гарантии, заявления или гарантии, явные или подразумеваемые, не предоставляются в отношении безопасности или правильности кода. Он не проверялся, поэтому нет никакой гарантии, что он будет работать должным образом, и пользователи могут столкнуться с задержками, сбоями, ошибками, упущениями или потерей передаваемой информации. Ничто в этом репо не должно быть истолковано как инвестиционный совет или юридическая консультация по каким-либо конкретным фактам или обстоятельствам и не предназначено для замены компетентного консультанта. Настоятельно рекомендуется вам обратиться к авторитетному адвокату в вашей юрисдикции по любым вопросам или проблемам по этому поводу. a16z не несет ответственности за любое использование вышеизложенного, и пользователям следует действовать осторожно и использовать их на свой страх и риск. Дополнительную информацию см. на сайте a16z.com/disclosures.