From 6b6e32607f14fe99c14636a214998ec5bbe8b194 Mon Sep 17 00:00:00 2001 From: "hinto.janai" Date: Wed, 25 Dec 2024 18:41:12 -0500 Subject: [PATCH] changes --- books/architecture/src/appendix/crates.md | 1 - books/architecture/src/rpc/handler/intro.md | 8 +++++- books/architecture/src/rpc/interface.md | 3 +-- books/architecture/src/rpc/intro.md | 27 ++++++++++++++++++++- rpc/interface/README.md | 2 +- 5 files changed, 35 insertions(+), 6 deletions(-) diff --git a/books/architecture/src/appendix/crates.md b/books/architecture/src/appendix/crates.md index 5124180..9f9935a 100644 --- a/books/architecture/src/appendix/crates.md +++ b/books/architecture/src/appendix/crates.md @@ -52,7 +52,6 @@ cargo doc --open --package cuprate-blockchain | [`cuprate-json-rpc`](https://doc.cuprate.org/cuprate_json_rpc) | [`rpc/json-rpc/`](https://github.com/Cuprate/cuprate/tree/main/rpc/json-rpc) | JSON-RPC 2.0 implementation | [`cuprate-rpc-types`](https://doc.cuprate.org/cuprate_rpc_types) | [`rpc/types/`](https://github.com/Cuprate/cuprate/tree/main/rpc/types) | Monero RPC types and traits | [`cuprate-rpc-interface`](https://doc.cuprate.org/cuprate_rpc_interface) | [`rpc/interface/`](https://github.com/Cuprate/cuprate/tree/main/rpc/interface) | RPC interface & routing -| [`cuprate-rpc-handler`](https://doc.cuprate.org/cuprate_rpc_handler) | [`rpc/handler/`](https://github.com/Cuprate/cuprate/tree/main/rpc/handler) | RPC inner handlers ## ZMQ | Crate | In-tree path | Purpose | diff --git a/books/architecture/src/rpc/handler/intro.md b/books/architecture/src/rpc/handler/intro.md index e664f5b..e420a5c 100644 --- a/books/architecture/src/rpc/handler/intro.md +++ b/books/architecture/src/rpc/handler/intro.md @@ -1,2 +1,8 @@ # The handler -> TODO: fill after `cuprate-rpc-handler` is created. \ No newline at end of file +The handlers (functions that map requests into responses) are / can be generic with `cuprate-rpc-interface`. + +The main handlers used by Cuprate is implemented in `cuprated` itself, it implements the standard RPC handlers modeled after `monerod`. + +- JSON-RPC handlers: +- Binary handlers: +- Other JSON handlers: \ No newline at end of file diff --git a/books/architecture/src/rpc/interface.md b/books/architecture/src/rpc/interface.md index 3557ffb..6992bdd 100644 --- a/books/architecture/src/rpc/interface.md +++ b/books/architecture/src/rpc/interface.md @@ -29,8 +29,7 @@ async fn json_rpc( ``` and you provide the function body. -The main handler crate is [`cuprate-rpc-handler`](https://doc.cuprate.org/cuprate_rpc_handler). -This crate implements the standard RPC behavior, i.e. it mostly mirrors `monerod`. +The main handler crate is `cuprated` itself, it implements the standard RPC behavior, i.e. it mostly mirrors `monerod`. Although, it's worth noting that other implementations are possible, such as an RPC handler that caches blocks, or an RPC handler that only accepts certain endpoints, or any combination. \ No newline at end of file diff --git a/books/architecture/src/rpc/intro.md b/books/architecture/src/rpc/intro.md index acfc604..dbdd68d 100644 --- a/books/architecture/src/rpc/intro.md +++ b/books/architecture/src/rpc/intro.md @@ -27,4 +27,29 @@ The main components that make up Cuprate's RPC are noted below, alongside the eq | [`cuprate-json-rpc`](https://doc.cuprate.org/cuprate_json_rpc) | [`jsonrpc_structs.h`](https://github.com/monero-project/monero/blob/caa62bc9ea1c5f2ffe3ffa440ad230e1de509bfd/contrib/epee/include/net/jsonrpc_structs.h), [`http_server_handlers_map2.h`](https://github.com/monero-project/monero/blob/caa62bc9ea1c5f2ffe3ffa440ad230e1de509bfd/contrib/epee/include/net/http_server_handlers_map2.h) | JSON-RPC 2.0 implementation | `monerod`'s JSON-RPC 2.0 handling is spread across a few files. The first defines some data structures, the second contains macros that (essentially) implement JSON-RPC 2.0. | [`cuprate-rpc-types`](https://doc.cuprate.org/cuprate_rpc_types) | [`core_rpc_server_commands_defs.h`](https://github.com/monero-project/monero/blob/caa62bc9ea1c5f2ffe3ffa440ad230e1de509bfd/src/rpc/core_rpc_server_commands_defs.h) | RPC request/response type definitions and (de)serialization | | | [`cuprate-rpc-interface`](https://doc.cuprate.org/cuprate_rpc_interface) | [`core_rpc_server.h`](https://github.com/monero-project/monero/blob/caa62bc9ea1c5f2ffe3ffa440ad230e1de509bfd/src/rpc/core_rpc_server.h) | RPC interface, routing, endpoints | | -| [`cuprate-rpc-handler`](https://doc.cuprate.org/cuprate_rpc_handler) | [`core_rpc_server.cpp`](https://github.com/monero-project/monero/blob/caa62bc9ea1c5f2ffe3ffa440ad230e1de509bfd/src/rpc/core_rpc_server.cpp) | RPC request/response handling | These are the "inner handler" functions that turn requests into responses | \ No newline at end of file + +`cuprated` utilizes these crates and contains the actual functions that handle the request -> response mappings. + +## Diagram +A diagram of the crate's responsibilities in `cuprated`'s RPC system. +``` + cuprate-rpc-types + + + cuprate-json-rpc + + + cuprate-rpc-interface + │ │ +┌───────────────────────────┤ ├───────────────────┐ +▼ ▼ ▼ ▼ +CLIENT ─► ROUTE ─► REQUEST ─► HANDLER ─► RESPONSE ─► CLIENT + ▲ ▲ + └───┬───┘ + │ + cuprated's handler functions +``` + +`cuprated` only contains the: +- handler functions (the functions that map requests into responses) +- glue code with the rest of Cuprate to make the above happen + +All the other details are handled in other crates. \ No newline at end of file diff --git a/rpc/interface/README.md b/rpc/interface/README.md index fa5496c..7e5deab 100644 --- a/rpc/interface/README.md +++ b/rpc/interface/README.md @@ -21,7 +21,7 @@ This is where your [`RpcHandler`] turns this `Request` into a `Response`. You hand this `Response` back to `cuprate-rpc-interface` and it will take care of sending it back to the client. -The main handler used by Cuprate is implemented in the `cuprate-rpc-handler` crate; +The main handler used by Cuprate is implemented in `cuprated` itself, it implements the standard RPC handlers modeled after `monerod`. # Purpose