Каждый пул HeroMiners отвечает на один и тот же набор HTTP-эндпоинтов только для чтения. Не нужны ни ключ, ни аккаунт, ни регистрация: запросите URL и получите JSON, причём с заголовком Access-Control-Allow-Origin: *, так что страница в браузере может обращаться к нему напрямую. С его помощью можно сделать монитор ригов, оповещение о выплатах, собственный дашборд или выгрузить данные пула в таблицу.
У каждой монеты свой пул со своими цифрами и своим форматом адреса, поэтому сначала выберите монету, а затем введите адрес именно этой монеты. Всё, что вы здесь вводите, отправляется только самому пулу и только при нажатии «Запустить».
Базовый URL
https://alephium.herominers.com
Эндпоинты
GET/api/stats
Всё, что пул знает о себе прямо сейчас: хешрейт пула и сети, подключённые майнеры и воркеры, последний блок, комиссии, порты и настройки выплат.
Параметры
address
Адрес для выплат. Добавляет этого майнера в miner, а также в solo_miner, если он майнит и соло. Без адреса ни один из этих ключей не отправляется.
С этого эндпоинта стоит начинать. Страница пула, страница майнеров и все графики на этом сайте построены на нём.
Запрос
curl "https://alephium.herominers.com/api/stats"
Ответ
Объект с полями pool, network, config, charts, lastblock, payments и visitors (сколько людей сейчас на сайте) в виде { windowMinutes, activeVisitors, activeLookups }. Пересчитывается раз за цикл статистики, поэтому более частые запросы вернут те же цифры.
GET/api/live_stats
Те же данные, что и /api/stats, но запрос держится открытым до завершения следующего цикла статистики и только тогда получает ответ. Один запрос на обновление вместо опроса по таймеру.
Параметры
address
Включить майнера в ответ, как в /api/stats.
Откройте одно соединение и открывайте его заново после ответа. Несколько одновременных соединений с одного IP отклоняются с кодом 503, поэтому не распараллеливайте запросы.
Та же структура, что и у /api/stats, только miner и solo_miner отправляются всегда и пусты, если адрес не указан. Запрос остаётся открытым не дольше одного цикла статистики.
GET/api/stats_address
Один майнер: текущий и средний хешрейт, валидные и устаревшие шары, баланс, выплаченная сумма и те же показатели по каждому воркеру.
Введите address выше, чтобы запустить этот запрос. Команда показывает этот параметр, потому что без него пул отвечает ошибкой.
Ответ
Объект с полями stats (итоги майнера), payments, charts, unlocked и workers, массивом с одной записью на воркера, названной по его name. Для адреса, который никогда здесь не майнил, возвращается ошибка, а не пустой майнер.
GET/api/get_blocks
Найденные пулом блоки, которые больше не находятся в ожидании: выплаченные или ставшие орфан-блоками. Какой именно, указывает status.
Параметры
heightобязательно
Вернуть блоки ниже этой высоты. Для самой новой страницы передайте число намного выше вершины цепи, затем наименьшую полученную высоту, чтобы листать назад.
Адрес нашедшего маскируется до того, как покинет пул, поэтому этот эндпоинт нельзя использовать для сбора адресов. time указан в секундах Unix, reward в наименьших единицах монеты, а соло-блок несёт score со значением s0, если он выплачен, или s1, если стал орфан-блоком.
Выплаты, отправленные пулом, по всему пулу или для одного адреса.
Параметры
timeобязательно
Вернуть выплаты до этой метки времени Unix в секундах. Для самой новой страницы передайте текущее время, затем самую раннюю полученную метку, чтобы листать назад.
address
Ограничить одним адресом для выплат. Без него вернутся все выплаты пула.
limit
Сколько записей вернуть. Ограничивается размером страницы самого пула, так что большее число просто вернёт этот размер.
format
Передайте parsed, чтобы получить объекты { tx, amount, time } вместо сырого массива.
conversions
Вместе с address передайте 1, чтобы получить ещё и запись о конвертации каждой выплаты на странице, которая была конвертирована в другую монету. Тогда ответ принимает вид { payments, conversions }. С format=parsed игнорируется.
Без format это плоский массив, где чередуются значение и метка времени, а каждое значение имеет вид txid:amount. Суммы приходят строками в наименьших единицах монеты и должны оставаться строками: преобразование в число теряет точность на цепи с 18 знаками после запятой.
GET/api/get_miners_stats
Десять крупнейших майнеров пула, а также разбивка по майнинг-программам и регионам, на которой построена страница майнеров.
Объект с полями miners, agents, regions, regionHistory и statsDisplay. Адреса замаскированы. Если панель не включена, её массив приходит пустым, и statsDisplay сообщает об этом.
GET/api/get_blocks_search
Поиск по блокам пула по высоте, хешу блока или адресу нашедшего, сразу среди ожидающих и выплаченных блоков.
Параметры
qобязательно
Высота, хеш блока или адрес.
offset
Пропустить столько результатов. В ответе есть hasMore, чтобы вы знали, нужно ли запрашивать дальше.
Поиск ограничен по частоте для каждого IP, и при превышении возвращается rateLimited с точным временем ожидания в retryMs, а не просто ошибка. Сначала вызовите /api/get_blocks_search_config, чтобы узнать допустимую длину запроса и включён ли поиск вообще.
Введите q выше, чтобы запустить этот запрос. Команда показывает этот параметр, потому что без него пул отвечает ошибкой.
Ответ
Объект с полями pending и matured, в обоих значение чередуется с высотой, как в /api/get_blocks, а также totalMatched, offset, limit и hasMore. Блок из matured имеет формат /api/get_blocks; блок из pending ещё ждёт созревания и использует более длинный формат ожидающих блоков, поэтому порядок его полей другой.
GET/api/get_blocks_search_config
Включён ли поиск блоков и в какие границы должен укладываться запрос, чтобы поле поиска можно было настроить до первого поиска.
{ enabled, minQueryLength, maxQueryLength, frontendCooldownMs }. Длины указаны в символах, а frontendCooldownMs означает, сколько ждать между двумя поисками.
GET/api/get_miner_payout_level
Порог выплаты, установленный сейчас для адреса, в целых монетах.
Параметры
addressобязательно
Адрес для выплат.
Парный эндпоинт /api/set_miner_payout_level записывает его и открыт не для всех: запрос должен прийти с майнинг-IP самого адреса. Эта проверка и ограничение частоты перед ней описаны на вкладке настроек дашборда, а не здесь.
Введите address выше, чтобы запустить этот запрос. Команда показывает этот параметр, потому что без него пул отвечает ошибкой.
Ответ
{ banned, minerMessage }, а при блокировке также blockMining, blockPayments и reason. Это уведомление, которое страница майнера показывает для этого адреса: заблокирован майнинг, выплаты или ничего. minerMessage это сообщение оператора для этого адреса в виде { message, type, createdAt, expiresAt } или null, если сообщения нет.
Как пользоваться правильно
Опрашивайте в ритме самого пула. Цифры пересчитываются раз за цикл статистики, а config.updateInterval в ответе /api/stats сообщает его длительность в секундах. Более частые запросы вернут тот же ответ и потратят трафик и ваш, и наш.
Используйте /api/live_stats вместо частого таймера. Он отвечает в тот момент, когда появляется что-то новое, а это и быстрее для вас, и легче для пула, чем опрос.
Храните суммы строками. Награды и балансы приходят в наименьших единицах монеты. На цепи с 18 знаками после запятой такие целые числа выходят за пределы того, что число JavaScript может хранить точно, поэтому преобразование незаметно округляет выплату.
Учитывайте, что адреса замаскированы. Публичные списки скрывают середину каждого адреса. Ваш полный адрес нужен только вам и только там, где вы сами его указываете.
Воспринимайте ограничение частоты как ожидание, а не как сбой. Где действует ограничение, ответ содержит retryMs. Подождите столько и повторите запрос, а не засыпайте пул запросами.
Представьтесь. Заголовок User-Agent с названием вашего инструмента не обязателен, но с ним мы сможем сообщить вам об изменении, а не гадать, что сломалось.