Todos los pools de HeroMiners responden al mismo conjunto de endpoints HTTP de solo lectura. No hay clave, ni cuenta, ni registro: pides una URL y recibes JSON, con Access-Control-Allow-Origin: * definido para que una página en el navegador pueda llamarla directamente. Úsala para crear un monitor de rigs, un aviso de pagos, tu propio panel o para llevar los datos del pool a una hoja de cálculo.
Introduce tu dirección y todos los ejemplos de abajo quedan listos para ejecutarse contra este pool. Nada de lo que escribas aquí se envía a otro sitio que no sea el propio pool, y solo cuando pulses Ejecutar.
URL base
https://quantus.herominers.com
Endpoints
GET/api/stats
Todo lo que el pool sabe de sí mismo en este momento: hashrate del pool y de la red, mineros y workers conectados, el último bloque, comisiones, puertos y la configuración de pagos.
Parámetros
address
Una dirección de pago. Añade ese minero en miner, y en solo_miner si también mina en solitario. Sin ella, no se envía ninguna de las dos claves.
Este es el endpoint por el que empezar. La página del pool, la página de mineros y todos los gráficos de este sitio se construyen a partir de él.
Petición
curl "https://quantus.herominers.com/api/stats"
Respuesta
Un objeto con pool, network, config, charts, lastblock, payments y visitors, cuántas personas hay en el sitio ahora mismo, como { windowMinutes, activeVisitors, activeLookups }. Se recalcula una vez por ciclo de estadísticas, así que consultar más rápido que eso devuelve las mismas cifras.
GET/api/live_stats
El mismo contenido que /api/stats, pero la petición se mantiene abierta hasta que termina el siguiente ciclo de estadísticas y solo entonces se responde. Una petición por actualización en lugar de consultar con un temporizador.
Parámetros
address
Incluye un minero en el contenido, como en /api/stats.
Abre una conexión y vuelve a abrirla cuando responda. Varias abiertas a la vez desde la misma IP se rechazan con un 503, así que no las multipliques.
La misma forma que /api/stats, salvo que miner y solo_miner se envían siempre, vacíos cuando no se indicó ninguna dirección. La petición permanece abierta hasta un ciclo de estadísticas.
GET/api/stats_address
Un minero: hashrate actual y medio, shares válidos y obsoletos, saldo, importe pagado y las mismas cifras por worker.
Introduce address arriba para ejecutar este. El comando lo muestra porque el pool responde con un error sin él.
Respuesta
Un objeto con stats (los totales del minero), payments, charts, unlocked y workers, un array con una entrada por worker identificada por su name. Una dirección que nunca ha minado aquí responde con un error en lugar de un minero vacío.
GET/api/get_blocks
Bloques encontrados por el pool que ya no están pendientes: pagados o huérfanos. status indica cuál.
Parámetros
heightobligatorio
Devuelve bloques por debajo de esta altura. Pasa un número muy por encima de la punta de la cadena para la página más reciente y, después, la altura más baja recibida para retroceder páginas.
La dirección de quien encontró el bloque se enmascara antes de salir del pool, así que este endpoint no sirve para recopilar direcciones. time está en segundos Unix, reward está en la unidad más pequeña de la moneda, y un bloque en solitario lleva un score de s0 cuando se pagó o s1 cuando quedó huérfano.
Pagos enviados por el pool, de todo el pool o de una dirección.
Parámetros
timeobligatorio
Devuelve pagos anteriores a esta marca de tiempo Unix en segundos. Usa la hora actual para la página más reciente y, después, la marca de tiempo más antigua recibida para retroceder páginas.
address
Limita a una dirección de pago. Sin ella, devuelve todos los pagos que ha hecho el pool.
limit
Cuántos devolver. Se limita al tamaño de página del propio pool, así que un número mayor simplemente devuelve ese tamaño.
format
Pasa parsed para recibir objetos { tx, amount, time } en lugar del array en bruto.
conversions
Con address, pasa 1 para recibir también el registro de conversión de cada pago de la página que se convirtió a otra moneda. La respuesta pasa a ser { payments, conversions }. Se ignora con format=parsed.
Sin format, un array plano que alterna valor y marca de tiempo, donde cada valor es txid:amount. Los importes son strings en la unidad más pequeña de la moneda y deben seguir siendo strings: convertirlos a número pierde precisión en una cadena con 18 decimales.
GET/api/get_miners_stats
Los diez mayores mineros del pool, más los desgloses por programa de minería y por región que alimentan la página de mineros.
Un objeto con miners, agents, regions, regionHistory y statsDisplay. Las direcciones van enmascaradas. Cuando un panel no está activado, su array llega vacío y statsDisplay lo indica.
GET/api/get_blocks_search
Busca en los bloques del pool por altura, hash de bloque o dirección de quien lo encontró, en bloques pendientes y pagados a la vez.
Parámetros
qobligatorio
Una altura, un hash de bloque o una dirección.
offset
Omite este número de resultados. La respuesta incluye hasMore para que sepas si debes volver a pedir.
La búsqueda tiene un límite de peticiones por IP, y superarlo devuelve rateLimited con la espera exacta en retryMs en lugar de un error simple. Llama primero a /api/get_blocks_search_config para conocer los límites de longitud y si la búsqueda está activada.
Introduce q arriba para ejecutar este. El comando lo muestra porque el pool responde con un error sin él.
Respuesta
Un objeto con pending y matured, ambos alternando valor y altura como /api/get_blocks, más totalMatched, offset, limit y hasMore. Un bloque matured está en el formato de /api/get_blocks; un bloque pending aún espera a madurar y usa el formato pendiente, más largo, así que sus campos van en otro orden.
GET/api/get_blocks_search_config
Si la búsqueda de bloques está activada y los límites que debe cumplir una consulta, para poder configurar un cuadro de búsqueda antes de la primera búsqueda.
{ enabled, minQueryLength, maxQueryLength, frontendCooldownMs }. Las longitudes son en caracteres, y frontendCooldownMs es cuánto esperar entre dos búsquedas.
GET/api/get_miner_payout_level
El umbral de pago definido actualmente para una dirección, en monedas enteras.
Parámetros
addressobligatorio
La dirección de pago.
El /api/set_miner_payout_level correspondiente es el que lo guarda, y no está abierto a cualquiera: la petición tiene que venir de la propia IP de minería de la dirección. Esa comprobación, y el límite de peticiones que la precede, se describen en la pestaña de ajustes del panel, no aquí.
Introduce address arriba para ejecutar este. El comando lo muestra porque el pool responde con un error sin él.
Respuesta
{ banned, minerMessage } y, cuando está bloqueada, también blockMining, blockPayments y reason. Es el aviso que la página del minero muestra para esta dirección: bloqueada para minar, para recibir pagos, o ninguna de las dos. minerMessage es el mensaje del operador para esta dirección, como { message, type, createdAt, expiresAt }, o null cuando no hay ninguno.
Cómo usarla bien
Consulta al ritmo del propio pool. Las cifras se recalculan una vez por ciclo de estadísticas, y config.updateInterval en la respuesta de /api/stats indica cuánto dura, en segundos. Pedir más a menudo devuelve la misma respuesta y gasta ancho de banda por ambos lados.
Prefiere /api/live_stats a un temporizador rápido. Responde en cuanto hay algo nuevo, lo que es más rápido para ti y más ligero para el pool que consultar a intervalos.
Guarda los importes como strings. Las recompensas y los saldos llegan en la unidad más pequeña de la moneda. En una cadena con 18 decimales, esos enteros superan lo que un número de JavaScript puede guardar con exactitud, así que convertirlos redondea un pago sin avisar.
Cuenta con direcciones enmascaradas. Los listados públicos ocultan la parte central de cada dirección. Tu dirección completa solo la necesitas tú, y solo donde tú mismo la indicas.
Trata un límite de peticiones como una espera, no como un fallo. Donde hay un límite, la respuesta incluye retryMs. Espera ese tiempo y vuelve a intentarlo en lugar de insistir sin parar.
Di quién eres. Un User-Agent con el nombre de tu herramienta no es obligatorio, pero nos permite avisarte de un cambio en lugar de que tengas que adivinar qué se ha roto.