إنتقل إلى المحتوى الرئيسي

أحداث WebSocket

توفّر QoreChain بثّ الأحداث في الوقت الفعلي عبر واجهتي WebSocket: واجهة WebSocket المتوافقة مع EVM وواجهة RPC WebSocket لمحرّك إجماع QoreChain.

ملاحظة

تتوفّر واجهة 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 طريقة eth_subscribe القياسية لبثّ الأحداث في الوقت الفعلي بشكل متوافق مع أدوات Ethereum.

أنواع الاشتراك​

الاشتراكالوصف
newHeadsيُصدِر ترويسة في كل مرة تُضاف فيها كتلة جديدة
logsيُصدِر السجلّات المطابقة لمرشِّح اختياري
newPendingTransactionsيُصدِر تجزئات المعاملات الداخلة إلى الـ mempool

اشتراك syncing غير مُنفَّذ: يُرجع eth_subscribe مع "syncing" الخطأ -32600 syncing subscription is not implemented. استعلم عن eth_syncing عبر HTTP بدلًا من ذلك.

الاشتراك في الكتل الجديدة​

{
"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. يشترك العملاء باستخدام سلسلة استعلام تُرشِّح الأحداث حسب النوع والسمات.

الاشتراك في جميع الكتل الجديدة​

{
"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 أدناه) فتُسلَّم عبر tm.event='NewBlock' وليس Tx. الأسماء والسمات الواردة أدناه هي لإصدار السلسلة v3.2.3 (الشبكة الرئيسية)؛ والأحداث الموجودة فقط على الشبكة الاختبارية v3.2.4 موسومة.

الأحداث التي ستراها فعليًا

كثير من هذه الوحدات خاملة على الشبكات العامة: الجسر غير مُفعَّل، ولم تُسجَّل بعد أي طبقات multilayer أو rollups، وxQORE غير قابل للاستخدام. أحداثها معرَّفة لكنها لا تُطلَق حتى يوجد نشاط. أما حدثا المراقبة والمكافأة في PRISM (rl_observation_collected وrl_reward_computed) فيُصدَران نحو كل 10 كتل على كلتا الشبكتين.

وحدة PQC​

نوع الحدثالسمات الرئيسيةالوصف
pqc_verifyaddress، key_type، algorithm_id، hybrid_mode، statusيُصدَر عند كل فحص لتوقيع PQC
pqc_hybrid_verifyaddress، algorithm_id، statusيُصدَر عند كل تحقّق من توقيع هجين
pqc_hybrid_classical_onlyaddress، hybrid_modeيُصدَر عندما يقبل الوضع الحالي توقيعًا كلاسيكيًا فقط
pqc_key_registeredaddress، key_type، algorithm_idيُصدَر عند تسجيل مفتاح PQC
pqc_key_rotatedaddress، algorithm_idيُصدَر عند تدوير مفتاح PQC
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_closedaddressيُصدَر عند إغلاق نافذة تفويض لمسار EVM
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_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يُصدَر عند بدء استدعاء عبر الأجهزة الافتراضية
crossvm_responsemessage_id، statusيُصدَر عند اكتمال استدعاء عبر الأجهزة الافتراضية
crossvm_timeoutmessage_idيُصدَر عند تجاوز رسالة عبر الأجهزة الافتراضية لمهلة قائمة الانتظار

وحدة 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 جديد
rollup_paused، rollup_resumed، rollup_stoppedrollup_id وسبب حيثما وُجديُصدَر عند إيقاف rollup مؤقتًا أو استئنافه أو إيقافه نهائيًا
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، sizeيُصدَر عند تخزين كتلة DA
da_blob_prunedrollup_id، blob_indexيُصدَر عند تقليم كتلة DA بعد فترة الاحتفاظ

وحدة الحرق​

نوع الحدثالسمات الرئيسيةالوصف
burnsource، amountيُصدَر عند حرق الرموز بشكل دائم
milestone_burntx_threshold، burn_amount، cumulative_tx_countيُصدَر عند تنفيذ حرق مرتبط بمَعلَم عدد المعاملات
burn_stranded_releasedamount، destination، remainingيُصدَر عندما تُفرِج الحوكمة عن جزء من حصة المُراهِنين (stakers) العالقة

وحدات التضخم وتجريد الغاز والترخيص والعقدة الخفيفة والذكاء الاصطناعي​

نوع الحدثالسمات الرئيسيةالوصف
inflation_params_updatedmode، fixed_epoch_emission، max_total_emissionيُصدَر عندما تغيّر الحوكمة معاملات الإصدار
gas_abstraction_conversion، gas_abstraction_refillpaid، native_equivalent، rate، price_source، resultيُصدَر عند تحويل رسوم مدفوعة برمز مقبول آخر، وعند إعادة ملء رصيد التحويل (float) (لا يُطلَق أيٌّ منهما ما دام uqor وحده مقبولًا)
gas_abstraction_float_funded، gas_abstraction_config_updatedsender، amount؛ accepted_tokens، block_conversion_capيُصدَر عند تمويل رصيد التحويل (float) وعندما تحدّث الحوكمة الإعدادات
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يُصدَر عندما تحدّث الحوكمة إعدادات الفحص بالذكاء الاصطناعي

وحدة مستويات الرهن (v3.2.4)​

تأتي هذه الأحداث مع إصدار v3.2.4: تُصدرها الشبكة الاختبارية qorechain-diana منذ 19 أكتوبر 2026، وتُصدرها الشبكة الرئيسية من الارتفاع 3,742,566 (مقترح الحوكمة 13). أما عقدة الشبكة الرئيسية التي ما زالت على v3.2.3 فليست لديها وحدة مستويات الرهن ولا تُصدر أيًّا من هذه الأحداث.

نوع الحدثالسمات الرئيسيةالوصف
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)، أو بلغ نهايته
staking_tier_bonus_claimed، staking_tier_bonus_settleddelegator، amount؛ إجماليات التسويةجرت المطالبة بمكافأة إضافية؛ وسُوِّي المجمّع
staking_tier_params_updatedالمعاملاتغيّرت الحوكمة معاملات الوحدة

وحدة xQORE​

هذه الأحداث لا تُصدَر بعد: xQORE غير مُفعَّل في أي إصدار منشور من العقدة (راجع تخزين xQORE (Staking)).

نوع الحدثالسمات الرئيسيةالوصف
xqore_lockowner، amountيُصدَر عند قفل QOR في xQORE
xqore_unlockowner، amount، penalty، burned، redistributed، returnedيُصدَر عند فتح قفل xQORE وإعادته إلى QOR

وحدة إجماع PRISM (إجماع RL)​

هذه أحداث نهاية الكتلة، تُسلَّم عبر تدفّق NewBlock.

نوع الحدثالسمات الرئيسيةالوصف
rl_observation_collectedheightيُصدَر عند أخذ مشاهدة PRISM (نحو كل 10 كتل)
rl_reward_computedheight، rewardيُصدَر عند حساب مكافأة PRISM
rl_action_appliedheight، agent_modeيُصدَر عندما يطبّق وكيل PRISM تعديل معامل
rl_agent_mode_changedheight، agent_modeيُصدَر عند تغيّر وضع الوكيل
rl_circuit_breaker_triggeredheightيُصدَر عندما يحظر قاطع دائرة PRISM إجراءً
rl_circuit_breaker_recoveredheightيُصدَر عند تعافي قاطع الدائرة

وحدة الذكاء الاصطناعي​

نوع الحدثالسمات الرئيسيةالوصف
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 أثناء إعادة تشغيل العقد أو ترقياتها.