# Payload source Что нужно поменять в текущих сервисах ## Релей мониторинг Должен быть максимально простым и выполнять одну задачу – собирать данные по релеям из некоторого списка. - Получает список релеев из контракта - Текущие - Все удаленные релеи (на случай первого запуска) - Храним слот добавления и удаления - Получает список релеев из env переменных - Если релея был удален из списка в env переменной, то он перестаёт отслеживаться - Если добавляется, то индексируется с первого слота (или последнего записанного, если релей уже бывал в списке) - Нужно хранить данные по релеям, которые были проиндексированны из env переменной, т.к. при очистке env переменной, у нас не будет возможность отдать релеи которые индексировались в прошлом - Мёржит списки - Следит за релеями из актуального списка - Периодически обновляет список - Перестаёт индексировать данные с удаленных релеев после X слотов (вынести в env переменные или константу) - В контракте предполагается 2 статуса: optional и required, но так же имеел смысл добавить ещё один watched для релеев из списка через env переменные - Вычисление изначального блока переделать на обычный бинарный поиск (на каждый релей) Предполагаемые интерфейсы: ```ts enum RalayStatus { WATCHED, OPTIONAL, REQUIRED } interface Relay { uri: string; pubkey: string; operator: string; description?: string; type: RalayStatus; addedAtBlock?: number; removedAtBlock?: number; } ``` ```ts const relay1 = { // ... operator: "flashbots", type: RalayStatus.REQUIRED, addedAtBlock: 1000, removedAtBlock: undefined, }; const relay2 = { // ... operator: "flashbots", type: RalayStatus.WATCHED, addedAtBlock: undefined, removedAtBlock: undefined, }; ``` ## Мев мониторинг - Получает список релеев (как можно больше, чтобы идентифицировать релеи в интерфейсе) - Из релей мониторингов - Получает данные от релей мониторинга включая данные о добавлении и удалении из контракта (данные нужны для понимания когда релей мог быть использован) - Хранить и обновлять данные о релееях (из релей мониторинга) - Возможность доиндексировать данные - В случае добавления нового релея - В случае временной недоступности релея ## Модуль работы с контрактом - Получить текущий стейт - Получить за период (fromSlot - toSlot) Должен уметь работать с контрактом - собрать все события за всё время - отдать текущий список релеев из контракта - отдать версию списка - хранить все события в базе (?) - подписка на события (?) ---- ## Дополнительные мысли - Визуализировать использование реелев нод операторами - Визуализировать доступность релеев по времени - Алерты на доступность релеев