---
# System prepended metadata

title: Payload source

---

# 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)

Должен уметь работать с контрактом
- собрать все события за всё время
- отдать текущий список релеев из контракта
- отдать версию списка
- хранить все события в базе (?)
- подписка на события (?)

----


## Дополнительные мысли

- Визуализировать использование реелев нод операторами
- Визуализировать доступность релеев по времени
- Алерты на доступность релеев