From 1afb77e63ef6f2c18534a03affd98bcad5e657aa Mon Sep 17 00:00:00 2001 From: Sergio Chouhy Date: Tue, 22 Jul 2025 10:37:04 -0300 Subject: [PATCH 1/2] use correct rpc error --- sequencer_rpc/src/process.rs | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/sequencer_rpc/src/process.rs b/sequencer_rpc/src/process.rs index f8bc880..9b921c5 100644 --- a/sequencer_rpc/src/process.rs +++ b/sequencer_rpc/src/process.rs @@ -2,7 +2,7 @@ use actix_web::Error as HttpError; use serde_json::Value; use common::rpc_primitives::{ - errors::{RpcError, RpcParseError}, + errors::RpcError, message::{Message, Request}, parser::RpcRequest, requests::{GetAccountBalanceRequest, GetAccountBalanceResponse}, @@ -141,7 +141,7 @@ impl JsonHandler { async fn process_get_account_balance(&self, request: Request) -> Result { let get_account_req = GetAccountBalanceRequest::parse(Some(request.params))?; let address = hex::decode(get_account_req.address) - .map_err(|_| RpcParseError("invalid address".to_string()))?; + .map_err(|_| RpcError::invalid_params("invalid address".to_string()))?; let balance = { let state = self.sequencer_state.lock().await; @@ -277,16 +277,9 @@ mod tests { "jsonrpc": "2.0", "id": 1, "error": { - "code": -32700, - "message": "Parse error", - "name": "REQUEST_VALIDATION_ERROR", - "data": "invalid address", - "cause": { - "name": "PARSE_ERROR", - "info": { - "error_message": "invalid address" - } - } + "code": -32602, + "message": "Invalid params", + "data": "invalid address" } }); let response = call_rpc_handler_with_json(json_handler, request).await; From bf139aa634c610d78a29266f1acee4dce89ac0af Mon Sep 17 00:00:00 2001 From: Sergio Chouhy Date: Tue, 22 Jul 2025 13:52:11 -0300 Subject: [PATCH 2/2] improve error messages --- sequencer_rpc/src/process.rs | 42 +++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/sequencer_rpc/src/process.rs b/sequencer_rpc/src/process.rs index 9b921c5..f141450 100644 --- a/sequencer_rpc/src/process.rs +++ b/sequencer_rpc/src/process.rs @@ -137,18 +137,17 @@ impl JsonHandler { } /// Returns the balance of the account at the given address. - /// The address must be a valid hex string. If the account doesn't exist, a balance of zero is returned. + /// The address must be a valid hex string of the correct length. async fn process_get_account_balance(&self, request: Request) -> Result { let get_account_req = GetAccountBalanceRequest::parse(Some(request.params))?; - let address = hex::decode(get_account_req.address) - .map_err(|_| RpcError::invalid_params("invalid address".to_string()))?; - + let address_bytes = hex::decode(get_account_req.address) + .map_err(|_| RpcError::invalid_params("invalid hex".to_string()))?; + let address = address_bytes + .try_into() + .map_err(|_| RpcError::invalid_params("invalid length".to_string()))?; let balance = { let state = self.sequencer_state.lock().await; - state - .store - .acc_store - .get_account_balance(&address.try_into().unwrap_or_default()) + state.store.acc_store.get_account_balance(&address) } .unwrap_or(0); @@ -265,7 +264,7 @@ mod tests { } #[actix_web::test] - async fn test_get_account_balance_for_invalid_address() { + async fn test_get_account_balance_for_invalid_hex() { let json_handler = json_handler_for_tests(); let request = serde_json::json!({ "jsonrpc": "2.0", @@ -279,7 +278,30 @@ mod tests { "error": { "code": -32602, "message": "Invalid params", - "data": "invalid address" + "data": "invalid hex" + } + }); + let response = call_rpc_handler_with_json(json_handler, request).await; + + assert_eq!(response, expected_response); + } + + #[actix_web::test] + async fn test_get_account_balance_for_invalid_length() { + let json_handler = json_handler_for_tests(); + let request = serde_json::json!({ + "jsonrpc": "2.0", + "method": "get_account_balance", + "params": { "address": "cafecafe" }, + "id": 1 + }); + let expected_response = serde_json::json!({ + "jsonrpc": "2.0", + "id": 1, + "error": { + "code": -32602, + "message": "Invalid params", + "data": "invalid length" } }); let response = call_rpc_handler_with_json(json_handler, request).await;