Stateless-клиенты Ethereum: без хранения состояния, но с полными гарантиями

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

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

Stateless-клиенты Ethereum: без хранения состояния, но с полными гарантиями

Почему текущая модель узлов не масштабируется

Сейчас большинство полноценных узлов Ethereum:

  • хранят полное состояние: миллионы аккаунтов и контрактов, их storage и индексы;
  • поддерживают сложную структуру Merkle Patricia Trie;
  • обслуживают RPC-запросы кошельков и dApp’ов.

Это приводит к тому, что:

  • требования к диску, памяти и I/O постоянно растут;
  • меньше людей готовы запускать и обслуживать такой узел;
  • пользователи и кошельки всё чаще опираются на централизованные RPC-провайдеры.

Stateless-подход предлагает разорвать зависимость между «полноценностью» клиента и полным локальным состоянием.

Идея stateless-клиента

В статической модели:

  • текущий узел хранит состояние и при проверке блока просто читает нужные ключи из локальной БД;
  • заголовок блока содержит корень состояния (state root), но клиент сам отвечает за соответствие БД этому корню.

В stateless-модели:

  • блок (или пакет транзакций) сопровождается свидетелем состояния (witness):
    • минимальный набор ключей/значений и ветвей дерева состояния;
    • достаточно, чтобы проверить все чтения и записи, которые выполняет блок;
  • stateless-клиент:
    • берёт корень состояния из заголовка;
    • применяет транзакции к состоянию, описанному в witness;
    • проверяет, что результат приводит к новому корректному корню состояния.

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

Роль свидетелей (witnesses) и Verkle-деревьев

Свидетель (witness) — это:

  • набор аккаунтов и storage-слотов, которые затрагиваются транзакциями;
  • плюс необходимые ветви дерева состояния (Merkle/Verkle), чтобы:
  • доказать, что эти ключи входят в состояние;
  • пересчитать корень состояния до и после применения транзакций.

Проблема классического Merkle Patricia Trie:

  • доказательства включения (Merkle-пути) могут быть довольно крупными;
  • для сложных транзакций свидетели получаются тяжёлыми.

Именно поэтому в дорожной карте Ethereum важны:

Verkle-деревья:

  • позволяют сильно уменьшить размер доказательств включения;
  • лучше подходят для модели, где клиенты не хранят состояние, а получают компактные свидетели.

Portal Network и распределённая сеть данных

Статлесс-клиенту нужно откуда-то брать свидетели. Это не обязательно должен быть один «толстый» RPC-провайдер.

Здесь появляется Ethereum Portal Network:

  • набор overlay-сетей (history, state, tx), где узлы хранят небольшие фрагменты истории и состояния;
  • любой лёгкий клиент может по контент-ключу запросить нужную часть состояния и доказательства;
  • сеть строится так, чтобы даже узлы с маленьким диском и слабым железом могли участвовать в хранении и распространении данных.

В связке:

  • Portal Network — распределённый источник данных и свидетелей;
  • stateless-клиенты — потребители этих данных, которые проверяют всё сами, но ничего не хранят долго.

Это должно уменьшить зависимость от централизованных RPC и повысить децентрализацию доступа к данным.

Stateless-клиенты и дорожная карта Ethereum

Stateless-подход вписывается в более широкий набор инициатив:

  • EIP-4444 и «исторический экспайри».

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

  • Снижение требований к валидаторам.

Если в будущем валидатор сможет работать как stateless-клиент, требования к диску и БД заметно снизятся, упростив запуск валидирующих узлов.

  • Многомерная модель газа и DA.

Масштабирование доступности данных через данктшардинг и блобы EIP-4844 создаёт инфраструктуру для более эффективного хранения и распределения состояния.

  • Поддержка L2 и rollup-архитектур.

По мере роста L2-роллапов важно, чтобы клиенты могли работать с большим количеством цепочек без необходимости держать огромные локальные базы.

Преимущества и сложности stateless-подхода

Потенциальные плюсы:

  • Снижение порога входа для узлов.

Запуск клиента без полной БД состояния делает участие в сети доступнее.

  • Меньше доверия к RPC.

Кошельки и dApp могут сами проверять блоки и транзакции, вместо полного доверия «чёрным ящикам» с API.

  • Гибкость архитектуры.

Проще разделять узлы на «исполнительные» и «хранилища», строить новые сетевые сервисы вокруг данных Ethereum.

Сложности:

  • Размер и сложность свидетелей.

Нужно аккуратно проектировать структуры данных и протоколы, чтобы размер witnesses был приемлемым.

  • Переходный период.

Некоторое время сеть будет жить в гибридном режиме: часть узлов — stateful, часть — stateless, множество реализаций клиента.

  • Новый класс DoS-рисков.

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

См. также

Task Runner