Back to Blog

Platform / B02

Как MERX объединяет всех поставщиков energy в один API

Рынок TRON energy в 2026 году страдает от фрагментации. По крайней мере семь крупных поставщиков предлагают услуги делегирования energy, каждый со своим API, моделью ценообразования и характеристиками доступности. Если вы хотите лучшую цену, вам нужно интегрироваться со всеми ними, постоянно контролировать их цены, разбираться с их особенностями и строить логику отказоустойчивости на случай выхода одного из них из строя.

Или вы можете сделать один вызов API к MERX.

В этой статье объясняется, как MERX объединяет всех основных поставщиков energy в единый API — архитектура мониторинга цен, маршрутизации по лучшей цене, автоматического отказоустойчивости и упрощения операций, которое приходит при замене семи интеграций на одну.


Ландшафт поставщиков

Рынок TRON energy включает несколько поставщиков, каждый работающих независимо. По состоянию на начало 2026 года основные поставщики включают:

Каждый поставщик имеет свой:

Налог на интеграцию

Интеграция с одним поставщиком проста. Интеграция со всеми ними для получения лучших цен — это значительное инженерное предприятие:

На поставщика:
  - Реализация API-клиента:      2-3 дня
  - Нормализация цен:             1 день
  - Обработка ошибок:             1 день
  - Тестирование:                 1-2 дня
  - Текущее обслуживание:         2-4 часа/месяц

7 поставщиков × 5-7 дней = 35-49 дней первоначальной интеграции
7 поставщиков × 3 часа/месяц = 21 час/месяц текущего обслуживания

Это налог на интеграцию, который устраняет MERX. Вместо обслуживания семи интеграций с поставщиками, вы обслуживаете одну интеграцию с MERX. MERX обрабатывает остальное.


Архитектура MERX

MERX находится между вашим приложением и экосистемой поставщиков. Архитектура имеет три основных компонента:

1. Монитор цен

Монитор цен — это выделенный сервис, который постоянно опрашивает каждого интегрированного поставщика о текущих ценах. Каждые 30 секунд он запрашивает API каждого поставщика, нормализует ответ в стандартный формат и публикует результат в канал Redis pub/sub.

Каждые 30 секунд:
  Для каждого поставщика:
    1. Запросить API поставщика на текущие цены
    2. Нормализовать в стандартный формат (SUN за единицу energy)
    3. Проверить ответ (отклонить выбросы, устаревшие данные)
    4. Опубликовать в Redis: канал "prices:{provider}"
    5. Сохранить в историю цен (PostgreSQL)

Интервал в 30 секунд выбран намеренно. Более частый опрос перегружал бы API поставщиков и добавлял минимальную ценность (цены редко меняются в секундах). Более редкий опрос привел бы к риску использования устаревших цен.

2. Redis кэш цен

Redis служит кэшем цен в реальном времени. Каждое обновление цены от монитора цен сохраняется в Redis с TTL (временем жизни) 60 секунд — в два раза больше интервала опроса. Если данные о цене поставщика старше 60 секунд, они автоматически истекают и исключаются из решений маршрутизации.

Структура ключей Redis:
  prices:tronsave     -> { energy: 88, bandwidth: 2, updated: 1711756800 }
  prices:feee         -> { energy: 92, bandwidth: 3, updated: 1711756800 }
  prices:itrx         -> { energy: 85, bandwidth: 2, updated: 1711756800 }
  prices:catfee       -> { energy: 95, bandwidth: 3, updated: 1711756800 }
  ...

  prices:best         -> { provider: "itrx", energy: 85, updated: 1711756800 }

Ключ prices:best пересчитывается при каждом обновлении цены, предоставляя API мгновенный доступ к текущей лучшей цене без сканирования всех поставщиков.

3. Исполнитель заказов

Когда вы размещаете заказ через API MERX, исполнитель заказов получает его и определяет оптимальную маршрутизацию:

Получен заказ: 65 000 energy для TBuyerAddress

1. Прочитать prices:best из Redis -> itrx по 85 SUN/единицу
2. Проверить доступность itrx для 65 000 energy -> доступно
3. Отправить заказ в itrx
4. Мониторить подтверждение делегирования в цепи
5. Проверить, что energy прибыл на TBuyerAddress
6. Уведомить покупателя (webhook + WebSocket)

