Saltar al contenido principal

Eventos WebSocket

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

nota

Ambas interfaces WebSocket están disponibles en la red principal qorechain-vladi (activa en la versión de cadena v3.1.85) y en la red de pruebas qorechain-diana. Los endpoints locales siguientes asumen un nodo que ejecutes tú mismo; sustituye el host de red principal o de pruebas de tu proveedor para el acceso remoto.


WebSocket de la EVM

Endpoint: ws://localhost:8546

El WebSocket de la 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 los logs que coinciden con un filtro opcional
newPendingTransactionsEmite los hashes de las transacciones que entran en el mempool
syncingEmite actualizaciones del estado de sincronización

Suscribirse a nuevos bloques

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

Suscribirse a logs con un 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

El WebSocket RPC usa el sistema de suscripción de 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 nuevos bloques

{
"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

Filtra por tipo de evento para recibir solo los eventos de un módulo específico:

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

Cancelar suscripción

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

Referencia de eventos de módulos

Módulo PQC

Tipo de eventoAtributos claveDescripción
pqc_hybrid_verifyaddress, algorithm, result (pass/fail), modeSe emite en cada verificación de firma híbrida
pqc_hybrid_auto_registeraddress, algorithm, pubkey_hashSe emite cuando una clave PQC se registra automáticamente

Módulo de IA

Tipo de eventoAtributos claveDescripción
fraud_alertseverity (low/medium/high/critical), address, reason, scoreSe emite cuando se detecta fraude en una transacción
circuit_breakermodule, action (tripped/reset), threshold, valueSe emite cuando un disyuntor de IA cambia de estado

Módulo de puente

Tipo de eventoAtributos claveDescripción
deposit_completedchain_id, sender, recipient, amount, asset, tx_hashSe emite cuando se confirma un depósito de puente entrante
withdrawal_completedchain_id, sender, recipient, amount, asset, tx_hashSe emite cuando se confirma un retiro de puente saliente

Módulo Cross-VM

Tipo de eventoAtributos claveDescripción
crossvm_requestmessage_id, source_vm, target_vm, sender, payload_hashSe emite cuando se inicia una llamada entre VM
crossvm_responsemessage_id, source_vm, target_vm, success, gas_usedSe emite cuando se completa una llamada entre VM
crossvm_timeoutmessage_id, source_vm, target_vm, queued_at_heightSe emite cuando un mensaje entre VM supera el tiempo de espera de la cola

Módulo Multilayer

Tipo de eventoAtributos claveDescripción
anchor_submittedlayer_id, layer_type, anchor_hash, height, submitterSe emite cuando se envía un anclaje de estado de capa
layer_status_changedlayer_id, previous_status, new_status, reasonSe emite cuando una capa cambia de estado operativo

Módulo RDK

Tipo de eventoAtributos claveDescripción
rollup_createdrollup_id, operator, settlement_type, profileSe emite cuando se registra un nuevo rollup
batch_submittedrollup_id, batch_index, state_root, tx_countSe emite cuando se envía un lote de liquidación
batch_finalizedrollup_id, batch_index, finalized_at_heightSe emite cuando un lote supera su ventana de impugnación
da_blob_storedrollup_id, blob_index, size_bytes, commitmentSe emite cuando se almacena un blob de DA
da_blob_prunedrollup_id, blob_index, pruned_at_heightSe emite cuando se purga un blob de DA tras la retención

Módulo de quema

Tipo de eventoAtributos claveDescripción
fee_distributedtotal_fees, validator_amount, burn_amount, treasury_amount, staker_amountSe emite cuando se distribuyen las comisiones recaudadas
tokens_burnedamount, channel, block_heightSe emite cuando los tokens se queman de forma permanente

Módulo xQORE

Tipo de eventoAtributos claveDescripción
xqore_lockedaddress, amount, lock_duration, tierSe emite cuando se bloquea QOR en xQORE
xqore_unlockedaddress, amount, penalty_applied, penalty_amountSe emite cuando se desbloquea xQORE de vuelta a QOR
pvp_rebaseepoch, total_penalty, rebase_amount, beneficiary_countSe emite durante la distribución de rebase PvP

Módulo de inflación

Tipo de eventoAtributos claveDescripción
epoch_mintedepoch, minted_amount, inflation_rate, block_heightSe emite al final de cada época de inflación

Módulo RL Consensus

Los ajustes de parámetros de PRISM y la actividad de los disyuntores se emiten a través de este módulo.

Tipo de eventoAtributos claveDescripción
rl_action_appliedaction_type, param_key, old_value, new_value, rewardSe emite cuando el agente PRISM aplica un ajuste de parámetro
circuit_breaker_triggeredreason, param_key, attempted_value, limitSe emite cuando el disyuntor de PRISM bloquea una acción

Ejemplo de cliente JavaScript

WebSocket de la EVM (ethers.js)

import { ethers } from "ethers";

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)

const ws = new WebSocket("ws://localhost:26657/websocket");

ws.onopen = () => {
// Subscribe to fraud alerts
ws.send(JSON.stringify({
jsonrpc: "2.0",
method: "subscribe",
params: { query: "tm.event='Tx' AND fraud_alert.severity 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: el número máximo predeterminado de conexiones WebSocket es ilimitado (max-open-connections = 0). Establece un límite en app.toml para despliegues en producción.
  • Búfer de eventos: el WebSocket RPC almacena en búfer hasta 200 eventos por suscripción. Si el cliente se queda atrás, se descartan los eventos más antiguos.
  • Reconexión: los clientes deben implementar la reconexión automática con retroceso exponencial, ya que las conexiones WebSocket pueden interrumpirse durante los reinicios o actualizaciones del nodo.