GET_SERVICE_KEYS

This commit is contained in:
Sean Darcy 2021-11-08 16:10:06 +11:00
parent a16a2d3949
commit 133e022aca
5 changed files with 29 additions and 47 deletions

View file

@ -469,12 +469,11 @@ bool rpc_command_executor::show_status() {
bool my_sn_registered = false, my_sn_staked = false, my_sn_active = false;
uint16_t my_reason_all = 0, my_reason_any = 0;
if (info["service_node"].get<bool>()) {
GET_SERVICE_KEYS::response res{};
if (!invoke<GET_SERVICE_KEYS>({}, res, "Failed to retrieve service node keys"))
auto maybe_service_keys = try_running([this] { return invoke<GET_SERVICE_KEYS>(json{}); }, "Failed to retrieve service node keys");
if (!maybe_service_keys)
return false;
my_sn_key = std::move(res.service_node_pubkey);
my_sn_key = (*maybe_service_keys)["service_node_pubkey"];
auto maybe_sns = try_running([&] { return invoke<GET_SERVICE_NODES>(json{{"service_node_pubkeys", json::array({my_sn_key})}}); }, "Failed to retrieve service node info");
if (maybe_sns) {
@ -1890,15 +1889,17 @@ bool rpc_command_executor::pop_blocks(uint64_t num_blocks)
bool rpc_command_executor::print_sn_key()
{
GET_SERVICE_KEYS::response res{};
if (!invoke<GET_SERVICE_KEYS>({}, res, "Failed to retrieve service node keys"))
auto maybe_service_keys = try_running([this] { return invoke<GET_SERVICE_KEYS>(json{}); }, "Failed to retrieve service node keys");
if (!maybe_service_keys)
return false;
auto my_sn_keys = *maybe_service_keys;
tools::success_msg_writer()
<< "Service Node Public Key: " << res.service_node_pubkey
<< "\n Ed25519 Public Key: " << res.service_node_ed25519_pubkey
<< "\n X25519 Public Key: " << res.service_node_x25519_pubkey;
<< "Service Node Public Key: " << my_sn_keys["service_node_pubkey"]
<< "\n Ed25519 Public Key: " << my_sn_keys["service_node_ed25519_pubkey"]
<< "\n X25519 Public Key: " << my_sn_keys["service_node_x25519_pubkey"];
return true;
}
@ -1944,10 +1945,6 @@ bool rpc_command_executor::prepare_registration(bool force_registration)
return false;
auto& hfinfo = *maybe_hf;
GET_SERVICE_KEYS::response kres{};
if (!invoke<GET_SERVICE_KEYS>({}, kres, "Failed to retrieve service node keys"))
return false;
if (!info.value("service_node", false))
{
tools::fail_msg_writer() << "Unable to prepare registration: this daemon is not running in --service-node mode";

View file

@ -2733,19 +2733,16 @@ namespace cryptonote::rpc {
return res;
}
//------------------------------------------------------------------------------------------------------------------------------
GET_SERVICE_KEYS::response core_rpc_server::invoke(GET_SERVICE_KEYS::request&& req, rpc_context context)
void core_rpc_server::invoke(GET_SERVICE_KEYS& get_service_keys, rpc_context context)
{
GET_SERVICE_KEYS::response res{};
PERF_TIMER(on_get_service_node_key);
const auto& keys = m_core.get_service_keys();
if (keys.pub)
res.service_node_pubkey = tools::type_to_hex(keys.pub);
res.service_node_ed25519_pubkey = tools::type_to_hex(keys.pub_ed25519);
res.service_node_x25519_pubkey = tools::type_to_hex(keys.pub_x25519);
res.status = STATUS_OK;
return res;
get_service_keys.response["service_node_pubkey"] = tools::type_to_hex(keys.pub);
get_service_keys.response["service_node_ed25519_pubkey"] = tools::type_to_hex(keys.pub_ed25519);
get_service_keys.response["service_node_x25519_pubkey"] = tools::type_to_hex(keys.pub_x25519);
get_service_keys.response["status"] = STATUS_OK;
return;
}
//------------------------------------------------------------------------------------------------------------------------------
GET_SERVICE_PRIVKEYS::response core_rpc_server::invoke(GET_SERVICE_PRIVKEYS::request&& req, rpc_context context)

View file

@ -250,6 +250,7 @@ namespace cryptonote::rpc {
void invoke(SETBANS& set_bans, rpc_context context);
void invoke(GET_CHECKPOINTS& get_checkpoints, rpc_context context);
void invoke(GET_STAKING_REQUIREMENT& get_staking_requirement, rpc_context context);
void invoke(GET_SERVICE_KEYS& get_service_keys, rpc_context context);
// Deprecated Monero NIH binary endpoints:
GET_ALT_BLOCKS_HASHES_BIN::response invoke(GET_ALT_BLOCKS_HASHES_BIN::request&& req, rpc_context context);
@ -275,7 +276,6 @@ namespace cryptonote::rpc {
GET_SERVICE_NODE_REGISTRATION_CMD_RAW::response invoke(GET_SERVICE_NODE_REGISTRATION_CMD_RAW::request&& req, rpc_context context);
GET_SERVICE_NODE_REGISTRATION_CMD::response invoke(GET_SERVICE_NODE_REGISTRATION_CMD::request&& req, rpc_context context);
GET_SERVICE_NODE_BLACKLISTED_KEY_IMAGES::response invoke(GET_SERVICE_NODE_BLACKLISTED_KEY_IMAGES::request&& req, rpc_context context);
GET_SERVICE_KEYS::response invoke(GET_SERVICE_KEYS::request&& req, rpc_context context);
GET_SERVICE_PRIVKEYS::response invoke(GET_SERVICE_PRIVKEYS::request&& req, rpc_context context);
ONS_NAMES_TO_OWNERS::response invoke(ONS_NAMES_TO_OWNERS::request&& req, rpc_context context);
ONS_OWNERS_TO_NAMES::response invoke(ONS_OWNERS_TO_NAMES::request&& req, rpc_context context);

View file

@ -331,14 +331,6 @@ KV_SERIALIZE_MAP_CODE_BEGIN(GET_SERVICE_NODE_REGISTRATION_CMD::request)
KV_SERIALIZE_MAP_CODE_END()
KV_SERIALIZE_MAP_CODE_BEGIN(GET_SERVICE_KEYS::response)
KV_SERIALIZE(service_node_pubkey)
KV_SERIALIZE(service_node_ed25519_pubkey)
KV_SERIALIZE(service_node_x25519_pubkey)
KV_SERIALIZE(status)
KV_SERIALIZE_MAP_CODE_END()
KV_SERIALIZE_MAP_CODE_BEGIN(GET_SERVICE_PRIVKEYS::response)
KV_SERIALIZE(service_node_privkey)
KV_SERIALIZE(service_node_ed25519_privkey)

View file

@ -1710,25 +1710,21 @@ namespace cryptonote::rpc {
using response = GET_SERVICE_NODE_REGISTRATION_CMD_RAW::response;
};
OXEN_RPC_DOC_INTROSPECT
// Get the service public keys of the queried daemon, encoded in hex. All three keys are used
// when running as a service node; when running as a regular node only the x25519 key is regularly
// used for some RPC and and node-to-SN communication requests.
/// Get the service public keys of the queried daemon, encoded in hex. All three keys are used
/// when running as a service node; when running as a regular node only the x25519 key is regularly
/// used for some RPC and and node-to-SN communication requests.
///
/// Inputs: None
///
/// Output values available from a restricted/admin RPC endpoint:
///
/// - \p status General RPC status string. `"OK"` means everything looks good.
/// - \p service_node_pubkey The queried daemon's service node public key. Will be empty if not running as a service node.
/// - \p service_node_ed25519_pubkey The daemon's ed25519 auxiliary public key.
/// - \p service_node_x25519_pubkey The daemon's x25519 auxiliary public key.
struct GET_SERVICE_KEYS : RPC_COMMAND
{
static constexpr auto names() { return NAMES("get_service_keys", "get_service_node_key"); }
struct request : EMPTY {};
struct response
{
std::string service_node_pubkey; // The queried daemon's service node public key. Will be empty if not running as a service node.
std::string service_node_ed25519_pubkey; // The daemon's ed25519 auxiliary public key.
std::string service_node_x25519_pubkey; // The daemon's x25519 auxiliary public key.
std::string status; // Generic RPC error code. "OK" is the success value.
KV_MAP_SERIALIZABLE
};
};
OXEN_RPC_DOC_INTROSPECT