Перейти к основному содержанию
Change page

Узлы и клиенты

Последнее редактирование: , 26 февраля 2024 г.

Ethereum — это распределенная сеть компьютеров с программным обеспечением (известным как узлы, или ноды), которое может проверять блоки и данные транзакций. Для «запуска» узла на вашем компьтере вам необходимо приложение, известное как клиент.

Прежде чем начать

Вы должны понимать концепцию одноранговой сети и основы EVM, прежде чем углубляться и запускать собственный экземпляр клиента Ethereum. Начните с введения в Ethereum.

Если ты новичок в теме узлов, мы рекомендуем сначала ознакомиться с нашим удобным для пользователя введением по запуску узла Ethereum.

Что такое узлы и клиенты?

«Узел» относится к запускаемой части клиентского программного обеспечения. Клиент — это реализация Ethereum, которая проверяет все транзакции в каждом блоке, обеспечивая безопасность сети и точность данных.

Вы можете увидеть сеть Ethereum в реальном времени, посмотрев на эту карту узлов(opens in a new tab).

Клиенты Ethereum существуют на множестве языков программирования, таких как Go, Rust, JavaScript, Typescript, Python, C# .NET, Nim и Java. Что общего у этих реализаций, так это то, что все они следуют формальной спецификации (изначально Желтая книга Ethereum(opens in a new tab)). Эта спецификация определяет, как функционирует сеть Ethereum и блокчейн.

Клиент-исполнитель Упрощенная схема возможностей клиента Ethereum.

Типы узлов

Если вы хотите запустить собственный узел, вы должны понимать, что существуют разные типы узлов, которые по-разному обрабатывают данные. Фактически клиенты могут запускать 3 разных типа узлов — легкий, полный и архивный. Существуют также варианты различных стратегий синхронизации, которые позволяют сократить время синхронизации. Синхронизация означает скорость, с которой он может получить самую свежую информацию о состоянии Ethereum.

Полный узел

  • Хранит полные данные блокчейна.
  • Участвует в проверке блоков, проверяет все блоки и состояния.
  • Все состояния могут быть получены из полного узла.
  • Обслуживает сеть и предоставляет данные по запросу.

Легкий узел

  • Сохраняет цепочку заголовков и запрашивает все остальное.
  • Может проверять достоверность данных относительно корней состояний в заголовках блоков.
  • Полезно для устройств с малой емкостью, таких как встроенные устройства или мобильные телефоны, которые не могут позволить себе хранить гигабайты данных блокчейна.

Архивный узел

  • Хранит все, что хранится в полном узле, и создает архив исторических состояний. Требуется, если вы хотите запросить что-то вроде баланса аккаунта в блоке № 4 000 000 или просто и надежно протестировать свой собственный набор транзакций без их майнинга с помощью OpenEthereum(opens in a new tab).
  • Эти данные представляют собой несколько терабайтов, что делает узлы архива менее привлекательными для обычных пользователей, но может быть полезно для таких сервисов, как обозреватели блоков, поставщики кошельков и аналитики цепочек.

Синхронизация клиентов в любом режиме, кроме архива, приведет к удалению данных блокчейна. Это означает, что не существует архива всех исторических состояний, но полный узел способен построить их по требованию.

Зачем мне запускать узел Ethereum?

Запуск узла позволяет вам конфиденциально и ни на кого не полагаясь использовать Ethereum, поддерживая экосистему.

Польза для вас

Запуск собственного узла позволяет вам использовать Ethereum в действительно конфиденциальной, самодостаточной и не требующей доверяться посторонним манере. Вам не нужно доверять сети, потому что вы можете сами проверить данные своим клиентом. «Не доверяйте, проверяйте» — популярная мантра блокчейна.

  • Ваш узел самостоятельно проверяет все транзакции и блоки на соответствие правилам согласования. Это означает, что вам не нужно полагаться на какие-либо другие узлы в сети или полностью им доверять.
  • Вам не придется передавать свои адреса и балансы на случайные узлы. Все можно проверить с помощью собственного клиента.
  • Ваше децентрализованное приложение может быть более безопасным и конфиденциальным, если вы используете свой собственный узел. MetaMask(opens in a new tab), MyEtherWallet(opens in a new tab) и некоторые другие кошельки могут быть легко указаны в вашем собственном локальном узле.
  • Вы можете запрограммировать собственные конечные точки RPC.
  • Вы можете подключиться к своему узлу с помощью межпроцессного взаимодействия (IPC) или переписать узел, чтобы загрузить свою программу в виде плагина. Это обеспечивает низкую задержку, необходимую для максимально быстрой замены ваших транзакций (т. е. опережающего выполнения).

