본문으로 건너뛰기

WebSocket 이벤트

QoreChain은 두 가지 WebSocket 인터페이스를 통해 실시간 이벤트 스트리밍을 제공합니다: EVM 호환 WebSocket과 QoreChain 합의 엔진 RPC WebSocket입니다.

노트

두 WebSocket 인터페이스 모두 qorechain-vladi 메인넷(체인 버전 v3.1.85에서 가동 중)과 qorechain-diana 테스트넷에서 사용할 수 있습니다. 아래 로컬 엔드포인트는 직접 운영하는 노드를 가정합니다. 원격 접속의 경우 공급자의 메인넷 또는 테스트넷 호스트로 대체하세요.


EVM WebSocket

엔드포인트: ws://localhost:8546

EVM WebSocket은 이더리움 도구와 호환되는 실시간 이벤트 스트리밍을 위한 표준 eth_subscribe 메서드를 지원합니다.

구독 유형

구독설명
newHeads새 블록이 추가될 때마다 헤더를 방출합니다
logs선택적 필터와 일치하는 로그를 방출합니다
newPendingTransactions멤풀에 진입하는 트랜잭션 해시를 방출합니다
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

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 fraud_alert.severity EXISTS"
},
"id": 3
}

구독 취소

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

모듈 이벤트 참조

PQC 모듈

이벤트 유형주요 속성설명
pqc_hybrid_verifyaddress, algorithm, result (pass/fail), mode각 하이브리드 서명 검증 시 방출됩니다
pqc_hybrid_auto_registeraddress, algorithm, pubkey_hashPQC 키가 자동 등록될 때 방출됩니다

AI 모듈

이벤트 유형주요 속성설명
fraud_alertseverity (low/medium/high/critical), address, reason, score트랜잭션에서 사기가 탐지될 때 방출됩니다
circuit_breakermodule, action (tripped/reset), threshold, valueAI 서킷 브레이커 상태가 변경될 때 방출됩니다

브리지 모듈

이벤트 유형주요 속성설명
deposit_completedchain_id, sender, recipient, amount, asset, tx_hash인바운드 브리지 입금이 확정될 때 방출됩니다
withdrawal_completedchain_id, sender, recipient, amount, asset, tx_hash아웃바운드 브리지 출금이 확정될 때 방출됩니다

크로스 VM 모듈

이벤트 유형주요 속성설명
crossvm_requestmessage_id, source_vm, target_vm, sender, payload_hash크로스 VM 호출이 시작될 때 방출됩니다
crossvm_responsemessage_id, source_vm, target_vm, success, gas_used크로스 VM 호출이 완료될 때 방출됩니다
crossvm_timeoutmessage_id, source_vm, target_vm, queued_at_height크로스 VM 메시지가 큐 타임아웃을 초과할 때 방출됩니다

멀티레이어 모듈

이벤트 유형주요 속성설명
anchor_submittedlayer_id, layer_type, anchor_hash, height, submitter계층 상태 앵커가 제출될 때 방출됩니다
layer_status_changedlayer_id, previous_status, new_status, reason계층의 운영 상태가 변경될 때 방출됩니다

RDK 모듈

이벤트 유형주요 속성설명
rollup_createdrollup_id, operator, settlement_type, profile새 롤업이 등록될 때 방출됩니다
batch_submittedrollup_id, batch_index, state_root, tx_count정산 배치가 제출될 때 방출됩니다
batch_finalizedrollup_id, batch_index, finalized_at_height배치가 챌린지 윈도우를 통과할 때 방출됩니다
da_blob_storedrollup_id, blob_index, size_bytes, commitmentDA 블롭이 저장될 때 방출됩니다
da_blob_prunedrollup_id, blob_index, pruned_at_height보존 기간 후 DA 블롭이 제거될 때 방출됩니다

소각 모듈

이벤트 유형주요 속성설명
fee_distributedtotal_fees, validator_amount, burn_amount, treasury_amount, staker_amount징수된 수수료가 분배될 때 방출됩니다
tokens_burnedamount, channel, block_height토큰이 영구적으로 소각될 때 방출됩니다

xQORE 모듈

이벤트 유형주요 속성설명
xqore_lockedaddress, amount, lock_duration, tierQOR가 xQORE로 잠길 때 방출됩니다
xqore_unlockedaddress, amount, penalty_applied, penalty_amountxQORE가 QOR로 잠금 해제될 때 방출됩니다
pvp_rebaseepoch, total_penalty, rebase_amount, beneficiary_countPvP 리베이스 분배 중에 방출됩니다

인플레이션 모듈

이벤트 유형주요 속성설명
epoch_mintedepoch, minted_amount, inflation_rate, block_height각 인플레이션 에포크 종료 시 방출됩니다

RL 합의 모듈

PRISM 매개변수 조정과 서킷 브레이커 활동이 이 모듈을 통해 방출됩니다.

이벤트 유형주요 속성설명
rl_action_appliedaction_type, param_key, old_value, new_value, rewardPRISM 에이전트가 매개변수 조정을 적용할 때 방출됩니다
circuit_breaker_triggeredreason, param_key, attempted_value, limitPRISM 서킷 브레이커가 작업을 차단할 때 방출됩니다

JavaScript 클라이언트 예제

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

QoreChain RPC WebSocket (네이티브)

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

참고

  • 연결 제한: 기본 최대 WebSocket 연결 수는 무제한(max-open-connections = 0)입니다. 프로덕션 배포의 경우 app.toml에서 제한을 설정하세요.
  • 이벤트 버퍼: RPC WebSocket은 구독당 최대 200개의 이벤트를 버퍼링합니다. 클라이언트가 뒤처지면 오래된 이벤트는 삭제됩니다.
  • 재연결: WebSocket 연결은 노드 재시작 또는 업그레이드 중에 중단될 수 있으므로, 클라이언트는 지수 백오프를 사용한 자동 재연결을 구현해야 합니다.