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 \