Как получать доступ к Ethereum через свое приложение и узлы

Преимущества сети

Разнообразный набор узлов важен для работоспособности, безопасности и отказоустойчивости Ethereum.

  • Они предоставляют доступ к данным блокчейна для легких клиентов, которые от него зависят. При высоких пиках использования должно быть достаточно полных узлов, чтобы облегчить синхронизацию узлов. Легкие узлы не хранят всю цепочку блоков, вместо этого они проверяют данные через корни состояний в заголовках блоков. При необходимости они могут запросить у блоков дополнительную информацию.
  • Полные узлы обеспечивают соблюдение правил согласования с доказательством работы, поэтому их нельзя обманом заставить принимать блоки, которые им не соответствуют. Это обеспечивает дополнительную безопасность в сети: если бы все узлы были легкими узлами, не выполняющими полную проверку, майнеры могли бы атаковать сеть и, например, создавать блоки с более высоким вознаграждением.

Если вы запустите полный узел, от этого выиграет вся сеть Ethereum.

Запуск собственного узла

Заинтересованы в запуске собственного клиента Ethereum?

Для ознакомления с введением, удобным для начинающих, навестите нашу страницу запуска узла, чтобы узнать больше.

Если вы более технически подкованный пользователь, узнайте, как развернуть свой собственный узел с помощью командной строки!

Проекты

Выберите клиент и следуйте его инструкциям

ethnodeзапуск узла Ethereum (Geth или OpenEthereum) для локальной разработки.

DAppNodeграфический интерфейс в операционной системе для запуска узлов Web3, включая Ethereum и Beacon Chain, на выделенной машине.

Ресурсы

Альтернативы

Запуск собственного узла может быть трудным, и вам не всегда нужно запускать собственный экземпляр. В этом случае вы можете использовать стороннего поставщика API, например Infura(opens in a new tab), Alchemy(opens in a new tab) или QuikNode(opens in a new tab). В качестве альтернативы есть ArchiveNode(opens in a new tab) — это финансируемый сообществом узел Archive, предоставляющий архивные данные блокчейна Ethereum независимым разработчикам, которые в противном случае не могли бы себе этого позволить. Для получения общего представления об использовании этих услуг ознакомьтесь с разделом узлы как услуга.

Если в вашем сообществе кто-то запускает узел Ethereum с общедоступным API, вы можете направить свои легкие кошельки (например, MetaMask) на узел сообщества через Custom RPC(opens in a new tab) и обезопасить себя больше, чем при работе с какой-то случайной третьей стороной.

С другой стороны, если вы запустите клиент, вы можете поделиться им со своими друзьями, которым он может понадобиться.

Клиенты-исполнители (ранее «клиенты Eth1»)

Сообщество Ethereum поддерживает несколько клиентов-исполнителей с открытым исходным кодом (ранее известных как «клиенты Eth1« или просто «клиенты Ethereum»), разработанных разными командами с использованием разных языков программирования. Это делает сеть более сильной и разнообразной. Идеальная цель — добиться разнообразия без доминирования клиентов, чтобы уменьшить количество точек отказа.

В этой таблице представлены различные клиенты. Все они проходят клиентское тестирование(opens in a new tab) и активно поддерживаются, чтобы обновляться совместно с обновлениями сети.

