From ca388b4bc2baac63ba045d735a1cbab447f6d8031a7b85f8c028c4ea255351a4 Mon Sep 17 00:00:00 2001 From: Mukan Erkin Date: Fri, 24 Apr 2026 20:19:31 +0300 Subject: [PATCH] feat(rpc): add nu_listValidators endpoint Co-Authored-By: Claude Sonnet 4.6 --- CHANGELOG.md | 5 +++++ crates/nu-rpc/src/handlers.rs | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0743bc1..41c2be7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) ## [Unreleased] +## [0.9.0] — 2026-04-24 + +### Added +- `nu_listValidators` RPC handler — tüm validatörleri döner; `params[0] = true` ile yalnızca aktifler filtrelenir + ## [0.8.0] — 2026-04-24 ### Added diff --git a/crates/nu-rpc/src/handlers.rs b/crates/nu-rpc/src/handlers.rs index bbf796b..54bce92 100644 --- a/crates/nu-rpc/src/handlers.rs +++ b/crates/nu-rpc/src/handlers.rs @@ -14,6 +14,7 @@ pub async fn dispatch(req: JsonRpcRequest, state: &AppState) -> JsonRpcResponse "nu_sendRawTx" => handle_send_raw_tx(&req, state).await, "nu_getBlock" => handle_get_block(&req, state).await, "nu_getValidator" => handle_get_validator(&req, state).await, + "nu_listValidators" => handle_list_validators(&req, state).await, "nu_getTx" => not_implemented(&req, "nu_getTx"), "nu_getStory" => not_implemented(&req, "nu_getStory"), "nu_getNode" => not_implemented(&req, "nu_getNode"), @@ -126,6 +127,16 @@ async fn handle_get_validator(req: &JsonRpcRequest, state: &AppState) -> JsonRpc } } +async fn handle_list_validators(req: &JsonRpcRequest, state: &AppState) -> JsonRpcResponse { + let only_active = req.params.get(0).and_then(|v| v.as_bool()).unwrap_or(false); + let db = state.db.lock().await; + let mut validators: Vec = db.scan_prefix("validator:"); + if only_active { + validators.retain(|v| v.is_active); + } + JsonRpcResponse::ok(req.id.clone(), serde_json::to_value(validators).unwrap()) +} + fn not_implemented(req: &JsonRpcRequest, method: &str) -> JsonRpcResponse { JsonRpcResponse::err(req.id.clone(), -32000, format!("{method} not implemented yet")) }