メインコンテンツまでスキップ

WebSocket イベント

QoreChainは、2つのWebSocketインターフェース、すなわちEVM互換WebSocketとQoreChain Consensus Engine RPC WebSocketを通じてリアルタイムのイベントストリーミングを提供します。

注記

コンセンサスエンジンのRPC WebSocketは、qorechain-vladi メインネットと qorechain-diana テストネットの両方で公開されています。EVM WebSocketが公開されているのはテストネットのみです。公開のメインネットEVM WebSocketは存在せず(wss://evm.qore.host と wss://evm-ws.qore.host はWebSocket接続を受け付けません)、メインネットで eth_subscribe を使うには自分でノードを運用してください。以下のローカルエンドポイントは、自分で運用するノードを前提としています。

インターフェースメインネットテストネット
RPC WebSocketwss://rpc.qore.host/websocketwss://rpc-testnet.qore.host/websocket
EVM WebSocketなし(自前ノードのみ)wss://evm-ws-testnet.qore.host

EVM WebSocket​

エンドポイント: 自分のノードでは ws://localhost:8546、公開テストネットでは wss://evm-ws-testnet.qore.host。公開のメインネットEVM WebSocketはありません。

EVM WebSocketは、Ethereumツールと互換性のあるリアルタイムイベントストリーミング用の標準eth_subscribeメソッドをサポートします。

サブスクリプションの種類​

サブスクリプション説明
newHeads新しいブロックが追加されるたびにヘッダーを発行
logsオプションのフィルタに一致するログを発行
newPendingTransactionsメモリプールに入るトランザクションハッシュを発行

syncing サブスクリプションは実装されていません。eth_subscribe に "syncing" を指定すると -32600 syncing subscription is not implemented が返されます。代わりにHTTP経由で eth_syncing をポーリングしてください。

新しいブロックへのサブスクライブ​

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

フィルタ付きでログにサブスクライブ​

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

サブスクリプション解除​

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

QoreChain RPC WebSocket​

エンドポイント: 自分のノードでは ws://localhost:26657/websocket、公開では wss://rpc.qore.host/websocket(メインネット)と wss://rpc-testnet.qore.host/websocket(テストネット)。

RPC WebSocketはQoreChain Consensus Engineのイベントサブスクリプションシステムを使用します。クライアントは、イベントの種類と属性でフィルタするクエリ文字列を使ってサブスクライブします。

すべての新しいブロックへのサブスクライブ​

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

すべてのトランザクションへのサブスクライブ​

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

モジュール固有イベントへのサブスクライブ​

イベントタイプでフィルタすることで、特定のモジュールからのイベントのみを受信できます。

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

サブスクリプション解除​

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

モジュールイベントリファレンス​

イベントは標準のコンセンサスエンジンイベントとして発行されます。イベントタイプと属性でフィルタした tm.event='Tx' クエリでサブスクライブしてください(例: tm.event='Tx' AND bridge_deposit.chain EXISTS)。ブロックレベルのイベント(下記のPRISMイベントなど、ブロック終了時のロジックが発行するもの)は、Tx ではなく tm.event='NewBlock' で配信されます。以下のイベント名と属性は、チェーンバージョン v3.2.3(メインネット)のものです。v3.2.4 テストネットにのみ存在するイベントには、その旨を記載しています。

実際に目にするイベント

これらのモジュールの多くは、公開ネットワークでは稼働していません。ブリッジは稼働しておらず、マルチレイヤーのレイヤーやロールアップはまだ登録されておらず、xQOREも利用できません。これらのイベントは定義されていますが、アクティビティが発生するまで発行されません。PRISMの観測イベントと報酬イベント(rl_observation_collected、rl_reward_computed)は、両ネットワークで約10ブロックごとに発行されます。

PQCモジュール​

イベントタイプ主な属性説明
pqc_verifyaddress、key_type、algorithm_id、hybrid_mode、statusPQC署名のチェックごとに発行
pqc_hybrid_verifyaddress、algorithm_id、statusハイブリッド署名の検証ごとに発行
pqc_hybrid_classical_onlyaddress、hybrid_mode古典署名のみのものが現在のモードで受理された際に発行
pqc_key_registeredaddress、key_type、algorithm_idPQC鍵が登録された際に発行
pqc_key_rotatedaddress、algorithm_idPQC鍵がローテーションされた際に発行
pqc_key_migratedaddress、from_algorithm、to_algorithm鍵が新しいアルゴリズムへ移行された際に発行
pqc_evm_window_openedaddress、expiry_height、max_txs、max_value。ウィンドウにスコープがある場合は native_only と allowed_targets(v3.2.3)EVMレーンの承認ウィンドウが開いた際に発行
pqc_evm_window_closedaddressEVMレーンの承認ウィンドウが閉じた際に発行
pqc_evm_delegation_consentaddress、delegate、expiry_heightアカウントが EIP-7702 委任への同意を記録した際に発行(v3.2.2)
pqc_evm_delegation_clearedaddress、delegateアカウントの EIP-7702 委任が解除された際に発行(v3.2.2)
pqc_algorithm_registered、pqc_algorithm_status_updated、pqc_algorithm_disabledalgorithm_id、および name/category、old_status/new_status、または reasonガバナンスによるアルゴリズムレジストリの変更

PQC鍵は登録トランザクションで明示的に登録されます。自動登録のイベントはありません。

Bridgeモジュール​

イベントタイプ主な属性説明
bridge_depositoperation_id、chain、asset、amount、senderインバウンドの入金が記録された際に発行
bridge_withdrawoperation_id、chain、asset、amount、sender、receiver出金が記録された際に発行
bridge_attestationoperation_id、validator、chain、pqc_verified、attestationsバリデーターのアテステーションごとに発行
bridge_operation_executedoperation_id、statusオペレーションが完了した際に発行
bridge_circuit_breaker_tripchain、status、reasonチェーンのブリッジのサーキットブレーカーが作動した際に発行

Cross-VMモジュール​

イベントタイプ主な属性説明
crossvm_requestmessage_id、source_vm、target_vm、target_contract、senderクロスVM呼び出しが開始された際に発行
crossvm_responsemessage_id、statusクロスVM呼び出しが完了した際に発行
crossvm_timeoutmessage_idクロスVMメッセージがキューのタイムアウトを超えた際に発行

Multilayerモジュール​

イベントタイプ主な属性説明
state_anchoredlayer_id、layer_height、state_root、main_chain_height、pqc_verified、transaction_countレイヤーのステートアンカーが受理された際に発行
anchor_challengedlayer_id、layer_height、challenger、challenge_reason、resolutionアンカーに異議が申し立てられた際に発行
layer_status_updatedlayer_id、status、reasonレイヤーのステータスが変化した際に発行
sidechain_registered、paychain_registeredlayer_id、layer_type、creator、statusレイヤーが登録された際に発行
transaction_routedselected_layer、routing_reason、gas_savings、latency_ms、senderトランザクションがレイヤーへルーティングされた際に発行

RDKモジュール​

イベントタイプ主な属性説明
rollup_createdrollup_id、creator、profile、settlement_mode新しいロールアップが登録された際に発行
rollup_paused、rollup_resumed、rollup_stoppedrollup_id、および指定がある場合は理由ロールアップが一時停止、再開、または停止された際に発行
batch_challenged、challenge_resolved、batch_rejectedrollup_id、batch_index(解決時は fraud_upheld も)バッチに異議が申し立てられた際、異議が解決された際、またはバッチが却下された際に発行
batch_submittedrollup_id、batch_index、tx_count決済バッチが送信された際に発行
batch_finalizedrollup_id、batch_indexバッチがチャレンジウィンドウを通過した際に発行
da_blob_storedrollup_id、blob_index、backend、sizeDAブロブが保存された際に発行
da_blob_prunedrollup_id、blob_index保持期間経過後にDAブロブが削除された際に発行

Burnモジュール​

イベントタイプ主な属性説明
burnsource、amountトークンが恒久的にバーンされた際に発行
milestone_burntx_threshold、burn_amount、cumulative_tx_countトランザクション数のマイルストーンバーンが実行された際に発行
burn_stranded_releasedamount、destination、remainingガバナンスが滞留していたステーカー分の一部を解放した際に発行

Inflation、Gas Abstraction、Licence、Light Node、AIモジュール​

イベントタイプ主な属性説明
inflation_params_updatedmode、fixed_epoch_emission、max_total_emissionガバナンスが発行パラメータを変更した際に発行
gas_abstraction_conversion、gas_abstraction_refillpaid、native_equivalent、rate、price_source、result別の受け入れ可能なトークンで支払われた手数料が変換された際、およびフロートが補充された際に発行(uqor のみが受け入れられている間は発行されません)
gas_abstraction_float_funded、gas_abstraction_config_updatedsender、amount、accepted_tokens、block_conversion_capフロートに資金が投入された際、およびガバナンスが設定を更新した際に発行
license_granted、license_revoked、license_suspended、license_resumed、license_expired付与先と機能ライセンスのライフサイクル
license_authority_updatednew_authorityガバナンスがライセンス権限者を置き換えた際に発行(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ライトノードのライフサイクルと報酬のイベント
ai_config_updatedmax_tx_per_minute、max_evm_tx_per_minute、anomaly_action、anomaly_thresholdガバナンスが AI スクリーニング設定を更新した際に発行

Staking Tiersモジュール(v3.2.4)​

これらのイベントは v3.2.4 リリースに伴うものです。qorechain-diana テストネットでは 2026年10月19日から発行されており、メインネットではブロック高 3,742,566 から発行されます(ガバナンス提案 13)。まだ v3.2.3 のメインネットノードには Staking Tiers モジュールがなく、これらのイベントは一切発行されません。

イベントタイプ主な属性説明
staking_tier_lock_createdlock_id、delegator、validator、amount、months、end_timeデリゲーションのロックが作成された
staking_tier_lock_unlocked_early、staking_tier_lock_releasedlock_id、delegator、penalty_burned、bonus_forfeitedロックが早期に終了した(ペナルティは staking_tier_penalty Burn ソースとして Burn されます)、または終了時点に達した
staking_tier_bonus_claimed、staking_tier_bonus_settleddelegator、amount。決済の合計ボーナスが請求された。プールが決済された
staking_tier_params_updatedパラメータガバナンスがモジュールのパラメータを変更した

xQOREモジュール​

これらのイベントはまだ発行されません。xQOREはリリース済みのどのノードビルドでも稼働していません(xQOREステーキングを参照)。

イベントタイプ主な属性説明
xqore_lockowner、amountQORがxQOREにロックされた際に発行
xqore_unlockowner、amount、penalty、burned、redistributed、returnedxQOREがQORへとアンロックされた際に発行

PRISM Consensus(RL Consensus)モジュール​

これらはブロック終了時のイベントで、NewBlock ストリームで配信されます。

イベントタイプ主な属性説明
rl_observation_collectedheightPRISMの観測が行われた際に発行(約10ブロックごと)
rl_reward_computedheight、rewardPRISMの報酬が計算された際に発行
rl_action_appliedheight、agent_modePRISMエージェントがパラメータ調整を適用した際に発行
rl_agent_mode_changedheight、agent_modeエージェントのモードが変化した際に発行
rl_circuit_breaker_triggeredheightPRISMサーキットブレーカーがアクションをブロックした際に発行
rl_circuit_breaker_recoveredheightサーキットブレーカーが復旧した際に発行

AIモジュール​

イベントタイプ主な属性説明
ai_anomaly_checkscore_millionths、action、is_anomalous異常スコアが付与されたトランザクションごとに発行

JavaScriptクライアントの例​

EVM WebSocket(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);
});

QoreChain RPC WebSocket(ネイティブ)​

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

補足​

  • 接続数の上限: 自分で運用するノードでは、WebSocket接続数のデフォルトの上限は無制限です(max-open-connections = 0)。本番環境ではapp.tomlで上限を設定してください。公開エンドポイントには独自の上限が適用されます。
  • イベントバッファ: RPC WebSocketは、サブスクリプションごとに一定数のイベントをバッファします(セルフホストのノードではデフォルトで200件)。クライアントの処理が追いつかない場合、古いイベントは破棄されます。
  • 再接続: ノードの再起動やアップグレード中にWebSocket接続が中断されることがあるため、クライアントは指数バックオフによる自動再接続を実装する必要があります。