6 #if defined(HAVE_CONFIG_H)
7 #include <config/bitcoin-config.h>
50 int fork_daemon(
bool nochdir,
bool noclose,
TokenPipeEnd &endpoint) {
65 endpoint = umbilical->TakeReadEnd();
66 umbilical->TakeWriteEnd().
Close();
78 endpoint = umbilical->TakeWriteEnd();
79 umbilical->TakeReadEnd().
Close();
89 if (chdir(
"/") != 0) {
97 int fd = open(
"/dev/null", O_RDWR);
99 bool err = dup2(fd, STDIN_FILENO) < 0 ||
100 dup2(fd, STDOUT_FILENO) < 0 ||
101 dup2(fd, STDERR_FILENO) < 0;
136 std::any context{&
node};
156 std::string strUsage =
162 strUsage +=
"\nUsage: bitcoind [options] "
163 "Start " PACKAGE_NAME
"\n";
184 strprintf(
"Specified data directory \"%s\" does not exist.\n",
185 args.
GetArg(
"-datadir",
""))));
195 }
catch (
const std::exception &e) {
210 for (
int i = 1; i < argc; i++) {
213 strprintf(
"Command line contains unexpected token '%s', "
214 "see bitcoind -h for a list of options.\n",
248 tfm::format(std::cout, PACKAGE_NAME
" starting\n");
252 switch (fork_daemon(1, 0, daemon_ep)) {
265 "fork_daemon() failed: %s\n", strerror(errno))));
274 tfm::format(std::cerr,
"Error during initialization - "
275 "check debug.log for details\n");
282 "-daemon is not supported on this operating system\n"));
293 }
catch (
const std::exception &e) {
315 int main(
int argc,
char *argv[]) {
317 util::WinCmdLineArgs winArgs;
318 std::tie(argc, argv) = winArgs.get();
325 return (
AppInit(argc, argv) ? EXIT_SUCCESS : EXIT_FAILURE);
int main(int argc, char *argv[])
static bool AppInit(int argc, char *argv[])
const std::function< std::string(const char *)> G_TRANSLATION_FUN
Translate string to current locale using Qt.
void SelectParams(const std::string &network)
Sets the params returned by Params() to those for the given BIP70 chain name.
#define Assert(val)
Identity function.
bool InitSettings(std::string &error)
Read and update settings file with saved settings.
bool ParseParameters(int argc, const char *const argv[], std::string &error)
std::string GetHelpMessage() const
Get the help string.
bool IsArgSet(const std::string &strArg) const
Return true if the given argument has been manually set.
const fs::path & GetDataDirNet() const
Get data directory path with appended network identifier.
std::string GetArg(const std::string &strArg, const std::string &strDefault) const
Return string argument or default value.
bool SoftSetBoolArg(const std::string &strArg, bool fValue)
Set a boolean argument if it doesn't already have a value.
bool ReadConfigFiles(std::string &error, bool ignore_invalid_keys=false)
bool GetBoolArg(const std::string &strArg, bool fDefault) const
Return boolean argument or default value.
std::string GetChainName() const
Looks for -regtest, -testnet and returns the appropriate BIP70 chain name.
Class for registering and managing all RPC calls.
bool IsOpen()
Return whether endpoint is open.
int TokenWrite(uint8_t token)
Write token to endpoint.
void Close()
Explicit close function.
int TokenRead()
Read token from endpoint.
static std::optional< TokenPipe > Make()
Create a new pipe.
std::string FormatFullVersion()
const Config & GetConfig()
void Interrupt(NodeContext &node)
Interrupt threads.
void InitLogging(const ArgsManager &args)
Initialize global loggers.
bool AppInitLockDataDirectory()
Lock bitcoin data directory.
void SetupServerArgs(NodeContext &node)
Register all arguments with the ArgsManager.
void Shutdown(NodeContext &node)
bool AppInitMain(Config &config, RPCServer &rpcServer, HTTPRPCRequestProcessor &httpRPCRequestProcessor, NodeContext &node, interfaces::BlockAndHeaderTipInfo *tip_info)
Bitcoin main initialization.
bool AppInitBasicSetup(const ArgsManager &args)
Initialize bitcoin: Basic context setup.
bool AppInitSanityChecks()
Initialization sanity checks: ecc init, sanity checks, dir lock.
bool AppInitInterfaces(NodeContext &node)
Initialize node and wallet interface pointers.
void InitParameterInteraction(ArgsManager &args)
Parameter interaction: change current parameters depending on various rules.
std::string LicenseInfo()
Returns licensing information (for -version)
bool AppInitParameterInteraction(Config &config, const ArgsManager &args)
Initialization: parameter interaction.
static constexpr bool DEFAULT_DAEMON
Default value for -daemon option.
static constexpr bool DEFAULT_DAEMONWAIT
Default value for -daemonwait option.
void ThreadSetInternalName(std::string &&)
Set the internal (in-memory) name of the current thread only.
void noui_connect()
Connect all bitcoind signal handlers.
void WaitForShutdown()
Wait for StartShutdown to be called in any thread.
std::string FormatParagraph(const std::string &in, size_t width, size_t indent)
Format a paragraph of text to a fixed width, adding spaces for indentation to any added line.
NodeContext struct containing references to chain state and connection state.
bool HelpRequested(const ArgsManager &args)
bool CheckDataDirOption()
void PrintExceptionContinue(const std::exception *pex, const char *pszThread)
bool error(const char *fmt, const Args &...args)
bool IsSwitchChar(char c)
bilingual_str Untranslated(std::string original)
Mark a bilingual_str as untranslated.
bool InitError(const bilingual_str &str)
Show error message.