# OpenRPC we use OpenRPC on the Registrar and other services. The OpenRPC is exposed over rest (and later over other protocols). - rpc_in - rpc_id (string) : a unique id for the rpc call - method_name - params (json as text, encrypted with the mycelium pubkey of the rpc server) - pubkey (string) : the pubkey of the caller mycelium agent - signature (rpc_id+method_name+params+return_url+returl_topic signed with Mycelium Agent Priv key of the sender) - async (bool) : if the call should be async, if async will send as message back over mycelium to source, if return url will use that one - return_url (string) : the url to return the result, optional to async return the result to sender (source) - return_topic (string): for the sender to know what the return is for - rpc_return (for async return) - rpc_id (string) : a unique id for the rpc call needs to correspond to the rpc_in and source caller - method_name - pubkey (string) : the pubkey of the rpc server - signature (the result is signed with Mycelium Agent of the server for: rpc_id+method_name+params+result) - topic (string) - result (json as text, encrypted with the mycelium pubkey of the source caller) - rpc_check returns the status of the rpc call which is done, error, running or pending - rpc_id - signature (of rpc_id from the caller) - rpc_kill stop the rpc if it is running and would e.g. take too long - rpc_id - signature (of rpc_id from the caller) Because of signatures on the caller can stop a call or check status if return_url is provided: - the server will process and if async send result back as json over mycelium to the source or over http to the return_url the rpc_return is called by an rpc_server to return results to the caller see [openrpc_openapi_spec](openrpc_openapi_spec.md) for the OpenRPC spec on top of Rest. ## Implementation Details - the state of the calls on server is kept in redis - timeouts need to be implemented on the server - the encryption & signing is used to provide security