mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-07-07 00:40:34 +02:00
kernel: SanityChecks: Return an error struct
This reduces libbitcoinkernel's coupling with ui_interface and translation.
This commit is contained in:
@ -56,7 +56,7 @@ int main(int argc, char* argv[])
|
|||||||
// We can't use a goto here, but we can use an assert since none of the
|
// We can't use a goto here, but we can use an assert since none of the
|
||||||
// things instantiated so far requires running the epilogue to be torn down
|
// things instantiated so far requires running the epilogue to be torn down
|
||||||
// properly
|
// properly
|
||||||
assert(kernel::SanityChecks(kernel_context));
|
assert(!kernel::SanityChecks(kernel_context).has_value());
|
||||||
|
|
||||||
// Necessary for CheckInputScripts (eventually called by ProcessNewBlock),
|
// Necessary for CheckInputScripts (eventually called by ProcessNewBlock),
|
||||||
// which will try the script cache first and fall back to actually
|
// which will try the script cache first and fall back to actually
|
||||||
|
16
src/init.cpp
16
src/init.cpp
@ -1094,7 +1094,21 @@ static bool LockDataDirectory(bool probeOnly)
|
|||||||
bool AppInitSanityChecks(const kernel::Context& kernel)
|
bool AppInitSanityChecks(const kernel::Context& kernel)
|
||||||
{
|
{
|
||||||
// ********************************************************* Step 4: sanity checks
|
// ********************************************************* Step 4: sanity checks
|
||||||
if (!kernel::SanityChecks(kernel)) {
|
auto maybe_error = kernel::SanityChecks(kernel);
|
||||||
|
|
||||||
|
if (maybe_error.has_value()) {
|
||||||
|
switch (maybe_error.value()) {
|
||||||
|
case kernel::SanityCheckError::ERROR_ECC:
|
||||||
|
InitError(Untranslated("Elliptic curve cryptography sanity check failure. Aborting."));
|
||||||
|
break;
|
||||||
|
case kernel::SanityCheckError::ERROR_RANDOM:
|
||||||
|
InitError(Untranslated("OS cryptographic RNG sanity check failure. Aborting."));
|
||||||
|
break;
|
||||||
|
case kernel::SanityCheckError::ERROR_CHRONO:
|
||||||
|
InitError(Untranslated("Clock epoch mismatch. Aborting."));
|
||||||
|
break;
|
||||||
|
} // no default case, so the compiler can warn about missing cases
|
||||||
|
|
||||||
return InitError(strprintf(_("Initialization sanity check failed. %s is shutting down."), PACKAGE_NAME));
|
return InitError(strprintf(_("Initialization sanity check failed. %s is shutting down."), PACKAGE_NAME));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,29 +5,26 @@
|
|||||||
#include <kernel/checks.h>
|
#include <kernel/checks.h>
|
||||||
|
|
||||||
#include <key.h>
|
#include <key.h>
|
||||||
#include <node/ui_interface.h>
|
|
||||||
#include <random.h>
|
#include <random.h>
|
||||||
#include <util/time.h>
|
#include <util/time.h>
|
||||||
#include <util/translation.h>
|
|
||||||
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
namespace kernel {
|
namespace kernel {
|
||||||
|
|
||||||
bool SanityChecks(const Context&) {
|
std::optional<SanityCheckError> SanityChecks(const Context&)
|
||||||
|
{
|
||||||
if (!ECC_InitSanityCheck()) {
|
if (!ECC_InitSanityCheck()) {
|
||||||
return InitError(Untranslated("Elliptic curve cryptography sanity check failure. Aborting."));
|
return SanityCheckError::ERROR_ECC;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Random_SanityCheck()) {
|
if (!Random_SanityCheck()) {
|
||||||
return InitError(Untranslated("OS cryptographic RNG sanity check failure. Aborting."));
|
return SanityCheckError::ERROR_RANDOM;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ChronoSanityCheck()) {
|
if (!ChronoSanityCheck()) {
|
||||||
return InitError(Untranslated("Clock epoch mismatch. Aborting."));
|
return SanityCheckError::ERROR_CHRONO;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,14 +5,22 @@
|
|||||||
#ifndef BITCOIN_KERNEL_CHECKS_H
|
#ifndef BITCOIN_KERNEL_CHECKS_H
|
||||||
#define BITCOIN_KERNEL_CHECKS_H
|
#define BITCOIN_KERNEL_CHECKS_H
|
||||||
|
|
||||||
|
#include <optional>
|
||||||
|
|
||||||
namespace kernel {
|
namespace kernel {
|
||||||
|
|
||||||
struct Context;
|
struct Context;
|
||||||
|
|
||||||
|
enum class SanityCheckError {
|
||||||
|
ERROR_ECC,
|
||||||
|
ERROR_RANDOM,
|
||||||
|
ERROR_CHRONO,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ensure a usable environment with all necessary library support.
|
* Ensure a usable environment with all necessary library support.
|
||||||
*/
|
*/
|
||||||
bool SanityChecks(const Context&);
|
std::optional<SanityCheckError> SanityChecks(const Context&);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user