КлиентЯзыкОперационные системыСетиСтратегии синхронизацииОбрезка мусора
Geth(opens in a new tab)ПерейтиLinux, Windows, macOSОсновная сеть, Görli, Rinkeby, RopstenСнимок, полнаяАрхив, обрезка
Nethermind(opens in a new tab)C#, .NETLinux, Windows, macOSОсновная сеть, Görli, Ropsten, Rinkeby и другиеБыстрая, луч, архивАрхив, обрезка
Besu(opens in a new tab)JavaLinux, Windows, macOSОсновная сеть, Rinkeby, Ropsten, Görli и другиеFast, FullАрхив, обрезка
Erigon(opens in a new tab)ПерейтиLinux, Windows, macOSОсновная сеть, Görli, Rinkeby, RopstenПолнаяАрхив, обрезка
OpenEthereum (устарело)(opens in a new tab)RustLinux, Windows, macOSОсновная сеть, Kovan, Ropsten и другиеWarp, FullАрхив, обрезка

Обратите внимение, что OpenEthereum устарел(opens in a new tab) и больше не поддерживается. Используйте его с осторожностью и по возможности перейдите на другую реализацию клиента.

Подробнее о поддерживаемых сетях читайте в статье о сетях Ethereum.

Преимущества разных реализаций

У каждого клиента есть уникальные варианты использования и преимущества, поэтому вы должны выбрать один, исходя из своих предпочтений. Разнообразие позволяет сфокусировать реализации на различных функциях и пользовательских аудиториях. Вы можете выбрать клиента на основе функций, поддержки, языка программирования или лицензий.

Go Ethereum

Go Ethereum (сокращенно Geth) — одна из оригинальных реализаций протокола Ethereum. В настоящее время это самый распространенный клиент с самой большой пользовательской базой и множеством инструментов для пользователей и разработчиков. Он написан на Go с полностью открытым исходным кодом и под лицензией GNU LGPL v3.

OpenEthereum

OpenEthereum — это быстрый, многофункциональный и продвинутый клиент Ethereum на основе интерфейса командной строки. Он создан для обеспечения необходимой инфраструктуры для быстрых и надежных услуг, требующих быстрой синхронизации и максимального времени безотказной работы. Цель OpenEthereum — стать самым быстрым, легким и безопасным клиентом Ethereum. Он предоставляет чистую модульную кодовую базу для:

  • простой перенастройки;
  • легкой интеграции в услуги или продукты;
  • минимального потребления памяти и хранилища.

OpenEthereum разработан с использованием передового языка программирования Rust и распространяется под лицензией GPLv3.

Обратите внимение, что OpenEthereum устарел(opens in a new tab) и больше не поддерживается. Используйте его с осторожностью и по возможности перейдите на другую реализацию клиента.

Nethermind

Nethermind — это реализация Ethereum, созданная с помощью технического стека C# .NET, работающая на всех основных платформах, включая ARM. Он предлагает отличную производительность с:

  • оптимизированной виртуальной машиной;
  • доступом к состоянию;
  • сетью и ценными функциями: панели управления Prometheus/Grafana, поддержка ведения корпоративного журнала seq, трассировка JSON RPC и аналитические плагины.

У Nethermind также есть подробная документация(opens in a new tab), мощная поддержка разработчиков, онлайн-сообщество и круглосуточная поддержка, доступная для премиум-пользователей.

Besu

Hyperledger Besu — это клиент Ethereum корпоративного уровня для общедоступных и разрешенных сетей. Он работает со всеми функциями основной Ethereum, от трассировки до GraphQL, имеет обширный мониторинг и поддерживается ConsenSys, как в открытых каналах сообщества, так и в коммерческих соглашениях об уровне обслуживания для предприятий. Он написан на Java и имеет лицензию Apache 2.0.

Erigon

Erigon (в прошлом — Turbo-Geth) представляет собой ответвление Go Ethereum, ориентированное на скорость и эффективность использования дискового пространства. Erigon — это полностью переработанная архитектура реализации Ethereum, написанная на Go, но с планируемыми реализациями на других языках. Цель Erigon — обеспечение быстрой, более модульной и более оптимизированной реализации Ethereum. Он может выполнить полную синхронизацию архивного узла, используя менее 2ТВ дискового пространства менее чем за 3 дня

Режимы синхронизации

Чтобы отслеживать и проверять текущие данные в сети, клиент Ethereum должен синхронизироваться с последним ее состоянием. Это делается путем загрузки данных от пиров, криптографической проверки их целостности и создания локальной базы данных блокчейна.

