# 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)
Должен уметь работать с контрактом
- собрать все события за всё время
- отдать текущий список релеев из контракта
- отдать версию списка
- хранить все события в базе (?)
- подписка на события (?)
----
## Дополнительные мысли
- Визуализировать использование реелев нод операторами
- Визуализировать доступность релеев по времени
- Алерты на доступность релеев