Saltar al contenido principal

Eventos de WebSocket

QoreChain proporciona transmisión de eventos en tiempo real a través de dos interfaces WebSocket: el WebSocket compatible con EVM y el WebSocket RPC del Motor de Consenso de QoreChain.

nota

El WebSocket RPC del motor de consenso está disponible públicamente tanto en la mainnet qorechain-vladi como en la testnet qorechain-diana. El WebSocket EVM está disponible públicamente solo en la testnet: no existe un WebSocket EVM público de mainnet (wss://evm.qore.host y wss://evm-ws.qore.host no aceptan conexiones WebSocket), por lo que en mainnet debe ejecutar su propio nodo para usar eth_subscribe. Los endpoints locales que se muestran a continuación asumen un nodo que usted mismo ejecuta.

InterfazMainnetTestnet
WebSocket RPCwss://rpc.qore.host/websocketwss://rpc-testnet.qore.host/websocket
WebSocket EVMninguno (solo nodo propio)wss://evm-ws-testnet.qore.host

WebSocket EVM​

Endpoint: ws://localhost:8546 en su propio nodo; testnet pública: wss://evm-ws-testnet.qore.host. No existe un WebSocket EVM público de mainnet.

El WebSocket EVM admite el método estándar eth_subscribe para la transmisión de eventos en tiempo real, compatible con las herramientas de Ethereum.

Tipos de suscripción​

SuscripciónDescripción
newHeadsEmite un encabezado cada vez que se añade un nuevo bloque
logsEmite registros que coinciden con un filtro opcional
newPendingTransactionsEmite hashes de transacciones que entran al mempool

La suscripción syncing no está implementada: eth_subscribe con "syncing" devuelve -32600 syncing subscription is not implemented. En su lugar, consulte eth_syncing por HTTP.

Suscribirse a nuevos bloques​

{
"jsonrpc": "2.0",
"method": "eth_subscribe",
"params": ["newHeads"],
"id": 1
}

Suscribirse a registros con filtro​

{
"jsonrpc": "2.0",
"method": "eth_subscribe",
"params": [
"logs",
{
"address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]
}
],
"id": 2
}

Cancelar suscripción​

{
"jsonrpc": "2.0",
"method": "eth_unsubscribe",
"params": ["0x1a2b3c..."],
"id": 3
}

WebSocket RPC de QoreChain​

Endpoint: ws://localhost:26657/websocket en su propio nodo; público: wss://rpc.qore.host/websocket (mainnet) y wss://rpc-testnet.qore.host/websocket (testnet).

El WebSocket RPC utiliza el sistema de suscripción a eventos del Motor de Consenso de QoreChain. Los clientes se suscriben con una cadena de consulta que filtra los eventos por tipo y atributos.

Suscribirse a todos los bloques nuevos​

{
"jsonrpc": "2.0",
"method": "subscribe",
"params": {
"query": "tm.event='NewBlock'"
},
"id": 1
}

Suscribirse a todas las transacciones​

{
"jsonrpc": "2.0",
"method": "subscribe",
"params": {
"query": "tm.event='Tx'"
},
"id": 2
}

Suscribirse a eventos específicos de un módulo​

Filtre por tipo de evento para recibir únicamente los eventos de un módulo específico:

{
"jsonrpc": "2.0",
"method": "subscribe",
"params": {
"query": "tm.event='Tx' AND bridge_deposit.chain EXISTS"
},
"id": 3
}

Cancelar suscripción​

{
"jsonrpc": "2.0",
"method": "unsubscribe",
"params": {
"query": "tm.event='NewBlock'"
},
"id": 4
}

Referencia de eventos por módulo​

Los eventos se emiten como eventos estándar del motor de consenso. Suscríbase con una consulta tm.event='Tx' filtrada por el tipo de evento y el atributo (por ejemplo tm.event='Tx' AND bridge_deposit.chain EXISTS). Los eventos a nivel de bloque (los emitidos por la lógica de fin de bloque, como los eventos de PRISM que se muestran más abajo) se entregan con tm.event='NewBlock', no con Tx. Los nombres y atributos que se muestran a continuación corresponden a la versión de cadena v3.2.3 (mainnet); los eventos que existen solo en la testnet v3.2.4 están marcados.

Qué eventos verá realmente

Muchos de estos módulos están inactivos en las redes públicas: el puente no está en producción, todavía no hay capas multilayer ni rollups registrados, y xQORE no se puede usar. Sus eventos están definidos, pero no se disparan hasta que haya actividad. Los eventos de observación y recompensa de PRISM (rl_observation_collected, rl_reward_computed) se emiten aproximadamente cada 10 bloques en ambas redes.

Módulo PQC​

Tipo de eventoAtributos claveDescripción
pqc_verifyaddress, key_type, algorithm_id, hybrid_mode, statusSe emite en cada comprobación de firma PQC
pqc_hybrid_verifyaddress, algorithm_id, statusSe emite en cada verificación de firma híbrida
pqc_hybrid_classical_onlyaddress, hybrid_modeSe emite cuando el modo actual acepta una firma solo clásica
pqc_key_registeredaddress, key_type, algorithm_idSe emite cuando se registra una clave PQC
pqc_key_rotatedaddress, algorithm_idSe emite cuando se rota una clave PQC
pqc_key_migratedaddress, from_algorithm, to_algorithmSe emite cuando una clave se migra a un nuevo algoritmo
pqc_evm_window_openedaddress, expiry_height, max_txs, max_value; native_only y allowed_targets cuando la ventana tiene alcance (v3.2.3)Se emite cuando se abre una ventana de autorización del carril EVM
pqc_evm_window_closedaddressSe emite cuando se cierra una ventana de autorización del carril EVM
pqc_evm_delegation_consentaddress, delegate, expiry_heightSe emite cuando una cuenta registra su consentimiento para una delegación EIP-7702 (v3.2.2)
pqc_evm_delegation_clearedaddress, delegateSe emite cuando se borra la delegación EIP-7702 de una cuenta (v3.2.2)
pqc_algorithm_registered, pqc_algorithm_status_updated, pqc_algorithm_disabledalgorithm_id, y name/category, old_status/new_status o reasonCambios en el registro de algoritmos realizados por la gobernanza

Las claves PQC se registran explícitamente con una transacción de registro; no existe ningún evento de registro automático.

Módulo Bridge​

Tipo de eventoAtributos claveDescripción
bridge_depositoperation_id, chain, asset, amount, senderSe emite cuando se registra un depósito entrante
bridge_withdrawoperation_id, chain, asset, amount, sender, receiverSe emite cuando se registra un retiro
bridge_attestationoperation_id, validator, chain, pqc_verified, attestationsSe emite por cada atestación de un validador
bridge_operation_executedoperation_id, statusSe emite cuando se completa una operación
bridge_circuit_breaker_tripchain, status, reasonSe emite cuando se activa el disyuntor del puente de una cadena

Módulo Cross-VM​

Tipo de eventoAtributos claveDescripción
crossvm_requestmessage_id, source_vm, target_vm, target_contract, senderSe emite cuando se inicia una llamada entre VMs
crossvm_responsemessage_id, statusSe emite cuando se completa una llamada entre VMs
crossvm_timeoutmessage_idSe emite cuando un mensaje entre VMs supera el tiempo de espera en cola

Módulo Multilayer​

Tipo de eventoAtributos claveDescripción
state_anchoredlayer_id, layer_height, state_root, main_chain_height, pqc_verified, transaction_countSe emite cuando se acepta un anclaje de estado de capa
anchor_challengedlayer_id, layer_height, challenger, challenge_reason, resolutionSe emite cuando se impugna un anclaje
layer_status_updatedlayer_id, status, reasonSe emite cuando una capa cambia de estado
sidechain_registered, paychain_registeredlayer_id, layer_type, creator, statusSe emite cuando se registra una capa
transaction_routedselected_layer, routing_reason, gas_savings, latency_ms, senderSe emite cuando una transacción se enruta a una capa

Módulo RDK​

Tipo de eventoAtributos claveDescripción
rollup_createdrollup_id, creator, profile, settlement_modeSe emite cuando se registra un nuevo rollup
rollup_paused, rollup_resumed, rollup_stoppedrollup_id y un motivo cuando se indicaSe emite cuando un rollup se pausa, se reanuda o se detiene
batch_challenged, challenge_resolved, batch_rejectedrollup_id, batch_index (y fraud_upheld en una resolución)Se emite cuando se impugna un lote, se resuelve la impugnación o se rechaza un lote
batch_submittedrollup_id, batch_index, tx_countSe emite cuando se envía un lote de liquidación
batch_finalizedrollup_id, batch_indexSe emite cuando un lote supera su ventana de impugnación
da_blob_storedrollup_id, blob_index, backend, sizeSe emite cuando se almacena un blob de DA
da_blob_prunedrollup_id, blob_indexSe emite cuando un blob de DA se elimina tras su período de retención

Módulo Burn​

Tipo de eventoAtributos claveDescripción
burnsource, amountSe emite cuando se queman tokens de forma permanente
milestone_burntx_threshold, burn_amount, cumulative_tx_countSe emite cuando se ejecuta una quema por hito de recuento de transacciones
burn_stranded_releasedamount, destination, remainingSe emite cuando la gobernanza libera parte de la cuota atrapada de los stakers

Módulos Inflation, Gas Abstraction, Licence, Light Node e IA​

Tipo de eventoAtributos claveDescripción
inflation_params_updatedmode, fixed_epoch_emission, max_total_emissionSe emite cuando la gobernanza cambia los parámetros de emisión
gas_abstraction_conversion, gas_abstraction_refillpaid, native_equivalent, rate, price_source, resultSe emite cuando se convierte una comisión en otro token aceptado, y cuando se repone el float (ninguno se dispara mientras solo se acepte uqor)
gas_abstraction_float_funded, gas_abstraction_config_updatedsender, amount; accepted_tokens, block_conversion_capSe emite cuando se dota el float y cuando la gobernanza actualiza la configuración
license_granted, license_revoked, license_suspended, license_resumed, license_expiredbeneficiario y funcionalidadCiclo de vida de las licencias
license_authority_updatednew_authoritySe emite cuando la gobernanza reemplaza la autoridad de licencias (v3.2.3)
lightnode_register, lightnode_heartbeat, lightnode_claim_rewards, lightnode_deregister, lightnode_status_change, lightnode_reward_distribution, lightnode_reserve_releaseaddress, node_type, status, reward_amount, destinationEventos del ciclo de vida y de las recompensas de los nodos ligeros
ai_config_updatedmax_tx_per_minute, max_evm_tx_per_minute, anomaly_action, anomaly_thresholdSe emite cuando la gobernanza actualiza la configuración del filtrado de IA

Módulo Staking Tiers (v3.2.4)​

Estos eventos llegan con la versión v3.2.4: la testnet qorechain-diana los emite desde el 19 de octubre de 2026 y la mainnet los emite desde la altura 3.742.566 (propuesta de gobernanza 13). Un nodo de la mainnet que todavía ejecute v3.2.3 no tiene el módulo staking-tiers y no emite ninguno de ellos.

Tipo de eventoAtributos claveDescripción
staking_tier_lock_createdlock_id, delegator, validator, amount, months, end_timeSe creó un bloqueo de delegación
staking_tier_lock_unlocked_early, staking_tier_lock_releasedlock_id, delegator, penalty_burned, bonus_forfeitedUn bloqueo terminó anticipadamente (la penalización se quema bajo el origen de quema staking_tier_penalty), o llegó a su fin
staking_tier_bonus_claimed, staking_tier_bonus_settleddelegator, amount; totales de la liquidaciónSe reclamó un bonus; se liquidó el pool
staking_tier_params_updatedparámetrosLa gobernanza cambió los parámetros del módulo

Módulo xQORE​

Estos eventos todavía no se emiten: xQORE no está activo en ninguna compilación de nodo publicada (consulte Staking de xQORE).

Tipo de eventoAtributos claveDescripción
xqore_lockowner, amountSe emite cuando se bloquea QOR en xQORE
xqore_unlockowner, amount, penalty, burned, redistributed, returnedSe emite cuando xQORE se desbloquea de vuelta a QOR

Módulo de consenso PRISM (consenso RL)​

Estos son eventos de fin de bloque, entregados en el flujo NewBlock.

Tipo de eventoAtributos claveDescripción
rl_observation_collectedheightSe emite cuando se toma una observación de PRISM (aproximadamente cada 10 bloques)
rl_reward_computedheight, rewardSe emite cuando se calcula la recompensa de PRISM
rl_action_appliedheight, agent_modeSe emite cuando el agente PRISM aplica un ajuste de parámetro
rl_agent_mode_changedheight, agent_modeSe emite cuando cambia el modo del agente
rl_circuit_breaker_triggeredheightSe emite cuando el disyuntor de PRISM bloquea una acción
rl_circuit_breaker_recoveredheightSe emite cuando el disyuntor se recupera

Módulo de IA​

Tipo de eventoAtributos claveDescripción
ai_anomaly_checkscore_millionths, action, is_anomalousSe emite por cada transacción puntuada por anomalía

Ejemplo de cliente JavaScript​

WebSocket EVM (ethers.js)​

import { ethers } from "ethers";

// Own node: ws://localhost:8546. Public testnet: wss://evm-ws-testnet.qore.host
const provider = new ethers.WebSocketProvider("ws://localhost:8546");

// Subscribe to new blocks
provider.on("block", (blockNumber) => {
console.log("New block:", blockNumber);
});

// Subscribe to contract events
const filter = {
address: "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
topics: [ethers.id("Transfer(address,address,uint256)")],
};
provider.on(filter, (log) => {
console.log("Transfer event:", log);
});

WebSocket RPC de QoreChain (nativo)​

// Own node: ws://localhost:26657/websocket. Public: wss://rpc.qore.host/websocket
const ws = new WebSocket("ws://localhost:26657/websocket");

ws.onopen = () => {
// Subscribe to bridge deposits
ws.send(JSON.stringify({
jsonrpc: "2.0",
method: "subscribe",
params: { query: "tm.event='Tx' AND bridge_deposit.chain EXISTS" },
id: 1,
}));

// Subscribe to rollup batch submissions
ws.send(JSON.stringify({
jsonrpc: "2.0",
method: "subscribe",
params: { query: "tm.event='Tx' AND batch_submitted.rollup_id EXISTS" },
id: 2,
}));
};

ws.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.result && data.result.events) {
console.log("Event received:", data.result.events);
}
};

Notas​

  • Límites de conexión: En un nodo que usted mismo ejecuta, el número máximo predeterminado de conexiones WebSocket es ilimitado (max-open-connections = 0). Establezca un límite en app.toml para los despliegues en producción. Los endpoints públicos aplican sus propios límites.
  • Búfer de eventos: El WebSocket RPC almacena en búfer un número acotado de eventos por suscripción (200 de forma predeterminada en un nodo autoalojado). Si el cliente se retrasa, los eventos más antiguos se descartan.
  • Reconexión: Los clientes deben implementar una reconexión automática con retroceso exponencial, ya que las conexiones WebSocket pueden interrumpirse durante los reinicios o las actualizaciones del nodo.