Если самый дешевый поставщик не может выполнить заказ (недостаточно запасов, ошибка API, таймаут), исполнитель автоматически переходит к следующему самому дешевому поставщику.


Нормализация цен

Разные поставщики предлагают цены в разных форматах. Некоторые указывают в SUN за единицу energy. Некоторые указывают общую TRX за заданное количество energy. Некоторые включают bandwidth в цену; другие берут плату отдельно.

MERX нормализует все в единый формат:

interface NormalizedPrice {
  provider: string;
  energyPricePerUnit: number;    // SUN за единицу energy
  bandwidthPricePerUnit: number; // SUN за единицу bandwidth
  minOrder: number;              // Минимум единиц energy
  maxOrder: number;              // Максимум единиц energy
  availableEnergy: number;       // Текущая доступность
  durations: string[];           // Поддерживаемые длительности
  lastUpdated: number;           // Unix timestamp
}

Эта нормализация критически важна. Без нее сравнение цен между поставщиками требовало бы от потребителя понимания модели ценообразования каждого поставщика. С ней сравнение цен — это простая числовая сортировка.


Маршрутизация по лучшей цене в деталях

Алгоритм маршрутизации — это не просто "выбрать самый дешевый". Несколько факторов влияют на решение маршрутизации:

Фактор 1: Цена

Основной фактор. При прочих равных условиях самый дешевый поставщик побеждает.

Фактор 2: Доступность

Поставщик, предлагающий 80 SUN при наличии только 10 000 energy, не может выполнить заказ на 65 000 energy. Маршрутизатор должен проверить доступные запасы.

Фактор 3: Надежность

MERX отслеживает историческую коэффициент заполнения, время ответа и уровень отказов каждого поставщика. Поставщик с коэффициентом заполнения 95% штрафуется относительно коэффициента 99%, даже если первый немного дешевле.

Эффективная цена = предложенная_цена / коэффициент_заполнения

Поставщик A: 85 SUN, 99% коэффициент заполнения -> 85.86 эффективно
Поставщик B: 82 SUN, 94% коэффициент заполнения -> 87.23 эффективно
Победитель: Поставщик A несмотря на более высокую предложенную цену

Фактор 4: Поддержка длительности

Не все поставщики поддерживают все длительности. Если вам нужна делегация на 1 час, поставщики, которые предлагают только дневные минимумы, исключаются.

Разделение заказа

Для больших заказов, превышающих емкость любого одного поставщика, маршрутизатор разделяет заказ между несколькими поставщиками:

Заказ: 500 000 energy

Поставщик A: 200 000 доступно по 85 SUN -> заполнить 200 000
Поставщик B: 180 000 доступно по 87 SUN -> заполнить 180 000
Поставщик C: 300 000 доступно по 92 SUN -> заполнить 120 000

Всего заполнено: 500 000 energy
Смешанный курс: 87.28 SUN/единицу

Покупатель видит единый заказ со смешанным курсом. Сложность многопоставщицкого исполнения полностью скрыта.


Автоматический отказоустойчивость

Отказоустойчивость — это то место, где агрегация действительно проявляет себя. Когда вы интегрируетесь напрямую с поставщиком и он выходит из строя, ваше приложение перестает функционировать. С MERX сбои поставщиков обрабатываются прозрачно.

Цепь отказоустойчивости

Основной поставщик выходит из строя
  |
  v
Отметить поставщика как неработоспособного (исключить из маршрутизации на 5 минут)
  |
  v
Повторить со следующим самым дешевым поставщиком
  |
  v
Если второй поставщик выходит из строя, попробовать третий
  |
  v
Если все поставщики выходят из строя, вернуть ошибку покупателю с рекомендацией повтора

Отслеживание здоровья

Монитор цен ведет оценку здоровья для каждого поставщика:

Компоненты оценки здоровья:
  - Последний успешный опрос цены: должен быть в пределах 60с
  - Время ответа API: штраф > 2 секунд
  - Последний коэффициент заполнения заказа: штраф < 95%
  - Последний уровень ошибок: штраф > 5%

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

Безперебойность для покупателей

С точки зрения покупателя сбои поставщиков невидимы. Их вызов API успешен до тех пор, пока работает хотя бы один поставщик. На практике наличие семи и более поставщиков означает, что полный отказ рынка практически невозможен — вероятность одновременного выхода из строя всех поставщиков пренебрежимо мала.


Один API заменяет много

Вот как выглядит ваша интеграция с MERX в сравнении с прямой интеграцией с поставщиками:

