Идея: доверенное состояние системы (trusted state)

22.01.2020 11:42:18

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

Фактически в конфиг новой ноды добавляется список trusted-nodes с которых будет выполнено скачивание доверенного состояния системы (одна копия), их сверка между друг с другом и запуск ноды без реплея/ресинка блоков.

Как это может выглядеть технически:

  • Trusted state формируется каждые 1000 блоков (~50 минут) и сохраняется как файл для отправки/развертывания. Состояние системы в dynamic global properties содержит previous_trusted_state_hash и current_trusted_state_hash в виде sha256 хэша. 
  • Запрос и получение у первой ноды из списка доверенных копии trusted state (посредством p2p).
  • После получения trusted state расчет его хэша и запрос у списка других доверенных нод его валидности (они возвращают простое true/false на запрос по p2p).
  • Если доверенные ноды подтвердили соответствие хэша trusted state, то нода разворачивает его копию в памяти и запускает синхронизацию с этого значения состояния системы.

Для анти-ддоса при запросе trusted state ноды могут вести p2p лог и блокировать повторное получение архива с trusted state на n минут.

В конфиг вынести параметры: список trusted-nodes (с ip адресами и портами, аналогично p2p-seed-node), trusted-state = true/false для включения или отключения поддержки trusted-state, trusted-state-limit = 600 (лимит в секундах на запрос trusted state с одного ip).

Формировать trusted state нужно только по необратимому состоянию (что логично).

Всё это можно делать в рамках действующего p2p плагина, по-крайней мере я не вижу проблем с этим. Если будет воркер с доступным уровнем C++ для реализации данной идеи, добро пожаловать с заявкой в комитет ;)


0
10 наград
5.848988 Ƶ
Отобразить форму комментирования
Комментарии