diff --git a/builds/msvc/vs2026/bs/bs.vcxproj b/builds/msvc/vs2026/bs/bs.vcxproj index 7e6b43bd..1f66a398 100644 --- a/builds/msvc/vs2026/bs/bs.vcxproj +++ b/builds/msvc/vs2026/bs/bs.vcxproj @@ -169,7 +169,7 @@ - + @@ -184,7 +184,7 @@ - + diff --git a/builds/msvc/vs2026/bs/packages.config b/builds/msvc/vs2026/bs/packages.config index 93181607..3ae7302c 100644 --- a/builds/msvc/vs2026/bs/packages.config +++ b/builds/msvc/vs2026/bs/packages.config @@ -6,7 +6,7 @@ | --> - + diff --git a/builds/msvc/vs2026/libbitcoin-server-test/libbitcoin-server-test.vcxproj b/builds/msvc/vs2026/libbitcoin-server-test/libbitcoin-server-test.vcxproj index 0b4ad635..010a810a 100644 --- a/builds/msvc/vs2026/libbitcoin-server-test/libbitcoin-server-test.vcxproj +++ b/builds/msvc/vs2026/libbitcoin-server-test/libbitcoin-server-test.vcxproj @@ -195,7 +195,7 @@ - + @@ -211,7 +211,7 @@ - + diff --git a/builds/msvc/vs2026/libbitcoin-server-test/packages.config b/builds/msvc/vs2026/libbitcoin-server-test/packages.config index 041b1e05..0aa1e304 100644 --- a/builds/msvc/vs2026/libbitcoin-server-test/packages.config +++ b/builds/msvc/vs2026/libbitcoin-server-test/packages.config @@ -6,7 +6,7 @@ | --> - + diff --git a/builds/msvc/vs2026/libbitcoin-server/libbitcoin-server.vcxproj b/builds/msvc/vs2026/libbitcoin-server/libbitcoin-server.vcxproj index 8949209e..c1d26b50 100644 --- a/builds/msvc/vs2026/libbitcoin-server/libbitcoin-server.vcxproj +++ b/builds/msvc/vs2026/libbitcoin-server/libbitcoin-server.vcxproj @@ -271,7 +271,7 @@ - + @@ -286,7 +286,7 @@ - + diff --git a/builds/msvc/vs2026/libbitcoin-server/packages.config b/builds/msvc/vs2026/libbitcoin-server/packages.config index 93181607..3ae7302c 100644 --- a/builds/msvc/vs2026/libbitcoin-server/packages.config +++ b/builds/msvc/vs2026/libbitcoin-server/packages.config @@ -6,7 +6,7 @@ | --> - + diff --git a/console/executor.cpp b/console/executor.cpp index 8905b4a6..ddf39bcc 100644 --- a/console/executor.cpp +++ b/console/executor.cpp @@ -45,9 +45,16 @@ executor& executor::factory(parser& metadata, std::istream& input, std::ostream& output, std::ostream& error) { // TODO: expose fork_flags() mapping from system static chain_state method. - ////metadata.configured.database.fork_flags = + ////metadata.configured.database.fork_flags = //// metadata.configured.bitcoin.fork_flags(); + // Suppress configured batch cache sizing when batching cannot run. + if (!system::batched::accelerated()) + { + metadata.configured.database.ecdsa.size = 0; + metadata.configured.database.schnorr.size = 0; + } + static executor instance(metadata, input, output, error); return instance; } diff --git a/console/executor.hpp b/console/executor.hpp index fbf141fa..22844c30 100644 --- a/console/executor.hpp +++ b/console/executor.hpp @@ -84,7 +84,7 @@ class executor bool restore_store(bool details=false); bool hot_backup_store(bool details=false); bool cold_backup_store(bool details=false); - bool prompt_milestone() const; + bool prompt_milestone_store() const; // Long-running queries (scans). void scan_flags() const; diff --git a/console/executor_runner.cpp b/console/executor_runner.cpp index 91377b24..c24ee9c5 100644 --- a/console/executor_runner.cpp +++ b/console/executor_runner.cpp @@ -138,14 +138,15 @@ bool executor::do_run() return false; } } - else if (!prompt_milestone()) + else if (!check_store_path(true) || !create_store(true)) { - logger(BS_MILESTONE_HALTED); stopper(BS_NODE_STOPPED); return false; } - else if (!check_store_path(true) || !create_store(true)) + + if (!prompt_milestone_store()) { + close_store(); stopper(BS_NODE_STOPPED); return false; } @@ -192,15 +193,12 @@ bool executor::do_run() ////logger(BS_INFORMATION_PROGRESS_START); ////dump_progress(); - if (!close_store(true)) - { - stopper(BS_NODE_STOPPED); - return false; - } + // Store close logs its own results. + const auto result = close_store(true); // Stop console capture and issue terminating log message. stopper(BS_NODE_STOPPED); - return true; + return result; } } // namespace server diff --git a/console/executor_store.cpp b/console/executor_store.cpp index ca934c8a..d4156452 100644 --- a/console/executor_store.cpp +++ b/console/executor_store.cpp @@ -62,40 +62,6 @@ bool executor::check_store_path(bool create) const return true; } -bool executor::prompt_milestone() const -{ - const auto& milestone = metadata_.configured.bitcoin.milestone; - if (metadata_.is_configured(settings::milestone)) - { - logger(format(BS_MILESTONE_CONFIGURED) % milestone); - return true; - } - - if (service_ || is_zero(milestone.height())) - return true; - - logger(format(BS_MILESTONE_PROMPT) % milestone); - logger(BS_MILESTONE_CHOICE); - - for (std::string line{}; std::getline(input_, line);) - { - if (canceled()) - return false; - - system::trim(line); - if (line.empty()) - return true; - - if (line == "c") - return false; - - logger(BS_MILESTONE_CHOICE); - } - - // Halt on invalidation, continue when console is unavailable. - return !canceled(); -} - bool executor::create_store(bool details) { logger(BS_INITCHAIN_CREATING); @@ -296,5 +262,48 @@ bool executor::cold_backup_store(bool details) return true; } +bool executor::prompt_milestone_store() const +{ + const auto& milestone = metadata_.configured.bitcoin.milestone; + if (metadata_.is_configured(settings::milestone)) + { + logger(format(BS_BITCOIN_MILESTONE) % milestone); + return true; + } + + const auto genesis_default = is_zero(milestone.height()); + if (genesis_default || service_ || store_.is_dirty()) + return true; + + logger(BS_MILESTONE_SETOFF); + logger(format(BS_MILESTONE_PROMPT1)); + logger(format(BS_MILESTONE_PROMPT2)); + logger(format(BS_MILESTONE_PROMPT3)); + logger(format(BS_BITCOIN_MILESTONE) % milestone); + logger(BS_MILESTONE_CHOICE1); + logger(BS_MILESTONE_CHOICE2); + logger(BS_MILESTONE_SETOFF); + + std::string line{}; + while (std::getline(input_, line) && !canceled()) + { + system::trim(line); + if (line.empty()) + return true; + + if (line == "c") + { + logger(BS_MILESTONE_HALTED1); + logger(BS_MILESTONE_HALTED2); + return false; + } + + logger(BS_MILESTONE_CHOICE1); + logger(BS_MILESTONE_CHOICE2); + } + + return false; +} + } // namespace server } // namespace libbitcoin diff --git a/console/localize.hpp b/console/localize.hpp index 7bb8f100..df590037 100644 --- a/console/localize.hpp +++ b/console/localize.hpp @@ -36,6 +36,26 @@ #define BS_OPERATION_CANCELED \ "CTRL-C detected, canceling operation..." +// bitcoin.milestone +#define BS_MILESTONE_SETOFF \ + "--------------------------------------------------------------------------" +#define BS_MILESTONE_PROMPT1 \ + "If you have previously validated you may want to utilize a milestone." +#define BS_MILESTONE_PROMPT2 \ + "A milestone bypasses full validation of all previous blocks and itself." +#define BS_MILESTONE_PROMPT3 \ + "The default milestone in this build is the following block hash:height" +#define BS_BITCOIN_MILESTONE \ + "bitcoin.milestone = %1%" +#define BS_MILESTONE_CHOICE1 \ + "Press to continue with this default as a block you have validated." +#define BS_MILESTONE_CHOICE2 \ + "Enter 'c' to stop so you can set a different milestone in configuration." +#define BS_MILESTONE_HALTED1 \ + "Set a previously-validated milestone in your configuration file." +#define BS_MILESTONE_HALTED2 \ + "Set to genesis-hash:0 if you have not validated previously." + // --settings #define BS_SETTINGS_MESSAGE \ "These are the configuration settings that can be set." @@ -59,16 +79,6 @@ "Storing genesis block." #define BS_INITCHAIN_DATABASE_INITIALIZE_FAILURE \ "Failure storing genesis block." -#define BS_MILESTONE_CONFIGURED \ - "The configured milestone %1% will bypass validation up to that block." -#define BS_MILESTONE_PROMPT \ - "This is a new store, the default milestone %1% will bypass " \ - "validation up to that block." -#define BS_MILESTONE_CHOICE \ - "Press to continue with the default milestone, or 'c' to close." -#define BS_MILESTONE_HALTED \ - "Startup halted, set or clear bitcoin.milestone in the configuration " \ - "and restart." // --restore #define BS_SNAPSHOT_INVALID \