Режимы синхронизации с различными решениями представляют разные подходы к этому процессу. Клиенты также различаются по реализации алгоритмов синхронизации. Всегда обращайтесь к официальной документации выбранного клиента для уточнения особенностей реализации.

Обзор подходов

Общий обзор подходов к синхронизации, используемых в клиентах с поддержкой основной сети:

Полная синхронизация

Полная синхронизация загружает все блоки (включая заголовки, транзакции и квитанции) и генерирует состояние блокчейна постепенно, выполняя каждый блок из начала.

  • Минимизирует необходимость доверия и обеспечивает максимальную безопасность, проверяя каждую транзакцию.
  • При увеличении количества транзакций обработка всех транзакций может занять от нескольких дней до нескольких недель.
Быстрая синхронизация

Быстрая синхронизация загружает все блоки (включая заголовки, транзакции и квитанции), проверяет все заголовки, загружает состояние и сверяет его с заголовками.

  • Полагается на безопасность механизма консенсуса.
  • Синхронизация займет всего несколько часов.
Легкая синхронизация

В легком режиме клиент загружает все заголовки блоков и данные блоков, а некоторые из них проверяются случайным образом. Синхронизируется только конец цепи из доверенной контрольной точки.

  • Получает только последнее состояние, полагаясь на доверие к разработчикам и механизму консенсуса.
  • Клиент будет готов к использованию с текущим состоянием сети через несколько минут.

Подробнее о легких клиентах(opens in a new tab)

Синхронизация снимка

Реализовано Geth. Использование динамических снимков, обслуживаемых пирами, позволяет получить все данные о счетах и хранилищах без загрузки промежуточных узлов дерева, а затем восстановить дерево Меркла локально.

  • Самая быстрая стратегия синхронизации, разработанная компанией Geth, в настоящее время используется по умолчанию
  • Экономия дискового пространства и пропускной способности сети без ущерба для безопасности.

Подробнее о снимке(opens in a new tab)

Варп-синхронизация

Реализовано OpenEthereum. Узлы регулярно генерируют критичный для консенсуса снимок состояния, и любой пир может получить эти снимки по сети, обеспечивая быструю синхронизацию из этой точки.

  • Самый быстрый и стандартный режим синхронизации OpenEthereum полагается на статические снимки, обслуживаемые пирами.
  • Стратегия похожа на синхронизацию снимков, но без определенных преимуществ в плане безопасности.

Подробнее о варпе(opens in a new tab)

Синхронизация луча

Реализовано Nethermind и Trinity. Работает как быстрая синхронизация, но также загружает данные, необходимые для выполнения последних блоков, что позволяет запрашивать цепочку в течение первых нескольких минут после запуска.

  • Сначала синхронизирует состояние и позволяет запросить RPC за несколько минут.
  • Этот тип все еще находится в разработке и не полностью надежен, фоновая синхронизация замедляется, а ответы RPC могут не срабатывать.

Подробнее о луче(opens in a new tab)

Настройка в клиенте

Клиенты предлагают широкие возможности конфигурации в соответствии с вашими потребностями. Выберите тот, который подходит вам лучше всего, исходя из уровня безопасности, доступных данных и стоимости. Помимо алгоритма синхронизации, вы также можете настроить «обрезку» различных типов старых данных. Обрезка позволяет удалить устаревшие данные, примером может быть удаление узлов дерева состояний, которые недоступны из новых блоков.

Обратите внимание на документацию клиента или страницу справки, чтобы узнать, какой режим синхронизации используется по умолчанию. Вы можете определить предпочтительный тип синхронизации при настройке следующим образом.

Настройка легкой синхронизации в GETH(opens in a new tab) или ERIGON(opens in a new tab)

geth --syncmode "light"

Настройка полной синхронизации с архивом в Besu(opens in a new tab)

besu --sync-mode=FULL

Как и любую другую конфигурацию, ее можно определить с помощью флага запуска или в файле конфигурации. Другой пример — Nethermind(opens in a new tab), который предлагает вам выбрать конфигурацию во время первой инициализации и создает файл конфигурации.

