Part of https://www.notion.so/Laconic-Mainnet-Plan-1eca6b22d47280569cd0d1e6d711d949 Co-authored-by: Shreerang Kale <shreerangkale@gmail.com> Reviewed-on: #1 Co-authored-by: shreerang <shreerang@noreply.git.vdb.to> Co-committed-by: shreerang <shreerang@noreply.git.vdb.to>
70 lines
1.8 KiB
Python
70 lines
1.8 KiB
Python
import json
|
|
import logging
|
|
from aiohttp import web, ClientSession
|
|
from router import Router
|
|
|
|
|
|
async def handle_rpc_request(request: web.Request) -> web.Response:
|
|
router: Router = request.app['router']
|
|
logger = logging.getLogger(__name__)
|
|
|
|
try:
|
|
body = await request.json()
|
|
|
|
if not isinstance(body, dict):
|
|
return web.json_response({
|
|
"jsonrpc": "2.0",
|
|
"id": body.get("id", 1) if isinstance(body, dict) else 1,
|
|
"error": {
|
|
"code": -32600,
|
|
"message": "Invalid Request"
|
|
}
|
|
}, status=400)
|
|
|
|
method = body.get("method")
|
|
params = body.get("params", [])
|
|
request_id = body.get("id", 1)
|
|
|
|
if not method:
|
|
return web.json_response({
|
|
"jsonrpc": "2.0",
|
|
"id": request_id,
|
|
"error": {
|
|
"code": -32600,
|
|
"message": "Missing method"
|
|
}
|
|
}, status=400)
|
|
|
|
logger.info(f"Handling RPC request: {method}")
|
|
|
|
response = await router.route_request(method, params)
|
|
|
|
response["id"] = request_id
|
|
|
|
return web.json_response(response)
|
|
|
|
except json.JSONDecodeError:
|
|
return web.json_response({
|
|
"jsonrpc": "2.0",
|
|
"id": 1,
|
|
"error": {
|
|
"code": -32700,
|
|
"message": "Parse error"
|
|
}
|
|
}, status=400)
|
|
|
|
except Exception as e:
|
|
logger.error(f"Unexpected error: {e}")
|
|
return web.json_response({
|
|
"jsonrpc": "2.0",
|
|
"id": 1,
|
|
"error": {
|
|
"code": -32603,
|
|
"message": "Internal error"
|
|
}
|
|
}, status=500)
|
|
|
|
|
|
def setup_routes(app: web.Application) -> None:
|
|
app.router.add_post('/', handle_rpc_request)
|