Passa al contenuto principale

Eventi WebSocket

QoreChain fornisce lo streaming di eventi in tempo reale tramite due interfacce WebSocket: la WebSocket compatibile con l'EVM e la WebSocket RPC del QoreChain Consensus Engine.

nota

Entrambe le interfacce WebSocket sono disponibili sulla mainnet qorechain-vladi (attiva sulla versione di chain v3.1.85) e sulla testnet qorechain-diana. Gli endpoint locali sotto indicati presuppongono un nodo che gestisci tu stesso; per l'accesso remoto sostituisci l'host mainnet o testnet del tuo provider.


WebSocket EVM

Endpoint: ws://localhost:8546

La WebSocket EVM supporta il metodo standard eth_subscribe per lo streaming di eventi in tempo reale compatibile con gli strumenti di Ethereum.

Tipi di sottoscrizione

SottoscrizioneDescrizione
newHeadsEmette un header ogni volta che viene aggiunto un nuovo blocco
logsEmette i log corrispondenti a un filtro opzionale
newPendingTransactionsEmette gli hash delle transazioni che entrano nel mempool
syncingEmette aggiornamenti sullo stato di sincronizzazione

Sottoscrizione ai nuovi blocchi

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

Sottoscrizione ai log con filtro

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

Annullamento della sottoscrizione

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

WebSocket RPC di QoreChain

Endpoint: ws://localhost:26657/websocket

La WebSocket RPC utilizza il sistema di sottoscrizione agli eventi del QoreChain Consensus Engine. I client si sottoscrivono con una stringa di query che filtra gli eventi per tipo e attributi.

Sottoscrizione a tutti i nuovi blocchi

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

Sottoscrizione a tutte le transazioni

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

Sottoscrizione a eventi specifici di un modulo

Filtra per tipo di evento per ricevere solo gli eventi di un modulo specifico:

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

Annullamento della sottoscrizione

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

Riferimento agli eventi dei moduli

Modulo PQC

Tipo di eventoAttributi chiaveDescrizione
pqc_hybrid_verifyaddress, algorithm, result (pass/fail), modeEmesso a ogni verifica di firma ibrida
pqc_hybrid_auto_registeraddress, algorithm, pubkey_hashEmesso quando una chiave PQC viene registrata automaticamente

Modulo AI

Tipo di eventoAttributi chiaveDescrizione
fraud_alertseverity (low/medium/high/critical), address, reason, scoreEmesso quando viene rilevata una frode in una transazione
circuit_breakermodule, action (tripped/reset), threshold, valueEmesso quando un circuit breaker AI cambia stato

Modulo Bridge

Tipo di eventoAttributi chiaveDescrizione
deposit_completedchain_id, sender, recipient, amount, asset, tx_hashEmesso quando un deposito bridge in entrata viene confermato
withdrawal_completedchain_id, sender, recipient, amount, asset, tx_hashEmesso quando un prelievo bridge in uscita viene confermato

Modulo Cross-VM

Tipo di eventoAttributi chiaveDescrizione
crossvm_requestmessage_id, source_vm, target_vm, sender, payload_hashEmesso quando viene avviata una chiamata cross-VM
crossvm_responsemessage_id, source_vm, target_vm, success, gas_usedEmesso quando una chiamata cross-VM si completa
crossvm_timeoutmessage_id, source_vm, target_vm, queued_at_heightEmesso quando un messaggio cross-VM supera il timeout della coda

Modulo Multilayer

Tipo di eventoAttributi chiaveDescrizione
anchor_submittedlayer_id, layer_type, anchor_hash, height, submitterEmesso quando viene inviato un anchor di stato di un layer
layer_status_changedlayer_id, previous_status, new_status, reasonEmesso quando un layer cambia stato operativo

Modulo RDK

Tipo di eventoAttributi chiaveDescrizione
rollup_createdrollup_id, operator, settlement_type, profileEmesso quando viene registrato un nuovo rollup
batch_submittedrollup_id, batch_index, state_root, tx_countEmesso quando viene inviato un batch di settlement
batch_finalizedrollup_id, batch_index, finalized_at_heightEmesso quando un batch supera la sua finestra di challenge
da_blob_storedrollup_id, blob_index, size_bytes, commitmentEmesso quando un blob DA viene memorizzato
da_blob_prunedrollup_id, blob_index, pruned_at_heightEmesso quando un blob DA viene eliminato dopo la ritenzione

Modulo Burn

Tipo di eventoAttributi chiaveDescrizione
fee_distributedtotal_fees, validator_amount, burn_amount, treasury_amount, staker_amountEmesso quando le commissioni raccolte vengono distribuite
tokens_burnedamount, channel, block_heightEmesso quando i token vengono bruciati in modo permanente

Modulo xQORE

Tipo di eventoAttributi chiaveDescrizione
xqore_lockedaddress, amount, lock_duration, tierEmesso quando QOR viene bloccato in xQORE
xqore_unlockedaddress, amount, penalty_applied, penalty_amountEmesso quando xQORE viene sbloccato nuovamente in QOR
pvp_rebaseepoch, total_penalty, rebase_amount, beneficiary_countEmesso durante la distribuzione del rebase PvP

Modulo Inflation

Tipo di eventoAttributi chiaveDescrizione
epoch_mintedepoch, minted_amount, inflation_rate, block_heightEmesso alla fine di ogni epoca di inflazione

Modulo RL Consensus

Gli aggiustamenti dei parametri PRISM e l'attività dei circuit breaker vengono emessi tramite questo modulo.

Tipo di eventoAttributi chiaveDescrizione
rl_action_appliedaction_type, param_key, old_value, new_value, rewardEmesso quando l'agente PRISM applica un aggiustamento di parametro
circuit_breaker_triggeredreason, param_key, attempted_value, limitEmesso quando il circuit breaker PRISM blocca un'azione

Esempio di 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 di QoreChain (nativa)

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

Note

  • Limiti di connessione: il numero massimo predefinito di connessioni WebSocket è illimitato (max-open-connections = 0). Imposta un limite in app.toml per i deployment di produzione.
  • Buffer degli eventi: la WebSocket RPC bufferizza fino a 200 eventi per sottoscrizione. Se il client rimane indietro, gli eventi più vecchi vengono scartati.
  • Riconnessione: i client dovrebbero implementare la riconnessione automatica con backoff esponenziale, poiché le connessioni WebSocket possono essere interrotte durante i riavvii o gli aggiornamenti del nodo.