diff --git a/CMakeLists.txt b/CMakeLists.txt index 55e4117434..79b72299f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,7 +29,7 @@ get_directory_property(precious_variables CACHE_VARIABLES) set(CLIENT_NAME "qbit") set(CLIENT_VERSION_MAJOR 1) set(CLIENT_VERSION_MINOR 0) -set(CLIENT_VERSION_BUILD 0) +set(CLIENT_VERSION_BUILD 1) set(CLIENT_VERSION_PHASE "") set(CLIENT_VERSION_RC 0) set(CLIENT_VERSION_IS_RELEASE "true") diff --git a/doc/man/qbit-cli.1 b/doc/man/qbit-cli.1 index 83184062bc..9fd3fff393 100644 --- a/doc/man/qbit-cli.1 +++ b/doc/man/qbit-cli.1 @@ -1,7 +1,7 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. -.TH QBIT-CLI "1" "July 2026" "qbit-cli v1.0.0" "User Commands" +.TH QBIT-CLI "1" "October 2026" "qbit-cli v1.0.1" "User Commands" .SH NAME -qbit-cli \- manual page for qbit-cli v1.0.0 +qbit-cli \- manual page for qbit-cli v1.0.1 .SH SYNOPSIS .B qbit-cli [\fI\,options\/\fR] \fI\, \/\fR[\fI\,params\/\fR] @@ -15,7 +15,7 @@ qbit-cli \- manual page for qbit-cli v1.0.0 .B qbit-cli [\fI\,options\/\fR] \fI\,help \/\fR .SH DESCRIPTION -qbit RPC client version v1.0.0 +qbit RPC client version v1.0.1 .PP The qbit\-cli utility provides a command line interface to interact with a qbit RPC server. .PP diff --git a/doc/man/qbit-qt.1 b/doc/man/qbit-qt.1 index b2e931f14a..49731ac5f7 100644 --- a/doc/man/qbit-qt.1 +++ b/doc/man/qbit-qt.1 @@ -1,12 +1,12 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. -.TH QBIT-QT "1" "July 2026" "qbit-qt v1.0.0" "User Commands" +.TH QBIT-QT "1" "October 2026" "qbit-qt v1.0.1" "User Commands" .SH NAME -qbit-qt \- manual page for qbit-qt v1.0.0 +qbit-qt \- manual page for qbit-qt v1.0.1 .SH SYNOPSIS .B qbit-qt [\fI\,options\/\fR] [\fI\,URI\/\fR] .SH DESCRIPTION -qbit version v1.0.0 +qbit version v1.0.1 .PP The qbit\-qt application provides a graphical interface for interacting with qbit. .PP diff --git a/doc/man/qbit-tx.1 b/doc/man/qbit-tx.1 index 335afaebbc..df9e3ff26a 100644 --- a/doc/man/qbit-tx.1 +++ b/doc/man/qbit-tx.1 @@ -1,7 +1,7 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. -.TH QBIT-TX "1" "July 2026" "qbit-tx v1.0.0" "User Commands" +.TH QBIT-TX "1" "October 2026" "qbit-tx v1.0.1" "User Commands" .SH NAME -qbit-tx \- manual page for qbit-tx v1.0.0 +qbit-tx \- manual page for qbit-tx v1.0.1 .SH SYNOPSIS .B qbit-tx [\fI\,options\/\fR] \fI\, \/\fR[\fI\,commands\/\fR] @@ -9,7 +9,7 @@ qbit-tx \- manual page for qbit-tx v1.0.0 .B qbit-tx [\fI\,options\/\fR] \fI\,-create \/\fR[\fI\,commands\/\fR] .SH DESCRIPTION -qbit qbit\-tx utility version v1.0.0 +qbit qbit\-tx utility version v1.0.1 .PP The qbit\-tx tool is used for creating and modifying qbit transactions. .PP diff --git a/doc/man/qbit-util.1 b/doc/man/qbit-util.1 index a607006abe..4ac51f18a8 100644 --- a/doc/man/qbit-util.1 +++ b/doc/man/qbit-util.1 @@ -1,7 +1,7 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. -.TH QBIT-UTIL "1" "July 2026" "qbit-util v1.0.0" "User Commands" +.TH QBIT-UTIL "1" "October 2026" "qbit-util v1.0.1" "User Commands" .SH NAME -qbit-util \- manual page for qbit-util v1.0.0 +qbit-util \- manual page for qbit-util v1.0.1 .SH SYNOPSIS .B qbit-util [\fI\,options\/\fR] [\fI\,command\/\fR] @@ -9,7 +9,7 @@ qbit-util \- manual page for qbit-util v1.0.0 .B qbit-util [\fI\,options\/\fR] \fI\,grind \/\fR .SH DESCRIPTION -qbit qbit\-util utility version v1.0.0 +qbit qbit\-util utility version v1.0.1 .PP The qbit\-util tool provides qbit related functionality that does not rely on the ability to access a running node. Available [commands] are listed below. .SH OPTIONS diff --git a/doc/man/qbit-wallet.1 b/doc/man/qbit-wallet.1 index 1098594b95..f597059743 100644 --- a/doc/man/qbit-wallet.1 +++ b/doc/man/qbit-wallet.1 @@ -1,12 +1,12 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. -.TH QBIT-WALLET "1" "July 2026" "qbit-wallet v1.0.0" "User Commands" +.TH QBIT-WALLET "1" "October 2026" "qbit-wallet v1.0.1" "User Commands" .SH NAME -qbit-wallet \- manual page for qbit-wallet v1.0.0 +qbit-wallet \- manual page for qbit-wallet v1.0.1 .SH SYNOPSIS .B qbit-wallet [\fI\,options\/\fR] \fI\,\/\fR .SH DESCRIPTION -qbit qbit\-wallet utility version v1.0.0 +qbit qbit\-wallet utility version v1.0.1 .PP qbit\-wallet is an offline tool for creating and interacting with qbit wallet files. .PP diff --git a/doc/man/qbit.1 b/doc/man/qbit.1 index 7442d9a39f..eb40ade83b 100644 --- a/doc/man/qbit.1 +++ b/doc/man/qbit.1 @@ -1,7 +1,7 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. -.TH QBIT "1" "July 2026" "qbit v1.0.0" "User Commands" +.TH QBIT "1" "October 2026" "qbit v1.0.1" "User Commands" .SH NAME -qbit \- manual page for qbit v1.0.0 +qbit \- manual page for qbit v1.0.1 .SH SYNOPSIS .B qbit [\fI\,OPTIONS\/\fR] \fI\,COMMAND\/\fR... diff --git a/doc/man/qbitd.1 b/doc/man/qbitd.1 index a0f9ad37b7..07a5db3016 100644 --- a/doc/man/qbitd.1 +++ b/doc/man/qbitd.1 @@ -1,12 +1,12 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. -.TH QBITD "1" "July 2026" "qbitd v1.0.0" "User Commands" +.TH QBITD "1" "October 2026" "qbitd v1.0.1" "User Commands" .SH NAME -qbitd \- manual page for qbitd v1.0.0 +qbitd \- manual page for qbitd v1.0.1 .SH SYNOPSIS .B qbitd [\fI\,options\/\fR] .SH DESCRIPTION -qbit daemon version v1.0.0 qbitd +qbit daemon version v1.0.1 qbitd .PP The qbit daemon (qbitd) is a headless program that connects to the qbit network to validate and relay transactions and blocks, as well as relaying addresses. .PP diff --git a/doc/release-notes-1.0.1.md b/doc/release-notes-1.0.1.md new file mode 100644 index 0000000000..cc447eb9bb --- /dev/null +++ b/doc/release-notes-1.0.1.md @@ -0,0 +1,317 @@ +Qbit v1.0.1 Release Notes +========================= + +Qbit: Post-quantum peer to peer digital value + +Qbit version v1.0.1 is available from the release page for that version. + +This is a mainnet maintenance release built from the reviewed `1.x.x` branch +changes since the signed `v1.0.0` tag. It focuses on wallet and qbit-qt +reliability, the wallet fallback-fee default, visibility of consumed PQC +signing capacity, validation and fuzz tooling, and release and CI hardening. +It contains no consensus rule change, no scheduled network activation, no +change to the mainnet or testnet4 network identity, and no wallet database +format change. + +Please report bugs using the Qbit issue tracker. + +How to Upgrade +============== + +Shut down the older qbit process and wait until it exits completely before +installing v1.0.1. Then install the new binaries from the GitHub Release page. + +Existing v1.0.0 mainnet and testnet4 data directories, wallets, and wallet +backups continue to work without a reindex, chain reset, or wallet migration. + +On Linux, replace the existing `qbitd`, `qbit-cli`, `qbit-tx`, `qbit-util`, +and `qbit-wallet` binaries with the new versions. + +On macOS, replace the installed Qbit application bundle or unpack the updated +archive into the desired location. + +On Windows, run the installer if one is provided for the release, or replace +the unpacked binaries with the new release artifacts. + +Behavior changes to review before upgrading +------------------------------------------- + +- The wallet `-fallbackfee` default changed from disabled to the minimum relay + fee rate. Operators who relied on transaction creation failing when no fee + estimate is available must set `-fallbackfee=0` explicitly (#151). +- `gettransaction`, `listtransactions`, and default `listsinceblock` output + now include a fee-only `send` entry, with `amount` of zero and a negative + `fee` and without `address`, `label`, or `vout`, for a self-transfer whose + outputs are all change. Integrations that assume every `send` entry has an + address or a non-zero amount should be checked (#150). +- An `encryptwallet` call that overlaps another encryption of the same wallet + now fails deterministically with error code `-15` + (`RPC_WALLET_WRONG_ENC_STATE`), the code a call on an already encrypted + wallet already returned. Previously it could fail with `-16` "Failed to + encrypt". Other `encryptwallet` failures still return `-16` (#183). + +Compatibility +============= + +qbit is not wire-, consensus-, address-, wallet-, or data-directory-compatible +with Bitcoin Core. Bitcoin addresses and Bitcoin payment URIs are not valid +qbit payment destinations. + +Mainnet remains the default chain for a standard build. The mainnet network +identity is unchanged from v1.0.0: + +| Item | Value | +|---|---| +| Chain option | default, or `-chain=main` | +| Default P2P port | `8355` | +| Default RPC/REST port | `8352` | +| Address HRP | `qb` | +| AuxPoW chain ID | `47` | +| Genesis block | `0000000000004d60aa5d46013991d0a0e2995d89ee98e53068ae196d763e79f2` | + +Public testnet4 remains available with: + +```bash +qbitd -testnet4 +qbit-cli -testnet4 getblockchaininfo +``` + +Mainnet-capable binaries are the build default. A binary that rejects mainnet +must be built with `-DQBIT_TESTNET_ONLY_RELEASE=ON`; the distribution archive +name does not enable that restriction. + +Supported and tested platforms for this release are the artifacts attached to +the GitHub Release page. The release page is the source of truth for available +platform builds, checksums, signatures, and attestations. + +Changes since v1.0.0 +==================== + +This release contains all changes merged to `1.x.x` after the signed `v1.0.0` +tag. Pull request numbers refer to the Qbit-Org/qbit repository. + +### Wallet fixes + +- Removed a wallet/SQLite lock cycle that could freeze qbit-qt immediately + after a correct passphrase was entered. Address-availability changes are now + published only after descriptor locks and database transactions are + released, unlock returns promptly, and a pending initial P2MR keypool refill + is completed through deduplicated scheduler steps (#143, fixes #138). +- Descriptor top-ups now stage newly derived scripts and publish wallet + ownership and cache updates only after the backing database transaction + commits. A top-up inside a caller-owned transaction publishes once on + commit, and an abort restores descriptor, keypool, cache, and PQC state + (#144, fixes #139). Top-up publication was further made commit-atomic and + lifetime-safe, and reservation notifications are delivered after the + descriptor lock is released (#143, #144). +- Fee-bearing self-transfers whose outputs are all classified as change now + appear once in wallet history. The GUI shows a "Payment to self" row with + the net fee debit, and the transaction RPCs return a fee-only `send` entry. + `listsinceblock` with `include_change=true` still returns the output-level + entries. Balances and UTXO accounting are unchanged (#150, fixes #147). +- A transaction that spends from more than one P2MR descriptor now batches + counter reservations per descriptor instead of falling back to one durable + counter commit per signature for the first descriptor. Strictly foreign + inputs are skipped rather than failing the plan, a provider never reports a + transaction complete while a foreign input is still unsigned, and declining + a signing prompt cancels the whole wallet signing operation. Counters an + earlier descriptor already committed stay consumed; retrying the same + transaction reuses its witnesses (#163, refs #155). +- Fee bumping now re-reads live coins and mempool spenders from one snapshot + before committing a replacement. A replacement whose input is already spent + by a mempool transaction outside its own replacement lineage, or that is no + longer final at the current chain tip after a reorg during asynchronous + signing, is rejected instead of being recorded and then failing to + broadcast (#163). +- Foreign P2MR witnesses that are already satisfied, including valid + nonstandard leaves, are recognized as complete instead of incomplete + during batched signing (#163). +- qbit-qt cancels active send workers before wallet views are torn down and + joins already-cancelled workers during destruction (#137). +- Wallet encryption now checks that the wallet is not already encrypted, and + validates its PQC state, under the wallet locks, so two overlapping + encryption requests can no longer both proceed and abort the process. A new + master key is kept in memory only after it has been written inside a + database transaction, and a failed write aborts that transaction. Readers of + the active descriptor managers now hold the wallet lock. If another request + encrypts the wallet first, qbit-qt's Encrypt Wallet dialog reports that the + wallet was already encrypted and the entered passphrase was not used. There + is no wallet format or encryption semantics change (#183, fixes #179). + +### Fallback fee + +- The wallet `-fallbackfee` now defaults to the minimum relay fee rate + (250 sat/kvB, that is 0.0000025 QBT/kvB) instead of being disabled. + Previously, when the fee estimator had no data, which is the normal state on + a young chain with an empty mempool, transaction creation failed with + "Fee estimation failed. Fallbackfee is disabled." Wallets now pay the relay + floor in that case. The fallback is used only when no smart fee estimate is + available; live estimates take precedence as soon as the estimator has + observed confirming transactions, and the final feerate is still clamped to + at least the node's required and mempool minimum feerates, so the fallback + cannot underpay relay policy. Set `-fallbackfee=0` to restore the previous + behavior of failing instead (#151). + +### Signing-usage visibility and qbit-qt responsiveness + +- PSBT signing started from the PSBT operations dialog runs on a cloned-wallet + worker instead of the GUI thread, with queued progress for preparation, + counter reservation, signing, finalization, and verification. Cancellation + is allowed before a durable PQC counter reservation and disabled after it. + A PSBT completed after a late cancel is preserved, a cancelled wallet unlock + is handled, and the dialog reports the PQC signing capacity the attempt + consumed (#145, fixes #140). +- P2MR fee-bump signing runs off the GUI thread. Signing failure, commit + failure, and success each present the PQC usage the attempt consumed, and + cancellation and teardown races were closed (#167). +- Transaction-signing flows preserve and display consumed PQC usage. A shared + formatter renders the overall state, every affected key with its counter, + limit, remaining capacity, and limit state, and every usage warning. An + empty report renders nothing, so an absent report is never shown as zero + consumption. A failed Send preparation keeps its original reason and + severity and appends the attempt's usage before the prepared transaction is + discarded, and the PSBT dialog reports failure outcomes as failures. The + wallet interface now assigns the usage report before returning a + transaction-creation error. Portable transactions and PSBTs are unchanged; + usage stays wallet-local (#167, refs #141). +- Fee-bump preparation dialogs guard the wallet model's lifetime across their + nested event loops, so unloading the wallet during one of those dialogs no + longer touches a destroyed model (#167). +- When the Sign/Verify dialog's own verification of a freshly generated P2MR + data-hash proof fails, the error status now appends the wallet-local PQC + usage the attempt consumed. No proof JSON is written or exported for a + rejected proof (#161, refs #129). +- A successful fee bump now shows the PQC usage it consumed + in a dismissible panel above the transaction list, labelled with the + replacement txid and the local commit time, so the report remains visible + on desktops without a notification backend (no D-Bus, no tray). The + existing non-modal information message and modal warning are unchanged + (#177, fixes #168). +- Encrypting an existing wallet from qbit-qt runs on a worker + thread. The passphrase dialog stays open as a busy indicator and ignores a + second submit, GUI reads that would block on the wallet lock are served + from cached state or deferred until encryption finishes, and unlock, + fee-bump, and payment-request actions are refused or queued while it runs. + A clean failure still reports "Your wallet was not encrypted"; an exception + after the database may already have been written stops the application + rather than misreporting the outcome. The wallet's own encryption logic is + unchanged (#178, fixes #172). +- While an existing wallet is being encrypted, repainting the transaction list + or overview page resolves address labels from the address book rows qbit-qt + already holds, instead of waiting for the wallet lock until encryption + finishes (#182, fixes #180). + +### Validation and performance work + +- Successful P2MR PQC transaction-signature checks are cached in a new PQC + domain of the shared signature cache, following the Schnorr pattern. Only a + verified success is inserted, so a fresh mempool admission verifies each PQC + signature once in the policy pass and reuses the result in the consensus + pass. Interpreter checks, validation-weight charges, script flags, the + full-script cache, and data signatures are unchanged, and a benchmark for + the two-pass admission pattern was added (#162). +- No throughput, initial block download, or signing-latency measurement + accompanies this release. The signature cache and descriptor batching above + are described by their behavior only; this release does not claim a speedup. +- Header synchronization clamps a negative commitment window, which can occur + when a chain start is ahead of the local clock, instead of converting it to + an oversized unsigned bound (#137). +- The `pqc` and `p2mr_script` fuzz targets accept versioned fixture inputs + that verify and mutate real SLH-DSA signatures and signed P2MR spends, and + deterministic seed corpora with a manifest were added for the six + qbit-specific targets. The fuzz runner can require corpus replay for those + targets and run a seeded libFuzzer mutation phase. CI replays the corpora; + the nightly native-fuzz job runs the mutation phase once its workflow + revision reaches `main` (see Known limitations) (#164, #165). +- The fuzz coverage checker's `pqc_sign_refused` source anchor + is re-anchored to the current refusal line, and anchor resolution gained + its own tests. This restores the `--anchors-only` check; it does not by + itself produce instrumented coverage evidence (#176, refs #173). + +### Release engineering, CI, and documentation + +- Added a Pages workflow for a versioned RPC documentation site. It builds + each immutable, signed non-candidate release from its tag target next to + rolling development documentation, verifies the release signer against the + release key policy, and requires each build's reported project version to + match its tag. Release candidates are not published to the versioned site. + The site is not deployed yet (#148). +- The local release publisher fails closed when the paginated release asset + listing cannot be read, instead of treating an empty or partial listing as + a valid draft and uploading assets it believed were missing (#170, + refs #125). +- The Required Merge Gate runs the merge-profile classifier tests and a + workflow contract before producing routing outputs (#160), and its check-run + poller retries transient API failures with a bounded budget, paginates check + runs, and fails closed with a distinct message when checks cannot be read or + the deadline passes (#171, refs #169). +- Scheduled nightly, IBD, and RPC performance workflows resolve the maintained + `1.x.x` branch to one commit per run and report the requested ref, resolved + commit, and actual checkout separately (#165, refs #152). The IBD workflow + forwards its reserved timeout inputs to the harness and records whether each + was actually forwarded (#159, refs #158). +- Corrected the v1.0.0 release-trust record to list every job of the original + Full Validation run with its conclusion, quote the accepted deviation as + recorded, remove a retained-file reference that did not exist at the tag, + and separate the historical `v1.0.0` source from later maintenance results + (#175, fixes #156). The record itself was created by #136. +- Reorganized the P2MR v1 consensus profile (`doc/consensus/p2mr-v1.md`) for + readability and fixed its hash-type table, whose combined `SIGHASH_*` rows + were cut off when rendered. Every requirement, value, and error name is + unchanged (#252). +- Stabilized the REST chain-info comparison and Qt shutdown tests (#137, + #149). + +Release verification +==================== + +Download artifacts only from the release page linked through qbit.org. Verify +`SHA256SUMS.asc` against `SHA256SUMS`, then verify each downloaded artifact +against `SHA256SUMS`. The release page is the source of truth for supported +platform artifacts, signer policy, builder attestations, and the final release +state. + +Mainnet publication requires completed qbit P2MR v1 conformance evidence for +the exact signed tag target. The release page states the corpus digest, source +commit, and independent oracle report digest. Those values are produced from the +tagged commit, so they cannot be recorded in this file. + +Known limitations +================= + +- The PSBT operations dialog and the Sign/Verify dialog write a key's PQC + limit state differently: the PSBT dialog uses a translatable label such as + "Normal", while the Sign/Verify dialog shows the raw state name such as + "NORMAL". The meaning is identical; only the wording differs (#166). +- Unsigned-platform waiver: the macOS and Windows artifacts for this release + are not code-signed or notarized. They are published with `-unsigned` in + their names, and codesigning payloads are not published. macOS Gatekeeper + and Windows SmartScreen may warn when they are first opened. The signed + release tag, the signed `SHA256SUMS`, and the builder attestations still + apply to every artifact; verify downloads as described in "Release + verification". This waiver remains until macOS and Windows signing accounts + are available (#70). +- Fuzz evidence for this release is limited in depth. It was produced with + LLVM 20.1.8 on the #176 source, and later `1.x.x` changes touch only wallet, + qbit-qt, and functional-test code, none of which the qbit fuzz targets + build. The llvm-cov coverage checker met every expectation, including the + `pqc_sign_refused` refusal path. libFuzzer with ASan and UBSan replayed all + 53 seed inputs for the six qbit-specific targets and ran a mutation phase of + at least 120 seconds per target, with no crashes or sanitizer reports. + Because SLH-DSA signing is slow, the `p2mr_script` and `pqc` targets reached + only a few hundred mutated executions under ASan. No multi-hour campaign, + sanitizer-free libFuzzer run, macOS run, or other LLVM version was used + (#173). +- The scheduled-validation source selection (#165) and IBD timeout forwarding + (#159) are present on `1.x.x`, but GitHub schedules run the default branch. + Their deployment is complete only after the same workflow revisions reach + `main` and a scheduled run reports the maintained source (#152, #158). +- The v1.0.1 release readiness inspection (#174) exercised a testnet4 wallet on + macOS. Linux and Windows desktop notification behavior and a packaged-binary + smoke check on each supported platform are separate release evidence. + +Credits and acknowledgements +============================ + +Thanks to everyone who contributed code, testing, review, infrastructure, and +release coordination for this maintenance release. diff --git a/doc/release-notes-150.md b/doc/release-notes-150.md deleted file mode 100644 index 55001226e5..0000000000 --- a/doc/release-notes-150.md +++ /dev/null @@ -1,12 +0,0 @@ -Wallet history --------------- - -Fee-bearing self-transfers whose outputs are all classified as change now -appear once in default wallet history. The GUI shows a “Payment to self” row -with the net fee debit. `gettransaction.details`, `listtransactions`, and -`listsinceblock` return a fee-only `send` entry with zero `amount` and a negative -`fee`. This transaction-level entry omits `address`, `label`, and `vout`. - -`listsinceblock` with `include_change=true` continues to return the existing -output-level send and receive entries. Wallet balances and UTXO accounting are -unchanged. (#147) diff --git a/doc/release-notes-151.md b/doc/release-notes-151.md deleted file mode 100644 index 3b889fb59f..0000000000 --- a/doc/release-notes-151.md +++ /dev/null @@ -1,15 +0,0 @@ -Wallet fallback fee enabled by default -====================================== - -The wallet's `-fallbackfee` now defaults to the minimum relay fee rate -(250 sat/kvB, i.e. 0.0000025 QBT/kvB) instead of being disabled. Previously, -when the fee estimator had no data — the normal state on a young chain with an -empty mempool — transaction creation failed with "Fee estimation failed. -Fallbackfee is disabled." Wallets now pay the relay floor in that case. - -The fallback is only used when no smart fee estimate is available; live -estimates take precedence as soon as the estimator has observed confirming -transactions. The final feerate is still clamped to at least the node's -required and mempool minimum feerates, so the fallback can never underpay -relay policy. Set `-fallbackfee=0` to restore the previous behavior of -failing instead. diff --git a/src/test/util_tests.cpp b/src/test/util_tests.cpp index d65469c6ef..d3317cbe1a 100644 --- a/src/test/util_tests.cpp +++ b/src/test/util_tests.cpp @@ -875,7 +875,7 @@ BOOST_AUTO_TEST_CASE(test_FormatSubVersion) BOOST_CHECK_EQUAL(FormatSubVersion("Test", 99900, std::vector()),std::string("/Test:9.99.0/")); BOOST_CHECK_EQUAL(FormatSubVersion("Test", 99900, comments),std::string("/Test:9.99.0(comment1)/")); BOOST_CHECK_EQUAL(FormatSubVersion("Test", 99900, comments2),std::string("/Test:9.99.0(comment1; Comment2; .,_?@-; )/")); - BOOST_CHECK_EQUAL(FormatSubVersion("Test", CLIENT_VERSION, std::vector()), std::string("/Test:") + CLIENT_VERSION_STRING + "/"); + BOOST_CHECK_EQUAL(FormatSubVersion("Test", CLIENT_VERSION, std::vector()), strprintf("/Test:%d.%d.%d/", CLIENT_VERSION_MAJOR, CLIENT_VERSION_MINOR, CLIENT_VERSION_BUILD)); BOOST_CHECK_EQUAL(FormatSubVersion(UA_NAME, CLIENT_VERSION, std::vector()), std::string("/") + UA_NAME + ":" + CLIENT_VERSION_STRING + "/"); BOOST_CHECK_EQUAL(FormatSubVersion(UA_NAME, CLIENT_VERSION, comments), std::string("/") + UA_NAME + ":" + CLIENT_VERSION_STRING + "(comment1)/"); }