Создание приложения Ethereum с внутрипроцессным клиентом

Большинство приложений подключаются к узлу Ethereum через RPC, используя такие библиотеки, как Web3.js и Nethereum. Это приводит к необходимости развертывания полного узла рядом с приложением, будь то на сервере или компьютере пользователя, и связи через сокеты через адаптер обратной связи.

Эта практика кажется мне удивительной - очевидная альтернатива - упаковать клиента как часть моего серверного приложения и запустить его в процессе. Есть ли у клиентов Ethernet API для использования в качестве библиотеки и считается ли он подходящим и «хорошим»? Я имею в виду либо запуск их как части серверной части, либо в полнофункциональном настольном клиенте.

Ответы (1)

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

Однако обратите внимание, что встраивание полного клиента может быть плохой идеей по многим причинам:

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

  • Браузер должен будет обрабатывать транзакции, обрабатывать состояния и т. д. Это потребует значительного количества ресурсов.

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

Я не пытаюсь запустить его в браузере — я пытаюсь запустить его в бэкэнде, это не обязательно должен быть Javascript — может быть C++, Java, .net и т. д.!
Полноценный настольный клиент тоже подойдет — я просто пытаюсь избежать RPC и обратной связи — я хочу использовать «правильный» API, как если бы вы использовали библиотеку. Кроме того, кажется, что вы должны иметь возможность запускать «легкие» клиенты, которые не загружают всю цепочку блоков, но являются «правильными» независимыми клиентами цепочки блоков, верно?