Консенсус-клиенты (ранее — «клиенты Eth2»)

Существует несколько консенсус-клиентов (ранее известных как «клиенты Eth2»), поддерживающих обновления консенсуса. Они управляют цепочкой Beacon Chain и предоставят механизм консенсуса с доказательством владения клиентам-исполнителям после слияния.

КлиентЯзыкОперационные системыСети
Teku(opens in a new tab)JavaLinux, Windows, macOSBeacon Chain, Goerli
Nimbus(opens in a new tab)NimLinux, Windows, macOSBeacon Chain, Goerli
Lighthouse(opens in a new tab)RustLinux, Windows, macOSBeacon Chain, Goerli, Pyrmont
Lodestar(opens in a new tab)TypeScriptLinux, Windows, macOSBeacon Chain, Goerli
Prysm(opens in a new tab)GoLinux, Windows, macOSBeacon Chain, Gnosis, Goerli, Pyrmont

Аппаратное обеспечение

Требования к оборудованию различаются в зависимости от клиента, но обычно не так высоки, поскольку узел просто должен оставаться синхронизированным. Не путайте это с майнингом, который требует гораздо большей вычислительной мощности. Однако время синхронизации и производительность улучшаются с более мощным оборудованием. В зависимости от ваших потребностей и желаний Ethereum можно запускать на вашем компьютере, домашнем сервере, одноплатных компьютерах или в виртуальных частных серверах в облаке.

Самый простой способ запустить собственный узел — использовать самонастраиваемые блоки, такие как DAppNode(opens in a new tab). Он предоставляет оборудование для запуска клиентов и приложений, которые зависят от них, с простым пользовательским интерфейсом.

Требования

Перед установкой любого клиента убедитесь, что на вашем компьютере достаточно ресурсов для его запуска. Минимальные и рекомендуемые требования можно найти ниже, однако ключевой частью является дисковое пространство. Синхронизация блокчейна Ethereum требует очень больших затрат на ввод-вывод. Лучше всего иметь твердотельный накопитель (SSD). Чтобы запустить клиент Ethereum на жестком диске, вам понадобится как минимум 8 ГБ ОЗУ для использования в качестве кэша.

  • ЦП с минимум 2 ядрами
  • Минимум 4 ГБ ОЗУ с SSD, 8 ГБ, если у вас жесткий диск
  • Пропускная способность 8 Мбит/с
  • Быстрый процессор с минимум 4 ядрами
  • Минимум 16 ГБ ОЗУ
  • Быстрый SSD с не менее 500 ГБ свободного места
  • Пропускная способность от 25 Мбит/с

Выбранный вами режим синхронизации повлияет на требования к дисковому пространству, но мы оценили объем, который вам потребуется для каждого клиента.

КлиентРазмер диска (быстрая синхронизация)Размер диска (полный архив)
Geth400ГБ+6TБ+
OpenEthereumОт 280 ГБОт 6 TБ
NethermindОт 200 ГБОт 5 ТБ
BesuОт 750 ГБОт 5 ТБ
ErigonН/ДОт 1 ТБ
  • Примечание: Erigon не выполняет быструю синхронизацию, но возможна полная обработка (~500 ГБ)

Эти диаграммы показывают, что требования к хранилищу постоянно меняются. Для получения самых последних данных по Geth и OpenEthereum смотрите информацию о полной синхронизации данных(opens in a new tab) и синхронизации архива(opens in a new tab).

Ethereum на одноплатном компьютере

Самый удобный и дешевый способ запустить узел Ethereum — использовать одноплатный компьютер с архитектурой ARM, такой как Raspberry Pi. Ethereum на ARM(opens in a new tab) предоставляет образы клиентов Geth, OpenEthereum, Nethermind и Besu. Вот простое руководство как создать и настроить клиент ARM.

Такие небольшие, доступные и эффективные устройства идеально подходят для работы узла дома.

Дополнительные ресурсы

В Интернете есть много информации о клиентах Ethereum. Вот несколько ресурсов, которые могут оказаться полезными.

Была ли эта статья полезной?