/Users/eugenesiegel/btc/bitcoin/src/clientversion.cpp
| Line | Count | Source (jump to first uncovered line) | 
| 1 |  | // Copyright (c) 2012-2022 The Bitcoin Core developers | 
| 2 |  | // Distributed under the MIT software license, see the accompanying | 
| 3 |  | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | 
| 4 |  |  | 
| 5 |  | #include <bitcoin-build-config.h> // IWYU pragma: keep | 
| 6 |  |  | 
| 7 |  | #include <clientversion.h> | 
| 8 |  | #include <util/string.h> | 
| 9 |  | #include <util/translation.h> | 
| 10 |  |  | 
| 11 |  | #include <tinyformat.h> | 
| 12 |  |  | 
| 13 |  | #include <string> | 
| 14 |  | #include <vector> | 
| 15 |  |  | 
| 16 |  | using util::Join; | 
| 17 |  |  | 
| 18 |  | /** | 
| 19 |  |  * Name of client reported in the 'version' message. Report the same name | 
| 20 |  |  * for both bitcoind and bitcoin-qt, to make it harder for attackers to | 
| 21 |  |  * target servers or GUI users specifically. | 
| 22 |  |  */ | 
| 23 |  | const std::string UA_NAME("Satoshi"); | 
| 24 |  |  | 
| 25 |  |  | 
| 26 |  | #include <bitcoin-build-info.h> | 
| 27 |  | // The <bitcoin-build-info.h>, which is generated by the build environment (cmake/script/GenerateBuildInfo.cmake), | 
| 28 |  | // could contain only one line of the following: | 
| 29 |  | //   - "#define BUILD_GIT_TAG ...", if the top commit is tagged | 
| 30 |  | //   - "#define BUILD_GIT_COMMIT ...", if the top commit is not tagged | 
| 31 |  | //   - "// No build information available", if proper git information is not available | 
| 32 |  |  | 
| 33 |  | //! git will put "#define GIT_COMMIT_ID ..." on the next line inside archives. $Format:%n#define GIT_COMMIT_ID "%H"$ | 
| 34 |  |  | 
| 35 |  | #ifdef BUILD_GIT_TAG | 
| 36 |  |     #define BUILD_DESC BUILD_GIT_TAG | 
| 37 |  |     #define BUILD_SUFFIX "" | 
| 38 |  | #else | 
| 39 | 51.2k |     #define BUILD_DESC "v" CLIENT_VERSION_STRING | 
| 40 |  |     #if CLIENT_VERSION_IS_RELEASE | 
| 41 |  |         #define BUILD_SUFFIX "" | 
| 42 |  |     #elif defined(BUILD_GIT_COMMIT) | 
| 43 | 51.2k |         #define BUILD_SUFFIX "-" BUILD_GIT_COMMIT | 
| 44 |  |     #elif defined(GIT_COMMIT_ID) | 
| 45 |  |         #define BUILD_SUFFIX "-g" GIT_COMMIT_ID | 
| 46 |  |     #else | 
| 47 |  |         #define BUILD_SUFFIX "-unk" | 
| 48 |  |     #endif | 
| 49 |  | #endif | 
| 50 |  |  | 
| 51 |  | static std::string FormatVersion(int nVersion) | 
| 52 | 0 | { | 
| 53 | 0 |     return strprintf("%d.%d.%d", nVersion / 10000, (nVersion / 100) % 100, nVersion % 100);| Line | Count | Source |  | 1172 | 0 | #define strprintf tfm::format | 
 | 
| 54 | 0 | } | 
| 55 |  |  | 
| 56 |  | std::string FormatFullVersion() | 
| 57 | 51.2k | { | 
| 58 | 51.2k |     static const std::string CLIENT_BUILD(BUILD_DESC BUILD_SUFFIX); | Line | Count | Source |  | 39 | 51.2k |     #define BUILD_DESC "v" CLIENT_VERSION_STRING | 
 |     static const std::string CLIENT_BUILD(BUILD_DESC BUILD_SUFFIX); | Line | Count | Source |  | 43 | 51.2k |         #define BUILD_SUFFIX "-" BUILD_GIT_COMMIT | Line | Count | Source |  | 1 | 51.2k | #define BUILD_GIT_COMMIT "be7cb2957fe7" | 
 | 
 | 
| 59 | 51.2k |     return CLIENT_BUILD; | 
| 60 | 51.2k | } | 
| 61 |  |  | 
| 62 |  | /** | 
| 63 |  |  * Format the subversion field according to BIP 14 spec (https://github.com/bitcoin/bips/blob/master/bip-0014.mediawiki) | 
| 64 |  |  */ | 
| 65 |  | std::string FormatSubVersion(const std::string& name, int nClientVersion, const std::vector<std::string>& comments) | 
| 66 | 0 | { | 
| 67 | 0 |     std::string comments_str; | 
| 68 | 0 |     if (!comments.empty()) comments_str = strprintf("(%s)", Join(comments, "; "));| Line | Count | Source |  | 1172 | 0 | #define strprintf tfm::format | 
 | 
| 69 | 0 |     return strprintf("/%s:%s%s/", name, FormatVersion(nClientVersion), comments_str);| Line | Count | Source |  | 1172 | 0 | #define strprintf tfm::format | 
 | 
| 70 | 0 | } | 
| 71 |  |  | 
| 72 |  | std::string CopyrightHolders(const std::string& strPrefix) | 
| 73 | 0 | { | 
| 74 | 0 |     const auto copyright_devs = strprintf(_(COPYRIGHT_HOLDERS), COPYRIGHT_HOLDERS_SUBSTITUTION).translated; | Line | Count | Source |  | 1172 | 0 | #define strprintf tfm::format | 
 |     const auto copyright_devs = strprintf(_(COPYRIGHT_HOLDERS), COPYRIGHT_HOLDERS_SUBSTITUTION).translated; | Line | Count | Source |  | 21 | 0 | #define COPYRIGHT_HOLDERS "The %s developers" | 
 |     const auto copyright_devs = strprintf(_(COPYRIGHT_HOLDERS), COPYRIGHT_HOLDERS_SUBSTITUTION).translated; | Line | Count | Source |  | 27 | 0 | #define COPYRIGHT_HOLDERS_SUBSTITUTION "Bitcoin Core" | 
 | 
| 75 | 0 |     std::string strCopyrightHolders = strPrefix + copyright_devs; | 
| 76 |  |  | 
| 77 |  |     // Make sure Bitcoin Core copyright is not removed by accident | 
| 78 | 0 |     if (copyright_devs.find("Bitcoin Core") == std::string::npos) { | 
| 79 | 0 |         strCopyrightHolders += "\n" + strPrefix + "The Bitcoin Core developers"; | 
| 80 | 0 |     } | 
| 81 | 0 |     return strCopyrightHolders; | 
| 82 | 0 | } | 
| 83 |  |  | 
| 84 |  | std::string LicenseInfo() | 
| 85 | 0 | { | 
| 86 | 0 |     const std::string URL_SOURCE_CODE = "<https://github.com/bitcoin/bitcoin>"; | 
| 87 |  | 
 | 
| 88 | 0 |     return CopyrightHolders(strprintf(_("Copyright (C) %i-%i"), 2009, COPYRIGHT_YEAR).translated + " ") + "\n" +| Line | Count | Source |  | 1172 | 0 | #define strprintf tfm::format | 
 |     return CopyrightHolders(strprintf(_("Copyright (C) %i-%i"), 2009, COPYRIGHT_YEAR).translated + " ") + "\n" +| Line | Count | Source |  | 30 | 0 | #define COPYRIGHT_YEAR 2025 | 
 | 
| 89 | 0 |            "\n" + | 
| 90 | 0 |            strprintf(_("Please contribute if you find %s useful. "| Line | Count | Source |  | 1172 | 0 | #define strprintf tfm::format | 
 | 
| 91 | 0 |                        "Visit %s for further information about the software."), | 
| 92 | 0 |                      CLIENT_NAME, "<" CLIENT_URL ">") | Line | Count | Source |  | 98 | 0 | #define CLIENT_NAME "Bitcoin Core" | 
 | 
| 93 | 0 |                .translated + | 
| 94 | 0 |            "\n" + | 
| 95 | 0 |            strprintf(_("The source code is available from %s."), URL_SOURCE_CODE).translated +| Line | Count | Source |  | 1172 | 0 | #define strprintf tfm::format | 
 | 
| 96 | 0 |            "\n" + | 
| 97 | 0 |            "\n" + | 
| 98 | 0 |            _("This is experimental software.") + "\n" + | 
| 99 | 0 |            strprintf(_("Distributed under the MIT software license, see the accompanying file %s or %s"), "COPYING", "<https://opensource.org/license/MIT>").translated +| Line | Count | Source |  | 1172 | 0 | #define strprintf tfm::format | 
 | 
| 100 | 0 |            "\n"; | 
| 101 | 0 | } |