aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am1
-rw-r--r--src/Makefile.qt.include5
-rw-r--r--src/Makefile.test.include2
-rw-r--r--src/addrman.h266
-rw-r--r--src/chainparamsseeds.h19
-rw-r--r--src/policy/packages.h34
-rw-r--r--src/qt/addressbookpage.cpp9
-rw-r--r--src/qt/android/.gitignore9
-rw-r--r--src/qt/bitcoin.cpp9
-rw-r--r--src/qt/bitcoingui.cpp60
-rw-r--r--src/qt/bitcoingui.h7
-rw-r--r--src/qt/bitcoinstrings.cpp9
-rw-r--r--src/qt/coincontroldialog.cpp9
-rw-r--r--src/qt/coincontroldialog.h3
-rw-r--r--src/qt/guiutil.cpp47
-rw-r--r--src/qt/guiutil.h25
-rw-r--r--src/qt/intro.cpp4
-rw-r--r--src/qt/locale/bitcoin_en.ts213
-rw-r--r--src/qt/locale/bitcoin_en.xlf2185
-rw-r--r--src/qt/optionsmodel.cpp3
-rw-r--r--src/qt/overviewpage.cpp15
-rw-r--r--src/qt/overviewpage.h5
-rw-r--r--src/qt/peertablemodel.cpp2
-rw-r--r--src/qt/peertablemodel.h26
-rw-r--r--src/qt/platformstyle.cpp27
-rw-r--r--src/qt/platformstyle.h7
-rw-r--r--src/qt/psbtoperationsdialog.cpp3
-rw-r--r--src/qt/qrimagewidget.cpp4
-rw-r--r--src/qt/recentrequeststablemodel.cpp9
-rw-r--r--src/qt/rpcconsole.cpp21
-rw-r--r--src/qt/rpcconsole.h1
-rw-r--r--src/qt/sendcoinsdialog.cpp3
-rw-r--r--src/qt/sendcoinsentry.cpp13
-rw-r--r--src/qt/sendcoinsentry.h3
-rw-r--r--src/qt/signverifymessagedialog.cpp16
-rw-r--r--src/qt/signverifymessagedialog.h1
-rw-r--r--src/qt/test/wallettests.cpp2
-rw-r--r--src/qt/transactiondesc.cpp14
-rw-r--r--src/qt/transactiontablemodel.cpp6
-rw-r--r--src/qt/transactionview.cpp22
-rw-r--r--src/qt/transactionview.h5
-rw-r--r--src/qt/walletcontroller.cpp3
-rw-r--r--src/qt/walletview.cpp4
-rw-r--r--src/rpc/rawtransaction.cpp130
-rw-r--r--src/test/fuzz/p2p_transport_deserializer.cpp43
-rw-r--r--src/test/fuzz/p2p_transport_serialization.cpp85
-rw-r--r--src/test/fuzz/tx_pool.cpp10
-rw-r--r--src/test/miner_tests.cpp3
-rw-r--r--src/test/txvalidation_tests.cpp98
-rw-r--r--src/test/util/setup_common.cpp7
-rw-r--r--src/test/util/setup_common.h4
-rw-r--r--src/txmempool.cpp18
-rw-r--r--src/txmempool.h10
-rw-r--r--src/validation.cpp171
-rw-r--r--src/validation.h64
-rw-r--r--src/wallet/load.cpp2
-rw-r--r--src/wallet/wallet.cpp4
57 files changed, 2220 insertions, 1560 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index f8442ac940..66cb7cec2a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -193,6 +193,7 @@ BITCOIN_CORE_H = \
outputtype.h \
policy/feerate.h \
policy/fees.h \
+ policy/packages.h \
policy/policy.h \
policy/rbf.h \
policy/settings.h \
diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include
index 30edb1e82d..9ad66bc85b 100644
--- a/src/Makefile.qt.include
+++ b/src/Makefile.qt.include
@@ -288,7 +288,7 @@ RES_ANIMATION = $(wildcard $(srcdir)/qt/res/animation/spinner-*.png)
BITCOIN_RC = qt/res/bitcoin-qt-res.rc
-BITCOIN_QT_INCLUDES = -DQT_NO_KEYWORDS
+BITCOIN_QT_INCLUDES = -DQT_NO_KEYWORDS -DQT_USE_QSTRINGBUILDER
qt_libbitcoinqt_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BITCOIN_QT_INCLUDES) \
$(QT_INCLUDES) $(QT_DBUS_INCLUDES) $(QR_CFLAGS)
@@ -382,7 +382,8 @@ bitcoin_qt_clean: FORCE
bitcoin_qt : qt/bitcoin-qt$(EXEEXT)
APK_LIB_DIR = qt/android/libs/$(ANDROID_ARCH)
-QT_BASE_PATH = $(shell find ../depends/sources/ -maxdepth 1 -type f -regex ".*qtbase.*\.tar.xz")
+QT_BASE_VERSION = $(lastword $(shell $(MOC) --version))
+QT_BASE_PATH = $(shell find ../depends/sources/ -maxdepth 1 -type f -regex ".*qtbase.*$(QT_BASE_VERSION)\.tar.xz")
QT_BASE_TLD = $(shell tar tf $(QT_BASE_PATH) --exclude='*/*')
bitcoin_qt_apk: FORCE
diff --git a/src/Makefile.test.include b/src/Makefile.test.include
index e5f9c4cb52..105d09f730 100644
--- a/src/Makefile.test.include
+++ b/src/Makefile.test.include
@@ -258,7 +258,7 @@ test_fuzz_fuzz_SOURCES = \
test/fuzz/netaddress.cpp \
test/fuzz/netbase_dns_lookup.cpp \
test/fuzz/node_eviction.cpp \
- test/fuzz/p2p_transport_deserializer.cpp \
+ test/fuzz/p2p_transport_serialization.cpp \
test/fuzz/parse_hd_keypath.cpp \
test/fuzz/parse_iso8601.cpp \
test/fuzz/parse_numbers.cpp \
diff --git a/src/addrman.h b/src/addrman.h
index eaedfd318c..41994288db 100644
--- a/src/addrman.h
+++ b/src/addrman.h
@@ -172,139 +172,6 @@ static const int64_t ADDRMAN_TEST_WINDOW = 40*60; // 40 minutes
*/
class CAddrMan
{
-friend class CAddrManTest;
-protected:
- //! critical section to protect the inner data structures
- mutable RecursiveMutex cs;
-
-private:
- //! Serialization versions.
- enum Format : uint8_t {
- V0_HISTORICAL = 0, //!< historic format, before commit e6b343d88
- V1_DETERMINISTIC = 1, //!< for pre-asmap files
- V2_ASMAP = 2, //!< for files including asmap version
- V3_BIP155 = 3, //!< same as V2_ASMAP plus addresses are in BIP155 format
- };
-
- //! The maximum format this software knows it can unserialize. Also, we always serialize
- //! in this format.
- //! The format (first byte in the serialized stream) can be higher than this and
- //! still this software may be able to unserialize the file - if the second byte
- //! (see `lowest_compatible` in `Unserialize()`) is less or equal to this.
- static constexpr Format FILE_FORMAT = Format::V3_BIP155;
-
- //! The initial value of a field that is incremented every time an incompatible format
- //! change is made (such that old software versions would not be able to parse and
- //! understand the new file format). This is 32 because we overtook the "key size"
- //! field which was 32 historically.
- //! @note Don't increment this. Increment `lowest_compatible` in `Serialize()` instead.
- static constexpr uint8_t INCOMPATIBILITY_BASE = 32;
-
- //! last used nId
- int nIdCount GUARDED_BY(cs);
-
- //! table with information about all nIds
- std::map<int, CAddrInfo> mapInfo GUARDED_BY(cs);
-
- //! find an nId based on its network address
- std::map<CNetAddr, int> mapAddr GUARDED_BY(cs);
-
- //! randomly-ordered vector of all nIds
- std::vector<int> vRandom GUARDED_BY(cs);
-
- // number of "tried" entries
- int nTried GUARDED_BY(cs);
-
- //! list of "tried" buckets
- int vvTried[ADDRMAN_TRIED_BUCKET_COUNT][ADDRMAN_BUCKET_SIZE] GUARDED_BY(cs);
-
- //! number of (unique) "new" entries
- int nNew GUARDED_BY(cs);
-
- //! list of "new" buckets
- int vvNew[ADDRMAN_NEW_BUCKET_COUNT][ADDRMAN_BUCKET_SIZE] GUARDED_BY(cs);
-
- //! last time Good was called (memory only)
- int64_t nLastGood GUARDED_BY(cs);
-
- //! Holds addrs inserted into tried table that collide with existing entries. Test-before-evict discipline used to resolve these collisions.
- std::set<int> m_tried_collisions;
-
-protected:
- //! secret key to randomize bucket select with
- uint256 nKey;
-
- //! Source of random numbers for randomization in inner loops
- FastRandomContext insecure_rand;
-
- //! Find an entry.
- CAddrInfo* Find(const CNetAddr& addr, int *pnId = nullptr) EXCLUSIVE_LOCKS_REQUIRED(cs);
-
- //! find an entry, creating it if necessary.
- //! nTime and nServices of the found node are updated, if necessary.
- CAddrInfo* Create(const CAddress &addr, const CNetAddr &addrSource, int *pnId = nullptr) EXCLUSIVE_LOCKS_REQUIRED(cs);
-
- //! Swap two elements in vRandom.
- void SwapRandom(unsigned int nRandomPos1, unsigned int nRandomPos2) EXCLUSIVE_LOCKS_REQUIRED(cs);
-
- //! Move an entry from the "new" table(s) to the "tried" table
- void MakeTried(CAddrInfo& info, int nId) EXCLUSIVE_LOCKS_REQUIRED(cs);
-
- //! Delete an entry. It must not be in tried, and have refcount 0.
- void Delete(int nId) EXCLUSIVE_LOCKS_REQUIRED(cs);
-
- //! Clear a position in a "new" table. This is the only place where entries are actually deleted.
- void ClearNew(int nUBucket, int nUBucketPos) EXCLUSIVE_LOCKS_REQUIRED(cs);
-
- //! Mark an entry "good", possibly moving it from "new" to "tried".
- void Good_(const CService &addr, bool test_before_evict, int64_t time) EXCLUSIVE_LOCKS_REQUIRED(cs);
-
- //! Add an entry to the "new" table.
- bool Add_(const CAddress &addr, const CNetAddr& source, int64_t nTimePenalty) EXCLUSIVE_LOCKS_REQUIRED(cs);
-
- //! Mark an entry as attempted to connect.
- void Attempt_(const CService &addr, bool fCountFailure, int64_t nTime) EXCLUSIVE_LOCKS_REQUIRED(cs);
-
- //! Select an address to connect to, if newOnly is set to true, only the new table is selected from.
- CAddrInfo Select_(bool newOnly) EXCLUSIVE_LOCKS_REQUIRED(cs);
-
- //! See if any to-be-evicted tried table entries have been tested and if so resolve the collisions.
- void ResolveCollisions_() EXCLUSIVE_LOCKS_REQUIRED(cs);
-
- //! Return a random to-be-evicted tried table address.
- CAddrInfo SelectTriedCollision_() EXCLUSIVE_LOCKS_REQUIRED(cs);
-
-#ifdef DEBUG_ADDRMAN
- //! Perform consistency check. Returns an error code or zero.
- int Check_() EXCLUSIVE_LOCKS_REQUIRED(cs);
-#endif
-
- /**
- * 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()
- * decisions and gossiped to peers. Callers should be careful that updating
- * this information doesn't leak topology information to network spies.
- *
- * net_processing calls this function when it *disconnects* from a peer to
- * not leak information about currently connected peers.
- *
- * @param[in] addr The address of the peer we were connected to
- * @param[in] nTime The time that we were last connected to this peer
- */
- void Connected_(const CService& addr, int64_t nTime) EXCLUSIVE_LOCKS_REQUIRED(cs);
-
- //! Update an entry's service bits.
- void SetServices_(const CService &addr, ServiceFlags nServices) EXCLUSIVE_LOCKS_REQUIRED(cs);
-
public:
// Compressed IP->ASN mapping, loaded from a file when a node starts.
// Should be always empty if no file was provided.
@@ -325,7 +192,6 @@ public:
// Read asmap from provided binary file
static std::vector<bool> DecodeAsmap(fs::path path);
-
/**
* Serialized format.
* * format version byte (@see `Format`)
@@ -759,6 +625,138 @@ public:
Check();
}
+protected:
+ //! secret key to randomize bucket select with
+ uint256 nKey;
+
+ //! Source of random numbers for randomization in inner loops
+ FastRandomContext insecure_rand;
+
+private:
+ //! critical section to protect the inner data structures
+ mutable RecursiveMutex cs;
+
+ //! Serialization versions.
+ enum Format : uint8_t {
+ V0_HISTORICAL = 0, //!< historic format, before commit e6b343d88
+ V1_DETERMINISTIC = 1, //!< for pre-asmap files
+ V2_ASMAP = 2, //!< for files including asmap version
+ V3_BIP155 = 3, //!< same as V2_ASMAP plus addresses are in BIP155 format
+ };
+
+ //! The maximum format this software knows it can unserialize. Also, we always serialize
+ //! in this format.
+ //! The format (first byte in the serialized stream) can be higher than this and
+ //! still this software may be able to unserialize the file - if the second byte
+ //! (see `lowest_compatible` in `Unserialize()`) is less or equal to this.
+ static constexpr Format FILE_FORMAT = Format::V3_BIP155;
+
+ //! The initial value of a field that is incremented every time an incompatible format
+ //! change is made (such that old software versions would not be able to parse and
+ //! understand the new file format). This is 32 because we overtook the "key size"
+ //! field which was 32 historically.
+ //! @note Don't increment this. Increment `lowest_compatible` in `Serialize()` instead.
+ static constexpr uint8_t INCOMPATIBILITY_BASE = 32;
+
+ //! last used nId
+ int nIdCount GUARDED_BY(cs);
+
+ //! table with information about all nIds
+ std::map<int, CAddrInfo> mapInfo GUARDED_BY(cs);
+
+ //! find an nId based on its network address
+ std::map<CNetAddr, int> mapAddr GUARDED_BY(cs);
+
+ //! randomly-ordered vector of all nIds
+ std::vector<int> vRandom GUARDED_BY(cs);
+
+ // number of "tried" entries
+ int nTried GUARDED_BY(cs);
+
+ //! list of "tried" buckets
+ int vvTried[ADDRMAN_TRIED_BUCKET_COUNT][ADDRMAN_BUCKET_SIZE] GUARDED_BY(cs);
+
+ //! number of (unique) "new" entries
+ int nNew GUARDED_BY(cs);
+
+ //! list of "new" buckets
+ int vvNew[ADDRMAN_NEW_BUCKET_COUNT][ADDRMAN_BUCKET_SIZE] GUARDED_BY(cs);
+
+ //! last time Good was called (memory only)
+ int64_t nLastGood GUARDED_BY(cs);
+
+ //! Holds addrs inserted into tried table that collide with existing entries. Test-before-evict discipline used to resolve these collisions.
+ std::set<int> m_tried_collisions;
+
+ //! Find an entry.
+ CAddrInfo* Find(const CNetAddr& addr, int *pnId = nullptr) EXCLUSIVE_LOCKS_REQUIRED(cs);
+
+ //! find an entry, creating it if necessary.
+ //! nTime and nServices of the found node are updated, if necessary.
+ CAddrInfo* Create(const CAddress &addr, const CNetAddr &addrSource, int *pnId = nullptr) EXCLUSIVE_LOCKS_REQUIRED(cs);
+
+ //! Swap two elements in vRandom.
+ void SwapRandom(unsigned int nRandomPos1, unsigned int nRandomPos2) EXCLUSIVE_LOCKS_REQUIRED(cs);
+
+ //! Move an entry from the "new" table(s) to the "tried" table
+ void MakeTried(CAddrInfo& info, int nId) EXCLUSIVE_LOCKS_REQUIRED(cs);
+
+ //! Delete an entry. It must not be in tried, and have refcount 0.
+ void Delete(int nId) EXCLUSIVE_LOCKS_REQUIRED(cs);
+
+ //! Clear a position in a "new" table. This is the only place where entries are actually deleted.
+ void ClearNew(int nUBucket, int nUBucketPos) EXCLUSIVE_LOCKS_REQUIRED(cs);
+
+ //! Mark an entry "good", possibly moving it from "new" to "tried".
+ void Good_(const CService &addr, bool test_before_evict, int64_t time) EXCLUSIVE_LOCKS_REQUIRED(cs);
+
+ //! Add an entry to the "new" table.
+ bool Add_(const CAddress &addr, const CNetAddr& source, int64_t nTimePenalty) EXCLUSIVE_LOCKS_REQUIRED(cs);
+
+ //! Mark an entry as attempted to connect.
+ void Attempt_(const CService &addr, bool fCountFailure, int64_t nTime) EXCLUSIVE_LOCKS_REQUIRED(cs);
+
+ //! Select an address to connect to, if newOnly is set to true, only the new table is selected from.
+ CAddrInfo Select_(bool newOnly) EXCLUSIVE_LOCKS_REQUIRED(cs);
+
+ //! See if any to-be-evicted tried table entries have been tested and if so resolve the collisions.
+ void ResolveCollisions_() EXCLUSIVE_LOCKS_REQUIRED(cs);
+
+ //! Return a random to-be-evicted tried table address.
+ CAddrInfo SelectTriedCollision_() EXCLUSIVE_LOCKS_REQUIRED(cs);
+
+#ifdef DEBUG_ADDRMAN
+ //! Perform consistency check. Returns an error code or zero.
+ int Check_() EXCLUSIVE_LOCKS_REQUIRED(cs);
+#endif
+
+ /**
+ * 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()
+ * decisions and gossiped to peers. Callers should be careful that updating
+ * this information doesn't leak topology information to network spies.
+ *
+ * net_processing calls this function when it *disconnects* from a peer to
+ * not leak information about currently connected peers.
+ *
+ * @param[in] addr The address of the peer we were connected to
+ * @param[in] nTime The time that we were last connected to this peer
+ */
+ void Connected_(const CService& addr, int64_t nTime) EXCLUSIVE_LOCKS_REQUIRED(cs);
+
+ //! Update an entry's service bits.
+ void SetServices_(const CService &addr, ServiceFlags nServices) EXCLUSIVE_LOCKS_REQUIRED(cs);
+
+ friend class CAddrManTest;
};
#endif // BITCOIN_ADDRMAN_H
diff --git a/src/chainparamsseeds.h b/src/chainparamsseeds.h
index 2e31daea83..994d420885 100644
--- a/src/chainparamsseeds.h
+++ b/src/chainparamsseeds.h
@@ -1206,12 +1206,17 @@ static const uint8_t chainparams_seed_main[] = {
};
static const uint8_t chainparams_seed_test[] = {
- 0x03,0x0a,0x99,0xcb,0x26,0x31,0xba,0x48,0x51,0x31,0x39,0x0d,0x47,0x9d,
- 0x03,0x0a,0x44,0xf4,0xf4,0xf0,0xbf,0xf7,0x7e,0x6d,0xc4,0xe8,0x47,0x9d,
- 0x03,0x0a,0x6a,0x8b,0xd2,0x78,0x3f,0x7a,0xf8,0x92,0x8f,0x80,0x47,0x9d,
- 0x03,0x0a,0xe6,0x4e,0xa4,0x47,0x4e,0x2a,0xfe,0xe8,0x95,0xcc,0x47,0x9d,
- 0x03,0x0a,0x9f,0xae,0x9f,0x59,0x0b,0x3f,0x31,0x3a,0x8a,0x5f,0x47,0x9d,
- 0x03,0x0a,0x47,0xb1,0xe4,0x55,0xd1,0xb0,0x14,0x3f,0xb6,0xdb,0x47,0x9d,
- 0x03,0x0a,0xa0,0x60,0x9e,0x46,0x54,0xdb,0x61,0x3b,0xb2,0x6f,0x47,0x9d,
+ 0x04,0x20,0xdf,0x55,0xaa,0x83,0xd5,0xc5,0xb8,0xe7,0x75,0x78,0xd4,0x29,0x51,0x4b,0x26,0x1c,0x23,0xdf,0x28,0x4d,0x29,0x85,0x07,0xb5,0xe2,0x29,0x69,0x3e,0x25,0xbb,0x61,0xcf,0x47,0x9d,
+ 0x04,0x20,0x0a,0xdd,0xa2,0x48,0xb5,0x56,0xa3,0x1f,0xca,0x3c,0x4c,0x9e,0xca,0x6e,0xb3,0xd5,0x5e,0x68,0xf6,0x28,0x31,0x57,0x24,0xfb,0x9d,0x2b,0x55,0x4f,0xd7,0x90,0x62,0xd3,0x47,0x9d,
+ 0x04,0x20,0x2d,0x04,0xa1,0x4a,0xd4,0x7c,0x7b,0x16,0x2e,0xb7,0xd2,0xa1,0x08,0xc5,0xd2,0xbd,0x53,0x87,0x34,0xdc,0x38,0x26,0xca,0x56,0xf2,0xac,0xc5,0x62,0x70,0x72,0x3f,0x63,0x47,0x9d,
+ 0x04,0x20,0x30,0x57,0x85,0xe0,0x02,0x4a,0xd1,0x31,0xeb,0x16,0x1b,0x1d,0xa8,0x43,0x0b,0xb4,0xc6,0xac,0x7d,0x46,0x24,0x0b,0x55,0x9d,0x16,0xe6,0x46,0x03,0x72,0xfe,0xd4,0xef,0x47,0x9d,
+ 0x04,0x20,0x36,0x6c,0xf1,0xd2,0xbb,0xda,0xff,0x8c,0x93,0x61,0x10,0xf2,0x9d,0xa1,0xa4,0x0a,0x30,0x9b,0x0c,0x69,0x6d,0xaa,0xd4,0x9c,0xfd,0xb5,0x5b,0x5e,0x30,0x9f,0xf3,0x13,0x47,0x9d,
+ 0x04,0x20,0x3e,0xe2,0xf3,0xe5,0xc5,0xbe,0x61,0xdd,0x4c,0x3e,0xdb,0x0d,0xd2,0xf9,0x42,0xe3,0x31,0xb2,0xa8,0x51,0x31,0xf6,0xce,0xc2,0x38,0x20,0x27,0x39,0x73,0x68,0x5a,0x42,0x47,0x9d,
+ 0x04,0x20,0x51,0x79,0x05,0x9c,0x8a,0xdf,0x03,0xb5,0x1b,0x17,0xc3,0x86,0xb6,0x54,0xcc,0xe0,0x6e,0x58,0xa6,0x41,0x4c,0xcc,0x0c,0x60,0x08,0xa6,0x0f,0x1d,0x11,0xd8,0x29,0xa6,0x47,0x9d,
+ 0x04,0x20,0x60,0xbe,0xae,0x7d,0xa3,0x4d,0x6a,0x71,0x1a,0x5d,0xe5,0x98,0x9c,0xde,0xa0,0x99,0x39,0x19,0xd3,0x01,0x0a,0x5d,0x1c,0x21,0x43,0x94,0x92,0x71,0x5d,0x77,0xd7,0xdf,0x47,0x9d,
+ 0x04,0x20,0x64,0x4e,0x86,0xa1,0x02,0xa1,0x8a,0xef,0xb0,0xd1,0xb5,0x77,0x69,0xb9,0x6a,0xdc,0xdf,0x35,0x8a,0xda,0xa4,0x3e,0x83,0xfa,0x50,0xe6,0xca,0x0e,0x2b,0x99,0x0a,0x17,0x47,0x9d,
+ 0x04,0x20,0xa2,0x28,0x3c,0x5a,0x5b,0x82,0x32,0x66,0x11,0xe5,0x71,0xff,0x6b,0x25,0x92,0x75,0xdd,0x7a,0x4f,0x90,0x8b,0x1d,0x34,0xa4,0xf1,0x6e,0xb9,0xfb,0xb5,0x2e,0x7c,0x7f,0x47,0x9d,
+ 0x04,0x20,0xc8,0xb5,0x6a,0xba,0x02,0x26,0x45,0x12,0xfb,0x93,0x8a,0x51,0xe4,0xb0,0xf3,0x94,0xb7,0xc0,0x74,0x72,0xeb,0x67,0x91,0x9e,0x04,0x36,0x6a,0x4b,0xef,0x0d,0x88,0xfe,0x47,0x9d,
+ 0x04,0x20,0xc8,0xfa,0xcd,0x8c,0xc3,0x6f,0x3c,0xd0,0x27,0x7e,0x7d,0xeb,0x51,0x01,0x65,0xb6,0x9e,0x02,0x09,0x64,0xf4,0x87,0x78,0x7b,0x8f,0x9d,0xaf,0x3b,0xa5,0xcc,0x56,0x2c,0x47,0x9d,
};
#endif // BITCOIN_CHAINPARAMSSEEDS_H
diff --git a/src/policy/packages.h b/src/policy/packages.h
new file mode 100644
index 0000000000..4b1463dcb3
--- /dev/null
+++ b/src/policy/packages.h
@@ -0,0 +1,34 @@
+// Copyright (c) 2021 The Bitcoin Core developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#ifndef BITCOIN_POLICY_PACKAGES_H
+#define BITCOIN_POLICY_PACKAGES_H
+
+#include <consensus/validation.h>
+#include <primitives/transaction.h>
+
+#include <vector>
+
+/** Default maximum number of transactions in a package. */
+static constexpr uint32_t MAX_PACKAGE_COUNT{25};
+/** Default maximum total virtual size of transactions in a package in KvB. */
+static constexpr uint32_t MAX_PACKAGE_SIZE{101};
+
+/** A "reason" why a package was invalid. It may be that one or more of the included
+ * transactions is invalid or the package itself violates our rules.
+ * We don't distinguish between consensus and policy violations right now.
+ */
+enum class PackageValidationResult {
+ PCKG_RESULT_UNSET = 0, //!< Initial value. The package has not yet been rejected.
+ PCKG_POLICY, //!< The package itself is invalid (e.g. too many transactions).
+ PCKG_TX, //!< At least one tx is invalid.
+};
+
+/** A package is an ordered list of transactions. The transactions cannot conflict with (spend the
+ * same inputs as) one another. */
+using Package = std::vector<CTransactionRef>;
+
+class PackageValidationState : public ValidationState<PackageValidationResult> {};
+
+#endif // BITCOIN_POLICY_PACKAGES_H
diff --git a/src/qt/addressbookpage.cpp b/src/qt/addressbookpage.cpp
index a816a0764c..7024fc7654 100644
--- a/src/qt/addressbookpage.cpp
+++ b/src/qt/addressbookpage.cpp
@@ -281,7 +281,9 @@ void AddressBookPage::on_exportButton_clicked()
// CSV is currently the only supported format
QString filename = GUIUtil::getSaveFileName(this,
tr("Export Address List"), QString(),
- tr("Comma separated file", "Name of CSV file format") + QLatin1String(" (*.csv)"), nullptr);
+ /*: Expanded name of the CSV file format.
+ See https://en.wikipedia.org/wiki/Comma-separated_values */
+ tr("Comma separated file") + QLatin1String(" (*.csv)"), nullptr);
if (filename.isNull())
return;
@@ -295,8 +297,9 @@ void AddressBookPage::on_exportButton_clicked()
if(!writer.write()) {
QMessageBox::critical(this, tr("Exporting Failed"),
- //: %1 is a name of the file (e.g., "addrbook.csv") that the bitcoin addresses were exported to.
- tr("There was an error trying to save the address list to %1. Please try again.", "An error message.").arg(filename));
+ /*: An error message. %1 is a stand-in argument for the name
+ of the file we attempted to save to. */
+ tr("There was an error trying to save the address list to %1. Please try again.").arg(filename));
}
}
diff --git a/src/qt/android/.gitignore b/src/qt/android/.gitignore
new file mode 100644
index 0000000000..74cf42f934
--- /dev/null
+++ b/src/qt/android/.gitignore
@@ -0,0 +1,9 @@
+/.gradle
+/build
+/gradle/wrapper
+/gradlew*
+/libs
+/res/layout
+/res/values*
+/src/org/kde
+/src/org/qtproject
diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp
index dffdd5158b..69948402d0 100644
--- a/src/qt/bitcoin.cpp
+++ b/src/qt/bitcoin.cpp
@@ -50,7 +50,6 @@
#include <QLocale>
#include <QMessageBox>
#include <QSettings>
-#include <QStringBuilder>
#include <QThread>
#include <QTimer>
#include <QTranslator>
@@ -419,8 +418,8 @@ void BitcoinApplication::handleRunawayException(const QString &message)
{
QMessageBox::critical(
nullptr, tr("Runaway exception"),
- tr("A fatal error occurred. %1 can no longer continue safely and will quit.").arg(PACKAGE_NAME) %
- QLatin1String("<br><br>") % GUIUtil::MakeHtmlLink(message, PACKAGE_BUGREPORT));
+ tr("A fatal error occurred. %1 can no longer continue safely and will quit.").arg(PACKAGE_NAME) +
+ QLatin1String("<br><br>") + GUIUtil::MakeHtmlLink(message, PACKAGE_BUGREPORT));
::exit(EXIT_FAILURE);
}
@@ -430,8 +429,8 @@ void BitcoinApplication::handleNonFatalException(const QString& message)
QMessageBox::warning(
nullptr, tr("Internal error"),
tr("An internal error occurred. %1 will attempt to continue safely. This is "
- "an unexpected bug which can be reported as described below.").arg(PACKAGE_NAME) %
- QLatin1String("<br><br>") % GUIUtil::MakeHtmlLink(message, PACKAGE_BUGREPORT));
+ "an unexpected bug which can be reported as described below.").arg(PACKAGE_NAME) +
+ QLatin1String("<br><br>") + GUIUtil::MakeHtmlLink(message, PACKAGE_BUGREPORT));
}
WId BitcoinApplication::getMainWinId() const
diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp
index 17fffe2087..100022bac1 100644
--- a/src/qt/bitcoingui.cpp
+++ b/src/qt/bitcoingui.cpp
@@ -150,11 +150,11 @@ BitcoinGUI::BitcoinGUI(interfaces::Node& node, const PlatformStyle *_platformSty
frameBlocksLayout->setContentsMargins(3,0,3,0);
frameBlocksLayout->setSpacing(3);
unitDisplayControl = new UnitDisplayStatusBarControl(platformStyle);
- labelWalletEncryptionIcon = new QLabel();
- labelWalletHDStatusIcon = new QLabel();
- labelProxyIcon = new GUIUtil::ClickableLabel();
- connectionsControl = new GUIUtil::ClickableLabel();
- labelBlocksIcon = new GUIUtil::ClickableLabel();
+ labelWalletEncryptionIcon = new GUIUtil::ThemedLabel(platformStyle);
+ labelWalletHDStatusIcon = new GUIUtil::ThemedLabel(platformStyle);
+ labelProxyIcon = new GUIUtil::ClickableLabel(platformStyle);
+ connectionsControl = new GUIUtil::ClickableLabel(platformStyle);
+ labelBlocksIcon = new GUIUtil::ClickableLabel(platformStyle);
if(enableWallet)
{
frameBlocksLayout->addStretch();
@@ -925,7 +925,7 @@ void BitcoinGUI::updateNetworkState()
tooltip = QString("<nobr>") + tooltip + QString("</nobr>");
connectionsControl->setToolTip(tooltip);
- connectionsControl->setPixmap(platformStyle->SingleColorIcon(icon).pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE));
+ connectionsControl->setThemedPixmap(icon, STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE);
}
void BitcoinGUI::setNumConnections(int count)
@@ -1021,7 +1021,7 @@ void BitcoinGUI::setNumBlocks(int count, const QDateTime& blockDate, double nVer
// Set icon state: spinning if catching up, tick otherwise
if (secs < MAX_BLOCK_TIME_GAP) {
tooltip = tr("Up to date") + QString(".<br>") + tooltip;
- labelBlocksIcon->setPixmap(platformStyle->SingleColorIcon(":/icons/synced").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
+ labelBlocksIcon->setThemedPixmap(QStringLiteral(":/icons/synced"), STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE);
#ifdef ENABLE_WALLET
if(walletFrame)
@@ -1047,9 +1047,9 @@ void BitcoinGUI::setNumBlocks(int count, const QDateTime& blockDate, double nVer
tooltip = tr("Catching up…") + QString("<br>") + tooltip;
if(count != prevBlocks)
{
- labelBlocksIcon->setPixmap(platformStyle->SingleColorIcon(QString(
- ":/animation/spinner-%1").arg(spinnerFrame, 3, 10, QChar('0')))
- .pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
+ labelBlocksIcon->setThemedPixmap(
+ QString(":/animation/spinner-%1").arg(spinnerFrame, 3, 10, QChar('0')),
+ STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE);
spinnerFrame = (spinnerFrame + 1) % SPINNER_FRAMES;
}
prevBlocks = count;
@@ -1138,7 +1138,17 @@ void BitcoinGUI::message(const QString& title, QString message, unsigned int sty
void BitcoinGUI::changeEvent(QEvent *e)
{
+#ifdef Q_OS_MACOS
+ if (e->type() == QEvent::PaletteChange) {
+ overviewAction->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/overview")));
+ sendCoinsAction->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/send")));
+ receiveCoinsAction->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/receiving_addresses")));
+ historyAction->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/history")));
+ }
+#endif
+
QMainWindow::changeEvent(e);
+
#ifndef Q_OS_MAC // Ignored on Mac
if(e->type() == QEvent::WindowStateChange)
{
@@ -1256,7 +1266,7 @@ bool BitcoinGUI::handlePaymentRequest(const SendCoinsRecipient& recipient)
void BitcoinGUI::setHDStatus(bool privkeyDisabled, int hdEnabled)
{
- labelWalletHDStatusIcon->setPixmap(platformStyle->SingleColorIcon(privkeyDisabled ? ":/icons/eye" : hdEnabled ? ":/icons/hd_enabled" : ":/icons/hd_disabled").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE));
+ labelWalletHDStatusIcon->setThemedPixmap(privkeyDisabled ? QStringLiteral(":/icons/eye") : hdEnabled ? QStringLiteral(":/icons/hd_enabled") : QStringLiteral(":/icons/hd_disabled"), STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE);
labelWalletHDStatusIcon->setToolTip(privkeyDisabled ? tr("Private key <b>disabled</b>") : hdEnabled ? tr("HD key generation is <b>enabled</b>") : tr("HD key generation is <b>disabled</b>"));
labelWalletHDStatusIcon->show();
// eventually disable the QLabel to set its opacity to 50%
@@ -1275,7 +1285,7 @@ void BitcoinGUI::setEncryptionStatus(int status)
break;
case WalletModel::Unlocked:
labelWalletEncryptionIcon->show();
- labelWalletEncryptionIcon->setPixmap(platformStyle->SingleColorIcon(":/icons/lock_open").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE));
+ labelWalletEncryptionIcon->setThemedPixmap(QStringLiteral(":/icons/lock_open"), STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE);
labelWalletEncryptionIcon->setToolTip(tr("Wallet is <b>encrypted</b> and currently <b>unlocked</b>"));
encryptWalletAction->setChecked(true);
changePassphraseAction->setEnabled(true);
@@ -1283,7 +1293,7 @@ void BitcoinGUI::setEncryptionStatus(int status)
break;
case WalletModel::Locked:
labelWalletEncryptionIcon->show();
- labelWalletEncryptionIcon->setPixmap(platformStyle->SingleColorIcon(":/icons/lock_closed").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE));
+ labelWalletEncryptionIcon->setThemedPixmap(QStringLiteral(":/icons/lock_closed"), STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE);
labelWalletEncryptionIcon->setToolTip(tr("Wallet is <b>encrypted</b> and currently <b>locked</b>"));
encryptWalletAction->setChecked(true);
changePassphraseAction->setEnabled(true);
@@ -1315,7 +1325,7 @@ void BitcoinGUI::updateProxyIcon()
if (proxy_enabled) {
if (!GUIUtil::HasPixmap(labelProxyIcon)) {
QString ip_port_q = QString::fromStdString(ip_port);
- labelProxyIcon->setPixmap(platformStyle->SingleColorIcon(":/icons/proxy").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
+ labelProxyIcon->setThemedPixmap((":/icons/proxy"), STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE);
labelProxyIcon->setToolTip(tr("Proxy is <b>enabled</b>: %1").arg(ip_port_q));
} else {
labelProxyIcon->show();
@@ -1375,7 +1385,6 @@ void BitcoinGUI::showProgress(const QString &title, int nProgress)
progressDialog = new QProgressDialog(title, QString(), 0, 100);
GUIUtil::PolishProgressDialog(progressDialog);
progressDialog->setWindowModality(Qt::ApplicationModal);
- progressDialog->setMinimumDuration(0);
progressDialog->setAutoClose(false);
progressDialog->setValue(0);
} else if (nProgress == 100) {
@@ -1440,9 +1449,10 @@ bool BitcoinGUI::isPrivacyModeActivated() const
return m_mask_values_action->isChecked();
}
-UnitDisplayStatusBarControl::UnitDisplayStatusBarControl(const PlatformStyle *platformStyle) :
- optionsModel(nullptr),
- menu(nullptr)
+UnitDisplayStatusBarControl::UnitDisplayStatusBarControl(const PlatformStyle *platformStyle)
+ : optionsModel(nullptr),
+ menu(nullptr),
+ m_platform_style{platformStyle}
{
createContextMenu();
setToolTip(tr("Unit to show amounts in. Click to select another unit."));
@@ -1455,7 +1465,7 @@ UnitDisplayStatusBarControl::UnitDisplayStatusBarControl(const PlatformStyle *pl
}
setMinimumSize(max_width, 0);
setAlignment(Qt::AlignRight | Qt::AlignVCenter);
- setStyleSheet(QString("QLabel { color : %1 }").arg(platformStyle->SingleColor().name()));
+ setStyleSheet(QString("QLabel { color : %1 }").arg(m_platform_style->SingleColor().name()));
}
/** So that it responds to button clicks */
@@ -1464,6 +1474,18 @@ void UnitDisplayStatusBarControl::mousePressEvent(QMouseEvent *event)
onDisplayUnitsClicked(event->pos());
}
+void UnitDisplayStatusBarControl::changeEvent(QEvent* e)
+{
+#ifdef Q_OS_MACOS
+ if (e->type() == QEvent::PaletteChange) {
+ QString style = QString("QLabel { color : %1 }").arg(m_platform_style->SingleColor().name());
+ if (style != styleSheet()) {
+ setStyleSheet(style);
+ }
+ }
+#endif
+}
+
/** Creates context menu, its actions, and wires up all the relevant signals for mouse events. */
void UnitDisplayStatusBarControl::createContextMenu()
{
diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h
index 147f19e68d..65c5331d32 100644
--- a/src/qt/bitcoingui.h
+++ b/src/qt/bitcoingui.h
@@ -9,6 +9,7 @@
#include <config/bitcoin-config.h>
#endif
+#include <qt/guiutil.h>
#include <qt/optionsdialog.h>
#include <amount.h>
@@ -121,8 +122,8 @@ private:
WalletFrame* walletFrame = nullptr;
UnitDisplayStatusBarControl* unitDisplayControl = nullptr;
- QLabel* labelWalletEncryptionIcon = nullptr;
- QLabel* labelWalletHDStatusIcon = nullptr;
+ GUIUtil::ThemedLabel* labelWalletEncryptionIcon = nullptr;
+ GUIUtil::ThemedLabel* labelWalletHDStatusIcon = nullptr;
GUIUtil::ClickableLabel* labelProxyIcon = nullptr;
GUIUtil::ClickableLabel* connectionsControl = nullptr;
GUIUtil::ClickableLabel* labelBlocksIcon = nullptr;
@@ -333,10 +334,12 @@ public:
protected:
/** So that it responds to left-button clicks */
void mousePressEvent(QMouseEvent *event) override;
+ void changeEvent(QEvent* e) override;
private:
OptionsModel *optionsModel;
QMenu* menu;
+ const PlatformStyle* m_platform_style;
/** Shows context menu with Display Unit options by the mouse coordinates */
void onDisplayUnitsClicked(const QPoint& point);
diff --git a/src/qt/bitcoinstrings.cpp b/src/qt/bitcoinstrings.cpp
index dd4df44ed9..bff253e58a 100644
--- a/src/qt/bitcoinstrings.cpp
+++ b/src/qt/bitcoinstrings.cpp
@@ -75,12 +75,6 @@ QT_TRANSLATE_NOOP("bitcoin-core", ""
"Prune: last wallet synchronisation goes beyond pruned data. You need to -"
"reindex (download the whole blockchain again in case of pruned node)"),
QT_TRANSLATE_NOOP("bitcoin-core", ""
-"SQLiteDatabase: Failed to prepare the statement to fetch sqlite wallet "
-"schema version: %s"),
-QT_TRANSLATE_NOOP("bitcoin-core", ""
-"SQLiteDatabase: Failed to prepare the statement to fetch the application id: "
-"%s"),
-QT_TRANSLATE_NOOP("bitcoin-core", ""
"SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is "
"supported"),
QT_TRANSLATE_NOOP("bitcoin-core", ""
@@ -201,8 +195,6 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Reducing -maxconnections from %d to %d, becau
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"),
QT_TRANSLATE_NOOP("bitcoin-core", "SQLiteDatabase: Failed to prepare statement to verify database: %s"),
QT_TRANSLATE_NOOP("bitcoin-core", "SQLiteDatabase: Failed to read database verification error: %s"),
QT_TRANSLATE_NOOP("bitcoin-core", "SQLiteDatabase: Unexpected application id. Expected %u, got %u"),
@@ -222,7 +214,6 @@ QT_TRANSLATE_NOOP("bitcoin-core", "This is the minimum transaction fee you pay o
QT_TRANSLATE_NOOP("bitcoin-core", "This is the transaction fee you will pay if you send a transaction."),
QT_TRANSLATE_NOOP("bitcoin-core", "Transaction amount too small"),
QT_TRANSLATE_NOOP("bitcoin-core", "Transaction amounts must not be negative"),
-QT_TRANSLATE_NOOP("bitcoin-core", "Transaction fee and change calculation failed"),
QT_TRANSLATE_NOOP("bitcoin-core", "Transaction has too long of a mempool chain"),
QT_TRANSLATE_NOOP("bitcoin-core", "Transaction must have at least one recipient"),
QT_TRANSLATE_NOOP("bitcoin-core", "Transaction too large"),
diff --git a/src/qt/coincontroldialog.cpp b/src/qt/coincontroldialog.cpp
index daea2f9cab..8ae0648141 100644
--- a/src/qt/coincontroldialog.cpp
+++ b/src/qt/coincontroldialog.cpp
@@ -562,6 +562,15 @@ void CoinControlDialog::updateLabels(CCoinControl& m_coin_control, WalletModel *
label->setVisible(nChange < 0);
}
+void CoinControlDialog::changeEvent(QEvent* e)
+{
+#ifdef Q_OS_MACOS
+ if (e->type() == QEvent::PaletteChange) {
+ updateView();
+ }
+#endif
+}
+
void CoinControlDialog::updateView()
{
if (!model || !model->getOptionsModel() || !model->getAddressTableModel())
diff --git a/src/qt/coincontroldialog.h b/src/qt/coincontroldialog.h
index 6ceb3de61d..3a03341c9e 100644
--- a/src/qt/coincontroldialog.h
+++ b/src/qt/coincontroldialog.h
@@ -51,6 +51,9 @@ public:
static QList<CAmount> payAmounts;
static bool fSubtractFeeFromAmount;
+protected:
+ void changeEvent(QEvent* e) override;
+
private:
Ui::CoinControlDialog *ui;
CCoinControl& m_coin_control;
diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp
index 0d73ea0ed0..393dca8ccd 100644
--- a/src/qt/guiutil.cpp
+++ b/src/qt/guiutil.cpp
@@ -6,6 +6,7 @@
#include <qt/bitcoinaddressvalidator.h>
#include <qt/bitcoinunits.h>
+#include <qt/platformstyle.h>
#include <qt/qvalidatedlineedit.h>
#include <qt/sendcoinsrecipient.h>
@@ -56,12 +57,12 @@
#include <QShortcut>
#include <QSize>
#include <QString>
-#include <QStringBuilder>
#include <QTextDocument> // for Qt::mightBeRichText
#include <QThread>
#include <QUrlQuery>
#include <QtGlobal>
+#include <cassert>
#include <chrono>
#if defined(Q_OS_MAC)
@@ -792,6 +793,40 @@ qreal calculateIdealFontSize(int width, const QString& text, QFont font, qreal m
return font_size;
}
+ThemedLabel::ThemedLabel(const PlatformStyle* platform_style, QWidget* parent)
+ : QLabel{parent}, m_platform_style{platform_style}
+{
+ assert(m_platform_style);
+}
+
+void ThemedLabel::setThemedPixmap(const QString& image_filename, int width, int height)
+{
+ m_image_filename = image_filename;
+ m_pixmap_width = width;
+ m_pixmap_height = height;
+ updateThemedPixmap();
+}
+
+void ThemedLabel::changeEvent(QEvent* e)
+{
+#ifdef Q_OS_MACOS
+ if (e->type() == QEvent::PaletteChange) {
+ updateThemedPixmap();
+ }
+#endif
+ QLabel::changeEvent(e);
+}
+
+void ThemedLabel::updateThemedPixmap()
+{
+ setPixmap(m_platform_style->SingleColorIcon(m_image_filename).pixmap(m_pixmap_width, m_pixmap_height));
+}
+
+ClickableLabel::ClickableLabel(const PlatformStyle* platform_style, QWidget* parent)
+ : ThemedLabel{platform_style, parent}
+{
+}
+
void ClickableLabel::mouseReleaseEvent(QMouseEvent *event)
{
Q_EMIT clicked(event->pos());
@@ -818,10 +853,12 @@ void PolishProgressDialog(QProgressDialog* dialog)
// Workaround for macOS-only Qt bug; see: QTBUG-65750, QTBUG-70357.
const int margin = TextWidth(dialog->fontMetrics(), ("X"));
dialog->resize(dialog->width() + 2 * margin, dialog->height());
- dialog->show();
-#else
- Q_UNUSED(dialog);
#endif
+ // QProgressDialog estimates the time the operation will take (based on time
+ // for steps), and only shows itself if that estimate is beyond minimumDuration.
+ // The default minimumDuration value is 4 seconds, and it could make users
+ // think that the GUI is frozen.
+ dialog->setMinimumDuration(0);
}
int TextWidth(const QFontMetrics& fm, const QString& text)
@@ -908,7 +945,7 @@ QString MakeHtmlLink(const QString& source, const QString& link)
{
return QString(source).replace(
link,
- QLatin1String("<a href=\"") % link % QLatin1String("\">") % link % QLatin1String("</a>"));
+ QLatin1String("<a href=\"") + link + QLatin1String("\">") + link + QLatin1String("</a>"));
}
void PrintSlotException(
diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h
index 9c2ad74e1e..06a3b63668 100644
--- a/src/qt/guiutil.h
+++ b/src/qt/guiutil.h
@@ -27,6 +27,7 @@
#include <chrono>
#include <utility>
+class PlatformStyle;
class QValidatedLineEdit;
class SendCoinsRecipient;
@@ -231,10 +232,32 @@ namespace GUIUtil
qreal calculateIdealFontSize(int width, const QString& text, QFont font, qreal minPointSize = 4, qreal startPointSize = 14);
- class ClickableLabel : public QLabel
+ class ThemedLabel : public QLabel
{
Q_OBJECT
+ public:
+ explicit ThemedLabel(const PlatformStyle* platform_style, QWidget* parent = nullptr);
+ void setThemedPixmap(const QString& image_filename, int width, int height);
+
+ protected:
+ void changeEvent(QEvent* e) override;
+
+ private:
+ const PlatformStyle* m_platform_style;
+ QString m_image_filename;
+ int m_pixmap_width;
+ int m_pixmap_height;
+ void updateThemedPixmap();
+ };
+
+ class ClickableLabel : public ThemedLabel
+ {
+ Q_OBJECT
+
+ public:
+ explicit ClickableLabel(const PlatformStyle* platform_style, QWidget* parent = nullptr);
+
Q_SIGNALS:
/** Emitted when the label is clicked. The relative mouse coordinates of the click are
* passed to the signal.
diff --git a/src/qt/intro.cpp b/src/qt/intro.cpp
index 15b14c35ec..a698a96857 100644
--- a/src/qt/intro.cpp
+++ b/src/qt/intro.cpp
@@ -385,7 +385,9 @@ void Intro::UpdatePruneLabels(bool prune_checked)
static constexpr uint64_t nPowTargetSpacing = 10 * 60; // from chainparams, which we don't have at this stage
static constexpr uint32_t expected_block_data_size = 2250000; // includes undo data
const uint64_t expected_backup_days = m_prune_target_gb * 1e9 / (uint64_t(expected_block_data_size) * 86400 / nPowTargetSpacing);
- ui->lblPruneSuffix->setText(tr("(sufficient to restore backups %n day(s) old)", "block chain pruning", expected_backup_days));
+ ui->lblPruneSuffix->setText(
+ //: Explanatory text on the capability of the current prune target.
+ tr("(sufficient to restore backups %n day(s) old)", "", expected_backup_days));
ui->sizeWarningLabel->setText(
tr("%1 will download and store a copy of the Bitcoin block chain.").arg(PACKAGE_NAME) + " " +
storageRequiresMsg.arg(m_required_space_gb) + " " +
diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts
index a911f8012e..13a4e3fd79 100644
--- a/src/qt/locale/bitcoin_en.ts
+++ b/src/qt/locale/bitcoin_en.ts
@@ -120,20 +120,19 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+1"/>
+ <location line="+3"/>
<source>Comma separated file</source>
- <comment>Name of CSV file format</comment>
+ <extracomment>Expanded name of the CSV file format. See https://en.wikipedia.org/wiki/Comma-separated_values</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+15"/>
+ <location line="+16"/>
<source>There was an error trying to save the address list to %1. Please try again.</source>
- <comment>An error message.</comment>
- <extracomment>%1 is a name of the file (e.g., &quot;addrbook.csv&quot;) that the bitcoin addresses were exported to.</extracomment>
+ <extracomment>An error message. %1 is a stand-in argument for the name of the file we attempted to save to.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-2"/>
+ <location line="-3"/>
<source>Exporting Failed</source>
<translation type="unfinished"></translation>
</message>
@@ -318,7 +317,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<context>
<name>BitcoinApplication</name>
<message>
- <location filename="../bitcoin.cpp" line="+421"/>
+ <location filename="../bitcoin.cpp" line="+420"/>
<source>Runaway exception</source>
<translation type="unfinished"></translation>
</message>
@@ -1336,9 +1335,9 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
- <location line="+7"/>
+ <location line="+9"/>
<source>(sufficient to restore backups %n day(s) old)</source>
- <comment>block chain pruning</comment>
+ <extracomment>Explanatory text on the capability of the current prune target.</extracomment>
<translation type="unfinished">
<numerusform></numerusform>
<numerusform></numerusform>
@@ -1355,7 +1354,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-142"/>
+ <location line="-144"/>
<source>Error: Specified data directory &quot;%1&quot; cannot be created.</source>
<translation type="unfinished"></translation>
</message>
@@ -1777,19 +1776,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+22"/>
<location line="+49"/>
- <source>111.11111111 BTC</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="-42"/>
- <location line="+49"/>
- <source>909.09090909 BTC</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="-29"/>
<source>closest matching &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
@@ -2047,9 +2034,9 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+1"/>
+ <location line="+2"/>
<source>Partially Signed Transaction (Binary)</source>
- <comment>Name of binary PSBT file format</comment>
+ <extracomment>Expanded name of the binary PSBT file format. See: BIP 174.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2165,43 +2152,51 @@ If you are receiving this error you should request the merchant provide a BIP21
<context>
<name>PeerTableModel</name>
<message>
- <location filename="../peertablemodel.h" line="+77"/>
+ <location filename="../peertablemodel.h" line="+101"/>
<source>User Agent</source>
+ <extracomment>Title of Peers Table column which contains the peer&apos;s User Agent string.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+0"/>
+ <location line="-9"/>
<source>Ping</source>
+ <extracomment>Title of Peers Table column which indicates the current latency of the connection with the peer.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+0"/>
- <source>Sent</source>
+ <location line="-12"/>
+ <source>Peer</source>
+ <extracomment>Title of Peers Table column which contains a unique number used to identify a connection.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+0"/>
- <source>Received</source>
+ <location line="+15"/>
+ <source>Sent</source>
+ <extracomment>Title of Peers Table column which indicates the total amount of network information we have sent to the peer.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+0"/>
- <source>Peer Id</source>
+ <location line="+3"/>
+ <source>Received</source>
+ <extracomment>Title of Peers Table column which indicates the total amount of network information we have received from the peer.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+0"/>
+ <location line="-15"/>
<source>Address</source>
+ <extracomment>Title of Peers Table column which contains the IP/Onion/I2P address of the connected peer.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+0"/>
+ <location line="+3"/>
<source>Type</source>
+ <extracomment>Title of Peers Table column which describes the type of peer connection. The &quot;type&quot; describes why the connection exists.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+0"/>
+ <location line="+3"/>
<source>Network</source>
+ <extracomment>Title of Peers Table column which states the network the peer connected through.</extracomment>
<translation type="unfinished">Network</translation>
</message>
</context>
@@ -2218,7 +2213,7 @@ If you are receiving this error you should request the merchant provide a BIP21
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+535"/>
+ <location line="+540"/>
<source>Unroutable</source>
<translation type="unfinished"></translation>
</message>
@@ -2436,9 +2431,9 @@ If you are receiving this error you should request the merchant provide a BIP21
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+1"/>
+ <location line="+3"/>
<source>PNG Image</source>
- <comment>Name of PNG file format</comment>
+ <extracomment>Expanded name of the PNG file format. See https://en.wikipedia.org/wiki/Portable_Network_Graphics</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
@@ -2598,7 +2593,7 @@ If you are receiving this error you should request the merchant provide a BIP21
</message>
<message>
<location line="+68"/>
- <location filename="../rpcconsole.cpp" line="+1033"/>
+ <location filename="../rpcconsole.cpp" line="+1046"/>
<source>Select a peer to view detailed information.</source>
<translation type="unfinished"></translation>
</message>
@@ -2844,7 +2839,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="-379"/>
+ <location filename="../rpcconsole.cpp" line="-392"/>
<source>Inbound: initiated by peer</source>
<translation type="unfinished"></translation>
</message>
@@ -2889,22 +2884,51 @@ If you are receiving this error you should request the merchant provide a BIP21
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+327"/>
+ <location line="+13"/>
+ <source>Ctrl++</source>
+ <extracomment>Main shortcut to increase the RPC console font size.</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Ctrl+=</source>
+ <extracomment>Secondary shortcut to increase the RPC console font size.</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Ctrl+-</source>
+ <extracomment>Main shortcut to decrease the RPC console font size.</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Ctrl+_</source>
+ <extracomment>Secondary shortcut to decrease the RPC console font size.</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+311"/>
<source>Welcome to the %1 RPC console.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+1"/>
+ <location line="+2"/>
<source>Use up and down arrows to navigate history, and %1 to clear screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+1"/>
+ <location line="+3"/>
+ <source>Use %1 and %2 to increase or decrease the font size.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+4"/>
<source>Type %1 for an overview of available commands.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+1"/>
+ <location line="+2"/>
<source>For more information on using this console type %1.</source>
<translation type="unfinished"></translation>
</message>
@@ -2924,17 +2948,12 @@ If you are receiving this error you should request the merchant provide a BIP21
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+117"/>
- <source>(peer id: %1)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="-119"/>
+ <location line="-2"/>
<source>Executing command using &quot;%1&quot; wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-280"/>
+ <location line="-283"/>
<source>Disconnect</source>
<translation type="unfinished"></translation>
</message>
@@ -2964,7 +2983,12 @@ If you are receiving this error you should request the merchant provide a BIP21
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+378"/>
+ <location line="+379"/>
+ <source>(peer: %1)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
<source>via %1</source>
<translation type="unfinished"></translation>
</message>
@@ -3169,7 +3193,7 @@ If you are receiving this error you should request the merchant provide a BIP21
<context>
<name>RecentRequestsTableModel</name>
<message>
- <location filename="../recentrequeststablemodel.cpp" line="+27"/>
+ <location filename="../recentrequeststablemodel.cpp" line="+30"/>
<source>Date</source>
<translation type="unfinished">Date</translation>
</message>
@@ -3199,7 +3223,7 @@ If you are receiving this error you should request the merchant provide a BIP21
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+42"/>
+ <location line="+43"/>
<source>Requested</source>
<translation type="unfinished"></translation>
</message>
@@ -3208,7 +3232,7 @@ If you are receiving this error you should request the merchant provide a BIP21
<name>SendCoinsDialog</name>
<message>
<location filename="../forms/sendcoinsdialog.ui" line="+14"/>
- <location filename="../sendcoinsdialog.cpp" line="+673"/>
+ <location filename="../sendcoinsdialog.cpp" line="+674"/>
<source>Send Coins</source>
<translation>Send Coins</translation>
</message>
@@ -3395,7 +3419,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
<translation>S&amp;end</translation>
</message>
<message>
- <location filename="../sendcoinsdialog.cpp" line="-581"/>
+ <location filename="../sendcoinsdialog.cpp" line="-582"/>
<source>Copy quantity</source>
<translation type="unfinished"></translation>
</message>
@@ -3485,12 +3509,18 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+8"/>
+ <location line="+2"/>
+ <source>Partially Signed Transaction (Binary)</source>
+ <extracomment>Expanded name of the binary PSBT file format. See: BIP 174.</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+7"/>
<source>PSBT saved</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-75"/>
+ <location line="-76"/>
<source>or</source>
<translation type="unfinished"></translation>
</message>
@@ -3540,13 +3570,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+45"/>
- <source>Partially Signed Transaction (Binary)</source>
- <comment>Name of binary PSBT file format</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+183"/>
+ <location line="+229"/>
<source>Watch-only balance:</source>
<translation type="unfinished"></translation>
</message>
@@ -3958,7 +3982,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
<context>
<name>TransactionDesc</name>
<message numerus="yes">
- <location filename="../transactiondesc.cpp" line="+34"/>
+ <location filename="../transactiondesc.cpp" line="+36"/>
<source>Open for %n more block(s)</source>
<translation>
<numerusform>Open for %n more block</numerusform>
@@ -3976,7 +4000,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+2"/>
+ <location line="+3"/>
<source>0/unconfirmed, %1</source>
<translation type="unfinished"></translation>
</message>
@@ -3991,12 +4015,12 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+0"/>
+ <location line="-1"/>
<source>abandoned</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+2"/>
+ <location line="+3"/>
<source>%1/unconfirmed</source>
<translation type="unfinished"></translation>
</message>
@@ -4006,7 +4030,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+50"/>
+ <location line="+51"/>
<source>Status</source>
<translation type="unfinished"></translation>
</message>
@@ -4204,7 +4228,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
<context>
<name>TransactionTableModel</name>
<message>
- <location filename="../transactiontablemodel.cpp" line="+252"/>
+ <location filename="../transactiontablemodel.cpp" line="+260"/>
<source>Date</source>
<translation type="unfinished">Date</translation>
</message>
@@ -4219,7 +4243,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
- <location line="+62"/>
+ <location line="+60"/>
<source>Open for %n more block(s)</source>
<translation>
<numerusform>Open for %n more block</numerusform>
@@ -4451,13 +4475,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+161"/>
- <source>Comma separated file</source>
- <comment>Name of CSV file format</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="-167"/>
+ <location line="-6"/>
<source>Show transaction details</source>
<translation type="unfinished"></translation>
</message>
@@ -4472,7 +4490,13 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+10"/>
+ <location line="+3"/>
+ <source>Comma separated file</source>
+ <extracomment>Expanded name of the CSV file format. See https://en.wikipedia.org/wiki/Comma-separated_values</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+9"/>
<source>Confirmed</source>
<translation type="unfinished">Confirmed</translation>
</message>
@@ -4719,9 +4743,9 @@ Go to File &gt; Open Wallet to load a wallet.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+1"/>
+ <location line="+2"/>
<source>Wallet Data</source>
- <comment>Name of wallet data file format</comment>
+ <extracomment>Name of the wallet data file format.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -4874,16 +4898,6 @@ Go to File &gt; Open Wallet to load a wallet.
</message>
<message>
<location line="+3"/>
- <source>SQLiteDatabase: Failed to prepare the statement to fetch sqlite wallet schema version: %s</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <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="+3"/>
<source>SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported</source>
<translation type="unfinished"></translation>
</message>
@@ -5319,16 +5333,6 @@ Go to File &gt; Open Wallet to load a wallet.
</message>
<message>
<location line="+1"/>
- <source>SQLiteDatabase: Failed to fetch sqlite wallet schema version: %s</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+1"/>
- <source>SQLiteDatabase: Failed to fetch the application id: %s</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+1"/>
<source>SQLiteDatabase: Failed to prepare statement to verify database: %s</source>
<translation type="unfinished"></translation>
</message>
@@ -5424,11 +5428,6 @@ Go to File &gt; Open Wallet to load a wallet.
</message>
<message>
<location line="+1"/>
- <source>Transaction fee and change calculation failed</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+1"/>
<source>Transaction has too long of a mempool chain</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src/qt/locale/bitcoin_en.xlf b/src/qt/locale/bitcoin_en.xlf
index 19ba95d999..0f755fc81b 100644
--- a/src/qt/locale/bitcoin_en.xlf
+++ b/src/qt/locale/bitcoin_en.xlf
@@ -125,20 +125,19 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<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">284</context></context-group>
- <context-group><context context-type="x-gettext-msgctxt">Name of CSV file format</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">286</context></context-group>
+ <note annotates="source" from="developer">Expanded name of the CSV file format. See https://en.wikipedia.org/wiki/Comma-separated_values</note>
</trans-unit>
<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">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., &quot;addrbook.csv&quot;) that the bitcoin addresses were exported to.</note>
+ <context-group purpose="location"><context context-type="linenumber">302</context></context-group>
+ <note annotates="source" from="developer">An error message. %1 is a stand-in argument for the name of the file we attempted to save to.</note>
</trans-unit>
<trans-unit id="_msg26">
<source xml:space="preserve">Exporting Failed</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">299</context></context-group>
</trans-unit>
</group>
</body></file>
@@ -331,49 +330,49 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<trans-unit id="_msg59">
<source xml:space="preserve">Runaway exception</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">421</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">420</context></context-group>
</trans-unit>
<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">422</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">421</context></context-group>
</trans-unit>
<trans-unit id="_msg61">
<source xml:space="preserve">Internal error</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">431</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">430</context></context-group>
</trans-unit>
<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">432</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">431</context></context-group>
</trans-unit>
</group>
<group restype="x-trolltech-linguist-context" resname="QObject">
<trans-unit id="_msg63">
<source xml:space="preserve">Error: Specified data directory &quot;%1&quot; does not exist.</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">543</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">542</context></context-group>
</trans-unit>
<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">549</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">548</context></context-group>
</trans-unit>
<trans-unit id="_msg65">
<source xml:space="preserve">Error: %1</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">563</context></context-group>
</trans-unit>
<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">573</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">572</context></context-group>
</trans-unit>
<trans-unit id="_msg67">
<source xml:space="preserve">%1 didn&apos;t yet exit safely…</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">636</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">635</context></context-group>
</trans-unit>
</group>
</body></file>
@@ -1380,8 +1379,8 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<context-group purpose="location"><context context-type="linenumber">381</context></context-group>
</trans-unit>
<group restype="x-gettext-plurals">
- <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>
+ <context-group purpose="location"><context context-type="linenumber">390</context></context-group>
+ <note annotates="source" from="developer">Explanatory text on the capability of the current prune target.</note>
<trans-unit id="_msg256[0]">
<source xml:space="preserve">(sufficient to restore backups %n day(s) old)</source>
<target xml:space="preserve"></target>
@@ -1394,12 +1393,12 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<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>
+ <context-group purpose="location"><context context-type="linenumber">392</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>
+ <context-group purpose="location"><context context-type="linenumber">394</context></context-group>
</trans-unit>
<trans-unit id="_msg259">
<source xml:space="preserve">Error: Specified data directory &quot;%1&quot; cannot be created.</source>
@@ -1905,33 +1904,21 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<context-group purpose="location"><context context-type="linenumber">719</context></context-group>
</trans-unit>
<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="_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="_msg354">
<source xml:space="preserve">closest matching &quot;%1&quot;</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">768</context></context-group>
</trans-unit>
- <trans-unit id="_msg355">
+ <trans-unit id="_msg353">
<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="_msg356" approved="yes">
+ <trans-unit id="_msg354" approved="yes">
<source xml:space="preserve">&amp;OK</source>
<target xml:space="preserve">&amp;OK</target>
<context-group purpose="location"><context context-type="linenumber">974</context></context-group>
</trans-unit>
- <trans-unit id="_msg357" approved="yes">
+ <trans-unit id="_msg355" approved="yes">
<source xml:space="preserve">&amp;Cancel</source>
<target xml:space="preserve">&amp;Cancel</target>
<context-group purpose="location"><context context-type="linenumber">987</context></context-group>
@@ -1940,58 +1927,58 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</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="_msg358" approved="yes">
+ <trans-unit id="_msg356" 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="_msg359">
+ <trans-unit id="_msg357">
<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="_msg360" approved="yes">
+ <trans-unit id="_msg358" 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="_msg361">
+ <trans-unit id="_msg359">
<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="_msg362">
+ <trans-unit id="_msg360">
<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="_msg363">
+ <trans-unit id="_msg361">
<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="_msg364">
+ <trans-unit id="_msg362">
<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="_msg365">
+ <trans-unit id="_msg363">
<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="_msg366">
+ <trans-unit id="_msg364">
<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="_msg367">
+ <trans-unit id="_msg365">
<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="_msg368" approved="yes">
+ <trans-unit id="_msg366" 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>
@@ -2000,93 +1987,93 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</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="_msg369" approved="yes">
+ <trans-unit id="_msg367" 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="_msg370" approved="yes">
+ <trans-unit id="_msg368" 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="_msg371">
+ <trans-unit id="_msg369">
<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="_msg372">
+ <trans-unit id="_msg370">
<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="_msg373" approved="yes">
+ <trans-unit id="_msg371" 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="_msg374">
+ <trans-unit id="_msg372">
<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="_msg375" approved="yes">
+ <trans-unit id="_msg373" 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="_msg376" approved="yes">
+ <trans-unit id="_msg374" 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="_msg377" approved="yes">
+ <trans-unit id="_msg375" 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="_msg378">
+ <trans-unit id="_msg376">
<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="_msg379" approved="yes">
+ <trans-unit id="_msg377" 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="_msg380" approved="yes">
+ <trans-unit id="_msg378" 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="_msg381">
+ <trans-unit id="_msg379">
<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="_msg382">
+ <trans-unit id="_msg380">
<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="_msg383">
+ <trans-unit id="_msg381">
<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="_msg384">
+ <trans-unit id="_msg382">
<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="_msg385">
+ <trans-unit id="_msg383">
<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="_msg386">
+ <trans-unit id="_msg384">
<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>
@@ -2095,7 +2082,7 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</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="_msg387">
+ <trans-unit id="_msg385">
<source xml:space="preserve">Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings-&gt;Mask values.</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">191</context></context-group>
@@ -2104,32 +2091,32 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</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="_msg388">
+ <trans-unit id="_msg386">
<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="_msg389">
+ <trans-unit id="_msg387">
<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="_msg390">
+ <trans-unit id="_msg388">
<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="_msg391">
+ <trans-unit id="_msg389">
<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="_msg392">
+ <trans-unit id="_msg390">
<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="_msg393">
+ <trans-unit id="_msg391">
<source xml:space="preserve">Close</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">136</context></context-group>
@@ -2138,142 +2125,142 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</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="_msg394">
+ <trans-unit id="_msg392">
<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="_msg395">
+ <trans-unit id="_msg393">
<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="_msg396">
+ <trans-unit id="_msg394">
<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="_msg397">
+ <trans-unit id="_msg395">
<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="_msg398">
+ <trans-unit id="_msg396">
<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="_msg399">
+ <trans-unit id="_msg397">
<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="_msg400">
+ <trans-unit id="_msg398">
<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="_msg401">
+ <trans-unit id="_msg399">
<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="_msg402">
+ <trans-unit id="_msg400">
<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="_msg403">
+ <trans-unit id="_msg401">
<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="_msg404">
+ <trans-unit id="_msg402">
<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>
+ <context-group purpose="location"><context context-type="linenumber">145</context></context-group>
+ <note annotates="source" from="developer">Expanded name of the binary PSBT file format. See: BIP 174.</note>
</trans-unit>
- <trans-unit id="_msg405">
+ <trans-unit id="_msg403">
<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>
+ <context-group purpose="location"><context context-type="linenumber">152</context></context-group>
</trans-unit>
- <trans-unit id="_msg406">
+ <trans-unit id="_msg404">
<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>
+ <context-group purpose="location"><context context-type="linenumber">168</context></context-group>
</trans-unit>
- <trans-unit id="_msg407">
+ <trans-unit id="_msg405">
<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>
+ <context-group purpose="location"><context context-type="linenumber">178</context></context-group>
</trans-unit>
- <trans-unit id="_msg408">
+ <trans-unit id="_msg406">
<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>
+ <context-group purpose="location"><context context-type="linenumber">180</context></context-group>
</trans-unit>
- <trans-unit id="_msg409">
+ <trans-unit id="_msg407">
<source xml:space="preserve">Total Amount</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">191</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">192</context></context-group>
</trans-unit>
- <trans-unit id="_msg410">
+ <trans-unit id="_msg408">
<source xml:space="preserve">or</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">194</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">195</context></context-group>
</trans-unit>
- <trans-unit id="_msg411">
+ <trans-unit id="_msg409">
<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>
+ <context-group purpose="location"><context context-type="linenumber">201</context></context-group>
</trans-unit>
- <trans-unit id="_msg412">
+ <trans-unit id="_msg410">
<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>
+ <context-group purpose="location"><context context-type="linenumber">243</context></context-group>
</trans-unit>
- <trans-unit id="_msg413">
+ <trans-unit id="_msg411">
<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>
+ <context-group purpose="location"><context context-type="linenumber">247</context></context-group>
</trans-unit>
- <trans-unit id="_msg414">
+ <trans-unit id="_msg412">
<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>
+ <context-group purpose="location"><context context-type="linenumber">250</context></context-group>
</trans-unit>
- <trans-unit id="_msg415">
+ <trans-unit id="_msg413">
<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>
+ <context-group purpose="location"><context context-type="linenumber">253</context></context-group>
</trans-unit>
- <trans-unit id="_msg416">
+ <trans-unit id="_msg414">
<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>
+ <context-group purpose="location"><context context-type="linenumber">261</context></context-group>
</trans-unit>
- <trans-unit id="_msg417">
+ <trans-unit id="_msg415">
<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>
+ <context-group purpose="location"><context context-type="linenumber">265</context></context-group>
</trans-unit>
</group>
</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="_msg418">
+ <trans-unit id="_msg416">
<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="_msg419">
+ <trans-unit id="_msg417">
<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="_msg420">
+ <trans-unit id="_msg418">
<source xml:space="preserve">URI handling</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">224</context></context-group>
@@ -2281,12 +2268,12 @@ Signing is only possible with addresses of the type &apos;legacy&apos;.</source>
<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="_msg421">
+ <trans-unit id="_msg419">
<source xml:space="preserve">&apos;bitcoin://&apos; is not a valid URI. Use &apos;bitcoin:&apos; instead.</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">224</context></context-group>
</trans-unit>
- <trans-unit id="_msg422">
+ <trans-unit id="_msg420">
<source xml:space="preserve">Cannot process payment request because BIP70 is not supported.
Due to widespread security flaws in BIP70 it&apos;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>
@@ -2294,12 +2281,12 @@ If you are receiving this error you should request the merchant provide a BIP21
<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="_msg423">
+ <trans-unit id="_msg421">
<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">254</context></context-group>
</trans-unit>
- <trans-unit id="_msg424">
+ <trans-unit id="_msg422">
<source xml:space="preserve">Payment request file handling</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">263</context></context-group>
@@ -2308,51 +2295,59 @@ If you are receiving this error you should request the merchant provide a BIP21
</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="_msg425">
+ <trans-unit id="_msg423">
<source xml:space="preserve">User Agent</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">101</context></context-group>
+ <note annotates="source" from="developer">Title of Peers Table column which contains the peer&apos;s User Agent string.</note>
</trans-unit>
- <trans-unit id="_msg426">
+ <trans-unit id="_msg424">
<source xml:space="preserve">Ping</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">92</context></context-group>
+ <note annotates="source" from="developer">Title of Peers Table column which indicates the current latency of the connection with the peer.</note>
</trans-unit>
- <trans-unit id="_msg427">
- <source xml:space="preserve">Sent</source>
+ <trans-unit id="_msg425">
+ <source xml:space="preserve">Peer</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">80</context></context-group>
+ <note annotates="source" from="developer">Title of Peers Table column which contains a unique number used to identify a connection.</note>
</trans-unit>
- <trans-unit id="_msg428">
- <source xml:space="preserve">Received</source>
+ <trans-unit id="_msg426">
+ <source xml:space="preserve">Sent</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">95</context></context-group>
+ <note annotates="source" from="developer">Title of Peers Table column which indicates the total amount of network information we have sent to the peer.</note>
</trans-unit>
- <trans-unit id="_msg429">
- <source xml:space="preserve">Peer Id</source>
+ <trans-unit id="_msg427">
+ <source xml:space="preserve">Received</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">98</context></context-group>
+ <note annotates="source" from="developer">Title of Peers Table column which indicates the total amount of network information we have received from the peer.</note>
</trans-unit>
- <trans-unit id="_msg430">
+ <trans-unit id="_msg428">
<source xml:space="preserve">Address</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">83</context></context-group>
+ <note annotates="source" from="developer">Title of Peers Table column which contains the IP/Onion/I2P address of the connected peer.</note>
</trans-unit>
- <trans-unit id="_msg431">
+ <trans-unit id="_msg429">
<source xml:space="preserve">Type</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">86</context></context-group>
+ <note annotates="source" from="developer">Title of Peers Table column which describes the type of peer connection. The &quot;type&quot; describes why the connection exists.</note>
</trans-unit>
- <trans-unit id="_msg432">
+ <trans-unit id="_msg430">
<source xml:space="preserve">Network</source>
<target xml:space="preserve" state="needs-review-translation">Network</target>
- <context-group purpose="location"><context context-type="linenumber">77</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">89</context></context-group>
+ <note annotates="source" from="developer">Title of Peers Table column which states the network the peer connected through.</note>
</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="_msg433">
+ <trans-unit id="_msg431">
<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>
@@ -2361,229 +2356,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="_msg434">
+ <trans-unit id="_msg432">
<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="_msg435">
+ <trans-unit id="_msg433">
<source xml:space="preserve">Unroutable</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">653</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">658</context></context-group>
</trans-unit>
- <trans-unit id="_msg436">
+ <trans-unit id="_msg434">
<source xml:space="preserve">Internal</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">659</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">664</context></context-group>
</trans-unit>
- <trans-unit id="_msg437">
+ <trans-unit id="_msg435">
<source xml:space="preserve">Inbound</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">669</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">674</context></context-group>
</trans-unit>
- <trans-unit id="_msg438">
+ <trans-unit id="_msg436">
<source xml:space="preserve">Outbound</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">669</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">674</context></context-group>
</trans-unit>
- <trans-unit id="_msg439">
+ <trans-unit id="_msg437">
<source xml:space="preserve">Full Relay</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">678</context></context-group>
</trans-unit>
- <trans-unit id="_msg440">
+ <trans-unit id="_msg438">
<source xml:space="preserve">Block Relay</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">679</context></context-group>
</trans-unit>
- <trans-unit id="_msg441">
+ <trans-unit id="_msg439">
<source xml:space="preserve">Manual</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">675</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">680</context></context-group>
</trans-unit>
- <trans-unit id="_msg442">
+ <trans-unit id="_msg440">
<source xml:space="preserve">Feeler</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">676</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">681</context></context-group>
</trans-unit>
- <trans-unit id="_msg443">
+ <trans-unit id="_msg441">
<source xml:space="preserve">Address Fetch</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">677</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">682</context></context-group>
</trans-unit>
- <trans-unit id="_msg444">
+ <trans-unit id="_msg442">
<source xml:space="preserve">%1 d</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">691</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">696</context></context-group>
</trans-unit>
- <trans-unit id="_msg445">
+ <trans-unit id="_msg443">
<source xml:space="preserve">%1 h</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">693</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">698</context></context-group>
</trans-unit>
- <trans-unit id="_msg446">
+ <trans-unit id="_msg444">
<source xml:space="preserve">%1 m</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">695</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">700</context></context-group>
</trans-unit>
- <trans-unit id="_msg447">
+ <trans-unit id="_msg445">
<source xml:space="preserve">%1 s</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">697</context></context-group>
- <context-group purpose="location"><context context-type="linenumber">725</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">702</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">730</context></context-group>
</trans-unit>
- <trans-unit id="_msg448">
+ <trans-unit id="_msg446">
<source xml:space="preserve">None</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">713</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">718</context></context-group>
</trans-unit>
- <trans-unit id="_msg449">
+ <trans-unit id="_msg447">
<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">719</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">724</context></context-group>
</trans-unit>
- <trans-unit id="_msg450">
+ <trans-unit id="_msg448">
<source xml:space="preserve">%1 ms</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">720</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">725</context></context-group>
</trans-unit>
<group restype="x-gettext-plurals">
- <context-group purpose="location"><context context-type="linenumber">738</context></context-group>
- <trans-unit id="_msg451[0]" approved="yes">
+ <context-group purpose="location"><context context-type="linenumber">743</context></context-group>
+ <trans-unit id="_msg449[0]" approved="yes">
<source xml:space="preserve">%n second(s)</source>
<target xml:space="preserve">%n second</target>
</trans-unit>
- <trans-unit id="_msg451[1]" approved="yes">
+ <trans-unit id="_msg449[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">742</context></context-group>
- <trans-unit id="_msg452[0]" approved="yes">
+ <context-group purpose="location"><context context-type="linenumber">747</context></context-group>
+ <trans-unit id="_msg450[0]" approved="yes">
<source xml:space="preserve">%n minute(s)</source>
<target xml:space="preserve">%n minute</target>
</trans-unit>
- <trans-unit id="_msg452[1]" approved="yes">
+ <trans-unit id="_msg450[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">746</context></context-group>
- <trans-unit id="_msg453[0]">
+ <context-group purpose="location"><context context-type="linenumber">751</context></context-group>
+ <trans-unit id="_msg451[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="_msg453[1]">
+ <trans-unit id="_msg451[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">750</context></context-group>
- <trans-unit id="_msg454[0]">
+ <context-group purpose="location"><context context-type="linenumber">755</context></context-group>
+ <trans-unit id="_msg452[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="_msg454[1]">
+ <trans-unit id="_msg452[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">754</context></context-group>
- <context-group purpose="location"><context context-type="linenumber">760</context></context-group>
- <trans-unit id="_msg455[0]">
+ <context-group purpose="location"><context context-type="linenumber">759</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">765</context></context-group>
+ <trans-unit id="_msg453[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="_msg455[1]">
+ <trans-unit id="_msg453[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="_msg456">
+ <trans-unit id="_msg454">
<source xml:space="preserve">%1 and %2</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">760</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">765</context></context-group>
</trans-unit>
<group restype="x-gettext-plurals">
- <context-group purpose="location"><context context-type="linenumber">760</context></context-group>
- <trans-unit id="_msg457[0]">
+ <context-group purpose="location"><context context-type="linenumber">765</context></context-group>
+ <trans-unit id="_msg455[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="_msg457[1]">
+ <trans-unit id="_msg455[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="_msg458">
+ <trans-unit id="_msg456">
<source xml:space="preserve">%1 B</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">768</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">773</context></context-group>
</trans-unit>
- <trans-unit id="_msg459">
+ <trans-unit id="_msg457">
<source xml:space="preserve">%1 kB</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">770</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">775</context></context-group>
</trans-unit>
- <trans-unit id="_msg460">
+ <trans-unit id="_msg458">
<source xml:space="preserve">%1 MB</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">772</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">777</context></context-group>
</trans-unit>
- <trans-unit id="_msg461">
+ <trans-unit id="_msg459">
<source xml:space="preserve">%1 GB</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">774</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">779</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="_msg462">
+ <trans-unit id="_msg460">
<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="_msg463">
+ <trans-unit id="_msg461">
<source xml:space="preserve">Copy Image</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">31</context></context-group>
</trans-unit>
- <trans-unit id="_msg464">
+ <trans-unit id="_msg462">
<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">42</context></context-group>
</trans-unit>
- <trans-unit id="_msg465">
+ <trans-unit id="_msg463">
<source xml:space="preserve">Error encoding URI into QR Code.</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">49</context></context-group>
</trans-unit>
- <trans-unit id="_msg466">
+ <trans-unit id="_msg464">
<source xml:space="preserve">QR code support not available.</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">90</context></context-group>
</trans-unit>
- <trans-unit id="_msg467">
+ <trans-unit id="_msg465">
<source xml:space="preserve">Save QR Code</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">120</context></context-group>
</trans-unit>
- <trans-unit id="_msg468">
+ <trans-unit id="_msg466">
<source xml:space="preserve">PNG Image</source>
<target xml:space="preserve"></target>
- <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>
+ <context-group purpose="location"><context context-type="linenumber">123</context></context-group>
+ <note annotates="source" from="developer">Expanded name of the PNG file format. See https://en.wikipedia.org/wiki/Portable_Network_Graphics</note>
</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="_msg469" approved="yes">
+ <trans-unit id="_msg467" 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>
@@ -2622,322 +2617,322 @@ If you are receiving this error you should request the merchant provide a BIP21
<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">
+ <trans-unit id="_msg468" 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="_msg471" approved="yes">
+ <trans-unit id="_msg469" approved="yes">
<source xml:space="preserve">&amp;Information</source>
<target xml:space="preserve">&amp;Information</target>
<context-group purpose="location"><context context-type="linenumber">43</context></context-group>
</trans-unit>
- <trans-unit id="_msg472">
+ <trans-unit id="_msg470">
<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="_msg473">
+ <trans-unit id="_msg471">
<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="_msg474">
+ <trans-unit id="_msg472">
<source xml:space="preserve">To specify a non-default location of the data directory use the &apos;%1&apos; option.</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">124</context></context-group>
</trans-unit>
- <trans-unit id="_msg475">
+ <trans-unit id="_msg473">
<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="_msg476">
+ <trans-unit id="_msg474">
<source xml:space="preserve">To specify a non-default location of the blocks directory use the &apos;%1&apos; option.</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">153</context></context-group>
</trans-unit>
- <trans-unit id="_msg477" approved="yes">
+ <trans-unit id="_msg475" 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="_msg478" approved="yes">
+ <trans-unit id="_msg476" 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">1123</context></context-group>
</trans-unit>
- <trans-unit id="_msg479">
+ <trans-unit id="_msg477">
<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="_msg480" approved="yes">
+ <trans-unit id="_msg478" 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="_msg481" approved="yes">
+ <trans-unit id="_msg479" 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="_msg482">
+ <trans-unit id="_msg480">
<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="_msg483">
+ <trans-unit id="_msg481">
<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="_msg484">
+ <trans-unit id="_msg482">
<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="_msg485">
+ <trans-unit id="_msg483">
<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="_msg486">
+ <trans-unit id="_msg484">
<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="_msg487">
+ <trans-unit id="_msg485">
<source xml:space="preserve">&amp;Reset</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">695</context></context-group>
</trans-unit>
- <trans-unit id="_msg488">
+ <trans-unit id="_msg486">
<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">1483</context></context-group>
</trans-unit>
- <trans-unit id="_msg489">
+ <trans-unit id="_msg487">
<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">1460</context></context-group>
</trans-unit>
- <trans-unit id="_msg490">
+ <trans-unit id="_msg488">
<source xml:space="preserve">&amp;Peers</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">896</context></context-group>
</trans-unit>
- <trans-unit id="_msg491">
+ <trans-unit id="_msg489">
<source xml:space="preserve">Banned peers</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">972</context></context-group>
</trans-unit>
- <trans-unit id="_msg492">
+ <trans-unit id="_msg490">
<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">1040</context></context-group>
- <context-group purpose="location"><context context-type="sourcefile">../rpcconsole.cpp</context><context context-type="linenumber">1033</context></context-group>
+ <context-group purpose="location"><context context-type="sourcefile">../rpcconsole.cpp</context><context context-type="linenumber">1046</context></context-group>
</trans-unit>
- <trans-unit id="_msg493">
+ <trans-unit id="_msg491">
<source xml:space="preserve">Version</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1146</context></context-group>
</trans-unit>
- <trans-unit id="_msg494">
+ <trans-unit id="_msg492">
<source xml:space="preserve">Starting Block</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1270</context></context-group>
</trans-unit>
- <trans-unit id="_msg495">
+ <trans-unit id="_msg493">
<source xml:space="preserve">Synced Headers</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1293</context></context-group>
</trans-unit>
- <trans-unit id="_msg496">
+ <trans-unit id="_msg494">
<source xml:space="preserve">Synced Blocks</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1316</context></context-group>
</trans-unit>
- <trans-unit id="_msg497">
+ <trans-unit id="_msg495">
<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">1601</context></context-group>
</trans-unit>
- <trans-unit id="_msg498">
+ <trans-unit id="_msg496">
<source xml:space="preserve">Mapped AS</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1604</context></context-group>
</trans-unit>
- <trans-unit id="_msg499">
+ <trans-unit id="_msg497">
<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">1169</context></context-group>
</trans-unit>
- <trans-unit id="_msg500">
+ <trans-unit id="_msg498">
<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="_msg501">
+ <trans-unit id="_msg499">
<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="_msg502">
+ <trans-unit id="_msg500">
<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="_msg503">
+ <trans-unit id="_msg501">
<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="_msg504">
+ <trans-unit id="_msg502">
<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="_msg505">
+ <trans-unit id="_msg503">
<source xml:space="preserve">Permissions</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1071</context></context-group>
</trans-unit>
- <trans-unit id="_msg506">
+ <trans-unit id="_msg504">
<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">1094</context></context-group>
</trans-unit>
- <trans-unit id="_msg507">
+ <trans-unit id="_msg505">
<source xml:space="preserve">Direction/Type</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1097</context></context-group>
</trans-unit>
- <trans-unit id="_msg508">
+ <trans-unit id="_msg506">
<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">1120</context></context-group>
</trans-unit>
- <trans-unit id="_msg509">
+ <trans-unit id="_msg507">
<source xml:space="preserve">Services</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1192</context></context-group>
</trans-unit>
- <trans-unit id="_msg510">
+ <trans-unit id="_msg508">
<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">1218</context></context-group>
</trans-unit>
- <trans-unit id="_msg511">
+ <trans-unit id="_msg509">
<source xml:space="preserve">Wants Tx Relay</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1221</context></context-group>
</trans-unit>
- <trans-unit id="_msg512">
+ <trans-unit id="_msg510">
<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">1244</context></context-group>
</trans-unit>
- <trans-unit id="_msg513">
+ <trans-unit id="_msg511">
<source xml:space="preserve">High Bandwidth</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1247</context></context-group>
</trans-unit>
- <trans-unit id="_msg514">
+ <trans-unit id="_msg512">
<source xml:space="preserve">Connection Time</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1339</context></context-group>
</trans-unit>
- <trans-unit id="_msg515">
+ <trans-unit id="_msg513">
<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">1362</context></context-group>
</trans-unit>
- <trans-unit id="_msg516">
+ <trans-unit id="_msg514">
<source xml:space="preserve">Last Block</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1365</context></context-group>
</trans-unit>
- <trans-unit id="_msg517">
+ <trans-unit id="_msg515">
<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">1388</context></context-group>
</trans-unit>
- <trans-unit id="_msg518">
+ <trans-unit id="_msg516">
<source xml:space="preserve">Last Tx</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1391</context></context-group>
</trans-unit>
- <trans-unit id="_msg519">
+ <trans-unit id="_msg517">
<source xml:space="preserve">Last Send</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1414</context></context-group>
</trans-unit>
- <trans-unit id="_msg520">
+ <trans-unit id="_msg518">
<source xml:space="preserve">Last Receive</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1437</context></context-group>
</trans-unit>
- <trans-unit id="_msg521">
+ <trans-unit id="_msg519">
<source xml:space="preserve">Ping Time</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1506</context></context-group>
</trans-unit>
- <trans-unit id="_msg522">
+ <trans-unit id="_msg520">
<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">1529</context></context-group>
</trans-unit>
- <trans-unit id="_msg523">
+ <trans-unit id="_msg521">
<source xml:space="preserve">Ping Wait</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1532</context></context-group>
</trans-unit>
- <trans-unit id="_msg524">
+ <trans-unit id="_msg522">
<source xml:space="preserve">Min Ping</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1555</context></context-group>
</trans-unit>
- <trans-unit id="_msg525">
+ <trans-unit id="_msg523">
<source xml:space="preserve">Time Offset</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">1578</context></context-group>
</trans-unit>
- <trans-unit id="_msg526" approved="yes">
+ <trans-unit id="_msg524" 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="_msg527" approved="yes">
+ <trans-unit id="_msg525" approved="yes">
<source xml:space="preserve">&amp;Open</source>
<target xml:space="preserve">&amp;Open</target>
<context-group purpose="location"><context context-type="linenumber">400</context></context-group>
</trans-unit>
- <trans-unit id="_msg528" approved="yes">
+ <trans-unit id="_msg526" approved="yes">
<source xml:space="preserve">&amp;Console</source>
<target xml:space="preserve">&amp;Console</target>
<context-group purpose="location"><context context-type="linenumber">426</context></context-group>
</trans-unit>
- <trans-unit id="_msg529">
+ <trans-unit id="_msg527">
<source xml:space="preserve">&amp;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="_msg530">
+ <trans-unit id="_msg528">
<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="_msg531" approved="yes">
+ <trans-unit id="_msg529" 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="_msg532" approved="yes">
+ <trans-unit id="_msg530" 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>
@@ -2946,176 +2941,205 @@ 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="_msg533">
+ <trans-unit id="_msg531">
<source xml:space="preserve">In:</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">852</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">865</context></context-group>
</trans-unit>
- <trans-unit id="_msg534">
+ <trans-unit id="_msg532">
<source xml:space="preserve">Out:</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">853</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">866</context></context-group>
</trans-unit>
- <trans-unit id="_msg535">
+ <trans-unit id="_msg533">
<source xml:space="preserve">Inbound: initiated by peer</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">474</context></context-group>
</trans-unit>
- <trans-unit id="_msg536">
+ <trans-unit id="_msg534">
<source xml:space="preserve">Outbound Full Relay: default</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">475</context></context-group>
</trans-unit>
- <trans-unit id="_msg537">
+ <trans-unit id="_msg535">
<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">476</context></context-group>
</trans-unit>
- <trans-unit id="_msg538">
+ <trans-unit id="_msg536">
<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">477</context></context-group>
</trans-unit>
- <trans-unit id="_msg539">
+ <trans-unit id="_msg537">
<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">481</context></context-group>
</trans-unit>
- <trans-unit id="_msg540">
+ <trans-unit id="_msg538">
<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">482</context></context-group>
</trans-unit>
- <trans-unit id="_msg541">
+ <trans-unit id="_msg539">
<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">486</context></context-group>
</trans-unit>
- <trans-unit id="_msg542">
+ <trans-unit id="_msg540">
<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">487</context></context-group>
</trans-unit>
- <trans-unit id="_msg543">
+ <trans-unit id="_msg541">
<source xml:space="preserve">no high bandwidth relay selected</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">488</context></context-group>
</trans-unit>
+ <trans-unit id="_msg542">
+ <source xml:space="preserve">Ctrl++</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">501</context></context-group>
+ <note annotates="source" from="developer">Main shortcut to increase the RPC console font size.</note>
+ </trans-unit>
+ <trans-unit id="_msg543">
+ <source xml:space="preserve">Ctrl+=</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">503</context></context-group>
+ <note annotates="source" from="developer">Secondary shortcut to increase the RPC console font size.</note>
+ </trans-unit>
<trans-unit id="_msg544">
- <source xml:space="preserve">Welcome to the %1 RPC console.</source>
+ <source xml:space="preserve">Ctrl+-</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">815</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">507</context></context-group>
+ <note annotates="source" from="developer">Main shortcut to decrease the RPC console font size.</note>
</trans-unit>
<trans-unit id="_msg545">
- <source xml:space="preserve">Use up and down arrows to navigate history, and %1 to clear screen.</source>
+ <source xml:space="preserve">Ctrl+_</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">816</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">509</context></context-group>
+ <note annotates="source" from="developer">Secondary shortcut to decrease the RPC console font size.</note>
</trans-unit>
<trans-unit id="_msg546">
- <source xml:space="preserve">Type %1 for an overview of available commands.</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">817</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">820</context></context-group>
</trans-unit>
<trans-unit id="_msg547">
- <source xml:space="preserve">For more information on using this console type %1.</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">818</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">822</context></context-group>
</trans-unit>
<trans-unit id="_msg548">
- <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">Use %1 and %2 to increase or decrease the font size.</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">820</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">825</context></context-group>
</trans-unit>
<trans-unit id="_msg549">
- <source xml:space="preserve">Network activity disabled</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">856</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">829</context></context-group>
</trans-unit>
<trans-unit id="_msg550">
- <source xml:space="preserve">Executing command without any wallet</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">922</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">831</context></context-group>
</trans-unit>
<trans-unit id="_msg551">
- <source xml:space="preserve">(peer id: %1)</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">1039</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">833</context></context-group>
</trans-unit>
<trans-unit id="_msg552">
- <source xml:space="preserve">Executing command using &quot;%1&quot; wallet</source>
+ <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>
+ <context-group purpose="location"><context context-type="linenumber">869</context></context-group>
</trans-unit>
<trans-unit id="_msg553">
- <source xml:space="preserve">Disconnect</source>
+ <source xml:space="preserve">Executing command without any wallet</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">640</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">935</context></context-group>
</trans-unit>
<trans-unit id="_msg554">
- <source xml:space="preserve">1 hour</source>
+ <source xml:space="preserve">Executing command using &quot;%1&quot; wallet</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">641</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">933</context></context-group>
</trans-unit>
<trans-unit id="_msg555">
- <source xml:space="preserve">1 day</source>
+ <source xml:space="preserve">Disconnect</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">642</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">650</context></context-group>
</trans-unit>
<trans-unit id="_msg556">
- <source xml:space="preserve">1 week</source>
+ <source xml:space="preserve">1 hour</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">643</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">651</context></context-group>
</trans-unit>
<trans-unit id="_msg557">
- <source xml:space="preserve">1 year</source>
+ <source xml:space="preserve">1 day</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">644</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">652</context></context-group>
</trans-unit>
<trans-unit id="_msg558">
- <source xml:space="preserve">Unban</source>
+ <source xml:space="preserve">1 week</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">663</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">653</context></context-group>
</trans-unit>
<trans-unit id="_msg559">
+ <source xml:space="preserve">1 year</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">654</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg560">
+ <source xml:space="preserve">Unban</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">673</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg561">
+ <source xml:space="preserve">(peer: %1)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">1052</context></context-group>
+ </trans-unit>
+ <trans-unit id="_msg562">
<source xml:space="preserve">via %1</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">1041</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">1054</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="_msg560">
+ <trans-unit id="_msg563">
<source xml:space="preserve">Yes</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">136</context></context-group>
</trans-unit>
- <trans-unit id="_msg561">
+ <trans-unit id="_msg564">
<source xml:space="preserve">No</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">136</context></context-group>
</trans-unit>
- <trans-unit id="_msg562">
+ <trans-unit id="_msg565">
<source xml:space="preserve">To</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">136</context></context-group>
</trans-unit>
- <trans-unit id="_msg563">
+ <trans-unit id="_msg566">
<source xml:space="preserve">From</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">136</context></context-group>
</trans-unit>
- <trans-unit id="_msg564">
+ <trans-unit id="_msg567">
<source xml:space="preserve">Ban for</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">137</context></context-group>
</trans-unit>
- <trans-unit id="_msg565">
+ <trans-unit id="_msg568">
<source xml:space="preserve">Never</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">174</context></context-group>
</trans-unit>
- <trans-unit id="_msg566">
+ <trans-unit id="_msg569">
<source xml:space="preserve">Unknown</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">137</context></context-group>
@@ -3124,98 +3148,98 @@ If you are receiving this error you should request the merchant provide a BIP21
</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="_msg567">
+ <trans-unit id="_msg570">
<source xml:space="preserve">&amp;Amount:</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">37</context></context-group>
</trans-unit>
- <trans-unit id="_msg568">
+ <trans-unit id="_msg571">
<source xml:space="preserve">&amp;Label:</source>
<target xml:space="preserve" state="needs-review-translation">&amp;Label:</target>
<context-group purpose="location"><context context-type="linenumber">83</context></context-group>
</trans-unit>
- <trans-unit id="_msg569">
+ <trans-unit id="_msg572">
<source xml:space="preserve">&amp;Message:</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">53</context></context-group>
</trans-unit>
- <trans-unit id="_msg570">
+ <trans-unit id="_msg573">
<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="_msg571">
+ <trans-unit id="_msg574">
<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="_msg572">
+ <trans-unit id="_msg575">
<source xml:space="preserve">Use this form to request payments. All fields are &lt;b&gt;optional&lt;/b&gt;.</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">73</context></context-group>
</trans-unit>
- <trans-unit id="_msg573">
+ <trans-unit id="_msg576">
<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="_msg574">
+ <trans-unit id="_msg577">
<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="_msg575">
+ <trans-unit id="_msg578">
<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="_msg576">
+ <trans-unit id="_msg579">
<source xml:space="preserve">&amp;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="_msg577">
+ <trans-unit id="_msg580">
<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="_msg578">
+ <trans-unit id="_msg581">
<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="_msg579">
+ <trans-unit id="_msg582">
<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&apos;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="_msg580">
+ <trans-unit id="_msg583">
<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="_msg581">
+ <trans-unit id="_msg584">
<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="_msg582">
+ <trans-unit id="_msg585">
<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="_msg583">
+ <trans-unit id="_msg586">
<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="_msg584">
+ <trans-unit id="_msg587">
<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="_msg585">
+ <trans-unit id="_msg588">
<source xml:space="preserve">Remove</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">327</context></context-group>
@@ -3224,37 +3248,37 @@ 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="_msg586">
+ <trans-unit id="_msg589">
<source xml:space="preserve">Copy URI</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">47</context></context-group>
</trans-unit>
- <trans-unit id="_msg587">
+ <trans-unit id="_msg590">
<source xml:space="preserve">Copy address</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">48</context></context-group>
</trans-unit>
- <trans-unit id="_msg588">
+ <trans-unit id="_msg591">
<source xml:space="preserve">Copy label</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">49</context></context-group>
</trans-unit>
- <trans-unit id="_msg589">
+ <trans-unit id="_msg592">
<source xml:space="preserve">Copy message</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">50</context></context-group>
</trans-unit>
- <trans-unit id="_msg590">
+ <trans-unit id="_msg593">
<source xml:space="preserve">Copy amount</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">51</context></context-group>
</trans-unit>
- <trans-unit id="_msg591">
+ <trans-unit id="_msg594">
<source xml:space="preserve">Could not unlock wallet.</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">176</context></context-group>
</trans-unit>
- <trans-unit id="_msg592">
+ <trans-unit id="_msg595">
<source xml:space="preserve">Could not generate new %1 address</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">181</context></context-group>
@@ -3263,52 +3287,52 @@ If you are receiving this error you should request the merchant provide a BIP21
</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="_msg593">
+ <trans-unit id="_msg596">
<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="_msg594">
+ <trans-unit id="_msg597">
<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="_msg595">
+ <trans-unit id="_msg598">
<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="_msg596">
+ <trans-unit id="_msg599">
<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="_msg597">
+ <trans-unit id="_msg600">
<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="_msg598">
+ <trans-unit id="_msg601">
<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="_msg599">
+ <trans-unit id="_msg602">
<source xml:space="preserve">Copy &amp;URI</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">240</context></context-group>
</trans-unit>
- <trans-unit id="_msg600">
+ <trans-unit id="_msg603">
<source xml:space="preserve">Copy &amp;Address</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">250</context></context-group>
</trans-unit>
- <trans-unit id="_msg601">
+ <trans-unit id="_msg604">
<source xml:space="preserve">&amp;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="_msg602">
+ <trans-unit id="_msg605">
<source xml:space="preserve">Payment information</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">39</context></context-group>
@@ -3317,7 +3341,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="_msg603">
+ <trans-unit id="_msg606">
<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>
@@ -3326,229 +3350,229 @@ 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="_msg604">
+ <trans-unit id="_msg607">
<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>
+ <context-group purpose="location"><context context-type="linenumber">30</context></context-group>
</trans-unit>
- <trans-unit id="_msg605">
+ <trans-unit id="_msg608">
<source xml:space="preserve">Label</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">30</context></context-group>
</trans-unit>
- <trans-unit id="_msg606">
+ <trans-unit id="_msg609">
<source xml:space="preserve">Message</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">30</context></context-group>
</trans-unit>
- <trans-unit id="_msg607">
+ <trans-unit id="_msg610">
<source xml:space="preserve">(no label)</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">68</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">71</context></context-group>
</trans-unit>
- <trans-unit id="_msg608">
+ <trans-unit id="_msg611">
<source xml:space="preserve">(no message)</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">80</context></context-group>
</trans-unit>
- <trans-unit id="_msg609">
+ <trans-unit id="_msg612">
<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>
+ <context-group purpose="location"><context context-type="linenumber">88</context></context-group>
</trans-unit>
- <trans-unit id="_msg610">
+ <trans-unit id="_msg613">
<source xml:space="preserve">Requested</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">131</context></context-group>
</trans-unit>
</group>
</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="_msg611" approved="yes">
+ <trans-unit id="_msg614" 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>
+ <context-group purpose="location"><context context-type="sourcefile">../sendcoinsdialog.cpp</context><context context-type="linenumber">674</context></context-group>
</trans-unit>
- <trans-unit id="_msg612">
+ <trans-unit id="_msg615">
<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="_msg613">
+ <trans-unit id="_msg616">
<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="_msg614">
+ <trans-unit id="_msg617">
<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="_msg615">
+ <trans-unit id="_msg618">
<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="_msg616">
+ <trans-unit id="_msg619">
<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="_msg617">
+ <trans-unit id="_msg620">
<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="_msg618">
+ <trans-unit id="_msg621">
<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="_msg619">
+ <trans-unit id="_msg622">
<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="_msg620">
+ <trans-unit id="_msg623">
<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="_msg621">
+ <trans-unit id="_msg624">
<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="_msg622">
+ <trans-unit id="_msg625">
<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="_msg623">
+ <trans-unit id="_msg626">
<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="_msg624">
+ <trans-unit id="_msg627">
<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>
<context-group purpose="location"><context context-type="linenumber">765</context></context-group>
</trans-unit>
- <trans-unit id="_msg625">
+ <trans-unit id="_msg628">
<source xml:space="preserve">Warning: Fee estimation is currently not possible.</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">774</context></context-group>
</trans-unit>
- <trans-unit id="_msg626">
+ <trans-unit id="_msg629">
<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="_msg627">
+ <trans-unit id="_msg630">
<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="_msg628">
+ <trans-unit id="_msg631">
<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="_msg629">
+ <trans-unit id="_msg632">
<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="_msg630" approved="yes">
+ <trans-unit id="_msg633" 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="_msg631" approved="yes">
+ <trans-unit id="_msg634" approved="yes">
<source xml:space="preserve">Add &amp;Recipient</source>
<target xml:space="preserve">Add &amp;Recipient</target>
<context-group purpose="location"><context context-type="linenumber">1163</context></context-group>
</trans-unit>
- <trans-unit id="_msg632">
+ <trans-unit id="_msg635">
<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="_msg633">
+ <trans-unit id="_msg636">
<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">
+ <trans-unit id="_msg637">
<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">
+ <trans-unit id="_msg638">
<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">
+ <trans-unit id="_msg639">
<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">
+ <trans-unit id="_msg640">
<source xml:space="preserve">Specify a custom fee per kB (1,000 bytes) of the transaction&apos;s virtual size.
Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100 satoshis per kvB&quot; 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">
+ <trans-unit id="_msg641">
<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="_msg639">
+ <trans-unit id="_msg642">
<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="_msg640">
+ <trans-unit id="_msg643">
<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">
+ <trans-unit id="_msg644">
<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="_msg642">
+ <trans-unit id="_msg645">
<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="_msg643">
+ <trans-unit id="_msg646">
<source xml:space="preserve">With Replace-By-Fee (BIP-125) you can increase a transaction&apos;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="_msg644" approved="yes">
+ <trans-unit id="_msg647" approved="yes">
<source xml:space="preserve">Clear &amp;All</source>
<target xml:space="preserve">Clear &amp;All</target>
<context-group purpose="location"><context context-type="linenumber">1146</context></context-group>
</trans-unit>
- <trans-unit id="_msg645" approved="yes">
+ <trans-unit id="_msg648" 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="_msg646" approved="yes">
+ <trans-unit id="_msg649" 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="_msg647" approved="yes">
+ <trans-unit id="_msg650" approved="yes">
<source xml:space="preserve">S&amp;end</source>
<target xml:space="preserve">S&amp;end</target>
<context-group purpose="location"><context context-type="linenumber">1120</context></context-group>
@@ -3557,344 +3581,344 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
</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="_msg648">
+ <trans-unit id="_msg651">
<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="_msg649">
+ <trans-unit id="_msg652">
<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="_msg650">
+ <trans-unit id="_msg653">
<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="_msg651">
+ <trans-unit id="_msg654">
<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="_msg652">
+ <trans-unit id="_msg655">
<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="_msg653">
+ <trans-unit id="_msg656">
<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="_msg654">
+ <trans-unit id="_msg657">
<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="_msg655">
+ <trans-unit id="_msg658">
<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="_msg656">
+ <trans-unit id="_msg659">
<source xml:space="preserve">Cr&amp;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="_msg657">
+ <trans-unit id="_msg660">
<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="_msg658">
+ <trans-unit id="_msg661">
<source xml:space="preserve"> from wallet &apos;%1&apos;</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">294</context></context-group>
</trans-unit>
- <trans-unit id="_msg659">
+ <trans-unit id="_msg662">
<source xml:space="preserve">%1 to &apos;%2&apos;</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">305</context></context-group>
</trans-unit>
- <trans-unit id="_msg660">
+ <trans-unit id="_msg663">
<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="_msg661">
+ <trans-unit id="_msg664">
<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="_msg662">
+ <trans-unit id="_msg665">
<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="_msg663">
+ <trans-unit id="_msg666">
<source xml:space="preserve">To review recipient list click &quot;Show Details…&quot;</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">371</context></context-group>
</trans-unit>
- <trans-unit id="_msg664">
+ <trans-unit id="_msg667">
<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="_msg665">
+ <trans-unit id="_msg668">
<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="_msg666">
+ <trans-unit id="_msg669">
+ <source xml:space="preserve">Partially Signed Transaction (Binary)</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">436</context></context-group>
+ <note annotates="source" from="developer">Expanded name of the binary PSBT file format. See: BIP 174.</note>
+ </trans-unit>
+ <trans-unit id="_msg670">
<source xml:space="preserve">PSBT saved</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">442</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">443</context></context-group>
</trans-unit>
- <trans-unit id="_msg667">
+ <trans-unit id="_msg671">
<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="_msg668">
+ <trans-unit id="_msg672">
<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="_msg669">
+ <trans-unit id="_msg673">
<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="_msg670">
+ <trans-unit id="_msg674">
<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="_msg671">
+ <trans-unit id="_msg675">
<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="_msg672">
+ <trans-unit id="_msg676">
<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="_msg673">
+ <trans-unit id="_msg677">
<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="_msg674">
+ <trans-unit id="_msg678">
<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="_msg675">
+ <trans-unit id="_msg679">
<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="_msg676">
+ <trans-unit id="_msg680">
<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="_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="_msg678">
+ <trans-unit id="_msg681">
<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>
+ <context-group purpose="location"><context context-type="linenumber">619</context></context-group>
</trans-unit>
- <trans-unit id="_msg679">
+ <trans-unit id="_msg682">
<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>
+ <context-group purpose="location"><context context-type="linenumber">643</context></context-group>
</trans-unit>
- <trans-unit id="_msg680">
+ <trans-unit id="_msg683">
<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>
+ <context-group purpose="location"><context context-type="linenumber">646</context></context-group>
</trans-unit>
- <trans-unit id="_msg681">
+ <trans-unit id="_msg684">
<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>
+ <context-group purpose="location"><context context-type="linenumber">649</context></context-group>
</trans-unit>
- <trans-unit id="_msg682">
+ <trans-unit id="_msg685">
<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>
+ <context-group purpose="location"><context context-type="linenumber">652</context></context-group>
</trans-unit>
- <trans-unit id="_msg683">
+ <trans-unit id="_msg686">
<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>
+ <context-group purpose="location"><context context-type="linenumber">655</context></context-group>
</trans-unit>
- <trans-unit id="_msg684">
+ <trans-unit id="_msg687">
<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>
+ <context-group purpose="location"><context context-type="linenumber">658</context></context-group>
</trans-unit>
- <trans-unit id="_msg685">
+ <trans-unit id="_msg688">
<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>
+ <context-group purpose="location"><context context-type="linenumber">662</context></context-group>
</trans-unit>
- <trans-unit id="_msg686">
+ <trans-unit id="_msg689">
<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>
+ <context-group purpose="location"><context context-type="linenumber">665</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="_msg687[0]" approved="yes">
+ <context-group purpose="location"><context context-type="linenumber">789</context></context-group>
+ <trans-unit id="_msg690[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="_msg687[1]" approved="yes">
+ <trans-unit id="_msg690[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="_msg688">
+ <trans-unit id="_msg691">
<source xml:space="preserve">Warning: Invalid Bitcoin address</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">889</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">890</context></context-group>
</trans-unit>
- <trans-unit id="_msg689">
+ <trans-unit id="_msg692">
<source xml:space="preserve">Warning: Unknown change address</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">894</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">895</context></context-group>
</trans-unit>
- <trans-unit id="_msg690">
+ <trans-unit id="_msg693">
<source xml:space="preserve">Confirm custom change address</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">897</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">898</context></context-group>
</trans-unit>
- <trans-unit id="_msg691">
+ <trans-unit id="_msg694">
<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">897</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">898</context></context-group>
</trans-unit>
- <trans-unit id="_msg692">
+ <trans-unit id="_msg695">
<source xml:space="preserve">(no label)</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">918</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">919</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="_msg693" approved="yes">
+ <trans-unit id="_msg696" approved="yes">
<source xml:space="preserve">A&amp;mount:</source>
<target xml:space="preserve">A&amp;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="_msg694" approved="yes">
+ <trans-unit id="_msg697" approved="yes">
<source xml:space="preserve">Pay &amp;To:</source>
<target xml:space="preserve">Pay &amp;To:</target>
<context-group purpose="location"><context context-type="linenumber">39</context></context-group>
</trans-unit>
- <trans-unit id="_msg695" approved="yes">
+ <trans-unit id="_msg698" approved="yes">
<source xml:space="preserve">&amp;Label:</source>
<target xml:space="preserve">&amp;Label:</target>
<context-group purpose="location"><context context-type="linenumber">132</context></context-group>
</trans-unit>
- <trans-unit id="_msg696">
+ <trans-unit id="_msg699">
<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="_msg697">
+ <trans-unit id="_msg700">
<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="_msg698" approved="yes">
+ <trans-unit id="_msg701" 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="_msg699" approved="yes">
+ <trans-unit id="_msg702" 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="_msg700" approved="yes">
+ <trans-unit id="_msg703" 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="_msg701">
+ <trans-unit id="_msg704">
<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="_msg702">
+ <trans-unit id="_msg705">
<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="_msg703">
+ <trans-unit id="_msg706">
<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="_msg704">
+ <trans-unit id="_msg707">
<source xml:space="preserve">S&amp;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="_msg705">
+ <trans-unit id="_msg708">
<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="_msg706">
+ <trans-unit id="_msg709">
<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="_msg707">
+ <trans-unit id="_msg710">
<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="_msg708">
+ <trans-unit id="_msg711">
<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="_msg709">
+ <trans-unit id="_msg712">
<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="_msg710">
+ <trans-unit id="_msg713">
<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="_msg711">
+ <trans-unit id="_msg714">
<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="_msg712">
+ <trans-unit id="_msg715">
<source xml:space="preserve">Memo:</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">688</context></context-group>
@@ -3904,128 +3928,128 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
</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="_msg713" approved="yes">
+ <trans-unit id="_msg716" 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="_msg714" approved="yes">
+ <trans-unit id="_msg717" approved="yes">
<source xml:space="preserve">&amp;Sign Message</source>
<target xml:space="preserve">&amp;Sign Message</target>
<context-group purpose="location"><context context-type="linenumber">27</context></context-group>
</trans-unit>
- <trans-unit id="_msg715">
+ <trans-unit id="_msg718">
<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="_msg716">
+ <trans-unit id="_msg719">
<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="_msg717">
+ <trans-unit id="_msg720">
<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="_msg718" approved="yes">
+ <trans-unit id="_msg721" 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="_msg719" approved="yes">
+ <trans-unit id="_msg722" 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="_msg720" approved="yes">
+ <trans-unit id="_msg723" 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="_msg721" approved="yes">
+ <trans-unit id="_msg724" 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="_msg722" approved="yes">
+ <trans-unit id="_msg725" 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="_msg723" approved="yes">
+ <trans-unit id="_msg726" 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="_msg724" approved="yes">
+ <trans-unit id="_msg727" 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="_msg725" approved="yes">
+ <trans-unit id="_msg728" approved="yes">
<source xml:space="preserve">Sign &amp;Message</source>
<target xml:space="preserve">Sign &amp;Message</target>
<context-group purpose="location"><context context-type="linenumber">164</context></context-group>
</trans-unit>
- <trans-unit id="_msg726" approved="yes">
+ <trans-unit id="_msg729" 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="_msg727" approved="yes">
+ <trans-unit id="_msg730" approved="yes">
<source xml:space="preserve">Clear &amp;All</source>
<target xml:space="preserve">Clear &amp;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="_msg728" approved="yes">
+ <trans-unit id="_msg731" approved="yes">
<source xml:space="preserve">&amp;Verify Message</source>
<target xml:space="preserve">&amp;Verify Message</target>
<context-group purpose="location"><context context-type="linenumber">240</context></context-group>
</trans-unit>
- <trans-unit id="_msg729">
+ <trans-unit id="_msg732">
<source xml:space="preserve">Enter the receiver&apos;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="_msg730">
+ <trans-unit id="_msg733">
<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="_msg731">
+ <trans-unit id="_msg734">
<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="_msg732">
+ <trans-unit id="_msg735">
<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="_msg733" approved="yes">
+ <trans-unit id="_msg736" 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="_msg734" approved="yes">
+ <trans-unit id="_msg737" approved="yes">
<source xml:space="preserve">Verify &amp;Message</source>
<target xml:space="preserve">Verify &amp;Message</target>
<context-group purpose="location"><context context-type="linenumber">321</context></context-group>
</trans-unit>
- <trans-unit id="_msg735" approved="yes">
+ <trans-unit id="_msg738" 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="_msg736">
+ <trans-unit id="_msg739">
<source xml:space="preserve">Click &quot;Sign Message&quot; to generate signature</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">125</context></context-group>
@@ -4034,13 +4058,13 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
</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="_msg737">
+ <trans-unit id="_msg740">
<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="_msg738">
+ <trans-unit id="_msg741">
<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>
@@ -4048,59 +4072,59 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
<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="_msg739">
+ <trans-unit id="_msg742">
<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="_msg740">
+ <trans-unit id="_msg743">
<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="_msg741">
+ <trans-unit id="_msg744">
<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="_msg742">
+ <trans-unit id="_msg745">
<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="_msg743">
+ <trans-unit id="_msg746">
<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="_msg744">
+ <trans-unit id="_msg747">
<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="_msg745">
+ <trans-unit id="_msg748">
<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="_msg746">
+ <trans-unit id="_msg749">
<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="_msg747">
+ <trans-unit id="_msg750">
<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="_msg748">
+ <trans-unit id="_msg751">
<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="_msg749">
+ <trans-unit id="_msg752">
<source xml:space="preserve">Message verified.</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">214</context></context-group>
@@ -4109,7 +4133,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
</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="_msg750">
+ <trans-unit id="_msg753">
<source xml:space="preserve">kB/s</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">82</context></context-group>
@@ -4119,246 +4143,246 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
<file original="../transactiondesc.cpp" datatype="cpp" source-language="en" target-language="en"><body>
<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="_msg751[0]" approved="yes">
+ <context-group purpose="location"><context context-type="linenumber">36</context></context-group>
+ <trans-unit id="_msg754[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="_msg751[1]" approved="yes">
+ <trans-unit id="_msg754[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="_msg752">
+ <trans-unit id="_msg755">
<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>
+ <context-group purpose="location"><context context-type="linenumber">38</context></context-group>
</trans-unit>
- <trans-unit id="_msg753">
+ <trans-unit id="_msg756">
<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>
+ <context-group purpose="location"><context context-type="linenumber">44</context></context-group>
</trans-unit>
- <trans-unit id="_msg754">
+ <trans-unit id="_msg757">
<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>
+ <context-group purpose="location"><context context-type="linenumber">47</context></context-group>
</trans-unit>
- <trans-unit id="_msg755">
+ <trans-unit id="_msg758">
<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>
+ <context-group purpose="location"><context context-type="linenumber">47</context></context-group>
</trans-unit>
- <trans-unit id="_msg756">
+ <trans-unit id="_msg759">
<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>
+ <context-group purpose="location"><context context-type="linenumber">47</context></context-group>
</trans-unit>
- <trans-unit id="_msg757">
+ <trans-unit id="_msg760">
<source xml:space="preserve">abandoned</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">46</context></context-group>
</trans-unit>
- <trans-unit id="_msg758">
+ <trans-unit id="_msg761">
<source xml:space="preserve">%1/unconfirmed</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">49</context></context-group>
</trans-unit>
- <trans-unit id="_msg759">
+ <trans-unit id="_msg762">
<source xml:space="preserve">%1 confirmations</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">51</context></context-group>
</trans-unit>
- <trans-unit id="_msg760">
+ <trans-unit id="_msg763">
<source xml:space="preserve">Status</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">98</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">102</context></context-group>
</trans-unit>
- <trans-unit id="_msg761">
+ <trans-unit id="_msg764">
<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>
+ <context-group purpose="location"><context context-type="linenumber">105</context></context-group>
</trans-unit>
- <trans-unit id="_msg762">
+ <trans-unit id="_msg765">
<source xml:space="preserve">Source</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">112</context></context-group>
</trans-unit>
- <trans-unit id="_msg763">
+ <trans-unit id="_msg766">
<source xml:space="preserve">Generated</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">112</context></context-group>
</trans-unit>
- <trans-unit id="_msg764">
+ <trans-unit id="_msg767">
<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>
+ <context-group purpose="location"><context context-type="linenumber">117</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">131</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">203</context></context-group>
</trans-unit>
- <trans-unit id="_msg765">
+ <trans-unit id="_msg768">
<source xml:space="preserve">unknown</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">131</context></context-group>
</trans-unit>
- <trans-unit id="_msg766">
+ <trans-unit id="_msg769">
<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>
+ <context-group purpose="location"><context context-type="linenumber">132</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">152</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">222</context></context-group>
</trans-unit>
- <trans-unit id="_msg767">
+ <trans-unit id="_msg770">
<source xml:space="preserve">own address</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">134</context></context-group>
</trans-unit>
- <trans-unit id="_msg768">
+ <trans-unit id="_msg771">
<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>
+ <context-group purpose="location"><context context-type="linenumber">134</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">203</context></context-group>
</trans-unit>
- <trans-unit id="_msg769">
+ <trans-unit id="_msg772">
<source xml:space="preserve">label</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">132</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">136</context></context-group>
</trans-unit>
- <trans-unit id="_msg770">
+ <trans-unit id="_msg773">
<source xml:space="preserve">Credit</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">180</context></context-group>
- <context-group purpose="location"><context context-type="linenumber">234</context></context-group>
- <context-group purpose="location"><context context-type="linenumber">264</context></context-group>
- <context-group purpose="location"><context context-type="linenumber">324</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">172</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">184</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">238</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">268</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">328</context></context-group>
</trans-unit>
<group restype="x-gettext-plurals">
- <context-group purpose="location"><context context-type="linenumber">170</context></context-group>
- <trans-unit id="_msg771[0]" approved="yes">
+ <context-group purpose="location"><context context-type="linenumber">174</context></context-group>
+ <trans-unit id="_msg774[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="_msg771[1]" approved="yes">
+ <trans-unit id="_msg774[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="_msg772">
+ <trans-unit id="_msg775">
<source xml:space="preserve">not accepted</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">176</context></context-group>
</trans-unit>
- <trans-unit id="_msg773">
+ <trans-unit id="_msg776">
<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>
+ <context-group purpose="location"><context context-type="linenumber">236</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">262</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">325</context></context-group>
</trans-unit>
- <trans-unit id="_msg774">
+ <trans-unit id="_msg777">
<source xml:space="preserve">Total debit</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">246</context></context-group>
</trans-unit>
- <trans-unit id="_msg775">
+ <trans-unit id="_msg778">
<source xml:space="preserve">Total credit</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">247</context></context-group>
</trans-unit>
- <trans-unit id="_msg776">
+ <trans-unit id="_msg779">
<source xml:space="preserve">Transaction fee</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">248</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">252</context></context-group>
</trans-unit>
- <trans-unit id="_msg777">
+ <trans-unit id="_msg780">
<source xml:space="preserve">Net amount</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">270</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">274</context></context-group>
</trans-unit>
- <trans-unit id="_msg778">
+ <trans-unit id="_msg781">
<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>
+ <context-group purpose="location"><context context-type="linenumber">280</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">292</context></context-group>
</trans-unit>
- <trans-unit id="_msg779">
+ <trans-unit id="_msg782">
<source xml:space="preserve">Comment</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">278</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">282</context></context-group>
</trans-unit>
- <trans-unit id="_msg780">
+ <trans-unit id="_msg783">
<source xml:space="preserve">Transaction ID</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">280</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">284</context></context-group>
</trans-unit>
- <trans-unit id="_msg781">
+ <trans-unit id="_msg784">
<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>
+ <context-group purpose="location"><context context-type="linenumber">285</context></context-group>
</trans-unit>
- <trans-unit id="_msg782">
+ <trans-unit id="_msg785">
<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>
+ <context-group purpose="location"><context context-type="linenumber">286</context></context-group>
</trans-unit>
- <trans-unit id="_msg783">
+ <trans-unit id="_msg786">
<source xml:space="preserve">Output index</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">283</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">287</context></context-group>
</trans-unit>
- <trans-unit id="_msg784">
+ <trans-unit id="_msg787">
<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>
+ <context-group purpose="location"><context context-type="linenumber">303</context></context-group>
</trans-unit>
- <trans-unit id="_msg785">
+ <trans-unit id="_msg788">
<source xml:space="preserve">Merchant</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">306</context></context-group>
</trans-unit>
- <trans-unit id="_msg786">
+ <trans-unit id="_msg789">
<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 &quot;not accepted&quot; and it won&apos;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>
+ <context-group purpose="location"><context context-type="linenumber">314</context></context-group>
</trans-unit>
- <trans-unit id="_msg787">
+ <trans-unit id="_msg790">
<source xml:space="preserve">Debug information</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">318</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">322</context></context-group>
</trans-unit>
- <trans-unit id="_msg788">
+ <trans-unit id="_msg791">
<source xml:space="preserve">Transaction</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">326</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">330</context></context-group>
</trans-unit>
- <trans-unit id="_msg789">
+ <trans-unit id="_msg792">
<source xml:space="preserve">Inputs</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">329</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">333</context></context-group>
</trans-unit>
- <trans-unit id="_msg790">
+ <trans-unit id="_msg793">
<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>
+ <context-group purpose="location"><context context-type="linenumber">354</context></context-group>
</trans-unit>
- <trans-unit id="_msg791">
+ <trans-unit id="_msg794">
<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>
+ <context-group purpose="location"><context context-type="linenumber">355</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">356</context></context-group>
</trans-unit>
- <trans-unit id="_msg792">
+ <trans-unit id="_msg795">
<source xml:space="preserve">false</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>
+ <context-group purpose="location"><context context-type="linenumber">355</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">356</context></context-group>
</trans-unit>
</group>
</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="_msg793" approved="yes">
+ <trans-unit id="_msg796" 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>
@@ -4367,7 +4391,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
</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="_msg794">
+ <trans-unit id="_msg797">
<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>
@@ -4376,355 +4400,355 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of &quot;100
</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="_msg795">
+ <trans-unit id="_msg798">
<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>
+ <context-group purpose="location"><context context-type="linenumber">260</context></context-group>
</trans-unit>
- <trans-unit id="_msg796">
+ <trans-unit id="_msg799">
<source xml:space="preserve">Type</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">252</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">260</context></context-group>
</trans-unit>
- <trans-unit id="_msg797">
+ <trans-unit id="_msg800">
<source xml:space="preserve">Label</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">252</context></context-group>
+ <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">314</context></context-group>
- <trans-unit id="_msg798[0]" approved="yes">
+ <context-group purpose="location"><context context-type="linenumber">320</context></context-group>
+ <trans-unit id="_msg801[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="_msg798[1]" approved="yes">
+ <trans-unit id="_msg801[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="_msg799">
+ <trans-unit id="_msg802">
<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>
+ <context-group purpose="location"><context context-type="linenumber">323</context></context-group>
</trans-unit>
- <trans-unit id="_msg800">
+ <trans-unit id="_msg803">
<source xml:space="preserve">Unconfirmed</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">320</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">326</context></context-group>
</trans-unit>
- <trans-unit id="_msg801">
+ <trans-unit id="_msg804">
<source xml:space="preserve">Abandoned</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">323</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">329</context></context-group>
</trans-unit>
- <trans-unit id="_msg802">
+ <trans-unit id="_msg805">
<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>
+ <context-group purpose="location"><context context-type="linenumber">332</context></context-group>
</trans-unit>
- <trans-unit id="_msg803">
+ <trans-unit id="_msg806">
<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>
+ <context-group purpose="location"><context context-type="linenumber">335</context></context-group>
</trans-unit>
- <trans-unit id="_msg804">
+ <trans-unit id="_msg807">
<source xml:space="preserve">Conflicted</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">332</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">338</context></context-group>
</trans-unit>
- <trans-unit id="_msg805">
+ <trans-unit id="_msg808">
<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>
+ <context-group purpose="location"><context context-type="linenumber">341</context></context-group>
</trans-unit>
- <trans-unit id="_msg806">
+ <trans-unit id="_msg809">
<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>
+ <context-group purpose="location"><context context-type="linenumber">344</context></context-group>
</trans-unit>
- <trans-unit id="_msg807">
+ <trans-unit id="_msg810">
<source xml:space="preserve">Received with</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">383</context></context-group>
</trans-unit>
- <trans-unit id="_msg808">
+ <trans-unit id="_msg811">
<source xml:space="preserve">Received from</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">379</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">385</context></context-group>
</trans-unit>
- <trans-unit id="_msg809">
+ <trans-unit id="_msg812">
<source xml:space="preserve">Sent to</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">382</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">388</context></context-group>
</trans-unit>
- <trans-unit id="_msg810">
+ <trans-unit id="_msg813">
<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>
+ <context-group purpose="location"><context context-type="linenumber">390</context></context-group>
</trans-unit>
- <trans-unit id="_msg811">
+ <trans-unit id="_msg814">
<source xml:space="preserve">Mined</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">386</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">392</context></context-group>
</trans-unit>
- <trans-unit id="_msg812">
+ <trans-unit id="_msg815">
<source xml:space="preserve">watch-only</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">414</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">420</context></context-group>
</trans-unit>
- <trans-unit id="_msg813">
+ <trans-unit id="_msg816">
<source xml:space="preserve">(n/a)</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">430</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">436</context></context-group>
</trans-unit>
- <trans-unit id="_msg814">
+ <trans-unit id="_msg817">
<source xml:space="preserve">(no label)</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">640</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">646</context></context-group>
</trans-unit>
- <trans-unit id="_msg815">
+ <trans-unit id="_msg818">
<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>
+ <context-group purpose="location"><context context-type="linenumber">685</context></context-group>
</trans-unit>
- <trans-unit id="_msg816">
+ <trans-unit id="_msg819">
<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>
+ <context-group purpose="location"><context context-type="linenumber">687</context></context-group>
</trans-unit>
- <trans-unit id="_msg817">
+ <trans-unit id="_msg820">
<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>
+ <context-group purpose="location"><context context-type="linenumber">689</context></context-group>
</trans-unit>
- <trans-unit id="_msg818">
+ <trans-unit id="_msg821">
<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>
+ <context-group purpose="location"><context context-type="linenumber">691</context></context-group>
</trans-unit>
- <trans-unit id="_msg819">
+ <trans-unit id="_msg822">
<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>
+ <context-group purpose="location"><context context-type="linenumber">693</context></context-group>
</trans-unit>
- <trans-unit id="_msg820">
+ <trans-unit id="_msg823">
<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>
+ <context-group purpose="location"><context context-type="linenumber">695</context></context-group>
</trans-unit>
</group>
</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="_msg821">
+ <trans-unit id="_msg824">
<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="_msg822">
+ <trans-unit id="_msg825">
<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="_msg823">
+ <trans-unit id="_msg826">
<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="_msg824">
+ <trans-unit id="_msg827">
<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="_msg825">
+ <trans-unit id="_msg828">
<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="_msg826">
+ <trans-unit id="_msg829">
<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="_msg827">
+ <trans-unit id="_msg830">
<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="_msg828">
+ <trans-unit id="_msg831">
<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="_msg829">
+ <trans-unit id="_msg832">
<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="_msg830">
+ <trans-unit id="_msg833">
<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="_msg831">
+ <trans-unit id="_msg834">
<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="_msg832">
+ <trans-unit id="_msg835">
<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="_msg833">
+ <trans-unit id="_msg836">
<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="_msg834">
+ <trans-unit id="_msg837">
<source xml:space="preserve">Abandon transaction</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">177</context></context-group>
</trans-unit>
- <trans-unit id="_msg835">
+ <trans-unit id="_msg838">
<source xml:space="preserve">Increase transaction fee</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">174</context></context-group>
</trans-unit>
- <trans-unit id="_msg836">
+ <trans-unit id="_msg839">
<source xml:space="preserve">Copy address</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">166</context></context-group>
</trans-unit>
- <trans-unit id="_msg837">
+ <trans-unit id="_msg840">
<source xml:space="preserve">Copy label</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">167</context></context-group>
</trans-unit>
- <trans-unit id="_msg838">
+ <trans-unit id="_msg841">
<source xml:space="preserve">Copy amount</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">168</context></context-group>
</trans-unit>
- <trans-unit id="_msg839">
+ <trans-unit id="_msg842">
<source xml:space="preserve">Copy transaction ID</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">169</context></context-group>
</trans-unit>
- <trans-unit id="_msg840">
+ <trans-unit id="_msg843">
<source xml:space="preserve">Copy raw transaction</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">170</context></context-group>
</trans-unit>
- <trans-unit id="_msg841">
+ <trans-unit id="_msg844">
<source xml:space="preserve">Copy full transaction details</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">171</context></context-group>
</trans-unit>
- <trans-unit id="_msg842">
+ <trans-unit id="_msg845">
<source xml:space="preserve">Edit address label</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">178</context></context-group>
</trans-unit>
- <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">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="_msg844">
+ <trans-unit id="_msg846">
<source xml:space="preserve">Show transaction details</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">172</context></context-group>
</trans-unit>
- <trans-unit id="_msg845">
+ <trans-unit id="_msg847">
<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">
+ <trans-unit id="_msg848">
<source xml:space="preserve">Export Transaction History</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">338</context></context-group>
</trans-unit>
- <trans-unit id="_msg847">
+ <trans-unit id="_msg849">
+ <source xml:space="preserve">Comma separated file</source>
+ <target xml:space="preserve"></target>
+ <context-group purpose="location"><context context-type="linenumber">341</context></context-group>
+ <note annotates="source" from="developer">Expanded name of the CSV file format. See https://en.wikipedia.org/wiki/Comma-separated_values</note>
+ </trans-unit>
+ <trans-unit id="_msg850">
<source xml:space="preserve">Confirmed</source>
<target xml:space="preserve" state="needs-review-translation">Confirmed</target>
- <context-group purpose="location"><context context-type="linenumber">348</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">350</context></context-group>
</trans-unit>
- <trans-unit id="_msg848">
+ <trans-unit id="_msg851">
<source xml:space="preserve">Watch-only</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">350</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">352</context></context-group>
</trans-unit>
- <trans-unit id="_msg849">
+ <trans-unit id="_msg852">
<source xml:space="preserve">Date</source>
<target xml:space="preserve" state="needs-review-translation">Date</target>
- <context-group purpose="location"><context context-type="linenumber">351</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">353</context></context-group>
</trans-unit>
- <trans-unit id="_msg850">
+ <trans-unit id="_msg853">
<source xml:space="preserve">Type</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">354</context></context-group>
</trans-unit>
- <trans-unit id="_msg851">
+ <trans-unit id="_msg854">
<source xml:space="preserve">Label</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">353</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">355</context></context-group>
</trans-unit>
- <trans-unit id="_msg852">
+ <trans-unit id="_msg855">
<source xml:space="preserve">Address</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">354</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">356</context></context-group>
</trans-unit>
- <trans-unit id="_msg853">
+ <trans-unit id="_msg856">
<source xml:space="preserve">ID</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">356</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">358</context></context-group>
</trans-unit>
- <trans-unit id="_msg854">
+ <trans-unit id="_msg857">
<source xml:space="preserve">Exporting Failed</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">361</context></context-group>
</trans-unit>
- <trans-unit id="_msg855">
+ <trans-unit id="_msg858">
<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">359</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">361</context></context-group>
</trans-unit>
- <trans-unit id="_msg856">
+ <trans-unit id="_msg859">
<source xml:space="preserve">Exporting Successful</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">363</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">365</context></context-group>
</trans-unit>
- <trans-unit id="_msg857">
+ <trans-unit id="_msg860">
<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">363</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">365</context></context-group>
</trans-unit>
- <trans-unit id="_msg858">
+ <trans-unit id="_msg861">
<source xml:space="preserve">Range:</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">535</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">537</context></context-group>
</trans-unit>
- <trans-unit id="_msg859">
+ <trans-unit id="_msg862">
<source xml:space="preserve">to</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">543</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">545</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="_msg860">
+ <trans-unit id="_msg863">
<source xml:space="preserve">No wallet has been loaded.
Go to File &gt; 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="_msg861">
+ <trans-unit id="_msg864">
<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>
@@ -4733,12 +4757,12 @@ Go to File &gt; 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="_msg862">
+ <trans-unit id="_msg865">
<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="_msg863">
+ <trans-unit id="_msg866">
<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>
@@ -4746,67 +4770,67 @@ Go to File &gt; 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="_msg864">
+ <trans-unit id="_msg867">
<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="_msg865">
+ <trans-unit id="_msg868">
<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="_msg866">
+ <trans-unit id="_msg869">
<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="_msg867">
+ <trans-unit id="_msg870">
<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="_msg868">
+ <trans-unit id="_msg871">
<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="_msg869">
+ <trans-unit id="_msg872">
<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="_msg870">
+ <trans-unit id="_msg873">
<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="_msg871">
+ <trans-unit id="_msg874">
<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="_msg872">
+ <trans-unit id="_msg875">
<source xml:space="preserve">Can&apos;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="_msg873">
+ <trans-unit id="_msg876">
<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="_msg874">
+ <trans-unit id="_msg877">
<source xml:space="preserve">Can&apos;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="_msg875">
+ <trans-unit id="_msg878">
<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="_msg876">
+ <trans-unit id="_msg879">
<source xml:space="preserve">default wallet</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">587</context></context-group>
@@ -4815,872 +4839,847 @@ Go to File &gt; 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="_msg877">
+ <trans-unit id="_msg880">
<source xml:space="preserve">&amp;Export</source>
<target xml:space="preserve" state="needs-review-translation">&amp;Export</target>
<context-group purpose="location"><context context-type="linenumber">51</context></context-group>
</trans-unit>
- <trans-unit id="_msg878">
+ <trans-unit id="_msg881">
<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="_msg879">
+ <trans-unit id="_msg882">
<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="_msg880">
+ <trans-unit id="_msg883">
<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="_msg881">
+ <trans-unit id="_msg884">
<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="_msg882">
+ <trans-unit id="_msg885">
<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="_msg883">
+ <trans-unit id="_msg886">
<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="_msg884">
+ <trans-unit id="_msg887">
<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="_msg885">
+ <trans-unit id="_msg888">
<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="_msg886">
+ <trans-unit id="_msg889">
<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>
+ <context-group purpose="location"><context context-type="linenumber">277</context></context-group>
+ <note annotates="source" from="developer">Name of the wallet data file format.</note>
</trans-unit>
- <trans-unit id="_msg887">
+ <trans-unit id="_msg890">
<source xml:space="preserve">Backup Failed</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">282</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">283</context></context-group>
</trans-unit>
- <trans-unit id="_msg888">
+ <trans-unit id="_msg891">
<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>
+ <context-group purpose="location"><context context-type="linenumber">283</context></context-group>
</trans-unit>
- <trans-unit id="_msg889">
+ <trans-unit id="_msg892">
<source xml:space="preserve">Backup Successful</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">286</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">287</context></context-group>
</trans-unit>
- <trans-unit id="_msg890">
+ <trans-unit id="_msg893">
<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>
+ <context-group purpose="location"><context context-type="linenumber">287</context></context-group>
</trans-unit>
- <trans-unit id="_msg891">
+ <trans-unit id="_msg894">
<source xml:space="preserve">Cancel</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">330</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">331</context></context-group>
</trans-unit>
</group>
</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="_msg892">
+ <trans-unit id="_msg895">
<source xml:space="preserve">The %s developers</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">12</context></context-group>
</trans-unit>
- <trans-unit id="_msg893">
+ <trans-unit id="_msg896">
<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">13</context></context-group>
</trans-unit>
- <trans-unit id="_msg894">
+ <trans-unit id="_msg897">
<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">16</context></context-group>
</trans-unit>
- <trans-unit id="_msg895">
+ <trans-unit id="_msg898">
<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">19</context></context-group>
</trans-unit>
- <trans-unit id="_msg896">
+ <trans-unit id="_msg899">
<source xml:space="preserve">Cannot obtain a lock on data directory %s. %s is probably already running.</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">22</context></context-group>
</trans-unit>
- <trans-unit id="_msg897">
+ <trans-unit id="_msg900">
<source xml:space="preserve">Cannot provide specific connections and have addrman find outgoing connections at the same.</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">24</context></context-group>
</trans-unit>
- <trans-unit id="_msg898">
+ <trans-unit id="_msg901">
<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">27</context></context-group>
</trans-unit>
- <trans-unit id="_msg899">
+ <trans-unit id="_msg902">
<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="_msg900">
+ <trans-unit id="_msg903">
<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">34</context></context-group>
</trans-unit>
- <trans-unit id="_msg901">
+ <trans-unit id="_msg904">
<source xml:space="preserve">Error: Dumpfile format record is incorrect. Got &quot;%s&quot;, expected &quot;format&quot;.</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">37</context></context-group>
</trans-unit>
- <trans-unit id="_msg902">
+ <trans-unit id="_msg905">
<source xml:space="preserve">Error: Dumpfile identifier record is incorrect. Got &quot;%s&quot;, expected &quot;%s&quot;.</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">39</context></context-group>
</trans-unit>
- <trans-unit id="_msg903">
+ <trans-unit id="_msg906">
<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">41</context></context-group>
</trans-unit>
- <trans-unit id="_msg904">
+ <trans-unit id="_msg907">
<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">44</context></context-group>
</trans-unit>
- <trans-unit id="_msg905">
+ <trans-unit id="_msg908">
<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">46</context></context-group>
</trans-unit>
- <trans-unit id="_msg906">
+ <trans-unit id="_msg909">
<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">49</context></context-group>
</trans-unit>
- <trans-unit id="_msg907">
+ <trans-unit id="_msg910">
<source xml:space="preserve">Invalid amount for -maxtxfee=&lt;amount&gt;: &apos;%s&apos; (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">52</context></context-group>
</trans-unit>
- <trans-unit id="_msg908">
+ <trans-unit id="_msg911">
<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">55</context></context-group>
</trans-unit>
- <trans-unit id="_msg909">
+ <trans-unit id="_msg912">
<source xml:space="preserve">No dump file provided. To use createfromdump, -dumpfile=&lt;filename&gt; must be provided.</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">58</context></context-group>
</trans-unit>
- <trans-unit id="_msg910">
+ <trans-unit id="_msg913">
<source xml:space="preserve">No dump file provided. To use dump, -dumpfile=&lt;filename&gt; must be provided.</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">61</context></context-group>
</trans-unit>
- <trans-unit id="_msg911">
+ <trans-unit id="_msg914">
<source xml:space="preserve">No wallet file format provided. To use createfromdump, -format=&lt;format&gt; must be provided.</source>
<target xml:space="preserve"></target>
<context-group purpose="location"><context context-type="linenumber">63</context></context-group>
</trans-unit>
- <trans-unit id="_msg912">
+ <trans-unit id="_msg915">
<source xml:space="preserve">Please check that your computer&apos;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">66</context></context-group>
</trans-unit>
- <trans-unit id="_msg913">
+ <trans-unit id="_msg916">
<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">69</context></context-group>
</trans-unit>
- <trans-unit id="_msg914">
+ <trans-unit id="_msg917">
<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="_msg915">
+ <trans-unit id="_msg918">
<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">74</context></context-group>
</trans-unit>
- <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">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">80</context></context-group>
- </trans-unit>
- <trans-unit id="_msg918">
- <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">83</context></context-group>
- </trans-unit>
<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&apos;s date and time being set incorrectly. Only rebuild the block database if you are sure that your computer&apos;s date and time are correct</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">86</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">77</context></context-group>
</trans-unit>
<trans-unit id="_msg920">
- <source xml:space="preserve">The transaction amount is too small to send after the fee has been deducted</source>
+ <source xml:space="preserve">The block database contains a block which appears to be from the future. This may be due to your computer&apos;s date and time being set incorrectly. Only rebuild the block database if you are sure that your computer&apos;s date and time are correct</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">80</context></context-group>
</trans-unit>
<trans-unit id="_msg921">
- <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">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">93</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">85</context></context-group>
</trans-unit>
<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>
+ <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">97</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">87</context></context-group>
</trans-unit>
<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>
+ <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">100</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">91</context></context-group>
</trans-unit>
<trans-unit id="_msg924">
- <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">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">103</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">94</context></context-group>
</trans-unit>
<trans-unit id="_msg925">
- <source xml:space="preserve">This is the transaction fee you may pay when fee estimates are not available.</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">106</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">97</context></context-group>
</trans-unit>
<trans-unit id="_msg926">
- <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">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">108</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">100</context></context-group>
</trans-unit>
<trans-unit id="_msg927">
- <source xml:space="preserve">Transaction needs a change address, but we can&apos;t generate it. Please call keypoolrefill first.</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">111</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">102</context></context-group>
</trans-unit>
<trans-unit id="_msg928">
- <source xml:space="preserve">Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate.</source>
+ <source xml:space="preserve">Transaction needs a change address, but we can&apos;t generate it. Please call keypoolrefill first.</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">105</context></context-group>
</trans-unit>
<trans-unit id="_msg929">
- <source xml:space="preserve">Unknown wallet file format &quot;%s&quot; provided. Please provide one of &quot;bdb&quot; or &quot;sqlite&quot;.</source>
+ <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">117</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">108</context></context-group>
</trans-unit>
<trans-unit id="_msg930">
- <source xml:space="preserve">Warning: Dumpfile wallet format &quot;%s&quot; does not match command line specified format &quot;%s&quot;.</source>
+ <source xml:space="preserve">Unknown wallet file format &quot;%s&quot; provided. Please provide one of &quot;bdb&quot; or &quot;sqlite&quot;.</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">111</context></context-group>
</trans-unit>
<trans-unit id="_msg931">
- <source xml:space="preserve">Warning: Private keys detected in wallet {%s} with disabled private keys</source>
+ <source xml:space="preserve">Warning: Dumpfile wallet format &quot;%s&quot; does not match command line specified format &quot;%s&quot;.</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">114</context></context-group>
</trans-unit>
<trans-unit id="_msg932">
- <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">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">125</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">117</context></context-group>
</trans-unit>
<trans-unit id="_msg933">
- <source xml:space="preserve">Witness data for blocks after height %d requires validation. Please restart with -reindex.</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">128</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">119</context></context-group>
</trans-unit>
<trans-unit id="_msg934">
- <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">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">131</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">122</context></context-group>
</trans-unit>
<trans-unit id="_msg935">
- <source xml:space="preserve">%s is set very high!</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">134</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">125</context></context-group>
</trans-unit>
<trans-unit id="_msg936">
- <source xml:space="preserve">-maxmempool must be at least %d MB</source>
+ <source xml:space="preserve">%s is set very high!</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">128</context></context-group>
</trans-unit>
<trans-unit id="_msg937">
- <source xml:space="preserve">A fatal internal error occurred, see debug.log for details</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">136</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">129</context></context-group>
</trans-unit>
<trans-unit id="_msg938">
- <source xml:space="preserve">Cannot resolve -%s address: &apos;%s&apos;</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">137</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">130</context></context-group>
</trans-unit>
<trans-unit id="_msg939">
- <source xml:space="preserve">Cannot set -peerblockfilters without -blockfilterindex.</source>
+ <source xml:space="preserve">Cannot resolve -%s address: &apos;%s&apos;</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">131</context></context-group>
</trans-unit>
<trans-unit id="_msg940">
- <source xml:space="preserve">Cannot write to data directory &apos;%s&apos;; check permissions.</source>
+ <source xml:space="preserve">Cannot set -peerblockfilters without -blockfilterindex.</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">132</context></context-group>
</trans-unit>
<trans-unit id="_msg941">
- <source xml:space="preserve">Change index out of range</source>
+ <source xml:space="preserve">Cannot write to data directory &apos;%s&apos;; check permissions.</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">133</context></context-group>
</trans-unit>
<trans-unit id="_msg942">
- <source xml:space="preserve">Config setting for %s only applied on %s network when in [%s] section.</source>
+ <source xml:space="preserve">Change index out of range</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">134</context></context-group>
</trans-unit>
<trans-unit id="_msg943">
- <source xml:space="preserve">Copyright (C) %i-%i</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">142</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">135</context></context-group>
</trans-unit>
<trans-unit id="_msg944">
- <source xml:space="preserve">Corrupted block database detected</source>
+ <source xml:space="preserve">Copyright (C) %i-%i</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">143</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">136</context></context-group>
</trans-unit>
<trans-unit id="_msg945">
- <source xml:space="preserve">Could not find asmap file %s</source>
+ <source xml:space="preserve">Corrupted block database detected</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">137</context></context-group>
</trans-unit>
<trans-unit id="_msg946">
- <source xml:space="preserve">Could not parse asmap file %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">145</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">138</context></context-group>
</trans-unit>
<trans-unit id="_msg947">
- <source xml:space="preserve">Disk space is too low!</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">146</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">139</context></context-group>
</trans-unit>
<trans-unit id="_msg948">
- <source xml:space="preserve">Do you want to rebuild the block database now?</source>
+ <source xml:space="preserve">Disk space is too low!</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">147</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">140</context></context-group>
</trans-unit>
<trans-unit id="_msg949">
- <source xml:space="preserve">Done loading</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">148</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">141</context></context-group>
</trans-unit>
<trans-unit id="_msg950">
- <source xml:space="preserve">Dump file %s does not exist.</source>
+ <source xml:space="preserve">Done loading</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">142</context></context-group>
</trans-unit>
<trans-unit id="_msg951">
- <source xml:space="preserve">Error creating %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">150</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">143</context></context-group>
</trans-unit>
<trans-unit id="_msg952">
- <source xml:space="preserve">Error initializing block database</source>
+ <source xml:space="preserve">Error creating %s</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">151</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">144</context></context-group>
</trans-unit>
<trans-unit id="_msg953">
- <source xml:space="preserve">Error initializing wallet database environment %s!</source>
+ <source xml:space="preserve">Error initializing block database</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">152</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">145</context></context-group>
</trans-unit>
<trans-unit id="_msg954">
- <source xml:space="preserve">Error loading %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">153</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">146</context></context-group>
</trans-unit>
<trans-unit id="_msg955">
- <source xml:space="preserve">Error loading %s: Private keys can only be disabled during creation</source>
+ <source xml:space="preserve">Error loading %s</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">147</context></context-group>
</trans-unit>
<trans-unit id="_msg956">
- <source xml:space="preserve">Error loading %s: Wallet corrupted</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">155</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">148</context></context-group>
</trans-unit>
<trans-unit id="_msg957">
- <source xml:space="preserve">Error loading %s: Wallet requires newer version of %s</source>
+ <source xml:space="preserve">Error loading %s: Wallet corrupted</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">149</context></context-group>
</trans-unit>
<trans-unit id="_msg958">
- <source xml:space="preserve">Error loading block database</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">157</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">150</context></context-group>
</trans-unit>
<trans-unit id="_msg959">
- <source xml:space="preserve">Error opening block database</source>
+ <source xml:space="preserve">Error loading block database</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">158</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">151</context></context-group>
</trans-unit>
<trans-unit id="_msg960">
- <source xml:space="preserve">Error reading from database, shutting down.</source>
+ <source xml:space="preserve">Error opening block database</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">152</context></context-group>
</trans-unit>
<trans-unit id="_msg961">
- <source xml:space="preserve">Error reading next record from wallet database</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">160</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">153</context></context-group>
</trans-unit>
<trans-unit id="_msg962">
- <source xml:space="preserve">Error upgrading chainstate 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">161</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">154</context></context-group>
</trans-unit>
<trans-unit id="_msg963">
- <source xml:space="preserve">Error: Couldn&apos;t create cursor into database</source>
+ <source xml:space="preserve">Error upgrading chainstate database</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">155</context></context-group>
</trans-unit>
<trans-unit id="_msg964">
- <source xml:space="preserve">Error: Disk space is low for %s</source>
+ <source xml:space="preserve">Error: Couldn&apos;t create cursor into database</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">156</context></context-group>
</trans-unit>
<trans-unit id="_msg965">
- <source xml:space="preserve">Error: Dumpfile checksum does not match. Computed %s, expected %s</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">164</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">157</context></context-group>
</trans-unit>
<trans-unit id="_msg966">
- <source xml:space="preserve">Error: Got key that was not hex: %s</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">165</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">158</context></context-group>
</trans-unit>
<trans-unit id="_msg967">
- <source xml:space="preserve">Error: Got value that was not hex: %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">166</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">159</context></context-group>
</trans-unit>
<trans-unit id="_msg968">
- <source xml:space="preserve">Error: Keypool ran out, please call keypoolrefill first</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">167</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">160</context></context-group>
</trans-unit>
<trans-unit id="_msg969">
- <source xml:space="preserve">Error: Missing checksum</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">168</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">161</context></context-group>
</trans-unit>
<trans-unit id="_msg970">
- <source xml:space="preserve">Error: Unable to parse version %u as a uint32_t</source>
+ <source xml:space="preserve">Error: Missing checksum</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">162</context></context-group>
</trans-unit>
<trans-unit id="_msg971">
- <source xml:space="preserve">Error: Unable to write record to new wallet</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">170</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">163</context></context-group>
</trans-unit>
<trans-unit id="_msg972">
- <source xml:space="preserve">Failed to listen on any port. Use -listen=0 if you want this.</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">171</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">164</context></context-group>
</trans-unit>
<trans-unit id="_msg973">
- <source xml:space="preserve">Failed to rescan the wallet during initialization</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">172</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">165</context></context-group>
</trans-unit>
<trans-unit id="_msg974">
- <source xml:space="preserve">Failed to verify database</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">173</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">166</context></context-group>
</trans-unit>
<trans-unit id="_msg975">
- <source xml:space="preserve">Fee rate (%s) is lower than the minimum fee rate setting (%s)</source>
+ <source xml:space="preserve">Failed to verify database</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">167</context></context-group>
</trans-unit>
<trans-unit id="_msg976">
- <source xml:space="preserve">Ignoring duplicate -wallet %s.</source>
+ <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">175</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">168</context></context-group>
</trans-unit>
<trans-unit id="_msg977">
- <source xml:space="preserve">Importing…</source>
+ <source xml:space="preserve">Ignoring duplicate -wallet %s.</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">169</context></context-group>
</trans-unit>
<trans-unit id="_msg978">
- <source xml:space="preserve">Incorrect or no genesis block found. Wrong datadir for network?</source>
+ <source xml:space="preserve">Importing…</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">177</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">170</context></context-group>
</trans-unit>
<trans-unit id="_msg979">
- <source xml:space="preserve">Initialization sanity check failed. %s is shutting down.</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">178</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">171</context></context-group>
</trans-unit>
<trans-unit id="_msg980">
- <source xml:space="preserve">Insufficient funds</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">179</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">172</context></context-group>
</trans-unit>
<trans-unit id="_msg981">
- <source xml:space="preserve">Invalid -i2psam address or hostname: &apos;%s&apos;</source>
+ <source xml:space="preserve">Insufficient funds</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">173</context></context-group>
</trans-unit>
<trans-unit id="_msg982">
- <source xml:space="preserve">Invalid -onion address or hostname: &apos;%s&apos;</source>
+ <source xml:space="preserve">Invalid -i2psam address or hostname: &apos;%s&apos;</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">174</context></context-group>
</trans-unit>
<trans-unit id="_msg983">
- <source xml:space="preserve">Invalid -proxy address or hostname: &apos;%s&apos;</source>
+ <source xml:space="preserve">Invalid -onion address or hostname: &apos;%s&apos;</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">175</context></context-group>
</trans-unit>
<trans-unit id="_msg984">
- <source xml:space="preserve">Invalid P2P permission: &apos;%s&apos;</source>
+ <source xml:space="preserve">Invalid -proxy address or hostname: &apos;%s&apos;</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">176</context></context-group>
</trans-unit>
<trans-unit id="_msg985">
- <source xml:space="preserve">Invalid amount for -%s=&lt;amount&gt;: &apos;%s&apos;</source>
+ <source xml:space="preserve">Invalid P2P permission: &apos;%s&apos;</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">177</context></context-group>
</trans-unit>
<trans-unit id="_msg986">
- <source xml:space="preserve">Invalid amount for -discardfee=&lt;amount&gt;: &apos;%s&apos;</source>
+ <source xml:space="preserve">Invalid amount for -%s=&lt;amount&gt;: &apos;%s&apos;</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">178</context></context-group>
</trans-unit>
<trans-unit id="_msg987">
- <source xml:space="preserve">Invalid amount for -fallbackfee=&lt;amount&gt;: &apos;%s&apos;</source>
+ <source xml:space="preserve">Invalid amount for -discardfee=&lt;amount&gt;: &apos;%s&apos;</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">179</context></context-group>
</trans-unit>
<trans-unit id="_msg988">
- <source xml:space="preserve">Invalid amount for -paytxfee=&lt;amount&gt;: &apos;%s&apos; (must be at least %s)</source>
+ <source xml:space="preserve">Invalid amount for -fallbackfee=&lt;amount&gt;: &apos;%s&apos;</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">180</context></context-group>
</trans-unit>
<trans-unit id="_msg989">
- <source xml:space="preserve">Invalid netmask specified in -whitelist: &apos;%s&apos;</source>
+ <source xml:space="preserve">Invalid amount for -paytxfee=&lt;amount&gt;: &apos;%s&apos; (must be at least %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">181</context></context-group>
</trans-unit>
<trans-unit id="_msg990">
- <source xml:space="preserve">Loading P2P addresses…</source>
+ <source xml:space="preserve">Invalid netmask specified in -whitelist: &apos;%s&apos;</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">182</context></context-group>
</trans-unit>
<trans-unit id="_msg991">
- <source xml:space="preserve">Loading banlist…</source>
+ <source xml:space="preserve">Loading P2P addresses…</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">183</context></context-group>
</trans-unit>
<trans-unit id="_msg992">
- <source xml:space="preserve">Loading block index…</source>
+ <source xml:space="preserve">Loading banlist…</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">191</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">184</context></context-group>
</trans-unit>
<trans-unit id="_msg993">
- <source xml:space="preserve">Loading wallet…</source>
+ <source xml:space="preserve">Loading block index…</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">192</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">185</context></context-group>
</trans-unit>
<trans-unit id="_msg994">
- <source xml:space="preserve">Need to specify a port with -whitebind: &apos;%s&apos;</source>
+ <source xml:space="preserve">Loading wallet…</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">186</context></context-group>
</trans-unit>
<trans-unit id="_msg995">
- <source xml:space="preserve">No proxy server specified. Use -proxy=&lt;ip&gt; or -proxy=&lt;ip:port&gt;.</source>
+ <source xml:space="preserve">Need to specify a port with -whitebind: &apos;%s&apos;</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">194</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">187</context></context-group>
</trans-unit>
<trans-unit id="_msg996">
- <source xml:space="preserve">Not enough file descriptors available.</source>
+ <source xml:space="preserve">No proxy server specified. Use -proxy=&lt;ip&gt; or -proxy=&lt;ip:port&gt;.</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">188</context></context-group>
</trans-unit>
<trans-unit id="_msg997">
- <source xml:space="preserve">Prune cannot be configured with a negative value.</source>
+ <source xml:space="preserve">Not enough file descriptors available.</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">189</context></context-group>
</trans-unit>
<trans-unit id="_msg998">
- <source xml:space="preserve">Prune mode is incompatible with -coinstatsindex.</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">197</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">190</context></context-group>
</trans-unit>
<trans-unit id="_msg999">
- <source xml:space="preserve">Prune mode is incompatible with -txindex.</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">198</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">191</context></context-group>
</trans-unit>
<trans-unit id="_msg1000">
- <source xml:space="preserve">Pruning blockstore…</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">199</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">192</context></context-group>
</trans-unit>
<trans-unit id="_msg1001">
- <source xml:space="preserve">Reducing -maxconnections from %d to %d, because of system limitations.</source>
+ <source xml:space="preserve">Pruning blockstore…</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">193</context></context-group>
</trans-unit>
<trans-unit id="_msg1002">
- <source xml:space="preserve">Replaying blocks…</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">201</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">194</context></context-group>
</trans-unit>
<trans-unit id="_msg1003">
- <source xml:space="preserve">Rescanning…</source>
+ <source xml:space="preserve">Replaying blocks…</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">195</context></context-group>
</trans-unit>
<trans-unit id="_msg1004">
- <source xml:space="preserve">SQLiteDatabase: Failed to execute statement to verify database: %s</source>
+ <source xml:space="preserve">Rescanning…</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">196</context></context-group>
</trans-unit>
<trans-unit id="_msg1005">
- <source xml:space="preserve">SQLiteDatabase: Failed to fetch sqlite wallet schema version: %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">204</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">197</context></context-group>
</trans-unit>
<trans-unit id="_msg1006">
- <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">205</context></context-group>
- </trans-unit>
- <trans-unit id="_msg1007">
<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">206</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">198</context></context-group>
</trans-unit>
- <trans-unit id="_msg1008">
+ <trans-unit id="_msg1007">
<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">207</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">199</context></context-group>
</trans-unit>
- <trans-unit id="_msg1009">
+ <trans-unit id="_msg1008">
<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">208</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">200</context></context-group>
</trans-unit>
- <trans-unit id="_msg1010">
+ <trans-unit id="_msg1009">
<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>
+ <context-group purpose="location"><context context-type="linenumber">201</context></context-group>
</trans-unit>
- <trans-unit id="_msg1011">
+ <trans-unit id="_msg1010">
<source xml:space="preserve">Signing transaction failed</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">210</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">202</context></context-group>
</trans-unit>
- <trans-unit id="_msg1012">
+ <trans-unit id="_msg1011">
<source xml:space="preserve">Specified -walletdir &quot;%s&quot; does not exist</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">211</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">203</context></context-group>
</trans-unit>
- <trans-unit id="_msg1013">
+ <trans-unit id="_msg1012">
<source xml:space="preserve">Specified -walletdir &quot;%s&quot; is a relative path</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">212</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">204</context></context-group>
</trans-unit>
- <trans-unit id="_msg1014">
+ <trans-unit id="_msg1013">
<source xml:space="preserve">Specified -walletdir &quot;%s&quot; is not a directory</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">213</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">205</context></context-group>
</trans-unit>
- <trans-unit id="_msg1015">
+ <trans-unit id="_msg1014">
<source xml:space="preserve">Specified blocks directory &quot;%s&quot; does not exist.</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">206</context></context-group>
</trans-unit>
- <trans-unit id="_msg1016">
+ <trans-unit id="_msg1015">
<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>
+ <context-group purpose="location"><context context-type="linenumber">207</context></context-group>
</trans-unit>
- <trans-unit id="_msg1017">
+ <trans-unit id="_msg1016">
<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">216</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">208</context></context-group>
</trans-unit>
- <trans-unit id="_msg1018">
+ <trans-unit id="_msg1017">
<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">217</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">209</context></context-group>
</trans-unit>
- <trans-unit id="_msg1019">
+ <trans-unit id="_msg1018">
<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>
+ <context-group purpose="location"><context context-type="linenumber">210</context></context-group>
</trans-unit>
- <trans-unit id="_msg1020">
+ <trans-unit id="_msg1019">
<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>
+ <context-group purpose="location"><context context-type="linenumber">211</context></context-group>
</trans-unit>
- <trans-unit id="_msg1021">
+ <trans-unit id="_msg1020">
<source xml:space="preserve">This is experimental software.</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">212</context></context-group>
</trans-unit>
- <trans-unit id="_msg1022">
+ <trans-unit id="_msg1021">
<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">221</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">213</context></context-group>
</trans-unit>
- <trans-unit id="_msg1023">
+ <trans-unit id="_msg1022">
<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">222</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">214</context></context-group>
</trans-unit>
- <trans-unit id="_msg1024">
+ <trans-unit id="_msg1023">
<source xml:space="preserve">Transaction amount too small</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">223</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">215</context></context-group>
</trans-unit>
- <trans-unit id="_msg1025">
+ <trans-unit id="_msg1024">
<source xml:space="preserve">Transaction amounts must not be negative</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">224</context></context-group>
- </trans-unit>
- <trans-unit id="_msg1026">
- <source xml:space="preserve">Transaction fee and change calculation failed</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">216</context></context-group>
</trans-unit>
- <trans-unit id="_msg1027">
+ <trans-unit id="_msg1025">
<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">226</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">217</context></context-group>
</trans-unit>
- <trans-unit id="_msg1028">
+ <trans-unit id="_msg1026">
<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">227</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">218</context></context-group>
</trans-unit>
- <trans-unit id="_msg1029">
+ <trans-unit id="_msg1027">
<source xml:space="preserve">Transaction too large</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">228</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">219</context></context-group>
</trans-unit>
- <trans-unit id="_msg1030">
+ <trans-unit id="_msg1028">
<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">229</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">220</context></context-group>
</trans-unit>
- <trans-unit id="_msg1031">
+ <trans-unit id="_msg1029">
<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">230</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">221</context></context-group>
</trans-unit>
- <trans-unit id="_msg1032">
+ <trans-unit id="_msg1030">
<source xml:space="preserve">Unable to create the PID file &apos;%s&apos;: %s</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">222</context></context-group>
</trans-unit>
- <trans-unit id="_msg1033">
+ <trans-unit id="_msg1031">
<source xml:space="preserve">Unable to generate initial keys</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">223</context></context-group>
</trans-unit>
- <trans-unit id="_msg1034">
+ <trans-unit id="_msg1032">
<source xml:space="preserve">Unable to generate keys</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">224</context></context-group>
</trans-unit>
- <trans-unit id="_msg1035">
+ <trans-unit id="_msg1033">
<source xml:space="preserve">Unable to open %s for writing</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">225</context></context-group>
</trans-unit>
- <trans-unit id="_msg1036">
+ <trans-unit id="_msg1034">
<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">235</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">226</context></context-group>
</trans-unit>
- <trans-unit id="_msg1037">
+ <trans-unit id="_msg1035">
<source xml:space="preserve">Unknown -blockfilterindex value %s.</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">227</context></context-group>
</trans-unit>
- <trans-unit id="_msg1038">
+ <trans-unit id="_msg1036">
<source xml:space="preserve">Unknown address type &apos;%s&apos;</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">228</context></context-group>
</trans-unit>
- <trans-unit id="_msg1039">
+ <trans-unit id="_msg1037">
<source xml:space="preserve">Unknown change type &apos;%s&apos;</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">229</context></context-group>
</trans-unit>
- <trans-unit id="_msg1040">
+ <trans-unit id="_msg1038">
<source xml:space="preserve">Unknown network specified in -onlynet: &apos;%s&apos;</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">239</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">230</context></context-group>
</trans-unit>
- <trans-unit id="_msg1041">
+ <trans-unit id="_msg1039">
<source xml:space="preserve">Unsupported logging category %s=%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">231</context></context-group>
</trans-unit>
- <trans-unit id="_msg1042">
+ <trans-unit id="_msg1040">
<source xml:space="preserve">Upgrading UTXO database</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">232</context></context-group>
</trans-unit>
- <trans-unit id="_msg1043">
+ <trans-unit id="_msg1041">
<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>
+ <context-group purpose="location"><context context-type="linenumber">233</context></context-group>
</trans-unit>
- <trans-unit id="_msg1044">
+ <trans-unit id="_msg1042">
<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>
+ <context-group purpose="location"><context context-type="linenumber">234</context></context-group>
</trans-unit>
- <trans-unit id="_msg1045">
+ <trans-unit id="_msg1043">
<source xml:space="preserve">Verifying blocks…</source>
<target xml:space="preserve"></target>
- <context-group purpose="location"><context context-type="linenumber">244</context></context-group>
+ <context-group purpose="location"><context context-type="linenumber">235</context></context-group>
</trans-unit>
- <trans-unit id="_msg1046">
+ <trans-unit id="_msg1044">
<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>
+ <context-group purpose="location"><context context-type="linenumber">236</context></context-group>
</trans-unit>
- <trans-unit id="_msg1047">
+ <trans-unit id="_msg1045">
<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>
+ <context-group purpose="location"><context context-type="linenumber">237</context></context-group>
</trans-unit>
- <trans-unit id="_msg1048">
+ <trans-unit id="_msg1046">
<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>
+ <context-group purpose="location"><context context-type="linenumber">238</context></context-group>
</trans-unit>
</group>
</body></file>
diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp
index 70762ab6bc..abdf9e9ae6 100644
--- a/src/qt/optionsmodel.cpp
+++ b/src/qt/optionsmodel.cpp
@@ -21,6 +21,7 @@
#include <validation.h> // For DEFAULT_SCRIPTCHECK_THREADS
#include <QDebug>
+#include <QLatin1Char>
#include <QSettings>
#include <QStringList>
@@ -244,7 +245,7 @@ static ProxySetting GetProxySetting(QSettings &settings, const QString &name)
static void SetProxySetting(QSettings &settings, const QString &name, const ProxySetting &ip_port)
{
- settings.setValue(name, ip_port.ip + ":" + ip_port.port);
+ settings.setValue(name, QString{ip_port.ip + QLatin1Char(':') + ip_port.port});
}
static const QString GetDefaultProxyAddress()
diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp
index 7f12b1d2b5..27783bdf87 100644
--- a/src/qt/overviewpage.cpp
+++ b/src/qt/overviewpage.cpp
@@ -78,6 +78,7 @@ public:
{
QIcon iconWatchonly = qvariant_cast<QIcon>(index.data(TransactionTableModel::WatchonlyDecorationRole));
QRect watchonlyRect(boundingRect.right() + 5, mainRect.top()+ypad+halfheight, 16, halfheight);
+ iconWatchonly = platformStyle->TextColorIcon(iconWatchonly);
iconWatchonly.paint(painter, watchonlyRect);
address_rect_min_width += 5 + watchonlyRect.width();
}
@@ -143,6 +144,7 @@ OverviewPage::OverviewPage(const PlatformStyle *platformStyle, QWidget *parent)
ui(new Ui::OverviewPage),
clientModel(nullptr),
walletModel(nullptr),
+ m_platform_style{platformStyle},
txdelegate(new TxViewDelegate(platformStyle, this))
{
ui->setupUi(this);
@@ -150,7 +152,7 @@ OverviewPage::OverviewPage(const PlatformStyle *platformStyle, QWidget *parent)
m_balances.balance = -1;
// use a SingleColorIcon for the "out of sync warning" icon
- QIcon icon = platformStyle->SingleColorIcon(":/icons/warning");
+ QIcon icon = m_platform_style->SingleColorIcon(QStringLiteral(":/icons/warning"));
ui->labelTransactionsStatus->setIcon(icon);
ui->labelWalletStatus->setIcon(icon);
@@ -298,6 +300,17 @@ void OverviewPage::setWalletModel(WalletModel *model)
updateDisplayUnit();
}
+void OverviewPage::changeEvent(QEvent* e)
+{
+#ifdef Q_OS_MACOS
+ if (e->type() == QEvent::PaletteChange) {
+ QIcon icon = m_platform_style->SingleColorIcon(QStringLiteral(":/icons/warning"));
+ ui->labelTransactionsStatus->setIcon(icon);
+ ui->labelWalletStatus->setIcon(icon);
+ }
+#endif
+}
+
void OverviewPage::updateDisplayUnit()
{
if(walletModel && walletModel->getOptionsModel())
diff --git a/src/qt/overviewpage.h b/src/qt/overviewpage.h
index 5158c81678..755a107a00 100644
--- a/src/qt/overviewpage.h
+++ b/src/qt/overviewpage.h
@@ -45,6 +45,9 @@ Q_SIGNALS:
void transactionClicked(const QModelIndex &index);
void outOfSyncWarningClicked();
+protected:
+ void changeEvent(QEvent* e) override;
+
private:
Ui::OverviewPage *ui;
ClientModel *clientModel;
@@ -52,6 +55,8 @@ private:
interfaces::WalletBalances m_balances;
bool m_privacy{false};
+ const PlatformStyle* m_platform_style;
+
TxViewDelegate *txdelegate;
std::unique_ptr<TransactionFilterProxy> filter;
diff --git a/src/qt/peertablemodel.cpp b/src/qt/peertablemodel.cpp
index 6c4e326011..11441481bb 100644
--- a/src/qt/peertablemodel.cpp
+++ b/src/qt/peertablemodel.cpp
@@ -114,7 +114,7 @@ QVariant PeerTableModel::data(const QModelIndex &index, int role) const
return (qint64)rec->nodeStats.nodeid;
case Address:
// prepend to peer address down-arrow symbol for inbound connection and up-arrow for outbound connection
- return QString(rec->nodeStats.fInbound ? "↓ " : "↑ ") + QString::fromStdString(rec->nodeStats.addrName);
+ return QString::fromStdString((rec->nodeStats.fInbound ? "↓ " : "↑ ") + rec->nodeStats.addrName);
case ConnectionType:
return GUIUtil::ConnectionTypeToQString(rec->nodeStats.m_conn_type, /* prepend_direction */ false);
case Network:
diff --git a/src/qt/peertablemodel.h b/src/qt/peertablemodel.h
index 9c7bc25da2..3d195342f1 100644
--- a/src/qt/peertablemodel.h
+++ b/src/qt/peertablemodel.h
@@ -74,7 +74,31 @@ public Q_SLOTS:
private:
interfaces::Node& m_node;
- const QStringList columns{tr("Peer Id"), tr("Address"), tr("Type"), tr("Network"), tr("Ping"), tr("Sent"), tr("Received"), tr("User Agent")};
+ const QStringList columns{
+ /*: Title of Peers Table column which contains a
+ unique number used to identify a connection. */
+ tr("Peer"),
+ /*: Title of Peers Table column which contains the
+ IP/Onion/I2P address of the connected peer. */
+ tr("Address"),
+ /*: Title of Peers Table column which describes the type of
+ peer connection. The "type" describes why the connection exists. */
+ tr("Type"),
+ /*: Title of Peers Table column which states the network the peer
+ connected through. */
+ tr("Network"),
+ /*: Title of Peers Table column which indicates the current latency
+ of the connection with the peer. */
+ tr("Ping"),
+ /*: Title of Peers Table column which indicates the total amount of
+ network information we have sent to the peer. */
+ tr("Sent"),
+ /*: Title of Peers Table column which indicates the total amount of
+ network information we have received from the peer. */
+ tr("Received"),
+ /*: Title of Peers Table column which contains the peer's
+ User Agent string. */
+ tr("User Agent")};
std::unique_ptr<PeerTablePriv> priv;
QTimer *timer;
};
diff --git a/src/qt/platformstyle.cpp b/src/qt/platformstyle.cpp
index 1d0605c903..2257c2ad4f 100644
--- a/src/qt/platformstyle.cpp
+++ b/src/qt/platformstyle.cpp
@@ -71,25 +71,28 @@ PlatformStyle::PlatformStyle(const QString &_name, bool _imagesOnButtons, bool _
name(_name),
imagesOnButtons(_imagesOnButtons),
colorizeIcons(_colorizeIcons),
- useExtraSpacing(_useExtraSpacing),
- singleColor(0,0,0),
- textColor(0,0,0)
+ useExtraSpacing(_useExtraSpacing)
+{
+}
+
+QColor PlatformStyle::TextColor() const
+{
+ return QApplication::palette().color(QPalette::WindowText);
+}
+
+QColor PlatformStyle::SingleColor() const
{
- // Determine icon highlighting color
if (colorizeIcons) {
const QColor colorHighlightBg(QApplication::palette().color(QPalette::Highlight));
const QColor colorHighlightFg(QApplication::palette().color(QPalette::HighlightedText));
const QColor colorText(QApplication::palette().color(QPalette::WindowText));
const int colorTextLightness = colorText.lightness();
- QColor colorbase;
- if (abs(colorHighlightBg.lightness() - colorTextLightness) < abs(colorHighlightFg.lightness() - colorTextLightness))
- colorbase = colorHighlightBg;
- else
- colorbase = colorHighlightFg;
- singleColor = colorbase;
+ if (abs(colorHighlightBg.lightness() - colorTextLightness) < abs(colorHighlightFg.lightness() - colorTextLightness)) {
+ return colorHighlightBg;
+ }
+ return colorHighlightFg;
}
- // Determine text color
- textColor = QColor(QApplication::palette().color(QPalette::WindowText));
+ return {0, 0, 0};
}
QImage PlatformStyle::SingleColorImage(const QString& filename) const
diff --git a/src/qt/platformstyle.h b/src/qt/platformstyle.h
index 53632e56e2..9df0a1f985 100644
--- a/src/qt/platformstyle.h
+++ b/src/qt/platformstyle.h
@@ -21,8 +21,8 @@ public:
bool getImagesOnButtons() const { return imagesOnButtons; }
bool getUseExtraSpacing() const { return useExtraSpacing; }
- QColor TextColor() const { return textColor; }
- QColor SingleColor() const { return singleColor; }
+ QColor TextColor() const;
+ QColor SingleColor() const;
/** Colorize an image (given filename) with the icon color */
QImage SingleColorImage(const QString& filename) const;
@@ -43,9 +43,6 @@ private:
bool imagesOnButtons;
bool colorizeIcons;
bool useExtraSpacing;
- QColor singleColor;
- QColor textColor;
- /* ... more to come later */
};
#endif // BITCOIN_QT_PLATFORMSTYLE_H
diff --git a/src/qt/psbtoperationsdialog.cpp b/src/qt/psbtoperationsdialog.cpp
index 17746b395b..99318c3bc0 100644
--- a/src/qt/psbtoperationsdialog.cpp
+++ b/src/qt/psbtoperationsdialog.cpp
@@ -141,7 +141,8 @@ void PSBTOperationsDialog::saveTransaction() {
filename_suggestion.append(".psbt");
QString filename = GUIUtil::getSaveFileName(this,
tr("Save Transaction Data"), filename_suggestion,
- tr("Partially Signed Transaction (Binary)", "Name of binary PSBT file format") + QLatin1String(" (*.psbt)"), &selected_filter);
+ //: Expanded name of the binary PSBT file format. See: BIP 174.
+ tr("Partially Signed Transaction (Binary)") + QLatin1String(" (*.psbt)"), &selected_filter);
if (filename.isEmpty()) {
return;
}
diff --git a/src/qt/qrimagewidget.cpp b/src/qt/qrimagewidget.cpp
index 3e1964915d..f5200bb5c0 100644
--- a/src/qt/qrimagewidget.cpp
+++ b/src/qt/qrimagewidget.cpp
@@ -118,7 +118,9 @@ void QRImageWidget::saveImage()
return;
QString fn = GUIUtil::getSaveFileName(
this, tr("Save QR Code"), QString(),
- tr("PNG Image", "Name of PNG file format") + QLatin1String(" (*.png)"), nullptr);
+ /*: Expanded name of the PNG file format.
+ See https://en.wikipedia.org/wiki/Portable_Network_Graphics */
+ tr("PNG Image") + QLatin1String(" (*.png)"), nullptr);
if (!fn.isEmpty())
{
exportImage().save(fn);
diff --git a/src/qt/recentrequeststablemodel.cpp b/src/qt/recentrequeststablemodel.cpp
index 03531a1381..1ecc2f67ef 100644
--- a/src/qt/recentrequeststablemodel.cpp
+++ b/src/qt/recentrequeststablemodel.cpp
@@ -14,6 +14,9 @@
#include <utility>
+#include <QLatin1Char>
+#include <QLatin1String>
+
RecentRequestsTableModel::RecentRequestsTableModel(WalletModel *parent) :
QAbstractTableModel(parent), walletModel(parent)
{
@@ -124,7 +127,11 @@ void RecentRequestsTableModel::updateAmountColumnTitle()
/** Gets title for amount column including current display unit if optionsModel reference available. */
QString RecentRequestsTableModel::getAmountTitle()
{
- return (this->walletModel->getOptionsModel() != nullptr) ? tr("Requested") + " ("+BitcoinUnits::shortName(this->walletModel->getOptionsModel()->getDisplayUnit()) + ")" : "";
+ if (!walletModel->getOptionsModel()) return {};
+ return tr("Requested") +
+ QLatin1String(" (") +
+ BitcoinUnits::shortName(this->walletModel->getOptionsModel()->getDisplayUnit()) +
+ QLatin1Char(')');
}
QModelIndex RecentRequestsTableModel::index(int row, int column, const QModelIndex &parent) const
diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp
index afbdc07ba0..83a111e9c8 100644
--- a/src/qt/rpcconsole.cpp
+++ b/src/qt/rpcconsole.cpp
@@ -843,6 +843,25 @@ void RPCConsole::keyPressEvent(QKeyEvent *event)
}
}
+void RPCConsole::changeEvent(QEvent* e)
+{
+#ifdef Q_OS_MACOS
+ if (e->type() == QEvent::PaletteChange) {
+ ui->clearButton->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/remove")));
+ ui->fontBiggerButton->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/fontbigger")));
+ ui->fontSmallerButton->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/fontsmaller")));
+ ui->promptIcon->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/prompticon")));
+
+ for (int i = 0; ICON_MAPPING[i].url; ++i) {
+ ui->messagesWidget->document()->addResource(
+ QTextDocument::ImageResource,
+ QUrl(ICON_MAPPING[i].url),
+ platformStyle->SingleColorImage(ICON_MAPPING[i].source).scaled(QSize(consoleFontSize * 2, consoleFontSize * 2), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
+ }
+ }
+#endif
+}
+
void RPCConsole::message(int category, const QString &message, bool html)
{
QTime time = QTime::currentTime();
@@ -1049,7 +1068,7 @@ void RPCConsole::updateDetailWidget()
const auto stats = selected_peers.first().data(PeerTableModel::StatsRole).value<CNodeCombinedStats*>();
// update the detail ui with latest node information
QString peerAddrDetails(QString::fromStdString(stats->nodeStats.addrName) + " ");
- peerAddrDetails += tr("(peer id: %1)").arg(QString::number(stats->nodeStats.nodeid));
+ peerAddrDetails += tr("(peer: %1)").arg(QString::number(stats->nodeStats.nodeid));
if (!stats->nodeStats.addrLocal.empty())
peerAddrDetails += "<br />" + tr("via %1").arg(QString::fromStdString(stats->nodeStats.addrLocal));
ui->peerHeading->setText(peerAddrDetails);
diff --git a/src/qt/rpcconsole.h b/src/qt/rpcconsole.h
index 14d8900716..55a1decceb 100644
--- a/src/qt/rpcconsole.h
+++ b/src/qt/rpcconsole.h
@@ -74,6 +74,7 @@ public:
protected:
virtual bool eventFilter(QObject* obj, QEvent *event) override;
void keyPressEvent(QKeyEvent *) override;
+ void changeEvent(QEvent* e) override;
private Q_SLOTS:
void on_lineEdit_returnPressed();
diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp
index e3ea6e9015..160b43324f 100644
--- a/src/qt/sendcoinsdialog.cpp
+++ b/src/qt/sendcoinsdialog.cpp
@@ -432,7 +432,8 @@ void SendCoinsDialog::sendButtonClicked([[maybe_unused]] bool checked)
fileNameSuggestion.append(".psbt");
QString filename = GUIUtil::getSaveFileName(this,
tr("Save Transaction Data"), fileNameSuggestion,
- tr("Partially Signed Transaction (Binary)", "Name of binary PSBT file format") + QLatin1String(" (*.psbt)"), &selectedFilter);
+ //: Expanded name of the binary PSBT file format. See: BIP 174.
+ tr("Partially Signed Transaction (Binary)") + QLatin1String(" (*.psbt)"), &selectedFilter);
if (filename.isEmpty()) {
return;
}
diff --git a/src/qt/sendcoinsentry.cpp b/src/qt/sendcoinsentry.cpp
index 444dc79a2e..f701bb9615 100644
--- a/src/qt/sendcoinsentry.cpp
+++ b/src/qt/sendcoinsentry.cpp
@@ -236,6 +236,19 @@ void SendCoinsEntry::updateDisplayUnit()
}
}
+void SendCoinsEntry::changeEvent(QEvent* e)
+{
+#ifdef Q_OS_MACOS
+ if (e->type() == QEvent::PaletteChange) {
+ ui->addressBookButton->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/address-book")));
+ ui->pasteButton->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/editpaste")));
+ ui->deleteButton->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/remove")));
+ ui->deleteButton_is->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/remove")));
+ ui->deleteButton_s->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/remove")));
+ }
+#endif
+}
+
bool SendCoinsEntry::updateLabel(const QString &address)
{
if(!model)
diff --git a/src/qt/sendcoinsentry.h b/src/qt/sendcoinsentry.h
index 254cc186e2..e682e6423a 100644
--- a/src/qt/sendcoinsentry.h
+++ b/src/qt/sendcoinsentry.h
@@ -69,6 +69,9 @@ private Q_SLOTS:
void on_pasteButton_clicked();
void updateDisplayUnit();
+protected:
+ void changeEvent(QEvent* e) override;
+
private:
SendCoinsRecipient recipient;
Ui::SendCoinsEntry *ui;
diff --git a/src/qt/signverifymessagedialog.cpp b/src/qt/signverifymessagedialog.cpp
index 2e7df60574..b982cc577d 100644
--- a/src/qt/signverifymessagedialog.cpp
+++ b/src/qt/signverifymessagedialog.cpp
@@ -283,3 +283,19 @@ bool SignVerifyMessageDialog::eventFilter(QObject *object, QEvent *event)
}
return QDialog::eventFilter(object, event);
}
+
+void SignVerifyMessageDialog::changeEvent(QEvent* e)
+{
+#ifdef Q_OS_MACOS
+ if (e->type() == QEvent::PaletteChange) {
+ ui->addressBookButton_SM->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/address-book")));
+ ui->pasteButton_SM->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/editpaste")));
+ ui->copySignatureButton_SM->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/editcopy")));
+ ui->signMessageButton_SM->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/edit")));
+ ui->clearButton_SM->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/remove")));
+ ui->addressBookButton_VM->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/address-book")));
+ ui->verifyMessageButton_VM->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/transaction_0")));
+ ui->clearButton_VM->setIcon(platformStyle->SingleColorIcon(QStringLiteral(":/icons/remove")));
+ }
+#endif
+}
diff --git a/src/qt/signverifymessagedialog.h b/src/qt/signverifymessagedialog.h
index d98cb290a1..3d2d5f281e 100644
--- a/src/qt/signverifymessagedialog.h
+++ b/src/qt/signverifymessagedialog.h
@@ -31,6 +31,7 @@ public:
protected:
bool eventFilter(QObject *object, QEvent *event) override;
+ void changeEvent(QEvent* e) override;
private:
Ui::SignVerifyMessageDialog *ui;
diff --git a/src/qt/test/wallettests.cpp b/src/qt/test/wallettests.cpp
index febfead6ad..26f568b16a 100644
--- a/src/qt/test/wallettests.cpp
+++ b/src/qt/test/wallettests.cpp
@@ -235,7 +235,7 @@ void TestGUI(interfaces::Node& node)
QCOMPARE(uri.count("amount=0.00000001"), 2);
QCOMPARE(receiveRequestDialog->QObject::findChild<QLabel*>("amount_tag")->text(), QString("Amount:"));
- QCOMPARE(receiveRequestDialog->QObject::findChild<QLabel*>("amount_content")->text(), QString("0.00000001 ") + QString::fromStdString(CURRENCY_UNIT));
+ QCOMPARE(receiveRequestDialog->QObject::findChild<QLabel*>("amount_content")->text(), QString::fromStdString("0.00000001 " + CURRENCY_UNIT));
QCOMPARE(uri.count("label=TEST_LABEL_1"), 2);
QCOMPARE(receiveRequestDialog->QObject::findChild<QLabel*>("label_tag")->text(), QString("Label:"));
diff --git a/src/qt/transactiondesc.cpp b/src/qt/transactiondesc.cpp
index ece3a9cf48..02d220db20 100644
--- a/src/qt/transactiondesc.cpp
+++ b/src/qt/transactiondesc.cpp
@@ -26,6 +26,8 @@
#include <stdint.h>
#include <string>
+#include <QLatin1String>
+
QString TransactionDesc::FormatTxStatus(const interfaces::WalletTx& wtx, const interfaces::WalletTxStatus& status, bool inMempool, int numBlocks)
{
if (!status.is_final)
@@ -38,14 +40,16 @@ QString TransactionDesc::FormatTxStatus(const interfaces::WalletTx& wtx, const i
else
{
int nDepth = status.depth_in_main_chain;
- if (nDepth < 0)
+ if (nDepth < 0) {
return tr("conflicted with a transaction with %1 confirmations").arg(-nDepth);
- else if (nDepth == 0)
- return tr("0/unconfirmed, %1").arg((inMempool ? tr("in memory pool") : tr("not in memory pool"))) + (status.is_abandoned ? ", "+tr("abandoned") : "");
- else if (nDepth < 6)
+ } else if (nDepth == 0) {
+ const QString abandoned{status.is_abandoned ? QLatin1String(", ") + tr("abandoned") : QString()};
+ return tr("0/unconfirmed, %1").arg(inMempool ? tr("in memory pool") : tr("not in memory pool")) + abandoned;
+ } else if (nDepth < 6) {
return tr("%1/unconfirmed").arg(nDepth);
- else
+ } else {
return tr("%1 confirmations").arg(nDepth);
+ }
}
}
diff --git a/src/qt/transactiontablemodel.cpp b/src/qt/transactiontablemodel.cpp
index 0175c88e7f..b68ceaedbb 100644
--- a/src/qt/transactiontablemodel.cpp
+++ b/src/qt/transactiontablemodel.cpp
@@ -25,6 +25,8 @@
#include <QDateTime>
#include <QDebug>
#include <QIcon>
+#include <QLatin1Char>
+#include <QLatin1String>
#include <QList>
@@ -413,9 +415,9 @@ QVariant TransactionTableModel::txAddressDecoration(const TransactionRecord *wtx
QString TransactionTableModel::formatTxToAddress(const TransactionRecord *wtx, bool tooltip) const
{
QString watchAddress;
- if (tooltip) {
+ if (tooltip && wtx->involvesWatchAddress) {
// Mark transactions involving watch-only addresses by adding " (watch-only)"
- watchAddress = wtx->involvesWatchAddress ? QString(" (") + tr("watch-only") + QString(")") : "";
+ watchAddress = QLatin1String(" (") + tr("watch-only") + QLatin1Char(')');
}
switch(wtx->type)
diff --git a/src/qt/transactionview.cpp b/src/qt/transactionview.cpp
index 7a975dadae..1e8e012dcf 100644
--- a/src/qt/transactionview.cpp
+++ b/src/qt/transactionview.cpp
@@ -37,8 +37,8 @@
#include <QUrl>
#include <QVBoxLayout>
-TransactionView::TransactionView(const PlatformStyle *platformStyle, QWidget *parent) :
- QWidget(parent)
+TransactionView::TransactionView(const PlatformStyle *platformStyle, QWidget *parent)
+ : QWidget(parent), m_platform_style{platformStyle}
{
// Build filter row
setContentsMargins(0,0,0,0);
@@ -243,6 +243,20 @@ void TransactionView::setModel(WalletModel *_model)
}
}
+void TransactionView::changeEvent(QEvent* e)
+{
+#ifdef Q_OS_MACOS
+ if (e->type() == QEvent::PaletteChange) {
+ watchOnlyWidget->setItemIcon(
+ TransactionFilterProxy::WatchOnlyFilter_Yes,
+ m_platform_style->SingleColorIcon(QStringLiteral(":/icons/eye_plus")));
+ watchOnlyWidget->setItemIcon(
+ TransactionFilterProxy::WatchOnlyFilter_No,
+ m_platform_style->SingleColorIcon(QStringLiteral(":/icons/eye_minus")));
+ }
+#endif
+}
+
void TransactionView::chooseDate(int idx)
{
if (!transactionProxyModel) return;
@@ -336,7 +350,9 @@ void TransactionView::exportClicked()
// CSV is currently the only supported format
QString filename = GUIUtil::getSaveFileName(this,
tr("Export Transaction History"), QString(),
- tr("Comma separated file", "Name of CSV file format") + QLatin1String(" (*.csv)"), nullptr);
+ /*: Expanded name of the CSV file format.
+ See https://en.wikipedia.org/wiki/Comma-separated_values */
+ tr("Comma separated file") + QLatin1String(" (*.csv)"), nullptr);
if (filename.isNull())
return;
diff --git a/src/qt/transactionview.h b/src/qt/transactionview.h
index 66350bdc02..3e2321d91b 100644
--- a/src/qt/transactionview.h
+++ b/src/qt/transactionview.h
@@ -60,6 +60,9 @@ public:
MINIMUM_COLUMN_WIDTH = 23
};
+protected:
+ void changeEvent(QEvent* e) override;
+
private:
WalletModel *model{nullptr};
TransactionFilterProxy *transactionProxyModel{nullptr};
@@ -85,6 +88,8 @@ private:
bool eventFilter(QObject *obj, QEvent *event) override;
+ const PlatformStyle* m_platform_style;
+
private Q_SLOTS:
void contextualMenu(const QPoint &);
void dateRangeChanged();
diff --git a/src/qt/walletcontroller.cpp b/src/qt/walletcontroller.cpp
index c152689f0b..aa26a01541 100644
--- a/src/qt/walletcontroller.cpp
+++ b/src/qt/walletcontroller.cpp
@@ -207,6 +207,9 @@ void WalletControllerActivity::showProgressDialog(const QString& label_text)
m_progress_dialog->setCancelButton(nullptr);
m_progress_dialog->setWindowModality(Qt::ApplicationModal);
GUIUtil::PolishProgressDialog(m_progress_dialog);
+ // The setValue call forces QProgressDialog to start the internal duration estimation.
+ // See details in https://bugreports.qt.io/browse/QTBUG-47042.
+ m_progress_dialog->setValue(0);
}
void WalletControllerActivity::destroyProgressDialog()
diff --git a/src/qt/walletview.cpp b/src/qt/walletview.cpp
index 67cc42725b..cc9e1502f0 100644
--- a/src/qt/walletview.cpp
+++ b/src/qt/walletview.cpp
@@ -273,7 +273,8 @@ void WalletView::backupWallet()
{
QString filename = GUIUtil::getSaveFileName(this,
tr("Backup Wallet"), QString(),
- tr("Wallet Data", "Name of wallet data file format") + QLatin1String(" (*.dat)"), nullptr);
+ //: Name of the wallet data file format.
+ tr("Wallet Data") + QLatin1String(" (*.dat)"), nullptr);
if (filename.isEmpty())
return;
@@ -330,7 +331,6 @@ void WalletView::showProgress(const QString &title, int nProgress)
progressDialog = new QProgressDialog(title, tr("Cancel"), 0, 100);
GUIUtil::PolishProgressDialog(progressDialog);
progressDialog->setWindowModality(Qt::ApplicationModal);
- progressDialog->setMinimumDuration(0);
progressDialog->setAutoClose(false);
progressDialog->setValue(0);
} else if (nProgress == 100) {
diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp
index adb8ac0595..339d711ac9 100644
--- a/src/rpc/rawtransaction.cpp
+++ b/src/rpc/rawtransaction.cpp
@@ -15,6 +15,7 @@
#include <node/context.h>
#include <node/psbt.h>
#include <node/transaction.h>
+#include <policy/packages.h>
#include <policy/policy.h>
#include <policy/rbf.h>
#include <primitives/transaction.h>
@@ -885,8 +886,11 @@ static RPCHelpMan sendrawtransaction()
static RPCHelpMan testmempoolaccept()
{
return RPCHelpMan{"testmempoolaccept",
- "\nReturns result of mempool acceptance tests indicating if raw transaction (serialized, hex-encoded) would be accepted by mempool.\n"
- "\nThis checks if the transaction violates the consensus or policy rules.\n"
+ "\nReturns result of mempool acceptance tests indicating if raw transaction(s) (serialized, hex-encoded) would be accepted by mempool.\n"
+ "\nIf multiple transactions are passed in, parents must come before children and package policies apply: the transactions cannot conflict with any mempool transactions or each other.\n"
+ "\nIf one transaction fails, other transactions may not be fully validated (the 'allowed' key will be blank).\n"
+ "\nThe maximum number of transactions allowed is 25 (MAX_PACKAGE_COUNT)\n"
+ "\nThis checks if transactions violate the consensus or policy rules.\n"
"\nSee sendrawtransaction call.\n",
{
{"rawtxs", RPCArg::Type::ARR, RPCArg::Optional::NO, "An array of hex strings of raw transactions.\n"
@@ -895,17 +899,21 @@ static RPCHelpMan testmempoolaccept()
{"rawtx", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED, ""},
},
},
- {"maxfeerate", RPCArg::Type::AMOUNT, RPCArg::Default{FormatMoney(DEFAULT_MAX_RAW_TX_FEE_RATE.GetFeePerK())}, "Reject transactions whose fee rate is higher than the specified value, expressed in " + CURRENCY_UNIT + "/kvB\n"},
+ {"maxfeerate", RPCArg::Type::AMOUNT, RPCArg::Default{FormatMoney(DEFAULT_MAX_RAW_TX_FEE_RATE.GetFeePerK())},
+ "Reject transactions whose fee rate is higher than the specified value, expressed in " + CURRENCY_UNIT + "/kvB\n"},
},
RPCResult{
RPCResult::Type::ARR, "", "The result of the mempool acceptance test for each raw transaction in the input array.\n"
- "Length is exactly one for now.",
+ "Returns results for each transaction in the same order they were passed in.\n"
+ "It is possible for transactions to not be fully validated ('allowed' unset) if an earlier transaction failed.\n",
{
{RPCResult::Type::OBJ, "", "",
{
{RPCResult::Type::STR_HEX, "txid", "The transaction hash in hex"},
{RPCResult::Type::STR_HEX, "wtxid", "The transaction witness hash in hex"},
- {RPCResult::Type::BOOL, "allowed", "If the mempool allows this tx to be inserted"},
+ {RPCResult::Type::STR, "package-error", "Package validation error, if any (only possible if rawtxs had more than 1 transaction)."},
+ {RPCResult::Type::BOOL, "allowed", "Whether this tx would be accepted to the mempool and pass client-specified maxfeerate."
+ "If not present, the tx was not fully validated due to a failure in another tx in the list."},
{RPCResult::Type::NUM, "vsize", "Virtual transaction size as defined in BIP 141. This is different from actual serialized size for witness transactions as witness data is discounted (only present when 'allowed' is true)"},
{RPCResult::Type::OBJ, "fees", "Transaction fees (only present if 'allowed' is true)",
{
@@ -932,62 +940,86 @@ static RPCHelpMan testmempoolaccept()
UniValueType(), // VNUM or VSTR, checked inside AmountFromValue()
});
- if (request.params[0].get_array().size() != 1) {
- throw JSONRPCError(RPC_INVALID_PARAMETER, "Array must contain exactly one raw transaction for now");
- }
-
- CMutableTransaction mtx;
- if (!DecodeHexTx(mtx, request.params[0].get_array()[0].get_str())) {
- throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "TX decode failed. Make sure the tx has at least one input.");
+ const UniValue raw_transactions = request.params[0].get_array();
+ if (raw_transactions.size() < 1 || raw_transactions.size() > MAX_PACKAGE_COUNT) {
+ throw JSONRPCError(RPC_INVALID_PARAMETER,
+ "Array must contain between 1 and " + ToString(MAX_PACKAGE_COUNT) + " transactions.");
}
- CTransactionRef tx(MakeTransactionRef(std::move(mtx)));
const CFeeRate max_raw_tx_fee_rate = request.params[1].isNull() ?
DEFAULT_MAX_RAW_TX_FEE_RATE :
CFeeRate(AmountFromValue(request.params[1]));
- NodeContext& node = EnsureAnyNodeContext(request.context);
+ std::vector<CTransactionRef> txns;
+ for (const auto& rawtx : raw_transactions.getValues()) {
+ CMutableTransaction mtx;
+ if (!DecodeHexTx(mtx, rawtx.get_str())) {
+ throw JSONRPCError(RPC_DESERIALIZATION_ERROR,
+ "TX decode failed: " + rawtx.get_str() + " Make sure the tx has at least one input.");
+ }
+ txns.emplace_back(MakeTransactionRef(std::move(mtx)));
+ }
+ NodeContext& node = EnsureAnyNodeContext(request.context);
CTxMemPool& mempool = EnsureMemPool(node);
- int64_t virtual_size = GetVirtualTransactionSize(*tx);
- CAmount max_raw_tx_fee = max_raw_tx_fee_rate.GetFee(virtual_size);
-
- UniValue result(UniValue::VARR);
- UniValue result_0(UniValue::VOBJ);
- result_0.pushKV("txid", tx->GetHash().GetHex());
- result_0.pushKV("wtxid", tx->GetWitnessHash().GetHex());
-
- ChainstateManager& chainman = EnsureChainman(node);
- const MempoolAcceptResult accept_result = WITH_LOCK(cs_main, return AcceptToMemoryPool(chainman.ActiveChainstate(), mempool, std::move(tx),
- false /* bypass_limits */, /* test_accept */ true));
-
- // Only return the fee and vsize if the transaction would pass ATMP.
- // These can be used to calculate the feerate.
- if (accept_result.m_result_type == MempoolAcceptResult::ResultType::VALID) {
- const CAmount fee = accept_result.m_base_fees.value();
- // Check that fee does not exceed maximum fee
- if (max_raw_tx_fee && fee > max_raw_tx_fee) {
- result_0.pushKV("allowed", false);
- result_0.pushKV("reject-reason", "max-fee-exceeded");
- } else {
- result_0.pushKV("allowed", true);
- result_0.pushKV("vsize", virtual_size);
- UniValue fees(UniValue::VOBJ);
- fees.pushKV("base", ValueFromAmount(fee));
- result_0.pushKV("fees", fees);
+ CChainState& chainstate = EnsureChainman(node).ActiveChainstate();
+ const PackageMempoolAcceptResult package_result = [&] {
+ LOCK(::cs_main);
+ if (txns.size() > 1) return ProcessNewPackage(chainstate, mempool, txns, /* test_accept */ true);
+ return PackageMempoolAcceptResult(txns[0]->GetWitnessHash(),
+ AcceptToMemoryPool(chainstate, mempool, txns[0], /* bypass_limits */ false, /* test_accept*/ true));
+ }();
+
+ UniValue rpc_result(UniValue::VARR);
+ // We will check transaction fees we iterate through txns in order. If any transaction fee
+ // exceeds maxfeerate, we will keave the rest of the validation results blank, because it
+ // doesn't make sense to return a validation result for a transaction if its ancestor(s) would
+ // not be submitted.
+ bool exit_early{false};
+ for (const auto& tx : txns) {
+ UniValue result_inner(UniValue::VOBJ);
+ result_inner.pushKV("txid", tx->GetHash().GetHex());
+ result_inner.pushKV("wtxid", tx->GetWitnessHash().GetHex());
+ if (package_result.m_state.GetResult() == PackageValidationResult::PCKG_POLICY) {
+ result_inner.pushKV("package-error", package_result.m_state.GetRejectReason());
}
- result.push_back(std::move(result_0));
- } else {
- result_0.pushKV("allowed", false);
- const TxValidationState state = accept_result.m_state;
- if (state.GetResult() == TxValidationResult::TX_MISSING_INPUTS) {
- result_0.pushKV("reject-reason", "missing-inputs");
+ auto it = package_result.m_tx_results.find(tx->GetWitnessHash());
+ if (exit_early || it == package_result.m_tx_results.end()) {
+ // Validation unfinished. Just return the txid and wtxid.
+ rpc_result.push_back(result_inner);
+ continue;
+ }
+ const auto& tx_result = it->second;
+ if (tx_result.m_result_type == MempoolAcceptResult::ResultType::VALID) {
+ const CAmount fee = tx_result.m_base_fees.value();
+ // Check that fee does not exceed maximum fee
+ const int64_t virtual_size = GetVirtualTransactionSize(*tx);
+ const CAmount max_raw_tx_fee = max_raw_tx_fee_rate.GetFee(virtual_size);
+ if (max_raw_tx_fee && fee > max_raw_tx_fee) {
+ result_inner.pushKV("allowed", false);
+ result_inner.pushKV("reject-reason", "max-fee-exceeded");
+ exit_early = true;
+ } else {
+ // Only return the fee and vsize if the transaction would pass ATMP.
+ // These can be used to calculate the feerate.
+ result_inner.pushKV("allowed", true);
+ result_inner.pushKV("vsize", virtual_size);
+ UniValue fees(UniValue::VOBJ);
+ fees.pushKV("base", ValueFromAmount(fee));
+ result_inner.pushKV("fees", fees);
+ }
} else {
- result_0.pushKV("reject-reason", state.GetRejectReason());
+ result_inner.pushKV("allowed", false);
+ const TxValidationState state = tx_result.m_state;
+ if (state.GetResult() == TxValidationResult::TX_MISSING_INPUTS) {
+ result_inner.pushKV("reject-reason", "missing-inputs");
+ } else {
+ result_inner.pushKV("reject-reason", state.GetRejectReason());
+ }
}
- result.push_back(std::move(result_0));
+ rpc_result.push_back(result_inner);
}
- return result;
+ return rpc_result;
},
};
}
diff --git a/src/test/fuzz/p2p_transport_deserializer.cpp b/src/test/fuzz/p2p_transport_deserializer.cpp
deleted file mode 100644
index 3a1fdaad8f..0000000000
--- a/src/test/fuzz/p2p_transport_deserializer.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) 2019-2020 The Bitcoin Core developers
-// Distributed under the MIT software license, see the accompanying
-// file COPYING or http://www.opensource.org/licenses/mit-license.php.
-
-#include <chainparams.h>
-#include <net.h>
-#include <protocol.h>
-#include <test/fuzz/fuzz.h>
-
-#include <cassert>
-#include <cstdint>
-#include <limits>
-#include <optional>
-#include <vector>
-
-void initialize_p2p_transport_deserializer()
-{
- SelectParams(CBaseChainParams::REGTEST);
-}
-
-FUZZ_TARGET_INIT(p2p_transport_deserializer, initialize_p2p_transport_deserializer)
-{
- // Construct deserializer, with a dummy NodeId
- V1TransportDeserializer deserializer{Params(), (NodeId)0, SER_NETWORK, INIT_PROTO_VERSION};
- Span<const uint8_t> msg_bytes{buffer};
- while (msg_bytes.size() > 0) {
- const int handled = deserializer.Read(msg_bytes);
- if (handled < 0) {
- break;
- }
- if (deserializer.Complete()) {
- const std::chrono::microseconds m_time{std::numeric_limits<int64_t>::max()};
- uint32_t out_err_raw_size{0};
- std::optional<CNetMessage> result{deserializer.GetMessage(m_time, out_err_raw_size)};
- if (result) {
- assert(result->m_command.size() <= CMessageHeader::COMMAND_SIZE);
- assert(result->m_raw_message_size <= buffer.size());
- assert(result->m_raw_message_size == CMessageHeader::HEADER_SIZE + result->m_message_size);
- assert(result->m_time == m_time);
- }
- }
- }
-}
diff --git a/src/test/fuzz/p2p_transport_serialization.cpp b/src/test/fuzz/p2p_transport_serialization.cpp
new file mode 100644
index 0000000000..edee5aeef7
--- /dev/null
+++ b/src/test/fuzz/p2p_transport_serialization.cpp
@@ -0,0 +1,85 @@
+// Copyright (c) 2019-2020 The Bitcoin Core developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#include <chainparams.h>
+#include <hash.h>
+#include <net.h>
+#include <netmessagemaker.h>
+#include <protocol.h>
+#include <test/fuzz/FuzzedDataProvider.h>
+#include <test/fuzz/fuzz.h>
+
+#include <cassert>
+#include <cstdint>
+#include <limits>
+#include <optional>
+#include <vector>
+
+void initialize_p2p_transport_serialization()
+{
+ SelectParams(CBaseChainParams::REGTEST);
+}
+
+FUZZ_TARGET_INIT(p2p_transport_serialization, initialize_p2p_transport_serialization)
+{
+ // Construct deserializer, with a dummy NodeId
+ V1TransportDeserializer deserializer{Params(), (NodeId)0, SER_NETWORK, INIT_PROTO_VERSION};
+ V1TransportSerializer serializer{};
+ FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
+
+ auto checksum_assist = fuzzed_data_provider.ConsumeBool();
+ auto magic_bytes_assist = fuzzed_data_provider.ConsumeBool();
+ std::vector<uint8_t> mutable_msg_bytes;
+
+ auto header_bytes_remaining = CMessageHeader::HEADER_SIZE;
+ if (magic_bytes_assist) {
+ auto msg_start = Params().MessageStart();
+ for (size_t i = 0; i < CMessageHeader::MESSAGE_SIZE_SIZE; ++i) {
+ mutable_msg_bytes.push_back(msg_start[i]);
+ }
+ header_bytes_remaining -= CMessageHeader::MESSAGE_SIZE_SIZE;
+ }
+
+ if (checksum_assist) {
+ header_bytes_remaining -= CMessageHeader::CHECKSUM_SIZE;
+ }
+
+ auto header_random_bytes = fuzzed_data_provider.ConsumeBytes<uint8_t>(header_bytes_remaining);
+ mutable_msg_bytes.insert(mutable_msg_bytes.end(), header_random_bytes.begin(), header_random_bytes.end());
+ auto payload_bytes = fuzzed_data_provider.ConsumeRemainingBytes<uint8_t>();
+
+ if (checksum_assist && mutable_msg_bytes.size() == CMessageHeader::CHECKSUM_OFFSET) {
+ CHash256 hasher;
+ unsigned char hsh[32];
+ hasher.Write(payload_bytes);
+ hasher.Finalize(hsh);
+ for (size_t i = 0; i < CMessageHeader::CHECKSUM_SIZE; ++i) {
+ mutable_msg_bytes.push_back(hsh[i]);
+ }
+ }
+
+ mutable_msg_bytes.insert(mutable_msg_bytes.end(), payload_bytes.begin(), payload_bytes.end());
+ Span<const uint8_t> msg_bytes{mutable_msg_bytes};
+ while (msg_bytes.size() > 0) {
+ const int handled = deserializer.Read(msg_bytes);
+ if (handled < 0) {
+ break;
+ }
+ if (deserializer.Complete()) {
+ const std::chrono::microseconds m_time{std::numeric_limits<int64_t>::max()};
+ uint32_t out_err_raw_size{0};
+ std::optional<CNetMessage> result{deserializer.GetMessage(m_time, out_err_raw_size)};
+ if (result) {
+ assert(result->m_command.size() <= CMessageHeader::COMMAND_SIZE);
+ assert(result->m_raw_message_size <= mutable_msg_bytes.size());
+ assert(result->m_raw_message_size == CMessageHeader::HEADER_SIZE + result->m_message_size);
+ assert(result->m_time == m_time);
+
+ std::vector<unsigned char> header;
+ auto msg = CNetMsgMaker{result->m_recv.GetVersion()}.Make(result->m_command, MakeUCharSpan(result->m_recv));
+ serializer.prepareForTransport(msg, header);
+ }
+ }
+ }
+}
diff --git a/src/test/fuzz/tx_pool.cpp b/src/test/fuzz/tx_pool.cpp
index ad11f2c5f2..bab34ea340 100644
--- a/src/test/fuzz/tx_pool.cpp
+++ b/src/test/fuzz/tx_pool.cpp
@@ -219,6 +219,16 @@ FUZZ_TARGET_INIT(tx_pool_standard, initialize_tx_pool)
RegisterSharedValidationInterface(txr);
const bool bypass_limits = fuzzed_data_provider.ConsumeBool();
::fRequireStandard = fuzzed_data_provider.ConsumeBool();
+
+ // Make sure ProcessNewPackage on one transaction works and always fully validates the transaction.
+ // The result is not guaranteed to be the same as what is returned by ATMP.
+ const auto result_package = WITH_LOCK(::cs_main,
+ return ProcessNewPackage(node.chainman->ActiveChainstate(), tx_pool, {tx}, true));
+ auto it = result_package.m_tx_results.find(tx->GetWitnessHash());
+ Assert(it != result_package.m_tx_results.end());
+ Assert(it->second.m_result_type == MempoolAcceptResult::ResultType::VALID ||
+ it->second.m_result_type == MempoolAcceptResult::ResultType::INVALID);
+
const auto res = WITH_LOCK(::cs_main, return AcceptToMemoryPool(chainstate, tx_pool, tx, bypass_limits));
const bool accepted = res.m_result_type == MempoolAcceptResult::ResultType::VALID;
SyncWithValidationInterfaceQueue();
diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp
index 9ba004cc38..c47d0eae1e 100644
--- a/src/test/miner_tests.cpp
+++ b/src/test/miner_tests.cpp
@@ -28,7 +28,8 @@ struct MinerTestingSetup : public TestingSetup {
void TestPackageSelection(const CChainParams& chainparams, const CScript& scriptPubKey, const std::vector<CTransactionRef>& txFirst) EXCLUSIVE_LOCKS_REQUIRED(::cs_main, m_node.mempool->cs);
bool TestSequenceLocks(const CTransaction& tx, int flags) EXCLUSIVE_LOCKS_REQUIRED(::cs_main, m_node.mempool->cs)
{
- return CheckSequenceLocks(::ChainstateActive(), *m_node.mempool, tx, flags);
+ CCoinsViewMemPool viewMempool(&m_node.chainman->ActiveChainstate().CoinsTip(), *m_node.mempool);
+ return CheckSequenceLocks(m_node.chainman->ActiveChain().Tip(), viewMempool, tx, flags);
}
BlockAssembler AssemblerForTest(const CChainParams& params);
};
diff --git a/src/test/txvalidation_tests.cpp b/src/test/txvalidation_tests.cpp
index 8d14071297..95ad85d0f8 100644
--- a/src/test/txvalidation_tests.cpp
+++ b/src/test/txvalidation_tests.cpp
@@ -3,8 +3,12 @@
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include <consensus/validation.h>
+#include <key_io.h>
+#include <policy/packages.h>
+#include <policy/policy.h>
#include <primitives/transaction.h>
#include <script/script.h>
+#include <script/standard.h>
#include <test/util/setup_common.h>
#include <validation.h>
@@ -47,4 +51,98 @@ BOOST_FIXTURE_TEST_CASE(tx_mempool_reject_coinbase, TestChain100Setup)
BOOST_CHECK(result.m_state.GetResult() == TxValidationResult::TX_CONSENSUS);
}
+// Create placeholder transactions that have no meaning.
+inline CTransactionRef create_placeholder_tx(size_t num_inputs, size_t num_outputs)
+{
+ CMutableTransaction mtx = CMutableTransaction();
+ mtx.vin.resize(num_inputs);
+ mtx.vout.resize(num_outputs);
+ auto random_script = CScript() << ToByteVector(InsecureRand256()) << ToByteVector(InsecureRand256());
+ for (size_t i{0}; i < num_inputs; ++i) {
+ mtx.vin[i].prevout.hash = InsecureRand256();
+ mtx.vin[i].prevout.n = 0;
+ mtx.vin[i].scriptSig = random_script;
+ }
+ for (size_t o{0}; o < num_outputs; ++o) {
+ mtx.vout[o].nValue = 1 * CENT;
+ mtx.vout[o].scriptPubKey = random_script;
+ }
+ return MakeTransactionRef(mtx);
+}
+
+BOOST_FIXTURE_TEST_CASE(package_tests, TestChain100Setup)
+{
+ LOCK(cs_main);
+ unsigned int initialPoolSize = m_node.mempool->size();
+
+ // Parent and Child Package
+ CKey parent_key;
+ parent_key.MakeNewKey(true);
+ CScript parent_locking_script = GetScriptForDestination(PKHash(parent_key.GetPubKey()));
+ auto mtx_parent = CreateValidMempoolTransaction(/* input_transaction */ m_coinbase_txns[0], /* vout */ 0,
+ /* input_height */ 0, /* input_signing_key */ coinbaseKey,
+ /* output_destination */ parent_locking_script,
+ /* output_amount */ CAmount(49 * COIN), /* submit */ false);
+ CTransactionRef tx_parent = MakeTransactionRef(mtx_parent);
+
+ CKey child_key;
+ child_key.MakeNewKey(true);
+ CScript child_locking_script = GetScriptForDestination(PKHash(child_key.GetPubKey()));
+ auto mtx_child = CreateValidMempoolTransaction(/* input_transaction */ tx_parent, /* vout */ 0,
+ /* input_height */ 101, /* input_signing_key */ parent_key,
+ /* output_destination */ child_locking_script,
+ /* output_amount */ CAmount(48 * COIN), /* submit */ false);
+ CTransactionRef tx_child = MakeTransactionRef(mtx_child);
+ const auto result_parent_child = ProcessNewPackage(m_node.chainman->ActiveChainstate(), *m_node.mempool, {tx_parent, tx_child}, /* test_accept */ true);
+ BOOST_CHECK_MESSAGE(result_parent_child.m_state.IsValid(),
+ "Package validation unexpectedly failed: " << result_parent_child.m_state.GetRejectReason());
+ auto it_parent = result_parent_child.m_tx_results.find(tx_parent->GetWitnessHash());
+ auto it_child = result_parent_child.m_tx_results.find(tx_child->GetWitnessHash());
+ BOOST_CHECK(it_parent != result_parent_child.m_tx_results.end());
+ BOOST_CHECK_MESSAGE(it_parent->second.m_state.IsValid(),
+ "Package validation unexpectedly failed: " << it_parent->second.m_state.GetRejectReason());
+ BOOST_CHECK(it_child != result_parent_child.m_tx_results.end());
+ BOOST_CHECK_MESSAGE(it_child->second.m_state.IsValid(),
+ "Package validation unexpectedly failed: " << it_child->second.m_state.GetRejectReason());
+
+ // Packages can't have more than 25 transactions.
+ Package package_too_many;
+ package_too_many.reserve(MAX_PACKAGE_COUNT + 1);
+ for (size_t i{0}; i < MAX_PACKAGE_COUNT + 1; ++i) {
+ package_too_many.emplace_back(create_placeholder_tx(1, 1));
+ }
+ auto result_too_many = ProcessNewPackage(m_node.chainman->ActiveChainstate(), *m_node.mempool, package_too_many, /* test_accept */ true);
+ BOOST_CHECK(result_too_many.m_state.IsInvalid());
+ BOOST_CHECK_EQUAL(result_too_many.m_state.GetResult(), PackageValidationResult::PCKG_POLICY);
+ BOOST_CHECK_EQUAL(result_too_many.m_state.GetRejectReason(), "package-too-many-transactions");
+
+ // Packages can't have a total size of more than 101KvB.
+ CTransactionRef large_ptx = create_placeholder_tx(150, 150);
+ Package package_too_large;
+ auto size_large = GetVirtualTransactionSize(*large_ptx);
+ size_t total_size{0};
+ while (total_size <= MAX_PACKAGE_SIZE * 1000) {
+ package_too_large.push_back(large_ptx);
+ total_size += size_large;
+ }
+ BOOST_CHECK(package_too_large.size() <= MAX_PACKAGE_COUNT);
+ auto result_too_large = ProcessNewPackage(m_node.chainman->ActiveChainstate(), *m_node.mempool, package_too_large, /* test_accept */ true);
+ BOOST_CHECK(result_too_large.m_state.IsInvalid());
+ BOOST_CHECK_EQUAL(result_too_large.m_state.GetResult(), PackageValidationResult::PCKG_POLICY);
+ BOOST_CHECK_EQUAL(result_too_large.m_state.GetRejectReason(), "package-too-large");
+
+ // A single, giant transaction submitted through ProcessNewPackage fails on single tx policy.
+ CTransactionRef giant_ptx = create_placeholder_tx(999, 999);
+ BOOST_CHECK(GetVirtualTransactionSize(*giant_ptx) > MAX_PACKAGE_SIZE * 1000);
+ auto result_single_large = ProcessNewPackage(m_node.chainman->ActiveChainstate(), *m_node.mempool, {giant_ptx}, /* test_accept */ true);
+ BOOST_CHECK(result_single_large.m_state.IsInvalid());
+ BOOST_CHECK_EQUAL(result_single_large.m_state.GetResult(), PackageValidationResult::PCKG_TX);
+ BOOST_CHECK_EQUAL(result_single_large.m_state.GetRejectReason(), "transaction failed");
+ auto it_giant_tx = result_single_large.m_tx_results.find(giant_ptx->GetWitnessHash());
+ BOOST_CHECK(it_giant_tx != result_single_large.m_tx_results.end());
+ BOOST_CHECK_EQUAL(it_giant_tx->second.m_state.GetRejectReason(), "tx-size");
+
+ // Check that mempool size hasn't changed.
+ BOOST_CHECK_EQUAL(m_node.mempool->size(), initialPoolSize);
+}
BOOST_AUTO_TEST_SUITE_END()
diff --git a/src/test/util/setup_common.cpp b/src/test/util/setup_common.cpp
index 7bf7f9e0ba..0ac178443a 100644
--- a/src/test/util/setup_common.cpp
+++ b/src/test/util/setup_common.cpp
@@ -263,7 +263,8 @@ CMutableTransaction TestChain100Setup::CreateValidMempoolTransaction(CTransactio
int input_height,
CKey input_signing_key,
CScript output_destination,
- CAmount output_amount)
+ CAmount output_amount,
+ bool submit)
{
// Transaction we will submit to the mempool
CMutableTransaction mempool_txn;
@@ -296,8 +297,8 @@ CMutableTransaction TestChain100Setup::CreateValidMempoolTransaction(CTransactio
std::map<int, std::string> input_errors;
assert(SignTransaction(mempool_txn, &keystore, input_coins, nHashType, input_errors));
- // Add transaction to the mempool
- {
+ // If submit=true, add transaction to the mempool.
+ if (submit) {
LOCK(cs_main);
const MempoolAcceptResult result = AcceptToMemoryPool(::ChainstateActive(), *m_node.mempool.get(), MakeTransactionRef(mempool_txn), /* bypass_limits */ false);
assert(result.m_result_type == MempoolAcceptResult::ResultType::VALID);
diff --git a/src/test/util/setup_common.h b/src/test/util/setup_common.h
index b19dd75765..5d12dc2323 100644
--- a/src/test/util/setup_common.h
+++ b/src/test/util/setup_common.h
@@ -135,13 +135,15 @@ struct TestChain100Setup : public RegTestingSetup {
* @param input_signing_key The key to spend the input_transaction
* @param output_destination Where to send the output
* @param output_amount How much to send
+ * @param submit Whether or not to submit to mempool
*/
CMutableTransaction CreateValidMempoolTransaction(CTransactionRef input_transaction,
int input_vout,
int input_height,
CKey input_signing_key,
CScript output_destination,
- CAmount output_amount = CAmount(1 * COIN));
+ CAmount output_amount = CAmount(1 * COIN),
+ bool submit = true);
~TestChain100Setup();
diff --git a/src/txmempool.cpp b/src/txmempool.cpp
index 5957637e81..4413da7ea7 100644
--- a/src/txmempool.cpp
+++ b/src/txmempool.cpp
@@ -515,7 +515,9 @@ void CTxMemPool::removeForReorg(CChainState& active_chainstate, int flags)
LockPoints lp = it->GetLockPoints();
assert(std::addressof(::ChainstateActive()) == std::addressof(active_chainstate));
bool validLP = TestLockPointValidity(active_chainstate.m_chain, &lp);
- if (!CheckFinalTx(active_chainstate.m_chain.Tip(), tx, flags) || !CheckSequenceLocks(active_chainstate, *this, tx, flags, &lp, validLP)) {
+ CCoinsViewMemPool viewMempool(&active_chainstate.CoinsTip(), *this);
+ if (!CheckFinalTx(active_chainstate.m_chain.Tip(), tx, flags)
+ || !CheckSequenceLocks(active_chainstate.m_chain.Tip(), viewMempool, tx, flags, &lp, validLP)) {
// Note if CheckSequenceLocks fails the LockPoints may still be invalid
// So it's critical that we remove the tx and not depend on the LockPoints.
txToRemove.insert(it);
@@ -920,6 +922,13 @@ bool CTxMemPool::HasNoInputsOf(const CTransaction &tx) const
CCoinsViewMemPool::CCoinsViewMemPool(CCoinsView* baseIn, const CTxMemPool& mempoolIn) : CCoinsViewBacked(baseIn), mempool(mempoolIn) { }
bool CCoinsViewMemPool::GetCoin(const COutPoint &outpoint, Coin &coin) const {
+ // Check to see if the inputs are made available by another tx in the package.
+ // These Coins would not be available in the underlying CoinsView.
+ if (auto it = m_temp_added.find(outpoint); it != m_temp_added.end()) {
+ coin = it->second;
+ return true;
+ }
+
// If an entry in the mempool exists, always return that one, as it's guaranteed to never
// conflict with the underlying cache, and it cannot have pruned entries (as it contains full)
// transactions. First checking the underlying cache risks returning a pruned entry instead.
@@ -935,6 +944,13 @@ bool CCoinsViewMemPool::GetCoin(const COutPoint &outpoint, Coin &coin) const {
return base->GetCoin(outpoint, coin);
}
+void CCoinsViewMemPool::PackageAddTransaction(const CTransactionRef& tx)
+{
+ for (unsigned int n = 0; n < tx->vout.size(); ++n) {
+ m_temp_added.emplace(COutPoint(tx->GetHash(), n), Coin(tx->vout[n], MEMPOOL_HEIGHT, false));
+ }
+}
+
size_t CTxMemPool::DynamicMemoryUsage() const {
LOCK(cs);
// Estimate the overhead of mapTx to be 15 pointers + an allocation, as no exact formula for boost::multi_index_contained is implemented.
diff --git a/src/txmempool.h b/src/txmempool.h
index 594b4981f6..46b89049bb 100644
--- a/src/txmempool.h
+++ b/src/txmempool.h
@@ -852,7 +852,8 @@ public:
* CCoinsView that brings transactions from a mempool into view.
* It does not check for spendings by memory pool transactions.
* Instead, it provides access to all Coins which are either unspent in the
- * base CCoinsView, or are outputs from any mempool transaction!
+ * base CCoinsView, are outputs from any mempool transaction, or are
+ * tracked temporarily to allow transaction dependencies in package validation.
* This allows transaction replacement to work as expected, as you want to
* have all inputs "available" to check signatures, and any cycles in the
* dependency graph are checked directly in AcceptToMemoryPool.
@@ -862,12 +863,19 @@ public:
*/
class CCoinsViewMemPool : public CCoinsViewBacked
{
+ /**
+ * Coins made available by transactions being validated. Tracking these allows for package
+ * validation, since we can access transaction outputs without submitting them to mempool.
+ */
+ std::unordered_map<COutPoint, Coin, SaltedOutpointHasher> m_temp_added;
protected:
const CTxMemPool& mempool;
public:
CCoinsViewMemPool(CCoinsView* baseIn, const CTxMemPool& mempoolIn);
bool GetCoin(const COutPoint &outpoint, Coin &coin) const override;
+ /** Add the coins created by this transaction. */
+ void PackageAddTransaction(const CTransactionRef& tx);
};
/**
diff --git a/src/validation.cpp b/src/validation.cpp
index f591e64fd4..86539ab01f 100644
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -42,6 +42,7 @@
#include <uint256.h>
#include <undo.h>
#include <util/check.h> // For NDEBUG compile time check
+#include <util/hasher.h>
#include <util/moneystr.h>
#include <util/rbf.h>
#include <util/strencodings.h>
@@ -50,6 +51,7 @@
#include <validationinterface.h>
#include <warnings.h>
+#include <numeric>
#include <optional>
#include <string>
@@ -245,18 +247,13 @@ bool TestLockPointValidity(CChain& active_chain, const LockPoints* lp)
return true;
}
-bool CheckSequenceLocks(CChainState& active_chainstate,
- const CTxMemPool& pool,
+bool CheckSequenceLocks(CBlockIndex* tip,
+ const CCoinsView& coins_view,
const CTransaction& tx,
int flags,
LockPoints* lp,
bool useExistingLockPoints)
{
- AssertLockHeld(cs_main);
- AssertLockHeld(pool.cs);
- assert(std::addressof(::ChainstateActive()) == std::addressof(active_chainstate));
-
- CBlockIndex* tip = active_chainstate.m_chain.Tip();
assert(tip != nullptr);
CBlockIndex index;
@@ -276,14 +273,12 @@ bool CheckSequenceLocks(CChainState& active_chainstate,
lockPair.second = lp->time;
}
else {
- // CoinsTip() contains the UTXO set for active_chainstate.m_chain.Tip()
- CCoinsViewMemPool viewMemPool(&active_chainstate.CoinsTip(), pool);
std::vector<int> prevheights;
prevheights.resize(tx.vin.size());
for (size_t txinIndex = 0; txinIndex < tx.vin.size(); txinIndex++) {
const CTxIn& txin = tx.vin[txinIndex];
Coin coin;
- if (!viewMemPool.GetCoin(txin.prevout, coin)) {
+ if (!coins_view.GetCoin(txin.prevout, coin)) {
return error("%s: Missing input", __func__);
}
if (coin.nHeight == MEMPOOL_HEIGHT) {
@@ -477,11 +472,20 @@ public:
*/
std::vector<COutPoint>& m_coins_to_uncache;
const bool m_test_accept;
+ /** Disable BIP125 RBFing; disallow all conflicts with mempool transactions. */
+ const bool disallow_mempool_conflicts;
};
// Single transaction acceptance
MempoolAcceptResult AcceptSingleTransaction(const CTransactionRef& ptx, ATMPArgs& args) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
+ /**
+ * Multiple transaction acceptance. Transactions may or may not be interdependent,
+ * but must not conflict with each other. Parents must come before children if any
+ * dependencies exist, otherwise a TX_MISSING_INPUTS error will be returned.
+ */
+ PackageMempoolAcceptResult AcceptMultipleTransactions(const std::vector<CTransactionRef>& txns, ATMPArgs& args) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
+
private:
// All the intermediate state that gets passed between the various levels
// of checking a given transaction.
@@ -638,7 +642,7 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws)
break;
}
}
- if (fReplacementOptOut) {
+ if (fReplacementOptOut || args.disallow_mempool_conflicts) {
return state.Invalid(TxValidationResult::TX_MEMPOOL_POLICY, "txn-mempool-conflict");
}
@@ -686,10 +690,10 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws)
// Only accept BIP68 sequence locked transactions that can be mined in the next
// block; we don't want our mempool filled up with transactions that can't
// be mined yet.
- // Must keep pool.cs for this unless we change CheckSequenceLocks to take a
- // CoinsViewCache instead of create its own
+ // Pass in m_view which has all of the relevant inputs cached. Note that, since m_view's
+ // backend was removed, it no longer pulls coins from the mempool.
assert(std::addressof(::ChainstateActive()) == std::addressof(m_active_chainstate));
- if (!CheckSequenceLocks(m_active_chainstate, m_pool, tx, STANDARD_LOCKTIME_VERIFY_FLAGS, &lp))
+ if (!CheckSequenceLocks(m_active_chainstate.m_chain.Tip(), m_view, tx, STANDARD_LOCKTIME_VERIFY_FLAGS, &lp))
return state.Invalid(TxValidationResult::TX_PREMATURE_SPEND, "non-BIP68-final");
assert(std::addressof(g_chainman.m_blockman) == std::addressof(m_active_chainstate.m_blockman));
@@ -1045,7 +1049,7 @@ MempoolAcceptResult MemPoolAccept::AcceptSingleTransaction(const CTransactionRef
Workspace ws(ptx);
- if (!PreChecks(args, ws)) return MempoolAcceptResult(ws.m_state);
+ if (!PreChecks(args, ws)) return MempoolAcceptResult::Failure(ws.m_state);
// Only compute the precomputed transaction data if we need to verify
// scripts (ie, other policy checks pass). We perform the inexpensive
@@ -1053,20 +1057,121 @@ MempoolAcceptResult MemPoolAccept::AcceptSingleTransaction(const CTransactionRef
// checks pass, to mitigate CPU exhaustion denial-of-service attacks.
PrecomputedTransactionData txdata;
- if (!PolicyScriptChecks(args, ws, txdata)) return MempoolAcceptResult(ws.m_state);
+ if (!PolicyScriptChecks(args, ws, txdata)) return MempoolAcceptResult::Failure(ws.m_state);
- if (!ConsensusScriptChecks(args, ws, txdata)) return MempoolAcceptResult(ws.m_state);
+ if (!ConsensusScriptChecks(args, ws, txdata)) return MempoolAcceptResult::Failure(ws.m_state);
// Tx was accepted, but not added
if (args.m_test_accept) {
- return MempoolAcceptResult(std::move(ws.m_replaced_transactions), ws.m_base_fees);
+ return MempoolAcceptResult::Success(std::move(ws.m_replaced_transactions), ws.m_base_fees);
}
- if (!Finalize(args, ws)) return MempoolAcceptResult(ws.m_state);
+ if (!Finalize(args, ws)) return MempoolAcceptResult::Failure(ws.m_state);
GetMainSignals().TransactionAddedToMempool(ptx, m_pool.GetAndIncrementSequence());
- return MempoolAcceptResult(std::move(ws.m_replaced_transactions), ws.m_base_fees);
+ return MempoolAcceptResult::Success(std::move(ws.m_replaced_transactions), ws.m_base_fees);
+}
+
+PackageMempoolAcceptResult MemPoolAccept::AcceptMultipleTransactions(const std::vector<CTransactionRef>& txns, ATMPArgs& args)
+{
+ AssertLockHeld(cs_main);
+
+ PackageValidationState package_state;
+ const unsigned int package_count = txns.size();
+
+ // These context-free package limits can be checked before taking the mempool lock.
+ if (package_count > MAX_PACKAGE_COUNT) {
+ package_state.Invalid(PackageValidationResult::PCKG_POLICY, "package-too-many-transactions");
+ return PackageMempoolAcceptResult(package_state, {});
+ }
+
+ const int64_t total_size = std::accumulate(txns.cbegin(), txns.cend(), 0,
+ [](int64_t sum, const auto& tx) { return sum + GetVirtualTransactionSize(*tx); });
+ // If the package only contains 1 tx, it's better to report the policy violation on individual tx size.
+ if (package_count > 1 && total_size > MAX_PACKAGE_SIZE * 1000) {
+ package_state.Invalid(PackageValidationResult::PCKG_POLICY, "package-too-large");
+ return PackageMempoolAcceptResult(package_state, {});
+ }
+
+ // Construct workspaces and check package policies.
+ std::vector<Workspace> workspaces{};
+ workspaces.reserve(package_count);
+ {
+ std::unordered_set<uint256, SaltedTxidHasher> later_txids;
+ std::transform(txns.cbegin(), txns.cend(), std::inserter(later_txids, later_txids.end()),
+ [](const auto& tx) { return tx->GetHash(); });
+ // Require the package to be sorted in order of dependency, i.e. parents appear before children.
+ // An unsorted package will fail anyway on missing-inputs, but it's better to quit earlier and
+ // fail on something less ambiguous (missing-inputs could also be an orphan or trying to
+ // spend nonexistent coins).
+ for (const auto& tx : txns) {
+ for (const auto& input : tx->vin) {
+ if (later_txids.find(input.prevout.hash) != later_txids.end()) {
+ // The parent is a subsequent transaction in the package.
+ package_state.Invalid(PackageValidationResult::PCKG_POLICY, "package-not-sorted");
+ return PackageMempoolAcceptResult(package_state, {});
+ }
+ }
+ later_txids.erase(tx->GetHash());
+ workspaces.emplace_back(Workspace(tx));
+ }
+ }
+ std::map<const uint256, const MempoolAcceptResult> results;
+ {
+ // Don't allow any conflicting transactions, i.e. spending the same inputs, in a package.
+ std::unordered_set<COutPoint, SaltedOutpointHasher> inputs_seen;
+ for (const auto& tx : txns) {
+ for (const auto& input : tx->vin) {
+ if (inputs_seen.find(input.prevout) != inputs_seen.end()) {
+ // This input is also present in another tx in the package.
+ package_state.Invalid(PackageValidationResult::PCKG_POLICY, "conflict-in-package");
+ return PackageMempoolAcceptResult(package_state, {});
+ }
+ }
+ // Batch-add all the inputs for a tx at a time. If we added them 1 at a time, we could
+ // catch duplicate inputs within a single tx. This is a more severe, consensus error,
+ // and we want to report that from CheckTransaction instead.
+ std::transform(tx->vin.cbegin(), tx->vin.cend(), std::inserter(inputs_seen, inputs_seen.end()),
+ [](const auto& input) { return input.prevout; });
+ }
+ }
+
+ LOCK(m_pool.cs);
+
+ // Do all PreChecks first and fail fast to avoid running expensive script checks when unnecessary.
+ for (Workspace& ws : workspaces) {
+ if (!PreChecks(args, ws)) {
+ package_state.Invalid(PackageValidationResult::PCKG_TX, "transaction failed");
+ // Exit early to avoid doing pointless work. Update the failed tx result; the rest are unfinished.
+ results.emplace(ws.m_ptx->GetWitnessHash(), MempoolAcceptResult::Failure(ws.m_state));
+ return PackageMempoolAcceptResult(package_state, std::move(results));
+ }
+ // Make the coins created by this transaction available for subsequent transactions in the
+ // package to spend. Since we already checked conflicts in the package and RBFs are
+ // impossible, we don't need to track the coins spent. Note that this logic will need to be
+ // updated if RBFs in packages are allowed in the future.
+ assert(args.disallow_mempool_conflicts);
+ m_viewmempool.PackageAddTransaction(ws.m_ptx);
+ }
+
+ for (Workspace& ws : workspaces) {
+ PrecomputedTransactionData txdata;
+ if (!PolicyScriptChecks(args, ws, txdata)) {
+ // Exit early to avoid doing pointless work. Update the failed tx result; the rest are unfinished.
+ package_state.Invalid(PackageValidationResult::PCKG_TX, "transaction failed");
+ results.emplace(ws.m_ptx->GetWitnessHash(), MempoolAcceptResult::Failure(ws.m_state));
+ return PackageMempoolAcceptResult(package_state, std::move(results));
+ }
+ if (args.m_test_accept) {
+ // When test_accept=true, transactions that pass PolicyScriptChecks are valid because there are
+ // no further mempool checks (passing PolicyScriptChecks implies passing ConsensusScriptChecks).
+ results.emplace(ws.m_ptx->GetWitnessHash(),
+ MempoolAcceptResult::Success(std::move(ws.m_replaced_transactions), ws.m_base_fees));
+ }
+ }
+
+ return PackageMempoolAcceptResult(package_state, std::move(results));
}
} // anon namespace
@@ -1079,7 +1184,8 @@ static MempoolAcceptResult AcceptToMemoryPoolWithTime(const CChainParams& chainp
EXCLUSIVE_LOCKS_REQUIRED(cs_main)
{
std::vector<COutPoint> coins_to_uncache;
- MemPoolAccept::ATMPArgs args { chainparams, nAcceptTime, bypass_limits, coins_to_uncache, test_accept };
+ MemPoolAccept::ATMPArgs args { chainparams, nAcceptTime, bypass_limits, coins_to_uncache,
+ test_accept, /* disallow_mempool_conflicts */ false };
assert(std::addressof(::ChainstateActive()) == std::addressof(active_chainstate));
const MempoolAcceptResult result = MemPoolAccept(pool, active_chainstate).AcceptSingleTransaction(tx, args);
@@ -1105,6 +1211,29 @@ MempoolAcceptResult AcceptToMemoryPool(CChainState& active_chainstate, CTxMemPoo
return AcceptToMemoryPoolWithTime(Params(), pool, active_chainstate, tx, GetTime(), bypass_limits, test_accept);
}
+PackageMempoolAcceptResult ProcessNewPackage(CChainState& active_chainstate, CTxMemPool& pool,
+ const Package& package, bool test_accept)
+{
+ AssertLockHeld(cs_main);
+ assert(test_accept); // Only allow package accept dry-runs (testmempoolaccept RPC).
+ assert(!package.empty());
+ assert(std::all_of(package.cbegin(), package.cend(), [](const auto& tx){return tx != nullptr;}));
+
+ std::vector<COutPoint> coins_to_uncache;
+ const CChainParams& chainparams = Params();
+ MemPoolAccept::ATMPArgs args { chainparams, GetTime(), /* bypass_limits */ false, coins_to_uncache,
+ test_accept, /* disallow_mempool_conflicts */ true };
+ assert(std::addressof(::ChainstateActive()) == std::addressof(active_chainstate));
+ const PackageMempoolAcceptResult result = MemPoolAccept(pool, active_chainstate).AcceptMultipleTransactions(package, args);
+
+ // Uncache coins pertaining to transactions that were not submitted to the mempool.
+ // Ensure the cache is still within its size limits.
+ for (const COutPoint& hashTx : coins_to_uncache) {
+ active_chainstate.CoinsTip().Uncache(hashTx);
+ }
+ return result;
+}
+
CTransactionRef GetTransaction(const CBlockIndex* const block_index, const CTxMemPool* const mempool, const uint256& hash, const Consensus::Params& consensusParams, uint256& hashBlock)
{
LOCK(cs_main);
diff --git a/src/validation.h b/src/validation.h
index adc3d282b6..43e1c5c22e 100644
--- a/src/validation.h
+++ b/src/validation.h
@@ -18,6 +18,7 @@
#include <fs.h>
#include <node/utxo_snapshot.h>
#include <policy/feerate.h>
+#include <policy/packages.h>
#include <protocol.h> // For CMessageHeader::MessageStartChars
#include <script/script_error.h>
#include <sync.h>
@@ -167,9 +168,7 @@ void PruneBlockFilesManual(CChainState& active_chainstate, int nManualPruneHeigh
* Validation result for a single transaction mempool acceptance.
*/
struct MempoolAcceptResult {
- /** Used to indicate the results of mempool validation,
- * including the possibility of unfinished validation.
- */
+ /** Used to indicate the results of mempool validation. */
enum class ResultType {
VALID, //!> Fully validated, valid.
INVALID, //!> Invalid.
@@ -182,7 +181,16 @@ struct MempoolAcceptResult {
const std::optional<std::list<CTransactionRef>> m_replaced_transactions;
/** Raw base fees in satoshis. */
const std::optional<CAmount> m_base_fees;
+ static MempoolAcceptResult Failure(TxValidationState state) {
+ return MempoolAcceptResult(state);
+ }
+ static MempoolAcceptResult Success(std::list<CTransactionRef>&& replaced_txns, CAmount fees) {
+ return MempoolAcceptResult(std::move(replaced_txns), fees);
+ }
+
+// Private constructors. Use static methods MempoolAcceptResult::Success, etc. to construct.
+private:
/** Constructor for failure case */
explicit MempoolAcceptResult(TxValidationState state)
: m_result_type(ResultType::INVALID), m_state(state) {
@@ -196,6 +204,28 @@ struct MempoolAcceptResult {
};
/**
+* Validation result for package mempool acceptance.
+*/
+struct PackageMempoolAcceptResult
+{
+ const PackageValidationState m_state;
+ /**
+ * Map from wtxid to finished MempoolAcceptResults. The client is responsible
+ * for keeping track of the transaction objects themselves. If a result is not
+ * present, it means validation was unfinished for that transaction.
+ */
+ std::map<const uint256, const MempoolAcceptResult> m_tx_results;
+
+ explicit PackageMempoolAcceptResult(PackageValidationState state,
+ std::map<const uint256, const MempoolAcceptResult>&& results)
+ : m_state{state}, m_tx_results(std::move(results)) {}
+
+ /** Constructor to create a PackageMempoolAcceptResult from a single MempoolAcceptResult */
+ explicit PackageMempoolAcceptResult(const uint256& wtxid, const MempoolAcceptResult& result)
+ : m_tx_results{ {wtxid, result} } {}
+};
+
+/**
* (Try to) add a transaction to the memory pool.
* @param[in] bypass_limits When true, don't enforce mempool fee limits.
* @param[in] test_accept When true, run validation checks but don't submit to mempool.
@@ -203,6 +233,18 @@ struct MempoolAcceptResult {
MempoolAcceptResult AcceptToMemoryPool(CChainState& active_chainstate, CTxMemPool& pool, const CTransactionRef& tx,
bool bypass_limits, bool test_accept=false) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
+/**
+* Atomically test acceptance of a package. If the package only contains one tx, package rules still apply.
+* @param[in] txns Group of transactions which may be independent or contain
+* parent-child dependencies. The transactions must not conflict, i.e.
+* must not spend the same inputs, even if it would be a valid BIP125
+* replace-by-fee. Parents must appear before children.
+* @returns a PackageMempoolAcceptResult which includes a MempoolAcceptResult for each transaction.
+* If a transaction fails, validation will exit early and some results may be missing.
+*/
+PackageMempoolAcceptResult ProcessNewPackage(CChainState& active_chainstate, CTxMemPool& pool,
+ const Package& txns, bool test_accept)
+ EXCLUSIVE_LOCKS_REQUIRED(cs_main);
/** Apply the effects of this transaction on the UTXO set represented by view */
void UpdateCoins(const CTransaction& tx, CCoinsViewCache& inputs, int nHeight);
@@ -224,9 +266,13 @@ bool CheckFinalTx(const CBlockIndex* active_chain_tip, const CTransaction &tx, i
bool TestLockPointValidity(CChain& active_chain, const LockPoints* lp) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
/**
- * Check if transaction will be BIP 68 final in the next block to be created.
- *
- * Simulates calling SequenceLocks() with data from the tip of the current active chain.
+ * Check if transaction will be BIP68 final in the next block to be created on top of tip.
+ * @param[in] tip Chain tip to check tx sequence locks against. For example,
+ * the tip of the current active chain.
+ * @param[in] coins_view Any CCoinsView that provides access to the relevant coins
+ * for checking sequence locks. Any CCoinsView can be passed in;
+ * it is assumed to be consistent with the tip.
+ * Simulates calling SequenceLocks() with data from the tip passed in.
* Optionally stores in LockPoints the resulting height and time calculated and the hash
* of the block needed for calculation or skips the calculation and uses the LockPoints
* passed in for evaluation.
@@ -234,12 +280,12 @@ bool TestLockPointValidity(CChain& active_chain, const LockPoints* lp) EXCLUSIVE
*
* See consensus/consensus.h for flag definitions.
*/
-bool CheckSequenceLocks(CChainState& active_chainstate,
- const CTxMemPool& pool,
+bool CheckSequenceLocks(CBlockIndex* tip,
+ const CCoinsView& coins_view,
const CTransaction& tx,
int flags,
LockPoints* lp = nullptr,
- bool useExistingLockPoints = false) EXCLUSIVE_LOCKS_REQUIRED(::cs_main, pool.cs);
+ bool useExistingLockPoints = false);
/**
* Closure representing one script verification
diff --git a/src/wallet/load.cpp b/src/wallet/load.cpp
index e0df96666f..dbf9fd46b6 100644
--- a/src/wallet/load.cpp
+++ b/src/wallet/load.cpp
@@ -105,7 +105,7 @@ bool LoadWallets(interfaces::Chain& chain)
if (!database && status == DatabaseStatus::FAILED_NOT_FOUND) {
continue;
}
- chain.initMessage(_("Loading wallet...").translated);
+ 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) {
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
index b87ae4ab4f..9986a02fc1 100644
--- a/src/wallet/wallet.cpp
+++ b/src/wallet/wallet.cpp
@@ -211,7 +211,7 @@ std::shared_ptr<CWallet> LoadWalletInternal(interfaces::Chain& chain, const std:
return nullptr;
}
- chain.initMessage(_("Loading wallet...").translated);
+ 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;
@@ -291,7 +291,7 @@ std::shared_ptr<CWallet> CreateWallet(interfaces::Chain& chain, const std::strin
}
// Make the wallet
- chain.initMessage(_("Loading wallet...").translated);
+ 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;