Files
rippled/src/xrpld/app/main/NodeIdentity.cpp
2026-04-17 16:43:49 +00:00

59 lines
1.5 KiB
C++

#include <xrpld/app/main/NodeIdentity.h>
#include <xrpld/app/main/Application.h>
#include <xrpld/core/Config.h>
#include <xrpld/core/ConfigSections.h>
#include <xrpl/basics/contract.h>
#include <xrpl/protocol/KeyType.h>
#include <xrpl/protocol/SecretKey.h>
#include <xrpl/protocol/Seed.h>
#include <xrpl/server/Wallet.h>
#include <boost/program_options/variables_map.hpp>
#include <optional>
#include <stdexcept>
#include <string>
#include <utility>
namespace xrpl {
std::pair<PublicKey, SecretKey>
getNodeIdentity(Application& app, boost::program_options::variables_map const& cmdline)
{
std::optional<Seed> seed;
if (cmdline.contains("nodeid"))
{
seed = parseGenericSeed(cmdline["nodeid"].as<std::string>(), false);
if (!seed)
Throw<std::runtime_error>("Invalid 'nodeid' in command line");
}
else if (app.config().exists(SECTION_NODE_SEED))
{
seed = parseBase58<Seed>(app.config().section(SECTION_NODE_SEED).lines().front());
if (!seed)
Throw<std::runtime_error>("Invalid [" SECTION_NODE_SEED "] in configuration file");
}
if (seed)
{
auto secretKey = generateSecretKey(KeyType::secp256k1, *seed);
auto publicKey = derivePublicKey(KeyType::secp256k1, secretKey);
return {publicKey, secretKey};
}
auto db = app.getWalletDB().checkoutDb();
if (cmdline.contains("newnodeid"))
clearNodeIdentity(*db);
return getNodeIdentity(*db);
}
} // namespace xrpl