clientversion.cpp raw
1 // Copyright (c) 2012-present 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
9 #include <tinyformat.h>
10 #include <util/string.h>
11
12 #include <string>
13 #include <vector>
14
15 using util::Join;
16
17 /**
18 * Name of client reported in the 'version' message. Report the same name
19 * for both bitcoind and bitcoin-qt, to make it harder for attackers to
20 * target servers or GUI users specifically.
21 */
22 const std::string UA_NAME("Satoshi");
23
24
25 #include <bitcoin-build-info.h>
26 // The <bitcoin-build-info.h>, which is generated by the build environment (cmake/script/GenerateBuildInfo.cmake),
27 // could contain only one line of the following:
28 // - "#define BUILD_GIT_TAG ...", if the top commit is tagged
29 // - "#define BUILD_GIT_COMMIT ...", if the top commit is not tagged
30 // - "// No build information available", if proper git information is not available
31
32 // git will expand the next line to "#define GIT_COMMIT_ID ..." inside archives:
33 //$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 #define BUILD_DESC "v" CLIENT_VERSION_STRING
40 #if CLIENT_VERSION_IS_RELEASE
41 #define BUILD_SUFFIX ""
42 #elif defined(BUILD_GIT_COMMIT)
43 #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 {
53 return strprintf("%d.%d.%d", nVersion / 10000, (nVersion / 100) % 100, nVersion % 100);
54 }
55
56 std::string FormatFullVersion()
57 {
58 static const std::string CLIENT_BUILD(BUILD_DESC BUILD_SUFFIX);
59 return CLIENT_BUILD;
60 }
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 {
67 std::string comments_str;
68 if (!comments.empty()) comments_str = strprintf("(%s)", Join(comments, "; "));
69 return strprintf("/%s:%s%s/", name, FormatVersion(nClientVersion), comments_str);
70 }
71