Что такое клиент Ethereum и какие клиенты существуют?

Что такое клиент Ethereum? Является ли это полным сетевым узлом, который может отправлять транзакции в блокчейн (если это правильный жаргон?), или это также может быть легкий JS-клиент, который подключается из браузера к полному узлу?

Может ли кто-нибудь пролить свет на то, какие клиенты существуют в настоящее время и какие роли они выполняют?

Ответы (5)

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

Официальные эталонные реализации (CLI)

Как вы уже отметили, в настоящее время доступны три эталонные реализации:

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

Сторонние реализации (CLI)

Неофициальными клиентами, реализующими спецификацию желтой бумаги, являются:

Сторонние реализации (GUI)

Неофициальные клиенты с графическим пользовательским интерфейсом:

Устаревшие или заброшенные проекты:

Официальные эталонные реализации (CLI):

Графические клиенты:

Сторонние клиенты:

ПРИМЕЧАНИЕ: все клиенты перечислены в алфавитном порядке.

То есть клиент Эфириума на самом деле является полноценным серверным узлом? Если да, участвует ли он так же, как и настоящие серверные узлы? Кто предоставляет узлы реального производственного сервера? Почему они не называют это сервером вместо клиента? Это только разработчики, майнеры и биржи, или есть коммерческие люди, размещающие ноды для всеобщего блага? Если первое, то разработчиков ПК, по-видимому, будет большинство? Что, если они все выключат свои машины?
MyCrypto также считается узлом эфириума? Если нет, то как бы вы это описали? (Я очень смущен)
Nethermind в .NET Core github.com/NethermindEth/nethermind
Со страницы github — Pyethapp официально устарел.

Есть несколько «эталонных реализаций», которые поддерживает Ethereum Foundation.

  1. Ethereum C++ (известный как Eth или «TurboEthereum»)
  2. Go Ethereum (известный своим клиентом командной строки Geth)
  3. EthereumJ
  4. Пиетериум

Есть несколько причин для этого.

  1. Поиск проблем консенсуса.

Биткойн был создан в изолированной среде, из-за чего в него вкрались некоторые ошибки, которые трудно исправить, поскольку они нарушают консенсус и требуют форка. Из-за этого любой, кто хочет создать приложение для поддержки протокола Биткойн, должен добавить эти ошибки, иначе они не смогут достичь консенсуса.

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

  1. Распространение риска.

Если в какой-либо из реализаций Ethereum есть вектор атаки или ошибка, это означает, что с сетью обычно все в порядке, поскольку доступно большее разнообразие клиентов. Пока я пишу это, это, к сожалению, еще не на 100% верно, потому что у Geth есть большая часть сети, но мы надеемся, что в ближайшие месяцы использование других клиентов возрастет.

  1. Игра на сильных сторонах

Не все языки хороши в одном и том же (некоторые мнения ниже)

  • C++ очень быстрый, но его сложнее создавать или читать.
  • Go легко создавать, кодировать и читать, но теряет часть скорости.
  • Java можно использовать в большинстве корпоративных сред и лучше всего поддерживает Android.
  • Python очень прост для понимания и чтения, но при этом теряет некоторую скорость.

Надеюсь, это поможет понять это.

почему нет пхп? просто интересуюсь.
PHP — это язык сценариев, созданный для веб-приложений. Он не подходит для больших приложений, ориентированных на производительность. PHP на внешнем интерфейсе потребует сервера для его интерпретации. Javascript не требует сервера и поэтому идеально подходит для DApps.
Краткий комментарий @Patoshi: почему бы вместо этого не задаться вопросом, что не так с PHP, что он не используется ни в одной крупной среде разработки или ни в одной, не связанной с веб-разработкой?

Как вы упомянули, в вики упоминаются 3 официальных клиента.

  1. Вебтри (С++)
  2. Гет (иди)
  3. Пьет (Питон)

кстати, поиск на гитхабе дал намного больше списка..

введите описание изображения здесь

Это может быть связано с обновлением:

https://github.com/ethereum/wiki/wiki/Клиенты,-инструменты,-dapp-браузеры,-кошельки-и-другие-проекты

Я до сих пор не уверен, что может запустить полный клиент/узел. В Ethstats есть только Geth, Parity и C++, а также несколько неуказанных узлов:введите описание изображения здесь

На Ethernodes у Geth есть около двух третей, а у Parity большая часть другой трети. Я раньше не видел имен других клиентов. Я посмотрел пару крошечных. Moac просто предоставляет интерфейс для Geth, Parity и Eth. Точно так же Пирл (349) использует Geth . Eth (C++) имеет 9 узлов, ethereumJS — 27. Многие другие клиенты начинаются с g, что указывает на то, что они могут быть пользовательским/разветвленным клиентом Geth. Вот архивный снимок этой статистики.

Короче говоря, клиент Ethereum — это просто часть программного обеспечения, которое предоставляет приложению шлюз для взаимодействия с блокчейном ethereum.

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

Клиенты могут быть написаны на многих языках, паритет (написанный на Rust) и Geth (написанный на golang) являются самыми известными...

В то время как Parity поддерживает все блокчейны на основе Ethereum, для разных блокчейнов вам требуются разные версии Geth.

Эти клиенты предоставляют API (JSON-RPC API), через который вы можете отправлять/получать запросы JSON.

Ссылка