Без MERX

// Псевдокод: прямая интеграция с несколькими поставщиками

// Инициализировать 7 клиентов поставщиков
const tronsave = new TronSaveClient(apiKey1);
const feee = new FeeeClient(apiKey2);
const itrx = new ItrxClient(apiKey3);
// ... еще 4

// Получить цены от всех поставщиков
const prices = await Promise.allSettled([
  tronsave.getPrice(65000),
  feee.getPrice(65000),
  itrx.getPrice(65000),
  // ... еще 4
]);

// Нормализовать разные форматы ответов
const normalized = prices
  .filter(p => p.status === 'fulfilled')
  .map(p => normalizePrice(p.value)); // сложная логика для каждого поставщика

// Сортировать по цене, проверять доступность, обрабатывать ошибки...
const best = normalized.sort((a, b) => a.price - b.price)[0];

// Разместить заказ у лучшего поставщика
try {
  const order = await getClient(best.provider).createOrder({
    energy: 65000,
    target: buyerAddress,
    // Специфичные для поставщика параметры...
  });
} catch (e) {
  // Отказоустойчивость к следующему поставщику...
  // Больше специфичной для поставщика обработки ошибок...
}

С MERX

import { MerxClient } from 'merx-sdk';

const client = new MerxClient({ apiKey: 'your-merx-key' });

// Получить лучшую цену у всех поставщиков
const prices = await client.getPrices({ energy: 65000 });
console.log(`Лучшая: ${prices.bestPrice.provider} по ${prices.bestPrice.perUnit} SUN`);

// Разместить заказ - автоматически маршрутизируется к лучшему поставщику
const order = await client.createOrder({
  energy: 65000,
  targetAddress: buyerAddress,
  duration: '1h'
});

// Готово. Отказоустойчивость, повторы, проверка обрабатываются автоматически.

Семь интеграций становятся одной. Сотни строк кода маршрутизации и отказоустойчивости становятся четырьмя строками. Текущее обслуживание изменений API поставщиков сводится к нулю.


Канал цен в реальном времени

Для приложений, которые хотят отображать цены в реальном времени или принимать решения маршрутизации в реальном времени, MERX предоставляет канал цен WebSocket:

const client = new MerxClient({ apiKey: 'your-key' });

client.onPriceUpdate((update) => {
  console.log(`${update.provider}: ${update.energyPrice} SUN/единицу`);
  console.log(`Лучшая цена: ${update.bestPrice} SUN/единицу`);
});

Канал WebSocket публикует каждое обновление цены от монитора цен — примерно каждые 30 секунд на поставщика. Это позволяет приложениям показывать живые цены без опроса.


Прозрачность поставщика

MERX не скрывает, какой поставщик выполнил ваш заказ. Каждый ответ заказа включает имя поставщика, уплаченную цену и хеш транзакции делегирования в цепи:

{
  "orderId": "ord_abc123",
  "status": "completed",
  "provider": "itrx",
  "energy": 65000,
  "pricePerUnit": 85,
  "totalCostSun": 5525000,
  "delegationTxHash": "abc123def456...",
  "verifiedAt": "2026-03-30T12:00:00Z"
}

Вы всегда знаете, откуда пришла ваша energy, сколько вы заплатили, и можете независимо проверить делегирование в цепи.


Начало работы

Агрегация MERX доступна через REST API, JavaScript SDK, Python SDK и MCP сервер для AI агентов:

Создайте учетную запись на https://merx.exchange, получите API ключ и начните маршрутизировать заказы energy по лучшей доступной цене с единственным вызовом API.


Эта статья является частью технической серии MERX. MERX — первая децентрализованная биржа ресурсов блокчейна, объединяющая всех основных поставщиков TRON energy в единый API с маршрутизацией по лучшей цене и автоматической отказоустойчивостью.

Попробуйте прямо сейчас с AI

Добавьте MERX в Claude Desktop или любой MCP-совместимый клиент — без установки, без необходимости в API ключе для инструментов только для чтения:

{
  "mcpServers": {
    "merx": {
      "url": "https://merx.exchange/mcp/sse"
    }
  }
}

Спросите у вашего AI агента: "Какова самая дешевая TRON energy прямо сейчас?" и получите живые цены от всех подключенных поставщиков.

Полная документация MCP: merx.exchange/docs/tools/mcp-server


All Articles