diff options
59 files changed, 2817 insertions, 2641 deletions
diff --git a/build-aux/m4/l_atomic.m4 b/build-aux/m4/l_atomic.m4 index 5201a8cc7c..40639dfe61 100644 --- a/build-aux/m4/l_atomic.m4 +++ b/build-aux/m4/l_atomic.m4 @@ -12,11 +12,17 @@ dnl warranty. m4_define([_CHECK_ATOMIC_testbody], [[ #include <atomic> #include <cstdint> + #include <chrono> + + using namespace std::chrono_literals; int main() { std::atomic<bool> lock{true}; std::atomic_exchange(&lock, false); + std::atomic<std::chrono::seconds> t{0s}; + t.store(2s); + std::atomic<int64_t> a{}; int64_t v = 5; diff --git a/depends/packages/libevent.mk b/depends/packages/libevent.mk index 1cd5a1749a..dad317193c 100644 --- a/depends/packages/libevent.mk +++ b/depends/packages/libevent.mk @@ -1,14 +1,8 @@ package=libevent -$(package)_version=2.1.11-stable -$(package)_download_path=https://github.com/libevent/libevent/archive/ -$(package)_file_name=release-$($(package)_version).tar.gz -$(package)_sha256_hash=229393ab2bf0dc94694f21836846b424f3532585bac3468738b7bf752c03901e -$(package)_patches=0001-fix-windows-getaddrinfo.patch - -define $(package)_preprocess_cmds - patch -p1 < $($(package)_patch_dir)/0001-fix-windows-getaddrinfo.patch && \ - ./autogen.sh -endef +$(package)_version=2.1.12-stable +$(package)_download_path=https://github.com/libevent/libevent/releases/download/release-$($(package)_version)/ +$(package)_file_name=$(package)-$($(package)_version).tar.gz +$(package)_sha256_hash=92e6de1be9ec176428fd2367677e61ceffc2ee1cb119035037a27d346b0403bb # When building for Windows, we set _WIN32_WINNT to target the same Windows # version as we do in configure. Due to quirks in libevents build system, this diff --git a/depends/patches/libevent/0001-fix-windows-getaddrinfo.patch b/depends/patches/libevent/0001-fix-windows-getaddrinfo.patch deleted file mode 100644 index a98cd90bd5..0000000000 --- a/depends/patches/libevent/0001-fix-windows-getaddrinfo.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff -ur libevent-2.1.8-stable.orig/configure.ac libevent-2.1.8-stable/configure.ac ---- libevent-2.1.8-stable.orig/configure.ac 2017-01-29 17:51:00.000000000 +0000 -+++ libevent-2.1.8-stable/configure.ac 2020-03-07 01:11:16.311335005 +0000 -@@ -389,6 +389,10 @@ - #ifdef HAVE_NETDB_H - #include <netdb.h> - #endif -+#ifdef _WIN32 -+#include <winsock2.h> -+#include <ws2tcpip.h> -+#endif - ]], - [[ - getaddrinfo; -Only in libevent-2.1.8-stable: configure.ac~ diff --git a/doc/build-osx.md b/doc/build-osx.md index ab298f5f2c..467feff410 100644 --- a/doc/build-osx.md +++ b/doc/build-osx.md @@ -138,6 +138,14 @@ Skip if you don't intend to use the GUI. brew install qt@5 ``` +Ensure that the `qt@5` package is installed, not the `qt` package. +If 'qt' is installed, the build process will fail. +if installed, remove the `qt` package with the following command: + +``` bash +brew uninstall qt +``` + Note: Building with Qt binaries downloaded from the Qt website is not officially supported. See the notes in [#7714](https://github.com/bitcoin/bitcoin/issues/7714). diff --git a/doc/dependencies.md b/doc/dependencies.md index 22161856ce..854ff7f52d 100644 --- a/doc/dependencies.md +++ b/doc/dependencies.md @@ -13,7 +13,7 @@ These are the dependencies currently used by Bitcoin Core. You can find instruct | FreeType | [2.7.1](https://download.savannah.gnu.org/releases/freetype) | | No | | [Yes](https://github.com/bitcoin/bitcoin/blob/master/depends/packages/qt.mk) (Android only) | | GCC | | [7+](https://gcc.gnu.org/) (C++17 support) | | | | | HarfBuzz-NG | | | | | [Yes](https://github.com/bitcoin/bitcoin/blob/master/depends/packages/qt.mk) | -| libevent | [2.1.11-stable](https://github.com/libevent/libevent/releases) | [2.0.21](https://github.com/bitcoin/bitcoin/pull/18676) | No | | | +| libevent | [2.1.12-stable](https://github.com/libevent/libevent/releases) | [2.0.21](https://github.com/bitcoin/bitcoin/pull/18676) | No | | | | libnatpmp | git commit [4536032...](https://github.com/miniupnp/libnatpmp/tree/4536032ae32268a45c073a4d5e91bbab4534773a) | | No | | | | libpng | | | | | [Yes](https://github.com/bitcoin/bitcoin/blob/master/depends/packages/qt.mk) | | librsvg | | | | | | diff --git a/doc/fuzzing.md b/doc/fuzzing.md index 5ffa3a9416..e086840fe6 100644 --- a/doc/fuzzing.md +++ b/doc/fuzzing.md @@ -234,7 +234,7 @@ $ honggfuzz/honggfuzz --exit_upon_crash --quiet --timeout 4 -n 1 -Q \ # OSS-Fuzz Bitcoin Core participates in Google's [OSS-Fuzz](https://github.com/google/oss-fuzz/tree/master/projects/bitcoin-core) -program, which includes a dashboard of [publicly disclosed vulnerabilities](https://bugs.chromium.org/p/oss-fuzz/issues/list). +program, which includes a dashboard of [publicly disclosed vulnerabilities](https://bugs.chromium.org/p/oss-fuzz/issues/list?q=bitcoin-core). Generally, we try to disclose vulnerabilities as soon as possible after they are fixed to give users the knowledge they need to be protected. However, because Bitcoin is a live P2P network, and not just standalone local software, @@ -242,3 +242,5 @@ we might not fully disclose every issue within Google's standard [90-day disclosure window](https://google.github.io/oss-fuzz/getting-started/bug-disclosure-guidelines/) if a partial or delayed disclosure is important to protect users or the function of the network. + +OSS-Fuzz also produces [a fuzzing coverage report](https://oss-fuzz.com/coverage-report/job/libfuzzer_asan_bitcoin-core/latest). diff --git a/doc/release-notes.md b/doc/release-notes.md index 5c70bc91db..53106c9f82 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -108,6 +108,12 @@ Updated RPCs Respectively, these new fields indicate the duration of a ban and the time remaining until a ban expires, both in seconds. Additionally, the `ban_created` field is repositioned to come before `banned_until`. (#21602) +- The `getnodeaddresses` RPC now returns a "network" field indicating the + network type (ipv4, ipv6, onion, or i2p) for each address. (#21594) + +- `getnodeaddresses` now also accepts a "network" argument (ipv4, ipv6, onion, + or i2p) to return only addresses of the specified network. (#21843) + Changes to Wallet or GUI related RPCs can be found in the GUI or Wallet section below. New RPCs @@ -130,9 +136,6 @@ Changes to Wallet or GUI related settings can be found in the GUI or Wallet sect - Passing an invalid `-rpcauth` argument now cause bitcoind to fail to start. (#20461) -- The `getnodeaddresses` RPC now returns a "network" field indicating the - network type (ipv4, ipv6, onion, or i2p) for each address. (#21594) - Tools and Utilities ------------------- diff --git a/share/qt/extract_strings_qt.py b/share/qt/extract_strings_qt.py index 4efc4bd6f5..e4d438fdb0 100755 --- a/share/qt/extract_strings_qt.py +++ b/share/qt/extract_strings_qt.py @@ -58,7 +58,7 @@ if not XGETTEXT: print('Cannot extract strings: xgettext utility is not installed or not configured.',file=sys.stderr) print('Please install package "gettext" and re-run \'./configure\'.',file=sys.stderr) sys.exit(1) -child = Popen([XGETTEXT,'--output=-','-n','--keyword=_'] + files, stdout=PIPE) +child = Popen([XGETTEXT,'--output=-','--from-code=utf-8','-n','--keyword=_'] + files, stdout=PIPE) (out, err) = child.communicate() messages = parse_po(out.decode('utf-8')) diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index 74cf6734d6..30edb1e82d 100644 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -358,7 +358,7 @@ $(srcdir)/qt/bitcoinstrings.cpp: FORCE translate: $(srcdir)/qt/bitcoinstrings.cpp $(QT_FORMS_UI) $(QT_FORMS_UI) $(BITCOIN_QT_BASE_CPP) qt/bitcoin.cpp $(BITCOIN_QT_WINDOWS_CPP) $(BITCOIN_QT_WALLET_CPP) $(BITCOIN_QT_H) $(BITCOIN_MM) @test -n $(LUPDATE) || echo "lupdate is required for updating translations" - $(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(LUPDATE) $^ -locations relative -no-obsolete -ts $(srcdir)/qt/locale/bitcoin_en.ts + $(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(LUPDATE) -no-obsolete -I $(srcdir) -locations relative $^ -ts $(srcdir)/qt/locale/bitcoin_en.ts @test -n $(LCONVERT) || echo "lconvert is required for updating translations" $(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(LCONVERT) -o $(srcdir)/qt/locale/bitcoin_en.xlf -i $(srcdir)/qt/locale/bitcoin_en.ts diff --git a/src/addrman.cpp b/src/addrman.cpp index f91121f156..ceab1689d7 100644 --- a/src/addrman.cpp +++ b/src/addrman.cpp @@ -7,9 +7,11 @@ #include <hash.h> #include <logging.h> +#include <netaddress.h> #include <serialize.h> #include <cmath> +#include <optional> int CAddrInfo::GetTriedBucket(const uint256& nKey, const std::vector<bool> &asmap) const { @@ -481,7 +483,7 @@ int CAddrMan::Check_() } #endif -void CAddrMan::GetAddr_(std::vector<CAddress>& vAddr, size_t max_addresses, size_t max_pct) +void CAddrMan::GetAddr_(std::vector<CAddress>& vAddr, size_t max_addresses, size_t max_pct, std::optional<Network> network) { size_t nNodes = vRandom.size(); if (max_pct != 0) { @@ -492,6 +494,7 @@ void CAddrMan::GetAddr_(std::vector<CAddress>& vAddr, size_t max_addresses, size } // gather a list of random nodes, skipping those of low quality + const int64_t now{GetAdjustedTime()}; for (unsigned int n = 0; n < vRandom.size(); n++) { if (vAddr.size() >= nNodes) break; @@ -501,8 +504,14 @@ void CAddrMan::GetAddr_(std::vector<CAddress>& vAddr, size_t max_addresses, size assert(mapInfo.count(vRandom[n]) == 1); const CAddrInfo& ai = mapInfo[vRandom[n]]; - if (!ai.IsTerrible()) - vAddr.push_back(ai); + + // Filter by network (optional) + if (network != std::nullopt && ai.GetNetClass() != network) continue; + + // Filter for quality + if (ai.IsTerrible(now)) continue; + + vAddr.push_back(ai); } } diff --git a/src/addrman.h b/src/addrman.h index 92a5570953..eaedfd318c 100644 --- a/src/addrman.h +++ b/src/addrman.h @@ -20,6 +20,7 @@ #include <hash.h> #include <iostream> #include <map> +#include <optional> #include <set> #include <stdint.h> #include <streams.h> @@ -278,8 +279,15 @@ protected: int Check_() EXCLUSIVE_LOCKS_REQUIRED(cs); #endif - //! Select several addresses at once. - void GetAddr_(std::vector<CAddress> &vAddr, size_t max_addresses, size_t max_pct) EXCLUSIVE_LOCKS_REQUIRED(cs); + /** + * Return all or many randomly selected addresses, optionally by network. + * + * @param[out] vAddr Vector of randomly selected addresses from vRandom. + * @param[in] max_addresses Maximum number of addresses to return (0 = all). + * @param[in] max_pct Maximum percentage of addresses to return (0 = all). + * @param[in] network Select only addresses of this network (nullopt = all). + */ + void GetAddr_(std::vector<CAddress>& vAddr, size_t max_addresses, size_t max_pct, std::optional<Network> network) EXCLUSIVE_LOCKS_REQUIRED(cs); /** We have successfully connected to this peer. Calling this function * updates the CAddress's nTime, which is used in our IsTerrible() @@ -715,14 +723,20 @@ public: return addrRet; } - //! Return a bunch of addresses, selected at random. - std::vector<CAddress> GetAddr(size_t max_addresses, size_t max_pct) + /** + * Return all or many randomly selected addresses, optionally by network. + * + * @param[in] max_addresses Maximum number of addresses to return (0 = all). + * @param[in] max_pct Maximum percentage of addresses to return (0 = all). + * @param[in] network Select only addresses of this network (nullopt = all). + */ + std::vector<CAddress> GetAddr(size_t max_addresses, size_t max_pct, std::optional<Network> network) { Check(); std::vector<CAddress> vAddr; { LOCK(cs); - GetAddr_(vAddr, max_addresses, max_pct); + GetAddr_(vAddr, max_addresses, max_pct, network); } Check(); return vAddr; diff --git a/src/bench/addrman.cpp b/src/bench/addrman.cpp index ebdad5a4b8..b7bd8a3261 100644 --- a/src/bench/addrman.cpp +++ b/src/bench/addrman.cpp @@ -7,6 +7,7 @@ #include <random.h> #include <util/time.h> +#include <optional> #include <vector> /* A "source" is a source address from which we have received a bunch of other addresses. */ @@ -98,7 +99,7 @@ static void AddrManGetAddr(benchmark::Bench& bench) FillAddrMan(addrman); bench.run([&] { - const auto& addresses = addrman.GetAddr(2500, 23); + const auto& addresses = addrman.GetAddr(/* max_addresses */ 2500, /* max_pct */ 23, /* network */ std::nullopt); assert(addresses.size() > 0); }); } diff --git a/src/bench/wallet_balance.cpp b/src/bench/wallet_balance.cpp index d7cc167885..362b7c1e15 100644 --- a/src/bench/wallet_balance.cpp +++ b/src/bench/wallet_balance.cpp @@ -22,8 +22,7 @@ static void WalletBalance(benchmark::Bench& bench, const bool set_dirty, const b CWallet wallet{test_setup->m_node.chain.get(), "", CreateMockWalletDatabase()}; { wallet.SetupLegacyScriptPubKeyMan(); - bool first_run; - if (wallet.LoadWallet(first_run) != DBErrors::LOAD_OK) assert(false); + if (wallet.LoadWallet() != DBErrors::LOAD_OK) assert(false); } auto handler = test_setup->m_node.chain->handleNotifications({&wallet, [](CWallet*) {}}); diff --git a/src/net.cpp b/src/net.cpp index 05588d7406..1322c971fb 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -16,6 +16,7 @@ #include <crypto/sha256.h> #include <i2p.h> #include <net_permissions.h> +#include <netaddress.h> #include <netbase.h> #include <node/ui_interface.h> #include <protocol.h> @@ -1005,7 +1006,7 @@ bool CConnman::AttemptToEvictConnection() LOCK(cs_vNodes); for (const CNode* node : vNodes) { - if (node->HasPermission(PF_NOBAN)) + if (node->HasPermission(NetPermissionFlags::NoBan)) continue; if (!node->IsInboundConn()) continue; @@ -1062,7 +1063,7 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) { const CAddress addr_bind = GetBindAddress(hSocket); - NetPermissionFlags permissionFlags = NetPermissionFlags::PF_NONE; + NetPermissionFlags permissionFlags = NetPermissionFlags::None; hListenSocket.AddSocketPermissionFlags(permissionFlags); CreateNodeFromAcceptedSocket(hSocket, permissionFlags, addr_bind, addr); @@ -1077,12 +1078,12 @@ void CConnman::CreateNodeFromAcceptedSocket(SOCKET hSocket, int nMaxInbound = nMaxConnections - m_max_outbound; AddWhitelistPermissionFlags(permissionFlags, addr); - if (NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::PF_ISIMPLICIT)) { - NetPermissions::ClearFlag(permissionFlags, PF_ISIMPLICIT); - if (gArgs.GetBoolArg("-whitelistforcerelay", DEFAULT_WHITELISTFORCERELAY)) NetPermissions::AddFlag(permissionFlags, PF_FORCERELAY); - if (gArgs.GetBoolArg("-whitelistrelay", DEFAULT_WHITELISTRELAY)) NetPermissions::AddFlag(permissionFlags, PF_RELAY); - NetPermissions::AddFlag(permissionFlags, PF_MEMPOOL); - NetPermissions::AddFlag(permissionFlags, PF_NOBAN); + if (NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::Implicit)) { + NetPermissions::ClearFlag(permissionFlags, NetPermissionFlags::Implicit); + if (gArgs.GetBoolArg("-whitelistforcerelay", DEFAULT_WHITELISTFORCERELAY)) NetPermissions::AddFlag(permissionFlags, NetPermissionFlags::ForceRelay); + if (gArgs.GetBoolArg("-whitelistrelay", DEFAULT_WHITELISTRELAY)) NetPermissions::AddFlag(permissionFlags, NetPermissionFlags::Relay); + NetPermissions::AddFlag(permissionFlags, NetPermissionFlags::Mempool); + NetPermissions::AddFlag(permissionFlags, NetPermissionFlags::NoBan); } { @@ -1111,7 +1112,7 @@ void CConnman::CreateNodeFromAcceptedSocket(SOCKET hSocket, // Don't accept connections from banned peers. bool banned = m_banman && m_banman->IsBanned(addr); - if (!NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::PF_NOBAN) && banned) + if (!NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::NoBan) && banned) { LogPrint(BCLog::NET, "connection from %s dropped (banned)\n", addr.ToString()); CloseSocket(hSocket); @@ -1120,7 +1121,7 @@ void CConnman::CreateNodeFromAcceptedSocket(SOCKET hSocket, // Only accept connections from discouraged peers if our inbound slots aren't (almost) full. bool discouraged = m_banman && m_banman->IsDiscouraged(addr); - if (!NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::PF_NOBAN) && nInbound + 1 >= nMaxInbound && discouraged) + if (!NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::NoBan) && nInbound + 1 >= nMaxInbound && discouraged) { LogPrint(BCLog::NET, "connection from %s dropped (discouraged)\n", addr.ToString()); CloseSocket(hSocket); @@ -1141,7 +1142,7 @@ void CConnman::CreateNodeFromAcceptedSocket(SOCKET hSocket, uint64_t nonce = GetDeterministicRandomizer(RANDOMIZER_ID_LOCALHOSTNONCE).Write(id).Finalize(); ServiceFlags nodeServices = nLocalServices; - if (NetPermissions::HasFlag(permissionFlags, PF_BLOOMFILTER)) { + if (NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::BloomFilter)) { nodeServices = static_cast<ServiceFlags>(nodeServices | NODE_BLOOM); } @@ -2253,7 +2254,7 @@ void CConnman::ThreadI2PAcceptIncoming() continue; } - CreateNodeFromAcceptedSocket(conn.sock->Release(), NetPermissionFlags::PF_NONE, + CreateNodeFromAcceptedSocket(conn.sock->Release(), NetPermissionFlags::None, CAddress{conn.me, NODE_NONE}, CAddress{conn.peer, NODE_NONE}); } } @@ -2411,7 +2412,7 @@ bool CConnman::Bind(const CService &addr, unsigned int flags, NetPermissionFlags return false; } - if (addr.IsRoutable() && fDiscover && !(flags & BF_DONT_ADVERTISE) && !NetPermissions::HasFlag(permissions, NetPermissionFlags::PF_NOBAN)) { + if (addr.IsRoutable() && fDiscover && !(flags & BF_DONT_ADVERTISE) && !NetPermissions::HasFlag(permissions, NetPermissionFlags::NoBan)) { AddLocal(addr, LOCAL_BIND); } @@ -2425,7 +2426,7 @@ bool CConnman::InitBinds( { bool fBound = false; for (const auto& addrBind : binds) { - fBound |= Bind(addrBind, (BF_EXPLICIT | BF_REPORT_ERROR), NetPermissionFlags::PF_NONE); + fBound |= Bind(addrBind, (BF_EXPLICIT | BF_REPORT_ERROR), NetPermissionFlags::None); } for (const auto& addrBind : whiteBinds) { fBound |= Bind(addrBind.m_service, (BF_EXPLICIT | BF_REPORT_ERROR), addrBind.m_flags); @@ -2434,12 +2435,12 @@ bool CConnman::InitBinds( struct in_addr inaddr_any; inaddr_any.s_addr = htonl(INADDR_ANY); struct in6_addr inaddr6_any = IN6ADDR_ANY_INIT; - fBound |= Bind(CService(inaddr6_any, GetListenPort()), BF_NONE, NetPermissionFlags::PF_NONE); - fBound |= Bind(CService(inaddr_any, GetListenPort()), !fBound ? BF_REPORT_ERROR : BF_NONE, NetPermissionFlags::PF_NONE); + fBound |= Bind(CService(inaddr6_any, GetListenPort()), BF_NONE, NetPermissionFlags::None); + fBound |= Bind(CService(inaddr_any, GetListenPort()), !fBound ? BF_REPORT_ERROR : BF_NONE, NetPermissionFlags::None); } for (const auto& addr_bind : onion_binds) { - fBound |= Bind(addr_bind, BF_EXPLICIT | BF_DONT_ADVERTISE, NetPermissionFlags::PF_NONE); + fBound |= Bind(addr_bind, BF_EXPLICIT | BF_DONT_ADVERTISE, NetPermissionFlags::None); } return fBound; @@ -2669,9 +2670,9 @@ CConnman::~CConnman() Stop(); } -std::vector<CAddress> CConnman::GetAddresses(size_t max_addresses, size_t max_pct) const +std::vector<CAddress> CConnman::GetAddresses(size_t max_addresses, size_t max_pct, std::optional<Network> network) const { - std::vector<CAddress> addresses = addrman.GetAddr(max_addresses, max_pct); + std::vector<CAddress> addresses = addrman.GetAddr(max_addresses, max_pct, network); if (m_banman) { addresses.erase(std::remove_if(addresses.begin(), addresses.end(), [this](const CAddress& addr){return m_banman->IsDiscouraged(addr) || m_banman->IsBanned(addr);}), @@ -2691,7 +2692,7 @@ std::vector<CAddress> CConnman::GetAddresses(CNode& requestor, size_t max_addres auto r = m_addr_response_caches.emplace(cache_id, CachedAddrResponse{}); CachedAddrResponse& cache_entry = r.first->second; if (cache_entry.m_cache_entry_expiration < current_time) { // If emplace() added new one it has expiration 0. - cache_entry.m_addrs_response_cache = GetAddresses(max_addresses, max_pct); + cache_entry.m_addrs_response_cache = GetAddresses(max_addresses, max_pct, /* network */ std::nullopt); // Choosing a proper cache lifetime is a trade-off between the privacy leak minimization // and the usefulness of ADDR responses to honest users. // @@ -402,7 +402,7 @@ public: std::unique_ptr<TransportDeserializer> m_deserializer; std::unique_ptr<TransportSerializer> m_serializer; - NetPermissionFlags m_permissionFlags{PF_NONE}; + NetPermissionFlags m_permissionFlags{NetPermissionFlags::None}; std::atomic<ServiceFlags> nServices{NODE_NONE}; SOCKET hSocket GUARDED_BY(cs_hSocket); /** Total size of all vSendMsg entries */ @@ -923,7 +923,14 @@ public: }; // Addrman functions - std::vector<CAddress> GetAddresses(size_t max_addresses, size_t max_pct) const; + /** + * Return all or many randomly selected addresses, optionally by network. + * + * @param[in] max_addresses Maximum number of addresses to return (0 = all). + * @param[in] max_pct Maximum percentage of addresses to return (0 = all). + * @param[in] network Select only addresses of this network (nullopt = all). + */ + std::vector<CAddress> GetAddresses(size_t max_addresses, size_t max_pct, std::optional<Network> network) const; /** * Cache is used to minimize topology leaks, so it should * be used for all non-trusted calls, for example, p2p. diff --git a/src/net_permissions.cpp b/src/net_permissions.cpp index 1fdcd97593..d0a45f90fa 100644 --- a/src/net_permissions.cpp +++ b/src/net_permissions.cpp @@ -20,15 +20,15 @@ const std::vector<std::string> NET_PERMISSIONS_DOC{ namespace { -// The parse the following format "perm1,perm2@xxxxxx" -bool TryParsePermissionFlags(const std::string str, NetPermissionFlags& output, size_t& readen, bilingual_str& error) +// Parse the following format: "perm1,perm2@xxxxxx" +bool TryParsePermissionFlags(const std::string& str, NetPermissionFlags& output, size_t& readen, bilingual_str& error) { - NetPermissionFlags flags = PF_NONE; + NetPermissionFlags flags = NetPermissionFlags::None; const auto atSeparator = str.find('@'); // if '@' is not found (ie, "xxxxx"), the caller should apply implicit permissions if (atSeparator == std::string::npos) { - NetPermissions::AddFlag(flags, PF_ISIMPLICIT); + NetPermissions::AddFlag(flags, NetPermissionFlags::Implicit); readen = 0; } // else (ie, "perm1,perm2@xxxxx"), let's enumerate the permissions by splitting by ',' and calculate the flags @@ -44,14 +44,14 @@ bool TryParsePermissionFlags(const std::string str, NetPermissionFlags& output, readen += len; // We read "perm1" if (commaSeparator != std::string::npos) readen++; // We read "," - if (permission == "bloomfilter" || permission == "bloom") NetPermissions::AddFlag(flags, PF_BLOOMFILTER); - else if (permission == "noban") NetPermissions::AddFlag(flags, PF_NOBAN); - else if (permission == "forcerelay") NetPermissions::AddFlag(flags, PF_FORCERELAY); - else if (permission == "mempool") NetPermissions::AddFlag(flags, PF_MEMPOOL); - else if (permission == "download") NetPermissions::AddFlag(flags, PF_DOWNLOAD); - else if (permission == "all") NetPermissions::AddFlag(flags, PF_ALL); - else if (permission == "relay") NetPermissions::AddFlag(flags, PF_RELAY); - else if (permission == "addr") NetPermissions::AddFlag(flags, PF_ADDR); + if (permission == "bloomfilter" || permission == "bloom") NetPermissions::AddFlag(flags, NetPermissionFlags::BloomFilter); + else if (permission == "noban") NetPermissions::AddFlag(flags, NetPermissionFlags::NoBan); + else if (permission == "forcerelay") NetPermissions::AddFlag(flags, NetPermissionFlags::ForceRelay); + else if (permission == "mempool") NetPermissions::AddFlag(flags, NetPermissionFlags::Mempool); + else if (permission == "download") NetPermissions::AddFlag(flags, NetPermissionFlags::Download); + else if (permission == "all") NetPermissions::AddFlag(flags, NetPermissionFlags::All); + else if (permission == "relay") NetPermissions::AddFlag(flags, NetPermissionFlags::Relay); + else if (permission == "addr") NetPermissions::AddFlag(flags, NetPermissionFlags::Addr); else if (permission.length() == 0); // Allow empty entries else { error = strprintf(_("Invalid P2P permission: '%s'"), permission); @@ -71,17 +71,17 @@ bool TryParsePermissionFlags(const std::string str, NetPermissionFlags& output, std::vector<std::string> NetPermissions::ToStrings(NetPermissionFlags flags) { std::vector<std::string> strings; - if (NetPermissions::HasFlag(flags, PF_BLOOMFILTER)) strings.push_back("bloomfilter"); - if (NetPermissions::HasFlag(flags, PF_NOBAN)) strings.push_back("noban"); - if (NetPermissions::HasFlag(flags, PF_FORCERELAY)) strings.push_back("forcerelay"); - if (NetPermissions::HasFlag(flags, PF_RELAY)) strings.push_back("relay"); - if (NetPermissions::HasFlag(flags, PF_MEMPOOL)) strings.push_back("mempool"); - if (NetPermissions::HasFlag(flags, PF_DOWNLOAD)) strings.push_back("download"); - if (NetPermissions::HasFlag(flags, PF_ADDR)) strings.push_back("addr"); + if (NetPermissions::HasFlag(flags, NetPermissionFlags::BloomFilter)) strings.push_back("bloomfilter"); + if (NetPermissions::HasFlag(flags, NetPermissionFlags::NoBan)) strings.push_back("noban"); + if (NetPermissions::HasFlag(flags, NetPermissionFlags::ForceRelay)) strings.push_back("forcerelay"); + if (NetPermissions::HasFlag(flags, NetPermissionFlags::Relay)) strings.push_back("relay"); + if (NetPermissions::HasFlag(flags, NetPermissionFlags::Mempool)) strings.push_back("mempool"); + if (NetPermissions::HasFlag(flags, NetPermissionFlags::Download)) strings.push_back("download"); + if (NetPermissions::HasFlag(flags, NetPermissionFlags::Addr)) strings.push_back("addr"); return strings; } -bool NetWhitebindPermissions::TryParse(const std::string str, NetWhitebindPermissions& output, bilingual_str& error) +bool NetWhitebindPermissions::TryParse(const std::string& str, NetWhitebindPermissions& output, bilingual_str& error) { NetPermissionFlags flags; size_t offset; @@ -104,7 +104,7 @@ bool NetWhitebindPermissions::TryParse(const std::string str, NetWhitebindPermis return true; } -bool NetWhitelistPermissions::TryParse(const std::string str, NetWhitelistPermissions& output, bilingual_str& error) +bool NetWhitelistPermissions::TryParse(const std::string& str, NetWhitelistPermissions& output, bilingual_str& error) { NetPermissionFlags flags; size_t offset; diff --git a/src/net_permissions.h b/src/net_permissions.h index 142b317bf6..c00689465e 100644 --- a/src/net_permissions.h +++ b/src/net_permissions.h @@ -5,6 +5,7 @@ #include <netaddress.h> #include <string> +#include <type_traits> #include <vector> #ifndef BITCOIN_NET_PERMISSIONS_H @@ -14,66 +15,73 @@ struct bilingual_str; extern const std::vector<std::string> NET_PERMISSIONS_DOC; -enum NetPermissionFlags { - PF_NONE = 0, +enum class NetPermissionFlags : uint32_t { + None = 0, // Can query bloomfilter even if -peerbloomfilters is false - PF_BLOOMFILTER = (1U << 1), + BloomFilter = (1U << 1), // Relay and accept transactions from this peer, even if -blocksonly is true // This peer is also not subject to limits on how many transaction INVs are tracked - PF_RELAY = (1U << 3), + Relay = (1U << 3), // Always relay transactions from this peer, even if already in mempool // Keep parameter interaction: forcerelay implies relay - PF_FORCERELAY = (1U << 2) | PF_RELAY, + ForceRelay = (1U << 2) | Relay, // Allow getheaders during IBD and block-download after maxuploadtarget limit - PF_DOWNLOAD = (1U << 6), + Download = (1U << 6), // Can't be banned/disconnected/discouraged for misbehavior - PF_NOBAN = (1U << 4) | PF_DOWNLOAD, + NoBan = (1U << 4) | Download, // Can query the mempool - PF_MEMPOOL = (1U << 5), + Mempool = (1U << 5), // Can request addrs without hitting a privacy-preserving cache - PF_ADDR = (1U << 7), + Addr = (1U << 7), // True if the user did not specifically set fine grained permissions - PF_ISIMPLICIT = (1U << 31), - PF_ALL = PF_BLOOMFILTER | PF_FORCERELAY | PF_RELAY | PF_NOBAN | PF_MEMPOOL | PF_DOWNLOAD | PF_ADDR, + Implicit = (1U << 31), + All = BloomFilter | ForceRelay | Relay | NoBan | Mempool | Download | Addr, }; +static inline constexpr NetPermissionFlags operator|(NetPermissionFlags a, NetPermissionFlags b) +{ + using t = typename std::underlying_type<NetPermissionFlags>::type; + return static_cast<NetPermissionFlags>(static_cast<t>(a) | static_cast<t>(b)); +} class NetPermissions { public: NetPermissionFlags m_flags; static std::vector<std::string> ToStrings(NetPermissionFlags flags); - static inline bool HasFlag(const NetPermissionFlags& flags, NetPermissionFlags f) + static inline bool HasFlag(NetPermissionFlags flags, NetPermissionFlags f) { - return (flags & f) == f; + using t = typename std::underlying_type<NetPermissionFlags>::type; + return (static_cast<t>(flags) & static_cast<t>(f)) == static_cast<t>(f); } static inline void AddFlag(NetPermissionFlags& flags, NetPermissionFlags f) { - flags = static_cast<NetPermissionFlags>(flags | f); + flags = flags | f; } - //! ClearFlag is only called with `f` == NetPermissionFlags::PF_ISIMPLICIT. + //! ClearFlag is only called with `f` == NetPermissionFlags::Implicit. //! If that should change in the future, be aware that ClearFlag should not - //! be called with a subflag of a multiflag, e.g. NetPermissionFlags::PF_RELAY - //! or NetPermissionFlags::PF_DOWNLOAD, as that would leave `flags` in an + //! be called with a subflag of a multiflag, e.g. NetPermissionFlags::Relay + //! or NetPermissionFlags::Download, as that would leave `flags` in an //! invalid state corresponding to none of the existing flags. static inline void ClearFlag(NetPermissionFlags& flags, NetPermissionFlags f) { - assert(f == NetPermissionFlags::PF_ISIMPLICIT); - flags = static_cast<NetPermissionFlags>(flags & ~f); + assert(f == NetPermissionFlags::Implicit); + using t = typename std::underlying_type<NetPermissionFlags>::type; + flags = static_cast<NetPermissionFlags>(static_cast<t>(flags) & ~static_cast<t>(f)); } }; class NetWhitebindPermissions : public NetPermissions { public: - static bool TryParse(const std::string str, NetWhitebindPermissions& output, bilingual_str& error); + static bool TryParse(const std::string& str, NetWhitebindPermissions& output, bilingual_str& error); CService m_service; }; class NetWhitelistPermissions : public NetPermissions { public: - static bool TryParse(const std::string str, NetWhitelistPermissions& output, bilingual_str& error); + static bool TryParse(const std::string& str, NetWhitelistPermissions& output, bilingual_str& error); CSubNet m_subnet; }; diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 27ad9eefb5..cee2419610 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -124,11 +124,11 @@ static constexpr auto AVG_LOCAL_ADDRESS_BROADCAST_INTERVAL = 24h; /** Average delay between peer address broadcasts */ static constexpr auto AVG_ADDRESS_BROADCAST_INTERVAL = 30s; /** Average delay between trickled inventory transmissions for inbound peers. - * Blocks and peers with noban permission bypass this. */ + * Blocks and peers with NetPermissionFlags::NoBan permission bypass this. */ static constexpr auto INBOUND_INVENTORY_BROADCAST_INTERVAL = 5s; /** Average delay between trickled inventory transmissions for outbound peers. * Use a smaller delay as there is less privacy concern for them. - * Blocks and peers with noban permission bypass this. */ + * Blocks and peers with NetPermissionFlags::NoBan permission bypass this. */ static constexpr auto OUTBOUND_INVENTORY_BROADCAST_INTERVAL = 2s; /** Maximum rate of inventory items to send per second. * Limits the impact of low-fee transaction floods. */ @@ -183,7 +183,7 @@ struct Peer { Mutex m_misbehavior_mutex; /** Accumulated misbehavior score for this peer */ int m_misbehavior_score GUARDED_BY(m_misbehavior_mutex){0}; - /** Whether this peer should be disconnected and marked as discouraged (unless it has the noban permission). */ + /** Whether this peer should be disconnected and marked as discouraged (unless it has NetPermissionFlags::NoBan permission). */ bool m_should_discourage GUARDED_BY(m_misbehavior_mutex){false}; /** Protects block inventory data members */ @@ -680,7 +680,7 @@ static void UpdatePreferredDownload(const CNode& node, CNodeState* state) EXCLUS nPreferredDownload -= state->fPreferredDownload; // Whether this node should be marked as a preferred download node. - state->fPreferredDownload = (!node.IsInboundConn() || node.HasPermission(PF_NOBAN)) && !node.IsAddrFetchConn() && !node.fClient; + state->fPreferredDownload = (!node.IsInboundConn() || node.HasPermission(NetPermissionFlags::NoBan)) && !node.IsAddrFetchConn() && !node.fClient; nPreferredDownload += state->fPreferredDownload; } @@ -960,24 +960,24 @@ void PeerManagerImpl::AddTxAnnouncement(const CNode& node, const GenTxid& gtxid, { AssertLockHeld(::cs_main); // For m_txrequest NodeId nodeid = node.GetId(); - if (!node.HasPermission(PF_RELAY) && m_txrequest.Count(nodeid) >= MAX_PEER_TX_ANNOUNCEMENTS) { + if (!node.HasPermission(NetPermissionFlags::Relay) && m_txrequest.Count(nodeid) >= MAX_PEER_TX_ANNOUNCEMENTS) { // Too many queued announcements from this peer return; } const CNodeState* state = State(nodeid); // Decide the TxRequestTracker parameters for this announcement: - // - "preferred": if fPreferredDownload is set (= outbound, or PF_NOBAN permission) + // - "preferred": if fPreferredDownload is set (= outbound, or NetPermissionFlags::NoBan permission) // - "reqtime": current time plus delays for: // - NONPREF_PEER_TX_DELAY for announcements from non-preferred connections // - TXID_RELAY_DELAY for txid announcements while wtxid peers are available // - OVERLOADED_PEER_TX_DELAY for announcements from peers which have at least - // MAX_PEER_TX_REQUEST_IN_FLIGHT requests in flight (and don't have PF_RELAY). + // MAX_PEER_TX_REQUEST_IN_FLIGHT requests in flight (and don't have NetPermissionFlags::Relay). auto delay = std::chrono::microseconds{0}; const bool preferred = state->fPreferredDownload; if (!preferred) delay += NONPREF_PEER_TX_DELAY; if (!gtxid.IsWtxid() && m_wtxid_relay_peers > 0) delay += TXID_RELAY_DELAY; - const bool overloaded = !node.HasPermission(PF_RELAY) && + const bool overloaded = !node.HasPermission(NetPermissionFlags::Relay) && m_txrequest.CountInFlight(nodeid) >= MAX_PEER_TX_REQUEST_IN_FLIGHT; if (overloaded) delay += OVERLOADED_PEER_TX_DELAY; m_txrequest.ReceivedInv(nodeid, gtxid, preferred, current_time + delay); @@ -1637,14 +1637,14 @@ void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CInv& // disconnect node in case we have reached the outbound limit for serving historical blocks if (m_connman.OutboundTargetReached(true) && (((pindexBestHeader != nullptr) && (pindexBestHeader->GetBlockTime() - pindex->GetBlockTime() > HISTORICAL_BLOCK_AGE)) || inv.IsMsgFilteredBlk()) && - !pfrom.HasPermission(PF_DOWNLOAD) // nodes with the download permission may exceed target + !pfrom.HasPermission(NetPermissionFlags::Download) // nodes with the download permission may exceed target ) { LogPrint(BCLog::NET, "historical block serving limit reached, disconnect peer=%d\n", pfrom.GetId()); pfrom.fDisconnect = true; return; } // Avoid leaking prune-height by never sending blocks below the NODE_NETWORK_LIMITED threshold - if (!pfrom.HasPermission(PF_NOBAN) && ( + if (!pfrom.HasPermission(NetPermissionFlags::NoBan) && ( (((pfrom.GetLocalServices() & NODE_NETWORK_LIMITED) == NODE_NETWORK_LIMITED) && ((pfrom.GetLocalServices() & NODE_NETWORK) != NODE_NETWORK) && (m_chainman.ActiveChain().Tip()->nHeight - pindex->nHeight > (int)NODE_NETWORK_LIMITED_MIN_BLOCKS + 2 /* add two blocks buffer extension for possible races */) ) )) { LogPrint(BCLog::NET, "Ignore block request below NODE_NETWORK_LIMITED threshold, disconnect peer=%d\n", pfrom.GetId()); @@ -2738,7 +2738,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, bool fBlocksOnly = m_ignore_incoming_txs || (pfrom.m_tx_relay == nullptr); // Allow peers with relay permission to send data other than blocks in blocks only mode - if (pfrom.HasPermission(PF_RELAY)) { + if (pfrom.HasPermission(NetPermissionFlags::Relay)) { fBlocksOnly = false; } @@ -2952,7 +2952,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, } LOCK(cs_main); - if (m_chainman.ActiveChainstate().IsInitialBlockDownload() && !pfrom.HasPermission(PF_DOWNLOAD)) { + if (m_chainman.ActiveChainstate().IsInitialBlockDownload() && !pfrom.HasPermission(NetPermissionFlags::Download)) { LogPrint(BCLog::NET, "Ignoring getheaders from peer=%d because node is in initial block download\n", pfrom.GetId()); return; } @@ -3011,7 +3011,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, // Stop processing the transaction early if // 1) We are in blocks only mode and peer has no relay permission // 2) This peer is a block-relay-only peer - if ((m_ignore_incoming_txs && !pfrom.HasPermission(PF_RELAY)) || (pfrom.m_tx_relay == nullptr)) + if ((m_ignore_incoming_txs && !pfrom.HasPermission(NetPermissionFlags::Relay)) || (pfrom.m_tx_relay == nullptr)) { LogPrint(BCLog::NET, "transaction sent in violation of protocol peer=%d\n", pfrom.GetId()); pfrom.fDisconnect = true; @@ -3056,7 +3056,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, // (older than our recency filter) if trying to DoS us, without any need // for witness malleation. if (AlreadyHaveTx(GenTxid(/* is_wtxid=*/true, wtxid))) { - if (pfrom.HasPermission(PF_FORCERELAY)) { + if (pfrom.HasPermission(NetPermissionFlags::ForceRelay)) { // Always relay transactions received from peers with forcerelay // permission, even if they were already in the mempool, allowing // the node to function as a gateway for nodes hidden behind it. @@ -3585,8 +3585,8 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, pfrom.vAddrToSend.clear(); std::vector<CAddress> vAddr; - if (pfrom.HasPermission(PF_ADDR)) { - vAddr = m_connman.GetAddresses(MAX_ADDR_TO_SEND, MAX_PCT_ADDR_TO_SEND); + if (pfrom.HasPermission(NetPermissionFlags::Addr)) { + vAddr = m_connman.GetAddresses(MAX_ADDR_TO_SEND, MAX_PCT_ADDR_TO_SEND, /* network */ std::nullopt); } else { vAddr = m_connman.GetAddresses(pfrom, MAX_ADDR_TO_SEND, MAX_PCT_ADDR_TO_SEND); } @@ -3598,9 +3598,9 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, } if (msg_type == NetMsgType::MEMPOOL) { - if (!(pfrom.GetLocalServices() & NODE_BLOOM) && !pfrom.HasPermission(PF_MEMPOOL)) + if (!(pfrom.GetLocalServices() & NODE_BLOOM) && !pfrom.HasPermission(NetPermissionFlags::Mempool)) { - if (!pfrom.HasPermission(PF_NOBAN)) + if (!pfrom.HasPermission(NetPermissionFlags::NoBan)) { LogPrint(BCLog::NET, "mempool request with bloom filters disabled, disconnect peer=%d\n", pfrom.GetId()); pfrom.fDisconnect = true; @@ -3608,9 +3608,9 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, return; } - if (m_connman.OutboundTargetReached(false) && !pfrom.HasPermission(PF_MEMPOOL)) + if (m_connman.OutboundTargetReached(false) && !pfrom.HasPermission(NetPermissionFlags::Mempool)) { - if (!pfrom.HasPermission(PF_NOBAN)) + if (!pfrom.HasPermission(NetPermissionFlags::NoBan)) { LogPrint(BCLog::NET, "mempool request with bandwidth limit reached, disconnect peer=%d\n", pfrom.GetId()); pfrom.fDisconnect = true; @@ -3825,8 +3825,8 @@ bool PeerManagerImpl::MaybeDiscourageAndDisconnect(CNode& pnode, Peer& peer) peer.m_should_discourage = false; } // peer.m_misbehavior_mutex - if (pnode.HasPermission(PF_NOBAN)) { - // We never disconnect or discourage peers for bad behavior if they have the NOBAN permission flag + if (pnode.HasPermission(NetPermissionFlags::NoBan)) { + // We never disconnect or discourage peers for bad behavior if they have NetPermissionFlags::NoBan permission LogPrintf("Warning: not punishing noban peer %d!\n", peer.m_id); return false; } @@ -4463,7 +4463,7 @@ bool PeerManagerImpl::SendMessages(CNode* pto) if (pto->m_tx_relay != nullptr) { LOCK(pto->m_tx_relay->cs_tx_inventory); // Check whether periodic sends should happen - bool fSendTrickle = pto->HasPermission(PF_NOBAN); + bool fSendTrickle = pto->HasPermission(NetPermissionFlags::NoBan); if (pto->m_tx_relay->nNextInvSend < current_time) { fSendTrickle = true; if (pto->IsInboundConn()) { @@ -4620,12 +4620,12 @@ bool PeerManagerImpl::SendMessages(CNode* pto) // Detect whether this is a stalling initial-headers-sync peer if (pindexBestHeader->GetBlockTime() <= GetAdjustedTime() - 24 * 60 * 60) { if (current_time > state.m_headers_sync_timeout && nSyncStarted == 1 && (nPreferredDownload - state.fPreferredDownload >= 1)) { - // Disconnect a peer (without the noban permission) if it is our only sync peer, + // Disconnect a peer (without NetPermissionFlags::NoBan permission) if it is our only sync peer, // and we have others we could be using instead. // Note: If all our peers are inbound, then we won't // disconnect our sync peer for stalling; we have bigger // problems if we can't get any outbound peers. - if (!pto->HasPermission(PF_NOBAN)) { + if (!pto->HasPermission(NetPermissionFlags::NoBan)) { LogPrintf("Timeout downloading headers from peer=%d, disconnecting\n", pto->GetId()); pto->fDisconnect = true; return true; @@ -4712,7 +4712,7 @@ bool PeerManagerImpl::SendMessages(CNode* pto) !m_ignore_incoming_txs && pto->GetCommonVersion() >= FEEFILTER_VERSION && gArgs.GetBoolArg("-feefilter", DEFAULT_FEEFILTER) && - !pto->HasPermission(PF_FORCERELAY) // peers with the forcerelay permission should not filter txs to us + !pto->HasPermission(NetPermissionFlags::ForceRelay) // peers with the forcerelay permission should not filter txs to us ) { CAmount currentFilter = m_mempool.GetMinFee(gArgs.GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000).GetFeePerK(); static FeeFilterRounder g_filter_rounder{CFeeRate{DEFAULT_MIN_RELAY_TX_FEE}}; diff --git a/src/netaddress.cpp b/src/netaddress.cpp index d56ae78e92..352abae298 100644 --- a/src/netaddress.cpp +++ b/src/netaddress.cpp @@ -556,20 +556,61 @@ static std::string IPv4ToString(Span<const uint8_t> a) return strprintf("%u.%u.%u.%u", a[0], a[1], a[2], a[3]); } -static std::string IPv6ToString(Span<const uint8_t> a) +// Return an IPv6 address text representation with zero compression as described in RFC 5952 +// ("A Recommendation for IPv6 Address Text Representation"). +static std::string IPv6ToString(Span<const uint8_t> a, uint32_t scope_id) { assert(a.size() == ADDR_IPV6_SIZE); - // clang-format off - return strprintf("%x:%x:%x:%x:%x:%x:%x:%x", - ReadBE16(&a[0]), - ReadBE16(&a[2]), - ReadBE16(&a[4]), - ReadBE16(&a[6]), - ReadBE16(&a[8]), - ReadBE16(&a[10]), - ReadBE16(&a[12]), - ReadBE16(&a[14])); - // clang-format on + const std::array groups{ + ReadBE16(&a[0]), + ReadBE16(&a[2]), + ReadBE16(&a[4]), + ReadBE16(&a[6]), + ReadBE16(&a[8]), + ReadBE16(&a[10]), + ReadBE16(&a[12]), + ReadBE16(&a[14]), + }; + + // The zero compression implementation is inspired by Rust's std::net::Ipv6Addr, see + // https://github.com/rust-lang/rust/blob/cc4103089f40a163f6d143f06359cba7043da29b/library/std/src/net/ip.rs#L1635-L1683 + struct ZeroSpan { + size_t start_index{0}; + size_t len{0}; + }; + + // Find longest sequence of consecutive all-zero fields. Use first zero sequence if two or more + // zero sequences of equal length are found. + ZeroSpan longest, current; + for (size_t i{0}; i < groups.size(); ++i) { + if (groups[i] != 0) { + current = {i + 1, 0}; + continue; + } + current.len += 1; + if (current.len > longest.len) { + longest = current; + } + } + + std::string r; + r.reserve(39); + for (size_t i{0}; i < groups.size(); ++i) { + // Replace the longest sequence of consecutive all-zero fields with two colons ("::"). + if (longest.len >= 2 && i >= longest.start_index && i < longest.start_index + longest.len) { + if (i == longest.start_index) { + r += "::"; + } + continue; + } + r += strprintf("%s%x", ((!r.empty() && r.back() != ':') ? ":" : ""), groups[i]); + } + + if (scope_id != 0) { + r += strprintf("%%%u", scope_id); + } + + return r; } std::string CNetAddr::ToStringIP() const @@ -578,16 +619,7 @@ std::string CNetAddr::ToStringIP() const case NET_IPV4: return IPv4ToString(m_addr); case NET_IPV6: { - CService serv(*this, 0); - struct sockaddr_storage sockaddr; - socklen_t socklen = sizeof(sockaddr); - if (serv.GetSockAddr((struct sockaddr*)&sockaddr, &socklen)) { - char name[1025] = ""; - if (!getnameinfo((const struct sockaddr*)&sockaddr, socklen, name, - sizeof(name), nullptr, 0, NI_NUMERICHOST)) - return std::string(name); - } - return IPv6ToString(m_addr); + return IPv6ToString(m_addr, m_scope_id); } case NET_ONION: switch (m_addr.size()) { @@ -611,7 +643,7 @@ std::string CNetAddr::ToStringIP() const case NET_I2P: return EncodeBase32(m_addr, false /* don't pad with = */) + ".b32.i2p"; case NET_CJDNS: - return IPv6ToString(m_addr); + return IPv6ToString(m_addr, 0); case NET_INTERNAL: return EncodeBase32(m_addr) + ".internal"; case NET_UNROUTABLE: // m_net is never and should not be set to NET_UNROUTABLE diff --git a/src/qt/bitcoinstrings.cpp b/src/qt/bitcoinstrings.cpp index ab631459fb..dd4df44ed9 100644 --- a/src/qt/bitcoinstrings.cpp +++ b/src/qt/bitcoinstrings.cpp @@ -115,9 +115,6 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "Unable to replay blocks. You will need to rebuild the database using -" "reindex-chainstate."), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Unable to rewind the database to a pre-fork state. You will need to " -"redownload the blockchain"), -QT_TRANSLATE_NOOP("bitcoin-core", "" "Unknown wallet file format \"%s\" provided. Please provide one of \"bdb\" or " "\"sqlite\"."), QT_TRANSLATE_NOOP("bitcoin-core", "" @@ -129,6 +126,9 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "Warning: We do not appear to fully agree with our peers! You may need to " "upgrade, or other nodes may need to upgrade."), QT_TRANSLATE_NOOP("bitcoin-core", "" +"Witness data for blocks after height %d requires validation. Please restart " +"with -reindex."), +QT_TRANSLATE_NOOP("bitcoin-core", "" "You need to rebuild the database using -reindex to go back to unpruned " "mode. This will redownload the entire blockchain"), QT_TRANSLATE_NOOP("bitcoin-core", "%s is set very high!"), @@ -173,7 +173,7 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Failed to rescan the wallet during initializa QT_TRANSLATE_NOOP("bitcoin-core", "Failed to verify database"), QT_TRANSLATE_NOOP("bitcoin-core", "Fee rate (%s) is lower than the minimum fee rate setting (%s)"), QT_TRANSLATE_NOOP("bitcoin-core", "Ignoring duplicate -wallet %s."), -QT_TRANSLATE_NOOP("bitcoin-core", "Importing..."), +QT_TRANSLATE_NOOP("bitcoin-core", "Importing…"), QT_TRANSLATE_NOOP("bitcoin-core", "Incorrect or no genesis block found. Wrong datadir for network?"), QT_TRANSLATE_NOOP("bitcoin-core", "Initialization sanity check failed. %s is shutting down."), QT_TRANSLATE_NOOP("bitcoin-core", "Insufficient funds"), @@ -186,20 +186,20 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -discardfee=<amount>: '%s' QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -fallbackfee=<amount>: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -paytxfee=<amount>: '%s' (must be at least %s)"), QT_TRANSLATE_NOOP("bitcoin-core", "Invalid netmask specified in -whitelist: '%s'"), -QT_TRANSLATE_NOOP("bitcoin-core", "Loading P2P addresses..."), -QT_TRANSLATE_NOOP("bitcoin-core", "Loading banlist..."), -QT_TRANSLATE_NOOP("bitcoin-core", "Loading block index..."), -QT_TRANSLATE_NOOP("bitcoin-core", "Loading wallet..."), +QT_TRANSLATE_NOOP("bitcoin-core", "Loading P2P addresses…"), +QT_TRANSLATE_NOOP("bitcoin-core", "Loading banlist…"), +QT_TRANSLATE_NOOP("bitcoin-core", "Loading block index…"), +QT_TRANSLATE_NOOP("bitcoin-core", "Loading wallet…"), QT_TRANSLATE_NOOP("bitcoin-core", "Need to specify a port with -whitebind: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "No proxy server specified. Use -proxy=<ip> or -proxy=<ip:port>."), QT_TRANSLATE_NOOP("bitcoin-core", "Not enough file descriptors available."), QT_TRANSLATE_NOOP("bitcoin-core", "Prune cannot be configured with a negative value."), +QT_TRANSLATE_NOOP("bitcoin-core", "Prune mode is incompatible with -coinstatsindex."), QT_TRANSLATE_NOOP("bitcoin-core", "Prune mode is incompatible with -txindex."), -QT_TRANSLATE_NOOP("bitcoin-core", "Pruning blockstore..."), +QT_TRANSLATE_NOOP("bitcoin-core", "Pruning blockstore…"), QT_TRANSLATE_NOOP("bitcoin-core", "Reducing -maxconnections from %d to %d, because of system limitations."), -QT_TRANSLATE_NOOP("bitcoin-core", "Replaying blocks..."), -QT_TRANSLATE_NOOP("bitcoin-core", "Rescanning..."), -QT_TRANSLATE_NOOP("bitcoin-core", "Rewinding blocks..."), +QT_TRANSLATE_NOOP("bitcoin-core", "Replaying blocks…"), +QT_TRANSLATE_NOOP("bitcoin-core", "Rescanning…"), QT_TRANSLATE_NOOP("bitcoin-core", "SQLiteDatabase: Failed to execute statement to verify database: %s"), QT_TRANSLATE_NOOP("bitcoin-core", "SQLiteDatabase: Failed to fetch sqlite wallet schema version: %s"), QT_TRANSLATE_NOOP("bitcoin-core", "SQLiteDatabase: Failed to fetch the application id: %s"), @@ -212,7 +212,7 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Specified -walletdir \"%s\" does not exist"), QT_TRANSLATE_NOOP("bitcoin-core", "Specified -walletdir \"%s\" is a relative path"), QT_TRANSLATE_NOOP("bitcoin-core", "Specified -walletdir \"%s\" is not a directory"), QT_TRANSLATE_NOOP("bitcoin-core", "Specified blocks directory \"%s\" does not exist."), -QT_TRANSLATE_NOOP("bitcoin-core", "Starting network threads..."), +QT_TRANSLATE_NOOP("bitcoin-core", "Starting network threads…"), QT_TRANSLATE_NOOP("bitcoin-core", "The source code is available from %s."), QT_TRANSLATE_NOOP("bitcoin-core", "The specified config file %s does not exist"), QT_TRANSLATE_NOOP("bitcoin-core", "The transaction amount is too small to pay the fee"), @@ -241,8 +241,8 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Unsupported logging category %s=%s."), QT_TRANSLATE_NOOP("bitcoin-core", "Upgrading UTXO database"), QT_TRANSLATE_NOOP("bitcoin-core", "Upgrading txindex database"), QT_TRANSLATE_NOOP("bitcoin-core", "User Agent comment (%s) contains unsafe characters."), -QT_TRANSLATE_NOOP("bitcoin-core", "Verifying blocks..."), -QT_TRANSLATE_NOOP("bitcoin-core", "Verifying wallet(s)..."), +QT_TRANSLATE_NOOP("bitcoin-core", "Verifying blocks…"), +QT_TRANSLATE_NOOP("bitcoin-core", "Verifying wallet(s)…"), QT_TRANSLATE_NOOP("bitcoin-core", "Wallet needed to be rewritten: restart %s to complete"), QT_TRANSLATE_NOOP("bitcoin-core", "Warning: unknown new rules activated (versionbit %i)"), }; diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index 998d38e10d..4691937380 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -29,6 +29,7 @@ #include <shlwapi.h> #endif +#include <QAbstractButton> #include <QAbstractItemView> #include <QApplication> #include <QClipboard> @@ -121,6 +122,11 @@ void setupAddressWidget(QValidatedLineEdit *widget, QWidget *parent) widget->setCheckValidator(new BitcoinAddressCheckValidator(parent)); } +void AddButtonShortcut(QAbstractButton* button, const QKeySequence& shortcut) +{ + QObject::connect(new QShortcut(shortcut, button), &QShortcut::activated, [button]() { button->animateClick(); }); +} + bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out) { // return if URI is not valid or is no bitcoin: URI diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h index a1cf274354..9c2ad74e1e 100644 --- a/src/qt/guiutil.h +++ b/src/qt/guiutil.h @@ -36,10 +36,12 @@ namespace interfaces } QT_BEGIN_NAMESPACE +class QAbstractButton; class QAbstractItemView; class QAction; class QDateTime; class QFont; +class QKeySequence; class QLineEdit; class QMenu; class QPoint; @@ -65,6 +67,14 @@ namespace GUIUtil // Set up widget for address void setupAddressWidget(QValidatedLineEdit *widget, QWidget *parent); + /** + * Connects an additional shortcut to a QAbstractButton. Works around the + * one shortcut limitation of the button's shortcut property. + * @param[in] button QAbstractButton to assign shortcut to + * @param[in] shortcut QKeySequence to use as shortcut + */ + void AddButtonShortcut(QAbstractButton* button, const QKeySequence& shortcut); + // Parse "bitcoin:" URI into recipient object, return true on successful parsing bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out); bool parseBitcoinURI(QString uri, SendCoinsRecipient *out); diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts index e2640c8884..a911f8012e 100644 --- a/src/qt/locale/bitcoin_en.ts +++ b/src/qt/locale/bitcoin_en.ts @@ -95,22 +95,27 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+7"/> - <source>&Copy Address</source> + <location line="+8"/> + <source>Copy Address</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Copy &Label</source> + <source>Copy Label</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>&Edit</source> + <source>Edit</source> <translation type="unfinished"></translation> </message> <message> - <location line="+179"/> + <location line="+3"/> + <source>Delete</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+161"/> <source>Export Address List</source> <translation type="unfinished"></translation> </message> @@ -313,7 +318,7 @@ Signing is only possible with addresses of the type 'legacy'.</source> <context> <name>BitcoinApplication</name> <message> - <location filename="../bitcoin.cpp" line="+423"/> + <location filename="../bitcoin.cpp" line="+421"/> <source>Runaway exception</source> <translation type="unfinished"></translation> </message> @@ -336,17 +341,7 @@ Signing is only possible with addresses of the type 'legacy'.</source> <context> <name>BitcoinGUI</name> <message> - <location filename="../bitcoingui.cpp" line="+325"/> - <source>Sign &message...</source> - <translation>Sign &message...</translation> - </message> - <message> - <location line="+668"/> - <source>Synchronizing with network...</source> - <translation>Synchronizing with network...</translation> - </message> - <message> - <location line="-746"/> + <location filename="../bitcoingui.cpp" line="+247"/> <source>&Overview</source> <translation>&Overview</translation> </message> @@ -396,42 +391,12 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation>Show information about Qt</translation> </message> <message> - <location line="+2"/> - <source>&Options...</source> - <translation>&Options...</translation> - </message> - <message> - <location line="+1"/> - <source>Modify configuration options for %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+6"/> - <source>&Encrypt Wallet...</source> - <translation>&Encrypt Wallet...</translation> - </message> - <message> <location line="+3"/> - <source>&Backup Wallet...</source> - <translation>&Backup Wallet...</translation> - </message> - <message> - <location line="+2"/> - <source>&Change Passphrase...</source> - <translation>&Change Passphrase...</translation> - </message> - <message> - <location line="+22"/> - <source>Open &URI...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+11"/> - <source>Create Wallet...</source> + <source>Modify configuration options for %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> + <location line="+46"/> <source>Create a new wallet</source> <translation type="unfinished"></translation> </message> @@ -456,17 +421,7 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+27"/> - <source>Syncing Headers (%1%)...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+57"/> - <source>Reindexing blocks on disk...</source> - <translation>Reindexing blocks on disk...</translation> - </message> - <message> - <location line="+315"/> + <location line="+399"/> <source>Proxy is <b>enabled</b>: %1</source> <translation type="unfinished"></translation> </message> @@ -486,12 +441,7 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation>Change the passphrase used for wallet encryption</translation> </message> <message> - <location line="+3"/> - <source>&Verify message...</source> - <translation>&Verify message...</translation> - </message> - <message> - <location line="-73"/> + <location line="-70"/> <source>&Send</source> <translation>&Send</translation> </message> @@ -501,7 +451,12 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation>&Receive</translation> </message> <message> - <location line="+50"/> + <location line="+46"/> + <source>&Options…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> <source>&Show / Hide</source> <translation>&Show / Hide</translation> </message> @@ -511,22 +466,77 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation>Show or hide the main Window</translation> </message> <message> - <location line="+3"/> + <location line="+2"/> + <source>&Encrypt Wallet…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> <source>Encrypt the private keys that belong to your wallet</source> <translation>Encrypt the private keys that belong to your wallet</translation> </message> <message> - <location line="+7"/> + <location line="+2"/> + <source>&Backup Wallet…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>&Change Passphrase…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Sign &message…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> <source>Sign messages with your Bitcoin addresses to prove you own them</source> <translation>Sign messages with your Bitcoin addresses to prove you own them</translation> </message> <message> - <location line="+2"/> + <location line="+1"/> + <source>&Verify message…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> <source>Verify messages to ensure they were signed with specified Bitcoin addresses</source> <translation>Verify messages to ensure they were signed with specified Bitcoin addresses</translation> </message> <message> - <location line="+129"/> + <location line="+1"/> + <source>&Load PSBT from file…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Load PSBT from clipboard…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>Open &URI…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>Close Wallet…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Create Wallet…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Close All Wallets…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+97"/> <source>&File</source> <translation>&File</translation> </message> @@ -546,7 +556,37 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation>Tabs toolbar</translation> </message> <message> - <location line="-281"/> + <location line="+400"/> + <source>Syncing Headers (%1%)…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+46"/> + <source>Synchronizing with network…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>Indexing blocks on disk…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Processing blocks on disk…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Reindexing blocks on disk…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Connecting to peers…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-744"/> <source>Request payments (generates QR codes and bitcoin: URIs)</source> <translation type="unfinished"></translation> </message> @@ -573,18 +613,8 @@ Signing is only possible with addresses of the type 'legacy'.</source> <numerusform>%n active connections to Bitcoin network</numerusform> </translation> </message> - <message> - <location line="+80"/> - <source>Indexing blocks on disk...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+2"/> - <source>Processing blocks on disk...</source> - <translation type="unfinished"></translation> - </message> <message numerus="yes"> - <location line="+19"/> + <location line="+101"/> <source>Processed %n block(s) of transaction history.</source> <translation> <numerusform>Processed %n block of transaction history.</numerusform> @@ -597,7 +627,12 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation>%1 behind</translation> </message> <message> - <location line="+24"/> + <location line="+5"/> + <source>Catching up…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+19"/> <source>Last received block was generated %1 ago.</source> <translation>Last received block was generated %1 ago.</translation> </message> @@ -627,22 +662,12 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation>Up to date</translation> </message> <message> - <location line="-694"/> - <source>&Load PSBT from file...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+1"/> + <location line="-693"/> <source>Load Partially Signed Bitcoin Transaction</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> - <source>Load PSBT from clipboard...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+1"/> + <location line="+2"/> <source>Load Partially Signed Bitcoin Transaction from clipboard</source> <translation type="unfinished"></translation> </message> @@ -682,22 +707,12 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> - <source>Close Wallet...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+1"/> + <location line="+4"/> <source>Close wallet</source> <translation type="unfinished"></translation> </message> <message> - <location line="+6"/> - <source>Close All Wallets...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+1"/> + <location line="+7"/> <source>Close all wallets</source> <translation type="unfinished"></translation> </message> @@ -752,17 +767,7 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+249"/> - <source>Connecting to peers...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+37"/> - <source>Catching up...</source> - <translation>Catching up...</translation> - </message> - <message> - <location line="+47"/> + <location line="+333"/> <source>Error: %1</source> <translation type="unfinished"></translation> </message> @@ -936,7 +941,7 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation type="unfinished">Confirmed</translation> </message> <message> - <location filename="../coincontroldialog.cpp" line="+54"/> + <location filename="../coincontroldialog.cpp" line="+55"/> <source>Copy address</source> <translation type="unfinished"></translation> </message> @@ -947,17 +952,17 @@ Signing is only possible with addresses of the type 'legacy'.</source> </message> <message> <location line="+1"/> - <location line="+26"/> + <location line="+9"/> <source>Copy amount</source> <translation type="unfinished"></translation> </message> <message> - <location line="-25"/> + <location line="-8"/> <source>Copy transaction ID</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> + <location line="+2"/> <source>Lock unspent</source> <translation type="unfinished"></translation> </message> @@ -967,7 +972,7 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+22"/> + <location line="+4"/> <source>Copy quantity</source> <translation type="unfinished"></translation> </message> @@ -1042,7 +1047,7 @@ Signing is only possible with addresses of the type 'legacy'.</source> <name>CreateWalletActivity</name> <message> <location filename="../walletcontroller.cpp" line="+250"/> - <source>Creating Wallet <b>%1</b>...</source> + <source>Creating Wallet <b>%1</b>…</source> <translation type="unfinished"></translation> </message> <message> @@ -1200,7 +1205,7 @@ Signing is only possible with addresses of the type 'legacy'.</source> <context> <name>FreespaceChecker</name> <message> - <location filename="../intro.cpp" line="+72"/> + <location filename="../intro.cpp" line="+73"/> <source>A new data directory will be created.</source> <translation>A new data directory will be created.</translation> </message> @@ -1266,12 +1271,22 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+10"/> + <location line="+32"/> + <source>Limit block chain storage to</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> <source>Reverting this setting requires re-downloading the entire blockchain. It is faster to download the full chain first and prune it later. Disables some advanced features.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+10"/> + <location line="+7"/> + <source> GB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-32"/> <source>This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off.</source> <translation type="unfinished"></translation> </message> @@ -1281,7 +1296,7 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation type="unfinished"></translation> </message> <message> - <location line="-170"/> + <location line="-160"/> <source>Use the default data directory</source> <translation>Use the default data directory</translation> </message> @@ -1296,12 +1311,22 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation type="unfinished">Bitcoin</translation> </message> <message> - <location line="+8"/> - <source>Discard blocks after verification, except most recent %1 GB (prune)</source> + <location line="+162"/> + <source>%1 GB of free space available</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>(of %1 GB needed)</source> <translation type="unfinished"></translation> </message> <message> - <location line="+212"/> + <location line="+3"/> + <source>(%1 GB needed for full chain)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+72"/> <source>At least %1 GB of data will be stored in this directory, and it will grow over time.</source> <translation type="unfinished"></translation> </message> @@ -1310,8 +1335,17 @@ Signing is only possible with addresses of the type 'legacy'.</source> <source>Approximately %1 GB of data will be stored in this directory.</source> <translation type="unfinished"></translation> </message> + <message numerus="yes"> + <location line="+7"/> + <source>(sufficient to restore backups %n day(s) old)</source> + <comment>block chain pruning</comment> + <translation type="unfinished"> + <numerusform></numerusform> + <numerusform></numerusform> + </translation> + </message> <message> - <location line="+4"/> + <location line="+2"/> <source>%1 will download and store a copy of the Bitcoin block chain.</source> <translation type="unfinished"></translation> </message> @@ -1321,7 +1355,7 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation type="unfinished"></translation> </message> <message> - <location line="-137"/> + <location line="-142"/> <source>Error: Specified data directory "%1" cannot be created.</source> <translation type="unfinished"></translation> </message> @@ -1330,30 +1364,6 @@ Signing is only possible with addresses of the type 'legacy'.</source> <source>Error</source> <translation>Error</translation> </message> - <message numerus="yes"> - <location line="+21"/> - <source>%n GB of free space available</source> - <translation> - <numerusform>%n GB of free space available</numerusform> - <numerusform>%n GB of free space available</numerusform> - </translation> - </message> - <message numerus="yes"> - <location line="+2"/> - <source>(of %n GB needed)</source> - <translation> - <numerusform>(of %n GB needed)</numerusform> - <numerusform>(of %n GB needed)</numerusform> - </translation> - </message> - <message numerus="yes"> - <location line="+3"/> - <source>(%n GB needed for full chain)</source> - <translation type="unfinished"> - <numerusform></numerusform> - <numerusform></numerusform> - </translation> - </message> </context> <context> <name>ModalOverlay</name> @@ -1380,12 +1390,18 @@ Signing is only possible with addresses of the type 'legacy'.</source> <message> <location line="+7"/> <location line="+26"/> - <location filename="../modaloverlay.cpp" line="+153"/> - <source>Unknown...</source> + <location filename="../modaloverlay.cpp" line="+152"/> + <source>Unknown…</source> <translation type="unfinished"></translation> </message> <message> - <location line="-13"/> + <location line="+44"/> + <location line="+20"/> + <source>calculating…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-77"/> <source>Last block time</source> <translation type="unfinished">Last block time</translation> </message> @@ -1395,18 +1411,12 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+34"/> + <location line="+24"/> <source>Progress increase per hour</source> <translation type="unfinished"></translation> </message> <message> - <location line="+7"/> <location line="+20"/> - <source>calculating...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="-7"/> <source>Estimated time left until synced</source> <translation type="unfinished"></translation> </message> @@ -1421,13 +1431,13 @@ Signing is only possible with addresses of the type 'legacy'.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../modaloverlay.cpp" line="-119"/> + <location filename="../modaloverlay.cpp" line="-118"/> <source>%1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+125"/> - <source>Unknown. Syncing Headers (%1, %2%)...</source> + <location line="+124"/> + <source>Unknown. Syncing Headers (%1, %2%)…</source> <translation type="unfinished"></translation> </message> </context> @@ -1463,7 +1473,7 @@ Signing is only possible with addresses of the type 'legacy'.</source> </message> <message> <location line="+2"/> - <source>Opening Wallet <b>%1</b>...</source> + <source>Opening Wallet <b>%1</b>…</source> <translation type="unfinished"></translation> </message> </context> @@ -1978,7 +1988,7 @@ Signing is only possible with addresses of the type 'legacy'.</source> </message> <message> <location line="+7"/> - <source>Save...</source> + <source>Save…</source> <translation type="unfinished"></translation> </message> <message> @@ -2122,19 +2132,19 @@ Signing is only possible with addresses of the type 'legacy'.</source> </message> <message> <location line="+50"/> - <location line="+13"/> + <location line="+16"/> <location line="+6"/> <location line="+7"/> <source>URI handling</source> <translation type="unfinished"></translation> </message> <message> - <location line="-26"/> + <location line="-29"/> <source>'bitcoin://' is not a valid URI. Use 'bitcoin:' instead.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+17"/> <location line="+23"/> <source>Cannot process payment request because BIP70 is not supported. Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored. @@ -2142,12 +2152,7 @@ If you are receiving this error you should request the merchant provide a BIP21 <translation type="unfinished"></translation> </message> <message> - <location line="-18"/> - <source>Invalid payment address %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+8"/> + <location line="-10"/> <source>URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters.</source> <translation type="unfinished"></translation> </message> @@ -2160,7 +2165,7 @@ If you are receiving this error you should request the merchant provide a BIP21 <context> <name>PeerTableModel</name> <message> - <location filename="../peertablemodel.h" line="+91"/> + <location filename="../peertablemodel.h" line="+77"/> <source>User Agent</source> <translation type="unfinished"></translation> </message> @@ -2213,7 +2218,7 @@ If you are receiving this error you should request the merchant provide a BIP21 <translation type="unfinished"></translation> </message> <message> - <location line="+532"/> + <location line="+535"/> <source>Unroutable</source> <translation type="unfinished"></translation> </message> @@ -2389,11 +2394,11 @@ If you are receiving this error you should request the merchant provide a BIP21 </message> <message> <location line="+63"/> - <source>%1 didn't yet exit safely...</source> + <source>%1 didn't yet exit safely…</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../modaloverlay.cpp" line="-36"/> + <location filename="../modaloverlay.cpp" line="-35"/> <source>unknown</source> <translation type="unfinished"></translation> </message> @@ -2402,16 +2407,16 @@ If you are receiving this error you should request the merchant provide a BIP21 <name>QRImageWidget</name> <message> <location filename="../qrimagewidget.cpp" line="+30"/> - <source>&Save Image...</source> + <source>Save Image…</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> - <source>&Copy Image</source> + <location line="+1"/> + <source>Copy Image</source> <translation type="unfinished"></translation> </message> <message> - <location line="+13"/> + <location line="+11"/> <source>Resulting URI too long, try to reduce the text for label / message.</source> <translation type="unfinished"></translation> </message> @@ -2451,13 +2456,13 @@ If you are receiving this error you should request the merchant provide a BIP21 <location line="+23"/> <location line="+36"/> <location line="+23"/> - <location line="+710"/> + <location line="+722"/> <location line="+26"/> <location line="+26"/> <location line="+23"/> <location line="+23"/> <location line="+23"/> - <location line="+26"/> + <location line="+29"/> <location line="+26"/> <location line="+23"/> <location line="+23"/> @@ -2474,12 +2479,12 @@ If you are receiving this error you should request the merchant provide a BIP21 <location line="+23"/> <location line="+23"/> <location line="+26"/> - <location filename="../rpcconsole.h" line="+141"/> + <location filename="../rpcconsole.h" line="+137"/> <source>N/A</source> <translation>N/A</translation> </message> <message> - <location line="-1534"/> + <location line="-1549"/> <source>Client version</source> <translation>Client version</translation> </message> @@ -2520,12 +2525,12 @@ If you are receiving this error you should request the merchant provide a BIP21 </message> <message> <location line="+29"/> - <location line="+910"/> + <location line="+922"/> <source>Network</source> <translation>Network</translation> </message> <message> - <location line="-903"/> + <location line="-915"/> <source>Name</source> <translation type="unfinished"></translation> </message> @@ -2571,29 +2576,29 @@ If you are receiving this error you should request the merchant provide a BIP21 </message> <message> <location line="+80"/> - <location line="+693"/> + <location line="+708"/> <source>Received</source> <translation type="unfinished"></translation> </message> <message> - <location line="-613"/> - <location line="+590"/> + <location line="-628"/> + <location line="+605"/> <source>Sent</source> <translation type="unfinished"></translation> </message> <message> - <location line="-549"/> + <location line="-564"/> <source>&Peers</source> <translation type="unfinished"></translation> </message> <message> - <location line="+67"/> + <location line="+76"/> <source>Banned peers</source> <translation type="unfinished"></translation> </message> <message> - <location line="+65"/> - <location filename="../rpcconsole.cpp" line="+1104"/> + <location line="+68"/> + <location filename="../rpcconsole.cpp" line="+1033"/> <source>Select a peer to view detailed information.</source> <translation type="unfinished"></translation> </message> @@ -2603,7 +2608,7 @@ If you are receiving this error you should request the merchant provide a BIP21 <translation type="unfinished"></translation> </message> <message> - <location line="+121"/> + <location line="+124"/> <source>Starting Block</source> <translation type="unfinished"></translation> </message> @@ -2628,13 +2633,13 @@ If you are receiving this error you should request the merchant provide a BIP21 <translation type="unfinished"></translation> </message> <message> - <location line="-1501"/> - <location line="+1069"/> + <location line="-1516"/> + <location line="+1081"/> <source>User Agent</source> <translation type="unfinished"></translation> </message> <message> - <location line="-1143"/> + <location line="-1155"/> <source>Node window</source> <translation type="unfinished"></translation> </message> @@ -2659,7 +2664,7 @@ If you are receiving this error you should request the merchant provide a BIP21 <translation type="unfinished"></translation> </message> <message> - <location line="+546"/> + <location line="+558"/> <source>Permissions</source> <translation type="unfinished"></translation> </message> @@ -2684,7 +2689,7 @@ If you are receiving this error you should request the merchant provide a BIP21 <translation type="unfinished"></translation> </message> <message> - <location line="+23"/> + <location line="+26"/> <source>Whether the peer requested us to relay transactions.</source> <translation type="unfinished"></translation> </message> @@ -2764,7 +2769,7 @@ If you are receiving this error you should request the merchant provide a BIP21 <translation type="unfinished"></translation> </message> <message> - <location line="-1273"/> + <location line="-1288"/> <source>Last block time</source> <translation>Last block time</translation> </message> @@ -2789,7 +2794,7 @@ If you are receiving this error you should request the merchant provide a BIP21 <translation type="unfinished"></translation> </message> <message> - <location filename="../rpcconsole.cpp" line="-242"/> + <location filename="../rpcconsole.cpp" line="-181"/> <source>In:</source> <translation type="unfinished"></translation> </message> @@ -2809,31 +2814,6 @@ If you are receiving this error you should request the merchant provide a BIP21 <translation>Clear console</translation> </message> <message> - <location filename="../rpcconsole.cpp" line="-242"/> - <source>1 &hour</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+1"/> - <source>1 &day</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+1"/> - <source>1 &week</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+1"/> - <source>1 &year</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="-4"/> - <source>&Disconnect</source> - <translation type="unfinished"></translation> - </message> - <message> <location filename="../rpcconsole.h" line="-1"/> <source>Yes</source> <translation type="unfinished"></translation> @@ -2864,7 +2844,7 @@ If you are receiving this error you should request the merchant provide a BIP21 <translation type="unfinished"></translation> </message> <message> - <location filename="../rpcconsole.cpp" line="-155"/> + <location filename="../rpcconsole.cpp" line="-379"/> <source>Inbound: initiated by peer</source> <translation type="unfinished"></translation> </message> @@ -2909,12 +2889,7 @@ If you are receiving this error you should request the merchant provide a BIP21 <translation type="unfinished"></translation> </message> <message> - <location line="+182"/> - <source>&Unban</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+164"/> + <location line="+327"/> <source>Welcome to the %1 RPC console.</source> <translation type="unfinished"></translation> </message> @@ -2949,17 +2924,47 @@ If you are receiving this error you should request the merchant provide a BIP21 <translation type="unfinished"></translation> </message> <message> - <location line="+178"/> + <location line="+117"/> <source>(peer id: %1)</source> <translation type="unfinished"></translation> </message> <message> - <location line="-180"/> + <location line="-119"/> <source>Executing command using "%1" wallet</source> <translation type="unfinished"></translation> </message> <message> - <location line="+182"/> + <location line="-280"/> + <source>Disconnect</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>1 hour</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>1 day</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>1 week</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>1 year</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+19"/> + <source>Unban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+378"/> <source>via %1</source> <translation type="unfinished"></translation> </message> @@ -3068,7 +3073,7 @@ If you are receiving this error you should request the merchant provide a BIP21 <translation type="unfinished"></translation> </message> <message> - <location filename="../receivecoinsdialog.cpp" line="+46"/> + <location filename="../receivecoinsdialog.cpp" line="+47"/> <source>Copy URI</source> <translation type="unfinished"></translation> </message> @@ -3093,7 +3098,7 @@ If you are receiving this error you should request the merchant provide a BIP21 <translation type="unfinished"></translation> </message> <message> - <location line="+140"/> + <location line="+125"/> <source>Could not unlock wallet.</source> <translation type="unfinished"></translation> </message> @@ -3107,7 +3112,7 @@ If you are receiving this error you should request the merchant provide a BIP21 <name>ReceiveRequestDialog</name> <message> <location filename="../forms/receiverequestdialog.ui" line="+14"/> - <source>Request payment to ...</source> + <source>Request payment to …</source> <translation type="unfinished"></translation> </message> <message> @@ -3147,7 +3152,7 @@ If you are receiving this error you should request the merchant provide a BIP21 </message> <message> <location line="+10"/> - <source>&Save Image...</source> + <source>&Save Image…</source> <translation type="unfinished"></translation> </message> <message> @@ -3213,12 +3218,7 @@ If you are receiving this error you should request the merchant provide a BIP21 <translation type="unfinished"></translation> </message> <message> - <location line="+20"/> - <source>Inputs...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+10"/> + <location line="+30"/> <source>automatically selected</source> <translation type="unfinished"></translation> </message> @@ -3273,12 +3273,7 @@ If you are receiving this error you should request the merchant provide a BIP21 <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> - <source>Choose...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+24"/> + <location line="+38"/> <source>Using the fallbackfee can result in sending a transaction that will take several hours or days (or never) to confirm. Consider choosing your fee manually or wait until you have validated the complete chain.</source> <translation type="unfinished"></translation> </message> @@ -3288,14 +3283,7 @@ If you are receiving this error you should request the merchant provide a BIP21 <translation type="unfinished"></translation> </message> <message> - <location line="+77"/> - <source>Specify a custom fee per kB (1,000 bytes) of the transaction's virtual size. - -Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis per kB" for a transaction size of 500 bytes (half of 1 kB) would ultimately yield a fee of only 50 satoshis.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+5"/> + <location line="+82"/> <source>per kilobyte</source> <translation type="unfinished"></translation> </message> @@ -3315,12 +3303,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos <translation type="unfinished"></translation> </message> <message> - <location line="+49"/> - <source>(Smart fee not initialized yet. This usually takes a few blocks...)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+166"/> + <location line="+215"/> <source>Send to multiple recipients at once</source> <translation>Send to multiple recipients at once</translation> </message> @@ -3335,17 +3318,34 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos <translation type="unfinished"></translation> </message> <message> - <location line="-800"/> + <location line="-1033"/> + <source>Inputs…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+233"/> <source>Dust:</source> <translation type="unfinished"></translation> </message> <message> - <location line="+457"/> + <location line="+398"/> + <source>Choose…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+59"/> <source>Hide transaction fee settings</source> <translation type="unfinished"></translation> </message> <message> - <location line="+86"/> + <location line="+51"/> + <source>Specify a custom fee per kB (1,000 bytes) of the transaction's virtual size. + +Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satoshis per kvB" for a transaction size of 500 virtual bytes (half of 1 kvB) would ultimately yield a fee of only 50 satoshis.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+35"/> <source>When there is less transaction volume than space in the blocks, miners as well as relaying nodes may enforce a minimum fee. Paying only this minimum fee is just fine, but be aware that this can result in a never confirming transaction once there is more demand for bitcoin transactions than the network can process.</source> <translation type="unfinished"></translation> </message> @@ -3355,7 +3355,12 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos <translation type="unfinished"></translation> </message> <message> - <location line="+131"/> + <location line="+105"/> + <source>(Smart fee not initialized yet. This usually takes a few blocks…)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+26"/> <source>Confirmation time target:</source> <translation type="unfinished"></translation> </message> @@ -3465,7 +3470,12 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos <translation type="unfinished"></translation> </message> <message> - <location line="+71"/> + <location line="+52"/> + <source>To review recipient list click "Show Details…"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+19"/> <source>Create Unsigned</source> <translation type="unfinished"></translation> </message> @@ -3515,12 +3525,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos <translation type="unfinished"></translation> </message> <message> - <location line="+7"/> - <source>To review recipient list click "Show Details..."</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+18"/> + <location line="+25"/> <source>Confirm send coins</source> <translation type="unfinished"></translation> </message> @@ -3594,7 +3599,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos </translation> </message> <message> - <location line="+100"/> + <location line="+101"/> <source>Warning: Invalid Bitcoin address</source> <translation type="unfinished"></translation> </message> @@ -3733,7 +3738,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos <name>ShutdownWindow</name> <message> <location filename="../utilitydialog.cpp" line="+85"/> - <source>%1 is shutting down...</source> + <source>%1 is shutting down…</source> <translation type="unfinished"></translation> </message> <message> @@ -4366,12 +4371,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> - <source>Range...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+11"/> + <location line="+12"/> <source>Received with</source> <translation type="unfinished"></translation> </message> @@ -4406,17 +4406,17 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos <translation type="unfinished"></translation> </message> <message> - <location line="+63"/> + <location line="+75"/> <source>Abandon transaction</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> + <location line="-3"/> <source>Increase transaction fee</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> + <location line="-8"/> <source>Copy address</source> <translation type="unfinished"></translation> </message> @@ -4446,23 +4446,28 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> + <location line="+7"/> <source>Edit address label</source> <translation type="unfinished"></translation> </message> <message> - <location line="+186"/> + <location line="+161"/> <source>Comma separated file</source> <comment>Name of CSV file format</comment> <translation type="unfinished"></translation> </message> <message> - <location line="-185"/> + <location line="-167"/> <source>Show transaction details</source> <translation type="unfinished"></translation> </message> <message> - <location line="+184"/> + <location line="-96"/> + <source>Range…</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+262"/> <source>Export Transaction History</source> <translation type="unfinished"></translation> </message> @@ -4748,789 +4753,789 @@ Go to File > Open Wallet to load a wallet. <context> <name>bitcoin-core</name> <message> - <location filename="../bitcoinstrings.cpp" line="+31"/> - <source>Distributed under the MIT software license, see the accompanying file %s or %s</source> + <location filename="../bitcoinstrings.cpp" line="+12"/> + <source>The %s developers</source> <translation type="unfinished"></translation> </message> <message> - <location line="+41"/> - <source>Prune configured below the minimum of %d MiB. Please use a higher number.</source> + <location line="+1"/> + <source>%s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node)</source> + <location line="+3"/> + <source>-maxtxfee is set very high! Fees this large could be paid on a single transaction.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+124"/> - <source>Pruning blockstore...</source> + <location line="+3"/> + <source>Cannot downgrade wallet from version %i to version %i. Wallet version unchanged.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+37"/> - <source>Unable to start HTTP server. See debug log for details.</source> + <location line="+3"/> + <source>Cannot obtain a lock on data directory %s. %s is probably already running.</source> <translation type="unfinished"></translation> </message> <message> - <location line="-223"/> - <source>The %s developers</source> + <location line="+2"/> + <source>Cannot provide specific connections and have addrman find outgoing connections at the same.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+10"/> - <source>Cannot obtain a lock on data directory %s. %s is probably already running.</source> + <location line="+3"/> + <source>Cannot upgrade a non HD split wallet from version %i to version %i without upgrading to support pre-split keypool. Please use version %i or no version specified.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Cannot provide specific connections and have addrman find outgoing connections at the same.</source> + <location line="+4"/> + <source>Distributed under the MIT software license, see the accompanying file %s or %s</source> <translation type="unfinished"></translation> </message> <message> - <location line="+10"/> + <location line="+3"/> <source>Error reading %s! All keys read correctly, but transaction data or address book entries might be missing or incorrect.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+21"/> - <source>More than one onion bind address is provided. Using %s for the automatically created Tor onion service.</source> + <location line="+3"/> + <source>Error: Dumpfile format record is incorrect. Got "%s", expected "format".</source> <translation type="unfinished"></translation> </message> <message> - <location line="+11"/> - <source>Please check that your computer's date and time are correct! If your clock is wrong, %s will not work properly.</source> + <location line="+2"/> + <source>Error: Dumpfile identifier record is incorrect. Got "%s", expected "%s".</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s</source> <translation type="unfinished"></translation> </message> <message> <location line="+3"/> - <source>Please contribute if you find %s useful. Visit %s for further information about the software.</source> + <source>Error: Listening for incoming connections failed (listen returned error %s)</source> <translation type="unfinished"></translation> </message> <message> - <location line="+8"/> - <source>SQLiteDatabase: Failed to prepare the statement to fetch sqlite wallet schema version: %s</source> + <location line="+2"/> + <source>Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable -fallbackfee.</source> <translation type="unfinished"></translation> </message> <message> <location line="+3"/> - <source>SQLiteDatabase: Failed to prepare the statement to fetch the application id: %s</source> + <source>File %s already exists. If you are sure this is what you want, move it out of the way first.</source> <translation type="unfinished"></translation> </message> <message> <location line="+3"/> - <source>SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported</source> + <source>Invalid amount for -maxtxfee=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions)</source> <translation type="unfinished"></translation> </message> <message> <location line="+3"/> - <source>The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct</source> + <source>More than one onion bind address is provided. Using %s for the automatically created Tor onion service.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+11"/> - <source>This is a pre-release test build - use at your own risk - do not use for mining or merchant applications</source> + <location line="+3"/> + <source>No dump file provided. To use createfromdump, -dumpfile=<filename> must be provided.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+6"/> - <source>This is the transaction fee you may discard if change is smaller than dust at this level</source> + <location line="+3"/> + <source>No dump file provided. To use dump, -dumpfile=<filename> must be provided.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+11"/> - <source>Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate.</source> + <location line="+2"/> + <source>No wallet file format provided. To use createfromdump, -format=<format> must be provided.</source> <translation type="unfinished"></translation> </message> <message> <location line="+3"/> - <source>Unable to rewind the database to a pre-fork state. You will need to redownload the blockchain</source> + <source>Please check that your computer's date and time are correct! If your clock is wrong, %s will not work properly.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+11"/> - <source>Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade.</source> + <location line="+3"/> + <source>Please contribute if you find %s useful. Visit %s for further information about the software.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+7"/> - <source>-maxmempool must be at least %d MB</source> + <location line="+3"/> + <source>Prune configured below the minimum of %d MiB. Please use a higher number.</source> <translation type="unfinished"></translation> </message> <message> <location line="+2"/> - <source>Cannot resolve -%s address: '%s'</source> + <source>Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node)</source> <translation type="unfinished"></translation> </message> <message> <location line="+3"/> - <source>Change index out of range</source> + <source>SQLiteDatabase: Failed to prepare the statement to fetch sqlite wallet schema version: %s</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> - <source>Config setting for %s only applied on %s network when in [%s] section.</source> + <location line="+3"/> + <source>SQLiteDatabase: Failed to prepare the statement to fetch the application id: %s</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> - <source>Copyright (C) %i-%i</source> + <location line="+3"/> + <source>SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> - <source>Corrupted block database detected</source> - <translation>Corrupted block database detected</translation> - </message> - <message> - <location line="+1"/> - <source>Could not find asmap file %s</source> + <location line="+3"/> + <source>The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> - <source>Could not parse asmap file %s</source> + <location line="+5"/> + <source>The transaction amount is too small to send after the fee has been deducted</source> <translation type="unfinished"></translation> </message> <message> <location line="+2"/> - <source>Do you want to rebuild the block database now?</source> - <translation>Do you want to rebuild the block database now?</translation> + <source>This error could occur if this wallet was not shutdown cleanly and was last loaded using a build with a newer version of Berkeley DB. If so, please use the software that last loaded this wallet</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Dump file %s does not exist.</source> + <location line="+4"/> + <source>This is a pre-release test build - use at your own risk - do not use for mining or merchant applications</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> - <source>Error creating %s</source> + <location line="+3"/> + <source>This is the maximum transaction fee you pay (in addition to the normal fee) to prioritize partial spend avoidance over regular coin selection.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> - <source>Error initializing block database</source> - <translation>Error initializing block database</translation> + <location line="+3"/> + <source>This is the transaction fee you may discard if change is smaller than dust at this level</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> - <source>Error initializing wallet database environment %s!</source> - <translation>Error initializing wallet database environment %s!</translation> + <location line="+3"/> + <source>This is the transaction fee you may pay when fee estimates are not available.</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> - <source>Error loading %s</source> + <location line="+2"/> + <source>Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> - <source>Error loading %s: Private keys can only be disabled during creation</source> + <location line="+3"/> + <source>Transaction needs a change address, but we can't generate it. Please call keypoolrefill first.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> - <source>Error loading %s: Wallet corrupted</source> + <location line="+3"/> + <source>Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> - <source>Error loading %s: Wallet requires newer version of %s</source> + <location line="+3"/> + <source>Unknown wallet file format "%s" provided. Please provide one of "bdb" or "sqlite".</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> - <source>Error loading block database</source> - <translation>Error loading block database</translation> + <location line="+3"/> + <source>Warning: Dumpfile wallet format "%s" does not match command line specified format "%s".</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> - <source>Error opening block database</source> - <translation>Error opening block database</translation> + <location line="+3"/> + <source>Warning: Private keys detected in wallet {%s} with disabled private keys</source> + <translation type="unfinished"></translation> </message> <message> <location line="+2"/> - <source>Error reading next record from wallet database</source> + <source>Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Error: Couldn't create cursor into database</source> + <location line="+3"/> + <source>Witness data for blocks after height %d requires validation. Please restart with -reindex.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Error: Dumpfile checksum does not match. Computed %s, expected %s</source> + <location line="+3"/> + <source>You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> - <source>Error: Got key that was not hex: %s</source> + <location line="+3"/> + <source>%s is set very high!</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Error: Got value that was not hex: %s</source> + <source>-maxmempool must be at least %d MB</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Error: Missing checksum</source> + <location line="+1"/> + <source>A fatal internal error occurred, see debug.log for details</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Error: Unable to parse version %u as a uint32_t</source> + <source>Cannot resolve -%s address: '%s'</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Error: Unable to write record to new wallet</source> + <source>Cannot set -peerblockfilters without -blockfilterindex.</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Failed to listen on any port. Use -listen=0 if you want this.</source> - <translation>Failed to listen on any port. Use -listen=0 if you want this.</translation> + <source>Cannot write to data directory '%s'; check permissions.</source> + <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Failed to rescan the wallet during initialization</source> + <source>Change index out of range</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Failed to verify database</source> + <source>Config setting for %s only applied on %s network when in [%s] section.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Ignoring duplicate -wallet %s.</source> + <location line="+1"/> + <source>Copyright (C) %i-%i</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Importing...</source> + <source>Corrupted block database detected</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Incorrect or no genesis block found. Wrong datadir for network?</source> - <translation>Incorrect or no genesis block found. Wrong datadir for network?</translation> + <source>Could not find asmap file %s</source> + <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Initialization sanity check failed. %s is shutting down.</source> + <source>Could not parse asmap file %s</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Invalid -i2psam address or hostname: '%s'</source> + <location line="+1"/> + <source>Disk space is too low!</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> - <source>Invalid P2P permission: '%s'</source> + <location line="+1"/> + <source>Do you want to rebuild the block database now?</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Invalid amount for -%s=<amount>: '%s'</source> + <source>Done loading</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Invalid amount for -discardfee=<amount>: '%s'</source> + <source>Dump file %s does not exist.</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Invalid amount for -fallbackfee=<amount>: '%s'</source> + <source>Error creating %s</source> <translation type="unfinished"></translation> </message> <message> - <location line="+17"/> - <source>SQLiteDatabase: Failed to execute statement to verify database: %s</source> + <location line="+1"/> + <source>Error initializing block database</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>SQLiteDatabase: Failed to fetch sqlite wallet schema version: %s</source> + <source>Error initializing wallet database environment %s!</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>SQLiteDatabase: Failed to fetch the application id: %s</source> + <source>Error loading %s</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>SQLiteDatabase: Failed to prepare statement to verify database: %s</source> + <source>Error loading %s: Private keys can only be disabled during creation</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>SQLiteDatabase: Failed to read database verification error: %s</source> + <source>Error loading %s: Wallet corrupted</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>SQLiteDatabase: Unexpected application id. Expected %u, got %u</source> + <source>Error loading %s: Wallet requires newer version of %s</source> <translation type="unfinished"></translation> </message> <message> - <location line="+6"/> - <source>Specified blocks directory "%s" does not exist.</source> + <location line="+1"/> + <source>Error loading block database</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> - <source>The specified config file %s does not exist</source> + <location line="+1"/> + <source>Error opening block database</source> <translation type="unfinished"></translation> </message> <message> - <location line="+17"/> - <source>Unable to open %s for writing</source> + <location line="+1"/> + <source>Error reading from database, shutting down.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> - <source>Unknown address type '%s'</source> + <location line="+1"/> + <source>Error reading next record from wallet database</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Unknown change type '%s'</source> + <source>Error upgrading chainstate database</source> <translation type="unfinished"></translation> </message> <message> - <location line="+4"/> - <source>Upgrading txindex database</source> + <location line="+1"/> + <source>Error: Couldn't create cursor into database</source> <translation type="unfinished"></translation> </message> <message> - <location line="-53"/> - <source>Loading P2P addresses...</source> + <location line="+1"/> + <source>Error: Disk space is low for %s</source> <translation type="unfinished"></translation> </message> <message> - <location line="-170"/> - <source>Cannot downgrade wallet from version %i to version %i. Wallet version unchanged.</source> + <location line="+1"/> + <source>Error: Dumpfile checksum does not match. Computed %s, expected %s</source> <translation type="unfinished"></translation> </message> <message> - <location line="+8"/> - <source>Cannot upgrade a non HD split wallet from version %i to version %i without upgrading to support pre-split keypool. Please use version %i or no version specified.</source> + <location line="+1"/> + <source>Error: Got key that was not hex: %s</source> <translation type="unfinished"></translation> </message> <message> - <location line="+10"/> - <source>Error: Dumpfile format record is incorrect. Got "%s", expected "format".</source> + <location line="+1"/> + <source>Error: Got value that was not hex: %s</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Error: Dumpfile identifier record is incorrect. Got "%s", expected "%s".</source> + <location line="+1"/> + <source>Error: Keypool ran out, please call keypoolrefill first</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s</source> + <location line="+1"/> + <source>Error: Missing checksum</source> <translation type="unfinished"></translation> </message> <message> - <location line="+8"/> - <source>File %s already exists. If you are sure this is what you want, move it out of the way first.</source> + <location line="+1"/> + <source>Error: Unable to parse version %u as a uint32_t</source> <translation type="unfinished"></translation> </message> <message> - <location line="+9"/> - <source>No dump file provided. To use createfromdump, -dumpfile=<filename> must be provided.</source> + <location line="+1"/> + <source>Error: Unable to write record to new wallet</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> - <source>No dump file provided. To use dump, -dumpfile=<filename> must be provided.</source> + <location line="+1"/> + <source>Failed to listen on any port. Use -listen=0 if you want this.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>No wallet file format provided. To use createfromdump, -format=<format> must be provided.</source> + <location line="+1"/> + <source>Failed to rescan the wallet during initialization</source> <translation type="unfinished"></translation> </message> <message> - <location line="+57"/> - <source>Unknown wallet file format "%s" provided. Please provide one of "bdb" or "sqlite".</source> + <location line="+1"/> + <source>Failed to verify database</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> - <source>Warning: Dumpfile wallet format "%s" does not match command line specified format "%s".</source> + <location line="+1"/> + <source>Fee rate (%s) is lower than the minimum fee rate setting (%s)</source> <translation type="unfinished"></translation> </message> <message> - <location line="+67"/> - <source>Loading banlist...</source> + <location line="+1"/> + <source>Ignoring duplicate -wallet %s.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <source>Not enough file descriptors available.</source> - <translation>Not enough file descriptors available.</translation> + <location line="+1"/> + <source>Importing…</source> + <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Prune cannot be configured with a negative value.</source> + <source>Incorrect or no genesis block found. Wrong datadir for network?</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Prune mode is incompatible with -txindex.</source> + <source>Initialization sanity check failed. %s is shutting down.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> - <source>Replaying blocks...</source> + <location line="+1"/> + <source>Insufficient funds</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Rewinding blocks...</source> + <location line="+1"/> + <source>Invalid -i2psam address or hostname: '%s'</source> <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> - <source>The source code is available from %s.</source> + <location line="+1"/> + <source>Invalid -onion address or hostname: '%s'</source> <translation type="unfinished"></translation> </message> <message> - <location line="+9"/> - <source>Transaction fee and change calculation failed</source> + <location line="+1"/> + <source>Invalid -proxy address or hostname: '%s'</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <source>Unable to bind to %s on this computer. %s is probably already running.</source> + <location line="+1"/> + <source>Invalid P2P permission: '%s'</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> - <source>Unable to generate keys</source> + <location line="+1"/> + <source>Invalid amount for -%s=<amount>: '%s'</source> <translation type="unfinished"></translation> </message> <message> - <location line="+7"/> - <source>Unsupported logging category %s=%s.</source> + <location line="+1"/> + <source>Invalid amount for -discardfee=<amount>: '%s'</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Upgrading UTXO database</source> + <source>Invalid amount for -fallbackfee=<amount>: '%s'</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>User Agent comment (%s) contains unsafe characters.</source> + <location line="+1"/> + <source>Invalid amount for -paytxfee=<amount>: '%s' (must be at least %s)</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Verifying blocks...</source> - <translation>Verifying blocks...</translation> + <source>Invalid netmask specified in -whitelist: '%s'</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Wallet needed to be rewritten: restart %s to complete</source> + <location line="+1"/> + <source>Loading P2P addresses…</source> <translation type="unfinished"></translation> </message> <message> - <location line="-202"/> - <source>Error: Listening for incoming connections failed (listen returned error %s)</source> + <location line="+1"/> + <source>Loading banlist…</source> <translation type="unfinished"></translation> </message> <message> - <location line="-31"/> - <source>%s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup.</source> + <location line="+1"/> + <source>Loading block index…</source> <translation type="unfinished"></translation> </message> <message> - <location line="+39"/> - <source>Invalid amount for -maxtxfee=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions)</source> + <location line="+1"/> + <source>Loading wallet…</source> <translation type="unfinished"></translation> </message> <message> - <location line="+39"/> - <source>The transaction amount is too small to send after the fee has been deducted</source> + <location line="+1"/> + <source>Need to specify a port with -whitebind: '%s'</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>This error could occur if this wallet was not shutdown cleanly and was last loaded using a build with a newer version of Berkeley DB. If so, please use the software that last loaded this wallet</source> + <location line="+1"/> + <source>No proxy server specified. Use -proxy=<ip> or -proxy=<ip:port>.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+7"/> - <source>This is the maximum transaction fee you pay (in addition to the normal fee) to prioritize partial spend avoidance over regular coin selection.</source> + <location line="+1"/> + <source>Not enough file descriptors available.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+11"/> - <source>Transaction needs a change address, but we can't generate it. Please call keypoolrefill first.</source> + <location line="+1"/> + <source>Prune cannot be configured with a negative value.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+20"/> - <source>You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain</source> + <location line="+1"/> + <source>Prune mode is incompatible with -coinstatsindex.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <source>A fatal internal error occurred, see debug.log for details</source> + <location line="+1"/> + <source>Prune mode is incompatible with -txindex.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Cannot set -peerblockfilters without -blockfilterindex.</source> + <location line="+1"/> + <source>Pruning blockstore…</source> <translation type="unfinished"></translation> </message> <message> - <location line="+8"/> - <source>Disk space is too low!</source> + <location line="+1"/> + <source>Reducing -maxconnections from %d to %d, because of system limitations.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+13"/> - <source>Error reading from database, shutting down.</source> + <location line="+1"/> + <source>Replaying blocks…</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Error upgrading chainstate database</source> + <location line="+1"/> + <source>Rescanning…</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Error: Disk space is low for %s</source> + <location line="+1"/> + <source>SQLiteDatabase: Failed to execute statement to verify database: %s</source> <translation type="unfinished"></translation> </message> <message> - <location line="+4"/> - <source>Error: Keypool ran out, please call keypoolrefill first</source> + <location line="+1"/> + <source>SQLiteDatabase: Failed to fetch sqlite wallet schema version: %s</source> <translation type="unfinished"></translation> </message> <message> - <location line="+7"/> - <source>Fee rate (%s) is lower than the minimum fee rate setting (%s)</source> + <location line="+1"/> + <source>SQLiteDatabase: Failed to fetch the application id: %s</source> <translation type="unfinished"></translation> </message> <message> - <location line="+7"/> - <source>Invalid -onion address or hostname: '%s'</source> + <location line="+1"/> + <source>SQLiteDatabase: Failed to prepare statement to verify database: %s</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Invalid -proxy address or hostname: '%s'</source> + <source>SQLiteDatabase: Failed to read database verification error: %s</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <source>Invalid amount for -paytxfee=<amount>: '%s' (must be at least %s)</source> + <location line="+1"/> + <source>SQLiteDatabase: Unexpected application id. Expected %u, got %u</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Invalid netmask specified in -whitelist: '%s'</source> + <source>Section [%s] is not recognized.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <source>Need to specify a port with -whitebind: '%s'</source> + <location line="+1"/> + <source>Signing transaction failed</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>No proxy server specified. Use -proxy=<ip> or -proxy=<ip:port>.</source> + <source>Specified -walletdir "%s" does not exist</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <source>Reducing -maxconnections from %d to %d, because of system limitations.</source> + <location line="+1"/> + <source>Specified -walletdir "%s" is a relative path</source> <translation type="unfinished"></translation> </message> <message> - <location line="+10"/> - <source>Section [%s] is not recognized.</source> + <location line="+1"/> + <source>Specified -walletdir "%s" is not a directory</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Signing transaction failed</source> - <translation>Signing transaction failed</translation> + <source>Specified blocks directory "%s" does not exist.</source> + <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Specified -walletdir "%s" does not exist</source> + <source>Starting network threads…</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Specified -walletdir "%s" is a relative path</source> + <source>The source code is available from %s.</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Specified -walletdir "%s" is not a directory</source> + <source>The specified config file %s does not exist</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location line="+1"/> <source>The transaction amount is too small to pay the fee</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>This is experimental software.</source> + <location line="+1"/> + <source>The wallet will avoid paying less than the minimum relay fee.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> - <source>Transaction amount too small</source> - <translation>Transaction amount too small</translation> + <location line="+1"/> + <source>This is experimental software.</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <source>Transaction too large</source> - <translation>Transaction too large</translation> + <location line="+1"/> + <source>This is the minimum transaction fee you pay on every transaction.</source> + <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Unable to bind to %s on this computer (bind returned error %s)</source> + <source>This is the transaction fee you will pay if you send a transaction.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Unable to create the PID file '%s': %s</source> + <location line="+1"/> + <source>Transaction amount too small</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Unable to generate initial keys</source> + <source>Transaction amounts must not be negative</source> <translation type="unfinished"></translation> </message> <message> - <location line="+4"/> - <source>Unknown -blockfilterindex value %s.</source> + <location line="+1"/> + <source>Transaction fee and change calculation failed</source> <translation type="unfinished"></translation> </message> <message> - <location line="+9"/> - <source>Verifying wallet(s)...</source> + <location line="+1"/> + <source>Transaction has too long of a mempool chain</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Warning: unknown new rules activated (versionbit %i)</source> + <location line="+1"/> + <source>Transaction must have at least one recipient</source> <translation type="unfinished"></translation> </message> <message> - <location line="-231"/> - <source>-maxtxfee is set very high! Fees this large could be paid on a single transaction.</source> + <location line="+1"/> + <source>Transaction too large</source> <translation type="unfinished"></translation> </message> <message> - <location line="+90"/> - <source>This is the transaction fee you may pay when fee estimates are not available.</source> + <location line="+1"/> + <source>Unable to bind to %s on this computer (bind returned error %s)</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments.</source> + <location line="+1"/> + <source>Unable to bind to %s on this computer. %s is probably already running.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+26"/> - <source>%s is set very high!</source> + <location line="+1"/> + <source>Unable to create the PID file '%s': %s</source> <translation type="unfinished"></translation> </message> <message> - <location line="+81"/> - <source>Starting network threads...</source> + <location line="+1"/> + <source>Unable to generate initial keys</source> <translation type="unfinished"></translation> </message> <message> - <location line="+4"/> - <source>The wallet will avoid paying less than the minimum relay fee.</source> + <location line="+1"/> + <source>Unable to generate keys</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>This is the minimum transaction fee you pay on every transaction.</source> + <location line="+1"/> + <source>Unable to open %s for writing</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>This is the transaction fee you will pay if you send a transaction.</source> + <source>Unable to start HTTP server. See debug log for details.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Transaction amounts must not be negative</source> + <location line="+1"/> + <source>Unknown -blockfilterindex value %s.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Transaction has too long of a mempool chain</source> + <location line="+1"/> + <source>Unknown address type '%s'</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Transaction must have at least one recipient</source> + <source>Unknown change type '%s'</source> <translation type="unfinished"></translation> </message> <message> - <location line="+12"/> + <location line="+1"/> <source>Unknown network specified in -onlynet: '%s'</source> - <translation>Unknown network specified in -onlynet: '%s'</translation> + <translation type="unfinished"></translation> </message> <message> - <location line="-60"/> - <source>Insufficient funds</source> - <translation>Insufficient funds</translation> + <location line="+1"/> + <source>Unsupported logging category %s=%s.</source> + <translation type="unfinished"></translation> </message> <message> - <location line="-133"/> - <source>Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable -fallbackfee.</source> + <location line="+1"/> + <source>Upgrading UTXO database</source> <translation type="unfinished"></translation> </message> <message> - <location line="+80"/> - <source>Warning: Private keys detected in wallet {%s} with disabled private keys</source> + <location line="+1"/> + <source>Upgrading txindex database</source> <translation type="unfinished"></translation> </message> <message> - <location line="+13"/> - <source>Cannot write to data directory '%s'; check permissions.</source> + <location line="+1"/> + <source>User Agent comment (%s) contains unsafe characters.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+52"/> - <source>Loading block index...</source> - <translation>Loading block index...</translation> + <location line="+1"/> + <source>Verifying blocks…</source> + <translation type="unfinished"></translation> </message> <message> <location line="+1"/> - <source>Loading wallet...</source> - <translation>Loading wallet...</translation> + <source>Verifying wallet(s)…</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+9"/> - <source>Rescanning...</source> - <translation>Rescanning...</translation> + <location line="+1"/> + <source>Wallet needed to be rewritten: restart %s to complete</source> + <translation type="unfinished"></translation> </message> <message> - <location line="-53"/> - <source>Done loading</source> - <translation>Done loading</translation> + <location line="+1"/> + <source>Warning: unknown new rules activated (versionbit %i)</source> + <translation type="unfinished"></translation> </message> </context> </TS> diff --git a/src/qt/locale/bitcoin_en.xlf b/src/qt/locale/bitcoin_en.xlf index a8a5f57f15..19ba95d999 100644 --- a/src/qt/locale/bitcoin_en.xlf +++ b/src/qt/locale/bitcoin_en.xlf @@ -98,58 +98,63 @@ Signing is only possible with addresses of the type 'legacy'.</source> <context-group purpose="location"><context context-type="linenumber">109</context></context-group> </trans-unit> <trans-unit id="_msg19"> - <source xml:space="preserve">&Copy Address</source> + <source xml:space="preserve">Copy Address</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">116</context></context-group> + <context-group purpose="location"><context context-type="linenumber">117</context></context-group> </trans-unit> <trans-unit id="_msg20"> - <source xml:space="preserve">Copy &Label</source> + <source xml:space="preserve">Copy Label</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">117</context></context-group> + <context-group purpose="location"><context context-type="linenumber">118</context></context-group> </trans-unit> <trans-unit id="_msg21"> - <source xml:space="preserve">&Edit</source> + <source xml:space="preserve">Edit</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">118</context></context-group> + <context-group purpose="location"><context context-type="linenumber">119</context></context-group> </trans-unit> <trans-unit id="_msg22"> - <source xml:space="preserve">Export Address List</source> + <source xml:space="preserve">Delete</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">297</context></context-group> + <context-group purpose="location"><context context-type="linenumber">122</context></context-group> </trans-unit> <trans-unit id="_msg23"> + <source xml:space="preserve">Export Address List</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">283</context></context-group> + </trans-unit> + <trans-unit id="_msg24"> <source xml:space="preserve">Comma separated file</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">298</context></context-group> + <context-group purpose="location"><context context-type="linenumber">284</context></context-group> <context-group><context context-type="x-gettext-msgctxt">Name of CSV file format</context></context-group> </trans-unit> - <trans-unit id="_msg24"> + <trans-unit id="_msg25"> <source xml:space="preserve">There was an error trying to save the address list to %1. Please try again.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">313</context></context-group> + <context-group purpose="location"><context context-type="linenumber">299</context></context-group> <context-group><context context-type="x-gettext-msgctxt">An error message.</context></context-group> <note annotates="source" from="developer">%1 is a name of the file (e.g., "addrbook.csv") that the bitcoin addresses were exported to.</note> </trans-unit> - <trans-unit id="_msg25"> + <trans-unit id="_msg26"> <source xml:space="preserve">Exporting Failed</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">311</context></context-group> + <context-group purpose="location"><context context-type="linenumber">297</context></context-group> </trans-unit> </group> </body></file> <file original="../addresstablemodel.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="AddressTableModel"> - <trans-unit id="_msg26"> + <trans-unit id="_msg27"> <source xml:space="preserve">Label</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">168</context></context-group> </trans-unit> - <trans-unit id="_msg27"> + <trans-unit id="_msg28"> <source xml:space="preserve">Address</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">168</context></context-group> </trans-unit> - <trans-unit id="_msg28"> + <trans-unit id="_msg29"> <source xml:space="preserve">(no label)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">206</context></context-group> @@ -158,27 +163,27 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../forms/askpassphrasedialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="AskPassphraseDialog"> - <trans-unit id="_msg29" approved="yes"> + <trans-unit id="_msg30" approved="yes"> <source xml:space="preserve">Passphrase Dialog</source> <target xml:space="preserve">Passphrase Dialog</target> <context-group purpose="location"><context context-type="linenumber">26</context></context-group> </trans-unit> - <trans-unit id="_msg30" approved="yes"> + <trans-unit id="_msg31" approved="yes"> <source xml:space="preserve">Enter passphrase</source> <target xml:space="preserve">Enter passphrase</target> <context-group purpose="location"><context context-type="linenumber">56</context></context-group> </trans-unit> - <trans-unit id="_msg31" approved="yes"> + <trans-unit id="_msg32" approved="yes"> <source xml:space="preserve">New passphrase</source> <target xml:space="preserve">New passphrase</target> <context-group purpose="location"><context context-type="linenumber">70</context></context-group> </trans-unit> - <trans-unit id="_msg32" approved="yes"> + <trans-unit id="_msg33" approved="yes"> <source xml:space="preserve">Repeat new passphrase</source> <target xml:space="preserve">Repeat new passphrase</target> <context-group purpose="location"><context context-type="linenumber">84</context></context-group> </trans-unit> - <trans-unit id="_msg33"> + <trans-unit id="_msg34"> <source xml:space="preserve">Show passphrase</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">98</context></context-group> @@ -187,83 +192,83 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../askpassphrasedialog.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="AskPassphraseDialog"> - <trans-unit id="_msg34"> + <trans-unit id="_msg35"> <source xml:space="preserve">Encrypt wallet</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">51</context></context-group> </trans-unit> - <trans-unit id="_msg35"> + <trans-unit id="_msg36"> <source xml:space="preserve">This operation needs your wallet passphrase to unlock the wallet.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">54</context></context-group> </trans-unit> - <trans-unit id="_msg36"> + <trans-unit id="_msg37"> <source xml:space="preserve">Unlock wallet</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">59</context></context-group> </trans-unit> - <trans-unit id="_msg37"> + <trans-unit id="_msg38"> <source xml:space="preserve">Change passphrase</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">62</context></context-group> </trans-unit> - <trans-unit id="_msg38"> + <trans-unit id="_msg39"> <source xml:space="preserve">Confirm wallet encryption</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">110</context></context-group> </trans-unit> - <trans-unit id="_msg39"> + <trans-unit id="_msg40"> <source xml:space="preserve">Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>!</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">111</context></context-group> </trans-unit> - <trans-unit id="_msg40"> + <trans-unit id="_msg41"> <source xml:space="preserve">Are you sure you wish to encrypt your wallet?</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">111</context></context-group> </trans-unit> - <trans-unit id="_msg41"> + <trans-unit id="_msg42"> <source xml:space="preserve">Wallet encrypted</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">129</context></context-group> <context-group purpose="location"><context context-type="linenumber">173</context></context-group> </trans-unit> - <trans-unit id="_msg42"> + <trans-unit id="_msg43"> <source xml:space="preserve">Enter the new passphrase for the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">48</context></context-group> </trans-unit> - <trans-unit id="_msg43"> + <trans-unit id="_msg44"> <source xml:space="preserve">Enter the old passphrase and new passphrase for the wallet.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">63</context></context-group> </trans-unit> - <trans-unit id="_msg44"> + <trans-unit id="_msg45"> <source xml:space="preserve">Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">118</context></context-group> </trans-unit> - <trans-unit id="_msg45"> + <trans-unit id="_msg46"> <source xml:space="preserve">Wallet to be encrypted</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">122</context></context-group> </trans-unit> - <trans-unit id="_msg46"> + <trans-unit id="_msg47"> <source xml:space="preserve">Your wallet is about to be encrypted. </source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">124</context></context-group> </trans-unit> - <trans-unit id="_msg47"> + <trans-unit id="_msg48"> <source xml:space="preserve">Your wallet is now encrypted. </source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">131</context></context-group> </trans-unit> - <trans-unit id="_msg48"> + <trans-unit id="_msg49"> <source xml:space="preserve">IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">133</context></context-group> </trans-unit> - <trans-unit id="_msg49"> + <trans-unit id="_msg50"> <source xml:space="preserve">Wallet encryption failed</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">139</context></context-group> @@ -271,35 +276,35 @@ Signing is only possible with addresses of the type 'legacy'.</source> <context-group purpose="location"><context context-type="linenumber">179</context></context-group> <context-group purpose="location"><context context-type="linenumber">185</context></context-group> </trans-unit> - <trans-unit id="_msg50"> + <trans-unit id="_msg51"> <source xml:space="preserve">Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">140</context></context-group> </trans-unit> - <trans-unit id="_msg51"> + <trans-unit id="_msg52"> <source xml:space="preserve">The supplied passphrases do not match.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">148</context></context-group> <context-group purpose="location"><context context-type="linenumber">186</context></context-group> </trans-unit> - <trans-unit id="_msg52"> + <trans-unit id="_msg53"> <source xml:space="preserve">Wallet unlock failed</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">159</context></context-group> <context-group purpose="location"><context context-type="linenumber">165</context></context-group> </trans-unit> - <trans-unit id="_msg53"> + <trans-unit id="_msg54"> <source xml:space="preserve">The passphrase entered for the wallet decryption was incorrect.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">160</context></context-group> <context-group purpose="location"><context context-type="linenumber">180</context></context-group> </trans-unit> - <trans-unit id="_msg54"> + <trans-unit id="_msg55"> <source xml:space="preserve">Wallet passphrase was successfully changed.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">174</context></context-group> </trans-unit> - <trans-unit id="_msg55"> + <trans-unit id="_msg56"> <source xml:space="preserve">Warning: The Caps Lock key is on!</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">220</context></context-group> @@ -309,12 +314,12 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../bantablemodel.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="BanTableModel"> - <trans-unit id="_msg56"> + <trans-unit id="_msg57"> <source xml:space="preserve">IP/Netmask</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">85</context></context-group> </trans-unit> - <trans-unit id="_msg57"> + <trans-unit id="_msg58"> <source xml:space="preserve">Banned Until</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">85</context></context-group> @@ -323,578 +328,578 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../bitcoin.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="BitcoinApplication"> - <trans-unit id="_msg58"> + <trans-unit id="_msg59"> <source xml:space="preserve">Runaway exception</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">423</context></context-group> + <context-group purpose="location"><context context-type="linenumber">421</context></context-group> </trans-unit> - <trans-unit id="_msg59"> + <trans-unit id="_msg60"> <source xml:space="preserve">A fatal error occurred. %1 can no longer continue safely and will quit.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">424</context></context-group> + <context-group purpose="location"><context context-type="linenumber">422</context></context-group> </trans-unit> - <trans-unit id="_msg60"> + <trans-unit id="_msg61"> <source xml:space="preserve">Internal error</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">433</context></context-group> + <context-group purpose="location"><context context-type="linenumber">431</context></context-group> </trans-unit> - <trans-unit id="_msg61"> + <trans-unit id="_msg62"> <source xml:space="preserve">An internal error occurred. %1 will attempt to continue safely. This is an unexpected bug which can be reported as described below.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">434</context></context-group> + <context-group purpose="location"><context context-type="linenumber">432</context></context-group> </trans-unit> </group> <group restype="x-trolltech-linguist-context" resname="QObject"> - <trans-unit id="_msg62"> + <trans-unit id="_msg63"> <source xml:space="preserve">Error: Specified data directory "%1" does not exist.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">545</context></context-group> + <context-group purpose="location"><context context-type="linenumber">543</context></context-group> </trans-unit> - <trans-unit id="_msg63"> + <trans-unit id="_msg64"> <source xml:space="preserve">Error: Cannot parse configuration file: %1.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">551</context></context-group> + <context-group purpose="location"><context context-type="linenumber">549</context></context-group> </trans-unit> - <trans-unit id="_msg64"> + <trans-unit id="_msg65"> <source xml:space="preserve">Error: %1</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">566</context></context-group> + <context-group purpose="location"><context context-type="linenumber">564</context></context-group> </trans-unit> - <trans-unit id="_msg65"> + <trans-unit id="_msg66"> <source xml:space="preserve">Error initializing settings: %1</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">575</context></context-group> + <context-group purpose="location"><context context-type="linenumber">573</context></context-group> </trans-unit> - <trans-unit id="_msg66"> - <source xml:space="preserve">%1 didn't yet exit safely...</source> + <trans-unit id="_msg67"> + <source xml:space="preserve">%1 didn't yet exit safely…</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">638</context></context-group> + <context-group purpose="location"><context context-type="linenumber">636</context></context-group> </trans-unit> </group> </body></file> <file original="../bitcoingui.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="BitcoinGUI"> - <trans-unit id="_msg67" approved="yes"> - <source xml:space="preserve">Sign &message...</source> - <target xml:space="preserve">Sign &message...</target> - <context-group purpose="location"><context context-type="linenumber">325</context></context-group> - </trans-unit> <trans-unit id="_msg68" approved="yes"> - <source xml:space="preserve">Synchronizing with network...</source> - <target xml:space="preserve">Synchronizing with network...</target> - <context-group purpose="location"><context context-type="linenumber">993</context></context-group> - </trans-unit> - <trans-unit id="_msg69" approved="yes"> <source xml:space="preserve">&Overview</source> <target xml:space="preserve">&Overview</target> <context-group purpose="location"><context context-type="linenumber">247</context></context-group> </trans-unit> - <trans-unit id="_msg70" approved="yes"> + <trans-unit id="_msg69" approved="yes"> <source xml:space="preserve">Show general overview of wallet</source> <target xml:space="preserve">Show general overview of wallet</target> <context-group purpose="location"><context context-type="linenumber">248</context></context-group> </trans-unit> - <trans-unit id="_msg71" approved="yes"> + <trans-unit id="_msg70" approved="yes"> <source xml:space="preserve">&Transactions</source> <target xml:space="preserve">&Transactions</target> <context-group purpose="location"><context context-type="linenumber">276</context></context-group> </trans-unit> - <trans-unit id="_msg72" approved="yes"> + <trans-unit id="_msg71" approved="yes"> <source xml:space="preserve">Browse transaction history</source> <target xml:space="preserve">Browse transaction history</target> <context-group purpose="location"><context context-type="linenumber">277</context></context-group> </trans-unit> - <trans-unit id="_msg73" approved="yes"> + <trans-unit id="_msg72" approved="yes"> <source xml:space="preserve">E&xit</source> <target xml:space="preserve">E&xit</target> <context-group purpose="location"><context context-type="linenumber">300</context></context-group> </trans-unit> - <trans-unit id="_msg74" approved="yes"> + <trans-unit id="_msg73" approved="yes"> <source xml:space="preserve">Quit application</source> <target xml:space="preserve">Quit application</target> <context-group purpose="location"><context context-type="linenumber">301</context></context-group> </trans-unit> - <trans-unit id="_msg75"> + <trans-unit id="_msg74"> <source xml:space="preserve">&About %1</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">304</context></context-group> </trans-unit> - <trans-unit id="_msg76"> + <trans-unit id="_msg75"> <source xml:space="preserve">Show information about %1</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">305</context></context-group> </trans-unit> - <trans-unit id="_msg77" approved="yes"> + <trans-unit id="_msg76" approved="yes"> <source xml:space="preserve">About &Qt</source> <target xml:space="preserve">About &Qt</target> <context-group purpose="location"><context context-type="linenumber">308</context></context-group> </trans-unit> - <trans-unit id="_msg78" approved="yes"> + <trans-unit id="_msg77" approved="yes"> <source xml:space="preserve">Show information about Qt</source> <target xml:space="preserve">Show information about Qt</target> <context-group purpose="location"><context context-type="linenumber">309</context></context-group> </trans-unit> - <trans-unit id="_msg79" approved="yes"> - <source xml:space="preserve">&Options...</source> - <target xml:space="preserve">&Options...</target> - <context-group purpose="location"><context context-type="linenumber">311</context></context-group> - </trans-unit> - <trans-unit id="_msg80"> + <trans-unit id="_msg78"> <source xml:space="preserve">Modify configuration options for %1</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">312</context></context-group> </trans-unit> - <trans-unit id="_msg81" approved="yes"> - <source xml:space="preserve">&Encrypt Wallet...</source> - <target xml:space="preserve">&Encrypt Wallet...</target> - <context-group purpose="location"><context context-type="linenumber">318</context></context-group> - </trans-unit> - <trans-unit id="_msg82" approved="yes"> - <source xml:space="preserve">&Backup Wallet...</source> - <target xml:space="preserve">&Backup Wallet...</target> - <context-group purpose="location"><context context-type="linenumber">321</context></context-group> - </trans-unit> - <trans-unit id="_msg83" approved="yes"> - <source xml:space="preserve">&Change Passphrase...</source> - <target xml:space="preserve">&Change Passphrase...</target> - <context-group purpose="location"><context context-type="linenumber">323</context></context-group> - </trans-unit> - <trans-unit id="_msg84"> - <source xml:space="preserve">Open &URI...</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">345</context></context-group> - </trans-unit> - <trans-unit id="_msg85"> - <source xml:space="preserve">Create Wallet...</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">356</context></context-group> - </trans-unit> - <trans-unit id="_msg86"> + <trans-unit id="_msg79"> <source xml:space="preserve">Create a new wallet</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">358</context></context-group> </trans-unit> - <trans-unit id="_msg87"> + <trans-unit id="_msg80"> <source xml:space="preserve">Wallet:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">567</context></context-group> </trans-unit> - <trans-unit id="_msg88"> + <trans-unit id="_msg81"> <source xml:space="preserve">Click to disable network activity.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">918</context></context-group> </trans-unit> - <trans-unit id="_msg89"> + <trans-unit id="_msg82"> <source xml:space="preserve">Network activity disabled.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">920</context></context-group> </trans-unit> - <trans-unit id="_msg90"> + <trans-unit id="_msg83"> <source xml:space="preserve">Click to enable network activity again.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">920</context></context-group> </trans-unit> - <trans-unit id="_msg91"> - <source xml:space="preserve">Syncing Headers (%1%)...</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">947</context></context-group> - </trans-unit> - <trans-unit id="_msg92" approved="yes"> - <source xml:space="preserve">Reindexing blocks on disk...</source> - <target xml:space="preserve">Reindexing blocks on disk...</target> - <context-group purpose="location"><context context-type="linenumber">1004</context></context-group> - </trans-unit> - <trans-unit id="_msg93"> + <trans-unit id="_msg84"> <source xml:space="preserve">Proxy is <b>enabled</b>: %1</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1319</context></context-group> </trans-unit> - <trans-unit id="_msg94" approved="yes"> + <trans-unit id="_msg85" approved="yes"> <source xml:space="preserve">Send coins to a Bitcoin address</source> <target xml:space="preserve">Send coins to a Bitcoin address</target> <context-group purpose="location"><context context-type="linenumber">255</context></context-group> </trans-unit> - <trans-unit id="_msg95" approved="yes"> + <trans-unit id="_msg86" approved="yes"> <source xml:space="preserve">Backup wallet to another location</source> <target xml:space="preserve">Backup wallet to another location</target> <context-group purpose="location"><context context-type="linenumber">322</context></context-group> </trans-unit> - <trans-unit id="_msg96" approved="yes"> + <trans-unit id="_msg87" approved="yes"> <source xml:space="preserve">Change the passphrase used for wallet encryption</source> <target xml:space="preserve">Change the passphrase used for wallet encryption</target> <context-group purpose="location"><context context-type="linenumber">324</context></context-group> </trans-unit> - <trans-unit id="_msg97" approved="yes"> - <source xml:space="preserve">&Verify message...</source> - <target xml:space="preserve">&Verify message...</target> - <context-group purpose="location"><context context-type="linenumber">327</context></context-group> - </trans-unit> - <trans-unit id="_msg98" approved="yes"> + <trans-unit id="_msg88" approved="yes"> <source xml:space="preserve">&Send</source> <target xml:space="preserve">&Send</target> <context-group purpose="location"><context context-type="linenumber">254</context></context-group> </trans-unit> - <trans-unit id="_msg99" approved="yes"> + <trans-unit id="_msg89" approved="yes"> <source xml:space="preserve">&Receive</source> <target xml:space="preserve">&Receive</target> <context-group purpose="location"><context context-type="linenumber">265</context></context-group> </trans-unit> - <trans-unit id="_msg100" approved="yes"> + <trans-unit id="_msg90"> + <source xml:space="preserve">&Options…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">311</context></context-group> + </trans-unit> + <trans-unit id="_msg91" approved="yes"> <source xml:space="preserve">&Show / Hide</source> <target xml:space="preserve">&Show / Hide</target> <context-group purpose="location"><context context-type="linenumber">315</context></context-group> </trans-unit> - <trans-unit id="_msg101" approved="yes"> + <trans-unit id="_msg92" approved="yes"> <source xml:space="preserve">Show or hide the main Window</source> <target xml:space="preserve">Show or hide the main Window</target> <context-group purpose="location"><context context-type="linenumber">316</context></context-group> </trans-unit> - <trans-unit id="_msg102" approved="yes"> + <trans-unit id="_msg93"> + <source xml:space="preserve">&Encrypt Wallet…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">318</context></context-group> + </trans-unit> + <trans-unit id="_msg94" approved="yes"> <source xml:space="preserve">Encrypt the private keys that belong to your wallet</source> <target xml:space="preserve">Encrypt the private keys that belong to your wallet</target> <context-group purpose="location"><context context-type="linenumber">319</context></context-group> </trans-unit> - <trans-unit id="_msg103" approved="yes"> + <trans-unit id="_msg95"> + <source xml:space="preserve">&Backup Wallet…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">321</context></context-group> + </trans-unit> + <trans-unit id="_msg96"> + <source xml:space="preserve">&Change Passphrase…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">323</context></context-group> + </trans-unit> + <trans-unit id="_msg97"> + <source xml:space="preserve">Sign &message…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">325</context></context-group> + </trans-unit> + <trans-unit id="_msg98" approved="yes"> <source xml:space="preserve">Sign messages with your Bitcoin addresses to prove you own them</source> <target xml:space="preserve">Sign messages with your Bitcoin addresses to prove you own them</target> <context-group purpose="location"><context context-type="linenumber">326</context></context-group> </trans-unit> - <trans-unit id="_msg104" approved="yes"> + <trans-unit id="_msg99"> + <source xml:space="preserve">&Verify message…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">327</context></context-group> + </trans-unit> + <trans-unit id="_msg100" approved="yes"> <source xml:space="preserve">Verify messages to ensure they were signed with specified Bitcoin addresses</source> <target xml:space="preserve">Verify messages to ensure they were signed with specified Bitcoin addresses</target> <context-group purpose="location"><context context-type="linenumber">328</context></context-group> </trans-unit> - <trans-unit id="_msg105" approved="yes"> + <trans-unit id="_msg101"> + <source xml:space="preserve">&Load PSBT from file…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">329</context></context-group> + </trans-unit> + <trans-unit id="_msg102"> + <source xml:space="preserve">Load PSBT from clipboard…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">331</context></context-group> + </trans-unit> + <trans-unit id="_msg103"> + <source xml:space="preserve">Open &URI…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">345</context></context-group> + </trans-unit> + <trans-unit id="_msg104"> + <source xml:space="preserve">Close Wallet…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">353</context></context-group> + </trans-unit> + <trans-unit id="_msg105"> + <source xml:space="preserve">Create Wallet…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">356</context></context-group> + </trans-unit> + <trans-unit id="_msg106"> + <source xml:space="preserve">Close All Wallets…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">360</context></context-group> + </trans-unit> + <trans-unit id="_msg107" approved="yes"> <source xml:space="preserve">&File</source> <target xml:space="preserve">&File</target> <context-group purpose="location"><context context-type="linenumber">457</context></context-group> </trans-unit> - <trans-unit id="_msg106" approved="yes"> + <trans-unit id="_msg108" approved="yes"> <source xml:space="preserve">&Settings</source> <target xml:space="preserve">&Settings</target> <context-group purpose="location"><context context-type="linenumber">475</context></context-group> </trans-unit> - <trans-unit id="_msg107" approved="yes"> + <trans-unit id="_msg109" approved="yes"> <source xml:space="preserve">&Help</source> <target xml:space="preserve">&Help</target> <context-group purpose="location"><context context-type="linenumber">536</context></context-group> </trans-unit> - <trans-unit id="_msg108" approved="yes"> + <trans-unit id="_msg110" approved="yes"> <source xml:space="preserve">Tabs toolbar</source> <target xml:space="preserve">Tabs toolbar</target> <context-group purpose="location"><context context-type="linenumber">547</context></context-group> </trans-unit> - <trans-unit id="_msg109"> + <trans-unit id="_msg111"> + <source xml:space="preserve">Syncing Headers (%1%)…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">947</context></context-group> + </trans-unit> + <trans-unit id="_msg112"> + <source xml:space="preserve">Synchronizing with network…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">993</context></context-group> + </trans-unit> + <trans-unit id="_msg113"> + <source xml:space="preserve">Indexing blocks on disk…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">998</context></context-group> + </trans-unit> + <trans-unit id="_msg114"> + <source xml:space="preserve">Processing blocks on disk…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">1000</context></context-group> + </trans-unit> + <trans-unit id="_msg115"> + <source xml:space="preserve">Reindexing blocks on disk…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">1004</context></context-group> + </trans-unit> + <trans-unit id="_msg116"> + <source xml:space="preserve">Connecting to peers…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">1010</context></context-group> + </trans-unit> + <trans-unit id="_msg117"> <source xml:space="preserve">Request payments (generates QR codes and bitcoin: URIs)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">266</context></context-group> </trans-unit> - <trans-unit id="_msg110"> + <trans-unit id="_msg118"> <source xml:space="preserve">Show the list of used sending addresses and labels</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">341</context></context-group> </trans-unit> - <trans-unit id="_msg111"> + <trans-unit id="_msg119"> <source xml:space="preserve">Show the list of used receiving addresses and labels</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">343</context></context-group> </trans-unit> - <trans-unit id="_msg112"> + <trans-unit id="_msg120"> <source xml:space="preserve">&Command-line options</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">363</context></context-group> </trans-unit> <group restype="x-gettext-plurals"> <context-group purpose="location"><context context-type="linenumber">918</context></context-group> - <trans-unit id="_msg113[0]" approved="yes"> + <trans-unit id="_msg121[0]" approved="yes"> <source xml:space="preserve">%n active connection(s) to Bitcoin network</source> <target xml:space="preserve">%n active connection to Bitcoin network</target> </trans-unit> - <trans-unit id="_msg113[1]" approved="yes"> + <trans-unit id="_msg121[1]" approved="yes"> <source xml:space="preserve">%n active connection(s) to Bitcoin network</source> <target xml:space="preserve">%n active connections to Bitcoin network</target> </trans-unit> </group> - <trans-unit id="_msg114"> - <source xml:space="preserve">Indexing blocks on disk...</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">998</context></context-group> - </trans-unit> - <trans-unit id="_msg115"> - <source xml:space="preserve">Processing blocks on disk...</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1000</context></context-group> - </trans-unit> <group restype="x-gettext-plurals"> <context-group purpose="location"><context context-type="linenumber">1019</context></context-group> - <trans-unit id="_msg116[0]" approved="yes"> + <trans-unit id="_msg122[0]" approved="yes"> <source xml:space="preserve">Processed %n block(s) of transaction history.</source> <target xml:space="preserve">Processed %n block of transaction history.</target> </trans-unit> - <trans-unit id="_msg116[1]" approved="yes"> + <trans-unit id="_msg122[1]" approved="yes"> <source xml:space="preserve">Processed %n block(s) of transaction history.</source> <target xml:space="preserve">Processed %n blocks of transaction history.</target> </trans-unit> </group> - <trans-unit id="_msg117" approved="yes"> + <trans-unit id="_msg123" approved="yes"> <source xml:space="preserve">%1 behind</source> <target xml:space="preserve">%1 behind</target> <context-group purpose="location"><context context-type="linenumber">1042</context></context-group> </trans-unit> - <trans-unit id="_msg118" approved="yes"> + <trans-unit id="_msg124"> + <source xml:space="preserve">Catching up…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">1047</context></context-group> + </trans-unit> + <trans-unit id="_msg125" approved="yes"> <source xml:space="preserve">Last received block was generated %1 ago.</source> <target xml:space="preserve">Last received block was generated %1 ago.</target> <context-group purpose="location"><context context-type="linenumber">1066</context></context-group> </trans-unit> - <trans-unit id="_msg119" approved="yes"> + <trans-unit id="_msg126" approved="yes"> <source xml:space="preserve">Transactions after this will not yet be visible.</source> <target xml:space="preserve">Transactions after this will not yet be visible.</target> <context-group purpose="location"><context context-type="linenumber">1068</context></context-group> </trans-unit> - <trans-unit id="_msg120" approved="yes"> + <trans-unit id="_msg127" approved="yes"> <source xml:space="preserve">Error</source> <target xml:space="preserve">Error</target> <context-group purpose="location"><context context-type="linenumber">1093</context></context-group> </trans-unit> - <trans-unit id="_msg121" approved="yes"> + <trans-unit id="_msg128" approved="yes"> <source xml:space="preserve">Warning</source> <target xml:space="preserve">Warning</target> <context-group purpose="location"><context context-type="linenumber">1097</context></context-group> </trans-unit> - <trans-unit id="_msg122" approved="yes"> + <trans-unit id="_msg129" approved="yes"> <source xml:space="preserve">Information</source> <target xml:space="preserve">Information</target> <context-group purpose="location"><context context-type="linenumber">1101</context></context-group> </trans-unit> - <trans-unit id="_msg123" approved="yes"> + <trans-unit id="_msg130" approved="yes"> <source xml:space="preserve">Up to date</source> <target xml:space="preserve">Up to date</target> <context-group purpose="location"><context context-type="linenumber">1023</context></context-group> </trans-unit> - <trans-unit id="_msg124"> - <source xml:space="preserve">&Load PSBT from file...</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">329</context></context-group> - </trans-unit> - <trans-unit id="_msg125"> + <trans-unit id="_msg131"> <source xml:space="preserve">Load Partially Signed Bitcoin Transaction</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">330</context></context-group> </trans-unit> - <trans-unit id="_msg126"> - <source xml:space="preserve">Load PSBT from clipboard...</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">331</context></context-group> - </trans-unit> - <trans-unit id="_msg127"> + <trans-unit id="_msg132"> <source xml:space="preserve">Load Partially Signed Bitcoin Transaction from clipboard</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">332</context></context-group> </trans-unit> - <trans-unit id="_msg128"> + <trans-unit id="_msg133"> <source xml:space="preserve">Node window</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">334</context></context-group> </trans-unit> - <trans-unit id="_msg129"> + <trans-unit id="_msg134"> <source xml:space="preserve">Open node debugging and diagnostic console</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">335</context></context-group> </trans-unit> - <trans-unit id="_msg130"> + <trans-unit id="_msg135"> <source xml:space="preserve">&Sending addresses</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">340</context></context-group> </trans-unit> - <trans-unit id="_msg131"> + <trans-unit id="_msg136"> <source xml:space="preserve">&Receiving addresses</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">342</context></context-group> </trans-unit> - <trans-unit id="_msg132"> + <trans-unit id="_msg137"> <source xml:space="preserve">Open a bitcoin: URI</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">346</context></context-group> </trans-unit> - <trans-unit id="_msg133"> + <trans-unit id="_msg138"> <source xml:space="preserve">Open Wallet</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">348</context></context-group> </trans-unit> - <trans-unit id="_msg134"> + <trans-unit id="_msg139"> <source xml:space="preserve">Open a wallet</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">350</context></context-group> </trans-unit> - <trans-unit id="_msg135"> - <source xml:space="preserve">Close Wallet...</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">353</context></context-group> - </trans-unit> - <trans-unit id="_msg136"> + <trans-unit id="_msg140"> <source xml:space="preserve">Close wallet</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">354</context></context-group> </trans-unit> - <trans-unit id="_msg137"> - <source xml:space="preserve">Close All Wallets...</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">360</context></context-group> - </trans-unit> - <trans-unit id="_msg138"> + <trans-unit id="_msg141"> <source xml:space="preserve">Close all wallets</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">361</context></context-group> </trans-unit> - <trans-unit id="_msg139"> + <trans-unit id="_msg142"> <source xml:space="preserve">Show the %1 help message to get a list with possible Bitcoin command-line options</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">365</context></context-group> </trans-unit> - <trans-unit id="_msg140"> + <trans-unit id="_msg143"> <source xml:space="preserve">&Mask values</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">367</context></context-group> </trans-unit> - <trans-unit id="_msg141"> + <trans-unit id="_msg144"> <source xml:space="preserve">Mask the values in the Overview tab</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">369</context></context-group> </trans-unit> - <trans-unit id="_msg142"> + <trans-unit id="_msg145"> <source xml:space="preserve">default wallet</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">401</context></context-group> </trans-unit> - <trans-unit id="_msg143"> + <trans-unit id="_msg146"> <source xml:space="preserve">No wallets available</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">422</context></context-group> </trans-unit> - <trans-unit id="_msg144"> + <trans-unit id="_msg147"> <source xml:space="preserve">&Window</source> <target xml:space="preserve" state="needs-review-translation">&Window</target> <context-group purpose="location"><context context-type="linenumber">486</context></context-group> </trans-unit> - <trans-unit id="_msg145"> + <trans-unit id="_msg148"> <source xml:space="preserve">Minimize</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">488</context></context-group> </trans-unit> - <trans-unit id="_msg146"> + <trans-unit id="_msg149"> <source xml:space="preserve">Zoom</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">498</context></context-group> </trans-unit> - <trans-unit id="_msg147"> + <trans-unit id="_msg150"> <source xml:space="preserve">Main Window</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">516</context></context-group> </trans-unit> - <trans-unit id="_msg148"> + <trans-unit id="_msg151"> <source xml:space="preserve">%1 client</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">761</context></context-group> </trans-unit> - <trans-unit id="_msg149"> - <source xml:space="preserve">Connecting to peers...</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1010</context></context-group> - </trans-unit> - <trans-unit id="_msg150" approved="yes"> - <source xml:space="preserve">Catching up...</source> - <target xml:space="preserve">Catching up...</target> - <context-group purpose="location"><context context-type="linenumber">1047</context></context-group> - </trans-unit> - <trans-unit id="_msg151"> + <trans-unit id="_msg152"> <source xml:space="preserve">Error: %1</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1094</context></context-group> </trans-unit> - <trans-unit id="_msg152"> + <trans-unit id="_msg153"> <source xml:space="preserve">Warning: %1</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1098</context></context-group> </trans-unit> - <trans-unit id="_msg153"> + <trans-unit id="_msg154"> <source xml:space="preserve">Date: %1 </source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1198</context></context-group> </trans-unit> - <trans-unit id="_msg154"> + <trans-unit id="_msg155"> <source xml:space="preserve">Amount: %1 </source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1199</context></context-group> </trans-unit> - <trans-unit id="_msg155"> + <trans-unit id="_msg156"> <source xml:space="preserve">Wallet: %1 </source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1201</context></context-group> </trans-unit> - <trans-unit id="_msg156"> + <trans-unit id="_msg157"> <source xml:space="preserve">Type: %1 </source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1203</context></context-group> </trans-unit> - <trans-unit id="_msg157"> + <trans-unit id="_msg158"> <source xml:space="preserve">Label: %1 </source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1205</context></context-group> </trans-unit> - <trans-unit id="_msg158"> + <trans-unit id="_msg159"> <source xml:space="preserve">Address: %1 </source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1207</context></context-group> </trans-unit> - <trans-unit id="_msg159" approved="yes"> + <trans-unit id="_msg160" approved="yes"> <source xml:space="preserve">Sent transaction</source> <target xml:space="preserve">Sent transaction</target> <context-group purpose="location"><context context-type="linenumber">1208</context></context-group> </trans-unit> - <trans-unit id="_msg160" approved="yes"> + <trans-unit id="_msg161" approved="yes"> <source xml:space="preserve">Incoming transaction</source> <target xml:space="preserve">Incoming transaction</target> <context-group purpose="location"><context context-type="linenumber">1208</context></context-group> </trans-unit> - <trans-unit id="_msg161"> + <trans-unit id="_msg162"> <source xml:space="preserve">HD key generation is <b>enabled</b></source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1260</context></context-group> </trans-unit> - <trans-unit id="_msg162"> + <trans-unit id="_msg163"> <source xml:space="preserve">HD key generation is <b>disabled</b></source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1260</context></context-group> </trans-unit> - <trans-unit id="_msg163"> + <trans-unit id="_msg164"> <source xml:space="preserve">Private key <b>disabled</b></source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1260</context></context-group> </trans-unit> - <trans-unit id="_msg164" approved="yes"> + <trans-unit id="_msg165" approved="yes"> <source xml:space="preserve">Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> <target xml:space="preserve">Wallet is <b>encrypted</b> and currently <b>unlocked</b></target> <context-group purpose="location"><context context-type="linenumber">1279</context></context-group> </trans-unit> - <trans-unit id="_msg165" approved="yes"> + <trans-unit id="_msg166" approved="yes"> <source xml:space="preserve">Wallet is <b>encrypted</b> and currently <b>locked</b></source> <target xml:space="preserve">Wallet is <b>encrypted</b> and currently <b>locked</b></target> <context-group purpose="location"><context context-type="linenumber">1287</context></context-group> </trans-unit> - <trans-unit id="_msg166"> + <trans-unit id="_msg167"> <source xml:space="preserve">Original message:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1408</context></context-group> </trans-unit> </group> <group restype="x-trolltech-linguist-context" resname="UnitDisplayStatusBarControl"> - <trans-unit id="_msg167"> + <trans-unit id="_msg168"> <source xml:space="preserve">Unit to show amounts in. Click to select another unit.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1448</context></context-group> @@ -903,87 +908,87 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../forms/coincontroldialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="CoinControlDialog"> - <trans-unit id="_msg168"> + <trans-unit id="_msg169"> <source xml:space="preserve">Coin Selection</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">14</context></context-group> </trans-unit> - <trans-unit id="_msg169"> + <trans-unit id="_msg170"> <source xml:space="preserve">Quantity:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">48</context></context-group> </trans-unit> - <trans-unit id="_msg170"> + <trans-unit id="_msg171"> <source xml:space="preserve">Bytes:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">77</context></context-group> </trans-unit> - <trans-unit id="_msg171"> + <trans-unit id="_msg172"> <source xml:space="preserve">Amount:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">122</context></context-group> </trans-unit> - <trans-unit id="_msg172"> + <trans-unit id="_msg173"> <source xml:space="preserve">Fee:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">202</context></context-group> </trans-unit> - <trans-unit id="_msg173"> + <trans-unit id="_msg174"> <source xml:space="preserve">Dust:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">154</context></context-group> </trans-unit> - <trans-unit id="_msg174"> + <trans-unit id="_msg175"> <source xml:space="preserve">After Fee:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">247</context></context-group> </trans-unit> - <trans-unit id="_msg175"> + <trans-unit id="_msg176"> <source xml:space="preserve">Change:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">279</context></context-group> </trans-unit> - <trans-unit id="_msg176"> + <trans-unit id="_msg177"> <source xml:space="preserve">(un)select all</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">335</context></context-group> </trans-unit> - <trans-unit id="_msg177"> + <trans-unit id="_msg178"> <source xml:space="preserve">Tree mode</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">351</context></context-group> </trans-unit> - <trans-unit id="_msg178"> + <trans-unit id="_msg179"> <source xml:space="preserve">List mode</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">364</context></context-group> </trans-unit> - <trans-unit id="_msg179"> + <trans-unit id="_msg180"> <source xml:space="preserve">Amount</source> <target xml:space="preserve" state="needs-review-translation">Amount</target> <context-group purpose="location"><context context-type="linenumber">420</context></context-group> </trans-unit> - <trans-unit id="_msg180"> + <trans-unit id="_msg181"> <source xml:space="preserve">Received with label</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">425</context></context-group> </trans-unit> - <trans-unit id="_msg181"> + <trans-unit id="_msg182"> <source xml:space="preserve">Received with address</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">430</context></context-group> </trans-unit> - <trans-unit id="_msg182"> + <trans-unit id="_msg183"> <source xml:space="preserve">Date</source> <target xml:space="preserve" state="needs-review-translation">Date</target> <context-group purpose="location"><context context-type="linenumber">435</context></context-group> </trans-unit> - <trans-unit id="_msg183"> + <trans-unit id="_msg184"> <source xml:space="preserve">Confirmations</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">440</context></context-group> </trans-unit> - <trans-unit id="_msg184"> + <trans-unit id="_msg185"> <source xml:space="preserve">Confirmed</source> <target xml:space="preserve" state="needs-review-translation">Confirmed</target> <context-group purpose="location"><context context-type="linenumber">443</context></context-group> @@ -992,172 +997,172 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../coincontroldialog.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="CoinControlDialog"> - <trans-unit id="_msg185"> - <source xml:space="preserve">Copy address</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">54</context></context-group> - </trans-unit> <trans-unit id="_msg186"> - <source xml:space="preserve">Copy label</source> + <source xml:space="preserve">Copy address</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">55</context></context-group> </trans-unit> <trans-unit id="_msg187"> - <source xml:space="preserve">Copy amount</source> + <source xml:space="preserve">Copy label</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">56</context></context-group> - <context-group purpose="location"><context context-type="linenumber">82</context></context-group> </trans-unit> <trans-unit id="_msg188"> - <source xml:space="preserve">Copy transaction ID</source> + <source xml:space="preserve">Copy amount</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">57</context></context-group> + <context-group purpose="location"><context context-type="linenumber">66</context></context-group> </trans-unit> <trans-unit id="_msg189"> - <source xml:space="preserve">Lock unspent</source> + <source xml:space="preserve">Copy transaction ID</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">58</context></context-group> </trans-unit> <trans-unit id="_msg190"> - <source xml:space="preserve">Unlock unspent</source> + <source xml:space="preserve">Lock unspent</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">59</context></context-group> + <context-group purpose="location"><context context-type="linenumber">60</context></context-group> </trans-unit> <trans-unit id="_msg191"> - <source xml:space="preserve">Copy quantity</source> + <source xml:space="preserve">Unlock unspent</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">81</context></context-group> + <context-group purpose="location"><context context-type="linenumber">61</context></context-group> </trans-unit> <trans-unit id="_msg192"> - <source xml:space="preserve">Copy fee</source> + <source xml:space="preserve">Copy quantity</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">83</context></context-group> + <context-group purpose="location"><context context-type="linenumber">65</context></context-group> </trans-unit> <trans-unit id="_msg193"> - <source xml:space="preserve">Copy after fee</source> + <source xml:space="preserve">Copy fee</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">84</context></context-group> + <context-group purpose="location"><context context-type="linenumber">67</context></context-group> </trans-unit> <trans-unit id="_msg194"> - <source xml:space="preserve">Copy bytes</source> + <source xml:space="preserve">Copy after fee</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">85</context></context-group> + <context-group purpose="location"><context context-type="linenumber">68</context></context-group> </trans-unit> <trans-unit id="_msg195"> - <source xml:space="preserve">Copy dust</source> + <source xml:space="preserve">Copy bytes</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">86</context></context-group> + <context-group purpose="location"><context context-type="linenumber">69</context></context-group> </trans-unit> <trans-unit id="_msg196"> - <source xml:space="preserve">Copy change</source> + <source xml:space="preserve">Copy dust</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">87</context></context-group> + <context-group purpose="location"><context context-type="linenumber">70</context></context-group> </trans-unit> <trans-unit id="_msg197"> - <source xml:space="preserve">(%1 locked)</source> + <source xml:space="preserve">Copy change</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">389</context></context-group> + <context-group purpose="location"><context context-type="linenumber">71</context></context-group> </trans-unit> <trans-unit id="_msg198"> - <source xml:space="preserve">yes</source> + <source xml:space="preserve">(%1 locked)</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">544</context></context-group> + <context-group purpose="location"><context context-type="linenumber">373</context></context-group> </trans-unit> <trans-unit id="_msg199"> - <source xml:space="preserve">no</source> + <source xml:space="preserve">yes</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">544</context></context-group> + <context-group purpose="location"><context context-type="linenumber">528</context></context-group> </trans-unit> <trans-unit id="_msg200"> - <source xml:space="preserve">This label turns red if any recipient receives an amount smaller than the current dust threshold.</source> + <source xml:space="preserve">no</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">558</context></context-group> + <context-group purpose="location"><context context-type="linenumber">528</context></context-group> </trans-unit> <trans-unit id="_msg201"> - <source xml:space="preserve">Can vary +/- %1 satoshi(s) per input.</source> + <source xml:space="preserve">This label turns red if any recipient receives an amount smaller than the current dust threshold.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">563</context></context-group> + <context-group purpose="location"><context context-type="linenumber">542</context></context-group> </trans-unit> <trans-unit id="_msg202"> - <source xml:space="preserve">(no label)</source> + <source xml:space="preserve">Can vary +/- %1 satoshi(s) per input.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">601</context></context-group> - <context-group purpose="location"><context context-type="linenumber">655</context></context-group> + <context-group purpose="location"><context context-type="linenumber">547</context></context-group> </trans-unit> <trans-unit id="_msg203"> - <source xml:space="preserve">change from %1 (%2)</source> + <source xml:space="preserve">(no label)</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">648</context></context-group> + <context-group purpose="location"><context context-type="linenumber">585</context></context-group> + <context-group purpose="location"><context context-type="linenumber">639</context></context-group> </trans-unit> <trans-unit id="_msg204"> + <source xml:space="preserve">change from %1 (%2)</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">632</context></context-group> + </trans-unit> + <trans-unit id="_msg205"> <source xml:space="preserve">(change)</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">649</context></context-group> + <context-group purpose="location"><context context-type="linenumber">633</context></context-group> </trans-unit> </group> </body></file> <file original="../walletcontroller.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="CreateWalletActivity"> - <trans-unit id="_msg205"> - <source xml:space="preserve">Creating Wallet <b>%1</b>...</source> + <trans-unit id="_msg206"> + <source xml:space="preserve">Creating Wallet <b>%1</b>…</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">250</context></context-group> </trans-unit> - <trans-unit id="_msg206"> + <trans-unit id="_msg207"> <source xml:space="preserve">Create wallet failed</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">278</context></context-group> </trans-unit> - <trans-unit id="_msg207"> + <trans-unit id="_msg208"> <source xml:space="preserve">Create wallet warning</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">280</context></context-group> </trans-unit> </group> <group restype="x-trolltech-linguist-context" resname="OpenWalletActivity"> - <trans-unit id="_msg208"> + <trans-unit id="_msg209"> <source xml:space="preserve">Open wallet failed</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">319</context></context-group> </trans-unit> - <trans-unit id="_msg209"> + <trans-unit id="_msg210"> <source xml:space="preserve">Open wallet warning</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">321</context></context-group> </trans-unit> - <trans-unit id="_msg210"> + <trans-unit id="_msg211"> <source xml:space="preserve">default wallet</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">331</context></context-group> </trans-unit> - <trans-unit id="_msg211"> - <source xml:space="preserve">Opening Wallet <b>%1</b>...</source> + <trans-unit id="_msg212"> + <source xml:space="preserve">Opening Wallet <b>%1</b>…</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">333</context></context-group> </trans-unit> </group> <group restype="x-trolltech-linguist-context" resname="WalletController"> - <trans-unit id="_msg212"> + <trans-unit id="_msg213"> <source xml:space="preserve">Close wallet</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">86</context></context-group> </trans-unit> - <trans-unit id="_msg213"> + <trans-unit id="_msg214"> <source xml:space="preserve">Are you sure you wish to close the wallet <i>%1</i>?</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">87</context></context-group> </trans-unit> - <trans-unit id="_msg214"> + <trans-unit id="_msg215"> <source xml:space="preserve">Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">88</context></context-group> </trans-unit> - <trans-unit id="_msg215"> + <trans-unit id="_msg216"> <source xml:space="preserve">Close all wallets</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">101</context></context-group> </trans-unit> - <trans-unit id="_msg216"> + <trans-unit id="_msg217"> <source xml:space="preserve">Are you sure you wish to close all wallets?</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">102</context></context-group> @@ -1166,62 +1171,62 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../forms/createwalletdialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="CreateWalletDialog"> - <trans-unit id="_msg217"> + <trans-unit id="_msg218"> <source xml:space="preserve">Create Wallet</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">14</context></context-group> </trans-unit> - <trans-unit id="_msg218"> + <trans-unit id="_msg219"> <source xml:space="preserve">Wallet Name</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">25</context></context-group> </trans-unit> - <trans-unit id="_msg219"> + <trans-unit id="_msg220"> <source xml:space="preserve">Wallet</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">38</context></context-group> </trans-unit> - <trans-unit id="_msg220"> + <trans-unit id="_msg221"> <source xml:space="preserve">Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">47</context></context-group> </trans-unit> - <trans-unit id="_msg221"> + <trans-unit id="_msg222"> <source xml:space="preserve">Encrypt Wallet</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">50</context></context-group> </trans-unit> - <trans-unit id="_msg222"> + <trans-unit id="_msg223"> <source xml:space="preserve">Advanced Options</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">76</context></context-group> </trans-unit> - <trans-unit id="_msg223"> + <trans-unit id="_msg224"> <source xml:space="preserve">Disable private keys for this wallet. Wallets with private keys disabled will have no private keys and cannot have an HD seed or imported private keys. This is ideal for watch-only wallets.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">85</context></context-group> </trans-unit> - <trans-unit id="_msg224"> + <trans-unit id="_msg225"> <source xml:space="preserve">Disable Private Keys</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">88</context></context-group> </trans-unit> - <trans-unit id="_msg225"> + <trans-unit id="_msg226"> <source xml:space="preserve">Make a blank wallet. Blank wallets do not initially have private keys or scripts. Private keys and addresses can be imported, or an HD seed can be set, at a later time.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">95</context></context-group> </trans-unit> - <trans-unit id="_msg226"> + <trans-unit id="_msg227"> <source xml:space="preserve">Make Blank Wallet</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">98</context></context-group> </trans-unit> - <trans-unit id="_msg227"> + <trans-unit id="_msg228"> <source xml:space="preserve">Use descriptors for scriptPubKey management</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">105</context></context-group> </trans-unit> - <trans-unit id="_msg228"> + <trans-unit id="_msg229"> <source xml:space="preserve">Descriptor Wallet</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">108</context></context-group> @@ -1230,12 +1235,12 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../createwalletdialog.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="CreateWalletDialog"> - <trans-unit id="_msg229"> + <trans-unit id="_msg230"> <source xml:space="preserve">Create</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">21</context></context-group> </trans-unit> - <trans-unit id="_msg230"> + <trans-unit id="_msg231"> <source xml:space="preserve">Compiled without sqlite support (required for descriptor wallets)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">63</context></context-group> @@ -1244,27 +1249,27 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../forms/editaddressdialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="EditAddressDialog"> - <trans-unit id="_msg231" approved="yes"> + <trans-unit id="_msg232" approved="yes"> <source xml:space="preserve">Edit Address</source> <target xml:space="preserve">Edit Address</target> <context-group purpose="location"><context context-type="linenumber">14</context></context-group> </trans-unit> - <trans-unit id="_msg232" approved="yes"> + <trans-unit id="_msg233" approved="yes"> <source xml:space="preserve">&Label</source> <target xml:space="preserve">&Label</target> <context-group purpose="location"><context context-type="linenumber">25</context></context-group> </trans-unit> - <trans-unit id="_msg233"> + <trans-unit id="_msg234"> <source xml:space="preserve">The label associated with this address list entry</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">35</context></context-group> </trans-unit> - <trans-unit id="_msg234"> + <trans-unit id="_msg235"> <source xml:space="preserve">The address associated with this address list entry. This can only be modified for sending addresses.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">52</context></context-group> </trans-unit> - <trans-unit id="_msg235" approved="yes"> + <trans-unit id="_msg236" approved="yes"> <source xml:space="preserve">&Address</source> <target xml:space="preserve">&Address</target> <context-group purpose="location"><context context-type="linenumber">42</context></context-group> @@ -1273,42 +1278,42 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../editaddressdialog.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="EditAddressDialog"> - <trans-unit id="_msg236"> + <trans-unit id="_msg237"> <source xml:space="preserve">New sending address</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">29</context></context-group> </trans-unit> - <trans-unit id="_msg237"> + <trans-unit id="_msg238"> <source xml:space="preserve">Edit receiving address</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">32</context></context-group> </trans-unit> - <trans-unit id="_msg238"> + <trans-unit id="_msg239"> <source xml:space="preserve">Edit sending address</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">36</context></context-group> </trans-unit> - <trans-unit id="_msg239"> + <trans-unit id="_msg240"> <source xml:space="preserve">The entered address "%1" is not a valid Bitcoin address.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">113</context></context-group> </trans-unit> - <trans-unit id="_msg240"> + <trans-unit id="_msg241"> <source xml:space="preserve">Address "%1" already exists as a receiving address with label "%2" and so cannot be added as a sending address.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">146</context></context-group> </trans-unit> - <trans-unit id="_msg241"> + <trans-unit id="_msg242"> <source xml:space="preserve">The entered address "%1" is already in the address book with label "%2".</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">151</context></context-group> </trans-unit> - <trans-unit id="_msg242"> + <trans-unit id="_msg243"> <source xml:space="preserve">Could not unlock wallet.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">123</context></context-group> </trans-unit> - <trans-unit id="_msg243"> + <trans-unit id="_msg244"> <source xml:space="preserve">New key generation failed.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">128</context></context-group> @@ -1317,133 +1322,122 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../intro.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="FreespaceChecker"> - <trans-unit id="_msg244" approved="yes"> + <trans-unit id="_msg245" approved="yes"> <source xml:space="preserve">A new data directory will be created.</source> <target xml:space="preserve">A new data directory will be created.</target> - <context-group purpose="location"><context context-type="linenumber">72</context></context-group> + <context-group purpose="location"><context context-type="linenumber">73</context></context-group> </trans-unit> - <trans-unit id="_msg245" approved="yes"> + <trans-unit id="_msg246" approved="yes"> <source xml:space="preserve">name</source> <target xml:space="preserve">name</target> - <context-group purpose="location"><context context-type="linenumber">94</context></context-group> + <context-group purpose="location"><context context-type="linenumber">95</context></context-group> </trans-unit> - <trans-unit id="_msg246" approved="yes"> + <trans-unit id="_msg247" approved="yes"> <source xml:space="preserve">Directory already exists. Add %1 if you intend to create a new directory here.</source> <target xml:space="preserve">Directory already exists. Add %1 if you intend to create a new directory here.</target> - <context-group purpose="location"><context context-type="linenumber">96</context></context-group> + <context-group purpose="location"><context context-type="linenumber">97</context></context-group> </trans-unit> - <trans-unit id="_msg247" approved="yes"> + <trans-unit id="_msg248" approved="yes"> <source xml:space="preserve">Path already exists, and is not a directory.</source> <target xml:space="preserve">Path already exists, and is not a directory.</target> - <context-group purpose="location"><context context-type="linenumber">99</context></context-group> + <context-group purpose="location"><context context-type="linenumber">100</context></context-group> </trans-unit> - <trans-unit id="_msg248" approved="yes"> + <trans-unit id="_msg249" approved="yes"> <source xml:space="preserve">Cannot create data directory here.</source> <target xml:space="preserve">Cannot create data directory here.</target> - <context-group purpose="location"><context context-type="linenumber">106</context></context-group> + <context-group purpose="location"><context context-type="linenumber">107</context></context-group> </trans-unit> </group> <group restype="x-trolltech-linguist-context" resname="Intro"> - <trans-unit id="_msg249"> + <trans-unit id="_msg250"> <source xml:space="preserve">Bitcoin</source> <target xml:space="preserve" state="needs-review-translation">Bitcoin</target> - <context-group purpose="location"><context context-type="linenumber">138</context></context-group> - </trans-unit> - <trans-unit id="_msg250"> - <source xml:space="preserve">Discard blocks after verification, except most recent %1 GB (prune)</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">146</context></context-group> + <context-group purpose="location"><context context-type="linenumber">139</context></context-group> </trans-unit> <trans-unit id="_msg251"> - <source xml:space="preserve">At least %1 GB of data will be stored in this directory, and it will grow over time.</source> + <source xml:space="preserve">%1 GB of free space available</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">358</context></context-group> + <context-group purpose="location"><context context-type="linenumber">301</context></context-group> </trans-unit> <trans-unit id="_msg252"> - <source xml:space="preserve">Approximately %1 GB of data will be stored in this directory.</source> + <source xml:space="preserve">(of %1 GB needed)</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">361</context></context-group> + <context-group purpose="location"><context context-type="linenumber">303</context></context-group> </trans-unit> <trans-unit id="_msg253"> - <source xml:space="preserve">%1 will download and store a copy of the Bitcoin block chain.</source> + <source xml:space="preserve">(%1 GB needed for full chain)</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">365</context></context-group> + <context-group purpose="location"><context context-type="linenumber">306</context></context-group> </trans-unit> <trans-unit id="_msg254"> - <source xml:space="preserve">The wallet will also be stored in this directory.</source> + <source xml:space="preserve">At least %1 GB of data will be stored in this directory, and it will grow over time.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">367</context></context-group> + <context-group purpose="location"><context context-type="linenumber">378</context></context-group> </trans-unit> <trans-unit id="_msg255"> - <source xml:space="preserve">Error: Specified data directory "%1" cannot be created.</source> + <source xml:space="preserve">Approximately %1 GB of data will be stored in this directory.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">230</context></context-group> + <context-group purpose="location"><context context-type="linenumber">381</context></context-group> </trans-unit> - <trans-unit id="_msg256" approved="yes"> - <source xml:space="preserve">Error</source> - <target xml:space="preserve">Error</target> - <context-group purpose="location"><context context-type="linenumber">260</context></context-group> - </trans-unit> - <group restype="x-gettext-plurals"> - <context-group purpose="location"><context context-type="linenumber">281</context></context-group> - <trans-unit id="_msg257[0]" approved="yes"> - <source xml:space="preserve">%n GB of free space available</source> - <target xml:space="preserve">%n GB of free space available</target> - </trans-unit> - <trans-unit id="_msg257[1]" approved="yes"> - <source xml:space="preserve">%n GB of free space available</source> - <target xml:space="preserve">%n GB of free space available</target> - </trans-unit> - </group> <group restype="x-gettext-plurals"> - <context-group purpose="location"><context context-type="linenumber">283</context></context-group> - <trans-unit id="_msg258[0]" approved="yes"> - <source xml:space="preserve">(of %n GB needed)</source> - <target xml:space="preserve">(of %n GB needed)</target> - </trans-unit> - <trans-unit id="_msg258[1]" approved="yes"> - <source xml:space="preserve">(of %n GB needed)</source> - <target xml:space="preserve">(of %n GB needed)</target> - </trans-unit> - </group> - <group restype="x-gettext-plurals"> - <context-group purpose="location"><context context-type="linenumber">286</context></context-group> - <trans-unit id="_msg259[0]"> - <source xml:space="preserve">(%n GB needed for full chain)</source> + <context-group purpose="location"><context context-type="linenumber">388</context></context-group> + <context-group><context context-type="x-gettext-msgctxt">block chain pruning</context></context-group> + <trans-unit id="_msg256[0]"> + <source xml:space="preserve">(sufficient to restore backups %n day(s) old)</source> <target xml:space="preserve"></target> </trans-unit> - <trans-unit id="_msg259[1]"> - <source xml:space="preserve">(%n GB needed for full chain)</source> + <trans-unit id="_msg256[1]"> + <source xml:space="preserve">(sufficient to restore backups %n day(s) old)</source> <target xml:space="preserve"></target> </trans-unit> </group> + <trans-unit id="_msg257"> + <source xml:space="preserve">%1 will download and store a copy of the Bitcoin block chain.</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">390</context></context-group> + </trans-unit> + <trans-unit id="_msg258"> + <source xml:space="preserve">The wallet will also be stored in this directory.</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">392</context></context-group> + </trans-unit> + <trans-unit id="_msg259"> + <source xml:space="preserve">Error: Specified data directory "%1" cannot be created.</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">250</context></context-group> + </trans-unit> + <trans-unit id="_msg260" approved="yes"> + <source xml:space="preserve">Error</source> + <target xml:space="preserve">Error</target> + <context-group purpose="location"><context context-type="linenumber">280</context></context-group> + </trans-unit> </group> </body></file> <file original="../utilitydialog.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="HelpMessageDialog"> - <trans-unit id="_msg260"> + <trans-unit id="_msg261"> <source xml:space="preserve">version</source> <target xml:space="preserve" state="needs-review-translation">version</target> <context-group purpose="location"><context context-type="linenumber">37</context></context-group> </trans-unit> - <trans-unit id="_msg261"> + <trans-unit id="_msg262"> <source xml:space="preserve">About %1</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">41</context></context-group> </trans-unit> - <trans-unit id="_msg262"> + <trans-unit id="_msg263"> <source xml:space="preserve">Command-line options</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">60</context></context-group> </trans-unit> </group> <group restype="x-trolltech-linguist-context" resname="ShutdownWindow"> - <trans-unit id="_msg263"> - <source xml:space="preserve">%1 is shutting down...</source> + <trans-unit id="_msg264"> + <source xml:space="preserve">%1 is shutting down…</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">145</context></context-group> </trans-unit> - <trans-unit id="_msg264"> + <trans-unit id="_msg265"> <source xml:space="preserve">Do not shut down the computer until this window disappears.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">146</context></context-group> @@ -1452,47 +1446,57 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../forms/intro.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="Intro"> - <trans-unit id="_msg265" approved="yes"> + <trans-unit id="_msg266" approved="yes"> <source xml:space="preserve">Welcome</source> <target xml:space="preserve">Welcome</target> <context-group purpose="location"><context context-type="linenumber">14</context></context-group> </trans-unit> - <trans-unit id="_msg266"> + <trans-unit id="_msg267"> <source xml:space="preserve">Welcome to %1.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">23</context></context-group> </trans-unit> - <trans-unit id="_msg267"> + <trans-unit id="_msg268"> <source xml:space="preserve">As this is the first time the program is launched, you can choose where %1 will store its data.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">49</context></context-group> </trans-unit> - <trans-unit id="_msg268"> + <trans-unit id="_msg269"> <source xml:space="preserve">When you click OK, %1 will begin to download and process the full %4 block chain (%2GB) starting with the earliest transactions in %3 when %4 initially launched.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">206</context></context-group> </trans-unit> - <trans-unit id="_msg269"> + <trans-unit id="_msg270"> + <source xml:space="preserve">Limit block chain storage to</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">238</context></context-group> + </trans-unit> + <trans-unit id="_msg271"> <source xml:space="preserve">Reverting this setting requires re-downloading the entire blockchain. It is faster to download the full chain first and prune it later. Disables some advanced features.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">216</context></context-group> + <context-group purpose="location"><context context-type="linenumber">241</context></context-group> </trans-unit> - <trans-unit id="_msg270"> + <trans-unit id="_msg272"> + <source xml:space="preserve"> GB</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">248</context></context-group> + </trans-unit> + <trans-unit id="_msg273"> <source xml:space="preserve">This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">226</context></context-group> + <context-group purpose="location"><context context-type="linenumber">216</context></context-group> </trans-unit> - <trans-unit id="_msg271"> + <trans-unit id="_msg274"> <source xml:space="preserve">If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">236</context></context-group> + <context-group purpose="location"><context context-type="linenumber">226</context></context-group> </trans-unit> - <trans-unit id="_msg272" approved="yes"> + <trans-unit id="_msg275" approved="yes"> <source xml:space="preserve">Use the default data directory</source> <target xml:space="preserve">Use the default data directory</target> <context-group purpose="location"><context context-type="linenumber">66</context></context-group> </trans-unit> - <trans-unit id="_msg273" approved="yes"> + <trans-unit id="_msg276" approved="yes"> <source xml:space="preserve">Use a custom data directory:</source> <target xml:space="preserve">Use a custom data directory:</target> <context-group purpose="location"><context context-type="linenumber">73</context></context-group> @@ -1501,86 +1505,86 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../forms/modaloverlay.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="ModalOverlay"> - <trans-unit id="_msg274"> + <trans-unit id="_msg277"> <source xml:space="preserve">Form</source> <target xml:space="preserve" state="needs-review-translation">Form</target> <context-group purpose="location"><context context-type="linenumber">14</context></context-group> </trans-unit> - <trans-unit id="_msg275"> + <trans-unit id="_msg278"> <source xml:space="preserve">Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">133</context></context-group> </trans-unit> - <trans-unit id="_msg276"> + <trans-unit id="_msg279"> <source xml:space="preserve">Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">152</context></context-group> </trans-unit> - <trans-unit id="_msg277"> + <trans-unit id="_msg280"> <source xml:space="preserve">Number of blocks left</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">215</context></context-group> </trans-unit> - <trans-unit id="_msg278"> - <source xml:space="preserve">Unknown...</source> + <trans-unit id="_msg281"> + <source xml:space="preserve">Unknown…</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">222</context></context-group> <context-group purpose="location"><context context-type="linenumber">248</context></context-group> - <context-group purpose="location"><context context-type="sourcefile">../modaloverlay.cpp</context><context context-type="linenumber">153</context></context-group> + <context-group purpose="location"><context context-type="sourcefile">../modaloverlay.cpp</context><context context-type="linenumber">152</context></context-group> </trans-unit> - <trans-unit id="_msg279"> + <trans-unit id="_msg282"> + <source xml:space="preserve">calculating…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">292</context></context-group> + <context-group purpose="location"><context context-type="linenumber">312</context></context-group> + </trans-unit> + <trans-unit id="_msg283"> <source xml:space="preserve">Last block time</source> <target xml:space="preserve" state="needs-review-translation">Last block time</target> <context-group purpose="location"><context context-type="linenumber">235</context></context-group> </trans-unit> - <trans-unit id="_msg280"> + <trans-unit id="_msg284"> <source xml:space="preserve">Progress</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">261</context></context-group> </trans-unit> - <trans-unit id="_msg281"> + <trans-unit id="_msg285"> <source xml:space="preserve">Progress increase per hour</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">295</context></context-group> - </trans-unit> - <trans-unit id="_msg282"> - <source xml:space="preserve">calculating...</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">302</context></context-group> - <context-group purpose="location"><context context-type="linenumber">322</context></context-group> + <context-group purpose="location"><context context-type="linenumber">285</context></context-group> </trans-unit> - <trans-unit id="_msg283"> + <trans-unit id="_msg286"> <source xml:space="preserve">Estimated time left until synced</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">315</context></context-group> + <context-group purpose="location"><context context-type="linenumber">305</context></context-group> </trans-unit> - <trans-unit id="_msg284"> + <trans-unit id="_msg287"> <source xml:space="preserve">Hide</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">352</context></context-group> + <context-group purpose="location"><context context-type="linenumber">342</context></context-group> </trans-unit> - <trans-unit id="_msg285"> + <trans-unit id="_msg288"> <source xml:space="preserve">Esc</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">355</context></context-group> + <context-group purpose="location"><context context-type="linenumber">345</context></context-group> </trans-unit> </group> </body></file> <file original="../modaloverlay.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="ModalOverlay"> - <trans-unit id="_msg286"> + <trans-unit id="_msg289"> <source xml:space="preserve">%1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">34</context></context-group> </trans-unit> - <trans-unit id="_msg287"> - <source xml:space="preserve">Unknown. Syncing Headers (%1, %2%)...</source> + <trans-unit id="_msg290"> + <source xml:space="preserve">Unknown. Syncing Headers (%1, %2%)…</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">159</context></context-group> + <context-group purpose="location"><context context-type="linenumber">158</context></context-group> </trans-unit> </group> <group restype="x-trolltech-linguist-context" resname="QObject"> - <trans-unit id="_msg288"> + <trans-unit id="_msg291"> <source xml:space="preserve">unknown</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">123</context></context-group> @@ -1589,12 +1593,12 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../forms/openuridialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="OpenURIDialog"> - <trans-unit id="_msg289"> + <trans-unit id="_msg292"> <source xml:space="preserve">Open bitcoin URI</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">14</context></context-group> </trans-unit> - <trans-unit id="_msg290"> + <trans-unit id="_msg293"> <source xml:space="preserve">URI:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">22</context></context-group> @@ -1603,331 +1607,331 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../forms/optionsdialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="OptionsDialog"> - <trans-unit id="_msg291" approved="yes"> + <trans-unit id="_msg294" approved="yes"> <source xml:space="preserve">Options</source> <target xml:space="preserve">Options</target> <context-group purpose="location"><context context-type="linenumber">14</context></context-group> </trans-unit> - <trans-unit id="_msg292" approved="yes"> + <trans-unit id="_msg295" approved="yes"> <source xml:space="preserve">&Main</source> <target xml:space="preserve">&Main</target> <context-group purpose="location"><context context-type="linenumber">27</context></context-group> </trans-unit> - <trans-unit id="_msg293"> + <trans-unit id="_msg296"> <source xml:space="preserve">Automatically start %1 after logging in to the system.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">33</context></context-group> </trans-unit> - <trans-unit id="_msg294"> + <trans-unit id="_msg297"> <source xml:space="preserve">&Start %1 on system login</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">36</context></context-group> </trans-unit> - <trans-unit id="_msg295"> + <trans-unit id="_msg298"> <source xml:space="preserve">Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">58</context></context-group> </trans-unit> - <trans-unit id="_msg296"> + <trans-unit id="_msg299"> <source xml:space="preserve">Size of &database cache</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">108</context></context-group> </trans-unit> - <trans-unit id="_msg297"> + <trans-unit id="_msg300"> <source xml:space="preserve">Number of script &verification threads</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">151</context></context-group> </trans-unit> - <trans-unit id="_msg298"> + <trans-unit id="_msg301"> <source xml:space="preserve">IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">322</context></context-group> <context-group purpose="location"><context context-type="linenumber">509</context></context-group> </trans-unit> - <trans-unit id="_msg299"> + <trans-unit id="_msg302"> <source xml:space="preserve">Shows if the supplied default SOCKS5 proxy is used to reach peers via this network type.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">391</context></context-group> <context-group purpose="location"><context context-type="linenumber">414</context></context-group> <context-group purpose="location"><context context-type="linenumber">437</context></context-group> </trans-unit> - <trans-unit id="_msg300"> + <trans-unit id="_msg303"> <source xml:space="preserve">Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">606</context></context-group> </trans-unit> - <trans-unit id="_msg301"> + <trans-unit id="_msg304"> <source xml:space="preserve">Third party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">686</context></context-group> <context-group purpose="location"><context context-type="linenumber">699</context></context-group> </trans-unit> - <trans-unit id="_msg302"> + <trans-unit id="_msg305"> <source xml:space="preserve">Open the %1 configuration file from the working directory.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">878</context></context-group> </trans-unit> - <trans-unit id="_msg303"> + <trans-unit id="_msg306"> <source xml:space="preserve">Open Configuration File</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">881</context></context-group> </trans-unit> - <trans-unit id="_msg304" approved="yes"> + <trans-unit id="_msg307" approved="yes"> <source xml:space="preserve">Reset all client options to default.</source> <target xml:space="preserve">Reset all client options to default.</target> <context-group purpose="location"><context context-type="linenumber">891</context></context-group> </trans-unit> - <trans-unit id="_msg305" approved="yes"> + <trans-unit id="_msg308" approved="yes"> <source xml:space="preserve">&Reset Options</source> <target xml:space="preserve">&Reset Options</target> <context-group purpose="location"><context context-type="linenumber">894</context></context-group> </trans-unit> - <trans-unit id="_msg306" approved="yes"> + <trans-unit id="_msg309" approved="yes"> <source xml:space="preserve">&Network</source> <target xml:space="preserve">&Network</target> <context-group purpose="location"><context context-type="linenumber">249</context></context-group> </trans-unit> - <trans-unit id="_msg307"> + <trans-unit id="_msg310"> <source xml:space="preserve">Prune &block storage to</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">61</context></context-group> </trans-unit> - <trans-unit id="_msg308"> + <trans-unit id="_msg311"> <source xml:space="preserve">GB</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">71</context></context-group> </trans-unit> - <trans-unit id="_msg309"> + <trans-unit id="_msg312"> <source xml:space="preserve">Reverting this setting requires re-downloading the entire blockchain.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">96</context></context-group> </trans-unit> - <trans-unit id="_msg310"> + <trans-unit id="_msg313"> <source xml:space="preserve">MiB</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">124</context></context-group> </trans-unit> - <trans-unit id="_msg311"> + <trans-unit id="_msg314"> <source xml:space="preserve">(0 = auto, <0 = leave that many cores free)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">164</context></context-group> </trans-unit> - <trans-unit id="_msg312"> + <trans-unit id="_msg315"> <source xml:space="preserve">W&allet</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">200</context></context-group> </trans-unit> - <trans-unit id="_msg313"> + <trans-unit id="_msg316"> <source xml:space="preserve">Expert</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">206</context></context-group> </trans-unit> - <trans-unit id="_msg314"> + <trans-unit id="_msg317"> <source xml:space="preserve">Enable coin &control features</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">215</context></context-group> </trans-unit> - <trans-unit id="_msg315"> + <trans-unit id="_msg318"> <source xml:space="preserve">If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">222</context></context-group> </trans-unit> - <trans-unit id="_msg316"> + <trans-unit id="_msg319"> <source xml:space="preserve">&Spend unconfirmed change</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">225</context></context-group> </trans-unit> - <trans-unit id="_msg317" approved="yes"> + <trans-unit id="_msg320" approved="yes"> <source xml:space="preserve">Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> <target xml:space="preserve">Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</target> <context-group purpose="location"><context context-type="linenumber">255</context></context-group> </trans-unit> - <trans-unit id="_msg318" approved="yes"> + <trans-unit id="_msg321" approved="yes"> <source xml:space="preserve">Map port using &UPnP</source> <target xml:space="preserve">Map port using &UPnP</target> <context-group purpose="location"><context context-type="linenumber">258</context></context-group> </trans-unit> - <trans-unit id="_msg319"> + <trans-unit id="_msg322"> <source xml:space="preserve">Automatically open the Bitcoin client port on the router. This only works when your router supports NAT-PMP and it is enabled. The external port could be random.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">265</context></context-group> </trans-unit> - <trans-unit id="_msg320"> + <trans-unit id="_msg323"> <source xml:space="preserve">Map port using NA&T-PMP</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">268</context></context-group> </trans-unit> - <trans-unit id="_msg321"> + <trans-unit id="_msg324"> <source xml:space="preserve">Accept connections from outside.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">275</context></context-group> </trans-unit> - <trans-unit id="_msg322"> + <trans-unit id="_msg325"> <source xml:space="preserve">Allow incomin&g connections</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">278</context></context-group> </trans-unit> - <trans-unit id="_msg323"> + <trans-unit id="_msg326"> <source xml:space="preserve">Connect to the Bitcoin network through a SOCKS5 proxy.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">285</context></context-group> </trans-unit> - <trans-unit id="_msg324"> + <trans-unit id="_msg327"> <source xml:space="preserve">&Connect through SOCKS5 proxy (default proxy):</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">288</context></context-group> </trans-unit> - <trans-unit id="_msg325" approved="yes"> + <trans-unit id="_msg328" approved="yes"> <source xml:space="preserve">Proxy &IP:</source> <target xml:space="preserve">Proxy &IP:</target> <context-group purpose="location"><context context-type="linenumber">297</context></context-group> <context-group purpose="location"><context context-type="linenumber">484</context></context-group> </trans-unit> - <trans-unit id="_msg326" approved="yes"> + <trans-unit id="_msg329" approved="yes"> <source xml:space="preserve">&Port:</source> <target xml:space="preserve">&Port:</target> <context-group purpose="location"><context context-type="linenumber">329</context></context-group> <context-group purpose="location"><context context-type="linenumber">516</context></context-group> </trans-unit> - <trans-unit id="_msg327" approved="yes"> + <trans-unit id="_msg330" approved="yes"> <source xml:space="preserve">Port of the proxy (e.g. 9050)</source> <target xml:space="preserve">Port of the proxy (e.g. 9050)</target> <context-group purpose="location"><context context-type="linenumber">354</context></context-group> <context-group purpose="location"><context context-type="linenumber">541</context></context-group> </trans-unit> - <trans-unit id="_msg328"> + <trans-unit id="_msg331"> <source xml:space="preserve">Used for reaching peers via:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">378</context></context-group> </trans-unit> - <trans-unit id="_msg329"> + <trans-unit id="_msg332"> <source xml:space="preserve">IPv4</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">401</context></context-group> </trans-unit> - <trans-unit id="_msg330"> + <trans-unit id="_msg333"> <source xml:space="preserve">IPv6</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">424</context></context-group> </trans-unit> - <trans-unit id="_msg331"> + <trans-unit id="_msg334"> <source xml:space="preserve">Tor</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">447</context></context-group> </trans-unit> - <trans-unit id="_msg332" approved="yes"> + <trans-unit id="_msg335" approved="yes"> <source xml:space="preserve">&Window</source> <target xml:space="preserve">&Window</target> <context-group purpose="location"><context context-type="linenumber">577</context></context-group> </trans-unit> - <trans-unit id="_msg333"> + <trans-unit id="_msg336"> <source xml:space="preserve">Show the icon in the system tray.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">583</context></context-group> </trans-unit> - <trans-unit id="_msg334"> + <trans-unit id="_msg337"> <source xml:space="preserve">&Show tray icon</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">586</context></context-group> </trans-unit> - <trans-unit id="_msg335" approved="yes"> + <trans-unit id="_msg338" approved="yes"> <source xml:space="preserve">Show only a tray icon after minimizing the window.</source> <target xml:space="preserve">Show only a tray icon after minimizing the window.</target> <context-group purpose="location"><context context-type="linenumber">596</context></context-group> </trans-unit> - <trans-unit id="_msg336" approved="yes"> + <trans-unit id="_msg339" approved="yes"> <source xml:space="preserve">&Minimize to the tray instead of the taskbar</source> <target xml:space="preserve">&Minimize to the tray instead of the taskbar</target> <context-group purpose="location"><context context-type="linenumber">599</context></context-group> </trans-unit> - <trans-unit id="_msg337" approved="yes"> + <trans-unit id="_msg340" approved="yes"> <source xml:space="preserve">M&inimize on close</source> <target xml:space="preserve">M&inimize on close</target> <context-group purpose="location"><context context-type="linenumber">609</context></context-group> </trans-unit> - <trans-unit id="_msg338" approved="yes"> + <trans-unit id="_msg341" approved="yes"> <source xml:space="preserve">&Display</source> <target xml:space="preserve">&Display</target> <context-group purpose="location"><context context-type="linenumber">630</context></context-group> </trans-unit> - <trans-unit id="_msg339" approved="yes"> + <trans-unit id="_msg342" approved="yes"> <source xml:space="preserve">User Interface &language:</source> <target xml:space="preserve">User Interface &language:</target> <context-group purpose="location"><context context-type="linenumber">638</context></context-group> </trans-unit> - <trans-unit id="_msg340"> + <trans-unit id="_msg343"> <source xml:space="preserve">The user interface language can be set here. This setting will take effect after restarting %1.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">651</context></context-group> </trans-unit> - <trans-unit id="_msg341" approved="yes"> + <trans-unit id="_msg344" approved="yes"> <source xml:space="preserve">&Unit to show amounts in:</source> <target xml:space="preserve">&Unit to show amounts in:</target> <context-group purpose="location"><context context-type="linenumber">662</context></context-group> </trans-unit> - <trans-unit id="_msg342" approved="yes"> + <trans-unit id="_msg345" approved="yes"> <source xml:space="preserve">Choose the default subdivision unit to show in the interface and when sending coins.</source> <target xml:space="preserve">Choose the default subdivision unit to show in the interface and when sending coins.</target> <context-group purpose="location"><context context-type="linenumber">675</context></context-group> </trans-unit> - <trans-unit id="_msg343"> + <trans-unit id="_msg346"> <source xml:space="preserve">Whether to show coin control features or not.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">212</context></context-group> </trans-unit> - <trans-unit id="_msg344"> + <trans-unit id="_msg347"> <source xml:space="preserve">Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">472</context></context-group> </trans-unit> - <trans-unit id="_msg345"> + <trans-unit id="_msg348"> <source xml:space="preserve">Use separate SOCKS&5 proxy to reach peers via Tor onion services:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">475</context></context-group> </trans-unit> - <trans-unit id="_msg346"> + <trans-unit id="_msg349"> <source xml:space="preserve">&Third party transaction URLs</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">689</context></context-group> </trans-unit> - <trans-unit id="_msg347"> + <trans-unit id="_msg350"> <source xml:space="preserve">Monospaced font in the Overview tab:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">711</context></context-group> </trans-unit> - <trans-unit id="_msg348"> + <trans-unit id="_msg351"> <source xml:space="preserve">embedded "%1"</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">719</context></context-group> </trans-unit> - <trans-unit id="_msg349"> + <trans-unit id="_msg352"> <source xml:space="preserve">111.11111111 BTC</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">741</context></context-group> <context-group purpose="location"><context context-type="linenumber">790</context></context-group> </trans-unit> - <trans-unit id="_msg350"> + <trans-unit id="_msg353"> <source xml:space="preserve">909.09090909 BTC</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">748</context></context-group> <context-group purpose="location"><context context-type="linenumber">797</context></context-group> </trans-unit> - <trans-unit id="_msg351"> + <trans-unit id="_msg354"> <source xml:space="preserve">closest matching "%1"</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">768</context></context-group> </trans-unit> - <trans-unit id="_msg352"> + <trans-unit id="_msg355"> <source xml:space="preserve">Options set in this dialog are overridden by the command line or in the configuration file:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">833</context></context-group> </trans-unit> - <trans-unit id="_msg353" approved="yes"> + <trans-unit id="_msg356" approved="yes"> <source xml:space="preserve">&OK</source> <target xml:space="preserve">&OK</target> <context-group purpose="location"><context context-type="linenumber">974</context></context-group> </trans-unit> - <trans-unit id="_msg354" approved="yes"> + <trans-unit id="_msg357" approved="yes"> <source xml:space="preserve">&Cancel</source> <target xml:space="preserve">&Cancel</target> <context-group purpose="location"><context context-type="linenumber">987</context></context-group> @@ -1936,58 +1940,58 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../optionsdialog.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="OptionsDialog"> - <trans-unit id="_msg355" approved="yes"> + <trans-unit id="_msg358" approved="yes"> <source xml:space="preserve">default</source> <target xml:space="preserve">default</target> <context-group purpose="location"><context context-type="linenumber">104</context></context-group> </trans-unit> - <trans-unit id="_msg356"> + <trans-unit id="_msg359"> <source xml:space="preserve">none</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">185</context></context-group> </trans-unit> - <trans-unit id="_msg357" approved="yes"> + <trans-unit id="_msg360" approved="yes"> <source xml:space="preserve">Confirm options reset</source> <target xml:space="preserve">Confirm options reset</target> <context-group purpose="location"><context context-type="linenumber">276</context></context-group> </trans-unit> - <trans-unit id="_msg358"> + <trans-unit id="_msg361"> <source xml:space="preserve">Client restart required to activate changes.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">277</context></context-group> <context-group purpose="location"><context context-type="linenumber">334</context></context-group> </trans-unit> - <trans-unit id="_msg359"> + <trans-unit id="_msg362"> <source xml:space="preserve">Client will be shut down. Do you want to proceed?</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">277</context></context-group> </trans-unit> - <trans-unit id="_msg360"> + <trans-unit id="_msg363"> <source xml:space="preserve">Configuration options</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">292</context></context-group> </trans-unit> - <trans-unit id="_msg361"> + <trans-unit id="_msg364"> <source xml:space="preserve">The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">293</context></context-group> </trans-unit> - <trans-unit id="_msg362"> + <trans-unit id="_msg365"> <source xml:space="preserve">Error</source> <target xml:space="preserve" state="needs-review-translation">Error</target> <context-group purpose="location"><context context-type="linenumber">298</context></context-group> </trans-unit> - <trans-unit id="_msg363"> + <trans-unit id="_msg366"> <source xml:space="preserve">The configuration file could not be opened.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">298</context></context-group> </trans-unit> - <trans-unit id="_msg364"> + <trans-unit id="_msg367"> <source xml:space="preserve">This change would require a client restart.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">338</context></context-group> </trans-unit> - <trans-unit id="_msg365" approved="yes"> + <trans-unit id="_msg368" approved="yes"> <source xml:space="preserve">The supplied proxy address is invalid.</source> <target xml:space="preserve">The supplied proxy address is invalid.</target> <context-group purpose="location"><context context-type="linenumber">366</context></context-group> @@ -1996,93 +2000,93 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../forms/overviewpage.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="OverviewPage"> - <trans-unit id="_msg366" approved="yes"> + <trans-unit id="_msg369" approved="yes"> <source xml:space="preserve">Form</source> <target xml:space="preserve">Form</target> <context-group purpose="location"><context context-type="linenumber">14</context></context-group> </trans-unit> - <trans-unit id="_msg367" approved="yes"> + <trans-unit id="_msg370" approved="yes"> <source xml:space="preserve">The displayed information may be out of date. Your wallet automatically synchronizes with the Bitcoin network after a connection is established, but this process has not completed yet.</source> <target xml:space="preserve">The displayed information may be out of date. Your wallet automatically synchronizes with the Bitcoin network after a connection is established, but this process has not completed yet.</target> <context-group purpose="location"><context context-type="linenumber">76</context></context-group> <context-group purpose="location"><context context-type="linenumber">411</context></context-group> </trans-unit> - <trans-unit id="_msg368"> + <trans-unit id="_msg371"> <source xml:space="preserve">Watch-only:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">284</context></context-group> </trans-unit> - <trans-unit id="_msg369"> + <trans-unit id="_msg372"> <source xml:space="preserve">Available:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">294</context></context-group> </trans-unit> - <trans-unit id="_msg370" approved="yes"> + <trans-unit id="_msg373" approved="yes"> <source xml:space="preserve">Your current spendable balance</source> <target xml:space="preserve">Your current spendable balance</target> <context-group purpose="location"><context context-type="linenumber">304</context></context-group> </trans-unit> - <trans-unit id="_msg371"> + <trans-unit id="_msg374"> <source xml:space="preserve">Pending:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">339</context></context-group> </trans-unit> - <trans-unit id="_msg372" approved="yes"> + <trans-unit id="_msg375" approved="yes"> <source xml:space="preserve">Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance</source> <target xml:space="preserve">Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance</target> <context-group purpose="location"><context context-type="linenumber">139</context></context-group> </trans-unit> - <trans-unit id="_msg373" approved="yes"> + <trans-unit id="_msg376" approved="yes"> <source xml:space="preserve">Immature:</source> <target xml:space="preserve">Immature:</target> <context-group purpose="location"><context context-type="linenumber">239</context></context-group> </trans-unit> - <trans-unit id="_msg374" approved="yes"> + <trans-unit id="_msg377" approved="yes"> <source xml:space="preserve">Mined balance that has not yet matured</source> <target xml:space="preserve">Mined balance that has not yet matured</target> <context-group purpose="location"><context context-type="linenumber">210</context></context-group> </trans-unit> - <trans-unit id="_msg375"> + <trans-unit id="_msg378"> <source xml:space="preserve">Balances</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">60</context></context-group> </trans-unit> - <trans-unit id="_msg376" approved="yes"> + <trans-unit id="_msg379" approved="yes"> <source xml:space="preserve">Total:</source> <target xml:space="preserve">Total:</target> <context-group purpose="location"><context context-type="linenumber">200</context></context-group> </trans-unit> - <trans-unit id="_msg377" approved="yes"> + <trans-unit id="_msg380" approved="yes"> <source xml:space="preserve">Your current total balance</source> <target xml:space="preserve">Your current total balance</target> <context-group purpose="location"><context context-type="linenumber">249</context></context-group> </trans-unit> - <trans-unit id="_msg378"> + <trans-unit id="_msg381"> <source xml:space="preserve">Your current balance in watch-only addresses</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">323</context></context-group> </trans-unit> - <trans-unit id="_msg379"> + <trans-unit id="_msg382"> <source xml:space="preserve">Spendable:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">346</context></context-group> </trans-unit> - <trans-unit id="_msg380"> + <trans-unit id="_msg383"> <source xml:space="preserve">Recent transactions</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">395</context></context-group> </trans-unit> - <trans-unit id="_msg381"> + <trans-unit id="_msg384"> <source xml:space="preserve">Unconfirmed transactions to watch-only addresses</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">120</context></context-group> </trans-unit> - <trans-unit id="_msg382"> + <trans-unit id="_msg385"> <source xml:space="preserve">Mined balance in watch-only addresses that has not yet matured</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">158</context></context-group> </trans-unit> - <trans-unit id="_msg383"> + <trans-unit id="_msg386"> <source xml:space="preserve">Current total balance in watch-only addresses</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">268</context></context-group> @@ -2091,7 +2095,7 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../overviewpage.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="OverviewPage"> - <trans-unit id="_msg384"> + <trans-unit id="_msg387"> <source xml:space="preserve">Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings->Mask values.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">191</context></context-group> @@ -2100,32 +2104,32 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../forms/psbtoperationsdialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="PSBTOperationsDialog"> - <trans-unit id="_msg385"> + <trans-unit id="_msg388"> <source xml:space="preserve">Dialog</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">14</context></context-group> </trans-unit> - <trans-unit id="_msg386"> + <trans-unit id="_msg389"> <source xml:space="preserve">Sign Tx</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">86</context></context-group> </trans-unit> - <trans-unit id="_msg387"> + <trans-unit id="_msg390"> <source xml:space="preserve">Broadcast Tx</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">102</context></context-group> </trans-unit> - <trans-unit id="_msg388"> + <trans-unit id="_msg391"> <source xml:space="preserve">Copy to Clipboard</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">122</context></context-group> </trans-unit> - <trans-unit id="_msg389"> - <source xml:space="preserve">Save...</source> + <trans-unit id="_msg392"> + <source xml:space="preserve">Save…</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">129</context></context-group> </trans-unit> - <trans-unit id="_msg390"> + <trans-unit id="_msg393"> <source xml:space="preserve">Close</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">136</context></context-group> @@ -2134,123 +2138,123 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../psbtoperationsdialog.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="PSBTOperationsDialog"> - <trans-unit id="_msg391"> + <trans-unit id="_msg394"> <source xml:space="preserve">Failed to load transaction: %1</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">55</context></context-group> </trans-unit> - <trans-unit id="_msg392"> + <trans-unit id="_msg395"> <source xml:space="preserve">Failed to sign transaction: %1</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">73</context></context-group> </trans-unit> - <trans-unit id="_msg393"> + <trans-unit id="_msg396"> <source xml:space="preserve">Could not sign any more inputs.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">81</context></context-group> </trans-unit> - <trans-unit id="_msg394"> + <trans-unit id="_msg397"> <source xml:space="preserve">Signed %1 inputs, but more signatures are still required.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">83</context></context-group> </trans-unit> - <trans-unit id="_msg395"> + <trans-unit id="_msg398"> <source xml:space="preserve">Signed transaction successfully. Transaction is ready to broadcast.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">86</context></context-group> </trans-unit> - <trans-unit id="_msg396"> + <trans-unit id="_msg399"> <source xml:space="preserve">Unknown error processing transaction.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">98</context></context-group> </trans-unit> - <trans-unit id="_msg397"> + <trans-unit id="_msg400"> <source xml:space="preserve">Transaction broadcast successfully! Transaction ID: %1</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">108</context></context-group> </trans-unit> - <trans-unit id="_msg398"> + <trans-unit id="_msg401"> <source xml:space="preserve">Transaction broadcast failed: %1</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">111</context></context-group> </trans-unit> - <trans-unit id="_msg399"> + <trans-unit id="_msg402"> <source xml:space="preserve">PSBT copied to clipboard.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">120</context></context-group> </trans-unit> - <trans-unit id="_msg400"> + <trans-unit id="_msg403"> <source xml:space="preserve">Save Transaction Data</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">143</context></context-group> </trans-unit> - <trans-unit id="_msg401"> + <trans-unit id="_msg404"> <source xml:space="preserve">Partially Signed Transaction (Binary)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">144</context></context-group> <context-group><context context-type="x-gettext-msgctxt">Name of binary PSBT file format</context></context-group> </trans-unit> - <trans-unit id="_msg402"> + <trans-unit id="_msg405"> <source xml:space="preserve">PSBT saved to disk.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">151</context></context-group> </trans-unit> - <trans-unit id="_msg403"> + <trans-unit id="_msg406"> <source xml:space="preserve"> * Sends %1 to %2</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">167</context></context-group> </trans-unit> - <trans-unit id="_msg404"> + <trans-unit id="_msg407"> <source xml:space="preserve">Unable to calculate transaction fee or total transaction amount.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">177</context></context-group> </trans-unit> - <trans-unit id="_msg405"> + <trans-unit id="_msg408"> <source xml:space="preserve">Pays transaction fee: </source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">179</context></context-group> </trans-unit> - <trans-unit id="_msg406"> + <trans-unit id="_msg409"> <source xml:space="preserve">Total Amount</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">191</context></context-group> </trans-unit> - <trans-unit id="_msg407"> + <trans-unit id="_msg410"> <source xml:space="preserve">or</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">194</context></context-group> </trans-unit> - <trans-unit id="_msg408"> + <trans-unit id="_msg411"> <source xml:space="preserve">Transaction has %1 unsigned inputs.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">200</context></context-group> </trans-unit> - <trans-unit id="_msg409"> + <trans-unit id="_msg412"> <source xml:space="preserve">Transaction is missing some information about inputs.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">242</context></context-group> </trans-unit> - <trans-unit id="_msg410"> + <trans-unit id="_msg413"> <source xml:space="preserve">Transaction still needs signature(s).</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">246</context></context-group> </trans-unit> - <trans-unit id="_msg411"> + <trans-unit id="_msg414"> <source xml:space="preserve">(But this wallet cannot sign transactions.)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">249</context></context-group> </trans-unit> - <trans-unit id="_msg412"> + <trans-unit id="_msg415"> <source xml:space="preserve">(But this wallet does not have the right keys.)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">252</context></context-group> </trans-unit> - <trans-unit id="_msg413"> + <trans-unit id="_msg416"> <source xml:space="preserve">Transaction is fully signed and ready for broadcast.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">260</context></context-group> </trans-unit> - <trans-unit id="_msg414"> + <trans-unit id="_msg417"> <source xml:space="preserve">Transaction status is unknown.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">264</context></context-group> @@ -2259,101 +2263,96 @@ Signing is only possible with addresses of the type 'legacy'.</source> </body></file> <file original="../paymentserver.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="PaymentServer"> - <trans-unit id="_msg415"> + <trans-unit id="_msg418"> <source xml:space="preserve">Payment request error</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">173</context></context-group> </trans-unit> - <trans-unit id="_msg416"> + <trans-unit id="_msg419"> <source xml:space="preserve">Cannot start bitcoin: click-to-pay handler</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">174</context></context-group> </trans-unit> - <trans-unit id="_msg417"> + <trans-unit id="_msg420"> <source xml:space="preserve">URI handling</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">224</context></context-group> - <context-group purpose="location"><context context-type="linenumber">237</context></context-group> - <context-group purpose="location"><context context-type="linenumber">243</context></context-group> - <context-group purpose="location"><context context-type="linenumber">250</context></context-group> + <context-group purpose="location"><context context-type="linenumber">240</context></context-group> + <context-group purpose="location"><context context-type="linenumber">246</context></context-group> + <context-group purpose="location"><context context-type="linenumber">253</context></context-group> </trans-unit> - <trans-unit id="_msg418"> + <trans-unit id="_msg421"> <source xml:space="preserve">'bitcoin://' is not a valid URI. Use 'bitcoin:' instead.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">224</context></context-group> </trans-unit> - <trans-unit id="_msg419"> + <trans-unit id="_msg422"> <source xml:space="preserve">Cannot process payment request because BIP70 is not supported. Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored. If you are receiving this error you should request the merchant provide a BIP21 compatible URI.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">238</context></context-group> - <context-group purpose="location"><context context-type="linenumber">261</context></context-group> - </trans-unit> - <trans-unit id="_msg420"> - <source xml:space="preserve">Invalid payment address %1</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">243</context></context-group> + <context-group purpose="location"><context context-type="linenumber">241</context></context-group> + <context-group purpose="location"><context context-type="linenumber">264</context></context-group> </trans-unit> - <trans-unit id="_msg421"> + <trans-unit id="_msg423"> <source xml:space="preserve">URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">251</context></context-group> + <context-group purpose="location"><context context-type="linenumber">254</context></context-group> </trans-unit> - <trans-unit id="_msg422"> + <trans-unit id="_msg424"> <source xml:space="preserve">Payment request file handling</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">260</context></context-group> + <context-group purpose="location"><context context-type="linenumber">263</context></context-group> </trans-unit> </group> </body></file> <file original="../peertablemodel.h" datatype="c" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="PeerTableModel"> - <trans-unit id="_msg423"> + <trans-unit id="_msg425"> <source xml:space="preserve">User Agent</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">91</context></context-group> + <context-group purpose="location"><context context-type="linenumber">77</context></context-group> </trans-unit> - <trans-unit id="_msg424"> + <trans-unit id="_msg426"> <source xml:space="preserve">Ping</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">91</context></context-group> + <context-group purpose="location"><context context-type="linenumber">77</context></context-group> </trans-unit> - <trans-unit id="_msg425"> + <trans-unit id="_msg427"> <source xml:space="preserve">Sent</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">91</context></context-group> + <context-group purpose="location"><context context-type="linenumber">77</context></context-group> </trans-unit> - <trans-unit id="_msg426"> + <trans-unit id="_msg428"> <source xml:space="preserve">Received</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">91</context></context-group> + <context-group purpose="location"><context context-type="linenumber">77</context></context-group> </trans-unit> - <trans-unit id="_msg427"> + <trans-unit id="_msg429"> <source xml:space="preserve">Peer Id</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">91</context></context-group> + <context-group purpose="location"><context context-type="linenumber">77</context></context-group> </trans-unit> - <trans-unit id="_msg428"> + <trans-unit id="_msg430"> <source xml:space="preserve">Address</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">91</context></context-group> + <context-group purpose="location"><context context-type="linenumber">77</context></context-group> </trans-unit> - <trans-unit id="_msg429"> + <trans-unit id="_msg431"> <source xml:space="preserve">Type</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">91</context></context-group> + <context-group purpose="location"><context context-type="linenumber">77</context></context-group> </trans-unit> - <trans-unit id="_msg430"> + <trans-unit id="_msg432"> <source xml:space="preserve">Network</source> <target xml:space="preserve" state="needs-review-translation">Network</target> - <context-group purpose="location"><context context-type="linenumber">91</context></context-group> + <context-group purpose="location"><context context-type="linenumber">77</context></context-group> </trans-unit> </group> </body></file> <file original="../bitcoinunits.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="QObject"> - <trans-unit id="_msg431"> + <trans-unit id="_msg433"> <source xml:space="preserve">Amount</source> <target xml:space="preserve" state="needs-review-translation">Amount</target> <context-group purpose="location"><context context-type="linenumber">213</context></context-group> @@ -2362,229 +2361,229 @@ If you are receiving this error you should request the merchant provide a BIP21 </body></file> <file original="../guiutil.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="QObject"> - <trans-unit id="_msg432"> + <trans-unit id="_msg434"> <source xml:space="preserve">Enter a Bitcoin address (e.g. %1)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">118</context></context-group> </trans-unit> - <trans-unit id="_msg433"> + <trans-unit id="_msg435"> <source xml:space="preserve">Unroutable</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">650</context></context-group> + <context-group purpose="location"><context context-type="linenumber">653</context></context-group> </trans-unit> - <trans-unit id="_msg434"> + <trans-unit id="_msg436"> <source xml:space="preserve">Internal</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">656</context></context-group> + <context-group purpose="location"><context context-type="linenumber">659</context></context-group> </trans-unit> - <trans-unit id="_msg435"> + <trans-unit id="_msg437"> <source xml:space="preserve">Inbound</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">666</context></context-group> + <context-group purpose="location"><context context-type="linenumber">669</context></context-group> </trans-unit> - <trans-unit id="_msg436"> + <trans-unit id="_msg438"> <source xml:space="preserve">Outbound</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">666</context></context-group> + <context-group purpose="location"><context context-type="linenumber">669</context></context-group> </trans-unit> - <trans-unit id="_msg437"> + <trans-unit id="_msg439"> <source xml:space="preserve">Full Relay</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">670</context></context-group> + <context-group purpose="location"><context context-type="linenumber">673</context></context-group> </trans-unit> - <trans-unit id="_msg438"> + <trans-unit id="_msg440"> <source xml:space="preserve">Block Relay</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">671</context></context-group> + <context-group purpose="location"><context context-type="linenumber">674</context></context-group> </trans-unit> - <trans-unit id="_msg439"> + <trans-unit id="_msg441"> <source xml:space="preserve">Manual</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">672</context></context-group> + <context-group purpose="location"><context context-type="linenumber">675</context></context-group> </trans-unit> - <trans-unit id="_msg440"> + <trans-unit id="_msg442"> <source xml:space="preserve">Feeler</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">673</context></context-group> + <context-group purpose="location"><context context-type="linenumber">676</context></context-group> </trans-unit> - <trans-unit id="_msg441"> + <trans-unit id="_msg443"> <source xml:space="preserve">Address Fetch</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">674</context></context-group> + <context-group purpose="location"><context context-type="linenumber">677</context></context-group> </trans-unit> - <trans-unit id="_msg442"> + <trans-unit id="_msg444"> <source xml:space="preserve">%1 d</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">688</context></context-group> + <context-group purpose="location"><context context-type="linenumber">691</context></context-group> </trans-unit> - <trans-unit id="_msg443"> + <trans-unit id="_msg445"> <source xml:space="preserve">%1 h</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">690</context></context-group> + <context-group purpose="location"><context context-type="linenumber">693</context></context-group> </trans-unit> - <trans-unit id="_msg444"> + <trans-unit id="_msg446"> <source xml:space="preserve">%1 m</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">692</context></context-group> + <context-group purpose="location"><context context-type="linenumber">695</context></context-group> </trans-unit> - <trans-unit id="_msg445"> + <trans-unit id="_msg447"> <source xml:space="preserve">%1 s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">694</context></context-group> - <context-group purpose="location"><context context-type="linenumber">722</context></context-group> + <context-group purpose="location"><context context-type="linenumber">697</context></context-group> + <context-group purpose="location"><context context-type="linenumber">725</context></context-group> </trans-unit> - <trans-unit id="_msg446"> + <trans-unit id="_msg448"> <source xml:space="preserve">None</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">710</context></context-group> + <context-group purpose="location"><context context-type="linenumber">713</context></context-group> </trans-unit> - <trans-unit id="_msg447"> + <trans-unit id="_msg449"> <source xml:space="preserve">N/A</source> <target xml:space="preserve" state="needs-review-translation">N/A</target> - <context-group purpose="location"><context context-type="linenumber">716</context></context-group> + <context-group purpose="location"><context context-type="linenumber">719</context></context-group> </trans-unit> - <trans-unit id="_msg448"> + <trans-unit id="_msg450"> <source xml:space="preserve">%1 ms</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">717</context></context-group> + <context-group purpose="location"><context context-type="linenumber">720</context></context-group> </trans-unit> <group restype="x-gettext-plurals"> - <context-group purpose="location"><context context-type="linenumber">735</context></context-group> - <trans-unit id="_msg449[0]" approved="yes"> + <context-group purpose="location"><context context-type="linenumber">738</context></context-group> + <trans-unit id="_msg451[0]" approved="yes"> <source xml:space="preserve">%n second(s)</source> <target xml:space="preserve">%n second</target> </trans-unit> - <trans-unit id="_msg449[1]" approved="yes"> + <trans-unit id="_msg451[1]" approved="yes"> <source xml:space="preserve">%n second(s)</source> <target xml:space="preserve">%n seconds</target> </trans-unit> </group> <group restype="x-gettext-plurals"> - <context-group purpose="location"><context context-type="linenumber">739</context></context-group> - <trans-unit id="_msg450[0]" approved="yes"> + <context-group purpose="location"><context context-type="linenumber">742</context></context-group> + <trans-unit id="_msg452[0]" approved="yes"> <source xml:space="preserve">%n minute(s)</source> <target xml:space="preserve">%n minute</target> </trans-unit> - <trans-unit id="_msg450[1]" approved="yes"> + <trans-unit id="_msg452[1]" approved="yes"> <source xml:space="preserve">%n minute(s)</source> <target xml:space="preserve">%n minutes</target> </trans-unit> </group> <group restype="x-gettext-plurals"> - <context-group purpose="location"><context context-type="linenumber">743</context></context-group> - <trans-unit id="_msg451[0]"> + <context-group purpose="location"><context context-type="linenumber">746</context></context-group> + <trans-unit id="_msg453[0]"> <source xml:space="preserve">%n hour(s)</source> <target xml:space="preserve" state="needs-review-translation">%n hour</target> </trans-unit> - <trans-unit id="_msg451[1]"> + <trans-unit id="_msg453[1]"> <source xml:space="preserve">%n hour(s)</source> <target xml:space="preserve" state="needs-review-translation">%n hours</target> </trans-unit> </group> <group restype="x-gettext-plurals"> - <context-group purpose="location"><context context-type="linenumber">747</context></context-group> - <trans-unit id="_msg452[0]"> + <context-group purpose="location"><context context-type="linenumber">750</context></context-group> + <trans-unit id="_msg454[0]"> <source xml:space="preserve">%n day(s)</source> <target xml:space="preserve" state="needs-review-translation">%n day</target> </trans-unit> - <trans-unit id="_msg452[1]"> + <trans-unit id="_msg454[1]"> <source xml:space="preserve">%n day(s)</source> <target xml:space="preserve" state="needs-review-translation">%n days</target> </trans-unit> </group> <group restype="x-gettext-plurals"> - <context-group purpose="location"><context context-type="linenumber">751</context></context-group> - <context-group purpose="location"><context context-type="linenumber">757</context></context-group> - <trans-unit id="_msg453[0]"> + <context-group purpose="location"><context context-type="linenumber">754</context></context-group> + <context-group purpose="location"><context context-type="linenumber">760</context></context-group> + <trans-unit id="_msg455[0]"> <source xml:space="preserve">%n week(s)</source> <target xml:space="preserve" state="needs-review-translation">%n week</target> </trans-unit> - <trans-unit id="_msg453[1]"> + <trans-unit id="_msg455[1]"> <source xml:space="preserve">%n week(s)</source> <target xml:space="preserve" state="needs-review-translation">%n weeks</target> </trans-unit> </group> - <trans-unit id="_msg454"> + <trans-unit id="_msg456"> <source xml:space="preserve">%1 and %2</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">757</context></context-group> + <context-group purpose="location"><context context-type="linenumber">760</context></context-group> </trans-unit> <group restype="x-gettext-plurals"> - <context-group purpose="location"><context context-type="linenumber">757</context></context-group> - <trans-unit id="_msg455[0]"> + <context-group purpose="location"><context context-type="linenumber">760</context></context-group> + <trans-unit id="_msg457[0]"> <source xml:space="preserve">%n year(s)</source> <target xml:space="preserve" state="needs-review-translation">%n year</target> </trans-unit> - <trans-unit id="_msg455[1]"> + <trans-unit id="_msg457[1]"> <source xml:space="preserve">%n year(s)</source> <target xml:space="preserve" state="needs-review-translation">%n years</target> </trans-unit> </group> - <trans-unit id="_msg456"> + <trans-unit id="_msg458"> <source xml:space="preserve">%1 B</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">765</context></context-group> + <context-group purpose="location"><context context-type="linenumber">768</context></context-group> </trans-unit> - <trans-unit id="_msg457"> + <trans-unit id="_msg459"> <source xml:space="preserve">%1 kB</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">767</context></context-group> + <context-group purpose="location"><context context-type="linenumber">770</context></context-group> </trans-unit> - <trans-unit id="_msg458"> + <trans-unit id="_msg460"> <source xml:space="preserve">%1 MB</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">769</context></context-group> + <context-group purpose="location"><context context-type="linenumber">772</context></context-group> </trans-unit> - <trans-unit id="_msg459"> + <trans-unit id="_msg461"> <source xml:space="preserve">%1 GB</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">771</context></context-group> + <context-group purpose="location"><context context-type="linenumber">774</context></context-group> </trans-unit> </group> </body></file> <file original="../qrimagewidget.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="QRImageWidget"> - <trans-unit id="_msg460"> - <source xml:space="preserve">&Save Image...</source> + <trans-unit id="_msg462"> + <source xml:space="preserve">Save Image…</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">30</context></context-group> </trans-unit> - <trans-unit id="_msg461"> - <source xml:space="preserve">&Copy Image</source> + <trans-unit id="_msg463"> + <source xml:space="preserve">Copy Image</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">33</context></context-group> + <context-group purpose="location"><context context-type="linenumber">31</context></context-group> </trans-unit> - <trans-unit id="_msg462"> + <trans-unit id="_msg464"> <source xml:space="preserve">Resulting URI too long, try to reduce the text for label / message.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">46</context></context-group> + <context-group purpose="location"><context context-type="linenumber">42</context></context-group> </trans-unit> - <trans-unit id="_msg463"> + <trans-unit id="_msg465"> <source xml:space="preserve">Error encoding URI into QR Code.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">53</context></context-group> + <context-group purpose="location"><context context-type="linenumber">49</context></context-group> </trans-unit> - <trans-unit id="_msg464"> + <trans-unit id="_msg466"> <source xml:space="preserve">QR code support not available.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">94</context></context-group> + <context-group purpose="location"><context context-type="linenumber">90</context></context-group> </trans-unit> - <trans-unit id="_msg465"> + <trans-unit id="_msg467"> <source xml:space="preserve">Save QR Code</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">124</context></context-group> + <context-group purpose="location"><context context-type="linenumber">120</context></context-group> </trans-unit> - <trans-unit id="_msg466"> + <trans-unit id="_msg468"> <source xml:space="preserve">PNG Image</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">125</context></context-group> + <context-group purpose="location"><context context-type="linenumber">121</context></context-group> <context-group><context context-type="x-gettext-msgctxt">Name of PNG file format</context></context-group> </trans-unit> </group> </body></file> <file original="../forms/debugwindow.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="RPCConsole"> - <trans-unit id="_msg467" approved="yes"> + <trans-unit id="_msg469" approved="yes"> <source xml:space="preserve">N/A</source> <target xml:space="preserve">N/A</target> <context-group purpose="location"><context context-type="linenumber">75</context></context-group> @@ -2598,347 +2597,347 @@ If you are receiving this error you should request the merchant provide a BIP21 <context-group purpose="location"><context context-type="linenumber">300</context></context-group> <context-group purpose="location"><context context-type="linenumber">336</context></context-group> <context-group purpose="location"><context context-type="linenumber">359</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1069</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1095</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1121</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1144</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1167</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1190</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1216</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1242</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1265</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1288</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1311</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1334</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1360</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1386</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1409</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1432</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1455</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1478</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1501</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1527</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1550</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1573</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1599</context></context-group> - <context-group purpose="location"><context context-type="sourcefile">../rpcconsole.h</context><context context-type="linenumber">141</context></context-group> - </trans-unit> - <trans-unit id="_msg468" approved="yes"> + <context-group purpose="location"><context context-type="linenumber">1081</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1107</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1133</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1156</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1179</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1202</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1231</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1257</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1280</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1303</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1326</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1349</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1375</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1401</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1424</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1447</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1470</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1493</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1516</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1542</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1565</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1588</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1614</context></context-group> + <context-group purpose="location"><context context-type="sourcefile">../rpcconsole.h</context><context context-type="linenumber">137</context></context-group> + </trans-unit> + <trans-unit id="_msg470" approved="yes"> <source xml:space="preserve">Client version</source> <target xml:space="preserve">Client version</target> <context-group purpose="location"><context context-type="linenumber">65</context></context-group> </trans-unit> - <trans-unit id="_msg469" approved="yes"> + <trans-unit id="_msg471" approved="yes"> <source xml:space="preserve">&Information</source> <target xml:space="preserve">&Information</target> <context-group purpose="location"><context context-type="linenumber">43</context></context-group> </trans-unit> - <trans-unit id="_msg470"> + <trans-unit id="_msg472"> <source xml:space="preserve">General</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">58</context></context-group> </trans-unit> - <trans-unit id="_msg471"> + <trans-unit id="_msg473"> <source xml:space="preserve">Datadir</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">114</context></context-group> </trans-unit> - <trans-unit id="_msg472"> + <trans-unit id="_msg474"> <source xml:space="preserve">To specify a non-default location of the data directory use the '%1' option.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">124</context></context-group> </trans-unit> - <trans-unit id="_msg473"> + <trans-unit id="_msg475"> <source xml:space="preserve">Blocksdir</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">143</context></context-group> </trans-unit> - <trans-unit id="_msg474"> + <trans-unit id="_msg476"> <source xml:space="preserve">To specify a non-default location of the blocks directory use the '%1' option.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">153</context></context-group> </trans-unit> - <trans-unit id="_msg475" approved="yes"> + <trans-unit id="_msg477" approved="yes"> <source xml:space="preserve">Startup time</source> <target xml:space="preserve">Startup time</target> <context-group purpose="location"><context context-type="linenumber">172</context></context-group> </trans-unit> - <trans-unit id="_msg476" approved="yes"> + <trans-unit id="_msg478" approved="yes"> <source xml:space="preserve">Network</source> <target xml:space="preserve">Network</target> <context-group purpose="location"><context context-type="linenumber">201</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1111</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1123</context></context-group> </trans-unit> - <trans-unit id="_msg477"> + <trans-unit id="_msg479"> <source xml:space="preserve">Name</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">208</context></context-group> </trans-unit> - <trans-unit id="_msg478" approved="yes"> + <trans-unit id="_msg480" approved="yes"> <source xml:space="preserve">Number of connections</source> <target xml:space="preserve">Number of connections</target> <context-group purpose="location"><context context-type="linenumber">231</context></context-group> </trans-unit> - <trans-unit id="_msg479" approved="yes"> + <trans-unit id="_msg481" approved="yes"> <source xml:space="preserve">Block chain</source> <target xml:space="preserve">Block chain</target> <context-group purpose="location"><context context-type="linenumber">260</context></context-group> </trans-unit> - <trans-unit id="_msg480"> + <trans-unit id="_msg482"> <source xml:space="preserve">Memory Pool</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">319</context></context-group> </trans-unit> - <trans-unit id="_msg481"> + <trans-unit id="_msg483"> <source xml:space="preserve">Current number of transactions</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">326</context></context-group> </trans-unit> - <trans-unit id="_msg482"> + <trans-unit id="_msg484"> <source xml:space="preserve">Memory usage</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">349</context></context-group> </trans-unit> - <trans-unit id="_msg483"> + <trans-unit id="_msg485"> <source xml:space="preserve">Wallet: </source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">443</context></context-group> </trans-unit> - <trans-unit id="_msg484"> + <trans-unit id="_msg486"> <source xml:space="preserve">(none)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">454</context></context-group> </trans-unit> - <trans-unit id="_msg485"> + <trans-unit id="_msg487"> <source xml:space="preserve">&Reset</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">695</context></context-group> </trans-unit> - <trans-unit id="_msg486"> + <trans-unit id="_msg488"> <source xml:space="preserve">Received</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">775</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1468</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1483</context></context-group> </trans-unit> - <trans-unit id="_msg487"> + <trans-unit id="_msg489"> <source xml:space="preserve">Sent</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">855</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1445</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1460</context></context-group> </trans-unit> - <trans-unit id="_msg488"> + <trans-unit id="_msg490"> <source xml:space="preserve">&Peers</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">896</context></context-group> </trans-unit> - <trans-unit id="_msg489"> + <trans-unit id="_msg491"> <source xml:space="preserve">Banned peers</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">963</context></context-group> + <context-group purpose="location"><context context-type="linenumber">972</context></context-group> </trans-unit> - <trans-unit id="_msg490"> + <trans-unit id="_msg492"> <source xml:space="preserve">Select a peer to view detailed information.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1028</context></context-group> - <context-group purpose="location"><context context-type="sourcefile">../rpcconsole.cpp</context><context context-type="linenumber">1104</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1040</context></context-group> + <context-group purpose="location"><context context-type="sourcefile">../rpcconsole.cpp</context><context context-type="linenumber">1033</context></context-group> </trans-unit> - <trans-unit id="_msg491"> + <trans-unit id="_msg493"> <source xml:space="preserve">Version</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1134</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1146</context></context-group> </trans-unit> - <trans-unit id="_msg492"> + <trans-unit id="_msg494"> <source xml:space="preserve">Starting Block</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1255</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1270</context></context-group> </trans-unit> - <trans-unit id="_msg493"> + <trans-unit id="_msg495"> <source xml:space="preserve">Synced Headers</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1278</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1293</context></context-group> </trans-unit> - <trans-unit id="_msg494"> + <trans-unit id="_msg496"> <source xml:space="preserve">Synced Blocks</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1301</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1316</context></context-group> </trans-unit> - <trans-unit id="_msg495"> + <trans-unit id="_msg497"> <source xml:space="preserve">The mapped Autonomous System used for diversifying peer selection.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1586</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1601</context></context-group> </trans-unit> - <trans-unit id="_msg496"> + <trans-unit id="_msg498"> <source xml:space="preserve">Mapped AS</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1589</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1604</context></context-group> </trans-unit> - <trans-unit id="_msg497"> + <trans-unit id="_msg499"> <source xml:space="preserve">User Agent</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">88</context></context-group> - <context-group purpose="location"><context context-type="linenumber">1157</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1169</context></context-group> </trans-unit> - <trans-unit id="_msg498"> + <trans-unit id="_msg500"> <source xml:space="preserve">Node window</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">14</context></context-group> </trans-unit> - <trans-unit id="_msg499"> + <trans-unit id="_msg501"> <source xml:space="preserve">Current block height</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">267</context></context-group> </trans-unit> - <trans-unit id="_msg500"> + <trans-unit id="_msg502"> <source xml:space="preserve">Open the %1 debug log file from the current data directory. This can take a few seconds for large log files.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">397</context></context-group> </trans-unit> - <trans-unit id="_msg501"> + <trans-unit id="_msg503"> <source xml:space="preserve">Decrease font size</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">481</context></context-group> </trans-unit> - <trans-unit id="_msg502"> + <trans-unit id="_msg504"> <source xml:space="preserve">Increase font size</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">513</context></context-group> </trans-unit> - <trans-unit id="_msg503"> + <trans-unit id="_msg505"> <source xml:space="preserve">Permissions</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1059</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1071</context></context-group> </trans-unit> - <trans-unit id="_msg504"> + <trans-unit id="_msg506"> <source xml:space="preserve">The direction and type of peer connection: %1</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1082</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1094</context></context-group> </trans-unit> - <trans-unit id="_msg505"> + <trans-unit id="_msg507"> <source xml:space="preserve">Direction/Type</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1085</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1097</context></context-group> </trans-unit> - <trans-unit id="_msg506"> + <trans-unit id="_msg508"> <source xml:space="preserve">The network protocol this peer is connected through: IPv4, IPv6, Onion, I2P, or CJDNS.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1108</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1120</context></context-group> </trans-unit> - <trans-unit id="_msg507"> + <trans-unit id="_msg509"> <source xml:space="preserve">Services</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1180</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1192</context></context-group> </trans-unit> - <trans-unit id="_msg508"> + <trans-unit id="_msg510"> <source xml:space="preserve">Whether the peer requested us to relay transactions.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1203</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1218</context></context-group> </trans-unit> - <trans-unit id="_msg509"> + <trans-unit id="_msg511"> <source xml:space="preserve">Wants Tx Relay</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1206</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1221</context></context-group> </trans-unit> - <trans-unit id="_msg510"> + <trans-unit id="_msg512"> <source xml:space="preserve">High bandwidth BIP152 compact block relay: %1</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1229</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1244</context></context-group> </trans-unit> - <trans-unit id="_msg511"> + <trans-unit id="_msg513"> <source xml:space="preserve">High Bandwidth</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1232</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1247</context></context-group> </trans-unit> - <trans-unit id="_msg512"> + <trans-unit id="_msg514"> <source xml:space="preserve">Connection Time</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1324</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1339</context></context-group> </trans-unit> - <trans-unit id="_msg513"> + <trans-unit id="_msg515"> <source xml:space="preserve">Elapsed time since a novel block passing initial validity checks was received from this peer.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1347</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1362</context></context-group> </trans-unit> - <trans-unit id="_msg514"> + <trans-unit id="_msg516"> <source xml:space="preserve">Last Block</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1350</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1365</context></context-group> </trans-unit> - <trans-unit id="_msg515"> + <trans-unit id="_msg517"> <source xml:space="preserve">Elapsed time since a novel transaction accepted into our mempool was received from this peer.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1373</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1388</context></context-group> </trans-unit> - <trans-unit id="_msg516"> + <trans-unit id="_msg518"> <source xml:space="preserve">Last Tx</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1376</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1391</context></context-group> </trans-unit> - <trans-unit id="_msg517"> + <trans-unit id="_msg519"> <source xml:space="preserve">Last Send</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1399</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1414</context></context-group> </trans-unit> - <trans-unit id="_msg518"> + <trans-unit id="_msg520"> <source xml:space="preserve">Last Receive</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1422</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1437</context></context-group> </trans-unit> - <trans-unit id="_msg519"> + <trans-unit id="_msg521"> <source xml:space="preserve">Ping Time</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1491</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1506</context></context-group> </trans-unit> - <trans-unit id="_msg520"> + <trans-unit id="_msg522"> <source xml:space="preserve">The duration of a currently outstanding ping.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1514</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1529</context></context-group> </trans-unit> - <trans-unit id="_msg521"> + <trans-unit id="_msg523"> <source xml:space="preserve">Ping Wait</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1517</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1532</context></context-group> </trans-unit> - <trans-unit id="_msg522"> + <trans-unit id="_msg524"> <source xml:space="preserve">Min Ping</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1540</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1555</context></context-group> </trans-unit> - <trans-unit id="_msg523"> + <trans-unit id="_msg525"> <source xml:space="preserve">Time Offset</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1563</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1578</context></context-group> </trans-unit> - <trans-unit id="_msg524" approved="yes"> + <trans-unit id="_msg526" approved="yes"> <source xml:space="preserve">Last block time</source> <target xml:space="preserve">Last block time</target> <context-group purpose="location"><context context-type="linenumber">290</context></context-group> </trans-unit> - <trans-unit id="_msg525" approved="yes"> + <trans-unit id="_msg527" approved="yes"> <source xml:space="preserve">&Open</source> <target xml:space="preserve">&Open</target> <context-group purpose="location"><context context-type="linenumber">400</context></context-group> </trans-unit> - <trans-unit id="_msg526" approved="yes"> + <trans-unit id="_msg528" approved="yes"> <source xml:space="preserve">&Console</source> <target xml:space="preserve">&Console</target> <context-group purpose="location"><context context-type="linenumber">426</context></context-group> </trans-unit> - <trans-unit id="_msg527"> + <trans-unit id="_msg529"> <source xml:space="preserve">&Network Traffic</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">643</context></context-group> </trans-unit> - <trans-unit id="_msg528"> + <trans-unit id="_msg530"> <source xml:space="preserve">Totals</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">711</context></context-group> </trans-unit> - <trans-unit id="_msg529" approved="yes"> + <trans-unit id="_msg531" approved="yes"> <source xml:space="preserve">Debug log file</source> <target xml:space="preserve">Debug log file</target> <context-group purpose="location"><context context-type="linenumber">390</context></context-group> </trans-unit> - <trans-unit id="_msg530" approved="yes"> + <trans-unit id="_msg532" approved="yes"> <source xml:space="preserve">Clear console</source> <target xml:space="preserve">Clear console</target> <context-group purpose="location"><context context-type="linenumber">545</context></context-group> @@ -2947,276 +2946,276 @@ If you are receiving this error you should request the merchant provide a BIP21 </body></file> <file original="../rpcconsole.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="RPCConsole"> - <trans-unit id="_msg531"> - <source xml:space="preserve">In:</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">862</context></context-group> - </trans-unit> - <trans-unit id="_msg532"> - <source xml:space="preserve">Out:</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">863</context></context-group> - </trans-unit> <trans-unit id="_msg533"> - <source xml:space="preserve">1 &hour</source> + <source xml:space="preserve">In:</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">621</context></context-group> + <context-group purpose="location"><context context-type="linenumber">852</context></context-group> </trans-unit> <trans-unit id="_msg534"> - <source xml:space="preserve">1 &day</source> + <source xml:space="preserve">Out:</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">622</context></context-group> + <context-group purpose="location"><context context-type="linenumber">853</context></context-group> </trans-unit> <trans-unit id="_msg535"> - <source xml:space="preserve">1 &week</source> + <source xml:space="preserve">Inbound: initiated by peer</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">623</context></context-group> + <context-group purpose="location"><context context-type="linenumber">474</context></context-group> </trans-unit> <trans-unit id="_msg536"> - <source xml:space="preserve">1 &year</source> + <source xml:space="preserve">Outbound Full Relay: default</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">624</context></context-group> + <context-group purpose="location"><context context-type="linenumber">475</context></context-group> </trans-unit> <trans-unit id="_msg537"> - <source xml:space="preserve">&Disconnect</source> + <source xml:space="preserve">Outbound Block Relay: does not relay transactions or addresses</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">620</context></context-group> + <context-group purpose="location"><context context-type="linenumber">476</context></context-group> </trans-unit> <trans-unit id="_msg538"> - <source xml:space="preserve">Inbound: initiated by peer</source> + <source xml:space="preserve">Outbound Manual: added using RPC %1 or %2/%3 configuration options</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">465</context></context-group> + <context-group purpose="location"><context context-type="linenumber">477</context></context-group> </trans-unit> <trans-unit id="_msg539"> - <source xml:space="preserve">Outbound Full Relay: default</source> + <source xml:space="preserve">Outbound Feeler: short-lived, for testing addresses</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">466</context></context-group> + <context-group purpose="location"><context context-type="linenumber">481</context></context-group> </trans-unit> <trans-unit id="_msg540"> - <source xml:space="preserve">Outbound Block Relay: does not relay transactions or addresses</source> + <source xml:space="preserve">Outbound Address Fetch: short-lived, for soliciting addresses</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">467</context></context-group> + <context-group purpose="location"><context context-type="linenumber">482</context></context-group> </trans-unit> <trans-unit id="_msg541"> - <source xml:space="preserve">Outbound Manual: added using RPC %1 or %2/%3 configuration options</source> + <source xml:space="preserve">we selected the peer for high bandwidth relay</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">468</context></context-group> + <context-group purpose="location"><context context-type="linenumber">486</context></context-group> </trans-unit> <trans-unit id="_msg542"> - <source xml:space="preserve">Outbound Feeler: short-lived, for testing addresses</source> + <source xml:space="preserve">the peer selected us for high bandwidth relay</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">472</context></context-group> + <context-group purpose="location"><context context-type="linenumber">487</context></context-group> </trans-unit> <trans-unit id="_msg543"> - <source xml:space="preserve">Outbound Address Fetch: short-lived, for soliciting addresses</source> + <source xml:space="preserve">no high bandwidth relay selected</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">473</context></context-group> + <context-group purpose="location"><context context-type="linenumber">488</context></context-group> </trans-unit> <trans-unit id="_msg544"> - <source xml:space="preserve">we selected the peer for high bandwidth relay</source> + <source xml:space="preserve">Welcome to the %1 RPC console.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">477</context></context-group> + <context-group purpose="location"><context context-type="linenumber">815</context></context-group> </trans-unit> <trans-unit id="_msg545"> - <source xml:space="preserve">the peer selected us for high bandwidth relay</source> + <source xml:space="preserve">Use up and down arrows to navigate history, and %1 to clear screen.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">478</context></context-group> + <context-group purpose="location"><context context-type="linenumber">816</context></context-group> </trans-unit> <trans-unit id="_msg546"> - <source xml:space="preserve">no high bandwidth relay selected</source> + <source xml:space="preserve">Type %1 for an overview of available commands.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">479</context></context-group> + <context-group purpose="location"><context context-type="linenumber">817</context></context-group> </trans-unit> <trans-unit id="_msg547"> - <source xml:space="preserve">&Unban</source> + <source xml:space="preserve">For more information on using this console type %1.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">661</context></context-group> + <context-group purpose="location"><context context-type="linenumber">818</context></context-group> </trans-unit> <trans-unit id="_msg548"> - <source xml:space="preserve">Welcome to the %1 RPC console.</source> + <source xml:space="preserve">WARNING: Scammers have been active, telling users to type commands here, stealing their wallet contents. Do not use this console without fully understanding the ramifications of a command.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">825</context></context-group> + <context-group purpose="location"><context context-type="linenumber">820</context></context-group> </trans-unit> <trans-unit id="_msg549"> - <source xml:space="preserve">Use up and down arrows to navigate history, and %1 to clear screen.</source> + <source xml:space="preserve">Network activity disabled</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">826</context></context-group> + <context-group purpose="location"><context context-type="linenumber">856</context></context-group> </trans-unit> <trans-unit id="_msg550"> - <source xml:space="preserve">Type %1 for an overview of available commands.</source> + <source xml:space="preserve">Executing command without any wallet</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">827</context></context-group> + <context-group purpose="location"><context context-type="linenumber">922</context></context-group> </trans-unit> <trans-unit id="_msg551"> - <source xml:space="preserve">For more information on using this console type %1.</source> + <source xml:space="preserve">(peer id: %1)</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">828</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1039</context></context-group> </trans-unit> <trans-unit id="_msg552"> - <source xml:space="preserve">WARNING: Scammers have been active, telling users to type commands here, stealing their wallet contents. Do not use this console without fully understanding the ramifications of a command.</source> + <source xml:space="preserve">Executing command using "%1" wallet</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">830</context></context-group> + <context-group purpose="location"><context context-type="linenumber">920</context></context-group> </trans-unit> <trans-unit id="_msg553"> - <source xml:space="preserve">Network activity disabled</source> + <source xml:space="preserve">Disconnect</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">866</context></context-group> + <context-group purpose="location"><context context-type="linenumber">640</context></context-group> </trans-unit> <trans-unit id="_msg554"> - <source xml:space="preserve">Executing command without any wallet</source> + <source xml:space="preserve">1 hour</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">932</context></context-group> + <context-group purpose="location"><context context-type="linenumber">641</context></context-group> </trans-unit> <trans-unit id="_msg555"> - <source xml:space="preserve">(peer id: %1)</source> + <source xml:space="preserve">1 day</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1110</context></context-group> + <context-group purpose="location"><context context-type="linenumber">642</context></context-group> </trans-unit> <trans-unit id="_msg556"> - <source xml:space="preserve">Executing command using "%1" wallet</source> + <source xml:space="preserve">1 week</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">930</context></context-group> + <context-group purpose="location"><context context-type="linenumber">643</context></context-group> </trans-unit> <trans-unit id="_msg557"> + <source xml:space="preserve">1 year</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">644</context></context-group> + </trans-unit> + <trans-unit id="_msg558"> + <source xml:space="preserve">Unban</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">663</context></context-group> + </trans-unit> + <trans-unit id="_msg559"> <source xml:space="preserve">via %1</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">1112</context></context-group> + <context-group purpose="location"><context context-type="linenumber">1041</context></context-group> </trans-unit> </group> </body></file> <file original="../rpcconsole.h" datatype="c" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="RPCConsole"> - <trans-unit id="_msg558"> + <trans-unit id="_msg560"> <source xml:space="preserve">Yes</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">140</context></context-group> + <context-group purpose="location"><context context-type="linenumber">136</context></context-group> </trans-unit> - <trans-unit id="_msg559"> + <trans-unit id="_msg561"> <source xml:space="preserve">No</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">140</context></context-group> + <context-group purpose="location"><context context-type="linenumber">136</context></context-group> </trans-unit> - <trans-unit id="_msg560"> + <trans-unit id="_msg562"> <source xml:space="preserve">To</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">140</context></context-group> + <context-group purpose="location"><context context-type="linenumber">136</context></context-group> </trans-unit> - <trans-unit id="_msg561"> + <trans-unit id="_msg563"> <source xml:space="preserve">From</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">140</context></context-group> + <context-group purpose="location"><context context-type="linenumber">136</context></context-group> </trans-unit> - <trans-unit id="_msg562"> + <trans-unit id="_msg564"> <source xml:space="preserve">Ban for</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">141</context></context-group> + <context-group purpose="location"><context context-type="linenumber">137</context></context-group> </trans-unit> - <trans-unit id="_msg563"> + <trans-unit id="_msg565"> <source xml:space="preserve">Never</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">178</context></context-group> + <context-group purpose="location"><context context-type="linenumber">174</context></context-group> </trans-unit> - <trans-unit id="_msg564"> + <trans-unit id="_msg566"> <source xml:space="preserve">Unknown</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">141</context></context-group> + <context-group purpose="location"><context context-type="linenumber">137</context></context-group> </trans-unit> </group> </body></file> <file original="../forms/receivecoinsdialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="ReceiveCoinsDialog"> - <trans-unit id="_msg565"> + <trans-unit id="_msg567"> <source xml:space="preserve">&Amount:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">37</context></context-group> </trans-unit> - <trans-unit id="_msg566"> + <trans-unit id="_msg568"> <source xml:space="preserve">&Label:</source> <target xml:space="preserve" state="needs-review-translation">&Label:</target> <context-group purpose="location"><context context-type="linenumber">83</context></context-group> </trans-unit> - <trans-unit id="_msg567"> + <trans-unit id="_msg569"> <source xml:space="preserve">&Message:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">53</context></context-group> </trans-unit> - <trans-unit id="_msg568"> + <trans-unit id="_msg570"> <source xml:space="preserve">An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Bitcoin network.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">50</context></context-group> </trans-unit> - <trans-unit id="_msg569"> + <trans-unit id="_msg571"> <source xml:space="preserve">An optional label to associate with the new receiving address.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">80</context></context-group> </trans-unit> - <trans-unit id="_msg570"> + <trans-unit id="_msg572"> <source xml:space="preserve">Use this form to request payments. All fields are <b>optional</b>.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">73</context></context-group> </trans-unit> - <trans-unit id="_msg571"> + <trans-unit id="_msg573"> <source xml:space="preserve">An optional amount to request. Leave this empty or zero to not request a specific amount.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">34</context></context-group> <context-group purpose="location"><context context-type="linenumber">193</context></context-group> </trans-unit> - <trans-unit id="_msg572"> + <trans-unit id="_msg574"> <source xml:space="preserve">An optional label to associate with the new receiving address (used by you to identify an invoice). It is also attached to the payment request.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">66</context></context-group> </trans-unit> - <trans-unit id="_msg573"> + <trans-unit id="_msg575"> <source xml:space="preserve">An optional message that is attached to the payment request and may be displayed to the sender.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">96</context></context-group> </trans-unit> - <trans-unit id="_msg574"> + <trans-unit id="_msg576"> <source xml:space="preserve">&Create new receiving address</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">111</context></context-group> </trans-unit> - <trans-unit id="_msg575"> + <trans-unit id="_msg577"> <source xml:space="preserve">Clear all fields of the form.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">134</context></context-group> </trans-unit> - <trans-unit id="_msg576"> + <trans-unit id="_msg578"> <source xml:space="preserve">Clear</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">137</context></context-group> </trans-unit> - <trans-unit id="_msg577"> + <trans-unit id="_msg579"> <source xml:space="preserve">Native segwit addresses (aka Bech32 or BIP-173) reduce your transaction fees later on and offer better protection against typos, but old wallets don't support them. When unchecked, an address compatible with older wallets will be created instead.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">215</context></context-group> </trans-unit> - <trans-unit id="_msg578"> + <trans-unit id="_msg580"> <source xml:space="preserve">Generate native segwit (Bech32) address</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">218</context></context-group> </trans-unit> - <trans-unit id="_msg579"> + <trans-unit id="_msg581"> <source xml:space="preserve">Requested payments history</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">279</context></context-group> </trans-unit> - <trans-unit id="_msg580"> + <trans-unit id="_msg582"> <source xml:space="preserve">Show the selected request (does the same as double clicking an entry)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">304</context></context-group> </trans-unit> - <trans-unit id="_msg581"> + <trans-unit id="_msg583"> <source xml:space="preserve">Show</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">307</context></context-group> </trans-unit> - <trans-unit id="_msg582"> + <trans-unit id="_msg584"> <source xml:space="preserve">Remove the selected entries from the list</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">324</context></context-group> </trans-unit> - <trans-unit id="_msg583"> + <trans-unit id="_msg585"> <source xml:space="preserve">Remove</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">327</context></context-group> @@ -3225,91 +3224,91 @@ If you are receiving this error you should request the merchant provide a BIP21 </body></file> <file original="../receivecoinsdialog.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="ReceiveCoinsDialog"> - <trans-unit id="_msg584"> + <trans-unit id="_msg586"> <source xml:space="preserve">Copy URI</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">46</context></context-group> + <context-group purpose="location"><context context-type="linenumber">47</context></context-group> </trans-unit> - <trans-unit id="_msg585"> + <trans-unit id="_msg587"> <source xml:space="preserve">Copy address</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">47</context></context-group> + <context-group purpose="location"><context context-type="linenumber">48</context></context-group> </trans-unit> - <trans-unit id="_msg586"> + <trans-unit id="_msg588"> <source xml:space="preserve">Copy label</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">48</context></context-group> + <context-group purpose="location"><context context-type="linenumber">49</context></context-group> </trans-unit> - <trans-unit id="_msg587"> + <trans-unit id="_msg589"> <source xml:space="preserve">Copy message</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">49</context></context-group> + <context-group purpose="location"><context context-type="linenumber">50</context></context-group> </trans-unit> - <trans-unit id="_msg588"> + <trans-unit id="_msg590"> <source xml:space="preserve">Copy amount</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">50</context></context-group> + <context-group purpose="location"><context context-type="linenumber">51</context></context-group> </trans-unit> - <trans-unit id="_msg589"> + <trans-unit id="_msg591"> <source xml:space="preserve">Could not unlock wallet.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">190</context></context-group> + <context-group purpose="location"><context context-type="linenumber">176</context></context-group> </trans-unit> - <trans-unit id="_msg590"> + <trans-unit id="_msg592"> <source xml:space="preserve">Could not generate new %1 address</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">195</context></context-group> + <context-group purpose="location"><context context-type="linenumber">181</context></context-group> </trans-unit> </group> </body></file> <file original="../forms/receiverequestdialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="ReceiveRequestDialog"> - <trans-unit id="_msg591"> - <source xml:space="preserve">Request payment to ...</source> + <trans-unit id="_msg593"> + <source xml:space="preserve">Request payment to …</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">14</context></context-group> </trans-unit> - <trans-unit id="_msg592"> + <trans-unit id="_msg594"> <source xml:space="preserve">Address:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">90</context></context-group> </trans-unit> - <trans-unit id="_msg593"> + <trans-unit id="_msg595"> <source xml:space="preserve">Amount:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">119</context></context-group> </trans-unit> - <trans-unit id="_msg594"> + <trans-unit id="_msg596"> <source xml:space="preserve">Label:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">148</context></context-group> </trans-unit> - <trans-unit id="_msg595"> + <trans-unit id="_msg597"> <source xml:space="preserve">Message:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">180</context></context-group> </trans-unit> - <trans-unit id="_msg596"> + <trans-unit id="_msg598"> <source xml:space="preserve">Wallet:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">212</context></context-group> </trans-unit> - <trans-unit id="_msg597"> + <trans-unit id="_msg599"> <source xml:space="preserve">Copy &URI</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">240</context></context-group> </trans-unit> - <trans-unit id="_msg598"> + <trans-unit id="_msg600"> <source xml:space="preserve">Copy &Address</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">250</context></context-group> </trans-unit> - <trans-unit id="_msg599"> - <source xml:space="preserve">&Save Image...</source> + <trans-unit id="_msg601"> + <source xml:space="preserve">&Save Image…</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">260</context></context-group> </trans-unit> - <trans-unit id="_msg600"> + <trans-unit id="_msg602"> <source xml:space="preserve">Payment information</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">39</context></context-group> @@ -3318,7 +3317,7 @@ If you are receiving this error you should request the merchant provide a BIP21 </body></file> <file original="../receiverequestdialog.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="ReceiveRequestDialog"> - <trans-unit id="_msg601"> + <trans-unit id="_msg603"> <source xml:space="preserve">Request payment to %1</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">49</context></context-group> @@ -3327,37 +3326,37 @@ If you are receiving this error you should request the merchant provide a BIP21 </body></file> <file original="../recentrequeststablemodel.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="RecentRequestsTableModel"> - <trans-unit id="_msg602"> + <trans-unit id="_msg604"> <source xml:space="preserve">Date</source> <target xml:space="preserve" state="needs-review-translation">Date</target> <context-group purpose="location"><context context-type="linenumber">27</context></context-group> </trans-unit> - <trans-unit id="_msg603"> + <trans-unit id="_msg605"> <source xml:space="preserve">Label</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">27</context></context-group> </trans-unit> - <trans-unit id="_msg604"> + <trans-unit id="_msg606"> <source xml:space="preserve">Message</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">27</context></context-group> </trans-unit> - <trans-unit id="_msg605"> + <trans-unit id="_msg607"> <source xml:space="preserve">(no label)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">68</context></context-group> </trans-unit> - <trans-unit id="_msg606"> + <trans-unit id="_msg608"> <source xml:space="preserve">(no message)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">77</context></context-group> </trans-unit> - <trans-unit id="_msg607"> + <trans-unit id="_msg609"> <source xml:space="preserve">(no amount requested)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">85</context></context-group> </trans-unit> - <trans-unit id="_msg608"> + <trans-unit id="_msg610"> <source xml:space="preserve">Requested</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">127</context></context-group> @@ -3366,82 +3365,72 @@ If you are receiving this error you should request the merchant provide a BIP21 </body></file> <file original="../forms/sendcoinsdialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="SendCoinsDialog"> - <trans-unit id="_msg609" approved="yes"> + <trans-unit id="_msg611" approved="yes"> <source xml:space="preserve">Send Coins</source> <target xml:space="preserve">Send Coins</target> <context-group purpose="location"><context context-type="linenumber">14</context></context-group> <context-group purpose="location"><context context-type="sourcefile">../sendcoinsdialog.cpp</context><context context-type="linenumber">673</context></context-group> </trans-unit> - <trans-unit id="_msg610"> + <trans-unit id="_msg612"> <source xml:space="preserve">Coin Control Features</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">90</context></context-group> </trans-unit> - <trans-unit id="_msg611"> - <source xml:space="preserve">Inputs...</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">110</context></context-group> - </trans-unit> - <trans-unit id="_msg612"> + <trans-unit id="_msg613"> <source xml:space="preserve">automatically selected</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">120</context></context-group> </trans-unit> - <trans-unit id="_msg613"> + <trans-unit id="_msg614"> <source xml:space="preserve">Insufficient funds!</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">139</context></context-group> </trans-unit> - <trans-unit id="_msg614"> + <trans-unit id="_msg615"> <source xml:space="preserve">Quantity:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">228</context></context-group> </trans-unit> - <trans-unit id="_msg615"> + <trans-unit id="_msg616"> <source xml:space="preserve">Bytes:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">263</context></context-group> </trans-unit> - <trans-unit id="_msg616"> + <trans-unit id="_msg617"> <source xml:space="preserve">Amount:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">311</context></context-group> </trans-unit> - <trans-unit id="_msg617"> + <trans-unit id="_msg618"> <source xml:space="preserve">Fee:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">391</context></context-group> </trans-unit> - <trans-unit id="_msg618"> + <trans-unit id="_msg619"> <source xml:space="preserve">After Fee:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">442</context></context-group> </trans-unit> - <trans-unit id="_msg619"> + <trans-unit id="_msg620"> <source xml:space="preserve">Change:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">474</context></context-group> </trans-unit> - <trans-unit id="_msg620"> + <trans-unit id="_msg621"> <source xml:space="preserve">If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">518</context></context-group> </trans-unit> - <trans-unit id="_msg621"> + <trans-unit id="_msg622"> <source xml:space="preserve">Custom change address</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">521</context></context-group> </trans-unit> - <trans-unit id="_msg622"> + <trans-unit id="_msg623"> <source xml:space="preserve">Transaction Fee:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">727</context></context-group> </trans-unit> - <trans-unit id="_msg623"> - <source xml:space="preserve">Choose...</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">741</context></context-group> - </trans-unit> <trans-unit id="_msg624"> <source xml:space="preserve">Using the fallbackfee can result in sending a transaction that will take several hours or days (or never) to confirm. Consider choosing your fee manually or wait until you have validated the complete chain.</source> <target xml:space="preserve"></target> @@ -3453,103 +3442,113 @@ If you are receiving this error you should request the merchant provide a BIP21 <context-group purpose="location"><context context-type="linenumber">774</context></context-group> </trans-unit> <trans-unit id="_msg626"> - <source xml:space="preserve">Specify a custom fee per kB (1,000 bytes) of the transaction's virtual size. - -Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis per kB" for a transaction size of 500 bytes (half of 1 kB) would ultimately yield a fee of only 50 satoshis.</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">851</context></context-group> - </trans-unit> - <trans-unit id="_msg627"> <source xml:space="preserve">per kilobyte</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">856</context></context-group> </trans-unit> - <trans-unit id="_msg628"> + <trans-unit id="_msg627"> <source xml:space="preserve">Hide</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">803</context></context-group> </trans-unit> - <trans-unit id="_msg629"> + <trans-unit id="_msg628"> <source xml:space="preserve">Recommended:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">915</context></context-group> </trans-unit> - <trans-unit id="_msg630"> + <trans-unit id="_msg629"> <source xml:space="preserve">Custom:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">945</context></context-group> </trans-unit> - <trans-unit id="_msg631"> - <source xml:space="preserve">(Smart fee not initialized yet. This usually takes a few blocks...)</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">994</context></context-group> - </trans-unit> - <trans-unit id="_msg632" approved="yes"> + <trans-unit id="_msg630" approved="yes"> <source xml:space="preserve">Send to multiple recipients at once</source> <target xml:space="preserve">Send to multiple recipients at once</target> <context-group purpose="location"><context context-type="linenumber">1160</context></context-group> </trans-unit> - <trans-unit id="_msg633" approved="yes"> + <trans-unit id="_msg631" approved="yes"> <source xml:space="preserve">Add &Recipient</source> <target xml:space="preserve">Add &Recipient</target> <context-group purpose="location"><context context-type="linenumber">1163</context></context-group> </trans-unit> - <trans-unit id="_msg634"> + <trans-unit id="_msg632"> <source xml:space="preserve">Clear all fields of the form.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1143</context></context-group> </trans-unit> - <trans-unit id="_msg635"> + <trans-unit id="_msg633"> + <source xml:space="preserve">Inputs…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">110</context></context-group> + </trans-unit> + <trans-unit id="_msg634"> <source xml:space="preserve">Dust:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">343</context></context-group> </trans-unit> + <trans-unit id="_msg635"> + <source xml:space="preserve">Choose…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">741</context></context-group> + </trans-unit> <trans-unit id="_msg636"> <source xml:space="preserve">Hide transaction fee settings</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">800</context></context-group> </trans-unit> <trans-unit id="_msg637"> + <source xml:space="preserve">Specify a custom fee per kB (1,000 bytes) of the transaction's virtual size. + +Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satoshis per kvB" for a transaction size of 500 virtual bytes (half of 1 kvB) would ultimately yield a fee of only 50 satoshis.</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">851</context></context-group> + </trans-unit> + <trans-unit id="_msg638"> <source xml:space="preserve">When there is less transaction volume than space in the blocks, miners as well as relaying nodes may enforce a minimum fee. Paying only this minimum fee is just fine, but be aware that this can result in a never confirming transaction once there is more demand for bitcoin transactions than the network can process.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">886</context></context-group> </trans-unit> - <trans-unit id="_msg638"> + <trans-unit id="_msg639"> <source xml:space="preserve">A too low fee might result in a never confirming transaction (read the tooltip)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">889</context></context-group> </trans-unit> - <trans-unit id="_msg639"> + <trans-unit id="_msg640"> + <source xml:space="preserve">(Smart fee not initialized yet. This usually takes a few blocks…)</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">994</context></context-group> + </trans-unit> + <trans-unit id="_msg641"> <source xml:space="preserve">Confirmation time target:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1020</context></context-group> </trans-unit> - <trans-unit id="_msg640"> + <trans-unit id="_msg642"> <source xml:space="preserve">Enable Replace-By-Fee</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1078</context></context-group> </trans-unit> - <trans-unit id="_msg641"> + <trans-unit id="_msg643"> <source xml:space="preserve">With Replace-By-Fee (BIP-125) you can increase a transaction's fee after it is sent. Without this, a higher fee may be recommended to compensate for increased transaction delay risk.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1081</context></context-group> </trans-unit> - <trans-unit id="_msg642" approved="yes"> + <trans-unit id="_msg644" approved="yes"> <source xml:space="preserve">Clear &All</source> <target xml:space="preserve">Clear &All</target> <context-group purpose="location"><context context-type="linenumber">1146</context></context-group> </trans-unit> - <trans-unit id="_msg643" approved="yes"> + <trans-unit id="_msg645" approved="yes"> <source xml:space="preserve">Balance:</source> <target xml:space="preserve">Balance:</target> <context-group purpose="location"><context context-type="linenumber">1201</context></context-group> </trans-unit> - <trans-unit id="_msg644" approved="yes"> + <trans-unit id="_msg646" approved="yes"> <source xml:space="preserve">Confirm the send action</source> <target xml:space="preserve">Confirm the send action</target> <context-group purpose="location"><context context-type="linenumber">1117</context></context-group> </trans-unit> - <trans-unit id="_msg645" approved="yes"> + <trans-unit id="_msg647" approved="yes"> <source xml:space="preserve">S&end</source> <target xml:space="preserve">S&end</target> <context-group purpose="location"><context context-type="linenumber">1120</context></context-group> @@ -3558,344 +3557,344 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos </body></file> <file original="../sendcoinsdialog.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="SendCoinsDialog"> - <trans-unit id="_msg646"> + <trans-unit id="_msg648"> <source xml:space="preserve">Copy quantity</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">92</context></context-group> </trans-unit> - <trans-unit id="_msg647"> + <trans-unit id="_msg649"> <source xml:space="preserve">Copy amount</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">93</context></context-group> </trans-unit> - <trans-unit id="_msg648"> + <trans-unit id="_msg650"> <source xml:space="preserve">Copy fee</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">94</context></context-group> </trans-unit> - <trans-unit id="_msg649"> + <trans-unit id="_msg651"> <source xml:space="preserve">Copy after fee</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">95</context></context-group> </trans-unit> - <trans-unit id="_msg650"> + <trans-unit id="_msg652"> <source xml:space="preserve">Copy bytes</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">96</context></context-group> </trans-unit> - <trans-unit id="_msg651"> + <trans-unit id="_msg653"> <source xml:space="preserve">Copy dust</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">97</context></context-group> </trans-unit> - <trans-unit id="_msg652"> + <trans-unit id="_msg654"> <source xml:space="preserve">Copy change</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">98</context></context-group> </trans-unit> - <trans-unit id="_msg653"> + <trans-unit id="_msg655"> <source xml:space="preserve">%1 (%2 blocks)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">174</context></context-group> </trans-unit> - <trans-unit id="_msg654"> + <trans-unit id="_msg656"> <source xml:space="preserve">Cr&eate Unsigned</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">203</context></context-group> </trans-unit> - <trans-unit id="_msg655"> + <trans-unit id="_msg657"> <source xml:space="preserve">Creates a Partially Signed Bitcoin Transaction (PSBT) for use with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">204</context></context-group> </trans-unit> - <trans-unit id="_msg656"> + <trans-unit id="_msg658"> <source xml:space="preserve"> from wallet '%1'</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">294</context></context-group> </trans-unit> - <trans-unit id="_msg657"> + <trans-unit id="_msg659"> <source xml:space="preserve">%1 to '%2'</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">305</context></context-group> </trans-unit> - <trans-unit id="_msg658"> + <trans-unit id="_msg660"> <source xml:space="preserve">%1 to %2</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">310</context></context-group> </trans-unit> - <trans-unit id="_msg659"> + <trans-unit id="_msg661"> <source xml:space="preserve">Do you want to draft this transaction?</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">317</context></context-group> </trans-unit> - <trans-unit id="_msg660"> + <trans-unit id="_msg662"> <source xml:space="preserve">Are you sure you want to send?</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">319</context></context-group> </trans-unit> - <trans-unit id="_msg661"> + <trans-unit id="_msg663"> + <source xml:space="preserve">To review recipient list click "Show Details…"</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">371</context></context-group> + </trans-unit> + <trans-unit id="_msg664"> <source xml:space="preserve">Create Unsigned</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">390</context></context-group> </trans-unit> - <trans-unit id="_msg662"> + <trans-unit id="_msg665"> <source xml:space="preserve">Save Transaction Data</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">434</context></context-group> </trans-unit> - <trans-unit id="_msg663"> + <trans-unit id="_msg666"> <source xml:space="preserve">PSBT saved</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">442</context></context-group> </trans-unit> - <trans-unit id="_msg664"> + <trans-unit id="_msg667"> <source xml:space="preserve">or</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">367</context></context-group> </trans-unit> - <trans-unit id="_msg665"> + <trans-unit id="_msg668"> <source xml:space="preserve">You can increase the fee later (signals Replace-By-Fee, BIP-125).</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">348</context></context-group> </trans-unit> - <trans-unit id="_msg666"> + <trans-unit id="_msg669"> <source xml:space="preserve">Please, review your transaction proposal. This will produce a Partially Signed Bitcoin Transaction (PSBT) which you can save or copy and then sign with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">324</context></context-group> </trans-unit> - <trans-unit id="_msg667"> + <trans-unit id="_msg670"> <source xml:space="preserve">Please, review your transaction.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">326</context></context-group> </trans-unit> - <trans-unit id="_msg668"> + <trans-unit id="_msg671"> <source xml:space="preserve">Transaction fee</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">334</context></context-group> </trans-unit> - <trans-unit id="_msg669"> + <trans-unit id="_msg672"> <source xml:space="preserve">Not signalling Replace-By-Fee, BIP-125.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">350</context></context-group> </trans-unit> - <trans-unit id="_msg670"> + <trans-unit id="_msg673"> <source xml:space="preserve">Total Amount</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">364</context></context-group> </trans-unit> - <trans-unit id="_msg671"> - <source xml:space="preserve">To review recipient list click "Show Details..."</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">371</context></context-group> - </trans-unit> - <trans-unit id="_msg672"> + <trans-unit id="_msg674"> <source xml:space="preserve">Confirm send coins</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">389</context></context-group> </trans-unit> - <trans-unit id="_msg673"> + <trans-unit id="_msg675"> <source xml:space="preserve">Confirm transaction proposal</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">389</context></context-group> </trans-unit> - <trans-unit id="_msg674"> + <trans-unit id="_msg676"> <source xml:space="preserve">Send</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">390</context></context-group> </trans-unit> - <trans-unit id="_msg675"> + <trans-unit id="_msg677"> <source xml:space="preserve">Partially Signed Transaction (Binary)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">435</context></context-group> <context-group><context context-type="x-gettext-msgctxt">Name of binary PSBT file format</context></context-group> </trans-unit> - <trans-unit id="_msg676"> + <trans-unit id="_msg678"> <source xml:space="preserve">Watch-only balance:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">618</context></context-group> </trans-unit> - <trans-unit id="_msg677"> + <trans-unit id="_msg679"> <source xml:space="preserve">The recipient address is not valid. Please recheck.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">642</context></context-group> </trans-unit> - <trans-unit id="_msg678"> + <trans-unit id="_msg680"> <source xml:space="preserve">The amount to pay must be larger than 0.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">645</context></context-group> </trans-unit> - <trans-unit id="_msg679"> + <trans-unit id="_msg681"> <source xml:space="preserve">The amount exceeds your balance.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">648</context></context-group> </trans-unit> - <trans-unit id="_msg680"> + <trans-unit id="_msg682"> <source xml:space="preserve">The total exceeds your balance when the %1 transaction fee is included.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">651</context></context-group> </trans-unit> - <trans-unit id="_msg681"> + <trans-unit id="_msg683"> <source xml:space="preserve">Duplicate address found: addresses should only be used once each.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">654</context></context-group> </trans-unit> - <trans-unit id="_msg682"> + <trans-unit id="_msg684"> <source xml:space="preserve">Transaction creation failed!</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">657</context></context-group> </trans-unit> - <trans-unit id="_msg683"> + <trans-unit id="_msg685"> <source xml:space="preserve">A fee higher than %1 is considered an absurdly high fee.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">661</context></context-group> </trans-unit> - <trans-unit id="_msg684"> + <trans-unit id="_msg686"> <source xml:space="preserve">Payment request expired.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">664</context></context-group> </trans-unit> <group restype="x-gettext-plurals"> <context-group purpose="location"><context context-type="linenumber">788</context></context-group> - <trans-unit id="_msg685[0]" approved="yes"> + <trans-unit id="_msg687[0]" approved="yes"> <source xml:space="preserve">Estimated to begin confirmation within %n block(s).</source> <target xml:space="preserve">Estimated to begin confirmation within %n block.</target> </trans-unit> - <trans-unit id="_msg685[1]" approved="yes"> + <trans-unit id="_msg687[1]" approved="yes"> <source xml:space="preserve">Estimated to begin confirmation within %n block(s).</source> <target xml:space="preserve">Estimated to begin confirmation within %n blocks.</target> </trans-unit> </group> - <trans-unit id="_msg686"> + <trans-unit id="_msg688"> <source xml:space="preserve">Warning: Invalid Bitcoin address</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">888</context></context-group> + <context-group purpose="location"><context context-type="linenumber">889</context></context-group> </trans-unit> - <trans-unit id="_msg687"> + <trans-unit id="_msg689"> <source xml:space="preserve">Warning: Unknown change address</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">893</context></context-group> + <context-group purpose="location"><context context-type="linenumber">894</context></context-group> </trans-unit> - <trans-unit id="_msg688"> + <trans-unit id="_msg690"> <source xml:space="preserve">Confirm custom change address</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">896</context></context-group> + <context-group purpose="location"><context context-type="linenumber">897</context></context-group> </trans-unit> - <trans-unit id="_msg689"> + <trans-unit id="_msg691"> <source xml:space="preserve">The address you selected for change is not part of this wallet. Any or all funds in your wallet may be sent to this address. Are you sure?</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">896</context></context-group> + <context-group purpose="location"><context context-type="linenumber">897</context></context-group> </trans-unit> - <trans-unit id="_msg690"> + <trans-unit id="_msg692"> <source xml:space="preserve">(no label)</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">917</context></context-group> + <context-group purpose="location"><context context-type="linenumber">918</context></context-group> </trans-unit> </group> </body></file> <file original="../forms/sendcoinsentry.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="SendCoinsEntry"> - <trans-unit id="_msg691" approved="yes"> + <trans-unit id="_msg693" approved="yes"> <source xml:space="preserve">A&mount:</source> <target xml:space="preserve">A&mount:</target> <context-group purpose="location"><context context-type="linenumber">155</context></context-group> <context-group purpose="location"><context context-type="linenumber">705</context></context-group> <context-group purpose="location"><context context-type="linenumber">1238</context></context-group> </trans-unit> - <trans-unit id="_msg692" approved="yes"> + <trans-unit id="_msg694" approved="yes"> <source xml:space="preserve">Pay &To:</source> <target xml:space="preserve">Pay &To:</target> <context-group purpose="location"><context context-type="linenumber">39</context></context-group> </trans-unit> - <trans-unit id="_msg693" approved="yes"> + <trans-unit id="_msg695" approved="yes"> <source xml:space="preserve">&Label:</source> <target xml:space="preserve">&Label:</target> <context-group purpose="location"><context context-type="linenumber">132</context></context-group> </trans-unit> - <trans-unit id="_msg694"> + <trans-unit id="_msg696"> <source xml:space="preserve">Choose previously used address</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">64</context></context-group> </trans-unit> - <trans-unit id="_msg695"> + <trans-unit id="_msg697"> <source xml:space="preserve">The Bitcoin address to send the payment to</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">57</context></context-group> </trans-unit> - <trans-unit id="_msg696" approved="yes"> + <trans-unit id="_msg698" approved="yes"> <source xml:space="preserve">Alt+A</source> <target xml:space="preserve">Alt+A</target> <context-group purpose="location"><context context-type="linenumber">80</context></context-group> </trans-unit> - <trans-unit id="_msg697" approved="yes"> + <trans-unit id="_msg699" approved="yes"> <source xml:space="preserve">Paste address from clipboard</source> <target xml:space="preserve">Paste address from clipboard</target> <context-group purpose="location"><context context-type="linenumber">87</context></context-group> </trans-unit> - <trans-unit id="_msg698" approved="yes"> + <trans-unit id="_msg700" approved="yes"> <source xml:space="preserve">Alt+P</source> <target xml:space="preserve">Alt+P</target> <context-group purpose="location"><context context-type="linenumber">103</context></context-group> </trans-unit> - <trans-unit id="_msg699"> + <trans-unit id="_msg701"> <source xml:space="preserve">Remove this entry</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">110</context></context-group> <context-group purpose="location"><context context-type="linenumber">672</context></context-group> <context-group purpose="location"><context context-type="linenumber">1205</context></context-group> </trans-unit> - <trans-unit id="_msg700"> + <trans-unit id="_msg702"> <source xml:space="preserve">The amount to send in the selected unit</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">170</context></context-group> </trans-unit> - <trans-unit id="_msg701"> + <trans-unit id="_msg703"> <source xml:space="preserve">The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">177</context></context-group> </trans-unit> - <trans-unit id="_msg702"> + <trans-unit id="_msg704"> <source xml:space="preserve">S&ubtract fee from amount</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">180</context></context-group> </trans-unit> - <trans-unit id="_msg703"> + <trans-unit id="_msg705"> <source xml:space="preserve">Use available balance</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">187</context></context-group> </trans-unit> - <trans-unit id="_msg704"> + <trans-unit id="_msg706"> <source xml:space="preserve">Message:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">196</context></context-group> </trans-unit> - <trans-unit id="_msg705"> + <trans-unit id="_msg707"> <source xml:space="preserve">This is an unauthenticated payment request.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">639</context></context-group> </trans-unit> - <trans-unit id="_msg706"> + <trans-unit id="_msg708"> <source xml:space="preserve">This is an authenticated payment request.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">1168</context></context-group> </trans-unit> - <trans-unit id="_msg707"> + <trans-unit id="_msg709"> <source xml:space="preserve">Enter a label for this address to add it to the list of used addresses</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">145</context></context-group> <context-group purpose="location"><context context-type="linenumber">148</context></context-group> </trans-unit> - <trans-unit id="_msg708"> + <trans-unit id="_msg710"> <source xml:space="preserve">A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">206</context></context-group> </trans-unit> - <trans-unit id="_msg709"> + <trans-unit id="_msg711"> <source xml:space="preserve">Pay To:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">654</context></context-group> <context-group purpose="location"><context context-type="linenumber">1183</context></context-group> </trans-unit> - <trans-unit id="_msg710"> + <trans-unit id="_msg712"> <source xml:space="preserve">Memo:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">688</context></context-group> @@ -3905,128 +3904,128 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos </body></file> <file original="../forms/signverifymessagedialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="SignVerifyMessageDialog"> - <trans-unit id="_msg711" approved="yes"> + <trans-unit id="_msg713" approved="yes"> <source xml:space="preserve">Signatures - Sign / Verify a Message</source> <target xml:space="preserve">Signatures - Sign / Verify a Message</target> <context-group purpose="location"><context context-type="linenumber">14</context></context-group> </trans-unit> - <trans-unit id="_msg712" approved="yes"> + <trans-unit id="_msg714" approved="yes"> <source xml:space="preserve">&Sign Message</source> <target xml:space="preserve">&Sign Message</target> <context-group purpose="location"><context context-type="linenumber">27</context></context-group> </trans-unit> - <trans-unit id="_msg713"> + <trans-unit id="_msg715"> <source xml:space="preserve">You can sign messages/agreements with your addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">33</context></context-group> </trans-unit> - <trans-unit id="_msg714"> + <trans-unit id="_msg716"> <source xml:space="preserve">The Bitcoin address to sign the message with</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">51</context></context-group> </trans-unit> - <trans-unit id="_msg715"> + <trans-unit id="_msg717"> <source xml:space="preserve">Choose previously used address</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">58</context></context-group> <context-group purpose="location"><context context-type="linenumber">274</context></context-group> </trans-unit> - <trans-unit id="_msg716" approved="yes"> + <trans-unit id="_msg718" approved="yes"> <source xml:space="preserve">Alt+A</source> <target xml:space="preserve">Alt+A</target> <context-group purpose="location"><context context-type="linenumber">68</context></context-group> <context-group purpose="location"><context context-type="linenumber">284</context></context-group> </trans-unit> - <trans-unit id="_msg717" approved="yes"> + <trans-unit id="_msg719" approved="yes"> <source xml:space="preserve">Paste address from clipboard</source> <target xml:space="preserve">Paste address from clipboard</target> <context-group purpose="location"><context context-type="linenumber">78</context></context-group> </trans-unit> - <trans-unit id="_msg718" approved="yes"> + <trans-unit id="_msg720" approved="yes"> <source xml:space="preserve">Alt+P</source> <target xml:space="preserve">Alt+P</target> <context-group purpose="location"><context context-type="linenumber">88</context></context-group> </trans-unit> - <trans-unit id="_msg719" approved="yes"> + <trans-unit id="_msg721" approved="yes"> <source xml:space="preserve">Enter the message you want to sign here</source> <target xml:space="preserve">Enter the message you want to sign here</target> <context-group purpose="location"><context context-type="linenumber">100</context></context-group> <context-group purpose="location"><context context-type="linenumber">103</context></context-group> </trans-unit> - <trans-unit id="_msg720" approved="yes"> + <trans-unit id="_msg722" approved="yes"> <source xml:space="preserve">Signature</source> <target xml:space="preserve">Signature</target> <context-group purpose="location"><context context-type="linenumber">110</context></context-group> </trans-unit> - <trans-unit id="_msg721" approved="yes"> + <trans-unit id="_msg723" approved="yes"> <source xml:space="preserve">Copy the current signature to the system clipboard</source> <target xml:space="preserve">Copy the current signature to the system clipboard</target> <context-group purpose="location"><context context-type="linenumber">140</context></context-group> </trans-unit> - <trans-unit id="_msg722" approved="yes"> + <trans-unit id="_msg724" approved="yes"> <source xml:space="preserve">Sign the message to prove you own this Bitcoin address</source> <target xml:space="preserve">Sign the message to prove you own this Bitcoin address</target> <context-group purpose="location"><context context-type="linenumber">161</context></context-group> </trans-unit> - <trans-unit id="_msg723" approved="yes"> + <trans-unit id="_msg725" approved="yes"> <source xml:space="preserve">Sign &Message</source> <target xml:space="preserve">Sign &Message</target> <context-group purpose="location"><context context-type="linenumber">164</context></context-group> </trans-unit> - <trans-unit id="_msg724" approved="yes"> + <trans-unit id="_msg726" approved="yes"> <source xml:space="preserve">Reset all sign message fields</source> <target xml:space="preserve">Reset all sign message fields</target> <context-group purpose="location"><context context-type="linenumber">178</context></context-group> </trans-unit> - <trans-unit id="_msg725" approved="yes"> + <trans-unit id="_msg727" approved="yes"> <source xml:space="preserve">Clear &All</source> <target xml:space="preserve">Clear &All</target> <context-group purpose="location"><context context-type="linenumber">181</context></context-group> <context-group purpose="location"><context context-type="linenumber">338</context></context-group> </trans-unit> - <trans-unit id="_msg726" approved="yes"> + <trans-unit id="_msg728" approved="yes"> <source xml:space="preserve">&Verify Message</source> <target xml:space="preserve">&Verify Message</target> <context-group purpose="location"><context context-type="linenumber">240</context></context-group> </trans-unit> - <trans-unit id="_msg727"> + <trans-unit id="_msg729"> <source xml:space="preserve">Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction!</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">246</context></context-group> </trans-unit> - <trans-unit id="_msg728"> + <trans-unit id="_msg730"> <source xml:space="preserve">The Bitcoin address the message was signed with</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">267</context></context-group> </trans-unit> - <trans-unit id="_msg729"> + <trans-unit id="_msg731"> <source xml:space="preserve">The signed message to verify</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">296</context></context-group> <context-group purpose="location"><context context-type="linenumber">299</context></context-group> </trans-unit> - <trans-unit id="_msg730"> + <trans-unit id="_msg732"> <source xml:space="preserve">The signature given when the message was signed</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">306</context></context-group> <context-group purpose="location"><context context-type="linenumber">309</context></context-group> </trans-unit> - <trans-unit id="_msg731" approved="yes"> + <trans-unit id="_msg733" approved="yes"> <source xml:space="preserve">Verify the message to ensure it was signed with the specified Bitcoin address</source> <target xml:space="preserve">Verify the message to ensure it was signed with the specified Bitcoin address</target> <context-group purpose="location"><context context-type="linenumber">318</context></context-group> </trans-unit> - <trans-unit id="_msg732" approved="yes"> + <trans-unit id="_msg734" approved="yes"> <source xml:space="preserve">Verify &Message</source> <target xml:space="preserve">Verify &Message</target> <context-group purpose="location"><context context-type="linenumber">321</context></context-group> </trans-unit> - <trans-unit id="_msg733" approved="yes"> + <trans-unit id="_msg735" approved="yes"> <source xml:space="preserve">Reset all verify message fields</source> <target xml:space="preserve">Reset all verify message fields</target> <context-group purpose="location"><context context-type="linenumber">335</context></context-group> </trans-unit> - <trans-unit id="_msg734"> + <trans-unit id="_msg736"> <source xml:space="preserve">Click "Sign Message" to generate signature</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">125</context></context-group> @@ -4035,13 +4034,13 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos </body></file> <file original="../signverifymessagedialog.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="SignVerifyMessageDialog"> - <trans-unit id="_msg735"> + <trans-unit id="_msg737"> <source xml:space="preserve">The entered address is invalid.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">120</context></context-group> <context-group purpose="location"><context context-type="linenumber">219</context></context-group> </trans-unit> - <trans-unit id="_msg736"> + <trans-unit id="_msg738"> <source xml:space="preserve">Please check the address and try again.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">120</context></context-group> @@ -4049,59 +4048,59 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos <context-group purpose="location"><context context-type="linenumber">220</context></context-group> <context-group purpose="location"><context context-type="linenumber">227</context></context-group> </trans-unit> - <trans-unit id="_msg737"> + <trans-unit id="_msg739"> <source xml:space="preserve">The entered address does not refer to a key.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">127</context></context-group> <context-group purpose="location"><context context-type="linenumber">226</context></context-group> </trans-unit> - <trans-unit id="_msg738"> + <trans-unit id="_msg740"> <source xml:space="preserve">Wallet unlock was cancelled.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">135</context></context-group> </trans-unit> - <trans-unit id="_msg739"> + <trans-unit id="_msg741"> <source xml:space="preserve">No error</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">146</context></context-group> </trans-unit> - <trans-unit id="_msg740"> + <trans-unit id="_msg742"> <source xml:space="preserve">Private key for the entered address is not available.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">149</context></context-group> </trans-unit> - <trans-unit id="_msg741"> + <trans-unit id="_msg743"> <source xml:space="preserve">Message signing failed.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">152</context></context-group> </trans-unit> - <trans-unit id="_msg742"> + <trans-unit id="_msg744"> <source xml:space="preserve">Message signed.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">164</context></context-group> </trans-unit> - <trans-unit id="_msg743"> + <trans-unit id="_msg745"> <source xml:space="preserve">The signature could not be decoded.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">233</context></context-group> </trans-unit> - <trans-unit id="_msg744"> + <trans-unit id="_msg746"> <source xml:space="preserve">Please check the signature and try again.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">234</context></context-group> <context-group purpose="location"><context context-type="linenumber">241</context></context-group> </trans-unit> - <trans-unit id="_msg745"> + <trans-unit id="_msg747"> <source xml:space="preserve">The signature did not match the message digest.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">240</context></context-group> </trans-unit> - <trans-unit id="_msg746"> + <trans-unit id="_msg748"> <source xml:space="preserve">Message verification failed.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">246</context></context-group> </trans-unit> - <trans-unit id="_msg747"> + <trans-unit id="_msg749"> <source xml:space="preserve">Message verified.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">214</context></context-group> @@ -4110,7 +4109,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos </body></file> <file original="../trafficgraphwidget.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="TrafficGraphWidget"> - <trans-unit id="_msg748"> + <trans-unit id="_msg750"> <source xml:space="preserve">kB/s</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">82</context></context-group> @@ -4121,111 +4120,111 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos <group restype="x-trolltech-linguist-context" resname="TransactionDesc"> <group restype="x-gettext-plurals"> <context-group purpose="location"><context context-type="linenumber">34</context></context-group> - <trans-unit id="_msg749[0]" approved="yes"> + <trans-unit id="_msg751[0]" approved="yes"> <source xml:space="preserve">Open for %n more block(s)</source> <target xml:space="preserve">Open for %n more block</target> </trans-unit> - <trans-unit id="_msg749[1]" approved="yes"> + <trans-unit id="_msg751[1]" approved="yes"> <source xml:space="preserve">Open for %n more block(s)</source> <target xml:space="preserve">Open for %n more blocks</target> </trans-unit> </group> - <trans-unit id="_msg750"> + <trans-unit id="_msg752"> <source xml:space="preserve">Open until %1</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">36</context></context-group> </trans-unit> - <trans-unit id="_msg751"> + <trans-unit id="_msg753"> <source xml:space="preserve">conflicted with a transaction with %1 confirmations</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">42</context></context-group> </trans-unit> - <trans-unit id="_msg752"> + <trans-unit id="_msg754"> <source xml:space="preserve">0/unconfirmed, %1</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">44</context></context-group> </trans-unit> - <trans-unit id="_msg753"> + <trans-unit id="_msg755"> <source xml:space="preserve">in memory pool</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">44</context></context-group> </trans-unit> - <trans-unit id="_msg754"> + <trans-unit id="_msg756"> <source xml:space="preserve">not in memory pool</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">44</context></context-group> </trans-unit> - <trans-unit id="_msg755"> + <trans-unit id="_msg757"> <source xml:space="preserve">abandoned</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">44</context></context-group> </trans-unit> - <trans-unit id="_msg756"> + <trans-unit id="_msg758"> <source xml:space="preserve">%1/unconfirmed</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">46</context></context-group> </trans-unit> - <trans-unit id="_msg757"> + <trans-unit id="_msg759"> <source xml:space="preserve">%1 confirmations</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">48</context></context-group> </trans-unit> - <trans-unit id="_msg758"> + <trans-unit id="_msg760"> <source xml:space="preserve">Status</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">98</context></context-group> </trans-unit> - <trans-unit id="_msg759"> + <trans-unit id="_msg761"> <source xml:space="preserve">Date</source> <target xml:space="preserve" state="needs-review-translation">Date</target> <context-group purpose="location"><context context-type="linenumber">101</context></context-group> </trans-unit> - <trans-unit id="_msg760"> + <trans-unit id="_msg762"> <source xml:space="preserve">Source</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">108</context></context-group> </trans-unit> - <trans-unit id="_msg761"> + <trans-unit id="_msg763"> <source xml:space="preserve">Generated</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">108</context></context-group> </trans-unit> - <trans-unit id="_msg762"> + <trans-unit id="_msg764"> <source xml:space="preserve">From</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">113</context></context-group> <context-group purpose="location"><context context-type="linenumber">127</context></context-group> <context-group purpose="location"><context context-type="linenumber">199</context></context-group> </trans-unit> - <trans-unit id="_msg763"> + <trans-unit id="_msg765"> <source xml:space="preserve">unknown</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">127</context></context-group> </trans-unit> - <trans-unit id="_msg764"> + <trans-unit id="_msg766"> <source xml:space="preserve">To</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">128</context></context-group> <context-group purpose="location"><context context-type="linenumber">148</context></context-group> <context-group purpose="location"><context context-type="linenumber">218</context></context-group> </trans-unit> - <trans-unit id="_msg765"> + <trans-unit id="_msg767"> <source xml:space="preserve">own address</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">130</context></context-group> </trans-unit> - <trans-unit id="_msg766"> + <trans-unit id="_msg768"> <source xml:space="preserve">watch-only</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">130</context></context-group> <context-group purpose="location"><context context-type="linenumber">199</context></context-group> </trans-unit> - <trans-unit id="_msg767"> + <trans-unit id="_msg769"> <source xml:space="preserve">label</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">132</context></context-group> </trans-unit> - <trans-unit id="_msg768"> + <trans-unit id="_msg770"> <source xml:space="preserve">Credit</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">168</context></context-group> @@ -4236,120 +4235,120 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos </trans-unit> <group restype="x-gettext-plurals"> <context-group purpose="location"><context context-type="linenumber">170</context></context-group> - <trans-unit id="_msg769[0]" approved="yes"> + <trans-unit id="_msg771[0]" approved="yes"> <source xml:space="preserve">matures in %n more block(s)</source> <target xml:space="preserve">matures in %n more block</target> </trans-unit> - <trans-unit id="_msg769[1]" approved="yes"> + <trans-unit id="_msg771[1]" approved="yes"> <source xml:space="preserve">matures in %n more block(s)</source> <target xml:space="preserve">matures in %n more blocks</target> </trans-unit> </group> - <trans-unit id="_msg770"> + <trans-unit id="_msg772"> <source xml:space="preserve">not accepted</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">172</context></context-group> </trans-unit> - <trans-unit id="_msg771"> + <trans-unit id="_msg773"> <source xml:space="preserve">Debit</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">232</context></context-group> <context-group purpose="location"><context context-type="linenumber">258</context></context-group> <context-group purpose="location"><context context-type="linenumber">321</context></context-group> </trans-unit> - <trans-unit id="_msg772"> + <trans-unit id="_msg774"> <source xml:space="preserve">Total debit</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">242</context></context-group> </trans-unit> - <trans-unit id="_msg773"> + <trans-unit id="_msg775"> <source xml:space="preserve">Total credit</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">243</context></context-group> </trans-unit> - <trans-unit id="_msg774"> + <trans-unit id="_msg776"> <source xml:space="preserve">Transaction fee</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">248</context></context-group> </trans-unit> - <trans-unit id="_msg775"> + <trans-unit id="_msg777"> <source xml:space="preserve">Net amount</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">270</context></context-group> </trans-unit> - <trans-unit id="_msg776"> + <trans-unit id="_msg778"> <source xml:space="preserve">Message</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">276</context></context-group> <context-group purpose="location"><context context-type="linenumber">288</context></context-group> </trans-unit> - <trans-unit id="_msg777"> + <trans-unit id="_msg779"> <source xml:space="preserve">Comment</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">278</context></context-group> </trans-unit> - <trans-unit id="_msg778"> + <trans-unit id="_msg780"> <source xml:space="preserve">Transaction ID</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">280</context></context-group> </trans-unit> - <trans-unit id="_msg779"> + <trans-unit id="_msg781"> <source xml:space="preserve">Transaction total size</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">281</context></context-group> </trans-unit> - <trans-unit id="_msg780"> + <trans-unit id="_msg782"> <source xml:space="preserve">Transaction virtual size</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">282</context></context-group> </trans-unit> - <trans-unit id="_msg781"> + <trans-unit id="_msg783"> <source xml:space="preserve">Output index</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">283</context></context-group> </trans-unit> - <trans-unit id="_msg782"> + <trans-unit id="_msg784"> <source xml:space="preserve"> (Certificate was not verified)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">299</context></context-group> </trans-unit> - <trans-unit id="_msg783"> + <trans-unit id="_msg785"> <source xml:space="preserve">Merchant</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">302</context></context-group> </trans-unit> - <trans-unit id="_msg784"> + <trans-unit id="_msg786"> <source xml:space="preserve">Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">310</context></context-group> </trans-unit> - <trans-unit id="_msg785"> + <trans-unit id="_msg787"> <source xml:space="preserve">Debug information</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">318</context></context-group> </trans-unit> - <trans-unit id="_msg786"> + <trans-unit id="_msg788"> <source xml:space="preserve">Transaction</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">326</context></context-group> </trans-unit> - <trans-unit id="_msg787"> + <trans-unit id="_msg789"> <source xml:space="preserve">Inputs</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">329</context></context-group> </trans-unit> - <trans-unit id="_msg788"> + <trans-unit id="_msg790"> <source xml:space="preserve">Amount</source> <target xml:space="preserve" state="needs-review-translation">Amount</target> <context-group purpose="location"><context context-type="linenumber">350</context></context-group> </trans-unit> - <trans-unit id="_msg789"> + <trans-unit id="_msg791"> <source xml:space="preserve">true</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">351</context></context-group> <context-group purpose="location"><context context-type="linenumber">352</context></context-group> </trans-unit> - <trans-unit id="_msg790"> + <trans-unit id="_msg792"> <source xml:space="preserve">false</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">351</context></context-group> @@ -4359,7 +4358,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos </body></file> <file original="../forms/transactiondescdialog.ui" datatype="x-trolltech-designer-ui" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="TransactionDescDialog"> - <trans-unit id="_msg791" approved="yes"> + <trans-unit id="_msg793" approved="yes"> <source xml:space="preserve">This pane shows a detailed description of the transaction</source> <target xml:space="preserve">This pane shows a detailed description of the transaction</target> <context-group purpose="location"><context context-type="linenumber">20</context></context-group> @@ -4368,7 +4367,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos </body></file> <file original="../transactiondescdialog.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="TransactionDescDialog"> - <trans-unit id="_msg792"> + <trans-unit id="_msg794"> <source xml:space="preserve">Details for %1</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">18</context></context-group> @@ -4377,138 +4376,138 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos </body></file> <file original="../transactiontablemodel.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="TransactionTableModel"> - <trans-unit id="_msg793"> + <trans-unit id="_msg795"> <source xml:space="preserve">Date</source> <target xml:space="preserve" state="needs-review-translation">Date</target> <context-group purpose="location"><context context-type="linenumber">252</context></context-group> </trans-unit> - <trans-unit id="_msg794"> + <trans-unit id="_msg796"> <source xml:space="preserve">Type</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">252</context></context-group> </trans-unit> - <trans-unit id="_msg795"> + <trans-unit id="_msg797"> <source xml:space="preserve">Label</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">252</context></context-group> </trans-unit> <group restype="x-gettext-plurals"> <context-group purpose="location"><context context-type="linenumber">314</context></context-group> - <trans-unit id="_msg796[0]" approved="yes"> + <trans-unit id="_msg798[0]" approved="yes"> <source xml:space="preserve">Open for %n more block(s)</source> <target xml:space="preserve">Open for %n more block</target> </trans-unit> - <trans-unit id="_msg796[1]" approved="yes"> + <trans-unit id="_msg798[1]" approved="yes"> <source xml:space="preserve">Open for %n more block(s)</source> <target xml:space="preserve">Open for %n more blocks</target> </trans-unit> </group> - <trans-unit id="_msg797"> + <trans-unit id="_msg799"> <source xml:space="preserve">Open until %1</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">317</context></context-group> </trans-unit> - <trans-unit id="_msg798"> + <trans-unit id="_msg800"> <source xml:space="preserve">Unconfirmed</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">320</context></context-group> </trans-unit> - <trans-unit id="_msg799"> + <trans-unit id="_msg801"> <source xml:space="preserve">Abandoned</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">323</context></context-group> </trans-unit> - <trans-unit id="_msg800"> + <trans-unit id="_msg802"> <source xml:space="preserve">Confirming (%1 of %2 recommended confirmations)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">326</context></context-group> </trans-unit> - <trans-unit id="_msg801"> + <trans-unit id="_msg803"> <source xml:space="preserve">Confirmed (%1 confirmations)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">329</context></context-group> </trans-unit> - <trans-unit id="_msg802"> + <trans-unit id="_msg804"> <source xml:space="preserve">Conflicted</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">332</context></context-group> </trans-unit> - <trans-unit id="_msg803"> + <trans-unit id="_msg805"> <source xml:space="preserve">Immature (%1 confirmations, will be available after %2)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">335</context></context-group> </trans-unit> - <trans-unit id="_msg804"> + <trans-unit id="_msg806"> <source xml:space="preserve">Generated but not accepted</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">338</context></context-group> </trans-unit> - <trans-unit id="_msg805"> + <trans-unit id="_msg807"> <source xml:space="preserve">Received with</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">377</context></context-group> </trans-unit> - <trans-unit id="_msg806"> + <trans-unit id="_msg808"> <source xml:space="preserve">Received from</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">379</context></context-group> </trans-unit> - <trans-unit id="_msg807"> + <trans-unit id="_msg809"> <source xml:space="preserve">Sent to</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">382</context></context-group> </trans-unit> - <trans-unit id="_msg808"> + <trans-unit id="_msg810"> <source xml:space="preserve">Payment to yourself</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">384</context></context-group> </trans-unit> - <trans-unit id="_msg809"> + <trans-unit id="_msg811"> <source xml:space="preserve">Mined</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">386</context></context-group> </trans-unit> - <trans-unit id="_msg810"> + <trans-unit id="_msg812"> <source xml:space="preserve">watch-only</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">414</context></context-group> </trans-unit> - <trans-unit id="_msg811"> + <trans-unit id="_msg813"> <source xml:space="preserve">(n/a)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">430</context></context-group> </trans-unit> - <trans-unit id="_msg812"> + <trans-unit id="_msg814"> <source xml:space="preserve">(no label)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">640</context></context-group> </trans-unit> - <trans-unit id="_msg813"> + <trans-unit id="_msg815"> <source xml:space="preserve">Transaction status. Hover over this field to show number of confirmations.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">679</context></context-group> </trans-unit> - <trans-unit id="_msg814"> + <trans-unit id="_msg816"> <source xml:space="preserve">Date and time that the transaction was received.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">681</context></context-group> </trans-unit> - <trans-unit id="_msg815"> + <trans-unit id="_msg817"> <source xml:space="preserve">Type of transaction.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">683</context></context-group> </trans-unit> - <trans-unit id="_msg816"> + <trans-unit id="_msg818"> <source xml:space="preserve">Whether or not a watch-only address is involved in this transaction.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">685</context></context-group> </trans-unit> - <trans-unit id="_msg817"> + <trans-unit id="_msg819"> <source xml:space="preserve">User-defined intent/purpose of the transaction.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">687</context></context-group> </trans-unit> - <trans-unit id="_msg818"> + <trans-unit id="_msg820"> <source xml:space="preserve">Amount removed from or added to balance.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">689</context></context-group> @@ -4517,215 +4516,215 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos </body></file> <file original="../transactionview.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="TransactionView"> - <trans-unit id="_msg819"> + <trans-unit id="_msg821"> <source xml:space="preserve">All</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">70</context></context-group> <context-group purpose="location"><context context-type="linenumber">86</context></context-group> </trans-unit> - <trans-unit id="_msg820"> + <trans-unit id="_msg822"> <source xml:space="preserve">Today</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">71</context></context-group> </trans-unit> - <trans-unit id="_msg821"> + <trans-unit id="_msg823"> <source xml:space="preserve">This week</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">72</context></context-group> </trans-unit> - <trans-unit id="_msg822"> + <trans-unit id="_msg824"> <source xml:space="preserve">This month</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">73</context></context-group> </trans-unit> - <trans-unit id="_msg823"> + <trans-unit id="_msg825"> <source xml:space="preserve">Last month</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">74</context></context-group> </trans-unit> - <trans-unit id="_msg824"> + <trans-unit id="_msg826"> <source xml:space="preserve">This year</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">75</context></context-group> </trans-unit> - <trans-unit id="_msg825"> - <source xml:space="preserve">Range...</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">76</context></context-group> - </trans-unit> - <trans-unit id="_msg826"> + <trans-unit id="_msg827"> <source xml:space="preserve">Received with</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">87</context></context-group> </trans-unit> - <trans-unit id="_msg827"> + <trans-unit id="_msg828"> <source xml:space="preserve">Sent to</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">89</context></context-group> </trans-unit> - <trans-unit id="_msg828"> + <trans-unit id="_msg829"> <source xml:space="preserve">To yourself</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">91</context></context-group> </trans-unit> - <trans-unit id="_msg829"> + <trans-unit id="_msg830"> <source xml:space="preserve">Mined</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">92</context></context-group> </trans-unit> - <trans-unit id="_msg830"> + <trans-unit id="_msg831"> <source xml:space="preserve">Other</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">93</context></context-group> </trans-unit> - <trans-unit id="_msg831"> + <trans-unit id="_msg832"> <source xml:space="preserve">Enter address, transaction id, or label to search</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">98</context></context-group> </trans-unit> - <trans-unit id="_msg832"> + <trans-unit id="_msg833"> <source xml:space="preserve">Min amount</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">102</context></context-group> </trans-unit> - <trans-unit id="_msg833"> + <trans-unit id="_msg834"> <source xml:space="preserve">Abandon transaction</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">165</context></context-group> + <context-group purpose="location"><context context-type="linenumber">177</context></context-group> </trans-unit> - <trans-unit id="_msg834"> + <trans-unit id="_msg835"> <source xml:space="preserve">Increase transaction fee</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">166</context></context-group> + <context-group purpose="location"><context context-type="linenumber">174</context></context-group> </trans-unit> - <trans-unit id="_msg835"> + <trans-unit id="_msg836"> <source xml:space="preserve">Copy address</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">168</context></context-group> + <context-group purpose="location"><context context-type="linenumber">166</context></context-group> </trans-unit> - <trans-unit id="_msg836"> + <trans-unit id="_msg837"> <source xml:space="preserve">Copy label</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">169</context></context-group> + <context-group purpose="location"><context context-type="linenumber">167</context></context-group> </trans-unit> - <trans-unit id="_msg837"> + <trans-unit id="_msg838"> <source xml:space="preserve">Copy amount</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">170</context></context-group> + <context-group purpose="location"><context context-type="linenumber">168</context></context-group> </trans-unit> - <trans-unit id="_msg838"> + <trans-unit id="_msg839"> <source xml:space="preserve">Copy transaction ID</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">171</context></context-group> + <context-group purpose="location"><context context-type="linenumber">169</context></context-group> </trans-unit> - <trans-unit id="_msg839"> + <trans-unit id="_msg840"> <source xml:space="preserve">Copy raw transaction</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">172</context></context-group> + <context-group purpose="location"><context context-type="linenumber">170</context></context-group> </trans-unit> - <trans-unit id="_msg840"> + <trans-unit id="_msg841"> <source xml:space="preserve">Copy full transaction details</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">173</context></context-group> + <context-group purpose="location"><context context-type="linenumber">171</context></context-group> </trans-unit> - <trans-unit id="_msg841"> + <trans-unit id="_msg842"> <source xml:space="preserve">Edit address label</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">174</context></context-group> + <context-group purpose="location"><context context-type="linenumber">178</context></context-group> </trans-unit> - <trans-unit id="_msg842"> + <trans-unit id="_msg843"> <source xml:space="preserve">Comma separated file</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">360</context></context-group> + <context-group purpose="location"><context context-type="linenumber">339</context></context-group> <context-group><context context-type="x-gettext-msgctxt">Name of CSV file format</context></context-group> </trans-unit> - <trans-unit id="_msg843"> + <trans-unit id="_msg844"> <source xml:space="preserve">Show transaction details</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">175</context></context-group> + <context-group purpose="location"><context context-type="linenumber">172</context></context-group> </trans-unit> - <trans-unit id="_msg844"> + <trans-unit id="_msg845"> + <source xml:space="preserve">Range…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">76</context></context-group> + </trans-unit> + <trans-unit id="_msg846"> <source xml:space="preserve">Export Transaction History</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">359</context></context-group> + <context-group purpose="location"><context context-type="linenumber">338</context></context-group> </trans-unit> - <trans-unit id="_msg845"> + <trans-unit id="_msg847"> <source xml:space="preserve">Confirmed</source> <target xml:space="preserve" state="needs-review-translation">Confirmed</target> - <context-group purpose="location"><context context-type="linenumber">369</context></context-group> + <context-group purpose="location"><context context-type="linenumber">348</context></context-group> </trans-unit> - <trans-unit id="_msg846"> + <trans-unit id="_msg848"> <source xml:space="preserve">Watch-only</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">371</context></context-group> + <context-group purpose="location"><context context-type="linenumber">350</context></context-group> </trans-unit> - <trans-unit id="_msg847"> + <trans-unit id="_msg849"> <source xml:space="preserve">Date</source> <target xml:space="preserve" state="needs-review-translation">Date</target> - <context-group purpose="location"><context context-type="linenumber">372</context></context-group> + <context-group purpose="location"><context context-type="linenumber">351</context></context-group> </trans-unit> - <trans-unit id="_msg848"> + <trans-unit id="_msg850"> <source xml:space="preserve">Type</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">373</context></context-group> + <context-group purpose="location"><context context-type="linenumber">352</context></context-group> </trans-unit> - <trans-unit id="_msg849"> + <trans-unit id="_msg851"> <source xml:space="preserve">Label</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">374</context></context-group> + <context-group purpose="location"><context context-type="linenumber">353</context></context-group> </trans-unit> - <trans-unit id="_msg850"> + <trans-unit id="_msg852"> <source xml:space="preserve">Address</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">375</context></context-group> + <context-group purpose="location"><context context-type="linenumber">354</context></context-group> </trans-unit> - <trans-unit id="_msg851"> + <trans-unit id="_msg853"> <source xml:space="preserve">ID</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">377</context></context-group> + <context-group purpose="location"><context context-type="linenumber">356</context></context-group> </trans-unit> - <trans-unit id="_msg852"> + <trans-unit id="_msg854"> <source xml:space="preserve">Exporting Failed</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">380</context></context-group> + <context-group purpose="location"><context context-type="linenumber">359</context></context-group> </trans-unit> - <trans-unit id="_msg853"> + <trans-unit id="_msg855"> <source xml:space="preserve">There was an error trying to save the transaction history to %1.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">380</context></context-group> + <context-group purpose="location"><context context-type="linenumber">359</context></context-group> </trans-unit> - <trans-unit id="_msg854"> + <trans-unit id="_msg856"> <source xml:space="preserve">Exporting Successful</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">384</context></context-group> + <context-group purpose="location"><context context-type="linenumber">363</context></context-group> </trans-unit> - <trans-unit id="_msg855"> + <trans-unit id="_msg857"> <source xml:space="preserve">The transaction history was successfully saved to %1.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">384</context></context-group> + <context-group purpose="location"><context context-type="linenumber">363</context></context-group> </trans-unit> - <trans-unit id="_msg856"> + <trans-unit id="_msg858"> <source xml:space="preserve">Range:</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">556</context></context-group> + <context-group purpose="location"><context context-type="linenumber">535</context></context-group> </trans-unit> - <trans-unit id="_msg857"> + <trans-unit id="_msg859"> <source xml:space="preserve">to</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">564</context></context-group> + <context-group purpose="location"><context context-type="linenumber">543</context></context-group> </trans-unit> </group> </body></file> <file original="../walletframe.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="WalletFrame"> - <trans-unit id="_msg858"> + <trans-unit id="_msg860"> <source xml:space="preserve">No wallet has been loaded. Go to File > Open Wallet to load a wallet. - OR -</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">39</context></context-group> </trans-unit> - <trans-unit id="_msg859"> + <trans-unit id="_msg861"> <source xml:space="preserve">Create a new wallet</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">44</context></context-group> @@ -4734,12 +4733,12 @@ Go to File > Open Wallet to load a wallet. </body></file> <file original="../walletmodel.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="WalletModel"> - <trans-unit id="_msg860"> + <trans-unit id="_msg862"> <source xml:space="preserve">Send Coins</source> <target xml:space="preserve" state="needs-review-translation">Send Coins</target> <context-group purpose="location"><context context-type="linenumber">218</context></context-group> </trans-unit> - <trans-unit id="_msg861"> + <trans-unit id="_msg863"> <source xml:space="preserve">Fee bump error</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">497</context></context-group> @@ -4747,67 +4746,67 @@ Go to File > Open Wallet to load a wallet. <context-group purpose="location"><context context-type="linenumber">562</context></context-group> <context-group purpose="location"><context context-type="linenumber">567</context></context-group> </trans-unit> - <trans-unit id="_msg862"> + <trans-unit id="_msg864"> <source xml:space="preserve">Increasing transaction fee failed</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">497</context></context-group> </trans-unit> - <trans-unit id="_msg863"> + <trans-unit id="_msg865"> <source xml:space="preserve">Do you want to increase the fee?</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">505</context></context-group> </trans-unit> - <trans-unit id="_msg864"> + <trans-unit id="_msg866"> <source xml:space="preserve">Do you want to draft a transaction with fee increase?</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">505</context></context-group> </trans-unit> - <trans-unit id="_msg865"> + <trans-unit id="_msg867"> <source xml:space="preserve">Current fee:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">509</context></context-group> </trans-unit> - <trans-unit id="_msg866"> + <trans-unit id="_msg868"> <source xml:space="preserve">Increase:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">513</context></context-group> </trans-unit> - <trans-unit id="_msg867"> + <trans-unit id="_msg869"> <source xml:space="preserve">New fee:</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">517</context></context-group> </trans-unit> - <trans-unit id="_msg868"> + <trans-unit id="_msg870"> <source xml:space="preserve">Warning: This may pay the additional fee by reducing change outputs or adding inputs, when necessary. It may add a new change output if one does not already exist. These changes may potentially leak privacy.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">525</context></context-group> </trans-unit> - <trans-unit id="_msg869"> + <trans-unit id="_msg871"> <source xml:space="preserve">Confirm fee bump</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">528</context></context-group> </trans-unit> - <trans-unit id="_msg870"> + <trans-unit id="_msg872"> <source xml:space="preserve">Can't draft transaction.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">549</context></context-group> </trans-unit> - <trans-unit id="_msg871"> + <trans-unit id="_msg873"> <source xml:space="preserve">PSBT copied</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">556</context></context-group> </trans-unit> - <trans-unit id="_msg872"> + <trans-unit id="_msg874"> <source xml:space="preserve">Can't sign transaction.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">562</context></context-group> </trans-unit> - <trans-unit id="_msg873"> + <trans-unit id="_msg875"> <source xml:space="preserve">Could not commit transaction</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">567</context></context-group> </trans-unit> - <trans-unit id="_msg874"> + <trans-unit id="_msg876"> <source xml:space="preserve">default wallet</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">587</context></context-group> @@ -4816,80 +4815,80 @@ Go to File > Open Wallet to load a wallet. </body></file> <file original="../walletview.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="WalletView"> - <trans-unit id="_msg875"> + <trans-unit id="_msg877"> <source xml:space="preserve">&Export</source> <target xml:space="preserve" state="needs-review-translation">&Export</target> <context-group purpose="location"><context context-type="linenumber">51</context></context-group> </trans-unit> - <trans-unit id="_msg876"> + <trans-unit id="_msg878"> <source xml:space="preserve">Export the data in the current tab to a file</source> <target xml:space="preserve" state="needs-review-translation">Export the data in the current tab to a file</target> <context-group purpose="location"><context context-type="linenumber">52</context></context-group> </trans-unit> - <trans-unit id="_msg877"> + <trans-unit id="_msg879"> <source xml:space="preserve">Error</source> <target xml:space="preserve" state="needs-review-translation">Error</target> <context-group purpose="location"><context context-type="linenumber">217</context></context-group> <context-group purpose="location"><context context-type="linenumber">226</context></context-group> <context-group purpose="location"><context context-type="linenumber">236</context></context-group> </trans-unit> - <trans-unit id="_msg878"> + <trans-unit id="_msg880"> <source xml:space="preserve">Unable to decode PSBT from clipboard (invalid base64)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">217</context></context-group> </trans-unit> - <trans-unit id="_msg879"> + <trans-unit id="_msg881"> <source xml:space="preserve">Load Transaction Data</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">222</context></context-group> </trans-unit> - <trans-unit id="_msg880"> + <trans-unit id="_msg882"> <source xml:space="preserve">Partially Signed Transaction (*.psbt)</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">223</context></context-group> </trans-unit> - <trans-unit id="_msg881"> + <trans-unit id="_msg883"> <source xml:space="preserve">PSBT file must be smaller than 100 MiB</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">226</context></context-group> </trans-unit> - <trans-unit id="_msg882"> + <trans-unit id="_msg884"> <source xml:space="preserve">Unable to decode PSBT</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">236</context></context-group> </trans-unit> - <trans-unit id="_msg883"> + <trans-unit id="_msg885"> <source xml:space="preserve">Backup Wallet</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">275</context></context-group> </trans-unit> - <trans-unit id="_msg884"> + <trans-unit id="_msg886"> <source xml:space="preserve">Wallet Data</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">276</context></context-group> <context-group><context context-type="x-gettext-msgctxt">Name of wallet data file format</context></context-group> </trans-unit> - <trans-unit id="_msg885"> + <trans-unit id="_msg887"> <source xml:space="preserve">Backup Failed</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">282</context></context-group> </trans-unit> - <trans-unit id="_msg886"> + <trans-unit id="_msg888"> <source xml:space="preserve">There was an error trying to save the wallet data to %1.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">282</context></context-group> </trans-unit> - <trans-unit id="_msg887"> + <trans-unit id="_msg889"> <source xml:space="preserve">Backup Successful</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">286</context></context-group> </trans-unit> - <trans-unit id="_msg888"> + <trans-unit id="_msg890"> <source xml:space="preserve">The wallet data was successfully saved to %1.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">286</context></context-group> </trans-unit> - <trans-unit id="_msg889"> + <trans-unit id="_msg891"> <source xml:space="preserve">Cancel</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">330</context></context-group> @@ -4898,35 +4897,25 @@ Go to File > Open Wallet to load a wallet. </body></file> <file original="../bitcoinstrings.cpp" datatype="cpp" source-language="en" target-language="en"><body> <group restype="x-trolltech-linguist-context" resname="bitcoin-core"> - <trans-unit id="_msg890"> - <source xml:space="preserve">Distributed under the MIT software license, see the accompanying file %s or %s</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">31</context></context-group> - </trans-unit> - <trans-unit id="_msg891"> - <source xml:space="preserve">Prune configured below the minimum of %d MiB. Please use a higher number.</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">72</context></context-group> - </trans-unit> <trans-unit id="_msg892"> - <source xml:space="preserve">Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node)</source> + <source xml:space="preserve">The %s developers</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">74</context></context-group> + <context-group purpose="location"><context context-type="linenumber">12</context></context-group> </trans-unit> <trans-unit id="_msg893"> - <source xml:space="preserve">Pruning blockstore...</source> + <source xml:space="preserve">%s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">198</context></context-group> + <context-group purpose="location"><context context-type="linenumber">13</context></context-group> </trans-unit> <trans-unit id="_msg894"> - <source xml:space="preserve">Unable to start HTTP server. See debug log for details.</source> + <source xml:space="preserve">-maxtxfee is set very high! Fees this large could be paid on a single transaction.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">235</context></context-group> + <context-group purpose="location"><context context-type="linenumber">16</context></context-group> </trans-unit> <trans-unit id="_msg895"> - <source xml:space="preserve">The %s developers</source> + <source xml:space="preserve">Cannot downgrade wallet from version %i to version %i. Wallet version unchanged.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">12</context></context-group> + <context-group purpose="location"><context context-type="linenumber">19</context></context-group> </trans-unit> <trans-unit id="_msg896"> <source xml:space="preserve">Cannot obtain a lock on data directory %s. %s is probably already running.</source> @@ -4939,749 +4928,759 @@ Go to File > Open Wallet to load a wallet. <context-group purpose="location"><context context-type="linenumber">24</context></context-group> </trans-unit> <trans-unit id="_msg898"> - <source xml:space="preserve">Error reading %s! All keys read correctly, but transaction data or address book entries might be missing or incorrect.</source> + <source xml:space="preserve">Cannot upgrade a non HD split wallet from version %i to version %i without upgrading to support pre-split keypool. Please use version %i or no version specified.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">34</context></context-group> + <context-group purpose="location"><context context-type="linenumber">27</context></context-group> </trans-unit> <trans-unit id="_msg899"> - <source xml:space="preserve">More than one onion bind address is provided. Using %s for the automatically created Tor onion service.</source> + <source xml:space="preserve">Distributed under the MIT software license, see the accompanying file %s or %s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">55</context></context-group> + <context-group purpose="location"><context context-type="linenumber">31</context></context-group> </trans-unit> <trans-unit id="_msg900"> - <source xml:space="preserve">Please check that your computer's date and time are correct! If your clock is wrong, %s will not work properly.</source> + <source xml:space="preserve">Error reading %s! All keys read correctly, but transaction data or address book entries might be missing or incorrect.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">66</context></context-group> + <context-group purpose="location"><context context-type="linenumber">34</context></context-group> </trans-unit> <trans-unit id="_msg901"> - <source xml:space="preserve">Please contribute if you find %s useful. Visit %s for further information about the software.</source> + <source xml:space="preserve">Error: Dumpfile format record is incorrect. Got "%s", expected "format".</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">69</context></context-group> + <context-group purpose="location"><context context-type="linenumber">37</context></context-group> </trans-unit> <trans-unit id="_msg902"> - <source xml:space="preserve">SQLiteDatabase: Failed to prepare the statement to fetch sqlite wallet schema version: %s</source> + <source xml:space="preserve">Error: Dumpfile identifier record is incorrect. Got "%s", expected "%s".</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">77</context></context-group> + <context-group purpose="location"><context context-type="linenumber">39</context></context-group> </trans-unit> <trans-unit id="_msg903"> - <source xml:space="preserve">SQLiteDatabase: Failed to prepare the statement to fetch the application id: %s</source> + <source xml:space="preserve">Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">80</context></context-group> + <context-group purpose="location"><context context-type="linenumber">41</context></context-group> </trans-unit> <trans-unit id="_msg904"> - <source xml:space="preserve">SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported</source> + <source xml:space="preserve">Error: Listening for incoming connections failed (listen returned error %s)</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">83</context></context-group> + <context-group purpose="location"><context context-type="linenumber">44</context></context-group> </trans-unit> <trans-unit id="_msg905"> - <source xml:space="preserve">The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct</source> + <source xml:space="preserve">Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable -fallbackfee.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">86</context></context-group> + <context-group purpose="location"><context context-type="linenumber">46</context></context-group> </trans-unit> <trans-unit id="_msg906"> - <source xml:space="preserve">This is a pre-release test build - use at your own risk - do not use for mining or merchant applications</source> + <source xml:space="preserve">File %s already exists. If you are sure this is what you want, move it out of the way first.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">97</context></context-group> + <context-group purpose="location"><context context-type="linenumber">49</context></context-group> </trans-unit> <trans-unit id="_msg907"> - <source xml:space="preserve">This is the transaction fee you may discard if change is smaller than dust at this level</source> + <source xml:space="preserve">Invalid amount for -maxtxfee=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions)</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">103</context></context-group> + <context-group purpose="location"><context context-type="linenumber">52</context></context-group> </trans-unit> <trans-unit id="_msg908"> - <source xml:space="preserve">Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate.</source> + <source xml:space="preserve">More than one onion bind address is provided. Using %s for the automatically created Tor onion service.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">114</context></context-group> + <context-group purpose="location"><context context-type="linenumber">55</context></context-group> </trans-unit> <trans-unit id="_msg909"> - <source xml:space="preserve">Unable to rewind the database to a pre-fork state. You will need to redownload the blockchain</source> + <source xml:space="preserve">No dump file provided. To use createfromdump, -dumpfile=<filename> must be provided.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">117</context></context-group> + <context-group purpose="location"><context context-type="linenumber">58</context></context-group> </trans-unit> <trans-unit id="_msg910"> - <source xml:space="preserve">Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade.</source> + <source xml:space="preserve">No dump file provided. To use dump, -dumpfile=<filename> must be provided.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">128</context></context-group> + <context-group purpose="location"><context context-type="linenumber">61</context></context-group> </trans-unit> <trans-unit id="_msg911"> - <source xml:space="preserve">-maxmempool must be at least %d MB</source> + <source xml:space="preserve">No wallet file format provided. To use createfromdump, -format=<format> must be provided.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">135</context></context-group> + <context-group purpose="location"><context context-type="linenumber">63</context></context-group> </trans-unit> <trans-unit id="_msg912"> - <source xml:space="preserve">Cannot resolve -%s address: '%s'</source> + <source xml:space="preserve">Please check that your computer's date and time are correct! If your clock is wrong, %s will not work properly.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">137</context></context-group> + <context-group purpose="location"><context context-type="linenumber">66</context></context-group> </trans-unit> <trans-unit id="_msg913"> - <source xml:space="preserve">Change index out of range</source> + <source xml:space="preserve">Please contribute if you find %s useful. Visit %s for further information about the software.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">140</context></context-group> + <context-group purpose="location"><context context-type="linenumber">69</context></context-group> </trans-unit> <trans-unit id="_msg914"> - <source xml:space="preserve">Config setting for %s only applied on %s network when in [%s] section.</source> + <source xml:space="preserve">Prune configured below the minimum of %d MiB. Please use a higher number.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">141</context></context-group> + <context-group purpose="location"><context context-type="linenumber">72</context></context-group> </trans-unit> <trans-unit id="_msg915"> - <source xml:space="preserve">Copyright (C) %i-%i</source> + <source xml:space="preserve">Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node)</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">142</context></context-group> + <context-group purpose="location"><context context-type="linenumber">74</context></context-group> </trans-unit> - <trans-unit id="_msg916" approved="yes"> - <source xml:space="preserve">Corrupted block database detected</source> - <target xml:space="preserve">Corrupted block database detected</target> - <context-group purpose="location"><context context-type="linenumber">143</context></context-group> + <trans-unit id="_msg916"> + <source xml:space="preserve">SQLiteDatabase: Failed to prepare the statement to fetch sqlite wallet schema version: %s</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">77</context></context-group> </trans-unit> <trans-unit id="_msg917"> - <source xml:space="preserve">Could not find asmap file %s</source> + <source xml:space="preserve">SQLiteDatabase: Failed to prepare the statement to fetch the application id: %s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">144</context></context-group> + <context-group purpose="location"><context context-type="linenumber">80</context></context-group> </trans-unit> <trans-unit id="_msg918"> - <source xml:space="preserve">Could not parse asmap file %s</source> + <source xml:space="preserve">SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">145</context></context-group> + <context-group purpose="location"><context context-type="linenumber">83</context></context-group> </trans-unit> - <trans-unit id="_msg919" approved="yes"> - <source xml:space="preserve">Do you want to rebuild the block database now?</source> - <target xml:space="preserve">Do you want to rebuild the block database now?</target> - <context-group purpose="location"><context context-type="linenumber">147</context></context-group> + <trans-unit id="_msg919"> + <source xml:space="preserve">The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">86</context></context-group> </trans-unit> <trans-unit id="_msg920"> - <source xml:space="preserve">Dump file %s does not exist.</source> + <source xml:space="preserve">The transaction amount is too small to send after the fee has been deducted</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">149</context></context-group> + <context-group purpose="location"><context context-type="linenumber">91</context></context-group> </trans-unit> <trans-unit id="_msg921"> - <source xml:space="preserve">Error creating %s</source> + <source xml:space="preserve">This error could occur if this wallet was not shutdown cleanly and was last loaded using a build with a newer version of Berkeley DB. If so, please use the software that last loaded this wallet</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">150</context></context-group> + <context-group purpose="location"><context context-type="linenumber">93</context></context-group> </trans-unit> - <trans-unit id="_msg922" approved="yes"> - <source xml:space="preserve">Error initializing block database</source> - <target xml:space="preserve">Error initializing block database</target> - <context-group purpose="location"><context context-type="linenumber">151</context></context-group> + <trans-unit id="_msg922"> + <source xml:space="preserve">This is a pre-release test build - use at your own risk - do not use for mining or merchant applications</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">97</context></context-group> </trans-unit> - <trans-unit id="_msg923" approved="yes"> - <source xml:space="preserve">Error initializing wallet database environment %s!</source> - <target xml:space="preserve">Error initializing wallet database environment %s!</target> - <context-group purpose="location"><context context-type="linenumber">152</context></context-group> + <trans-unit id="_msg923"> + <source xml:space="preserve">This is the maximum transaction fee you pay (in addition to the normal fee) to prioritize partial spend avoidance over regular coin selection.</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">100</context></context-group> </trans-unit> <trans-unit id="_msg924"> - <source xml:space="preserve">Error loading %s</source> + <source xml:space="preserve">This is the transaction fee you may discard if change is smaller than dust at this level</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">153</context></context-group> + <context-group purpose="location"><context context-type="linenumber">103</context></context-group> </trans-unit> <trans-unit id="_msg925"> - <source xml:space="preserve">Error loading %s: Private keys can only be disabled during creation</source> + <source xml:space="preserve">This is the transaction fee you may pay when fee estimates are not available.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">154</context></context-group> + <context-group purpose="location"><context context-type="linenumber">106</context></context-group> </trans-unit> <trans-unit id="_msg926"> - <source xml:space="preserve">Error loading %s: Wallet corrupted</source> + <source xml:space="preserve">Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">155</context></context-group> + <context-group purpose="location"><context context-type="linenumber">108</context></context-group> </trans-unit> <trans-unit id="_msg927"> - <source xml:space="preserve">Error loading %s: Wallet requires newer version of %s</source> + <source xml:space="preserve">Transaction needs a change address, but we can't generate it. Please call keypoolrefill first.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">156</context></context-group> + <context-group purpose="location"><context context-type="linenumber">111</context></context-group> </trans-unit> - <trans-unit id="_msg928" approved="yes"> - <source xml:space="preserve">Error loading block database</source> - <target xml:space="preserve">Error loading block database</target> - <context-group purpose="location"><context context-type="linenumber">157</context></context-group> + <trans-unit id="_msg928"> + <source xml:space="preserve">Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate.</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">114</context></context-group> </trans-unit> - <trans-unit id="_msg929" approved="yes"> - <source xml:space="preserve">Error opening block database</source> - <target xml:space="preserve">Error opening block database</target> - <context-group purpose="location"><context context-type="linenumber">158</context></context-group> + <trans-unit id="_msg929"> + <source xml:space="preserve">Unknown wallet file format "%s" provided. Please provide one of "bdb" or "sqlite".</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">117</context></context-group> </trans-unit> <trans-unit id="_msg930"> - <source xml:space="preserve">Error reading next record from wallet database</source> + <source xml:space="preserve">Warning: Dumpfile wallet format "%s" does not match command line specified format "%s".</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">160</context></context-group> + <context-group purpose="location"><context context-type="linenumber">120</context></context-group> </trans-unit> <trans-unit id="_msg931"> - <source xml:space="preserve">Error: Couldn't create cursor into database</source> + <source xml:space="preserve">Warning: Private keys detected in wallet {%s} with disabled private keys</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">162</context></context-group> + <context-group purpose="location"><context context-type="linenumber">123</context></context-group> </trans-unit> <trans-unit id="_msg932"> - <source xml:space="preserve">Error: Dumpfile checksum does not match. Computed %s, expected %s</source> + <source xml:space="preserve">Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">164</context></context-group> + <context-group purpose="location"><context context-type="linenumber">125</context></context-group> </trans-unit> <trans-unit id="_msg933"> - <source xml:space="preserve">Error: Got key that was not hex: %s</source> + <source xml:space="preserve">Witness data for blocks after height %d requires validation. Please restart with -reindex.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">165</context></context-group> + <context-group purpose="location"><context context-type="linenumber">128</context></context-group> </trans-unit> <trans-unit id="_msg934"> - <source xml:space="preserve">Error: Got value that was not hex: %s</source> + <source xml:space="preserve">You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">166</context></context-group> + <context-group purpose="location"><context context-type="linenumber">131</context></context-group> </trans-unit> <trans-unit id="_msg935"> - <source xml:space="preserve">Error: Missing checksum</source> + <source xml:space="preserve">%s is set very high!</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">168</context></context-group> + <context-group purpose="location"><context context-type="linenumber">134</context></context-group> </trans-unit> <trans-unit id="_msg936"> - <source xml:space="preserve">Error: Unable to parse version %u as a uint32_t</source> + <source xml:space="preserve">-maxmempool must be at least %d MB</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">169</context></context-group> + <context-group purpose="location"><context context-type="linenumber">135</context></context-group> </trans-unit> <trans-unit id="_msg937"> - <source xml:space="preserve">Error: Unable to write record to new wallet</source> + <source xml:space="preserve">A fatal internal error occurred, see debug.log for details</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">170</context></context-group> + <context-group purpose="location"><context context-type="linenumber">136</context></context-group> </trans-unit> - <trans-unit id="_msg938" approved="yes"> - <source xml:space="preserve">Failed to listen on any port. Use -listen=0 if you want this.</source> - <target xml:space="preserve">Failed to listen on any port. Use -listen=0 if you want this.</target> - <context-group purpose="location"><context context-type="linenumber">171</context></context-group> + <trans-unit id="_msg938"> + <source xml:space="preserve">Cannot resolve -%s address: '%s'</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">137</context></context-group> </trans-unit> <trans-unit id="_msg939"> - <source xml:space="preserve">Failed to rescan the wallet during initialization</source> + <source xml:space="preserve">Cannot set -peerblockfilters without -blockfilterindex.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">172</context></context-group> + <context-group purpose="location"><context context-type="linenumber">138</context></context-group> </trans-unit> <trans-unit id="_msg940"> - <source xml:space="preserve">Failed to verify database</source> + <source xml:space="preserve">Cannot write to data directory '%s'; check permissions.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">173</context></context-group> + <context-group purpose="location"><context context-type="linenumber">139</context></context-group> </trans-unit> <trans-unit id="_msg941"> - <source xml:space="preserve">Ignoring duplicate -wallet %s.</source> + <source xml:space="preserve">Change index out of range</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">175</context></context-group> + <context-group purpose="location"><context context-type="linenumber">140</context></context-group> </trans-unit> <trans-unit id="_msg942"> - <source xml:space="preserve">Importing...</source> + <source xml:space="preserve">Config setting for %s only applied on %s network when in [%s] section.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">176</context></context-group> + <context-group purpose="location"><context context-type="linenumber">141</context></context-group> </trans-unit> - <trans-unit id="_msg943" approved="yes"> - <source xml:space="preserve">Incorrect or no genesis block found. Wrong datadir for network?</source> - <target xml:space="preserve">Incorrect or no genesis block found. Wrong datadir for network?</target> - <context-group purpose="location"><context context-type="linenumber">177</context></context-group> + <trans-unit id="_msg943"> + <source xml:space="preserve">Copyright (C) %i-%i</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">142</context></context-group> </trans-unit> <trans-unit id="_msg944"> - <source xml:space="preserve">Initialization sanity check failed. %s is shutting down.</source> + <source xml:space="preserve">Corrupted block database detected</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">178</context></context-group> + <context-group purpose="location"><context context-type="linenumber">143</context></context-group> </trans-unit> <trans-unit id="_msg945"> - <source xml:space="preserve">Invalid -i2psam address or hostname: '%s'</source> + <source xml:space="preserve">Could not find asmap file %s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">180</context></context-group> + <context-group purpose="location"><context context-type="linenumber">144</context></context-group> </trans-unit> <trans-unit id="_msg946"> - <source xml:space="preserve">Invalid P2P permission: '%s'</source> + <source xml:space="preserve">Could not parse asmap file %s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">183</context></context-group> + <context-group purpose="location"><context context-type="linenumber">145</context></context-group> </trans-unit> <trans-unit id="_msg947"> - <source xml:space="preserve">Invalid amount for -%s=<amount>: '%s'</source> + <source xml:space="preserve">Disk space is too low!</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">184</context></context-group> + <context-group purpose="location"><context context-type="linenumber">146</context></context-group> </trans-unit> <trans-unit id="_msg948"> - <source xml:space="preserve">Invalid amount for -discardfee=<amount>: '%s'</source> + <source xml:space="preserve">Do you want to rebuild the block database now?</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">185</context></context-group> + <context-group purpose="location"><context context-type="linenumber">147</context></context-group> </trans-unit> <trans-unit id="_msg949"> - <source xml:space="preserve">Invalid amount for -fallbackfee=<amount>: '%s'</source> + <source xml:space="preserve">Done loading</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">186</context></context-group> + <context-group purpose="location"><context context-type="linenumber">148</context></context-group> </trans-unit> <trans-unit id="_msg950"> - <source xml:space="preserve">SQLiteDatabase: Failed to execute statement to verify database: %s</source> + <source xml:space="preserve">Dump file %s does not exist.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">203</context></context-group> + <context-group purpose="location"><context context-type="linenumber">149</context></context-group> </trans-unit> <trans-unit id="_msg951"> - <source xml:space="preserve">SQLiteDatabase: Failed to fetch sqlite wallet schema version: %s</source> + <source xml:space="preserve">Error creating %s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">204</context></context-group> + <context-group purpose="location"><context context-type="linenumber">150</context></context-group> </trans-unit> <trans-unit id="_msg952"> - <source xml:space="preserve">SQLiteDatabase: Failed to fetch the application id: %s</source> + <source xml:space="preserve">Error initializing block database</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">205</context></context-group> + <context-group purpose="location"><context context-type="linenumber">151</context></context-group> </trans-unit> <trans-unit id="_msg953"> - <source xml:space="preserve">SQLiteDatabase: Failed to prepare statement to verify database: %s</source> + <source xml:space="preserve">Error initializing wallet database environment %s!</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">206</context></context-group> + <context-group purpose="location"><context context-type="linenumber">152</context></context-group> </trans-unit> <trans-unit id="_msg954"> - <source xml:space="preserve">SQLiteDatabase: Failed to read database verification error: %s</source> + <source xml:space="preserve">Error loading %s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">207</context></context-group> + <context-group purpose="location"><context context-type="linenumber">153</context></context-group> </trans-unit> <trans-unit id="_msg955"> - <source xml:space="preserve">SQLiteDatabase: Unexpected application id. Expected %u, got %u</source> + <source xml:space="preserve">Error loading %s: Private keys can only be disabled during creation</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">208</context></context-group> + <context-group purpose="location"><context context-type="linenumber">154</context></context-group> </trans-unit> <trans-unit id="_msg956"> - <source xml:space="preserve">Specified blocks directory "%s" does not exist.</source> + <source xml:space="preserve">Error loading %s: Wallet corrupted</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">214</context></context-group> + <context-group purpose="location"><context context-type="linenumber">155</context></context-group> </trans-unit> <trans-unit id="_msg957"> - <source xml:space="preserve">The specified config file %s does not exist</source> + <source xml:space="preserve">Error loading %s: Wallet requires newer version of %s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">217</context></context-group> + <context-group purpose="location"><context context-type="linenumber">156</context></context-group> </trans-unit> <trans-unit id="_msg958"> - <source xml:space="preserve">Unable to open %s for writing</source> + <source xml:space="preserve">Error loading block database</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">234</context></context-group> + <context-group purpose="location"><context context-type="linenumber">157</context></context-group> </trans-unit> <trans-unit id="_msg959"> - <source xml:space="preserve">Unknown address type '%s'</source> + <source xml:space="preserve">Error opening block database</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">237</context></context-group> + <context-group purpose="location"><context context-type="linenumber">158</context></context-group> </trans-unit> <trans-unit id="_msg960"> - <source xml:space="preserve">Unknown change type '%s'</source> + <source xml:space="preserve">Error reading from database, shutting down.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">238</context></context-group> + <context-group purpose="location"><context context-type="linenumber">159</context></context-group> </trans-unit> <trans-unit id="_msg961"> - <source xml:space="preserve">Upgrading txindex database</source> + <source xml:space="preserve">Error reading next record from wallet database</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">242</context></context-group> + <context-group purpose="location"><context context-type="linenumber">160</context></context-group> </trans-unit> <trans-unit id="_msg962"> - <source xml:space="preserve">Loading P2P addresses...</source> + <source xml:space="preserve">Error upgrading chainstate database</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">189</context></context-group> + <context-group purpose="location"><context context-type="linenumber">161</context></context-group> </trans-unit> <trans-unit id="_msg963"> - <source xml:space="preserve">Cannot downgrade wallet from version %i to version %i. Wallet version unchanged.</source> + <source xml:space="preserve">Error: Couldn't create cursor into database</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">19</context></context-group> + <context-group purpose="location"><context context-type="linenumber">162</context></context-group> </trans-unit> <trans-unit id="_msg964"> - <source xml:space="preserve">Cannot upgrade a non HD split wallet from version %i to version %i without upgrading to support pre-split keypool. Please use version %i or no version specified.</source> + <source xml:space="preserve">Error: Disk space is low for %s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">27</context></context-group> + <context-group purpose="location"><context context-type="linenumber">163</context></context-group> </trans-unit> <trans-unit id="_msg965"> - <source xml:space="preserve">Error: Dumpfile format record is incorrect. Got "%s", expected "format".</source> + <source xml:space="preserve">Error: Dumpfile checksum does not match. Computed %s, expected %s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">37</context></context-group> + <context-group purpose="location"><context context-type="linenumber">164</context></context-group> </trans-unit> <trans-unit id="_msg966"> - <source xml:space="preserve">Error: Dumpfile identifier record is incorrect. Got "%s", expected "%s".</source> + <source xml:space="preserve">Error: Got key that was not hex: %s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">39</context></context-group> + <context-group purpose="location"><context context-type="linenumber">165</context></context-group> </trans-unit> <trans-unit id="_msg967"> - <source xml:space="preserve">Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s</source> + <source xml:space="preserve">Error: Got value that was not hex: %s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">41</context></context-group> + <context-group purpose="location"><context context-type="linenumber">166</context></context-group> </trans-unit> <trans-unit id="_msg968"> - <source xml:space="preserve">File %s already exists. If you are sure this is what you want, move it out of the way first.</source> + <source xml:space="preserve">Error: Keypool ran out, please call keypoolrefill first</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">49</context></context-group> + <context-group purpose="location"><context context-type="linenumber">167</context></context-group> </trans-unit> <trans-unit id="_msg969"> - <source xml:space="preserve">No dump file provided. To use createfromdump, -dumpfile=<filename> must be provided.</source> + <source xml:space="preserve">Error: Missing checksum</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">58</context></context-group> + <context-group purpose="location"><context context-type="linenumber">168</context></context-group> </trans-unit> <trans-unit id="_msg970"> - <source xml:space="preserve">No dump file provided. To use dump, -dumpfile=<filename> must be provided.</source> + <source xml:space="preserve">Error: Unable to parse version %u as a uint32_t</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">61</context></context-group> + <context-group purpose="location"><context context-type="linenumber">169</context></context-group> </trans-unit> <trans-unit id="_msg971"> - <source xml:space="preserve">No wallet file format provided. To use createfromdump, -format=<format> must be provided.</source> + <source xml:space="preserve">Error: Unable to write record to new wallet</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">63</context></context-group> + <context-group purpose="location"><context context-type="linenumber">170</context></context-group> </trans-unit> <trans-unit id="_msg972"> - <source xml:space="preserve">Unknown wallet file format "%s" provided. Please provide one of "bdb" or "sqlite".</source> + <source xml:space="preserve">Failed to listen on any port. Use -listen=0 if you want this.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">120</context></context-group> + <context-group purpose="location"><context context-type="linenumber">171</context></context-group> </trans-unit> <trans-unit id="_msg973"> - <source xml:space="preserve">Warning: Dumpfile wallet format "%s" does not match command line specified format "%s".</source> + <source xml:space="preserve">Failed to rescan the wallet during initialization</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">123</context></context-group> + <context-group purpose="location"><context context-type="linenumber">172</context></context-group> </trans-unit> <trans-unit id="_msg974"> - <source xml:space="preserve">Loading banlist...</source> + <source xml:space="preserve">Failed to verify database</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">190</context></context-group> + <context-group purpose="location"><context context-type="linenumber">173</context></context-group> </trans-unit> - <trans-unit id="_msg975" approved="yes"> - <source xml:space="preserve">Not enough file descriptors available.</source> - <target xml:space="preserve">Not enough file descriptors available.</target> - <context-group purpose="location"><context context-type="linenumber">195</context></context-group> + <trans-unit id="_msg975"> + <source xml:space="preserve">Fee rate (%s) is lower than the minimum fee rate setting (%s)</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">174</context></context-group> </trans-unit> <trans-unit id="_msg976"> - <source xml:space="preserve">Prune cannot be configured with a negative value.</source> + <source xml:space="preserve">Ignoring duplicate -wallet %s.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">196</context></context-group> + <context-group purpose="location"><context context-type="linenumber">175</context></context-group> </trans-unit> <trans-unit id="_msg977"> - <source xml:space="preserve">Prune mode is incompatible with -txindex.</source> + <source xml:space="preserve">Importing…</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">197</context></context-group> + <context-group purpose="location"><context context-type="linenumber">176</context></context-group> </trans-unit> <trans-unit id="_msg978"> - <source xml:space="preserve">Replaying blocks...</source> + <source xml:space="preserve">Incorrect or no genesis block found. Wrong datadir for network?</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">200</context></context-group> + <context-group purpose="location"><context context-type="linenumber">177</context></context-group> </trans-unit> <trans-unit id="_msg979"> - <source xml:space="preserve">Rewinding blocks...</source> + <source xml:space="preserve">Initialization sanity check failed. %s is shutting down.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">202</context></context-group> + <context-group purpose="location"><context context-type="linenumber">178</context></context-group> </trans-unit> <trans-unit id="_msg980"> - <source xml:space="preserve">The source code is available from %s.</source> + <source xml:space="preserve">Insufficient funds</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">216</context></context-group> + <context-group purpose="location"><context context-type="linenumber">179</context></context-group> </trans-unit> <trans-unit id="_msg981"> - <source xml:space="preserve">Transaction fee and change calculation failed</source> + <source xml:space="preserve">Invalid -i2psam address or hostname: '%s'</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">225</context></context-group> + <context-group purpose="location"><context context-type="linenumber">180</context></context-group> </trans-unit> <trans-unit id="_msg982"> - <source xml:space="preserve">Unable to bind to %s on this computer. %s is probably already running.</source> + <source xml:space="preserve">Invalid -onion address or hostname: '%s'</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">230</context></context-group> + <context-group purpose="location"><context context-type="linenumber">181</context></context-group> </trans-unit> <trans-unit id="_msg983"> - <source xml:space="preserve">Unable to generate keys</source> + <source xml:space="preserve">Invalid -proxy address or hostname: '%s'</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">233</context></context-group> + <context-group purpose="location"><context context-type="linenumber">182</context></context-group> </trans-unit> <trans-unit id="_msg984"> - <source xml:space="preserve">Unsupported logging category %s=%s.</source> + <source xml:space="preserve">Invalid P2P permission: '%s'</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">240</context></context-group> + <context-group purpose="location"><context context-type="linenumber">183</context></context-group> </trans-unit> <trans-unit id="_msg985"> - <source xml:space="preserve">Upgrading UTXO database</source> + <source xml:space="preserve">Invalid amount for -%s=<amount>: '%s'</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">241</context></context-group> + <context-group purpose="location"><context context-type="linenumber">184</context></context-group> </trans-unit> <trans-unit id="_msg986"> - <source xml:space="preserve">User Agent comment (%s) contains unsafe characters.</source> + <source xml:space="preserve">Invalid amount for -discardfee=<amount>: '%s'</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">243</context></context-group> + <context-group purpose="location"><context context-type="linenumber">185</context></context-group> </trans-unit> - <trans-unit id="_msg987" approved="yes"> - <source xml:space="preserve">Verifying blocks...</source> - <target xml:space="preserve">Verifying blocks...</target> - <context-group purpose="location"><context context-type="linenumber">244</context></context-group> + <trans-unit id="_msg987"> + <source xml:space="preserve">Invalid amount for -fallbackfee=<amount>: '%s'</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">186</context></context-group> </trans-unit> <trans-unit id="_msg988"> - <source xml:space="preserve">Wallet needed to be rewritten: restart %s to complete</source> + <source xml:space="preserve">Invalid amount for -paytxfee=<amount>: '%s' (must be at least %s)</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">246</context></context-group> + <context-group purpose="location"><context context-type="linenumber">187</context></context-group> </trans-unit> <trans-unit id="_msg989"> - <source xml:space="preserve">Error: Listening for incoming connections failed (listen returned error %s)</source> + <source xml:space="preserve">Invalid netmask specified in -whitelist: '%s'</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">44</context></context-group> + <context-group purpose="location"><context context-type="linenumber">188</context></context-group> </trans-unit> <trans-unit id="_msg990"> - <source xml:space="preserve">%s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup.</source> + <source xml:space="preserve">Loading P2P addresses…</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">13</context></context-group> + <context-group purpose="location"><context context-type="linenumber">189</context></context-group> </trans-unit> <trans-unit id="_msg991"> - <source xml:space="preserve">Invalid amount for -maxtxfee=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions)</source> + <source xml:space="preserve">Loading banlist…</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">52</context></context-group> + <context-group purpose="location"><context context-type="linenumber">190</context></context-group> </trans-unit> <trans-unit id="_msg992"> - <source xml:space="preserve">The transaction amount is too small to send after the fee has been deducted</source> + <source xml:space="preserve">Loading block index…</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">91</context></context-group> + <context-group purpose="location"><context context-type="linenumber">191</context></context-group> </trans-unit> <trans-unit id="_msg993"> - <source xml:space="preserve">This error could occur if this wallet was not shutdown cleanly and was last loaded using a build with a newer version of Berkeley DB. If so, please use the software that last loaded this wallet</source> + <source xml:space="preserve">Loading wallet…</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">93</context></context-group> + <context-group purpose="location"><context context-type="linenumber">192</context></context-group> </trans-unit> <trans-unit id="_msg994"> - <source xml:space="preserve">This is the maximum transaction fee you pay (in addition to the normal fee) to prioritize partial spend avoidance over regular coin selection.</source> + <source xml:space="preserve">Need to specify a port with -whitebind: '%s'</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">100</context></context-group> + <context-group purpose="location"><context context-type="linenumber">193</context></context-group> </trans-unit> <trans-unit id="_msg995"> - <source xml:space="preserve">Transaction needs a change address, but we can't generate it. Please call keypoolrefill first.</source> + <source xml:space="preserve">No proxy server specified. Use -proxy=<ip> or -proxy=<ip:port>.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">111</context></context-group> + <context-group purpose="location"><context context-type="linenumber">194</context></context-group> </trans-unit> <trans-unit id="_msg996"> - <source xml:space="preserve">You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain</source> + <source xml:space="preserve">Not enough file descriptors available.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">131</context></context-group> + <context-group purpose="location"><context context-type="linenumber">195</context></context-group> </trans-unit> <trans-unit id="_msg997"> - <source xml:space="preserve">A fatal internal error occurred, see debug.log for details</source> + <source xml:space="preserve">Prune cannot be configured with a negative value.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">136</context></context-group> + <context-group purpose="location"><context context-type="linenumber">196</context></context-group> </trans-unit> <trans-unit id="_msg998"> - <source xml:space="preserve">Cannot set -peerblockfilters without -blockfilterindex.</source> + <source xml:space="preserve">Prune mode is incompatible with -coinstatsindex.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">138</context></context-group> + <context-group purpose="location"><context context-type="linenumber">197</context></context-group> </trans-unit> <trans-unit id="_msg999"> - <source xml:space="preserve">Disk space is too low!</source> + <source xml:space="preserve">Prune mode is incompatible with -txindex.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">146</context></context-group> + <context-group purpose="location"><context context-type="linenumber">198</context></context-group> </trans-unit> <trans-unit id="_msg1000"> - <source xml:space="preserve">Error reading from database, shutting down.</source> + <source xml:space="preserve">Pruning blockstore…</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">159</context></context-group> + <context-group purpose="location"><context context-type="linenumber">199</context></context-group> </trans-unit> <trans-unit id="_msg1001"> - <source xml:space="preserve">Error upgrading chainstate database</source> + <source xml:space="preserve">Reducing -maxconnections from %d to %d, because of system limitations.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">161</context></context-group> + <context-group purpose="location"><context context-type="linenumber">200</context></context-group> </trans-unit> <trans-unit id="_msg1002"> - <source xml:space="preserve">Error: Disk space is low for %s</source> + <source xml:space="preserve">Replaying blocks…</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">163</context></context-group> + <context-group purpose="location"><context context-type="linenumber">201</context></context-group> </trans-unit> <trans-unit id="_msg1003"> - <source xml:space="preserve">Error: Keypool ran out, please call keypoolrefill first</source> + <source xml:space="preserve">Rescanning…</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">167</context></context-group> + <context-group purpose="location"><context context-type="linenumber">202</context></context-group> </trans-unit> <trans-unit id="_msg1004"> - <source xml:space="preserve">Fee rate (%s) is lower than the minimum fee rate setting (%s)</source> + <source xml:space="preserve">SQLiteDatabase: Failed to execute statement to verify database: %s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">174</context></context-group> + <context-group purpose="location"><context context-type="linenumber">203</context></context-group> </trans-unit> <trans-unit id="_msg1005"> - <source xml:space="preserve">Invalid -onion address or hostname: '%s'</source> + <source xml:space="preserve">SQLiteDatabase: Failed to fetch sqlite wallet schema version: %s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">181</context></context-group> + <context-group purpose="location"><context context-type="linenumber">204</context></context-group> </trans-unit> <trans-unit id="_msg1006"> - <source xml:space="preserve">Invalid -proxy address or hostname: '%s'</source> + <source xml:space="preserve">SQLiteDatabase: Failed to fetch the application id: %s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">182</context></context-group> + <context-group purpose="location"><context context-type="linenumber">205</context></context-group> </trans-unit> <trans-unit id="_msg1007"> - <source xml:space="preserve">Invalid amount for -paytxfee=<amount>: '%s' (must be at least %s)</source> + <source xml:space="preserve">SQLiteDatabase: Failed to prepare statement to verify database: %s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">187</context></context-group> + <context-group purpose="location"><context context-type="linenumber">206</context></context-group> </trans-unit> <trans-unit id="_msg1008"> - <source xml:space="preserve">Invalid netmask specified in -whitelist: '%s'</source> + <source xml:space="preserve">SQLiteDatabase: Failed to read database verification error: %s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">188</context></context-group> + <context-group purpose="location"><context context-type="linenumber">207</context></context-group> </trans-unit> <trans-unit id="_msg1009"> - <source xml:space="preserve">Need to specify a port with -whitebind: '%s'</source> + <source xml:space="preserve">SQLiteDatabase: Unexpected application id. Expected %u, got %u</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">193</context></context-group> + <context-group purpose="location"><context context-type="linenumber">208</context></context-group> </trans-unit> <trans-unit id="_msg1010"> - <source xml:space="preserve">No proxy server specified. Use -proxy=<ip> or -proxy=<ip:port>.</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">194</context></context-group> - </trans-unit> - <trans-unit id="_msg1011"> - <source xml:space="preserve">Reducing -maxconnections from %d to %d, because of system limitations.</source> - <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">199</context></context-group> - </trans-unit> - <trans-unit id="_msg1012"> <source xml:space="preserve">Section [%s] is not recognized.</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">209</context></context-group> </trans-unit> - <trans-unit id="_msg1013" approved="yes"> + <trans-unit id="_msg1011"> <source xml:space="preserve">Signing transaction failed</source> - <target xml:space="preserve">Signing transaction failed</target> + <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">210</context></context-group> </trans-unit> - <trans-unit id="_msg1014"> + <trans-unit id="_msg1012"> <source xml:space="preserve">Specified -walletdir "%s" does not exist</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">211</context></context-group> </trans-unit> - <trans-unit id="_msg1015"> + <trans-unit id="_msg1013"> <source xml:space="preserve">Specified -walletdir "%s" is a relative path</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">212</context></context-group> </trans-unit> - <trans-unit id="_msg1016"> + <trans-unit id="_msg1014"> <source xml:space="preserve">Specified -walletdir "%s" is not a directory</source> <target xml:space="preserve"></target> <context-group purpose="location"><context context-type="linenumber">213</context></context-group> </trans-unit> + <trans-unit id="_msg1015"> + <source xml:space="preserve">Specified blocks directory "%s" does not exist.</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">214</context></context-group> + </trans-unit> + <trans-unit id="_msg1016"> + <source xml:space="preserve">Starting network threads…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">215</context></context-group> + </trans-unit> <trans-unit id="_msg1017"> - <source xml:space="preserve">The transaction amount is too small to pay the fee</source> + <source xml:space="preserve">The source code is available from %s.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">218</context></context-group> + <context-group purpose="location"><context context-type="linenumber">216</context></context-group> </trans-unit> <trans-unit id="_msg1018"> - <source xml:space="preserve">This is experimental software.</source> + <source xml:space="preserve">The specified config file %s does not exist</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">220</context></context-group> + <context-group purpose="location"><context context-type="linenumber">217</context></context-group> </trans-unit> - <trans-unit id="_msg1019" approved="yes"> - <source xml:space="preserve">Transaction amount too small</source> - <target xml:space="preserve">Transaction amount too small</target> - <context-group purpose="location"><context context-type="linenumber">223</context></context-group> + <trans-unit id="_msg1019"> + <source xml:space="preserve">The transaction amount is too small to pay the fee</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">218</context></context-group> </trans-unit> - <trans-unit id="_msg1020" approved="yes"> - <source xml:space="preserve">Transaction too large</source> - <target xml:space="preserve">Transaction too large</target> - <context-group purpose="location"><context context-type="linenumber">228</context></context-group> + <trans-unit id="_msg1020"> + <source xml:space="preserve">The wallet will avoid paying less than the minimum relay fee.</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">219</context></context-group> </trans-unit> <trans-unit id="_msg1021"> - <source xml:space="preserve">Unable to bind to %s on this computer (bind returned error %s)</source> + <source xml:space="preserve">This is experimental software.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">229</context></context-group> + <context-group purpose="location"><context context-type="linenumber">220</context></context-group> </trans-unit> <trans-unit id="_msg1022"> - <source xml:space="preserve">Unable to create the PID file '%s': %s</source> + <source xml:space="preserve">This is the minimum transaction fee you pay on every transaction.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">231</context></context-group> + <context-group purpose="location"><context context-type="linenumber">221</context></context-group> </trans-unit> <trans-unit id="_msg1023"> - <source xml:space="preserve">Unable to generate initial keys</source> + <source xml:space="preserve">This is the transaction fee you will pay if you send a transaction.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">232</context></context-group> + <context-group purpose="location"><context context-type="linenumber">222</context></context-group> </trans-unit> <trans-unit id="_msg1024"> - <source xml:space="preserve">Unknown -blockfilterindex value %s.</source> + <source xml:space="preserve">Transaction amount too small</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">236</context></context-group> + <context-group purpose="location"><context context-type="linenumber">223</context></context-group> </trans-unit> <trans-unit id="_msg1025"> - <source xml:space="preserve">Verifying wallet(s)...</source> + <source xml:space="preserve">Transaction amounts must not be negative</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">245</context></context-group> + <context-group purpose="location"><context context-type="linenumber">224</context></context-group> </trans-unit> <trans-unit id="_msg1026"> - <source xml:space="preserve">Warning: unknown new rules activated (versionbit %i)</source> + <source xml:space="preserve">Transaction fee and change calculation failed</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">247</context></context-group> + <context-group purpose="location"><context context-type="linenumber">225</context></context-group> </trans-unit> <trans-unit id="_msg1027"> - <source xml:space="preserve">-maxtxfee is set very high! Fees this large could be paid on a single transaction.</source> + <source xml:space="preserve">Transaction has too long of a mempool chain</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">16</context></context-group> + <context-group purpose="location"><context context-type="linenumber">226</context></context-group> </trans-unit> <trans-unit id="_msg1028"> - <source xml:space="preserve">This is the transaction fee you may pay when fee estimates are not available.</source> + <source xml:space="preserve">Transaction must have at least one recipient</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">106</context></context-group> + <context-group purpose="location"><context context-type="linenumber">227</context></context-group> </trans-unit> <trans-unit id="_msg1029"> - <source xml:space="preserve">Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments.</source> + <source xml:space="preserve">Transaction too large</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">108</context></context-group> + <context-group purpose="location"><context context-type="linenumber">228</context></context-group> </trans-unit> <trans-unit id="_msg1030"> - <source xml:space="preserve">%s is set very high!</source> + <source xml:space="preserve">Unable to bind to %s on this computer (bind returned error %s)</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">134</context></context-group> + <context-group purpose="location"><context context-type="linenumber">229</context></context-group> </trans-unit> <trans-unit id="_msg1031"> - <source xml:space="preserve">Starting network threads...</source> + <source xml:space="preserve">Unable to bind to %s on this computer. %s is probably already running.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">215</context></context-group> + <context-group purpose="location"><context context-type="linenumber">230</context></context-group> </trans-unit> <trans-unit id="_msg1032"> - <source xml:space="preserve">The wallet will avoid paying less than the minimum relay fee.</source> + <source xml:space="preserve">Unable to create the PID file '%s': %s</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">219</context></context-group> + <context-group purpose="location"><context context-type="linenumber">231</context></context-group> </trans-unit> <trans-unit id="_msg1033"> - <source xml:space="preserve">This is the minimum transaction fee you pay on every transaction.</source> + <source xml:space="preserve">Unable to generate initial keys</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">221</context></context-group> + <context-group purpose="location"><context context-type="linenumber">232</context></context-group> </trans-unit> <trans-unit id="_msg1034"> - <source xml:space="preserve">This is the transaction fee you will pay if you send a transaction.</source> + <source xml:space="preserve">Unable to generate keys</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">222</context></context-group> + <context-group purpose="location"><context context-type="linenumber">233</context></context-group> </trans-unit> <trans-unit id="_msg1035"> - <source xml:space="preserve">Transaction amounts must not be negative</source> + <source xml:space="preserve">Unable to open %s for writing</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">224</context></context-group> + <context-group purpose="location"><context context-type="linenumber">234</context></context-group> </trans-unit> <trans-unit id="_msg1036"> - <source xml:space="preserve">Transaction has too long of a mempool chain</source> + <source xml:space="preserve">Unable to start HTTP server. See debug log for details.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">226</context></context-group> + <context-group purpose="location"><context context-type="linenumber">235</context></context-group> </trans-unit> <trans-unit id="_msg1037"> - <source xml:space="preserve">Transaction must have at least one recipient</source> + <source xml:space="preserve">Unknown -blockfilterindex value %s.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">227</context></context-group> + <context-group purpose="location"><context context-type="linenumber">236</context></context-group> </trans-unit> - <trans-unit id="_msg1038" approved="yes"> - <source xml:space="preserve">Unknown network specified in -onlynet: '%s'</source> - <target xml:space="preserve">Unknown network specified in -onlynet: '%s'</target> - <context-group purpose="location"><context context-type="linenumber">239</context></context-group> + <trans-unit id="_msg1038"> + <source xml:space="preserve">Unknown address type '%s'</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">237</context></context-group> </trans-unit> - <trans-unit id="_msg1039" approved="yes"> - <source xml:space="preserve">Insufficient funds</source> - <target xml:space="preserve">Insufficient funds</target> - <context-group purpose="location"><context context-type="linenumber">179</context></context-group> + <trans-unit id="_msg1039"> + <source xml:space="preserve">Unknown change type '%s'</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">238</context></context-group> </trans-unit> <trans-unit id="_msg1040"> - <source xml:space="preserve">Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable -fallbackfee.</source> + <source xml:space="preserve">Unknown network specified in -onlynet: '%s'</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">46</context></context-group> + <context-group purpose="location"><context context-type="linenumber">239</context></context-group> </trans-unit> <trans-unit id="_msg1041"> - <source xml:space="preserve">Warning: Private keys detected in wallet {%s} with disabled private keys</source> + <source xml:space="preserve">Unsupported logging category %s=%s.</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">126</context></context-group> + <context-group purpose="location"><context context-type="linenumber">240</context></context-group> </trans-unit> <trans-unit id="_msg1042"> - <source xml:space="preserve">Cannot write to data directory '%s'; check permissions.</source> + <source xml:space="preserve">Upgrading UTXO database</source> <target xml:space="preserve"></target> - <context-group purpose="location"><context context-type="linenumber">139</context></context-group> + <context-group purpose="location"><context context-type="linenumber">241</context></context-group> </trans-unit> - <trans-unit id="_msg1043" approved="yes"> - <source xml:space="preserve">Loading block index...</source> - <target xml:space="preserve">Loading block index...</target> - <context-group purpose="location"><context context-type="linenumber">191</context></context-group> + <trans-unit id="_msg1043"> + <source xml:space="preserve">Upgrading txindex database</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">242</context></context-group> </trans-unit> - <trans-unit id="_msg1044" approved="yes"> - <source xml:space="preserve">Loading wallet...</source> - <target xml:space="preserve">Loading wallet...</target> - <context-group purpose="location"><context context-type="linenumber">192</context></context-group> + <trans-unit id="_msg1044"> + <source xml:space="preserve">User Agent comment (%s) contains unsafe characters.</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">243</context></context-group> </trans-unit> - <trans-unit id="_msg1045" approved="yes"> - <source xml:space="preserve">Rescanning...</source> - <target xml:space="preserve">Rescanning...</target> - <context-group purpose="location"><context context-type="linenumber">201</context></context-group> + <trans-unit id="_msg1045"> + <source xml:space="preserve">Verifying blocks…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">244</context></context-group> </trans-unit> - <trans-unit id="_msg1046" approved="yes"> - <source xml:space="preserve">Done loading</source> - <target xml:space="preserve">Done loading</target> - <context-group purpose="location"><context context-type="linenumber">148</context></context-group> + <trans-unit id="_msg1046"> + <source xml:space="preserve">Verifying wallet(s)…</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">245</context></context-group> + </trans-unit> + <trans-unit id="_msg1047"> + <source xml:space="preserve">Wallet needed to be rewritten: restart %s to complete</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">246</context></context-group> + </trans-unit> + <trans-unit id="_msg1048"> + <source xml:space="preserve">Warning: unknown new rules activated (versionbit %i)</source> + <target xml:space="preserve"></target> + <context-group purpose="location"><context context-type="linenumber">247</context></context-group> </trans-unit> </group> </body></file> diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp index 731d6a4eef..afbdc07ba0 100644 --- a/src/qt/rpcconsole.cpp +++ b/src/qt/rpcconsole.cpp @@ -495,8 +495,18 @@ RPCConsole::RPCConsole(interfaces::Node& node, const PlatformStyle *_platformSty ui->openDebugLogfileButton->setIcon(platformStyle->SingleColorIcon(":/icons/export")); } ui->clearButton->setIcon(platformStyle->SingleColorIcon(":/icons/remove")); + ui->fontBiggerButton->setIcon(platformStyle->SingleColorIcon(":/icons/fontbigger")); + //: Main shortcut to increase the RPC console font size. + ui->fontBiggerButton->setShortcut(tr("Ctrl++")); + //: Secondary shortcut to increase the RPC console font size. + GUIUtil::AddButtonShortcut(ui->fontBiggerButton, tr("Ctrl+=")); + ui->fontSmallerButton->setIcon(platformStyle->SingleColorIcon(":/icons/fontsmaller")); + //: Main shortcut to decrease the RPC console font size. + ui->fontSmallerButton->setShortcut(tr("Ctrl+-")); + //: Secondary shortcut to decrease the RPC console font size. + GUIUtil::AddButtonShortcut(ui->fontSmallerButton, tr("Ctrl+_")); // Install event filter for up and down arrow ui->lineEdit->installEventFilter(this); @@ -806,20 +816,23 @@ void RPCConsole::clear(bool keep_prompt) ).arg(fixedFontInfo.family(), QString("%1pt").arg(consoleFontSize)) ); -#ifdef Q_OS_MAC - QString clsKey = "(⌘)-L"; -#else - QString clsKey = "Ctrl-L"; -#endif - - message(CMD_REPLY, (tr("Welcome to the %1 RPC console.").arg(PACKAGE_NAME) + "<br>" + - tr("Use up and down arrows to navigate history, and %1 to clear screen.").arg("<b>"+clsKey+"</b>") + "<br>" + - tr("Type %1 for an overview of available commands.").arg("<b>help</b>") + "<br>" + - tr("For more information on using this console type %1.").arg("<b>help-console</b>") + - "<br><span class=\"secwarning\"><br>" + - tr("WARNING: Scammers have been active, telling users to type commands here, stealing their wallet contents. Do not use this console without fully understanding the ramifications of a command.") + - "</span>"), - true); + message(CMD_REPLY, + tr("Welcome to the %1 RPC console.").arg(PACKAGE_NAME) + + "<br>" + + tr("Use up and down arrows to navigate history, and %1 to clear screen.") + .arg("<b>" + ui->clearButton->shortcut().toString(QKeySequence::NativeText) + "</b>") + + "<br>" + + tr("Use %1 and %2 to increase or decrease the font size.") + .arg("<b>" + ui->fontBiggerButton->shortcut().toString(QKeySequence::NativeText) + "</b>") + .arg("<b>" + ui->fontSmallerButton->shortcut().toString(QKeySequence::NativeText) + "</b>") + + "<br>" + + tr("Type %1 for an overview of available commands.").arg("<b>help</b>") + + "<br>" + + tr("For more information on using this console type %1.").arg("<b>help-console</b>") + + "<br><span class=\"secwarning\"><br>" + + tr("WARNING: Scammers have been active, telling users to type commands here, stealing their wallet contents. Do not use this console without fully understanding the ramifications of a command.") + + "</span>", + true); } void RPCConsole::keyPressEvent(QKeyEvent *event) @@ -1062,7 +1075,7 @@ void RPCConsole::updateDetailWidget() ui->peerSubversion->setText(QString::fromStdString(stats->nodeStats.cleanSubVer)); ui->peerConnectionType->setText(GUIUtil::ConnectionTypeToQString(stats->nodeStats.m_conn_type, /* prepend_direction */ true)); ui->peerNetwork->setText(GUIUtil::NetworkToQString(stats->nodeStats.m_network)); - if (stats->nodeStats.m_permissionFlags == PF_NONE) { + if (stats->nodeStats.m_permissionFlags == NetPermissionFlags::None) { ui->peerPermissions->setText(ts.na); } else { QStringList permissions; diff --git a/src/qt/test/addressbooktests.cpp b/src/qt/test/addressbooktests.cpp index a026069232..39c69fe184 100644 --- a/src/qt/test/addressbooktests.cpp +++ b/src/qt/test/addressbooktests.cpp @@ -63,8 +63,7 @@ void TestAddAddressesToSendBook(interfaces::Node& node) node.setContext(&test.m_node); std::shared_ptr<CWallet> wallet = std::make_shared<CWallet>(node.context()->chain.get(), "", CreateMockWalletDatabase()); wallet->SetupLegacyScriptPubKeyMan(); - bool firstRun; - wallet->LoadWallet(firstRun); + wallet->LoadWallet(); auto build_address = [&wallet]() { CKey key; diff --git a/src/qt/test/apptests.cpp b/src/qt/test/apptests.cpp index 8dffd2f59f..36b9024541 100644 --- a/src/qt/test/apptests.cpp +++ b/src/qt/test/apptests.cpp @@ -20,9 +20,9 @@ #endif #include <QAction> -#include <QEventLoop> #include <QLineEdit> #include <QScopedPointer> +#include <QSignalSpy> #include <QTest> #include <QTextEdit> #include <QtGlobal> @@ -33,13 +33,14 @@ namespace { //! Call getblockchaininfo RPC and check first field of JSON output. void TestRpcCommand(RPCConsole* console) { - QEventLoop loop; QTextEdit* messagesWidget = console->findChild<QTextEdit*>("messagesWidget"); - QObject::connect(messagesWidget, &QTextEdit::textChanged, &loop, &QEventLoop::quit); QLineEdit* lineEdit = console->findChild<QLineEdit*>("lineEdit"); + QSignalSpy mw_spy(messagesWidget, &QTextEdit::textChanged); + QVERIFY(mw_spy.isValid()); QTest::keyClicks(lineEdit, "getblockchaininfo"); QTest::keyClick(lineEdit, Qt::Key_Return); - loop.exec(); + QVERIFY(mw_spy.wait(1000)); + QCOMPARE(mw_spy.count(), 2); QString output = messagesWidget->toPlainText(); UniValue value; value.read(output.right(output.size() - output.lastIndexOf(QChar::ObjectReplacementCharacter) - 1).toStdString()); diff --git a/src/qt/test/wallettests.cpp b/src/qt/test/wallettests.cpp index 03460cd6eb..febfead6ad 100644 --- a/src/qt/test/wallettests.cpp +++ b/src/qt/test/wallettests.cpp @@ -140,8 +140,7 @@ void TestGUI(interfaces::Node& node) } node.setContext(&test.m_node); std::shared_ptr<CWallet> wallet = std::make_shared<CWallet>(node.context()->chain.get(), "", CreateMockWalletDatabase()); - bool firstRun; - wallet->LoadWallet(firstRun); + wallet->LoadWallet(); { auto spk_man = wallet->GetOrCreateLegacyScriptPubKeyMan(); LOCK2(wallet->cs_wallet, spk_man->cs_KeyStore); diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index f2b99579b7..63826c49e1 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -1099,7 +1099,7 @@ static RPCHelpMan gettxoutsetinfo() "Note this call may take some time if you are not using coinstatsindex.\n", { {"hash_type", RPCArg::Type::STR, RPCArg::Default{"hash_serialized_2"}, "Which UTXO set hash should be calculated. Options: 'hash_serialized_2' (the legacy algorithm), 'muhash', 'none'."}, - {"hash_or_height", RPCArg::Type::NUM, RPCArg::Optional::OMITTED, "The block hash or height of the target height (only available with coinstatsindex).", "", {"", "string or numeric"}}, + {"hash_or_height", RPCArg::Type::NUM, RPCArg::Optional::OMITTED_NAMED_ARG, "The block hash or height of the target height (only available with coinstatsindex).", "", {"", "string or numeric"}}, {"use_index", RPCArg::Type::BOOL, RPCArg::Default{true}, "Use coinstatsindex, if available."}, }, RPCResult{ diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index 1f6b6e8d7e..4999eefc24 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -28,6 +28,8 @@ #include <version.h> #include <warnings.h> +#include <optional> + #include <univalue.h> const std::vector<std::string> CONNECTION_TYPE_DOC{ @@ -159,7 +161,7 @@ static RPCHelpMan getpeerinfo() "When a message type is not listed in this json object, the bytes sent are 0.\n" "Only known message types can appear as keys in the object."} }}, - {RPCResult::Type::OBJ, "bytesrecv_per_msg", "", + {RPCResult::Type::OBJ_DYN, "bytesrecv_per_msg", "", { {RPCResult::Type::NUM, "msg", "The total bytes received aggregated by message type\n" "When a message type is not listed in this json object, the bytes received are 0.\n" @@ -851,6 +853,7 @@ static RPCHelpMan getnodeaddresses() "\nReturn known addresses, which can potentially be used to find new nodes in the network.\n", { {"count", RPCArg::Type::NUM, RPCArg::Default{1}, "The maximum number of addresses to return. Specify 0 to return all known addresses."}, + {"network", RPCArg::Type::STR, RPCArg::DefaultHint{"all networks"}, "Return only addresses of the specified network. Can be one of: " + Join(GetNetworkNames(), ", ") + "."}, }, RPCResult{ RPCResult::Type::ARR, "", "", @@ -867,7 +870,10 @@ static RPCHelpMan getnodeaddresses() }, RPCExamples{ HelpExampleCli("getnodeaddresses", "8") - + HelpExampleRpc("getnodeaddresses", "8") + + HelpExampleCli("getnodeaddresses", "4 \"i2p\"") + + HelpExampleCli("-named getnodeaddresses", "network=onion count=12") + + HelpExampleRpc("getnodeaddresses", "8") + + HelpExampleRpc("getnodeaddresses", "4, \"i2p\"") }, [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue { @@ -877,8 +883,13 @@ static RPCHelpMan getnodeaddresses() const int count{request.params[0].isNull() ? 1 : request.params[0].get_int()}; if (count < 0) throw JSONRPCError(RPC_INVALID_PARAMETER, "Address count out of range"); + const std::optional<Network> network{request.params[1].isNull() ? std::nullopt : std::optional<Network>{ParseNetwork(request.params[1].get_str())}}; + if (network == NET_UNROUTABLE) { + throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Network not recognized: %s", request.params[1].get_str())); + } + // returns a shuffled list of CAddress - const std::vector<CAddress> vAddr{connman.GetAddresses(count, /* max_pct */ 0)}; + const std::vector<CAddress> vAddr{connman.GetAddresses(count, /* max_pct */ 0, network)}; UniValue ret(UniValue::VARR); for (const CAddress& addr : vAddr) { diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index f1ab1b4687..adb8ac0595 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -1434,7 +1434,7 @@ static RPCHelpMan createpsbt() "For compatibility reasons, a dictionary, which holds the key-value pairs directly, is also\n" " accepted as second parameter.", { - {"", RPCArg::Type::OBJ, RPCArg::Optional::OMITTED, "", + {"", RPCArg::Type::OBJ_USER_KEYS, RPCArg::Optional::OMITTED, "", { {"address", RPCArg::Type::AMOUNT, RPCArg::Optional::NO, "A key-value pair. The key (string) is the bitcoin address, the value (float or string) is the amount in " + CURRENCY_UNIT}, }, diff --git a/src/test/addrman_tests.cpp b/src/test/addrman_tests.cpp index d438537606..49b40924e0 100644 --- a/src/test/addrman_tests.cpp +++ b/src/test/addrman_tests.cpp @@ -12,6 +12,7 @@ #include <boost/test/unit_test.hpp> +#include <optional> #include <string> class CAddrManTest : public CAddrMan @@ -392,7 +393,7 @@ BOOST_AUTO_TEST_CASE(addrman_getaddr) // Test: Sanity check, GetAddr should never return anything if addrman // is empty. BOOST_CHECK_EQUAL(addrman.size(), 0U); - std::vector<CAddress> vAddr1 = addrman.GetAddr(/* max_addresses */ 0, /* max_pct */0); + std::vector<CAddress> vAddr1 = addrman.GetAddr(/* max_addresses */ 0, /* max_pct */ 0, /* network */ std::nullopt); BOOST_CHECK_EQUAL(vAddr1.size(), 0U); CAddress addr1 = CAddress(ResolveService("250.250.2.1", 8333), NODE_NONE); @@ -415,15 +416,15 @@ BOOST_AUTO_TEST_CASE(addrman_getaddr) BOOST_CHECK(addrman.Add(addr4, source2)); BOOST_CHECK(addrman.Add(addr5, source1)); - BOOST_CHECK_EQUAL(addrman.GetAddr(/* max_addresses */ 0, /* max_pct */ 0).size(), 5U); + BOOST_CHECK_EQUAL(addrman.GetAddr(/* max_addresses */ 0, /* max_pct */ 0, /* network */ std::nullopt).size(), 5U); // Net processing asks for 23% of addresses. 23% of 5 is 1 rounded down. - BOOST_CHECK_EQUAL(addrman.GetAddr(/* max_addresses */ 2500, /* max_pct */ 23).size(), 1U); + BOOST_CHECK_EQUAL(addrman.GetAddr(/* max_addresses */ 2500, /* max_pct */ 23, /* network */ std::nullopt).size(), 1U); // Test: Ensure GetAddr works with new and tried addresses. addrman.Good(CAddress(addr1, NODE_NONE)); addrman.Good(CAddress(addr2, NODE_NONE)); - BOOST_CHECK_EQUAL(addrman.GetAddr(/* max_addresses */ 0, /* max_pct */ 0).size(), 5U); - BOOST_CHECK_EQUAL(addrman.GetAddr(/* max_addresses */ 2500, /* max_pct */ 23).size(), 1U); + BOOST_CHECK_EQUAL(addrman.GetAddr(/* max_addresses */ 0, /* max_pct */ 0, /* network */ std::nullopt).size(), 5U); + BOOST_CHECK_EQUAL(addrman.GetAddr(/* max_addresses */ 2500, /* max_pct */ 23, /* network */ std::nullopt).size(), 1U); // Test: Ensure GetAddr still returns 23% when addrman has many addrs. for (unsigned int i = 1; i < (8 * 256); i++) { @@ -438,7 +439,7 @@ BOOST_AUTO_TEST_CASE(addrman_getaddr) if (i % 8 == 0) addrman.Good(addr); } - std::vector<CAddress> vAddr = addrman.GetAddr(/* max_addresses */ 2500, /* max_pct */ 23); + std::vector<CAddress> vAddr = addrman.GetAddr(/* max_addresses */ 2500, /* max_pct */ 23, /* network */ std::nullopt); size_t percent23 = (addrman.size() * 23) / 100; BOOST_CHECK_EQUAL(vAddr.size(), percent23); diff --git a/src/test/fuzz/addrman.cpp b/src/test/fuzz/addrman.cpp index 0baf30aef6..98ae32a8d0 100644 --- a/src/test/fuzz/addrman.cpp +++ b/src/test/fuzz/addrman.cpp @@ -60,7 +60,10 @@ FUZZ_TARGET_INIT(addrman, initialize_addrman) (void)addr_man.Select(fuzzed_data_provider.ConsumeBool()); }, [&] { - (void)addr_man.GetAddr(fuzzed_data_provider.ConsumeIntegralInRange<size_t>(0, 4096), fuzzed_data_provider.ConsumeIntegralInRange<size_t>(0, 4096)); + (void)addr_man.GetAddr( + /* max_addresses */ fuzzed_data_provider.ConsumeIntegralInRange<size_t>(0, 4096), + /* max_pct */ fuzzed_data_provider.ConsumeIntegralInRange<size_t>(0, 4096), + /* network */ std::nullopt); }, [&] { const std::optional<CAddress> opt_address = ConsumeDeserializable<CAddress>(fuzzed_data_provider); diff --git a/src/test/fuzz/coins_view.cpp b/src/test/fuzz/coins_view.cpp index 21dc80cc8d..878b5a27da 100644 --- a/src/test/fuzz/coins_view.cpp +++ b/src/test/fuzz/coins_view.cpp @@ -6,6 +6,7 @@ #include <chainparams.h> #include <chainparamsbase.h> #include <coins.h> +#include <consensus/tx_check.h> #include <consensus/tx_verify.h> #include <consensus/validation.h> #include <key.h> @@ -230,6 +231,11 @@ FUZZ_TARGET_INIT(coins_view, initialize_coins_view) // consensus/tx_verify.cpp:171: bool Consensus::CheckTxInputs(const CTransaction &, TxValidationState &, const CCoinsViewCache &, int, CAmount &): Assertion `!coin.IsSpent()' failed. return; } + TxValidationState dummy; + if (!CheckTransaction(transaction, dummy)) { + // It is not allowed to call CheckTxInputs if CheckTransaction failed + return; + } (void)Consensus::CheckTxInputs(transaction, state, coins_view_cache, fuzzed_data_provider.ConsumeIntegralInRange<int>(0, std::numeric_limits<int>::max()), tx_fee_out); assert(MoneyRange(tx_fee_out)); }, diff --git a/src/test/fuzz/connman.cpp b/src/test/fuzz/connman.cpp index e07f25dedf..3e9998af30 100644 --- a/src/test/fuzz/connman.cpp +++ b/src/test/fuzz/connman.cpp @@ -71,10 +71,16 @@ FUZZ_TARGET_INIT(connman, initialize_connman) (void)connman.ForNode(fuzzed_data_provider.ConsumeIntegral<NodeId>(), [&](auto) { return fuzzed_data_provider.ConsumeBool(); }); }, [&] { - (void)connman.GetAddresses(fuzzed_data_provider.ConsumeIntegral<size_t>(), fuzzed_data_provider.ConsumeIntegral<size_t>()); + (void)connman.GetAddresses( + /* max_addresses */ fuzzed_data_provider.ConsumeIntegral<size_t>(), + /* max_pct */ fuzzed_data_provider.ConsumeIntegral<size_t>(), + /* network */ std::nullopt); }, [&] { - (void)connman.GetAddresses(random_node, fuzzed_data_provider.ConsumeIntegral<size_t>(), fuzzed_data_provider.ConsumeIntegral<size_t>()); + (void)connman.GetAddresses( + /* requestor */ random_node, + /* max_addresses */ fuzzed_data_provider.ConsumeIntegral<size_t>(), + /* max_pct */ fuzzed_data_provider.ConsumeIntegral<size_t>()); }, [&] { (void)connman.GetDeterministicRandomizer(fuzzed_data_provider.ConsumeIntegral<uint64_t>()); diff --git a/src/test/fuzz/fuzz.cpp b/src/test/fuzz/fuzz.cpp index 0d8d960d56..631c861bb6 100644 --- a/src/test/fuzz/fuzz.cpp +++ b/src/test/fuzz/fuzz.cpp @@ -4,10 +4,15 @@ #include <test/fuzz/fuzz.h> +#include <netaddress.h> +#include <netbase.h> #include <test/util/setup_common.h> #include <util/check.h> +#include <util/sock.h> #include <cstdint> +#include <exception> +#include <memory> #include <unistd.h> #include <vector> @@ -29,6 +34,9 @@ static TypeTestOneInput* g_test_one_input{nullptr}; void initialize() { + // Terminate immediately if a fuzzing harness ever tries to create a TCP socket. + CreateSock = [](const CService&) -> std::unique_ptr<Sock> { std::terminate(); }; + bool should_abort{false}; if (std::getenv("PRINT_ALL_FUZZ_TARGETS_AND_ABORT")) { for (const auto& t : FuzzTargets()) { diff --git a/src/test/fuzz/i2p.cpp b/src/test/fuzz/i2p.cpp index 345d68502a..e0d62fb493 100644 --- a/src/test/fuzz/i2p.cpp +++ b/src/test/fuzz/i2p.cpp @@ -37,7 +37,7 @@ FUZZ_TARGET_INIT(i2p, initialize_i2p) if (sess.Listen(conn)) { if (sess.Accept(conn)) { try { - conn.sock->RecvUntilTerminator('\n', 10ms, interrupt, i2p::sam::MAX_MSG_SIZE); + (void)conn.sock->RecvUntilTerminator('\n', 10ms, interrupt, i2p::sam::MAX_MSG_SIZE); } catch (const std::runtime_error&) { } } diff --git a/src/test/fuzz/net_permissions.cpp b/src/test/fuzz/net_permissions.cpp index 6fdf4b653c..6ea79464d0 100644 --- a/src/test/fuzz/net_permissions.cpp +++ b/src/test/fuzz/net_permissions.cpp @@ -25,7 +25,7 @@ FUZZ_TARGET(net_permissions) (void)NetPermissions::ToStrings(net_whitebind_permissions.m_flags); (void)NetPermissions::AddFlag(net_whitebind_permissions.m_flags, net_permission_flags); assert(NetPermissions::HasFlag(net_whitebind_permissions.m_flags, net_permission_flags)); - (void)NetPermissions::ClearFlag(net_whitebind_permissions.m_flags, NetPermissionFlags::PF_ISIMPLICIT); + (void)NetPermissions::ClearFlag(net_whitebind_permissions.m_flags, NetPermissionFlags::Implicit); (void)NetPermissions::ToStrings(net_whitebind_permissions.m_flags); } @@ -35,7 +35,7 @@ FUZZ_TARGET(net_permissions) (void)NetPermissions::ToStrings(net_whitelist_permissions.m_flags); (void)NetPermissions::AddFlag(net_whitelist_permissions.m_flags, net_permission_flags); assert(NetPermissions::HasFlag(net_whitelist_permissions.m_flags, net_permission_flags)); - (void)NetPermissions::ClearFlag(net_whitelist_permissions.m_flags, NetPermissionFlags::PF_ISIMPLICIT); + (void)NetPermissions::ClearFlag(net_whitelist_permissions.m_flags, NetPermissionFlags::Implicit); (void)NetPermissions::ToStrings(net_whitelist_permissions.m_flags); } } diff --git a/src/test/fuzz/transaction.cpp b/src/test/fuzz/transaction.cpp index 17e4405a13..ff34cc87b2 100644 --- a/src/test/fuzz/transaction.cpp +++ b/src/test/fuzz/transaction.cpp @@ -61,8 +61,11 @@ FUZZ_TARGET_INIT(transaction, initialize_transaction) return; } - TxValidationState state_with_dupe_check; - (void)CheckTransaction(tx, state_with_dupe_check); + { + TxValidationState state_with_dupe_check; + const bool res{CheckTransaction(tx, state_with_dupe_check)}; + Assert(res == state_with_dupe_check.IsValid()); + } const CFeeRate dust_relay_fee{DUST_RELAY_TX_FEE}; std::string reason; @@ -100,9 +103,6 @@ FUZZ_TARGET_INIT(transaction, initialize_transaction) (void)IsWitnessStandard(tx, coins_view_cache); UniValue u(UniValue::VOBJ); - TxToUniv(tx, /* hashBlock */ {}, /* include_addresses */ true, u); - TxToUniv(tx, /* hashBlock */ {}, /* include_addresses */ false, u); - static const uint256 u256_max(uint256S("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); - TxToUniv(tx, u256_max, /* include_addresses */ true, u); - TxToUniv(tx, u256_max, /* include_addresses */ false, u); + TxToUniv(tx, /* hashBlock */ uint256::ZERO, /* include_addresses */ true, u); + TxToUniv(tx, /* hashBlock */ uint256::ONE, /* include_addresses */ false, u); } diff --git a/src/test/fuzz/tx_pool.cpp b/src/test/fuzz/tx_pool.cpp index 068e207118..ad11f2c5f2 100644 --- a/src/test/fuzz/tx_pool.cpp +++ b/src/test/fuzz/tx_pool.cpp @@ -21,8 +21,9 @@ std::vector<COutPoint> g_outpoints_coinbase_init_mature; std::vector<COutPoint> g_outpoints_coinbase_init_immature; struct MockedTxPool : public CTxMemPool { - void RollingFeeUpdate() + void RollingFeeUpdate() EXCLUSIVE_LOCKS_REQUIRED(!cs) { + LOCK(cs); lastRollingFeeUpdate = GetTime(); blockSinceLastRollingFeeBump = true; } diff --git a/src/test/net_tests.cpp b/src/test/net_tests.cpp index 1c397481dc..7a122bd8b0 100644 --- a/src/test/net_tests.cpp +++ b/src/test/net_tests.cpp @@ -300,13 +300,17 @@ BOOST_AUTO_TEST_CASE(cnetaddr_basic) // IPv6, scoped/link-local. See https://tools.ietf.org/html/rfc4007 // We support non-negative decimal integers (uint32_t) as zone id indices. - // Test with a fairly-high value, e.g. 32, to avoid locally reserved ids. + // Normal link-local scoped address functionality is to append "%" plus the + // zone id, for example, given a link-local address of "fe80::1" and a zone + // id of "32", return the address as "fe80::1%32". const std::string link_local{"fe80::1"}; const std::string scoped_addr{link_local + "%32"}; BOOST_REQUIRE(LookupHost(scoped_addr, addr, false)); BOOST_REQUIRE(addr.IsValid()); BOOST_REQUIRE(addr.IsIPv6()); BOOST_CHECK(!addr.IsBindAny()); + BOOST_CHECK_EQUAL(addr.ToString(), scoped_addr); + // Test that the delimiter "%" and default zone id of 0 can be omitted for the default scope. BOOST_REQUIRE(LookupHost(link_local + "%0", addr, false)); BOOST_REQUIRE(addr.IsValid()); diff --git a/src/test/netbase_tests.cpp b/src/test/netbase_tests.cpp index b316a37c6e..3c47cf83e2 100644 --- a/src/test/netbase_tests.cpp +++ b/src/test/netbase_tests.cpp @@ -381,27 +381,27 @@ BOOST_AUTO_TEST_CASE(netpermissions_test) // If no permission flags, assume backward compatibility BOOST_CHECK(NetWhitebindPermissions::TryParse("1.2.3.4:32", whitebindPermissions, error)); BOOST_CHECK(error.empty()); - BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, PF_ISIMPLICIT); - BOOST_CHECK(NetPermissions::HasFlag(whitebindPermissions.m_flags, PF_ISIMPLICIT)); - NetPermissions::ClearFlag(whitebindPermissions.m_flags, PF_ISIMPLICIT); - BOOST_CHECK(!NetPermissions::HasFlag(whitebindPermissions.m_flags, PF_ISIMPLICIT)); - BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, PF_NONE); - NetPermissions::AddFlag(whitebindPermissions.m_flags, PF_ISIMPLICIT); - BOOST_CHECK(NetPermissions::HasFlag(whitebindPermissions.m_flags, PF_ISIMPLICIT)); + BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::Implicit); + BOOST_CHECK(NetPermissions::HasFlag(whitebindPermissions.m_flags, NetPermissionFlags::Implicit)); + NetPermissions::ClearFlag(whitebindPermissions.m_flags, NetPermissionFlags::Implicit); + BOOST_CHECK(!NetPermissions::HasFlag(whitebindPermissions.m_flags, NetPermissionFlags::Implicit)); + BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::None); + NetPermissions::AddFlag(whitebindPermissions.m_flags, NetPermissionFlags::Implicit); + BOOST_CHECK(NetPermissions::HasFlag(whitebindPermissions.m_flags, NetPermissionFlags::Implicit)); // Can set one permission BOOST_CHECK(NetWhitebindPermissions::TryParse("bloom@1.2.3.4:32", whitebindPermissions, error)); - BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, PF_BLOOMFILTER); + BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::BloomFilter); BOOST_CHECK(NetWhitebindPermissions::TryParse("@1.2.3.4:32", whitebindPermissions, error)); - BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, PF_NONE); + BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::None); NetWhitebindPermissions noban, noban_download, download_noban, download; // "noban" implies "download" BOOST_REQUIRE(NetWhitebindPermissions::TryParse("noban@1.2.3.4:32", noban, error)); - BOOST_CHECK_EQUAL(noban.m_flags, NetPermissionFlags::PF_NOBAN); - BOOST_CHECK(NetPermissions::HasFlag(noban.m_flags, NetPermissionFlags::PF_DOWNLOAD)); - BOOST_CHECK(NetPermissions::HasFlag(noban.m_flags, NetPermissionFlags::PF_NOBAN)); + BOOST_CHECK_EQUAL(noban.m_flags, NetPermissionFlags::NoBan); + BOOST_CHECK(NetPermissions::HasFlag(noban.m_flags, NetPermissionFlags::Download)); + BOOST_CHECK(NetPermissions::HasFlag(noban.m_flags, NetPermissionFlags::NoBan)); // "noban,download" is equivalent to "noban" BOOST_REQUIRE(NetWhitebindPermissions::TryParse("noban,download@1.2.3.4:32", noban_download, error)); @@ -413,31 +413,31 @@ BOOST_AUTO_TEST_CASE(netpermissions_test) // "download" excludes (does not imply) "noban" BOOST_REQUIRE(NetWhitebindPermissions::TryParse("download@1.2.3.4:32", download, error)); - BOOST_CHECK_EQUAL(download.m_flags, NetPermissionFlags::PF_DOWNLOAD); - BOOST_CHECK(NetPermissions::HasFlag(download.m_flags, NetPermissionFlags::PF_DOWNLOAD)); - BOOST_CHECK(!NetPermissions::HasFlag(download.m_flags, NetPermissionFlags::PF_NOBAN)); + BOOST_CHECK_EQUAL(download.m_flags, NetPermissionFlags::Download); + BOOST_CHECK(NetPermissions::HasFlag(download.m_flags, NetPermissionFlags::Download)); + BOOST_CHECK(!NetPermissions::HasFlag(download.m_flags, NetPermissionFlags::NoBan)); // Happy path, can parse flags BOOST_CHECK(NetWhitebindPermissions::TryParse("bloom,forcerelay@1.2.3.4:32", whitebindPermissions, error)); // forcerelay should also activate the relay permission - BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, PF_BLOOMFILTER | PF_FORCERELAY | PF_RELAY); + BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::BloomFilter | NetPermissionFlags::ForceRelay | NetPermissionFlags::Relay); BOOST_CHECK(NetWhitebindPermissions::TryParse("bloom,relay,noban@1.2.3.4:32", whitebindPermissions, error)); - BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, PF_BLOOMFILTER | PF_RELAY | PF_NOBAN); + BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::BloomFilter | NetPermissionFlags::Relay | NetPermissionFlags::NoBan); BOOST_CHECK(NetWhitebindPermissions::TryParse("bloom,forcerelay,noban@1.2.3.4:32", whitebindPermissions, error)); BOOST_CHECK(NetWhitebindPermissions::TryParse("all@1.2.3.4:32", whitebindPermissions, error)); - BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, PF_ALL); + BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::All); // Allow dups BOOST_CHECK(NetWhitebindPermissions::TryParse("bloom,relay,noban,noban@1.2.3.4:32", whitebindPermissions, error)); - BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, PF_BLOOMFILTER | PF_RELAY | PF_NOBAN | PF_DOWNLOAD); // "noban" implies "download" + BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::BloomFilter | NetPermissionFlags::Relay | NetPermissionFlags::NoBan | NetPermissionFlags::Download); // "noban" implies "download" // Allow empty BOOST_CHECK(NetWhitebindPermissions::TryParse("bloom,relay,,noban@1.2.3.4:32", whitebindPermissions, error)); - BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, PF_BLOOMFILTER | PF_RELAY | PF_NOBAN); + BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::BloomFilter | NetPermissionFlags::Relay | NetPermissionFlags::NoBan); BOOST_CHECK(NetWhitebindPermissions::TryParse(",@1.2.3.4:32", whitebindPermissions, error)); - BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, PF_NONE); + BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::None); BOOST_CHECK(NetWhitebindPermissions::TryParse(",,@1.2.3.4:32", whitebindPermissions, error)); - BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, PF_NONE); + BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::None); // Detect invalid flag BOOST_CHECK(!NetWhitebindPermissions::TryParse("bloom,forcerelay,oopsie@1.2.3.4:32", whitebindPermissions, error)); @@ -449,16 +449,16 @@ BOOST_AUTO_TEST_CASE(netpermissions_test) // Happy path for whitelist parsing BOOST_CHECK(NetWhitelistPermissions::TryParse("noban@1.2.3.4", whitelistPermissions, error)); - BOOST_CHECK_EQUAL(whitelistPermissions.m_flags, PF_NOBAN); - BOOST_CHECK(NetPermissions::HasFlag(whitelistPermissions.m_flags, NetPermissionFlags::PF_NOBAN)); + BOOST_CHECK_EQUAL(whitelistPermissions.m_flags, NetPermissionFlags::NoBan); + BOOST_CHECK(NetPermissions::HasFlag(whitelistPermissions.m_flags, NetPermissionFlags::NoBan)); BOOST_CHECK(NetWhitelistPermissions::TryParse("bloom,forcerelay,noban,relay@1.2.3.4/32", whitelistPermissions, error)); - BOOST_CHECK_EQUAL(whitelistPermissions.m_flags, PF_BLOOMFILTER | PF_FORCERELAY | PF_NOBAN | PF_RELAY); + BOOST_CHECK_EQUAL(whitelistPermissions.m_flags, NetPermissionFlags::BloomFilter | NetPermissionFlags::ForceRelay | NetPermissionFlags::NoBan | NetPermissionFlags::Relay); BOOST_CHECK(error.empty()); BOOST_CHECK_EQUAL(whitelistPermissions.m_subnet.ToString(), "1.2.3.4/32"); BOOST_CHECK(NetWhitelistPermissions::TryParse("bloom,forcerelay,noban,relay,mempool@1.2.3.4/32", whitelistPermissions, error)); - const auto strings = NetPermissions::ToStrings(PF_ALL); + const auto strings = NetPermissions::ToStrings(NetPermissionFlags::All); BOOST_CHECK_EQUAL(strings.size(), 7U); BOOST_CHECK(std::find(strings.begin(), strings.end(), "bloomfilter") != strings.end()); BOOST_CHECK(std::find(strings.begin(), strings.end(), "forcerelay") != strings.end()); diff --git a/src/test/sock_tests.cpp b/src/test/sock_tests.cpp index 400de875b7..9e98f4f0b1 100644 --- a/src/test/sock_tests.cpp +++ b/src/test/sock_tests.cpp @@ -139,7 +139,7 @@ BOOST_AUTO_TEST_CASE(wait) Sock sock0(s[0]); Sock sock1(s[1]); - std::thread waiter([&sock0]() { sock0.Wait(24h, Sock::RECV); }); + std::thread waiter([&sock0]() { (void)sock0.Wait(24h, Sock::RECV); }); BOOST_REQUIRE_EQUAL(sock1.Send("a", 1, 0), 1); @@ -162,7 +162,7 @@ BOOST_AUTO_TEST_CASE(recv_until_terminator_limit) // BOOST_CHECK_EXCEPTION() writes to some variables shared with the main thread which // creates a data race. So mimic it manually. try { - sock_recv.RecvUntilTerminator('\n', timeout, interrupt, max_data); + (void)sock_recv.RecvUntilTerminator('\n', timeout, interrupt, max_data); } catch (const std::runtime_error& e) { threw_as_expected = HasReason("too many bytes without a terminator")(e); } diff --git a/src/test/util/net.h b/src/test/util/net.h index 9268d60a1e..71685d437a 100644 --- a/src/test/util/net.h +++ b/src/test/util/net.h @@ -46,16 +46,16 @@ constexpr ServiceFlags ALL_SERVICE_FLAGS[]{ }; constexpr NetPermissionFlags ALL_NET_PERMISSION_FLAGS[]{ - NetPermissionFlags::PF_NONE, - NetPermissionFlags::PF_BLOOMFILTER, - NetPermissionFlags::PF_RELAY, - NetPermissionFlags::PF_FORCERELAY, - NetPermissionFlags::PF_NOBAN, - NetPermissionFlags::PF_MEMPOOL, - NetPermissionFlags::PF_ADDR, - NetPermissionFlags::PF_DOWNLOAD, - NetPermissionFlags::PF_ISIMPLICIT, - NetPermissionFlags::PF_ALL, + NetPermissionFlags::None, + NetPermissionFlags::BloomFilter, + NetPermissionFlags::Relay, + NetPermissionFlags::ForceRelay, + NetPermissionFlags::NoBan, + NetPermissionFlags::Mempool, + NetPermissionFlags::Addr, + NetPermissionFlags::Download, + NetPermissionFlags::Implicit, + NetPermissionFlags::All, }; constexpr ConnectionType ALL_CONNECTION_TYPES[]{ diff --git a/src/txmempool.h b/src/txmempool.h index c3a9bd851d..594b4981f6 100644 --- a/src/txmempool.h +++ b/src/txmempool.h @@ -479,21 +479,21 @@ class CTxMemPool protected: const int m_check_ratio; //!< Value n means that 1 times in n we check. std::atomic<unsigned int> nTransactionsUpdated{0}; //!< Used by getblocktemplate to trigger CreateNewBlock() invocation - CBlockPolicyEstimator* minerPolicyEstimator; + CBlockPolicyEstimator* const minerPolicyEstimator; uint64_t totalTxSize GUARDED_BY(cs); //!< sum of all mempool tx's virtual sizes. Differs from serialized tx size since witness data is discounted. Defined in BIP 141. CAmount m_total_fee GUARDED_BY(cs); //!< sum of all mempool tx's fees (NOT modified fee) uint64_t cachedInnerUsage GUARDED_BY(cs); //!< sum of dynamic memory usage of all the map elements (NOT the maps themselves) - mutable int64_t lastRollingFeeUpdate; - mutable bool blockSinceLastRollingFeeBump; - mutable double rollingMinimumFeeRate; //!< minimum fee to get into the pool, decreases exponentially + mutable int64_t lastRollingFeeUpdate GUARDED_BY(cs); + mutable bool blockSinceLastRollingFeeBump GUARDED_BY(cs); + mutable double rollingMinimumFeeRate GUARDED_BY(cs); //!< minimum fee to get into the pool, decreases exponentially mutable Epoch m_epoch GUARDED_BY(cs); // In-memory counter for external mempool tracking purposes. // This number is incremented once every time a transaction // is added or removed from the mempool for any reason. - mutable uint64_t m_sequence_number{1}; + mutable uint64_t m_sequence_number GUARDED_BY(cs){1}; void trackPackageRemoved(const CFeeRate& rate) EXCLUSIVE_LOCKS_REQUIRED(cs); @@ -587,7 +587,7 @@ private: public: indirectmap<COutPoint, const CTransaction*> mapNextTx GUARDED_BY(cs); - std::map<uint256, CAmount> mapDeltas; + std::map<uint256, CAmount> mapDeltas GUARDED_BY(cs); /** Create a new CTxMemPool. * Sanity checks will be off by default for performance, because otherwise diff --git a/src/util/sock.cpp b/src/util/sock.cpp index 0bc9795db3..b6c2a47434 100644 --- a/src/util/sock.cpp +++ b/src/util/sock.cpp @@ -179,7 +179,7 @@ void Sock::SendComplete(const std::string& data, // Wait for a short while (or the socket to become ready for sending) before retrying // if nothing was sent. const auto wait_time = std::min(deadline - now, std::chrono::milliseconds{MAX_WAIT_FOR_IO}); - Wait(wait_time, SEND); + (void)Wait(wait_time, SEND); } } @@ -262,7 +262,7 @@ std::string Sock::RecvUntilTerminator(uint8_t terminator, // Wait for a short while (or the socket to become ready for reading) before retrying. const auto wait_time = std::min(deadline - now, std::chrono::milliseconds{MAX_WAIT_FOR_IO}); - Wait(wait_time, RECV); + (void)Wait(wait_time, RECV); } } diff --git a/src/util/sock.h b/src/util/sock.h index a4df7cd21b..59cc8c0b1d 100644 --- a/src/util/sock.h +++ b/src/util/sock.h @@ -64,7 +64,7 @@ public: * Get the value of the contained socket. * @return socket or INVALID_SOCKET if empty */ - virtual SOCKET Get() const; + [[nodiscard]] virtual SOCKET Get() const; /** * Get the value of the contained socket and drop ownership. It will not be closed by the @@ -82,26 +82,29 @@ public: * send(2) wrapper. Equivalent to `send(this->Get(), data, len, flags);`. Code that uses this * wrapper can be unit tested if this method is overridden by a mock Sock implementation. */ - virtual ssize_t Send(const void* data, size_t len, int flags) const; + [[nodiscard]] virtual ssize_t Send(const void* data, size_t len, int flags) const; /** * recv(2) wrapper. Equivalent to `recv(this->Get(), buf, len, flags);`. Code that uses this * wrapper can be unit tested if this method is overridden by a mock Sock implementation. */ - virtual ssize_t Recv(void* buf, size_t len, int flags) const; + [[nodiscard]] virtual ssize_t Recv(void* buf, size_t len, int flags) const; /** * connect(2) wrapper. Equivalent to `connect(this->Get(), addr, addrlen)`. Code that uses this * wrapper can be unit tested if this method is overridden by a mock Sock implementation. */ - virtual int Connect(const sockaddr* addr, socklen_t addr_len) const; + [[nodiscard]] virtual int Connect(const sockaddr* addr, socklen_t addr_len) const; /** * getsockopt(2) wrapper. Equivalent to * `getsockopt(this->Get(), level, opt_name, opt_val, opt_len)`. Code that uses this * wrapper can be unit tested if this method is overridden by a mock Sock implementation. */ - virtual int GetSockOpt(int level, int opt_name, void* opt_val, socklen_t* opt_len) const; + [[nodiscard]] virtual int GetSockOpt(int level, + int opt_name, + void* opt_val, + socklen_t* opt_len) const; using Event = uint8_t; @@ -124,9 +127,9 @@ public: * value of `true` and `occurred` being set to 0. * @return true on success and false otherwise */ - virtual bool Wait(std::chrono::milliseconds timeout, - Event requested, - Event* occurred = nullptr) const; + [[nodiscard]] virtual bool Wait(std::chrono::milliseconds timeout, + Event requested, + Event* occurred = nullptr) const; /* Higher level, convenience, methods. These may throw. */ @@ -154,17 +157,17 @@ public: * @throws std::runtime_error if the operation cannot be completed. In this case some bytes may * have been consumed from the socket. */ - virtual std::string RecvUntilTerminator(uint8_t terminator, - std::chrono::milliseconds timeout, - CThreadInterrupt& interrupt, - size_t max_data) const; + [[nodiscard]] virtual std::string RecvUntilTerminator(uint8_t terminator, + std::chrono::milliseconds timeout, + CThreadInterrupt& interrupt, + size_t max_data) const; /** * Check if still connected. * @param[out] errmsg The error string, if the socket has been disconnected. * @return true if connected */ - virtual bool IsConnected(std::string& errmsg) const; + [[nodiscard]] virtual bool IsConnected(std::string& errmsg) const; protected: /** diff --git a/src/util/strencodings.cpp b/src/util/strencodings.cpp index 4734de3e0b..f514613f0d 100644 --- a/src/util/strencodings.cpp +++ b/src/util/strencodings.cpp @@ -593,13 +593,14 @@ std::string Capitalize(std::string str) std::string HexStr(const Span<const uint8_t> s) { - std::string rv; + std::string rv(s.size() * 2, '\0'); static constexpr char hexmap[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; - rv.reserve(s.size() * 2); - for (uint8_t v: s) { - rv.push_back(hexmap[v >> 4]); - rv.push_back(hexmap[v & 15]); + auto it = rv.begin(); + for (uint8_t v : s) { + *it++ = hexmap[v >> 4]; + *it++ = hexmap[v & 15]; } + assert(it == rv.end()); return rv; } diff --git a/src/wallet/dump.cpp b/src/wallet/dump.cpp index e314107988..c39c0c7e73 100644 --- a/src/wallet/dump.cpp +++ b/src/wallet/dump.cpp @@ -194,8 +194,7 @@ bool CreateFromDump(const std::string& name, const fs::path& wallet_path, biling std::shared_ptr<CWallet> wallet(new CWallet(nullptr /* chain */, name, std::move(database)), WalletToolReleaseWallet); { LOCK(wallet->cs_wallet); - bool first_run = true; - DBErrors load_wallet_ret = wallet->LoadWallet(first_run); + DBErrors load_wallet_ret = wallet->LoadWallet(); if (load_wallet_ret != DBErrors::LOAD_OK) { error = strprintf(_("Error creating %s"), name); return false; diff --git a/src/wallet/load.cpp b/src/wallet/load.cpp index 342a165f39..e0df96666f 100644 --- a/src/wallet/load.cpp +++ b/src/wallet/load.cpp @@ -105,7 +105,8 @@ bool LoadWallets(interfaces::Chain& chain) if (!database && status == DatabaseStatus::FAILED_NOT_FOUND) { continue; } - std::shared_ptr<CWallet> pwallet = database ? CWallet::Create(chain, name, std::move(database), options.create_flags, error, warnings) : nullptr; + chain.initMessage(_("Loading wallet...").translated); + std::shared_ptr<CWallet> pwallet = database ? CWallet::Create(&chain, name, std::move(database), options.create_flags, error, warnings) : nullptr; if (!warnings.empty()) chain.initWarning(Join(warnings, Untranslated("\n"))); if (!pwallet) { chain.initError(error); diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 5567d183b6..4e3c8ce49d 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -854,7 +854,7 @@ static RPCHelpMan sendmany() HELP_REQUIRING_PASSPHRASE, { {"dummy", RPCArg::Type::STR, RPCArg::Optional::NO, "Must be set to \"\" for backwards compatibility.", "\"\""}, - {"amounts", RPCArg::Type::OBJ, RPCArg::Optional::NO, "The addresses and amounts", + {"amounts", RPCArg::Type::OBJ_USER_KEYS, RPCArg::Optional::NO, "The addresses and amounts", { {"address", RPCArg::Type::AMOUNT, RPCArg::Optional::NO, "The bitcoin address is the key, the numeric amount (can be string) in " + CURRENCY_UNIT + " is the value"}, }, @@ -2568,7 +2568,7 @@ static RPCHelpMan loadwallet() "\napplied to the new wallet (eg -rescan, etc).\n", { {"filename", RPCArg::Type::STR, RPCArg::Optional::NO, "The wallet directory or .dat file."}, - {"load_on_startup", RPCArg::Type::BOOL, RPCArg::Default{UniValue::VNULL}, "Save wallet name to persistent settings and load on startup. True to add wallet to startup list, false to remove, null to leave unchanged."}, + {"load_on_startup", RPCArg::Type::BOOL, RPCArg::Optional::OMITTED_NAMED_ARG, "Save wallet name to persistent settings and load on startup. True to add wallet to startup list, false to remove, null to leave unchanged."}, }, RPCResult{ RPCResult::Type::OBJ, "", "", @@ -2696,10 +2696,10 @@ static RPCHelpMan createwallet() {"wallet_name", RPCArg::Type::STR, RPCArg::Optional::NO, "The name for the new wallet. If this is a path, the wallet will be created at the path location."}, {"disable_private_keys", RPCArg::Type::BOOL, RPCArg::Default{false}, "Disable the possibility of private keys (only watchonlys are possible in this mode)."}, {"blank", RPCArg::Type::BOOL, RPCArg::Default{false}, "Create a blank wallet. A blank wallet has no keys or HD seed. One can be set using sethdseed."}, - {"passphrase", RPCArg::Type::STR, RPCArg::Optional::OMITTED, "Encrypt the wallet with this passphrase."}, + {"passphrase", RPCArg::Type::STR, RPCArg::Optional::OMITTED_NAMED_ARG, "Encrypt the wallet with this passphrase."}, {"avoid_reuse", RPCArg::Type::BOOL, RPCArg::Default{false}, "Keep track of coin reuse, and treat dirty and clean coins differently with privacy considerations in mind."}, {"descriptors", RPCArg::Type::BOOL, RPCArg::Default{false}, "Create a native descriptor wallet. The wallet will use descriptors internally to handle address creation"}, - {"load_on_startup", RPCArg::Type::BOOL, RPCArg::Default{UniValue::VNULL}, "Save wallet name to persistent settings and load on startup. True to add wallet to startup list, false to remove, null to leave unchanged."}, + {"load_on_startup", RPCArg::Type::BOOL, RPCArg::Optional::OMITTED_NAMED_ARG, "Save wallet name to persistent settings and load on startup. True to add wallet to startup list, false to remove, null to leave unchanged."}, {"external_signer", RPCArg::Type::BOOL, RPCArg::Default{false}, "Use an external signer such as a hardware wallet. Requires -signer to be configured. Wallet creation will fail if keys cannot be fetched. Requires disable_private_keys and descriptors set to true."}, }, RPCResult{ @@ -2790,7 +2790,7 @@ static RPCHelpMan unloadwallet() "Specifying the wallet name on a wallet endpoint is invalid.", { {"wallet_name", RPCArg::Type::STR, RPCArg::DefaultHint{"the wallet name from the RPC endpoint"}, "The name of the wallet to unload. If provided both here and in the RPC endpoint, the two must be identical."}, - {"load_on_startup", RPCArg::Type::BOOL, RPCArg::Default{UniValue::VNULL}, "Save wallet name to persistent settings and load on startup. True to add wallet to startup list, false to remove, null to leave unchanged."}, + {"load_on_startup", RPCArg::Type::BOOL, RPCArg::Optional::OMITTED_NAMED_ARG, "Save wallet name to persistent settings and load on startup. True to add wallet to startup list, false to remove, null to leave unchanged."}, }, RPCResult{RPCResult::Type::OBJ, "", "", { {RPCResult::Type::STR, "warning", "Warning message if wallet was not unloaded cleanly."}, @@ -4021,7 +4021,7 @@ static RPCHelpMan send() "That is, each address can only appear once and there can only be one 'data' object.\n" "For convenience, a dictionary, which holds the key-value pairs directly, is also accepted.", { - {"", RPCArg::Type::OBJ, RPCArg::Optional::OMITTED, "", + {"", RPCArg::Type::OBJ_USER_KEYS, RPCArg::Optional::OMITTED, "", { {"address", RPCArg::Type::AMOUNT, RPCArg::Optional::NO, "A key-value pair. The key (string) is the bitcoin address, the value (float or string) is the amount in " + CURRENCY_UNIT + ""}, }, @@ -4370,7 +4370,7 @@ static RPCHelpMan walletcreatefundedpsbt() "For compatibility reasons, a dictionary, which holds the key-value pairs directly, is also\n" "accepted as second parameter.", { - {"", RPCArg::Type::OBJ, RPCArg::Optional::OMITTED, "", + {"", RPCArg::Type::OBJ_USER_KEYS, RPCArg::Optional::OMITTED, "", { {"address", RPCArg::Type::AMOUNT, RPCArg::Optional::NO, "A key-value pair. The key (string) is the bitcoin address, the value (float or string) is the amount in " + CURRENCY_UNIT + ""}, }, diff --git a/src/wallet/sqlite.cpp b/src/wallet/sqlite.cpp index e245a277e4..2e60aca017 100644 --- a/src/wallet/sqlite.cpp +++ b/src/wallet/sqlite.cpp @@ -16,6 +16,7 @@ #include <sqlite3.h> #include <stdint.h> +#include <optional> #include <utility> #include <vector> @@ -35,6 +36,36 @@ static void ErrorLogCallback(void* arg, int code, const char* msg) LogPrintf("SQLite Error. Code: %d. Message: %s\n", code, msg); } +static std::optional<int> ReadPragmaInteger(sqlite3* db, const std::string& key, const std::string& description, bilingual_str& error) +{ + std::string stmt_text = strprintf("PRAGMA %s", key); + sqlite3_stmt* pragma_read_stmt{nullptr}; + int ret = sqlite3_prepare_v2(db, stmt_text.c_str(), -1, &pragma_read_stmt, nullptr); + if (ret != SQLITE_OK) { + sqlite3_finalize(pragma_read_stmt); + error = Untranslated(strprintf("SQLiteDatabase: Failed to prepare the statement to fetch %s: %s", description, sqlite3_errstr(ret))); + return std::nullopt; + } + ret = sqlite3_step(pragma_read_stmt); + if (ret != SQLITE_ROW) { + sqlite3_finalize(pragma_read_stmt); + error = Untranslated(strprintf("SQLiteDatabase: Failed to fetch %s: %s", description, sqlite3_errstr(ret))); + return std::nullopt; + } + int result = sqlite3_column_int(pragma_read_stmt, 0); + sqlite3_finalize(pragma_read_stmt); + return result; +} + +static void SetPragma(sqlite3* db, const std::string& key, const std::string& value, const std::string& err_msg) +{ + std::string stmt_text = strprintf("PRAGMA %s = %s", key, value); + int ret = sqlite3_exec(db, stmt_text.c_str(), nullptr, nullptr, nullptr); + if (ret != SQLITE_OK) { + throw std::runtime_error(strprintf("SQLiteDatabase: %s: %s\n", err_msg, sqlite3_errstr(ret))); + } +} + SQLiteDatabase::SQLiteDatabase(const fs::path& dir_path, const fs::path& file_path, bool mock) : WalletDatabase(), m_mock(mock), m_dir_path(dir_path.string()), m_file_path(file_path.string()) { @@ -114,21 +145,9 @@ bool SQLiteDatabase::Verify(bilingual_str& error) assert(m_db); // Check the application ID matches our network magic - sqlite3_stmt* app_id_stmt{nullptr}; - int ret = sqlite3_prepare_v2(m_db, "PRAGMA application_id", -1, &app_id_stmt, nullptr); - if (ret != SQLITE_OK) { - sqlite3_finalize(app_id_stmt); - error = strprintf(_("SQLiteDatabase: Failed to prepare the statement to fetch the application id: %s"), sqlite3_errstr(ret)); - return false; - } - ret = sqlite3_step(app_id_stmt); - if (ret != SQLITE_ROW) { - sqlite3_finalize(app_id_stmt); - error = strprintf(_("SQLiteDatabase: Failed to fetch the application id: %s"), sqlite3_errstr(ret)); - return false; - } - uint32_t app_id = static_cast<uint32_t>(sqlite3_column_int(app_id_stmt, 0)); - sqlite3_finalize(app_id_stmt); + auto read_result = ReadPragmaInteger(m_db, "application_id", "the application id", error); + if (!read_result.has_value()) return false; + uint32_t app_id = static_cast<uint32_t>(read_result.value()); uint32_t net_magic = ReadBE32(Params().MessageStart()); if (app_id != net_magic) { error = strprintf(_("SQLiteDatabase: Unexpected application id. Expected %u, got %u"), net_magic, app_id); @@ -136,28 +155,16 @@ bool SQLiteDatabase::Verify(bilingual_str& error) } // Check our schema version - sqlite3_stmt* user_ver_stmt{nullptr}; - ret = sqlite3_prepare_v2(m_db, "PRAGMA user_version", -1, &user_ver_stmt, nullptr); - if (ret != SQLITE_OK) { - sqlite3_finalize(user_ver_stmt); - error = strprintf(_("SQLiteDatabase: Failed to prepare the statement to fetch sqlite wallet schema version: %s"), sqlite3_errstr(ret)); - return false; - } - ret = sqlite3_step(user_ver_stmt); - if (ret != SQLITE_ROW) { - sqlite3_finalize(user_ver_stmt); - error = strprintf(_("SQLiteDatabase: Failed to fetch sqlite wallet schema version: %s"), sqlite3_errstr(ret)); - return false; - } - int32_t user_ver = sqlite3_column_int(user_ver_stmt, 0); - sqlite3_finalize(user_ver_stmt); + read_result = ReadPragmaInteger(m_db, "user_version", "sqlite wallet schema version", error); + if (!read_result.has_value()) return false; + int32_t user_ver = read_result.value(); if (user_ver != WALLET_SCHEMA_VERSION) { error = strprintf(_("SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported"), user_ver, WALLET_SCHEMA_VERSION); return false; } sqlite3_stmt* stmt{nullptr}; - ret = sqlite3_prepare_v2(m_db, "PRAGMA integrity_check", -1, &stmt, nullptr); + int ret = sqlite3_prepare_v2(m_db, "PRAGMA integrity_check", -1, &stmt, nullptr); if (ret != SQLITE_OK) { sqlite3_finalize(stmt); error = strprintf(_("SQLiteDatabase: Failed to prepare statement to verify database: %s"), sqlite3_errstr(ret)); @@ -213,12 +220,9 @@ void SQLiteDatabase::Open() // Acquire an exclusive lock on the database // First change the locking mode to exclusive - int ret = sqlite3_exec(m_db, "PRAGMA locking_mode = exclusive", nullptr, nullptr, nullptr); - if (ret != SQLITE_OK) { - throw std::runtime_error(strprintf("SQLiteDatabase: Unable to change database locking mode to exclusive: %s\n", sqlite3_errstr(ret))); - } + SetPragma(m_db, "locking_mode", "exclusive", "Unable to change database locking mode to exclusive"); // Now begin a transaction to acquire the exclusive lock. This lock won't be released until we close because of the exclusive locking mode. - ret = sqlite3_exec(m_db, "BEGIN EXCLUSIVE TRANSACTION", nullptr, nullptr, nullptr); + int ret = sqlite3_exec(m_db, "BEGIN EXCLUSIVE TRANSACTION", nullptr, nullptr, nullptr); if (ret != SQLITE_OK) { throw std::runtime_error("SQLiteDatabase: Unable to obtain an exclusive lock on the database, is it being used by another bitcoind?\n"); } @@ -228,18 +232,12 @@ void SQLiteDatabase::Open() } // Enable fullfsync for the platforms that use it - ret = sqlite3_exec(m_db, "PRAGMA fullfsync = true", nullptr, nullptr, nullptr); - if (ret != SQLITE_OK) { - throw std::runtime_error(strprintf("SQLiteDatabase: Failed to enable fullfsync: %s\n", sqlite3_errstr(ret))); - } + SetPragma(m_db, "fullfsync", "true", "Failed to enable fullfsync"); if (gArgs.GetBoolArg("-unsafesqlitesync", false)) { // Use normal synchronous mode for the journal LogPrintf("WARNING SQLite is configured to not wait for data to be flushed to disk. Data loss and corruption may occur.\n"); - ret = sqlite3_exec(m_db, "PRAGMA synchronous = OFF", nullptr, nullptr, nullptr); - if (ret != SQLITE_OK) { - throw std::runtime_error(strprintf("SQLiteDatabase: Failed to set synchronous mode to OFF: %s\n", sqlite3_errstr(ret))); - } + SetPragma(m_db, "synchronous", "OFF", "Failed to set synchronous mode to OFF"); } // Make the table for our key-value pairs @@ -271,18 +269,12 @@ void SQLiteDatabase::Open() // Set the application id uint32_t app_id = ReadBE32(Params().MessageStart()); - std::string set_app_id = strprintf("PRAGMA application_id = %d", static_cast<int32_t>(app_id)); - ret = sqlite3_exec(m_db, set_app_id.c_str(), nullptr, nullptr, nullptr); - if (ret != SQLITE_OK) { - throw std::runtime_error(strprintf("SQLiteDatabase: Failed to set the application id: %s\n", sqlite3_errstr(ret))); - } + SetPragma(m_db, "application_id", strprintf("%d", static_cast<int32_t>(app_id)), + "Failed to set the application id"); // Set the user version - std::string set_user_ver = strprintf("PRAGMA user_version = %d", WALLET_SCHEMA_VERSION); - ret = sqlite3_exec(m_db, set_user_ver.c_str(), nullptr, nullptr, nullptr); - if (ret != SQLITE_OK) { - throw std::runtime_error(strprintf("SQLiteDatabase: Failed to set the wallet schema version: %s\n", sqlite3_errstr(ret))); - } + SetPragma(m_db, "user_version", strprintf("%d", WALLET_SCHEMA_VERSION), + "Failed to set the wallet schema version"); } } diff --git a/src/wallet/test/coinselector_tests.cpp b/src/wallet/test/coinselector_tests.cpp index 7eff6e592d..7bca385deb 100644 --- a/src/wallet/test/coinselector_tests.cpp +++ b/src/wallet/test/coinselector_tests.cpp @@ -297,8 +297,7 @@ BOOST_AUTO_TEST_CASE(bnb_search_test) empty_wallet(); { std::unique_ptr<CWallet> wallet = std::make_unique<CWallet>(m_node.chain.get(), "", CreateMockWalletDatabase()); - bool firstRun; - wallet->LoadWallet(firstRun); + wallet->LoadWallet(); wallet->SetupLegacyScriptPubKeyMan(); LOCK(wallet->cs_wallet); add_coin(*wallet, 5 * CENT, 6 * 24, false, 0, true); diff --git a/src/wallet/test/wallet_test_fixture.cpp b/src/wallet/test/wallet_test_fixture.cpp index badf2eb459..fc744ebe5b 100644 --- a/src/wallet/test/wallet_test_fixture.cpp +++ b/src/wallet/test/wallet_test_fixture.cpp @@ -8,8 +8,7 @@ WalletTestingSetup::WalletTestingSetup(const std::string& chainName) : TestingSetup(chainName), m_wallet(m_node.chain.get(), "", CreateMockWalletDatabase()) { - bool fFirstRun; - m_wallet.LoadWallet(fFirstRun); + m_wallet.LoadWallet(); m_chain_notifications_handler = m_node.chain->handleNotifications({ &m_wallet, [](CWallet*) {} }); m_wallet_client->registerRpcs(); } diff --git a/src/wallet/test/wallet_tests.cpp b/src/wallet/test/wallet_tests.cpp index c8e3c8f819..512374c34f 100644 --- a/src/wallet/test/wallet_tests.cpp +++ b/src/wallet/test/wallet_tests.cpp @@ -38,7 +38,7 @@ static_assert(WALLET_INCREMENTAL_RELAY_FEE >= DEFAULT_INCREMENTAL_RELAY_FEE, "wa BOOST_FIXTURE_TEST_SUITE(wallet_tests, WalletTestingSetup) -static std::shared_ptr<CWallet> TestLoadWallet(interfaces::Chain& chain) +static std::shared_ptr<CWallet> TestLoadWallet(interfaces::Chain* chain) { DatabaseOptions options; DatabaseStatus status; @@ -46,7 +46,9 @@ static std::shared_ptr<CWallet> TestLoadWallet(interfaces::Chain& chain) std::vector<bilingual_str> warnings; auto database = MakeWalletDatabase("", options, status, error); auto wallet = CWallet::Create(chain, "", std::move(database), options.create_flags, error, warnings); - wallet->postInitProcess(); + if (chain) { + wallet->postInitProcess(); + } return wallet; } @@ -483,8 +485,7 @@ public: LOCK2(wallet->cs_wallet, ::cs_main); wallet->SetLastBlockProcessed(::ChainActive().Height(), ::ChainActive().Tip()->GetBlockHash()); } - bool firstRun; - wallet->LoadWallet(firstRun); + wallet->LoadWallet(); AddKey(*wallet, coinbaseKey); WalletRescanReserver reserver(*wallet); reserver.reserve(); @@ -690,7 +691,7 @@ BOOST_FIXTURE_TEST_CASE(CreateWallet, TestChain100Setup) { gArgs.ForceSetArg("-unsafesqlitesync", "1"); // Create new wallet with known key and unload it. - auto wallet = TestLoadWallet(*m_node.chain); + auto wallet = TestLoadWallet(m_node.chain.get()); CKey key; key.MakeNewKey(true); AddKey(*wallet, key); @@ -730,7 +731,7 @@ BOOST_FIXTURE_TEST_CASE(CreateWallet, TestChain100Setup) // Reload wallet and make sure new transactions are detected despite events // being blocked - wallet = TestLoadWallet(*m_node.chain); + wallet = TestLoadWallet(m_node.chain.get()); BOOST_CHECK(rescan_completed); BOOST_CHECK_EQUAL(addtx_count, 2); { @@ -770,7 +771,7 @@ BOOST_FIXTURE_TEST_CASE(CreateWallet, TestChain100Setup) ENTER_CRITICAL_SECTION(wallet->wallet()->cs_wallet); ENTER_CRITICAL_SECTION(cs_wallets); }); - wallet = TestLoadWallet(*m_node.chain); + wallet = TestLoadWallet(m_node.chain.get()); BOOST_CHECK_EQUAL(addtx_count, 4); { LOCK(wallet->cs_wallet); @@ -782,10 +783,17 @@ BOOST_FIXTURE_TEST_CASE(CreateWallet, TestChain100Setup) TestUnloadWallet(std::move(wallet)); } +BOOST_FIXTURE_TEST_CASE(CreateWalletWithoutChain, BasicTestingSetup) +{ + auto wallet = TestLoadWallet(nullptr); + BOOST_CHECK(wallet); + UnloadWallet(std::move(wallet)); +} + BOOST_FIXTURE_TEST_CASE(ZapSelectTx, TestChain100Setup) { gArgs.ForceSetArg("-unsafesqlitesync", "1"); - auto wallet = TestLoadWallet(*m_node.chain); + auto wallet = TestLoadWallet(m_node.chain.get()); CKey key; key.MakeNewKey(true); AddKey(*wallet, key); diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 456c26ea31..7cdf2fcda0 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -213,7 +213,8 @@ std::shared_ptr<CWallet> LoadWalletInternal(interfaces::Chain& chain, const std: return nullptr; } - std::shared_ptr<CWallet> wallet = CWallet::Create(chain, name, std::move(database), options.create_flags, error, warnings); + chain.initMessage(_("Loading wallet...").translated); + std::shared_ptr<CWallet> wallet = CWallet::Create(&chain, name, std::move(database), options.create_flags, error, warnings); if (!wallet) { error = Untranslated("Wallet loading failed.") + Untranslated(" ") + error; status = DatabaseStatus::FAILED_LOAD; @@ -292,7 +293,8 @@ std::shared_ptr<CWallet> CreateWallet(interfaces::Chain& chain, const std::strin } // Make the wallet - std::shared_ptr<CWallet> wallet = CWallet::Create(chain, name, std::move(database), wallet_creation_flags, error, warnings); + chain.initMessage(_("Loading wallet...").translated); + std::shared_ptr<CWallet> wallet = CWallet::Create(&chain, name, std::move(database), wallet_creation_flags, error, warnings); if (!wallet) { error = Untranslated("Wallet creation failed.") + Untranslated(" ") + error; status = DatabaseStatus::FAILED_CREATE; @@ -3247,11 +3249,10 @@ void CWallet::CommitTransaction(CTransactionRef tx, mapValue_t mapValue, std::ve } } -DBErrors CWallet::LoadWallet(bool& fFirstRunRet) +DBErrors CWallet::LoadWallet() { LOCK(cs_wallet); - fFirstRunRet = false; DBErrors nLoadWalletRet = WalletBatch(GetDatabase()).LoadWallet(this); if (nLoadWalletRet == DBErrors::NEED_REWRITE) { @@ -3263,9 +3264,7 @@ DBErrors CWallet::LoadWallet(bool& fFirstRunRet) } } - // This wallet is in its first run if there are no ScriptPubKeyMans and it isn't blank or no privkeys - fFirstRunRet = m_spk_managers.empty() && !IsWalletFlagSet(WALLET_FLAG_DISABLE_PRIVATE_KEYS) && !IsWalletFlagSet(WALLET_FLAG_BLANK_WALLET); - if (fFirstRunRet) { + if (m_spk_managers.empty()) { assert(m_external_spk_managers.empty()); assert(m_internal_spk_managers.empty()); } @@ -3886,18 +3885,15 @@ std::unique_ptr<WalletDatabase> MakeWalletDatabase(const std::string& name, cons return MakeDatabase(wallet_path, options, status, error_string); } -std::shared_ptr<CWallet> CWallet::Create(interfaces::Chain& chain, const std::string& name, std::unique_ptr<WalletDatabase> database, uint64_t wallet_creation_flags, bilingual_str& error, std::vector<bilingual_str>& warnings) +std::shared_ptr<CWallet> CWallet::Create(interfaces::Chain* chain, const std::string& name, std::unique_ptr<WalletDatabase> database, uint64_t wallet_creation_flags, bilingual_str& error, std::vector<bilingual_str>& warnings) { const std::string& walletFile = database->Filename(); - chain.initMessage(_("Loading wallet…").translated); - int64_t nStart = GetTimeMillis(); - bool fFirstRun = true; // TODO: Can't use std::make_shared because we need a custom deleter but // should be possible to use std::allocate_shared. - std::shared_ptr<CWallet> walletInstance(new CWallet(&chain, name, std::move(database)), ReleaseWallet); - DBErrors nLoadWalletRet = walletInstance->LoadWallet(fFirstRun); + std::shared_ptr<CWallet> walletInstance(new CWallet(chain, name, std::move(database)), ReleaseWallet); + DBErrors nLoadWalletRet = walletInstance->LoadWallet(); if (nLoadWalletRet != DBErrors::LOAD_OK) { if (nLoadWalletRet == DBErrors::CORRUPT) { error = strprintf(_("Error loading %s: Wallet corrupted"), walletFile); @@ -3924,6 +3920,10 @@ std::shared_ptr<CWallet> CWallet::Create(interfaces::Chain& chain, const std::st } } + // This wallet is in its first run if there are no ScriptPubKeyMans and it isn't blank or no privkeys + const bool fFirstRun = walletInstance->m_spk_managers.empty() && + !walletInstance->IsWalletFlagSet(WALLET_FLAG_DISABLE_PRIVATE_KEYS) && + !walletInstance->IsWalletFlagSet(WALLET_FLAG_BLANK_WALLET); if (fFirstRun) { // ensure this wallet.dat can only be opened by clients supporting HD with chain split and expects no default key @@ -3952,7 +3952,9 @@ std::shared_ptr<CWallet> CWallet::Create(interfaces::Chain& chain, const std::st } } - walletInstance->chainStateFlushed(chain.getTipLocator()); + if (chain) { + walletInstance->chainStateFlushed(chain->getTipLocator()); + } } else if (wallet_creation_flags & WALLET_FLAG_DISABLE_PRIVATE_KEYS) { // Make it impossible to disable private keys after creation error = strprintf(_("Error loading %s: Private keys can only be disabled during creation"), walletFile); @@ -4049,9 +4051,9 @@ std::shared_ptr<CWallet> CWallet::Create(interfaces::Chain& chain, const std::st _("This is the transaction fee you will pay if you send a transaction.")); } walletInstance->m_pay_tx_fee = CFeeRate(nFeePerK, 1000); - if (walletInstance->m_pay_tx_fee < chain.relayMinFee()) { + if (chain && walletInstance->m_pay_tx_fee < chain->relayMinFee()) { error = strprintf(_("Invalid amount for -paytxfee=<amount>: '%s' (must be at least %s)"), - gArgs.GetArg("-paytxfee", ""), chain.relayMinFee().ToString()); + gArgs.GetArg("-paytxfee", ""), chain->relayMinFee().ToString()); return nullptr; } } @@ -4065,15 +4067,15 @@ std::shared_ptr<CWallet> CWallet::Create(interfaces::Chain& chain, const std::st if (nMaxFee > HIGH_MAX_TX_FEE) { warnings.push_back(_("-maxtxfee is set very high! Fees this large could be paid on a single transaction.")); } - if (CFeeRate(nMaxFee, 1000) < chain.relayMinFee()) { + if (chain && CFeeRate(nMaxFee, 1000) < chain->relayMinFee()) { error = strprintf(_("Invalid amount for -maxtxfee=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions)"), - gArgs.GetArg("-maxtxfee", ""), chain.relayMinFee().ToString()); + gArgs.GetArg("-maxtxfee", ""), chain->relayMinFee().ToString()); return nullptr; } walletInstance->m_default_max_tx_fee = nMaxFee; } - if (chain.relayMinFee().GetFeePerK() > HIGH_TX_FEE_PER_KB) { + if (chain && chain->relayMinFee().GetFeePerK() > HIGH_TX_FEE_PER_KB) { warnings.push_back(AmountHighWarn("-minrelaytxfee") + Untranslated(" ") + _("The wallet will avoid paying less than the minimum relay fee.")); } @@ -4089,6 +4091,35 @@ std::shared_ptr<CWallet> CWallet::Create(interfaces::Chain& chain, const std::st LOCK(walletInstance->cs_wallet); + if (chain && !AttachChain(walletInstance, *chain, error, warnings)) { + return nullptr; + } + + { + LOCK(cs_wallets); + for (auto& load_wallet : g_load_wallet_fns) { + load_wallet(interfaces::MakeWallet(walletInstance)); + } + } + + walletInstance->SetBroadcastTransactions(gArgs.GetBoolArg("-walletbroadcast", DEFAULT_WALLETBROADCAST)); + + { + walletInstance->WalletLogPrintf("setKeyPool.size() = %u\n", walletInstance->GetKeyPoolSize()); + walletInstance->WalletLogPrintf("mapWallet.size() = %u\n", walletInstance->mapWallet.size()); + walletInstance->WalletLogPrintf("m_address_book.size() = %u\n", walletInstance->m_address_book.size()); + } + + return walletInstance; +} + +bool CWallet::AttachChain(const std::shared_ptr<CWallet>& walletInstance, interfaces::Chain& chain, bilingual_str& error, std::vector<bilingual_str>& warnings) +{ + LOCK(walletInstance->cs_wallet); + // allow setting the chain if it hasn't been set already but prevent changing it + assert(!walletInstance->m_chain || walletInstance->m_chain == &chain); + walletInstance->m_chain = &chain; + // Register wallet with validationinterface. It's done before rescan to avoid // missing block connections between end of rescan and validation subscribing. // Because of wallet lock being hold, block connection notifications are going to @@ -4122,21 +4153,21 @@ std::shared_ptr<CWallet> CWallet::Create(interfaces::Chain& chain, const std::st if (tip_height && *tip_height != rescan_height) { - // We can't rescan beyond non-pruned blocks, stop and throw an error. - // This might happen if a user uses an old wallet within a pruned node - // or if they ran -disablewallet for a longer time, then decided to re-enable if (chain.havePruned()) { - // Exit early and print an error. - // If a block is pruned after this check, we will load the wallet, - // but fail the rescan with a generic error. int block_height = *tip_height; while (block_height > 0 && chain.haveBlockOnDisk(block_height - 1) && rescan_height != block_height) { --block_height; } if (rescan_height != block_height) { + // We can't rescan beyond non-pruned blocks, stop and throw an error. + // This might happen if a user uses an old wallet within a pruned node + // or if they ran -disablewallet for a longer time, then decided to re-enable + // Exit early and print an error. + // If a block is pruned after this check, we will load the wallet, + // but fail the rescan with a generic error. error = _("Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node)"); - return nullptr; + return false; } } @@ -4158,29 +4189,14 @@ std::shared_ptr<CWallet> CWallet::Create(interfaces::Chain& chain, const std::st WalletRescanReserver reserver(*walletInstance); if (!reserver.reserve() || (ScanResult::SUCCESS != walletInstance->ScanForWalletTransactions(chain.getBlockHash(rescan_height), rescan_height, {} /* max height */, reserver, true /* update */).status)) { error = _("Failed to rescan the wallet during initialization"); - return nullptr; + return false; } } walletInstance->chainStateFlushed(chain.getTipLocator()); walletInstance->GetDatabase().IncrementUpdateCounter(); } - { - LOCK(cs_wallets); - for (auto& load_wallet : g_load_wallet_fns) { - load_wallet(interfaces::MakeWallet(walletInstance)); - } - } - - walletInstance->SetBroadcastTransactions(gArgs.GetBoolArg("-walletbroadcast", DEFAULT_WALLETBROADCAST)); - - { - walletInstance->WalletLogPrintf("setKeyPool.size() = %u\n", walletInstance->GetKeyPoolSize()); - walletInstance->WalletLogPrintf("mapWallet.size() = %u\n", walletInstance->mapWallet.size()); - walletInstance->WalletLogPrintf("m_address_book.size() = %u\n", walletInstance->m_address_book.size()); - } - - return walletInstance; + return true; } const CAddressBookData* CWallet::FindAddressBookEntry(const CTxDestination& dest, bool allow_change) const diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index 5a36d92784..fc4edd8d20 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -763,6 +763,13 @@ private: bool CreateTransactionInternal(const std::vector<CRecipient>& vecSend, CTransactionRef& tx, CAmount& nFeeRet, int& nChangePosInOut, bilingual_str& error, const CCoinControl& coin_control, FeeCalculation& fee_calc_out, bool sign); + /** + * Catch wallet up to current chain, scanning new blocks, updating the best + * block locator and m_last_block_processed, and registering for + * notifications about new blocks and transactions. + */ + static bool AttachChain(const std::shared_ptr<CWallet>& wallet, interfaces::Chain& chain, bilingual_str& error, std::vector<bilingual_str>& warnings); + public: /** * Main wallet lock. @@ -1126,7 +1133,7 @@ public: CAmount GetChange(const CTransaction& tx) const; void chainStateFlushed(const CBlockLocator& loc) override; - DBErrors LoadWallet(bool& fFirstRunRet); + DBErrors LoadWallet(); DBErrors ZapSelectTx(std::vector<uint256>& vHashIn, std::vector<uint256>& vHashOut) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet); bool SetAddressBook(const CTxDestination& address, const std::string& strName, const std::string& purpose); @@ -1202,7 +1209,7 @@ public: bool MarkReplaced(const uint256& originalHash, const uint256& newHash); /* Initializes the wallet, returns a new CWallet instance or a null pointer in case of an error */ - static std::shared_ptr<CWallet> Create(interfaces::Chain& chain, const std::string& name, std::unique_ptr<WalletDatabase> database, uint64_t wallet_creation_flags, bilingual_str& error, std::vector<bilingual_str>& warnings); + static std::shared_ptr<CWallet> Create(interfaces::Chain* chain, const std::string& name, std::unique_ptr<WalletDatabase> database, uint64_t wallet_creation_flags, bilingual_str& error, std::vector<bilingual_str>& warnings); /** * Wallet post-init setup diff --git a/src/wallet/wallettool.cpp b/src/wallet/wallettool.cpp index b2cb0bf479..50b6c9d29f 100644 --- a/src/wallet/wallettool.cpp +++ b/src/wallet/wallettool.cpp @@ -54,8 +54,7 @@ static std::shared_ptr<CWallet> MakeWallet(const std::string& name, const fs::pa std::shared_ptr<CWallet> wallet_instance{new CWallet(nullptr /* chain */, name, std::move(database)), WalletToolReleaseWallet}; DBErrors load_wallet_ret; try { - bool first_run; - load_wallet_ret = wallet_instance->LoadWallet(first_run); + load_wallet_ret = wallet_instance->LoadWallet(); } catch (const std::runtime_error&) { tfm::format(std::cerr, "Error loading %s. Is wallet being used by another process?\n", name); return nullptr; diff --git a/test/functional/rpc_net.py b/test/functional/rpc_net.py index 16d7958712..2a58f8b3f7 100755 --- a/test/functional/rpc_net.py +++ b/test/functional/rpc_net.py @@ -187,43 +187,54 @@ class NetTest(BitcoinTestFramework): def test_getnodeaddresses(self): self.log.info("Test getnodeaddresses") self.nodes[0].add_p2p_connection(P2PInterface()) + services = NODE_NETWORK | NODE_WITNESS - # Add some addresses to the Address Manager over RPC. Due to the way - # bucket and bucket position are calculated, some of these addresses - # will collide. + # Add an IPv6 address to the address manager. + ipv6_addr = "1233:3432:2434:2343:3234:2345:6546:4534" + self.nodes[0].addpeeraddress(address=ipv6_addr, port=8333) + + # Add 10,000 IPv4 addresses to the address manager. Due to the way bucket + # and bucket positions are calculated, some of these addresses will collide. imported_addrs = [] for i in range(10000): first_octet = i >> 8 second_octet = i % 256 - a = "{}.{}.1.1".format(first_octet, second_octet) # IPV4 + a = f"{first_octet}.{second_octet}.1.1" imported_addrs.append(a) self.nodes[0].addpeeraddress(a, 8333) - # Obtain addresses via rpc call and check they were ones sent in before. - # - # Maximum possible addresses in addrman is 10000, although actual - # number will usually be less due to bucket and bucket position - # collisions. - node_addresses = self.nodes[0].getnodeaddresses(0) + # Fetch the addresses via the RPC and test the results. + assert_equal(len(self.nodes[0].getnodeaddresses()), 1) # default count is 1 + assert_equal(len(self.nodes[0].getnodeaddresses(count=2)), 2) + assert_equal(len(self.nodes[0].getnodeaddresses(network="ipv4", count=8)), 8) + + # Maximum possible addresses in AddrMan is 10000. The actual number will + # usually be less due to bucket and bucket position collisions. + node_addresses = self.nodes[0].getnodeaddresses(0, "ipv4") assert_greater_than(len(node_addresses), 5000) assert_greater_than(10000, len(node_addresses)) for a in node_addresses: assert_greater_than(a["time"], 1527811200) # 1st June 2018 - assert_equal(a["services"], NODE_NETWORK | NODE_WITNESS) + assert_equal(a["services"], services) assert a["address"] in imported_addrs assert_equal(a["port"], 8333) assert_equal(a["network"], "ipv4") - node_addresses = self.nodes[0].getnodeaddresses(1) - assert_equal(len(node_addresses), 1) + # Test the IPv6 address. + res = self.nodes[0].getnodeaddresses(0, "ipv6") + assert_equal(len(res), 1) + assert_equal(res[0]["address"], ipv6_addr) + assert_equal(res[0]["network"], "ipv6") + assert_equal(res[0]["port"], 8333) + assert_equal(res[0]["services"], services) - assert_raises_rpc_error(-8, "Address count out of range", self.nodes[0].getnodeaddresses, -1) + # Test for the absence of onion and I2P addresses. + for network in ["onion", "i2p"]: + assert_equal(self.nodes[0].getnodeaddresses(0, network), []) - # addrman's size cannot be known reliably after insertion, as hash collisions may occur - # so only test that requesting a large number of addresses returns less than that - LARGE_REQUEST_COUNT = 10000 - node_addresses = self.nodes[0].getnodeaddresses(LARGE_REQUEST_COUNT) - assert_greater_than(LARGE_REQUEST_COUNT, len(node_addresses)) + # Test invalid arguments. + assert_raises_rpc_error(-8, "Address count out of range", self.nodes[0].getnodeaddresses, -1) + assert_raises_rpc_error(-8, "Network not recognized: Foo", self.nodes[0].getnodeaddresses, 1, "Foo") if __name__ == '__main__': |