The interface

This section is short as cuprate-rpc-interface contains detailed documentation.

The RPC interface, which includes:

  • Endpoint routing (/json_rpc, /get_blocks.bin, etc)
  • Route function signatures (async fn json_rpc(...) -> Response)
  • Type (de)serialization
  • Any miscellaneous handling (denying restricted RPC calls)

is handled by the cuprate-rpc-interface crate.

Essentially, this crate provides the API for the RPC.

cuprate-rpc-interface is built on-top of axum and tower, which are the crates doing the bulk majority of the work.

Request -> Response

The functions that map requests to responses are not implemented by cuprate-rpc-interface itself, they must be provided by the user, i.e. it can be customized.

In Rust terms, this crate provides you with:

#![allow(unused)]
fn main() {
async fn json_rpc(
	state: State,
	request: Request,
) -> Response {
	/* your handler here */
}
}

and you provide the function body.

The main handler crate is cuprate-rpc-handler. This crate 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.

Last change: 2024-11-18, commit: e8598a0