Aller au contenu principal

Événements WebSocket

QoreChain fournit un flux 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

Le WebSocket RPC du moteur de consensus est disponible publiquement sur le mainnet qorechain-vladi et sur le testnet qorechain-diana. Le WebSocket EVM n'est disponible publiquement que sur le testnet : il n'existe pas de WebSocket EVM public sur le mainnet (wss://evm.qore.host et wss://evm-ws.qore.host n'acceptent pas les connexions WebSocket) ; sur le mainnet, exécutez donc votre propre nœud pour utiliser eth_subscribe. Les points de terminaison locaux ci-dessous supposent un nœud que vous exécutez vous-même.

InterfaceMainnetTestnet
WebSocket RPCwss://rpc.qore.host/websocketwss://rpc-testnet.qore.host/websocket
WebSocket EVMaucun (nœud personnel uniquement)wss://evm-ws-testnet.qore.host

WebSocket EVM​

Point de terminaison : ws://localhost:8546 sur votre propre nœud ; testnet public : wss://evm-ws-testnet.qore.host. Il n'existe pas de WebSocket EVM public sur le mainnet.

Le WebSocket EVM prend en charge la méthode standard eth_subscribe pour le flux 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 hachages de transaction entrant dans le mempool

L'abonnement syncing n'est pas implémenté : eth_subscribe avec "syncing" renvoie -32600 syncing subscription is not implemented. Interrogez plutôt eth_syncing via HTTP.

S'abonner aux nouveaux blocs​

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

S'abonner aux logs avec 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 sur votre propre nœud ; public : wss://rpc.qore.host/websocket (mainnet) et wss://rpc-testnet.qore.host/websocket (testnet).

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 à des é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 bridge_deposit.chain 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​

Les événements sont émis comme des événements standard du moteur de consensus. Abonnez-vous avec une requête tm.event='Tx' filtrée sur le type d'événement et l'attribut (par exemple tm.event='Tx' AND bridge_deposit.chain EXISTS). Les événements au niveau du bloc (ceux émis par la logique de fin de bloc, comme les événements PRISM ci-dessous) sont délivrés avec tm.event='NewBlock', et non Tx. Les noms et attributs ci-dessous sont ceux de la version de chaîne v3.2.3 (mainnet) ; les événements qui n'existent que sur le testnet v3.2.4 sont signalés.

Quels événements verrez-vous réellement

Beaucoup de ces modules sont inactifs sur les réseaux publics : le bridge n'est pas en production, aucune couche multilayer ni aucun rollup n'est encore enregistré, et xQORE n'est pas utilisable. Leurs événements sont définis mais ne se déclenchent pas tant qu'il n'y a pas d'activité. Les événements d'observation et de récompense PRISM (rl_observation_collected, rl_reward_computed) sont émis environ tous les 10 blocs sur les deux réseaux.

Module PQC​

Type d'événementAttributs clésDescription
pqc_verifyaddress, key_type, algorithm_id, hybrid_mode, statusÉmis à chaque vérification de signature PQC
pqc_hybrid_verifyaddress, algorithm_id, statusÉmis à chaque vérification de signature hybride
pqc_hybrid_classical_onlyaddress, hybrid_modeÉmis lorsqu'une signature uniquement classique est acceptée par le mode actuel
pqc_key_registeredaddress, key_type, algorithm_idÉmis lorsqu'une clé PQC est enregistrée
pqc_key_rotatedaddress, algorithm_idÉmis lorsqu'une clé PQC est renouvelée
pqc_key_migratedaddress, from_algorithm, to_algorithmÉmis lorsqu'une clé est migrée vers un nouvel algorithme
pqc_evm_window_openedaddress, expiry_height, max_txs, max_value ; native_only et allowed_targets lorsque la fenêtre a une portée (v3.2.3)Émis lorsqu'une fenêtre d'autorisation de la voie EVM s'ouvre
pqc_evm_window_closedaddressÉmis lorsqu'une fenêtre d'autorisation de la voie EVM se ferme
pqc_evm_delegation_consentaddress, delegate, expiry_heightÉmis lorsqu'un compte enregistre son consentement à une délégation EIP-7702 (v3.2.2)
pqc_evm_delegation_clearedaddress, delegateÉmis lorsque la délégation EIP-7702 d'un compte est effacée (v3.2.2)
pqc_algorithm_registered, pqc_algorithm_status_updated, pqc_algorithm_disabledalgorithm_id, et name/category, old_status/new_status ou reasonModifications du registre d'algorithmes effectuées par la gouvernance

Les clés PQC sont enregistrées explicitement par une transaction d'enregistrement ; il n'existe pas d'événement d'enregistrement automatique.

Module Bridge​

Type d'événementAttributs clésDescription
bridge_depositoperation_id, chain, asset, amount, senderÉmis lorsqu'un dépôt entrant est enregistré
bridge_withdrawoperation_id, chain, asset, amount, sender, receiverÉmis lorsqu'un retrait est enregistré
bridge_attestationoperation_id, validator, chain, pqc_verified, attestationsÉmis pour chaque attestation de validateur
bridge_operation_executedoperation_id, statusÉmis lorsqu'une opération est terminée
bridge_circuit_breaker_tripchain, status, reasonÉmis lorsque le coupe-circuit du bridge d'une chaîne se déclenche

Module Cross-VM​

Type d'événementAttributs clésDescription
crossvm_requestmessage_id, source_vm, target_vm, target_contract, senderÉmis lorsqu'un appel cross-VM est initié
crossvm_responsemessage_id, statusÉmis lorsqu'un appel cross-VM est terminé
crossvm_timeoutmessage_idÉmis lorsqu'un message cross-VM dépasse le délai d'attente en file

Module Multilayer​

Type d'événementAttributs clésDescription
state_anchoredlayer_id, layer_height, state_root, main_chain_height, pqc_verified, transaction_countÉmis lorsqu'un ancrage d'état de couche est accepté
anchor_challengedlayer_id, layer_height, challenger, challenge_reason, resolutionÉmis lorsqu'un ancrage est contesté
layer_status_updatedlayer_id, status, reasonÉmis lorsqu'une couche change de statut
sidechain_registered, paychain_registeredlayer_id, layer_type, creator, statusÉmis lorsqu'une couche est enregistrée
transaction_routedselected_layer, routing_reason, gas_savings, latency_ms, senderÉmis lorsqu'une transaction est acheminée vers une couche

Module RDK​

Type d'événementAttributs clésDescription
rollup_createdrollup_id, creator, profile, settlement_modeÉmis lorsqu'un nouveau rollup est enregistré
rollup_paused, rollup_resumed, rollup_stoppedrollup_id et un motif lorsqu'il est fourniÉmis lorsqu'un rollup est mis en pause, repris ou arrêté
batch_challenged, challenge_resolved, batch_rejectedrollup_id, batch_index (et fraud_upheld lors d'une résolution)Émis lorsqu'un lot est contesté, que la contestation est résolue, ou qu'un lot est rejeté
batch_submittedrollup_id, batch_index, tx_countÉmis lorsqu'un lot de règlement est soumis
batch_finalizedrollup_id, batch_indexÉmis lorsqu'un lot franchit sa fenêtre de contestation
da_blob_storedrollup_id, blob_index, backend, sizeÉmis lorsqu'un blob DA est stocké
da_blob_prunedrollup_id, blob_indexÉmis lorsqu'un blob DA est purgé après rétention

Module Burn​

Type d'événementAttributs clésDescription
burnsource, amountÉmis lorsque des jetons sont brûlés définitivement
milestone_burntx_threshold, burn_amount, cumulative_tx_countÉmis lorsqu'un burn par palier du nombre de transactions est exécuté
burn_stranded_releasedamount, destination, remainingÉmis lorsque la gouvernance libère une partie de la part bloquée des stakers

Modules Inflation, Gas Abstraction, Licence, Light Node et IA​

Type d'événementAttributs clésDescription
inflation_params_updatedmode, fixed_epoch_emission, max_total_emissionÉmis lorsque la gouvernance modifie les paramètres d'émission
gas_abstraction_conversion, gas_abstraction_refillpaid, native_equivalent, rate, price_source, resultÉmis lorsque des frais payés dans un autre token accepté sont convertis, et lorsque le float est réapprovisionné (aucun ne se déclenche tant que seul l'uqor est accepté)
gas_abstraction_float_funded, gas_abstraction_config_updatedsender, amount ; accepted_tokens, block_conversion_capÉmis lorsque le float est alimenté et lorsque la gouvernance met à jour la configuration
license_granted, license_revoked, license_suspended, license_resumed, license_expiredbénéficiaire et fonctionnalitéCycle de vie des licences
license_authority_updatednew_authorityÉmis lorsque la gouvernance remplace l'autorité de licence (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, destinationÉvénements du cycle de vie et des récompenses des light nodes
ai_config_updatedmax_tx_per_minute, max_evm_tx_per_minute, anomaly_action, anomaly_thresholdÉmis lorsque la gouvernance met à jour la configuration du filtrage IA

Module Staking Tiers (v3.2.4)​

Ces événements viennent avec la version v3.2.4 : le testnet qorechain-diana les émet depuis le 19 octobre 2026 et le mainnet les émet à partir de la hauteur 3 742 566 (proposition de gouvernance 13). Un nœud mainnet encore en v3.2.3 n'a pas de module staking-tiers et n'en émet aucun.

Type d'événementAttributs clésDescription
staking_tier_lock_createdlock_id, delegator, validator, amount, months, end_timeUn verrouillage de délégation a été créé
staking_tier_lock_unlocked_early, staking_tier_lock_releasedlock_id, delegator, penalty_burned, bonus_forfeitedUn verrouillage a été terminé de façon anticipée (la pénalité est brûlée sous la source de burn staking_tier_penalty), ou a atteint son terme
staking_tier_bonus_claimed, staking_tier_bonus_settleddelegator, amount ; totaux de règlementUn bonus a été réclamé ; le pool a été réglé
staking_tier_params_updatedparamètresLa gouvernance a modifié les paramètres du module

Module xQORE​

Ces événements ne sont pas encore émis : xQORE n'est actif dans aucune version publiée du nœud (voir Staking xQORE).

Type d'événementAttributs clésDescription
xqore_lockowner, amountÉmis lorsque du QOR est verrouillé dans xQORE
xqore_unlockowner, amount, penalty, burned, redistributed, returnedÉmis lorsque du xQORE est déverrouillé en QOR

Module PRISM Consensus (RL Consensus)​

Ce sont des événements de fin de bloc, délivrés sur le flux NewBlock.

Type d'événementAttributs clésDescription
rl_observation_collectedheightÉmis lorsqu'une observation PRISM est effectuée (environ tous les 10 blocs)
rl_reward_computedheight, rewardÉmis lorsque la récompense PRISM est calculée
rl_action_appliedheight, agent_modeÉmis lorsque l'agent PRISM applique un ajustement de paramètre
rl_agent_mode_changedheight, agent_modeÉmis lorsque le mode de l'agent change
rl_circuit_breaker_triggeredheightÉmis lorsque le coupe-circuit PRISM bloque une action
rl_circuit_breaker_recoveredheightÉmis lorsque le coupe-circuit se rétablit

Module IA​

Type d'événementAttributs clésDescription
ai_anomaly_checkscore_millionths, action, is_anomalousÉmis pour chaque transaction dotée d'un score d'anomalie

Exemple de client 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 QoreChain (natif)​

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

Remarques​

  • Limites de connexion : sur un nœud que vous exécutez vous-même, le nombre maximal de connexions WebSocket est illimité par défaut (max-open-connections = 0). Définissez une limite dans app.toml pour les déploiements en production. Les points de terminaison publics appliquent leurs propres limites.
  • Tampon d'événements : le WebSocket RPC met en tampon un nombre borné d'événements par abonnement (200 par défaut sur un nœud auto-hébergé). 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 backoff exponentiel, car les connexions WebSocket peuvent être interrompues lors des redémarrages ou des mises à niveau du nœud.