Aller au contenu principal

Événements WebSocket

QoreChain fournit un streaming d'événements en temps réel via deux interfaces WebSocket : le WebSocket compatible EVM et le WebSocket RPC du moteur de consensus QoreChain.

remarque

Les deux interfaces WebSocket sont disponibles sur le mainnet qorechain-vladi (actif sur la version de chaîne v3.1.85) et le testnet qorechain-diana. Les points de terminaison locaux ci-dessous supposent un nœud que vous exécutez vous-même ; remplacez par l'hôte mainnet ou testnet de votre fournisseur pour un accès distant.


WebSocket EVM

Point de terminaison : ws://localhost:8546

Le WebSocket EVM prend en charge la méthode standard eth_subscribe pour le streaming d'événements en temps réel compatible avec les outils Ethereum.

Types d'abonnement

AbonnementDescription
newHeadsÉmet un en-tête à chaque ajout d'un nouveau bloc
logsÉmet les logs correspondant à un filtre optionnel
newPendingTransactionsÉmet les hashs des transactions entrant dans le mempool
syncingÉmet les mises à jour du statut de synchronisation

S'abonner aux nouveaux blocs

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

S'abonner aux logs avec un filtre

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

Se désabonner

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

WebSocket RPC QoreChain

Point de terminaison : ws://localhost:26657/websocket

Le WebSocket RPC utilise le système d'abonnement aux événements du moteur de consensus QoreChain. Les clients s'abonnent avec une chaîne de requête qui filtre les événements par type et par attributs.

S'abonner à tous les nouveaux blocs

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

S'abonner à toutes les transactions

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

S'abonner aux événements spécifiques à un module

Filtrez par type d'événement pour ne recevoir que les événements d'un module spécifique :

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

Se désabonner

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

Référence des événements de module

Module PQC

Type d'événementAttributs clésDescription
pqc_hybrid_verifyaddress, algorithm, result (pass/fail), modeÉmis à chaque vérification de signature hybride
pqc_hybrid_auto_registeraddress, algorithm, pubkey_hashÉmis lorsqu'une clé PQC est auto-enregistrée

Module IA

Type d'événementAttributs clésDescription
fraud_alertseverity (low/medium/high/critical), address, reason, scoreÉmis lorsqu'une fraude est détectée dans une transaction
circuit_breakermodule, action (tripped/reset), threshold, valueÉmis lorsqu'un disjoncteur IA change d'état

Module Bridge

Type d'événementAttributs clésDescription
deposit_completedchain_id, sender, recipient, amount, asset, tx_hashÉmis lorsqu'un dépôt entrant de pont est confirmé
withdrawal_completedchain_id, sender, recipient, amount, asset, tx_hashÉmis lorsqu'un retrait sortant de pont est confirmé

Module Cross-VM

Type d'événementAttributs clésDescription
crossvm_requestmessage_id, source_vm, target_vm, sender, payload_hashÉmis lorsqu'un appel inter-VM est initié
crossvm_responsemessage_id, source_vm, target_vm, success, gas_usedÉmis lorsqu'un appel inter-VM se termine
crossvm_timeoutmessage_id, source_vm, target_vm, queued_at_heightÉmis lorsqu'un message inter-VM dépasse le délai de file d'attente

Module Multilayer

Type d'événementAttributs clésDescription
anchor_submittedlayer_id, layer_type, anchor_hash, height, submitterÉmis lorsqu'un ancrage d'état de couche est soumis
layer_status_changedlayer_id, previous_status, new_status, reasonÉmis lorsqu'une couche change de statut opérationnel

Module RDK

Type d'événementAttributs clésDescription
rollup_createdrollup_id, operator, settlement_type, profileÉmis lorsqu'un nouveau rollup est enregistré
batch_submittedrollup_id, batch_index, state_root, tx_countÉmis lorsqu'un lot de règlement est soumis
batch_finalizedrollup_id, batch_index, finalized_at_heightÉmis lorsqu'un lot passe sa fenêtre de contestation
da_blob_storedrollup_id, blob_index, size_bytes, commitmentÉmis lorsqu'un blob DA est stocké
da_blob_prunedrollup_id, blob_index, pruned_at_heightÉmis lorsqu'un blob DA est élagué après rétention

Module Burn

Type d'événementAttributs clésDescription
fee_distributedtotal_fees, validator_amount, burn_amount, treasury_amount, staker_amountÉmis lorsque les frais collectés sont distribués
tokens_burnedamount, channel, block_heightÉmis lorsque des tokens sont brûlés de manière permanente

Module xQORE

Type d'événementAttributs clésDescription
xqore_lockedaddress, amount, lock_duration, tierÉmis lorsque du QOR est verrouillé dans xQORE
xqore_unlockedaddress, amount, penalty_applied, penalty_amountÉmis lorsque xQORE est déverrouillé en QOR
pvp_rebaseepoch, total_penalty, rebase_amount, beneficiary_countÉmis lors de la distribution du rebase PvP

Module Inflation

Type d'événementAttributs clésDescription
epoch_mintedepoch, minted_amount, inflation_rate, block_heightÉmis à la fin de chaque époque d'inflation

Module RL Consensus

Les ajustements de paramètres PRISM et l'activité des disjoncteurs sont émis via ce module.

Type d'événementAttributs clésDescription
rl_action_appliedaction_type, param_key, old_value, new_value, rewardÉmis lorsque l'agent PRISM applique un ajustement de paramètre
circuit_breaker_triggeredreason, param_key, attempted_value, limitÉmis lorsque le disjoncteur PRISM bloque une action

Exemple de client JavaScript

WebSocket 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 QoreChain (natif)

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);
}
};

Notes

  • Limites de connexion : le nombre maximum de connexions WebSocket par défaut est illimité (max-open-connections = 0). Définissez une limite dans app.toml pour les déploiements en production.
  • Tampon d'événements : le WebSocket RPC met en tampon jusqu'à 200 événements par abonnement. Si le client prend du retard, les événements les plus anciens sont supprimés.
  • Reconnexion : les clients doivent implémenter une reconnexion automatique avec un backoff exponentiel, car les connexions WebSocket peuvent être interrompues lors des redémarrages ou des mises à niveau des nœuds.