From b81f37031c8f2ccad9346f1b65ee0f8083c44796 Mon Sep 17 00:00:00 2001 From: Anthony Towns Date: Thu, 5 Oct 2023 11:20:04 +1000 Subject: [PATCH 0001/2775] p2p: Increase tx relay rate In the presence of smaller transactions on the network, blocks can sustain a higher relay rate than 7tx/second. In this event, the per-peer inventory queues can grow too large. This commit bumps the rate up to 14 tx/s (for inbound peers), increasing the safety margin by a factor of 2. Outbound peers continue to receive relayed transactions at 2.5x the rate of inbound peers, for a rate of 35tx/second. Co-Authored-By: Suhas Daftuar --- src/net_processing.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/net_processing.cpp b/src/net_processing.cpp index e503a6838276..f71378295b35 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -136,7 +136,7 @@ static constexpr auto INBOUND_INVENTORY_BROADCAST_INTERVAL{5s}; static constexpr auto OUTBOUND_INVENTORY_BROADCAST_INTERVAL{2s}; /** Maximum rate of inventory items to send per second. * Limits the impact of low-fee transaction floods. */ -static constexpr unsigned int INVENTORY_BROADCAST_PER_SECOND = 7; +static constexpr unsigned int INVENTORY_BROADCAST_PER_SECOND{14}; /** Target number of tx inventory items to send per transmission. */ static constexpr unsigned int INVENTORY_BROADCAST_TARGET = INVENTORY_BROADCAST_PER_SECOND * count_seconds(INBOUND_INVENTORY_BROADCAST_INTERVAL); /** Maximum number of inventory items to send per transmission. */ From 0dc337f73d013e342b880746292f1c3247b287cf Mon Sep 17 00:00:00 2001 From: pablomartin4btc Date: Tue, 9 Apr 2024 15:53:38 -0300 Subject: [PATCH 0002/2775] gui: Fix TransactionsView on setCurrentWallet Making sure that if the privacy mode is activaded during the wallet selection, the transaction view is not shown. --- src/qt/bitcoingui.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 6d66c7473bd0..630450011ab8 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -756,9 +756,7 @@ void BitcoinGUI::addWallet(WalletModel* walletModel) connect(wallet_view, &WalletView::encryptionStatusChanged, this, &BitcoinGUI::updateWalletStatus); connect(wallet_view, &WalletView::incomingTransaction, this, &BitcoinGUI::incomingTransaction); connect(this, &BitcoinGUI::setPrivacy, wallet_view, &WalletView::setPrivacy); - const bool privacy = isPrivacyModeActivated(); - wallet_view->setPrivacy(privacy); - enableHistoryAction(privacy); + wallet_view->setPrivacy(isPrivacyModeActivated()); const QString display_name = walletModel->getDisplayName(); m_wallet_selector->addItem(display_name, QVariant::fromValue(walletModel)); } @@ -817,7 +815,7 @@ void BitcoinGUI::setWalletActionsEnabled(bool enabled) overviewAction->setEnabled(enabled); sendCoinsAction->setEnabled(enabled); receiveCoinsAction->setEnabled(enabled); - historyAction->setEnabled(enabled); + historyAction->setEnabled(enabled && !isPrivacyModeActivated()); encryptWalletAction->setEnabled(enabled); backupWalletAction->setEnabled(enabled); changePassphraseAction->setEnabled(enabled); From 975783cb79e929260873c1055d4b415cd33bb6b9 Mon Sep 17 00:00:00 2001 From: pythcoiner Date: Fri, 24 Jan 2025 07:31:09 +0100 Subject: [PATCH 0003/2775] descriptor: account for all StringType in MiniscriptDescriptor::ToStringHelper() --- src/script/descriptor.cpp | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/script/descriptor.cpp b/src/script/descriptor.cpp index 2e1a30744ec1..99aba6c46418 100644 --- a/src/script/descriptor.cpp +++ b/src/script/descriptor.cpp @@ -1286,20 +1286,33 @@ class StringMaker { const SigningProvider* m_arg; //! Keys contained in the Miniscript (a reference to DescriptorImpl::m_pubkey_args). const std::vector>& m_pubkeys; - //! Whether to serialize keys as private or public. - bool m_private; + //! StringType to serialize keys + const DescriptorImpl::StringType m_type; + const DescriptorCache* m_cache; public: - StringMaker(const SigningProvider* arg LIFETIMEBOUND, const std::vector>& pubkeys LIFETIMEBOUND, bool priv) - : m_arg(arg), m_pubkeys(pubkeys), m_private(priv) {} + StringMaker(const SigningProvider* arg LIFETIMEBOUND, + const std::vector>& pubkeys LIFETIMEBOUND, + DescriptorImpl::StringType type, + const DescriptorCache* cache LIFETIMEBOUND) + : m_arg(arg), m_pubkeys(pubkeys), m_type(type), m_cache(cache) {} std::optional ToString(uint32_t key) const { std::string ret; - if (m_private) { - if (!m_pubkeys[key]->ToPrivateString(*m_arg, ret)) return {}; - } else { + switch (m_type) { + case DescriptorImpl::StringType::PUBLIC: ret = m_pubkeys[key]->ToString(); + break; + case DescriptorImpl::StringType::PRIVATE: + if (!m_pubkeys[key]->ToPrivateString(*m_arg, ret)) return {}; + break; + case DescriptorImpl::StringType::NORMALIZED: + if (!m_pubkeys[key]->ToNormalizedString(*m_arg, ret, m_cache)) return {}; + break; + case DescriptorImpl::StringType::COMPAT: + ret = m_pubkeys[key]->ToString(PubkeyProvider::StringType::COMPAT); + break; } return ret; } @@ -1332,7 +1345,7 @@ class MiniscriptDescriptor final : public DescriptorImpl bool ToStringHelper(const SigningProvider* arg, std::string& out, const StringType type, const DescriptorCache* cache = nullptr) const override { - if (const auto res = m_node->ToString(StringMaker(arg, m_pubkey_args, type == StringType::PRIVATE))) { + if (const auto res = m_node->ToString(StringMaker(arg, m_pubkey_args, type, cache))) { out = *res; return true; } From 28a4fcb03c0fb1cd5112eca1eb36dcb13e0b4ff2 Mon Sep 17 00:00:00 2001 From: pythcoiner Date: Fri, 24 Jan 2025 17:27:06 +0100 Subject: [PATCH 0004/2775] test: check listdescriptors do not return a mix of hardened derivation marker --- test/functional/wallet_listdescriptors.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/functional/wallet_listdescriptors.py b/test/functional/wallet_listdescriptors.py index c9d6c1f190df..1b9d59a959cf 100755 --- a/test/functional/wallet_listdescriptors.py +++ b/test/functional/wallet_listdescriptors.py @@ -134,6 +134,26 @@ def run_test(self): } assert_equal(expected, wallet.listdescriptors()) + self.log.info('Test taproot descriptor do not have mixed hardened derivation marker') + node.createwallet(wallet_name='w5', descriptors=True, disable_private_keys=True) + wallet = node.get_wallet_rpc('w5') + wallet.importdescriptors([{ + 'desc': "tr([1dce71b2/48'/1'/0'/2']tpubDEeP3GefjqbaDTTaVAF5JkXWhoFxFDXQ9KuhVrMBViFXXNR2B3Lvme2d2AoyiKfzRFZChq2AGMNbU1qTbkBMfNv7WGVXLt2pnYXY87gXqcs/0/*,and_v(v:pk([c658b283/48'/1'/0'/2']tpubDFL5wzgPBYK5pZ2Kh1T8qrxnp43kjE5CXfguZHHBrZSWpkfASy5rVfj7prh11XdqkC1P3kRwUPBeX7AHN8XBNx8UwiprnFnEm5jyswiRD4p/0/*),older(65535)))#xl20m6md", + 'timestamp': TIME_GENESIS_BLOCK, + }]) + expected = { + 'wallet_name': 'w5', + 'descriptors': [ + {'active': False, + 'desc': 'tr([1dce71b2/48h/1h/0h/2h]tpubDEeP3GefjqbaDTTaVAF5JkXWhoFxFDXQ9KuhVrMBViFXXNR2B3Lvme2d2AoyiKfzRFZChq2AGMNbU1qTbkBMfNv7WGVXLt2pnYXY87gXqcs/0/*,and_v(v:pk([c658b283/48h/1h/0h/2h]tpubDFL5wzgPBYK5pZ2Kh1T8qrxnp43kjE5CXfguZHHBrZSWpkfASy5rVfj7prh11XdqkC1P3kRwUPBeX7AHN8XBNx8UwiprnFnEm5jyswiRD4p/0/*),older(65535)))#m4uznndk', + 'timestamp': TIME_GENESIS_BLOCK, + 'range': [0, 0], + 'next': 0, + 'next_index': 0}, + ] + } + assert_equal(expected, wallet.listdescriptors()) + if __name__ == '__main__': ListDescriptorsTest(__file__).main() From a7b581423e44c51fb7d177c5a15fe2cc2ab8aa43 Mon Sep 17 00:00:00 2001 From: Calin Culianu Date: Wed, 26 Mar 2025 08:12:39 -0500 Subject: [PATCH 0005/2775] Fix 11-year-old mis-categorized error code in OP_IF evaluation This was introduced by commit ab9edbd6b6eb3efbca11f16fa467c3c0ef905708. It appears the original author may have gotten tired and pasted the wrong error code into this 1 place. Every other situation where the value stack lacks the required number of arguments for the op-code, SCRIPT_ERR_INVALID_STACK_OPERATION is reported. Not so here. This commit fixes the situation. Also in this commit: - Fix script_tests to adjust to the corrected error message - Fix p2p_invalid_tx functional test to produce the desired error message --- src/script/interpreter.cpp | 2 +- src/test/data/script_tests.json | 24 ++++++++++++------------ test/functional/data/invalid_txs.py | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/script/interpreter.cpp b/src/script/interpreter.cpp index 61ea7f4503c2..ec34de5e7602 100644 --- a/src/script/interpreter.cpp +++ b/src/script/interpreter.cpp @@ -607,7 +607,7 @@ bool EvalScript(std::vector >& stack, const CScript& if (fExec) { if (stack.size() < 1) - return set_error(serror, SCRIPT_ERR_UNBALANCED_CONDITIONAL); + return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION); valtype& vch = stacktop(-1); // Tapscript requires minimal IF/NOTIF inputs as a consensus rule. if (sigversion == SigVersion::TAPSCRIPT) { diff --git a/src/test/data/script_tests.json b/src/test/data/script_tests.json index ad05240369b3..83f20ff44ee0 100644 --- a/src/test/data/script_tests.json +++ b/src/test/data/script_tests.json @@ -1027,8 +1027,8 @@ ["1", "IF 1", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL", "IF without ENDIF"], ["1 IF 1", "ENDIF", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL", "IFs don't carry over"], -["NOP", "IF 1 ENDIF", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL", "The following tests check the if(stack.size() < N) tests in each opcode"], -["NOP", "NOTIF 1 ENDIF", "P2SH,STRICTENC", "UNBALANCED_CONDITIONAL", "They are here to catch copy-and-paste errors"], +["NOP", "IF 1 ENDIF", "P2SH,STRICTENC", "INVALID_STACK_OPERATION", "The following tests check the if(stack.size() < N) tests in each opcode"], +["NOP", "NOTIF 1 ENDIF", "P2SH,STRICTENC", "INVALID_STACK_OPERATION", "They are here to catch copy-and-paste errors"], ["NOP", "VERIFY 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION", "Most of them are duplicated elsewhere,"], ["NOP", "TOALTSTACK 1", "P2SH,STRICTENC", "INVALID_STACK_OPERATION", "but, hey, more is always better, right?"], @@ -2546,14 +2546,14 @@ ["0x02 0x0100 0x03 0x635168", "HASH160 0x14 0xe7309652a8e3f600f06f5d8d52d6df03d2176cc3 EQUAL", "P2SH,WITNESS,MINIMALIF", "OK"], ["0 0x03 0x635168", "HASH160 0x14 0xe7309652a8e3f600f06f5d8d52d6df03d2176cc3 EQUAL", "P2SH,WITNESS,MINIMALIF", "EVAL_FALSE"], ["0x01 0x00 0x03 0x635168", "HASH160 0x14 0xe7309652a8e3f600f06f5d8d52d6df03d2176cc3 EQUAL", "P2SH,WITNESS,MINIMALIF", "EVAL_FALSE"], -["0x03 0x635168", "HASH160 0x14 0xe7309652a8e3f600f06f5d8d52d6df03d2176cc3 EQUAL", "P2SH,WITNESS,MINIMALIF", "UNBALANCED_CONDITIONAL"], +["0x03 0x635168", "HASH160 0x14 0xe7309652a8e3f600f06f5d8d52d6df03d2176cc3 EQUAL", "P2SH,WITNESS,MINIMALIF", "INVALID_STACK_OPERATION"], ["Normal P2SH NOTIF 1 ENDIF"], ["1 0x03 0x645168", "HASH160 0x14 0x0c3f8fe3d6ca266e76311ecda544c67d15fdd5b0 EQUAL", "P2SH,WITNESS,MINIMALIF", "EVAL_FALSE"], ["2 0x03 0x645168", "HASH160 0x14 0x0c3f8fe3d6ca266e76311ecda544c67d15fdd5b0 EQUAL", "P2SH,WITNESS,MINIMALIF", "EVAL_FALSE"], ["0x02 0x0100 0x03 0x645168", "HASH160 0x14 0x0c3f8fe3d6ca266e76311ecda544c67d15fdd5b0 EQUAL", "P2SH,WITNESS,MINIMALIF", "EVAL_FALSE"], ["0 0x03 0x645168", "HASH160 0x14 0x0c3f8fe3d6ca266e76311ecda544c67d15fdd5b0 EQUAL", "P2SH,WITNESS,MINIMALIF", "OK"], ["0x01 0x00 0x03 0x645168", "HASH160 0x14 0x0c3f8fe3d6ca266e76311ecda544c67d15fdd5b0 EQUAL", "P2SH,WITNESS,MINIMALIF", "OK"], -["0x03 0x645168", "HASH160 0x14 0x0c3f8fe3d6ca266e76311ecda544c67d15fdd5b0 EQUAL", "P2SH,WITNESS,MINIMALIF", "UNBALANCED_CONDITIONAL"], +["0x03 0x645168", "HASH160 0x14 0x0c3f8fe3d6ca266e76311ecda544c67d15fdd5b0 EQUAL", "P2SH,WITNESS,MINIMALIF", "INVALID_STACK_OPERATION"], ["P2WSH IF 1 ENDIF"], [["01", "635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS", "OK"], [["02", "635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS", "OK"], @@ -2565,8 +2565,8 @@ [["0100", "635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"], [["", "635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS,MINIMALIF", "CLEANSTACK"], [["00", "635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"], -[["635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS", "UNBALANCED_CONDITIONAL"], -[["635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS,MINIMALIF", "UNBALANCED_CONDITIONAL"], +[["635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS", "INVALID_STACK_OPERATION"], +[["635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS,MINIMALIF", "INVALID_STACK_OPERATION"], ["P2WSH NOTIF 1 ENDIF"], [["01", "645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS", "CLEANSTACK"], [["02", "645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS", "CLEANSTACK"], @@ -2578,8 +2578,8 @@ [["0100", "645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"], [["", "645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS,MINIMALIF", "OK"], [["00", "645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"], -[["645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS", "UNBALANCED_CONDITIONAL"], -[["645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS,MINIMALIF", "UNBALANCED_CONDITIONAL"], +[["645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS", "INVALID_STACK_OPERATION"], +[["645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS,MINIMALIF", "INVALID_STACK_OPERATION"], @@ -2594,8 +2594,8 @@ [["0100", "635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"], [["", "635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS,MINIMALIF", "CLEANSTACK"], [["00", "635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"], -[["635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS", "UNBALANCED_CONDITIONAL"], -[["635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS,MINIMALIF", "UNBALANCED_CONDITIONAL"], +[["635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS", "INVALID_STACK_OPERATION"], +[["635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS,MINIMALIF", "INVALID_STACK_OPERATION"], ["P2SH-P2WSH NOTIF 1 ENDIF"], [["01", "645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS", "CLEANSTACK"], [["02", "645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS", "CLEANSTACK"], @@ -2607,8 +2607,8 @@ [["0100", "645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"], [["", "645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS,MINIMALIF", "OK"], [["00", "645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"], -[["645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS", "UNBALANCED_CONDITIONAL"], -[["645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS,MINIMALIF", "UNBALANCED_CONDITIONAL"], +[["645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS", "INVALID_STACK_OPERATION"], +[["645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS,MINIMALIF", "INVALID_STACK_OPERATION"], ["NULLFAIL should cover all signatures and signatures only"], ["0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", "0x01 0x14 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0x01 0x14 CHECKMULTISIG NOT", "DERSIG", "OK", "BIP66 and NULLFAIL-compliant"], diff --git a/test/functional/data/invalid_txs.py b/test/functional/data/invalid_txs.py index d2d7202d8601..f0f2e61a592e 100644 --- a/test/functional/data/invalid_txs.py +++ b/test/functional/data/invalid_txs.py @@ -229,7 +229,7 @@ class InvalidOPIFConstruction(BadTxTemplate): def get_tx(self): return create_tx_with_script( - self.spend_tx, 0, script_sig=b'\x64' * 35, + self.spend_tx, 0, script_sig=b'\x68' * 35, amount=(self.spend_avail // 2)) From 57ce645f05d18d8ad10711c347a5989076f1f788 Mon Sep 17 00:00:00 2001 From: willcl-ark Date: Wed, 2 Apr 2025 09:46:56 +0100 Subject: [PATCH 0006/2775] net: filter for default routes in netlink responses Filter netlink responses to only consider default routes by checking the destination prefix length (rtm_dst_len == 0). Previously, we selected the first route with an RTA_GATEWAY attribute, which for IPv6 often resulted in choosing a non-default route instead of the actual default. This caused occasional PCP port mapping failures because a gateway for a non-default route was selected. --- src/common/netif.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/common/netif.cpp b/src/common/netif.cpp index 7424f977c7ef..dbdd3ddde977 100644 --- a/src/common/netif.cpp +++ b/src/common/netif.cpp @@ -97,6 +97,11 @@ std::optional QueryDefaultGatewayImpl(sa_family_t family) rtmsg* r = (rtmsg*)NLMSG_DATA(hdr); int remaining_len = RTM_PAYLOAD(hdr); + // Only consider default routes (destination prefix length of 0). + if (r->rtm_dst_len != 0) { + continue; + } + // Iterate over the attributes. rtattr *rta_gateway = nullptr; int scope_id = 0; From 42e99ad77396e4e9b02d67daf46349e215e99a0f Mon Sep 17 00:00:00 2001 From: willcl-ark Date: Wed, 2 Apr 2025 09:47:27 +0100 Subject: [PATCH 0007/2775] net: skip non-route netlink responses This shouldn't usually be hit, but is a good belt-and-braces. --- src/common/netif.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/common/netif.cpp b/src/common/netif.cpp index dbdd3ddde977..ef0485b8a2d5 100644 --- a/src/common/netif.cpp +++ b/src/common/netif.cpp @@ -97,6 +97,10 @@ std::optional QueryDefaultGatewayImpl(sa_family_t family) rtmsg* r = (rtmsg*)NLMSG_DATA(hdr); int remaining_len = RTM_PAYLOAD(hdr); + if (hdr->nlmsg_type != RTM_NEWROUTE) { + continue; // Skip non-route messages + } + // Only consider default routes (destination prefix length of 0). if (r->rtm_dst_len != 0) { continue; From fe71a4b139f3a142468c2e931775813bc8f9d2ad Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Mon, 14 Apr 2025 16:21:40 +0100 Subject: [PATCH 0008/2775] depends: Avoid `warning: "_FORTIFY_SOURCE" redefined` for `libevent` On Alpine Linux 3.12.3, compiling the `libevent` package produces multiple warnings: ``` $ gmake -C depends -j $(nproc) libevent : warning: "_FORTIFY_SOURCE" redefined : note: this is the location of the previous definition ``` --- depends/packages/libevent.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depends/packages/libevent.mk b/depends/packages/libevent.mk index dadd3b1b75da..1575c6768f8f 100644 --- a/depends/packages/libevent.mk +++ b/depends/packages/libevent.mk @@ -15,7 +15,7 @@ define $(package)_set_vars $(package)_config_opts+=-DEVENT__DISABLE_SAMPLES=ON -DEVENT__DISABLE_REGRESS=ON $(package)_config_opts+=-DEVENT__DISABLE_TESTS=ON -DEVENT__LIBRARY_TYPE=STATIC $(package)_cflags += -fdebug-prefix-map=$($(package)_extract_dir)=/usr -fmacro-prefix-map=$($(package)_extract_dir)=/usr - $(package)_cppflags += -D_GNU_SOURCE -D_FORTIFY_SOURCE=3 + $(package)_cppflags += -D_GNU_SOURCE -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 $(package)_cppflags_mingw32=-D_WIN32_WINNT=0x0A00 endef From 664657ed134365588914c2cf6a3975ce368a4f49 Mon Sep 17 00:00:00 2001 From: scgbckbone Date: Tue, 17 Dec 2024 11:21:56 +0100 Subject: [PATCH 0009/2775] bugfix: disallow label for ranged descriptors & allow external non-ranged descriptors to have label * do not only check user provided range data to decide whether descriptor is ranged * properly handle std::optional when checking if descriptor is internal --- src/wallet/rpc/backup.cpp | 8 +++++--- test/functional/wallet_importdescriptors.py | 13 +++++++++++++ test/functional/wallet_rescan_unconfirmed.py | 3 ++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/wallet/rpc/backup.cpp b/src/wallet/rpc/backup.cpp index e12453458c46..f4b6e192de86 100644 --- a/src/wallet/rpc/backup.cpp +++ b/src/wallet/rpc/backup.cpp @@ -1487,6 +1487,7 @@ static UniValue ProcessDescriptorImport(CWallet& wallet, const UniValue& data, c } // Range check + std::optional is_ranged; int64_t range_start = 0, range_end = 1, next_index = 0; if (!parsed_descs.at(0)->IsRange() && data.exists("range")) { throw JSONRPCError(RPC_INVALID_PARAMETER, "Range should not be specified for an un-ranged descriptor"); @@ -1501,6 +1502,7 @@ static UniValue ProcessDescriptorImport(CWallet& wallet, const UniValue& data, c range_end = wallet.m_keypool_size; } next_index = range_start; + is_ranged = true; if (data.exists("next_index")) { next_index = data["next_index"].getInt(); @@ -1522,12 +1524,13 @@ static UniValue ProcessDescriptorImport(CWallet& wallet, const UniValue& data, c } // Ranged descriptors should not have a label - if (data.exists("range") && data.exists("label")) { + if (is_ranged.has_value() && is_ranged.value() && data.exists("label")) { throw JSONRPCError(RPC_INVALID_PARAMETER, "Ranged descriptors should not have a label"); } + bool desc_internal = internal.has_value() && internal.value(); // Internal addresses should not have a label either - if (internal && data.exists("label")) { + if (desc_internal && data.exists("label")) { throw JSONRPCError(RPC_INVALID_PARAMETER, "Internal addresses should not have a label"); } @@ -1543,7 +1546,6 @@ static UniValue ProcessDescriptorImport(CWallet& wallet, const UniValue& data, c for (size_t j = 0; j < parsed_descs.size(); ++j) { auto parsed_desc = std::move(parsed_descs[j]); - bool desc_internal = internal.has_value() && internal.value(); if (parsed_descs.size() == 2) { desc_internal = j == 1; } else if (parsed_descs.size() > 2) { diff --git a/test/functional/wallet_importdescriptors.py b/test/functional/wallet_importdescriptors.py index bd50b8cdc028..151ab05de478 100755 --- a/test/functional/wallet_importdescriptors.py +++ b/test/functional/wallet_importdescriptors.py @@ -118,6 +118,9 @@ def run_test(self): error_code=-8, error_message="Internal addresses should not have a label") + self.log.info("External non-ranged addresses can have labels") + self.test_importdesc({**import_request, "internal": False}, success=True) + self.log.info("Internal addresses should be detected as such") key = get_generate_key() self.test_importdesc({"desc": descsum_create("pkh(" + key.pubkey + ")"), @@ -219,6 +222,16 @@ def run_test(self): error_code=-8, error_message='Ranged descriptors should not have a label') + self.log.info("Ranged descriptors cannot have labels - even if range not provided by user and only implied by asterisk (*)") + self.test_importdesc({"desc":descsum_create("wpkh(" + xpub + "/100/0/*)"), + "timestamp": "now", + "label": "test", + "active": True}, + success=False, + warnings=['Range not given, using default keypool range'], + error_code=-8, + error_message='Ranged descriptors should not have a label') + self.log.info("Private keys required for private keys enabled wallet") self.test_importdesc({"desc":descsum_create(desc), "timestamp": "now", diff --git a/test/functional/wallet_rescan_unconfirmed.py b/test/functional/wallet_rescan_unconfirmed.py index 23c58b92f429..4a7e44c0ddcb 100755 --- a/test/functional/wallet_rescan_unconfirmed.py +++ b/test/functional/wallet_rescan_unconfirmed.py @@ -65,7 +65,8 @@ def run_test(self): assert tx_parent_to_reorg["txid"] in node.getrawmempool() self.log.info("Import descriptor wallet on another node") - descriptors_to_import = [{"desc": w0.getaddressinfo(parent_address)['parent_desc'], "timestamp": 0, "label": "w0 import"}] + # descriptor is ranged - label not allowed + descriptors_to_import = [{"desc": w0.getaddressinfo(parent_address)['parent_desc'], "timestamp": 0}] node.createwallet(wallet_name="w1", disable_private_keys=True) w1 = node.get_wallet_rpc("w1") From 84820561dcb2d156d1a1151a480fc1be6649cae4 Mon Sep 17 00:00:00 2001 From: Andrew Toth Date: Sat, 3 May 2025 08:41:02 -0400 Subject: [PATCH 0010/2775] validation: periodically flush dbcache during reindex-chainstate Move the periodic flush inside the outer loop of ActivateBestChain. For very long activations, such as with reindex-chainstate, this calls periodic flushes so progress can be saved to disk. Co-Authored-By: l0rinc --- src/validation.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/validation.cpp b/src/validation.cpp index 5ad2ebdcd7eb..94b9de3a49e7 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -3567,6 +3567,11 @@ bool Chainstate::ActivateBestChain(BlockValidationState& state, std::shared_ptr< m_chainman.MaybeRebalanceCaches(); } + // Write changes periodically to disk, after relay. + if (!FlushStateToDisk(state, FlushStateMode::PERIODIC)) { + return false; + } + if (WITH_LOCK(::cs_main, return m_disabled)) { // Background chainstate has reached the snapshot base block, so exit. @@ -3591,11 +3596,6 @@ bool Chainstate::ActivateBestChain(BlockValidationState& state, std::shared_ptr< m_chainman.CheckBlockIndex(); - // Write changes periodically to disk, after relay. - if (!FlushStateToDisk(state, FlushStateMode::PERIODIC)) { - return false; - } - return true; } From 41479ed1d23ea752d0ce14c2cf5627f43bceb722 Mon Sep 17 00:00:00 2001 From: Andrew Toth Date: Sun, 4 May 2025 13:34:29 -0400 Subject: [PATCH 0011/2775] test: add test for periodic flush inside ActivateBestChain --- src/test/chainstate_write_tests.cpp | 61 ++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/src/test/chainstate_write_tests.cpp b/src/test/chainstate_write_tests.cpp index ccca2f9be101..e1b82ebc1210 100644 --- a/src/test/chainstate_write_tests.cpp +++ b/src/test/chainstate_write_tests.cpp @@ -8,6 +8,10 @@ #include +// Taken from validation.cpp +static constexpr auto DATABASE_WRITE_INTERVAL_MIN{50min}; +static constexpr auto DATABASE_WRITE_INTERVAL_MAX{70min}; + BOOST_AUTO_TEST_SUITE(chainstate_write_tests) BOOST_FIXTURE_TEST_CASE(chainstate_write_interval, TestingSetup) @@ -31,15 +35,68 @@ BOOST_FIXTURE_TEST_CASE(chainstate_write_interval, TestingSetup) BOOST_CHECK(!sub->m_did_flush); // The periodic flush interval is between 50 and 70 minutes (inclusive) - SetMockTime(GetTime() + 49min); + SetMockTime(GetTime() + DATABASE_WRITE_INTERVAL_MIN - 1min); chainstate.FlushStateToDisk(state_dummy, FlushStateMode::PERIODIC); m_node.validation_signals->SyncWithValidationInterfaceQueue(); BOOST_CHECK(!sub->m_did_flush); - SetMockTime(GetTime() + 70min); + SetMockTime(GetTime() + DATABASE_WRITE_INTERVAL_MAX); chainstate.FlushStateToDisk(state_dummy, FlushStateMode::PERIODIC); m_node.validation_signals->SyncWithValidationInterfaceQueue(); BOOST_CHECK(sub->m_did_flush); } +// Test that we do PERIODIC flushes inside ActivateBestChain. +// This is necessary for reindex-chainstate to be able to periodically flush +// before reaching chain tip. +BOOST_FIXTURE_TEST_CASE(write_during_multiblock_activation, TestChain100Setup) +{ + struct TestSubscriber final : CValidationInterface + { + const CBlockIndex* m_tip{nullptr}; + const CBlockIndex* m_flushed_at_block{nullptr}; + void ChainStateFlushed(ChainstateRole, const CBlockLocator&) override + { + m_flushed_at_block = m_tip; + } + void UpdatedBlockTip(const CBlockIndex* block_index, const CBlockIndex*, bool) override { + m_tip = block_index; + } + }; + + auto& chainstate{Assert(m_node.chainman)->ActiveChainstate()}; + BlockValidationState state_dummy{}; + + // Pop two blocks from the tip + const CBlockIndex* tip{chainstate.m_chain.Tip()}; + CBlockIndex* second_from_tip{tip->pprev}; + + { + LOCK2(m_node.chainman->GetMutex(), chainstate.MempoolMutex()); + chainstate.DisconnectTip(state_dummy, nullptr); + chainstate.DisconnectTip(state_dummy, nullptr); + } + + BOOST_CHECK_EQUAL(second_from_tip->pprev, chainstate.m_chain.Tip()); + + // Set m_next_write to current time + chainstate.FlushStateToDisk(state_dummy, FlushStateMode::ALWAYS); + m_node.validation_signals->SyncWithValidationInterfaceQueue(); + // The periodic flush interval is between 50 and 70 minutes (inclusive) + // The next call to a PERIODIC write will flush + SetMockTime(GetMockTime() + DATABASE_WRITE_INTERVAL_MAX); + + const auto sub{std::make_shared()}; + m_node.validation_signals->RegisterSharedValidationInterface(sub); + + // ActivateBestChain back to tip + chainstate.ActivateBestChain(state_dummy, nullptr); + BOOST_CHECK_EQUAL(tip, chainstate.m_chain.Tip()); + // Check that we flushed inside ActivateBestChain while we were at the + // second block from tip, since FlushStateToDisk is called with PERIODIC + // inside the outer loop. + m_node.validation_signals->SyncWithValidationInterfaceQueue(); + BOOST_CHECK_EQUAL(sub->m_flushed_at_block, second_from_tip); +} + BOOST_AUTO_TEST_SUITE_END() From c1e554d3e5834a140f2a53854018499a3bfe6822 Mon Sep 17 00:00:00 2001 From: Andrew Toth Date: Sun, 4 May 2025 13:35:29 -0400 Subject: [PATCH 0012/2775] refactor: consolidate 3 separate locks into one block The main lock needs to be taken 3 separate times. It simplifies readability to take it once, and is more efficient. --- src/validation.cpp | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/validation.cpp b/src/validation.cpp index 94b9de3a49e7..b3f6d637a988 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -3560,19 +3560,24 @@ bool Chainstate::ActivateBestChain(BlockValidationState& state, std::shared_ptr< } // release cs_main // When we reach this point, we switched to a new tip (stored in pindexNewTip). - if (exited_ibd) { - // If a background chainstate is in use, we may need to rebalance our - // allocation of caches once a chainstate exits initial block download. - LOCK(::cs_main); - m_chainman.MaybeRebalanceCaches(); - } + bool disabled{false}; + { + LOCK(m_chainman.GetMutex()); + if (exited_ibd) { + // If a background chainstate is in use, we may need to rebalance our + // allocation of caches once a chainstate exits initial block download. + m_chainman.MaybeRebalanceCaches(); + } - // Write changes periodically to disk, after relay. - if (!FlushStateToDisk(state, FlushStateMode::PERIODIC)) { - return false; + // Write changes periodically to disk, after relay. + if (!FlushStateToDisk(state, FlushStateMode::PERIODIC)) { + return false; + } + + disabled = m_disabled; } - if (WITH_LOCK(::cs_main, return m_disabled)) { + if (disabled) { // Background chainstate has reached the snapshot base block, so exit. // Restart indexes to resume indexing for all blocks unique to the snapshot From d31158d3646f3c7e4832b9ca50f6ffe02800ff4c Mon Sep 17 00:00:00 2001 From: rkrux Date: Mon, 5 May 2025 17:04:27 +0530 Subject: [PATCH 0013/2775] psbt: clarify PSBT, PSBTInput, PSBTOutput unserialization flows The unserialization flows of the PSBT types work based on few underlying assumptions of functions from `serialize.h` & `stream.h` that takes some to understand when read the first time. Add few comments that highlight these assumptions hopefully making it easier to grasp. Also, mention key/value format types as per BIP 174. --- src/psbt.h | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/psbt.h b/src/psbt.h index dd7b02dc6071..03b1462e6064 100644 --- a/src/psbt.h +++ b/src/psbt.h @@ -465,7 +465,8 @@ struct PSBTInput // Read loop bool found_sep = false; while(!s.empty()) { - // Read + // Read the key of format "" after which + // "key" will contain "" std::vector key; s >> key; @@ -476,11 +477,13 @@ struct PSBTInput break; } - // Type is compact size uint at beginning of key + // "skey" is used so that "key" is unchanged after reading keytype below SpanReader skey{key}; + // keytype is of the format compact size uint at the beginning of "key" uint64_t type = ReadCompactSize(skey); - // Do stuff based on type + // Do stuff based on keytype "type", i.e., key checks, reading values of the + // format "" from the stream "s", and value checks switch(type) { case PSBT_IN_NON_WITNESS_UTXO: { @@ -949,7 +952,8 @@ struct PSBTOutput // Read loop bool found_sep = false; while(!s.empty()) { - // Read + // Read the key of format "" after which + // "key" will contain "" std::vector key; s >> key; @@ -960,11 +964,13 @@ struct PSBTOutput break; } - // Type is compact size uint at beginning of key + // "skey" is used so that "key" is unchanged after reading keytype below SpanReader skey{key}; + // keytype is of the format compact size uint at the beginning of "key" uint64_t type = ReadCompactSize(skey); - // Do stuff based on type + // Do stuff based on keytype "type", i.e., key checks, reading values of the + // format "" from the stream "s", and value checks switch(type) { case PSBT_OUT_REDEEMSCRIPT: { @@ -1212,7 +1218,8 @@ struct PartiallySignedTransaction // Read global data bool found_sep = false; while(!s.empty()) { - // Read + // Read the key of format "" after which + // "key" will contain "" std::vector key; s >> key; @@ -1223,11 +1230,13 @@ struct PartiallySignedTransaction break; } - // Type is compact size uint at beginning of key + // "skey" is used so that "key" is unchanged after reading keytype below SpanReader skey{key}; + // keytype is of the format compact size uint at the beginning of "key" uint64_t type = ReadCompactSize(skey); - // Do stuff based on type + // Do stuff based on keytype "type", i.e., key checks, reading values of the + // format "" from the stream "s", and value checks switch(type) { case PSBT_GLOBAL_UNSIGNED_TX: { From 58e55b17e632dbd4425dd64825b087f242ac4b7b Mon Sep 17 00:00:00 2001 From: brunoerg Date: Wed, 14 May 2025 10:42:28 -0300 Subject: [PATCH 0014/2775] test: descriptor: cover invalid multi/multi_a cases --- src/test/descriptor_tests.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/descriptor_tests.cpp b/src/test/descriptor_tests.cpp index c063dd90af34..74c74c5819b7 100644 --- a/src/test/descriptor_tests.cpp +++ b/src/test/descriptor_tests.cpp @@ -927,6 +927,9 @@ BOOST_AUTO_TEST_CASE(descriptor_test) CheckUnparsable("multi(+1,L4rK1yDtCWekvXuE6oXD9jCYfFNV2cWRpVuPLBcCU2z8TrisoyY1,5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss)", "multi(+1,03a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd,04a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235)", "Multi threshold '+1' is not valid"); // Invalid threshold CheckUnparsable("multi(0,L4rK1yDtCWekvXuE6oXD9jCYfFNV2cWRpVuPLBcCU2z8TrisoyY1,5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss)", "multi(0,03a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd,04a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235)", "Multisig threshold cannot be 0, must be at least 1"); // Threshold of 0 CheckUnparsable("multi(3,L4rK1yDtCWekvXuE6oXD9jCYfFNV2cWRpVuPLBcCU2z8TrisoyY1,5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss)", "multi(3,03a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd,04a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235)", "Multisig threshold cannot be larger than the number of keys; threshold is 3 but only 2 keys specified"); // Threshold larger than number of keys + CheckUnparsable("", "multi(0)()", "Multi: expected ',', got ')'"); + CheckUnparsable("", "multi(123)", "Cannot have 0 keys in multisig; must have between 1 and 20 keys, inclusive"); + CheckUnparsable("", "tr(a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd,multi_a(1))", "Cannot have 0 keys in multi_a; must have between 1 and 999 keys, inclusive"); CheckUnparsable("multi(3,KzoAz5CanayRKex3fSLQ2BwJpN7U52gZvxMyk78nDMHuqrUxuSJy,KwGNz6YCCQtYvFzMtrC6D3tKTKdBBboMrLTsjr2NYVBwapCkn7Mr,KxogYhiNfwxuswvXV66eFyKcCpm7dZ7TqHVqujHAVUjJxyivxQ9X,L2BUNduTSyZwZjwNHynQTF14mv2uz2NRq5n5sYWTb4FkkmqgEE9f)", "multi(3,03669b8afcec803a0d323e9a17f3ea8e68e8abe5a278020a929adbec52421adbd0,0260b2003c386519fc9eadf2b5cf124dd8eea4c4e68d5e154050a9346ea98ce600,0362a74e399c39ed5593852a30147f2959b56bb827dfa3e60e464b02ccf87dc5e8,0261345b53de74a4d721ef877c255429961b7e43714171ac06168d7e08c542a8b8)", "Cannot have 4 pubkeys in bare multisig; only at most 3 pubkeys"); // Threshold larger than number of keys CheckUnparsable("sh(multi(16,KzoAz5CanayRKex3fSLQ2BwJpN7U52gZvxMyk78nDMHuqrUxuSJy,KwGNz6YCCQtYvFzMtrC6D3tKTKdBBboMrLTsjr2NYVBwapCkn7Mr,KxogYhiNfwxuswvXV66eFyKcCpm7dZ7TqHVqujHAVUjJxyivxQ9X,L2BUNduTSyZwZjwNHynQTF14mv2uz2NRq5n5sYWTb4FkkmqgEE9f,L1okJGHGn1kFjdXHKxXjwVVtmCMR2JA5QsbKCSpSb7ReQjezKeoD,KxDCNSST75HFPaW5QKpzHtAyaCQC7p9Vo3FYfi2u4dXD1vgMiboK,L5edQjFtnkcf5UWURn6UuuoFrabgDQUHdheKCziwN42aLwS3KizU,KzF8UWFcEC7BYTq8Go1xVimMkDmyNYVmXV5PV7RuDicvAocoPB8i,L3nHUboKG2w4VSJ5jYZ5CBM97oeK6YuKvfZxrefdShECcjEYKMWZ,KyjHo36dWkYhimKmVVmQTq3gERv3pnqA4xFCpvUgbGDJad7eS8WE,KwsfyHKRUTZPQtysN7M3tZ4GXTnuov5XRgjdF2XCG8faAPmFruRF,KzCUbGhN9LJhdeFfL9zQgTJMjqxdBKEekRGZX24hXdgCNCijkkap,KzgpMBwwsDLwkaC5UrmBgCYaBD2WgZ7PBoGYXR8KT7gCA9UTN5a3,KyBXTPy4T7YG4q9tcAM3LkvfRpD1ybHMvcJ2ehaWXaSqeGUxEdkP,KzJDe9iwJRPtKP2F2AoN6zBgzS7uiuAwhWCfGdNeYJ3PC1HNJ8M8,L1xbHrxynrqLKkoYc4qtoQPx6uy5qYXR5ZDYVYBSRmCV5piU3JG9,L4rK1yDtCWekvXuE6oXD9jCYfFNV2cWRpVuPLBcCU2z8TrisoyY1))","sh(multi(16,03669b8afcec803a0d323e9a17f3ea8e68e8abe5a278020a929adbec52421adbd0,0260b2003c386519fc9eadf2b5cf124dd8eea4c4e68d5e154050a9346ea98ce600,0362a74e399c39ed5593852a30147f2959b56bb827dfa3e60e464b02ccf87dc5e8,0261345b53de74a4d721ef877c255429961b7e43714171ac06168d7e08c542a8b8,02da72e8b46901a65d4374fe6315538d8f368557dda3a1dcf9ea903f3afe7314c8,0318c82dd0b53fd3a932d16e0ba9e278fcc937c582d5781be626ff16e201f72286,0297ccef1ef99f9d73dec9ad37476ddb232f1238aff877af19e72ba04493361009,02e502cfd5c3f972fe9a3e2a18827820638f96b6f347e54d63deb839011fd5765d,03e687710f0e3ebe81c1037074da939d409c0025f17eb86adb9427d28f0f7ae0e9,02c04d3a5274952acdbc76987f3184b346a483d43be40874624b29e3692c1df5af,02ed06e0f418b5b43a7ec01d1d7d27290fa15f75771cb69b642a51471c29c84acd,036d46073cbb9ffee90473f3da429abc8de7f8751199da44485682a989a4bebb24,02f5d1ff7c9029a80a4e36b9a5497027ef7f3e73384a4a94fbfe7c4e9164eec8bc,02e41deffd1b7cce11cde209a781adcffdabd1b91c0ba0375857a2bfd9302419f3,02d76625f7956a7fc505ab02556c23ee72d832f1bac391bcd2d3abce5710a13d06,0399eb0a5487515802dc14544cf10b3666623762fbed2ec38a3975716e2c29c232,03a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd))", "P2SH script is too large, 581 bytes is larger than 520 bytes"); // Cannot have more than 15 keys in a P2SH multisig, or we exceed maximum push size Check("wsh(multi(20,KzoAz5CanayRKex3fSLQ2BwJpN7U52gZvxMyk78nDMHuqrUxuSJy,KwGNz6YCCQtYvFzMtrC6D3tKTKdBBboMrLTsjr2NYVBwapCkn7Mr,KxogYhiNfwxuswvXV66eFyKcCpm7dZ7TqHVqujHAVUjJxyivxQ9X,L2BUNduTSyZwZjwNHynQTF14mv2uz2NRq5n5sYWTb4FkkmqgEE9f,L1okJGHGn1kFjdXHKxXjwVVtmCMR2JA5QsbKCSpSb7ReQjezKeoD,KxDCNSST75HFPaW5QKpzHtAyaCQC7p9Vo3FYfi2u4dXD1vgMiboK,L5edQjFtnkcf5UWURn6UuuoFrabgDQUHdheKCziwN42aLwS3KizU,KzF8UWFcEC7BYTq8Go1xVimMkDmyNYVmXV5PV7RuDicvAocoPB8i,L3nHUboKG2w4VSJ5jYZ5CBM97oeK6YuKvfZxrefdShECcjEYKMWZ,KyjHo36dWkYhimKmVVmQTq3gERv3pnqA4xFCpvUgbGDJad7eS8WE,KwsfyHKRUTZPQtysN7M3tZ4GXTnuov5XRgjdF2XCG8faAPmFruRF,KzCUbGhN9LJhdeFfL9zQgTJMjqxdBKEekRGZX24hXdgCNCijkkap,KzgpMBwwsDLwkaC5UrmBgCYaBD2WgZ7PBoGYXR8KT7gCA9UTN5a3,KyBXTPy4T7YG4q9tcAM3LkvfRpD1ybHMvcJ2ehaWXaSqeGUxEdkP,KzJDe9iwJRPtKP2F2AoN6zBgzS7uiuAwhWCfGdNeYJ3PC1HNJ8M8,L1xbHrxynrqLKkoYc4qtoQPx6uy5qYXR5ZDYVYBSRmCV5piU3JG9,KzRedjSwMggebB3VufhbzpYJnvHfHe9kPJSjCU5QpJdAW3NSZxYS,Kyjtp5858xL7JfeV4PNRCKy2t6XvgqNNepArGY9F9F1SSPqNEMs3,L2D4RLHPiHBidkHS8ftx11jJk1hGFELvxh8LoxNQheaGT58dKenW,KyLPZdwY4td98bKkXqEXTEBX3vwEYTQo1yyLjX2jKXA63GBpmSjv))","wsh(multi(20,03669b8afcec803a0d323e9a17f3ea8e68e8abe5a278020a929adbec52421adbd0,0260b2003c386519fc9eadf2b5cf124dd8eea4c4e68d5e154050a9346ea98ce600,0362a74e399c39ed5593852a30147f2959b56bb827dfa3e60e464b02ccf87dc5e8,0261345b53de74a4d721ef877c255429961b7e43714171ac06168d7e08c542a8b8,02da72e8b46901a65d4374fe6315538d8f368557dda3a1dcf9ea903f3afe7314c8,0318c82dd0b53fd3a932d16e0ba9e278fcc937c582d5781be626ff16e201f72286,0297ccef1ef99f9d73dec9ad37476ddb232f1238aff877af19e72ba04493361009,02e502cfd5c3f972fe9a3e2a18827820638f96b6f347e54d63deb839011fd5765d,03e687710f0e3ebe81c1037074da939d409c0025f17eb86adb9427d28f0f7ae0e9,02c04d3a5274952acdbc76987f3184b346a483d43be40874624b29e3692c1df5af,02ed06e0f418b5b43a7ec01d1d7d27290fa15f75771cb69b642a51471c29c84acd,036d46073cbb9ffee90473f3da429abc8de7f8751199da44485682a989a4bebb24,02f5d1ff7c9029a80a4e36b9a5497027ef7f3e73384a4a94fbfe7c4e9164eec8bc,02e41deffd1b7cce11cde209a781adcffdabd1b91c0ba0375857a2bfd9302419f3,02d76625f7956a7fc505ab02556c23ee72d832f1bac391bcd2d3abce5710a13d06,0399eb0a5487515802dc14544cf10b3666623762fbed2ec38a3975716e2c29c232,02bc2feaa536991d269aae46abb8f3772a5b3ad592314945e51543e7da84c4af6e,0318bf32e5217c1eb771a6d5ce1cd39395dff7ff665704f175c9a5451d95a2f2ca,02c681a6243f16208c2004bb81f5a8a67edfdd3e3711534eadeec3dcf0b010c759,0249fdd6b69768b8d84b4893f8ff84b36835c50183de20fcae8f366a45290d01fd))", "wsh(multi(20,03669b8afcec803a0d323e9a17f3ea8e68e8abe5a278020a929adbec52421adbd0,0260b2003c386519fc9eadf2b5cf124dd8eea4c4e68d5e154050a9346ea98ce600,0362a74e399c39ed5593852a30147f2959b56bb827dfa3e60e464b02ccf87dc5e8,0261345b53de74a4d721ef877c255429961b7e43714171ac06168d7e08c542a8b8,02da72e8b46901a65d4374fe6315538d8f368557dda3a1dcf9ea903f3afe7314c8,0318c82dd0b53fd3a932d16e0ba9e278fcc937c582d5781be626ff16e201f72286,0297ccef1ef99f9d73dec9ad37476ddb232f1238aff877af19e72ba04493361009,02e502cfd5c3f972fe9a3e2a18827820638f96b6f347e54d63deb839011fd5765d,03e687710f0e3ebe81c1037074da939d409c0025f17eb86adb9427d28f0f7ae0e9,02c04d3a5274952acdbc76987f3184b346a483d43be40874624b29e3692c1df5af,02ed06e0f418b5b43a7ec01d1d7d27290fa15f75771cb69b642a51471c29c84acd,036d46073cbb9ffee90473f3da429abc8de7f8751199da44485682a989a4bebb24,02f5d1ff7c9029a80a4e36b9a5497027ef7f3e73384a4a94fbfe7c4e9164eec8bc,02e41deffd1b7cce11cde209a781adcffdabd1b91c0ba0375857a2bfd9302419f3,02d76625f7956a7fc505ab02556c23ee72d832f1bac391bcd2d3abce5710a13d06,0399eb0a5487515802dc14544cf10b3666623762fbed2ec38a3975716e2c29c232,02bc2feaa536991d269aae46abb8f3772a5b3ad592314945e51543e7da84c4af6e,0318bf32e5217c1eb771a6d5ce1cd39395dff7ff665704f175c9a5451d95a2f2ca,02c681a6243f16208c2004bb81f5a8a67edfdd3e3711534eadeec3dcf0b010c759,0249fdd6b69768b8d84b4893f8ff84b36835c50183de20fcae8f366a45290d01fd))", SIGNABLE, {{"0020376bd8344b8b6ebe504ff85ef743eaa1aa9272178223bcb6887e9378efb341ac"}}, OutputType::BECH32, /*op_desc_id=*/uint256{"2bb9d418ebdc3a75c465383985881527f3e5d6e520fb3efb152d4191b80e8412"}); // In P2WSH we can have up to 20 keys From ad132761fc49c38769c09653a265fdbc3b93eda5 Mon Sep 17 00:00:00 2001 From: dergoegge Date: Wed, 21 May 2025 16:59:12 +0100 Subject: [PATCH 0015/2775] [allocators] Apply manual ASan poisoning to PoolResource --- src/support/allocators/pool.h | 15 ++++++++++++++- src/test/util/poolresourcetester.h | 7 +++++++ src/util/check.h | 11 +++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/support/allocators/pool.h b/src/support/allocators/pool.h index 873e260b6517..86b5da5a8a84 100644 --- a/src/support/allocators/pool.h +++ b/src/support/allocators/pool.h @@ -14,6 +14,8 @@ #include #include +#include + /** * A memory resource similar to std::pmr::unsynchronized_pool_resource, but * optimized for node-based containers. It has the following properties: @@ -155,12 +157,15 @@ class PoolResource final // if there is still any available memory left, put it into the freelist. size_t remaining_available_bytes = std::distance(m_available_memory_it, m_available_memory_end); if (0 != remaining_available_bytes) { + ASAN_UNPOISON_MEMORY_REGION(m_available_memory_it, sizeof(ListNode)); PlacementAddToList(m_available_memory_it, m_free_lists[remaining_available_bytes / ELEM_ALIGN_BYTES]); + ASAN_POISON_MEMORY_REGION(m_available_memory_it, sizeof(ListNode)); } void* storage = ::operator new (m_chunk_size_bytes, std::align_val_t{ELEM_ALIGN_BYTES}); m_available_memory_it = new (storage) std::byte[m_chunk_size_bytes]; m_available_memory_end = m_available_memory_it + m_chunk_size_bytes; + ASAN_POISON_MEMORY_REGION(m_available_memory_it, m_chunk_size_bytes); m_allocated_chunks.emplace_back(m_available_memory_it); } @@ -202,6 +207,7 @@ class PoolResource final for (std::byte* chunk : m_allocated_chunks) { std::destroy(chunk, chunk + m_chunk_size_bytes); ::operator delete ((void*)chunk, std::align_val_t{ELEM_ALIGN_BYTES}); + ASAN_UNPOISON_MEMORY_REGION(chunk, m_chunk_size_bytes); } } @@ -217,7 +223,11 @@ class PoolResource final // we've already got data in the pool's freelist, unlink one element and return the pointer // to the unlinked memory. Since FreeList is trivially destructible we can just treat it as // uninitialized memory. - return std::exchange(m_free_lists[num_alignments], m_free_lists[num_alignments]->m_next); + ASAN_UNPOISON_MEMORY_REGION(m_free_lists[num_alignments], sizeof(ListNode)); + auto* next{m_free_lists[num_alignments]->m_next}; + ASAN_POISON_MEMORY_REGION(m_free_lists[num_alignments], sizeof(ListNode)); + ASAN_UNPOISON_MEMORY_REGION(m_free_lists[num_alignments], bytes); + return std::exchange(m_free_lists[num_alignments], next); } // freelist is empty: get one allocation from allocated chunk memory. @@ -228,6 +238,7 @@ class PoolResource final } // Make sure we use the right amount of bytes for that freelist (might be rounded up), + ASAN_UNPOISON_MEMORY_REGION(m_available_memory_it, round_bytes); return std::exchange(m_available_memory_it, m_available_memory_it + round_bytes); } @@ -244,7 +255,9 @@ class PoolResource final const std::size_t num_alignments = NumElemAlignBytes(bytes); // put the memory block into the linked list. We can placement construct the FreeList // into the memory since we can be sure the alignment is correct. + ASAN_UNPOISON_MEMORY_REGION(p, sizeof(ListNode)); PlacementAddToList(p, m_free_lists[num_alignments]); + ASAN_POISON_MEMORY_REGION(p, std::max(bytes, sizeof(ListNode))); } else { // Can't use the pool => forward deallocation to ::operator delete(). ::operator delete (p, std::align_val_t{alignment}); diff --git a/src/test/util/poolresourcetester.h b/src/test/util/poolresourcetester.h index 93f62eb2a978..7c06980ea39e 100644 --- a/src/test/util/poolresourcetester.h +++ b/src/test/util/poolresourcetester.h @@ -6,6 +6,7 @@ #define BITCOIN_TEST_UTIL_POOLRESOURCETESTER_H #include +#include #include #include @@ -48,7 +49,10 @@ class PoolResourceTester size_t size = 0; while (ptr != nullptr) { ++size; + const auto* ptr_ = ptr; + ASAN_UNPOISON_MEMORY_REGION(ptr_, sizeof(typename PoolResource::ListNode)); ptr = ptr->m_next; + ASAN_POISON_MEMORY_REGION(ptr_, sizeof(typename PoolResource::ListNode)); } sizes.push_back(size); } @@ -81,7 +85,10 @@ class PoolResourceTester auto* ptr = resource.m_free_lists[freelist_idx]; while (ptr != nullptr) { free_blocks.emplace_back(ptr, bytes); + const auto* ptr_ = ptr; + ASAN_UNPOISON_MEMORY_REGION(ptr_, sizeof(typename PoolResource::ListNode)); ptr = ptr->m_next; + ASAN_POISON_MEMORY_REGION(ptr_, sizeof(typename PoolResource::ListNode)); } } // also add whatever has not yet been used for blocks diff --git a/src/util/check.h b/src/util/check.h index f7dea5a3c2e7..6548453a97e6 100644 --- a/src/util/check.h +++ b/src/util/check.h @@ -126,4 +126,15 @@ constexpr T&& inline_assertion_check(LIFETIMEBOUND T&& val, [[maybe_unused]] con // NOLINTEND(bugprone-lambda-function-name) +#if defined(__has_feature) +# if __has_feature(address_sanitizer) +# include +# endif +#endif + +#ifndef ASAN_POISON_MEMORY_REGION +# define ASAN_POISON_MEMORY_REGION(addr, size) ((void)(addr), (void)(size)) +# define ASAN_UNPOISON_MEMORY_REGION(addr, size) ((void)(addr), (void)(size)) +#endif + #endif // BITCOIN_UTIL_CHECK_H From b30fca7498c93356fbdb8c2ce881aa8e548bae17 Mon Sep 17 00:00:00 2001 From: Sebastian Falbesoner Date: Tue, 27 May 2025 03:40:34 +0200 Subject: [PATCH 0016/2775] contrib: utxo_to_sqlite.py: add options to store txid/spk as BLOBs Co-authored-by: Anthony Towns --- contrib/utxo-tools/utxo_to_sqlite.py | 29 +++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/contrib/utxo-tools/utxo_to_sqlite.py b/contrib/utxo-tools/utxo_to_sqlite.py index 4758fe39aaa5..56de73698c20 100755 --- a/contrib/utxo-tools/utxo_to_sqlite.py +++ b/contrib/utxo-tools/utxo_to_sqlite.py @@ -9,6 +9,9 @@ The created database contains a table `utxos` with the following schema: (txid TEXT, vout INT, value INT, coinbase INT, height INT, scriptpubkey TEXT) + +If --txid=raw or --txid=rawle is specified, txid will be BLOB instead; +if --spk=raw, then scriptpubkey will be BLOB instead. """ import argparse import os @@ -111,7 +114,9 @@ def main(): parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument('infile', help='filename of compact-serialized UTXO set (input)') parser.add_argument('outfile', help='filename of created SQLite3 database (output)') - parser.add_argument('-v', '--verbose', action='store_true', help='show details about each UTXO') + parser.add_argument('--verbose', action='store_true', help='show details about each UTXO') + parser.add_argument('--spk', choices=['hex', 'raw'], default='hex', help='encode scriptPubKey as hex or raw bytes') + parser.add_argument('--txid', choices=['hex', 'raw', 'rawle'], default='hex', help='encode txid as hex, raw bytes (sha256 byteorder), or reversed raw bytes (little endian)') args = parser.parse_args() if not os.path.exists(args.infile): @@ -122,9 +127,15 @@ def main(): print(f"Error: provided output file '{args.outfile}' already exists.") sys.exit(1) + spk_hex = (args.spk == 'hex') + txid_hex = (args.txid == 'hex') + txid_reverse = (args.txid != 'raw') + # create database table + txid_fmt = "TEXT" if txid_hex else "BLOB" + spk_fmt = "TEXT" if spk_hex else "BLOB" con = sqlite3.connect(args.outfile) - con.execute("CREATE TABLE utxos(txid TEXT, vout INT, value INT, coinbase INT, height INT, scriptpubkey TEXT)") + con.execute(f"CREATE TABLE utxos(txid {txid_fmt}, vout INT, value INT, coinbase INT, height INT, scriptpubkey {spk_fmt})") # read metadata (magic bytes, version, network magic, block hash, UTXO count) f = open(args.infile, 'rb') @@ -153,7 +164,7 @@ def main(): for coin_idx in range(1, num_utxos+1): # read key (COutPoint) if coins_per_hash_left == 0: # read next prevout hash - prevout_hash = f.read(32)[::-1].hex() + prevout_hash = f.read(32) coins_per_hash_left = read_compactsize(f) prevout_index = read_compactsize(f) # read value (Coin) @@ -161,17 +172,21 @@ def main(): height = code >> 1 is_coinbase = code & 1 amount = decompress_amount(read_varint(f)) - scriptpubkey = decompress_script(f).hex() - write_batch.append((prevout_hash, prevout_index, amount, is_coinbase, height, scriptpubkey)) + scriptpubkey = decompress_script(f) + + scriptpubkey_write = scriptpubkey.hex() if spk_hex else scriptpubkey + txid_write = prevout_hash[::-1] if txid_reverse else prevout_hash + txid_write = txid_write.hex() if txid_hex else txid_write + write_batch.append((txid_write, prevout_index, amount, is_coinbase, height, scriptpubkey_write)) if height > max_height: max_height = height coins_per_hash_left -= 1 if args.verbose: print(f"Coin {coin_idx}/{num_utxos}:") - print(f" prevout = {prevout_hash}:{prevout_index}") + print(f" prevout = {prevout_hash[::-1].hex()}:{prevout_index}") print(f" amount = {amount}, height = {height}, coinbase = {is_coinbase}") - print(f" scriptPubKey = {scriptpubkey}\n") + print(f" scriptPubKey = {scriptpubkey.hex()}\n") if coin_idx % (16*1024) == 0 or coin_idx == num_utxos: # write utxo batch to database From 7378f27b4fb512567b6152f986f67d9263d08d7a Mon Sep 17 00:00:00 2001 From: Sebastian Falbesoner Date: Tue, 27 May 2025 03:41:53 +0200 Subject: [PATCH 0017/2775] test: run utxo-to-sqlite script test with spk/txid format option combinations --- test/functional/tool_utxo_to_sqlite.py | 53 ++++++++++++++++++-------- 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/test/functional/tool_utxo_to_sqlite.py b/test/functional/tool_utxo_to_sqlite.py index 2da7c42a86bc..d1f3e7e19348 100755 --- a/test/functional/tool_utxo_to_sqlite.py +++ b/test/functional/tool_utxo_to_sqlite.py @@ -3,6 +3,7 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. """Test utxo-to-sqlite conversion tool""" +from itertools import product import os.path try: import sqlite3 @@ -15,6 +16,7 @@ from test_framework.messages import ( COutPoint, CTxOut, + uint256_from_str, ) from test_framework.crypto.muhash import MuHash3072 from test_framework.script import ( @@ -38,15 +40,33 @@ from test_framework.wallet import MiniWallet -def calculate_muhash_from_sqlite_utxos(filename): +def calculate_muhash_from_sqlite_utxos(filename, txid_format, spk_format): muhash = MuHash3072() con = sqlite3.connect(filename) cur = con.cursor() - for (txid_hex, vout, value, coinbase, height, spk_hex) in cur.execute("SELECT * FROM utxos"): + for (txid, vout, value, coinbase, height, spk) in cur.execute("SELECT * FROM utxos"): + match txid_format: + case "hex": + assert type(txid) is str + txid_bytes = bytes.fromhex(txid)[::-1] + case "raw": + assert type(txid) is bytes + txid_bytes = txid + case "rawle": + assert type(txid) is bytes + txid_bytes = txid[::-1] + match spk_format: + case "hex": + assert type(spk) is str + spk_bytes = bytes.fromhex(spk) + case "raw": + assert type(spk) is bytes + spk_bytes = spk + # serialize UTXO for MuHash (see function `TxOutSer` in the coinstats module) - utxo_ser = COutPoint(int(txid_hex, 16), vout).serialize() + utxo_ser = COutPoint(uint256_from_str(txid_bytes), vout).serialize() utxo_ser += (height * 2 + coinbase).to_bytes(4, 'little') - utxo_ser += CTxOut(value, bytes.fromhex(spk_hex)).serialize() + utxo_ser += CTxOut(value, spk_bytes).serialize() muhash.insert(utxo_ser) con.close() return muhash.digest()[::-1].hex() @@ -100,17 +120,20 @@ def run_test(self): input_filename = os.path.join(self.options.tmpdir, "utxos.dat") node.dumptxoutset(input_filename, "latest") - self.log.info('Convert UTXO set from compact-serialized format to sqlite format') - output_filename = os.path.join(self.options.tmpdir, "utxos.sqlite") - base_dir = self.config["environment"]["SRCDIR"] - utxo_to_sqlite_path = os.path.join(base_dir, "contrib", "utxo-tools", "utxo_to_sqlite.py") - subprocess.run([sys.executable, utxo_to_sqlite_path, input_filename, output_filename], - check=True, stderr=subprocess.STDOUT) - - self.log.info('Verify that both UTXO sets match by comparing their MuHash') - muhash_sqlite = calculate_muhash_from_sqlite_utxos(output_filename) - muhash_compact_serialized = node.gettxoutsetinfo('muhash')['muhash'] - assert_equal(muhash_sqlite, muhash_compact_serialized) + for i, (txid_format, spk_format) in enumerate(product(["hex", "raw", "rawle"], ["hex", "raw"])): + self.log.info(f'Test utxo-to-sqlite script using txid format "{txid_format}" and spk format "{spk_format}" ({i+1})') + self.log.info('-> Convert UTXO set from compact-serialized format to sqlite format') + output_filename = os.path.join(self.options.tmpdir, f"utxos_{i+1}.sqlite") + base_dir = self.config["environment"]["SRCDIR"] + utxo_to_sqlite_path = os.path.join(base_dir, "contrib", "utxo-tools", "utxo_to_sqlite.py") + arguments = [input_filename, output_filename, f'--txid={txid_format}', f'--spk={spk_format}'] + subprocess.run([sys.executable, utxo_to_sqlite_path] + arguments, check=True, stderr=subprocess.STDOUT) + + self.log.info('-> Verify that both UTXO sets match by comparing their MuHash') + muhash_sqlite = calculate_muhash_from_sqlite_utxos(output_filename, txid_format, spk_format) + muhash_compact_serialized = node.gettxoutsetinfo('muhash')['muhash'] + assert_equal(muhash_sqlite, muhash_compact_serialized) + self.log.info('') if __name__ == "__main__": From cd97905ebc564b8b095099a28d1d5437951927c4 Mon Sep 17 00:00:00 2001 From: Ryan Ofsky Date: Fri, 17 Jan 2025 11:44:46 -0500 Subject: [PATCH 0018/2775] cmake: Move internal binaries from bin/ to libexec/ This change moves binaries that are not typically invoked directly by users from the `bin/` directory to the `libexec/` directory in CMake installs and binary releases. The goal is to simplify the contents of `bin/` for end users while still making all binaries available when needed. After this change, the binaries remaining in `bin/` are: - bitcoin - bitcoin-cli - bitcoind - bitcoin-qt - bitcoin-tx - bitcoin-util - bitcoin-wallet And the binaries that are moved to `libexec/` are: - bench_bitcoin - bitcoin-chainstate(*) - bitcoin-gui(***) - bitcoin-node(***) - test_bitcoin(**) - test_bitcoin-qt (*) bitcoin-chainstate was previously missing an install rule and was actually not installed even when it was enabled. (**) test_bitcoin is the only libexec/ binary that is currently included in bitcoin binary releases. The others are only installed when building from source with relevant cmake options enabled. (***) bitcoin-node and bitcoin-gui are not currently built by default or included in binary releases but both of these changes are planned and implemented in #31802 --- ci/test/03_test_script.sh | 2 +- cmake/module/InstallBinaryComponent.cmake | 15 ++++++++++----- contrib/guix/libexec/codesign.sh | 2 +- contrib/macdeploy/detached-sig-create.sh | 2 +- src/CMakeLists.txt | 3 ++- src/bench/CMakeLists.txt | 2 +- src/qt/CMakeLists.txt | 2 +- src/qt/test/CMakeLists.txt | 2 +- src/test/CMakeLists.txt | 2 +- 9 files changed, 19 insertions(+), 13 deletions(-) diff --git a/ci/test/03_test_script.sh b/ci/test/03_test_script.sh index 3394c50b8bd5..d836a9efa7d7 100755 --- a/ci/test/03_test_script.sh +++ b/ci/test/03_test_script.sh @@ -145,7 +145,7 @@ if [ "$RUN_UNIT_TESTS" = "true" ]; then fi if [ "$RUN_UNIT_TESTS_SEQUENTIAL" = "true" ]; then - DIR_UNIT_TEST_DATA="${DIR_UNIT_TEST_DATA}" LD_LIBRARY_PATH="${DEPENDS_DIR}/${HOST}/lib" "${BASE_OUTDIR}"/bin/test_bitcoin --catch_system_errors=no -l test_suite + DIR_UNIT_TEST_DATA="${DIR_UNIT_TEST_DATA}" LD_LIBRARY_PATH="${DEPENDS_DIR}/${HOST}/lib" "${BASE_BUILD_DIR}"/bin/test_bitcoin --catch_system_errors=no -l test_suite fi if [ "$RUN_FUNCTIONAL_TESTS" = "true" ]; then diff --git a/cmake/module/InstallBinaryComponent.cmake b/cmake/module/InstallBinaryComponent.cmake index c7b2ed9ae6a4..42bcd88efb4c 100644 --- a/cmake/module/InstallBinaryComponent.cmake +++ b/cmake/module/InstallBinaryComponent.cmake @@ -7,14 +7,19 @@ include(GNUInstallDirs) function(install_binary_component component) cmake_parse_arguments(PARSE_ARGV 1 - IC # prefix - "HAS_MANPAGE" # options - "" # one_value_keywords - "" # multi_value_keywords + IC # prefix + "HAS_MANPAGE;INTERNAL" # options + "" # one_value_keywords + "" # multi_value_keywords ) set(target_name ${component}) + if(IC_INTERNAL) + set(runtime_dest ${CMAKE_INSTALL_LIBEXECDIR}) + else() + set(runtime_dest ${CMAKE_INSTALL_BINDIR}) + endif() install(TARGETS ${target_name} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + RUNTIME DESTINATION ${runtime_dest} COMPONENT ${component} ) if(INSTALL_MAN AND IC_HAS_MANPAGE) diff --git a/contrib/guix/libexec/codesign.sh b/contrib/guix/libexec/codesign.sh index 3a7293711144..fe86065350e9 100755 --- a/contrib/guix/libexec/codesign.sh +++ b/contrib/guix/libexec/codesign.sh @@ -110,7 +110,7 @@ mkdir -p "$DISTSRC" # Apply detached codesignatures (in-place) signapple apply dist/Bitcoin-Qt.app codesignatures/osx/"${HOST}"/dist/Bitcoin-Qt.app - find "${DISTNAME}" -wholename "*/bin/*" -type f | while read -r bin + find "${DISTNAME}" \( -wholename "*/bin/*" -o -wholename "*/libexec/*" \) -type f | while read -r bin do signapple apply "${bin}" "codesignatures/osx/${HOST}/${bin}.${ARCH}sign" done diff --git a/contrib/macdeploy/detached-sig-create.sh b/contrib/macdeploy/detached-sig-create.sh index 89094403b7f7..b558784eff26 100755 --- a/contrib/macdeploy/detached-sig-create.sh +++ b/contrib/macdeploy/detached-sig-create.sh @@ -44,7 +44,7 @@ ${SIGNAPPLE} apply "${UNSIGNED_BUNDLE}" "${OUTROOT}/${BUNDLE_ROOT}/${BUNDLE_NAME ${SIGNAPPLE} notarize --detach "${OUTROOT}/${BUNDLE_ROOT}" --passphrase "${api_key_pass}" "$2" "$3" "${UNSIGNED_BUNDLE}" # Sign each binary -find . -maxdepth 3 -wholename "*/bin/*" -type f -exec realpath --relative-to=. {} \; | while read -r bin +find . -maxdepth 3 \( -wholename "*/bin/*" -o -wholename "*/libexec/*" \) -type f -exec realpath --relative-to=. {} \; | while read -r bin do bin_dir=$(dirname "${bin}") bin_name=$(basename "${bin}") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 96a6790e612c..eb8612c4285a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -367,7 +367,7 @@ if(ENABLE_IPC AND BUILD_DAEMON) bitcoin_ipc $ ) - install_binary_component(bitcoin-node) + install_binary_component(bitcoin-node INTERNAL) endif() if(ENABLE_IPC AND BUILD_TESTS) @@ -469,6 +469,7 @@ if(BUILD_UTIL_CHAINSTATE) core_interface bitcoinkernel ) + install_binary_component(bitcoin-chainstate INTERNAL) endif() diff --git a/src/bench/CMakeLists.txt b/src/bench/CMakeLists.txt index 905187fbb008..0168589a6a05 100644 --- a/src/bench/CMakeLists.txt +++ b/src/bench/CMakeLists.txt @@ -83,4 +83,4 @@ add_test(NAME bench_sanity_check COMMAND bench_bitcoin -sanity-check ) -install_binary_component(bench_bitcoin) +install_binary_component(bench_bitcoin INTERNAL) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 6c853cbf2f87..ed7d9a495113 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -282,7 +282,7 @@ if(ENABLE_IPC) bitcoin_ipc ) import_plugins(bitcoin-gui) - install_binary_component(bitcoin-gui) + install_binary_component(bitcoin-gui INTERNAL) if(WIN32) set_target_properties(bitcoin-gui PROPERTIES WIN32_EXECUTABLE TRUE) endif() diff --git a/src/qt/test/CMakeLists.txt b/src/qt/test/CMakeLists.txt index cbfb144596bc..8fe4ea68e266 100644 --- a/src/qt/test/CMakeLists.txt +++ b/src/qt/test/CMakeLists.txt @@ -45,4 +45,4 @@ if(WIN32 AND VCPKG_TARGET_TRIPLET) ) endif() -install_binary_component(test_bitcoin-qt) +install_binary_component(test_bitcoin-qt INTERNAL) diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index 6ce33621af8e..6f00e2f22588 100644 --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -213,4 +213,4 @@ endfunction() add_all_test_targets() -install_binary_component(test_bitcoin) +install_binary_component(test_bitcoin INTERNAL) From 94ffd01a0294afbe045f1b17a77e4a3caf21e674 Mon Sep 17 00:00:00 2001 From: Ryan Ofsky Date: Wed, 9 Apr 2025 18:04:03 -0400 Subject: [PATCH 0019/2775] doc: Add release notes describing libexec/ binaries --- doc/release-notes-31375-31679.md | 24 ++++++++++++++++++++++++ doc/release-notes-31375.md | 11 ----------- 2 files changed, 24 insertions(+), 11 deletions(-) create mode 100644 doc/release-notes-31375-31679.md delete mode 100644 doc/release-notes-31375.md diff --git a/doc/release-notes-31375-31679.md b/doc/release-notes-31375-31679.md new file mode 100644 index 000000000000..7f6b0667a69f --- /dev/null +++ b/doc/release-notes-31375-31679.md @@ -0,0 +1,24 @@ +New command line interface +-------------------------- + +A new `bitcoin` command line tool has been added to make features more +discoverable and convenient to use. The `bitcoin` tool just calls other +executables and does not implement any functionality on its own. Specifically +`bitcoin node` is a synonym for `bitcoind`, `bitcoin gui` is a synonym for +`bitcoin-qt`, and `bitcoin rpc` is a synonym for `bitcoin-cli -named`. Other +commands and options can be listed with `bitcoin help`. The new tool does not +replace other tools, so existing commands should continue working and there are +no plans to deprecate them. + +Install changes +--------------- + +The `test_bitcoin` executable is now located in `libexec/` rather than `bin/`. +It can still be executed directly, or accessed through the new `bitcoin` command +line tool as `bitcoin test`. + +Other executables which are only part of source releases and not built by +default: `test_bitcoin-qt`, `bench_bitcoin`, `bitcoin-chainstate`, +`bitcoin-node`, and `bitcoin-gui` are also now installed in `libexec/` +instead of `bin/` and can be accessed through the `bitcoin` command line tool. +See `bitcoin help` output for details. diff --git a/doc/release-notes-31375.md b/doc/release-notes-31375.md deleted file mode 100644 index e1e7f5c0afb5..000000000000 --- a/doc/release-notes-31375.md +++ /dev/null @@ -1,11 +0,0 @@ -New command line interface --------------------------- - -A new `bitcoin` command line tool has been added to make features more -discoverable and convenient to use. The `bitcoin` tool just calls other -executables and does not implement any functionality on its own. Specifically -`bitcoin node` is a synonym for `bitcoind`, `bitcoin gui` is a synonym for -`bitcoin-qt`, and `bitcoin rpc` is a synonym for `bitcoin-cli -named`. Other -commands and options can be listed with `bitcoin help`. The new tool does not -replace other tools, so all existing commands should continue working and there -are no plans to deprecate them. From c810b168b89dc07017e9feaec1a8746a449a60b1 Mon Sep 17 00:00:00 2001 From: Ryan Ofsky Date: Mon, 14 Apr 2025 09:29:04 -0400 Subject: [PATCH 0020/2775] doc: Add description of installed files to files.md --- doc/files.md | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/doc/files.md b/doc/files.md index 1b93ab797d10..6d2faa4c8f22 100644 --- a/doc/files.md +++ b/doc/files.md @@ -16,7 +16,7 @@ - [Berkeley DB database based wallets](#berkeley-db-database-based-wallets) -- [Notes](#notes) +- [Installed Files](#installed-files) ## Data directory location @@ -123,8 +123,40 @@ Subdirectory | File(s) | Description `./` | `wallet.dat` | Personal wallet (a BDB database) with keys and transactions `./` | `.walletlock` | BDB wallet lock file -## Notes +### Notes 1. The `/` (slash, U+002F) is used as the platform-independent path component separator in this document. 2. `NNNNN` matches `[0-9]{5}` regex. + +## Installed Files + +This table describes the files installed by Bitcoin Core across different platforms. + +| **Path** | **Description** | +|------------------------------------------------------------|-----------------------------------------------------------------------------| +| [README.md](README.md) or [readme.txt](README_windows.txt) | Project information and instructions | +| bitcoin.conf | [Generated](../contrib/devtools/gen-bitcoin-conf.sh) configuration file | +| bin/bitcoin | Command-line tool for interacting with Bitcoin. Calls other binaries below. | +| bin/bitcoin-cli | Tool for making node and wallet RPC calls. | +| bin/bitcoin-qt | Bitcoin node and wallet GUI | +| bin/bitcoin-tx | Tool for creating and modifying transactions | +| bin/bitcoin-util | Miscellaneous utilities | +| bin/bitcoin-wallet | Bitcoin wallet tool | +| bin/bitcoind | Bitcoin node and wallet daemon | +| *lib/libbitcoinkernel.so* | Shared library containing core consensus and validation code | +| *lib/pkgconfig/libbitcoinkernel.pc* | Pkg-config metadata for linking to `libbitcoinkernel` | +| *libexec/bench_bitcoin* | Benchmarking tool for measuring node performance | +| *libexec/bitcoin-chainstate* | Tool to validate and connect blocks | +| *libexec/bitcoin-gui* | IPC-enabled alternative to `bitcoin-qt` | +| *libexec/bitcoin-node* | IPC-enabled alternative to `bitcoind` | +| libexec/test_bitcoin | Unit test binary | +| *libexec/test_bitcoin-qt* | GUI-specific unit tests | +| share/man/man1/ | Man pages for command-line tools like `bitcoin-cli`, `bitcoind`, and others | +| share/rpcauth/ | Documentation and scripts for RPC authentication setup | + +### Notes + +- *Italicized* files are only installed in source builds if relevant CMake options are enabled. They are not included in binary releases. +- README and bitcoin.conf files are included in binary releases but not installed in source builds. +- On Windows, binaries have a `.exe` suffix (e.g., `bitcoin-cli.exe`). From 01737883b3ff8051253c961b7dde50d055104ef9 Mon Sep 17 00:00:00 2001 From: Ryan Ofsky Date: Fri, 15 Nov 2024 11:54:49 -0500 Subject: [PATCH 0021/2775] wallet: Translate [default wallet] string in progress messages Noticed while reviewing #31287 (https://github.com/bitcoin/bitcoin/pull/31287#discussion_r1843809721) that the [default wallet] part of progress messages remains untranslated while the rest of the string is translated. Fix this in all places where Wallet::ShowProgress (which has a cancel button) and chain::showProgress (which doesn't have a cancel button) are called by making "default wallet" into a translated string. To minimize scope of this bugfix, this introduces a new wallet DisplayName() method which behaves differently than the existing GetDisplayName() method. The existing method will be cleaned up in the following commit. --- src/wallet/wallet.cpp | 6 +++--- src/wallet/wallet.h | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 6542abc23df2..ede6188c68d7 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -1817,7 +1817,7 @@ CWallet::ScanResult CWallet::ScanForWalletTransactions(const uint256& start_bloc fast_rescan_filter ? "fast variant using block filters" : "slow variant inspecting all blocks"); fAbortRescan = false; - ShowProgress(strprintf("%s %s", GetDisplayName(), _("Rescanning…")), 0); // show rescan progress in GUI as dialog or on splashscreen, if rescan required on startup (e.g. due to corruption) + ShowProgress(strprintf("[%s] %s", DisplayName(), _("Rescanning…")), 0); // show rescan progress in GUI as dialog or on splashscreen, if rescan required on startup (e.g. due to corruption) uint256 tip_hash = WITH_LOCK(cs_wallet, return GetLastBlockHash()); uint256 end_hash = tip_hash; if (max_height) chain().findAncestorByHeight(tip_hash, *max_height, FoundBlock().hash(end_hash)); @@ -1832,7 +1832,7 @@ CWallet::ScanResult CWallet::ScanForWalletTransactions(const uint256& start_bloc m_scanning_progress = 0; } if (block_height % 100 == 0 && progress_end - progress_begin > 0.0) { - ShowProgress(strprintf("%s %s", GetDisplayName(), _("Rescanning…")), std::max(1, std::min(99, (int)(m_scanning_progress * 100)))); + ShowProgress(strprintf("[%s] %s", DisplayName(), _("Rescanning…")), std::max(1, std::min(99, (int)(m_scanning_progress * 100)))); } bool next_interval = reserver.now() >= current_time + INTERVAL_TIME; @@ -1937,7 +1937,7 @@ CWallet::ScanResult CWallet::ScanForWalletTransactions(const uint256& start_bloc WalletLogPrintf("Scanning current mempool transactions.\n"); WITH_LOCK(cs_wallet, chain().requestMempoolTransactions(*this)); } - ShowProgress(strprintf("%s %s", GetDisplayName(), _("Rescanning…")), 100); // hide progress dialog in GUI + ShowProgress(strprintf("[%s] %s", DisplayName(), _("Rescanning…")), 100); // hide progress dialog in GUI if (block_height && fAbortRescan) { WalletLogPrintf("Rescan aborted at block %d. Progress=%f\n", block_height, progress_current); result.status = ScanResult::USER_ABORT; diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index 0c4f89ccf5c5..fa2833827c42 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -912,6 +912,13 @@ class CWallet final : public WalletStorage, public interfaces::Chain::Notificati return strprintf("[%s]", wallet_name); }; + /** Return wallet name for display, translating "default wallet" string if returned. */ + std::string DisplayName() const + { + std::string name{GetName()}; + return name.empty() ? _("default wallet") : name; + }; + /** Prepends the wallet name in logging output to ease debugging in multi-wallet use cases */ template void WalletLogPrintf(util::ConstevalFormatString wallet_fmt, const Params&... params) const From db225cea56b0531cc42d4b89dc61b02890f432ff Mon Sep 17 00:00:00 2001 From: Ryan Ofsky Date: Mon, 18 Nov 2024 10:29:55 -0500 Subject: [PATCH 0022/2775] wallet, refactor: Replace GetDisplayName() with LogName() The GetDisplayName() method name was confusing because it suggested the return value could be used for display, while documentation and implementation indicated it only meant to be used for logging. Also the name didn't suggest that it was formatting the wallet names, which made it harder understand how messages were formatted in the places it was called. Fix these issues by splitting up the GetDisplayName() method and replacing it with LogName() / DisplayName() methods. This commit is a refactoring that does not change any behavior. --- src/wallet/scriptpubkeyman.cpp | 2 +- src/wallet/scriptpubkeyman.h | 4 ++-- src/wallet/wallet.h | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/wallet/scriptpubkeyman.cpp b/src/wallet/scriptpubkeyman.cpp index d2ac171f8d38..40e017600d11 100644 --- a/src/wallet/scriptpubkeyman.cpp +++ b/src/wallet/scriptpubkeyman.cpp @@ -996,7 +996,7 @@ bool DescriptorScriptPubKeyMan::TopUp(unsigned int size) WalletBatch batch(m_storage.GetDatabase()); if (!batch.TxnBegin()) return false; bool res = TopUpWithDB(batch, size); - if (!batch.TxnCommit()) throw std::runtime_error(strprintf("Error during descriptors keypool top up. Cannot commit changes for wallet %s", m_storage.GetDisplayName())); + if (!batch.TxnCommit()) throw std::runtime_error(strprintf("Error during descriptors keypool top up. Cannot commit changes for wallet [%s]", m_storage.LogName())); return res; } diff --git a/src/wallet/scriptpubkeyman.h b/src/wallet/scriptpubkeyman.h index e41ab6d669dd..33c6ea3dcada 100644 --- a/src/wallet/scriptpubkeyman.h +++ b/src/wallet/scriptpubkeyman.h @@ -43,7 +43,7 @@ class WalletStorage { public: virtual ~WalletStorage() = default; - virtual std::string GetDisplayName() const = 0; + virtual std::string LogName() const = 0; virtual WalletDatabase& GetDatabase() const = 0; virtual bool IsWalletFlagSet(uint64_t) const = 0; virtual void UnsetBlankWalletFlag(WalletBatch&) = 0; @@ -162,7 +162,7 @@ class ScriptPubKeyMan template void WalletLogPrintf(util::ConstevalFormatString wallet_fmt, const Params&... params) const { - LogInfo("%s %s", m_storage.GetDisplayName(), tfm::format(wallet_fmt, params...)); + LogInfo("[%s] %s", m_storage.LogName(), tfm::format(wallet_fmt, params...)); }; /** Keypool has new keys */ diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index fa2833827c42..fc4c55fb7e9a 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -905,14 +905,14 @@ class CWallet final : public WalletStorage, public interfaces::Chain::Notificati /** Loads the flags into the wallet. (used by LoadWallet) */ bool LoadWalletFlags(uint64_t flags); - /** Returns a bracketed wallet name for displaying in logs, will return [default wallet] if the wallet has no name */ - std::string GetDisplayName() const override + /** Return wallet name for use in logs, will return "default wallet" if the wallet has no name. */ + std::string LogName() const override { - std::string wallet_name = GetName().length() == 0 ? "default wallet" : GetName(); - return strprintf("[%s]", wallet_name); + std::string name{GetName()}; + return name.empty() ? "default wallet" : name; }; - /** Return wallet name for display, translating "default wallet" string if returned. */ + /** Return wallet name for display, like LogName() but translates "default wallet" string. */ std::string DisplayName() const { std::string name{GetName()}; @@ -923,7 +923,7 @@ class CWallet final : public WalletStorage, public interfaces::Chain::Notificati template void WalletLogPrintf(util::ConstevalFormatString wallet_fmt, const Params&... params) const { - LogInfo("%s %s", GetDisplayName(), tfm::format(wallet_fmt, params...)); + LogInfo("[%s] %s", LogName(), tfm::format(wallet_fmt, params...)); }; /** Upgrade the wallet */ From e883b37768812d96feec207a37202c7d1b603c1f Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Fri, 15 Nov 2024 15:06:39 +0100 Subject: [PATCH 0023/2775] fuzz: set the output argument of FuzzedSock::Accept() `FuzzedSock::Accept()` properly returns a new socket, but it forgot to set the output argument `addr`, like `accept(2)` is expected to. This could lead to reading uninitialized data during testing when we read it, e.g. from `CService::SetSockAddr()` which reads the `sa_family` member. Set `addr` to a fuzzed IPv4 or IPv6 address. --- src/test/fuzz/util/net.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/test/fuzz/util/net.cpp b/src/test/fuzz/util/net.cpp index 8cbf6bdffec1..e49c043364e0 100644 --- a/src/test/fuzz/util/net.cpp +++ b/src/test/fuzz/util/net.cpp @@ -312,6 +312,33 @@ std::unique_ptr FuzzedSock::Accept(sockaddr* addr, socklen_t* addr_len) co SetFuzzedErrNo(m_fuzzed_data_provider, accept_errnos); return std::unique_ptr(); } + if (addr != nullptr) { + // Set a fuzzed address in the output argument addr. + memset(addr, 0x00, *addr_len); + if (m_fuzzed_data_provider.ConsumeBool()) { + // IPv4 + const socklen_t write_len = static_cast(sizeof(sockaddr_in)); + if (*addr_len >= write_len) { + *addr_len = write_len; + auto addr4 = reinterpret_cast(addr); + addr4->sin_family = AF_INET; + const auto sin_addr_bytes = m_fuzzed_data_provider.ConsumeBytes(sizeof(addr4->sin_addr)); + memcpy(&addr4->sin_addr, sin_addr_bytes.data(), sin_addr_bytes.size()); + addr4->sin_port = m_fuzzed_data_provider.ConsumeIntegralInRange(1, 65535); + } + } else { + // IPv6 + const socklen_t write_len = static_cast(sizeof(sockaddr_in6)); + if (*addr_len >= write_len) { + *addr_len = write_len; + auto addr6 = reinterpret_cast(addr); + addr6->sin6_family = AF_INET6; + const auto sin_addr_bytes = m_fuzzed_data_provider.ConsumeBytes(sizeof(addr6->sin6_addr)); + memcpy(&addr6->sin6_addr, sin_addr_bytes.data(), sin_addr_bytes.size()); + addr6->sin6_port = m_fuzzed_data_provider.ConsumeIntegralInRange(1, 65535); + } + } + } return std::make_unique(m_fuzzed_data_provider); } From e6a917c8f8e0f1a0fa71dc9bbb6e1074f81edea3 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Mon, 9 Jun 2025 13:29:19 +0200 Subject: [PATCH 0024/2775] fuzz: add Fuzzed NetEventsInterface and use it in connman tests --- src/test/fuzz/connman.cpp | 2 ++ src/test/fuzz/util/net.h | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/test/fuzz/connman.cpp b/src/test/fuzz/connman.cpp index a62d227da8ef..8513f07feadb 100644 --- a/src/test/fuzz/connman.cpp +++ b/src/test/fuzz/connman.cpp @@ -51,6 +51,7 @@ FUZZ_TARGET(connman, .init = initialize_connman) } } AddrManDeterministic& addr_man{*addr_man_ptr}; + auto net_events{ConsumeNetEvents(fuzzed_data_provider)}; ConnmanTestMsg connman{fuzzed_data_provider.ConsumeIntegral(), fuzzed_data_provider.ConsumeIntegral(), addr_man, @@ -60,6 +61,7 @@ FUZZ_TARGET(connman, .init = initialize_connman) const uint64_t max_outbound_limit{fuzzed_data_provider.ConsumeIntegral()}; CConnman::Options options; + options.m_msgproc = &net_events; options.nMaxOutboundLimit = max_outbound_limit; connman.Init(options); diff --git a/src/test/fuzz/util/net.h b/src/test/fuzz/util/net.h index 698001a7f15e..200638441eec 100644 --- a/src/test/fuzz/util/net.h +++ b/src/test/fuzz/util/net.h @@ -139,6 +139,25 @@ class AddrManDeterministic : public AddrMan } }; +class FuzzedNetEvents : public NetEventsInterface +{ +public: + FuzzedNetEvents(FuzzedDataProvider& fdp) : m_fdp(fdp) {} + + virtual void InitializeNode(const CNode&, ServiceFlags) override {} + + virtual void FinalizeNode(const CNode&) override {} + + virtual bool HasAllDesirableServiceFlags(ServiceFlags) const override { return m_fdp.ConsumeBool(); } + + virtual bool ProcessMessages(CNode*, std::atomic&) override { return m_fdp.ConsumeBool(); } + + virtual bool SendMessages(CNode*) override { return m_fdp.ConsumeBool(); } + +private: + FuzzedDataProvider& m_fdp; +}; + class FuzzedSock : public Sock { FuzzedDataProvider& m_fuzzed_data_provider; @@ -203,6 +222,11 @@ class FuzzedSock : public Sock bool IsConnected(std::string& errmsg) const override; }; +[[nodiscard]] inline FuzzedNetEvents ConsumeNetEvents(FuzzedDataProvider& fdp) noexcept +{ + return FuzzedNetEvents{fdp}; +} + [[nodiscard]] inline FuzzedSock ConsumeSock(FuzzedDataProvider& fuzzed_data_provider) { return FuzzedSock{fuzzed_data_provider}; From 50da7432ec1e5431b243aa30f8a9339f8e8ed97d Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Thu, 15 Apr 2021 10:40:45 +0200 Subject: [PATCH 0025/2775] fuzz: add CConnman::OpenNetworkConnection() to the tests Now that all network calls done by `CConnman::OpenNetworkConnection()` are done via `Sock` they can be redirected (mocked) to `FuzzedSocket` for testing. --- src/test/fuzz/connman.cpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/test/fuzz/connman.cpp b/src/test/fuzz/connman.cpp index 8513f07feadb..e65cf5ce58b9 100644 --- a/src/test/fuzz/connman.cpp +++ b/src/test/fuzz/connman.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -52,6 +53,19 @@ FUZZ_TARGET(connman, .init = initialize_connman) } AddrManDeterministic& addr_man{*addr_man_ptr}; auto net_events{ConsumeNetEvents(fuzzed_data_provider)}; + + // Mock CreateSock() to create FuzzedSock. + auto CreateSockOrig = CreateSock; + CreateSock = [&fuzzed_data_provider](int, int, int) { + return std::make_unique(fuzzed_data_provider); + }; + + // Mock g_dns_lookup() to return a fuzzed address. + auto g_dns_lookup_orig = g_dns_lookup; + g_dns_lookup = [&fuzzed_data_provider](const std::string&, bool) { + return std::vector{ConsumeNetAddr(fuzzed_data_provider)}; + }; + ConnmanTestMsg connman{fuzzed_data_provider.ConsumeIntegral(), fuzzed_data_provider.ConsumeIntegral(), addr_man, @@ -66,6 +80,7 @@ FUZZ_TARGET(connman, .init = initialize_connman) connman.Init(options); CNetAddr random_netaddr; + CAddress random_address; CNode random_node = ConsumeNode(fuzzed_data_provider); CSubNet random_subnet; std::string random_string; @@ -81,6 +96,9 @@ FUZZ_TARGET(connman, .init = initialize_connman) [&] { random_netaddr = ConsumeNetAddr(fuzzed_data_provider); }, + [&] { + random_address = ConsumeAddress(fuzzed_data_provider); + }, [&] { random_subnet = ConsumeSubNet(fuzzed_data_provider); }, @@ -145,6 +163,21 @@ FUZZ_TARGET(connman, .init = initialize_connman) }, [&] { connman.SetTryNewOutboundPeer(fuzzed_data_provider.ConsumeBool()); + }, + [&] { + ConnectionType conn_type{ + fuzzed_data_provider.PickValueInArray(ALL_CONNECTION_TYPES)}; + if (conn_type == ConnectionType::INBOUND) { // INBOUND is not allowed + conn_type = ConnectionType::OUTBOUND_FULL_RELAY; + } + + connman.OpenNetworkConnection( + /*addrConnect=*/random_address, + /*fCountFailure=*/fuzzed_data_provider.ConsumeBool(), + /*grant_outbound=*/{}, + /*strDest=*/fuzzed_data_provider.ConsumeBool() ? nullptr : random_string.c_str(), + /*conn_type=*/conn_type, + /*use_v2transport=*/fuzzed_data_provider.ConsumeBool()); }); } (void)connman.GetAddedNodeInfo(fuzzed_data_provider.ConsumeBool()); @@ -164,4 +197,6 @@ FUZZ_TARGET(connman, .init = initialize_connman) (void)connman.ASMapHealthCheck(); connman.ClearTestNodes(); + g_dns_lookup = g_dns_lookup_orig; + CreateSock = CreateSockOrig; } From 91cbf4dbd864b65ba6b107957f087d1d305914b2 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Thu, 15 Apr 2021 14:01:52 +0200 Subject: [PATCH 0026/2775] fuzz: add CConnman::CreateNodeFromAcceptedSocket() to the tests --- src/test/fuzz/connman.cpp | 9 +++++++++ src/test/util/net.h | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/src/test/fuzz/connman.cpp b/src/test/fuzz/connman.cpp index e65cf5ce58b9..ea7ad3c45742 100644 --- a/src/test/fuzz/connman.cpp +++ b/src/test/fuzz/connman.cpp @@ -178,6 +178,15 @@ FUZZ_TARGET(connman, .init = initialize_connman) /*strDest=*/fuzzed_data_provider.ConsumeBool() ? nullptr : random_string.c_str(), /*conn_type=*/conn_type, /*use_v2transport=*/fuzzed_data_provider.ConsumeBool()); + }, + [&] { + connman.SetNetworkActive(fuzzed_data_provider.ConsumeBool()); + const auto peer = ConsumeAddress(fuzzed_data_provider); + connman.CreateNodeFromAcceptedSocketPublic( + /*sock=*/CreateSock(AF_INET, SOCK_STREAM, IPPROTO_TCP), + /*permissions=*/ConsumeWeakEnum(fuzzed_data_provider, ALL_NET_PERMISSION_FLAGS), + /*addr_bind=*/ConsumeAddress(fuzzed_data_provider), + /*addr_peer=*/peer); }); } (void)connman.GetAddedNodeInfo(fuzzed_data_provider.ConsumeBool()); diff --git a/src/test/util/net.h b/src/test/util/net.h index 6bf2bf730075..19264ca5570b 100644 --- a/src/test/util/net.h +++ b/src/test/util/net.h @@ -68,6 +68,14 @@ struct ConnmanTestMsg : public CConnman { m_nodes.clear(); } + void CreateNodeFromAcceptedSocketPublic(std::unique_ptr sock, + NetPermissionFlags permissions, + const CAddress& addr_bind, + const CAddress& addr_peer) + { + CreateNodeFromAcceptedSocket(std::move(sock), permissions, addr_bind, addr_peer); + } + void Handshake(CNode& node, bool successfully_connected, ServiceFlags remote_services, From 3265df63a48db187e0d240ce801ee573787fed80 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Thu, 15 Apr 2021 16:51:00 +0200 Subject: [PATCH 0027/2775] fuzz: add CConnman::InitBinds() to the tests --- src/test/fuzz/connman.cpp | 19 +++++++++++++++++++ src/test/fuzz/util/net.h | 12 ++++++++++++ src/test/util/net.h | 5 +++++ 3 files changed, 36 insertions(+) diff --git a/src/test/fuzz/connman.cpp b/src/test/fuzz/connman.cpp index ea7ad3c45742..461362afe379 100644 --- a/src/test/fuzz/connman.cpp +++ b/src/test/fuzz/connman.cpp @@ -187,6 +187,25 @@ FUZZ_TARGET(connman, .init = initialize_connman) /*permissions=*/ConsumeWeakEnum(fuzzed_data_provider, ALL_NET_PERMISSION_FLAGS), /*addr_bind=*/ConsumeAddress(fuzzed_data_provider), /*addr_peer=*/peer); + }, + [&] { + CConnman::Options options; + + options.vBinds = ConsumeServiceVector(fuzzed_data_provider); + + options.vWhiteBinds = std::vector{ + fuzzed_data_provider.ConsumeIntegralInRange(0, 5)}; + for (auto& wb : options.vWhiteBinds) { + wb.m_flags = ConsumeWeakEnum(fuzzed_data_provider, ALL_NET_PERMISSION_FLAGS); + wb.m_service = ConsumeService(fuzzed_data_provider); + } + + options.onion_binds = ConsumeServiceVector(fuzzed_data_provider); + + options.bind_on_any = options.vBinds.empty() && options.vWhiteBinds.empty() && + options.onion_binds.empty(); + + connman.InitBindsPublic(options); }); } (void)connman.GetAddedNodeInfo(fuzzed_data_provider.ConsumeBool()); diff --git a/src/test/fuzz/util/net.h b/src/test/fuzz/util/net.h index 200638441eec..2756e49cba68 100644 --- a/src/test/fuzz/util/net.h +++ b/src/test/fuzz/util/net.h @@ -249,6 +249,18 @@ inline CService ConsumeService(FuzzedDataProvider& fuzzed_data_provider) noexcep return {ConsumeNetAddr(fuzzed_data_provider), fuzzed_data_provider.ConsumeIntegral()}; } +inline std::vector ConsumeServiceVector(FuzzedDataProvider& fuzzed_data_provider, + size_t max_vector_size = 5) noexcept +{ + std::vector ret; + const size_t size = fuzzed_data_provider.ConsumeIntegralInRange(0, max_vector_size); + ret.reserve(size); + for (size_t i = 0; i < size; ++i) { + ret.emplace_back(ConsumeService(fuzzed_data_provider)); + } + return ret; +} + CAddress ConsumeAddress(FuzzedDataProvider& fuzzed_data_provider) noexcept; template diff --git a/src/test/util/net.h b/src/test/util/net.h index 19264ca5570b..26e5c028d891 100644 --- a/src/test/util/net.h +++ b/src/test/util/net.h @@ -76,6 +76,11 @@ struct ConnmanTestMsg : public CConnman { CreateNodeFromAcceptedSocket(std::move(sock), permissions, addr_bind, addr_peer); } + bool InitBindsPublic(const CConnman::Options& options) + { + return InitBinds(options); + } + void Handshake(CNode& node, bool successfully_connected, ServiceFlags remote_services, From 6d9e5d130d2e1d052044e9a72d44cfffb5d3c771 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Fri, 30 Apr 2021 17:07:35 +0200 Subject: [PATCH 0028/2775] fuzz: add CConnman::SocketHandler() to the tests --- src/test/fuzz/connman.cpp | 3 +++ src/test/util/net.h | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/src/test/fuzz/connman.cpp b/src/test/fuzz/connman.cpp index 461362afe379..ddb56fd804cc 100644 --- a/src/test/fuzz/connman.cpp +++ b/src/test/fuzz/connman.cpp @@ -206,6 +206,9 @@ FUZZ_TARGET(connman, .init = initialize_connman) options.onion_binds.empty(); connman.InitBindsPublic(options); + }, + [&] { + connman.SocketHandlerPublic(); }); } (void)connman.GetAddedNodeInfo(fuzzed_data_provider.ConsumeBool()); diff --git a/src/test/util/net.h b/src/test/util/net.h index 26e5c028d891..66d209aed651 100644 --- a/src/test/util/net.h +++ b/src/test/util/net.h @@ -81,6 +81,11 @@ struct ConnmanTestMsg : public CConnman { return InitBinds(options); } + void SocketHandlerPublic() + { + SocketHandler(); + } + void Handshake(CNode& node, bool successfully_connected, ServiceFlags remote_services, From 0802398e749c5e16fa7085cd87c91a31bbe043bd Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Wed, 6 Nov 2024 11:12:35 +0100 Subject: [PATCH 0029/2775] fuzz: make it possible to mock (fuzz) CThreadInterrupt * Make the methods of `CThreadInterrupt` virtual and store a pointer to it in `CConnman`, thus making it possible to override with a mocked instance. * Initialize `CConnman::m_interrupt_net` from the constructor, making it possible for callers to supply mocked version. * Introduce `FuzzedThreadInterrupt` and `ConsumeThreadInterrupt()` and use them in `src/test/fuzz/connman.cpp` and `src/test/fuzz/i2p.cpp`. This improves the CPU utilization of the `connman` fuzz test. As a nice side effect, the `std::shared_ptr` used for `CConnman::m_interrupt_net` resolves the possible lifetime issues with it (see the removed comment for that variable). --- src/i2p.cpp | 8 +-- src/i2p.h | 14 ++---- src/net.cpp | 70 +++++++++++++++----------- src/net.h | 15 +++--- src/test/fuzz/connman.cpp | 4 +- src/test/fuzz/i2p.cpp | 9 ++-- src/test/fuzz/util/CMakeLists.txt | 1 + src/test/fuzz/util/threadinterrupt.cpp | 22 ++++++++ src/test/fuzz/util/threadinterrupt.h | 33 ++++++++++++ src/test/i2p_tests.cpp | 12 ++--- src/util/threadinterrupt.cpp | 7 ++- src/util/threadinterrupt.h | 24 +++++++-- 12 files changed, 154 insertions(+), 65 deletions(-) create mode 100644 src/test/fuzz/util/threadinterrupt.cpp create mode 100644 src/test/fuzz/util/threadinterrupt.h diff --git a/src/i2p.cpp b/src/i2p.cpp index 8b48615afebc..80f3bde4cf2e 100644 --- a/src/i2p.cpp +++ b/src/i2p.cpp @@ -119,7 +119,7 @@ namespace sam { Session::Session(const fs::path& private_key_file, const Proxy& control_host, - CThreadInterrupt* interrupt) + std::shared_ptr interrupt) : m_private_key_file{private_key_file}, m_control_host{control_host}, m_interrupt{interrupt}, @@ -127,7 +127,7 @@ Session::Session(const fs::path& private_key_file, { } -Session::Session(const Proxy& control_host, CThreadInterrupt* interrupt) +Session::Session(const Proxy& control_host, std::shared_ptr interrupt) : m_control_host{control_host}, m_interrupt{interrupt}, m_transient{true} @@ -162,7 +162,7 @@ bool Session::Accept(Connection& conn) std::string errmsg; bool disconnect{false}; - while (!*m_interrupt) { + while (!m_interrupt->interrupted()) { Sock::Event occurred; if (!conn.sock->Wait(MAX_WAIT_FOR_IO, Sock::RECV, &occurred)) { errmsg = "wait on socket failed"; @@ -205,7 +205,7 @@ bool Session::Accept(Connection& conn) return true; } - if (*m_interrupt) { + if (m_interrupt->interrupted()) { LogPrintLevel(BCLog::I2P, BCLog::Level::Debug, "Accept was interrupted\n"); } else { LogPrintLevel(BCLog::I2P, BCLog::Level::Debug, "Error accepting%s: %s\n", disconnect ? " (will close the session)" : "", errmsg); diff --git a/src/i2p.h b/src/i2p.h index 153263399df0..a41406f380fb 100644 --- a/src/i2p.h +++ b/src/i2p.h @@ -63,13 +63,11 @@ class Session * private key will be generated and saved into the file. * @param[in] control_host Location of the SAM proxy. * @param[in,out] interrupt If this is signaled then all operations are canceled as soon as - * possible and executing methods throw an exception. Notice: only a pointer to the - * `CThreadInterrupt` object is saved, so it must not be destroyed earlier than this - * `Session` object. + * possible and executing methods throw an exception. */ Session(const fs::path& private_key_file, const Proxy& control_host, - CThreadInterrupt* interrupt); + std::shared_ptr interrupt); /** * Construct a transient session which will generate its own I2P private key @@ -78,11 +76,9 @@ class Session * the session will be lazily created later when first used. * @param[in] control_host Location of the SAM proxy. * @param[in,out] interrupt If this is signaled then all operations are canceled as soon as - * possible and executing methods throw an exception. Notice: only a pointer to the - * `CThreadInterrupt` object is saved, so it must not be destroyed earlier than this - * `Session` object. + * possible and executing methods throw an exception. */ - Session(const Proxy& control_host, CThreadInterrupt* interrupt); + Session(const Proxy& control_host, std::shared_ptr interrupt); /** * Destroy the session, closing the internally used sockets. The sockets that have been @@ -235,7 +231,7 @@ class Session /** * Cease network activity when this is signaled. */ - CThreadInterrupt* const m_interrupt; + const std::shared_ptr m_interrupt; /** * Mutex protecting the members that can be concurrently accessed. diff --git a/src/net.cpp b/src/net.cpp index 217d9a890373..85c25543d38d 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -471,7 +471,7 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo LOCK(m_unused_i2p_sessions_mutex); if (m_unused_i2p_sessions.empty()) { i2p_transient_session = - std::make_unique(proxy, &interruptNet); + std::make_unique(proxy, m_interrupt_net); } else { i2p_transient_session.swap(m_unused_i2p_sessions.front()); m_unused_i2p_sessions.pop(); @@ -2094,7 +2094,7 @@ void CConnman::SocketHandler() // empty sets. events_per_sock = GenerateWaitSockets(snap.Nodes()); if (events_per_sock.empty() || !events_per_sock.begin()->first->WaitMany(timeout, events_per_sock)) { - interruptNet.sleep_for(timeout); + m_interrupt_net->sleep_for(timeout); } // Service (send/receive) each of the already connected nodes. @@ -2111,8 +2111,9 @@ void CConnman::SocketHandlerConnected(const std::vector& nodes, AssertLockNotHeld(m_total_bytes_sent_mutex); for (CNode* pnode : nodes) { - if (interruptNet) + if (m_interrupt_net->interrupted()) { return; + } // // Receive @@ -2207,7 +2208,7 @@ void CConnman::SocketHandlerConnected(const std::vector& nodes, void CConnman::SocketHandlerListening(const Sock::EventsPerSock& events_per_sock) { for (const ListenSocket& listen_socket : vhListenSocket) { - if (interruptNet) { + if (m_interrupt_net->interrupted()) { return; } const auto it = events_per_sock.find(listen_socket.sock); @@ -2221,8 +2222,7 @@ void CConnman::ThreadSocketHandler() { AssertLockNotHeld(m_total_bytes_sent_mutex); - while (!interruptNet) - { + while (!m_interrupt_net->interrupted()) { DisconnectNodes(); NotifyNumConnectionsChanged(); SocketHandler(); @@ -2246,9 +2246,10 @@ void CConnman::ThreadDNSAddressSeed() auto start = NodeClock::now(); constexpr std::chrono::seconds SEEDNODE_TIMEOUT = 30s; LogPrintf("-seednode enabled. Trying the provided seeds for %d seconds before defaulting to the dnsseeds.\n", SEEDNODE_TIMEOUT.count()); - while (!interruptNet) { - if (!interruptNet.sleep_for(std::chrono::milliseconds(500))) + while (!m_interrupt_net->interrupted()) { + if (!m_interrupt_net->sleep_for(500ms)) { return; + } // Abort if we have spent enough time without reaching our target. // Giving seed nodes 30 seconds so this does not become a race against fixedseeds (which triggers after 1 min) @@ -2309,7 +2310,7 @@ void CConnman::ThreadDNSAddressSeed() // early to see if we have enough peers and can stop // this thread entirely freeing up its resources std::chrono::seconds w = std::min(DNSSEEDS_DELAY_FEW_PEERS, to_wait); - if (!interruptNet.sleep_for(w)) return; + if (!m_interrupt_net->sleep_for(w)) return; to_wait -= w; if (GetFullOutboundConnCount() >= SEED_OUTBOUND_CONNECTION_THRESHOLD) { @@ -2325,13 +2326,13 @@ void CConnman::ThreadDNSAddressSeed() } } - if (interruptNet) return; + if (m_interrupt_net->interrupted()) return; // hold off on querying seeds if P2P network deactivated if (!fNetworkActive) { LogPrintf("Waiting for network to be reactivated before querying DNS seeds.\n"); do { - if (!interruptNet.sleep_for(std::chrono::seconds{1})) return; + if (!m_interrupt_net->sleep_for(1s)) return; } while (!fNetworkActive); } @@ -2526,12 +2527,14 @@ void CConnman::ThreadOpenConnections(const std::vector connect, std OpenNetworkConnection(addr, false, {}, strAddr.c_str(), ConnectionType::MANUAL, /*use_v2transport=*/use_v2transport); for (int i = 0; i < 10 && i < nLoop; i++) { - if (!interruptNet.sleep_for(std::chrono::milliseconds(500))) + if (!m_interrupt_net->sleep_for(500ms)) { return; + } } } - if (!interruptNet.sleep_for(std::chrono::milliseconds(500))) + if (!m_interrupt_net->sleep_for(500ms)) { return; + } PerformReconnections(); } } @@ -2555,8 +2558,7 @@ void CConnman::ThreadOpenConnections(const std::vector connect, std LogPrintf("Fixed seeds are disabled\n"); } - while (!interruptNet) - { + while (!m_interrupt_net->interrupted()) { if (add_addr_fetch) { add_addr_fetch = false; const auto& seed{SpanPopBack(seed_nodes)}; @@ -2571,14 +2573,16 @@ void CConnman::ThreadOpenConnections(const std::vector connect, std ProcessAddrFetch(); - if (!interruptNet.sleep_for(std::chrono::milliseconds(500))) + if (!m_interrupt_net->sleep_for(500ms)) { return; + } PerformReconnections(); CountingSemaphoreGrant<> grant(*semOutbound); - if (interruptNet) + if (m_interrupt_net->interrupted()) { return; + } const std::unordered_set fixed_seed_networks{GetReachableEmptyNetworks()}; if (add_fixed_seeds && !fixed_seed_networks.empty()) { @@ -2752,8 +2756,7 @@ void CConnman::ThreadOpenConnections(const std::vector connect, std int nTries = 0; const auto reachable_nets{g_reachable_nets.All()}; - while (!interruptNet) - { + while (!m_interrupt_net->interrupted()) { if (anchor && !m_anchors.empty()) { const CAddress addr = m_anchors.back(); m_anchors.pop_back(); @@ -2855,7 +2858,7 @@ void CConnman::ThreadOpenConnections(const std::vector connect, std if (addrConnect.IsValid()) { if (fFeeler) { // Add small amount of random noise before connection to avoid synchronization. - if (!interruptNet.sleep_for(rng.rand_uniform_duration(FEELER_SLEEP_WINDOW))) { + if (!m_interrupt_net->sleep_for(rng.rand_uniform_duration(FEELER_SLEEP_WINDOW))) { return; } LogDebug(BCLog::NET, "Making feeler connection to %s\n", addrConnect.ToStringAddrPort()); @@ -2966,14 +2969,15 @@ void CConnman::ThreadOpenAddedConnections() tried = true; CAddress addr(CService(), NODE_NONE); OpenNetworkConnection(addr, false, std::move(grant), info.m_params.m_added_node.c_str(), ConnectionType::MANUAL, info.m_params.m_use_v2transport); - if (!interruptNet.sleep_for(std::chrono::milliseconds(500))) return; + if (!m_interrupt_net->sleep_for(500ms)) return; grant = CountingSemaphoreGrant<>(*semAddnode, /*fTry=*/true); } // See if any reconnections are desired. PerformReconnections(); // Retry every 60 seconds if a connection was attempted, otherwise two seconds - if (!interruptNet.sleep_for(std::chrono::seconds(tried ? 60 : 2))) + if (!m_interrupt_net->sleep_for(tried ? 60s : 2s)) { return; + } } } @@ -2986,7 +2990,7 @@ void CConnman::OpenNetworkConnection(const CAddress& addrConnect, bool fCountFai // // Initiate outbound network connection // - if (interruptNet) { + if (m_interrupt_net->interrupted()) { return; } if (!fNetworkActive) { @@ -3074,13 +3078,13 @@ void CConnman::ThreadI2PAcceptIncoming() i2p::Connection conn; auto SleepOnFailure = [&]() { - interruptNet.sleep_for(err_wait); + m_interrupt_net->sleep_for(err_wait); if (err_wait < err_wait_cap) { err_wait += 1s; } }; - while (!interruptNet) { + while (!m_interrupt_net->interrupted()) { if (!m_i2p_sam_session->Listen(conn)) { if (advertising_listen_addr && conn.me.IsValid()) { @@ -3202,12 +3206,18 @@ void CConnman::SetNetworkActive(bool active) } } -CConnman::CConnman(uint64_t nSeed0In, uint64_t nSeed1In, AddrMan& addrman_in, - const NetGroupManager& netgroupman, const CChainParams& params, bool network_active) +CConnman::CConnman(uint64_t nSeed0In, + uint64_t nSeed1In, + AddrMan& addrman_in, + const NetGroupManager& netgroupman, + const CChainParams& params, + bool network_active, + std::shared_ptr interrupt_net) : addrman(addrman_in) , m_netgroupman{netgroupman} , nSeed0(nSeed0In) , nSeed1(nSeed1In) + , m_interrupt_net{interrupt_net} , m_params(params) { SetTryNewOutboundPeer(false); @@ -3303,7 +3313,7 @@ bool CConnman::Start(CScheduler& scheduler, const Options& connOptions) Proxy i2p_sam; if (GetProxy(NET_I2P, i2p_sam) && connOptions.m_i2p_accept_incoming) { m_i2p_sam_session = std::make_unique(gArgs.GetDataDirNet() / "i2p_private_key", - i2p_sam, &interruptNet); + i2p_sam, m_interrupt_net); } // Randomize the order in which we may query seednode to potentially prevent connecting to the same one every restart (and signal that we have restarted) @@ -3340,7 +3350,7 @@ bool CConnman::Start(CScheduler& scheduler, const Options& connOptions) // Start threads // assert(m_msgproc); - interruptNet.reset(); + m_interrupt_net->reset(); flagInterruptMsgProc = false; { @@ -3416,7 +3426,7 @@ void CConnman::Interrupt() } condMsgProc.notify_all(); - interruptNet(); + (*m_interrupt_net)(); g_socks5_interrupt(); if (semOutbound) { diff --git a/src/net.h b/src/net.h index 4cb4cb906e2a..66a830da905e 100644 --- a/src/net.h +++ b/src/net.h @@ -1118,8 +1118,13 @@ class CConnman whitelist_relay = connOptions.whitelist_relay; } - CConnman(uint64_t seed0, uint64_t seed1, AddrMan& addrman, const NetGroupManager& netgroupman, - const CChainParams& params, bool network_active = true); + CConnman(uint64_t seed0, + uint64_t seed1, + AddrMan& addrman, + const NetGroupManager& netgroupman, + const CChainParams& params, + bool network_active = true, + std::shared_ptr interrupt_net = std::make_shared()); ~CConnman(); @@ -1543,11 +1548,9 @@ class CConnman /** * This is signaled when network activity should cease. - * A pointer to it is saved in `m_i2p_sam_session`, so make sure that - * the lifetime of `interruptNet` is not shorter than - * the lifetime of `m_i2p_sam_session`. + * A copy of this is saved in `m_i2p_sam_session`. */ - CThreadInterrupt interruptNet; + const std::shared_ptr m_interrupt_net; /** * I2P SAM session. diff --git a/src/test/fuzz/connman.cpp b/src/test/fuzz/connman.cpp index ddb56fd804cc..56034185b364 100644 --- a/src/test/fuzz/connman.cpp +++ b/src/test/fuzz/connman.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -71,7 +72,8 @@ FUZZ_TARGET(connman, .init = initialize_connman) addr_man, netgroupman, Params(), - fuzzed_data_provider.ConsumeBool()}; + fuzzed_data_provider.ConsumeBool(), + ConsumeThreadInterrupt(fuzzed_data_provider)}; const uint64_t max_outbound_limit{fuzzed_data_provider.ConsumeIntegral()}; CConnman::Options options; diff --git a/src/test/fuzz/i2p.cpp b/src/test/fuzz/i2p.cpp index 29a11123d9a2..64f30719c582 100644 --- a/src/test/fuzz/i2p.cpp +++ b/src/test/fuzz/i2p.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -35,15 +36,15 @@ FUZZ_TARGET(i2p, .init = initialize_i2p) const fs::path private_key_path = gArgs.GetDataDirNet() / "fuzzed_i2p_private_key"; const CService addr{in6_addr(IN6ADDR_LOOPBACK_INIT), 7656}; const Proxy sam_proxy{addr, /*tor_stream_isolation=*/false}; - CThreadInterrupt interrupt; + auto interrupt{ConsumeThreadInterrupt(fuzzed_data_provider)}; - i2p::sam::Session session{private_key_path, sam_proxy, &interrupt}; + i2p::sam::Session session{private_key_path, sam_proxy, interrupt}; i2p::Connection conn; if (session.Listen(conn)) { if (session.Accept(conn)) { try { - (void)conn.sock->RecvUntilTerminator('\n', 10ms, interrupt, i2p::sam::MAX_MSG_SIZE); + (void)conn.sock->RecvUntilTerminator('\n', 10ms, *interrupt, i2p::sam::MAX_MSG_SIZE); } catch (const std::runtime_error&) { } } @@ -53,7 +54,7 @@ FUZZ_TARGET(i2p, .init = initialize_i2p) if (session.Connect(CService{}, conn, proxy_error)) { try { - conn.sock->SendComplete("verack\n", 10ms, interrupt); + conn.sock->SendComplete("verack\n", 10ms, *interrupt); } catch (const std::runtime_error&) { } } diff --git a/src/test/fuzz/util/CMakeLists.txt b/src/test/fuzz/util/CMakeLists.txt index 878286b0f44f..282de3d708f0 100644 --- a/src/test/fuzz/util/CMakeLists.txt +++ b/src/test/fuzz/util/CMakeLists.txt @@ -7,6 +7,7 @@ add_library(test_fuzz STATIC EXCLUDE_FROM_ALL descriptor.cpp mempool.cpp net.cpp + threadinterrupt.cpp ../fuzz.cpp ../util.cpp ) diff --git a/src/test/fuzz/util/threadinterrupt.cpp b/src/test/fuzz/util/threadinterrupt.cpp new file mode 100644 index 000000000000..5dd87e05888e --- /dev/null +++ b/src/test/fuzz/util/threadinterrupt.cpp @@ -0,0 +1,22 @@ +// Copyright (c) 2024-present 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 +#include + +FuzzedThreadInterrupt::FuzzedThreadInterrupt(FuzzedDataProvider& fuzzed_data_provider) + : m_fuzzed_data_provider{fuzzed_data_provider} +{ +} + +bool FuzzedThreadInterrupt::interrupted() const +{ + return m_fuzzed_data_provider.ConsumeBool(); +} + +bool FuzzedThreadInterrupt::sleep_for(Clock::duration) +{ + SetMockTime(ConsumeTime(m_fuzzed_data_provider)); // Time could go backwards. + return m_fuzzed_data_provider.ConsumeBool(); +} diff --git a/src/test/fuzz/util/threadinterrupt.h b/src/test/fuzz/util/threadinterrupt.h new file mode 100644 index 000000000000..d56aefd919fc --- /dev/null +++ b/src/test/fuzz/util/threadinterrupt.h @@ -0,0 +1,33 @@ +// Copyright (c) 2024-present 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_TEST_FUZZ_UTIL_THREADINTERRUPT_H +#define BITCOIN_TEST_FUZZ_UTIL_THREADINTERRUPT_H + +#include +#include + +#include + +/** + * Mocked CThreadInterrupt that returns "randomly" whether it is interrupted and never sleeps. + */ +class FuzzedThreadInterrupt : public CThreadInterrupt +{ +public: + explicit FuzzedThreadInterrupt(FuzzedDataProvider& fuzzed_data_provider); + + virtual bool interrupted() const override; + virtual bool sleep_for(Clock::duration) override; + +private: + FuzzedDataProvider& m_fuzzed_data_provider; +}; + +[[nodiscard]] inline std::shared_ptr ConsumeThreadInterrupt(FuzzedDataProvider& fuzzed_data_provider) +{ + return std::make_shared(fuzzed_data_provider); +} + +#endif // BITCOIN_TEST_FUZZ_UTIL_THREADINTERRUPT_H diff --git a/src/test/i2p_tests.cpp b/src/test/i2p_tests.cpp index bdb3408b66cf..da9cbb5d228b 100644 --- a/src/test/i2p_tests.cpp +++ b/src/test/i2p_tests.cpp @@ -50,10 +50,10 @@ BOOST_AUTO_TEST_CASE(unlimited_recv) return std::make_unique(std::string(i2p::sam::MAX_MSG_SIZE + 1, 'a')); }; - CThreadInterrupt interrupt; + auto interrupt{std::make_shared()}; const std::optional addr{Lookup("127.0.0.1", 9000, false)}; const Proxy sam_proxy(addr.value(), /*tor_stream_isolation=*/false); - i2p::sam::Session session(gArgs.GetDataDirNet() / "test_i2p_private_key", sam_proxy, &interrupt); + i2p::sam::Session session(gArgs.GetDataDirNet() / "test_i2p_private_key", sam_proxy, interrupt); { ASSERT_DEBUG_LOG("Creating persistent SAM session"); @@ -112,12 +112,12 @@ BOOST_AUTO_TEST_CASE(listen_ok_accept_fail) // clang-format on }; - CThreadInterrupt interrupt; + auto interrupt{std::make_shared()}; const CService addr{in6_addr(IN6ADDR_LOOPBACK_INIT), /*port=*/7656}; const Proxy sam_proxy(addr, /*tor_stream_isolation=*/false); i2p::sam::Session session(gArgs.GetDataDirNet() / "test_i2p_private_key", sam_proxy, - &interrupt); + interrupt); i2p::Connection conn; for (size_t i = 0; i < 5; ++i) { @@ -155,10 +155,10 @@ BOOST_AUTO_TEST_CASE(damaged_private_key) "391 bytes"}}) { BOOST_REQUIRE(WriteBinaryFile(i2p_private_key_file, file_contents)); - CThreadInterrupt interrupt; + auto interrupt{std::make_shared()}; const CService addr{in6_addr(IN6ADDR_LOOPBACK_INIT), /*port=*/7656}; const Proxy sam_proxy{addr, /*tor_stream_isolation=*/false}; - i2p::sam::Session session(i2p_private_key_file, sam_proxy, &interrupt); + i2p::sam::Session session(i2p_private_key_file, sam_proxy, interrupt); { ASSERT_DEBUG_LOG("Creating persistent SAM session"); diff --git a/src/util/threadinterrupt.cpp b/src/util/threadinterrupt.cpp index 3ea406d4a8ef..aaa9e831a912 100644 --- a/src/util/threadinterrupt.cpp +++ b/src/util/threadinterrupt.cpp @@ -9,11 +9,16 @@ CThreadInterrupt::CThreadInterrupt() : flag(false) {} -CThreadInterrupt::operator bool() const +bool CThreadInterrupt::interrupted() const { return flag.load(std::memory_order_acquire); } +CThreadInterrupt::operator bool() const +{ + return interrupted(); +} + void CThreadInterrupt::reset() { flag.store(false, std::memory_order_release); diff --git a/src/util/threadinterrupt.h b/src/util/threadinterrupt.h index 0b79b3827632..8b393c26dfce 100644 --- a/src/util/threadinterrupt.h +++ b/src/util/threadinterrupt.h @@ -27,11 +27,27 @@ class CThreadInterrupt { public: using Clock = std::chrono::steady_clock; + CThreadInterrupt(); - explicit operator bool() const; - void operator()() EXCLUSIVE_LOCKS_REQUIRED(!mut); - void reset(); - bool sleep_for(Clock::duration rel_time) EXCLUSIVE_LOCKS_REQUIRED(!mut); + + virtual ~CThreadInterrupt() = default; + + /// Return true if `operator()()` has been called. + virtual bool interrupted() const; + + /// An alias for `interrupted()`. + virtual explicit operator bool() const; + + /// Interrupt any sleeps. After this `interrupted()` will return `true`. + virtual void operator()() EXCLUSIVE_LOCKS_REQUIRED(!mut); + + /// Reset to an non-interrupted state. + virtual void reset(); + + /// Sleep for the given duration. + /// @retval true The time passed. + /// @retval false The sleep was interrupted. + virtual bool sleep_for(Clock::duration rel_time) EXCLUSIVE_LOCKS_REQUIRED(!mut); private: std::condition_variable cond; From f5cf0b1ccc8fd426135809a8a4becdae2d797bb5 Mon Sep 17 00:00:00 2001 From: Ryan Ofsky Date: Thu, 3 Jul 2025 17:03:00 -0400 Subject: [PATCH 0030/2775] bitcoin wrapper: improve help output Try to make extra commands more obvious based on a suggestion from Sjors: https://github.com/bitcoin/bitcoin/pull/31679#issuecomment-2922787970i When `bitcoin` is invoked with no arguments, still show short help output, but now explicitly state that more commands are available and `bitcoin help` will list them. Also: - Get rid of -a/--all option. Just show all commands when `bitcoin help` or `bitcoin --help` is used. It maybe a helpful to add an option like this if more commands are added in the future, but right now there are not very many. - Just show name of executable, not full path of executable in help output. This can be a little easier to read if the path is long. --- src/bitcoin.cpp | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/bitcoin.cpp b/src/bitcoin.cpp index 657765139416..c32782741533 100644 --- a/src/bitcoin.cpp +++ b/src/bitcoin.cpp @@ -23,7 +23,7 @@ static constexpr auto HELP_USAGE = R"(Usage: %s [OPTIONS] COMMAND... -m, --multiprocess Run multiprocess binaries bitcoin-node, bitcoin-gui. -M, --monolithic Run monolithic binaries bitcoind, bitcoin-qt. (Default behavior) -v, --version Show version information - -h, --help Show this help message + -h, --help Show full help message Commands: gui [ARGS] Start GUI, equivalent to running 'bitcoin-qt [ARGS]' or 'bitcoin-gui [ARGS]'. @@ -31,10 +31,10 @@ static constexpr auto HELP_USAGE = R"(Usage: %s [OPTIONS] COMMAND... rpc [ARGS] Call RPC method, equivalent to running 'bitcoin-cli -named [ARGS]'. wallet [ARGS] Call wallet command, equivalent to running 'bitcoin-wallet [ARGS]'. tx [ARGS] Manipulate hex-encoded transactions, equivalent to running 'bitcoin-tx [ARGS]'. - help [-a] Show this help message. Include -a or --all to show additional commands. + help Show full help message. )"; -static constexpr auto HELP_EXTRA = R"( +static constexpr auto HELP_FULL = R"( Additional less commonly used commands: bench [ARGS] Run bench command, equivalent to running 'bench_bitcoin [ARGS]'. chainstate [ARGS] Run bitcoin kernel chainstate util, equivalent to running 'bitcoin-chainstate [ARGS]'. @@ -42,11 +42,14 @@ Additional less commonly used commands: test-gui [ARGS] Run GUI unit tests, equivalent to running 'test_bitcoin-qt [ARGS]'. )"; +static constexpr auto HELP_SHORT = R"( +Run '%s help' to see additional commands (e.g. for testing and debugging). +)"; + struct CommandLine { bool use_multiprocess{false}; bool show_version{false}; bool show_help{false}; - bool show_help_all{false}; std::string_view command; std::vector args; }; @@ -63,11 +66,17 @@ int main(int argc, char* argv[]) return EXIT_SUCCESS; } + std::string exe_name{fs::PathToString(fs::PathFromString(argv[0]).filename())}; std::vector args; if (cmd.show_help || cmd.command.empty()) { - tfm::format(std::cout, HELP_USAGE, argv[0]); - if (cmd.show_help_all) tfm::format(std::cout, HELP_EXTRA); - return cmd.show_help ? EXIT_SUCCESS : EXIT_FAILURE; + tfm::format(std::cout, HELP_USAGE, exe_name); + if (cmd.show_help) { + tfm::format(std::cout, HELP_FULL); + return EXIT_SUCCESS; + } else { + tfm::format(std::cout, HELP_SHORT, exe_name); + return EXIT_FAILURE; + } } else if (cmd.command == "gui") { args.emplace_back(cmd.use_multiprocess ? "bitcoin-gui" : "bitcoin-qt"); } else if (cmd.command == "node") { @@ -125,8 +134,6 @@ CommandLine ParseCommandLine(int argc, char* argv[]) cmd.show_version = true; } else if (arg == "-h" || arg == "--help" || arg == "help") { cmd.show_help = true; - } else if (cmd.show_help && (arg == "-a" || arg == "--all")) { - cmd.show_help_all = true; } else if (arg.starts_with("-")) { throw std::runtime_error(strprintf("Unknown option: %s", arg)); } else if (!arg.empty()) { From f49840dd902cd9b14b6aadb431b16a4aeb719c3f Mon Sep 17 00:00:00 2001 From: Ryan Ofsky Date: Fri, 4 Jul 2025 11:06:30 -0400 Subject: [PATCH 0031/2775] doc: Fix typo in files.md Suggested by l0rinc https://github.com/bitcoin/bitcoin/pull/31679#discussion_r2185083314 --- doc/files.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/files.md b/doc/files.md index 6d2faa4c8f22..90d804471e10 100644 --- a/doc/files.md +++ b/doc/files.md @@ -83,7 +83,7 @@ Wallets are SQLite databases. 3. A wallet database path can be specified with the `-wallet` option. -4. `wallet.dat` files must not be shared across different node instances, as that can result in key-reuse and double-spends due the lack of synchronization between instances. +4. `wallet.dat` files must not be shared across different node instances, as that can result in key-reuse and double-spends due to the lack of synchronization between instances. 5. Any copy or backup of the wallet should be done through a `backupwallet` call in order to update and lock the wallet, preventing any file corruption caused by updates during the copy. From d3b8a54a81209420ef6447dd4581e1b6b8550647 Mon Sep 17 00:00:00 2001 From: Pol Espinasa Date: Sat, 17 May 2025 17:58:42 +0200 Subject: [PATCH 0032/2775] Refactor CFeeRate to use FeeFrac internally Co-authored-by: Abubakar Sadiq Ismail <48946461+ismaelsadeeq@users.noreply.github.com> --- src/policy/feerate.cpp | 35 +++++++---------- src/policy/feerate.h | 52 +++++++++++++++----------- src/test/amount_tests.cpp | 17 +++++---- src/test/fuzz/fee_rate.cpp | 4 +- src/test/fuzz/feefrac.cpp | 2 +- src/test/fuzz/fees.cpp | 2 +- src/validation.cpp | 6 +-- src/wallet/fees.cpp | 6 +-- src/wallet/fees.h | 2 +- src/wallet/test/coinselector_tests.cpp | 2 +- src/wallet/test/fuzz/fees.cpp | 3 +- 11 files changed, 66 insertions(+), 65 deletions(-) diff --git a/src/policy/feerate.cpp b/src/policy/feerate.cpp index eb0cba5c67a4..f74da8a7e228 100644 --- a/src/policy/feerate.cpp +++ b/src/policy/feerate.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2022 The Bitcoin Core developers +// Copyright (c) 2009-present The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -7,39 +7,30 @@ #include #include -#include -CFeeRate::CFeeRate(const CAmount& nFeePaid, uint32_t num_bytes) +CFeeRate::CFeeRate(const CAmount& nFeePaid, int32_t virtual_bytes) { - const int64_t nSize{num_bytes}; - - if (nSize > 0) { - nSatoshisPerK = nFeePaid * 1000 / nSize; + if (virtual_bytes > 0) { + m_feerate = FeePerVSize(nFeePaid, virtual_bytes); } else { - nSatoshisPerK = 0; + m_feerate = FeePerVSize(); } } -CAmount CFeeRate::GetFee(uint32_t num_bytes) const +CAmount CFeeRate::GetFee(int32_t virtual_bytes) const { - const int64_t nSize{num_bytes}; - - // Be explicit that we're converting from a double to int64_t (CAmount) here. - // We've previously had issues with the silent double->int64_t conversion. - CAmount nFee{static_cast(std::ceil(nSatoshisPerK * nSize / 1000.0))}; - - if (nFee == 0 && nSize != 0) { - if (nSatoshisPerK > 0) nFee = CAmount(1); - if (nSatoshisPerK < 0) nFee = CAmount(-1); - } - + Assume(virtual_bytes >= 0); + if (m_feerate.IsEmpty()) { return CAmount(0);} + CAmount nFee = CAmount(m_feerate.EvaluateFeeUp(virtual_bytes)); + if (nFee == 0 && virtual_bytes != 0 && m_feerate.fee < 0) return CAmount(-1); return nFee; } std::string CFeeRate::ToString(const FeeEstimateMode& fee_estimate_mode) const { + const CAmount feerate_per_kvb = GetFeePerK(); switch (fee_estimate_mode) { - case FeeEstimateMode::SAT_VB: return strprintf("%d.%03d %s/vB", nSatoshisPerK / 1000, nSatoshisPerK % 1000, CURRENCY_ATOM); - default: return strprintf("%d.%08d %s/kvB", nSatoshisPerK / COIN, nSatoshisPerK % COIN, CURRENCY_UNIT); + case FeeEstimateMode::SAT_VB: return strprintf("%d.%03d %s/vB", feerate_per_kvb / 1000, feerate_per_kvb % 1000, CURRENCY_ATOM); + default: return strprintf("%d.%08d %s/kvB", feerate_per_kvb / COIN, feerate_per_kvb % COIN, CURRENCY_UNIT); } } diff --git a/src/policy/feerate.h b/src/policy/feerate.h index d742a43acc70..69d33e3a2960 100644 --- a/src/policy/feerate.h +++ b/src/policy/feerate.h @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2022 The Bitcoin Core developers +// Copyright (c) 2009-present The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -8,6 +8,7 @@ #include #include +#include #include @@ -27,52 +28,59 @@ enum class FeeEstimateMode { }; /** - * Fee rate in satoshis per kilovirtualbyte: CAmount / kvB + * Fee rate in satoshis per virtualbyte: CAmount / vB + * the feerate is represented internally as FeeFrac */ class CFeeRate { private: - /** Fee rate in sat/kvB (satoshis per 1000 virtualbytes) */ - CAmount nSatoshisPerK; + /** Fee rate in sats/vB (satoshis per N virtualbytes) */ + FeePerVSize m_feerate; public: - /** Fee rate of 0 satoshis per kvB */ - CFeeRate() : nSatoshisPerK(0) { } + /** Fee rate of 0 satoshis per 0 vB */ + CFeeRate() = default; template // Disallow silent float -> int conversion - explicit CFeeRate(const I _nSatoshisPerK): nSatoshisPerK(_nSatoshisPerK) { - } + explicit CFeeRate(const I m_feerate_kvb) : m_feerate(FeePerVSize(m_feerate_kvb, 1000)) {} /** * Construct a fee rate from a fee in satoshis and a vsize in vB. * * param@[in] nFeePaid The fee paid by a transaction, in satoshis - * param@[in] num_bytes The vsize of a transaction, in vbytes + * param@[in] virtual_bytes The vsize of a transaction, in vbytes + * + * Passing any virtual_bytes less than or equal to 0 will result in 0 fee rate per 0 size. */ - CFeeRate(const CAmount& nFeePaid, uint32_t num_bytes); + CFeeRate(const CAmount& nFeePaid, int32_t virtual_bytes); /** * Return the fee in satoshis for the given vsize in vbytes. * If the calculated fee would have fractional satoshis, then the * returned fee will always be rounded up to the nearest satoshi. */ - CAmount GetFee(uint32_t num_bytes) const; + CAmount GetFee(int32_t virtual_bytes) const; /** * Return the fee in satoshis for a vsize of 1000 vbytes */ - CAmount GetFeePerK() const { return nSatoshisPerK; } - friend bool operator<(const CFeeRate& a, const CFeeRate& b) { return a.nSatoshisPerK < b.nSatoshisPerK; } - friend bool operator>(const CFeeRate& a, const CFeeRate& b) { return a.nSatoshisPerK > b.nSatoshisPerK; } - friend bool operator==(const CFeeRate& a, const CFeeRate& b) { return a.nSatoshisPerK == b.nSatoshisPerK; } - friend bool operator<=(const CFeeRate& a, const CFeeRate& b) { return a.nSatoshisPerK <= b.nSatoshisPerK; } - friend bool operator>=(const CFeeRate& a, const CFeeRate& b) { return a.nSatoshisPerK >= b.nSatoshisPerK; } - friend bool operator!=(const CFeeRate& a, const CFeeRate& b) { return a.nSatoshisPerK != b.nSatoshisPerK; } - CFeeRate& operator+=(const CFeeRate& a) { nSatoshisPerK += a.nSatoshisPerK; return *this; } + CAmount GetFeePerK() const { return CAmount(m_feerate.EvaluateFeeDown(1000)); } + friend std::weak_ordering operator<=>(const CFeeRate& a, const CFeeRate& b) noexcept + { + return FeeRateCompare(a.m_feerate, b.m_feerate); + } + friend bool operator==(const CFeeRate& a, const CFeeRate& b) noexcept + { + return FeeRateCompare(a.m_feerate, b.m_feerate) == std::weak_ordering::equivalent; + } + CFeeRate& operator+=(const CFeeRate& a) { + m_feerate = FeePerVSize(GetFeePerK() + a.GetFeePerK(), 1000); + return *this; + } std::string ToString(const FeeEstimateMode& fee_estimate_mode = FeeEstimateMode::BTC_KVB) const; - friend CFeeRate operator*(const CFeeRate& f, int a) { return CFeeRate(a * f.nSatoshisPerK); } - friend CFeeRate operator*(int a, const CFeeRate& f) { return CFeeRate(a * f.nSatoshisPerK); } + friend CFeeRate operator*(const CFeeRate& f, int a) { return CFeeRate(a * f.m_feerate.fee, f.m_feerate.size); } + friend CFeeRate operator*(int a, const CFeeRate& f) { return CFeeRate(a * f.m_feerate.fee, f.m_feerate.size); } - SERIALIZE_METHODS(CFeeRate, obj) { READWRITE(obj.nSatoshisPerK); } + SERIALIZE_METHODS(CFeeRate, obj) { READWRITE(obj.m_feerate.fee, obj.m_feerate.size); } }; #endif // BITCOIN_POLICY_FEERATE_H diff --git a/src/test/amount_tests.cpp b/src/test/amount_tests.cpp index e5ab1cfb9024..b500c9686d75 100644 --- a/src/test/amount_tests.cpp +++ b/src/test/amount_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2016-2021 The Bitcoin Core developers +// Copyright (c) 2016-present The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -73,18 +73,21 @@ BOOST_AUTO_TEST_CASE(GetFeeTest) BOOST_CHECK(CFeeRate(CAmount(-1), 0) == CFeeRate(0)); BOOST_CHECK(CFeeRate(CAmount(0), 0) == CFeeRate(0)); BOOST_CHECK(CFeeRate(CAmount(1), 0) == CFeeRate(0)); + BOOST_CHECK(CFeeRate(CAmount(1), -1000) == CFeeRate(0)); // default value BOOST_CHECK(CFeeRate(CAmount(-1), 1000) == CFeeRate(-1)); BOOST_CHECK(CFeeRate(CAmount(0), 1000) == CFeeRate(0)); BOOST_CHECK(CFeeRate(CAmount(1), 1000) == CFeeRate(1)); - // lost precision (can only resolve satoshis per kB) - BOOST_CHECK(CFeeRate(CAmount(1), 1001) == CFeeRate(0)); - BOOST_CHECK(CFeeRate(CAmount(2), 1001) == CFeeRate(1)); + // Previously, precision was limited to three decimal digits + // due to only supporting satoshis per kB, so CFeeRate(CAmount(1), 1001) was equal to CFeeRate(0) + // Since #32750, higher precision is maintained. + BOOST_CHECK(CFeeRate(CAmount(1), 1001) > CFeeRate(0) && CFeeRate(CAmount(1), 1001) < CFeeRate(1)); + BOOST_CHECK(CFeeRate(CAmount(2), 1001) > CFeeRate(1) && CFeeRate(CAmount(2), 1001) < CFeeRate(2)); // some more integer checks - BOOST_CHECK(CFeeRate(CAmount(26), 789) == CFeeRate(32)); - BOOST_CHECK(CFeeRate(CAmount(27), 789) == CFeeRate(34)); + BOOST_CHECK(CFeeRate(CAmount(26), 789) > CFeeRate(32) && CFeeRate(CAmount(26), 789) < CFeeRate(33)); + BOOST_CHECK(CFeeRate(CAmount(27), 789) > CFeeRate(34) && CFeeRate(CAmount(27), 789) < CFeeRate(35)); // Maximum size in bytes, should not crash - CFeeRate(MAX_MONEY, std::numeric_limits::max()).GetFeePerK(); + CFeeRate(MAX_MONEY, std::numeric_limits::max()).GetFeePerK(); // check multiplication operator // check multiplying by zero diff --git a/src/test/fuzz/fee_rate.cpp b/src/test/fuzz/fee_rate.cpp index 92616b62bea3..d4d161776e51 100644 --- a/src/test/fuzz/fee_rate.cpp +++ b/src/test/fuzz/fee_rate.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2020-2021 The Bitcoin Core developers +// Copyright (c) 2020-present The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -20,7 +20,7 @@ FUZZ_TARGET(fee_rate) const CFeeRate fee_rate{satoshis_per_k}; (void)fee_rate.GetFeePerK(); - const auto bytes = fuzzed_data_provider.ConsumeIntegral(); + const auto bytes = fuzzed_data_provider.ConsumeIntegralInRange(0, std::numeric_limits::max()); if (!MultiplicationOverflow(int64_t{bytes}, satoshis_per_k)) { (void)fee_rate.GetFee(bytes); } diff --git a/src/test/fuzz/feefrac.cpp b/src/test/fuzz/feefrac.cpp index 2c4b34d7d4d0..6bad3919164c 100644 --- a/src/test/fuzz/feefrac.cpp +++ b/src/test/fuzz/feefrac.cpp @@ -223,7 +223,7 @@ FUZZ_TARGET(feefrac_mul_div) if (mul64 < std::numeric_limits::max() / 1000 && mul64 > std::numeric_limits::min() / 1000 && quot_abs < arith_uint256{std::numeric_limits::max() / 1000}) { - CFeeRate feerate(mul64, (uint32_t)div); + CFeeRate feerate(mul64, div); CAmount feerate_fee{feerate.GetFee(mul32)}; auto allowed_gap = static_cast(mul32 / 1000 + 3 + round_down); assert(feerate_fee - res_fee >= -allowed_gap); diff --git a/src/test/fuzz/fees.cpp b/src/test/fuzz/fees.cpp index 5c760be13d84..994df4ebf444 100644 --- a/src/test/fuzz/fees.cpp +++ b/src/test/fuzz/fees.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2020-2021 The Bitcoin Core developers +// Copyright (c) 2020-present The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/src/validation.cpp b/src/validation.cpp index 14fdd93c2780..f2718161e265 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -1396,7 +1396,7 @@ bool MemPoolAccept::SubmitPackage(const ATMPArgs& args, std::vector& auto iter = m_pool.GetIter(ws.m_ptx->GetHash()); Assume(iter.has_value()); const auto effective_feerate = args.m_package_feerates ? ws.m_package_feerate : - CFeeRate{ws.m_modified_fees, static_cast(ws.m_vsize)}; + CFeeRate{ws.m_modified_fees, static_cast(ws.m_vsize)}; const auto effective_feerate_wtxids = args.m_package_feerates ? all_package_wtxids : std::vector{ws.m_ptx->GetWitnessHash()}; results.emplace(ws.m_ptx->GetWitnessHash(), @@ -1460,7 +1460,7 @@ MempoolAcceptResult MemPoolAccept::AcceptSingleTransaction(const CTransactionRef if (!ConsensusScriptChecks(args, ws)) return MempoolAcceptResult::Failure(ws.m_state); - const CFeeRate effective_feerate{ws.m_modified_fees, static_cast(ws.m_vsize)}; + const CFeeRate effective_feerate{ws.m_modified_fees, static_cast(ws.m_vsize)}; // Tx was accepted, but not added if (args.m_test_accept) { return MempoolAcceptResult::Success(std::move(m_subpackage.m_replaced_transactions), ws.m_vsize, @@ -1612,7 +1612,7 @@ PackageMempoolAcceptResult MemPoolAccept::AcceptMultipleTransactions(const std:: } if (args.m_test_accept) { const auto effective_feerate = args.m_package_feerates ? ws.m_package_feerate : - CFeeRate{ws.m_modified_fees, static_cast(ws.m_vsize)}; + CFeeRate{ws.m_modified_fees, static_cast(ws.m_vsize)}; const auto effective_feerate_wtxids = args.m_package_feerates ? all_package_wtxids : std::vector{ws.m_ptx->GetWitnessHash()}; results.emplace(ws.m_ptx->GetWitnessHash(), diff --git a/src/wallet/fees.cpp b/src/wallet/fees.cpp index eda6d319ec83..a786062a22ff 100644 --- a/src/wallet/fees.cpp +++ b/src/wallet/fees.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2022 The Bitcoin Core developers +// Copyright (c) 2009-present The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -12,13 +12,13 @@ namespace wallet { CAmount GetRequiredFee(const CWallet& wallet, unsigned int nTxBytes) { - return GetRequiredFeeRate(wallet).GetFee(nTxBytes); + return GetRequiredFeeRate(wallet).GetFee(static_cast(nTxBytes)); } CAmount GetMinimumFee(const CWallet& wallet, unsigned int nTxBytes, const CCoinControl& coin_control, FeeCalculation* feeCalc) { - return GetMinimumFeeRate(wallet, coin_control, feeCalc).GetFee(nTxBytes); + return GetMinimumFeeRate(wallet, coin_control, feeCalc).GetFee(static_cast(nTxBytes)); } CFeeRate GetRequiredFeeRate(const CWallet& wallet) diff --git a/src/wallet/fees.h b/src/wallet/fees.h index af7f759553b5..b815d1c00043 100644 --- a/src/wallet/fees.h +++ b/src/wallet/fees.h @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2021 The Bitcoin Core developers +// Copyright (c) 2009-present The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/src/wallet/test/coinselector_tests.cpp b/src/wallet/test/coinselector_tests.cpp index 49241f33554f..3f8a2b71b972 100644 --- a/src/wallet/test/coinselector_tests.cpp +++ b/src/wallet/test/coinselector_tests.cpp @@ -244,7 +244,7 @@ BOOST_AUTO_TEST_CASE(bnb_search_test) coin_selection_params_bnb.m_long_term_feerate = CFeeRate(3000); // Add selectable outputs, increasing their raw amounts by their input fee to make the effective value equal to the raw amount - CAmount input_fee = coin_selection_params_bnb.m_effective_feerate.GetFee(/*num_bytes=*/68); // bech32 input size (default test output type) + CAmount input_fee = coin_selection_params_bnb.m_effective_feerate.GetFee(/*virtual_bytes=*/68); // bech32 input size (default test output type) add_coin(available_coins, *wallet, 10 * CENT + input_fee, coin_selection_params_bnb.m_effective_feerate, 6 * 24, false, 0, true); add_coin(available_coins, *wallet, 9 * CENT + input_fee, coin_selection_params_bnb.m_effective_feerate, 6 * 24, false, 0, true); add_coin(available_coins, *wallet, 1 * CENT + input_fee, coin_selection_params_bnb.m_effective_feerate, 6 * 24, false, 0, true); diff --git a/src/wallet/test/fuzz/fees.cpp b/src/wallet/test/fuzz/fees.cpp index a8da63b488f5..80458ac89cd2 100644 --- a/src/wallet/test/fuzz/fees.cpp +++ b/src/wallet/test/fuzz/fees.cpp @@ -45,8 +45,7 @@ FUZZ_TARGET(wallet_fees, .init = initialize_setup) } (void)GetDiscardRate(wallet); - const auto tx_bytes{fuzzed_data_provider.ConsumeIntegral()}; - + const auto tx_bytes{fuzzed_data_provider.ConsumeIntegralInRange(0, std::numeric_limits::max())}; if (fuzzed_data_provider.ConsumeBool()) { wallet.m_pay_tx_fee = CFeeRate{ConsumeMoney(fuzzed_data_provider, /*max=*/COIN)}; wallet.m_min_fee = CFeeRate{ConsumeMoney(fuzzed_data_provider, /*max=*/COIN)}; From 5fa81e239a39d161a6d5aba7bcc7e1f22a5be777 Mon Sep 17 00:00:00 2001 From: Sebastian Falbesoner Date: Tue, 8 Jul 2025 19:22:27 +0200 Subject: [PATCH 0033/2775] test: add valid tx test with minimum-sized ECDSA signature (8 bytes DER-encoded) see https://mempool.space/testnet/tx/c6c232a36395fa338da458b86ff1327395a9afc28c5d2daa4273e410089fd433 and https://bitcointalk.org/index.php?topic=1729534.msg17309060#msg17309060 --- src/test/data/tx_valid.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/data/tx_valid.json b/src/test/data/tx_valid.json index d7c367b835cb..ac25f8149b4b 100644 --- a/src/test/data/tx_valid.json +++ b/src/test/data/tx_valid.json @@ -31,6 +31,10 @@ [[["60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1", 0, "1 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x41 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG"]], "0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba26000000000494f47304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000", "DERSIG,LOW_S,STRICTENC,NULLDUMMY"], +["The following is c6c232a36395fa338da458b86ff1327395a9afc28c5d2daa4273e410089fd433 on testnet3"], +["It contains an OP_CHECKSIG with the shortest valid DER encoded signature (8 bytes w/o sighash flag), i.e. 3006020101020101 (r=1, s=1)"], [[["cf016927962ec028964c186043d48e465b3d4672f758953b00d3c4682f71cad6", 0, "HASH160 0x14 0x58a994e9d5ed9baa03ecfd1137592a90ad3cdfc5 EQUAL"]], +"0100000001d6ca712f68c4d3003b9558f772463d5b468ed44360184c9628c02e96276901cf000000002f21026d2204a9535443657a88a0724fbd49a0e78d305f50a82f2cc9dd9bea10a6c5cd0c093006020101020101017cacffffffff010000000000000000016a00000000", "CONST_SCRIPTCODE"], + ["The following is c99c49da4c38af669dea436d3e73780dfdb6c1ecf9958baa52960e8baee30e73"], ["It is of interest because it contains a 0-sequence as well as a signature of SIGHASH type 0 (which is not a real type)"], [[["406b2b06bcd34d3c8733e6b79f7a394c8a431fbf4ff5ac705c93f4076bb77602", 0, "DUP HASH160 0x14 0xdc44b1164188067c3a32d4780f5996fa14a4f2d9 EQUALVERIFY CHECKSIG"]], From 88d909257104124bee3fc810f7fa32e5802b92fe Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Wed, 18 Jun 2025 20:40:52 +0100 Subject: [PATCH 0034/2775] cmake: Create subdirectories in build tree in advance This change ensures that subsequent symlink creation does not fail due to a missing path. --- test/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 0b6520a08109..515c24f90942 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -33,6 +33,10 @@ endfunction() create_test_config() file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/functional) +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/functional/data) +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/functional/mocks) +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/functional/test_framework) +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/functional/test_framework/crypto) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/fuzz) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/util) From 8810642b571e1d8482375e962a1129b691d5d226 Mon Sep 17 00:00:00 2001 From: brunoerg Date: Wed, 16 Jul 2025 12:53:29 -0300 Subject: [PATCH 0035/2775] test: add option to skip large re-org test in feature_block --- test/functional/feature_block.py | 93 +++++++++++++++++--------------- 1 file changed, 49 insertions(+), 44 deletions(-) diff --git a/test/functional/feature_block.py b/test/functional/feature_block.py index 0e2e685247fe..4f36a673a329 100755 --- a/test/functional/feature_block.py +++ b/test/functional/feature_block.py @@ -93,6 +93,9 @@ def set_test_params(self): '-testactivationheight=bip34@2', ]] + def add_options(self, parser): + parser.add_argument("--skipreorg", action='store_true', dest="skip_reorg", help="Skip the large re-org test", default=False) + def run_test(self): node = self.nodes[0] # convenience reference to the node @@ -1278,61 +1281,63 @@ def run_test(self): b89a = self.update_block("89a", [tx]) self.send_blocks([b89a], success=False, reject_reason='bad-txns-inputs-missingorspent', reconnect=True) - # Don't use v2transport for the large reorg, which is too slow with the unoptimized python ChaCha20 implementation - if self.options.v2transport: - self.nodes[0].disconnect_p2ps() - self.helper_peer = self.nodes[0].add_p2p_connection(P2PDataStore(), supports_v2_p2p=False) - self.log.info("Test a re-org of one week's worth of blocks (1088 blocks)") - - self.move_tip(88) - LARGE_REORG_SIZE = 1088 - blocks = [] - spend = out[32] - for i in range(89, LARGE_REORG_SIZE + 89): - b = self.next_block(i, spend) - tx = CTransaction() - script_length = (MAX_BLOCK_WEIGHT - b.get_weight() - 276) // 4 - script_output = CScript([b'\x00' * script_length]) - tx.vout.append(CTxOut(0, script_output)) - tx.vin.append(CTxIn(COutPoint(b.vtx[1].txid_int, 0))) - b = self.update_block(i, [tx]) - assert_equal(b.get_weight(), MAX_BLOCK_WEIGHT) - blocks.append(b) - self.save_spendable_output() - spend = self.get_spendable_output() - - self.send_blocks(blocks, True, timeout=2440) - chain1_tip = i - - # now create alt chain of same length self.move_tip(88) - blocks2 = [] - for i in range(89, LARGE_REORG_SIZE + 89): - blocks2.append(self.next_block("alt" + str(i))) - self.send_blocks(blocks2, False, force_send=False) - - # extend alt chain to trigger re-org - block = self.next_block("alt" + str(chain1_tip + 1)) - self.send_blocks([block], True, timeout=2440) - - # ... and re-org back to the first chain - self.move_tip(chain1_tip) - block = self.next_block(chain1_tip + 1) - self.send_blocks([block], False, force_send=True) - block = self.next_block(chain1_tip + 2) - self.send_blocks([block], True, timeout=2440) - self.log.info("Reject a block with an invalid block header version") b_v1 = self.next_block('b_v1', version=1) self.send_blocks([b_v1], success=False, force_send=True, reject_reason='bad-version(0x00000001)', reconnect=True) - self.move_tip(chain1_tip + 2) + self.move_tip(87) b_cb34 = self.next_block('b_cb34') b_cb34.vtx[0].vin[0].scriptSig = b_cb34.vtx[0].vin[0].scriptSig[:-1] b_cb34.hashMerkleRoot = b_cb34.calc_merkle_root() b_cb34.solve() self.send_blocks([b_cb34], success=False, reject_reason='bad-cb-height', reconnect=True) + # Don't use v2transport for the large reorg, which is too slow with the unoptimized python ChaCha20 implementation + if self.options.v2transport: + self.nodes[0].disconnect_p2ps() + self.helper_peer = self.nodes[0].add_p2p_connection(P2PDataStore(), supports_v2_p2p=False) + + self.move_tip(88) + if not self.options.skip_reorg: + self.log.info("Test a re-org of one week's worth of blocks (1088 blocks)") + LARGE_REORG_SIZE = 1088 + blocks = [] + spend = out[32] + for i in range(89, LARGE_REORG_SIZE + 89): + b = self.next_block(i, spend) + tx = CTransaction() + script_length = (MAX_BLOCK_WEIGHT - b.get_weight() - 276) // 4 + script_output = CScript([b'\x00' * script_length]) + tx.vout.append(CTxOut(0, script_output)) + tx.vin.append(CTxIn(COutPoint(b.vtx[1].txid_int, 0))) + b = self.update_block(i, [tx]) + assert_equal(b.get_weight(), MAX_BLOCK_WEIGHT) + blocks.append(b) + self.save_spendable_output() + spend = self.get_spendable_output() + + self.send_blocks(blocks, True, timeout=2440) + chain1_tip = i + + # now create alt chain of same length + self.move_tip(88) + blocks2 = [] + for i in range(89, LARGE_REORG_SIZE + 89): + blocks2.append(self.next_block("alt" + str(i))) + self.send_blocks(blocks2, False, force_send=False) + + # extend alt chain to trigger re-org + block = self.next_block("alt" + str(chain1_tip + 1)) + self.send_blocks([block], True, timeout=2440) + + # ... and re-org back to the first chain + self.move_tip(chain1_tip) + block = self.next_block(chain1_tip + 1) + self.send_blocks([block], False, force_send=True) + block = self.next_block(chain1_tip + 2) + self.send_blocks([block], True, timeout=2440) + # Helper methods ################ From af041c405756d3b8bb04cb2ebd8c32cf237ac2a9 Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Tue, 15 Jul 2025 16:55:46 -0700 Subject: [PATCH 0036/2775] wallet: Always rewrite tx records during migration Since loading a wallet may change some parts of tx records (e.g. adding nOrderPos), we should rewrite the records instead of copying them so that the automatic upgrade does not need to be performed again when the wallet is loaded. --- src/wallet/wallet.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 3d83f356f641..de7e7e167785 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -3947,14 +3947,16 @@ util::Result CWallet::ApplyMigrationData(WalletBatch& local_wallet_batch, // Mark as to remove from the migrated wallet only if it does not also belong to it if (!is_mine) { txids_to_delete.push_back(hash); + continue; } - continue; } } if (!is_mine) { // Both not ours and not in the watchonly wallet return util::Error{strprintf(_("Error: Transaction %s in wallet cannot be identified to belong to migrated wallets"), wtx->GetHash().GetHex())}; } + // Rewrite the transaction so that anything that may have changed about it in memory also persists to disk + local_wallet_batch.WriteTx(*wtx); } // Do the removes From a17d8202c36abf8a17fb8736e05f318422a3c7fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc?= Date: Tue, 22 Jul 2025 09:39:21 -0700 Subject: [PATCH 0037/2775] test: merge xor_roundtrip_random_chunks and xor_bytes_reference Instead of a separate roundtrip test and a simplified xor reference test, we can merge the two and provide the same coverage See: https://github.com/bitcoin/bitcoin/pull/31144#discussion_r2211205949 Co-authored-by: Ryan Ofsky --- src/test/streams_tests.cpp | 44 ++++++++------------------------------ 1 file changed, 9 insertions(+), 35 deletions(-) diff --git a/src/test/streams_tests.cpp b/src/test/streams_tests.cpp index ce496df5a9f8..44aaf4d17751 100644 --- a/src/test/streams_tests.cpp +++ b/src/test/streams_tests.cpp @@ -18,8 +18,9 @@ using namespace util::hex_literals; BOOST_FIXTURE_TEST_SUITE(streams_tests, BasicTestingSetup) -// Test that obfuscation can be properly reverted even with random chunk sizes. -BOOST_AUTO_TEST_CASE(xor_roundtrip_random_chunks) +// Check optimized obfuscation with random offsets and sizes to ensure proper +// handling of key wrapping. Also verify it roundtrips. +BOOST_AUTO_TEST_CASE(xor_random_chunks) { auto apply_random_xor_chunks{[&](std::span target, const Obfuscation& obfuscation) { for (size_t offset{0}; offset < target.size();) { @@ -37,41 +38,14 @@ BOOST_AUTO_TEST_CASE(xor_roundtrip_random_chunks) const auto key_bytes{m_rng.randbool() ? m_rng.randbytes() : std::array{}}; const Obfuscation obfuscation{key_bytes}; apply_random_xor_chunks(roundtrip, obfuscation); - - const bool key_all_zeros{std::ranges::all_of( - std::span{key_bytes}.first(std::min(write_size, Obfuscation::KEY_SIZE)), [](auto b) { return b == std::byte{0}; })}; - BOOST_CHECK(key_all_zeros ? original == roundtrip : original != roundtrip); - - apply_random_xor_chunks(roundtrip, obfuscation); - BOOST_CHECK(original == roundtrip); - } -} - -// Compares optimized obfuscation against a trivial, byte-by-byte reference implementation -// with random offsets to ensure proper handling of key wrapping. -BOOST_AUTO_TEST_CASE(xor_bytes_reference) -{ - auto expected_xor{[](std::span target, std::span obfuscation, size_t key_offset) { - for (auto& b : target) { - b ^= obfuscation[key_offset++ % obfuscation.size()]; + BOOST_CHECK_EQUAL(roundtrip.size(), original.size()); + for (size_t i{0}; i < original.size(); ++i) { + BOOST_CHECK_EQUAL(roundtrip[i], original[i] ^ key_bytes[i % Obfuscation::KEY_SIZE]); } - }}; - for (size_t test{0}; test < 100; ++test) { - const size_t write_size{1 + m_rng.randrange(100U)}; - const size_t key_offset{m_rng.randrange(3 * Obfuscation::KEY_SIZE)}; // Make sure the key can wrap around - const size_t write_offset{std::min(write_size, m_rng.randrange(Obfuscation::KEY_SIZE * 2))}; // Write unaligned data - - const auto key_bytes{m_rng.randbool() ? m_rng.randbytes() : std::array{}}; - const Obfuscation obfuscation{key_bytes}; - std::vector expected{m_rng.randbytes(write_size)}; - std::vector actual{expected}; - - expected_xor(std::span{expected}.subspan(write_offset), key_bytes, key_offset); - obfuscation(std::span{actual}.subspan(write_offset), key_offset); - - BOOST_CHECK_EQUAL_COLLECTIONS(expected.begin(), expected.end(), actual.begin(), actual.end()); - } + apply_random_xor_chunks(roundtrip, obfuscation); + BOOST_CHECK_EQUAL_COLLECTIONS(roundtrip.begin(), roundtrip.end(), original.begin(), original.end()); + } } BOOST_AUTO_TEST_CASE(obfuscation_hexkey) From 2dea0454254180d79464dc6afd3312b1caf369a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc?= Date: Tue, 22 Jul 2025 10:04:30 -0700 Subject: [PATCH 0038/2775] test: make `obfuscation_serialize` more thorough See: https://github.com/bitcoin/bitcoin/pull/31144#discussion_r2216849672 Co-authored-by: Ryan Ofsky --- src/test/streams_tests.cpp | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/test/streams_tests.cpp b/src/test/streams_tests.cpp index 44aaf4d17751..43d06a7d0bf5 100644 --- a/src/test/streams_tests.cpp +++ b/src/test/streams_tests.cpp @@ -58,19 +58,24 @@ BOOST_AUTO_TEST_CASE(obfuscation_hexkey) BOOST_AUTO_TEST_CASE(obfuscation_serialize) { - const Obfuscation original{m_rng.randbytes()}; - - // Serialization - DataStream ds; - ds << original; - - BOOST_CHECK_EQUAL(ds.size(), 1 + Obfuscation::KEY_SIZE); // serialized as a vector - - // Deserialization - Obfuscation recovered{}; - ds >> recovered; - - BOOST_CHECK_EQUAL(recovered.HexKey(), original.HexKey()); + Obfuscation obfuscation{}; + BOOST_CHECK(!obfuscation); + + // Test loading a key. + std::vector key_in{m_rng.randbytes(Obfuscation::KEY_SIZE)}; + DataStream ds_in; + ds_in << key_in; + BOOST_CHECK_EQUAL(ds_in.size(), 1 + Obfuscation::KEY_SIZE); // serialized as a vector + ds_in >> obfuscation; + + // Test saving the key. + std::vector key_out; + DataStream ds_out; + ds_out << obfuscation; + ds_out >> key_out; + + // Make sure saved key is the same. + BOOST_CHECK_EQUAL_COLLECTIONS(key_in.begin(), key_in.end(), key_out.begin(), key_out.end()); } BOOST_AUTO_TEST_CASE(obfuscation_empty) From 298bf9510578263a1439513729e5ff955a453437 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc?= Date: Tue, 22 Jul 2025 10:19:25 -0700 Subject: [PATCH 0039/2775] refactor: simplify `Obfuscation::HexKey` See: https://github.com/bitcoin/bitcoin/pull/31144#discussion_r2215746554 Co-authored-by: maflcko <6399679+maflcko@users.noreply.github.com> --- src/util/obfuscation.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/obfuscation.h b/src/util/obfuscation.h index db7527064b44..a9de5f2f038c 100644 --- a/src/util/obfuscation.h +++ b/src/util/obfuscation.h @@ -78,7 +78,7 @@ class Obfuscation std::string HexKey() const { - return HexStr(std::bit_cast>(m_rotations[0])); + return HexStr(std::as_bytes(std::span{&m_rotations[0], 1})); } private: From e5b1b7c5577ee36b5bcfb6c02b92da88455411e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc?= Date: Tue, 22 Jul 2025 10:19:36 -0700 Subject: [PATCH 0040/2775] refactor: rename `OBFUSCATION_KEY_KEY` See: https://github.com/bitcoin/bitcoin/pull/31144#discussion_r2216425882 Co-authored-by: Ryan Ofsky --- src/dbwrapper.cpp | 6 +++--- src/dbwrapper.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/dbwrapper.cpp b/src/dbwrapper.cpp index b13699572c4e..f43e07bc6bc4 100644 --- a/src/dbwrapper.cpp +++ b/src/dbwrapper.cpp @@ -250,10 +250,10 @@ CDBWrapper::CDBWrapper(const DBParams& params) } assert(!m_obfuscation); // Needed for unobfuscated Read()/Write() below - if (!Read(OBFUSCATION_KEY_KEY, m_obfuscation) && params.obfuscate && IsEmpty()) { + if (!Read(OBFUSCATION_KEY, m_obfuscation) && params.obfuscate && IsEmpty()) { // Generate, write and read back the new obfuscation key, making sure we don't obfuscate the key itself - Write(OBFUSCATION_KEY_KEY, FastRandomContext{}.randbytes(Obfuscation::KEY_SIZE)); - Read(OBFUSCATION_KEY_KEY, m_obfuscation); + Write(OBFUSCATION_KEY, FastRandomContext{}.randbytes(Obfuscation::KEY_SIZE)); + Read(OBFUSCATION_KEY, m_obfuscation); LogInfo("Wrote new obfuscation key for %s: %s", fs::PathToString(params.path), m_obfuscation.HexKey()); } LogInfo("Using obfuscation key for %s: %s", fs::PathToString(params.path), m_obfuscation.HexKey()); diff --git a/src/dbwrapper.h b/src/dbwrapper.h index c5d49404861e..b9b98bd96ade 100644 --- a/src/dbwrapper.h +++ b/src/dbwrapper.h @@ -189,7 +189,7 @@ class CDBWrapper Obfuscation m_obfuscation; //! obfuscation key storage key, null-prefixed to avoid collisions - inline static const std::string OBFUSCATION_KEY_KEY{"\000obfuscate_key", 14}; // explicit size to avoid truncation at leading \0 + inline static const std::string OBFUSCATION_KEY{"\000obfuscate_key", 14}; // explicit size to avoid truncation at leading \0 //! path to filesystem storage const fs::path m_path; From 13f00345c061a8df2fe41ff9d0a6aadfb6137fd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc?= Date: Tue, 22 Jul 2025 10:13:16 -0700 Subject: [PATCH 0041/2775] refactor: write `Obfuscation` object when new key is generated in dbwrapper See: * https://github.com/bitcoin/bitcoin/pull/31144#discussion_r2215720251 * https://github.com/bitcoin/bitcoin/pull/31144#discussion_r2223539466 Co-authored-by: maflcko <6399679+maflcko@users.noreply.github.com> Co-authored-by: Ryan Ofsky --- src/dbwrapper.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/dbwrapper.cpp b/src/dbwrapper.cpp index f43e07bc6bc4..8939ff84f8fb 100644 --- a/src/dbwrapper.cpp +++ b/src/dbwrapper.cpp @@ -249,11 +249,12 @@ CDBWrapper::CDBWrapper(const DBParams& params) LogPrintf("Finished database compaction of %s\n", fs::PathToString(params.path)); } - assert(!m_obfuscation); // Needed for unobfuscated Read()/Write() below if (!Read(OBFUSCATION_KEY, m_obfuscation) && params.obfuscate && IsEmpty()) { - // Generate, write and read back the new obfuscation key, making sure we don't obfuscate the key itself - Write(OBFUSCATION_KEY, FastRandomContext{}.randbytes(Obfuscation::KEY_SIZE)); - Read(OBFUSCATION_KEY, m_obfuscation); + // Generate and write the new obfuscation key. + const Obfuscation obfuscation{FastRandomContext{}.randbytes()}; + assert(!m_obfuscation); // Make sure the key is written without obfuscation. + Write(OBFUSCATION_KEY, obfuscation); + m_obfuscation = obfuscation; LogInfo("Wrote new obfuscation key for %s: %s", fs::PathToString(params.path), m_obfuscation.HexKey()); } LogInfo("Using obfuscation key for %s: %s", fs::PathToString(params.path), m_obfuscation.HexKey()); From 86e3a0a8cbd30cfee98f5b4acf4ce6d0a75a3ef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc?= Date: Tue, 22 Jul 2025 10:15:46 -0700 Subject: [PATCH 0042/2775] refactor: standardize obfuscation memory alignment See: * https://github.com/bitcoin/bitcoin/pull/31144#discussion_r2216962117 * https://github.com/bitcoin/bitcoin/pull/31144#discussion_r2220277161 * https://github.com/bitcoin/bitcoin/pull/31144#discussion_r2210851772 Co-authored-by: Russell Yanofsky --- src/util/obfuscation.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/util/obfuscation.h b/src/util/obfuscation.h index a9de5f2f038c..e9a2e6093b6b 100644 --- a/src/util/obfuscation.h +++ b/src/util/obfuscation.h @@ -36,21 +36,21 @@ class Obfuscation KeyType rot_key{m_rotations[key_offset % KEY_SIZE]}; // Continue obfuscation from where we left off if (target.size() > KEY_SIZE) { - // Obfuscate until 64-bit alignment boundary - if (const auto misalign{std::bit_cast(target.data()) % KEY_SIZE}) { - const size_t alignment{std::min(KEY_SIZE - misalign, target.size())}; + // Obfuscate until KEY_SIZE alignment boundary + if (const auto misalign{reinterpret_cast(target.data()) % KEY_SIZE}) { + const size_t alignment{KEY_SIZE - misalign}; XorWord(target.first(alignment), rot_key); target = {std::assume_aligned(target.data() + alignment), target.size() - alignment}; rot_key = m_rotations[(key_offset + alignment) % KEY_SIZE]; } - // Aligned obfuscation in 64-byte chunks + // Aligned obfuscation in 8*KEY_SIZE chunks for (constexpr auto unroll{8}; target.size() >= KEY_SIZE * unroll; target = target.subspan(KEY_SIZE * unroll)) { for (size_t i{0}; i < unroll; ++i) { XorWord(target.subspan(i * KEY_SIZE, KEY_SIZE), rot_key); } } - // Aligned obfuscation in 64-bit chunks + // Aligned obfuscation in KEY_SIZE chunks for (; target.size() >= KEY_SIZE; target = target.subspan(KEY_SIZE)) { XorWord(target.first(), rot_key); } From faeb58fe668662d8262c4cc7c54ad2af756dbe3b Mon Sep 17 00:00:00 2001 From: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz> Date: Thu, 22 May 2025 15:09:53 +0200 Subject: [PATCH 0043/2775] refactor: Set G_ABORT_ON_FAILED_ASSUME when G_FUZZING_BUILD This does not change behavior, but documents that G_ABORT_ON_FAILED_ASSUME is set when G_FUZZING_BUILD. --- src/util/check.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/util/check.h b/src/util/check.h index f7dea5a3c2e7..198e9e078b2e 100644 --- a/src/util/check.h +++ b/src/util/check.h @@ -21,7 +21,7 @@ constexpr bool G_FUZZING_BUILD{ false #endif }; -constexpr bool G_ABORT_ON_FAILED_ASSUME{ +constexpr bool G_ABORT_ON_FAILED_ASSUME{G_FUZZING_BUILD || #ifdef ABORT_ON_FAILED_ASSUME true #else @@ -75,7 +75,7 @@ void assertion_fail(std::string_view file, int line, std::string_view func, std: template constexpr T&& inline_assertion_check(LIFETIMEBOUND T&& val, [[maybe_unused]] const char* file, [[maybe_unused]] int line, [[maybe_unused]] const char* func, [[maybe_unused]] const char* assertion) { - if (IS_ASSERT || std::is_constant_evaluated() || G_FUZZING_BUILD || G_ABORT_ON_FAILED_ASSUME) { + if (IS_ASSERT || std::is_constant_evaluated() || G_ABORT_ON_FAILED_ASSUME) { if (!val) { assertion_fail(file, line, func, assertion); } From fa0dc4bdffb06b6f0c192fe1aa02b4dfdcdc6e15 Mon Sep 17 00:00:00 2001 From: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz> Date: Fri, 23 May 2025 08:47:35 +0200 Subject: [PATCH 0044/2775] test: Allow testing of check failures This allows specific tests to mock the check behavior to consistently use exceptions instead of aborts for intentionally failing checks in all build configurations. --- src/test/CMakeLists.txt | 1 + src/test/util_check_tests.cpp | 33 +++++++++++++++++++++++++++++++++ src/util/check.cpp | 5 +++++ src/util/check.h | 6 ++++++ 4 files changed, 45 insertions(+) create mode 100644 src/test/util_check_tests.cpp diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index 93db34d5a215..fa0e87911805 100644 --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -114,6 +114,7 @@ add_executable(test_bitcoin txvalidation_tests.cpp txvalidationcache_tests.cpp uint256_tests.cpp + util_check_tests.cpp util_string_tests.cpp util_tests.cpp util_threadnames_tests.cpp diff --git a/src/test/util_check_tests.cpp b/src/test/util_check_tests.cpp new file mode 100644 index 000000000000..93ac91946046 --- /dev/null +++ b/src/test/util_check_tests.cpp @@ -0,0 +1,33 @@ +// Copyright (c) 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 + +#include +#include + +BOOST_AUTO_TEST_SUITE(util_check_tests) + +BOOST_AUTO_TEST_CASE(check_pass) +{ + Assume(true); + Assert(true); + CHECK_NONFATAL(true); +} + +BOOST_AUTO_TEST_CASE(check_fail) +{ + // Disable aborts for easier testing here + test_only_CheckFailuresAreExceptionsNotAborts mock_checks{}; + + if constexpr (G_ABORT_ON_FAILED_ASSUME) { + BOOST_CHECK_EXCEPTION(Assume(false), NonFatalCheckError, HasReason{"Internal bug detected: false"}); + } else { + BOOST_CHECK_NO_THROW(Assume(false)); + } + BOOST_CHECK_EXCEPTION(Assert(false), NonFatalCheckError, HasReason{"Internal bug detected: false"}); + BOOST_CHECK_EXCEPTION(CHECK_NONFATAL(false), NonFatalCheckError, HasReason{"Internal bug detected: false"}); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/util/check.cpp b/src/util/check.cpp index 9f07fbe4780f..77783c843d78 100644 --- a/src/util/check.cpp +++ b/src/util/check.cpp @@ -27,8 +27,13 @@ NonFatalCheckError::NonFatalCheckError(std::string_view msg, std::string_view fi { } +bool g_detail_test_only_CheckFailuresAreExceptionsNotAborts{false}; + void assertion_fail(std::string_view file, int line, std::string_view func, std::string_view assertion) { + if (g_detail_test_only_CheckFailuresAreExceptionsNotAborts) { + throw NonFatalCheckError{assertion, file, line, func}; + } auto str = strprintf("%s:%s %s: Assertion `%s' failed.\n", file, line, func, assertion); fwrite(str.data(), 1, str.size(), stderr); std::abort(); diff --git a/src/util/check.h b/src/util/check.h index 198e9e078b2e..6b4ec11f1c87 100644 --- a/src/util/check.h +++ b/src/util/check.h @@ -46,6 +46,12 @@ inline bool EnableFuzzDeterminism() } } +extern bool g_detail_test_only_CheckFailuresAreExceptionsNotAborts; +struct test_only_CheckFailuresAreExceptionsNotAborts { + test_only_CheckFailuresAreExceptionsNotAborts() { g_detail_test_only_CheckFailuresAreExceptionsNotAborts = true; }; + ~test_only_CheckFailuresAreExceptionsNotAborts() { g_detail_test_only_CheckFailuresAreExceptionsNotAborts = false; }; +}; + std::string StrFormatInternalBug(std::string_view msg, std::string_view file, int line, std::string_view func); class NonFatalCheckError : public std::runtime_error From fa37153288ca420420636046ef6b8c4ba7e5a478 Mon Sep 17 00:00:00 2001 From: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz> Date: Thu, 22 May 2025 16:24:45 +0200 Subject: [PATCH 0045/2775] util: Abort on failing CHECK_NONFATAL in debug builds This requires adjusting some tests to force exceptions over aborts, or accept either exceptions or aborts. Also, remove a fuzz test in integer.cpp that is mostly redundant with the unit test added in the prior commit. --- src/test/fuzz/integer.cpp | 5 ----- src/test/fuzz/rpc.cpp | 6 ++++++ src/test/rpc_tests.cpp | 31 +++++++++++++++++-------------- src/util/check.h | 9 ++++++--- test/functional/rpc_misc.py | 24 +++++++++++++++++++----- 5 files changed, 48 insertions(+), 27 deletions(-) diff --git a/src/test/fuzz/integer.cpp b/src/test/fuzz/integer.cpp index a6729155d1f5..f40a2be1e852 100644 --- a/src/test/fuzz/integer.cpp +++ b/src/test/fuzz/integer.cpp @@ -255,9 +255,4 @@ FUZZ_TARGET(integer, .init = initialize_integer) } catch (const std::ios_base::failure&) { } } - - try { - CHECK_NONFATAL(b); - } catch (const NonFatalCheckError&) { - } } diff --git a/src/test/fuzz/rpc.cpp b/src/test/fuzz/rpc.cpp index 580a6338a849..c8f5e87adfa1 100644 --- a/src/test/fuzz/rpc.cpp +++ b/src/test/fuzz/rpc.cpp @@ -381,6 +381,12 @@ FUZZ_TARGET(rpc, .init = initialize_rpc) arguments.push_back(ConsumeRPCArgument(fuzzed_data_provider, good_data)); } try { + std::optional maybe_mock{}; + if (rpc_command == "echo") { + // Avoid aborting fuzzing for this specific test-only RPC with an + // intentional trigger_internal_bug + maybe_mock.emplace(); + } rpc_testing_setup->CallRPC(rpc_command, arguments); } catch (const UniValue& json_rpc_error) { const std::string error_msg{json_rpc_error.find_value("message").get_str()}; diff --git a/src/test/rpc_tests.cpp b/src/test/rpc_tests.cpp index 87303d741749..5d81b4287dd8 100644 --- a/src/test/rpc_tests.cpp +++ b/src/test/rpc_tests.cpp @@ -534,20 +534,23 @@ BOOST_AUTO_TEST_CASE(check_dup_param_names) make_rpc({{"p1", NAMED_ONLY}, {"p2", NAMED}}); make_rpc({{"p1", NAMED_ONLY}, {"p2", NAMED_ONLY}}); - // Error if parameters names are duplicates, unless one parameter is - // positional and the other is named and .also_positional is true. - BOOST_CHECK_THROW(make_rpc({{"p1", POSITIONAL}, {"p1", POSITIONAL}}), NonFatalCheckError); - make_rpc({{"p1", POSITIONAL}, {"p1", NAMED}}); - BOOST_CHECK_THROW(make_rpc({{"p1", POSITIONAL}, {"p1", NAMED_ONLY}}), NonFatalCheckError); - make_rpc({{"p1", NAMED}, {"p1", POSITIONAL}}); - BOOST_CHECK_THROW(make_rpc({{"p1", NAMED}, {"p1", NAMED}}), NonFatalCheckError); - BOOST_CHECK_THROW(make_rpc({{"p1", NAMED}, {"p1", NAMED_ONLY}}), NonFatalCheckError); - BOOST_CHECK_THROW(make_rpc({{"p1", NAMED_ONLY}, {"p1", POSITIONAL}}), NonFatalCheckError); - BOOST_CHECK_THROW(make_rpc({{"p1", NAMED_ONLY}, {"p1", NAMED}}), NonFatalCheckError); - BOOST_CHECK_THROW(make_rpc({{"p1", NAMED_ONLY}, {"p1", NAMED_ONLY}}), NonFatalCheckError); - - // Make sure duplicate aliases are detected too. - BOOST_CHECK_THROW(make_rpc({{"p1", POSITIONAL}, {"p2|p1", NAMED_ONLY}}), NonFatalCheckError); + { + test_only_CheckFailuresAreExceptionsNotAborts mock_checks{}; + // Error if parameter names are duplicates, unless one parameter is + // positional and the other is named and .also_positional is true. + BOOST_CHECK_THROW(make_rpc({{"p1", POSITIONAL}, {"p1", POSITIONAL}}), NonFatalCheckError); + make_rpc({{"p1", POSITIONAL}, {"p1", NAMED}}); + BOOST_CHECK_THROW(make_rpc({{"p1", POSITIONAL}, {"p1", NAMED_ONLY}}), NonFatalCheckError); + make_rpc({{"p1", NAMED}, {"p1", POSITIONAL}}); + BOOST_CHECK_THROW(make_rpc({{"p1", NAMED}, {"p1", NAMED}}), NonFatalCheckError); + BOOST_CHECK_THROW(make_rpc({{"p1", NAMED}, {"p1", NAMED_ONLY}}), NonFatalCheckError); + BOOST_CHECK_THROW(make_rpc({{"p1", NAMED_ONLY}, {"p1", POSITIONAL}}), NonFatalCheckError); + BOOST_CHECK_THROW(make_rpc({{"p1", NAMED_ONLY}, {"p1", NAMED}}), NonFatalCheckError); + BOOST_CHECK_THROW(make_rpc({{"p1", NAMED_ONLY}, {"p1", NAMED_ONLY}}), NonFatalCheckError); + + // Make sure duplicate aliases are detected too. + BOOST_CHECK_THROW(make_rpc({{"p1", POSITIONAL}, {"p2|p1", NAMED_ONLY}}), NonFatalCheckError); + } } BOOST_AUTO_TEST_CASE(help_example) diff --git a/src/util/check.h b/src/util/check.h index 6b4ec11f1c87..17318e6525a0 100644 --- a/src/util/check.h +++ b/src/util/check.h @@ -60,11 +60,17 @@ class NonFatalCheckError : public std::runtime_error NonFatalCheckError(std::string_view msg, std::string_view file, int line, std::string_view func); }; +/** Internal helper */ +void assertion_fail(std::string_view file, int line, std::string_view func, std::string_view assertion); + /** Helper for CHECK_NONFATAL() */ template T&& inline_check_non_fatal(LIFETIMEBOUND T&& val, const char* file, int line, const char* func, const char* assertion) { if (!val) { + if constexpr (G_ABORT_ON_FAILED_ASSUME) { + assertion_fail(file, line, func, assertion); + } throw NonFatalCheckError{assertion, file, line, func}; } return std::forward(val); @@ -74,9 +80,6 @@ T&& inline_check_non_fatal(LIFETIMEBOUND T&& val, const char* file, int line, co #error "Cannot compile without assertions!" #endif -/** Helper for Assert() */ -void assertion_fail(std::string_view file, int line, std::string_view func, std::string_view assertion); - /** Helper for Assert()/Assume() */ template constexpr T&& inline_assertion_check(LIFETIMEBOUND T&& val, [[maybe_unused]] const char* file, [[maybe_unused]] int line, [[maybe_unused]] const char* func, [[maybe_unused]] const char* assertion) diff --git a/test/functional/rpc_misc.py b/test/functional/rpc_misc.py index 3c7cce2f168b..fe9f20b6ae53 100755 --- a/test/functional/rpc_misc.py +++ b/test/functional/rpc_misc.py @@ -15,6 +15,9 @@ from test_framework.authproxy import JSONRPCException +import http +import subprocess + class RpcMiscTest(BitcoinTestFramework): def set_test_params(self): @@ -24,11 +27,22 @@ def run_test(self): node = self.nodes[0] self.log.info("test CHECK_NONFATAL") - assert_raises_rpc_error( - -1, - 'Internal bug detected: request.params[9].get_str() != "trigger_internal_bug"', - lambda: node.echo(arg9='trigger_internal_bug'), - ) + msg_internal_bug = 'request.params[9].get_str() != "trigger_internal_bug"' + self.restart_node(0) # Required to flush the chainstate + try: + node.echo(arg9="trigger_internal_bug") + assert False # Must hit one of the exceptions below + except ( + subprocess.CalledProcessError, + http.client.CannotSendRequest, + http.client.RemoteDisconnected, + ): + self.log.info("Restart node after crash") + assert_equal(-6, node.process.wait(timeout=10)) + self.start_node(0) + except JSONRPCException as e: + assert_equal(e.error["code"], -1) + assert f"Internal bug detected: {msg_internal_bug}" in e.error["message"] self.log.info("test getmemoryinfo") memory = node.getmemoryinfo()['locked'] From e27da3150b48ccf106ba93044bd28c6d1f505421 Mon Sep 17 00:00:00 2001 From: woltx <94266259+w0xlt@users.noreply.github.com> Date: Mon, 14 Jul 2025 21:15:45 -0700 Subject: [PATCH 0046/2775] wallet: Remove `GetVersion()` --- src/wallet/rpc/wallet.cpp | 6 ++++-- src/wallet/wallet.h | 3 --- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/wallet/rpc/wallet.cpp b/src/wallet/rpc/wallet.cpp index 01413f02229f..d68118994bf2 100644 --- a/src/wallet/rpc/wallet.cpp +++ b/src/wallet/rpc/wallet.cpp @@ -40,7 +40,7 @@ static RPCHelpMan getwalletinfo() { { {RPCResult::Type::STR, "walletname", "the wallet name"}, - {RPCResult::Type::NUM, "walletversion", "the wallet version"}, + {RPCResult::Type::NUM, "walletversion", "(DEPRECATED) only related to unsupported legacy wallet, returns the latest version 169900 for backwards compatibility"}, {RPCResult::Type::STR, "format", "the database format (only sqlite)"}, {RPCResult::Type::NUM, "txcount", "the total number of transactions in the wallet"}, {RPCResult::Type::NUM, "keypoolsize", "how many new keys are pre-generated (only counts external keys)"}, @@ -82,9 +82,11 @@ static RPCHelpMan getwalletinfo() UniValue obj(UniValue::VOBJ); + const int latest_legacy_wallet_minversion{169900}; + size_t kpExternalSize = pwallet->KeypoolCountExternalKeys(); obj.pushKV("walletname", pwallet->GetName()); - obj.pushKV("walletversion", pwallet->GetVersion()); + obj.pushKV("walletversion", latest_legacy_wallet_minversion); obj.pushKV("format", pwallet->GetDatabase().Format()); obj.pushKV("txcount", (int)pwallet->mapWallet.size()); obj.pushKV("keypoolsize", (int64_t)kpExternalSize); diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index 95ed7af806a5..1b1080fd81cf 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -828,9 +828,6 @@ class CWallet final : public WalletStorage, public interfaces::Chain::Notificati //! signify that a particular wallet feature is now used. void SetMinVersion(enum WalletFeature, WalletBatch* batch_in = nullptr) override; - //! get the current wallet format (the oldest client version guaranteed to understand this wallet) - int GetVersion() const { LOCK(cs_wallet); return nWalletVersion; } - //! Get wallet transactions that conflict with given transaction (spend same outputs) std::set GetConflicts(const Txid& txid) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet); From 63acee279756e72f96fda14a9963281860bf318b Mon Sep 17 00:00:00 2001 From: woltx <94266259+w0xlt@users.noreply.github.com> Date: Mon, 14 Jul 2025 23:12:31 -0700 Subject: [PATCH 0047/2775] wallet: Remove `GetClosestWalletFeature()` --- src/wallet/walletutil.cpp | 9 --------- src/wallet/walletutil.h | 1 - 2 files changed, 10 deletions(-) diff --git a/src/wallet/walletutil.cpp b/src/wallet/walletutil.cpp index 53e65d0194a5..9b296aebed9a 100644 --- a/src/wallet/walletutil.cpp +++ b/src/wallet/walletutil.cpp @@ -37,15 +37,6 @@ bool IsFeatureSupported(int wallet_version, int feature_version) return wallet_version >= feature_version; } -WalletFeature GetClosestWalletFeature(int version) -{ - static constexpr std::array wallet_features{FEATURE_LATEST, FEATURE_PRE_SPLIT_KEYPOOL, FEATURE_NO_DEFAULT_KEY, FEATURE_HD_SPLIT, FEATURE_HD, FEATURE_COMPRPUBKEY, FEATURE_WALLETCRYPT, FEATURE_BASE}; - for (const WalletFeature& wf : wallet_features) { - if (version >= wf) return wf; - } - return static_cast(0); -} - WalletDescriptor GenerateWalletDescriptor(const CExtPubKey& master_key, const OutputType& addr_type, bool internal) { int64_t creation_time = GetTime(); diff --git a/src/wallet/walletutil.h b/src/wallet/walletutil.h index ef9d93eb07c0..ca0786c1f37c 100644 --- a/src/wallet/walletutil.h +++ b/src/wallet/walletutil.h @@ -31,7 +31,6 @@ enum WalletFeature }; bool IsFeatureSupported(int wallet_version, int feature_version); -WalletFeature GetClosestWalletFeature(int version); enum WalletFlags : uint64_t { // wallet flags in the upper section (> 1 << 31) will lead to not opening the wallet if flag is unknown From ba0158522981287f2fde83f38392baac0216b0b4 Mon Sep 17 00:00:00 2001 From: woltx <94266259+w0xlt@users.noreply.github.com> Date: Tue, 15 Jul 2025 00:45:18 -0700 Subject: [PATCH 0048/2775] wallet: `MigrateToDescriptor` no longer calls `CanSupportFeature` --- src/wallet/scriptpubkeyman.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/wallet/scriptpubkeyman.cpp b/src/wallet/scriptpubkeyman.cpp index 730667dbdf41..0edb6ac967fa 100644 --- a/src/wallet/scriptpubkeyman.cpp +++ b/src/wallet/scriptpubkeyman.cpp @@ -624,10 +624,13 @@ std::optional LegacyDataSPKM::MigrateToDescriptor() for (const auto& chain_pair : m_inactive_hd_chains) { chains.push_back(chain_pair.second); } + + bool can_support_hd_split_feature = m_hd_chain.nVersion >= CHDChain::VERSION_HD_CHAIN_SPLIT; + for (const CHDChain& chain : chains) { for (int i = 0; i < 2; ++i) { // Skip if doing internal chain and split chain is not supported - if (chain.seed_id.IsNull() || (i == 1 && !m_storage.CanSupportFeature(FEATURE_HD_SPLIT))) { + if (chain.seed_id.IsNull() || (i == 1 && !can_support_hd_split_feature)) { continue; } // Get the master xprv From 7cda3d0f5bdca64b11f966a60167cde5451071a3 Mon Sep 17 00:00:00 2001 From: woltx <94266259+w0xlt@users.noreply.github.com> Date: Tue, 15 Jul 2025 00:56:53 -0700 Subject: [PATCH 0049/2775] wallet: Remove `IsFeatureSupported()` and `CanSupportFeature()` --- src/wallet/rpc/wallet.cpp | 4 +--- src/wallet/scriptpubkeyman.h | 1 - src/wallet/wallet.h | 3 --- src/wallet/walletutil.cpp | 5 ----- src/wallet/walletutil.h | 2 -- 5 files changed, 1 insertion(+), 14 deletions(-) diff --git a/src/wallet/rpc/wallet.cpp b/src/wallet/rpc/wallet.cpp index d68118994bf2..0a844fcee538 100644 --- a/src/wallet/rpc/wallet.cpp +++ b/src/wallet/rpc/wallet.cpp @@ -90,10 +90,8 @@ static RPCHelpMan getwalletinfo() obj.pushKV("format", pwallet->GetDatabase().Format()); obj.pushKV("txcount", (int)pwallet->mapWallet.size()); obj.pushKV("keypoolsize", (int64_t)kpExternalSize); + obj.pushKV("keypoolsize_hd_internal", pwallet->GetKeyPoolSize() - kpExternalSize); - if (pwallet->CanSupportFeature(FEATURE_HD_SPLIT)) { - obj.pushKV("keypoolsize_hd_internal", (int64_t)(pwallet->GetKeyPoolSize() - kpExternalSize)); - } if (pwallet->IsCrypted()) { obj.pushKV("unlocked_until", pwallet->nRelockTime); } diff --git a/src/wallet/scriptpubkeyman.h b/src/wallet/scriptpubkeyman.h index c6f6e37f2b97..f8086fdbff70 100644 --- a/src/wallet/scriptpubkeyman.h +++ b/src/wallet/scriptpubkeyman.h @@ -47,7 +47,6 @@ class WalletStorage virtual WalletDatabase& GetDatabase() const = 0; virtual bool IsWalletFlagSet(uint64_t) const = 0; virtual void UnsetBlankWalletFlag(WalletBatch&) = 0; - virtual bool CanSupportFeature(enum WalletFeature) const = 0; virtual void SetMinVersion(enum WalletFeature, WalletBatch* = nullptr) = 0; //! Pass the encryption key to cb(). virtual bool WithEncryptionKey(std::function cb) const = 0; diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index 1b1080fd81cf..c7c6c3c10705 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -556,9 +556,6 @@ class CWallet final : public WalletStorage, public interfaces::Chain::Notificati int GetTxBlocksToMaturity(const CWalletTx& wtx) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet); bool IsTxImmatureCoinBase(const CWalletTx& wtx) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet); - //! check whether we support the named feature - bool CanSupportFeature(enum WalletFeature wf) const override EXCLUSIVE_LOCKS_REQUIRED(cs_wallet) { AssertLockHeld(cs_wallet); return IsFeatureSupported(nWalletVersion, wf); } - bool IsSpent(const COutPoint& outpoint) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet); // Whether this or any known scriptPubKey with the same single key has been spent. diff --git a/src/wallet/walletutil.cpp b/src/wallet/walletutil.cpp index 9b296aebed9a..3ee296a6725b 100644 --- a/src/wallet/walletutil.cpp +++ b/src/wallet/walletutil.cpp @@ -32,11 +32,6 @@ fs::path GetWalletDir() return path; } -bool IsFeatureSupported(int wallet_version, int feature_version) -{ - return wallet_version >= feature_version; -} - WalletDescriptor GenerateWalletDescriptor(const CExtPubKey& master_key, const OutputType& addr_type, bool internal) { int64_t creation_time = GetTime(); diff --git a/src/wallet/walletutil.h b/src/wallet/walletutil.h index ca0786c1f37c..ba93a90ed97d 100644 --- a/src/wallet/walletutil.h +++ b/src/wallet/walletutil.h @@ -30,8 +30,6 @@ enum WalletFeature FEATURE_LATEST = FEATURE_PRE_SPLIT_KEYPOOL }; -bool IsFeatureSupported(int wallet_version, int feature_version); - enum WalletFlags : uint64_t { // wallet flags in the upper section (> 1 << 31) will lead to not opening the wallet if flag is unknown // unknown wallet flags in the lower section <= (1 << 31) will be tolerated From 66de58208a713e16f0d48bceed4d7496eae4b05b Mon Sep 17 00:00:00 2001 From: woltx <94266259+w0xlt@users.noreply.github.com> Date: Tue, 15 Jul 2025 01:07:01 -0700 Subject: [PATCH 0050/2775] wallet: Remove `CWallet::nWalletVersion` and related functions --- src/wallet/scriptpubkeyman.h | 1 - src/wallet/test/wallet_tests.cpp | 1 - src/wallet/wallet.cpp | 23 ----------------------- src/wallet/wallet.h | 8 -------- src/wallet/walletdb.cpp | 20 -------------------- src/wallet/walletdb.h | 2 -- src/wallet/wallettool.cpp | 1 - test/functional/wallet_createwallet.py | 6 ++---- 8 files changed, 2 insertions(+), 60 deletions(-) diff --git a/src/wallet/scriptpubkeyman.h b/src/wallet/scriptpubkeyman.h index f8086fdbff70..905c5c003ba9 100644 --- a/src/wallet/scriptpubkeyman.h +++ b/src/wallet/scriptpubkeyman.h @@ -47,7 +47,6 @@ class WalletStorage virtual WalletDatabase& GetDatabase() const = 0; virtual bool IsWalletFlagSet(uint64_t) const = 0; virtual void UnsetBlankWalletFlag(WalletBatch&) = 0; - virtual void SetMinVersion(enum WalletFeature, WalletBatch* = nullptr) = 0; //! Pass the encryption key to cb(). virtual bool WithEncryptionKey(std::function cb) const = 0; virtual bool HasEncryptionKeys() const = 0; diff --git a/src/wallet/test/wallet_tests.cpp b/src/wallet/test/wallet_tests.cpp index 19feaca2060e..b23b6e946033 100644 --- a/src/wallet/test/wallet_tests.cpp +++ b/src/wallet/test/wallet_tests.cpp @@ -492,7 +492,6 @@ BOOST_FIXTURE_TEST_CASE(wallet_disableprivkeys, TestChain100Setup) const std::shared_ptr wallet = std::make_shared(m_node.chain.get(), "", CreateMockableWalletDatabase()); LOCK(wallet->cs_wallet); wallet->SetWalletFlag(WALLET_FLAG_DESCRIPTORS); - wallet->SetMinVersion(FEATURE_LATEST); wallet->SetWalletFlag(WALLET_FLAG_DISABLE_PRIVATE_KEYS); BOOST_CHECK(!wallet->GetNewDestination(OutputType::BECH32, "")); } diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index c7df818745fa..9e3b9f678aa7 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -639,23 +639,6 @@ void CWallet::SetLastBlockProcessed(int block_height, uint256 block_hash) WriteBestBlock(); } -void CWallet::SetMinVersion(enum WalletFeature nVersion, WalletBatch* batch_in) -{ - LOCK(cs_wallet); - if (nWalletVersion >= nVersion) - return; - WalletLogPrintf("Setting minversion to %d\n", nVersion); - nWalletVersion = nVersion; - - { - WalletBatch* batch = batch_in ? batch_in : new WalletBatch(GetDatabase()); - if (nWalletVersion > 40000) - batch->WriteMinVersion(nWalletVersion); - if (!batch_in) - delete batch; - } -} - std::set CWallet::GetConflicts(const Txid& txid) const { std::set result; @@ -821,9 +804,6 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase) } } - // Encryption was introduced in version 0.4.0 - SetMinVersion(FEATURE_WALLETCRYPT, encrypted_batch); - if (!encrypted_batch->TxnCommit()) { delete encrypted_batch; encrypted_batch = nullptr; @@ -2871,9 +2851,6 @@ std::shared_ptr CWallet::Create(WalletContext& context, const std::stri { LOCK(walletInstance->cs_wallet); - // ensure this wallet.dat can only be opened by clients supporting HD with chain split and expects no default key - walletInstance->SetMinVersion(FEATURE_LATEST); - // Init with passed flags. // Always set the cache upgrade flag as this feature is supported from the beginning. walletInstance->InitWalletFlags(wallet_creation_flags | WALLET_FLAG_LAST_HARDENED_XPUB_CACHED); diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index c7c6c3c10705..b9ca377538b4 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -321,9 +321,6 @@ class CWallet final : public WalletStorage, public interfaces::Chain::Notificati std::atomic m_scanning_progress{0}; friend class WalletRescanReserver; - //! the current wallet version: clients below this version are not able to load the wallet - int nWalletVersion GUARDED_BY(cs_wallet){FEATURE_BASE}; - /** The next scheduled rebroadcast of wallet transactions. */ NodeClock::time_point m_next_resend{GetDefaultNextResend()}; /** Whether this wallet will submit newly created transactions to the node's mempool and @@ -585,8 +582,6 @@ class CWallet final : public WalletStorage, public interfaces::Chain::Notificati //! Upgrade DescriptorCaches void UpgradeDescriptorCache() EXCLUSIVE_LOCKS_REQUIRED(cs_wallet); - bool LoadMinVersion(int nVersion) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet) { AssertLockHeld(cs_wallet); nWalletVersion = nVersion; return true; } - //! Marks destination as previously spent. void LoadAddressPreviouslySpent(const CTxDestination& dest) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet); //! Appends payment request to destination. @@ -822,9 +817,6 @@ class CWallet final : public WalletStorage, public interfaces::Chain::Notificati unsigned int GetKeyPoolSize() const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet); - //! signify that a particular wallet feature is now used. - void SetMinVersion(enum WalletFeature, WalletBatch* batch_in = nullptr) override; - //! Get wallet transactions that conflict with given transaction (spend same outputs) std::set GetConflicts(const Txid& txid) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet); diff --git a/src/wallet/walletdb.cpp b/src/wallet/walletdb.cpp index 2c0073f3568c..79c2af24b297 100644 --- a/src/wallet/walletdb.cpp +++ b/src/wallet/walletdb.cpp @@ -199,11 +199,6 @@ bool WalletBatch::WriteOrderPosNext(int64_t nOrderPosNext) return WriteIC(DBKeys::ORDERPOSNEXT, nOrderPosNext); } -bool WalletBatch::WriteMinVersion(int nVersion) -{ - return WriteIC(DBKeys::MINVERSION, nVersion); -} - bool WalletBatch::WriteActiveScriptPubKeyMan(uint8_t type, const uint256& id, bool internal) { std::string key = internal ? DBKeys::ACTIVEINTERNALSPK : DBKeys::ACTIVEEXTERNALSPK; @@ -442,19 +437,6 @@ bool LoadHDChain(CWallet* pwallet, DataStream& ssValue, std::string& strErr) return true; } -static DBErrors LoadMinVersion(CWallet* pwallet, DatabaseBatch& batch) EXCLUSIVE_LOCKS_REQUIRED(pwallet->cs_wallet) -{ - AssertLockHeld(pwallet->cs_wallet); - int nMinVersion = 0; - if (batch.Read(DBKeys::MINVERSION, nMinVersion)) { - pwallet->WalletLogPrintf("Wallet file version = %d\n", nMinVersion); - if (nMinVersion > FEATURE_LATEST) - return DBErrors::TOO_NEW; - pwallet->LoadMinVersion(nMinVersion); - } - return DBErrors::LOAD_OK; -} - static DBErrors LoadWalletFlags(CWallet* pwallet, DatabaseBatch& batch) EXCLUSIVE_LOCKS_REQUIRED(pwallet->cs_wallet) { AssertLockHeld(pwallet->cs_wallet); @@ -1137,8 +1119,6 @@ DBErrors WalletBatch::LoadWallet(CWallet* pwallet) if (has_last_client) pwallet->WalletLogPrintf("Last client version = %d\n", last_client); try { - if ((result = LoadMinVersion(pwallet, *m_batch)) != DBErrors::LOAD_OK) return result; - // Load wallet flags, so they are known when processing other records. // The FLAGS key is absent during wallet creation. if ((result = LoadWalletFlags(pwallet, *m_batch)) != DBErrors::LOAD_OK) return result; diff --git a/src/wallet/walletdb.h b/src/wallet/walletdb.h index 5327a2cf6919..7a1dac3bce44 100644 --- a/src/wallet/walletdb.h +++ b/src/wallet/walletdb.h @@ -241,8 +241,6 @@ class WalletBatch bool WriteOrderPosNext(int64_t nOrderPosNext); - bool WriteMinVersion(int nVersion); - bool WriteDescriptorKey(const uint256& desc_id, const CPubKey& pubkey, const CPrivKey& privkey); bool WriteCryptedDescriptorKey(const uint256& desc_id, const CPubKey& pubkey, const std::vector& secret); bool WriteDescriptor(const uint256& desc_id, const WalletDescriptor& descriptor); diff --git a/src/wallet/wallettool.cpp b/src/wallet/wallettool.cpp index 228f3efbfb7c..af32986ce65f 100644 --- a/src/wallet/wallettool.cpp +++ b/src/wallet/wallettool.cpp @@ -31,7 +31,6 @@ static void WalletCreate(CWallet* wallet_instance, uint64_t wallet_creation_flag { LOCK(wallet_instance->cs_wallet); - wallet_instance->SetMinVersion(FEATURE_LATEST); wallet_instance->InitWalletFlags(wallet_creation_flags); Assert(wallet_instance->IsWalletFlagSet(WALLET_FLAG_DESCRIPTORS)); diff --git a/test/functional/wallet_createwallet.py b/test/functional/wallet_createwallet.py index a2e7aae33ea4..cf0d8b4e0b85 100755 --- a/test/functional/wallet_createwallet.py +++ b/test/functional/wallet_createwallet.py @@ -167,15 +167,13 @@ def run_test(self): assert_raises_rpc_error(-4, 'descriptors argument must be set to "true"; it is no longer possible to create a legacy wallet.', self.nodes[0].createwallet, wallet_name="legacy", descriptors=False) self.log.info("Check that the version number is being logged correctly") - with node.assert_debug_log(expected_msgs=[], unexpected_msgs=["Last client version = ", "Wallet file version = "]): + with node.assert_debug_log(expected_msgs=[], unexpected_msgs=["Last client version = "]): node.createwallet("version_check") wallet = node.get_wallet_rpc("version_check") - wallet_version = wallet.getwalletinfo()["walletversion"] client_version = node.getnetworkinfo()["version"] wallet.unloadwallet() with node.assert_debug_log( - expected_msgs=[f"Last client version = {client_version}", f"Wallet file version = {wallet_version}"], - unexpected_msgs=["Wallet file version = 10500"] + expected_msgs=[f"Last client version = {client_version}"] ): node.loadwallet("version_check") From 60d1042b9a4db8daf9fffdc29053652e99b7126e Mon Sep 17 00:00:00 2001 From: woltx <94266259+w0xlt@users.noreply.github.com> Date: Tue, 15 Jul 2025 01:14:25 -0700 Subject: [PATCH 0051/2775] wallet: Remove unused `WalletFeature` enums --- src/wallet/walletutil.h | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/src/wallet/walletutil.h b/src/wallet/walletutil.h index ba93a90ed97d..e9e661819e30 100644 --- a/src/wallet/walletutil.h +++ b/src/wallet/walletutil.h @@ -11,24 +11,6 @@ #include namespace wallet { -/** (client) version numbers for particular wallet features */ -enum WalletFeature -{ - FEATURE_BASE = 10500, // the earliest version new wallets supports (only useful for getwalletinfo's clientversion output) - - FEATURE_WALLETCRYPT = 40000, // wallet encryption - FEATURE_COMPRPUBKEY = 60000, // compressed public keys - - FEATURE_HD = 130000, // Hierarchical key derivation after BIP32 (HD Wallet) - - FEATURE_HD_SPLIT = 139900, // Wallet with HD chain split (change outputs will use m/0'/1'/k) - - FEATURE_NO_DEFAULT_KEY = 159900, // Wallet without a default key written - - FEATURE_PRE_SPLIT_KEYPOOL = 169900, // Upgraded to HD SPLIT and can have a pre-split keypool - - FEATURE_LATEST = FEATURE_PRE_SPLIT_KEYPOOL -}; enum WalletFlags : uint64_t { // wallet flags in the upper section (> 1 << 31) will lead to not opening the wallet if flag is unknown From fdbade6f8ded63519b637c8fa6f39914a400ab5e Mon Sep 17 00:00:00 2001 From: Cory Fields Date: Tue, 3 Jun 2025 18:22:19 +0000 Subject: [PATCH 0052/2775] kernel: create monolithic kernel static library --- libbitcoinkernel.pc.in | 1 - src/kernel/CMakeLists.txt | 39 +++++++-------------------------------- 2 files changed, 7 insertions(+), 33 deletions(-) diff --git a/libbitcoinkernel.pc.in b/libbitcoinkernel.pc.in index 6b622c926bea..df73448a3a34 100644 --- a/libbitcoinkernel.pc.in +++ b/libbitcoinkernel.pc.in @@ -7,5 +7,4 @@ Name: @CLIENT_NAME@ kernel library Description: Experimental library for the @CLIENT_NAME@ validation engine. Version: @CLIENT_VERSION_STRING@ Libs: -L${libdir} -lbitcoinkernel -Libs.private: -L${libdir} @LIBS_PRIVATE@ Cflags: -I${includedir} diff --git a/src/kernel/CMakeLists.txt b/src/kernel/CMakeLists.txt index 52e91671dd01..c45ce7819e98 100644 --- a/src/kernel/CMakeLists.txt +++ b/src/kernel/CMakeLists.txt @@ -79,20 +79,23 @@ add_library(bitcoinkernel ../validation.cpp ../validationinterface.cpp ../versionbits.cpp + $ + $ + $ + $ ) target_link_libraries(bitcoinkernel PRIVATE core_interface - bitcoin_clientversion - bitcoin_crypto - leveldb - secp256k1 + secp256k1_objs $<$:bcrypt> $ PUBLIC Boost::headers ) +target_include_directories(bitcoinkernel PRIVATE $) + # libbitcoinkernel requires default symbol visibility, explicitly # specify that here so that things still work even when user # configures with -DREDUCE_EXPORTS=ON @@ -107,34 +110,6 @@ set_target_properties(bitcoinkernel PROPERTIES add_custom_target(libbitcoinkernel) add_dependencies(libbitcoinkernel bitcoinkernel) -# When building the static library, install all static libraries the -# bitcoinkernel depends on. -if(NOT BUILD_SHARED_LIBS) - # Recursively get all the static libraries a target depends on and put them in libs_out - function(get_target_static_link_libs target libs_out) - get_target_property(linked_libraries ${target} LINK_LIBRARIES) - foreach(dep ${linked_libraries}) - if(TARGET ${dep}) - add_dependencies(libbitcoinkernel ${dep}) - get_target_property(dep_type ${dep} TYPE) - if(dep_type STREQUAL "STATIC_LIBRARY") - list(APPEND ${libs_out} ${dep}) - get_target_static_link_libs(${dep} ${libs_out}) - endif() - endif() - endforeach() - set(${libs_out} ${${libs_out}} PARENT_SCOPE) - endfunction() - - set(all_kernel_static_link_libs "") - get_target_static_link_libs(bitcoinkernel all_kernel_static_link_libs) - - install(TARGETS ${all_kernel_static_link_libs} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libbitcoinkernel) - list(TRANSFORM all_kernel_static_link_libs PREPEND "-l") - # LIBS_PRIVATE is substituted in the pkg-config file. - list(JOIN all_kernel_static_link_libs " " LIBS_PRIVATE) -endif() - configure_file(${PROJECT_SOURCE_DIR}/libbitcoinkernel.pc.in ${PROJECT_BINARY_DIR}/libbitcoinkernel.pc @ONLY) install(FILES ${PROJECT_BINARY_DIR}/libbitcoinkernel.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" COMPONENT libbitcoinkernel) From 9ba1fff29e4794615c599e59ef453848a9bdb880 Mon Sep 17 00:00:00 2001 From: stickies-v Date: Mon, 28 Jul 2025 13:42:13 +0100 Subject: [PATCH 0053/2775] kernel: refactor: ConnectTip to pass block pointer by value By passing by value, we can remove the need to allocate a new pointer if the callsite uses move semantics. In the process, simplify naming. --- src/validation.cpp | 24 +++++++++++++----------- src/validation.h | 7 ++++++- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/validation.cpp b/src/validation.cpp index b62691ca4c0a..e339fa774f07 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -3145,7 +3145,12 @@ class ConnectTrace { * * The block is added to connectTrace if connection succeeds. */ -bool Chainstate::ConnectTip(BlockValidationState& state, CBlockIndex* pindexNew, const std::shared_ptr& pblock, ConnectTrace& connectTrace, DisconnectedBlockTransactions& disconnectpool) +bool Chainstate::ConnectTip( + BlockValidationState& state, + CBlockIndex* pindexNew, + std::shared_ptr block_to_connect, + ConnectTrace& connectTrace, + DisconnectedBlockTransactions& disconnectpool) { AssertLockHeld(cs_main); if (m_mempool) AssertLockHeld(m_mempool->cs); @@ -3153,18 +3158,15 @@ bool Chainstate::ConnectTip(BlockValidationState& state, CBlockIndex* pindexNew, assert(pindexNew->pprev == m_chain.Tip()); // Read block from disk. const auto time_1{SteadyClock::now()}; - std::shared_ptr pthisBlock; - if (!pblock) { + if (!block_to_connect) { std::shared_ptr pblockNew = std::make_shared(); if (!m_blockman.ReadBlock(*pblockNew, *pindexNew)) { return FatalError(m_chainman.GetNotifications(), state, _("Failed to read block.")); } - pthisBlock = pblockNew; + block_to_connect = std::move(pblockNew); } else { LogDebug(BCLog::BENCH, " - Using cached block\n"); - pthisBlock = pblock; } - const CBlock& blockConnecting = *pthisBlock; // Apply the block atomically to the chain state. const auto time_2{SteadyClock::now()}; SteadyClock::time_point time_3; @@ -3174,9 +3176,9 @@ bool Chainstate::ConnectTip(BlockValidationState& state, CBlockIndex* pindexNew, Ticks(time_2 - time_1)); { CCoinsViewCache view(&CoinsTip()); - bool rv = ConnectBlock(blockConnecting, state, pindexNew, view); + bool rv = ConnectBlock(*block_to_connect, state, pindexNew, view); if (m_chainman.m_options.signals) { - m_chainman.m_options.signals->BlockChecked(blockConnecting, state); + m_chainman.m_options.signals->BlockChecked(*block_to_connect, state); } if (!rv) { if (state.IsInvalid()) @@ -3212,8 +3214,8 @@ bool Chainstate::ConnectTip(BlockValidationState& state, CBlockIndex* pindexNew, Ticks(m_chainman.time_chainstate) / m_chainman.num_blocks_total); // Remove conflicting transactions from the mempool.; if (m_mempool) { - m_mempool->removeForBlock(blockConnecting.vtx, pindexNew->nHeight); - disconnectpool.removeForBlock(blockConnecting.vtx); + m_mempool->removeForBlock(block_to_connect->vtx, pindexNew->nHeight); + disconnectpool.removeForBlock(block_to_connect->vtx); } // Update m_chain & related variables. m_chain.SetTip(*pindexNew); @@ -3239,7 +3241,7 @@ bool Chainstate::ConnectTip(BlockValidationState& state, CBlockIndex* pindexNew, m_chainman.MaybeCompleteSnapshotValidation(); } - connectTrace.BlockConnected(pindexNew, std::move(pthisBlock)); + connectTrace.BlockConnected(pindexNew, std::move(block_to_connect)); return true; } diff --git a/src/validation.h b/src/validation.h index c25dd2de2d96..acdd53cc2a2c 100644 --- a/src/validation.h +++ b/src/validation.h @@ -787,7 +787,12 @@ class Chainstate protected: bool ActivateBestChainStep(BlockValidationState& state, CBlockIndex* pindexMostWork, const std::shared_ptr& pblock, bool& fInvalidFound, ConnectTrace& connectTrace) EXCLUSIVE_LOCKS_REQUIRED(cs_main, m_mempool->cs); - bool ConnectTip(BlockValidationState& state, CBlockIndex* pindexNew, const std::shared_ptr& pblock, ConnectTrace& connectTrace, DisconnectedBlockTransactions& disconnectpool) EXCLUSIVE_LOCKS_REQUIRED(cs_main, m_mempool->cs); + bool ConnectTip( + BlockValidationState& state, + CBlockIndex* pindexNew, + std::shared_ptr block_to_connect, + ConnectTrace& connectTrace, + DisconnectedBlockTransactions& disconnectpool) EXCLUSIVE_LOCKS_REQUIRED(cs_main, m_mempool->cs); void InvalidBlockFound(CBlockIndex* pindex, const BlockValidationState& state) EXCLUSIVE_LOCKS_REQUIRED(cs_main); CBlockIndex* FindMostWorkChain() EXCLUSIVE_LOCKS_REQUIRED(cs_main); From ab145cb3b471d07a2e8ee79edde46ec67f47d580 Mon Sep 17 00:00:00 2001 From: Sergi Delgado Segura Date: Tue, 12 Mar 2024 16:04:20 -0400 Subject: [PATCH 0054/2775] Updates CBlockIndexWorkComparator outdated comment --- src/node/blockstorage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/node/blockstorage.cpp b/src/node/blockstorage.cpp index 3c01ff2e8d62..81b55c2440f3 100644 --- a/src/node/blockstorage.cpp +++ b/src/node/blockstorage.cpp @@ -161,7 +161,7 @@ bool CBlockIndexWorkComparator::operator()(const CBlockIndex* pa, const CBlockIn if (pa->nChainWork > pb->nChainWork) return false; if (pa->nChainWork < pb->nChainWork) return true; - // ... then by earliest time received, ... + // ... then by earliest activatable time, ... if (pa->nSequenceId < pb->nSequenceId) return false; if (pa->nSequenceId > pb->nSequenceId) return true; From 5370bed21e0b04feca6ec09738ecbe792095a338 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Fri, 19 Jan 2024 16:02:57 -0500 Subject: [PATCH 0055/2775] test: add functional test for complex reorgs --- test/functional/feature_chain_tiebreaks.py | 103 +++++++++++++++++++++ test/functional/test_runner.py | 1 + 2 files changed, 104 insertions(+) create mode 100755 test/functional/feature_chain_tiebreaks.py diff --git a/test/functional/feature_chain_tiebreaks.py b/test/functional/feature_chain_tiebreaks.py new file mode 100755 index 000000000000..cb1f9ebec9c3 --- /dev/null +++ b/test/functional/feature_chain_tiebreaks.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +# Copyright (c) The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +"""Test that the correct active block is chosen in complex reorgs.""" + +from test_framework.blocktools import create_block +from test_framework.messages import CBlockHeader +from test_framework.p2p import P2PDataStore +from test_framework.test_framework import BitcoinTestFramework +from test_framework.util import assert_equal + +class ChainTiebreaksTest(BitcoinTestFramework): + def set_test_params(self): + self.num_nodes = 2 + self.setup_clean_chain = True + + @staticmethod + def send_headers(node, blocks): + """Submit headers for blocks to node.""" + for block in blocks: + # Use RPC rather than P2P, to prevent the message from being interpreted as a block + # announcement. + node.submitheader(hexdata=CBlockHeader(block).serialize().hex()) + + def run_test(self): + node = self.nodes[0] + # Add P2P connection to bitcoind + peer = node.add_p2p_connection(P2PDataStore()) + + self.log.info('Precomputing blocks') + # + # /- B3 -- B7 + # B1 \- B8 + # / \ + # / \ B4 -- B9 + # B0 \- B10 + # \ + # \ /- B5 + # B2 + # \- B6 + # + blocks = [] + + # Construct B0, building off genesis. + start_height = node.getblockcount() + blocks.append(create_block( + hashprev=int(node.getbestblockhash(), 16), + tmpl={"height": start_height + 1} + )) + blocks[-1].solve() + + # Construct B1-B10. + for i in range(1, 11): + blocks.append(create_block( + hashprev=blocks[(i - 1) >> 1].hash_int, + tmpl={ + "height": start_height + (i + 1).bit_length(), + # Make sure each block has a different hash. + "curtime": blocks[-1].nTime + 1, + } + )) + blocks[-1].solve() + + self.log.info('Make sure B0 is accepted normally') + peer.send_blocks_and_test([blocks[0]], node, success=True) + # B0 must be active chain now. + assert_equal(node.getbestblockhash(), blocks[0].hash_hex) + + self.log.info('Send B1 and B2 headers, and then blocks in opposite order') + self.send_headers(node, blocks[1:3]) + peer.send_blocks_and_test([blocks[2]], node, success=True) + peer.send_blocks_and_test([blocks[1]], node, success=False) + # B2 must be active chain now, as full data for B2 was received first. + assert_equal(node.getbestblockhash(), blocks[2].hash_hex) + + self.log.info('Send all further headers in order') + self.send_headers(node, blocks[3:]) + # B2 is still the active chain, headers don't change this. + assert_equal(node.getbestblockhash(), blocks[2].hash_hex) + + self.log.info('Send blocks B7-B10') + peer.send_blocks_and_test([blocks[7]], node, success=False) + peer.send_blocks_and_test([blocks[8]], node, success=False) + peer.send_blocks_and_test([blocks[9]], node, success=False) + peer.send_blocks_and_test([blocks[10]], node, success=False) + # B2 is still the active chain, as B7-B10 have missing parents. + assert_equal(node.getbestblockhash(), blocks[2].hash_hex) + + self.log.info('Send parents B3-B4 of B8-B10 in reverse order') + peer.send_blocks_and_test([blocks[4]], node, success=False, force_send=True) + peer.send_blocks_and_test([blocks[3]], node, success=False, force_send=True) + # B9 is now active. Despite B7 being received earlier, the missing parent. + assert_equal(node.getbestblockhash(), blocks[9].hash_hex) + + self.log.info('Invalidate B9-B10') + node.invalidateblock(blocks[9].hash_hex) + node.invalidateblock(blocks[10].hash_hex) + # B7 is now active. + assert_equal(node.getbestblockhash(), blocks[7].hash_hex) + +if __name__ == '__main__': + ChainTiebreaksTest(__file__).main() diff --git a/test/functional/test_runner.py b/test/functional/test_runner.py index 44c2885bdf89..3cf3e243600f 100755 --- a/test/functional/test_runner.py +++ b/test/functional/test_runner.py @@ -320,6 +320,7 @@ 'feature_includeconf.py', 'feature_addrman.py', 'feature_asmap.py', + 'feature_chain_tiebreaks.py', 'feature_fastprune.py', 'feature_framework_miniwallet.py', 'mempool_unbroadcast.py', From 8b91883a23aac64a37d929eeae81325e221d177d Mon Sep 17 00:00:00 2001 From: Sergi Delgado Segura Date: Thu, 14 Mar 2024 13:48:43 -0400 Subject: [PATCH 0056/2775] Set the same best tip on restart if two candidates have the same work Before this, if we had two (or more) same work tip candidates and restarted our node, it could be the case that the block set as tip after bootstrap didn't match the one before stopping. That's because the work and `nSequenceId` of both block will be the same (the latter is only kept in memory), so the active chain after restart would have depended on what tip candidate was loaded first. This makes sure that we are consistent over reboots. --- src/chain.h | 4 +++- src/node/blockstorage.cpp | 5 +++-- src/validation.cpp | 18 ++++++++++++++++-- src/validation.h | 7 ++++--- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/chain.h b/src/chain.h index f5bfdb2fb4b0..d348fefe2a21 100644 --- a/src/chain.h +++ b/src/chain.h @@ -191,7 +191,9 @@ class CBlockIndex uint32_t nNonce{0}; //! (memory only) Sequential id assigned to distinguish order in which blocks are received. - int32_t nSequenceId{0}; + //! Initialized to 1 when loading blocks from disk, except for blocks belonging to the best chain + //! which overwrite it to 0. + int32_t nSequenceId{1}; //! (memory only) Maximum nTime in the chain up to and including this block. unsigned int nTimeMax{0}; diff --git a/src/node/blockstorage.cpp b/src/node/blockstorage.cpp index 81b55c2440f3..ac8839854b85 100644 --- a/src/node/blockstorage.cpp +++ b/src/node/blockstorage.cpp @@ -166,7 +166,8 @@ bool CBlockIndexWorkComparator::operator()(const CBlockIndex* pa, const CBlockIn if (pa->nSequenceId > pb->nSequenceId) return true; // Use pointer address as tie breaker (should only happen with blocks - // loaded from disk, as those all have id 0). + // loaded from disk, as those share the same id: 0 for blocks on the + // best chain, 1 for all others). if (pa < pb) return false; if (pa > pb) return true; @@ -217,7 +218,7 @@ CBlockIndex* BlockManager::AddToBlockIndex(const CBlockHeader& block, CBlockInde // We assign the sequence id to blocks only when the full data is available, // to avoid miners withholding blocks but broadcasting headers, to get a // competitive advantage. - pindexNew->nSequenceId = 0; + pindexNew->nSequenceId = 1; pindexNew->phashBlock = &((*mi).first); BlockMap::iterator miPrev = m_block_index.find(block.hashPrevBlock); diff --git a/src/validation.cpp b/src/validation.cpp index b62691ca4c0a..f9a50d84e6b4 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -4680,7 +4680,7 @@ bool Chainstate::LoadChainTip() AssertLockHeld(cs_main); const CCoinsViewCache& coins_cache = CoinsTip(); assert(!coins_cache.GetBestBlock().IsNull()); // Never called when the coins view is empty - const CBlockIndex* tip = m_chain.Tip(); + CBlockIndex* tip = m_chain.Tip(); if (tip && tip->GetBlockHash() == coins_cache.GetBestBlock()) { return true; @@ -4692,6 +4692,20 @@ bool Chainstate::LoadChainTip() return false; } m_chain.SetTip(*pindex); + tip = m_chain.Tip(); + + // Make sure our chain tip before shutting down scores better than any other candidate + // to maintain a consistent best tip over reboots in case of a tie. + auto target = tip; + while (target) { + target->nSequenceId = 0; + target = target->pprev; + } + + // Block index candidates are loaded before the chain tip, so we need to replace this entry + // Otherwise the scoring will be based on the memory address location instead of the nSequenceId + setBlockIndexCandidates.erase(tip); + TryAddBlockIndexCandidate(tip); PruneBlockIndexCandidates(); tip = m_chain.Tip(); @@ -5343,7 +5357,7 @@ void ChainstateManager::CheckBlockIndex() const } } } - if (!pindex->HaveNumChainTxs()) assert(pindex->nSequenceId <= 0); // nSequenceId can't be set positive for blocks that aren't linked (negative is used for preciousblock) + if (!pindex->HaveNumChainTxs()) assert(pindex->nSequenceId <= 1); // nSequenceId can't be set higher than 1 for blocks that aren't linked (negative is used for preciousblock, 0 for active chain) // VALID_TRANSACTIONS is equivalent to nTx > 0 for all nodes (whether or not pruning has occurred). // HAVE_DATA is only equivalent to nTx > 0 (or VALID_TRANSACTIONS) if no pruning has occurred. if (!m_blockman.m_have_pruned) { diff --git a/src/validation.h b/src/validation.h index c25dd2de2d96..de3711b5c8c6 100644 --- a/src/validation.h +++ b/src/validation.h @@ -1034,8 +1034,9 @@ class ChainstateManager * Every received block is assigned a unique and increasing identifier, so we * know which one to give priority in case of a fork. */ - /** Blocks loaded from disk are assigned id 0, so start the counter at 1. */ - int32_t nBlockSequenceId GUARDED_BY(::cs_main) = 1; + /** Blocks loaded from disk are assigned id 1 (0 if they belong to the best + * chain loaded from disk), so start the counter at 2. **/ + int32_t nBlockSequenceId GUARDED_BY(::cs_main) = 2; /** Decreasing counter (used by subsequent preciousblock calls). */ int32_t nBlockReverseSequenceId = -1; /** chainwork for the last block that preciousblock has been applied to. */ @@ -1046,7 +1047,7 @@ class ChainstateManager void ResetBlockSequenceCounters() EXCLUSIVE_LOCKS_REQUIRED(::cs_main) { AssertLockHeld(::cs_main); - nBlockSequenceId = 1; + nBlockSequenceId = 2; nBlockReverseSequenceId = -1; } From 18524b072e6bdd590a9f6badd15d897b5ef5ce54 Mon Sep 17 00:00:00 2001 From: Sergi Delgado Segura Date: Tue, 28 Jan 2025 12:12:36 -0500 Subject: [PATCH 0057/2775] Make nSequenceId init value constants Make it easier to follow what the values come without having to go over the comments, plus easier to maintain --- src/chain.h | 9 ++++++--- src/node/blockstorage.cpp | 2 +- src/validation.cpp | 6 ++++-- src/validation.h | 9 +++++---- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/chain.h b/src/chain.h index d348fefe2a21..8aa1ebb546a1 100644 --- a/src/chain.h +++ b/src/chain.h @@ -35,6 +35,9 @@ static constexpr int64_t MAX_FUTURE_BLOCK_TIME = 2 * 60 * 60; * MAX_FUTURE_BLOCK_TIME. */ static constexpr int64_t TIMESTAMP_WINDOW = MAX_FUTURE_BLOCK_TIME; +//! Init values for CBlockIndex nSequenceId when loaded from disk +static constexpr int32_t SEQ_ID_BEST_CHAIN_FROM_DISK = 0; +static constexpr int32_t SEQ_ID_INIT_FROM_DISK = 1; /** * Maximum gap between node time and block time used @@ -191,9 +194,9 @@ class CBlockIndex uint32_t nNonce{0}; //! (memory only) Sequential id assigned to distinguish order in which blocks are received. - //! Initialized to 1 when loading blocks from disk, except for blocks belonging to the best chain - //! which overwrite it to 0. - int32_t nSequenceId{1}; + //! Initialized to SEQ_ID_INIT_FROM_DISK{1} when loading blocks from disk, except for blocks + //! belonging to the best chain which overwrite it to SEQ_ID_BEST_CHAIN_FROM_DISK{0}. + int32_t nSequenceId{SEQ_ID_INIT_FROM_DISK}; //! (memory only) Maximum nTime in the chain up to and including this block. unsigned int nTimeMax{0}; diff --git a/src/node/blockstorage.cpp b/src/node/blockstorage.cpp index ac8839854b85..e1b54175dc22 100644 --- a/src/node/blockstorage.cpp +++ b/src/node/blockstorage.cpp @@ -218,7 +218,7 @@ CBlockIndex* BlockManager::AddToBlockIndex(const CBlockHeader& block, CBlockInde // We assign the sequence id to blocks only when the full data is available, // to avoid miners withholding blocks but broadcasting headers, to get a // competitive advantage. - pindexNew->nSequenceId = 1; + pindexNew->nSequenceId = SEQ_ID_INIT_FROM_DISK; pindexNew->phashBlock = &((*mi).first); BlockMap::iterator miPrev = m_block_index.find(block.hashPrevBlock); diff --git a/src/validation.cpp b/src/validation.cpp index f9a50d84e6b4..c6137ddb1374 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -4698,7 +4698,7 @@ bool Chainstate::LoadChainTip() // to maintain a consistent best tip over reboots in case of a tie. auto target = tip; while (target) { - target->nSequenceId = 0; + target->nSequenceId = SEQ_ID_BEST_CHAIN_FROM_DISK; target = target->pprev; } @@ -5357,7 +5357,9 @@ void ChainstateManager::CheckBlockIndex() const } } } - if (!pindex->HaveNumChainTxs()) assert(pindex->nSequenceId <= 1); // nSequenceId can't be set higher than 1 for blocks that aren't linked (negative is used for preciousblock, 0 for active chain) + // nSequenceId can't be set higher than SEQ_ID_INIT_FROM_DISK{1} for blocks that aren't linked + // (negative is used for preciousblock, SEQ_ID_BEST_CHAIN_FROM_DISK{0} for active chain when loaded from disk) + if (!pindex->HaveNumChainTxs()) assert(pindex->nSequenceId <= SEQ_ID_INIT_FROM_DISK); // VALID_TRANSACTIONS is equivalent to nTx > 0 for all nodes (whether or not pruning has occurred). // HAVE_DATA is only equivalent to nTx > 0 (or VALID_TRANSACTIONS) if no pruning has occurred. if (!m_blockman.m_have_pruned) { diff --git a/src/validation.h b/src/validation.h index de3711b5c8c6..70c20ac135c7 100644 --- a/src/validation.h +++ b/src/validation.h @@ -1034,9 +1034,10 @@ class ChainstateManager * Every received block is assigned a unique and increasing identifier, so we * know which one to give priority in case of a fork. */ - /** Blocks loaded from disk are assigned id 1 (0 if they belong to the best - * chain loaded from disk), so start the counter at 2. **/ - int32_t nBlockSequenceId GUARDED_BY(::cs_main) = 2; + /** Blocks loaded from disk are assigned id SEQ_ID_INIT_FROM_DISK{1} + * (SEQ_ID_BEST_CHAIN_FROM_DISK{0} if they belong to the best chain loaded from disk), + * so start the counter after that. **/ + int32_t nBlockSequenceId GUARDED_BY(::cs_main) = SEQ_ID_INIT_FROM_DISK + 1; /** Decreasing counter (used by subsequent preciousblock calls). */ int32_t nBlockReverseSequenceId = -1; /** chainwork for the last block that preciousblock has been applied to. */ @@ -1047,7 +1048,7 @@ class ChainstateManager void ResetBlockSequenceCounters() EXCLUSIVE_LOCKS_REQUIRED(::cs_main) { AssertLockHeld(::cs_main); - nBlockSequenceId = 2; + nBlockSequenceId = SEQ_ID_INIT_FROM_DISK + 1; nBlockReverseSequenceId = -1; } From 09c95f21e71d196120e6c9d0b1d1923a4927408d Mon Sep 17 00:00:00 2001 From: Sergi Delgado Segura Date: Thu, 14 Mar 2024 13:53:09 -0400 Subject: [PATCH 0058/2775] test: Adds block tiebreak over restarts tests Adds tests to make sure we are consistent on activating the same chain over a node restart if two or more candidates have the same work when the node is shutdown --- test/functional/feature_chain_tiebreaks.py | 50 +++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/test/functional/feature_chain_tiebreaks.py b/test/functional/feature_chain_tiebreaks.py index cb1f9ebec9c3..707c99473cf6 100755 --- a/test/functional/feature_chain_tiebreaks.py +++ b/test/functional/feature_chain_tiebreaks.py @@ -23,7 +23,7 @@ def send_headers(node, blocks): # announcement. node.submitheader(hexdata=CBlockHeader(block).serialize().hex()) - def run_test(self): + def test_chain_split_in_memory(self): node = self.nodes[0] # Add P2P connection to bitcoind peer = node.add_p2p_connection(P2PDataStore()) @@ -99,5 +99,53 @@ def run_test(self): # B7 is now active. assert_equal(node.getbestblockhash(), blocks[7].hash_hex) + # Invalidate blocks to start fresh on the next test + node.invalidateblock(blocks[0].hash_hex) + + def test_chain_split_from_disk(self): + node = self.nodes[0] + peer = node.add_p2p_connection(P2PDataStore()) + + self.log.info('Precomputing blocks') + # + # A1 + # / + # G + # \ + # A2 + # + blocks = [] + + # Construct two blocks building from genesis. + start_height = node.getblockcount() + genesis_block = node.getblock(node.getblockhash(start_height)) + prev_time = genesis_block["time"] + + for i in range(0, 2): + blocks.append(create_block( + hashprev=int(genesis_block["hash"], 16), + tmpl={"height": start_height + 1, + # Make sure each block has a different hash. + "curtime": prev_time + i + 1, + } + )) + blocks[-1].solve() + + # Send blocks and test the last one is not connected + self.log.info('Send A1 and A2. Make sure that only the former connects') + peer.send_blocks_and_test([blocks[0]], node, success=True) + peer.send_blocks_and_test([blocks[1]], node, success=False) + + self.log.info('Restart the node and check that the best tip before restarting matched the ones afterwards') + # Restart and check enough times for this to eventually fail if the logic is broken + for _ in range(10): + self.restart_node(0) + assert_equal(blocks[0].hash_hex, node.getbestblockhash()) + + def run_test(self): + self.test_chain_split_in_memory() + self.test_chain_split_from_disk() + + if __name__ == '__main__': ChainTiebreaksTest(__file__).main() From 0465574c127907df9b764055a585e8281bae8d1d Mon Sep 17 00:00:00 2001 From: Sergi Delgado Segura Date: Fri, 20 Jun 2025 10:56:26 -0400 Subject: [PATCH 0059/2775] test: Fixes send_blocks_and_test docs It's not true that if success=False the tip doesn't advance. It doesn'test advance to the provided tip, but it can advance to a competing one --- test/functional/test_framework/p2p.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/functional/test_framework/p2p.py b/test/functional/test_framework/p2p.py index 610aa4ccca29..7aacf66d463f 100755 --- a/test/functional/test_framework/p2p.py +++ b/test/functional/test_framework/p2p.py @@ -866,8 +866,8 @@ def send_blocks_and_test(self, blocks, node, *, success=True, force_send=False, - the on_getheaders handler will ensure that any getheaders are responded to - if force_send is False: wait for getdata for each of the blocks. The on_getdata handler will ensure that any getdata messages are responded to. Otherwise send the full block unsolicited. - - if success is True: assert that the node's tip advances to the most recent block - - if success is False: assert that the node's tip doesn't advance + - if success is True: assert that the node's tip is the last block in blocks at the end of the operation. + - if success is False: assert that the node's tip isn't the last block in blocks at the end of the operation - if reject_reason is set: assert that the correct reject message is logged""" with p2p_lock: From 616bc22f131132b9239ef362dca8c6bce000a539 Mon Sep 17 00:00:00 2001 From: Eugene Siegel Date: Fri, 18 Jul 2025 09:27:50 -0400 Subject: [PATCH 0060/2775] test: remove noexcept(false) comment in ~DebugLogHelper --- src/test/util/logging.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/util/logging.h b/src/test/util/logging.h index 5d7e4f91e0ff..62b11c28410b 100644 --- a/src/test/util/logging.h +++ b/src/test/util/logging.h @@ -33,8 +33,6 @@ class DebugLogHelper public: explicit DebugLogHelper(std::string message, MatchFn match = [](const std::string*){ return true; }); - - //! Mark as noexcept(false) to catch any thrown exceptions. ~DebugLogHelper() noexcept(false) { check_found(); } }; From b8e92fb3d4137f91fe6a54829867fc54357da648 Mon Sep 17 00:00:00 2001 From: Eugene Siegel Date: Fri, 25 Jul 2025 16:39:33 -0400 Subject: [PATCH 0061/2775] log: avoid double hashing in SourceLocationHasher Co-Authored-By: l0rinc --- src/logging.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/logging.h b/src/logging.h index c801e94e2899..33742dcbe685 100644 --- a/src/logging.h +++ b/src/logging.h @@ -46,10 +46,10 @@ struct SourceLocationHasher { size_t operator()(const std::source_location& s) const noexcept { // Use CSipHasher(0, 0) as a simple way to get uniform distribution. - return static_cast(CSipHasher(0, 0) - .Write(std::hash{}(s.file_name())) - .Write(s.line()) - .Finalize()); + return size_t(CSipHasher(0, 0) + .Write(s.line()) + .Write(MakeUCharSpan(std::string_view{s.file_name()})) + .Finalize()); } }; From 5f70bc80df06ca85d44e8201d47e7086e971fdea Mon Sep 17 00:00:00 2001 From: Eugene Siegel Date: Fri, 18 Jul 2025 09:43:43 -0400 Subject: [PATCH 0062/2775] log: remove const qualifier from arguments in LogPrintFormatInternal Co-Authored-By: l0rinc --- src/logging.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/logging.h b/src/logging.h index 33742dcbe685..c753172545cd 100644 --- a/src/logging.h +++ b/src/logging.h @@ -343,7 +343,7 @@ static inline bool LogAcceptCategory(BCLog::LogFlags category, BCLog::Level leve bool GetLogCategory(BCLog::LogFlags& flag, std::string_view str); template -inline void LogPrintFormatInternal(std::source_location&& source_loc, const BCLog::LogFlags flag, const BCLog::Level level, const bool should_ratelimit, util::ConstevalFormatString fmt, const Args&... args) +inline void LogPrintFormatInternal(std::source_location&& source_loc, BCLog::LogFlags flag, BCLog::Level level, bool should_ratelimit, util::ConstevalFormatString fmt, const Args&... args) { if (LogInstance().Enabled()) { std::string log_msg; From 8319a134684df2240057a5e8afaa6ae441fb8a58 Mon Sep 17 00:00:00 2001 From: Eugene Siegel Date: Fri, 18 Jul 2025 10:04:35 -0400 Subject: [PATCH 0063/2775] log: clarify RATELIMIT_MAX_BYTES comment, use RATELIMIT_WINDOW Co-Authored-By: stickies-v --- src/init.cpp | 2 +- src/logging.h | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/init.cpp b/src/init.cpp index cc9f8160a3b7..b48d3cc0710b 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1384,7 +1384,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) LogInstance().SetRateLimiting(std::make_unique( [&scheduler](auto func, auto window) { scheduler.scheduleEvery(std::move(func), window); }, BCLog::RATELIMIT_MAX_BYTES, - 1h)); + BCLog::RATELIMIT_WINDOW)); assert(!node.validation_signals); node.validation_signals = std::make_unique(std::make_unique(scheduler)); diff --git a/src/logging.h b/src/logging.h index c753172545cd..106de1f8d309 100644 --- a/src/logging.h +++ b/src/logging.h @@ -104,7 +104,8 @@ namespace BCLog { }; constexpr auto DEFAULT_LOG_LEVEL{Level::Debug}; constexpr size_t DEFAULT_MAX_LOG_BUFFER{1'000'000}; // buffer up to 1MB of log data prior to StartLogging - constexpr uint64_t RATELIMIT_MAX_BYTES{1024 * 1024}; // maximum number of bytes that can be logged within one window + constexpr uint64_t RATELIMIT_MAX_BYTES{1024 * 1024}; // maximum number of bytes per source location that can be logged within the RATELIMIT_WINDOW + constexpr auto RATELIMIT_WINDOW{1h}; // time window after which log ratelimit stats are reset //! Keeps track of an individual source location and how many available bytes are left for logging from it. class LogLimitStats From 1b40dc02a6a292239037ac5a44e0d0c9506d5fa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc?= Date: Sat, 19 Jul 2025 17:19:21 -0700 Subject: [PATCH 0064/2775] refactor: extract `LargeCoinsCacheThreshold` from `GetCoinsCacheSizeState` Move-only commit, enabled reusing the large cache size calculation logic later. The only difference is the removal of the `static` keyword (since in a constexpr function it's a C++23 extension) --- src/validation.cpp | 7 +------ src/validation.h | 10 ++++++++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/validation.cpp b/src/validation.cpp index b62691ca4c0a..c8c496a59abb 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -2786,15 +2786,10 @@ CoinsCacheSizeState Chainstate::GetCoinsCacheSizeState( int64_t nTotalSpace = max_coins_cache_size_bytes + std::max(int64_t(max_mempool_size_bytes) - nMempoolUsage, 0); - //! No need to periodic flush if at least this much space still available. - static constexpr int64_t MAX_BLOCK_COINSDB_USAGE_BYTES = 10 * 1024 * 1024; // 10MB - int64_t large_threshold = - std::max((9 * nTotalSpace) / 10, nTotalSpace - MAX_BLOCK_COINSDB_USAGE_BYTES); - if (cacheSize > nTotalSpace) { LogPrintf("Cache size (%s) exceeds total space (%s)\n", cacheSize, nTotalSpace); return CoinsCacheSizeState::CRITICAL; - } else if (cacheSize > large_threshold) { + } else if (cacheSize > LargeCoinsCacheThreshold(nTotalSpace)) { return CoinsCacheSizeState::LARGE; } return CoinsCacheSizeState::OK; diff --git a/src/validation.h b/src/validation.h index c25dd2de2d96..8998dccedcf0 100644 --- a/src/validation.h +++ b/src/validation.h @@ -35,6 +35,7 @@ #include #include +#include #include #include #include @@ -503,6 +504,15 @@ enum class CoinsCacheSizeState OK = 0 }; +constexpr int64_t LargeCoinsCacheThreshold(int64_t nTotalSpace) noexcept +{ + //! No need to periodic flush if at least this much space still available. + constexpr int64_t MAX_BLOCK_COINSDB_USAGE_BYTES = 10 * 1024 * 1024; // 10MB + int64_t large_threshold = + std::max((9 * nTotalSpace) / 10, nTotalSpace - MAX_BLOCK_COINSDB_USAGE_BYTES); + return large_threshold; +} + /** * Chainstate stores and provides an API to update our local knowledge of the * current best chain. From 64ed0fa6b7a2b637f236c3abf2f045adf6a067cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc?= Date: Sat, 19 Jul 2025 17:20:33 -0700 Subject: [PATCH 0065/2775] refactor: modernize `LargeCoinsCacheThreshold` * parameter name uses underscores * commit message typo fixed and compacted * used `10_MiB` to avoid having to comment * swapped order of operands in (9 * x / 10) to make it obvious that we're calculating 90% * inlined return value --- src/validation.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/validation.h b/src/validation.h index 8998dccedcf0..6be6ae287fce 100644 --- a/src/validation.h +++ b/src/validation.h @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -504,13 +505,12 @@ enum class CoinsCacheSizeState OK = 0 }; -constexpr int64_t LargeCoinsCacheThreshold(int64_t nTotalSpace) noexcept +constexpr int64_t LargeCoinsCacheThreshold(int64_t total_space) noexcept { - //! No need to periodic flush if at least this much space still available. - constexpr int64_t MAX_BLOCK_COINSDB_USAGE_BYTES = 10 * 1024 * 1024; // 10MB - int64_t large_threshold = - std::max((9 * nTotalSpace) / 10, nTotalSpace - MAX_BLOCK_COINSDB_USAGE_BYTES); - return large_threshold; + // No periodic flush needed if at least this much space is free + constexpr int64_t MAX_BLOCK_COINSDB_USAGE_BYTES{int64_t(10_MiB)}; + return std::max((total_space * 9) / 10, + total_space - MAX_BLOCK_COINSDB_USAGE_BYTES); } /** From 554befd8738ea993b3b555e7366558a9c32c915c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc?= Date: Sat, 19 Jul 2025 17:16:52 -0700 Subject: [PATCH 0066/2775] test: revive `getcoinscachesizestate` After the changes in https://github.com/bitcoin/bitcoin/pull/25325 `getcoinscachesizestate` always end the test early, see: https://maflcko.github.io/b-c-cov/test_bitcoin.coverage/src/test/validation_flush_tests.cpp.gcov.html The test revival was extracted from a related PR where it was discovered, see: https://github.com/bitcoin/bitcoin/pull/28531#discussion_r2109417797 Co-authored-by: Larry Ruane --- src/test/validation_flush_tests.cpp | 165 +++++++--------------------- 1 file changed, 38 insertions(+), 127 deletions(-) diff --git a/src/test/validation_flush_tests.cpp b/src/test/validation_flush_tests.cpp index 4d6017a0e30a..2477cb19d603 100644 --- a/src/test/validation_flush_tests.cpp +++ b/src/test/validation_flush_tests.cpp @@ -1,7 +1,7 @@ -// Copyright (c) 2019-2022 The Bitcoin Core developers +// Copyright (c) 2019-present 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 #include #include @@ -12,145 +12,56 @@ BOOST_FIXTURE_TEST_SUITE(validation_flush_tests, TestingSetup) -//! Test utilities for detecting when we need to flush the coins cache based -//! on estimated memory usage. -//! -//! @sa Chainstate::GetCoinsCacheSizeState() -//! +//! Verify that Chainstate::GetCoinsCacheSizeState() switches from OK→LARGE→CRITICAL +//! at the expected utilization thresholds, first with *no* mempool head-room, +//! then with additional mempool head-room. BOOST_AUTO_TEST_CASE(getcoinscachesizestate) { Chainstate& chainstate{m_node.chainman->ActiveChainstate()}; - constexpr bool is_64_bit = sizeof(void*) == 8; - LOCK(::cs_main); - auto& view = chainstate.CoinsTip(); - - // The number of bytes consumed by coin's heap data, i.e. - // CScript (prevector<36, unsigned char>) when assigned 56 bytes of data per above. - // See also: Coin::DynamicMemoryUsage(). - constexpr unsigned int COIN_SIZE = is_64_bit ? 80 : 64; - - auto print_view_mem_usage = [](CCoinsViewCache& view) { - BOOST_TEST_MESSAGE("CCoinsViewCache memory usage: " << view.DynamicMemoryUsage()); - }; - - // PoolResource defaults to 256 KiB that will be allocated, so we'll take that and make it a bit larger. - constexpr size_t MAX_COINS_CACHE_BYTES = 262144 + 512; - - // Without any coins in the cache, we shouldn't need to flush. - BOOST_TEST( - chainstate.GetCoinsCacheSizeState(MAX_COINS_CACHE_BYTES, /*max_mempool_size_bytes=*/ 0) != CoinsCacheSizeState::CRITICAL); - - // If the initial memory allocations of cacheCoins don't match these common - // cases, we can't really continue to make assertions about memory usage. - // End the test early. - if (view.DynamicMemoryUsage() != 32 && view.DynamicMemoryUsage() != 16) { - // Add a bunch of coins to see that we at least flip over to CRITICAL. - - for (int i{0}; i < 1000; ++i) { - const COutPoint res = AddTestCoin(m_rng, view); - BOOST_CHECK_EQUAL(view.AccessCoin(res).DynamicMemoryUsage(), COIN_SIZE); + CCoinsViewCache& view{chainstate.CoinsTip()}; + + // Sanity: an empty cache should be ≲ 1 chunk (~ 256 KiB). + BOOST_CHECK_LT(view.DynamicMemoryUsage() / (256 * 1024.0), 1.1); + + constexpr size_t MAX_COINS_BYTES{8_MiB}; + constexpr size_t MAX_MEMPOOL_BYTES{4_MiB}; + constexpr size_t MAX_ATTEMPTS{50'000}; + + // Run the same growth-path twice: first with 0 head-room, then with extra head-room + for (size_t max_mempool_size_bytes : {size_t{0}, MAX_MEMPOOL_BYTES}) { + const int64_t full_cap{int64_t(MAX_COINS_BYTES + max_mempool_size_bytes)}; + const int64_t large_cap{LargeCoinsCacheThreshold(full_cap)}; + + // OK → LARGE + auto state{chainstate.GetCoinsCacheSizeState(MAX_COINS_BYTES, max_mempool_size_bytes)}; + for (size_t i{0}; i < MAX_ATTEMPTS && int64_t(view.DynamicMemoryUsage()) <= large_cap; ++i) { + BOOST_CHECK_EQUAL(state, CoinsCacheSizeState::OK); + AddTestCoin(m_rng, view); + state = chainstate.GetCoinsCacheSizeState(MAX_COINS_BYTES, max_mempool_size_bytes); } - BOOST_CHECK_EQUAL( - chainstate.GetCoinsCacheSizeState(MAX_COINS_CACHE_BYTES, /*max_mempool_size_bytes=*/0), - CoinsCacheSizeState::CRITICAL); - - BOOST_TEST_MESSAGE("Exiting cache flush tests early due to unsupported arch"); - return; - } - - print_view_mem_usage(view); - BOOST_CHECK_EQUAL(view.DynamicMemoryUsage(), is_64_bit ? 32U : 16U); - - // We should be able to add COINS_UNTIL_CRITICAL coins to the cache before going CRITICAL. - // This is contingent not only on the dynamic memory usage of the Coins - // that we're adding (COIN_SIZE bytes per), but also on how much memory the - // cacheCoins (unordered_map) preallocates. - constexpr int COINS_UNTIL_CRITICAL{3}; - - // no coin added, so we have plenty of space left. - BOOST_CHECK_EQUAL( - chainstate.GetCoinsCacheSizeState(MAX_COINS_CACHE_BYTES, /*max_mempool_size_bytes*/ 0), - CoinsCacheSizeState::OK); - - for (int i{0}; i < COINS_UNTIL_CRITICAL; ++i) { - const COutPoint res = AddTestCoin(m_rng, view); - print_view_mem_usage(view); - BOOST_CHECK_EQUAL(view.AccessCoin(res).DynamicMemoryUsage(), COIN_SIZE); - - // adding first coin causes the MemoryResource to allocate one 256 KiB chunk of memory, - // pushing us immediately over to LARGE - BOOST_CHECK_EQUAL( - chainstate.GetCoinsCacheSizeState(MAX_COINS_CACHE_BYTES, /*max_mempool_size_bytes=*/ 0), - CoinsCacheSizeState::LARGE); - } - - // Adding some additional coins will push us over the edge to CRITICAL. - for (int i{0}; i < 4; ++i) { - AddTestCoin(m_rng, view); - print_view_mem_usage(view); - if (chainstate.GetCoinsCacheSizeState(MAX_COINS_CACHE_BYTES, /*max_mempool_size_bytes=*/0) == - CoinsCacheSizeState::CRITICAL) { - break; + // LARGE → CRITICAL + for (size_t i{0}; i < MAX_ATTEMPTS && int64_t(view.DynamicMemoryUsage()) <= full_cap; ++i) { + BOOST_CHECK_EQUAL(state, CoinsCacheSizeState::LARGE); + AddTestCoin(m_rng, view); + state = chainstate.GetCoinsCacheSizeState(MAX_COINS_BYTES, max_mempool_size_bytes); } + BOOST_CHECK_EQUAL(state, CoinsCacheSizeState::CRITICAL); } - BOOST_CHECK_EQUAL( - chainstate.GetCoinsCacheSizeState(MAX_COINS_CACHE_BYTES, /*max_mempool_size_bytes=*/0), - CoinsCacheSizeState::CRITICAL); - - // Passing non-zero max mempool usage (512 KiB) should allow us more headroom. - BOOST_CHECK_EQUAL( - chainstate.GetCoinsCacheSizeState(MAX_COINS_CACHE_BYTES, /*max_mempool_size_bytes=*/ 1 << 19), - CoinsCacheSizeState::OK); - - for (int i{0}; i < 3; ++i) { - AddTestCoin(m_rng, view); - print_view_mem_usage(view); - BOOST_CHECK_EQUAL( - chainstate.GetCoinsCacheSizeState(MAX_COINS_CACHE_BYTES, /*max_mempool_size_bytes=*/ 1 << 19), - CoinsCacheSizeState::OK); - } - - // Adding another coin with the additional mempool room will put us >90% - // but not yet critical. - AddTestCoin(m_rng, view); - print_view_mem_usage(view); - - // Only perform these checks on 64 bit hosts; I haven't done the math for 32. - if (is_64_bit) { - float usage_percentage = (float)view.DynamicMemoryUsage() / (MAX_COINS_CACHE_BYTES + (1 << 10)); - BOOST_TEST_MESSAGE("CoinsTip usage percentage: " << usage_percentage); - BOOST_CHECK(usage_percentage >= 0.9); - BOOST_CHECK(usage_percentage < 1); - BOOST_CHECK_EQUAL( - chainstate.GetCoinsCacheSizeState(MAX_COINS_CACHE_BYTES, /*max_mempool_size_bytes*/ 1 << 10), // 1024 - CoinsCacheSizeState::LARGE); - } - - // Using the default max_* values permits way more coins to be added. - for (int i{0}; i < 1000; ++i) { + // Default thresholds (no explicit limits) permit many more coins. + for (int i{0}; i < 1'000; ++i) { AddTestCoin(m_rng, view); - BOOST_CHECK_EQUAL( - chainstate.GetCoinsCacheSizeState(), - CoinsCacheSizeState::OK); + BOOST_CHECK_EQUAL(chainstate.GetCoinsCacheSizeState(), CoinsCacheSizeState::OK); } - // Flushing the view does take us back to OK because ReallocateCache() is called - - BOOST_CHECK_EQUAL( - chainstate.GetCoinsCacheSizeState(MAX_COINS_CACHE_BYTES, 0), - CoinsCacheSizeState::CRITICAL); - + // CRITICAL → OK via Flush + BOOST_CHECK_EQUAL(chainstate.GetCoinsCacheSizeState(MAX_COINS_BYTES, /*max_mempool_size_bytes=*/0), CoinsCacheSizeState::CRITICAL); view.SetBestBlock(m_rng.rand256()); - BOOST_CHECK(view.Flush()); - print_view_mem_usage(view); - - BOOST_CHECK_EQUAL( - chainstate.GetCoinsCacheSizeState(MAX_COINS_CACHE_BYTES, 0), - CoinsCacheSizeState::OK); + BOOST_REQUIRE(view.Flush()); + BOOST_CHECK_EQUAL(chainstate.GetCoinsCacheSizeState(MAX_COINS_BYTES, /*max_mempool_size_bytes=*/0), CoinsCacheSizeState::OK); } BOOST_AUTO_TEST_SUITE_END() From 3333d3f75f8917cf8c183984e9b81e2d7a447ca5 Mon Sep 17 00:00:00 2001 From: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz> Date: Thu, 17 Jul 2025 14:30:22 +0200 Subject: [PATCH 0067/2775] ci: Only pass documented env vars --- ci/test/02_run_container.py | 49 +++++++++++++++++++++++++++++++++++++ ci/test/02_run_container.sh | 6 ----- ci/test_run_all.sh | 2 +- 3 files changed, 50 insertions(+), 7 deletions(-) create mode 100755 ci/test/02_run_container.py diff --git a/ci/test/02_run_container.py b/ci/test/02_run_container.py new file mode 100755 index 000000000000..e04426765713 --- /dev/null +++ b/ci/test/02_run_container.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 +# Copyright (c) The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or https://opensource.org/license/mit/. + +import os +import shlex +import subprocess +import sys + + +def run(cmd, **kwargs): + print("+ " + shlex.join(cmd), flush=True) + try: + return subprocess.run(cmd, check=True, **kwargs) + except Exception as e: + sys.exit(e) + + +def main(): + print("Export only allowed settings:") + settings = run( + ["bash", "-c", "grep export ./ci/test/00_setup_env*.sh"], + stdout=subprocess.PIPE, + text=True, + encoding="utf8", + ).stdout.splitlines() + settings = set(l.split("=")[0].split("export ")[1] for l in settings) + # Add this one manually, because it is the only one set inside the + # container that also allows external overwrites + settings.add("BASE_BUILD_DIR") + + # Append $USER to /tmp/env to support multi-user systems and $CONTAINER_NAME + # to allow support starting multiple runs simultaneously by the same user. + env_file = "/tmp/env-{u}-{c}".format( + u=os.getenv("USER"), + c=os.getenv("CONTAINER_NAME"), + ) + with open(env_file, "w", encoding="utf8") as file: + for k, v in os.environ.items(): + if k in settings: + file.write(f"{k}={v}\n") + run(["cat", env_file]) + + run(["./ci/test/02_run_container.sh"]) # run the remainder + + +if __name__ == "__main__": + main() diff --git a/ci/test/02_run_container.sh b/ci/test/02_run_container.sh index 33e250c3e53a..119ab2e89c44 100755 --- a/ci/test/02_run_container.sh +++ b/ci/test/02_run_container.sh @@ -10,10 +10,6 @@ export CI_IMAGE_LABEL="bitcoin-ci-test" set -o errexit -o pipefail -o xtrace if [ -z "$DANGER_RUN_CI_ON_HOST" ]; then - # Export all env vars to avoid missing some. - # Though, exclude those with newlines to avoid parsing problems. - python3 -c 'import os; [print(f"{key}={value}") for key, value in os.environ.items() if "\n" not in value and "HOME" != key and "PATH" != key and "USER" != key]' | tee "/tmp/env-$USER-$CONTAINER_NAME" - # Env vars during the build can not be changed. For example, a modified # $MAKEJOBS is ignored in the build process. Use --cpuset-cpus as an # approximation to respect $MAKEJOBS somewhat, if cpuset is available. @@ -118,8 +114,6 @@ if [ -z "$DANGER_RUN_CI_ON_HOST" ]; then # When detecting podman-docker, `--external` should be added. docker image prune --force --filter "label=$CI_IMAGE_LABEL" - # Append $USER to /tmp/env to support multi-user systems and $CONTAINER_NAME - # to allow support starting multiple runs simultaneously by the same user. # shellcheck disable=SC2086 CI_CONTAINER_ID=$(docker run --cap-add LINUX_IMMUTABLE $CI_CONTAINER_CAP --rm --interactive --detach --tty \ --mount "type=bind,src=$BASE_READ_ONLY_DIR,dst=$BASE_READ_ONLY_DIR,readonly" \ diff --git a/ci/test_run_all.sh b/ci/test_run_all.sh index 3afc47b23eda..1a5719c9e170 100755 --- a/ci/test_run_all.sh +++ b/ci/test_run_all.sh @@ -8,4 +8,4 @@ export LC_ALL=C.UTF-8 set -o errexit; source ./ci/test/00_setup_env.sh set -o errexit -"./ci/test/02_run_container.sh" +"./ci/test/02_run_container.py" From 8a08eef645eeb3e1991a80480c5ee232bfceeb37 Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Mon, 21 Jul 2025 13:41:36 -0700 Subject: [PATCH 0068/2775] tests: Check that the last hardened cache upgrade occurs When loading an older wallet without the last hardened cache, an automatic upgrade should be performed. Check this in wallet_backwards_compatibility.py When migrating a wallet, the migrated wallet should always have the last hardened cache, so verify in wallet_migration.py --- .../test_framework/test_framework.py | 12 ++++++ .../wallet_backwards_compatibility.py | 43 +++++++++++++------ test/functional/wallet_migration.py | 25 ++++++++++- 3 files changed, 66 insertions(+), 14 deletions(-) diff --git a/test/functional/test_framework/test_framework.py b/test/functional/test_framework/test_framework.py index 639421d3aeac..e29815f5d296 100755 --- a/test/functional/test_framework/test_framework.py +++ b/test/functional/test_framework/test_framework.py @@ -1082,3 +1082,15 @@ def convert_to_json_for_cli(self, text): if self.options.usecli: return json.dumps(text) return text + + def inspect_sqlite_db(self, path, fn, *args, **kwargs): + try: + import sqlite3 # type: ignore[import] + conn = sqlite3.connect(path) + with conn: + result = fn(conn, *args, **kwargs) + conn.close() + return result + except ImportError: + self.log.warning("sqlite3 module not available, skipping tests that inspect the database") + diff --git a/test/functional/wallet_backwards_compatibility.py b/test/functional/wallet_backwards_compatibility.py index 43001fb3f30e..1f335398738c 100755 --- a/test/functional/wallet_backwards_compatibility.py +++ b/test/functional/wallet_backwards_compatibility.py @@ -21,9 +21,11 @@ from test_framework.blocktools import COINBASE_MATURITY from test_framework.test_framework import BitcoinTestFramework from test_framework.descriptors import descsum_create +from test_framework.messages import ser_string from test_framework.util import ( assert_equal, + assert_greater_than, assert_raises_rpc_error, ) @@ -149,18 +151,13 @@ def test_v22_inactivehdchain_path(self): assert_equal(bad_deriv_wallet_master.getaddressinfo(bad_path_addr)["hdkeypath"], good_deriv_path) bad_deriv_wallet_master.unloadwallet() - # If we have sqlite3, verify that there are no keymeta records - try: - import sqlite3 - wallet_db = node_master.wallets_path / wallet_name / "wallet.dat" - conn = sqlite3.connect(wallet_db) - with conn: - # Retrieve all records that have the "keymeta" prefix. The remaining key data varies for each record. - keymeta_rec = conn.execute("SELECT value FROM main where key >= x'076b65796d657461' AND key < x'076b65796d657462'").fetchone() - assert_equal(keymeta_rec, None) - conn.close() - except ImportError: - self.log.warning("sqlite3 module not available, skipping lack of keymeta records check") + def check_keymeta(conn): + # Retrieve all records that have the "keymeta" prefix. The remaining key data varies for each record. + keymeta_rec = conn.execute(f"SELECT value FROM main where key >= x'{ser_string(b'keymeta').hex()}' AND key < x'{ser_string(b'keymetb').hex()}'").fetchone() + assert_equal(keymeta_rec, None) + + wallet_db = node_master.wallets_path / wallet_name / "wallet.dat" + self.inspect_sqlite_db(wallet_db, check_keymeta) def test_ignore_legacy_during_startup(self, legacy_nodes, node_master): self.log.info("Test that legacy wallets are ignored during startup on v29+") @@ -342,6 +339,13 @@ def run_test(self): # Remove the wallet from old node wallet_prev.unloadwallet() + # Open backup with sqlite and get flags + def get_flags(conn): + flags_rec = conn.execute(f"SELECT value FROM main WHERE key = x'{ser_string(b'flags').hex()}'").fetchone() + return int.from_bytes(flags_rec[0], byteorder="little") + + old_flags = self.inspect_sqlite_db(backup_path, get_flags) + # Restore the wallet to master load_res = node_master.restorewallet(wallet_name, backup_path) @@ -378,6 +382,21 @@ def run_test(self): wallet.unloadwallet() + # Open the wallet with sqlite and inspect the flags and records + def check_upgraded_records(conn, old_flags): + flags_rec = conn.execute(f"SELECT value FROM main WHERE key = x'{ser_string(b'flags').hex()}'").fetchone() + new_flags = int.from_bytes(flags_rec[0], byteorder="little") + diff_flags = new_flags & ~old_flags + + # Check for last hardened xpubs if the flag is newly set + if diff_flags & (1 << 2): + self.log.debug("Checking descriptor cache was upgraded") + # Fetch all records with the walletdescriptorlhcache prefix + lh_cache_recs = conn.execute(f"SELECT value FROM main where key >= x'{ser_string(b'walletdescriptorlhcache').hex()}' AND key < x'{ser_string(b'walletdescriptorlhcachf').hex()}'").fetchall() + assert_greater_than(len(lh_cache_recs), 0) + + self.inspect_sqlite_db(down_backup_path, check_upgraded_records, old_flags) + # Check that no automatic upgrade broke downgrading the wallet target_dir = node.wallets_path / down_wallet_name os.makedirs(target_dir, exist_ok=True) diff --git a/test/functional/wallet_migration.py b/test/functional/wallet_migration.py index 704204425c7e..a735a9c7d823 100755 --- a/test/functional/wallet_migration.py +++ b/test/functional/wallet_migration.py @@ -18,11 +18,12 @@ from test_framework.descriptors import descsum_create from test_framework.key import ECPubKey from test_framework.test_framework import BitcoinTestFramework -from test_framework.messages import COIN, CTransaction, CTxOut +from test_framework.messages import COIN, CTransaction, CTxOut, ser_string from test_framework.script import hash160 from test_framework.script_util import key_to_p2pkh_script, key_to_p2pk_script, script_to_p2sh_script, script_to_p2wsh_script from test_framework.util import ( assert_equal, + assert_greater_than, assert_raises_rpc_error, find_vout_for_address, sha256sum_file, @@ -139,7 +140,8 @@ def migrate_and_get_rpc(self, wallet_name, **kwargs): # (in which case the wallet name would be suffixed by the 'watchonly' term) migrated_wallet_name = migrate_info['wallet_name'] wallet = self.master_node.get_wallet_rpc(migrated_wallet_name) - assert_equal(wallet.getwalletinfo()["descriptors"], True) + wallet_info = wallet.getwalletinfo() + assert_equal(wallet_info["descriptors"], True) self.assert_is_sqlite(migrated_wallet_name) # Always verify the backup path exist after migration assert os.path.exists(migrate_info['backup_path']) @@ -151,6 +153,25 @@ def migrate_and_get_rpc(self, wallet_name, **kwargs): expected_backup_path = self.master_node.wallets_path / f"{backup_prefix}_{mocked_time}.legacy.bak" assert_equal(str(expected_backup_path), migrate_info['backup_path']) + # Open the wallet with sqlite and verify that the wallet has the last hardened cache flag + # set and the last hardened cache entries + def check_last_hardened(conn): + flags_rec = conn.execute(f"SELECT value FROM main WHERE key = x'{ser_string(b'flags').hex()}'").fetchone() + flags = int.from_bytes(flags_rec[0], byteorder="little") + + # All wallets should have the upgrade flag set + assert_equal(bool(flags & (1 << 2)), True) + + # Fetch all records with the walletdescriptorlhcache prefix + # if the wallet has private keys and is not blank + if wallet_info["private_keys_enabled"] and not wallet_info["blank"]: + lh_cache_recs = conn.execute(f"SELECT value FROM main where key >= x'{ser_string(b'walletdescriptorlhcache').hex()}' AND key < x'{ser_string(b'walletdescriptorlhcachf').hex()}'").fetchall() + assert_greater_than(len(lh_cache_recs), 0) + + inspect_path = os.path.join(self.options.tmpdir, os.path.basename(f"{migrated_wallet_name}_inspect.dat")) + wallet.backupwallet(inspect_path) + self.inspect_sqlite_db(inspect_path, check_last_hardened) + return migrate_info, wallet def test_basic(self): From 88b0647f027a608acb61ec32329d19f8e5b0a9fd Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Mon, 21 Jul 2025 12:59:15 -0700 Subject: [PATCH 0069/2775] wallet: Always write last hardened cache flag in migrated wallets --- src/wallet/wallet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 91a494c379fd..2373f30a2c06 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -3851,7 +3851,7 @@ util::Result CWallet::ApplyMigrationData(WalletBatch& local_wallet_batch, m_internal_spk_managers.clear(); // Setup new descriptors (only if we are migrating any key material) - SetWalletFlagWithDB(local_wallet_batch, WALLET_FLAG_DESCRIPTORS); + SetWalletFlagWithDB(local_wallet_batch, WALLET_FLAG_DESCRIPTORS | WALLET_FLAG_LAST_HARDENED_XPUB_CACHED); if (has_spendable_material && !IsWalletFlagSet(WALLET_FLAG_DISABLE_PRIVATE_KEYS)) { // Use the existing master key if we have it if (data.master_key.key.IsValid()) { From 2320184d0ea87279558a8e6cbb3bccf5ba1bb781 Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Wed, 30 Jul 2025 16:34:36 -0700 Subject: [PATCH 0070/2775] descriptors: Fix meaning of any_key_parsed Invert any_key_parsed so that the name matches the behavior. --- src/script/descriptor.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/script/descriptor.cpp b/src/script/descriptor.cpp index bd819d365ae6..83a561a7e789 100644 --- a/src/script/descriptor.cpp +++ b/src/script/descriptor.cpp @@ -1843,20 +1843,20 @@ std::vector> ParsePubkey(uint32_t& key_exp_index bool any_ranged = false; bool all_bip32 = true; std::vector>> providers; - bool any_key_parsed = true; + bool any_key_parsed = false; size_t max_multipath_len = 0; while (expr.size()) { - if (!any_key_parsed && !Const(",", expr)) { + if (any_key_parsed && !Const(",", expr)) { error = strprintf("musig(): expected ',', got '%c'", expr[0]); return {}; } - any_key_parsed = false; auto arg = Expr(expr); auto pk = ParsePubkey(key_exp_index, arg, ParseScriptContext::MUSIG, out, error); if (pk.empty()) { error = strprintf("musig(): %s", error); return {}; } + any_key_parsed = true; any_ranged = any_ranged || pk.at(0)->IsRange(); all_bip32 = all_bip32 && pk.at(0)->IsBIP32(); @@ -1866,7 +1866,7 @@ std::vector> ParsePubkey(uint32_t& key_exp_index providers.emplace_back(std::move(pk)); key_exp_index++; } - if (any_key_parsed) { + if (!any_key_parsed) { error = "musig(): Must contain key expressions"; return {}; } From 39a63bf2e7e38dd3f30b5d1a8f6b2fff0e380d12 Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Wed, 30 Jul 2025 16:36:12 -0700 Subject: [PATCH 0071/2775] descriptors: Add a doxygen comment for has_hardened output_parameter --- src/script/descriptor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/script/descriptor.cpp b/src/script/descriptor.cpp index 83a561a7e789..3a402702178f 100644 --- a/src/script/descriptor.cpp +++ b/src/script/descriptor.cpp @@ -1647,6 +1647,7 @@ std::optional ParseKeyPathNum(std::span elem, bool& apostr * @param[out] apostrophe only updated if hardened derivation is found * @param[out] error parsing error message * @param[in] allow_multipath Allows the parsed path to use the multipath specifier + * @param[out] has_hardened Records whether the path contains any hardened derivation * @returns false if parsing failed **/ [[nodiscard]] bool ParseKeyPath(const std::vector>& split, std::vector& out, bool& apostrophe, std::string& error, bool allow_multipath, bool& has_hardened) From a4cfddda644f1fc9a815b2d16c997716cd63554a Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Wed, 30 Jul 2025 16:36:54 -0700 Subject: [PATCH 0072/2775] tests: Clarify why musig derivation adds a pubkey and xpub --- src/test/descriptor_tests.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/descriptor_tests.cpp b/src/test/descriptor_tests.cpp index 4dc94134278f..69ae51610eb9 100644 --- a/src/test/descriptor_tests.cpp +++ b/src/test/descriptor_tests.cpp @@ -52,7 +52,7 @@ constexpr int XONLY_KEYS = 1 << 6; // X-only pubkeys are in use (and thus inferr constexpr int MISSING_PRIVKEYS = 1 << 7; // Not all private keys are available, so ToPrivateString will fail. constexpr int SIGNABLE_FAILS = 1 << 8; // We can sign with this descriptor, but actually trying to sign will fail constexpr int MUSIG = 1 << 9; // This is a MuSig so key counts will have an extra key -constexpr int MUSIG_DERIVATION = 1 << 10; // MuSig with derivation from the aggregate key +constexpr int MUSIG_DERIVATION = 1 << 10; // MuSig with BIP 328 derivation from the aggregate key constexpr int MIXED_MUSIG = 1 << 11; // Both MuSig and normal key expressions are present constexpr int UNIQUE_XPUBS = 1 << 12; // Whether the xpub count should be of unique xpubs @@ -315,6 +315,7 @@ void DoCheck(std::string prv, std::string pub, const std::string& norm_pub, int size_t num_xpubs = CountXpubs(pub1); size_t num_unique_xpubs = CountUniqueXpubs(pub1); if (flags & MUSIG_DERIVATION) { + // Deriving from the aggregate will include the synthetic xpub of the aggregate in the caches and SigningProviders. num_xpubs++; num_unique_xpubs++; } From fb8720f1e09f4e41802f07be53fb220d6f6c127f Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Mon, 5 Feb 2024 15:09:40 -0500 Subject: [PATCH 0073/2775] sign: Refactor Schnorr sighash computation out of CreateSchnorrSig There will be other functions within MutableTransactionSignatureCreator that need to compute the same sighash, so make it a separate member function. --- src/script/sign.cpp | 26 ++++++++++++++++++-------- src/script/sign.h | 2 ++ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/script/sign.cpp b/src/script/sign.cpp index 33cbc38be41d..1e40d5328fc2 100644 --- a/src/script/sign.cpp +++ b/src/script/sign.cpp @@ -59,17 +59,14 @@ bool MutableTransactionSignatureCreator::CreateSig(const SigningProvider& provid return true; } -bool MutableTransactionSignatureCreator::CreateSchnorrSig(const SigningProvider& provider, std::vector& sig, const XOnlyPubKey& pubkey, const uint256* leaf_hash, const uint256* merkle_root, SigVersion sigversion) const +std::optional MutableTransactionSignatureCreator::ComputeSchnorrSignatureHash(const uint256* leaf_hash, SigVersion sigversion) const { assert(sigversion == SigVersion::TAPROOT || sigversion == SigVersion::TAPSCRIPT); - CKey key; - if (!provider.GetKeyByXOnly(pubkey, key)) return false; - // BIP341/BIP342 signing needs lots of precomputed transaction data. While some // (non-SIGHASH_DEFAULT) sighash modes exist that can work with just some subset // of data present, for now, only support signing when everything is provided. - if (!m_txdata || !m_txdata->m_bip341_taproot_ready || !m_txdata->m_spent_outputs_ready) return false; + if (!m_txdata || !m_txdata->m_bip341_taproot_ready || !m_txdata->m_spent_outputs_ready) return std::nullopt; ScriptExecutionData execdata; execdata.m_annex_init = true; @@ -77,15 +74,28 @@ bool MutableTransactionSignatureCreator::CreateSchnorrSig(const SigningProvider& if (sigversion == SigVersion::TAPSCRIPT) { execdata.m_codeseparator_pos_init = true; execdata.m_codeseparator_pos = 0xFFFFFFFF; // Only support non-OP_CODESEPARATOR BIP342 signing for now. - if (!leaf_hash) return false; // BIP342 signing needs leaf hash. + if (!leaf_hash) return std::nullopt; // BIP342 signing needs leaf hash. execdata.m_tapleaf_hash_init = true; execdata.m_tapleaf_hash = *leaf_hash; } uint256 hash; - if (!SignatureHashSchnorr(hash, execdata, m_txto, nIn, nHashType, sigversion, *m_txdata, MissingDataBehavior::FAIL)) return false; + if (!SignatureHashSchnorr(hash, execdata, m_txto, nIn, nHashType, sigversion, *m_txdata, MissingDataBehavior::FAIL)) return std::nullopt; + return hash; +} + +bool MutableTransactionSignatureCreator::CreateSchnorrSig(const SigningProvider& provider, std::vector& sig, const XOnlyPubKey& pubkey, const uint256* leaf_hash, const uint256* merkle_root, SigVersion sigversion) const +{ + assert(sigversion == SigVersion::TAPROOT || sigversion == SigVersion::TAPSCRIPT); + + CKey key; + if (!provider.GetKeyByXOnly(pubkey, key)) return false; + + std::optional hash = ComputeSchnorrSignatureHash(leaf_hash, sigversion); + if (!hash.has_value()) return false; + sig.resize(64); // Use uint256{} as aux_rnd for now. - if (!key.SignSchnorr(hash, sig, merkle_root, {})) return false; + if (!key.SignSchnorr(*hash, sig, merkle_root, {})) return false; if (nHashType) sig.push_back(nHashType); return true; } diff --git a/src/script/sign.h b/src/script/sign.h index fe2c470bc644..5af6392b128f 100644 --- a/src/script/sign.h +++ b/src/script/sign.h @@ -45,6 +45,8 @@ class MutableTransactionSignatureCreator : public BaseSignatureCreator const MutableTransactionSignatureChecker checker; const PrecomputedTransactionData* m_txdata; + std::optional ComputeSchnorrSignatureHash(const uint256* leaf_hash, SigVersion sigversion) const; + public: MutableTransactionSignatureCreator(const CMutableTransaction& tx LIFETIMEBOUND, unsigned int input_idx, const CAmount& amount, int hash_type); MutableTransactionSignatureCreator(const CMutableTransaction& tx LIFETIMEBOUND, unsigned int input_idx, const CAmount& amount, const PrecomputedTransactionData* txdata, int hash_type); From 30c6f64eed304560464f9601b80c811c186db20a Mon Sep 17 00:00:00 2001 From: pablomartin4btc Date: Thu, 31 Jul 2025 21:06:50 -0300 Subject: [PATCH 0074/2775] test: Remove unnecessary LoadWallet() calls --- src/wallet/test/coinselector_tests.cpp | 1 - src/wallet/test/group_outputs_tests.cpp | 1 - src/wallet/test/wallet_test_fixture.cpp | 1 - 3 files changed, 3 deletions(-) diff --git a/src/wallet/test/coinselector_tests.cpp b/src/wallet/test/coinselector_tests.cpp index 49241f33554f..58f657263e0d 100644 --- a/src/wallet/test/coinselector_tests.cpp +++ b/src/wallet/test/coinselector_tests.cpp @@ -159,7 +159,6 @@ inline std::vector& KnapsackGroupOutputs(const CoinsResult& availab static std::unique_ptr NewWallet(const node::NodeContext& m_node, const std::string& wallet_name = "") { std::unique_ptr wallet = std::make_unique(m_node.chain.get(), wallet_name, CreateMockableWalletDatabase()); - BOOST_CHECK(wallet->LoadWallet() == DBErrors::LOAD_OK); LOCK(wallet->cs_wallet); wallet->SetWalletFlag(WALLET_FLAG_DESCRIPTORS); wallet->SetupDescriptorScriptPubKeyMans(); diff --git a/src/wallet/test/group_outputs_tests.cpp b/src/wallet/test/group_outputs_tests.cpp index 4609c37ac7a6..186054c3873b 100644 --- a/src/wallet/test/group_outputs_tests.cpp +++ b/src/wallet/test/group_outputs_tests.cpp @@ -19,7 +19,6 @@ static int nextLockTime = 0; static std::shared_ptr NewWallet(const node::NodeContext& m_node) { std::unique_ptr wallet = std::make_unique(m_node.chain.get(), "", CreateMockableWalletDatabase()); - wallet->LoadWallet(); LOCK(wallet->cs_wallet); wallet->SetWalletFlag(WALLET_FLAG_DESCRIPTORS); wallet->SetupDescriptorScriptPubKeyMans(); diff --git a/src/wallet/test/wallet_test_fixture.cpp b/src/wallet/test/wallet_test_fixture.cpp index 57c538e4ef4c..a502314c9956 100644 --- a/src/wallet/test/wallet_test_fixture.cpp +++ b/src/wallet/test/wallet_test_fixture.cpp @@ -14,7 +14,6 @@ WalletTestingSetup::WalletTestingSetup(const ChainType chainType) m_wallet_loader{interfaces::MakeWalletLoader(*m_node.chain, *Assert(m_node.args))}, m_wallet(m_node.chain.get(), "", CreateMockableWalletDatabase()) { - m_wallet.LoadWallet(); m_chain_notifications_handler = m_node.chain->handleNotifications({ &m_wallet, [](CWallet*) {} }); m_wallet_loader->registerRpcs(); } From eb59a192d9ca3b1a27051cb5f2b3483186fe9928 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Mon, 28 Jul 2025 10:20:39 +0100 Subject: [PATCH 0075/2775] cmake, refactor: Encapsulate adding secp256k1 subtree in function --- cmake/secp256k1.cmake | 50 +++++++++++++++++++++++++++++++++++++++++++ src/CMakeLists.txt | 50 ++----------------------------------------- 2 files changed, 52 insertions(+), 48 deletions(-) create mode 100644 cmake/secp256k1.cmake diff --git a/cmake/secp256k1.cmake b/cmake/secp256k1.cmake new file mode 100644 index 000000000000..468e87f3fec0 --- /dev/null +++ b/cmake/secp256k1.cmake @@ -0,0 +1,50 @@ +# Copyright (c) 2023-present The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or https://opensource.org/license/mit/. + +function(add_secp256k1 subdir) + message("") + message("Configuring secp256k1 subtree...") + set(SECP256K1_DISABLE_SHARED ON CACHE BOOL "" FORCE) + set(SECP256K1_ENABLE_MODULE_ECDH OFF CACHE BOOL "" FORCE) + set(SECP256K1_ENABLE_MODULE_RECOVERY ON CACHE BOOL "" FORCE) + set(SECP256K1_ENABLE_MODULE_MUSIG ON CACHE BOOL "" FORCE) + set(SECP256K1_BUILD_BENCHMARK OFF CACHE BOOL "" FORCE) + set(SECP256K1_BUILD_TESTS ${BUILD_TESTS} CACHE BOOL "" FORCE) + set(SECP256K1_BUILD_EXHAUSTIVE_TESTS ${BUILD_TESTS} CACHE BOOL "" FORCE) + if(NOT BUILD_TESTS) + # Always skip the ctime tests, if we are building no other tests. + # Otherwise, they are built if Valgrind is available. See SECP256K1_VALGRIND. + set(SECP256K1_BUILD_CTIME_TESTS ${BUILD_TESTS} CACHE BOOL "" FORCE) + endif() + set(SECP256K1_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) + include(GetTargetInterface) + # -fsanitize and related flags apply to both C++ and C, + # so we can pass them down to libsecp256k1 as CFLAGS and LDFLAGS. + get_target_interface(SECP256K1_APPEND_CFLAGS "" sanitize_interface COMPILE_OPTIONS) + string(STRIP "${SECP256K1_APPEND_CFLAGS} ${APPEND_CPPFLAGS}" SECP256K1_APPEND_CFLAGS) + string(STRIP "${SECP256K1_APPEND_CFLAGS} ${APPEND_CFLAGS}" SECP256K1_APPEND_CFLAGS) + set(SECP256K1_APPEND_CFLAGS ${SECP256K1_APPEND_CFLAGS} CACHE STRING "" FORCE) + get_target_interface(SECP256K1_APPEND_LDFLAGS "" sanitize_interface LINK_OPTIONS) + string(STRIP "${SECP256K1_APPEND_LDFLAGS} ${APPEND_LDFLAGS}" SECP256K1_APPEND_LDFLAGS) + set(SECP256K1_APPEND_LDFLAGS ${SECP256K1_APPEND_LDFLAGS} CACHE STRING "" FORCE) + # We want to build libsecp256k1 with the most tested RelWithDebInfo configuration. + enable_language(C) + foreach(config IN LISTS CMAKE_BUILD_TYPE CMAKE_CONFIGURATION_TYPES) + if(config STREQUAL "") + continue() + endif() + string(TOUPPER "${config}" config) + set(CMAKE_C_FLAGS_${config} "${CMAKE_C_FLAGS_RELWITHDEBINFO}") + endforeach() + # If the CFLAGS environment variable is defined during building depends + # and configuring this build system, its content might be duplicated. + if(DEFINED ENV{CFLAGS}) + deduplicate_flags(CMAKE_C_FLAGS) + endif() + set(CMAKE_EXPORT_COMPILE_COMMANDS OFF) + add_subdirectory(${subdir}) + set_target_properties(secp256k1 PROPERTIES + EXCLUDE_FROM_ALL TRUE + ) +endfunction() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7f02b9258c09..94cfc60f609a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -23,54 +23,8 @@ if (ENABLE_IPC AND NOT WITH_EXTERNAL_LIBMULTIPROCESS) include(../cmake/libmultiprocess.cmake) add_libmultiprocess(ipc/libmultiprocess) endif() -#============================= -# secp256k1 subtree -#============================= -message("") -message("Configuring secp256k1 subtree...") -set(SECP256K1_DISABLE_SHARED ON CACHE BOOL "" FORCE) -set(SECP256K1_ENABLE_MODULE_ECDH OFF CACHE BOOL "" FORCE) -set(SECP256K1_ENABLE_MODULE_RECOVERY ON CACHE BOOL "" FORCE) -set(SECP256K1_ENABLE_MODULE_MUSIG ON CACHE BOOL "" FORCE) -set(SECP256K1_BUILD_BENCHMARK OFF CACHE BOOL "" FORCE) -set(SECP256K1_BUILD_TESTS ${BUILD_TESTS} CACHE BOOL "" FORCE) -set(SECP256K1_BUILD_EXHAUSTIVE_TESTS ${BUILD_TESTS} CACHE BOOL "" FORCE) -if(NOT BUILD_TESTS) - # Always skip the ctime tests, if we are building no other tests. - # Otherwise, they are built if Valgrind is available. See SECP256K1_VALGRIND. - set(SECP256K1_BUILD_CTIME_TESTS ${BUILD_TESTS} CACHE BOOL "" FORCE) -endif() -set(SECP256K1_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) -include(GetTargetInterface) -# -fsanitize and related flags apply to both C++ and C, -# so we can pass them down to libsecp256k1 as CFLAGS and LDFLAGS. -get_target_interface(SECP256K1_APPEND_CFLAGS "" sanitize_interface COMPILE_OPTIONS) -string(STRIP "${SECP256K1_APPEND_CFLAGS} ${APPEND_CPPFLAGS}" SECP256K1_APPEND_CFLAGS) -string(STRIP "${SECP256K1_APPEND_CFLAGS} ${APPEND_CFLAGS}" SECP256K1_APPEND_CFLAGS) -set(SECP256K1_APPEND_CFLAGS ${SECP256K1_APPEND_CFLAGS} CACHE STRING "" FORCE) -get_target_interface(SECP256K1_APPEND_LDFLAGS "" sanitize_interface LINK_OPTIONS) -string(STRIP "${SECP256K1_APPEND_LDFLAGS} ${APPEND_LDFLAGS}" SECP256K1_APPEND_LDFLAGS) -set(SECP256K1_APPEND_LDFLAGS ${SECP256K1_APPEND_LDFLAGS} CACHE STRING "" FORCE) -# We want to build libsecp256k1 with the most tested RelWithDebInfo configuration. -enable_language(C) -foreach(config IN LISTS CMAKE_BUILD_TYPE CMAKE_CONFIGURATION_TYPES) - if(config STREQUAL "") - continue() - endif() - string(TOUPPER "${config}" config) - set(CMAKE_C_FLAGS_${config} "${CMAKE_C_FLAGS_RELWITHDEBINFO}") -endforeach() -# If the CFLAGS environment variable is defined during building depends -# and configuring this build system, its content might be duplicated. -if(DEFINED ENV{CFLAGS}) - deduplicate_flags(CMAKE_C_FLAGS) -endif() -set(CMAKE_EXPORT_COMPILE_COMMANDS OFF) -add_subdirectory(secp256k1) -set_target_properties(secp256k1 PROPERTIES - EXCLUDE_FROM_ALL TRUE -) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +include(../cmake/secp256k1.cmake) +add_secp256k1(secp256k1) # Set top-level target output locations. if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) From b093a19ae2eff306b8ed6ce74d133e3ec53ef64e Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Wed, 30 Jul 2025 13:47:24 +0100 Subject: [PATCH 0076/2775] cmake: Proactively avoid use of `SECP256K1_DISABLE_SHARED` The `SECP256K1_DISABLE_SHARED` CMake variable has been removed upstream. This change removes its usage ahead of the next `secp256k1` subtree update to prevent breakage and simplify integration. --- cmake/secp256k1.cmake | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cmake/secp256k1.cmake b/cmake/secp256k1.cmake index 468e87f3fec0..15f1aacb66d1 100644 --- a/cmake/secp256k1.cmake +++ b/cmake/secp256k1.cmake @@ -5,7 +5,8 @@ function(add_secp256k1 subdir) message("") message("Configuring secp256k1 subtree...") - set(SECP256K1_DISABLE_SHARED ON CACHE BOOL "" FORCE) + set(BUILD_SHARED_LIBS OFF) + set(CMAKE_EXPORT_COMPILE_COMMANDS OFF) set(SECP256K1_ENABLE_MODULE_ECDH OFF CACHE BOOL "" FORCE) set(SECP256K1_ENABLE_MODULE_RECOVERY ON CACHE BOOL "" FORCE) set(SECP256K1_ENABLE_MODULE_MUSIG ON CACHE BOOL "" FORCE) @@ -42,7 +43,7 @@ function(add_secp256k1 subdir) if(DEFINED ENV{CFLAGS}) deduplicate_flags(CMAKE_C_FLAGS) endif() - set(CMAKE_EXPORT_COMPILE_COMMANDS OFF) + add_subdirectory(${subdir}) set_target_properties(secp256k1 PROPERTIES EXCLUDE_FROM_ALL TRUE From a7bafb3e05045e4079690b508b2fff6defdb2cff Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Fri, 1 Aug 2025 12:07:26 +0100 Subject: [PATCH 0077/2775] refactor: Use immediate lambda to work around GCC bug 117966 --- src/musig.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/musig.h b/src/musig.h index d46a67f65ecd..69c82ddda373 100644 --- a/src/musig.h +++ b/src/musig.h @@ -14,7 +14,12 @@ struct secp256k1_musig_keyagg_cache; //! MuSig2 chaincode as defined by BIP 328 using namespace util::hex_literals; -constexpr uint256 MUSIG_CHAINCODE{"868087ca02a6f974c4598924c36b57762d32cb45717167e300622c7167e38965"_hex_u8}; +constexpr uint256 MUSIG_CHAINCODE{ + // Use immediate lambda to work around GCC-14 bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117966 + []() consteval { return uint256{"868087ca02a6f974c4598924c36b57762d32cb45717167e300622c7167e38965"_hex_u8}; }(), +}; + + //! Create a secp256k1_musig_keyagg_cache from the pubkeys in their current order. This is necessary for most MuSig2 operations bool GetMuSig2KeyAggCache(const std::vector& pubkeys, secp256k1_musig_keyagg_cache& keyagg_cache); From a099655f2e1be313a6b51bba9799ea512c6eda3c Mon Sep 17 00:00:00 2001 From: rkrux Date: Fri, 13 Jun 2025 16:15:13 +0530 Subject: [PATCH 0078/2775] scripted-diff: Update `DeriveType` enum values to mention ranged derivations While reviewing the MuSig2 descriptors PR 31244, I realized that the enum `DeriveType` here logically refers to the derive type for ranged descriptors. This became evident to me while going through the implementations of `IsRange` & `IsHardened` functions of `BIP32PubkeyProvider`, and the `ParsePubkeyInner` function. Initially I got confused by reading `IsRange` translating to `!= DeriveType::NO`, but later realised it specifically referred to the presence of ranged derivations. I propose explicitly mentioning "RANGED" in the values of the `DeriveType` enum would make it easier to parse the descriptors code. This enum is used in one file only - `script/descriptors.cpp`. That's why I explicitly passed it as the argument in the `sed` commands in the script below. -BEGIN VERIFY SCRIPT- sed -i 's/HARDENED\b/HARDENED_RANGED/g' src/script/descriptor.cpp sed -i 's/\bNO\b/NON_RANGED/g' src/script/descriptor.cpp -END VERIFY SCRIPT- --- src/script/descriptor.cpp | 54 +++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/script/descriptor.cpp b/src/script/descriptor.cpp index bd819d365ae6..aba92de6635b 100644 --- a/src/script/descriptor.cpp +++ b/src/script/descriptor.cpp @@ -359,9 +359,9 @@ class ConstPubkeyProvider final : public PubkeyProvider }; enum class DeriveType { - NO, - UNHARDENED, - HARDENED, + NON_RANGED, + UNHARDENED_RANGED, + HARDENED_RANGED, }; /** An object representing a parsed extended public key in a descriptor. */ @@ -401,7 +401,7 @@ class BIP32PubkeyProvider final : public PubkeyProvider bool IsHardened() const { - if (m_derive == DeriveType::HARDENED) return true; + if (m_derive == DeriveType::HARDENED_RANGED) return true; for (auto entry : m_path) { if (entry >> 31) return true; } @@ -410,7 +410,7 @@ class BIP32PubkeyProvider final : public PubkeyProvider public: BIP32PubkeyProvider(uint32_t exp_index, const CExtPubKey& extkey, KeyPath path, DeriveType derive, bool apostrophe) : PubkeyProvider(exp_index), m_root_extkey(extkey), m_path(std::move(path)), m_derive(derive), m_apostrophe(apostrophe) {} - bool IsRange() const override { return m_derive != DeriveType::NO; } + bool IsRange() const override { return m_derive != DeriveType::NON_RANGED; } size_t GetSize() const override { return 33; } bool IsBIP32() const override { return true; } std::optional GetPubKey(int pos, const SigningProvider& arg, FlatSigningProvider& out, const DescriptorCache* read_cache = nullptr, DescriptorCache* write_cache = nullptr) const override @@ -419,8 +419,8 @@ class BIP32PubkeyProvider final : public PubkeyProvider CKeyID keyid = m_root_extkey.pubkey.GetID(); std::copy(keyid.begin(), keyid.begin() + sizeof(info.fingerprint), info.fingerprint); info.path = m_path; - if (m_derive == DeriveType::UNHARDENED) info.path.push_back((uint32_t)pos); - if (m_derive == DeriveType::HARDENED) info.path.push_back(((uint32_t)pos) | 0x80000000L); + if (m_derive == DeriveType::UNHARDENED_RANGED) info.path.push_back((uint32_t)pos); + if (m_derive == DeriveType::HARDENED_RANGED) info.path.push_back(((uint32_t)pos) | 0x80000000L); // Derive keys or fetch them from cache CExtPubKey final_extkey = m_root_extkey; @@ -429,19 +429,19 @@ class BIP32PubkeyProvider final : public PubkeyProvider bool der = true; if (read_cache) { if (!read_cache->GetCachedDerivedExtPubKey(m_expr_index, pos, final_extkey)) { - if (m_derive == DeriveType::HARDENED) return std::nullopt; + if (m_derive == DeriveType::HARDENED_RANGED) return std::nullopt; // Try to get the derivation parent if (!read_cache->GetCachedParentExtPubKey(m_expr_index, parent_extkey)) return std::nullopt; final_extkey = parent_extkey; - if (m_derive == DeriveType::UNHARDENED) der = parent_extkey.Derive(final_extkey, pos); + if (m_derive == DeriveType::UNHARDENED_RANGED) der = parent_extkey.Derive(final_extkey, pos); } } else if (IsHardened()) { CExtKey xprv; CExtKey lh_xprv; if (!GetDerivedExtKey(arg, xprv, lh_xprv)) return std::nullopt; parent_extkey = xprv.Neuter(); - if (m_derive == DeriveType::UNHARDENED) der = xprv.Derive(xprv, pos); - if (m_derive == DeriveType::HARDENED) der = xprv.Derive(xprv, pos | 0x80000000UL); + if (m_derive == DeriveType::UNHARDENED_RANGED) der = xprv.Derive(xprv, pos); + if (m_derive == DeriveType::HARDENED_RANGED) der = xprv.Derive(xprv, pos | 0x80000000UL); final_extkey = xprv.Neuter(); if (lh_xprv.key.IsValid()) { last_hardened_extkey = lh_xprv.Neuter(); @@ -451,8 +451,8 @@ class BIP32PubkeyProvider final : public PubkeyProvider if (!parent_extkey.Derive(parent_extkey, entry)) return std::nullopt; } final_extkey = parent_extkey; - if (m_derive == DeriveType::UNHARDENED) der = parent_extkey.Derive(final_extkey, pos); - assert(m_derive != DeriveType::HARDENED); + if (m_derive == DeriveType::UNHARDENED_RANGED) der = parent_extkey.Derive(final_extkey, pos); + assert(m_derive != DeriveType::HARDENED_RANGED); } if (!der) return std::nullopt; @@ -461,7 +461,7 @@ class BIP32PubkeyProvider final : public PubkeyProvider if (write_cache) { // Only cache parent if there is any unhardened derivation - if (m_derive != DeriveType::HARDENED) { + if (m_derive != DeriveType::HARDENED_RANGED) { write_cache->CacheParentExtPubKey(m_expr_index, parent_extkey); // Cache last hardened xpub if we have it if (last_hardened_extkey.pubkey.IsValid()) { @@ -481,7 +481,7 @@ class BIP32PubkeyProvider final : public PubkeyProvider std::string ret = EncodeExtPubKey(m_root_extkey) + FormatHDKeypath(m_path, /*apostrophe=*/use_apostrophe); if (IsRange()) { ret += "/*"; - if (m_derive == DeriveType::HARDENED) ret += use_apostrophe ? '\'' : 'h'; + if (m_derive == DeriveType::HARDENED_RANGED) ret += use_apostrophe ? '\'' : 'h'; } return ret; } @@ -496,13 +496,13 @@ class BIP32PubkeyProvider final : public PubkeyProvider out = EncodeExtKey(key) + FormatHDKeypath(m_path, /*apostrophe=*/m_apostrophe); if (IsRange()) { out += "/*"; - if (m_derive == DeriveType::HARDENED) out += m_apostrophe ? '\'' : 'h'; + if (m_derive == DeriveType::HARDENED_RANGED) out += m_apostrophe ? '\'' : 'h'; } return true; } bool ToNormalizedString(const SigningProvider& arg, std::string& out, const DescriptorCache* cache) const override { - if (m_derive == DeriveType::HARDENED) { + if (m_derive == DeriveType::HARDENED_RANGED) { out = ToString(StringType::PUBLIC, /*normalized=*/true); return true; @@ -554,7 +554,7 @@ class BIP32PubkeyProvider final : public PubkeyProvider out = "[" + origin_str + "]" + EncodeExtPubKey(xpub) + FormatHDKeypath(end_path); if (IsRange()) { out += "/*"; - assert(m_derive == DeriveType::UNHARDENED); + assert(m_derive == DeriveType::UNHARDENED_RANGED); } return true; } @@ -563,8 +563,8 @@ class BIP32PubkeyProvider final : public PubkeyProvider CExtKey extkey; CExtKey dummy; if (!GetDerivedExtKey(arg, extkey, dummy)) return; - if (m_derive == DeriveType::UNHARDENED && !extkey.Derive(extkey, pos)) return; - if (m_derive == DeriveType::HARDENED && !extkey.Derive(extkey, pos | 0x80000000UL)) return; + if (m_derive == DeriveType::UNHARDENED_RANGED && !extkey.Derive(extkey, pos)) return; + if (m_derive == DeriveType::HARDENED_RANGED && !extkey.Derive(extkey, pos | 0x80000000UL)) return; out.keys.emplace(extkey.key.GetPubKey().GetID(), extkey.key); } std::optional GetRootPubKey() const override @@ -595,7 +595,7 @@ class MuSigPubkeyProvider final : public PubkeyProvider const DeriveType m_derive; const bool m_ranged_participants; - bool IsRangedDerivation() const { return m_derive != DeriveType::NO; } + bool IsRangedDerivation() const { return m_derive != DeriveType::NON_RANGED; } public: MuSigPubkeyProvider( @@ -613,7 +613,7 @@ class MuSigPubkeyProvider final : public PubkeyProvider if (!Assume(!(m_ranged_participants && IsRangedDerivation()))) { throw std::runtime_error("musig(): Cannot have both ranged participants and ranged derivation"); } - if (!Assume(m_derive != DeriveType::HARDENED)) { + if (!Assume(m_derive != DeriveType::HARDENED_RANGED)) { throw std::runtime_error("musig(): Cannot have hardened derivation"); } } @@ -1723,14 +1723,14 @@ std::optional ParseKeyPathNum(std::span elem, bool& apostr static DeriveType ParseDeriveType(std::vector>& split, bool& apostrophe) { - DeriveType type = DeriveType::NO; + DeriveType type = DeriveType::NON_RANGED; if (std::ranges::equal(split.back(), std::span{"*"}.first(1))) { split.pop_back(); - type = DeriveType::UNHARDENED; + type = DeriveType::UNHARDENED_RANGED; } else if (std::ranges::equal(split.back(), std::span{"*'"}.first(2)) || std::ranges::equal(split.back(), std::span{"*h"}.first(2))) { apostrophe = std::ranges::equal(split.back(), std::span{"*'"}.first(2)); split.pop_back(); - type = DeriveType::HARDENED; + type = DeriveType::HARDENED_RANGED; } return type; } @@ -1872,7 +1872,7 @@ std::vector> ParsePubkey(uint32_t& key_exp_index } // Parse any derivation - DeriveType deriv_type = DeriveType::NO; + DeriveType deriv_type = DeriveType::NON_RANGED; std::vector derivation_multipaths; if (split.size() == 2 && Const("/", split.at(1), /*skip=*/false)) { if (!all_bip32) { @@ -1886,7 +1886,7 @@ std::vector> ParsePubkey(uint32_t& key_exp_index bool dummy = false; auto deriv_split = Split(split.at(1), '/'); deriv_type = ParseDeriveType(deriv_split, dummy); - if (deriv_type == DeriveType::HARDENED) { + if (deriv_type == DeriveType::HARDENED_RANGED) { error = "musig(): Cannot have hardened child derivation"; return {}; } From 1d9f1cb4bd6b119e1d56cbdd7f6ce4d4521fffa3 Mon Sep 17 00:00:00 2001 From: stickies-v Date: Mon, 28 Jul 2025 13:57:52 +0100 Subject: [PATCH 0079/2775] kernel: improve BlockChecked ownership semantics Subscribers to the BlockChecked validation interface event may need access to the block outside of the callback scope. Currently, this is only possible by copying the block, which makes exposing this validation interface event publicly either cumbersome or with significant copy overhead. By using shared_ptr, we make the shared ownership explicit and allow users to safely use the block outside of the callback scope. --- src/bitcoin-chainstate.cpp | 4 ++-- src/net_processing.cpp | 6 +++--- src/rpc/mining.cpp | 6 +++--- src/test/util/mining.cpp | 5 +++-- src/test/validationinterface_tests.cpp | 11 +++++------ src/validation.cpp | 4 ++-- src/validationinterface.cpp | 6 ++++-- src/validationinterface.h | 4 ++-- 8 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/bitcoin-chainstate.cpp b/src/bitcoin-chainstate.cpp index 47ddfaad8dee..4ac6a6f41a19 100644 --- a/src/bitcoin-chainstate.cpp +++ b/src/bitcoin-chainstate.cpp @@ -200,9 +200,9 @@ int main(int argc, char* argv[]) explicit submitblock_StateCatcher(const uint256& hashIn) : hash(hashIn), found(false), state() {} protected: - void BlockChecked(const CBlock& block, const BlockValidationState& stateIn) override + void BlockChecked(const std::shared_ptr& block, const BlockValidationState& stateIn) override { - if (block.GetHash() != hash) + if (block->GetHash() != hash) return; found = true; state = stateIn; diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 0c4a89c44cb6..e5c2a86d429f 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -513,7 +513,7 @@ class PeerManagerImpl final : public PeerManager EXCLUSIVE_LOCKS_REQUIRED(!m_tx_download_mutex); void UpdatedBlockTip(const CBlockIndex *pindexNew, const CBlockIndex *pindexFork, bool fInitialDownload) override EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex); - void BlockChecked(const CBlock& block, const BlockValidationState& state) override + void BlockChecked(const std::shared_ptr& block, const BlockValidationState& state) override EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex); void NewPoWValidBlock(const CBlockIndex *pindex, const std::shared_ptr& pblock) override EXCLUSIVE_LOCKS_REQUIRED(!m_most_recent_block_mutex); @@ -2103,11 +2103,11 @@ void PeerManagerImpl::UpdatedBlockTip(const CBlockIndex *pindexNew, const CBlock * Handle invalid block rejection and consequent peer discouragement, maintain which * peers announce compact blocks. */ -void PeerManagerImpl::BlockChecked(const CBlock& block, const BlockValidationState& state) +void PeerManagerImpl::BlockChecked(const std::shared_ptr& block, const BlockValidationState& state) { LOCK(cs_main); - const uint256 hash(block.GetHash()); + const uint256 hash(block->GetHash()); std::map>::iterator it = mapBlockSource.find(hash); // If the block failed validation, we know where it came from and we're still connected diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index f11305f16b8b..8b45a8c12938 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -1030,9 +1030,9 @@ class submitblock_StateCatcher final : public CValidationInterface explicit submitblock_StateCatcher(const uint256 &hashIn) : hash(hashIn), state() {} protected: - void BlockChecked(const CBlock& block, const BlockValidationState& stateIn) override { - if (block.GetHash() != hash) - return; + void BlockChecked(const std::shared_ptr& block, const BlockValidationState& stateIn) override + { + if (block->GetHash() != hash) return; found = true; state = stateIn; } diff --git a/src/test/util/mining.cpp b/src/test/util/mining.cpp index 1cd8f8ee7189..0dacf71b6841 100644 --- a/src/test/util/mining.cpp +++ b/src/test/util/mining.cpp @@ -18,6 +18,7 @@ #include #include +#include using node::BlockAssembler; using node::NodeContext; @@ -83,9 +84,9 @@ struct BlockValidationStateCatcher : public CValidationInterface { m_state{} {} protected: - void BlockChecked(const CBlock& block, const BlockValidationState& state) override + void BlockChecked(const std::shared_ptr& block, const BlockValidationState& state) override { - if (block.GetHash() != m_hash) return; + if (block->GetHash() != m_hash) return; m_state = state; } }; diff --git a/src/test/validationinterface_tests.cpp b/src/test/validationinterface_tests.cpp index a46cfc302927..8a24b2824584 100644 --- a/src/test/validationinterface_tests.cpp +++ b/src/test/validationinterface_tests.cpp @@ -12,11 +12,12 @@ #include #include +#include BOOST_FIXTURE_TEST_SUITE(validationinterface_tests, ChainTestingSetup) struct TestSubscriberNoop final : public CValidationInterface { - void BlockChecked(const CBlock&, const BlockValidationState&) override {} + void BlockChecked(const std::shared_ptr&, const BlockValidationState&) override {} }; BOOST_AUTO_TEST_CASE(unregister_validation_interface_race) @@ -25,10 +26,9 @@ BOOST_AUTO_TEST_CASE(unregister_validation_interface_race) // Start thread to generate notifications std::thread gen{[&] { - const CBlock block_dummy; BlockValidationState state_dummy; while (generate) { - m_node.validation_signals->BlockChecked(block_dummy, state_dummy); + m_node.validation_signals->BlockChecked(std::make_shared(), state_dummy); } }}; @@ -60,15 +60,14 @@ class TestInterface : public CValidationInterface { if (m_on_destroy) m_on_destroy(); } - void BlockChecked(const CBlock& block, const BlockValidationState& state) override + void BlockChecked(const std::shared_ptr& block, const BlockValidationState& state) override { if (m_on_call) m_on_call(); } void Call() { - CBlock block; BlockValidationState state; - m_signals.BlockChecked(block, state); + m_signals.BlockChecked(std::make_shared(), state); } std::function m_on_call; std::function m_on_destroy; diff --git a/src/validation.cpp b/src/validation.cpp index e339fa774f07..bd2963b496ff 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -3178,7 +3178,7 @@ bool Chainstate::ConnectTip( CCoinsViewCache view(&CoinsTip()); bool rv = ConnectBlock(*block_to_connect, state, pindexNew, view); if (m_chainman.m_options.signals) { - m_chainman.m_options.signals->BlockChecked(*block_to_connect, state); + m_chainman.m_options.signals->BlockChecked(block_to_connect, state); } if (!rv) { if (state.IsInvalid()) @@ -4554,7 +4554,7 @@ bool ChainstateManager::ProcessNewBlock(const std::shared_ptr& blo } if (!ret) { if (m_options.signals) { - m_options.signals->BlockChecked(*block, state); + m_options.signals->BlockChecked(block, state); } LogError("%s: AcceptBlock FAILED (%s)\n", __func__, state.ToString()); return false; diff --git a/src/validationinterface.cpp b/src/validationinterface.cpp index f1ac9305ff2e..313f730ea095 100644 --- a/src/validationinterface.cpp +++ b/src/validationinterface.cpp @@ -17,6 +17,7 @@ #include #include +#include #include #include @@ -245,9 +246,10 @@ void ValidationSignals::ChainStateFlushed(ChainstateRole role, const CBlockLocat locator.IsNull() ? "null" : locator.vHave.front().ToString()); } -void ValidationSignals::BlockChecked(const CBlock& block, const BlockValidationState& state) { +void ValidationSignals::BlockChecked(const std::shared_ptr& block, const BlockValidationState& state) +{ LOG_EVENT("%s: block hash=%s state=%s", __func__, - block.GetHash().ToString(), state.ToString()); + block->GetHash().ToString(), state.ToString()); m_internals->Iterate([&](CValidationInterface& callbacks) { callbacks.BlockChecked(block, state); }); } diff --git a/src/validationinterface.h b/src/validationinterface.h index 5a50876809ce..e0a88ad0f213 100644 --- a/src/validationinterface.h +++ b/src/validationinterface.h @@ -150,7 +150,7 @@ class CValidationInterface { * is guaranteed to be the current best block at the time the * callback was generated (not necessarily now). */ - virtual void BlockChecked(const CBlock&, const BlockValidationState&) {} + virtual void BlockChecked(const std::shared_ptr&, const BlockValidationState&) {} /** * Notifies listeners that a block which builds directly on our current tip * has been received and connected to the headers tree, though not validated yet. @@ -224,7 +224,7 @@ class ValidationSignals { void BlockConnected(ChainstateRole, const std::shared_ptr &, const CBlockIndex *pindex); void BlockDisconnected(const std::shared_ptr &, const CBlockIndex* pindex); void ChainStateFlushed(ChainstateRole, const CBlockLocator &); - void BlockChecked(const CBlock&, const BlockValidationState&); + void BlockChecked(const std::shared_ptr&, const BlockValidationState&); void NewPoWValidBlock(const CBlockIndex *, const std::shared_ptr&); }; From 1caaf650436e96cf5c20374bb5a2b2c8e667024a Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Tue, 14 Jul 2020 10:33:14 +0200 Subject: [PATCH 0080/2775] init: remove Group= as it will default to the user's default group Setting Group=bitcoin is redundant. It is typically the default group of the user and if not explicitly specified, systemd will run the service with the default group of the user. --- contrib/init/bitcoind.service | 1 - 1 file changed, 1 deletion(-) diff --git a/contrib/init/bitcoind.service b/contrib/init/bitcoind.service index ade8a05926fe..3804a08e3c83 100644 --- a/contrib/init/bitcoind.service +++ b/contrib/init/bitcoind.service @@ -44,7 +44,6 @@ TimeoutStopSec=600 # Run as bitcoin:bitcoin User=bitcoin -Group=bitcoin # /run/bitcoind RuntimeDirectory=bitcoind From 18d1071dd1244cf3252d687bb46f88d65f652e4d Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Tue, 14 Jul 2020 10:48:54 +0200 Subject: [PATCH 0081/2775] init: replace deprecated PermissionsStartOnly systemd directive PermissionsStartOnly is deprecated [1]. This removes the directives and instead we prefixes the value of the ExecStartPre directive with '!', which means the executable, 'chgrp' in this case, is run with full privileges and able to change the group of /etc/bitcoin. 1: https://github.com/systemd/systemd/blob/60b45a80c1f98bad000bd902d97ecf6c4e3fc315/NEWS#L2434 --- contrib/init/bitcoind.service | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/contrib/init/bitcoind.service b/contrib/init/bitcoind.service index 3804a08e3c83..1845208cbbdd 100644 --- a/contrib/init/bitcoind.service +++ b/contrib/init/bitcoind.service @@ -25,8 +25,7 @@ ExecStart=/usr/bin/bitcoind -pid=/run/bitcoind/bitcoind.pid \ -shutdownnotify='systemd-notify --stopping' # Make sure the config directory is readable by the service user -PermissionsStartOnly=true -ExecStartPre=/bin/chgrp bitcoin /etc/bitcoin +ExecStartPre=!/bin/chgrp bitcoin /etc/bitcoin # Process management #################### From 95341de6ca655a67abbd00d4c837152275bdd8e7 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Fri, 1 Aug 2025 15:52:08 +0100 Subject: [PATCH 0082/2775] cmake, refactor: Move handling of Qt TS files into `locale` directory This change offers a few advantages, such as: - a more readable and cleaner `ts_files.cmake` (see the next commit); - a scoped `ts_files` variable; - improved code locality; - no need to adjust the location of the resulting `*.qm` files. --- src/qt/CMakeLists.txt | 8 +------- src/qt/locale/CMakeLists.txt | 13 +++++++++++++ 2 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 src/qt/locale/CMakeLists.txt diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 87a5a2bef3bb..ad858400a81e 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -245,13 +245,7 @@ if(qt_lib_type STREQUAL "STATIC_LIBRARY") ) endif() -file(GLOB ts_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} locale/*.ts) -set_source_files_properties(${ts_files} PROPERTIES OUTPUT_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/locale) -if(Qt6_VERSION VERSION_GREATER_EQUAL 6.7) - qt6_add_lrelease(TS_FILES ${ts_files} OPTIONS -silent) -else() - qt6_add_lrelease(bitcoinqt TS_FILES ${ts_files} OPTIONS -silent) -endif() +add_subdirectory(locale) add_executable(bitcoin-qt main.cpp diff --git a/src/qt/locale/CMakeLists.txt b/src/qt/locale/CMakeLists.txt new file mode 100644 index 000000000000..7f46349d7be1 --- /dev/null +++ b/src/qt/locale/CMakeLists.txt @@ -0,0 +1,13 @@ +# Copyright (c) 2025-present The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or https://opensource.org/license/mit/. + +file(GLOB ts_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.ts") + +if(Qt6_VERSION VERSION_GREATER_EQUAL 6.7) + qt6_add_lrelease(TS_FILES ${ts_files} LRELEASE_TARGET bitcoinqt_lrelease OPTIONS -silent) +else() + qt6_add_lrelease(bitcoinqt TS_FILES ${ts_files} OPTIONS -silent) +endif() + +add_dependencies(bitcoinqt bitcoinqt_lrelease) From ca04eebd7282f4b1b66356d70562dbdd1d4d8ecf Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Fri, 1 Aug 2025 13:24:39 +0100 Subject: [PATCH 0083/2775] cmake: Switch to generated `ts_files.cmake` file See the `update-translations.py` script in the `bitcoin-maintainer-tools` repository. --- src/qt/locale/CMakeLists.txt | 2 +- src/qt/locale/ts_files.cmake | 133 +++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 src/qt/locale/ts_files.cmake diff --git a/src/qt/locale/CMakeLists.txt b/src/qt/locale/CMakeLists.txt index 7f46349d7be1..61435d209f0b 100644 --- a/src/qt/locale/CMakeLists.txt +++ b/src/qt/locale/CMakeLists.txt @@ -2,7 +2,7 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or https://opensource.org/license/mit/. -file(GLOB ts_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.ts") +include(ts_files.cmake) if(Qt6_VERSION VERSION_GREATER_EQUAL 6.7) qt6_add_lrelease(TS_FILES ${ts_files} LRELEASE_TARGET bitcoinqt_lrelease OPTIONS -silent) diff --git a/src/qt/locale/ts_files.cmake b/src/qt/locale/ts_files.cmake new file mode 100644 index 000000000000..4f3592619361 --- /dev/null +++ b/src/qt/locale/ts_files.cmake @@ -0,0 +1,133 @@ +set(ts_files + bitcoin_am.ts + bitcoin_ar.ts + bitcoin_ast_ES.ts + bitcoin_ay.ts + bitcoin_az.ts + bitcoin_az@latin.ts + bitcoin_be.ts + bitcoin_bg.ts + bitcoin_bn.ts + bitcoin_br.ts + bitcoin_bs.ts + bitcoin_ca.ts + bitcoin_cmn.ts + bitcoin_cs.ts + bitcoin_cy.ts + bitcoin_da.ts + bitcoin_de_AT.ts + bitcoin_de_CH.ts + bitcoin_de.ts + bitcoin_el.ts + bitcoin_en.ts + bitcoin_eo.ts + bitcoin_es.ts + bitcoin_es_CL.ts + bitcoin_es_CO.ts + bitcoin_es_DO.ts + bitcoin_es_SV.ts + bitcoin_es_VE.ts + bitcoin_et.ts + bitcoin_eu.ts + bitcoin_fa.ts + bitcoin_fi.ts + bitcoin_fil.ts + bitcoin_fo.ts + bitcoin_fr_CM.ts + bitcoin_fr_LU.ts + bitcoin_fr.ts + bitcoin_ga.ts + bitcoin_ga_IE.ts + bitcoin_gd.ts + bitcoin_gl.ts + bitcoin_gl_ES.ts + bitcoin_gu.ts + bitcoin_ha.ts + bitcoin_hak.ts + bitcoin_he.ts + bitcoin_hi.ts + bitcoin_hr.ts + bitcoin_hu.ts + bitcoin_id.ts + bitcoin_is.ts + bitcoin_it.ts + bitcoin_ja.ts + bitcoin_ka.ts + bitcoin_kk.ts + bitcoin_kk@latin.ts + bitcoin_kl.ts + bitcoin_km.ts + bitcoin_kn.ts + bitcoin_ko.ts + bitcoin_ku.ts + bitcoin_ku_IQ.ts + bitcoin_ky.ts + bitcoin_la.ts + bitcoin_lb.ts + bitcoin_lt.ts + bitcoin_lv.ts + bitcoin_mg.ts + bitcoin_mi.ts + bitcoin_mk.ts + bitcoin_ml.ts + bitcoin_mn.ts + bitcoin_mr.ts + bitcoin_mr_IN.ts + bitcoin_ms.ts + bitcoin_mt.ts + bitcoin_my.ts + bitcoin_nb.ts + bitcoin_ne.ts + bitcoin_nl.ts + bitcoin_no.ts + bitcoin_or.ts + bitcoin_pa.ts + bitcoin_pam.ts + bitcoin_pl.ts + bitcoin_ps.ts + bitcoin_pt.ts + bitcoin_pt_BR.ts + bitcoin_ro.ts + bitcoin_ru.ts + bitcoin_sa.ts + bitcoin_sc.ts + bitcoin_sd.ts + bitcoin_si.ts + bitcoin_sk.ts + bitcoin_sl.ts + bitcoin_sm.ts + bitcoin_sn.ts + bitcoin_so.ts + bitcoin_sq.ts + bitcoin_sr.ts + bitcoin_sr@ijekavianlatin.ts + bitcoin_sr@latin.ts + bitcoin_sv.ts + bitcoin_sw.ts + bitcoin_szl.ts + bitcoin_ta.ts + bitcoin_te.ts + bitcoin_th.ts + bitcoin_tk.ts + bitcoin_tl.ts + bitcoin_tn.ts + bitcoin_tr.ts + bitcoin_ug.ts + bitcoin_uk.ts + bitcoin_ur.ts + bitcoin_uz.ts + bitcoin_uz@Cyrl.ts + bitcoin_uz@Latn.ts + bitcoin_ve.ts + bitcoin_vi.ts + bitcoin_yi.ts + bitcoin_yo.ts + bitcoin_yue.ts + bitcoin_zh-Hans.ts + bitcoin_zh-Hant.ts + bitcoin_zh.ts + bitcoin_zh_CN.ts + bitcoin_zh_HK.ts + bitcoin_zh_TW.ts + bitcoin_zu.ts +) From acf50233cdfbb336c87d95d97db90a149e131052 Mon Sep 17 00:00:00 2001 From: Hao Xu Date: Fri, 4 Jul 2025 23:46:18 +0800 Subject: [PATCH 0084/2775] index: fix wrong assert of current_tip == m_best_block_index In BaseIndex::Sync(), pindex in `Rewind(pindex, pindex_next->pprev)` isn't always equal to m_best_block_index since m_best_block_index is updated every SYNC_LOCATOR_WRITE_INTERVAL seconds, during which multiple pindex update could happen. Thus the assert here is wrong. Signed-off-by: Hao Xu --- src/index/base.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/index/base.cpp b/src/index/base.cpp index fdd0e0d8af2e..dd35f2bd09b4 100644 --- a/src/index/base.cpp +++ b/src/index/base.cpp @@ -274,7 +274,6 @@ bool BaseIndex::Commit() bool BaseIndex::Rewind(const CBlockIndex* current_tip, const CBlockIndex* new_tip) { - assert(current_tip == m_best_block_index); assert(current_tip->GetAncestor(new_tip->nHeight) == new_tip); CBlock block; From 3aef38f44b76dfda77f47dc1a0e1fdc6ff3c7766 Mon Sep 17 00:00:00 2001 From: furszy Date: Wed, 9 Jul 2025 15:47:25 -0400 Subject: [PATCH 0085/2775] test: exercise index reorg assertion failure --- src/index/base.cpp | 13 +++-- src/test/blockfilter_index_tests.cpp | 78 ++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 7 deletions(-) diff --git a/src/index/base.cpp b/src/index/base.cpp index dd35f2bd09b4..6bbe3fde0ad3 100644 --- a/src/index/base.cpp +++ b/src/index/base.cpp @@ -186,8 +186,8 @@ void BaseIndex::Sync() { const CBlockIndex* pindex = m_best_block_index.load(); if (!m_synced) { - std::chrono::steady_clock::time_point last_log_time{0s}; - std::chrono::steady_clock::time_point last_locator_write_time{0s}; + auto last_log_time{NodeClock::now()}; + auto last_locator_write_time{last_log_time}; while (true) { if (m_interrupt) { LogInfo("%s: m_interrupt set; exiting ThreadSync", GetName()); @@ -229,14 +229,13 @@ void BaseIndex::Sync() if (!ProcessBlock(pindex)) return; // error logged internally - auto current_time{std::chrono::steady_clock::now()}; - if (last_log_time + SYNC_LOG_INTERVAL < current_time) { - LogInfo("Syncing %s with block chain from height %d", - GetName(), pindex->nHeight); + auto current_time{NodeClock::now()}; + if (current_time - last_log_time >= SYNC_LOG_INTERVAL) { + LogInfo("Syncing %s with block chain from height %d", GetName(), pindex->nHeight); last_log_time = current_time; } - if (last_locator_write_time + SYNC_LOCATOR_WRITE_INTERVAL < current_time) { + if (current_time - last_locator_write_time >= SYNC_LOCATOR_WRITE_INTERVAL) { SetBestBlockIndex(pindex); last_locator_write_time = current_time; // No need to handle errors in Commit. See rationale above. diff --git a/src/test/blockfilter_index_tests.cpp b/src/test/blockfilter_index_tests.cpp index 1fc5bbdf3fc3..224acb8b0793 100644 --- a/src/test/blockfilter_index_tests.cpp +++ b/src/test/blockfilter_index_tests.cpp @@ -16,6 +16,7 @@ #include #include +#include using node::BlockAssembler; using node::BlockManager; @@ -305,4 +306,81 @@ BOOST_FIXTURE_TEST_CASE(blockfilter_index_init_destroy, BasicTestingSetup) BOOST_CHECK(filter_index == nullptr); } +class IndexReorgCrash : public BaseIndex +{ +private: + std::unique_ptr m_db; + std::shared_future m_blocker; + int m_blocking_height; + +public: + explicit IndexReorgCrash(std::unique_ptr chain, std::shared_future blocker, + int blocking_height) : BaseIndex(std::move(chain), "test index"), m_blocker(blocker), + m_blocking_height(blocking_height) + { + const fs::path path = gArgs.GetDataDirNet() / "index"; + fs::create_directories(path); + m_db = std::make_unique(path / "db", /*n_cache_size=*/0, /*f_memory=*/true, /*f_wipe=*/false); + } + + bool AllowPrune() const override { return false; } + BaseIndex::DB& GetDB() const override { return *m_db; } + + bool CustomAppend(const interfaces::BlockInfo& block) override + { + // Simulate a delay so new blocks can get connected during the initial sync + if (block.height == m_blocking_height) m_blocker.wait(); + + // Move mock time forward so the best index gets updated only when we are not at the blocking height + if (block.height == m_blocking_height - 1 || block.height > m_blocking_height) { + SetMockTime(GetTime() + 31s); + } + + return true; + } +}; + +BOOST_FIXTURE_TEST_CASE(index_reorg_crash, BuildChainTestingSetup) +{ + // Enable mock time + SetMockTime(GetTime()); + + std::promise promise; + std::shared_future blocker(promise.get_future()); + int blocking_height = WITH_LOCK(cs_main, return m_node.chainman->ActiveChain().Tip()->nHeight); + + IndexReorgCrash index(interfaces::MakeChain(m_node), blocker, blocking_height); + BOOST_REQUIRE(index.Init()); + BOOST_REQUIRE(index.StartBackgroundSync()); + + auto func_wait_until = [&](int height, std::chrono::milliseconds timeout) { + auto deadline = std::chrono::steady_clock::now() + timeout; + while (index.GetSummary().best_block_height < height) { + if (std::chrono::steady_clock::now() > deadline) { + BOOST_FAIL(strprintf("Timeout waiting for index height %d (current: %d)", height, index.GetSummary().best_block_height)); + return; + } + std::this_thread::sleep_for(100ms); + } + }; + + // Wait until the index is one block before the fork point + func_wait_until(blocking_height - 1, /*timeout=*/5s); + + // Create a fork to trigger the reorg + std::vector> fork; + const CBlockIndex* prev_tip = WITH_LOCK(cs_main, return m_node.chainman->ActiveChain().Tip()->pprev); + BOOST_REQUIRE(BuildChain(prev_tip, GetScriptForDestination(PKHash(GenerateRandomKey().GetPubKey())), 3, fork)); + + for (const auto& block : fork) { + BOOST_REQUIRE(m_node.chainman->ProcessNewBlock(block, /*force_processing=*/true, /*min_pow_checked=*/true, nullptr)); + } + + // Unblock the index thread so it can process the reorg + promise.set_value(); + // Wait for the index to reach the new tip + func_wait_until(blocking_height + 2, 5s); + index.Stop(); +} + BOOST_AUTO_TEST_SUITE_END() From c7a24c3052557c4747eb8be7c40ee0a30e6b137d Mon Sep 17 00:00:00 2001 From: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz> Date: Fri, 1 Aug 2025 17:14:03 +0100 Subject: [PATCH 0086/2775] ci: Re-enable DEBUG=1 in centos task This reverts the workaround in commit fa079538e32d20aec6786c93e1117da1e8ea0cab, as it is no longer needed. --- ci/test/00_setup_env_native_centos.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/test/00_setup_env_native_centos.sh b/ci/test/00_setup_env_native_centos.sh index 25b9923dc7c4..94002b634933 100755 --- a/ci/test/00_setup_env_native_centos.sh +++ b/ci/test/00_setup_env_native_centos.sh @@ -10,11 +10,11 @@ export CONTAINER_NAME=ci_native_centos export CI_IMAGE_NAME_TAG="quay.io/centos/centos:stream10" export CI_BASE_PACKAGES="gcc-c++ glibc-devel libstdc++-devel ccache make ninja-build git python3 python3-pip which patch xz procps-ng ksh rsync coreutils bison e2fsprogs cmake" export PIP_PACKAGES="pyzmq" +export DEP_OPTS="DEBUG=1" export GOAL="install" export BITCOIN_CONFIG="\ -DWITH_ZMQ=ON \ -DBUILD_GUI=ON \ -DREDUCE_EXPORTS=ON \ - -DAPPEND_CPPFLAGS='-D_GLIBCXX_ASSERTIONS' \ -DCMAKE_BUILD_TYPE=Debug \ " From 3543bfdfec345cf2c952143c31674ef02de2a64b Mon Sep 17 00:00:00 2001 From: Chris Stewart Date: Fri, 1 Aug 2025 16:33:13 -0500 Subject: [PATCH 0087/2775] test: Fix 'getdescriptoractivity' RPCHelpMan, add test to verify 'spend_vin' is the correct field --- src/rpc/blockchain.cpp | 2 +- test/functional/rpc_getdescriptoractivity.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index f60deb25000d..cfc0379f6830 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -2671,7 +2671,7 @@ static RPCHelpMan getdescriptoractivity() {RPCResult::Type::STR_HEX, "blockhash", /*optional=*/true, "The blockhash this spend appears in (omitted if unconfirmed)"}, {RPCResult::Type::NUM, "height", /*optional=*/true, "Height of the spend (omitted if unconfirmed)"}, {RPCResult::Type::STR_HEX, "spend_txid", "The txid of the spending transaction"}, - {RPCResult::Type::NUM, "spend_vout", "The vout of the spend"}, + {RPCResult::Type::NUM, "spend_vin", "The input index of the spend"}, {RPCResult::Type::STR_HEX, "prevout_txid", "The txid of the prevout"}, {RPCResult::Type::NUM, "prevout_vout", "The vout of the prevout"}, {RPCResult::Type::OBJ, "prevout_spk", "", ScriptPubKeyDoc()}, diff --git a/test/functional/rpc_getdescriptoractivity.py b/test/functional/rpc_getdescriptoractivity.py index 510d7692ed71..a1d5add13889 100755 --- a/test/functional/rpc_getdescriptoractivity.py +++ b/test/functional/rpc_getdescriptoractivity.py @@ -191,6 +191,7 @@ def test_receive_then_spend(self, node, wallet): assert result['activity'][2]['type'] == 'spend' assert result['activity'][2]['spend_txid'] == sent2['txid'] + assert result['activity'][2]['spend_vin'] == 0 assert result['activity'][2]['prevout_txid'] == sent1['txid'] assert result['activity'][2]['blockhash'] == blockhash_2 From a26fbee38f95e71fbbeb6cf09e18ed7fff089ec8 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Fri, 1 Aug 2025 13:55:21 +0100 Subject: [PATCH 0088/2775] qt: Translations update The translations for the following languages, which appear to be the result of a mistake or an act of vandalism, have been discarded: - Greek (el) - Vietnamese (vi) --- src/qt/bitcoin_locale.qrc | 10 +- src/qt/locale/bitcoin_ar.ts | 36 + src/qt/locale/bitcoin_ast_ES.ts | 12 + src/qt/locale/bitcoin_bg.ts | 14 +- src/qt/locale/bitcoin_bn.ts | 2 +- src/qt/locale/bitcoin_ca.ts | 4 + src/qt/locale/bitcoin_cmn.ts | 8 + src/qt/locale/bitcoin_cs.ts | 340 +- src/qt/locale/bitcoin_da.ts | 121 +- src/qt/locale/bitcoin_de.ts | 67 +- src/qt/locale/bitcoin_de_AT.ts | 279 -- src/qt/locale/bitcoin_de_CH.ts | 4971 ------------------- src/qt/locale/bitcoin_es.ts | 576 ++- src/qt/locale/bitcoin_es_CL.ts | 4935 ------------------- src/qt/locale/bitcoin_es_CO.ts | 5092 ------------------- src/qt/locale/bitcoin_es_DO.ts | 5068 ------------------- src/qt/locale/bitcoin_es_SV.ts | 5044 ------------------- src/qt/locale/bitcoin_es_VE.ts | 5068 ------------------- src/qt/locale/bitcoin_et.ts | 64 + src/qt/locale/bitcoin_fa.ts | 142 +- src/qt/locale/bitcoin_fi.ts | 36 + src/qt/locale/bitcoin_fr_CM.ts | 5093 -------------------- src/qt/locale/bitcoin_fr_LU.ts | 5093 -------------------- src/qt/locale/bitcoin_gl.ts | 28 + src/qt/locale/bitcoin_gl_ES.ts | 28 + src/qt/locale/bitcoin_hi.ts | 404 ++ src/qt/locale/bitcoin_hu.ts | 41 + src/qt/locale/bitcoin_id.ts | 12 + src/qt/locale/bitcoin_it.ts | 4 +- src/qt/locale/bitcoin_ka.ts | 51 +- src/qt/locale/bitcoin_kn.ts | 12 + src/qt/locale/bitcoin_ko.ts | 32 +- src/qt/locale/bitcoin_ky.ts | 58 + src/qt/locale/bitcoin_lv.ts | 218 +- src/qt/locale/bitcoin_ml.ts | 45 + src/qt/locale/bitcoin_ms.ts | 20 +- src/qt/locale/bitcoin_ne.ts | 17 + src/qt/locale/bitcoin_nl.ts | 196 +- src/qt/locale/bitcoin_pl.ts | 689 ++- src/qt/locale/bitcoin_ro.ts | 479 +- src/qt/locale/bitcoin_ru.ts | 8 + src/qt/locale/bitcoin_si.ts | 18 +- src/qt/locale/bitcoin_sl.ts | 57 + src/qt/locale/bitcoin_sr.ts | 4 +- src/qt/locale/bitcoin_sr@ijekavianlatin.ts | 4 +- src/qt/locale/bitcoin_sr@latin.ts | 4 +- src/qt/locale/bitcoin_sv.ts | 28 + src/qt/locale/bitcoin_sw.ts | 337 +- src/qt/locale/bitcoin_szl.ts | 50 +- src/qt/locale/bitcoin_ta.ts | 72 +- src/qt/locale/bitcoin_th.ts | 2724 ++++++++++- src/qt/locale/bitcoin_tl.ts | 18 +- src/qt/locale/bitcoin_tr.ts | 49 + src/qt/locale/bitcoin_tt.ts | 193 + src/qt/locale/bitcoin_ur.ts | 20 +- src/qt/locale/bitcoin_uz.ts | 289 +- src/qt/locale/bitcoin_uz@Cyrl.ts | 289 +- src/qt/locale/bitcoin_uz@Latn.ts | 289 +- src/qt/locale/bitcoin_yo.ts | 15 + src/qt/locale/bitcoin_zh_CN.ts | 4 + src/qt/locale/ts_files.cmake | 10 +- 61 files changed, 7063 insertions(+), 41828 deletions(-) delete mode 100644 src/qt/locale/bitcoin_de_AT.ts delete mode 100644 src/qt/locale/bitcoin_de_CH.ts delete mode 100644 src/qt/locale/bitcoin_es_CL.ts delete mode 100644 src/qt/locale/bitcoin_es_CO.ts delete mode 100644 src/qt/locale/bitcoin_es_DO.ts delete mode 100644 src/qt/locale/bitcoin_es_SV.ts delete mode 100644 src/qt/locale/bitcoin_es_VE.ts delete mode 100644 src/qt/locale/bitcoin_fr_CM.ts delete mode 100644 src/qt/locale/bitcoin_fr_LU.ts create mode 100644 src/qt/locale/bitcoin_tt.ts diff --git a/src/qt/bitcoin_locale.qrc b/src/qt/bitcoin_locale.qrc index a3f8d609c27a..9d2eeb44a418 100644 --- a/src/qt/bitcoin_locale.qrc +++ b/src/qt/bitcoin_locale.qrc @@ -17,17 +17,10 @@ locale/bitcoin_cy.qm locale/bitcoin_da.qm locale/bitcoin_de.qm - locale/bitcoin_de_AT.qm - locale/bitcoin_de_CH.qm locale/bitcoin_el.qm locale/bitcoin_en.qm locale/bitcoin_eo.qm locale/bitcoin_es.qm - locale/bitcoin_es_CL.qm - locale/bitcoin_es_CO.qm - locale/bitcoin_es_DO.qm - locale/bitcoin_es_SV.qm - locale/bitcoin_es_VE.qm locale/bitcoin_et.qm locale/bitcoin_eu.qm locale/bitcoin_fa.qm @@ -35,8 +28,6 @@ locale/bitcoin_fil.qm locale/bitcoin_fo.qm locale/bitcoin_fr.qm - locale/bitcoin_fr_CM.qm - locale/bitcoin_fr_LU.qm locale/bitcoin_ga.qm locale/bitcoin_ga_IE.qm locale/bitcoin_gd.qm @@ -113,6 +104,7 @@ locale/bitcoin_tl.qm locale/bitcoin_tn.qm locale/bitcoin_tr.qm + locale/bitcoin_tt.qm locale/bitcoin_ug.qm locale/bitcoin_uk.qm locale/bitcoin_ur.qm diff --git a/src/qt/locale/bitcoin_ar.ts b/src/qt/locale/bitcoin_ar.ts index f2d1b608fdf6..3fe688b277e4 100644 --- a/src/qt/locale/bitcoin_ar.ts +++ b/src/qt/locale/bitcoin_ar.ts @@ -782,6 +782,10 @@ OptionsDialog + + Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. + افتح تلقائيًا منفذ عميل البتكوين على جهاز التوجيه. يعمل هذا فقط عندما يدعم جهاز التوجيه الخاص بك PCP أو NAT-PMP ويتم تمكينه. يمكن أن يكون المنفذ الخارجي عشوائيًا + Options set in this dialog are overridden by the command line: ‫التفضيلات المعينة عن طريق سطر الأوامر لها أولوية أكبر وتتجاوز التفضيلات المختارة هنا:‬ @@ -1471,6 +1475,14 @@ If you are receiving this error you should request the merchant provide a BIP21 bitcoin-core + + Error starting/committing db txn for wallet transactions removal process + خطأ بدء/ارتكاب DB TXN لعملية إزالة معاملات المحفظة + + + Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets + قيمة غير صالحة تم اكتشافها لـ "-wallet" أو "-Nowallet". يتطلب "-wallet" قيمة سلسلة ، في حين أن "-Nowallet" تقبل فقط "1" لتعطيل جميع المحافظ + More than one onion bind address is provided. Using %s for the automatically created Tor onion service. أكثر من عنوان مربوط بالonion مقدم. استخدام %s من أجل خدمة تور (Tor) المنشأة تلقائيا. @@ -1479,5 +1491,29 @@ If you are receiving this error you should request the merchant provide a BIP21 Maximum transaction weight is too low, can not accommodate change output الحد الأقصى لوزن المعاملة منخفض جدًا، ولا يمكنه استيعاب مخرجات التغيير + + Error loading databases + خطأ تحميل قواعد البيانات + + + Error opening coins database + خطأ فتح قاعدة بيانات العملات المعدنية + + + The transactions removal process can only be executed within a db txn + لا يمكن تنفيذ عملية إزالة المعاملات إلا داخل DB TXN + + + Do you want to rebuild the databases now? + هل تريد إعادة بناء قواعد البيانات الآن؟ + + + Error: Wallet does not exist + خطأ: محفظة غير موجودة + + + Error: cannot remove legacy wallet records + خطأ: لا يمكن إزالة سجلات المحفظة القديمة + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_ast_ES.ts b/src/qt/locale/bitcoin_ast_ES.ts index c8ac0509aecb..ac8765537674 100644 --- a/src/qt/locale/bitcoin_ast_ES.ts +++ b/src/qt/locale/bitcoin_ast_ES.ts @@ -717,6 +717,18 @@ La firma ye possible solamentu con direcciones del tipu 'legacy'. Pre-syncing Headers (%1%)… Presincronizando encabezaos (%1%)… + + Date: %1 + + Fecha: %1 + + + + Amount: %1 + + Cantidá: %1 + + CoinControlDialog diff --git a/src/qt/locale/bitcoin_bg.ts b/src/qt/locale/bitcoin_bg.ts index 72faaa2f169c..cbfd5e4fac9f 100644 --- a/src/qt/locale/bitcoin_bg.ts +++ b/src/qt/locale/bitcoin_bg.ts @@ -186,6 +186,10 @@ Signing is only possible with addresses of the type 'legacy'. Continue Продължи + + Back + Назад + Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. Не забравяйте, че криптирането на вашия портфейл не може напълно да защити вашите биткойни от кражба от зловреден софтуер, заразяващ компютъра ви. @@ -1039,7 +1043,7 @@ Signing is only possible with addresses of the type 'legacy'. Creating Wallet <b>%1</b>… Descriptive text of the create wallet progress window which indicates to the user which wallet is currently being created. - Създаване на уолет 1 1%1 1 + Създаване на уолет <b>%1</b>… Create wallet failed @@ -1877,6 +1881,14 @@ Signing is only possible with addresses of the type 'legacy'. Close Затвори + + Failed to load transaction: %1 + Неуспешно зареждане на трансакция: %1 + + + Failed to sign transaction: %1 + Неуспешно подписване на трансакция: %1 + Cannot sign inputs while wallet is locked. Не можете да подписвате входове, докато портфейлът е заключен. diff --git a/src/qt/locale/bitcoin_bn.ts b/src/qt/locale/bitcoin_bn.ts index a4f8fb031d84..36d4e207c640 100644 --- a/src/qt/locale/bitcoin_bn.ts +++ b/src/qt/locale/bitcoin_bn.ts @@ -163,7 +163,7 @@ Signing is only possible with addresses of the type 'legacy'. BitcoinApplication Settings file %1 might be corrupt or invalid. - 1%1 সেটিংস ফাইল টি সম্ভবত নষ্ট বা করাপ্ট + %1 সেটিংস ফাইল টি সম্ভবত নষ্ট বা করাপ্ট Runaway exception diff --git a/src/qt/locale/bitcoin_ca.ts b/src/qt/locale/bitcoin_ca.ts index 734dc78b25b4..98a82c42f5b6 100644 --- a/src/qt/locale/bitcoin_ca.ts +++ b/src/qt/locale/bitcoin_ca.ts @@ -2214,6 +2214,10 @@ Si rebeu aquest error, haureu de sol·licitar al comerciant que proporcioni un U Number of connections Nombre de connexions + + Local Addresses + Adreces locals + Block chain Cadena de blocs diff --git a/src/qt/locale/bitcoin_cmn.ts b/src/qt/locale/bitcoin_cmn.ts index 703de4da3d3d..acb9eef6316d 100644 --- a/src/qt/locale/bitcoin_cmn.ts +++ b/src/qt/locale/bitcoin_cmn.ts @@ -9,6 +9,10 @@ Create a new address 创建新地址 + + &New + 新建(&N) + Copy the currently selected address to the system clipboard 把目前选择的地址复制到系统粘贴板中 @@ -146,6 +150,10 @@ Signing is only possible with addresses of the type 'legacy'. This operation needs your wallet passphrase to unlock the wallet. 這個動作需要你的錢包密碼來解鎖錢包。 + + Unlock wallet + 解鎖錢包 + Change passphrase 修改密码 diff --git a/src/qt/locale/bitcoin_cs.ts b/src/qt/locale/bitcoin_cs.ts index 1f5c6d961021..6963cb8e2c83 100644 --- a/src/qt/locale/bitcoin_cs.ts +++ b/src/qt/locale/bitcoin_cs.ts @@ -19,7 +19,7 @@ &Copy - &Kopíruj + &Kopírovat C&lose @@ -47,7 +47,7 @@ Choose the address to receive coins with - Zvol adres na příjem mincí + Zvol adresu na příjem mincí C&hoose @@ -60,7 +60,7 @@ These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. Signing is only possible with addresses of the type 'legacy'. - Tohle jsou tvé bitcoinové adresy pro přijmaní plateb. Použij "Vytvoř novou přijimací adresu" pro vytvoření nových adres. Přihlašování je povoleno jen s adresami typu "Legacy" + Tohle jsou tvé bitcoinové adresy pro přijetí plateb. Použij "Vytvoř novou přijimací adresu" pro vytvoření nových adres. Přihlašování je povoleno jen s adresami typu "Legacy" &Copy Address @@ -174,6 +174,10 @@ Signing is only possible with addresses of the type 'legacy'. Continue Pokračovat + + Back + Zpátky + Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. Pamatujte, že zašifrování peněženky nemůže plně ochránit vaše bitcoiny před krádeží, pokud by byl váš počítač napadem malwarem. @@ -351,41 +355,41 @@ Signing is only possible with addresses of the type 'legacy'. %n second(s) - %n sekund - %n sekundy - %n sekund + %n second(s) + %n second(s) + %n second(s) %n minute(s) - %n minuta - %n minuty - %n minut + %n minute(s) + %n minute(s) + %n minute(s) %n hour(s) - %n hodina - %n hodiny - %n hodin + %n hour(s) + %n hour(s) + %n hour(s) %n day(s) - %n dn - %n dny - %n dní + %n day(s) + %n day(s) + %n day(s) %n week(s) - %n týden - %n týdny - %n týdnů + %n week(s) + %n week(s) + %n week(s) @@ -395,9 +399,9 @@ Signing is only possible with addresses of the type 'legacy'. %n year(s) - %n rok - %n roky - %n let + %n year(s) + %n year(s) + %n year(s) @@ -546,7 +550,7 @@ Signing is only possible with addresses of the type 'legacy'. Close All Wallets… - Zavřít všcehny peněženky... + Zavřít všechny peněženky... &File @@ -603,9 +607,9 @@ Signing is only possible with addresses of the type 'legacy'. Processed %n block(s) of transaction history. - Zpracován %n blok transakční historie. - Zpracovány %n bloky transakční historie. - Zpracováno %n bloků transakční historie + Processed %n block(s) of transaction history. + Processed %n block(s) of transaction history. + Processed %n block(s) of transaction history. @@ -698,6 +702,14 @@ Signing is only possible with addresses of the type 'legacy'. Close all wallets Zavřít všechny peněženky + + Migrate Wallet + Migrace peněženky + + + Migrate a wallet + Migrace peněženky + Show the %1 help message to get a list with possible Bitcoin command-line options Seznam argumentů Bitcoinu pro příkazovou řádku získáš v nápovědě %1 @@ -762,9 +774,9 @@ Signing is only possible with addresses of the type 'legacy'. %n active connection(s) to Bitcoin network. A substring of the tooltip. - %n aktivní spojení s Bitcoinovou sítí. - %n aktivní spojení s Bitcoinovou sítí. - %n aktivních spojení s Bitcoinovou sítí. + %n active connection(s) to Bitcoin network. + %n active connection(s) to Bitcoin network. + %n active connection(s) to Bitcoin network. @@ -789,7 +801,15 @@ Signing is only possible with addresses of the type 'legacy'. Pre-syncing Headers (%1%)… - Předběžná synchronizace hlavičky bloků (%1 %)... + Předběžná synchronizace hlaviček bloků (%1 %)... + + + Error creating wallet + Došlo k problému při vytváření peněženky + + + Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets) + Není možné vytvořit novou peněženku, protože software byl přeložen bez podpory sqlite (vyžadováno pro popisovačové peněženky) Error: %1 @@ -853,7 +873,7 @@ Signing is only possible with addresses of the type 'legacy'. Private key <b>disabled</b> - Privátní klíč <b>disabled</b> + Privátní klíč <b>vypnutý</b> Wallet is <b>encrypted</b> and currently <b>unlocked</b> @@ -872,7 +892,7 @@ Signing is only possible with addresses of the type 'legacy'. UnitDisplayStatusBarControl Unit to show amounts in. Click to select another unit. - Jednotka pro částky. Klikni pro výběr nějaké jiné. + Jednotka pro zobrazení částek. Klikni pro výběr nějaké jiné. @@ -1052,6 +1072,49 @@ Signing is only possible with addresses of the type 'legacy'. Načítám peněženky... + + MigrateWalletActivity + + Migrate wallet + Migrace peněženky + + + Are you sure you wish to migrate the wallet <i>%1</i>? + Opravdu chcete migrovat peněženku <i>%1</i>? + + + Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made. +If this wallet contains any watchonly scripts, a new wallet will be created which contains those watchonly scripts. +If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts. + +The migration process will create a backup of the wallet before migrating. This backup file will be named <wallet name>-<timestamp>.legacy.bak and can be found in the directory for this wallet. In the event of an incorrect migration, the backup can be restored with the "Restore Wallet" functionality. + Migrace peněženky povede k její přeměně na jednu nebo více popisovačových peněženek. Bude třeba vytvořit novou zálohu peněženky. +Pokud peněženka obsahuje jakékoliv skripty, které lze pouze sledovat, bude vytvořena nová peněženka pouze pro tyto skripty. +Pokud tato peněženka obsahuje jakékoliv řešitelné skripty, které nejdou sledovat, bude vytvořena nová jiná peněženka, která bude obsahovat tyto skripty. + +Proces migrace vytvoří zálohu peněženky přes samotnou migrací. Soubor se zálohou se bude nazývat <wallet name>-<timestamp>.legacy.bak a bude umístěn v adresáři s touto peněženkou. V případě nepovedené migrace je možné provést obnovu prostřednitvím funkce "Obnovit peněženku". + + + Migrate Wallet + Migrace peněženky + + + Migrating Wallet <b>%1</b>… + Migruji peněženku <b>%1</b>… + + + The wallet '%1' was migrated successfully. + Migrace peněženky '%1' byla úspěšná. + + + Migration failed + Migrace se nezdařila + + + Migration Successful + Migrace byla úspěšná + + OpenWalletActivity @@ -1098,7 +1161,7 @@ Signing is only possible with addresses of the type 'legacy'. Restore wallet message Title of message box which is displayed when the wallet is successfully restored. - Obnovení peněženky + Zpráva při úspěšném obnovení peněženky @@ -1130,6 +1193,14 @@ Signing is only possible with addresses of the type 'legacy'. Create Wallet Vytvořit peněženku + + You are one step away from creating your new wallet! + Jste jeden krok od vytvoření vaší nové peněženky! + + + Please provide a name and, if desired, enable any advanced options + Zadejte jméno, a pokud chcete, povolte vybrané pokročilé možnosti + Wallet Name Název peněženky @@ -1267,25 +1338,25 @@ Signing is only possible with addresses of the type 'legacy'. %n GB of space available - %n GB místa k dispozici - %n GB místa k dispozici - %n GB místa k dispozici + %n GB of space available + %n GB of space available + %n GB of space available (of %n GB needed) - (z %n GB požadovaných) - (z %n GB požadovaných) - (z %n GB požadovaných) + (of %n GB needed) + (of %n GB needed) + (of %n GB needed) (%n GB needed for full chain) - (%n GB požadovaných pro plný řetězec) - (%n GB požadovaných pro plný řetězec) - (%n GB požadovaných pro plný řetězec) + (%n GB needed for full chain) + (%n GB needed for full chain) + (%n GB needed for full chain) @@ -1304,14 +1375,14 @@ Signing is only possible with addresses of the type 'legacy'. (sufficient to restore backups %n day(s) old) Explanatory text on the capability of the current prune target. - (Dostačující k obnovení záloh %n den staré) - (Dostačující k obnovení záloh %n dny staré) - (Dostačující k obnovení záloh %n dnů staré) + (sufficient to restore backups %n day(s) old) + (sufficient to restore backups %n day(s) old) + (sufficient to restore backups %n day(s) old) %1 will download and store a copy of the Bitcoin block chain. - %1 bude stahovat kopii blockchainu. + %1 bude stahovat a ukládat kopii blockchainu. The wallet will also be stored in this directory. @@ -1493,6 +1564,11 @@ Signing is only possible with addresses of the type 'legacy'. Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain. Zapnutí prořezávání významně snižuje místo na disku, které je nutné pro uložení transakcí. Všechny bloky jsou stále plně validovány. Vrácení tohoto nastavení vyžaduje opětovné stažení celého blockchainu. + + Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. + Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. + Maximální velikost cache databáze. Ujistěte se, že máte dostatek RAM. Větší cache může přispět k rychlejší synchronizaci, ale poté už nejsou výhody tak významné pro většinu účelů. Snížení velikosti cache sníží využitost paměti. Nevyužitá pamět mempoolu je sdílená s touto pamětí. + Size of &database cache Velikost &databázové cache @@ -1505,6 +1581,14 @@ Signing is only possible with addresses of the type 'legacy'. Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! Úplná cesta ke %1 kompatibilnímu skriptu (např. C:\Downloads\hwi.exe nebo /Users/you/Downloads/hwi.py). Dejte si pozor: malware může ukrást vaše mince! + + Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. + Automaticky otevřích port klienta Bitcoinu na routeru. To funguje pouze tehdy, pokud váš router podporuje PCP nebo NAT-PMP a jsou povoleny. Externí port může být náhodný. + + + Map port using PCP or NA&T-PMP + Mapovat port pomocí PCP nebo NA&T-PMP + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) IP adresa proxy (např. IPv4: 127.0.0.1/IPv6: ::1) @@ -1517,6 +1601,10 @@ Signing is only possible with addresses of the type 'legacy'. Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu. Zavřením se aplikace minimalizuje. Pokud je tato volba zaškrtnuta, tak se aplikace ukončí pouze zvolením Konec v menu. + + Font in the Overview tab: + Písmo s pevnou šířkou v panelu Přehled: + Options set in this dialog are overridden by the command line: Nastavení v tomto dialogu jsou přepsány příkazovým řádkem: @@ -1549,11 +1637,6 @@ Signing is only possible with addresses of the type 'legacy'. Reverting this setting requires re-downloading the entire blockchain. Obnovení tohoto nastavení vyžaduje opětovné stažení celého blockchainu. - - Maximum database cache size. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. - Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. - Maximální velikost vyrovnávací paměti databáze. Větší vyrovnávací paměť může přispět k rychlejší synchronizaci, avšak přínos pro většinu případů použití je méně výrazný. Snížení velikosti vyrovnávací paměti sníží využití paměti. Nevyužívaná paměť mempoolu je pro tuto vyrovnávací paměť sdílená. - Set the number of script verification threads. Negative values correspond to the number of cores you want to leave free to the system. Tooltip text for Options window setting that sets the number of script verification threads. Explains that negative values mean to leave these many cores free to the system. @@ -1621,22 +1704,6 @@ Signing is only possible with addresses of the type 'legacy'. &External signer script path Cesta ke skriptu &Externího podepisovatele - - Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Automaticky otevře potřebný port na routeru. Tohle funguje jen za předpokladu, že tvůj router podporuje UPnP a že je UPnP povolené. - - - Map port using &UPnP - Namapovat port přes &UPnP - - - Automatically open the Bitcoin client port on the router. This only works when your router supports NAT-PMP and it is enabled. The external port could be random. - Automaticky otevřít port pro Bitcoinový klient na routeru. Toto funguje pouze pokud váš router podporuje a má zapnutou funkci NAT-PMP. Vnější port může být zvolen náhodně. - - - Map port using NA&T-PMP - Namapovat port s využitím &NAT-PMP. - Accept connections from outside. Přijímat spojení zvenčí. @@ -1963,17 +2030,21 @@ Signing is only possible with addresses of the type 'legacy'. Save Transaction Data - Zachovaj procesní data + Zachovej procesní data Partially Signed Transaction (Binary) Expanded name of the binary PSBT file format. See: BIP 174. - částečně podepsaná transakce (binární) + Částečně podepsaná transakce (binární) PSBT saved to disk. PSBT uložena na disk. + + Sends %1 to %2 + Odešle %1 na %2 + own address vlastní adresa @@ -2203,6 +2274,14 @@ Pokud vidíte tuto chybu, měli byste požádat, aby obchodník poskytl adresu k Number of connections Počet spojení + + Local Addresses + Místní adresy + + + Network addresses that your Bitcoin node is currently using to communicate with other nodes. + Síťové adresy, které tvůj bitcoinový uzel aktuálně používá ke komunikaci s ostatními uzly. + Block chain Blockchain @@ -2251,6 +2330,14 @@ Pokud vidíte tuto chybu, měli byste požádat, aby obchodník poskytl adresu k Select a peer to view detailed information. Vyber protějšek a uvidíš jeho detailní informace. + + Hide Peers Detail + Schovej detaily protějšků + + + The transport layer version: %1 + Verze transportní vrstvy: %1 + Version Verze @@ -2400,7 +2487,7 @@ Pokud vidíte tuto chybu, měli byste požádat, aby obchodník poskytl adresu k The duration of a currently outstanding ping. - Jak dlouho už čekám na pong. + Jak dlouho už čekám na ping. Ping Wait @@ -2480,13 +2567,28 @@ Pokud vidíte tuto chybu, měli byste požádat, aby obchodník poskytl adresu k Explanatory text for a short-lived outbound peer connection that is used to request addresses from a peer. Odchozí načítání adresy: krátkodobé, pro získávání adres + + detecting: peer could be v1 or v2 + Explanatory text for "detecting" transport type. + detekováno: protějšek může být v1 nebo v2 + + + v1: unencrypted, plaintext transport protocol + Explanatory text for v1 transport type. + v1: nešifrovaný, transportní protokol využívající volný text + + + v2: BIP324 encrypted transport protocol + Explanatory text for v2 transport type. + v2: transportní protokol využívající šifrování pomocí BIP324 + we selected the peer for high bandwidth relay - vybrali jsme peer pro přenos s velkou šířkou pásma + vybrali jsme protějšek pro přenos s velkou šířkou pásma the peer selected us for high bandwidth relay - partner nás vybral pro přenos s vysokou šířkou pásma + protějšek nás vybral pro přenos s vysokou šířkou pásma no high bandwidth relay selected @@ -2538,6 +2640,10 @@ Pokud vidíte tuto chybu, měli byste požádat, aby obchodník poskytl adresu k Executing command without any wallet Spouštění příkazu bez jakékoliv peněženky + + Node window - [%1] + Okno uzlu - [%1] + Executing command using "%1" wallet Příkaz se vykonává s použitím peněženky "%1" @@ -2566,7 +2672,7 @@ For more information on using this console, type %6. (peer: %1) - (uzel: %1) + (protějšek: %1) Yes @@ -2697,7 +2803,7 @@ For more information on using this console, type %6. Generates an address compatible with older wallets. - Generuje adresu kompatibilní se staršími peněženkami. + Generuje adresu kompatibilní se staršími peněženkami. Generates a native segwit address (BIP-173). Some old wallets don't support it. @@ -3030,12 +3136,12 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satos Save Transaction Data - Zachovaj procesní data + Zachovej procesní data Partially Signed Transaction (Binary) Expanded name of the binary PSBT file format. See: BIP 174. - částečně podepsaná transakce (binární) + Částečně podepsaná transakce (binární) PSBT saved @@ -3059,6 +3165,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satos Text to inform a user attempting to create a transaction of their current options. At this stage, a user can only create a PSBT. This string is displayed when private keys are disabled and an external signer is not available. Zkontrolujte prosím svůj návrh transakce. Výsledkem bude částečně podepsaná bitcoinová transakce (PSBT), kterou můžete uložit nebo kopírovat a poté podepsat např. pomocí offline %1 peněženky nebo hardwarové peněženky kompatibilní s PSBT. + + %1 from wallet '%2' + %1 z peněženky '%2' + Do you want to create this transaction? Message displayed when attempting to create a transaction. Cautionary text to prompt the user to verify that the displayed transaction details represent the transaction the user intends to create. @@ -3139,9 +3249,9 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satos Estimated to begin confirmation within %n block(s). - Potvrzování by podle odhadu mělo začít během %n bloku. - Potvrzování by podle odhadu mělo začít během %n bloků. - Potvrzování by podle odhadu mělo začít během %n bloků. + Estimated to begin confirmation within %n block(s). + Estimated to begin confirmation within %n block(s). + Estimated to begin confirmation within %n block(s). @@ -3460,9 +3570,9 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satos matures in %n more block(s) - dozraje za %n další blok - dozraje za %n další bloky - dozraje za %n dalších bloků + matures in %n more block(s) + matures in %n more block(s) + matures in %n more block(s) @@ -3950,10 +4060,6 @@ Přejděte do Soubor > Otevřít peněženku pro načtení peněženky. Cannot downgrade wallet from version %i to version %i. Wallet version unchanged. Nelze snížit verzi peněženky z verze %i na verzi %i. Verze peněženky nebyla změněna. - - Cannot obtain a lock on data directory %s. %s is probably already running. - Nedaří se mi získat zámek na datový adresář %s. %s pravděpodobně už jednou běží. - 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. Nelze zvýšit verzi ne-HD dělené peněženky z verze %i na verzi %i bez aktualizace podporující pre-split keypool. Použijte prosím verzi %i nebo verzi neuvádějte. @@ -3975,6 +4081,10 @@ Přejděte do Soubor > Otevřít peněženku pro načtení peněženky. Chyba při čtení %s! Data o transakci mohou chybět a nebo být chybná. Ověřuji peněženku. + + Error starting/committing db txn for wallet transactions removal process + Chyba při spuštění/ukončení procesu odebrání db txn pro transakce peněženky + Error: Dumpfile format record is incorrect. Got "%s", expected "format". Chyba: záznam formátu souboru výpisu je nesprávný. Získáno "%s", očekáváno "format". @@ -4003,6 +4113,10 @@ Ověřuji peněženku. Invalid or corrupt peers.dat (%s). If you believe this is a bug, please report it to %s. As a workaround, you can move the file (%s) out of the way (rename, move, or delete) to have a new one created on the next start. Neplatný nebo poškozený soubor peers.dat (%s). Pokud věříš, že se jedná o chybu, prosím nahlas ji na %s. Jako řešení lze přesunout soubor (%s) z cesty (přejmenovat, přesunout nebo odstranit), aby se při dalším spuštění vytvořil nový. + + Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets + Byla zjištěna neplatná hodnota pro '-wallet' nebo '-nowallet'. '-wallet' vyžaduje textový parametr, zatímco '-nowallet' přijímá pouze '1' k zakázání všech peněženek + More than one onion bind address is provided. Using %s for the automatically created Tor onion service. Byla zadána více než jedna onion adresa. Použiju %s pro automaticky vytvořenou službu sítě Tor. @@ -4019,6 +4133,10 @@ Ověřuji peněženku. No wallet file format provided. To use createfromdump, -format=<format> must be provided. Nebyl poskytnut formát souboru peněženky. Pro použití createfromdump, -format=<format> musí být poskytnut. + + Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. + Je použit parametr '-upnp', ale jeho podpora byla odstraněna ve verzi 29.0. Zvažte použití '-natpmp' místo něho. + Please contribute if you find %s useful. Visit %s for further information about the software. Prosíme, zapoj se nebo přispěj, pokud ti %s přijde užitečný. Více informací o programu je na %s. @@ -4115,6 +4233,10 @@ Ověřuji peněženku. -maxmempool must be at least %d MB -maxmempool musí být alespoň %d MB + + Cannot obtain a lock on directory %s. %s is probably already running. + Nepodařilo se získat zámek adresáře %s. %s je pravděpodobně již využíván. + Cannot resolve -%s address: '%s' Nemohu přeložit -%s adresu: '%s' @@ -4127,10 +4249,6 @@ Ověřuji peněženku. Cannot set -peerblockfilters without -blockfilterindex. Nelze nastavit -peerblockfilters bez -blockfilterindex. - - Cannot write to data directory '%s'; check permissions. - Není možné zapisovat do adresáře ' %s'; zkontrolujte oprávnění. - %s is set very high! Fees this large could be paid on a single transaction. %s je nastaveno příliš vysoko! Poplatek takhle vysoký může pokrýt celou transakci. @@ -4249,6 +4367,10 @@ Nelze obnovit zálohu peněženky. Block verification was interrupted Ověření bloku bylo přerušeno + + Cannot write to directory '%s'; check permissions. + Nejde zapisovat do adresáře '%s'; zkontrolujte oprávnění. + Config setting for %s only applied on %s network when in [%s] section. Nastavení pro %s je nastaveno pouze na síťi %s pokud jste v sekci [%s] @@ -4273,10 +4395,6 @@ Nelze obnovit zálohu peněženky. Disk space is too low! Na disku je příliš málo místa! - - Do you want to rebuild the block database now? - Chceš přestavět databázi bloků hned teď? - Done loading Načítání dokončeno @@ -4317,10 +4435,18 @@ Nelze obnovit zálohu peněženky. Error loading block database Chyba při načítání databáze bloků + + Error loading databases + Chyba při načítání databází + Error opening block database Chyba při otevírání databáze bloků + + Error opening coins database + Chyba při otevírání databáze mincí + Error reading configuration file: %s Chyba při čtení konfiguračního souboru: %s @@ -4401,6 +4527,10 @@ Nelze obnovit zálohu peněženky. Error: Unable to remove watchonly address book data Chyba: Nelze odstranit data z adresáře pouze pro sledování + + Error: Unable to write data to disk for wallet %s + Chyba: Nepodařilo se zapsat data peněženky %sna disk + Error: Unable to write record to new wallet Chyba: nelze zapsat záznam do nové peněženky @@ -4525,10 +4655,6 @@ Nelze obnovit zálohu peněženky. No addresses available Není k dispozici žádná adresa - - Not enough file descriptors available. - Je nedostatek deskriptorů souborů. - Not found pre-selected input %s Nenalezen předem vybraný vstup %s @@ -4621,6 +4747,10 @@ Nelze obnovit zálohu peněženky. The transaction amount is too small to pay the fee Částka v transakci je příliš malá na pokrytí poplatku + + The transactions removal process can only be executed within a db txn + Proces odstranění transakcí lze provést pouze v rámci db txn + The wallet will avoid paying less than the minimum relay fee. Peněženka zaručí přiložení poplatku alespoň ve výši minima pro přenos transakce. @@ -4725,10 +4855,26 @@ Nelze obnovit zálohu peněženky. Unsupported logging category %s=%s. Nepodporovaná logovací kategorie %s=%s. + + Do you want to rebuild the databases now? + Chcete znovusestavit databázi nyní? + Error: Could not add watchonly tx %s to watchonly wallet Chyba: Nelze přidat pouze-sledovací tx %s do peněženky pro čtení + + Error: Wallet does not exist + Chyba: Peněženka neexistuje + + + Error: cannot remove legacy wallet records + Chyba: nepodařilo se odstranit záznamy o legacy peněžence + + + Not enough file descriptors available. %d available, %d required. + Nedostatek volných file deskriptorů. %dvolných, %dvyžadovaných + User Agent comment (%s) contains unsafe characters. Komentář u typu klienta (%s) obsahuje riskantní znaky. diff --git a/src/qt/locale/bitcoin_da.ts b/src/qt/locale/bitcoin_da.ts index 78ce4e7155b6..d222e7043a39 100644 --- a/src/qt/locale/bitcoin_da.ts +++ b/src/qt/locale/bitcoin_da.ts @@ -1,10 +1,6 @@ AddressBookPage - - Right-click to edit address or label - Højreklik for at redigere adresse eller etiket - Create a new address Opret en ny adresse @@ -15,7 +11,7 @@ Copy the currently selected address to the system clipboard - Kopiér den valgte adresse til systemets udklipsholder + Kopier den valgte adressen til systemets utklippstavle &Copy @@ -57,23 +53,6 @@ C&hoose &Vælg - - These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Disse er dine Bitcoin-adresser til afsendelse af betalinger. Tjek altid beløb og modtagelsesadresse, inden du sender bitcoins. - - - These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. -Signing is only possible with addresses of the type 'legacy'. - Disse er dine Bitcoin adresser til at modtage betalinger. Benyt 'Opret ny modtager adresse' knappen i modtag fanen for at oprette nye adresser. - - - &Copy Address - &Kopiér adresse - - - Copy &Label - Kopiér &mærkat - &Edit &Redigér @@ -87,11 +66,6 @@ Signing is only possible with addresses of the type 'legacy'. Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. Kommasepareret fil - - There was an error trying to save the address list to %1. Please try again. - An error message. %1 is a stand-in argument for the name of the file we attempted to save to. - Der opstod en fejl under gemning af adresselisten til %1. Prøv venligst igen. - Exporting Failed Eksport mislykkedes @@ -343,36 +317,36 @@ Signing is only possible with addresses of the type 'legacy'. %n second(s) - %n sekund(er) - %n sekund(er) + %n second(s) + %n second(s) %n minute(s) - %n minut(er) - %n minut(er) + %n minute(s) + %n minute(s) %n hour(s) - %n time(r) - %n time(r) + %n hour(s) + %n hour(s) %n day(s) - %n dag(e) - %n dag(e) + %n day(s) + %n day(s) %n week(s) - %n uge(r) - %n uge(r) + %n week(s) + %n week(s) @@ -382,8 +356,8 @@ Signing is only possible with addresses of the type 'legacy'. %n year(s) - %n år - %n år + %n year(s) + %n year(s) @@ -585,8 +559,8 @@ Signing is only possible with addresses of the type 'legacy'. Processed %n block(s) of transaction history. - Behandlede %n blok(e) af transaktionshistorik. - Behandlede %n blok(e) af transaktionshistorik. + Processed %n block(s) of transaction history. + Processed %n block(s) of transaction history. @@ -725,8 +699,8 @@ Signing is only possible with addresses of the type 'legacy'. %n active connection(s) to Bitcoin network. A substring of the tooltip. - %n aktiv(e) forbindelse(r) til Bitcoin-netværket. - %n aktiv(e) forbindelse(r) til Bitcoin-netværket. + %n active connection(s) to Bitcoin network. + %n active connection(s) to Bitcoin network. @@ -1187,22 +1161,22 @@ Signing is only possible with addresses of the type 'legacy'. %n GB of space available - %n GB fri plads tilgængelig - %n GB fri plads tilgængelig + %n GB of space available + %n GB of space available (of %n GB needed) - (ud af %n GB nødvendig) - (ud af %n GB nødvendig) + (of %n GB needed) + (of %n GB needed) (%n GB needed for full chain) - (%n GB nødvendig for komplet kæde) - (%n GB nødvendig for komplet kæde) + (%n GB needed for full chain) + (%n GB needed for full chain) @@ -1217,8 +1191,8 @@ Signing is only possible with addresses of the type 'legacy'. (sufficient to restore backups %n day(s) old) Explanatory text on the capability of the current prune target. - (tilstrækkelig for at gendanne backups %n dag(e) gammel) - (tilstrækkelig for at gendanne backups %n dag(e) gammel) + (sufficient to restore backups %n day(s) old) + (sufficient to restore backups %n day(s) old) @@ -1445,11 +1419,6 @@ Signing is only possible with addresses of the type 'legacy'. Reverting this setting requires re-downloading the entire blockchain. Ændring af denne indstilling senere kræver download af hele blokkæden igen. - - Maximum database cache size. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. - Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. - Maksimal størrelse på databasecache. En større cache kan bidrage til hurtigere synkronisering, hvorefter fordelen er mindre synlig i de fleste tilfælde. Sænkning af cachestørrelsen vil reducere hukommelsesforbruget. Ubrugt mempool-hukommelse deles for denne cache. - Set the number of script verification threads. Negative values correspond to the number of cores you want to leave free to the system. Tooltip text for Options window setting that sets the number of script verification threads. Explains that negative values mean to leave these many cores free to the system. @@ -1517,22 +1486,6 @@ Signing is only possible with addresses of the type 'legacy'. &External signer script path &Ekstern underskrivers scriptsti - - Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Åbn automatisk Bitcoin-klientens port på routeren. Dette virker kun, når din router understøtter UPnP, og UPnP er aktiveret. - - - Map port using &UPnP - Konfigurér port vha. &UPnP - - - Automatically open the Bitcoin client port on the router. This only works when your router supports NAT-PMP and it is enabled. The external port could be random. - Åbn automatisk Bitcoin-klientporten på routeren. Dette virker kun, når din router understøtter NAT-PMP, og den er aktiveret. Den eksterne port kan være tilfældig. - - - Map port using NA&T-PMP - Kortport ved hjælp af NA&T-PMP - Accept connections from outside. Acceptér forbindelser udefra. @@ -2932,8 +2885,8 @@ Bemærk: Da gebyret beregnes på per-byte-basis, ville en gebyrsats på "100 sat Estimated to begin confirmation within %n block(s). - Anslået at begynde bekræftelse inden for %n blok. - Anslået at begynde bekræftelse inden for %n blokke. + Estimated to begin confirmation within %n block(s). + Estimated to begin confirmation within %n block(s). @@ -3238,8 +3191,8 @@ Bemærk: Da gebyret beregnes på per-byte-basis, ville en gebyrsats på "100 sat matures in %n more block(s) - modnes i yderligere %n blok - modnes i yderligere %n blokke + matures in %n more block(s) + matures in %n more block(s) @@ -3727,10 +3680,6 @@ Gå til Fil > Åbn Pung for, at indlæse en pung. Cannot downgrade wallet from version %i to version %i. Wallet version unchanged. Kan ikke nedgradere tegnebogen fra version %i til version %i. Wallet-versionen uændret. - - Cannot obtain a lock on data directory %s. %s is probably already running. - Kan ikke opnå en lås på datamappe %s. %s kører sansynligvis allerede. - 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. Kan ikke opgradere en ikke-HD split wallet fra version %i til version %i uden at opgradere til at understøtte pre-split keypool. Brug venligst version %i eller ingen version angivet. @@ -3879,10 +3828,6 @@ Gå til Fil > Åbn Pung for, at indlæse en pung. Cannot set -peerblockfilters without -blockfilterindex. Kan ikke indstille -peerblockfilters uden -blockfilterindex. - - Cannot write to data directory '%s'; check permissions. - Kan ikke skrive til datamappe '%s'; tjek tilladelser. - %s is set very high! Fees this large could be paid on a single transaction. %s er sat meget højt! Gebyrer så store risikeres betalt på en enkelt transaktion. @@ -3935,10 +3880,6 @@ Gå til Fil > Åbn Pung for, at indlæse en pung. Disk space is too low! Fejl: Disk pladsen er for lav! - - Do you want to rebuild the block database now? - Ønsker du at genopbygge blokdatabasen nu? - Done loading Indlæsning gennemført @@ -4139,10 +4080,6 @@ Gå til Fil > Åbn Pung for, at indlæse en pung. No addresses available Ingen adresser tilgængelige - - Not enough file descriptors available. - For få tilgængelige fildeskriptorer. - Prune cannot be configured with a negative value. Beskæring kan ikke opsættes med en negativ værdi. diff --git a/src/qt/locale/bitcoin_de.ts b/src/qt/locale/bitcoin_de.ts index 5954e1b766c4..9e6a34700005 100644 --- a/src/qt/locale/bitcoin_de.ts +++ b/src/qt/locale/bitcoin_de.ts @@ -997,7 +997,7 @@ Das Signieren ist nur mit Adressen vom Typ 'Legacy' möglich. Are you sure you wish to migrate the wallet <i>%1</i>? - Sicher, dass die Wallet migriert werden soll? <i>%1</i>? + Sicher, dass die Wallet <i>%1</i> migriert werden soll? Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made. @@ -1029,7 +1029,7 @@ Während des Migrationsprozesses wird vor der Migration ein Backup der Wallet er Solvable but not watched scripts have been migrated to a new wallet named '%1'. - Lösbare aber nicht beobachtete Scripts wurde in eine neue Wallet namens '%1' überführt. + Lösbare aber nicht beobachtete Scripts wurden in eine neue Wallet namens '%1' überführt. Migration failed @@ -1081,12 +1081,12 @@ Während des Migrationsprozesses wird vor der Migration ein Backup der Wallet er Restore wallet warning Title of message box which is displayed when the wallet is restored with some warning. - Wallet Wiederherstellungs Warnung + Wallet-Wiederherstellungswarnung Restore wallet message Title of message box which is displayed when the wallet is successfully restored. - Wallet Wiederherstellungs Nachricht + Wallet-Wiederherstellungsnachricht @@ -1169,7 +1169,7 @@ Während des Migrationsprozesses wird vor der Migration ein Backup der Wallet er Compiled without external signing support (required for external signing) "External signing" means using devices such as hardware wallets. - Ohne Unterstützung für die Signierung durch externe Geräte Dritter kompiliert (notwendig für Signierung durch externe Geräte Dritter) + Ohne Unterstützung für externe Signierung kompiliert (notwendig für externe Signierung) @@ -1484,7 +1484,7 @@ Während des Migrationsprozesses wird vor der Migration ein Backup der Wallet er Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! - Vollständiger Pfad zu %1 einem Bitcoin Core kompatibelen Script (z.B.: C:\Downloads\hwi.exe oder /Users/you/Downloads/hwi.py). Achtung: Malware kann Bitcoins stehlen! + Vollständiger Pfad zu einem mit %1 kompatiblen Skript (z.B. C:\Downloads\hwi.exe oder /Users/you/Downloads/hwi.py). Achtung: Malware kann Coins stehlen Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. @@ -1594,12 +1594,12 @@ Während des Migrationsprozesses wird vor der Migration ein Backup der Wallet er Enable &PSBT controls An options window setting to enable PSBT controls. - &PBST-Kontrollen aktivieren + &PSBT-Kontrollen aktivieren Whether to show PSBT controls. Tooltip text for options window setting that enables PSBT controls. - Ob PSBT-Kontrollen angezeigt werden sollen. + Ob PSBT-Kontrollen angezeigt werden sollen. External Signer (e.g. hardware wallet) @@ -1708,7 +1708,7 @@ Während des Migrationsprozesses wird vor der Migration ein Backup der Wallet er Compiled without external signing support (required for external signing) "External signing" means using devices such as hardware wallets. - Ohne Unterstützung für die Signierung durch externe Geräte Dritter kompiliert (notwendig für Signierung durch externe Geräte Dritter) + Ohne Unterstützung für externe Signierung kompiliert (notwendig für externe Signierung) default @@ -2211,7 +2211,7 @@ Wenn Sie diese Fehlermeldung erhalten, sollten Sie den Händler bitten, einen BI Hide Peers Detail - Reiter mit Peers verstecken + Peer-Details ausblenden Ctrl+X @@ -2223,7 +2223,7 @@ Wenn Sie diese Fehlermeldung erhalten, sollten Sie den Händler bitten, einen BI Whether we relay transactions to this peer. - Ob wir Adressen an diesen Peer weiterleiten. + Ob wir Transaktionen an diesen Peer weiterleiten. Transaction Relay @@ -2266,7 +2266,7 @@ Wenn Sie diese Fehlermeldung erhalten, sollten Sie den Händler bitten, einen BI The total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). Tooltip text for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Die Gesamtzahl der von diesem Peer empfangenen Adressen, die aufgrund von Ratenbegrenzung verworfen (nicht verarbeitet) wurden. + Die Gesamtzahl der von diesem Peer empfangenen Adressen, die verarbeitet wurden (ausgenommen Adressen, die aufgrund von Ratenbegrenzung verworfen wurden). The total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. @@ -3315,7 +3315,7 @@ Hinweis: Da die Gebühr auf Basis der Bytes berechnet wird, führt eine Gebühre Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction! - Geben Sie die Zahlungsadresse des Empfängers, Nachricht (achten Sie darauf Zeilenumbrüche, Leerzeichen, Tabulatoren usw. exakt zu kopieren) und Signatur unten ein, um die Nachricht zu verifizieren. Vorsicht, interpretieren Sie nicht mehr in die Signatur hinein, als in der signierten Nachricht selber enthalten ist, um nicht von einem Man-in-the-middle-Angriff hinters Licht geführt zu werden. Beachten Sie, dass dies nur beweist, dass die signierende Partei über diese Adresse Überweisungen empfangen kann. + Geben Sie die Zahlungsadresse des Empfängers, Nachricht (achten Sie darauf Zeilenumbrüche, Leerzeichen, Tabulatoren usw. exakt zu kopieren) und Signatur unten ein, um die Nachricht zu verifizieren. Vorsicht, interpretieren Sie nicht mehr in die Signatur hinein, als in der signierten Nachricht selber enthalten ist, um nicht von einem Man-in-the-middle-Angriff hinters Licht geführt zu werden. Beachten Sie, dass dies nur beweist, dass die signierende Partei über diese Adresse Überweisungen empfangen kann, es aber nicht die Absenderschaft irgendeiner Transaktion beweisen kann. The Bitcoin address the message was signed with @@ -3825,7 +3825,7 @@ Hinweis: Da die Gebühr auf Basis der Bytes berechnet wird, führt eine Gebühre The transaction history was successfully saved to %1. - Speichern des Transaktionsverlaufs nach %1 war erfolgreich. + Der Transaktionsverlauf wurde erfolgreich in %1 gespeichert. Range: @@ -4007,7 +4007,7 @@ Gehen Sie zu Datei > Wallet Öffnen, um eine Wallet zu laden. 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. - Kann ein aufgespaltenes nicht-HD Wallet nicht von Version %i auf Version %i aktualisieren, ohne auf Unterstützung von Keypools vor der Aufspaltung zu aktualisieren. Bitte benutze Version%i oder keine bestimmte Version. + Kann ein aufgespaltenes nicht-HD Wallet nicht von Version %i auf Version %i aktualisieren, ohne auf Unterstützung von Keypools vor der Aufspaltung zu aktualisieren. Bitte benutze Version %i oder keine bestimmte Version. Disk space for %s may not accommodate the block files. Approximately %u GB of data will be stored in this directory. @@ -4031,7 +4031,7 @@ Gehen Sie zu Datei > Wallet Öffnen, um eine Wallet zu laden. Error: Dumpfile format record is incorrect. Got "%s", expected "format". - Fehler: Dumpdatei Format Eintrag ist Ungültig. Habe "%s" bekommen, aber "format" erwartet. + Fehler: Dumpdatei Format Eintrag ist ungültig. Habe "%s" bekommen, aber "format" erwartet. Error: Dumpfile identifier record is incorrect. Got "%s", expected "%s". @@ -4039,7 +4039,7 @@ Gehen Sie zu Datei > Wallet Öffnen, um eine Wallet zu laden. Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s - Fehler: Die Version der Speicherauszugsdatei ist %s und wird nicht unterstützt. Diese Version von bitcoin-wallet unterstützt nur Speicherauszugsdateien der Version 1. + Fehler: Die Version %sder Dumpdatei wird nicht unterstützt. Diese Version von bitcoin-wallet unterstützt nur Dumpdateien der Version 1. Error: Legacy wallets only support the "legacy", "p2sh-segwit", and "bech32" address types @@ -4228,7 +4228,7 @@ Bitte nutzen Sie entweder "bdb" oder "sqlite". Error: Transaction %s in wallet cannot be identified to belong to migrated wallets - Fehler: Transaktion in Wallet %s kann nicht als zu migrierten Wallet gehörend identifiziert werden + Fehler: Transaktion %s in der Wallet kann nicht den migrierten Wallets zugeordnet werden. Failed to calculate bump fees, because unconfirmed UTXOs depend on enormous cluster of unconfirmed transactions. @@ -4237,7 +4237,7 @@ Bitte nutzen Sie entweder "bdb" oder "sqlite". Failed to remove snapshot chainstate dir (%s). Manually remove it before restarting. - Fehler beim Entfernen des Snapshot-Chainstate-Verzeichnisses (%s). Entferne es manuell, bevor dem Neustart. + Fehler beim Entfernen des Snapshot-Chainstate-Verzeichnisses (%s). Entferne es manuell vor dem Neustart. @@ -4278,7 +4278,7 @@ Bitte nutzen Sie entweder "bdb" oder "sqlite". Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is explicitly forbidden: -onion=0 - Ausgehende Verbindungen sind eingeschränkt auf Tor (-onlynet=onion), aber der Proxy, um das Tor-Netzwerk zu erreichen ist nicht vorhanden (no -proxy= and no -onion= given) oder ausdrücklich verboten (-onion=0) + Ausgehende Verbindungen sind eingeschränkt auf Tor (-onlynet=onion), aber der Proxy, um das Tor-Netzwerk zu erreichen ist nicht ausdrücklich verboten (-onion=0) Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is not provided: none of -proxy, -onion or -listenonion is given @@ -4318,7 +4318,7 @@ Bitte nutzen Sie entweder "bdb" oder "sqlite". Transaction requires one destination of non-0 value, a non-0 feerate, or a pre-selected input - Die Transaktion erfordert ein Ziel mit einem Wert ungleich nicht-0, eine Gebühr ungleich nicht-0 oder eine vorausgewählte Eingabe + Die Transaktion erfordert ein Ziel mit einem Wert ungleich 0, eine Gebühr ungleich 0 oder eine vorausgewählte Eingabe UTXO snapshot failed to validate. Restart to resume normal initial block download, or try loading a different snapshot. @@ -4388,7 +4388,7 @@ Die Sicherung der Wallet kann nicht wiederhergestellt werden. Config setting for %s only applied on %s network when in [%s] section. - Konfigurationseinstellungen für %s sind nur auf %s network gültig, wenn in Sektion [%s] + Konfigurationseinstellung für %s ist nur im %s Netzwerk gültig, wenn sie im Abschnitt [%s] steht. Corrupt block found indicating potential hardware failure. @@ -4416,7 +4416,7 @@ Die Sicherung der Wallet kann nicht wiederhergestellt werden. Dump file %s does not exist. - Speicherauszugsdatei %sexistiert nicht. + Dumpdatei %s existiert nicht. Elliptic curve cryptography sanity check failure. %s is shutting down. @@ -4492,7 +4492,7 @@ Die Sicherung der Wallet kann nicht wiederhergestellt werden. Error: Dumpfile checksum does not match. Computed %s, expected %s - Fehler: Prüfsumme der Speicherauszugsdatei stimmt nicht überein. + Fehler: Prüfsumme der Dumpdatei stimmt nicht überein. Berechnet: %s, erwartet: %s @@ -4553,7 +4553,7 @@ Berechnet: %s, erwartet: %s Error: Unable to write data to disk for wallet %s - Fehler: Daten können nicht auf die Festplatte für die Wallet %s geschrieben werden + Fehler: Daten können nicht auf die Festplatte für die Wallet %s geschrieben werden Error: Unable to write record to new wallet @@ -4669,7 +4669,7 @@ Berechnet: %s, erwartet: %s Invalid amount for %s=<amount>: '%s' (must be at least %s) - Ungültiger Betrag für %s=<amount>: '%s' (muss mindestens %ssein) + Ungültiger Betrag für %s=<amount>: '%s' (muss mindestens %s sein) Invalid amount for %s=<amount>: '%s' @@ -4737,7 +4737,7 @@ Berechnet: %s, erwartet: %s Not solvable pre-selected input %s - Nicht auflösbare vorausgewählter Input %s + Nicht auflösbarer vorausgewählter Input %s Only direction was set, no permissions: '%s' @@ -4757,7 +4757,7 @@ Berechnet: %s, erwartet: %s Reducing -maxconnections from %d to %d, because of system limitations. - Reduziere -maxconnections von %d zu %d, aufgrund von Systemlimitierungen. + Reduziere -maxconnections von %d auf %d, aufgrund von Systemlimitierungen. Replaying blocks… @@ -4777,8 +4777,7 @@ Berechnet: %s, erwartet: %s SQLiteDatabase: Failed to read database verification error: %s - Datenbank konnte nicht gelesen werden -Verifikations-Error: %s + SQLiteDatabase: Fehler beim Lesen der Datenbank, Verifizierungsfehler: %s SQLiteDatabase: Unexpected application id. Expected %u, got %u @@ -4786,7 +4785,7 @@ Verifikations-Error: %s Section [%s] is not recognized. - Sektion [%s] ist nicht delegiert. + Sektion [%s] wird nicht erkannt. Signer did not echo address @@ -4846,7 +4845,7 @@ Verifikations-Error: %s The specified config file %s does not exist - Die angegebene Konfigurationsdatei %sexistiert nicht + Die angegebene Konfigurationsdatei %s existiert nicht The transaction amount is too small to pay the fee @@ -4858,7 +4857,7 @@ Verifikations-Error: %s The wallet will avoid paying less than the minimum relay fee. - Das Wallet verhindert Zahlungen, die die Mindesttransaktionsgebühr nicht berücksichtigen. + Das Wallet vermeidet es, weniger als die Mindesttransaktionsgebühr zu zahlen. There is no ScriptPubKeyManager for this address @@ -4930,7 +4929,7 @@ Verifikations-Error: %s Unable to open %s for writing - Konnte %s nicht zum Schreiben zu öffnen + Konnte %s nicht zum Schreiben öffnen Unable to parse -maxuploadtarget: '%s' diff --git a/src/qt/locale/bitcoin_de_AT.ts b/src/qt/locale/bitcoin_de_AT.ts deleted file mode 100644 index 2f940f47c5ea..000000000000 --- a/src/qt/locale/bitcoin_de_AT.ts +++ /dev/null @@ -1,279 +0,0 @@ - - - QObject - - %n second(s) - - %n second(s) - %n second(s) - - - - %n minute(s) - - %n minute(s) - %n minute(s) - - - - %n hour(s) - - %n hour(s) - %n hour(s) - - - - %n day(s) - - %n day(s) - %n day(s) - - - - %n week(s) - - %n week(s) - %n week(s) - - - - %n year(s) - - %n year(s) - %n year(s) - - - - - BitcoinGUI - - Processed %n block(s) of transaction history. - - Processed %n block(s) of transaction history. - Processed %n block(s) of transaction history. - - - - %n active connection(s) to Bitcoin network. - A substring of the tooltip. - - %n active connection(s) to Bitcoin network. - %n active connection(s) to Bitcoin network. - - - - - Intro - - %n GB of space available - - %n GB of space available - %n GB of space available - - - - (of %n GB needed) - - (of %n GB needed) - (of %n GB needed) - - - - (%n GB needed for full chain) - - (%n GB needed for full chain) - (%n GB needed for full chain) - - - - (sufficient to restore backups %n day(s) old) - Explanatory text on the capability of the current prune target. - - (sufficient to restore backups %n day(s) old) - (sufficient to restore backups %n day(s) old) - - - - - OptionsDialog - - Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. - Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. - Maximale Größe des Datenbankcaches. Stelle sicher, dass genügend RAM zur Verfügung steht. Ein größerer Cache kann zu einer schnelleren Synchronisierung beitragen, wonach der Vorteil in den meisten Anwendungsfällen weniger ausgeprägt ist. Durch Verringern der Cache-Größe wird die Speicherauslastung reduziert. Ungenutzter Mempool-Speicher wird für diesen Cache freigegeben. - - - Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. - Automatisch den Bitcoin-Client-Port auf dem Router öffnen. Dies funktioniert nur, wenn dieser Router PCP oder NAT-PMP unterstützt und es aktiviert ist. Der externe Port kann zufällig sein. - - - Map port using PCP or NA&T-PMP - Zuordnen des Ports über PCP oder NA&T-PMP - - - - QRImageWidget - - &Save Image… - &Bild speichern... - - - &Copy Image - Grafik &kopieren - - - Resulting URI too long, try to reduce the text for label / message. - Resultierende URI ist zu lang, bitte den Text für Bezeichnung/Nachricht kürzen. - - - Error encoding URI into QR Code. - Beim Kodieren der URI in den QR-Code ist ein Fehler aufgetreten. - - - QR code support not available. - QR Code Funktionalität nicht vorhanden - - - Save QR Code - QR-Code speichern - - - PNG Image - Expanded name of the PNG file format. See: https://en.wikipedia.org/wiki/Portable_Network_Graphics. - PNG-Bild - - - - RPCConsole - - N/A - k.A. - - - Client version - Client-Version - - - &Information - Hinweis - - - General - Allgemein - - - Datadir - Datenverzeichnis - - - To specify a non-default location of the data directory use the '%1' option. - Verwenden Sie die Option '%1' um einen anderen, nicht standardmäßigen Speicherort für das Datenverzeichnis festzulegen. - - - Blocksdir - Blockverzeichnis - - - To specify a non-default location of the blocks directory use the '%1' option. - Verwenden Sie die Option '%1' um einen anderen, nicht standardmäßigen Speicherort für das Blöckeverzeichnis festzulegen. - - - Startup time - Startzeit - - - Network - Netzwerk - - - Number of connections - Anzahl der Verbindungen - - - - SendCoinsDialog - - Estimated to begin confirmation within %n block(s). - - Estimated to begin confirmation within %n block(s). - Estimated to begin confirmation within %n block(s). - - - - - TransactionDesc - - matures in %n more block(s) - - matures in %n more block(s) - matures in %n more block(s) - - - - - bitcoin-core - - Error starting/committing db txn for wallet transactions removal process - Fehler beim Starten/Commit von db txn für das Entfernen von Wallet-Transaktionen - - - Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets - Ungültiger Wert für '-wallet' oder '-nowallet' erkannt. '-wallet' erfordert einen String-Wert, während '-nowallet' nur '1' akzeptiert, um alle Wallets zu deaktivieren - - - Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. - Die Option '-upnp' ist gesetzt, aber die UPnP-Unterstützung wurde in Version 29.0 eingestellt. Erwäge stattdessen die Verwendung von '-natpmp'. - - - Cannot obtain a lock on directory %s. %s is probably already running. - Eine Sperre für das Verzeichnis %s kann nicht gesetzt werden. %s läuft wahrscheinlich bereits. - - - Specified -blockmaxweight (%d) exceeds consensus maximum block weight (%d) - Angegebenes -blockmaxweight (%d) überschreitet das Konsens-Maximum-Blockgewicht (%d) - - - Specified -blockreservedweight (%d) exceeds consensus maximum block weight (%d) - Angegebenes -blockreservedweight (%d) überschreitet das Konsens-Maximum-Blockgewicht (%d) - - - Specified -blockreservedweight (%d) is lower than minimum safety value of (%d) - Angegebenes -blockreservedweight (%d) ist niedriger als der minimale Sicherheitswert von (%d) - - - Cannot write to directory '%s'; check permissions. - Es kann nicht in das Verzeichnis '%s' geschrieben werden. Überprüfen Sie die Berechtigungen. - - - Error loading databases - Fehler beim Laden von Datenbanken - - - Error opening coins database - Fehler beim Öffnen der Coins-Datenbank - - - Error: Unable to write data to disk for wallet %s - Fehler: Daten können nicht auf die Festplatte für die Wallet %s geschrieben werden - - - The transactions removal process can only be executed within a db txn - Der Prozess zum Entfernen von Transaktionen kann nur innerhalb einer db txn ausgeführt werden. - - - Do you want to rebuild the databases now? - Möchten Sie die Datenbanken jetzt neu erstellen? - - - Error: Wallet does not exist - Fehler: Wallet existiert nicht - - - Error: cannot remove legacy wallet records - Fehler: Legacy-Wallet-Datensätze können nicht entfernt werden - - - Not enough file descriptors available. %d available, %d required. - Es sind nicht genügend Dateideskriptoren verfügbar. %d verfügbar, %d erforderlich. - - - \ No newline at end of file diff --git a/src/qt/locale/bitcoin_de_CH.ts b/src/qt/locale/bitcoin_de_CH.ts deleted file mode 100644 index 67d6dcebbe5d..000000000000 --- a/src/qt/locale/bitcoin_de_CH.ts +++ /dev/null @@ -1,4971 +0,0 @@ - - - AddressBookPage - - Right-click to edit address or label - Rechtsklick zum Bearbeiten der Adresse oder der Beschreibung - - - Create a new address - Neue Adresse erstellen - - - &New - &Neu - - - Copy the currently selected address to the system clipboard - Ausgewählte Adresse in die Zwischenablage kopieren - - - &Copy - &Kopieren - - - C&lose - &Schliessen - - - Delete the currently selected address from the list - Ausgewählte Adresse aus der Liste entfernen - - - Enter address or label to search - Zu suchende Adresse oder Bezeichnung eingeben - - - Export the data in the current tab to a file - Daten der aktuellen Ansicht in eine Datei exportieren - - - &Export - &Exportieren - - - &Delete - &Löschen - - - Choose the address to send coins to - Wählen Sie die Adresse aus, an die Sie Bitcoins senden möchten - - - Choose the address to receive coins with - Wählen Sie die Adresse aus, mit der Sie Bitcoins empfangen wollen - - - C&hoose - &Auswählen - - - These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Dies sind Ihre Bitcoin-Adressen zum Tätigen von Überweisungen. Bitte prüfen Sie den Betrag und die Adresse des Empfängers, bevor Sie Bitcoins überweisen. - - - These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. -Signing is only possible with addresses of the type 'legacy'. - Dies sind Ihre Bitcoin-Adressen für den Empfang von Zahlungen. Verwenden Sie die 'Neue Empfangsadresse erstellen' Taste auf der Registerkarte "Empfangen", um neue Adressen zu erstellen. -Das Signieren ist nur mit Adressen vom Typ 'Legacy' möglich. - - - &Copy Address - &Adresse kopieren - - - Copy &Label - &Bezeichnung kopieren - - - &Edit - &Bearbeiten - - - Export Address List - Adressliste exportieren - - - Comma separated file - Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. - Durch Komma getrennte Datei - - - There was an error trying to save the address list to %1. Please try again. - An error message. %1 is a stand-in argument for the name of the file we attempted to save to. - Beim Speichern der Adressliste nach %1 ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut. - - - Sending addresses - %1 - Sendeadressen - %1 - - - Receiving addresses - %1 - Empfangsadressen - %1 - - - Exporting Failed - Exportieren fehlgeschlagen - - - - AddressTableModel - - Label - Bezeichnung - - - Address - Adresse - - - (no label) - (keine Bezeichnung) - - - - AskPassphraseDialog - - Passphrase Dialog - Passphrasendialog - - - Enter passphrase - Passphrase eingeben - - - New passphrase - Neue Passphrase - - - Repeat new passphrase - Neue Passphrase bestätigen - - - Show passphrase - Zeige Passphrase - - - Encrypt wallet - Wallet verschlüsseln - - - This operation needs your wallet passphrase to unlock the wallet. - Dieser Vorgang benötigt Ihre Passphrase, um die Wallet zu entsperren. - - - Unlock wallet - Wallet entsperren - - - Change passphrase - Passphrase ändern - - - Confirm wallet encryption - Wallet-Verschlüsselung bestätigen - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! - Warnung: Wenn Sie Ihre Wallet verschlüsseln und Ihre Passphrase verlieren, werden Sie <b>ALLE IHRE BITCOINS VERLIEREN</b>! - - - Are you sure you wish to encrypt your wallet? - Sind Sie sich sicher, dass Sie Ihre Wallet verschlüsseln möchten? - - - Wallet encrypted - Wallet verschlüsselt - - - Enter the new passphrase for the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. - Geben Sie die neue Passphrase für die Wallet ein.<br/>Bitte benutzen Sie eine Passphrase bestehend aus <b>zehn oder mehr zufälligen Zeichen</b> oder <b>acht oder mehr Wörtern</b>. - - - Enter the old passphrase and new passphrase for the wallet. - Geben Sie die alte und die neue Wallet-Passphrase ein. - - - Continue - Weiter - - - Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. - Beachten Sie, dass das Verschlüsseln Ihrer Wallet nicht komplett vor Diebstahl Ihrer Bitcoins durch Malware schützt, die Ihren Computer infiziert hat. - - - Wallet to be encrypted - Wallet zu verschlüsseln - - - Your wallet is about to be encrypted. - Wallet wird verschlüsselt. - - - Your wallet is now encrypted. - Deine Wallet ist jetzt verschlüsselt. - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - WICHTIG: Alle vorherigen Wallet-Backups sollten durch die neu erzeugte, verschlüsselte Wallet ersetzt werden. Aus Sicherheitsgründen werden vorherige Backups der unverschlüsselten Wallet nutzlos, sobald Sie die neue, verschlüsselte Wallet verwenden. - - - Wallet encryption failed - Wallet-Verschlüsselung fehlgeschlagen - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Die Wallet-Verschlüsselung ist aufgrund eines internen Fehlers fehlgeschlagen. Ihre Wallet wurde nicht verschlüsselt. - - - The supplied passphrases do not match. - Die eingegebenen Passphrasen stimmen nicht überein. - - - Wallet unlock failed - Wallet-Entsperrung fehlgeschlagen. - - - The passphrase entered for the wallet decryption was incorrect. - Die eingegebene Passphrase zur Wallet-Entschlüsselung war nicht korrekt. - - - The passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. If this is successful, please set a new passphrase to avoid this issue in the future. - Die für die Entschlüsselung der Wallet eingegebene Passphrase ist falsch. Sie enthält ein Null-Zeichen (d.h. ein Null-Byte). Wenn die Passphrase mit einer Version dieser Software vor 25.0 festgelegt wurde, versuchen Sie es bitte erneut mit den Zeichen bis zum ersten Null-Zeichen, aber ohne dieses. Wenn dies erfolgreich ist, setzen Sie bitte eine neue Passphrase, um dieses Problem in Zukunft zu vermeiden. - - - Wallet passphrase was successfully changed. - Die Wallet-Passphrase wurde erfolgreich geändert. - - - Passphrase change failed - Änderung der Passphrase fehlgeschlagen - - - The old passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. - Die alte Passphrase, die für die Entschlüsselung der Wallet eingegeben wurde, ist falsch. Sie enthält ein Null-Zeichen (d.h. ein Null-Byte). Wenn die Passphrase mit einer Version dieser Software vor 25.0 festgelegt wurde, versuchen Sie es bitte erneut mit den Zeichen bis zum ersten Null-Zeichen, aber ohne dieses. - - - Warning: The Caps Lock key is on! - Warnung: Die Feststelltaste ist aktiviert! - - - - BanTableModel - - IP/Netmask - IP/Netzmaske - - - Banned Until - Gesperrt bis - - - - BitcoinApplication - - Settings file %1 might be corrupt or invalid. - Die Einstellungsdatei %1 ist möglicherweise beschädigt oder ungültig. - - - Runaway exception - Ausreisser Ausnahme - - - A fatal error occurred. %1 can no longer continue safely and will quit. - Ein fataler Fehler ist aufgetreten. %1 kann nicht länger sicher fortfahren und wird beendet. - - - Internal error - Interner Fehler - - - An internal error occurred. %1 will attempt to continue safely. This is an unexpected bug which can be reported as described below. - Ein interner Fehler ist aufgetreten. %1 wird versuchen, sicher fortzufahren. Dies ist ein unerwarteter Fehler, der wie unten beschrieben, gemeldet werden kann. - - - - QObject - - Do you want to reset settings to default values, or to abort without making changes? - Explanatory text shown on startup when the settings file cannot be read. Prompts user to make a choice between resetting or aborting. - Möchten Sie Einstellungen auf Standardwerte zurücksetzen oder abbrechen, ohne Änderungen vorzunehmen? - - - A fatal error occurred. Check that settings file is writable, or try running with -nosettings. - Explanatory text shown on startup when the settings file could not be written. Prompts user to check that we have the ability to write to the file. Explains that the user has the option of running without a settings file. - Ein schwerwiegender Fehler ist aufgetreten. Überprüfen Sie, ob die Einstellungsdatei beschreibbar ist, oder versuchen Sie, mit -nosettings zu starten. - - - Error: %1 - Fehler: %1 - - - %1 didn't yet exit safely… - %1 noch nicht sicher beendet… - - - unknown - unbekannt - - - Embedded "%1" - Eingebettet "%1" - - - Default system font "%1" - Standard Systemschriftart "%1" - - - Custom… - Benutzerdefiniert... - - - Amount - Betrag - - - Enter a Bitcoin address (e.g. %1) - Bitcoin-Adresse eingeben (z.B. %1) - - - Ctrl+W - Strg+W - - - Unroutable - Nicht weiterleitbar - - - Inbound - An inbound connection from a peer. An inbound connection is a connection initiated by a peer. - Eingehend - - - Outbound - An outbound connection to a peer. An outbound connection is a connection initiated by us. - Ausgehend - - - Full Relay - Peer connection type that relays all network information. - Volles Relais - - - Block Relay - Peer connection type that relays network information about blocks and not transactions or addresses. - Blockrelais - - - Manual - Peer connection type established manually through one of several methods. - Manuell - - - Feeler - Short-lived peer connection type that tests the aliveness of known addresses. - Fühler - - - Address Fetch - Short-lived peer connection type that solicits known addresses from a peer. - Adress Abholung - - - %1 d - %1 T - - - %1 m - %1 min - - - None - Keine - - - N/A - k.A. - - - %n second(s) - - %n Sekunde - %n Sekunden - - - - %n minute(s) - - %n Minute - %n Minuten - - - - %n hour(s) - - %nStunde - %n Stunden - - - - %n day(s) - - %nTag - %n Tage - - - - %n week(s) - - %n Woche - %n Wochen - - - - %1 and %2 - %1 und %2 - - - %n year(s) - - %nJahr - %n Jahre - - - - default wallet - Standard-Wallet - - - - BitcoinGUI - - &Overview - und Übersicht - - - Show general overview of wallet - Allgemeine Übersicht des Wallets anzeigen. - - - &Transactions - Und Überträgen - - - Create a new wallet - Neues Wallet erstellen - - - &Minimize - &Minimieren - - - Change the passphrase used for wallet encryption - Ändert die Passphrase, die für die Wallet-Verschlüsselung benutzt wird - - - &Send - &Senden - - - &Receive - &Empfangen - - - &Options… - &Optionen… - - - &Encrypt Wallet… - Wallet &verschlüsseln… - - - Encrypt the private keys that belong to your wallet - Verschlüsselt die zu Ihrer Wallet gehörenden privaten Schlüssel - - - &Backup Wallet… - Wallet &sichern… - - - &Change Passphrase… - Passphrase &ändern… - - - Sign &message… - &Nachricht unterzeichnen… - - - Sign messages with your Bitcoin addresses to prove you own them - Nachrichten signieren, um den Besitz Ihrer Bitcoin-Adressen zu beweisen - - - &Verify message… - Nachricht &verifizieren… - - - Verify messages to ensure they were signed with specified Bitcoin addresses - Nachrichten verifizieren, um sicherzustellen, dass diese mit den angegebenen Bitcoin-Adressen signiert wurden - - - &Load PSBT from file… - &Lade PSBT aus Datei… - - - Open &URI… - Öffne &URI… - - - Close Wallet… - Schließe Wallet… - - - Create Wallet… - Erstelle Wallet… - - - Close All Wallets… - Schließe alle Wallets… - - - &File - &Datei - - - &Settings - &Einstellungen - - - &Help - &Hilfe - - - Tabs toolbar - Registerkartenleiste - - - Syncing Headers (%1%)… - Synchronisiere Headers (%1%)… - - - Synchronizing with network… - Synchronisiere mit Netzwerk... - - - Indexing blocks on disk… - Indiziere Blöcke auf Datenträger... - - - Processing blocks on disk… - Verarbeite Blöcke auf Datenträger... - - - Connecting to peers… - Verbinde mit Peers... - - - Request payments (generates QR codes and bitcoin: URIs) - Zahlungen anfordern (erzeugt QR-Codes und "bitcoin:"-URIs) - - - Show the list of used sending addresses and labels - Liste verwendeter Zahlungsadressen und Bezeichnungen anzeigen - - - Show the list of used receiving addresses and labels - Liste verwendeter Empfangsadressen und Bezeichnungen anzeigen - - - &Command-line options - &Kommandozeilenoptionen - - - Processed %n block(s) of transaction history. - - %n Block der Transaktionshistorie verarbeitet. - %n Blöcke der Transaktionshistorie verarbeitet. - - - - %1 behind - %1 im Rückstand - - - Catching up… - Hole auf… - - - Last received block was generated %1 ago. - Der letzte empfangene Block ist %1 alt. - - - Transactions after this will not yet be visible. - Transaktionen hiernach werden noch nicht angezeigt. - - - Error - Fehler - - - Warning - Warnung - - - Information - Hinweis - - - Up to date - Auf aktuellem Stand - - - Ctrl+Q - STRG+Q - - - Load Partially Signed Bitcoin Transaction - Lade teilsignierte Bitcoin-Transaktion - - - Load PSBT from &clipboard… - Lade PSBT aus Zwischenablage… - - - Load Partially Signed Bitcoin Transaction from clipboard - Lade teilsignierte Bitcoin-Transaktion aus Zwischenablage - - - Node window - Knotenfenster - - - Open node debugging and diagnostic console - Öffne Knotenkonsole für Fehlersuche und Diagnose - - - &Sending addresses - &Versandadressen - - - &Receiving addresses - &Empfangsadressen - - - Open a bitcoin: URI - Öffne bitcoin: URI - - - Open Wallet - Wallet öffnen - - - Open a wallet - Eine Wallet öffnen - - - Close wallet - Wallet schließen - - - Restore Wallet… - Name of the menu item that restores wallet from a backup file. - Wallet wiederherstellen... - - - Restore a wallet from a backup file - Status tip for Restore Wallet menu item - Wiederherstellen einer Wallet aus einer Sicherungsdatei - - - Close all wallets - Schließe alle Wallets - - - Migrate Wallet - Wallet migrieren - - - Migrate a wallet - Eine Wallet Migrieren - - - Show the %1 help message to get a list with possible Bitcoin command-line options - Zeige den "%1"-Hilfetext, um eine Liste mit möglichen Kommandozeilenoptionen zu erhalten - - - &Mask values - &Blende Werte aus - - - Mask the values in the Overview tab - Blende die Werte im Übersichtsreiter aus - - - No wallets available - Keine Wallets verfügbar - - - Wallet Data - Name of the wallet data file format. - Wallet-Daten - - - Load Wallet Backup - The title for Restore Wallet File Windows - Wallet-Backup laden - - - Restore Wallet - Title of pop-up window shown when the user is attempting to restore a wallet. - Wallet wiederherstellen... - - - Wallet Name - Label of the input field where the name of the wallet is entered. - Wallet-Name - - - &Window - &Programmfenster - - - Ctrl+M - STRG+M - - - Zoom - Vergrößern - - - Main Window - Hauptfenster - - - %1 client - %1 Client - - - &Hide - &Ausblenden - - - S&how - &Anzeigen - - - %n active connection(s) to Bitcoin network. - A substring of the tooltip. - - %n aktive Verbindung zum Bitcoin-Netzwerk - %n aktive Verbindungen zum Bitcoin-Netzwerk - - - - Click for more actions. - A substring of the tooltip. "More actions" are available via the context menu. - Klicken für sonstige Aktionen. - - - Show Peers tab - A context menu item. The "Peers tab" is an element of the "Node window". - Gegenstellen Reiter anzeigen - - - Disable network activity - A context menu item. - Netzwerk Aktivität ausschalten - - - Enable network activity - A context menu item. The network activity was disabled previously. - Netzwerk Aktivität einschalten - - - Pre-syncing Headers (%1%)… - Synchronisiere Header (%1%)… - - - Error creating wallet - Fehler beim Erstellen der Wallet - - - Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets) - Es kann keine neue Wallet erstellt werden, die Software wurde ohne SQLite-Unterstützung kompiliert (erforderlich für Deskriptor-Wallets) - - - Error: %1 - Fehler: %1 - - - Warning: %1 - Warnung: %1 - - - Date: %1 - - Datum: %1 - - - - Amount: %1 - - Betrag: %1 - - - - Type: %1 - - Typ: %1 - - - - Label: %1 - - Bezeichnung: %1 - - - - Address: %1 - - Adresse: %1 - - - - Sent transaction - Gesendete Transaktion - - - Incoming transaction - Eingehende Transaktion - - - HD key generation is <b>enabled</b> - HD Schlüssel Generierung ist <b>aktiviert</b> - - - HD key generation is <b>disabled</b> - HD Schlüssel Generierung ist <b>deaktiviert</b> - - - Private key <b>disabled</b> - Privater Schlüssel <b>deaktiviert</b> - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Wallet ist <b>verschlüsselt</b> und aktuell <b>entsperrt</b>. - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - Wallet ist <b>verschlüsselt</b> und aktuell <b>gesperrt</b> - - - Original message: - Original-Nachricht: - - - - UnitDisplayStatusBarControl - - Unit to show amounts in. Click to select another unit. - Die Einheit in der Beträge angezeigt werden. Klicken, um eine andere Einheit auszuwählen. - - - - CoinControlDialog - - Coin Selection - Münzauswahl ("Coin Control") - - - Quantity: - Anzahl: - - - Amount: - Betrag: - - - Fee: - Gebühr: - - - After Fee: - Abzüglich Gebühr: - - - Change: - Wechselgeld: - - - (un)select all - Alles (de)selektieren - - - Tree mode - Baumansicht - - - List mode - Listenansicht - - - Amount - Betrag - - - Received with label - Empfangen mit Bezeichnung - - - Received with address - Empfangen mit Adresse - - - Date - Datum - - - Confirmations - Bestätigungen - - - Confirmed - Bestätigt - - - Copy amount - Betrag kopieren - - - &Copy address - &Adresse kopieren - - - Copy &label - &Bezeichnung kopieren - - - Copy &amount - &Betrag kopieren - - - Copy transaction &ID and output index - Transaktion &ID und Ausgabeindex kopieren - - - L&ock unspent - Nicht ausgegebenen Betrag &sperren - - - &Unlock unspent - Nicht ausgegebenen Betrag &entsperren - - - Copy quantity - Anzahl kopieren - - - Copy fee - Gebühr kopieren - - - Copy after fee - Abzüglich Gebühr kopieren - - - Copy bytes - Bytes kopieren - - - Copy change - Wechselgeld kopieren - - - (%1 locked) - (%1 gesperrt) - - - Can vary +/- %1 satoshi(s) per input. - Kann pro Eingabe um +/- %1 Satoshi(s) abweichen. - - - (no label) - (keine Bezeichnung) - - - change from %1 (%2) - Wechselgeld von %1 (%2) - - - (change) - (Wechselgeld) - - - - CreateWalletActivity - - Create Wallet - Title of window indicating the progress of creation of a new wallet. - Wallet erstellen - - - Creating Wallet <b>%1</b>… - Descriptive text of the create wallet progress window which indicates to the user which wallet is currently being created. - Erstelle Wallet <b>%1</b>… - - - Create wallet failed - Fehler beim Wallet erstellen aufgetreten - - - Create wallet warning - Warnung beim Wallet erstellen aufgetreten - - - Can't list signers - Unterzeichner können nicht aufgelistet werden - - - Too many external signers found - Zu viele externe Unterzeichner erkannt. - - - - LoadWalletsActivity - - Load Wallets - Title of progress window which is displayed when wallets are being loaded. - Lade Wallets - - - Loading wallets… - Descriptive text of the load wallets progress window which indicates to the user that wallets are currently being loaded. - Lade Wallets... - - - - MigrateWalletActivity - - Migrate wallet - Wallet migrieren - - - Are you sure you wish to migrate the wallet <i>%1</i>? - Sicher, dass die Wallet migriert werden soll? <i>%1</i>? - - - Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made. -If this wallet contains any watchonly scripts, a new wallet will be created which contains those watchonly scripts. -If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts. - -The migration process will create a backup of the wallet before migrating. This backup file will be named <wallet name>-<timestamp>.legacy.bak and can be found in the directory for this wallet. In the event of an incorrect migration, the backup can be restored with the "Restore Wallet" functionality. - Durch die Migration der Wallet wird diese Wallet in eine oder mehrere Deskriptor-Wallets umgewandelt. Es muss ein neues Wallet-Backup erstellt werden. -Wenn diese Wallet Watchonly-Skripte enthält, wird eine neue Wallet erstellt, die diese Watchonly-Skripte enthält. -Wenn diese Wallet lösbare, aber nicht beobachtete Skripte enthält, wird eine andere und neue Wallet erstellt, die diese Skripte enthält. - -Während des Migrationsprozesses wird vor der Migration ein Backup der Wallet erstellt. Diese Backup-Datei heißt <wallet name>-<timestamp>.legacy.bak und befindet sich im Verzeichnis für diese Wallet. Im Falle einer fehlerhaften Migration kann das Backup mit der Funktion "Wallet wiederherstellen" wiederhergestellt werden. - - - Migrate Wallet - Wallet migrieren - - - Migrating Wallet <b>%1</b>… - Wallet migrieren <b>%1</b>… - - - The wallet '%1' was migrated successfully. - Die Wallet '%1' wurde erfolgreich migriert. - - - Watchonly scripts have been migrated to a new wallet named '%1'. - Nur-beobachten Scripts wurden in eine neue Wallet namens '%1' überführt. - - - Solvable but not watched scripts have been migrated to a new wallet named '%1'. - Lösbare aber nicht beobachtete Scripts wurde in eine neue Wallet namens '%1' überführt. - - - Migration failed - Migration fehlgeschlagen - - - Migration Successful - Migration erfolgreich - - - - OpenWalletActivity - - Open wallet failed - Wallet öffnen fehlgeschlagen - - - Open wallet warning - Wallet öffnen Warnung - - - Opening Wallet <b>%1</b>… - Descriptive text of the open wallet progress window which indicates to the user which wallet is currently being opened. - Öffne Wallet <b>%1</b>… - - - - RestoreWalletActivity - - Restore Wallet - Title of progress window which is displayed when wallets are being restored. - Wallet wiederherstellen... - - - Restoring Wallet <b>%1</b>… - Descriptive text of the restore wallets progress window which indicates to the user that wallets are currently being restored. - Wiederherstellen der Wallet <b>%1</b>… - - - Restore wallet failed - Title of message box which is displayed when the wallet could not be restored. - Wallet Wiederherstellung fehlgeschlagen - - - Restore wallet warning - Title of message box which is displayed when the wallet is restored with some warning. - Wallet Wiederherstellungs Warnung - - - Restore wallet message - Title of message box which is displayed when the wallet is successfully restored. - Wallet Wiederherstellungs Nachricht - - - - WalletController - - Are you sure you wish to close the wallet <i>%1</i>? - Sind Sie sich sicher, dass Sie die Wallet <i>%1</i> schließen möchten? - - - Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. - Wenn Sie die Wallet zu lange schließen, kann es dazu kommen, dass Sie die gesamte Chain neu synchronisieren müssen, wenn Pruning aktiviert ist. - - - Close all wallets - Schließe alle Wallets - - - Are you sure you wish to close all wallets? - Sicher, dass Sie alle Wallets schließen möchten? - - - - CreateWalletDialog - - Create Wallet - Wallet erstellen - - - You are one step away from creating your new wallet! - Nur noch einen Schritt entfernt, das neue Wallet zu erstellen! - - - Please provide a name and, if desired, enable any advanced options - Bitte einen Namen angeben und, falls gewünscht, alle erweiterten Optionen aktivieren - - - Wallet Name - Wallet-Name - - - Wallet - Brieftasche - - - Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice. - Verschlüssele das Wallet. Das Wallet wird mit einer Passphrase deiner Wahl verschlüsselt. - - - Encrypt Wallet - Wallet verschlüsseln - - - Advanced Options - Erweiterte Optionen - - - Disable private keys for this wallet. Wallets with private keys disabled will have no private keys and cannot have an HD seed or imported private keys. This is ideal for watch-only wallets. - Deaktiviert private Schlüssel für dieses Wallet. Wallets mit deaktivierten privaten Schlüsseln werden keine privaten Schlüssel haben und können keinen HD Seed oder private Schlüssel importieren. Das ist ideal für Wallets, die nur beobachten. - - - Disable Private Keys - Private Keys deaktivieren - - - Make a blank wallet. Blank wallets do not initially have private keys or scripts. Private keys and addresses can be imported, or an HD seed can be set, at a later time. - Erzeugt ein leeres Wallet. Leere Wallets haben zu Anfang keine privaten Schlüssel oder Scripte. Private Schlüssel oder Adressen können importiert werden, ebenso können jetzt oder später HD-Seeds gesetzt werden. - - - Make Blank Wallet - Eine leere Wallet erstellen - - - Use an external signing device such as a hardware wallet. Configure the external signer script in wallet preferences first. - Verwenden Sie ein externes Signiergerät, z. B. eine Hardware-Wallet. Konfigurieren Sie zunächst das Skript für den externen Signierer in den Wallet-Einstellungen. - - - External signer - Externer Unterzeichner - - - Create - Erstellen - - - Compiled without external signing support (required for external signing) - "External signing" means using devices such as hardware wallets. - Ohne Unterstützung für die Signierung durch externe Geräte Dritter kompiliert (notwendig für Signierung durch externe Geräte Dritter) - - - - EditAddressDialog - - Edit Address - Adresse bearbeiten - - - &Label - &Bezeichnung - - - The label associated with this address list entry - Bezeichnung, die dem Adresslisteneintrag zugeordnet ist. - - - The address associated with this address list entry. This can only be modified for sending addresses. - Adresse, die dem Adresslisteneintrag zugeordnet ist. Diese kann nur bei Zahlungsadressen verändert werden. - - - &Address - &Adresse - - - New sending address - Neue Zahlungsadresse - - - Edit receiving address - Empfangsadresse bearbeiten - - - Edit sending address - Zahlungsadresse bearbeiten - - - The entered address "%1" is not a valid Bitcoin address. - Die eingegebene Adresse "%1" ist keine gültige Bitcoin-Adresse. - - - Address "%1" already exists as a receiving address with label "%2" and so cannot be added as a sending address. - Die Adresse "%1" existiert bereits als Empfangsadresse mit dem Label "%2" und kann daher nicht als Sendeadresse hinzugefügt werden. - - - The entered address "%1" is already in the address book with label "%2". - Die eingegebene Adresse "%1" befindet sich bereits im Adressbuch mit der Bezeichnung "%2". - - - Could not unlock wallet. - Wallet konnte nicht entsperrt werden. - - - New key generation failed. - Erzeugung eines neuen Schlüssels fehlgeschlagen. - - - - FreespaceChecker - - A new data directory will be created. - Es wird ein neues Datenverzeichnis angelegt. - - - name - Name - - - Directory already exists. Add %1 if you intend to create a new directory here. - Verzeichnis existiert bereits. Fügen Sie %1 an, wenn Sie beabsichtigen hier ein neues Verzeichnis anzulegen. - - - Path already exists, and is not a directory. - Pfad existiert bereits und ist kein Verzeichnis. - - - Cannot create data directory here. - Datenverzeichnis kann hier nicht angelegt werden. - - - - Intro - - %n GB of space available - - %n GB Speicherplatz verfügbar - %n GB Speicherplatz verfügbar - - - - (of %n GB needed) - - (von %n GB benötigt) - (von %n GB benötigt) - - - - (%n GB needed for full chain) - - (%n GB benötigt für komplette Blockchain) - (%n GB benötigt für komplette Blockchain) - - - - Choose data directory - Datenverzeichnis auswählen - - - At least %1 GB of data will be stored in this directory, and it will grow over time. - Mindestens %1 GB Daten werden in diesem Verzeichnis gespeichert, und sie werden mit der Zeit zunehmen. - - - Approximately %1 GB of data will be stored in this directory. - Etwa %1 GB Daten werden in diesem Verzeichnis gespeichert. - - - (sufficient to restore backups %n day(s) old) - Explanatory text on the capability of the current prune target. - - (für Wiederherstellung ausreichende Sicherung %n Tag alt) - (für Wiederherstellung ausreichende Sicherung %n Tage alt) - - - - %1 will download and store a copy of the Bitcoin block chain. - %1 wird eine Kopie der Bitcoin-Blockchain herunterladen und speichern. - - - The wallet will also be stored in this directory. - Die Wallet wird ebenfalls in diesem Verzeichnis gespeichert. - - - Error: Specified data directory "%1" cannot be created. - Fehler: Angegebenes Datenverzeichnis "%1" kann nicht angelegt werden. - - - Error - Fehler - - - Welcome - Willkommen - - - Welcome to %1. - Willkommen zu %1. - - - As this is the first time the program is launched, you can choose where %1 will store its data. - Da Sie das Programm gerade zum ersten Mal starten, können Sie nun auswählen wo %1 seine Daten ablegen wird. - - - Limit block chain storage to - Blockchain-Speicher beschränken auf - - - Reverting this setting requires re-downloading the entire blockchain. It is faster to download the full chain first and prune it later. Disables some advanced features. - Um diese Einstellung wiederherzustellen, muss die gesamte Blockchain neu heruntergeladen werden. Es ist schneller, die gesamte Chain zuerst herunterzuladen und später zu bearbeiten. Deaktiviert einige erweiterte Funktionen. - - - This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off. - Diese initiale Synchronisation führt zur hohen Last und kann Hardwareprobleme, die bisher nicht aufgetreten sind, mit ihrem Computer verursachen. Jedes Mal, wenn Sie %1 ausführen, wird der Download zum letzten Synchronisationspunkt fortgesetzt. - - - When you click OK, %1 will begin to download and process the full %4 block chain (%2 GB) starting with the earliest transactions in %3 when %4 initially launched. - Wenn Sie auf OK klicken, beginnt %1 mit dem Herunterladen und Verarbeiten der gesamten %4-Blockchain (%2GB), beginnend mit den frühesten Transaktionen in %3 beim ersten Start von %4. - - - If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low. - Wenn Sie bewusst den Blockchain-Speicher begrenzen (pruning), müssen die historischen Daten dennoch heruntergeladen und verarbeitet werden. Diese Daten werden aber zum späteren Zeitpunkt gelöscht, um die Festplattennutzung niedrig zu halten. - - - Use the default data directory - Standard-Datenverzeichnis verwenden - - - Use a custom data directory: - Ein benutzerdefiniertes Datenverzeichnis verwenden: - - - - HelpMessageDialog - - version - Version - - - About %1 - Über %1 - - - Command-line options - Kommandozeilenoptionen - - - - ShutdownWindow - - %1 is shutting down… - %1 wird beendet... - - - Do not shut down the computer until this window disappears. - Fahren Sie den Computer nicht herunter, bevor dieses Fenster verschwindet. - - - - ModalOverlay - - Form - Formular - - - Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. - Neueste Transaktionen werden eventuell noch nicht angezeigt, daher könnte Ihr Kontostand veraltet sein. Er wird korrigiert, sobald Ihr Wallet die Synchronisation mit dem Bitcoin-Netzwerk erfolgreich abgeschlossen hat. Details dazu finden sich weiter unten. - - - Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. - Versuche, Bitcoins aus noch nicht angezeigten Transaktionen auszugeben, werden vom Netzwerk nicht akzeptiert. - - - Number of blocks left - Anzahl verbleibender Blöcke - - - Unknown… - Unbekannt... - - - calculating… - berechne... - - - Last block time - Letzte Blockzeit - - - Progress - Fortschritt - - - Progress increase per hour - Fortschritt pro Stunde - - - Estimated time left until synced - Abschätzung der verbleibenden Zeit bis synchronisiert - - - Hide - Ausblenden - - - %1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain. - %1 synchronisiert gerade. Es lädt Header und Blöcke von Gegenstellen und validiert sie bis zum Erreichen der Spitze der Blockkette. - - - Unknown. Syncing Headers (%1, %2%)… - Unbekannt. Synchronisiere Headers (%1, %2%)... - - - Unknown. Pre-syncing Headers (%1, %2%)… - Unbekannt. vorsynchronisiere Header (%1, %2%)... - - - - OpenURIDialog - - Open bitcoin URI - Öffne bitcoin URI - - - Paste address from clipboard - Tooltip text for button that allows you to paste an address that is in your clipboard. - Adresse aus der Zwischenablage einfügen - - - - OptionsDialog - - Options - Konfiguration - - - &Main - &Allgemein - - - Automatically start %1 after logging in to the system. - %1 nach der Anmeldung im System automatisch ausführen. - - - &Start %1 on system login - &Starte %1 nach Systemanmeldung - - - Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain. - Durch das Aktivieren von Pruning wird der zum Speichern von Transaktionen benötigte Speicherplatz erheblich reduziert. Alle Blöcke werden weiterhin vollständig validiert. Um diese Einstellung rückgängig zu machen, muss die gesamte Blockchain erneut heruntergeladen werden. - - - Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. - Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. - Maximale Größe des Datenbankcaches. Stelle sicher, dass genügend RAM zur Verfügung steht. Ein größerer Cache kann zu einer schnelleren Synchronisierung beitragen, wonach der Vorteil in den meisten Anwendungsfällen weniger ausgeprägt ist. Durch Verringern der Cache-Größe wird die Speicherauslastung reduziert. Ungenutzter Mempool-Speicher wird für diesen Cache freigegeben. - - - Size of &database cache - Größe des &Datenbankpufferspeichers - - - Number of script &verification threads - Anzahl an Skript-&Verifizierungs-Threads - - - Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! - Vollständiger Pfad zu %1 einem Bitcoin Core kompatibelen Script (z.B.: C:\Downloads\hwi.exe oder /Users/you/Downloads/hwi.py). Achtung: Malware kann Bitcoins stehlen! - - - Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. - Automatisch den Bitcoin-Client-Port auf dem Router öffnen. Dies funktioniert nur, wenn dieser Router PCP oder NAT-PMP unterstützt und es aktiviert ist. Der externe Port kann zufällig sein. - - - Map port using PCP or NA&T-PMP - Zuordnen des Ports über PCP oder NA&T-PMP - - - IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) - IP-Adresse des Proxies (z.B. IPv4: 127.0.0.1 / IPv6: ::1) - - - Shows if the supplied default SOCKS5 proxy is used to reach peers via this network type. - Zeigt an, ob der gelieferte Standard SOCKS5 Proxy verwendet wurde, um die Peers mit diesem Netzwerktyp zu erreichen. - - - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu. - Minimiert die Anwendung anstatt sie zu beenden wenn das Fenster geschlossen wird. Wenn dies aktiviert ist, müssen Sie die Anwendung über "Beenden" im Menü schließen. - - - Font in the Overview tab: - Schriftart im Überblicks-Tab: - - - Options set in this dialog are overridden by the command line: - Einstellungen in diesem Dialog werden von der Kommandozeile überschrieben: - - - Open the %1 configuration file from the working directory. - Öffnen Sie die %1 Konfigurationsdatei aus dem Arbeitsverzeichnis. - - - Open Configuration File - Konfigurationsdatei öffnen - - - Reset all client options to default. - Setzt die Clientkonfiguration auf Standardwerte zurück. - - - &Reset Options - Konfiguration &zurücksetzen - - - &Network - &Netzwerk - - - Prune &block storage to - &Blockspeicher kürzen auf - - - Reverting this setting requires re-downloading the entire blockchain. - Wenn diese Einstellung rückgängig gemacht wird, muss die komplette Blockchain erneut heruntergeladen werden. - - - Set the number of script verification threads. Negative values correspond to the number of cores you want to leave free to the system. - Tooltip text for Options window setting that sets the number of script verification threads. Explains that negative values mean to leave these many cores free to the system. - Legen Sie die Anzahl der Skriptüberprüfungs-Threads fest. Negative Werte entsprechen der Anzahl der Kerne, die Sie für das System frei lassen möchten. - - - (0 = auto, <0 = leave that many cores free) - (0 = automatisch, <0 = so viele Kerne frei lassen) - - - This allows you or a third party tool to communicate with the node through command-line and JSON-RPC commands. - Tooltip text for Options window setting that enables the RPC server. - Dies ermöglicht Ihnen oder einem Drittanbieter-Tool die Kommunikation mit dem Knoten über Befehlszeilen- und JSON-RPC-Befehle. - - - Enable R&PC server - An Options window setting to enable the RPC server. - RPC-Server aktivieren - - - W&allet - B&rieftasche - - - Whether to set subtract fee from amount as default or not. - Tooltip text for Options window setting that sets subtracting the fee from a sending amount as default. - Wählen Sie, ob die Gebühr standardmäßig vom Betrag abgezogen werden soll oder nicht. - - - Subtract &fee from amount by default - An Options window setting to set subtracting the fee from a sending amount as default. - Standardmäßig die Gebühr vom Betrag abziehen - - - Expert - Experten-Optionen - - - Enable coin &control features - "&Coin Control"-Funktionen aktivieren - - - If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. - Wenn Sie das Ausgeben von unbestätigtem Wechselgeld deaktivieren, kann das Wechselgeld einer Transaktion nicht verwendet werden, bis es mindestens eine Bestätigung erhalten hat. Dies wirkt sich auf die Berechnung des Kontostands aus. - - - &Spend unconfirmed change - &Unbestätigtes Wechselgeld darf ausgegeben werden - - - Enable &PSBT controls - An options window setting to enable PSBT controls. - &PBST-Kontrollen aktivieren - - - Whether to show PSBT controls. - Tooltip text for options window setting that enables PSBT controls. - Ob PSBT-Kontrollen angezeigt werden sollen. - - - External Signer (e.g. hardware wallet) - Gerät für externe Signierung (z. B.: Hardware wallet) - - - &External signer script path - &Pfad zum Script des externen Gerätes zur Signierung - - - Accept connections from outside. - Akzeptiere Verbindungen von außerhalb. - - - Allow incomin&g connections - Erlaube &eingehende Verbindungen - - - Connect to the Bitcoin network through a SOCKS5 proxy. - Über einen SOCKS5-Proxy mit dem Bitcoin-Netzwerk verbinden. - - - &Connect through SOCKS5 proxy (default proxy): - Über einen SOCKS5-Proxy &verbinden (Standardproxy): - - - Proxy &IP: - Proxy-&IP: - - - Port of the proxy (e.g. 9050) - Port des Proxies (z.B. 9050) - - - Used for reaching peers via: - Benutzt um Gegenstellen zu erreichen über: - - - &Window - &Programmfenster - - - Show the icon in the system tray. - Zeigt das Symbol in der Leiste an. - - - &Show tray icon - &Zeige Statusleistensymbol - - - Show only a tray icon after minimizing the window. - Nur ein Symbol im Infobereich anzeigen, nachdem das Programmfenster minimiert wurde. - - - &Minimize to the tray instead of the taskbar - In den Infobereich anstatt in die Taskleiste &minimieren - - - M&inimize on close - Beim Schließen m&inimieren - - - &Display - &Anzeige - - - User Interface &language: - &Sprache der Benutzeroberfläche: - - - The user interface language can be set here. This setting will take effect after restarting %1. - Die Sprache der Benutzeroberflächen kann hier festgelegt werden. Diese Einstellung wird nach einem Neustart von %1 wirksam werden. - - - &Unit to show amounts in: - &Einheit der Beträge: - - - Choose the default subdivision unit to show in the interface and when sending coins. - Wählen Sie die standardmäßige Untereinheit, die in der Benutzeroberfläche und beim Überweisen von Bitcoins angezeigt werden soll. - - - Third-party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |. - URLs von Drittanbietern (z. B. eines Block-Explorers), erscheinen als Kontextmenüpunkte auf der Registerkarte. %s in der URL wird durch den Transaktionshash ersetzt. Mehrere URLs werden durch senkrechte Striche | getrennt. - - - &Third-party transaction URLs - &Transaktions-URLs von Drittparteien - - - Whether to show coin control features or not. - Legt fest, ob die "Coin Control"-Funktionen angezeigt werden. - - - Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services. - Verbinde mit dem Bitcoin-Netzwerk über einen separaten SOCKS5-Proxy für Tor-Onion-Dienste. - - - Use separate SOCKS&5 proxy to reach peers via Tor onion services: - Nutze separaten SOCKS&5-Proxy um Gegenstellen über Tor-Onion-Dienste zu erreichen: - - - &Cancel - &Abbrechen - - - Compiled without external signing support (required for external signing) - "External signing" means using devices such as hardware wallets. - Ohne Unterstützung für die Signierung durch externe Geräte Dritter kompiliert (notwendig für Signierung durch externe Geräte Dritter) - - - default - Standard - - - none - keine - - - Confirm options reset - Window title text of pop-up window shown when the user has chosen to reset options. - Zurücksetzen der Konfiguration bestätigen - - - Client restart required to activate changes. - Text explaining that the settings changed will not come into effect until the client is restarted. - Client-Neustart erforderlich, um Änderungen zu aktivieren. - - - Current settings will be backed up at "%1". - Text explaining to the user that the client's current settings will be backed up at a specific location. %1 is a stand-in argument for the backup location's path. - Aktuelle Einstellungen werden in "%1" gespeichert. - - - Client will be shut down. Do you want to proceed? - Text asking the user to confirm if they would like to proceed with a client shutdown. - Client wird beendet. Möchten Sie den Vorgang fortsetzen? - - - Configuration options - Window title text of pop-up box that allows opening up of configuration file. - Konfigurationsoptionen - - - The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file. - Explanatory text about the priority order of instructions considered by client. The order from high to low being: command-line, configuration file, GUI settings. - Die Konfigurationsdatei wird verwendet, um erweiterte Benutzeroptionen festzulegen, die die GUI-Einstellungen überschreiben. Darüber hinaus werden alle Befehlszeilenoptionen diese Konfigurationsdatei überschreiben. - - - Continue - Weiter - - - Cancel - Abbrechen - - - Error - Fehler - - - The configuration file could not be opened. - Die Konfigurationsdatei konnte nicht geöffnet werden. - - - This change would require a client restart. - Diese Änderung würde einen Client-Neustart erfordern. - - - The supplied proxy address is invalid. - Die eingegebene Proxy-Adresse ist ungültig. - - - - OptionsModel - - Could not read setting "%1", %2. - Die folgende Einstellung konnte nicht gelesen werden "%1", %2. - - - - OverviewPage - - Form - Formular - - - 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. - Die angezeigten Informationen sind möglicherweise nicht mehr aktuell. Ihre Wallet wird automatisch synchronisiert, nachdem eine Verbindung zum Bitcoin-Netzwerk hergestellt wurde. Dieser Prozess ist jedoch derzeit noch nicht abgeschlossen. - - - Watch-only: - Beobachtet: - - - Available: - Verfügbar: - - - Your current spendable balance - Ihr aktuell verfügbarer Kontostand - - - Pending: - Ausstehend: - - - Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance - Gesamtbetrag aus unbestätigten Transaktionen, der noch nicht im aktuell verfügbaren Kontostand enthalten ist - - - Immature: - Unreif: - - - Mined balance that has not yet matured - Erarbeiteter Betrag der noch nicht gereift ist - - - Balances - Kontostände - - - Total: - Gesamtbetrag: - - - Your current total balance - Ihr aktueller Gesamtbetrag - - - Your current balance in watch-only addresses - Ihr aktueller Kontostand in nur-beobachteten Adressen - - - Spendable: - Verfügbar: - - - Recent transactions - Letzte Transaktionen - - - Unconfirmed transactions to watch-only addresses - Unbestätigte Transaktionen an nur-beobachtete Adressen - - - Mined balance in watch-only addresses that has not yet matured - Erarbeiteter Betrag in nur-beobachteten Adressen der noch nicht gereift ist - - - Current total balance in watch-only addresses - Aktueller Gesamtbetrag in nur-beobachteten Adressen - - - Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings->Mask values. - Datenschutz-Modus aktiviert für den Übersichtsreiter. Um die Werte einzublenden, deaktiviere Einstellungen->Werte ausblenden. - - - - PSBTOperationsDialog - - PSBT Operations - PSBT-Operationen - - - Sign Tx - Signiere Tx - - - Broadcast Tx - Rundsende Tx - - - Copy to Clipboard - Kopiere in Zwischenablage - - - Save… - Speichern... - - - Close - Schließen - - - Failed to load transaction: %1 - Laden der Transaktion fehlgeschlagen: %1 - - - Failed to sign transaction: %1 - Signieren der Transaktion fehlgeschlagen: %1 - - - Cannot sign inputs while wallet is locked. - Eingaben können nicht unterzeichnet werden, wenn die Wallet gesperrt ist. - - - Could not sign any more inputs. - Konnte keinerlei weitere Eingaben signieren. - - - Signed %1 inputs, but more signatures are still required. - %1 Eingaben signiert, doch noch sind weitere Signaturen erforderlich. - - - Signed transaction successfully. Transaction is ready to broadcast. - Transaktion erfolgreich signiert. Transaktion ist bereit für Rundsendung. - - - Unknown error processing transaction. - Unbekannter Fehler bei der Transaktionsverarbeitung - - - Transaction broadcast successfully! Transaction ID: %1 - Transaktion erfolgreich rundgesendet! Transaktions-ID: %1 - - - Transaction broadcast failed: %1 - Rundsenden der Transaktion fehlgeschlagen: %1 - - - PSBT copied to clipboard. - PSBT in Zwischenablage kopiert. - - - Save Transaction Data - Speichere Transaktionsdaten - - - Partially Signed Transaction (Binary) - Expanded name of the binary PSBT file format. See: BIP 174. - Teilweise signierte Transaktion (binär) - - - PSBT saved to disk. - PSBT auf Platte gespeichert. - - - Sends %1 to %2 - Schickt %1 an %2 - - - own address - eigene Adresse - - - Unable to calculate transaction fee or total transaction amount. - Kann die Gebühr oder den Gesamtbetrag der Transaktion nicht berechnen. - - - Pays transaction fee: - Zahlt Transaktionsgebühr: - - - Total Amount - Gesamtbetrag - - - or - oder - - - Transaction has %1 unsigned inputs. - Transaktion hat %1 unsignierte Eingaben. - - - Transaction is missing some information about inputs. - Der Transaktion fehlen einige Informationen über Eingaben. - - - Transaction still needs signature(s). - Transaktion erfordert weiterhin Signatur(en). - - - (But no wallet is loaded.) - (Aber kein Wallet ist geladen.) - - - (But this wallet cannot sign transactions.) - (doch diese Wallet kann Transaktionen nicht signieren) - - - (But this wallet does not have the right keys.) - (doch diese Wallet hat nicht die richtigen Schlüssel) - - - Transaction is fully signed and ready for broadcast. - Transaktion ist vollständig signiert und zur Rundsendung bereit. - - - Transaction status is unknown. - Transaktionsstatus ist unbekannt. - - - - PaymentServer - - Payment request error - Fehler bei der Zahlungsanforderung - - - Cannot start bitcoin: click-to-pay handler - Kann Bitcoin nicht starten: Klicken-zum-Bezahlen-Verarbeiter - - - URI handling - URI-Verarbeitung - - - 'bitcoin://' is not a valid URI. Use 'bitcoin:' instead. - 'bitcoin://' ist kein gültiger URL. Bitte 'bitcoin:' nutzen. - - - Cannot process payment request because BIP70 is not supported. -Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored. -If you are receiving this error you should request the merchant provide a BIP21 compatible URI. - Zahlungsanforderung kann nicht verarbeitet werden, da BIP70 nicht unterstützt wird. -Aufgrund der weit verbreiteten Sicherheitslücken in BIP70 wird dringend empfohlen, die Anweisungen des Händlers zum Wechsel des Wallets zu ignorieren. -Wenn Sie diese Fehlermeldung erhalten, sollten Sie den Händler bitten, einen BIP21-kompatiblen URI bereitzustellen. - - - URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters. - URI kann nicht analysiert werden! Dies kann durch eine ungültige Bitcoin-Adresse oder fehlerhafte URI-Parameter verursacht werden. - - - Payment request file handling - Zahlungsanforderungsdatei-Verarbeitung - - - - PeerTableModel - - User Agent - Title of Peers Table column which contains the peer's User Agent string. - User-Agent - - - Peer - Title of Peers Table column which contains a unique number used to identify a connection. - Gegenstelle - - - Age - Title of Peers Table column which indicates the duration (length of time) since the peer connection started. - Alter - - - Direction - Title of Peers Table column which indicates the direction the peer connection was initiated from. - Richtung - - - Sent - Title of Peers Table column which indicates the total amount of network information we have sent to the peer. - Übertragen - - - Received - Title of Peers Table column which indicates the total amount of network information we have received from the peer. - Empfangen - - - Address - Title of Peers Table column which contains the IP/Onion/I2P address of the connected peer. - Adresse - - - Type - Title of Peers Table column which describes the type of peer connection. The "type" describes why the connection exists. - Typ - - - Network - Title of Peers Table column which states the network the peer connected through. - Netzwerk - - - Inbound - An Inbound Connection from a Peer. - Eingehend - - - Outbound - An Outbound Connection to a Peer. - Ausgehend - - - - QRImageWidget - - &Save Image… - &Bild speichern... - - - &Copy Image - Grafik &kopieren - - - Resulting URI too long, try to reduce the text for label / message. - Resultierende URI ist zu lang, bitte den Text für Bezeichnung/Nachricht kürzen. - - - Error encoding URI into QR Code. - Beim Kodieren der URI in den QR-Code ist ein Fehler aufgetreten. - - - QR code support not available. - QR Code Funktionalität nicht vorhanden - - - Save QR Code - QR-Code speichern - - - PNG Image - Expanded name of the PNG file format. See: https://en.wikipedia.org/wiki/Portable_Network_Graphics. - PNG-Bild - - - - RPCConsole - - N/A - k.A. - - - Client version - Client-Version - - - &Information - Hinweis - - - General - Allgemein - - - Datadir - Datenverzeichnis - - - To specify a non-default location of the data directory use the '%1' option. - Verwenden Sie die Option '%1' um einen anderen, nicht standardmäßigen Speicherort für das Datenverzeichnis festzulegen. - - - Blocksdir - Blockverzeichnis - - - To specify a non-default location of the blocks directory use the '%1' option. - Verwenden Sie die Option '%1' um einen anderen, nicht standardmäßigen Speicherort für das Blöckeverzeichnis festzulegen. - - - Startup time - Startzeit - - - Network - Netzwerk - - - Number of connections - Anzahl der Verbindungen - - - Local Addresses - Lokale Adressen - - - Network addresses that your Bitcoin node is currently using to communicate with other nodes. - Netzwerk-Adressen, die dein Bitcoin-Node aktuell verwendet, um mit anderen Nodes zu kommunizieren. - - - Block chain - Blockchain - - - Memory Pool - Speicher-Pool - - - Current number of transactions - Aktuelle Anzahl der Transaktionen - - - Memory usage - Speichernutzung - - - (none) - (keine) - - - &Reset - &Zurücksetzen - - - Received - Empfangen - - - Sent - Übertragen - - - &Peers - &Gegenstellen - - - Banned peers - Gesperrte Gegenstellen - - - Select a peer to view detailed information. - Gegenstelle auswählen, um detaillierte Informationen zu erhalten. - - - Hide Peers Detail - Gegenstellen Reiter verstecken - - - Ctrl+X - Strg+X - - - The transport layer version: %1 - Die Transportschicht-Version: %1 - - - Whether we relay transactions to this peer. - Ob wir Adressen an diese Gegenstelle weiterleiten. - - - Transaction Relay - Transaktions-Relay - - - Starting Block - Start Block - - - Synced Headers - Synchronisierte Header - - - Synced Blocks - Synchronisierte Blöcke - - - Last Transaction - Letzte Transaktion - - - The mapped Autonomous System used for diversifying peer selection. - Das zugeordnete autonome System zur Diversifizierung der Gegenstellen-Auswahl. - - - Mapped AS - Zugeordnetes AS - - - Whether we relay addresses to this peer. - Tooltip text for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - Ob wir Adressen an diese Gegenstelle weiterleiten. - - - Address Relay - Text title for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - Adress-Relay - - - The total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Tooltip text for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Die Gesamtzahl der von dieser Gegenstelle empfangenen Adressen, die aufgrund von Ratenbegrenzung verworfen (nicht verarbeitet) wurden. - - - The total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Tooltip text for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Die Gesamtzahl der von dieser Gegenstelle empfangenen Adressen, die aufgrund von Ratenbegrenzung verworfen (nicht verarbeitet) wurden. - - - Addresses Processed - Text title for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Verarbeitete Adressen - - - Addresses Rate-Limited - Text title for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Ratenbeschränkte Adressen - - - User Agent - User-Agent - - - Node window - Knotenfenster - - - Current block height - Aktuelle Blockhöhe - - - Open the %1 debug log file from the current data directory. This can take a few seconds for large log files. - Öffnet die %1-Debug-Protokolldatei aus dem aktuellen Datenverzeichnis. Dies kann bei großen Protokolldateien einige Sekunden dauern. - - - Decrease font size - Schrift verkleinern - - - Increase font size - Schrift vergrößern - - - Permissions - Berechtigungen - - - The direction and type of peer connection: %1 - Die Richtung und der Typ der Gegenstellen-Verbindung: %1 - - - Direction/Type - Richtung/Typ - - - The BIP324 session ID string in hex. - Die BIP324-Sitzungs-ID-Zeichenfolge in hexadezimaler Form. - - - The network protocol this peer is connected through: IPv4, IPv6, Onion, I2P, or CJDNS. - Das Netzwerkprotokoll, über das diese Gegenstelle verbunden ist, ist: IPv4, IPv6, Onion, I2P oder CJDNS. - - - Services - Dienste - - - High bandwidth BIP152 compact block relay: %1 - Kompakte BIP152 Blockweiterleitung mit hoher Bandbreite: %1 - - - High Bandwidth - Hohe Bandbreite - - - Connection Time - Verbindungsdauer - - - Elapsed time since a novel block passing initial validity checks was received from this peer. - Abgelaufene Zeit seitdem ein neuer Block mit erfolgreichen initialen Gültigkeitsprüfungen von dieser Gegenstelle empfangen wurde. - - - Last Block - Letzter Block - - - Elapsed time since a novel transaction accepted into our mempool was received from this peer. - Tooltip text for the Last Transaction field in the peer details area. - Abgelaufene Zeit seit eine neue Transaktion, die in unseren Speicherpool hineingelassen wurde, von dieser Gegenstelle empfangen wurde. - - - Last Send - Letzte Übertragung - - - Last Receive - Letzter Empfang - - - Ping Time - Ping-Zeit - - - The duration of a currently outstanding ping. - Die Laufzeit eines aktuell ausstehenden Ping. - - - Ping Wait - Ping-Wartezeit - - - Min Ping - Minimaler Ping - - - Time Offset - Zeitversatz - - - Last block time - Letzte Blockzeit - - - &Open - &Öffnen - - - &Console - &Konsole - - - &Network Traffic - &Netzwerkauslastung - - - Totals - Gesamtbetrag: - - - Debug log file - Debug-Protokolldatei - - - Clear console - Konsole zurücksetzen - - - In: - Eingehend: - - - Out: - Ausgehend: - - - Inbound: initiated by peer - Explanatory text for an inbound peer connection. - Eingehend: wurde von Gegenstelle initiiert - - - Outbound Full Relay: default - Explanatory text for an outbound peer connection that relays all network information. This is the default behavior for outbound connections. - Ausgehende vollständige Weiterleitung: Standard - - - Outbound Block Relay: does not relay transactions or addresses - Explanatory text for an outbound peer connection that relays network information about blocks and not transactions or addresses. - Ausgehende Blockweiterleitung: leitet Transaktionen und Adressen nicht weiter - - - Outbound Manual: added using RPC %1 or %2/%3 configuration options - Explanatory text for an outbound peer connection that was established manually through one of several methods. The numbered arguments are stand-ins for the methods available to establish manual connections. - Ausgehend Manuell: durch die RPC %1 oder %2/%3 Konfigurationsoptionen hinzugefügt - - - Outbound Feeler: short-lived, for testing addresses - Explanatory text for a short-lived outbound peer connection that is used to test the aliveness of known addresses. - Ausgehender Fühler: kurzlebig, zum Testen von Adressen - - - Outbound Address Fetch: short-lived, for soliciting addresses - Explanatory text for a short-lived outbound peer connection that is used to request addresses from a peer. - Ausgehende Adressensammlung: kurzlebig, zum Anfragen von Adressen - - - detecting: peer could be v1 or v2 - Explanatory text for "detecting" transport type. - Erkennen: Peer könnte v1 oder v2 sein - - - v1: unencrypted, plaintext transport protocol - Explanatory text for v1 transport type. - V1: Unverschlüsseltes Klartext-Transportprotokoll - - - v2: BIP324 encrypted transport protocol - Explanatory text for v2 transport type. - v2: BIP324 verschlüsseltes Transportprotokoll - - - we selected the peer for high bandwidth relay - Wir haben die Gegenstelle zum Weiterleiten mit hoher Bandbreite ausgewählt - - - the peer selected us for high bandwidth relay - Die Gegenstelle hat uns zum Weiterleiten mit hoher Bandbreite ausgewählt - - - no high bandwidth relay selected - Keine Weiterleitung mit hoher Bandbreite ausgewählt - - - Ctrl++ - Main shortcut to increase the RPC console font size. - Strg++ - - - Ctrl+= - Secondary shortcut to increase the RPC console font size. - Strg+= - - - Ctrl+- - Main shortcut to decrease the RPC console font size. - Strg+- - - - Ctrl+_ - Secondary shortcut to decrease the RPC console font size. - Strg+_ - - - &Copy address - Context menu action to copy the address of a peer. - &Adresse kopieren - - - &Disconnect - &Trennen - - - 1 &hour - 1 &Stunde - - - 1 d&ay - 1 T&ag - - - 1 &week - 1 &Woche - - - 1 &year - 1 &Jahr - - - &Copy IP/Netmask - Context menu action to copy the IP/Netmask of a banned peer. IP/Netmask is the combination of a peer's IP address and its Netmask. For IP address, see: https://en.wikipedia.org/wiki/IP_address. - &Kopiere IP/Netzmaske - - - &Unban - &Entsperren - - - Network activity disabled - Netzwerkaktivität deaktiviert - - - None - Keine - - - Executing command without any wallet - Befehl wird ohne spezifizierte Wallet ausgeführt - - - Ctrl+I - Strg+I - - - Ctrl+T - Strg+T - - - Ctrl+N - Strg+N - - - Ctrl+P - Strg+P - - - Node window - [%1] - Node-Fenster - [%1] - - - Executing command using "%1" wallet - Befehl wird mit Wallet "%1" ausgeführt - - - Welcome to the %1 RPC console. -Use up and down arrows to navigate history, and %2 to clear screen. -Use %3 and %4 to increase or decrease the font size. -Type %5 for an overview of available commands. -For more information on using this console, type %6. - -%7WARNING: 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.%8 - RPC console welcome message. Placeholders %7 and %8 are style tags for the warning content, and they are not space separated from the rest of the text intentionally. - Willkommen bei der %1 RPC Konsole. -Benutze die Auf/Ab Pfeiltasten, um durch die Historie zu navigieren, und %2, um den Bildschirm zu löschen. -Benutze %3 und %4, um die Fontgröße zu vergrößern bzw. verkleinern. -Tippe %5 für einen Überblick über verfügbare Befehle. -Für weitere Informationen über diese Konsole, tippe %6. - -%7 ACHTUNG: Es sind Betrüger zu Gange, die Benutzer anweisen, hier Kommandos einzugeben, wodurch sie den Inhalt der Wallet stehlen können. Benutze diese Konsole nicht, ohne die Implikationen eines Kommandos vollständig zu verstehen.%8 - - - Executing… - A console message indicating an entered command is currently being executed. - Ausführen… - - - (peer: %1) - (Gegenstelle: %1) - - - via %1 - über %1 - - - Yes - Ja - - - No - Nein - - - To - An - - - From - Von - - - Ban for - Sperren für - - - Never - Nie - - - Unknown - Unbekannt - - - - ReceiveCoinsDialog - - &Amount: - &Betrag: - - - &Label: - &Bezeichnung: - - - &Message: - &Nachricht: - - - 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. - Eine optionale Nachricht, die an die Zahlungsanforderung angehängt wird. Sie wird angezeigt, wenn die Anforderung geöffnet wird. Hinweis: Diese Nachricht wird nicht mit der Zahlung über das Bitcoin-Netzwerk gesendet. - - - An optional label to associate with the new receiving address. - Eine optionale Bezeichnung, die der neuen Empfangsadresse zugeordnet wird. - - - Use this form to request payments. All fields are <b>optional</b>. - Verwenden Sie dieses Formular, um Zahlungen anzufordern. Alle Felder sind <b>optional</b>. - - - An optional amount to request. Leave this empty or zero to not request a specific amount. - Ein optional angeforderter Betrag. Lassen Sie dieses Feld leer oder setzen Sie es auf 0, um keinen spezifischen Betrag anzufordern. - - - 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. - Ein optionales Etikett zu einer neuen Empfängeradresse (für dich zum Identifizieren einer Rechnung). Es wird auch der Zahlungsanforderung beigefügt. - - - An optional message that is attached to the payment request and may be displayed to the sender. - Eine optionale Nachricht, die der Zahlungsanforderung beigefügt wird und dem Absender angezeigt werden kann. - - - &Create new receiving address - &Neue Empfangsadresse erstellen - - - Clear all fields of the form. - Alle Formularfelder zurücksetzen. - - - Clear - Zurücksetzen - - - Requested payments history - Verlauf der angeforderten Zahlungen - - - Show the selected request (does the same as double clicking an entry) - Ausgewählte Zahlungsanforderungen anzeigen (entspricht einem Doppelklick auf einen Eintrag) - - - Show - Anzeigen - - - Remove the selected entries from the list - Ausgewählte Einträge aus der Liste entfernen - - - Remove - Entfernen - - - Copy &URI - &URI kopieren - - - &Copy address - &Adresse kopieren - - - Copy &label - &Bezeichnung kopieren - - - Copy &message - &Nachricht kopieren - - - Copy &amount - &Betrag kopieren - - - Not recommended due to higher fees and less protection against typos. - Nicht zu empfehlen aufgrund höherer Gebühren und geringerem Schutz vor Tippfehlern. - - - Generates an address compatible with older wallets. - Generiert eine Adresse, die mit älteren Wallets kompatibel ist. - - - Generates a native segwit address (BIP-173). Some old wallets don't support it. - Generiert eine native Segwit-Adresse (BIP-173). Einige alte Wallets unterstützen es nicht. - - - Bech32m (BIP-350) is an upgrade to Bech32, wallet support is still limited. - Bech32m (BIP-350) ist ein Upgrade auf Bech32, Wallet-Unterstützung ist immer noch eingeschränkt. - - - Could not unlock wallet. - Wallet konnte nicht entsperrt werden. - - - Could not generate new %1 address - Konnte neue %1 Adresse nicht erzeugen. - - - - ReceiveRequestDialog - - Request payment to … - Zahlung anfordern an ... - - - Address: - Adresse: - - - Amount: - Betrag: - - - Label: - Bezeichnung: - - - Message: - Nachricht: - - - Copy &URI - &URI kopieren - - - Copy &Address - &Adresse kopieren - - - &Verify - &Überprüfen - - - Verify this address on e.g. a hardware wallet screen - Verifizieren Sie diese Adresse z.B. auf dem Display Ihres Hardware-Wallets - - - &Save Image… - &Bild speichern... - - - Payment information - Zahlungsinformationen - - - Request payment to %1 - Zahlung anfordern an %1 - - - - RecentRequestsTableModel - - Date - Datum - - - Label - Bezeichnung - - - Message - Nachricht - - - (no label) - (keine Bezeichnung) - - - (no message) - (keine Nachricht) - - - (no amount requested) - (kein Betrag angefordert) - - - Requested - Angefordert - - - - SendCoinsDialog - - Send Coins - Bitcoins überweisen - - - Coin Control Features - "Coin Control"-Funktionen - - - automatically selected - automatisch ausgewählt - - - Insufficient funds! - Unzureichender Kontostand! - - - Quantity: - Anzahl: - - - Amount: - Betrag: - - - Fee: - Gebühr: - - - After Fee: - Abzüglich Gebühr: - - - Change: - Wechselgeld: - - - If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. - Wenn dies aktiviert ist, aber die Wechselgeld-Adresse leer oder ungültig ist, wird das Wechselgeld an eine neu generierte Adresse gesendet. - - - Custom change address - Benutzerdefinierte Wechselgeld-Adresse - - - Transaction Fee: - Transaktionsgebühr: - - - 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. - Die Verwendung der "fallbackfee" kann dazu führen, dass eine gesendete Transaktion erst nach mehreren Stunden oder Tagen (oder nie) bestätigt wird. Erwägen Sie, Ihre Gebühr manuell auszuwählen oder warten Sie, bis Sie die gesamte Chain validiert haben. - - - Warning: Fee estimation is currently not possible. - Achtung: Berechnung der Gebühr ist momentan nicht möglich. - - - per kilobyte - pro Kilobyte - - - Hide - Ausblenden - - - Recommended: - Empfehlungen: - - - Custom: - Benutzerdefiniert: - - - Send to multiple recipients at once - An mehrere Empfänger auf einmal überweisen - - - Add &Recipient - Empfänger &hinzufügen - - - Clear all fields of the form. - Alle Formularfelder zurücksetzen. - - - Inputs… - Eingaben... - - - Choose… - Auswählen... - - - Hide transaction fee settings - Einstellungen für Transaktionsgebühr nicht anzeigen - - - Specify a custom fee per kB (1,000 bytes) of the transaction's virtual size. - -Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satoshis per kvB" for a transaction size of 500 virtual bytes (half of 1 kvB) would ultimately yield a fee of only 50 satoshis. - Gib manuell eine Gebühr pro kB (1.000 Bytes) der virtuellen Transaktionsgröße an. - -Hinweis: Da die Gebühr auf Basis der Bytes berechnet wird, führt eine Gebührenrate von "100 Satoshis per kvB" für eine Transaktion von 500 virtuellen Bytes (die Hälfte von 1 kvB) letztlich zu einer Gebühr von nur 50 Satoshis. - - - 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. - Nur die minimale Gebühr zu bezahlen ist so lange in Ordnung, wie weniger Transaktionsvolumen als Platz in den Blöcken vorhanden ist. Aber Vorsicht, diese Option kann dazu führen, dass Transaktionen nicht bestätigt werden, wenn mehr Bedarf an Bitcoin-Transaktionen besteht als das Netzwerk verarbeiten kann. - - - A too low fee might result in a never confirming transaction (read the tooltip) - Eine niedrige Gebühr kann dazu führen das eine Transaktion niemals bestätigt wird (Lesen sie die Anmerkung). - - - (Smart fee not initialized yet. This usually takes a few blocks…) - (Intelligente Gebühr noch nicht initialisiert. Das dauert normalerweise ein paar Blocks…) - - - Confirmation time target: - Bestätigungsziel: - - - Enable Replace-By-Fee - Aktiviere Replace-By-Fee - - - With Replace-By-Fee (BIP-125) you can increase a transaction's fee after it is sent. Without this, a higher fee may be recommended to compensate for increased transaction delay risk. - Mit Replace-By-Fee (BIP-125) kann die Transaktionsgebühr nach dem Senden erhöht werden. Ohne dies wird eine höhere Gebühr empfohlen, um das Risiko einer hohen Transaktionszeit zu reduzieren. - - - Clear &All - &Zurücksetzen - - - Balance: - Kontostand: - - - Confirm the send action - Überweisung bestätigen - - - S&end - &Überweisen - - - Copy quantity - Anzahl kopieren - - - Copy amount - Betrag kopieren - - - Copy fee - Gebühr kopieren - - - Copy after fee - Abzüglich Gebühr kopieren - - - Copy bytes - Bytes kopieren - - - Copy change - Wechselgeld kopieren - - - %1 (%2 blocks) - %1 (%2 Blöcke) - - - Sign on device - "device" usually means a hardware wallet. - Gerät anmelden - - - Connect your hardware wallet first. - Verbinden Sie zunächst Ihre Hardware-Wallet - - - Set external signer script path in Options -> Wallet - "External signer" means using devices such as hardware wallets. - Pfad für externes Signierskript in Optionen festlegen -> Wallet - - - Cr&eate Unsigned - Unsigniert &erzeugen - - - Creates a Partially Signed Bitcoin Transaction (PSBT) for use with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet. - Erzeugt eine teilsignierte Bitcoin Transaktion (PSBT) zur Benutzung mit z.B. einem Offline %1 Wallet, oder einem kompatiblen Hardware Wallet. - - - %1 to '%2' - %1 an '%2' - - - %1 to %2 - %1 an %2 - - - To review recipient list click "Show Details…" - Um die Empfängerliste zu sehen, klicke auf "Zeige Details…" - - - Sign failed - Signierung der Nachricht fehlgeschlagen - - - External signer not found - "External signer" means using devices such as hardware wallets. - Es konnte kein externes Gerät zum signieren gefunden werden - - - External signer failure - "External signer" means using devices such as hardware wallets. - Signierung durch externes Gerät fehlgeschlagen - - - Save Transaction Data - Speichere Transaktionsdaten - - - Partially Signed Transaction (Binary) - Expanded name of the binary PSBT file format. See: BIP 174. - Teilweise signierte Transaktion (binär) - - - PSBT saved - Popup message when a PSBT has been saved to a file - PSBT gespeichert - - - External balance: - Externe Bilanz: - - - or - oder - - - You can increase the fee later (signals Replace-By-Fee, BIP-125). - Sie können die Gebühr später erhöhen (signalisiert Replace-By-Fee, BIP-125). - - - 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. - Text to inform a user attempting to create a transaction of their current options. At this stage, a user can only create a PSBT. This string is displayed when private keys are disabled and an external signer is not available. - Überprüfen Sie bitte Ihr Transaktionsvorhaben. Dadurch wird eine Partiell Signierte Bitcoin-Transaktion (PSBT) erstellt, die Sie speichern oder kopieren und dann z. B. mit einer Offline-Wallet %1 oder einer PSBT-kompatible Hardware-Wallet nutzen können. - - - %1 from wallet '%2' - %1 von Wallet '%2' - - - Do you want to create this transaction? - Message displayed when attempting to create a transaction. Cautionary text to prompt the user to verify that the displayed transaction details represent the transaction the user intends to create. - Möchtest du diese Transaktion erstellen? - - - Please, review your transaction. You can create and send this transaction or create 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. - Text to inform a user attempting to create a transaction of their current options. At this stage, a user can send their transaction or create a PSBT. This string is displayed when both private keys and PSBT controls are enabled. - Bitte überprüfen Sie Ihre Transaktion. Sie können diese Transaktion erstellen und versenden oder eine Partiell Signierte Bitcoin Transaction (PSBT) erstellen, die Sie speichern oder kopieren und dann z.B. mit einer offline %1 Wallet oder einer PSBT-kompatiblen Hardware-Wallet signieren können. - - - Please, review your transaction. - Text to prompt a user to review the details of the transaction they are attempting to send. - Bitte überprüfen sie ihre Transaktion. - - - Transaction fee - Transaktionsgebühr - - - Not signalling Replace-By-Fee, BIP-125. - Replace-By-Fee, BIP-125 wird nicht angezeigt. - - - Total Amount - Gesamtbetrag - - - Unsigned Transaction - PSBT copied - Caption of "PSBT has been copied" messagebox - Unsignierte Transaktion - - - The PSBT has been copied to the clipboard. You can also save it. - Die PSBT wurde in die Zwischenablage kopiert. Kann auch abgespeichert werden. - - - PSBT saved to disk - PSBT auf Festplatte gespeichert - - - Confirm send coins - Überweisung bestätigen - - - Watch-only balance: - Nur-Anzeige Saldo: - - - The recipient address is not valid. Please recheck. - Die Zahlungsadresse ist ungültig, bitte nochmals überprüfen. - - - The amount to pay must be larger than 0. - Der zu zahlende Betrag muss größer als 0 sein. - - - The amount exceeds your balance. - Der angegebene Betrag übersteigt Ihren Kontostand. - - - The total exceeds your balance when the %1 transaction fee is included. - Der angegebene Betrag übersteigt aufgrund der Transaktionsgebühr in Höhe von %1 Ihren Kontostand. - - - Duplicate address found: addresses should only be used once each. - Doppelte Adresse entdeckt: Adressen sollten jeweils nur einmal benutzt werden. - - - Transaction creation failed! - Transaktionserstellung fehlgeschlagen! - - - A fee higher than %1 is considered an absurdly high fee. - Eine höhere Gebühr als %1 wird als unsinnig hohe Gebühr angesehen. - - - Estimated to begin confirmation within %n block(s). - - Voraussichtlicher Beginn der Bestätigung innerhalb von %n Block - Voraussichtlicher Beginn der Bestätigung innerhalb von %n Blöcken - - - - Warning: Invalid Bitcoin address - Warnung: Ungültige Bitcoin-Adresse - - - Warning: Unknown change address - Warnung: Unbekannte Wechselgeld-Adresse - - - Confirm custom change address - Bestätige benutzerdefinierte Wechselgeld-Adresse - - - 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? - Die ausgewählte Wechselgeld-Adresse ist nicht Bestandteil dieses Wallets. Einige oder alle Mittel aus Ihrem Wallet könnten an diese Adresse gesendet werden. Wollen Sie das wirklich? - - - (no label) - (keine Bezeichnung) - - - - SendCoinsEntry - - A&mount: - Betra&g: - - - Pay &To: - E&mpfänger: - - - &Label: - &Bezeichnung: - - - Choose previously used address - Bereits verwendete Adresse auswählen - - - The Bitcoin address to send the payment to - Die Zahlungsadresse der Überweisung - - - Paste address from clipboard - Adresse aus der Zwischenablage einfügen - - - Remove this entry - Diesen Eintrag entfernen - - - The amount to send in the selected unit - Zu sendender Betrag in der ausgewählten Einheit - - - 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. - Die Gebühr wird vom zu überweisenden Betrag abgezogen. Der Empfänger wird also weniger Bitcoins erhalten, als Sie im Betrags-Feld eingegeben haben. Falls mehrere Empfänger ausgewählt wurden, wird die Gebühr gleichmäßig verteilt. - - - S&ubtract fee from amount - Gebühr vom Betrag ab&ziehen - - - Use available balance - Benutze verfügbaren Kontostand - - - Message: - Nachricht: - - - Enter a label for this address to add it to the list of used addresses - Bezeichnung für diese Adresse eingeben, um sie zur Liste bereits verwendeter Adressen hinzuzufügen. - - - 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. - Eine an die "bitcoin:"-URI angefügte Nachricht, die zusammen mit der Transaktion gespeichert wird. Hinweis: Diese Nachricht wird nicht über das Bitcoin-Netzwerk gesendet. - - - - SendConfirmationDialog - - Send - Senden - - - Create Unsigned - Unsigniert erstellen - - - - SignVerifyMessageDialog - - Signatures - Sign / Verify a Message - Signaturen - eine Nachricht signieren / verifizieren - - - &Sign Message - Nachricht &signieren - - - The Bitcoin address to sign the message with - Die Bitcoin-Adresse, mit der die Nachricht signiert wird - - - Choose previously used address - Bereits verwendete Adresse auswählen - - - Paste address from clipboard - Adresse aus der Zwischenablage einfügen - - - Enter the message you want to sign here - Zu signierende Nachricht hier eingeben - - - Signature - Signatur - - - Copy the current signature to the system clipboard - Aktuelle Signatur in die Zwischenablage kopieren - - - Sign the message to prove you own this Bitcoin address - Die Nachricht signieren, um den Besitz dieser Bitcoin-Adresse zu beweisen - - - Sign &Message - &Nachricht signieren - - - Reset all sign message fields - Alle "Nachricht signieren"-Felder zurücksetzen - - - Clear &All - &Zurücksetzen - - - &Verify Message - Nachricht &verifizieren - - - Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction! - Geben Sie die Zahlungsadresse des Empfängers, Nachricht (achten Sie darauf Zeilenumbrüche, Leerzeichen, Tabulatoren usw. exakt zu kopieren) und Signatur unten ein, um die Nachricht zu verifizieren. Vorsicht, interpretieren Sie nicht mehr in die Signatur hinein, als in der signierten Nachricht selber enthalten ist, um nicht von einem Man-in-the-middle-Angriff hinters Licht geführt zu werden. Beachten Sie, dass dies nur beweist, dass die signierende Partei über diese Adresse Überweisungen empfangen kann. - - - The Bitcoin address the message was signed with - Die Bitcoin-Adresse, mit der die Nachricht signiert wurde - - - The signed message to verify - Die zu überprüfende signierte Nachricht - - - The signature given when the message was signed - Die beim Signieren der Nachricht geleistete Signatur - - - Verify the message to ensure it was signed with the specified Bitcoin address - Die Nachricht verifizieren, um sicherzustellen, dass diese mit der angegebenen Bitcoin-Adresse signiert wurde - - - Verify &Message - &Nachricht verifizieren - - - Reset all verify message fields - Alle "Nachricht verifizieren"-Felder zurücksetzen - - - Click "Sign Message" to generate signature - Auf "Nachricht signieren" klicken, um die Signatur zu erzeugen - - - The entered address is invalid. - Die eingegebene Adresse ist ungültig. - - - Please check the address and try again. - Bitte überprüfen Sie die Adresse und versuchen Sie es erneut. - - - Wallet unlock was cancelled. - Wallet-Entsperrung wurde abgebrochen. - - - No error - Kein Fehler - - - Private key for the entered address is not available. - Privater Schlüssel zur eingegebenen Adresse ist nicht verfügbar. - - - Message signing failed. - Signierung der Nachricht fehlgeschlagen. - - - Message signed. - Nachricht signiert. - - - The signature could not be decoded. - Die Signatur konnte nicht dekodiert werden. - - - Please check the signature and try again. - Bitte überprüfen Sie die Signatur und versuchen Sie es erneut. - - - The signature did not match the message digest. - Die Signatur entspricht nicht dem "Message Digest". - - - Message verification failed. - Verifizierung der Nachricht fehlgeschlagen. - - - Message verified. - Nachricht verifiziert. - - - - SplashScreen - - (press q to shutdown and continue later) - (drücke q, um herunterzufahren und später fortzuführen) - - - press q to shutdown - q zum Herunterfahren drücken - - - - TransactionDesc - - conflicted with a transaction with %1 confirmations - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that conflicts with a confirmed transaction. - steht im Konflikt mit einer Transaktion mit %1 Bestätigungen - - - 0/unconfirmed, in memory pool - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is in the memory pool. - 0/unbestätigt, im Speicherpool - - - 0/unconfirmed, not in memory pool - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is not in the memory pool. - 0/unbestätigt, nicht im Speicherpool - - - abandoned - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an abandoned transaction. - eingestellt - - - %1/unconfirmed - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in at least one block, but less than 6 blocks. - %1/unbestätigt - - - %1 confirmations - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in 6 or more blocks. - %1 Bestätigungen - - - Date - Datum - - - Source - Quelle - - - Generated - Erzeugt - - - From - Von - - - unknown - unbekannt - - - To - An - - - own address - eigene Adresse - - - watch-only - beobachtet - - - label - Bezeichnung - - - Credit - Gutschrift - - - matures in %n more block(s) - - reift noch %n weiteren Block - reift noch %n weitere Blöcken - - - - not accepted - nicht angenommen - - - Debit - Belastung - - - Total debit - Gesamtbelastung - - - Total credit - Gesamtgutschrift - - - Transaction fee - Transaktionsgebühr - - - Net amount - Nettobetrag - - - Message - Nachricht - - - Comment - Kommentar - - - Transaction ID - Transaktionskennung - - - Transaction total size - Gesamte Transaktionsgröße - - - Transaction virtual size - Virtuelle Größe der Transaktion - - - Output index - Ausgabeindex - - - %1 (Certificate was not verified) - %1 (Zertifikat wurde nicht verifiziert) - - - Merchant - Händler - - - Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Erzeugte Bitcoins müssen %1 Blöcke lang reifen, bevor sie ausgegeben werden können. Als Sie diesen Block erzeugten, wurde er an das Netzwerk übertragen, um ihn der Blockchain hinzuzufügen. Falls dies fehlschlägt wird der Status in "nicht angenommen" geändert und Sie werden keine Bitcoins gutgeschrieben bekommen. Das kann gelegentlich passieren, wenn ein anderer Knoten einen Block fast zeitgleich erzeugt. - - - Debug information - Debug-Informationen - - - Transaction - Transaktion - - - Inputs - Eingaben - - - Amount - Betrag - - - true - wahr - - - false - falsch - - - - TransactionDescDialog - - This pane shows a detailed description of the transaction - Dieser Bereich zeigt eine detaillierte Beschreibung der Transaktion an - - - Details for %1 - Details für %1 - - - - TransactionTableModel - - Date - Datum - - - Type - Typ - - - Label - Bezeichnung - - - Unconfirmed - Unbestätigt - - - Abandoned - Eingestellt - - - Confirming (%1 of %2 recommended confirmations) - Wird bestätigt (%1 von %2 empfohlenen Bestätigungen) - - - Confirmed (%1 confirmations) - Bestätigt (%1 Bestätigungen) - - - Conflicted - in Konflikt stehend - - - Immature (%1 confirmations, will be available after %2) - Unreif (%1 Bestätigungen, wird verfügbar sein nach %2) - - - Generated but not accepted - Generiert, aber nicht akzeptiert - - - Received with - Empfangen über - - - Received from - Empfangen von - - - Sent to - Überwiesen an - - - Mined - Erarbeitet - - - watch-only - beobachtet - - - (n/a) - (k.A.) - - - (no label) - (keine Bezeichnung) - - - Transaction status. Hover over this field to show number of confirmations. - Transaktionsstatus. Fahren Sie mit der Maus über dieses Feld, um die Anzahl der Bestätigungen zu sehen. - - - Date and time that the transaction was received. - Datum und Zeit als die Transaktion empfangen wurde. - - - Type of transaction. - Art der Transaktion - - - Whether or not a watch-only address is involved in this transaction. - Zeigt an, ob eine beobachtete Adresse in diese Transaktion involviert ist. - - - User-defined intent/purpose of the transaction. - Benutzerdefinierter Verwendungszweck der Transaktion - - - Amount removed from or added to balance. - Der Betrag, der dem Kontostand abgezogen oder hinzugefügt wurde. - - - - TransactionView - - All - Alle - - - Today - Heute - - - This week - Diese Woche - - - This month - Diesen Monat - - - Last month - Letzten Monat - - - This year - Dieses Jahr - - - Received with - Empfangen über - - - Sent to - Überwiesen an - - - Mined - Erarbeitet - - - Other - Andere - - - Enter address, transaction id, or label to search - Zu suchende Adresse, Transaktion oder Bezeichnung eingeben - - - Min amount - Mindestbetrag - - - Range… - Bereich… - - - &Copy address - &Adresse kopieren - - - Copy &label - &Bezeichnung kopieren - - - Copy &amount - &Betrag kopieren - - - Copy transaction &ID - Transaktionskennung kopieren - - - Copy &raw transaction - &Rohdaten der Transaktion kopieren - - - Copy full transaction &details - Vollständige Transaktions&details kopieren - - - &Show transaction details - Transaktionsdetails &anzeigen - - - Increase transaction &fee - Transaktions&gebühr erhöhen - - - A&bandon transaction - Transaktion a&bbrechen - - - &Edit address label - Adressbezeichnung &bearbeiten - - - Show in %1 - Transactions table context menu action to show the selected transaction in a third-party block explorer. %1 is a stand-in argument for the URL of the explorer. - Zeige in %1 - - - Export Transaction History - Transaktionsverlauf exportieren - - - Comma separated file - Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. - Durch Komma getrennte Datei - - - Confirmed - Bestätigt - - - Watch-only - beobachtet - - - Date - Datum - - - Type - Typ - - - Label - Bezeichnung - - - Address - Adresse - - - Exporting Failed - Exportieren fehlgeschlagen - - - There was an error trying to save the transaction history to %1. - Beim Speichern des Transaktionsverlaufs nach %1 ist ein Fehler aufgetreten. - - - Exporting Successful - Exportieren erfolgreich - - - The transaction history was successfully saved to %1. - Speichern des Transaktionsverlaufs nach %1 war erfolgreich. - - - Range: - Zeitraum: - - - to - bis - - - - WalletFrame - - No wallet has been loaded. -Go to File > Open Wallet to load a wallet. -- OR - - Es wurde keine Wallet geladen. -Gehen Sie zu Datei > Wallet Öffnen, um eine Wallet zu laden. -- ODER- - - - Create a new wallet - Neues Wallet erstellen - - - Error - Fehler - - - Unable to decode PSBT from clipboard (invalid base64) - Konnte PSBT aus Zwischenablage nicht entschlüsseln (ungültiges Base64) - - - Load Transaction Data - Lade Transaktionsdaten - - - Partially Signed Transaction (*.psbt) - Teilsignierte Transaktion (*.psbt) - - - PSBT file must be smaller than 100 MiB - PSBT-Datei muss kleiner als 100 MiB sein - - - Unable to decode PSBT - PSBT konnte nicht entschlüsselt werden - - - - WalletModel - - Send Coins - Bitcoins überweisen - - - Fee bump error - Gebührenerhöhungsfehler - - - Increasing transaction fee failed - Erhöhung der Transaktionsgebühr fehlgeschlagen - - - Do you want to increase the fee? - Asks a user if they would like to manually increase the fee of a transaction that has already been created. - Möchten Sie die Gebühr erhöhen? - - - Current fee: - Aktuelle Gebühr: - - - Increase: - Erhöhung: - - - New fee: - Neue Gebühr: - - - 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. - Warnung: Hierdurch kann die zusätzliche Gebühr durch Verkleinerung von Wechselgeld Outputs oder nötigenfalls durch Hinzunahme weitere Inputs beglichen werden. Ein neuer Wechselgeld Output kann dabei entstehen, falls noch keiner existiert. Diese Änderungen können möglicherweise private Daten preisgeben. - - - Confirm fee bump - Gebührenerhöhung bestätigen - - - Can't draft transaction. - Kann Transaktion nicht entwerfen. - - - PSBT copied - PSBT kopiert - - - Can't sign transaction. - Signierung der Transaktion fehlgeschlagen. - - - Could not commit transaction - Konnte Transaktion nicht übergeben - - - Can't display address - Die Adresse kann nicht angezeigt werden - - - - WalletView - - &Export - &Exportieren - - - Export the data in the current tab to a file - Daten der aktuellen Ansicht in eine Datei exportieren - - - Backup Wallet - Wallet sichern - - - Wallet Data - Name of the wallet data file format. - Wallet-Daten - - - Backup Failed - Sicherung fehlgeschlagen - - - There was an error trying to save the wallet data to %1. - Beim Speichern der Wallet-Daten nach %1 ist ein Fehler aufgetreten. - - - Backup Successful - Sicherung erfolgreich - - - The wallet data was successfully saved to %1. - Speichern der Wallet-Daten nach %1 war erfolgreich. - - - Cancel - Abbrechen - - - - bitcoin-core - - The %s developers - Die %s-Entwickler - - - %s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup. - %s korrupt. Versuche mit dem Wallet-Werkzeug bitcoin-wallet zu retten, oder eine Sicherung wiederherzustellen. - - - %s failed to validate the -assumeutxo snapshot state. This indicates a hardware problem, or a bug in the software, or a bad software modification that allowed an invalid snapshot to be loaded. As a result of this, the node will shut down and stop using any state that was built on the snapshot, resetting the chain height from %d to %d. On the next restart, the node will resume syncing from %d without using any snapshot data. Please report this incident to %s, including how you obtained the snapshot. The invalid snapshot chainstate will be left on disk in case it is helpful in diagnosing the issue that caused this error. - %s konnte den -assumeutxo-Snapshot-Status nicht validieren. Dies deutet auf ein Hardwareproblem, einen Fehler in der Software oder eine fehlerhafte Softwareänderung hin, die das Laden eines ungültigen Schnappschusses ermöglichte. Infolgedessen wird der Knoten heruntergefahren und verwendet keinen Zustand mehr, der auf dem Snapshot aufgebaut wurde, wodurch die Chain Height von %d auf %d zurückgesetzt wird. Beim nächsten Neustart nimmt der Knoten die Synchronisierung ab %d ohne Verwendung von Snapshot-Daten wieder auf. Bitte melden Sie diesen Vorfall an %s und geben Sie an, wie Sie den Snapshot erhalten haben. Der ungültige Snapshot-Chainstatus wird auf der Festplatte belassen, falls er bei der Diagnose des Problems, das diesen Fehler verursacht hat, hilfreich ist. - - - %s request to listen on port %u. This port is considered "bad" and thus it is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for details and a full list. - %s Aufforderung, auf Port %u zu lauschen. Dieser Port wird als "schlecht" eingeschätzt und es ist daher unwahrscheinlich, dass sich Bitcoin Core Gegenstellen mit ihm verbinden. Siehe doc/p2p-bad-ports.md für Details und eine vollständige Liste. - - - Cannot downgrade wallet from version %i to version %i. Wallet version unchanged. - Kann Wallet Version nicht von Version %i auf Version %i abstufen. Wallet Version bleibt unverändert. - - - 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. - Kann ein aufgespaltenes nicht-HD Wallet nicht von Version %i auf Version %i aktualisieren, ohne auf Unterstützung von Keypools vor der Aufspaltung zu aktualisieren. Bitte benutze Version%i oder keine bestimmte Version. - - - Disk space for %s may not accommodate the block files. Approximately %u GB of data will be stored in this directory. - Der Speicherplatz für %s reicht möglicherweise nicht für die Block-Dateien aus. In diesem Verzeichnis werden ca. %u GB an Daten gespeichert. - - - Distributed under the MIT software license, see the accompanying file %s or %s - Veröffentlicht unter der MIT-Softwarelizenz, siehe beiliegende Datei %s oder %s. - - - Error loading wallet. Wallet requires blocks to be downloaded, and software does not currently support loading wallets while blocks are being downloaded out of order when using assumeutxo snapshots. Wallet should be able to load successfully after node sync reaches height %s - Fehler beim Laden der Wallet. Wallet erfordert das Herunterladen von Blöcken, und die Software unterstützt derzeit nicht das Laden von Wallets, während Blöcke außer der Reihe heruntergeladen werden, wenn assumeutxo-Snapshots verwendet werden. Die Wallet sollte erfolgreich geladen werden können, nachdem die Node-Synchronisation die Höhe %s erreicht hat. - - - Error reading %s! Transaction data may be missing or incorrect. Rescanning wallet. - Fehler beim Lesen von %s! Transaktionsdaten fehlen oder sind nicht korrekt. Wallet wird erneut gescannt. - - - Error starting/committing db txn for wallet transactions removal process - Fehler beim Starten/Commit von db txn für das Entfernen von Wallet-Transaktionen - - - Error: Dumpfile format record is incorrect. Got "%s", expected "format". - Fehler: Dumpdatei Format Eintrag ist Ungültig. Habe "%s" bekommen, aber "format" erwartet. - - - Error: Dumpfile identifier record is incorrect. Got "%s", expected "%s". - Fehler: Dumpdatei Identifikationseintrag ist ungültig. Habe "%s" bekommen, aber "%s" erwartet. - - - Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s - Fehler: Die Version der Speicherauszugsdatei ist %s und wird nicht unterstützt. Diese Version von bitcoin-wallet unterstützt nur Speicherauszugsdateien der Version 1. - - - Error: Legacy wallets only support the "legacy", "p2sh-segwit", and "bech32" address types - Fehler: Legacy Wallets unterstützen nur die Adresstypen "legacy", "p2sh-segwit" und "bech32". - - - Error: Unable to produce descriptors for this legacy wallet. Make sure to provide the wallet's passphrase if it is encrypted. - Fehler: Es können keine Deskriptoren für diese Legacy-Wallet erstellt werden. Stellen Sie sicher, dass Sie die Passphrase der Wallet angeben, wenn diese verschlüsselt ist. - - - File %s already exists. If you are sure this is what you want, move it out of the way first. - Datei %s existiert bereits. Wenn Sie das wirklich tun wollen, dann bewegen Sie zuvor die existierende Datei woanders hin. - - - Invalid or corrupt peers.dat (%s). If you believe this is a bug, please report it to %s. As a workaround, you can move the file (%s) out of the way (rename, move, or delete) to have a new one created on the next start. - Ungültige oder beschädigte peers.dat (%s). Wenn Sie glauben, dass dies ein Programmierfehler ist, melden Sie ihn bitte an %s. Zur Abhilfe können Sie die Datei (%s) aus dem Weg räumen (umbenennen, verschieben oder löschen), so dass beim nächsten Start eine neue Datei erstellt wird. - - - Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets - Ungültiger Wert für '-wallet' oder '-nowallet' erkannt. '-wallet' erfordert einen String-Wert, während '-nowallet' nur '1' akzeptiert, um alle Wallets zu deaktivieren - - - More than one onion bind address is provided. Using %s for the automatically created Tor onion service. - Mehr als eine Onion-Bindungsadresse angegeben. Verwende %s für den automatisch erstellten Tor-Onion-Dienst. - - - No dump file provided. To use createfromdump, -dumpfile=<filename> must be provided. - Keine Dumpdatei angegeben. Um createfromdump zu benutzen, muss -dumpfile=<filename> angegeben werden. - - - No dump file provided. To use dump, -dumpfile=<filename> must be provided. - Keine Dumpdatei angegeben. Um dump verwenden zu können, muss -dumpfile=<filename> angegeben werden. - - - No wallet file format provided. To use createfromdump, -format=<format> must be provided. - Kein Format der Wallet-Datei angegeben. Um createfromdump zu nutzen, muss -format=<format> angegeben werden. - - - Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. - Die Option '-upnp' ist gesetzt, aber die UPnP-Unterstützung wurde in Version 29.0 eingestellt. Erwäge stattdessen die Verwendung von '-natpmp'. - - - Please contribute if you find %s useful. Visit %s for further information about the software. - Wenn sie %s nützlich finden, sind Helfer sehr gern gesehen. Besuchen Sie %s um mehr über das Softwareprojekt zu erfahren. - - - Prune configured below the minimum of %d MiB. Please use a higher number. - Prune-Modus wurde kleiner als das Minimum in Höhe von %d MiB konfiguriert. Bitte verwenden Sie einen größeren Wert. - - - Prune mode is incompatible with -reindex-chainstate. Use full -reindex instead. - Der Prune-Modus ist mit -reindex-chainstate nicht kompatibel. Verwende stattdessen den vollen -reindex. - - - Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node) - Prune (Kürzung): Die letzte Synchronisation der Wallet liegt vor gekürzten (gelöschten) Blöcken. Es ist ein -reindex (erneuter Download der gesamten Blockchain im Fall eines gekürzten Nodes) notwendig. - - - Rename of '%s' -> '%s' failed. You should resolve this by manually moving or deleting the invalid snapshot directory %s, otherwise you will encounter the same error again on the next startup. - Umbenennung von '%s' -> '%s' fehlgeschlagen. Sie sollten dieses Problem beheben, indem Sie das ungültige Snapshot-Verzeichnis %s manuell verschieben oder löschen, andernfalls wird der gleiche Fehler beim nächsten Start erneut auftreten. - - - SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported - SQLite-Datenbank: Unbekannte SQLite-Wallet-Schema-Version %d. Nur Version %d wird unterstützt. - - - The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct - Die Block-Datenbank enthält einen Block, der scheinbar aus der Zukunft kommt. Dies kann daran liegen, dass die Systemzeit Ihres Computers falsch eingestellt ist. Stellen Sie die Block-Datenbank erst dann wieder her, wenn Sie sich sicher sind, dass Ihre Systemzeit korrekt eingestellt ist. - - - The transaction amount is too small to send after the fee has been deducted - Der Transaktionsbetrag ist zu klein, um ihn nach Abzug der Gebühr zu senden. - - - 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 - Dieser Fehler kann auftreten, wenn diese Wallet nicht ordnungsgemäß heruntergefahren und zuletzt mithilfe eines Builds mit einer neueren Version von Berkeley DB geladen wurde. Verwenden Sie in diesem Fall die Software, die diese Wallet zuletzt geladen hat - - - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - Dies ist eine Vorab-Testversion - Verwendung auf eigene Gefahr - nicht für Mining- oder Handelsanwendungen nutzen! - - - This is the maximum transaction fee you pay (in addition to the normal fee) to prioritize partial spend avoidance over regular coin selection. - Dies ist die maximale Transaktionsgebühr, die Sie (zusätzlich zur normalen Gebühr) zahlen, um die Vermeidung von teilweisen Ausgaben gegenüber der regulären Münzauswahl zu priorisieren. - - - This is the transaction fee you may discard if change is smaller than dust at this level - Dies ist die Transaktionsgebühr, die ggf. abgeschrieben wird, wenn das Wechselgeld "Staub" ist in dieser Stufe. - - - This is the transaction fee you may pay when fee estimates are not available. - Das ist die Transaktionsgebühr, welche Sie zahlen müssten, wenn die Gebührenschätzungen nicht verfügbar sind. - - - Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments. - Gesamtlänge des Netzwerkversionstrings (%i) erreicht die maximale Länge (%i). Reduzieren Sie Anzahl oder Größe von uacomments. - - - Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate. - Fehler beim Verarbeiten von Blöcken. Sie müssen die Datenbank mit Hilfe des Arguments '-reindex-chainstate' neu aufbauen. - - - Unknown wallet file format "%s" provided. Please provide one of "bdb" or "sqlite". - Angegebenes Format "%s" der Wallet-Datei ist unbekannt. -Bitte nutzen Sie entweder "bdb" oder "sqlite". - - - Unsupported category-specific logging level %1$s=%2$s. Expected %1$s=<category>:<loglevel>. Valid categories: %3$s. Valid loglevels: %4$s. - Nicht unterstützte kategoriespezifische Protokollierungsebene %1$s=%2$s. Erwartet %1$s=<category>:<loglevel>. Gültige Kategorien: %3$s. Gültige Loglevels: %4$s. - - - Unsupported chainstate database format found. Please restart with -reindex-chainstate. This will rebuild the chainstate database. - Nicht unterstütztes Chainstate-Datenbankformat gefunden. Bitte starte mit -reindex-chainstate neu. Dadurch wird die Chainstate-Datenbank neu erstellt. - - - Wallet created successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. - Wallet erfolgreich erstellt. Der Legacy-Wallet-Typ ist veraltet und die Unterstützung für das Erstellen und Öffnen von Legacy-Wallets wird in Zukunft entfernt. - - - Wallet loaded successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. Legacy wallets can be migrated to a descriptor wallet with migratewallet. - Wallet erfolgreich geladen. Der Legacy-Wallet-Typ ist veraltet und die Unterstützung für das Erstellen und Öffnen von Legacy-Wallets wird in Zukunft entfernt. Legacy-Wallets können mit migratewallet auf eine Deskriptor-Wallet migriert werden. - - - Warning: Dumpfile wallet format "%s" does not match command line specified format "%s". - Warnung: Dumpdatei Wallet Format "%s" passt nicht zum auf der Kommandozeile angegebenen Format "%s". - - - Warning: Private keys detected in wallet {%s} with disabled private keys - Warnung: Es wurden private Schlüssel in der Wallet {%s} entdeckt, welche private Schlüssel jedoch deaktiviert hat. - - - Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. - Warnung: Wir scheinen nicht vollständig mit unseren Gegenstellen übereinzustimmen! Sie oder die anderen Knoten müssen unter Umständen Ihre Client-Software aktualisieren. - - - Witness data for blocks after height %d requires validation. Please restart with -reindex. - Witnessdaten für Blöcke nach Höhe %d müssen validiert werden. Bitte mit -reindex neu starten. - - - You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain - Sie müssen die Datenbank mit Hilfe von -reindex neu aufbauen, um zum ungekürzten Modus zurückzukehren. Dies erfordert, dass die gesamte Blockchain erneut heruntergeladen wird. - - - %s is set very high! - %s steht sehr hoch! - - - -maxmempool must be at least %d MB - -maxmempool muss mindestens %d MB betragen - - - Cannot obtain a lock on directory %s. %s is probably already running. - Eine Sperre für das Verzeichnis %s kann nicht gesetzt werden. %s läuft wahrscheinlich bereits. - - - Cannot resolve -%s address: '%s' - Kann Adresse in -%s nicht auflösen: '%s' - - - Cannot set -forcednsseed to true when setting -dnsseed to false. - Kann -forcednsseed nicht auf true setzen, wenn -dnsseed auf false gesetzt ist. - - - Cannot set -peerblockfilters without -blockfilterindex. - Kann -peerblockfilters nicht ohne -blockfilterindex setzen. - - - %s is set very high! Fees this large could be paid on a single transaction. - %s ist sehr hoch gesetzt! Gebühren dieser Höhe könnten für eine einzelne Transaktion gezahlt werden. - - - Cannot provide specific connections and have addrman find outgoing connections at the same time. - Es ist nicht möglich, bestimmte Verbindungen anzubieten und gleichzeitig addrman ausgehende Verbindungen finden zu lassen. - - - Error loading %s: External signer wallet being loaded without external signer support compiled - Fehler beim Laden von %s: Externe Unterzeichner-Wallet wird geladen, ohne dass die Unterstützung für externe Unterzeichner kompiliert wurde - - - Error reading %s! All keys read correctly, but transaction data or address metadata may be missing or incorrect. - Fehler beim Lesen von %s! Alle Schlüssel wurden korrekt gelesen, aber Transaktionsdaten oder Adressmetadaten fehlen oder sind falsch. - - - Error: Address book data in wallet cannot be identified to belong to migrated wallets - Fehler: Adressbuchdaten im Wallet können nicht als zum migrierten Wallet gehörend identifiziert werden - - - Error: Duplicate descriptors created during migration. Your wallet may be corrupted. - Fehler: Doppelte Deskriptoren, die während der Migration erstellt wurden. Diese Wallet ist möglicherweise beschädigt. - - - Error: Transaction %s in wallet cannot be identified to belong to migrated wallets - Fehler: Transaktion in Wallet %s kann nicht als zu migrierten Wallet gehörend identifiziert werden - - - Failed to calculate bump fees, because unconfirmed UTXOs depend on enormous cluster of unconfirmed transactions. - Es war nicht möglich, die Bump-Gebühren zu berechnen, da unbestätigte UTXOs von einem enormen Cluster unbestätigter Transaktionen abhängen. - - - Failed to rename invalid peers.dat file. Please move or delete it and try again. - Kann ungültige Datei peers.dat nicht umbenennen. Bitte Verschieben oder Löschen und noch einmal versuchen. - - - Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable %s. - Gebührenschätzung fehlgeschlagen. Fallbackgebühr ist deaktiviert. Warten Sie ein paar Blöcke oder aktivieren Sie %s. - - - Incompatible options: -dnsseed=1 was explicitly specified, but -onlynet forbids connections to IPv4/IPv6 - Inkompatible Optionen: -dnsseed=1 wurde explizit angegeben, aber -onlynet verbietet Verbindungen zu IPv4/IPv6 - - - Invalid amount for %s=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions) - Ungültiger Betrag für %s=<amount>: '%s' (muss mindestens die MinRelay-Gebühr von %s betragen, um festhängende Transaktionen zu verhindern) - - - Outbound connections restricted to CJDNS (-onlynet=cjdns) but -cjdnsreachable is not provided - Ausgehende Verbindungen sind auf CJDNS beschränkt (-onlynet=cjdns), aber -cjdnsreachable ist nicht angegeben - - - Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is explicitly forbidden: -onion=0 - Ausgehende Verbindungen sind eingeschränkt auf Tor (-onlynet=onion), aber der Proxy, um das Tor-Netzwerk zu erreichen ist nicht vorhanden (no -proxy= and no -onion= given) oder ausdrücklich verboten (-onion=0) - - - Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is not provided: none of -proxy, -onion or -listenonion is given - Ausgehende Verbindungen sind eingeschränkt auf Tor (-onlynet=onion), aber der Proxy, um das Tor-Netzwerk zu erreichen ist nicht vorhanden. Weder -proxy noch -onion noch -listenonion ist angegeben. - - - Outbound connections restricted to i2p (-onlynet=i2p) but -i2psam is not provided - Ausgehende Verbindungen sind auf i2p (-onlynet=i2p) beschränkt, aber -i2psam ist nicht angegeben - - - Specified -blockmaxweight (%d) exceeds consensus maximum block weight (%d) - Angegebenes -blockmaxweight (%d) überschreitet das Konsens-Maximum-Blockgewicht (%d) - - - Specified -blockreservedweight (%d) exceeds consensus maximum block weight (%d) - Angegebenes -blockreservedweight (%d) überschreitet das Konsens-Maximum-Blockgewicht (%d) - - - Specified -blockreservedweight (%d) is lower than minimum safety value of (%d) - Angegebenes -blockreservedweight (%d) ist niedriger als der minimale Sicherheitswert von (%d) - - - The inputs size exceeds the maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - Die Größe der Inputs übersteigt das maximale Gewicht. Bitte versuchen Sie, einen kleineren Betrag zu senden oder die UTXOs Ihrer Wallet manuell zu konsolidieren. - - - The preselected coins total amount does not cover the transaction target. Please allow other inputs to be automatically selected or include more coins manually - Die vorgewählte Gesamtsumme der Coins deckt das Transaktionsziel nicht ab. Bitte erlauben Sie, dass andere Eingaben automatisch ausgewählt werden, oder fügen Sie manuell mehr Coins hinzu - - - Transaction requires one destination of non-0 value, a non-0 feerate, or a pre-selected input - Die Transaktion erfordert ein Ziel mit einem Wert ungleich 0, eine Gebühr ungleich 0 oder eine vorausgewählte Eingabe - - - UTXO snapshot failed to validate. Restart to resume normal initial block download, or try loading a different snapshot. - UTXO-Snapshot konnte nicht validiert werden. Starten Sie neu, um den normalen anfänglichen Block-Download fortzusetzen, oder versuchen Sie, einen anderen Snapshot zu laden. - - - Unconfirmed UTXOs are available, but spending them creates a chain of transactions that will be rejected by the mempool - Unbestätigte UTXOs sind verfügbar, aber deren Ausgabe erzeugt eine Kette von Transaktionen, die vom Mempool abgelehnt werden - - - Unexpected legacy entry in descriptor wallet found. Loading wallet %s - -The wallet might have been tampered with or created with malicious intent. - - Unerwarteter Legacy-Eintrag in Deskriptor-Wallet gefunden. Lade Wallet %s - -Die Wallet könnte manipuliert oder in böser Absicht erstellt worden sein. - - - - Unrecognized descriptor found. Loading wallet %s - -The wallet might had been created on a newer version. -Please try running the latest software version. - - Nicht erkannter Deskriptor gefunden. Beim laden vom Wallet %s - -Die Wallet wurde möglicherweise in einer neueren Version erstellt. -Bitte mit der neuesten Softwareversion versuchen. - - - - -Unable to cleanup failed migration - -Fehlgeschlagene Migration kann nicht bereinigt werden - - - -Unable to restore backup of wallet. - -Die Sicherung der Wallet kann nicht wiederhergestellt werden. - - - whitebind may only be used for incoming connections ("out" was passed) - whitebind darf nur für eingehende Verbindungen verwendet werden ("out" wurde übergeben) - - - Block verification was interrupted - Blocküberprüfung wurde unterbrochen - - - Cannot write to directory '%s'; check permissions. - Es kann nicht in das Verzeichnis '%s' geschrieben werden. Überprüfen Sie die Berechtigungen. - - - Config setting for %s only applied on %s network when in [%s] section. - Konfigurationseinstellungen für %s sind nur auf %s network gültig, wenn in Sektion [%s] - - - Corrupted block database detected - Beschädigte Blockdatenbank erkannt - - - Could not find asmap file %s - Konnte die asmap Datei %s nicht finden - - - Could not parse asmap file %s - Konnte die asmap Datei %s nicht analysieren - - - Disk space is too low! - Freier Plattenspeicher zu gering! - - - Done loading - Laden abgeschlossen - - - Dump file %s does not exist. - Speicherauszugsdatei %sexistiert nicht. - - - Error creating %s - Error beim Erstellen von %s - - - Error initializing block database - Fehler beim Initialisieren der Blockdatenbank - - - Error initializing wallet database environment %s! - Fehler beim Initialisieren der Wallet-Datenbankumgebung %s! - - - Error loading %s - Fehler beim Laden von %s - - - Error loading %s: Private keys can only be disabled during creation - Fehler beim Laden von %s: private Schlüssel können nur bei der Erstellung deaktiviert werden - - - Error loading %s: Wallet corrupted - Fehler beim Laden von %s: Das Wallet ist beschädigt - - - Error loading %s: Wallet requires newer version of %s - Fehler beim Laden von %s: Das Wallet benötigt eine neuere Version von %s - - - Error loading block database - Fehler beim Laden der Blockdatenbank - - - Error loading databases - Fehler beim Laden von Datenbanken - - - Error opening block database - Fehler beim Öffnen der Blockdatenbank - - - Error opening coins database - Fehler beim Öffnen der Coins-Datenbank - - - Error reading configuration file: %s - Fehler beim Lesen der Konfigurationsdatei: %s - - - Error reading from database, shutting down. - Fehler beim Lesen der Datenbank, Ausführung wird beendet. - - - Error reading next record from wallet database - Fehler beim Lesen des nächsten Eintrags aus der Wallet Datenbank - - - Error: Cannot extract destination from the generated scriptpubkey - Fehler: Das Ziel kann nicht aus dem generierten scriptpubkey extrahiert werden - - - Error: Couldn't create cursor into database - Fehler: Konnte den Cursor in der Datenbank nicht erzeugen - - - Error: Disk space is low for %s - Fehler: Zu wenig Speicherplatz auf der Festplatte %s - - - Error: Dumpfile checksum does not match. Computed %s, expected %s - Fehler: Prüfsumme der Speicherauszugsdatei stimmt nicht überein. -Berechnet: %s, erwartet: %s - - - Error: Failed to create new watchonly wallet - Fehler: Fehler beim Erstellen einer neuen nur-beobachten Wallet - - - Error: Got key that was not hex: %s - Fehler: Schlüssel ist kein Hex: %s - - - Error: Got value that was not hex: %s - Fehler: Wert ist kein Hex: %s - - - Error: Keypool ran out, please call keypoolrefill first - Fehler: Schlüsselspeicher ausgeschöpft, bitte zunächst keypoolrefill ausführen - - - Error: Missing checksum - Fehler: Fehlende Prüfsumme - - - Error: No %s addresses available. - Fehler: Keine %s Adressen verfügbar. - - - Error: This wallet already uses SQLite - Fehler: Diese Wallet verwendet bereits SQLite - - - Error: This wallet is already a descriptor wallet - Fehler: Diese Wallet ist bereits eine Deskriptor-Wallet - - - Error: Unable to begin reading all records in the database - Fehler: Konnte nicht anfangen, alle Datensätze in der Datenbank zu lesen. - - - Error: Unable to make a backup of your wallet - Fehler: Es kann keine Sicherungskopie Ihrer Wallet erstellt werden - - - Error: Unable to parse version %u as a uint32_t - Fehler: Kann Version %u nicht als uint32_t lesen. - - - Error: Unable to read all records in the database - Fehler: Nicht alle Datensätze in der Datenbank können gelesen werden - - - Error: Unable to read wallet's best block locator record - Fehler: Konnte Wallet Eintrag für Ort des besten Blocks nicht lesen. - - - Error: Unable to remove watchonly address book data - Fehler: Watchonly-Adressbuchdaten konnten nicht entfernt werden - - - Error: Unable to write data to disk for wallet %s - Fehler: Daten können nicht auf die Festplatte für die Wallet %s geschrieben werden - - - Error: Unable to write record to new wallet - Fehler: Kann neuen Eintrag nicht in Wallet schreiben - - - Error: Unable to write solvable wallet best block locator record - Fehler: Konnte Wallet Eintrag für Ort des besten Blocks nicht schreiben. - - - Error: Unable to write watchonly wallet best block locator record - Fehler: Konnte Nur-beobachten-Wallet Eintrag für Ort des besten Blocks nicht schreiben. - - - Error: database transaction cannot be executed for wallet %s - Fehler: Datenbank-Transaktion kann für Wallet %s nicht ausgeführt werden. - - - Failed to listen on any port. Use -listen=0 if you want this. - Fehler: Konnte auf keinem Port hören. Wenn dies so gewünscht wird -listen=0 verwenden. - - - Failed to rescan the wallet during initialization - Fehler: Wallet konnte während der Initialisierung nicht erneut gescannt werden. - - - Failed to start indexes, shutting down.. - Start der Indizes fehlgeschlagen, wird beendet.. - - - Failed to verify database - Verifizierung der Datenbank fehlgeschlagen - - - Failure removing transaction: %s - Fehler beim Entfernen der Transaktion: %s - - - Fee rate (%s) is lower than the minimum fee rate setting (%s) - Der Gebührensatz (%s) ist niedriger als die Mindestgebührensatz (%s) Einstellung. - - - Ignoring duplicate -wallet %s. - Ignoriere doppeltes -wallet %s. - - - Importing… - Importiere... - - - Incorrect or no genesis block found. Wrong datadir for network? - Fehlerhafter oder kein Genesis-Block gefunden. Falsches Datenverzeichnis für das Netzwerk? - - - Initialization sanity check failed. %s is shutting down. - Initialisierungsplausibilitätsprüfung fehlgeschlagen. %s wird beendet. - - - Input not found or already spent - Input nicht gefunden oder bereits ausgegeben - - - Insufficient dbcache for block verification - Unzureichender dbcache für die Blocküberprüfung - - - Insufficient funds - Unzureichender Kontostand - - - Invalid -i2psam address or hostname: '%s' - Ungültige -i2psam Adresse oder Hostname: '%s' - - - Invalid -onion address or hostname: '%s' - Ungültige Onion-Adresse oder ungültiger Hostname: '%s' - - - Invalid -proxy address or hostname: '%s' - Ungültige Proxy-Adresse oder ungültiger Hostname: '%s' - - - Invalid P2P permission: '%s' - Ungültige P2P Genehmigung: '%s' - - - Invalid amount for %s=<amount>: '%s' (must be at least %s) - Ungültiger Betrag für %s=<amount>: '%s' (muss mindestens %ssein) - - - Invalid amount for %s=<amount>: '%s' - Ungültiger Betrag für %s=<amount>: '%s' - - - Invalid amount for -%s=<amount>: '%s' - Ungültiger Betrag für -%s=<amount>: '%s' - - - Invalid netmask specified in -whitelist: '%s' - Ungültige Netzmaske angegeben in -whitelist: '%s' - - - Invalid port specified in %s: '%s' - Ungültiger Port angegeben in %s: '%s' - - - Invalid pre-selected input %s - Ungültige vorausgewählte Eingabe %s - - - Listening for incoming connections failed (listen returned error %s) - Das Hören auf eingehende Verbindungen ist fehlgeschlagen (Das Hören hat Fehler %s zurückgegeben) - - - Loading P2P addresses… - Lade P2P-Adressen... - - - Loading banlist… - Lade Bannliste… - - - Loading block index… - Lade Block-Index... - - - Loading wallet… - Lade Wallet... - - - Missing amount - Fehlender Betrag - - - Missing solving data for estimating transaction size - Fehlende Auflösungsdaten zur Schätzung der Transaktionsgröße - - - Need to specify a port with -whitebind: '%s' - Angabe eines Ports benötigt für -whitebind: '%s' - - - No addresses available - Keine Adressen verfügbar - - - Not found pre-selected input %s - Nicht gefundener vorausgewählter Input %s - - - Not solvable pre-selected input %s - Nicht auflösbare vorausgewählter Input %s - - - Only direction was set, no permissions: '%s' - Nur Richtung festgelegt, keine Genehmigungen: '%s' - - - Prune cannot be configured with a negative value. - Kürzungsmodus kann nicht mit einem negativen Wert konfiguriert werden. - - - Prune mode is incompatible with -txindex. - Kürzungsmodus ist nicht mit -txindex kompatibel. - - - Pruning blockstore… - Kürze den Blockspeicher… - - - Reducing -maxconnections from %d to %d, because of system limitations. - Reduziere -maxconnections von %d zu %d, aufgrund von Systemlimitierungen. - - - Replaying blocks… - Spiele alle Blocks erneut ein… - - - Rescanning… - Wiederhole Scan... - - - SQLiteDatabase: Failed to execute statement to verify database: %s - SQLite-Datenbank: Anweisung, die Datenbank zu verifizieren fehlgeschlagen: %s - - - SQLiteDatabase: Failed to prepare statement to verify database: %s - SQLite-Datenbank: Anfertigung der Anweisung zum Verifizieren der Datenbank fehlgeschlagen: %s - - - SQLiteDatabase: Failed to read database verification error: %s - Datenbank konnte nicht gelesen werden -Verifikations-Error: %s - - - SQLiteDatabase: Unexpected application id. Expected %u, got %u - SQLiteDatabase: Unerwartete Anwendungs-ID. %u statt %u erhalten. - - - Section [%s] is not recognized. - Sektion [%s] ist nicht erkannt. - - - Signing transaction failed - Signierung der Transaktion fehlgeschlagen - - - Specified -walletdir "%s" does not exist - Angegebenes Verzeichnis "%s" existiert nicht - - - Specified -walletdir "%s" is a relative path - Angegebenes Verzeichnis "%s" ist ein relativer Pfad - - - Specified -walletdir "%s" is not a directory - Angegebenes Verzeichnis "%s" ist kein Verzeichnis - - - Specified blocks directory "%s" does not exist. - Angegebener Blöcke-Ordner "%s" existiert nicht. - - - Specified data directory "%s" does not exist. - Das angegebene Datenverzeichnis "%s" existiert nicht. - - - Starting network threads… - Starte Netzwerk-Threads... - - - The source code is available from %s. - Der Quellcode ist auf %s verfügbar. - - - The specified config file %s does not exist - Die angegebene Konfigurationsdatei %sexistiert nicht - - - The transaction amount is too small to pay the fee - Der Transaktionsbetrag ist zu niedrig, um die Gebühr zu bezahlen. - - - The transactions removal process can only be executed within a db txn - Der Prozess zum Entfernen von Transaktionen kann nur innerhalb einer db txn ausgeführt werden. - - - The wallet will avoid paying less than the minimum relay fee. - Das Wallet verhindert Zahlungen, die die Mindesttransaktionsgebühr nicht berücksichtigen. - - - This is experimental software. - Dies ist experimentelle Software. - - - This is the minimum transaction fee you pay on every transaction. - Dies ist die kleinstmögliche Gebühr, die beim Senden einer Transaktion fällig wird. - - - This is the transaction fee you will pay if you send a transaction. - Dies ist die Gebühr, die beim Senden einer Transaktion fällig wird. - - - Transaction %s does not belong to this wallet - Transaktion %s gehört nicht zu dieser Brieftasche - - - Transaction amount too small - Transaktionsbetrag zu niedrig - - - Transaction amounts must not be negative - Transaktionsbeträge dürfen nicht negativ sein. - - - Transaction change output index out of range - Ausgangsindex des Wechselgelds außerhalb des Bereichs - - - Transaction must have at least one recipient - Die Transaktion muss mindestens einen Empfänger enthalten. - - - Transaction needs a change address, but we can't generate it. - Transaktion erfordert eine Wechselgeldadresse, die jedoch nicht erzeugt werden kann. - - - Transaction too large - Transaktion zu groß - - - Unable to bind to %s on this computer (bind returned error %s) - Kann auf diesem Computer nicht an %s binden (bind meldete Fehler %s) - - - Unable to bind to %s on this computer. %s is probably already running. - Kann auf diesem Computer nicht an %s binden. Evtl. wurde %s bereits gestartet. - - - Unable to create the PID file '%s': %s - Erstellung der PID-Datei '%s': %s ist nicht möglich - - - Unable to find UTXO for external input - UTXO für externen Input konnte nicht gefunden werden - - - Unable to generate initial keys - Initialschlüssel können nicht generiert werden - - - Unable to generate keys - Schlüssel können nicht generiert werden - - - Unable to open %s for writing - Konnte %s nicht zum Schreiben zu öffnen - - - Unable to parse -maxuploadtarget: '%s' - Kann -maxuploadtarget: '%s' nicht parsen - - - Unable to start HTTP server. See debug log for details. - Kann HTTP-Server nicht starten. Siehe Debug-Log für Details. - - - Unable to unload the wallet before migrating - Die Wallet kann vor der Migration nicht entladen werden - - - Unknown -blockfilterindex value %s. - Unbekannter -blockfilterindex Wert %s. - - - Unknown address type '%s' - Unbekannter Adresstyp '%s' - - - Unknown change type '%s' - Unbekannter Wechselgeld-Typ '%s' - - - Unknown network specified in -onlynet: '%s' - Unbekannter Netztyp in -onlynet angegeben: '%s' - - - Unknown new rules activated (versionbit %i) - Unbekannte neue Regeln aktiviert (Versionsbit %i) - - - Unsupported global logging level %s=%s. Valid values: %s. - Nicht unterstützte globale Protokollierungsebene %s=%s. Gültige Werte: %s. - - - Wallet file creation failed: %s - Wallet Datei konnte nicht angelegt werden: %s - - - acceptstalefeeestimates is not supported on %s chain. - acceptstalefeeestimates wird auf der %s Chain nicht unterstützt. - - - Unsupported logging category %s=%s. - Nicht unterstützte Protokollkategorie %s=%s. - - - Do you want to rebuild the databases now? - Möchten Sie die Datenbanken jetzt neu erstellen? - - - Error: Could not add watchonly tx %s to watchonly wallet - Fehler: Konnte Nur-beobachten TX %s der Nur-beobachten-Wallet nicht hinzufügen. - - - Error: Could not delete watchonly transactions. - Fehler: Watchonly-Transaktionen konnten nicht gelöscht werden. - - - Error: Wallet does not exist - Fehler: Wallet existiert nicht - - - Error: cannot remove legacy wallet records - Fehler: Legacy-Wallet-Datensätze können nicht entfernt werden - - - Not enough file descriptors available. %d available, %d required. - Es sind nicht genügend Dateideskriptoren verfügbar. %d verfügbar, %d erforderlich. - - - User Agent comment (%s) contains unsafe characters. - Der User Agent Kommentar (%s) enthält unsichere Zeichen. - - - Verifying blocks… - Überprüfe Blöcke... - - - Verifying wallet(s)… - Überprüfe Wallet(s)... - - - Wallet needed to be rewritten: restart %s to complete - Wallet musste neu geschrieben werden: starten Sie %s zur Fertigstellung neu - - - Settings file could not be read - Einstellungsdatei konnte nicht gelesen werden - - - Settings file could not be written - Einstellungsdatei kann nicht geschrieben werden - - - \ No newline at end of file diff --git a/src/qt/locale/bitcoin_es.ts b/src/qt/locale/bitcoin_es.ts index 265447fbcde2..ac0e99178ed7 100644 --- a/src/qt/locale/bitcoin_es.ts +++ b/src/qt/locale/bitcoin_es.ts @@ -7,7 +7,7 @@ Create a new address - Crear una nueva dirección + Crear una dirección nueva &New @@ -31,7 +31,7 @@ Enter address or label to search - Introduce una dirección o etiqueta que buscar + Introducir una dirección o etiqueta que buscar Export the data in the current tab to a file @@ -47,11 +47,11 @@ Choose the address to send coins to - Elige la dirección a la que se enviarán las monedas + Elegir la dirección a la que se enviarán las monedas Choose the address to receive coins with - Elige la dirección con la que se recibirán las monedas + Elegir la dirección con la que se recibirán las monedas C&hoose @@ -64,7 +64,7 @@ These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. Signing is only possible with addresses of the type 'legacy'. - Estas son tus direcciones de Bitcoin para recibir pagos. Usa el botón "Crear nueva dirección de recepción" en la pestaña "Recibir" para crear nuevas direcciones. + Estas son las direcciones de Bitcoin para recibir pagos. Usa el botón "Crear nueva dirección de recepción" en la pestaña "Recibir" para crear nuevas direcciones. Solo es posible firmar con direcciones de tipo "legacy". @@ -91,7 +91,7 @@ Solo es posible firmar con direcciones de tipo "legacy". There was an error trying to save the address list to %1. Please try again. An error message. %1 is a stand-in argument for the name of the file we attempted to save to. - Hubo un error al intentar guardar la lista de direcciones %1. Inténtalo nuevamente. + Hubo un error al intentar guardar la lista de direcciones en %1. Inténtalo nuevamente. Sending addresses - %1 @@ -103,7 +103,7 @@ Solo es posible firmar con direcciones de tipo "legacy". Exporting Failed - Error al exportar + Exportación incorrecta @@ -129,7 +129,7 @@ Solo es posible firmar con direcciones de tipo "legacy". Enter passphrase - Ingresar la frase de contraseña + Ingresar frase de contraseña New passphrase @@ -137,11 +137,11 @@ Solo es posible firmar con direcciones de tipo "legacy". Repeat new passphrase - Repetir la nueva frase de contraseña + Repetir nueva frase de contraseña Show passphrase - Mostrar la frase de contraseña + Mostrar frase de contraseña Encrypt wallet @@ -169,7 +169,7 @@ Solo es posible firmar con direcciones de tipo "legacy". Are you sure you wish to encrypt your wallet? - ¿Seguro deseas cifrar el monedero? + ¿Seguro que deseas cifrar el monedero? Wallet encrypted @@ -209,15 +209,15 @@ Solo es posible firmar con direcciones de tipo "legacy". IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANTE: Cualquier respaldo que hayas hecho del archivo de tu monedero debe ser reemplazado por el archivo cifrado del monedero recién generado. Por razones de seguridad, los respaldos anteriores del archivo del monedero sin cifrar serán inútiles cuando empieces a usar el monedero cifrado nuevo. + IMPORTANTE: Cualquier copia de seguridad anterior que hayas hecho del archivo del monedero se deberá reemplazar por el nuevo archivo cifrado que generaste. Por motivos de seguridad, las copias de seguridad realizadas anteriormente quedarán obsoletas en cuanto empieces a usar el nuevo monedero cifrado. Wallet encryption failed - El cifrado del monedero ha fallado + Error al cifrar el monedero Wallet encryption failed due to an internal error. Your wallet was not encrypted. - El cifrado del monedero ha fallado debido a un error interno. Tu monedero no ha sido cifrado. + El cifrado del monedero falló debido a un error interno, por lo que no se cifró. The supplied passphrases do not match. @@ -225,19 +225,19 @@ Solo es posible firmar con direcciones de tipo "legacy". Wallet unlock failed - El desbloqueo del monedero ha fallado + Error al desbloquear el monedero The passphrase entered for the wallet decryption was incorrect. - La frase de contraseña introducida para descifrar el monedero es incorrecta. + La frase de contraseña introducida para descifrar el monedero era incorrecta. The passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. If this is successful, please set a new passphrase to avoid this issue in the future. - La frase de contraseña ingresada para el descifrado del monedero es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo. Si esto es correcto, establece una frase de contraseña nueva para evitar este problema en el futuro. + La frase de contraseña ingresada para el descifrado del monedero es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo. Si esto funciona, establece una frase de contraseña nueva para evitar este problema en el futuro. Wallet passphrase was successfully changed. - La frase de contraseña del monedero ha sido cambiada correctamente. + La frase de contraseña del monedero se cambió correctamente. Passphrase change failed @@ -249,7 +249,7 @@ Solo es posible firmar con direcciones de tipo "legacy". Warning: The Caps Lock key is on! - Advertencia: ¡La tecla Bloq Mayus está activada! + Advertencia: ¡La tecla Bloq Mayús está activada! @@ -267,7 +267,7 @@ Solo es posible firmar con direcciones de tipo "legacy". BitcoinApplication Settings file %1 might be corrupt or invalid. - El archivo de configuración %1 puede estar corrupto o no ser válido. + El archivo de configuración %1 puede estar dañado o no ser válido. Runaway exception @@ -275,7 +275,7 @@ Solo es posible firmar con direcciones de tipo "legacy". A fatal error occurred. %1 can no longer continue safely and will quit. - Ha ocurrido un error fatal. %1 no puede seguir ejecutándose de manera segura y se cerrará. + Se produjo un error irrecuperable. %1 no puede seguir ejecutándose de manera segura, por lo que se cerrará. Internal error @@ -283,7 +283,7 @@ Solo es posible firmar con direcciones de tipo "legacy". An internal error occurred. %1 will attempt to continue safely. This is an unexpected bug which can be reported as described below. - Ha ocurrido un error interno. %1 intentará continuar de manera segura. Este es un error inesperado que puede ser comunicado de las formas que se muestran debajo. + Se produjo un error interno. %1 intentará continuar de manera segura. Este error inesperado puede comunicarse de las formas que se muestran a continuación. @@ -291,16 +291,16 @@ Solo es posible firmar con direcciones de tipo "legacy". Do you want to reset settings to default values, or to abort without making changes? Explanatory text shown on startup when the settings file cannot be read. Prompts user to make a choice between resetting or aborting. - ¿Deseas restablecer la configuración a los valores predeterminados o interrumpir sin realizar cambios? + ¿Deseas restablecer la configuración a los valores predeterminados o anular sin realizar cambios? A fatal error occurred. Check that settings file is writable, or try running with -nosettings. Explanatory text shown on startup when the settings file could not be written. Prompts user to check that we have the ability to write to the file. Explains that the user has the option of running without a settings file. - Un error fatal ha ocurrido. Comprueba que el archivo de configuración admite escritura, o intenta ejecutar de nuevo el programa con -nosettings + Se produjo un error irrecuperable. Comprueba que el archivo de configuración admita escritura o intenta ejecutar el programa con -nosettings. %1 didn't yet exit safely… - %1 todavía no ha terminado de forma segura... + %1 aún no ha terminado de forma segura... unknown @@ -308,7 +308,7 @@ Solo es posible firmar con direcciones de tipo "legacy". Embedded "%1" - "%1" insertado + "%1" integrado Default system font "%1" @@ -435,11 +435,11 @@ Solo es posible firmar con direcciones de tipo "legacy". Browse transaction history - Examinar el historial de transacciones + Explorar el historial de transacciones E&xit - &Salir + S&alir Quit application @@ -467,7 +467,7 @@ Solo es posible firmar con direcciones de tipo "legacy". Create a new wallet - Crear monedero nuevo + Crea un monedero nuevo &Minimize @@ -488,11 +488,11 @@ Solo es posible firmar con direcciones de tipo "legacy". Send coins to a Bitcoin address - Enviar monedas a una dirección Bitcoin + Enviar monedas a una dirección de Bitcoin Backup wallet to another location - Respaldar monedero en otra ubicación + Realizar copia de seguridad del monedero en otra ubicación Change the passphrase used for wallet encryption @@ -512,11 +512,15 @@ Solo es posible firmar con direcciones de tipo "legacy". &Encrypt Wallet… - &Cifrar monedero + &Cifrar monedero… + + + Encrypt the private keys that belong to your wallet + Cifrar las claves privadas que pertenecen al monedero &Backup Wallet… - &Copia de seguridad del monedero + &Realizar copia de seguridad del monedero... &Change Passphrase… @@ -526,10 +530,18 @@ Solo es posible firmar con direcciones de tipo "legacy". Sign &message… Firmar &mensaje... + + Sign messages with your Bitcoin addresses to prove you own them + Firma mensajes con tus direcciones de Bitcoin para demostrar que son tuyas. + &Verify message… &Verificar mensaje... + + Verify messages to ensure they were signed with specified Bitcoin addresses + Verifica mensajes para asegurarte de que estén firmados con direcciones de Bitcoin concretas. + &Load PSBT from file… &Cargar TBPF desde archivo... @@ -550,13 +562,25 @@ Solo es posible firmar con direcciones de tipo "legacy". Close All Wallets… Cerrar todos los monederos... + + &File + &Archivo + + + &Settings + &Parámetros + &Help &Ayuda + + Tabs toolbar + Barra de herramientas de pestañas + Syncing Headers (%1%)… - Sincronizando cabeceras (1%1%) + Sincronizando encabezados (%1%)… Synchronizing with network… @@ -576,15 +600,15 @@ Solo es posible firmar con direcciones de tipo "legacy". Request payments (generates QR codes and bitcoin: URIs) - Solicitar pagos (genera código QR y URI's de Bitcoin) + Solicitar pagos (genera códigos QR y URI de tipo "bitcoin:") Show the list of used sending addresses and labels - Editar la lista de las direcciones y etiquetas almacenadas + Mostrar la lista de direcciones de envío y etiquetas utilizadas Show the list of used receiving addresses and labels - Mostrar la lista de direcciones de envío y etiquetas + Muestra la lista de direcciones de recepción y etiquetas utilizadas &Command-line options @@ -593,8 +617,8 @@ Solo es posible firmar con direcciones de tipo "legacy". Processed %n block(s) of transaction history. - Procesado %n bloque del historial de transacciones. - Procesado %n bloques del historial de transacciones. + Se procesó %n bloque del historial de transacciones. + Se procesaron %n bloques del historial de transacciones. @@ -607,11 +631,11 @@ Solo es posible firmar con direcciones de tipo "legacy". Last received block was generated %1 ago. - El último bloque recibido fue generado hace %1 horas. + El último bloque recibido se generó hace %1. Transactions after this will not yet be visible. - Las transacciones posteriores aún no son visibles. + Las transacciones posteriores aún no estarán visibles. Warning @@ -623,11 +647,11 @@ Solo es posible firmar con direcciones de tipo "legacy". Up to date - Actualizado al día + Actualizado Load Partially Signed Bitcoin Transaction - Cargar una transacción de Bitcoin parcialmente firmada + Cargar transacción de Bitcoin parcialmente firmada Load PSBT from &clipboard… @@ -635,23 +659,27 @@ Solo es posible firmar con direcciones de tipo "legacy". Load Partially Signed Bitcoin Transaction from clipboard - Cargar una transacción de Bitcoin parcialmente firmada desde el Portapapeles + Cargar transacción de Bitcoin parcialmente firmada desde portapapeles Node window Ventana del nodo + + Open node debugging and diagnostic console + Abrir consola de depuración y diagnóstico del nodo + &Sending addresses - Direcciones de &envío + &Direcciones de envío &Receiving addresses - Direcciones de &recepción + &Direcciones de recepción Open a bitcoin: URI - Abrir un bitcoin: URI + Abrir un URI de tipo "bitcoin:" Open Wallet @@ -659,7 +687,7 @@ Solo es posible firmar con direcciones de tipo "legacy". Open a wallet - Abrir un monedero + Abre un monedero Close wallet @@ -673,7 +701,7 @@ Solo es posible firmar con direcciones de tipo "legacy". Restore a wallet from a backup file Status tip for Restore Wallet menu item - Restaurar monedero desde un archivo de respaldo + Restaura un monedero desde un archivo de copia de seguridad Close all wallets @@ -689,7 +717,7 @@ Solo es posible firmar con direcciones de tipo "legacy". Show the %1 help message to get a list with possible Bitcoin command-line options - Muestra el mensaje de ayuda %1 para obtener una lista con posibles opciones de línea de comandos de Bitcoin. + Mostrar el mensaje de ayuda %1 para obtener una lista de las posibles opciones de línea de comandos de Bitcoin &Mask values @@ -697,7 +725,7 @@ Solo es posible firmar con direcciones de tipo "legacy". Mask the values in the Overview tab - Ocultar los valores de la ventana de previsualización + Ocultar los valores en la pestaña de vista general No wallets available @@ -758,7 +786,7 @@ Solo es posible firmar con direcciones de tipo "legacy". Click for more actions. A substring of the tooltip. "More actions" are available via the context menu. - Haz clic para ver más acciones. + Hacer clic para ver más acciones. Show Peers tab @@ -777,7 +805,7 @@ Solo es posible firmar con direcciones de tipo "legacy". Pre-syncing Headers (%1%)… - Presincronizando cabeceras (%1%)... + Presincronizando encabezados (%1%)... Error creating wallet @@ -864,7 +892,7 @@ Solo es posible firmar con direcciones de tipo "legacy". UnitDisplayStatusBarControl Unit to show amounts in. Click to select another unit. - Unidad en la que se muestran los importes. Haz clic para seleccionar otra unidad. + Unidad en la que se muestran los importes. Hacer clic para seleccionar otra unidad. @@ -887,7 +915,7 @@ Solo es posible firmar con direcciones de tipo "legacy". After Fee: - Después de la comisión: + Tras comisión: Change: @@ -911,11 +939,11 @@ Solo es posible firmar con direcciones de tipo "legacy". Received with label - Recibido con dirección + Recibido con etiqueta Received with address - Recibido con etiqueta + Recibido con dirección Date @@ -947,11 +975,11 @@ Solo es posible firmar con direcciones de tipo "legacy". Copy transaction &ID and output index - Copiar &ID de transacción e índice de salidas + Copiar &identificador de transacción e índice de salidas L&ock unspent - B&loquear no gastado + B&loquear lo no gastado &Unlock unspent @@ -967,7 +995,7 @@ Solo es posible firmar con direcciones de tipo "legacy". Copy after fee - Copiar después de la comisión + Copiar tras comisión Copy bytes @@ -991,7 +1019,7 @@ Solo es posible firmar con direcciones de tipo "legacy". change from %1 (%2) - cambia desde %1 (%2) + cambio desde %1 (%2) (change) @@ -1012,7 +1040,7 @@ Solo es posible firmar con direcciones de tipo "legacy". Create wallet failed - Fallo al crear monedero + Error al crear monedero Create wallet warning @@ -1020,11 +1048,11 @@ Solo es posible firmar con direcciones de tipo "legacy". Can't list signers - No se pueden enumerar los firmantes + No se puede hacer una lista de firmantes Too many external signers found - Se han encontrado demasiados firmantes externos + Se encontraron demasiados firmantes externos @@ -1048,7 +1076,7 @@ Solo es posible firmar con direcciones de tipo "legacy". Are you sure you wish to migrate the wallet <i>%1</i>? - ¿Seguro deseas migrar el monedero <i>%1</i>? + ¿Seguro que deseas migrar el monedero <i>%1</i>? Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made. @@ -1056,11 +1084,11 @@ If this wallet contains any watchonly scripts, a new wallet will be created whic If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts. The migration process will create a backup of the wallet before migrating. This backup file will be named <wallet name>-<timestamp>.legacy.bak and can be found in the directory for this wallet. In the event of an incorrect migration, the backup can be restored with the "Restore Wallet" functionality. - La migración del monedero lo convertirá en uno o más monederos basados en descriptores. Será necesario realizar una nuevo respaldo del monedero. + La migración del monedero lo convertirá en uno o más monederos basados en descriptores. Será necesario realizar una nueva copia de seguridad del monedero. Si este monedero contiene scripts solo de observación, se creará un nuevo monedero que los contenga. Si este monedero contiene scripts solucionables pero no de observación, se creará un nuevo monedero diferente que los contenga. -El proceso de migración creará un respaldo del monedero antes de migrar. Este archivo de respaldo se llamará <wallet name>-<timestamp>.legacy.bak y se encontrará en el directorio de este monedero. En el caso de una migración incorrecta, el respaldo puede restaurarse con la funcionalidad "Restaurar monedero". +El proceso de migración creará una copia de seguridad del monedero antes de migrar. Este archivo de respaldo se llamará <wallet name>-<timestamp>.legacy.bak y se encontrará en el directorio de este monedero. En el caso de una migración incorrecta, el respaldo puede restaurarse con la funcionalidad "Restaurar monedero". Migrate Wallet @@ -1072,19 +1100,19 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este The wallet '%1' was migrated successfully. - La migración del monedero "%1" se ha realizado correctamente. + La migración del monedero "%1" se realizó correctamente. Watchonly scripts have been migrated to a new wallet named '%1'. - Los scripts solo de observación se han migrado a un nuevo monedero llamado "%1". + Los scripts solo de observación se migraron a un nuevo monedero llamado "%1". Solvable but not watched scripts have been migrated to a new wallet named '%1'. - Los scripts solucionables pero no de observación se han migrado a un nuevo monedero llamado "%1". + Los scripts solucionables pero no de observación se migraron a un nuevo monedero llamado "%1". Migration failed - Migración errónea + Migración incorrecta Migration Successful @@ -1127,7 +1155,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Restore wallet failed Title of message box which is displayed when the wallet could not be restored. - Fallo al restaurar monedero + Error al restaurar monedero Restore wallet warning @@ -1148,11 +1176,11 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Are you sure you wish to close the wallet <i>%1</i>? - ¿Seguro deseas cerrar el monedero <i>%1</i>? + ¿Seguro que deseas cerrar el monedero <i>%1</i>? Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. - Cerrar el monedero durante demasiado tiempo puede causar la resincronización de toda la cadena si la poda es habilitada. + Cerrar el monedero durante demasiado tiempo puede causar la resincronización de toda la cadena si la poda está habilitada. Close all wallets @@ -1187,7 +1215,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice. - Cifrar el monedero. El monedero será cifrado con la frase de contraseña que elijas. + Cifrar el monedero. El monedero se cifrará con la frase de contraseña que elijas. Encrypt Wallet @@ -1199,7 +1227,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Disable private keys for this wallet. Wallets with private keys disabled will have no private keys and cannot have an HD seed or imported private keys. This is ideal for watch-only wallets. - Deshabilita las claves privadas para este monedero. Los monederos con claves privadas deshabilitadas no tendrán claves privadas y no podrán tener ni una semilla HD ni claves privadas importadas. Esto es ideal para monederos solo de observación. + Deshabilitar las claves privadas para este monedero. Los monederos con claves privadas deshabilitadas no tendrán claves privadas y no podrán tener ni una semilla HD ni claves privadas importadas. Esto es ideal para monederos solo de observación. Disable Private Keys @@ -1207,7 +1235,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Make a blank wallet. Blank wallets do not initially have private keys or scripts. Private keys and addresses can be imported, or an HD seed can be set, at a later time. - Crear un monedero vacío. Los monederos vacíos inicialmente no tienen claves privadas ni scripts. Las claves privadas y direcciones pueden importarse, o puede establecerse una semilla HD, posteriormente. + Crear un monedero vacío. Los monederos vacíos inicialmente no tienen claves privadas ni scripts. Las claves privadas y direcciones pueden importarse, o puede establecerse una semilla HD posteriormente. Make Blank Wallet @@ -1215,7 +1243,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Use an external signing device such as a hardware wallet. Configure the external signer script in wallet preferences first. - Utiliza un dispositivo de firma externo, como un monedero de hardware. Configura primero el script del firmante externo en las preferencias del monedero. + Utilizar un dispositivo de firma externo, como un monedero de hardware. Configurar primero el script del firmante externo en las preferencias del monedero. External signer @@ -1228,7 +1256,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Compiled without external signing support (required for external signing) "External signing" means using devices such as hardware wallets. - Compilado sin compatibilidad con firma externa (se requiere para la firma externa) + Compilado sin compatibilidad con firmante externo (se requiere para la firma externa) @@ -1267,7 +1295,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este The entered address "%1" is not a valid Bitcoin address. - La dirección introducida "%1" no es una dirección Bitcoin válida. + La dirección introducida "%1" no es una dirección de Bitcoin válida. Address "%1" already exists as a receiving address with label "%2" and so cannot be added as a sending address. @@ -1279,7 +1307,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Could not unlock wallet. - No se ha podido desbloquear el monedero. + No se pudo desbloquear el monedero. New key generation failed. @@ -1298,7 +1326,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Directory already exists. Add %1 if you intend to create a new directory here. - El directorio ya existe. Agrega %1 si tienes la intención de crear un nuevo directorio aquí. + El directorio ya existe. Agregar %1 si tienes la intención de crear un nuevo directorio aquí. Path already exists, and is not a directory. @@ -1362,7 +1390,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Error: Specified data directory "%1" cannot be created. - Error: El directorio de datos especificado "%1" no pudo ser creado. + Error: El directorio de datos especificado "%1" no puede crearse. Welcome @@ -1374,7 +1402,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este As this is the first time the program is launched, you can choose where %1 will store its data. - Al ser esta la primera vez que se ejecuta el programa, puedes escoger dónde %1 almacenará los datos. + Como es la primera vez que se ejecuta el programa, puedes elegir dónde %1 almacenará los datos. Limit block chain storage to @@ -1394,15 +1422,15 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low. - Si has elegido limitar el almacenamiento de la cadena de bloques (pruning o poda), los datos históricos todavía se deben descargar y procesar, pero se eliminarán posteriormente para mantener el uso del disco bajo. + Si elegiste limitar el almacenamiento de la cadena de bloques (poda), los datos históricos todavía se deben descargar y procesar, pero se eliminarán posteriormente para mantener el uso del disco bajo. Use the default data directory - Utiliza el directorio de datos predeterminado + Utilizar el directorio de datos predeterminado Use a custom data directory: - Utiliza un directorio de datos personalizado: + Utilizar un directorio de datos personalizado: @@ -1451,11 +1479,11 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Unknown… - Desconocido... + Desconocido… calculating… - calculando... + calculando… Last block time @@ -1479,7 +1507,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este %1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain. - %1 está actualmente sincronizándose. Descargará encabezados y bloques de nodos semejantes y los validará hasta alcanzar la cabeza de la cadena de bloques. + %1 está actualmente sincronizándose. Descargará encabezados y bloques de nodos semejantes, y los validará hasta alcanzar la cabeza de la cadena de bloques. Unknown. Syncing Headers (%1, %2%)… @@ -1522,12 +1550,12 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain. - Activar la poda reduce significativamente el espacio de disco necesario para guardar las transacciones. Todos los bloques son completamente validados de cualquier manera. Revertir esta opción requiere descargar de nuevo toda la cadena de bloques. + Al activar la poda, se reduce considerablemente el espacio de disco necesario para almacenar las transacciones. Todos los bloques aún se validan completamente. Para revertir esta opción, se requiere descargar de nuevo toda la cadena de bloques. Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. - Tamaño máximo de la caché de la base de datos. Una caché más grande puede contribuir a una sincronización más rápida, después de lo cual el beneficio es menos pronunciado para la mayoría de los casos de uso. Disminuir el tamaño de la caché reducirá el uso de la memoria. La memoria del mempool no utilizada se comparte para esta caché. + Tamaño máximo de la caché de la base de datos. Asegúrate de tener suficiente RAM. Una caché más grande puede contribuir a una sincronización más rápida, después de lo cual el beneficio es menos pronunciado para la mayoría de los casos de uso. Disminuir el tamaño de la caché reducirá el uso de la memoria. La memoria del mempool no utilizada se comparte para esta caché. Size of &database cache @@ -1539,15 +1567,15 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! - Ruta completa a un script compatible con %1 (p. ej., C:\Descargas\hwi.exe o /Usuarios/Tú/Descargas/hwi.py). Advertencia: ¡El malware podría robarte tus monedas! + Ruta completa a un script compatible con %1 (p. ej., C:\Descargas\hwi.exe o /Usuarios/Tú/Descargas/hwi.py). Advertencia: ¡Puedes perder tus monedas a causa de malware! Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. - Abre el puerto del cliente de Bitcoin en el enrutador automáticamente. Esto solo funciona cuando el enrutador soporta NAT-PMP o PCP y está activo. El puerto externo podría ser elegido al azar. + Abrir automáticamente el puerto del cliente de Bitcoin en el enrutador. Esto solo funciona cuando el enrutador es compatible con NAT-PMP y está activo. El puerto externo podría ser aleatorio. Map port using PCP or NA&T-PMP - Mapear el puerto usando NAT-PMP + Asignar puerto mediante PCP o NA&T-PMP IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) @@ -1555,7 +1583,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Shows if the supplied default SOCKS5 proxy is used to reach peers via this network type. - Muestra si el proxy SOCKS5 por defecto que se ha suministrado se utiliza para conectarse a pares a través de este tipo de red. + Muestra si el proxy SOCKS5 por defecto que se suministró se utiliza para conectarse a pares a través de este tipo de red. Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu. @@ -1563,7 +1591,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Font in the Overview tab: - Fuente en la pestaña de vista general: + Fuente en la pestaña "Vista general": Options set in this dialog are overridden by the command line: @@ -1600,11 +1628,11 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Set the number of script verification threads. Negative values correspond to the number of cores you want to leave free to the system. Tooltip text for Options window setting that sets the number of script verification threads. Explains that negative values mean to leave these many cores free to the system. - Establece el número de subprocesos de verificación de scripts. Los valores negativos corresponden al número de núcleos que se desea dejar libres al sistema. + Establecer el número de subprocesos de verificación de scripts. Los valores negativos corresponden al número de núcleos que se desea dejar libres al sistema. (0 = auto, <0 = leave that many cores free) - (0 = auto, <0 = deja esa cantidad de núcleos libres) + (0 = auto, <0 = dejar esa cantidad de núcleos libres) This allows you or a third party tool to communicate with the node through command-line and JSON-RPC commands. @@ -1618,7 +1646,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este W&allet - &Monedero + M&onedero Whether to set subtract fee from amount as default or not. @@ -1654,7 +1682,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Whether to show PSBT controls. Tooltip text for options window setting that enables PSBT controls. - Establecer si se muestran los controles de TBPF + Establecer si se muestran los controles de TBPF. External Signer (e.g. hardware wallet) @@ -1682,7 +1710,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Proxy &IP: - IP del &proxy: + &IP del proxy: &Port: @@ -1694,7 +1722,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Used for reaching peers via: - Utilizado para llegar a los pares a través de: + Usado para conectarse con pares a través de: &Window @@ -1809,7 +1837,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file. Explanatory text about the priority order of instructions considered by client. The order from high to low being: command-line, configuration file, GUI settings. - El archivo de configuración se usa para especificar opciones avanzadas del usuario, que remplazan la configuración de la GUI. Además, las opciones de la línea de comandos remplazarán este archivo de configuración. + El archivo de configuración se usa para especificar opciones avanzadas del usuario, que remplazan la configuración de la IGU. Además, las opciones de la línea de comandos remplazarán este archivo de configuración. Continue @@ -1821,7 +1849,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este The configuration file could not be opened. - El archivo de configuración no se ha podido abrir. + El archivo de configuración no se pudo abrir. This change would require a client restart. @@ -1867,7 +1895,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance - Total de transacciones que aún no han sido confirmadas y que no son contabilizadas dentro del saldo disponible para gastar + Total de transacciones que aún se deben confirmar y que no se contabilizan dentro del saldo disponible para gastar Immature: @@ -1911,7 +1939,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings->Mask values. - Modo de privacidad activado para la pestaña de vista general. Para mostrar los valores, anula la selección de "Configuración->Ocultar valores". + Modo de privacidad activado para la pestaña de vista general. Para mostrar los valores, anula la selección de "Configuración → Ocultar valores". @@ -1954,15 +1982,15 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Could not sign any more inputs. - No se han podido firmar más entradas. + No se pudieron firmar más entradas. Signed %1 inputs, but more signatures are still required. - Se han firmado %1 entradas, pero aún se requieren más firmas. + Se firmaron %1 entradas, pero aún se requieren más firmas. Signed transaction successfully. Transaction is ready to broadcast. - La transacción se ha firmado correctamente y está lista para transmitirse. + La transacción se firmó correctamente y está lista para transmitirse. Unknown error processing transaction. @@ -1970,7 +1998,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Transaction broadcast successfully! Transaction ID: %1 - ¡La transacción se ha transmitido correctamente! Identificador de transacción: %1 + ¡La transacción se transmitió correctamente! Identificador de transacción: %1 Transaction broadcast failed: %1 @@ -2003,7 +2031,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Unable to calculate transaction fee or total transaction amount. - No se ha podido calcular la comisión de transacción o la totalidad del importe de la transacción. + No se puede calcular la comisión o el importe total de la transacción. Pays transaction fee: @@ -2043,7 +2071,7 @@ El proceso de migración creará un respaldo del monedero antes de migrar. Este Transaction is fully signed and ready for broadcast. - La transacción se ha firmado completamente y está lista para transmitirse. + La transacción se firmó completamente y está lista para transmitirse. Transaction status is unknown. @@ -2082,7 +2110,7 @@ Si recibes este error, debes solicitar al comerciante que te proporcione un URI Payment request file handling - Gestión de archivos de solicitud de pago + Gestión del archivo de solicitud de pago @@ -2195,7 +2223,7 @@ Si recibes este error, debes solicitar al comerciante que te proporcione un URI To specify a non-default location of the data directory use the '%1' option. - Para especificar una localización personalizada del directorio de datos, usa la opción "%1". + Para especificar un lugar personalizado del directorio de datos, utiliza la opción "%1". Blocksdir @@ -2227,7 +2255,7 @@ Si recibes este error, debes solicitar al comerciante que te proporcione un URI Network addresses that your Bitcoin node is currently using to communicate with other nodes. - Direcciones de red que tu nodo Bitcoin usa actualmente para comunicarse con otros nodos. + Direcciones de red que tu nodo de Bitcoin usa actualmente para comunicarse con otros nodos. Block chain @@ -2299,7 +2327,7 @@ Si recibes este error, debes solicitar al comerciante que te proporcione un URI Whether we relay transactions to this peer. - Si retransmitimos las transacciones a este par. + Establecer si retransmitimos transacciones a este par. Transaction Relay @@ -2332,7 +2360,7 @@ Si recibes este error, debes solicitar al comerciante que te proporcione un URI Whether we relay addresses to this peer. Tooltip text for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - Si retransmitimos las direcciones a este par. + Establecer si retransmitimos las direcciones a este par. Address Relay @@ -2342,12 +2370,12 @@ Si recibes este error, debes solicitar al comerciante que te proporcione un URI The total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). Tooltip text for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - El número total de direcciones recibidas desde este par que han sido procesadas (excluyendo las direcciones que han sido desestimadas debido a la limitación de volumen). + El número total de direcciones recibidas desde este par que se procesaron (excluye las direcciones desestimadas debido a la limitación de volumen). The total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. Tooltip text for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - El número total de direcciones recibidas desde este par que han sido desestimadas (no procesadas) debido a la limitación de volumen. + El número total de direcciones recibidas desde este par que se desestimaron (no se procesaron) debido a la limitación de volumen. Addresses Processed @@ -2357,7 +2385,7 @@ Si recibes este error, debes solicitar al comerciante que te proporcione un URI Addresses Rate-Limited Text title for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Direcciones desestimadas por limitación de volumen + Direcciones omitidas por limitación de volumen User Agent @@ -2373,15 +2401,15 @@ Si recibes este error, debes solicitar al comerciante que te proporcione un URI Open the %1 debug log file from the current data directory. This can take a few seconds for large log files. - Abre el archivo de registro de depuración %1 del directorio de datos actual. Esto puede tomar unos segundos para archivos de registro grandes. + Abrir el archivo de registro de depuración %1 en el directorio de datos actual. Esto puede tardar unos segundos para los archivos de registro grandes. Decrease font size - Reducir el tamaño de la fuente + Disminuir tamaño de fuente Increase font size - Aumentar el tamaño de la fuente + Aumentar tamaño de fuente Permissions @@ -2389,11 +2417,11 @@ Si recibes este error, debes solicitar al comerciante que te proporcione un URI The direction and type of peer connection: %1 - El sentido y el tipo de conexión entre pares: %1 + La dirección y el tipo de conexión entre pares: %1 Direction/Type - Sentido/Tipo + Dirección/Tipo The BIP324 session ID string in hex. @@ -2409,11 +2437,11 @@ Si recibes este error, debes solicitar al comerciante que te proporcione un URI High bandwidth BIP152 compact block relay: %1 - Retransmisión de bloques compactos BIP152 en banda ancha: %1 + Retransmisión de bloques compactos BIP152 en ancho de banda alto: %1 High Bandwidth - Banda ancha + Ancho de banda alto Connection Time @@ -2519,7 +2547,7 @@ Si recibes este error, debes solicitar al comerciante que te proporcione un URI Outbound Feeler: short-lived, for testing addresses Explanatory text for a short-lived outbound peer connection that is used to test the aliveness of known addresses. - Sensor saliente: de corta duración para probar direcciones + Sensor saliente: de duración breve para probar direcciones Outbound Address Fetch: short-lived, for soliciting addresses @@ -2529,7 +2557,7 @@ Si recibes este error, debes solicitar al comerciante que te proporcione un URI detecting: peer could be v1 or v2 Explanatory text for "detecting" transport type. - Detectando: el par puede ser v1 o v2 + detectando: el par puede ser v1 o v2 v1: unencrypted, plaintext transport protocol @@ -2543,15 +2571,15 @@ Si recibes este error, debes solicitar al comerciante que te proporcione un URI we selected the peer for high bandwidth relay - Seleccionamos el par para la retransmisión de banda ancha + Seleccionamos el par para la retransmisión en ancho de banda alto the peer selected us for high bandwidth relay - El par nos seleccionó para la retransmisión de banda ancha + El par nos seleccionó para la retransmisión en ancho de banda alto no high bandwidth relay selected - No se seleccionó la retransmisión de banda ancha + No se seleccionó la retransmisión en ancho de banda alto &Copy address @@ -2678,7 +2706,7 @@ Para obtener más información sobre cómo usar esta consola, escribe %6. 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. - Mensaje opcional para adjuntar a la solicitud de pago, que se mostrará cuando se abra la solicitud. Nota: Este mensaje no se enviará con el pago a través de la red de Bitcoin. + Mensaje opcional para adjuntar a la solicitud de pago, que se mostrará cuando se abra la solicitud. Nota: El mensaje no se enviará con el pago a través de la red de Bitcoin. An optional label to associate with the new receiving address. @@ -2752,6 +2780,10 @@ Para obtener más información sobre cómo usar esta consola, escribe %6. Copy &amount Copiar &importe + + Base58 (Legacy) + Base58 (Heredada) + Not recommended due to higher fees and less protection against typos. No se recomienda debido a las altas comisiones y la poca protección contra errores tipográficos. @@ -2766,15 +2798,15 @@ Para obtener más información sobre cómo usar esta consola, escribe %6. Bech32m (BIP-350) is an upgrade to Bech32, wallet support is still limited. - Bech32m (BIP-350) es una actualización de Bech32. La compatibilidad con el monedero todavía es limitada. + Bech32m (BIP-350) es una actualización de Bech32. La compatibilidad con el monedero aún está limitada. Could not unlock wallet. - No se ha podido desbloquear el monedero. + No se pudo desbloquear el monedero. Could not generate new %1 address - No se ha podido generar una dirección %1 nueva + No se pudo generar nueva dirección %1 @@ -2875,7 +2907,7 @@ Para obtener más información sobre cómo usar esta consola, escribe %6. automatically selected - Seleccionado automáticamente + Seleccionado automaticamente Insufficient funds! @@ -2895,7 +2927,7 @@ Para obtener más información sobre cómo usar esta consola, escribe %6. After Fee: - Tras la comisión: + Tras comisión: Change: @@ -2903,7 +2935,7 @@ Para obtener más información sobre cómo usar esta consola, escribe %6. If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. - Si se activa, pero la dirección de cambio está vacía o es inválida, el cambio se enviará a una dirección generada recientemente. + Si se activa, pero la dirección de cambio está vacía o no es válida, el cambio se enviará a una dirección generada recientemente. Custom change address @@ -2965,9 +2997,9 @@ Para obtener más información sobre cómo usar esta consola, escribe %6. Specify a custom fee per kB (1,000 bytes) of the transaction's virtual size. Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satoshis per kvB" for a transaction size of 500 virtual bytes (half of 1 kvB) would ultimately yield a fee of only 50 satoshis. - Especifica una comisión personalizada por kB (1000 bytes) del tamaño virtual de la transacción. + Especificar una comisión personalizada por kB (1000 bytes) del tamaño virtual de la transacción. -Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por kvB" para una transacción de 500 bytes virtuales (la mitad de 1 kvB) supondría finalmente una comisión de solo 50 satoshis. +Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por kvB" para una transacción de 500 bytes virtuales (la mitad de 1 kvB) produciría, en última instancia, una comisión de solo 50 satoshis. 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. @@ -2979,7 +3011,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k (Smart fee not initialized yet. This usually takes a few blocks…) - (La comisión inteligente no se ha inicializado todavía. Esto tarda normalmente algunos bloques…) + (La comisión inteligente aún no se ha inicializado. Esto tarda normalmente algunos bloques…) Confirmation time target: @@ -2991,7 +3023,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k With Replace-By-Fee (BIP-125) you can increase a transaction's fee after it is sent. Without this, a higher fee may be recommended to compensate for increased transaction delay risk. - Con la función "Reemplazar por comisión" (BIP-125), puedes aumentar la comisión de una transacción después de enviarla. Sin esta, es posible que se recomiende una comisión más alta para compensar el mayor riesgo de retraso de la transacción. + Con la función "Reemplazar-por-comisión" (BIP-125), puedes aumentar la comisión de una transacción después de enviarla. Sin esta, es posible que se recomiende una comisión más alta para compensar el mayor riesgo de retraso de la transacción. Clear &All @@ -3023,7 +3055,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k Copy after fee - Copiar después de la comisión + Copiar tras comisión Copy bytes @@ -3049,7 +3081,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k Set external signer script path in Options -> Wallet "External signer" means using devices such as hardware wallets. - Establecer la ruta al script del firmante externo en "Opciones -> Monedero" + Establecer la ruta al script del firmante externo en "Opciones → Monedero" Cr&eate Unsigned @@ -3073,17 +3105,17 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k Sign failed - Error de firma + Firma incorrecta External signer not found "External signer" means using devices such as hardware wallets. - No se encontró el dispositivo firmante externo + No se encontró el firmante externo External signer failure "External signer" means using devices such as hardware wallets. - Error de firmante externo + Firmante externo incorrecto Save Transaction Data @@ -3114,7 +3146,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k 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. Text to inform a user attempting to create a transaction of their current options. At this stage, a user can only create a PSBT. This string is displayed when private keys are disabled and an external signer is not available. - Revisa por favor la propuesta de transacción. Esto producirá una transacción de Bitcoin parcialmente firmada (TBPF) que puedes guardar o copiar y, luego, firmar; por ejemplo, con un monedero %1 fuera de línea o un monedero de hardware compatible con TBPF. + Revisa la propuesta de transacción. Esto producirá una transacción de Bitcoin parcialmente firmada (TBPF) que puedes guardar o copiar y, luego, firmar; por ejemplo, con un monedero %1 fuera de línea o un monedero de hardware compatible con TBPF. %1 from wallet '%2' @@ -3128,7 +3160,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k Please, review your transaction. You can create and send this transaction or create 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. Text to inform a user attempting to create a transaction of their current options. At this stage, a user can send their transaction or create a PSBT. This string is displayed when both private keys and PSBT controls are enabled. - Revisa por favor la transacción. Puedes crear y enviar esta transacción de Bitcoin parcialmente firmada (TBPF), que además puedes guardar o copiar y, luego, firmar; por ejemplo, con un monedero %1 sin conexión o un monedero de hardware compatible con TBPF. + Revisa la transacción. Puedes crear y enviar esta transacción de Bitcoin parcialmente firmada (TBPF), que además puedes guardar o copiar y, luego, firmar; por ejemplo, con un monedero %1 sin conexión o un monedero de hardware compatible con TBPF. Please, review your transaction. @@ -3155,7 +3187,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k The PSBT has been copied to the clipboard. You can also save it. - Se ha copiado la TBPF al portapapeles. También puedes guardarla. + Se copió la TBPF al portapapeles. También puedes guardarla. PSBT saved to disk @@ -3187,7 +3219,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k Duplicate address found: addresses should only be used once each. - Se ha encontrado una dirección duplicada: las direcciones solo se deben usar una vez. + Se encontró una dirección duplicada: las direcciones solo se deben usar una vez. Transaction creation failed! @@ -3367,11 +3399,11 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k The signature given when the message was signed - La firma proporcionada cuando el mensaje fue firmado + La firma proporcionada cuando se firmó el mensaje Verify the message to ensure it was signed with the specified Bitcoin address - Verifica el mensaje para asegurarte de que se firmó con la dirección de Bitcoin especificada. + Verifica el mensaje para asegurarte de que se firmó con la dirección de Bitcoin especificada Verify &Message @@ -3383,7 +3415,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k Click "Sign Message" to generate signature - Hacer clic en "Firmar mensaje" para generar una firma + Haz clic en "Firmar mensaje" para generar una firma The entered address is invalid. @@ -3399,7 +3431,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k Wallet unlock was cancelled. - Se ha cancelado el desbloqueo del monedero. + Se canceló el desbloqueo del monedero. No error @@ -3419,7 +3451,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k The signature could not be decoded. - La firma no ha podido decodificarse. + La firma no pudo decodificarse. Please check the signature and try again. @@ -3427,7 +3459,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k The signature did not match the message digest. - La firma no coincide con la síntesis del mensaje. + La firma no coincide con la huella digital del mensaje. Message verification failed. @@ -3534,7 +3566,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k not accepted - no aceptada + no aceptado Debit @@ -3582,7 +3614,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k %1 (Certificate was not verified) - %1 (El certificado no fue verificado) + %1 (No se verificó el certificado) Merchant @@ -3688,7 +3720,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k watch-only - Solo de observación + solo de observación (n/a) @@ -3712,7 +3744,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k Whether or not a watch-only address is involved in this transaction. - Si una dirección solo de observación está involucrada en esta transacción o no. + Establecer si una dirección solo de observación está involucrada en esta transacción o no. User-defined intent/purpose of the transaction. @@ -3743,7 +3775,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k Last month - El mes pasado + Mes pasado This year @@ -3763,7 +3795,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k Other - Otra + Otro Enter address, transaction id, or label to search @@ -3861,11 +3893,11 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k Exporting Failed - Error al exportar + Exportación incorrecta There was an error trying to save the transaction history to %1. - Ha ocurrido un error al intentar guardar el historial de transacciones en %1. + Ocurrió un error al intentar guardar el historial de transacciones en %1. Exporting Successful @@ -3873,7 +3905,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k The transaction history was successfully saved to %1. - El historial de transacciones ha sido guardado exitosamente en %1 + El historial de transacciones se guardó correctamente en %1. Range: @@ -3890,8 +3922,8 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k No wallet has been loaded. Go to File > Open Wallet to load a wallet. - OR - - No se ha cargado ningún monedero. -Ve a "Archivo > Abrir monedero" para cargar uno. + No se cargó ningún monedero. +Ir a "Archivo > Abrir monedero" para cargar uno. - O - @@ -3927,16 +3959,16 @@ Ve a "Archivo > Abrir monedero" para cargar uno. Fee bump error - Error de incremento de comisión + Error al incrementar la comisión Increasing transaction fee failed - Fallo al incrementar la comisión de transacción + No se pudo aumentar la comisión de transacción Do you want to increase the fee? Asks a user if they would like to manually increase the fee of a transaction that has already been created. - ¿Deseas incrementar la comisión? + ¿Quieres aumentar la comisión? Current fee: @@ -3976,7 +4008,7 @@ Ve a "Archivo > Abrir monedero" para cargar uno. Could not commit transaction - No se ha podido confirmar la transacción + No se pudo confirmar la transacción Signer error @@ -3999,7 +4031,7 @@ Ve a "Archivo > Abrir monedero" para cargar uno. Backup Wallet - Respaldar monedero + Realizar copia de seguridad del monedero Wallet Data @@ -4008,19 +4040,19 @@ Ve a "Archivo > Abrir monedero" para cargar uno. Backup Failed - Error de respaldo + No se pudo realizar la copia de seguridad There was an error trying to save the wallet data to %1. - Ha habido un error al intentar guardar los datos del monedero en %1. + Ocurrió un error al intentar guardar los datos del monedero en %1. Backup Successful - Copia de respaldo correcta + Se completó correctamente la copia de seguridad The wallet data was successfully saved to %1. - Los datos del monedero se han guardado correctamente en %1. + Los datos del monedero se guardaron correctamente en %1. Cancel @@ -4035,19 +4067,19 @@ Ve a "Archivo > Abrir monedero" para cargar uno. %s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup. - %s corrupto. Intenta utilizar la herramienta del monedero de Bitcoin para rescatar o restaurar un respaldo. + El archivo %s está dañado. Trata de usar la herramienta "bitcoin-wallet" para recuperar o restaurar una copia de seguridad. %s failed to validate the -assumeutxo snapshot state. This indicates a hardware problem, or a bug in the software, or a bad software modification that allowed an invalid snapshot to be loaded. As a result of this, the node will shut down and stop using any state that was built on the snapshot, resetting the chain height from %d to %d. On the next restart, the node will resume syncing from %d without using any snapshot data. Please report this incident to %s, including how you obtained the snapshot. The invalid snapshot chainstate will be left on disk in case it is helpful in diagnosing the issue that caused this error. - %s no ha podido validar el estado de la instantánea -assumeutxo. Esto indica un problema de hardware, un error en el software o una modificación incorrecta del software que ha permitido que se cargara una instantánea inválida. Por consiguiente, el nodo se apagará y dejará de utilizar cualquier estado basado en la instantánea, restableciendo la altura de la cadena de %d a %d. En el siguiente reinicio, el nodo reanudará la sincronización desde %d sin usar datos de instantánea. Reporta este incidente a %s, indicando cómo obtuviste la instantánea. Se ha dejado el estado de cadena de la instantánea inválida en el disco por si resulta útil para diagnosticar el problema que ha causado este error. + %s no pudo validar el estado de la instantánea -assumeutxo. Esto indica un problema de hardware, un error en el software o una modificación incorrecta del software que permitió que se cargara una instantánea inválida. Por consiguiente, el nodo se apagará y dejará de utilizar cualquier estado basado en la instantánea, restableciendo la altura de la cadena de %d a %d. En el siguiente reinicio, el nodo reanudará la sincronización desde %d sin usar datos de instantánea. Reporta este incidente a %s, indicando cómo obtuviste la instantánea. Se dejó el estado de cadena de la instantánea inválida en el disco por si resulta útil para diagnosticar el problema que causó este error. %s request to listen on port %u. This port is considered "bad" and thus it is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for details and a full list. - %s solicitud para escuchar en el puerto %u. Este puerto se considera "malo" y, por lo tanto, es poco probable que algún par se conecte a él. Consulta doc/p2p-bad-ports.md para obtener detalles y una lista completa. + Solicitud de %s para escuchar en el puerto %u. Este puerto se considera "malo" y, por lo tanto, es poco probable que algún par se conecte a él. Consulta doc/p2p-bad-ports.md para obtener detalles y una lista completa. Cannot downgrade wallet from version %i to version %i. Wallet version unchanged. - No se puede pasar de la versión %i a la versión anterior %i. La versión del monedero no tiene cambios. + No se puede pasar de la versión %i a la versión anterior %i. No se cambió la versión del monedero. 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. @@ -4071,11 +4103,11 @@ Ve a "Archivo > Abrir monedero" para cargar uno. Error starting/committing db txn for wallet transactions removal process - Error al iniciar/cometer el proceso de eliminación de base de datos de transacciones de monedero + Error al iniciar/confirmar la transacción de base de datos para el proceso de eliminación de transacciones del monedero Error: Dumpfile format record is incorrect. Got "%s", expected "format". - Error: El registro del formato del archivo de volcado es incorrecto. Se obtuvo "%s", mientras que se esperaba "formato". + Error: El registro del formato del archivo de volcado es incorrecto. Se obtuvo "%s", mientras que se esperaba "format". Error: Dumpfile identifier record is incorrect. Got "%s", expected "%s". @@ -4083,15 +4115,15 @@ Ve a "Archivo > Abrir monedero" para cargar uno. Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s - Error: la versión del archivo volcado no es compatible. Esta versión del monedero de Bitcoin solo admite archivos de volcado de la versión 1. Se ha obtenido un archivo de volcado con la versión %s. + Error: La versión del archivo de volcado no es compatible. Esta versión del monedero de Bitcoin solo admite archivos de volcado de la versión 1. Se obtuvo un archivo de volcado con la versión %s. Error: Legacy wallets only support the "legacy", "p2sh-segwit", and "bech32" address types - Error: Los monederos de tipo "legacy" solo admiten los tipos de dirección "legacy", "p2sh-segwit" y "bech32". + Error: los monederos tipo legacy solo admiten los tipos de dirección "legacy", "p2sh-segwit" y "bech32". Error: Unable to produce descriptors for this legacy wallet. Make sure to provide the wallet's passphrase if it is encrypted. - Error: No se pueden producir descriptores para este monedero de tipo "legacy". Asegúrate de proporcionar la frase de contraseña del monedero si está encriptada. + Error: No se pueden producir descriptores para este monedero de tipo legacy. Asegúrate de proporcionar la frase de contraseña del monedero si está encriptada. File %s already exists. If you are sure this is what you want, move it out of the way first. @@ -4099,11 +4131,11 @@ Ve a "Archivo > Abrir monedero" para cargar uno. Invalid or corrupt peers.dat (%s). If you believe this is a bug, please report it to %s. As a workaround, you can move the file (%s) out of the way (rename, move, or delete) to have a new one created on the next start. - Archivo "peers.dat" inválido o corrupto (%s). Si crees que se trata de un error, infórmalo a %s. Como alternativa, puedes quitar el archivo %s (renombrarlo, moverlo o eliminarlo) para que se cree uno nuevo en el siguiente inicio. + Archivo "peers.dat" inválido o dañado (%s). Si crees que se trata de un error, infórmalo a %s. Como alternativa, puedes quitar el archivo %s (renombrarlo, moverlo o eliminarlo) para que se cree uno nuevo en el siguiente inicio. Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets - Valor no válido detectado para '-wallet' o '-nowallet'. -wallet' requiere un valor de cadena, mientras que '-nowallet' sólo acepta '1' para desactivar todos los monederos. + El valor detectado para "-wallet" o "-nowallet" no es válido. "-wallet" requiere un valor de cadena, mientras que "-nowallet" solo acepta "1" para desactivar todos los monederos. More than one onion bind address is provided. Using %s for the automatically created Tor onion service. @@ -4111,19 +4143,19 @@ Ve a "Archivo > Abrir monedero" para cargar uno. No dump file provided. To use createfromdump, -dumpfile=<filename> must be provided. - No se ha proporcionado ningún archivo de volcado. Para usar createfromdump, se debe proporcionar -dumpfile=<filename>. + No se proporcionó el archivo de volcado. Para usar createfromdump, se debe proporcionar -dumpfile=<filename>. No dump file provided. To use dump, -dumpfile=<filename> must be provided. - No se proporcionó ningún archivo de volcado. Para usar createfromdump, se debe proporcionar -dumpfile=<filename>. + No se proporcionó el archivo de volcado. Para usar dump, se debe proporcionar -dumpfile=<filename>. No wallet file format provided. To use createfromdump, -format=<format> must be provided. - No se ha proporcionado el formato de archivo del monedero. Para usar createfromdump, se debe proporcionar -format=<format>. + No se proporcionó el formato del archivo de monedero. Para usar createfromdump, se debe proporcionar -format=<format>. Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. - La opción '-upnp' está activada, pero el soporte UPnP se eliminó en la versión 29.0. Considera usar '-natpmp' en su lugar. + La opción "-upnp" está configurada, pero la compatibilidad con UPnP se abandonó en la versión 29.0. Considera usar "-natpmp" en su lugar. Please contribute if you find %s useful. Visit %s for further information about the software. @@ -4159,7 +4191,7 @@ Ve a "Archivo > Abrir monedero" para cargar uno. 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 - Este error podría ocurrir si el monedero no se ha cerrado correctamente y se ha cargado por última vez usando una compilación con una versión más reciente de Berkeley DB. Si es así, usa el software que ha cargado por última vez este monedero. + Este error podría ocurrir si el monedero no se cerró correctamente y se cargó por última vez usando una compilación con una versión más reciente de Berkeley DB. Si es así, usa el software que cargó por última vez este monedero. This is a pre-release test build - use at your own risk - do not use for mining or merchant applications @@ -4187,7 +4219,7 @@ Ve a "Archivo > Abrir monedero" para cargar uno. Unknown wallet file format "%s" provided. Please provide one of "bdb" or "sqlite". - Se ha proporcionado un formato de monedero desconocido "%s". Proporciona uno entre "bdb" o "sqlite". + Se proporcionó un formato de monedero desconocido "%s". Proporciona uno entre "bdb" o "sqlite". Unsupported category-specific logging level %1$s=%2$s. Expected %1$s=<category>:<loglevel>. Valid categories: %3$s. Valid loglevels: %4$s. @@ -4271,7 +4303,7 @@ Ve a "Archivo > Abrir monedero" para cargar uno. Error: Duplicate descriptors created during migration. Your wallet may be corrupted. - Error: Se han creado descriptores duplicados durante la migración. Tu monedero puede estar dañado. + Error: Se crearon descriptores duplicados durante la migración. Tu monedero puede estar dañado. Error: Transaction %s in wallet cannot be identified to belong to migrated wallets @@ -4279,17 +4311,17 @@ Ve a "Archivo > Abrir monedero" para cargar uno. Failed to calculate bump fees, because unconfirmed UTXOs depend on enormous cluster of unconfirmed transactions. - No se ha podido calcular la comisión de incremento porque las UTXO sin confirmar dependen de un grupo enorme de transacciones no confirmadas. + No se pudo calcular la comisión de incremento porque las UTXO sin confirmar dependen de un grupo enorme de transacciones no confirmadas. Failed to remove snapshot chainstate dir (%s). Manually remove it before restarting. - No se ha podido eliminar la instantánea chainstate dir (%s). Elimínala manualmente antes de reiniciar. + No se pudo eliminar la instantánea chainstate dir (%s). Elimínala manualmente antes de reiniciar. Failed to rename invalid peers.dat file. Please move or delete it and try again. - No se ha podido cambiar el nombre del archivo "peers.dat" inválido. Muévelo o elimínalo, e intenta de nuevo. + No se pudo cambiar el nombre del archivo peers.dat inválido. Muévelo o elimínalo, e intenta de nuevo. Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable %s. @@ -4297,11 +4329,11 @@ Ve a "Archivo > Abrir monedero" para cargar uno. Flushing block file to disk failed. This is likely the result of an I/O error. - Ha fallado el vaciado del archivo de bloques al disco. Es probable que se deba a un error de E/S. + Falló el volcado del archivo de bloques al disco. Es probable que se deba a un error de E/S. Flushing undo file to disk failed. This is likely the result of an I/O error. - Ha fallado el vaciado del archivo para deshacer al disco. Es probable que se deba a un error de E/S. + Falló el volcado del archivo undo al disco. Es probable que se deba a un error de E/S. Incompatible options: -dnsseed=1 was explicitly specified, but -onlynet forbids connections to IPv4/IPv6 @@ -4337,7 +4369,19 @@ Ve a "Archivo > Abrir monedero" para cargar uno. Rename of '%s' -> '%s' failed. Cannot clean up the background chainstate leveldb directory. - Ha fallado el cambio de nombre de ''%s" a ''%s". No se puede limpiar el directorio leveldb del estado de la cadena de fondo. + Error al cambiar el nombre de ''%s" a ''%s". No se puede limpiar el directorio leveldb del estado de la cadena de fondo. + + + Specified -blockmaxweight (%d) exceeds consensus maximum block weight (%d) + El valor especificado de -blockmaxweight (%d) supera el peso máximo de bloque consensuado (%d) + + + Specified -blockreservedweight (%d) exceeds consensus maximum block weight (%d) + El valor especificado de -blockreservedweight (%d) supera el peso máximo de bloque consensuado (%d) + + + Specified -blockreservedweight (%d) is lower than minimum safety value of (%d) + El valor especificado de -blockreservedweight (%d) es inferior al valor mínimo de seguridad (%d) The combination of the pre-selected inputs and the wallet automatic inputs selection exceeds the transaction maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs @@ -4353,11 +4397,11 @@ Ve a "Archivo > Abrir monedero" para cargar uno. Transaction requires one destination of non-0 value, a non-0 feerate, or a pre-selected input - La transacción requiere un destino de valor distinto de cero, una tasa de comisión distinta de cero, o una entrada preseleccionada. + La transacción requiere un destino de valor distinto de 0, una tasa de comisión distinta de 0, o una entrada preseleccionada. UTXO snapshot failed to validate. Restart to resume normal initial block download, or try loading a different snapshot. - No se ha validado la instantánea de la UTXO. Reinicia para reanudar la descarga normal del bloque inicial o intenta cargar una instantánea diferente. + No se validó la instantánea de UTXO. Reinicia para reanudar la descarga de bloques inicial normal o intenta cargar una instantánea diferente. Unconfirmed UTXOs are available, but spending them creates a chain of transactions that will be rejected by the mempool @@ -4368,7 +4412,7 @@ Ve a "Archivo > Abrir monedero" para cargar uno. The wallet might have been tampered with or created with malicious intent. - Se ha encontrado una entrada inesperada tipo "legacy" en el monedero basado en descriptores. Cargando monedero %s + Se encontró una entrada inesperada tipo legacy en el monedero basado en descriptores. Cargando monedero %s Es posible que el monedero haya sido manipulado o creado con malas intenciones. @@ -4379,7 +4423,7 @@ Es posible que el monedero haya sido manipulado o creado con malas intenciones. The wallet might had been created on a newer version. Please try running the latest software version. - Se ha encontrado un descriptor desconocido. Cargando monedero %s. + Se encontró un descriptor desconocido. Cargando monedero %s. El monedero se podría haber creado con una versión más reciente. Intenta ejecutar la última versión del software. @@ -4387,7 +4431,7 @@ Intenta ejecutar la última versión del software. Your computer's date and time appear to be more than %d minutes out of sync with the network, this may lead to consensus failure. After you've confirmed your computer's clock, this message should no longer appear when you restart your node. Without a restart, it should stop showing automatically after you've connected to a sufficient number of new outbound peers, which may take some time. You can inspect the `timeoffset` field of the `getpeerinfo` and `getnetworkinfo` RPC methods to get more info. - La fecha y la hora del ordenador parecen estar más de %d minutos desincronizadas con la red, lo que puede producir un fallo de consenso. Después de confirmar el reloj del ordenador, este mensaje debería dejar de aparecer cuando reinicies el nodo. Sin reiniciar, debería dejar de mostrarse automáticamente después de que te hayas conectado a un número suficiente de nuevos pares salientes, lo que puede llevar cierto tiempo. Puedes inspeccionar el campo "timeoffset" de los métodos RPC "getpeerinfo" y "getnetworkinfo" para obtener más información. + La fecha y la hora del equipo parecen estar más de %d minutos desincronizadas con la red, lo que puede producir un fallo de consenso. Después de confirmar el reloj del equipo, este mensaje debería dejar de aparecer cuando reinicies el nodo. Sin reiniciar, debería dejar de mostrarse automáticamente después de que te hayas conectado a un número suficiente de nuevos pares salientes, lo que puede llevar cierto tiempo. Puedes inspeccionar el campo "timeoffset" de los métodos RPC "getpeerinfo" y "getnetworkinfo" para obtener más información. @@ -4399,27 +4443,27 @@ No se puede limpiar la migración fallida Unable to restore backup of wallet. -No se puede restaurar el respaldo del monedero. +No se puede restaurar la copia de seguridad del monedero. whitebind may only be used for incoming connections ("out" was passed) - whitebind solo puede utilizarse para conexiones entrantes (se ha pasado "out") + whitebind solo puede utilizarse para conexiones entrantes (se pasó "out") A fatal internal error occurred, see debug.log for details: - Ha ocurrido un error interno grave. Consulta debug.log para obtener más información: + Ocurrió un error interno grave. Consulta debug.log para obtener más información: Assumeutxo data not found for the given blockhash '%s'. - No se han encontrado datos assumeutxo para el blockhash indicado "%s". + No se encontraron datos assumeutxo para el blockhash indicado "%s". Block verification was interrupted - Se ha interrumpido la verificación de bloques + Se interrumpió la verificación de bloques Cannot write to directory '%s'; check permissions. - No se puede escribir en el directorio '%s'; compruebe los permisos. + No se puede escribir en el directorio "%s"; comprueba los permisos. Config setting for %s only applied on %s network when in [%s] section. @@ -4431,19 +4475,19 @@ No se puede restaurar el respaldo del monedero. Corrupt block found indicating potential hardware failure. - Se ha encontrado un bloque corrupto que indica un posible fallo del hardware. + Se encontró un bloque dañado que indica un posible fallo de hardware. Corrupted block database detected - Se ha detectado que la base de datos de bloques está dañada. + Se detectó que la base de datos de bloques está dañada. Could not find asmap file %s - No se ha podido encontrar el archivo asmap %s + No se pudo encontrar el archivo asmap %s Could not parse asmap file %s - No se ha podido analizar el archivo asmap %s + No se pudo analizar el archivo asmap %s Disk space is too low! @@ -4479,15 +4523,15 @@ No se puede restaurar el respaldo del monedero. Error loading %s: Private keys can only be disabled during creation - Error al cargar %s: Las claves privadas solo se pueden deshabilitar durante la creación. + Error al cargar %s: Las claves privadas solo se pueden deshabilitar durante la creación Error loading %s: Wallet corrupted - Error al cargar %s: monedero dañado. + Error al cargar %s: monedero dañado Error loading %s: Wallet requires newer version of %s - Error al cargar %s: el monedero requiere una versión más reciente de %s. + Error al cargar %s: el monedero requiere una versión más reciente de %s Error loading block database @@ -4495,7 +4539,7 @@ No se puede restaurar el respaldo del monedero. Error loading databases - Error cargando bases de datos + Error al cargar la base de datos Error opening block database @@ -4523,7 +4567,7 @@ No se puede restaurar el respaldo del monedero. Error: Couldn't create cursor into database - Error: No se ha podido crear el cursor en la base de datos + Error: No se pudo crear el cursor en la base de datos Error: Disk space is low for %s @@ -4531,23 +4575,23 @@ No se puede restaurar el respaldo del monedero. Error: Dumpfile checksum does not match. Computed %s, expected %s - Error: La suma de comprobación del archivo de volcado no coincide. Calculada:%s; prevista:%s. + Error: La suma de comprobación del archivo de volcado no coincide. Calculada: %s; prevista: %s. Error: Failed to create new watchonly wallet - Error: No se ha podido crear un monedero solo de observación + Error: No se pudo crear un nuevo monedero solo de observación Error: Got key that was not hex: %s - Error: Se ha recibido una clave que no es hexadecimal (%s) + Error: Se recibió una clave que no es hexadecimal: %s Error: Got value that was not hex: %s - Error: Se ha recibido un valor que no es hexadecimal (%s) + Error: Se recibió un valor que no es hexadecimal: %s Error: Keypool ran out, please call keypoolrefill first - Error: El pool de claves se ha agotado. Invoca keypoolrefill primero. + Error: El keypool se agotó. Invoca keypoolrefill primero. Error: Missing checksum @@ -4571,11 +4615,11 @@ No se puede restaurar el respaldo del monedero. Error: Unable to make a backup of your wallet - Error: No es posible realizar el respaldo del monedero + Error: No es posible realizar una copia de seguridad del monedero Error: Unable to parse version %u as a uint32_t - Error: No se ha podido analizar la versión %u como uint32_t + Error: No se pudo analizar la versión %u como uint32_t Error: Unable to read all records in the database @@ -4583,11 +4627,11 @@ No se puede restaurar el respaldo del monedero. Error: Unable to read wallet's best block locator record - Error: No se ha podido leer el registro del mejor localizador de bloques del monedero + Error: No se pudo leer el registro del localizador del mejor bloque del monedero Error: Unable to remove watchonly address book data - Error: No es posible eliminar los datos de la libreta de direcciones solo de observación + Error: No se pudo eliminar los datos de la libreta de direcciones solo de observación Error: Unable to write data to disk for wallet %s @@ -4595,27 +4639,27 @@ No se puede restaurar el respaldo del monedero. Error: Unable to write record to new wallet - Error: No se puede escribir el registro en el nuevo monedero + Error: No se pudo escribir el registro en el nuevo monedero Error: Unable to write solvable wallet best block locator record - Error: No se ha podido escribir el registro del mejor localizador de bloques del monedero solucionable + Error: No se pudo escribir el registro del localizador del mejor bloque del monedero solucionable Error: Unable to write watchonly wallet best block locator record - Error: No se ha podido escribir el registro del mejor localizador de bloques del monedero solo de observación + Error: No se pudo escribir el registro del localizador del mejor bloque del monedero solo de observación Error: database transaction cannot be executed for wallet %s - Error: la transacción de la base de datos no se puede ejecutar para el monedero %s + Error: La transacción de la base de datos no se puede ejecutar para el monedero %s Failed to connect best block (%s). - No se ha podido conectar el mejor bloque (%s). + No se pudo conectar el mejor bloque (%s). Failed to disconnect block. - No se ha podido desconectar el bloque. + No se pudo desconectar el bloque. Failed to listen on any port. Use -listen=0 if you want this. @@ -4623,7 +4667,7 @@ No se puede restaurar el respaldo del monedero. Failed to read block. - No se ha podido leer el bloque. + No se pudo leer el bloque. Failed to rescan the wallet during initialization @@ -4639,7 +4683,7 @@ No se puede restaurar el respaldo del monedero. Failed to write block. - No se ha podido escribir el bloque. + No se pudo escribir el bloque. Failed to write to block index database. @@ -4651,7 +4695,7 @@ No se puede restaurar el respaldo del monedero. Failed to write undo data. - Error al escribir datos para deshacer. + Error al escribir datos undo. Failure removing transaction: %s @@ -4671,15 +4715,15 @@ No se puede restaurar el respaldo del monedero. Incorrect or no genesis block found. Wrong datadir for network? - El bloque génesis es incorrecto o no se ha encontrado. ¿El directorio de datos es incorrecto para la red? + El bloque génesis es incorrecto o no se encontró. ¿Equivocación en el directorio de datos para la red? Initialization sanity check failed. %s is shutting down. - Fallo al inicializar la comprobación de estado. %s se cerrará. + Fallo al inicializar la prueba de cordura. %s se cerrará. Input not found or already spent - La entrada no se ha encontrado o ya se ha gastado + La entrada no se encontró o ya se gastó Insufficient dbcache for block verification @@ -4691,15 +4735,15 @@ No se puede restaurar el respaldo del monedero. Invalid -i2psam address or hostname: '%s' - Dirección o nombre de host de -i2psam inválido: "%s" + La dirección -i2psam o el nombre de host no es válido: "%s" Invalid -onion address or hostname: '%s' - Dirección o nombre de host de -onion inválido: "%s" + La dirección -onion o el nombre de host no es válido: "%s" Invalid -proxy address or hostname: '%s' - Dirección o nombre de host de -proxy inválido: "%s" + La dirección -proxy o el nombre de host no es válido: "%s" Invalid P2P permission: '%s' @@ -4731,7 +4775,7 @@ No se puede restaurar el respaldo del monedero. Listening for incoming connections failed (listen returned error %s) - Fallo en la escucha para conexiones entrantes (la escucha ha devuelto el error %s) + Fallo en la escucha para conexiones entrantes (la escucha devolvió el error %s) Loading P2P addresses… @@ -4771,7 +4815,7 @@ No se puede restaurar el respaldo del monedero. Not found pre-selected input %s - La entrada preseleccionada no se ha encontrado %s + La entrada preseleccionada no se encontró %s Not solvable pre-selected input %s @@ -4779,7 +4823,7 @@ No se puede restaurar el respaldo del monedero. Only direction was set, no permissions: '%s' - Solo se ha establecido la dirección, sin permisos: "%s" + Solo se estableció la dirección, sin permisos: "%s" Prune cannot be configured with a negative value. @@ -4807,7 +4851,7 @@ No se puede restaurar el respaldo del monedero. SQLiteDatabase: Failed to execute statement to verify database: %s - SQLiteDatabase: Fallo al ejecutar la instrucción para verificar la base de datos: %s + SQLiteDatabase: Fallo al ejecutar la instrucción para verificar la base de datos (%s) SQLiteDatabase: Failed to prepare statement to verify database: %s @@ -4827,15 +4871,15 @@ No se puede restaurar el respaldo del monedero. Signer did not echo address - El firmante no se ha hecho eco de la dirección. + El firmante no reflejó la dirección Signer echoed unexpected address %s - El firmante se ha hecho eco de una dirección inesperada: %s. + El firmante reflejó una dirección inesperada: %s Signer returned error: %s - El firmante ha devuelto un error: %s. + El firmante devolvió un error: %s Signing transaction failed @@ -4847,7 +4891,7 @@ No se puede restaurar el respaldo del monedero. Specified -walletdir "%s" is a relative path - El valor especificado de -walletdir "%s" es una ruta relativa + El valor especificado de -walletdir "%s" es una ruta de acceso relativa Specified -walletdir "%s" is not a directory @@ -4891,7 +4935,7 @@ No se puede restaurar el respaldo del monedero. The transactions removal process can only be executed within a db txn - El proceso de eliminación de transacciones sólo puede ejecutarse dentro de una base de datos de transacción + El proceso de eliminación de transacciones solo puede ejecutarse dentro de una transacción de base de datos The wallet will avoid paying less than the minimum relay fee. @@ -4899,7 +4943,7 @@ No se puede restaurar el respaldo del monedero. There is no ScriptPubKeyManager for this address - No hay ningún ScriptPubKeyManager para esta dirección. + No hay ningún ScriptPubKeyManager para esta dirección This is experimental software. @@ -4943,7 +4987,7 @@ No se puede restaurar el respaldo del monedero. Unable to bind to %s on this computer (bind returned error %s) - No se puede establecer un enlace a %s en este equipo (bind ha devuelto el error %s) + No se puede establecer un enlace a %s en esta computadora (bind devolvió el error %s) Unable to bind to %s on this computer. %s is probably already running. @@ -4955,7 +4999,7 @@ No se puede restaurar el respaldo del monedero. Unable to find UTXO for external input - No se puede encontrar UTXO para la entrada externa + No se puede encontrar una UTXO para la entrada externa Unable to generate initial keys @@ -4971,11 +5015,11 @@ No se puede restaurar el respaldo del monedero. Unable to parse -maxuploadtarget: '%s' - No se ha podido analizar -maxuploadtarget: "%s" + No se pudo analizar -maxuploadtarget: "%s" Unable to start HTTP server. See debug log for details. - No se ha podido iniciar el servidor HTTP. Ver registro de depuración para obtener detalles. + No se pudo iniciar el servidor HTTP. Ver registro de depuración para obtener detalles. Unable to unload the wallet before migrating @@ -5023,7 +5067,7 @@ No se puede restaurar el respaldo del monedero. Do you want to rebuild the databases now? - ¿Quiere reconstruir la base de datos de bloques ahora? + ¿Quieres reconstruir las bases de datos ahora? Error: Could not add watchonly tx %s to watchonly wallet @@ -5031,15 +5075,15 @@ No se puede restaurar el respaldo del monedero. Error: Could not delete watchonly transactions. - Error: No se pueden eliminar las transacciones solo de observación + Error: No se pueden eliminar las transacciones solo de observación. Error: Wallet does not exist - Error: La cartera no existe + Error: El monedero no existe Error: cannot remove legacy wallet records - Error: no se pueden eliminar los registros de cartera heredados + Error: No se pueden eliminar los registros de monederos tipo legacy Not enough file descriptors available. %d available, %d required. @@ -5067,7 +5111,7 @@ No se puede restaurar el respaldo del monedero. Settings file could not be written - El archivo de configuración no ha podido escribirse + El archivo de configuración no pudo escribirse \ No newline at end of file diff --git a/src/qt/locale/bitcoin_es_CL.ts b/src/qt/locale/bitcoin_es_CL.ts deleted file mode 100644 index 2bfd8e0ac1e5..000000000000 --- a/src/qt/locale/bitcoin_es_CL.ts +++ /dev/null @@ -1,4935 +0,0 @@ - - - AddressBookPage - - Right-click to edit address or label - Click derecho para editar la dirección o etiqueta - - - &New - &Nuevo - - - Copy the currently selected address to the system clipboard - Copiar la dirección seleccionada actualmente al portapapeles del sistema - - - &Copy - &Copiar - - - C&lose - C&errar - - - Delete the currently selected address from the list - Borrar la dirección actualmente seleccionada de la lista - - - Enter address or label to search - Introduce una dirección o etiqueta para buscar - - - Export the data in the current tab to a file - Exportar los datos en la pestaña actual a un archivo - - - &Export - &Exportar - - - &Delete - &Borrar - - - Choose the address to send coins to - Elija la dirección para enviar las monedas - - - Choose the address to receive coins with - Elige la dirección para recibir las monedas - - - C&hoose - Escoger - - - These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Estas son sus direcciones de Bitcoin para enviar pagos. Siempre verifique el monto y la dirección de recepción antes de enviar monedas. - - - These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. -Signing is only possible with addresses of the type 'legacy'. - Estas son sus direcciones de Bitcoin para recibir los pagos. -Usa el boton "Crear nueva direccion de recibimiento" en la pestaña de recibir para crear una nueva direccion. Firmar es posible solo con la direccion del tipo "legado" - - - &Copy Address - Copiar dirección - - - Copy &Label - Copiar y etiquetar - - - &Edit - Editar - - - Export Address List - Exportar la lista de direcciones - - - Comma separated file - Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. - Archivo separado por comas - - - There was an error trying to save the address list to %1. Please try again. - An error message. %1 is a stand-in argument for the name of the file we attempted to save to. - Se produjo un error al intentar guardar la lista de direcciones en %1. Inténtalo de nuevo. - - - Receiving addresses - %1 - Recepción de direcciones - %1 - - - - Exporting Failed - Exportación fallida - - - - AddressTableModel - - Label - Etiqueta - - - Address - Dirección - - - (no label) - (no etiqueta) - - - - AskPassphraseDialog - - Passphrase Dialog - Diálogo de contraseña - - - Enter passphrase - Poner contraseña - - - New passphrase - Nueva contraseña - - - Repeat new passphrase - Repetir nueva contraseña - - - Show passphrase - Mostrar contraseña - - - Encrypt wallet - Encriptar la billetera - - - This operation needs your wallet passphrase to unlock the wallet. - Esta operación necesita su contraseña de billetera para desbloquearla. - - - Unlock wallet - Desbloquear la billetera - - - Change passphrase - Cambiar frase de contraseña - - - Confirm wallet encryption - Confirmar el cifrado de la billetera - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! - Advertencia: si encriptas tu billetera y pierdes tu contraseña <b> PIERDES TODOS TUS BITCOINS </b> ! - - - Are you sure you wish to encrypt your wallet? - ¿Estás seguro de que deseas encriptar tu billetera? - - - Wallet encrypted - Billetera encriptada - - - Enter the new passphrase for the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. - Introducir la nueva contraseña para la billetera. Por favor usa una contraseña de diez o mas caracteres aleatorios, u ocho o mas palabras. - - - Enter the old passphrase and new passphrase for the wallet. - Introducir la vieja contraseña y la nueva contraseña para la billetera. - - - Continue - Continuar - - - Back - Atrás - - - Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. - Recuerda que codificando tu billetera no garantiza mantener a salvo tus bitcoins en caso de tener virus en el computador. - - - Wallet to be encrypted - Billetera para ser encriptada - - - Your wallet is about to be encrypted. - Tu billetera esta por ser encriptada - - - Your wallet is now encrypted. - Su billetera ahora esta encriptada. - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANTE: todas las copias de seguridad anteriores que haya realizado de su archivo de billetera se deben reemplazar con el archivo de monedero cifrado recién generado. Por razones de seguridad, las copias de seguridad anteriores del archivo monedero sin encriptar serán inútiles tan pronto como comience a usar el nuevo monedero cifrado. - - - Wallet encryption failed - El cifrado de Wallet falló - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - El cifrado de Wallet falló debido a un error interno. Su billetera no estaba encriptada. - - - The supplied passphrases do not match. - Las frases de contraseña suministradas no coinciden. - - - Wallet unlock failed - El desbloqueo de la billetera falló - - - The passphrase entered for the wallet decryption was incorrect. - La frase de contraseña ingresada para el descifrado de la billetera fue incorrecta. - - - The passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. If this is successful, please set a new passphrase to avoid this issue in the future. - La frase de contraseña ingresada para el descifrado de la billetera es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo . Si esto tiene éxito, establece una nueva frase de contraseña para evitar este problema en el futuro. - - - Wallet passphrase was successfully changed. - La frase de contraseña de la billetera se cambió con éxito. - - - Passphrase change failed - Error al cambiar la frase de contraseña - - - The old passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. - La frase de contraseña que se ingresó para descifrar la billetera es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo. - - - Warning: The Caps Lock key is on! - Advertencia: ¡la tecla Bloq Mayús está activada! - - - - BanTableModel - - IP/Netmask - IP / Máscara de red - - - Banned Until - Prohibido hasta - - - - BitcoinApplication - - Settings file %1 might be corrupt or invalid. - El archivo de configuración %1 puede estar corrupto o no ser válido. - - - A fatal error occurred. %1 can no longer continue safely and will quit. - Se ha producido un error garrafal. %1Ya no podrá continuar de manera segura y abandonará. - - - Internal error - error interno - - - An internal error occurred. %1 will attempt to continue safely. This is an unexpected bug which can be reported as described below. - Se ha producido un error interno. %1 Se intentará continuar de manera segura. Este es un error inesperado que se puede reportar como se describe a continuación. - - - - QObject - - Do you want to reset settings to default values, or to abort without making changes? - Explanatory text shown on startup when the settings file cannot be read. Prompts user to make a choice between resetting or aborting. - ¿Deseas restablecer los valores a la configuración predeterminada o abortar sin realizar los cambios? - - - A fatal error occurred. Check that settings file is writable, or try running with -nosettings. - Explanatory text shown on startup when the settings file could not be written. Prompts user to check that we have the ability to write to the file. Explains that the user has the option of running without a settings file. - Un error fatal ha ocurrido. Comprueba que el archivo de configuración soporta escritura, o intenta ejecutar de nuevo el programa con -nosettings - - - %1 didn't yet exit safely… - %1 todavía no ha terminado de forma segura... - - - unknown - desconocido - - - Default system font "%1" - Fuente predeterminada del sistema "%1" - - - Custom… - Personalizada... - - - Amount - Cantidad - - - Enter a Bitcoin address (e.g. %1) - Ingrese una dirección de Bitcoin (por ejemplo, %1) - - - Unroutable - No enrutable - - - Inbound - An inbound connection from a peer. An inbound connection is a connection initiated by a peer. - Entrante - - - Outbound - An outbound connection to a peer. An outbound connection is a connection initiated by us. - Salida - - - Full Relay - Peer connection type that relays all network information. - Retransmisión completa - - - Block Relay - Peer connection type that relays network information about blocks and not transactions or addresses. - Retransmisión de bloque - - - Address Fetch - Short-lived peer connection type that solicits known addresses from a peer. - Recuperación de dirección - - - %1 h - %1 d - - - None - Ninguno - - - N/A - N/D - - - %n second(s) - - %n segundo - %n segundos - - - - %n minute(s) - - %n minuto - %n minutos - - - - %n hour(s) - - %n hora - %n horas - - - - %n day(s) - - %n día - %n días - - - - %n week(s) - - %n semana - %n semanas - - - - %1 and %2 - %1 y %2 - - - %n year(s) - - %n año - %n años - - - - default wallet - billetera predeterminada - - - - BitcoinGUI - - &Overview - &Visión de conjunto - - - Show general overview of wallet - Mostrar vista general de la billetera - - - &Transactions - &Transacciones - - - Browse transaction history - Examinar el historial de transacciones - - - E&xit - S&alir - - - Quit application - Salir de la aplicación - - - &About %1 - S&obre %1 - - - Show information about %1 - Mostrar información sobre %1 - - - About &Qt - Acerca de &Qt - - - Show information about Qt - Mostrar información sobre Qt - - - Modify configuration options for %1 - Modificar las opciones de configuración para %1 - - - Create a new wallet - Crear una nueva billetera - - - &Minimize - &Minimizar - - - Wallet: - Billetera: - - - Network activity disabled. - A substring of the tooltip. - Actividad de red deshabilitada. - - - Proxy is <b>enabled</b>: %1 - Proxy <b>habilitado</b>: %1 - - - Send coins to a Bitcoin address - Enviando monedas a una dirección de Bitcoin - - - Backup wallet to another location - Monedero de respaldo a otra ubicación - - - Change the passphrase used for wallet encryption - Cambiar la contraseña usando la encriptación de la billetera - - - &Send - &Enviar - - - &Receive - &Recibir - - - &Encrypt Wallet… - &Cifrar monedero - - - Encrypt the private keys that belong to your wallet - Encripta las claves privadas que pertenecen a tu billetera - - - &Backup Wallet… - &Copia de seguridad del monedero - - - &Change Passphrase… - &Cambiar contraseña... - - - Sign &message… - Firmar &mensaje... - - - Sign messages with your Bitcoin addresses to prove you own them - Firme mensajes con sus direcciones de Bitcoin para demostrar que los posee - - - &Verify message… - &Verificar mensaje... - - - Verify messages to ensure they were signed with specified Bitcoin addresses - Verifique los mensajes para asegurarse de que fueron firmados con las direcciones de Bitcoin especificadas - - - &Load PSBT from file… - &Cargar PSBT desde el archivo... - - - Open &URI… - Abrir &URI… - - - Close Wallet… - Cerrar monedero... - - - Create Wallet… - Crear monedero... - - - Close All Wallets… - Cerrar Todos los Monederos... - - - &File - &Archivo - - - &Settings - &Configuraciones - - - &Help - &Ayuda - - - Tabs toolbar - Barra de herramientas de pestañas - - - Syncing Headers (%1%)… - Sincronizando cabeceras (1%1%) - - - Synchronizing with network… - Sincronizando con la red... - - - Indexing blocks on disk… - Indexando bloques en disco... - - - Processing blocks on disk… - Procesando bloques en disco... - - - Connecting to peers… - Conectando con pares... - - - Request payments (generates QR codes and bitcoin: URIs) - Solicitar pagos (genera códigos QR y bitcoin: URIs) - - - Show the list of used sending addresses and labels - Mostrar la lista de direcciones y etiquetas de envío usadas - - - Show the list of used receiving addresses and labels - Mostrar la lista de direcciones y etiquetas de recepción usadas - - - &Command-line options - Y opciones de línea de comando - - - Processed %n block(s) of transaction history. - - %n bloque procesado del historial de transacciones. - %n bloques procesados del historial de transacciones. - - - - %1 behind - %1 detrás - - - Catching up… - Poniéndose al día... - - - Last received block was generated %1 ago. - El último bloque recibido se generó hace %1. - - - Transactions after this will not yet be visible. - Las transacciones posteriores a esto aún no estarán visibles. - - - Warning - Advertencia - - - Information - Información - - - Up to date - A hoy - - - Load Partially Signed Bitcoin Transaction - Cargar transacción de Bitcoin parcialmente firmada - - - Load PSBT from &clipboard… - Cargar PSBT desde el &portapapeles... - - - Node window - Ventana del nodo - - - Open node debugging and diagnostic console - Abrir la consola de depuración y diagnóstico del nodo - - - &Sending addresses - Direcciones de &envío - - - &Receiving addresses - Direcciones de &recepción - - - Open a bitcoin: URI - Abrir un bitcoin: URI - - - Open Wallet - Abrir billetera - - - Open a wallet - Abrir una billetera - - - Close wallet - Cerrar billetera - - - Restore Wallet… - Name of the menu item that restores wallet from a backup file. - Restaurar billetera… - - - Restore a wallet from a backup file - Status tip for Restore Wallet menu item - Restaurar una billetera desde un archivo de copia de seguridad - - - Close all wallets - Cerrar todas las billeteras - - - Migrate Wallet - Migrar billetera - - - Migrate a wallet - Migrar una billetera - - - Show the %1 help message to get a list with possible Bitcoin command-line options - Muestre el mensaje de ayuda %1 para obtener una lista con posibles opciones de línea de comandos de Bitcoin - - - No wallets available - Monederos no disponibles - - - Wallet Data - Name of the wallet data file format. - Datos del monedero - - - Load Wallet Backup - The title for Restore Wallet File Windows - Cargar copia de seguridad del monedero - - - Restore Wallet - Title of pop-up window shown when the user is attempting to restore a wallet. - Restaurar billetera - - - Wallet Name - Label of the input field where the name of the wallet is entered. - Nombre de la billetera - - - &Window - Ventana - - - Main Window - Ventana principal - - - %1 client - %1 cliente - - - &Hide - &Ocultar - - - S&how - &Mostrar - - - %n active connection(s) to Bitcoin network. - A substring of the tooltip. - - %n conexión activa con la red de Bitcoin. - %n conexiónes activas con la red de Bitcoin. - - - - Click for more actions. - A substring of the tooltip. "More actions" are available via the context menu. - Haz clic para ver más acciones. - - - Show Peers tab - A context menu item. The "Peers tab" is an element of the "Node window". - Mostrar pestaña de pares - - - Disable network activity - A context menu item. - Desactivar la actividad de la red - - - Enable network activity - A context menu item. The network activity was disabled previously. - Habilitar actividad de red - - - Pre-syncing Headers (%1%)… - Presincronizando cabeceras (%1%)... - - - Error creating wallet - Error al crear billetera - - - Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets) - No se puede crear una nueva billetera, el software se compiló sin soporte sqlite (requerido para billeteras descriptivas) - - - Warning: %1 - Advertencia: %1 - - - Date: %1 - - Fecha: %1 - - - - Amount: %1 - - Cantidad: %1 - - - - Wallet: %1 - - Billetera: %1 - - - - Type: %1 - - Tipo: %1 - - - - Label: %1 - - Etiqueta: %1 - - - - Address: %1 - - Dirección: %1 - - - - Sent transaction - Transacción enviada - - - Incoming transaction - Transacción entrante - - - HD key generation is <b>enabled</b> - La generación de la clave HD está <b> activada </b> - - - HD key generation is <b>disabled</b> - La generación de la clave HD está <b> desactivada </b> - - - Private key <b>disabled</b> - Llave privada <b>deshabilitada</b> - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - La billetera está <b> encriptada </b> y actualmente <b> desbloqueada </b> - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - La billetera está <b> encriptada </b> y actualmente está <b> bloqueada </b> - - - Original message: - Mensaje original: - - - - UnitDisplayStatusBarControl - - Unit to show amounts in. Click to select another unit. - Unidad en la que se muestran las cantidades. Haga clic para seleccionar otra unidad. - - - - CoinControlDialog - - Coin Selection - Selección de monedas - - - Quantity: - Cantidad: - - - Amount: - Cantidad: - - - Fee: - Comisión: - - - After Fee: - Después de comisión: - - - Change: - Cambio: - - - (un)select all - (de)seleccionar todo - - - Tree mode - Modo árbol - - - List mode - Modo lista - - - Amount - Cantidad - - - Received with label - Recibido con etiqueta - - - Received with address - Recibido con dirección - - - Date - Fecha - - - Confirmations - Confirmaciones - - - Confirmed - Confirmado - - - Copy amount - Copiar cantidad - - - &Copy address - &Copiar dirección - - - Copy &label - Copiar &etiqueta - - - Copy &amount - Copiar &importe - - - Copy transaction &ID and output index - Copiar &identificador de transacción e índice de salidas - - - L&ock unspent - B&loquear no gastado - - - &Unlock unspent - &Desbloquear importe no gastado - - - Copy quantity - Cantidad de copia - - - Copy fee - Tarifa de copia - - - Copy after fee - Copiar después de la tarifa - - - Copy bytes - Copiar bytes - - - Copy change - Copiar cambio - - - (%1 locked) - (%1 bloqueado) - - - Can vary +/- %1 satoshi(s) per input. - Puede variar +/- %1 satoshi (s) por entrada. - - - (no label) - (no etiqueta) - - - change from %1 (%2) - cambia desde %1 (%2) - - - (change) - (cambio) - - - - CreateWalletActivity - - Create Wallet - Title of window indicating the progress of creation of a new wallet. - Crear Billetera - - - Creating Wallet <b>%1</b>… - Descriptive text of the create wallet progress window which indicates to the user which wallet is currently being created. - Creando billetera <b>%1</b>… - - - Create wallet failed - Crear billetera falló - - - Create wallet warning - Advertencia de crear billetera - - - Can't list signers - No se puede hacer una lista de firmantes - - - Too many external signers found - Se encontraron demasiados firmantes externos - - - - LoadWalletsActivity - - Load Wallets - Title of progress window which is displayed when wallets are being loaded. - Cargar monederos - - - Loading wallets… - Descriptive text of the load wallets progress window which indicates to the user that wallets are currently being loaded. - Cargando monederos... - - - - MigrateWalletActivity - - Migrate wallet - Migrar billetera - - - Are you sure you wish to migrate the wallet <i>%1</i>? - Estas seguro de wue deseas migrar la billetera <i>%1</i>? - - - Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made. -If this wallet contains any watchonly scripts, a new wallet will be created which contains those watchonly scripts. -If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts. - -The migration process will create a backup of the wallet before migrating. This backup file will be named <wallet name>-<timestamp>.legacy.bak and can be found in the directory for this wallet. In the event of an incorrect migration, the backup can be restored with the "Restore Wallet" functionality. - La migración de la billetera la convertirá en una o más billeteras basadas en descriptores. Será necesario realizar una nueva copia de seguridad de la billetera. -Si esta billetera contiene scripts solo de lectura, se creará una nueva billetera que los contenga. -Si esta billetera contiene scripts solucionables pero no de lectura, se creará una nueva billetera diferente que los contenga. - -El proceso de migración creará una copia de seguridad de la billetera antes de migrar. Este archivo de copia de seguridad se llamará <wallet name>-<timestamp>.legacy.bak y se encontrará en el directorio de esta billetera. En el caso de una migración incorrecta, la copia de seguridad puede restaurarse con la funcionalidad "Restore Wallet" (Restaurar billetera). - - - Migrate Wallet - Migrar billetera - - - Migrating Wallet <b>%1</b>… - Migrando billetera <b>%1</b>… - - - The wallet '%1' was migrated successfully. - La migración de la billetera "%1" se realizó correctamente. - - - Watchonly scripts have been migrated to a new wallet named '%1'. - Guiones vigilantes han sido migrados a un monedero con el nombre '%1'. - - - Solvable but not watched scripts have been migrated to a new wallet named '%1'. - Solucionable pero ninguno de los guiones vigilados han sido migrados a un monedero llamados '%1'. - - - Migration failed - Migración errónea - - - Migration Successful - Migración correcta - - - - OpenWalletActivity - - Open wallet warning - Advertencia sobre crear monedero - - - Open Wallet - Title of window indicating the progress of opening of a wallet. - Abrir billetera - - - Opening Wallet <b>%1</b>… - Descriptive text of the open wallet progress window which indicates to the user which wallet is currently being opened. - Abriendo Monedero <b>%1</b>... - - - - RestoreWalletActivity - - Restore Wallet - Title of progress window which is displayed when wallets are being restored. - Restaurar billetera - - - Restoring Wallet <b>%1</b>… - Descriptive text of the restore wallets progress window which indicates to the user that wallets are currently being restored. - Restaurando billetera <b>%1</b>… - - - Restore wallet failed - Title of message box which is displayed when the wallet could not be restored. - Error al restaurar la billetera - - - Restore wallet warning - Title of message box which is displayed when the wallet is restored with some warning. - Advertencia al restaurar billetera - - - Restore wallet message - Title of message box which is displayed when the wallet is successfully restored. - Mensaje al restaurar billetera - - - - WalletController - - Close wallet - Cerrar billetera - - - Are you sure you wish to close the wallet <i>%1</i>? - ¿Estás seguro de que deseas cerrar el monedero <i>%1</i>? - - - Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. - Cerrar el monedero durante demasiado tiempo puede causar la resincronización de toda la cadena si la poda es habilitada. - - - Close all wallets - Cerrar todos los monederos - - - Are you sure you wish to close all wallets? - ¿Está seguro de que desea cerrar todas las billeteras? - - - - CreateWalletDialog - - Create Wallet - Crear Billetera - - - You are one step away from creating your new wallet! - Estás a un paso de crear tu nueva billetera. - - - Please provide a name and, if desired, enable any advanced options - Escribe un nombre y, si lo deseas, activa las opciones avanzadas. - - - Wallet Name - Nombre del monedero - - - Wallet - Billetera - - - Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice. - Encriptar la billetera. La billetera será encriptada con una contraseña de tu elección. - - - Disable Private Keys - Desactivar las claves privadas - - - Make a blank wallet. Blank wallets do not initially have private keys or scripts. Private keys and addresses can be imported, or an HD seed can be set, at a later time. - Crear un monedero vacío. Los monederos vacíos no tienen claves privadas ni scripts. Las claves privadas y direcciones pueden importarse después o también establecer una semilla HD. - - - Make Blank Wallet - Crear billetera vacía - - - External signer - Firmante externo - - - Create - Crear - - - Compiled without external signing support (required for external signing) - "External signing" means using devices such as hardware wallets. - Compilado sin soporte de firma externa (necesario para la firma externa) - - - - EditAddressDialog - - Edit Address - Editar dirección - - - &Label - Y etiqueta - - - The label associated with this address list entry - La etiqueta asociada a esta entrada está en la lista de direcciones - - - The address associated with this address list entry. This can only be modified for sending addresses. - La dirección asociada con esta entrada está en la lista de direcciones. Esto solo se puede modificar para enviar direcciones. - - - &Address - Y dirección - - - New sending address - Nueva dirección de envío - - - Edit receiving address - Editar dirección de recepción - - - Edit sending address - Editar dirección de envío - - - The entered address "%1" is not a valid Bitcoin address. - La dirección ingresada "%1" no es una dirección válida de Bitcoin. - - - Could not unlock wallet. - No se pudo desbloquear la billetera. - - - New key generation failed. - Nueva generación de claves fallida. - - - - FreespaceChecker - - A new data directory will be created. - Se creará un nuevo directorio de datos. - - - name - nombre - - - Directory already exists. Add %1 if you intend to create a new directory here. - El directorio ya existe. Agregue %1 si tiene la intención de crear un nuevo directorio aquí. - - - Path already exists, and is not a directory. - La ruta ya existe, y no es un directorio ... - - - Cannot create data directory here. - No se puede crear el directorio de datos aquí. - - - - Intro - - %n GB of space available - - %n GB de espacio disponible - %n GB de espacio disponible - - - - (of %n GB needed) - - (de %n GB requerido) - (de %n GB requeridos) - - - - (%n GB needed for full chain) - - (%n GB needed for full chain) - (%n GB needed for full chain) - - - - Choose data directory - Elegir directorio de datos - - - At least %1 GB of data will be stored in this directory, and it will grow over time. - Al menos %1 GB de información será almacenado en este directorio, y seguirá creciendo a través del tiempo. - - - Approximately %1 GB of data will be stored in this directory. - Aproximadamente %1 GB de datos se almacenarán en este directorio. - - - (sufficient to restore backups %n day(s) old) - Explanatory text on the capability of the current prune target. - - (suficiente para restaurar copias de seguridad de %n día de antigüedad) - (suficiente para restaurar copias de seguridad de %n días de antigüedad) - - - - %1 will download and store a copy of the Bitcoin block chain. - %1 descargará y almacenará una copia de la cadena de bloques de Bitcoin. - - - The wallet will also be stored in this directory. - La billetera también se almacenará en este directorio. - - - Error: Specified data directory "%1" cannot be created. - Error: no se puede crear el directorio de datos especificado "%1". - - - Welcome - bienvenido - - - Welcome to %1. - Bienvenido al %1 - - - As this is the first time the program is launched, you can choose where %1 will store its data. - Como esta es la primera vez que se lanza el programa, puede elegir dónde %1 almacenará sus datos. - - - Limit block chain storage to - Limitar el almacenamiento de cadena de bloques a - - - This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off. - Esta sincronización inicial es muy exigente y puede exponer problemas de hardware con su computadora que anteriormente habían pasado desapercibidos. Cada vez que ejecuta %1, continuará la descarga donde lo dejó. - - - When you click OK, %1 will begin to download and process the full %4 block chain (%2 GB) starting with the earliest transactions in %3 when %4 initially launched. - Al hacer clic en OK, %1 iniciará el proceso de descarga y procesará la cadena de bloques %4 completa (%2 GB), empezando con la transacción más antigua en %3 cuando %4 se ejecutó inicialmente. - - - If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low. - Si ha elegido limitar el almacenamiento de la cadena de bloques (pruning), los datos históricos todavía se deben descargar y procesar, pero se eliminarán posteriormente para mantener el uso del disco bajo. - - - Use the default data directory - Use el directorio de datos predeterminado - - - Use a custom data directory: - Use un directorio de datos personalizado: - - - - HelpMessageDialog - - version - versión - - - About %1 - Alrededor de %1 - - - Command-line options - Opciones de línea de comando - - - - ShutdownWindow - - Do not shut down the computer until this window disappears. - No apague el equipo hasta que desaparezca esta ventana. - - - - ModalOverlay - - Form - Configurar - - - Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. - Es posible que las transacciones recientes aún no estén visibles y, por lo tanto, el saldo de su billetera podría ser incorrecto. Esta información será correcta una vez que su billetera haya terminado de sincronizarse con la red bitcoin, como se detalla a continuación. - - - Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. - La red no aceptará intentar gastar bitcoins que se vean afectados por transacciones aún no mostradas - - - Number of blocks left - Cantidad de bloques restantes - - - Unknown… - Desconocido... - - - Last block time - Hora del último bloque - - - Progress - Progreso - - - Progress increase per hour - Aumento de progreso por hora - - - Estimated time left until synced - Tiempo estimado restante hasta sincronización - - - Hide - Esconder - - - %1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain. - %1 está actualmente sincronizándose. Descargará cabeceras y bloques de nodos semejantes y los validará hasta alcanzar la cabeza de la cadena de bloques. - - - Unknown. Syncing Headers (%1, %2%)… - Desconocido. Sincronizando cabeceras (%1, %2%)… - - - Unknown. Pre-syncing Headers (%1, %2%)… - Desconocido. Presincronizando encabezados (%1, %2%)… - - - - OpenURIDialog - - Open bitcoin URI - Abrir URI de bitcoin - - - Paste address from clipboard - Tooltip text for button that allows you to paste an address that is in your clipboard. - Pega dirección desde portapapeles - - - - OptionsDialog - - Options - Opciones - - - &Main - &Principal - - - Automatically start %1 after logging in to the system. - Inicie automáticamente %1 después de iniciar sesión en el sistema. - - - &Start %1 on system login - & Comience %1 en el inicio de sesión del sistema - - - Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain. - Al activar el modo pruning, se reduce considerablemente el espacio de disco necesario para almacenar las transacciones. Todos los bloques aún se validan completamente. Para revertir esta opción, se requiere descargar de nuevo toda la cadena de bloques. - - - Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. - Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. - Tamaño máximo de la caché de la base de datos. Una caché más grande puede contribuir a una sincronización más rápida, después de lo cual el beneficio es menos pronunciado para la mayoría de los casos de uso. Disminuir el tamaño de la caché reducirá el uso de la memoria. La memoria del mempool no utilizada se comparte para esta caché. - - - Size of &database cache - Tamaño de la memoria caché de la base de datos - - - Number of script &verification threads - Cantidad de secuencias de comandos y verificación - - - Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! - Ruta completa a un script compatible con %1 (p. ej., C:\Descargas\hwi.exe o /Usuarios/Tú/Descargas/hwi.py). Advertencia: ¡El malware podría robarte tus monedas! - - - Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. - Abre el puerto del cliente de Bitcoin en el enrutador automáticamente. Esto solo funciona cuando el enrutador soporta NAT-PMP o PCP y está activo. El puerto externo podría ser elegido al azar. - - - Map port using PCP or NA&T-PMP - Mapear el puerto usando NAT-PMP - - - IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) - Dirección IP del proxy (por ejemplo, IPv4: 127.0.0.1 / IPv6: :: 1) - - - Shows if the supplied default SOCKS5 proxy is used to reach peers via this network type. - Muestra si el proxy SOCKS5 suministrado se utiliza para llegar a los pares a través de este tipo de red. - - - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu. - Minimice en lugar de salir de la aplicación cuando la ventana esté cerrada. Cuando esta opción está habilitada, la aplicación se cerrará solo después de seleccionar Salir en el menú. - - - Font in the Overview tab: - Fuente en la pestaña Resumen: - - - Options set in this dialog are overridden by the command line: - Las opciones establecidas en este diálogo serán anuladas por la línea de comandos: - - - Open the %1 configuration file from the working directory. - Abrir el archivo de configuración %1 en el directorio de trabajo. - - - Open Configuration File - Abrir archivo de configuración - - - Reset all client options to default. - Restablecer todas las opciones del cliente a los valores predeterminados. - - - &Reset Options - Y Restablecer opciones - - - &Network - &Red - - - Prune &block storage to - Podar el almacenamiento de &bloques a - - - Reverting this setting requires re-downloading the entire blockchain. - Para revertir esta configuración, se debe descargar de nuevo la cadena de bloques completa. - - - Set the number of script verification threads. Negative values correspond to the number of cores you want to leave free to the system. - Tooltip text for Options window setting that sets the number of script verification threads. Explains that negative values mean to leave these many cores free to the system. - Establezca el número de hilos de verificación de scripts. Los valores negativos corresponden al número de núcleos que se desea dejar libres al sistema. - - - (0 = auto, <0 = leave that many cores free) - (0 = auto, <0 = deja esta cantidad de núcleos libres) - - - This allows you or a third party tool to communicate with the node through command-line and JSON-RPC commands. - Tooltip text for Options window setting that enables the RPC server. - Esto le permite a usted o a una herramienta de terceros comunicarse con el nodo a través de la línea de comandos y los comandos JSON-RPC. - - - Enable R&PC server - An Options window setting to enable the RPC server. - Activar servidor R&PC - - - W&allet - Billetera - - - Whether to set subtract fee from amount as default or not. - Tooltip text for Options window setting that sets subtracting the fee from a sending amount as default. - Si se resta la comisión del importe por defecto o no. - - - Subtract &fee from amount by default - An Options window setting to set subtracting the fee from a sending amount as default. - Restar &comisión del importe por defecto - - - Expert - Experto - - - Enable coin &control features - Habilite las funciones de moneda y control - - - If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. - Si deshabilita el gasto de un cambio no confirmado, el cambio de una transacción no se puede usar hasta que esa transacción tenga al menos una confirmación. Esto también afecta cómo se calcula su saldo. - - - &Spend unconfirmed change - & Gastar cambio no confirmado - - - Enable &PSBT controls - An options window setting to enable PSBT controls. - Activar controles de &PSBT - - - Whether to show PSBT controls. - Tooltip text for options window setting that enables PSBT controls. - Si se muestran los controles de PSBT. - - - External Signer (e.g. hardware wallet) - Firmante externo (p. ej., billetera de hardware) - - - &External signer script path - &Ruta al script del firmante externo - - - Accept connections from outside. - Acepta conexiones desde afuera. - - - Allow incomin&g connections - Permitir conexiones entrantes - - - Connect to the Bitcoin network through a SOCKS5 proxy. - Conéctese a la red de Bitcoin a través de un proxy SOCKS5. - - - &Connect through SOCKS5 proxy (default proxy): - Conectar a través del proxy SOCKS5 (proxy predeterminado): - - - &Port: - Puerto: - - - Port of the proxy (e.g. 9050) - Puerto del proxy (por ejemplo, 9050) - - - Used for reaching peers via: - Utilizado para llegar a los compañeros a través de: - - - &Window - Ventana - - - Show the icon in the system tray. - Mostrar el ícono en la bandeja del sistema. - - - &Show tray icon - &Mostrar el ícono de la bandeja - - - Show only a tray icon after minimizing the window. - Mostrar solo un icono de bandeja después de minimizar la ventana. - - - &Minimize to the tray instead of the taskbar - Minimice la bandeja en lugar de la barra de tareas - - - M&inimize on close - Minimice al cerrar - - - &Display - Monitor - - - User Interface &language: - Interfaz de usuario e idioma: - - - The user interface language can be set here. This setting will take effect after restarting %1. - El idioma de la interfaz de usuario puede establecerse aquí. Esta configuración tendrá efecto después de reiniciar %1. - - - &Unit to show amounts in: - Unidad para mostrar montos en: - - - Choose the default subdivision unit to show in the interface and when sending coins. - Elija la unidad de subdivisión predeterminada para mostrar en la interfaz y al enviar monedas. - - - Third-party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |. - Las URL de terceros (por ejemplo, un explorador de bloques) que aparecen en la pestaña de transacciones como elementos del menú contextual. El hash de la transacción remplaza el valor %s en la URL. Varias URL se separan con una barra vertical (|). - - - &Third-party transaction URLs - &URL de transacciones de terceros - - - Whether to show coin control features or not. - Ya sea para mostrar las funciones de control de monedas o no. - - - Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services. - Conectarse a la red Bitcoin a través de un proxy SOCKS5 independiente para los servicios onion de Tor. - - - Use separate SOCKS&5 proxy to reach peers via Tor onion services: - Usar un proxy SOCKS&5 independiente para comunicarse con pares a través de los servicios onion de Tor: - - - &Cancel - Cancelar - - - Compiled without external signing support (required for external signing) - "External signing" means using devices such as hardware wallets. - Compilado sin soporte de firma externa (necesario para la firma externa) - - - default - defecto - - - none - ninguno - - - Confirm options reset - Window title text of pop-up window shown when the user has chosen to reset options. - Confirmar restablecimiento de opciones - - - Client restart required to activate changes. - Text explaining that the settings changed will not come into effect until the client is restarted. - Se requiere el reinicio del cliente para activar los cambios. - - - Current settings will be backed up at "%1". - Text explaining to the user that the client's current settings will be backed up at a specific location. %1 is a stand-in argument for the backup location's path. - Se realizará una copia de seguridad de la configuración actual en "%1". - - - Client will be shut down. Do you want to proceed? - Text asking the user to confirm if they would like to proceed with a client shutdown. - El cliente será cluasurado. Quieres proceder? - - - Configuration options - Window title text of pop-up box that allows opening up of configuration file. - Opciones de configuración - - - The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file. - Explanatory text about the priority order of instructions considered by client. The order from high to low being: command-line, configuration file, GUI settings. - El archivo de configuración se utiliza para especificar opciones de usuario avanzadas que anulan la configuración de la GUI. Además, cualquier opción de línea de comandos anulará este archivo de configuración. - - - Continue - Continuar - - - Cancel - Cancelar - - - The configuration file could not be opened. - El archivo de configuración no se pudo abrir. - - - This change would require a client restart. - Este cambio requeriría un reinicio del cliente. - - - The supplied proxy address is invalid. - La dirección proxy suministrada no es válida. - - - - OptionsModel - - Could not read setting "%1", %2. - No se puede leer la configuración "%1", %2. - - - - OverviewPage - - Form - Configurar - - - 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. - La información mostrada puede estar desactualizada. Su billetera se sincroniza automáticamente con la red de Bitcoin después de establecer una conexión, pero este proceso aún no se ha completado. - - - Watch-only: - Ver-solo: - - - Available: - Disponible - - - Your current spendable balance - Su saldo disponible actual - - - Pending: - Pendiente: - - - Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance - Total de transacciones que aún no se han confirmado y aún no cuentan para el saldo disponible - - - Immature: - Inmaduro: - - - Mined balance that has not yet matured - Balance minero que aún no ha madurado - - - Your current total balance - Su saldo total actual - - - Your current balance in watch-only addresses - Tu saldo actual en solo ver direcciones - - - Spendable: - Utilizable: - - - Recent transactions - Transacciones recientes - - - Unconfirmed transactions to watch-only addresses - Transacciones no confirmadas para ver solo direcciones - - - Mined balance in watch-only addresses that has not yet matured - Balance minero ver solo direcciones que aún no ha madurado - - - Current total balance in watch-only addresses - Saldo total actual en direcciones de solo reloj - - - Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings->Mask values. - Modo de privacidad activado para la pestaña de vista general. Para mostrar los valores, anule la selección de Configuración->Ocultar valores. - - - - PSBTOperationsDialog - - PSBT Operations - Operaciones PSBT - - - Sign Tx - Firmar transacción - - - Broadcast Tx - Transmitir transacción - - - Copy to Clipboard - Copiar al portapapeles - - - Save… - Guardar... - - - Close - Cerrar - - - Failed to load transaction: %1 - Error al cargar la transacción: %1 - - - Failed to sign transaction: %1 - Error al firmar la transacción: %1 - - - Cannot sign inputs while wallet is locked. - No se pueden firmar entradas mientras la billetera está bloqueada. - - - Could not sign any more inputs. - No se pudo firmar más entradas. - - - Signed %1 inputs, but more signatures are still required. - Se firmaron %1 entradas, pero aún se requieren más firmas. - - - Signed transaction successfully. Transaction is ready to broadcast. - La transacción se firmó correctamente y está lista para transmitirse. - - - Unknown error processing transaction. - Error desconocido al procesar la transacción. - - - Transaction broadcast successfully! Transaction ID: %1 - ¡La transacción se transmitió correctamente! Identificador de transacción: %1 - - - Transaction broadcast failed: %1 - Error al transmitir la transacción: %1 - - - PSBT copied to clipboard. - PSBT copiada al portapapeles. - - - Save Transaction Data - Guardar datos de la transacción - - - Partially Signed Transaction (Binary) - Expanded name of the binary PSBT file format. See: BIP 174. - Transacción parcialmente firmada (binario) - - - PSBT saved to disk. - PSBT guardada en en el disco. - - - Sends %1 to %2 - Envía %1 a %2 - - - own address - dirección personal - - - Unable to calculate transaction fee or total transaction amount. - No se puede calcular la comisión o el importe total de la transacción. - - - Pays transaction fee: - Paga comisión de transacción: - - - Total Amount - Monto total - - - or - o - - - Transaction has %1 unsigned inputs. - La transacción tiene %1 entradas sin firmar. - - - Transaction is missing some information about inputs. - A la transacción le falta información sobre entradas. - - - Transaction still needs signature(s). - La transacción aún necesita firma(s). - - - (But no wallet is loaded.) - (Pero no se cargó ninguna billetera). - - - (But this wallet cannot sign transactions.) - (Pero esta billetera no puede firmar transacciones). - - - (But this wallet does not have the right keys.) - (Pero esta billetera no tiene las claves adecuadas). - - - Transaction is fully signed and ready for broadcast. - La transacción se firmó completamente y está lista para transmitirse. - - - - PaymentServer - - Payment request error - Error de solicitud de pago - - - Cannot start bitcoin: click-to-pay handler - No se puede iniciar Bitcoin: controlador de clic para pagar - - - URI handling - Manejo de URI - - - 'bitcoin://' is not a valid URI. Use 'bitcoin:' instead. - "bitcoin://" no es un URI válido. Use "bitcoin:" en su lugar. - - - Cannot process payment request because BIP70 is not supported. -Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored. -If you are receiving this error you should request the merchant provide a BIP21 compatible URI. - No se puede procesar la solicitud de pago porque no existe compatibilidad con BIP70. -Debido a los fallos de seguridad generalizados en BIP70, se recomienda encarecidamente ignorar las instrucciones del comerciante para cambiar de billetera. -Si recibe este error, debe solicitar al comerciante que le proporcione un URI compatible con BIP21. - - - URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters. - ¡URI no puede ser analizado! Esto puede deberse a una dirección de Bitcoin no válida o a parámetros de URI mal formados. - - - Payment request file handling - Manejo de archivos de solicitud de pago - - - - PeerTableModel - - User Agent - Title of Peers Table column which contains the peer's User Agent string. - Agente de usuario - - - Peer - Title of Peers Table column which contains a unique number used to identify a connection. - Par - - - Age - Title of Peers Table column which indicates the duration (length of time) since the peer connection started. - Duración - - - Direction - Title of Peers Table column which indicates the direction the peer connection was initiated from. - Dirección - - - Sent - Title of Peers Table column which indicates the total amount of network information we have sent to the peer. - Expedido - - - Received - Title of Peers Table column which indicates the total amount of network information we have received from the peer. - Recibido - - - Address - Title of Peers Table column which contains the IP/Onion/I2P address of the connected peer. - Dirección - - - Type - Title of Peers Table column which describes the type of peer connection. The "type" describes why the connection exists. - Tipo - - - Network - Title of Peers Table column which states the network the peer connected through. - Red - - - Inbound - An Inbound Connection from a Peer. - Entrante - - - Outbound - An Outbound Connection to a Peer. - Salida - - - - QRImageWidget - - &Save Image… - &Guardar imagen... - - - &Copy Image - Copiar imagen - - - Resulting URI too long, try to reduce the text for label / message. - El URI resultante es demasiado largo, así que trate de reducir el texto de la etiqueta o el mensaje. - - - Error encoding URI into QR Code. - Fallo al codificar URI en código QR. - - - QR code support not available. - La compatibilidad con el código QR no está disponible. - - - Save QR Code - Guardar código QR - - - PNG Image - Expanded name of the PNG file format. See: https://en.wikipedia.org/wiki/Portable_Network_Graphics. - Imagen PNG - - - - RPCConsole - - N/A - N/D - - - Client version - Versión cliente - - - &Information - Información - - - To specify a non-default location of the data directory use the '%1' option. - Para especificar una ubicación no predeterminada del directorio de datos, use la opción "%1". - - - Blocksdir - Bloques dir - - - To specify a non-default location of the blocks directory use the '%1' option. - Para especificar una ubicación no predeterminada del directorio de bloques, use la opción "%1". - - - Startup time - Tiempo de inicio - - - Network - Red - - - Name - Nombre - - - Number of connections - Número de conexiones - - - Local Addresses - Direcciones locales - - - Network addresses that your Bitcoin node is currently using to communicate with other nodes. - Direcciones de red que tu nodo Bitcoin usa actualmente para comunicarse con otros nodos. - - - Block chain - Cadena de bloques - - - Memory Pool - Grupo de memoria - - - Current number of transactions - Número actual de transacciones - - - Memory usage - Uso de memoria - - - Wallet: - Monedero: - - - &Reset - Reiniciar - - - Received - Recibido - - - Sent - Expedido - - - &Peers - Pares - - - Banned peers - Pares prohibidos - - - Select a peer to view detailed information. - Seleccione un par para ver información detallada. - - - Hide Peers Detail - Ocultar detalles de pares - - - The transport layer version: %1 - Versión de la capa de transporte: %1 - - - Transport - Transporte - - - Session ID - Identificador de sesión - - - Version - Versión - - - Whether we relay transactions to this peer. - Si retransmitimos las transacciones a este par. - - - Transaction Relay - Retransmisión de transacción - - - Starting Block - Bloque de inicio - - - Synced Headers - Encabezados sincronizados - - - Synced Blocks - Bloques sincronizados - - - Last Transaction - Última transacción - - - The mapped Autonomous System used for diversifying peer selection. - El sistema autónomo asignado que se usó para diversificar la selección de pares. - - - Mapped AS - SA asignado - - - Whether we relay addresses to this peer. - Tooltip text for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - Si retransmitimos las direcciones a este par. - - - Address Relay - Text title for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - Retransmisión de dirección - - - The total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Tooltip text for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - El número total de direcciones recibidas desde este par que se procesaron (excluye las direcciones omitidas debido a la limitación de volumen). - - - The total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Tooltip text for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - El número total de direcciones recibidas desde este par que se omitieron (no se procesaron) debido a la limitación de volumen. - - - Addresses Processed - Text title for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Direcciones procesadas - - - Addresses Rate-Limited - Text title for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Direcciones omitidas por limitación de volumen - - - User Agent - Agente de usuario - - - Node window - Ventana del nodo - - - Current block height - Altura del bloque actual - - - Open the %1 debug log file from the current data directory. This can take a few seconds for large log files. - Abra el archivo de registro de depuración %1 en el directorio de datos actual. Esto puede tardar unos segundos para los archivos de registro grandes. - - - Decrease font size - Disminuir tamaño de letra - - - Increase font size - Aumenta el tamaño de la fuente - - - The direction and type of peer connection: %1 - La dirección y el tipo de conexión entre pares: %1 - - - Direction/Type - Dirección/Tipo - - - The BIP324 session ID string in hex. - La cadena del identificador de sesión BIP324 en formato hexadecimal. - - - The network protocol this peer is connected through: IPv4, IPv6, Onion, I2P, or CJDNS. - El protocolo de red mediante el cual está conectado este par: IPv4, IPv6, Onion, I2P o CJDNS. - - - Services - Servicios - - - High bandwidth BIP152 compact block relay: %1 - Retransmisión de bloque compacto BIP152 en modo de banda ancha: %1 - - - High Bandwidth - Banda ancha - - - Connection Time - Tiempo de conexión - - - Elapsed time since a novel block passing initial validity checks was received from this peer. - Tiempo transcurrido desde que se recibió de este par un nuevo bloque que superó las comprobaciones de validez iniciales. - - - Last Block - Último bloque - - - Elapsed time since a novel transaction accepted into our mempool was received from this peer. - Tooltip text for the Last Transaction field in the peer details area. - Tiempo transcurrido desde que se recibió de este par una nueva transacción aceptada en nuestra mempool. - - - Last Send - Último envío - - - Last Receive - Última recepción - - - Ping Time - Tiempo Ping - - - The duration of a currently outstanding ping. - La duración de un ping actualmente pendiente. - - - Ping Wait - Ping espera - - - Time Offset - Desplazamiento de tiempo - - - Last block time - Hora del último bloque - - - &Open - Abierto - - - &Console - Consola - - - &Network Traffic - Tráfico de red - - - Totals - Totales - - - Debug log file - Archivo de registro de depuración - - - Clear console - Consola limpia - - - In: - En: - - - Out: - Fuera: - - - Inbound: initiated by peer - Explanatory text for an inbound peer connection. - Entrante: iniciada por el par - - - Outbound Full Relay: default - Explanatory text for an outbound peer connection that relays all network information. This is the default behavior for outbound connections. - Retransmisión completa saliente: predeterminada - - - Outbound Block Relay: does not relay transactions or addresses - Explanatory text for an outbound peer connection that relays network information about blocks and not transactions or addresses. - Retransmisión de bloque saliente: no retransmite transacciones o direcciones - - - Outbound Manual: added using RPC %1 or %2/%3 configuration options - Explanatory text for an outbound peer connection that was established manually through one of several methods. The numbered arguments are stand-ins for the methods available to establish manual connections. - Manual saliente: agregada usando las opciones de configuración %1 o %2/%3 de RPC - - - Outbound Feeler: short-lived, for testing addresses - Explanatory text for a short-lived outbound peer connection that is used to test the aliveness of known addresses. - Feeler saliente: de corta duración, para probar direcciones - - - Outbound Address Fetch: short-lived, for soliciting addresses - Explanatory text for a short-lived outbound peer connection that is used to request addresses from a peer. - Recuperación de dirección saliente: de corta duración, para solicitar direcciones - - - detecting: peer could be v1 or v2 - Explanatory text for "detecting" transport type. - Detectando: el par puede ser v1 o v2 - - - v1: unencrypted, plaintext transport protocol - Explanatory text for v1 transport type. - v1: protocolo de transporte de texto simple sin cifrar - - - v2: BIP324 encrypted transport protocol - Explanatory text for v2 transport type. - v2: protocolo de transporte encriptado BIP324 - - - we selected the peer for high bandwidth relay - Seleccionamos el par para la retransmisión de banda ancha - - - the peer selected us for high bandwidth relay - El par nos seleccionó para la retransmisión de banda ancha - - - no high bandwidth relay selected - Ninguna transmisión de banda ancha seleccionada - - - &Copy address - Context menu action to copy the address of a peer. - &Copiar dirección - - - &Disconnect - Desconectar - - - 1 &hour - 1 hora - - - 1 d&ay - 1 &día - - - 1 &week - 1 semana - - - 1 &year - 1 año - - - &Copy IP/Netmask - Context menu action to copy the IP/Netmask of a banned peer. IP/Netmask is the combination of a peer's IP address and its Netmask. For IP address, see: https://en.wikipedia.org/wiki/IP_address. - &Copiar IP/Máscara de red - - - &Unban - &Desbloquear - - - Network activity disabled - Actividad de red deshabilitada - - - None - Ninguno - - - Executing command without any wallet - Ejecutar comando sin monedero - - - Node window - [%1] - Ventana de nodo - [%1] - - - Welcome to the %1 RPC console. -Use up and down arrows to navigate history, and %2 to clear screen. -Use %3 and %4 to increase or decrease the font size. -Type %5 for an overview of available commands. -For more information on using this console, type %6. - -%7WARNING: 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.%8 - RPC console welcome message. Placeholders %7 and %8 are style tags for the warning content, and they are not space separated from the rest of the text intentionally. - Bienvenido a la consola RPC -%1. Utiliza las flechas arriba y abajo para navegar por el historial, y %2 para borrar la pantalla. -Utiliza %3 y %4 para aumentar o disminuir el tamaño de la fuente. -Escribe %5 para ver un resumen de los comandos disponibles. Para más información sobre cómo usar esta consola, escribe %6. - -%7 AVISO: Los estafadores han estado activos diciendo a los usuarios que escriban comandos aquí, robando el contenido de sus monederos. No uses esta consola sin entender completamente las ramificaciones de un comando.%8 - - - Executing… - A console message indicating an entered command is currently being executed. - Ejecutando... - - - (peer: %1) - (par: %1) - - - via %1 - a través de %1 - - - Yes - Si - - - To - Para - - - From - Desde - - - Ban for - Prohibición de - - - Never - nunca - - - Unknown - Desconocido - - - - ReceiveCoinsDialog - - &Amount: - Cantidad - - - &Label: - Etiqueta: - - - &Message: - Mensaje: - - - 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. - Un mensaje opcional para adjuntar a la solicitud de pago, que se mostrará cuando se abra la solicitud. Nota: El mensaje no se enviará con el pago a través de la red de Bitcoin. - - - An optional label to associate with the new receiving address. - Una etiqueta opcional para asociar con la nueva dirección de recepción - - - Use this form to request payments. All fields are <b>optional</b>. - Use este formulario para solicitar pagos. Todos los campos son <b> opcionales </b>. - - - An optional amount to request. Leave this empty or zero to not request a specific amount. - Un monto opcional para solicitar. Deje esto vacío o en cero para no solicitar una cantidad específica. - - - 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. - Una etiqueta opcional para asociar con la nueva dirección de recepción (utilizada por ti para identificar una factura). También se adjunta a la solicitud de pago. - - - An optional message that is attached to the payment request and may be displayed to the sender. - Un mensaje opcional que se adjunta a la solicitud de pago y que puede mostrarse al remitente. - - - &Create new receiving address - &Crear una nueva dirección de recibo - - - Clear all fields of the form. - Borre todos los campos del formulario. - - - Clear - Aclarar - - - Requested payments history - Historial de pagos solicitado - - - Show the selected request (does the same as double clicking an entry) - Mostrar la solicitud seleccionada (hace lo mismo que hacer doble clic en una entrada) - - - Show - Mostrar - - - Remove the selected entries from the list - Eliminar las entradas seleccionadas de la lista - - - Remove - Eliminar - - - Copy &URI - Copiar URI - - - &Copy address - &Copiar dirección - - - Copy &label - Copiar &etiqueta - - - Copy &message - Copiar &mensaje - - - Copy &amount - Copiar &importe - - - Not recommended due to higher fees and less protection against typos. - No se recomienda debido a las altas comisiones y la poca protección contra errores tipográficos. - - - Generates an address compatible with older wallets. - Genera una dirección compatible con billeteras más antiguas. - - - Generates a native segwit address (BIP-173). Some old wallets don't support it. - Genera una dirección segwit nativa (BIP-173). No es compatible con algunas billeteras antiguas. - - - Bech32m (BIP-350) is an upgrade to Bech32, wallet support is still limited. - Bech32m (BIP-350) es una actualización de Bech32. La compatibilidad con la billetera todavía es limitada. - - - Could not unlock wallet. - No se pudo desbloquear la billetera. - - - Could not generate new %1 address - No se ha podido generar una nueva dirección %1 - - - - ReceiveRequestDialog - - Request payment to … - Solicitar pago a... - - - Amount: - Cantidad: - - - Label: - Etiqueta - - - Message: - Mensaje: - - - Wallet: - Billetera: - - - Copy &URI - Copiar URI - - - Copy &Address - Copiar dirección - - - &Verify - &Verificar - - - Verify this address on e.g. a hardware wallet screen - Verifica esta dirección, por ejemplo, en la pantalla de una billetera de hardware - - - &Save Image… - &Guardar imagen... - - - Payment information - Información del pago - - - Request payment to %1 - Solicitar pago a %1 - - - - RecentRequestsTableModel - - Date - Fecha - - - Label - Etiqueta - - - Message - Mensaje - - - (no label) - (no etiqueta) - - - (no message) - (sin mensaje) - - - (no amount requested) - (no existe monto solicitado) - - - Requested - Solicitado - - - - SendCoinsDialog - - Send Coins - Enviar monedas - - - Coin Control Features - Características de Coin Control - - - automatically selected - Seleccionado automaticamente - - - Insufficient funds! - Fondos insuficientes - - - Quantity: - Cantidad: - - - Amount: - Cantidad: - - - Fee: - Comisión: - - - After Fee: - Después de comisión: - - - Change: - Cambio: - - - If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. - Si se activa, pero la dirección de cambio está vacía o es inválida, el cambio se enviará a una dirección generada recientemente. - - - Custom change address - Dirección de cambio personalizada - - - Transaction Fee: - Comisión transacción: - - - 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. - Si utilizas la comisión por defecto, la transacción puede tardar varias horas o incluso días (o nunca) en confirmarse. Considera elegir la comisión de forma manual o espera hasta que se haya validado completamente la cadena. - - - Warning: Fee estimation is currently not possible. - Advertencia: En este momento no se puede estimar la cuota. - - - per kilobyte - por kilobyte - - - Hide - Esconder - - - Recommended: - Recomendado: - - - Custom: - Personalizado: - - - Send to multiple recipients at once - Enviar a múltiples destinatarios - - - Add &Recipient - &Agrega destinatario - - - Clear all fields of the form. - Borre todos los campos del formulario. - - - Inputs… - Entradas… - - - Choose… - Elegir... - - - Hide transaction fee settings - Ocultar configuración de la comisión de transacción - - - Specify a custom fee per kB (1,000 bytes) of the transaction's virtual size. - -Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satoshis per kvB" for a transaction size of 500 virtual bytes (half of 1 kvB) would ultimately yield a fee of only 50 satoshis. - Especifica una comisión personalizada por kB (1000 bytes) del tamaño virtual de la transacción. - -Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por kvB" para una transacción de 500 bytes virtuales (la mitad de 1 kvB) produciría, en última instancia, una comisión de solo 50 satoshis. - - - 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. - Cuando hay menos volumen de transacciones que espacio en los bloques, los mineros y los nodos de retransmisión pueden aplicar una comisión mínima. Está bien pagar solo esta comisión mínima, pero ten en cuenta que esto puede ocasionar que una transacción nunca se confirme una vez que haya más demanda de transacciones de Bitcoin de la que puede procesar la red. - - - A too low fee might result in a never confirming transaction (read the tooltip) - Una comisión demasiado pequeña puede resultar en una transacción que nunca será confirmada (leer herramientas de información). - - - (Smart fee not initialized yet. This usually takes a few blocks…) - (La comisión inteligente no se ha inicializado todavía. Esto tarda normalmente algunos bloques…) - - - Confirmation time target: - Objetivo de tiempo de confirmación - - - With Replace-By-Fee (BIP-125) you can increase a transaction's fee after it is sent. Without this, a higher fee may be recommended to compensate for increased transaction delay risk. - Con la función "Reemplazar-por-comisión" (BIP-125), puedes aumentar la comisión de una transacción después de enviarla. Sin esta, es posible que se recomiende una comisión más alta para compensar el mayor riesgo de retraso de la transacción. - - - Clear &All - &Borra todos - - - Confirm the send action - Confirma el envio - - - S&end - &Envía - - - Copy quantity - Cantidad de copia - - - Copy amount - Copiar cantidad - - - Copy fee - Tarifa de copia - - - Copy after fee - Copiar después de la tarifa - - - Copy bytes - Copiar bytes - - - Copy change - Copiar cambio - - - %1 (%2 blocks) - %1 (%2 bloques) - - - Sign on device - "device" usually means a hardware wallet. - Firmar en el dispositivo - - - Connect your hardware wallet first. - Conecta tu monedero externo primero. - - - Set external signer script path in Options -> Wallet - "External signer" means using devices such as hardware wallets. - Configura una ruta externa al script en Opciones -> Monedero - - - Creates a Partially Signed Bitcoin Transaction (PSBT) for use with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet. - Crea una transacción de Bitcoin parcialmente firmada (PSBT) para usarla, por ejemplo, con una billetera %1 sin conexión o una billetera de hardware compatible con PSBT. - - - %1 to %2 - %1 a %2 - - - To review recipient list click "Show Details…" - Para consultar la lista de destinatarios, haz clic en "Mostrar detalles..." - - - Sign failed - Falló Firma - - - External signer not found - "External signer" means using devices such as hardware wallets. - Dispositivo externo de firma no encontrado - - - External signer failure - "External signer" means using devices such as hardware wallets. - Dispositivo externo de firma no encontrado - - - Save Transaction Data - Guardar datos de la transacción - - - Partially Signed Transaction (Binary) - Expanded name of the binary PSBT file format. See: BIP 174. - Transacción parcialmente firmada (binario) - - - PSBT saved - Popup message when a PSBT has been saved to a file - TBPF guardado - - - External balance: - Saldo externo: - - - or - o - - - You can increase the fee later (signals Replace-By-Fee, BIP-125). - Puedes aumentar la comisión después (indica "Reemplazar-por-comisión", BIP-125). - - - %1 from wallet '%2' - %1 desde monedero '%2' - - - Do you want to create this transaction? - Message displayed when attempting to create a transaction. Cautionary text to prompt the user to verify that the displayed transaction details represent the transaction the user intends to create. - ¿Quieres crear esta transacción? - - - Please, review your transaction. You can create and send this transaction or create 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. - Text to inform a user attempting to create a transaction of their current options. At this stage, a user can send their transaction or create a PSBT. This string is displayed when both private keys and PSBT controls are enabled. - Revisa por favor la transacción. Puedes crear y enviar esta transacción de Bitcoin parcialmente firmada (PSBT), que además puedes guardar o copiar y, luego, firmar; por ejemplo, una billetera %1 sin conexión o una billetera de hardware compatible con PSBT. - - - Please, review your transaction. - Text to prompt a user to review the details of the transaction they are attempting to send. - Por favor, revisa tu transacción - - - Transaction fee - Comisión de transacción - - - Not signalling Replace-By-Fee, BIP-125. - No indica remplazar-por-comisión, BIP-125. - - - Total Amount - Monto total - - - Unsigned Transaction - PSBT copied - Caption of "PSBT has been copied" messagebox - Transacción sin firmar - - - The PSBT has been copied to the clipboard. You can also save it. - Se copió la PSBT al portapapeles. También puedes guardarla. - - - PSBT saved to disk - PSBT guardada en el disco - - - Confirm send coins - Confirmar el envió de monedas - - - Watch-only balance: - Saldo solo de observación: - - - The recipient address is not valid. Please recheck. - La dirección de envío no es válida. Por favor revisala. - - - The amount to pay must be larger than 0. - La cantidad por pagar tiene que ser mayor que 0. - - - The amount exceeds your balance. - El monto sobrepasa tu saldo. - - - The total exceeds your balance when the %1 transaction fee is included. - El total sobrepasa tu saldo cuando se incluyen %1 como comisión de envió. - - - Duplicate address found: addresses should only be used once each. - Se encontró una dirección duplicada: las direcciones solo se deben usar una vez. - - - Transaction creation failed! - ¡Fallo al crear la transacción! - - - A fee higher than %1 is considered an absurdly high fee. - Una comisión mayor que %1 se considera como una comisión absurda-mente alta. - - - Estimated to begin confirmation within %n block(s). - - Estimado para comenzar confirmación dentro de %n bloque. - Estimado para comenzar confirmación dentro de %n bloques. - - - - Warning: Invalid Bitcoin address - Peligro: Dirección de Bitcoin inválida - - - Warning: Unknown change address - Peligro: Dirección de cambio desconocida - - - Confirm custom change address - Confirma dirección de cambio personalizada - - - 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? - La dirección de cambio que ingresaste no es parte de tu monedero. Parte de tus fondos serán enviados a esta dirección. ¿Estás seguro? - - - (no label) - (no etiqueta) - - - - SendCoinsEntry - - A&mount: - Cantidad: - - - Pay &To: - &Pagar a: - - - &Label: - Etiqueta: - - - Choose previously used address - Seleccionar dirección usada anteriormente - - - The Bitcoin address to send the payment to - Dirección Bitcoin a enviar el pago - - - Paste address from clipboard - Pega dirección desde portapapeles - - - Remove this entry - Quitar esta entrada - - - The amount to send in the selected unit - El importe que se enviará en la unidad seleccionada - - - S&ubtract fee from amount - Restar comisiones del monto. - - - Use available balance - Usar el saldo disponible - - - Message: - Mensaje: - - - Enter a label for this address to add it to the list of used addresses - Introduce una etiqueta para esta dirección para añadirla a la lista de direcciones utilizadas - - - 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. - Mensaje que se agrgará al URI de Bitcoin, el cuál será almacenado con la transacción para su referencia. Nota: Este mensaje no será enviado a través de la red de Bitcoin. - - - - SendConfirmationDialog - - Send - Enviar - - - Create Unsigned - Crear sin firmar - - - - SignVerifyMessageDialog - - Signatures - Sign / Verify a Message - Firmas - Firmar / verificar un mensaje - - - &Sign Message - &Firmar Mensaje - - - You can sign messages/agreements with your legacy (P2PKH) 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. - Puedes firmar mensajes o acuerdos con tus direcciones tipo legacy (P2PKH) para demostrar que puedes recibir los bitcoins que se envíen a ellas. Ten cuidado de no firmar cosas confusas o al azar, ya que los ataques de phishing pueden tratar de engañarte para que les envíes la firma con tu identidad. Firma solo declaraciones totalmente detalladas con las que estés de acuerdo. - - - The Bitcoin address to sign the message with - Dirección Bitcoin con la que firmar el mensaje - - - Choose previously used address - Seleccionar dirección usada anteriormente - - - Paste address from clipboard - Pega dirección desde portapapeles - - - Enter the message you want to sign here - Escriba el mensaje que desea firmar - - - Signature - Firma - - - Copy the current signature to the system clipboard - Copiar la firma actual al portapapeles del sistema - - - Sign the message to prove you own this Bitcoin address - Firmar un mensjage para probar que usted es dueño de esta dirección - - - Sign &Message - Firmar Mensaje - - - Reset all sign message fields - Limpiar todos los campos de la firma de mensaje - - - Clear &All - &Borra todos - - - &Verify Message - &Firmar Mensaje - - - The Bitcoin address the message was signed with - La dirección Bitcoin con la que se firmó el mensaje - - - The signed message to verify - El mensaje firmado para verificar - - - The signature given when the message was signed - La firma proporcionada cuando el mensaje fue firmado - - - Verify the message to ensure it was signed with the specified Bitcoin address - Verifica el mensaje para asegurar que fue firmado con la dirección de Bitcoin especificada. - - - Verify &Message - &Firmar Mensaje - - - Reset all verify message fields - Limpiar todos los campos de la verificación de mensaje - - - Click "Sign Message" to generate signature - Click en "Firmar mensaje" para generar una firma - - - The entered address is invalid. - La dirección ingresada es inválida - - - Please check the address and try again. - Por favor, revisa la dirección e intenta nuevamente. - - - The entered address does not refer to a legacy (P2PKH) key. Message signing for SegWit and other non-P2PKH address types is not supported in this version of %1. Please check the address and try again. - La dirección ingresada no se refiere a una clave tipo legacy (P2PKH). La firma de mensajes para direcciones SegWit y de otros tipos que no sean P2PKH no es compatible con esta versión de %1. Comprueba la dirección e inténtalo de nuevo. - - - Wallet unlock was cancelled. - El desbloqueo del monedero fue cancelado. - - - No error - No hay error - - - Private key for the entered address is not available. - La llave privada para la dirección introducida no está disponible. - - - Message signing failed. - Falló la firma del mensaje. - - - Message signed. - Mensaje firmado. - - - The signature could not be decoded. - La firma no pudo decodificarse. - - - Please check the signature and try again. - Por favor compruebe la firma e intente de nuevo. - - - The signature did not match the message digest. - La firma no se combinó con el mensaje. - - - Message verification failed. - Falló la verificación del mensaje. - - - Message verified. - Mensaje verificado. - - - - SplashScreen - - (press q to shutdown and continue later) - (presione la tecla q para apagar y continuar después) - - - press q to shutdown - presiona q para apagar - - - - TransactionDesc - - conflicted with a transaction with %1 confirmations - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that conflicts with a confirmed transaction. - Hay un conflicto con la traducción de las confirmaciones %1 - - - 0/unconfirmed, in memory pool - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is in the memory pool. - 0/sin confirmar, en el pool de memoria - - - 0/unconfirmed, not in memory pool - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is not in the memory pool. - 0/sin confirmar, no está en el pool de memoria - - - abandoned - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an abandoned transaction. - abandonado - - - %1/unconfirmed - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in at least one block, but less than 6 blocks. - %1/no confirmado - - - %1 confirmations - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in 6 or more blocks. - confirmaciones %1 - - - Status - Estado - - - Date - Fecha - - - Source - Fuente - - - Generated - Generado - - - From - Desde - - - unknown - desconocido - - - To - Para - - - own address - dirección personal - - - watch-only - Solo observación - - - label - etiqueta - - - Credit - Credito - - - matures in %n more block(s) - - madura en %n bloque más - madura en %n bloques más - - - - not accepted - no aceptada - - - Debit - Débito - - - Total debit - Total enviado - - - Total credit - Crédito total - - - Transaction fee - Comisión de transacción - - - Net amount - Cantidad total - - - Message - Mensaje - - - Comment - Comentario - - - Transaction ID - Identificador de transacción (ID) - - - Transaction total size - Tamaño total de transacción - - - Transaction virtual size - Tamaño virtual de transacción - - - Output index - Indice de salida - - - %1 (Certificate was not verified) - %1 (El certificado no fue verificado) - - - Merchant - Vendedor - - - Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Las monedas generadas deben madurar %1 bloques antes de que se puedan gastar. Cuando generaste este bloque, se transmitió a la red para agregarlo a la cadena de bloques. Si no logra entrar a la cadena, su estado cambiará a "no aceptado" y no se podrá gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque a pocos segundos del tuyo. - - - Debug information - Información de depuración - - - Transaction - Transacción - - - Inputs - Entradas - - - Amount - Cantidad - - - true - verdadero - - - false - falso - - - - TransactionDescDialog - - This pane shows a detailed description of the transaction - Esta ventana muestra información detallada sobre la transacción - - - Details for %1 - Detalles para %1 - - - - TransactionTableModel - - Date - Fecha - - - Type - Tipo - - - Label - Etiqueta - - - Unconfirmed - Sin confirmar - - - Abandoned - Abandonado - - - Confirming (%1 of %2 recommended confirmations) - Confirmando (%1 de %2 confirmaciones recomendadas) - - - Confirmed (%1 confirmations) - Confirmado (%1 confirmaciones) - - - Conflicted - En conflicto - - - Immature (%1 confirmations, will be available after %2) - Inmaduro (%1 confirmación(es), Estarán disponibles después de %2) - - - Generated but not accepted - Generado pero no aceptado - - - Received with - Recibido con - - - Received from - Recibido de - - - Sent to - Enviado a - - - Mined - Minado - - - watch-only - Solo observación - - - (no label) - (no etiqueta) - - - Transaction status. Hover over this field to show number of confirmations. - Estado de transacción. Pasa el ratón sobre este campo para ver el numero de confirmaciones. - - - Date and time that the transaction was received. - Fecha y hora cuando se recibió la transacción - - - Type of transaction. - Tipo de transacción. - - - Whether or not a watch-only address is involved in this transaction. - Si una dirección de solo observación está involucrada en esta transacción o no. - - - User-defined intent/purpose of the transaction. - Intención o propósito de la transacción definidos por el usuario. - - - Amount removed from or added to balance. - Cantidad restada o añadida al balance - - - - TransactionView - - All - Todo - - - Today - Hoy - - - This week - Esta semana - - - This month - Este mes - - - Last month - Mes pasado - - - This year - Este año - - - Received with - Recibido con - - - Sent to - Enviado a - - - Mined - Minado - - - Other - Otra - - - Enter address, transaction id, or label to search - Ingresa la dirección, el identificador de transacción o la etiqueta para buscar - - - Min amount - Cantidad mínima - - - Range… - Rango... - - - &Copy address - &Copiar dirección - - - Copy &label - Copiar &etiqueta - - - Copy &amount - Copiar &importe - - - Copy transaction &ID - Copiar &ID de transacción - - - Copy &raw transaction - Copiar transacción &raw - - - Copy full transaction &details - Copiar &detalles completos de la transacción - - - &Show transaction details - &Mostrar detalles de la transacción - - - Increase transaction &fee - Aumentar &comisión de transacción - - - A&bandon transaction - &Abandonar transacción - - - &Edit address label - &Editar etiqueta de dirección - - - Show in %1 - Transactions table context menu action to show the selected transaction in a third-party block explorer. %1 is a stand-in argument for the URL of the explorer. - Mostrar en %1 - - - Export Transaction History - Exportar historial de transacciones - - - Comma separated file - Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. - Archivo separado por comas - - - Confirmed - Confirmado - - - Watch-only - Solo observación - - - Date - Fecha - - - Type - Tipo - - - Label - Etiqueta - - - Address - Dirección - - - Exporting Failed - Exportación fallida - - - There was an error trying to save the transaction history to %1. - Ocurrió un error al intentar guardar el historial de transacciones en %1. - - - Exporting Successful - Exportación exitosa - - - The transaction history was successfully saved to %1. - La transacción ha sido guardada en %1. - - - Range: - Rango: - - - to - para - - - - WalletFrame - - No wallet has been loaded. -Go to File > Open Wallet to load a wallet. -- OR - - No se cargó ninguna billetera. -Ir a Archivo > Abrir billetera para cargar una. -- OR - - - - Create a new wallet - Crear una nueva billetera - - - Unable to decode PSBT from clipboard (invalid base64) - No se puede decodificar PSBT desde el portapapeles (Base64 inválido) - - - Partially Signed Transaction (*.psbt) - Transacción firmada parcialmente (*.psbt) - - - PSBT file must be smaller than 100 MiB - El archivo PSBT debe ser más pequeño de 100 MiB - - - Unable to decode PSBT - No se puede decodificar PSBT - - - - WalletModel - - Send Coins - Enviar monedas - - - Fee bump error - Error de incremento de cuota - - - Increasing transaction fee failed - Ha fallado el incremento de la cuota de transacción. - - - Do you want to increase the fee? - Asks a user if they would like to manually increase the fee of a transaction that has already been created. - ¿Desea incrementar la cuota? - - - Current fee: - Comisión actual: - - - Increase: - Incremento: - - - New fee: - Nueva comisión: - - - 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. - Advertencia: Esta acción puede pagar la comisión adicional al reducir las salidas de cambio o agregar entradas, cuando sea necesario. Asimismo, puede agregar una nueva salida de cambio si aún no existe una. Estos cambios pueden filtrar potencialmente información privada. - - - Confirm fee bump - Confirmar incremento de comisión - - - Can't draft transaction. - No se puede crear un borrador de la transacción. - - - PSBT copied - PSBT copiada - - - Fee-bump PSBT copied to clipboard - TBPF con incremento de comisión copiada en el portapapeles - - - Can't sign transaction. - No se ha podido firmar la transacción. - - - Could not commit transaction - No se pudo confirmar la transacción - - - Signer error - Error de firmante - - - Can't display address - No se puede mostrar la dirección - - - - WalletView - - &Export - &Exportar - - - Export the data in the current tab to a file - Exportar los datos en la pestaña actual a un archivo - - - Backup Wallet - Respaldar monedero - - - Wallet Data - Name of the wallet data file format. - Datos del monedero - - - Backup Failed - Ha fallado el respaldo - - - There was an error trying to save the wallet data to %1. - Ha habido un error al intentar guardar los datos del monedero a %1. - - - Backup Successful - Respaldo exitoso - - - The wallet data was successfully saved to %1. - Los datos del monedero se han guardado con éxito en %1. - - - Cancel - Cancelar - - - - bitcoin-core - - The %s developers - Los desarrolladores de %s - - - %s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup. - %s corrupto. Intenta utilizar la herramienta de la billetera de bitcoin para rescatar o restaurar una copia de seguridad. - - - %s failed to validate the -assumeutxo snapshot state. This indicates a hardware problem, or a bug in the software, or a bad software modification that allowed an invalid snapshot to be loaded. As a result of this, the node will shut down and stop using any state that was built on the snapshot, resetting the chain height from %d to %d. On the next restart, the node will resume syncing from %d without using any snapshot data. Please report this incident to %s, including how you obtained the snapshot. The invalid snapshot chainstate will be left on disk in case it is helpful in diagnosing the issue that caused this error. - %s no pudo validar el estado de la instantánea -assumeutxo. Esto indica un problema de hardware, un error en el software o una modificación incorrecta del software que permitió que se cargara una instantánea no válida. Por consiguiente, el nodo se apagará y dejará de utilizar cualquier estado basado en la instantánea, restableciendo la altura de la cadena de %d a %d. En el siguiente reinicio, el nodo reanudará la sincronización desde %d sin usar datos de instantánea. Comunique este incidente a %s, indicando cómo obtuvo la instantánea. Se dejó el estado de encadenamiento de la instantánea no válida en el disco por si resulta útil para diagnosticar el problema que causó este error. - - - %s request to listen on port %u. This port is considered "bad" and thus it is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for details and a full list. - %s solicitud para escuchar en el puerto%u. Este puerto se considera "malo" y, por lo tanto, es poco probable que algún par se conecte a él. Consulta doc/p2p-bad-ports.md para obtener detalles y una lista completa. - - - Cannot downgrade wallet from version %i to version %i. Wallet version unchanged. - No se puede pasar de la versión %i a la versión anterior %i. La versión de la billetera no tiene cambios. - - - 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. - No se puede actualizar una billetera dividida no HD de la versión %i a la versión %i sin actualizar para admitir el pool de claves anterior a la división. Usa la versión %i o no especifiques la versión. - - - Disk space for %s may not accommodate the block files. Approximately %u GB of data will be stored in this directory. - Es posible que el espacio en disco %s no tenga capacidad para los archivos de bloque. Aproximadamente %u GB de datos se almacenarán en este directorio. - - - Distributed under the MIT software license, see the accompanying file %s or %s - Distribuido bajo la licencia de software MIT, vea el archivo adjunto %s o %s - - - Error loading wallet. Wallet requires blocks to be downloaded, and software does not currently support loading wallets while blocks are being downloaded out of order when using assumeutxo snapshots. Wallet should be able to load successfully after node sync reaches height %s - Error al cargar la billetera. Esta requiere que se descarguen bloques, y el software actualmente no admite la carga de billeteras mientras los bloques se descargan fuera de orden, cuando se usan instantáneas de assumeutxo. La billetera debería poder cargarse correctamente después de que la sincronización del nodo alcance la altura %s. - - - Error reading %s! Transaction data may be missing or incorrect. Rescanning wallet. - ¡Error al leer %s! Es probable que falten los datos de la transacción o que sean incorrectos. Reescaneando billetera. - - - Error starting/committing db txn for wallet transactions removal process - Error al iniciar/cometer el proceso de eliminación de base de datos de transacciones de monedero - - - Error: Dumpfile format record is incorrect. Got "%s", expected "format". - Error: el registro del formato del archivo de volcado es incorrecto. Se obtuvo "%s"; se esperaba "formato". - - - Error: Dumpfile identifier record is incorrect. Got "%s", expected "%s". - Error: el registro del identificador del archivo de volcado es incorrecto. Se obtuvo "%s"; se esperaba "%s". - - - Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s - Error: la versión del archivo volcado no es compatible. Esta versión de la billetera de bitcoin solo admite archivos de volcado de la versión 1. Se obtuvo un archivo de volcado con la versión %s - - - Error: Legacy wallets only support the "legacy", "p2sh-segwit", and "bech32" address types - Error: las billeteras heredadas solo admiten los tipos de dirección "legacy", "p2sh-segwit" y "bech32". - - - Error: Unable to produce descriptors for this legacy wallet. Make sure to provide the wallet's passphrase if it is encrypted. - Error: No se pueden producir descriptores para esta billetera tipo legacy. Asegúrate de proporcionar la frase de contraseña de la billetera si está encriptada. - - - File %s already exists. If you are sure this is what you want, move it out of the way first. - El archivo %s ya existe. Si definitivamente quieres hacerlo, quítalo primero. - - - Invalid or corrupt peers.dat (%s). If you believe this is a bug, please report it to %s. As a workaround, you can move the file (%s) out of the way (rename, move, or delete) to have a new one created on the next start. - Archivo peers.dat inválido o corrupto (%s). Si crees que se trata de un error, infórmalo a %s. Como alternativa, puedes quitar el archivo (%s) (renombrarlo, moverlo o eliminarlo) para que se cree uno nuevo en el siguiente inicio. - - - Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets - Valor no válido detectado para '-wallet' o '-nowallet'. -wallet' requiere un valor de cadena, mientras que '-nowallet' sólo acepta '1' para desactivar todos los monederos. - - - More than one onion bind address is provided. Using %s for the automatically created Tor onion service. - Se proporciona más de una dirección de enlace onion. Se está usando %s para el servicio onion de Tor creado automáticamente. - - - No dump file provided. To use createfromdump, -dumpfile=<filename> must be provided. - No se proporcionó el archivo de volcado. Para usar createfromdump, se debe proporcionar -dumpfile=<filename>. - - - No dump file provided. To use dump, -dumpfile=<filename> must be provided. - No se proporcionó el archivo de volcado. Para usar dump, se debe proporcionar -dumpfile=<filename>. - - - No wallet file format provided. To use createfromdump, -format=<format> must be provided. - No se proporcionó el formato de archivo de billetera. Para usar createfromdump, se debe proporcionar -format=<format>. - - - Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. - La opción '-upnp' está activada, pero el soporte UPnP se eliminó en la versión 29.0. Considera usar '-natpmp' en su lugar. - - - Please contribute if you find %s useful. Visit %s for further information about the software. - Contribuye si te parece que %s es útil. Visita %s para obtener más información sobre el software. - - - Prune configured below the minimum of %d MiB. Please use a higher number. - La Poda se ha configurado por debajo del mínimo de %d MiB. Por favor utiliza un valor mas alto. - - - Prune mode is incompatible with -reindex-chainstate. Use full -reindex instead. - El modo de poda no es compatible con -reindex-chainstate. Usa en su lugar un -reindex completo. - - - Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node) - Poda: la última sincronización de la billetera sobrepasa los datos podados. Tienes que ejecutar -reindex (descarga toda la cadena de bloques de nuevo en caso de tener un nodo podado) - - - Rename of '%s' -> '%s' failed. You should resolve this by manually moving or deleting the invalid snapshot directory %s, otherwise you will encounter the same error again on the next startup. - Error de renombrado de «%s» → «%s». Debería resolver esto manualmente moviendo o borrando el directorio %s de la instantánea no válida, en otro caso encontrará el mismo error de nuevo en el arranque siguiente. - - - SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported - SQLiteDatabase: versión desconocida del esquema de la billetera sqlite %d. Solo se admite la versión %d. - - - The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct - La base de datos de bloques contiene un bloque que parece ser del futuro. Es posible que se deba a que la fecha y hora de la computadora están mal configuradas. Reconstruye la base de datos de bloques solo si tienes la certeza de que la fecha y hora de la computadora son correctas. - - - The transaction amount is too small to send after the fee has been deducted - El monto de la transacción es demasiado pequeño para enviarlo después de deducir la comisión - - - 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 - Este error podría ocurrir si esta billetera no se cerró correctamente y se cargó por última vez usando una compilación con una versión más reciente de Berkeley DB. Si es así, usa el software que cargó por última vez esta billetera. - - - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - Esta es una compilación preliminar de prueba. Úsala bajo tu propia responsabilidad. No la uses para aplicaciones comerciales o de minería. - - - This is the maximum transaction fee you pay (in addition to the normal fee) to prioritize partial spend avoidance over regular coin selection. - Esta es la comisión máxima de transacción que pagas (además de la comisión normal) para priorizar la elusión del gasto parcial sobre la selección regular de monedas. - - - This is the transaction fee you may discard if change is smaller than dust at this level - Esta es la cuota de transacción que puede descartar si el cambio es más pequeño que el polvo a este nivel. - - - This is the transaction fee you may pay when fee estimates are not available. - Impuesto por transacción que pagarás cuando la estimación de impuesto no esté disponible. - - - Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments. - La longitud total de la cadena de versión de red ( %i ) supera la longitud máxima ( %i ) . Reducir el número o tamaño de uacomments . - - - Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate. - No se pueden reproducir bloques. Tendrás que reconstruir la base de datos usando -reindex-chainstate. - - - Unknown wallet file format "%s" provided. Please provide one of "bdb" or "sqlite". - Se proporcionó un formato de archivo de billetera desconocido "%s". Proporciona uno entre "bdb" o "sqlite". - - - Unsupported category-specific logging level %1$s=%2$s. Expected %1$s=<category>:<loglevel>. Valid categories: %3$s. Valid loglevels: %4$s. - Nivel de boletín del acceso especificado en categoría no mantenida en %1$s=%2$s. Se esperaba %1$s=1:2. Categorías válidas: %3$s. Niveles de boletín válidos: %4 $s. - - - Unsupported chainstate database format found. Please restart with -reindex-chainstate. This will rebuild the chainstate database. - El formato de la base de datos chainstate es incompatible. Reinicia con -reindex-chainstate para reconstruir la base de datos chainstate. - - - Wallet created successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. - La billetera se creó correctamente. El tipo de billetera "legacy" se está descontinuando, por lo que la asistencia para crear y abrir estas billeteras se eliminará en el futuro. - - - Wallet loaded successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. Legacy wallets can be migrated to a descriptor wallet with migratewallet. - Monedero correctamente cargado. El tipo de billetero heredado está siendo obsoleto y mantenimiento para creación de monederos heredados serán eliminados en el futuro. Los monederos heredados pueden ser migrados a un descriptor de monedero con migratewallet. - - - Warning: Dumpfile wallet format "%s" does not match command line specified format "%s". - Advertencia: el formato de la billetera del archivo de volcado "%s" no coincide con el formato especificado en la línea de comandos "%s". - - - Warning: Private keys detected in wallet {%s} with disabled private keys - Advertencia: Claves privadas detectadas en la billetera {%s} con claves privadas deshabilitadas - - - Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. - Advertencia: ¡Al parecer no estamos completamente de acuerdo con nuestros pares! Es posible que tengas que actualizarte, o que los demás nodos tengan que hacerlo. - - - Witness data for blocks after height %d requires validation. Please restart with -reindex. - Los datos del testigo para los bloques después de la altura %d requieren validación. Reinicia con -reindex. - - - You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain - Tienes que reconstruir la base de datos usando -reindex para volver al modo sin poda. Esto volverá a descargar toda la cadena de bloques. - - - %s is set very high! - ¡%s esta configurado muy alto! - - - -maxmempool must be at least %d MB - -maxmempool debe ser por lo menos de %d MB - - - Cannot obtain a lock on directory %s. %s is probably already running. - No se puede obtener un bloqueo en el directorio %s. %s probablemente ya se está ejecutando - - - Cannot resolve -%s address: '%s' - No se puede resolver -%s direccion: '%s' - - - Cannot set -forcednsseed to true when setting -dnsseed to false. - No se puede establecer el valor de -forcednsseed con la variable true al establecer el valor de -dnsseed con la variable false. - - - Cannot set -peerblockfilters without -blockfilterindex. - No se puede establecer -peerblockfilters sin -blockfilterindex. - - - %s is set very high! Fees this large could be paid on a single transaction. - La configuración de %s es demasiado alta. Las comisiones tan grandes se podrían pagar en una sola transacción. - - - Cannot provide specific connections and have addrman find outgoing connections at the same time. - No se pueden proporcionar conexiones específicas y hacer que addrman encuentre conexiones salientes al mismo tiempo. - - - Error loading %s: External signer wallet being loaded without external signer support compiled - Error al cargar %s: Se está cargando la billetera firmante externa sin que se haya compilado la compatibilidad del firmante externo - - - Error reading %s! All keys read correctly, but transaction data or address metadata may be missing or incorrect. - Error leyendo %s. Todas las teclas leídas correctamente, pero los datos de transacción o metadatos de dirección puedan ser ausentes o incorrectos. - - - Error: Address book data in wallet cannot be identified to belong to migrated wallets - Error: No se puede identificar si los datos de la libreta de direcciones en la billetera pertenecen a billeteras migradas - - - Error: Duplicate descriptors created during migration. Your wallet may be corrupted. - Error: Se crearon descriptores duplicados durante la migración. Tu billetera podría estar dañada. - - - Error: Transaction %s in wallet cannot be identified to belong to migrated wallets - Error: No se puede identificar si la transacción %s en la billetera pertenece a billeteras migradas - - - Failed to calculate bump fees, because unconfirmed UTXOs depend on enormous cluster of unconfirmed transactions. - No se pudo calcular la comisión de incremento porque las UTXO sin confirmar dependen de un grupo enorme de transacciones no confirmadas. - - - Failed to remove snapshot chainstate dir (%s). Manually remove it before restarting. - - No se ha podido eliminar la instantánea chainstate dir (%s). Elimínala manualmente antes de reiniciar. - - - - Failed to rename invalid peers.dat file. Please move or delete it and try again. - No se pudo cambiar el nombre del archivo peers.dat inválido. Muévelo o elimínalo, e intenta de nuevo. - - - Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable %s. - Error al calcular la comisión. La opción "fallbackfee" está desactivada. Espera algunos bloques o activa %s. - - - Flushing block file to disk failed. This is likely the result of an I/O error. - Ha fallado el volcado del archivo de bloques al disco. Es probable que se deba a un error de E/O. - - - Flushing undo file to disk failed. This is likely the result of an I/O error. - Ha fallado el volcado del archivo para deshacer al disco. Es probable que se deba a un error de E/O. - - - Incompatible options: -dnsseed=1 was explicitly specified, but -onlynet forbids connections to IPv4/IPv6 - Opciones incompatibles: -dnsseed=1 se especificó explícitamente, pero -onlynet prohíbe conexiones a IPv4/IPv6. - - - Invalid amount for %s=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions) - Importe inválido para %s=<amount>: "%s" (debe ser al menos la comisión mínima de retransmisión de %s para evitar transacciones atascadas) - - - Maximum transaction weight is less than transaction weight without inputs - El peso máximo de la transacción es menor que el peso de la transacción sin entradas - - - Maximum transaction weight is too low, can not accommodate change output - El peso máximo de la transacción es demasiado bajo, por lo que no puede incluir la salida de cambio. - - - Outbound connections restricted to CJDNS (-onlynet=cjdns) but -cjdnsreachable is not provided - Las conexiones salientes están restringidas a CJDNS (-onlynet=cjdns), pero no se proporciona -cjdnsreachable - - - Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is explicitly forbidden: -onion=0 - Las conexiones salientes están restringidas a Tor (-onlynet=onion), pero el proxy para conectarse con la red Tor está explícitamente prohibido: -onion=0. - - - Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is not provided: none of -proxy, -onion or -listenonion is given - Las conexiones salientes están restringidas a Tor (-onlynet=onion), pero no se proporciona el proxy para conectarse con la red Tor: no se indican -proxy, -onion ni -listenonion. - - - Outbound connections restricted to i2p (-onlynet=i2p) but -i2psam is not provided - Las conexiones salientes están restringidas a i2p (-onlynet=i2p), pero no se proporciona -i2psam - - - Rename of '%s' -> '%s' failed. Cannot clean up the background chainstate leveldb directory. - Ha fallado el cambio de nombre de ''%s" a ''%s". No se puede limpiar el directorio leveldb del estado de la cadena de fondo. - - - The combination of the pre-selected inputs and the wallet automatic inputs selection exceeds the transaction maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - La combinación de las entradas preseleccionadas y la selección automática de entradas del monedero supera el peso máximo de la transacción. Intenta enviar un importe menor o consolidar manualmente las UTXO del monedero. - - - The inputs size exceeds the maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - El tamaño de las entradas supera el peso máximo. Intenta enviar una cantidad menor o consolidar manualmente las UTXO de la billetera. - - - The preselected coins total amount does not cover the transaction target. Please allow other inputs to be automatically selected or include more coins manually - La cantidad total de monedas preseleccionadas no cubre la meta de la transacción. Permite que se seleccionen automáticamente otras entradas o incluye más monedas manualmente. - - - Transaction requires one destination of non-0 value, a non-0 feerate, or a pre-selected input - La transacción requiere un destino de valor distinto de cero, una tasa de comisión distinta de cero, o una entrada preseleccionada. - - - UTXO snapshot failed to validate. Restart to resume normal initial block download, or try loading a different snapshot. - No se validó la instantánea de UTXO. Reinicia para reanudar la descarga de bloques inicial normal o intenta cargar una instantánea diferente. - - - Unconfirmed UTXOs are available, but spending them creates a chain of transactions that will be rejected by the mempool - Las UTXO sin confirmar están disponibles, pero si se gastan, se crea una cadena de transacciones que rechazará el pool de memoria. - - - Unexpected legacy entry in descriptor wallet found. Loading wallet %s - -The wallet might have been tampered with or created with malicious intent. - - Se encontró una entrada heredada inesperada en la billetera del descriptor. Cargando billetera%s - -Es posible que la billetera haya sido manipulada o creada con malas intenciones. - - - - Unrecognized descriptor found. Loading wallet %s - -The wallet might had been created on a newer version. -Please try running the latest software version. - - Se encontró un descriptor desconocido. Cargando billetera %s. - -La billetera se pudo hacer creado con una versión más reciente. -Intenta ejecutar la última versión del software. - - - - Your computer's date and time appear to be more than %d minutes out of sync with the network, this may lead to consensus failure. After you've confirmed your computer's clock, this message should no longer appear when you restart your node. Without a restart, it should stop showing automatically after you've connected to a sufficient number of new outbound peers, which may take some time. You can inspect the `timeoffset` field of the `getpeerinfo` and `getnetworkinfo` RPC methods to get more info. - La fecha y la hora del ordenador parecen estar más de %d minutos desincronizadas con la red, lo que puede producir un fallo de consenso. Después de confirmar el reloj del ordenador, este mensaje debería dejar de aparecer cuando reinicies el nodo. Sin reiniciar, debería dejar de mostrarse automáticamente después de que te hayas conectado a un número suficiente de nuevos pares salientes, lo que puede llevar cierto tiempo. Puedes inspeccionar el campo "timeoffset" de los métodos RPC "getpeerinfo" y "getnetworkinfo" para obtener más información. - - - -Unable to cleanup failed migration - -No se puede limpiar la migración fallida - - - -Unable to restore backup of wallet. - -No se puede restaurar la copia de seguridad de la billetera. - - - whitebind may only be used for incoming connections ("out" was passed) - whitebind solo puede utilizarse para conexiones entrantes (se ha pasado "out") - - - A fatal internal error occurred, see debug.log for details: - Ha ocurrido un error interno grave. Consulta debug.log para obtener más información: - - - Assumeutxo data not found for the given blockhash '%s'. - No se han encontrado datos assumeutxo para el blockhash indicado "%s". - - - Block verification was interrupted - Se interrumpió la verificación de bloques - - - Cannot write to directory '%s'; check permissions. - No se puede escribir en el directorio '%s'; compruebe los permisos. - - - Corrupt block found indicating potential hardware failure. - Se ha encontrado un bloque corrupto que indica un posible fallo del hardware. - - - Corrupted block database detected - Corrupción de base de datos de bloques detectada. - - - Could not find asmap file %s - No se pudo encontrar el archivo asmap %s - - - Could not parse asmap file %s - No se pudo analizar el archivo asmap %s - - - Disk space is too low! - ¡El espacio en disco es demasiado pequeño! - - - Done loading - Listo Cargando - - - Dump file %s does not exist. - El archivo de volcado %s no existe. - - - Elliptic curve cryptography sanity check failure. %s is shutting down. - Fallo en la prueba de cordura de la criptografía de curva elíptica. %s se apagará. - - - Error creating %s - Error al crear %s - - - Error initializing block database - Error al inicializar la base de datos de bloques - - - Error initializing wallet database environment %s! - Error al iniciar el entorno de la base de datos del monedero %s - - - Error loading %s - Error cargando %s - - - Error loading %s: Private keys can only be disabled during creation - Error al cargar %s: Las claves privadas solo se pueden deshabilitar durante la creación - - - Error loading %s: Wallet corrupted - Error cargando %s: Monedero corrupto - - - Error loading %s: Wallet requires newer version of %s - Error cargando %s: Monedero requiere una versión mas reciente de %s - - - Error loading block database - Error cargando blkindex.dat - - - Error loading databases - Error cargando bases de datos - - - Error opening block database - Error cargando base de datos de bloques - - - Error opening coins database - Error al abrir la base de datos de monedas - - - Error reading configuration file: %s - Error al leer el archivo de configuración: %s - - - Error reading from database, shutting down. - Error al leer la base de datos, cerrando aplicación. - - - Error reading next record from wallet database - Error al leer el siguiente registro de la base de datos de la billetera - - - Error: Cannot extract destination from the generated scriptpubkey - Error: no se puede extraer el destino del scriptpubkey generado - - - Error: Couldn't create cursor into database - Error: No se pudo crear el cursor en la base de datos - - - Error: Disk space is low for %s - Error: El espacio en disco es pequeño para %s - - - Error: Dumpfile checksum does not match. Computed %s, expected %s - Error: La suma de comprobación del archivo de volcado no coincide. Calculada:%s; prevista:%s. - - - Error: Failed to create new watchonly wallet - Error: No se pudo crear una billetera solo de observación - - - Error: Got key that was not hex: %s - Error: Se recibió una clave que no es hex: %s - - - Error: Got value that was not hex: %s - Error: Se recibió un valor que no es hex: %s - - - Error: Keypool ran out, please call keypoolrefill first - Error: El pool de claves se agotó. Invoca keypoolrefill primero. - - - Error: Missing checksum - Error: Falta la suma de comprobación - - - Error: No %s addresses available. - Error: No hay direcciones %s disponibles. - - - Error: This wallet already uses SQLite - Error: Esta billetera ya usa SQLite - - - Error: This wallet is already a descriptor wallet - Error: Esta billetera ya es de descriptores - - - Error: Unable to begin reading all records in the database - Error: No se puede comenzar a leer todos los registros en la base de datos - - - Error: Unable to make a backup of your wallet - Error: No se puede realizar una copia de seguridad de tu billetera - - - Error: Unable to parse version %u as a uint32_t - Error: No se puede analizar la versión %ucomo uint32_t - - - Error: Unable to read all records in the database - Error: No se pueden leer todos los registros en la base de datos - - - Error: Unable to read wallet's best block locator record - Error: no es capaz de leer el mejor registro del localizador del bloque del monedero - - - Error: Unable to remove watchonly address book data - Error: No se pueden eliminar los datos de la libreta de direcciones solo de observación - - - Error: Unable to write data to disk for wallet %s - Error: No se pueden escribir datos en el disco para el monedero %s - - - Error: Unable to write record to new wallet - Error: No se puede escribir el registro en la nueva billetera - - - Error: Unable to write solvable wallet best block locator record - Error: no es capaz de escribir el mejor registro del localizador del bloque del monedero - - - Error: Unable to write watchonly wallet best block locator record - Error: no es capaz de escribir el mejor monedero vigilado del bloque del registro localizador - - - Error: database transaction cannot be executed for wallet %s - Error: la transacción de la base de datos no se puede ejecutar para la billetera %s - - - Failed to connect best block (%s). - No se ha podido conectar el mejor bloque (%s). - - - Failed to disconnect block. - No se ha podido desconectar el bloque. - - - Failed to listen on any port. Use -listen=0 if you want this. - Ha fallado la escucha en todos los puertos. Usa -listen=0 si desea esto. - - - Failed to read block. - No se ha podido leer el bloque. - - - Failed to rescan the wallet during initialization - Fallo al rescanear la billetera durante la inicialización - - - Failed to start indexes, shutting down.. - Es erróneo al iniciar indizados, se apaga... - - - Failed to verify database - Fallo al verificar la base de datos - - - Failed to write block. - No se ha podido escribir el bloque. - - - Failed to write to block index database. - Error al escribir en la base de datos del índice de bloques. - - - Failed to write to coin database. - Error al escribir en la base de datos de monedas. - - - Failed to write undo data. - Error al escribir datos para deshacer. - - - Failure removing transaction: %s - Error al eliminar la transacción: 1%s - - - Fee rate (%s) is lower than the minimum fee rate setting (%s) - La tasa de comisión (%s) es menor que el valor mínimo (%s) - - - Ignoring duplicate -wallet %s. - Ignorar duplicación de -wallet %s. - - - Importing… - Importando... - - - Incorrect or no genesis block found. Wrong datadir for network? - Incorrecto o bloque de génesis no encontrado. ¿datadir equivocada para la red? - - - Initialization sanity check failed. %s is shutting down. - La inicialización de la verificación de validez falló. Se está apagando %s. - - - Input not found or already spent - No se encontró o ya se gastó la entrada - - - Insufficient dbcache for block verification - dbcache insuficiente para la verificación de bloques - - - Insufficient funds - Fondos Insuficientes - - - Invalid -i2psam address or hostname: '%s' - La dirección -i2psam o el nombre de host no es válido: "%s" - - - Invalid -onion address or hostname: '%s' - Dirección de -onion o dominio '%s' inválido - - - Invalid -proxy address or hostname: '%s' - Dirección de -proxy o dominio ' %s' inválido - - - Invalid P2P permission: '%s' - Permiso P2P inválido: "%s" - - - Invalid amount for %s=<amount>: '%s' (must be at least %s) - Importe inválido para %s=<amount>: "%s" (debe ser por lo menos %s) - - - Invalid amount for %s=<amount>: '%s' - Importe inválido para %s=<amount>: "%s" - - - Invalid amount for -%s=<amount>: '%s' - Monto invalido para -%s=<amount>: '%s' - - - Invalid netmask specified in -whitelist: '%s' - Máscara de red inválida especificada en -whitelist: '%s' - - - Invalid port specified in %s: '%s' - Puerto no válido especificado en%s: '%s' - - - Invalid pre-selected input %s - Entrada preseleccionada no válida %s - - - Listening for incoming connections failed (listen returned error %s) - Fallo en la escucha para conexiones entrantes (la escucha devolvió el error %s) - - - Loading P2P addresses… - Cargando direcciones P2P... - - - Loading banlist… - Cargando lista de bloqueos... - - - Loading block index… - Cargando índice de bloques... - - - Loading wallet… - Cargando billetera... - - - Maximum transaction weight must be between %d and %d - El peso máximo de la transacción debe estar entre %d y %d. - - - Missing amount - Falta la cantidad - - - Missing solving data for estimating transaction size - Faltan datos de resolución para estimar el tamaño de la transacción - - - Need to specify a port with -whitebind: '%s' - Necesita especificar un puerto con -whitebind: '%s' - - - No addresses available - No hay direcciones disponibles - - - Not found pre-selected input %s - Entrada preseleccionada no encontrada%s - - - Not solvable pre-selected input %s - Entrada preseleccionada no solucionable %s - - - Only direction was set, no permissions: '%s' - Solo se ha establecido la dirección, sin permisos: "%s" - - - Prune cannot be configured with a negative value. - La poda no se puede configurar con un valor negativo. - - - Prune mode is incompatible with -txindex. - El modo de poda es incompatible con -txindex. - - - Pruning blockstore… - Podando almacén de bloques… - - - Reducing -maxconnections from %d to %d, because of system limitations. - Reduciendo -maxconnections de %d a %d, debido a limitaciones del sistema. - - - Replaying blocks… - Reproduciendo bloques… - - - Rescanning… - Rescaneando... - - - SQLiteDatabase: Failed to execute statement to verify database: %s - SQLiteDatabase: Fallo al ejecutar la instrucción para verificar la base de datos: %s - - - SQLiteDatabase: Failed to prepare statement to verify database: %s - SQLiteDatabase: Fallo al preparar la instrucción para verificar la base de datos: %s - - - SQLiteDatabase: Failed to read database verification error: %s - SQLiteDatabase: Fallo al leer el error de verificación de la base de datos: %s - - - SQLiteDatabase: Unexpected application id. Expected %u, got %u - SQLiteDatabase: Identificador de aplicación inesperado. Se esperaba %u; se recibió %u. - - - Section [%s] is not recognized. - La sección [%s] no se reconoce. - - - Signer did not echo address - El firmante no se hizo eco de la dirección - - - Signer echoed unexpected address %s - El firmante se hizo eco de una dirección inesperada %s - - - Signer returned error: %s - El firmante ha devuelto un error: %s - - - Signing transaction failed - Firma de transacción fallida - - - Specified -walletdir "%s" does not exist - El valor especificado de -walletdir "%s" no existe - - - Specified -walletdir "%s" is a relative path - El valor especificado de -walletdir "%s" es una ruta relativa - - - Specified -walletdir "%s" is not a directory - El valor especificado de -walletdir "%s" no es un directorio - - - Specified blocks directory "%s" does not exist. - El directorio de bloques especificado "%s" no existe. - - - Specified data directory "%s" does not exist. - El directorio de datos especificado "%s" no existe. - - - Starting network threads… - Iniciando subprocesos de red... - - - System error while flushing: %s - Error del sistema durante el vaciado:%s - - - System error while loading external block file: %s - Error del sistema al cargar un archivo de bloque externo: %s - - - System error while saving block to disk: %s - Error del sistema al guardar el bloque en el disco: %s - - - The source code is available from %s. - El código fuente esta disponible desde %s. - - - The specified config file %s does not exist - El archivo de configuración especificado %s no existe - - - The transaction amount is too small to pay the fee - El monto a transferir es muy pequeño para pagar el impuesto - - - The transactions removal process can only be executed within a db txn - El proceso de eliminación de transacciones sólo puede ejecutarse dentro de una base de datos de transacción - - - The wallet will avoid paying less than the minimum relay fee. - La billetera no permitirá pagar menos que la fee de transmisión mínima (relay fee). - - - There is no ScriptPubKeyManager for this address - No hay ningún ScriptPubKeyManager para esta dirección. - - - This is experimental software. - Este es un software experimental. - - - This is the minimum transaction fee you pay on every transaction. - Mínimo de impuesto que pagarás con cada transacción. - - - This is the transaction fee you will pay if you send a transaction. - Impuesto por transacción a pagar si envías una transacción. - - - Transaction %s does not belong to this wallet - La transacción %s no pertenece a esta billetera - - - Transaction amount too small - Monto a transferir muy pequeño - - - Transaction amounts must not be negative - El monto de la transacción no puede ser negativo - - - Transaction change output index out of range - Índice de salidas de cambio de transacciones fuera de alcance - - - Transaction must have at least one recipient - La transacción debe incluir al menos un destinatario. - - - Transaction needs a change address, but we can't generate it. - La transacción necesita una dirección de cambio, pero no podemos generarla. - - - Transaction too large - Transacción muy grande - - - Unable to bind to %s on this computer (bind returned error %s) - No es posible conectar con %s en este sistema (bind ha devuelto el error %s) - - - Unable to bind to %s on this computer. %s is probably already running. - No se puede establecer un enlace a %s en este equipo. Es posible que %s ya esté en ejecución. - - - Unable to create the PID file '%s': %s - No se puede crear el archivo PID "%s": %s - - - Unable to find UTXO for external input - No se puede encontrar UTXO para la entrada externa - - - Unable to generate initial keys - No se pueden generar las claves iniciales - - - Unable to generate keys - No se pueden generar claves - - - Unable to open %s for writing - No se puede abrir %s para escribir - - - Unable to parse -maxuploadtarget: '%s' - No se puede analizar -maxuploadtarget: "%s" - - - Unable to start HTTP server. See debug log for details. - No se ha podido iniciar el servidor HTTP. Ver debug log para detalles. - - - Unable to unload the wallet before migrating - No se puede descargar la billetera antes de la migración - - - Unknown -blockfilterindex value %s. - Se desconoce el valor de -blockfilterindex %s. - - - Unknown address type '%s' - Se desconoce el tipo de dirección "%s" - - - Unknown change type '%s' - Se desconoce el tipo de cambio "%s" - - - Unknown network specified in -onlynet: '%s' - La red especificada en -onlynet: '%s' es desconocida - - - Unknown new rules activated (versionbit %i) - Se desconocen las nuevas reglas activadas (versionbit %i) - - - Unrecognised option "%s" provided in -test=<option>. - Opción no reconocida "%s" proporcionada en -test=<option>. - - - Unsupported global logging level %s=%s. Valid values: %s. - Nivel de acceso global %s = %s no mantenido. Los valores válidos son: %s. - - - Wallet file creation failed: %s - Creación errónea del fichero monedero: %s - - - acceptstalefeeestimates is not supported on %s chain. - acceptstalefeeestimates no está mantenido en el encadenamiento %s. - - - Unsupported logging category %s=%s. - La categoría de registro no es compatible %s=%s. - - - Do you want to rebuild the databases now? - ¿Quiere reconstruir la base de datos de bloques ahora? - - - Error: Could not add watchonly tx %s to watchonly wallet - Error: no pudo agregar tx de solo vigía %s para monedero de solo vigía - - - Error: Could not delete watchonly transactions. - Error: no se pudieron eliminar las transacciones de watchonly. - - - Error: Wallet does not exist - Error: La cartera no existe - - - Error: cannot remove legacy wallet records - Error: no se pueden eliminar los registros de cartera heredados - - - Not enough file descriptors available. %d available, %d required. - No hay suficientes descriptores de archivo disponibles. %d disponibles, %d requeridos. - - - User Agent comment (%s) contains unsafe characters. - El comentario del agente de usuario (%s) contiene caracteres inseguros. - - - Verifying blocks… - Verificando bloques... - - - Verifying wallet(s)… - Verificando billetera(s)... - - - Wallet needed to be rewritten: restart %s to complete - Es necesario rescribir la billetera: reiniciar %s para completar - - - Settings file could not be read - El archivo de configuración no se puede leer - - - Settings file could not be written - El archivo de configuración no se puede escribir - - - \ No newline at end of file diff --git a/src/qt/locale/bitcoin_es_CO.ts b/src/qt/locale/bitcoin_es_CO.ts deleted file mode 100644 index ae1ad76f0e29..000000000000 --- a/src/qt/locale/bitcoin_es_CO.ts +++ /dev/null @@ -1,5092 +0,0 @@ - - - AddressBookPage - - Right-click to edit address or label - Hacer clic derecho para editar la dirección o etiqueta - - - Create a new address - Crear una nueva dirección - - - &New - &Nueva - - - Copy the currently selected address to the system clipboard - Copiar la dirección seleccionada actualmente al portapapeles del sistema - - - &Copy - &Copiar - - - C&lose - &Cerrar - - - Delete the currently selected address from the list - Eliminar la dirección seleccionada de la lista - - - Enter address or label to search - Ingresar una dirección o etiqueta para buscar - - - Export the data in the current tab to a file - Exportar los datos de la pestaña actual a un archivo - - - &Export - &Exportar - - - &Delete - &Borrar - - - Choose the address to send coins to - Elige la dirección a la que se enviarán monedas - - - Choose the address to receive coins with - Elige la dirección en la que se recibirán monedas - - - C&hoose - &Seleccionar - - - These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Estas son tus direcciones de Bitcoin para enviar pagos. Revisa siempre el importe y la dirección de recepción antes de enviar monedas. - - - These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. -Signing is only possible with addresses of the type 'legacy'. - Estas son tus direcciones de Bitcoin para recibir pagos. Usa el botón "Crear nueva dirección de recepción" en la pestaña "Recibir" para crear nuevas direcciones. -Solo es posible firmar con direcciones de tipo "legacy". - - - &Copy Address - &Copiar dirección - - - Copy &Label - Copiar &etiqueta - - - &Edit - &Editar - - - Export Address List - Exportar lista de direcciones - - - Comma separated file - Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. - Archivo separado por comas - - - There was an error trying to save the address list to %1. Please try again. - An error message. %1 is a stand-in argument for the name of the file we attempted to save to. - Ocurrió un error al intentar guardar la lista de direcciones en %1. Inténtalo de nuevo. - - - Sending addresses - %1 - Direcciones de envío - %1 - - - Receiving addresses - %1 - Direcciones de recepción - %1 - - - Exporting Failed - Error al exportar - - - - AddressTableModel - - Label - Etiqueta - - - Address - Dirección - - - (no label) - (sin etiqueta) - - - - AskPassphraseDialog - - Passphrase Dialog - Diálogo de frase de contraseña - - - Enter passphrase - Ingresar la frase de contraseña - - - New passphrase - Nueva frase de contraseña - - - Repeat new passphrase - Repetir la nueva frase de contraseña - - - Show passphrase - Mostrar la frase de contraseña - - - Encrypt wallet - Encriptar billetera - - - This operation needs your wallet passphrase to unlock the wallet. - Esta operación requiere la frase de contraseña de la billetera para desbloquearla. - - - Unlock wallet - Desbloquear billetera - - - Change passphrase - Cambiar frase de contraseña - - - Confirm wallet encryption - Confirmar el encriptado de la billetera - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! - Advertencia: Si encriptas la billetera y pierdes tu frase de contraseña, ¡<b>PERDERÁS TODOS TUS BITCOINS</b>! - - - Are you sure you wish to encrypt your wallet? - ¿Seguro quieres encriptar la billetera? - - - Wallet encrypted - Billetera encriptada - - - Enter the new passphrase for the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. - Ingresa la nueva frase de contraseña para la billetera. <br/>Usa una frase de contraseña de <b>diez o más caracteres aleatorios</b>, u <b>ocho o más palabras</b>. - - - Enter the old passphrase and new passphrase for the wallet. - Ingresa la antigua frase de contraseña y la nueva frase de contraseña para la billetera. - - - Continue - Continuar - - - Back - Atrás - - - Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. - Recuerda que encriptar tu billetera no garantiza la protección total contra el robo de tus bitcoins si la computadora está infectada con malware. - - - Wallet to be encrypted - Billetera para encriptar - - - Your wallet is about to be encrypted. - Tu billetera está a punto de encriptarse. - - - Your wallet is now encrypted. - Tu billetera ahora está encriptada. - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANTE: Cualquier copia de seguridad anterior que hayas hecho del archivo de la billetera se deberá reemplazar por el nuevo archivo encriptado que generaste. Por motivos de seguridad, las copias de seguridad realizadas anteriormente quedarán obsoletas en cuanto empieces a usar la nueva billetera encriptada. - - - Wallet encryption failed - Falló el encriptado de la billetera - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - El encriptado de la billetera falló debido a un error interno. La billetera no se encriptó. - - - The supplied passphrases do not match. - Las frases de contraseña proporcionadas no coinciden. - - - Wallet unlock failed - Falló el desbloqueo de la billetera - - - The passphrase entered for the wallet decryption was incorrect. - La frase de contraseña introducida para el cifrado de la billetera es incorrecta. - - - The passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. If this is successful, please set a new passphrase to avoid this issue in the future. - La frase de contraseña ingresada para el descifrado de la billetera es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo . Si esto es correcto, establece una nueva frase de contraseña para evitar este problema en el futuro. - - - Wallet passphrase was successfully changed. - La frase de contraseña de la billetera se cambió correctamente. - - - Passphrase change failed - Error al cambiar la frase de contraseña - - - The old passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. - La frase de contraseña que se ingresó para descifrar la billetera es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo. - - - Warning: The Caps Lock key is on! - Advertencia: ¡Las mayúsculas están activadas! - - - - BanTableModel - - IP/Netmask - IP/Máscara de red - - - Banned Until - Prohibido hasta - - - - BitcoinApplication - - Settings file %1 might be corrupt or invalid. - El archivo de configuración %1 puede estar dañado o no ser válido. - - - Runaway exception - Excepción fuera de control - - - A fatal error occurred. %1 can no longer continue safely and will quit. - Se produjo un error fatal. %1 ya no puede continuar de manera segura y se cerrará. - - - Internal error - Error interno - - - An internal error occurred. %1 will attempt to continue safely. This is an unexpected bug which can be reported as described below. - Se produjo un error interno. %1 intentará continuar de manera segura. Este es un error inesperado que se puede reportar como se describe a continuación. - - - - QObject - - Do you want to reset settings to default values, or to abort without making changes? - Explanatory text shown on startup when the settings file cannot be read. Prompts user to make a choice between resetting or aborting. - ¿Deseas restablecer los valores a la configuración predeterminada o abortar sin realizar los cambios? - - - A fatal error occurred. Check that settings file is writable, or try running with -nosettings. - Explanatory text shown on startup when the settings file could not be written. Prompts user to check that we have the ability to write to the file. Explains that the user has the option of running without a settings file. - Se produjo un error fatal. Comprueba que el archivo de configuración soporte escritura o intenta ejecutar el programa con -nosettings. - - - %1 didn't yet exit safely… - %1 aún no se cerró de forma segura... - - - unknown - desconocido - - - Embedded "%1" - "%1" integrado - - - Default system font "%1" - Fuente predeterminada del sistema "%1" - - - Custom… - Personalizada... - - - Amount - Importe - - - Enter a Bitcoin address (e.g. %1) - Ingresar una dirección de Bitcoin (por ejemplo, %1) - - - Unroutable - No enrutable - - - Inbound - An inbound connection from a peer. An inbound connection is a connection initiated by a peer. - Entrante - - - Outbound - An outbound connection to a peer. An outbound connection is a connection initiated by us. - Saliente - - - Full Relay - Peer connection type that relays all network information. - Retransmisión completa - - - Block Relay - Peer connection type that relays network information about blocks and not transactions or addresses. - Retransmisión de bloques - - - Address Fetch - Short-lived peer connection type that solicits known addresses from a peer. - Recuperación de dirección - - - None - Ninguno - - - N/A - N/D - - - %n second(s) - - %n segundo - %n segundos - - - - %n minute(s) - - %n minuto - %n minutos - - - - %n hour(s) - - %n hora - %n horas - - - - %n day(s) - - %n día - %n días - - - - %n week(s) - - %n semana - %n semanas - - - - %1 and %2 - %1 y %2 - - - %n year(s) - - %n año - %n años - - - - default wallet - billetera predeterminada - - - - BitcoinGUI - - &Overview - &Vista general - - - Show general overview of wallet - Muestra una vista general de la billetera - - - &Transactions - &Transacciones - - - Browse transaction history - Explora el historial de transacciones - - - E&xit - &Salir - - - Quit application - Salir del programa - - - &About %1 - &Acerca de %1 - - - Show information about %1 - Mostrar información sobre %1 - - - About &Qt - Acerca de &Qt - - - Show information about Qt - Mostrar información sobre Qt - - - Modify configuration options for %1 - Modificar las opciones de configuración para %1 - - - Create a new wallet - Crear una nueva billetera - - - &Minimize - &Minimizar - - - Wallet: - Billetera: - - - Network activity disabled. - A substring of the tooltip. - Actividad de red deshabilitada. - - - Proxy is <b>enabled</b>: %1 - Proxy <b>habilitado</b>: %1 - - - Send coins to a Bitcoin address - Enviar monedas a una dirección de Bitcoin - - - Backup wallet to another location - Realizar copia de seguridad de la billetera en otra ubicación - - - Change the passphrase used for wallet encryption - Cambiar la frase de contraseña utilizada para encriptar la billetera - - - &Send - &Enviar - - - &Receive - &Recibir - - - &Options… - &Opciones... - - - &Encrypt Wallet… - &Encriptar billetera… - - - Encrypt the private keys that belong to your wallet - Encriptar las llaves privadas que pertenecen a tu billetera - - - &Backup Wallet… - &Realizar copia de seguridad de la billetera - - - &Change Passphrase… - &Cambiar contraseña... - - - Sign &message… - Firmar &mensaje... - - - Sign messages with your Bitcoin addresses to prove you own them - Firmar un mensaje para provar que usted es dueño de esta dirección - - - &Verify message… - &Verificar mensaje... - - - Verify messages to ensure they were signed with specified Bitcoin addresses - Verificar mensajes comprobando que están firmados con direcciones Bitcoin concretas - - - &Load PSBT from file… - &Cargar TBPF desde el archivo... - - - Open &URI… - Abrir &URI… - - - Close Wallet… - Cerrar Billetera... - - - Create Wallet… - Crear Billetera... - - - Close All Wallets… - Cerrar todas las billeteras... - - - &File - &Archivo - - - &Settings - &Configuración - - - &Help - &Ayuda - - - Tabs toolbar - Barra de pestañas - - - Syncing Headers (%1%)… - Sincronizando cabeceras (1%1%) - - - Synchronizing with network… - Sincronizando con la red... - - - Indexing blocks on disk… - Indexando bloques en disco... - - - Processing blocks on disk… - Procesando bloques en disco... - - - Connecting to peers… - Conectando con pares... - - - Request payments (generates QR codes and bitcoin: URIs) - Solicitar pagos (genera códigos QR y URI de tipo "bitcoin:") - - - Show the list of used sending addresses and labels - Mostrar la lista de direcciones de envío y etiquetas - - - Show the list of used receiving addresses and labels - Mostrar la lista de direcciones de recepción y etiquetas - - - &Command-line options - &Opciones de línea de comandos - - - Processed %n block(s) of transaction history. - - Se procesó %n bloque del historial de transacciones. - Se procesaron %n bloques del historial de transacciones. - - - - %1 behind - %1 atrás - - - Catching up… - Poniéndose al día... - - - Last received block was generated %1 ago. - El último bloque recibido se generó hace %1. - - - Transactions after this will not yet be visible. - Las transacciones posteriores aún no estarán visibles. - - - Warning - Advertencia - - - Information - Información - - - Up to date - Actualizado - - - Load Partially Signed Bitcoin Transaction - Cargar transacción de Bitcoin parcialmente firmada - - - Load PSBT from &clipboard… - Cargar TBPF desde el &portapapeles... - - - Load Partially Signed Bitcoin Transaction from clipboard - Cargar una transacción de Bitcoin parcialmente firmada desde el portapapeles - - - Node window - Ventana del nodo - - - Open node debugging and diagnostic console - Abrir la consola de depuración y diagnóstico del nodo - - - &Sending addresses - &Direcciones de envío - - - &Receiving addresses - &Direcciones de recepción - - - Open a bitcoin: URI - Abrir un URI de tipo "bitcoin:" - - - Open Wallet - Abrir billetera - - - Open a wallet - Abrir una billetera - - - Close wallet - Cerrar billetera - - - Restore Wallet… - Name of the menu item that restores wallet from a backup file. - Restaurar billetera… - - - Restore a wallet from a backup file - Status tip for Restore Wallet menu item - Restaurar una billetera desde un archivo de copia de seguridad - - - Close all wallets - Cerrar todas las billeteras - - - Migrate Wallet - Migrar billetera - - - Migrate a wallet - Migrar una billetera - - - Show the %1 help message to get a list with possible Bitcoin command-line options - Mostrar el mensaje de ayuda %1 para obtener una lista de las posibles opciones de línea de comandos de Bitcoin - - - &Mask values - &Ocultar valores - - - Mask the values in the Overview tab - Ocultar los valores en la pestaña de vista general - - - No wallets available - No hay billeteras disponibles - - - Wallet Data - Name of the wallet data file format. - Datos de la billetera - - - Load Wallet Backup - The title for Restore Wallet File Windows - Cargar copia de seguridad de billetera - - - Restore Wallet - Title of pop-up window shown when the user is attempting to restore a wallet. - Restaurar billetera - - - Wallet Name - Label of the input field where the name of the wallet is entered. - Nombre de la billetera - - - &Window - &Ventana - - - Zoom - Acercar - - - Main Window - Ventana principal - - - %1 client - Cliente %1 - - - &Hide - &Ocultar - - - S&how - &Mostrar - - - %n active connection(s) to Bitcoin network. - A substring of the tooltip. - - %n conexión activa con la red de Bitcoin. - %n conexiones activas con la red de Bitcoin. - - - - Click for more actions. - A substring of the tooltip. "More actions" are available via the context menu. - Hacer clic para ver más acciones. - - - Show Peers tab - A context menu item. The "Peers tab" is an element of the "Node window". - Mostrar pestaña de pares - - - Disable network activity - A context menu item. - Deshabilitar actividad de red - - - Enable network activity - A context menu item. The network activity was disabled previously. - Habilitar actividad de red - - - Pre-syncing Headers (%1%)… - Presincronizando encabezados (%1%)... - - - Error creating wallet - Error al crear billetera - - - Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets) - No se puede crear una billetera nueva, ya que el software se compiló sin compatibilidad con sqlite (requerida para billeteras basadas en descriptores) - - - Warning: %1 - Advertencia: %1 - - - Date: %1 - - Fecha: %1 - - - - Amount: %1 - - Importe: %1 - - - - Wallet: %1 - - Billetera: %1 - - - - Type: %1 - - Tipo: %1 - - - - Label: %1 - - Etiqueta %1 - - - - Address: %1 - - Dirección: %1 - - - - Sent transaction - Transacción enviada - - - Incoming transaction - Transacción entrante - - - HD key generation is <b>enabled</b> - La generación de clave HD está <b>habilitada</b> - - - HD key generation is <b>disabled</b> - La generación de clave HD está <b>deshabilitada</b> - - - Private key <b>disabled</b> - Clave privada <b>deshabilitada</b> - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - La billetera está <b>encriptada</b> y actualmente <b>desbloqueda</b> - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - La billetera está <b>encriptada</b> y actualmente <b>bloqueda</b> - - - Original message: - Mensaje original: - - - - UnitDisplayStatusBarControl - - Unit to show amounts in. Click to select another unit. - Unidad en la que se muestran los importes. Haz clic para seleccionar otra unidad. - - - - CoinControlDialog - - Coin Selection - Selección de monedas - - - Quantity: - Cantidad: - - - Amount: - Importe: - - - Fee: - Comisión: - - - After Fee: - Después de la comisión: - - - Change: - Cambio: - - - (un)select all - (des)marcar todos - - - Tree mode - Modo árbol - - - List mode - Modo lista - - - Amount - Importe - - - Received with label - Recibido con etiqueta - - - Received with address - Recibido con dirección - - - Date - Fecha - - - Confirmations - Confirmaciones - - - Confirmed - Confirmado - - - Copy amount - Copiar importe - - - &Copy address - &Copiar dirección - - - Copy &label - Copiar &etiqueta - - - Copy &amount - Copiar &importe - - - Copy transaction &ID and output index - Copiar &identificador de transacción e índice de salidas - - - L&ock unspent - &Bloquear importe no gastado - - - &Unlock unspent - &Desbloquear importe no gastado - - - Copy quantity - Copiar cantidad - - - Copy fee - Copiar comisión - - - Copy after fee - Copiar después de la comisión - - - Copy bytes - Copiar bytes - - - Copy change - Copiar cambio - - - (%1 locked) - (%1 bloqueado) - - - Can vary +/- %1 satoshi(s) per input. - Puede variar +/- %1 satoshi(s) por entrada. - - - (no label) - (sin etiqueta) - - - change from %1 (%2) - cambio desde %1 (%2) - - - (change) - (cambio) - - - - CreateWalletActivity - - Create Wallet - Title of window indicating the progress of creation of a new wallet. - Crear billetera - - - Creating Wallet <b>%1</b>… - Descriptive text of the create wallet progress window which indicates to the user which wallet is currently being created. - Creando billetera <b>%1</b>… - - - Create wallet failed - Fallo al crear la billetera - - - Create wallet warning - Advertencia al crear la billetera - - - Can't list signers - No se puede hacer una lista de firmantes - - - Too many external signers found - Se encontraron demasiados firmantes externos - - - - LoadWalletsActivity - - Load Wallets - Title of progress window which is displayed when wallets are being loaded. - Cargar billeteras - - - Loading wallets… - Descriptive text of the load wallets progress window which indicates to the user that wallets are currently being loaded. - Cargando billeteras... - - - - MigrateWalletActivity - - Migrate wallet - Migrar billetera - - - Are you sure you wish to migrate the wallet <i>%1</i>? - ¿Seguro deseas migrar la billetera <i>%1</i>? - - - Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made. -If this wallet contains any watchonly scripts, a new wallet will be created which contains those watchonly scripts. -If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts. - -The migration process will create a backup of the wallet before migrating. This backup file will be named <wallet name>-<timestamp>.legacy.bak and can be found in the directory for this wallet. In the event of an incorrect migration, the backup can be restored with the "Restore Wallet" functionality. - La migración de la billetera la convertirá en una o más billeteras basadas en descriptores. Será necesario realizar una nueva copia de seguridad de la billetera. -Si esta billetera contiene scripts solo de observación, se creará una nueva billetera que los contenga. -Si esta billetera contiene scripts solucionables pero no de observación, se creará una nueva billetera diferente que los contenga. - -El proceso de migración creará una copia de seguridad de la billetera antes de proceder. Este archivo de copia de seguridad se llamará <wallet name>-<timestamp>.legacy.bak y se encontrará en el directorio de esta billetera. En caso de que la migración falle, se puede restaurar la copia de seguridad con la funcionalidad "Restaurar billetera". - - - Migrate Wallet - Migrar billetera - - - Migrating Wallet <b>%1</b>… - Migrando billetera <b>%1</b>… - - - The wallet '%1' was migrated successfully. - La migración de la billetera "%1" se realizó correctamente. - - - Watchonly scripts have been migrated to a new wallet named '%1'. - Los scripts solo de observación se migraron a una nueva billetera llamada "%1". - - - Solvable but not watched scripts have been migrated to a new wallet named '%1'. - Los scripts solucionables pero no de observación se migraron a una nueva billetera llamada "%1". - - - Migration failed - Migración errónea - - - Migration Successful - Migración correcta - - - - OpenWalletActivity - - Open wallet failed - Fallo al abrir billetera - - - Open wallet warning - Advertencia al abrir billetera - - - Open Wallet - Title of window indicating the progress of opening of a wallet. - Abrir billetera - - - Opening Wallet <b>%1</b>… - Descriptive text of the open wallet progress window which indicates to the user which wallet is currently being opened. - Abriendo billetera <b>%1</b>... - - - - RestoreWalletActivity - - Restore Wallet - Title of progress window which is displayed when wallets are being restored. - Restaurar billetera - - - Restoring Wallet <b>%1</b>… - Descriptive text of the restore wallets progress window which indicates to the user that wallets are currently being restored. - Restaurando billetera <b>%1</b>… - - - Restore wallet failed - Title of message box which is displayed when the wallet could not be restored. - Error al restaurar la billetera - - - Restore wallet warning - Title of message box which is displayed when the wallet is restored with some warning. - Advertencia al restaurar billetera - - - Restore wallet message - Title of message box which is displayed when the wallet is successfully restored. - Mensaje al restaurar billetera - - - - WalletController - - Close wallet - Cerrar billetera - - - Are you sure you wish to close the wallet <i>%1</i>? - ¿Seguro deseas cerrar la billetera <i>%1</i>? - - - Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. - Cerrar la billetera durante demasiado tiempo puede causar la resincronización de toda la cadena si el podado está habilitado. - - - Close all wallets - Cerrar todas las billeteras - - - Are you sure you wish to close all wallets? - ¿Seguro quieres cerrar todas las billeteras? - - - - CreateWalletDialog - - Create Wallet - Crear billetera - - - You are one step away from creating your new wallet! - Estás a un paso de crear tu nueva billetera. - - - Please provide a name and, if desired, enable any advanced options - Escribe un nombre y, si quieres, activa las opciones avanzadas. - - - Wallet Name - Nombre de la billetera - - - Wallet - Billetera - - - Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice. - Encriptar la billetera. La billetera se encriptará con una frase de contraseña de tu elección. - - - Encrypt Wallet - Encriptar billetera - - - Advanced Options - Opciones avanzadas - - - Disable private keys for this wallet. Wallets with private keys disabled will have no private keys and cannot have an HD seed or imported private keys. This is ideal for watch-only wallets. - Desactivar las claves privadas para esta billetera. Las billeteras con claves privadas desactivadas no tendrán claves privadas y no podrán tener ninguna semilla HD ni claves privadas importadas. Esto es ideal para billeteras solo de observación. - - - Disable Private Keys - Desactivar las claves privadas - - - Make a blank wallet. Blank wallets do not initially have private keys or scripts. Private keys and addresses can be imported, or an HD seed can be set, at a later time. - Crea una billetera en blanco. Las billeteras en blanco inicialmente no tienen llaves privadas ni scripts. Las llaves privadas y las direcciones pueden ser importadas o se puede establecer una semilla HD más tarde. - - - Make Blank Wallet - Crear billetera en blanco - - - Use an external signing device such as a hardware wallet. Configure the external signer script in wallet preferences first. - Usa un dispositivo de firma externo, por ejemplo, una billetera de hardware. Configura primero el script del firmante externo en las preferencias de la billetera. - - - External signer - Firmante externo - - - Create - Crear - - - Compiled without external signing support (required for external signing) - "External signing" means using devices such as hardware wallets. - Compilado sin compatibilidad con firma externa (requerida para la firma externa) - - - - EditAddressDialog - - Edit Address - Editar dirección - - - &Label - &Etiqueta - - - The label associated with this address list entry - La etiqueta asociada con esta entrada en la lista de direcciones - - - The address associated with this address list entry. This can only be modified for sending addresses. - La dirección asociada con esta entrada en la lista de direcciones. Solo se puede modificar para las direcciones de envío. - - - &Address - &Dirección - - - New sending address - Nueva dirección de envío - - - Edit receiving address - Editar dirección de recepción - - - Edit sending address - Editar dirección de envío - - - The entered address "%1" is not a valid Bitcoin address. - La dirección ingresada "%1" no es una dirección de Bitcoin válida. - - - Address "%1" already exists as a receiving address with label "%2" and so cannot be added as a sending address. - La dirección "%1" ya existe como dirección de recepción con la etiqueta "%2" y, por lo tanto, no se puede agregar como dirección de envío. - - - The entered address "%1" is already in the address book with label "%2". - La dirección ingresada "%1" ya está en la libreta de direcciones con la etiqueta "%2". - - - Could not unlock wallet. - No se pudo desbloquear la billetera. - - - New key generation failed. - Error al generar clave nueva. - - - - FreespaceChecker - - A new data directory will be created. - Se creará un nuevo directorio de datos. - - - name - nombre - - - Directory already exists. Add %1 if you intend to create a new directory here. - El directorio ya existe. Agrega %1 si deseas crear un nuevo directorio aquí. - - - Path already exists, and is not a directory. - Ruta de acceso existente, pero no es un directorio. - - - Cannot create data directory here. - No se puede crear un directorio de datos aquí. - - - - Intro - - %n GB of space available - - %n GB de espacio disponible - %n GB de espacio disponible - - - - (of %n GB needed) - - (de %n GB necesario) - (de %n GB necesarios) - - - - (%n GB needed for full chain) - - (%n GB necesario para completar la cadena) - (%n GB necesarios para completar la cadena) - - - - Choose data directory - Elegir directorio de datos - - - At least %1 GB of data will be stored in this directory, and it will grow over time. - Se almacenarán al menos %1 GB de datos en este directorio, que aumentarán con el tiempo. - - - Approximately %1 GB of data will be stored in this directory. - Se almacenarán aproximadamente %1 GB de datos en este directorio. - - - (sufficient to restore backups %n day(s) old) - Explanatory text on the capability of the current prune target. - - (suficiente para restaurar copias de seguridad de %n día de antigüedad) - (suficiente para restaurar copias de seguridad de %n días de antigüedad) - - - - %1 will download and store a copy of the Bitcoin block chain. - %1 descargará y almacenará una copia de la cadena de bloques de Bitcoin. - - - The wallet will also be stored in this directory. - La billetera también se almacenará en este directorio. - - - Error: Specified data directory "%1" cannot be created. - Error: No se puede crear el directorio de datos especificado "%1" . - - - Welcome - Te damos la bienvenida - - - Welcome to %1. - Te damos la bienvenida a %1. - - - As this is the first time the program is launched, you can choose where %1 will store its data. - Como es la primera vez que se ejecuta el programa, puedes elegir dónde %1 almacenará los datos. - - - Limit block chain storage to - Limitar el almacenamiento de la cadena de bloques a - - - Reverting this setting requires re-downloading the entire blockchain. It is faster to download the full chain first and prune it later. Disables some advanced features. - Para revertir esta configuración, se debe descargar de nuevo la cadena de bloques completa. Es más rápido descargar la cadena completa y podarla después. Desactiva algunas funciones avanzadas. - - - This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off. - La sincronización inicial consume muchos recursos y es posible que exponga problemas de hardware en la computadora que anteriormente pasaron desapercibidos. Cada vez que ejecutes %1, seguirá descargando desde el punto en el que quedó. - - - When you click OK, %1 will begin to download and process the full %4 block chain (%2 GB) starting with the earliest transactions in %3 when %4 initially launched. - Al hacer clic en OK, %1 iniciará el proceso de descarga y procesará la cadena de bloques %4 completa (%2 GB), empezando con la transacción más antigua en %3 cuando %4 se ejecutó inicialmente. - - - If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low. - Si elegiste la opción de limitar el almacenamiento de la cadena de bloques (podado), los datos históricos se deben descargar y procesar de igual manera, pero se eliminarán después para disminuir el uso del disco. - - - Use the default data directory - Usar el directorio de datos predeterminado - - - Use a custom data directory: - Usar un directorio de datos personalizado: - - - - HelpMessageDialog - - version - versión - - - About %1 - Acerca de %1 - - - Command-line options - Opciones de línea de comandos - - - - ShutdownWindow - - %1 is shutting down… - %1 se está cerrando... - - - Do not shut down the computer until this window disappears. - No apagues la computadora hasta que desaparezca esta ventana. - - - - ModalOverlay - - Form - Formulario - - - Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. - Es posible que las transacciones recientes aún no sean visibles y, por lo tanto, el saldo de la billetera podría ser incorrecto. Esta información será correcta una vez que la billetera haya terminado de sincronizarse con la red de Bitcoin, como se detalla abajo. - - - Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. - La red no aceptará si se intenta gastar bitcoins afectados por las transacciones que aún no se muestran. - - - Number of blocks left - Número de bloques restantes - - - Unknown… - Desconocido... - - - calculating… - calculando... - - - Last block time - Hora del último bloque - - - Progress - Progreso - - - Progress increase per hour - Avance del progreso por hora - - - Estimated time left until synced - Tiempo estimado restante hasta la sincronización - - - Hide - Ocultar - - - %1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain. - %1 se está sincronizando actualmente. Descargará encabezados y bloques de pares, y los validará hasta alcanzar el extremo de la cadena de bloques. - - - Unknown. Syncing Headers (%1, %2%)… - Desconocido. Sincronizando encabezados (%1, %2%)… - - - Unknown. Pre-syncing Headers (%1, %2%)… - Desconocido. Presincronizando encabezados (%1, %2%)… - - - - OpenURIDialog - - Open bitcoin URI - Abrir URI de bitcoin - - - Paste address from clipboard - Tooltip text for button that allows you to paste an address that is in your clipboard. - Pegar dirección desde el portapapeles - - - - OptionsDialog - - Options - Opciones - - - &Main - &Principal - - - Automatically start %1 after logging in to the system. - Iniciar automáticamente %1 después de iniciar sesión en el sistema. - - - &Start %1 on system login - &Iniciar %1 al iniciar sesión en el sistema - - - Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain. - Al activar el podado, se reduce considerablemente el espacio de disco necesario para almacenar las transacciones. Todos los bloques aún se validan completamente. Para revertir esta opción, se requiere descargar de nuevo toda la cadena de bloques. - - - Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. - Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. - Tamaño máximo de la caché de la base de datos. Una caché más grande puede contribuir a una sincronización más rápida, después de lo cual el beneficio es menos pronunciado para la mayoría de los casos de uso. Disminuir el tamaño de la caché reducirá el uso de la memoria. La memoria del mempool no utilizada se comparte para esta caché. - - - Size of &database cache - Tamaño de la caché de la &base de datos - - - Number of script &verification threads - Número de subprocesos de &verificación de scripts - - - Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! - Ruta completa a un script compatible con %1 (p. ej., C:\Descargas\hwi.exe o /Usuarios/Tú/Descargas/hwi.py). Advertencia: ¡El malware podría robarte tus monedas! - - - Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. - Abre el puerto del cliente de Bitcoin en el enrutador automáticamente. Esto solo funciona cuando el enrutador soporta NAT-PMP o PCP y está activo. El puerto externo podría ser elegido al azar. - - - Map port using PCP or NA&T-PMP - Mapear el puerto usando NAT-PMP - - - IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) - Dirección IP del proxy (por ejemplo, IPv4: 127.0.0.1 / IPv6: ::1) - - - Shows if the supplied default SOCKS5 proxy is used to reach peers via this network type. - Muestra si el proxy SOCKS5 por defecto suministrado se utiliza para llegar a los pares a través de este tipo de red. - - - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu. - Minimizar en vez de salir de la aplicación cuando la ventana está cerrada. Cuando se activa esta opción, la aplicación solo se cerrará después de seleccionar "Salir" en el menú. - - - Font in the Overview tab: - Fuente en la pestaña "Vista general": - - - Options set in this dialog are overridden by the command line: - Las opciones establecidas en este diálogo serán anuladas por la línea de comandos: - - - Open the %1 configuration file from the working directory. - Abrir el archivo de configuración %1 en el directorio de trabajo. - - - Open Configuration File - Abrir archivo de configuración - - - Reset all client options to default. - Restablecer todas las opciones del cliente a los valores predeterminados. - - - &Reset Options - &Restablecer opciones - - - &Network - &Red - - - Prune &block storage to - Podar el almacenamiento de &bloques a - - - Reverting this setting requires re-downloading the entire blockchain. - Para revertir esta configuración, se debe descargar de nuevo la cadena de bloques completa. - - - Set the number of script verification threads. Negative values correspond to the number of cores you want to leave free to the system. - Tooltip text for Options window setting that sets the number of script verification threads. Explains that negative values mean to leave these many cores free to the system. - Establece el número de subprocesos de verificación de scripts. Los valores negativos corresponden al número de núcleos que se desea dejar libres al sistema. - - - (0 = auto, <0 = leave that many cores free) - (0 = auto, <0 = deja esta cantidad de núcleos libres) - - - This allows you or a third party tool to communicate with the node through command-line and JSON-RPC commands. - Tooltip text for Options window setting that enables the RPC server. - Esto te permite a ti o a una herramienta de terceros comunicarse con el nodo a través de la línea de comandos y los comandos JSON-RPC. - - - Enable R&PC server - An Options window setting to enable the RPC server. - Activar servidor R&PC - - - W&allet - &Billetera - - - Whether to set subtract fee from amount as default or not. - Tooltip text for Options window setting that sets subtracting the fee from a sending amount as default. - Si se resta o no la comisión del importe por defecto. - - - Subtract &fee from amount by default - An Options window setting to set subtracting the fee from a sending amount as default. - Restar &comisión del importe por defecto - - - Expert - Experto - - - Enable coin &control features - Habilitar funciones de &control de monedas - - - If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. - Si deshabilitas el gasto del cambio sin confirmar, no se puede usar el cambio de una transacción hasta que esta tenga al menos una confirmación. Esto también afecta cómo se calcula el saldo. - - - &Spend unconfirmed change - &Gastar cambio sin confirmar - - - Enable &PSBT controls - An options window setting to enable PSBT controls. - Activar controles de &TBPF - - - Whether to show PSBT controls. - Tooltip text for options window setting that enables PSBT controls. - Si se muestran los controles de TBPF. - - - External Signer (e.g. hardware wallet) - Firmante externo (p. ej., billetera de hardware) - - - &External signer script path - &Ruta al script del firmante externo - - - Accept connections from outside. - Aceptar conexiones externas. - - - Allow incomin&g connections - &Permitir conexiones entrantes - - - Connect to the Bitcoin network through a SOCKS5 proxy. - Conectarse a la red de Bitcoin a través de un proxy SOCKS5. - - - &Connect through SOCKS5 proxy (default proxy): - &Conectarse a través del proxy SOCKS5 (proxy predeterminado): - - - Proxy &IP: - &IP del proxy: - - - &Port: - &Puerto: - - - Port of the proxy (e.g. 9050) - Puerto del proxy (p. ej., 9050) - - - Used for reaching peers via: - Usado para conectarse con pares a través de: - - - &Window - &Ventana - - - Show the icon in the system tray. - Mostrar el ícono en la bandeja del sistema. - - - &Show tray icon - &Mostrar el ícono de la bandeja - - - Show only a tray icon after minimizing the window. - Mostrar solo un ícono de bandeja después de minimizar la ventana. - - - &Minimize to the tray instead of the taskbar - &Minimizar a la bandeja en vez de la barra de tareas - - - M&inimize on close - &Minimizar al cerrar - - - &Display - &Visualización - - - User Interface &language: - &Idioma de la interfaz de usuario: - - - The user interface language can be set here. This setting will take effect after restarting %1. - El idioma de la interfaz de usuario puede establecerse aquí. Esta configuración surtirá efecto después de reiniciar %1. - - - &Unit to show amounts in: - &Unidad en la que se muestran los importes: - - - Choose the default subdivision unit to show in the interface and when sending coins. - Elegir la unidad de subdivisión predeterminada para mostrar en la interfaz y al enviar monedas. - - - Third-party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |. - Las URL de terceros (por ejemplo, un explorador de bloques) que aparecen en la pestaña de transacciones como elementos del menú contextual. El hash de la transacción remplaza el valor %s en la URL. Varias URL se separan con una barra vertical (|). - - - &Third-party transaction URLs - &URL de transacciones de terceros - - - Whether to show coin control features or not. - Si se muestran o no las funcionalidades de control de monedas. - - - Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services. - Conectarse a la red de Bitcoin a través de un proxy SOCKS5 independiente para los servicios onion de Tor. - - - Use separate SOCKS&5 proxy to reach peers via Tor onion services: - Usar un proxy SOCKS&5 independiente para comunicarse con pares a través de los servicios onion de Tor: - - - &Cancel - &Cancelar - - - Compiled without external signing support (required for external signing) - "External signing" means using devices such as hardware wallets. - Compilado sin compatibilidad con firma externa (requerida para la firma externa) - - - default - predeterminado - - - none - ninguno - - - Confirm options reset - Window title text of pop-up window shown when the user has chosen to reset options. - Confirmar restablecimiento de opciones - - - Client restart required to activate changes. - Text explaining that the settings changed will not come into effect until the client is restarted. - Es necesario reiniciar el cliente para activar los cambios. - - - Current settings will be backed up at "%1". - Text explaining to the user that the client's current settings will be backed up at a specific location. %1 is a stand-in argument for the backup location's path. - Se realizará una copia de seguridad de la configuración actual en "%1". - - - Client will be shut down. Do you want to proceed? - Text asking the user to confirm if they would like to proceed with a client shutdown. - El cliente se cerrará. ¿Quieres continuar? - - - Configuration options - Window title text of pop-up box that allows opening up of configuration file. - Opciones de configuración - - - The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file. - Explanatory text about the priority order of instructions considered by client. The order from high to low being: command-line, configuration file, GUI settings. - El archivo de configuración se usa para especificar opciones avanzadas del usuario, que remplazan la configuración de la GUI. Además, las opciones de la línea de comandos remplazarán este archivo de configuración. - - - Continue - Continuar - - - Cancel - Cancelar - - - The configuration file could not be opened. - No se pudo abrir el archivo de configuración. - - - This change would require a client restart. - Estos cambios requieren reiniciar el cliente. - - - The supplied proxy address is invalid. - La dirección del proxy proporcionada es inválida. - - - - OptionsModel - - Could not read setting "%1", %2. - No se puede leer la configuración "%1", %2. - - - - OverviewPage - - Form - Formulario - - - 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. - La información mostrada puede estar desactualizada. La billetera se sincroniza automáticamente con la red de Bitcoin después de establecer una conexión, pero este proceso aún no se ha completado. - - - Watch-only: - Solo de observación: - - - Available: - Disponible: - - - Your current spendable balance - Tu saldo disponible para gastar actualmente - - - Pending: - Pendiente: - - - Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance - Total de transacciones que aún se deben confirmar y que no se contabilizan dentro del saldo disponible para gastar - - - Immature: - Inmaduro: - - - Mined balance that has not yet matured - Saldo minado que aún no ha madurado - - - Balances - Saldos - - - Your current total balance - Tu saldo total actual - - - Your current balance in watch-only addresses - Tu saldo actual en direcciones solo de observación - - - Spendable: - Gastable: - - - Recent transactions - Transacciones recientes - - - Unconfirmed transactions to watch-only addresses - Transacciones sin confirmar hacia direcciones solo de observación - - - Mined balance in watch-only addresses that has not yet matured - Saldo minado en direcciones solo de observación que aún no ha madurado - - - Current total balance in watch-only addresses - Saldo total actual en direcciones solo de observación - - - Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings->Mask values. - Modo de privacidad activado para la pestaña de vista general. Para mostrar los valores, anula la selección de "Configuración->Ocultar valores". - - - - PSBTOperationsDialog - - PSBT Operations - Operaciones TBPF - - - Sign Tx - Firmar transacción - - - Broadcast Tx - Transmitir transacción - - - Copy to Clipboard - Copiar al portapapeles - - - Save… - Guardar... - - - Close - Cerrar - - - Failed to load transaction: %1 - Error al cargar la transacción: %1 - - - Failed to sign transaction: %1 - Error al firmar la transacción: %1 - - - Cannot sign inputs while wallet is locked. - No se pueden firmar entradas mientras la billetera está bloqueada. - - - Could not sign any more inputs. - No se pudieron firmar más entradas. - - - Signed %1 inputs, but more signatures are still required. - Se firmaron %1 entradas, pero aún se requieren más firmas. - - - Signed transaction successfully. Transaction is ready to broadcast. - La transacción se firmó correctamente y está lista para transmitirse. - - - Unknown error processing transaction. - Error desconocido al procesar la transacción. - - - Transaction broadcast successfully! Transaction ID: %1 - ¡La transacción se transmitió correctamente! Identificador de transacción: %1 - - - Transaction broadcast failed: %1 - Error al transmitir la transacción: %1 - - - PSBT copied to clipboard. - TBPF copiada al portapapeles. - - - Save Transaction Data - Guardar datos de la transacción - - - Partially Signed Transaction (Binary) - Expanded name of the binary PSBT file format. See: BIP 174. - Transacción parcialmente firmada (binario) - - - PSBT saved to disk. - TBPF guardada en el disco. - - - Sends %1 to %2 - Envía %1 a %2 - - - own address - dirección propia - - - Unable to calculate transaction fee or total transaction amount. - No se puede calcular la comisión o el importe total de la transacción. - - - Pays transaction fee: - Paga comisión de transacción: - - - Total Amount - Importe total - - - or - o - - - Transaction has %1 unsigned inputs. - La transacción tiene %1 entradas sin firmar. - - - Transaction is missing some information about inputs. - Falta información sobre las entradas de la transacción. - - - Transaction still needs signature(s). - La transacción aún necesita firma(s). - - - (But no wallet is loaded.) - (Pero no se cargó ninguna billetera). - - - (But this wallet cannot sign transactions.) - (Pero esta billetera no puede firmar transacciones). - - - (But this wallet does not have the right keys.) - (Pero esta billetera no tiene las claves adecuadas). - - - Transaction is fully signed and ready for broadcast. - La transacción se firmó completamente y está lista para transmitirse. - - - Transaction status is unknown. - El estado de la transacción es desconocido. - - - - PaymentServer - - Payment request error - Error en la solicitud de pago - - - Cannot start bitcoin: click-to-pay handler - No se puede iniciar el controlador "bitcoin: click-to-pay" - - - URI handling - Gestión de URI - - - 'bitcoin://' is not a valid URI. Use 'bitcoin:' instead. - "bitcoin://" no es un URI válido. Usa "bitcoin:" en su lugar. - - - Cannot process payment request because BIP70 is not supported. -Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored. -If you are receiving this error you should request the merchant provide a BIP21 compatible URI. - No se puede procesar la solicitud de pago porque no existe compatibilidad con BIP70. -Debido a los fallos de seguridad generalizados en BIP70, se recomienda encarecidamente ignorar las instrucciones del comerciante para cambiar de billetera. -Si recibes este error, debes solicitar al comerciante que te proporcione un URI compatible con BIP21. - - - URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters. - No se puede analizar el URI. Esto se puede deber a una dirección de Bitcoin inválida o a parámetros de URI con formato incorrecto. - - - Payment request file handling - Gestión del archivo de solicitud de pago - - - - PeerTableModel - - User Agent - Title of Peers Table column which contains the peer's User Agent string. - Agente de usuario - - - Peer - Title of Peers Table column which contains a unique number used to identify a connection. - Par - - - Age - Title of Peers Table column which indicates the duration (length of time) since the peer connection started. - Antigüedad - - - Direction - Title of Peers Table column which indicates the direction the peer connection was initiated from. - Dirección - - - Sent - Title of Peers Table column which indicates the total amount of network information we have sent to the peer. - Enviado - - - Received - Title of Peers Table column which indicates the total amount of network information we have received from the peer. - Recibido - - - Address - Title of Peers Table column which contains the IP/Onion/I2P address of the connected peer. - Dirección - - - Type - Title of Peers Table column which describes the type of peer connection. The "type" describes why the connection exists. - Tipo - - - Network - Title of Peers Table column which states the network the peer connected through. - Red - - - Inbound - An Inbound Connection from a Peer. - Entrante - - - Outbound - An Outbound Connection to a Peer. - Saliente - - - - QRImageWidget - - &Save Image… - &Guardar imagen... - - - &Copy Image - &Copiar imagen - - - Resulting URI too long, try to reduce the text for label / message. - El URI resultante es demasiado largo, así que trata de reducir el texto de la etiqueta o el mensaje. - - - Error encoding URI into QR Code. - Fallo al codificar URI en código QR. - - - QR code support not available. - La compatibilidad con el código QR no está disponible. - - - Save QR Code - Guardar código QR - - - PNG Image - Expanded name of the PNG file format. See: https://en.wikipedia.org/wiki/Portable_Network_Graphics. - Imagen PNG - - - - RPCConsole - - N/A - N/D - - - Client version - Versión del cliente - - - &Information - &Información - - - Datadir - Directorio de datos - - - To specify a non-default location of the data directory use the '%1' option. - Para especificar una ubicación no predeterminada del directorio de datos, usa la opción "%1". - - - Blocksdir - Directorio de bloques - - - To specify a non-default location of the blocks directory use the '%1' option. - Para especificar una ubicación no predeterminada del directorio de bloques, usa la opción "%1". - - - Startup time - Tiempo de inicio - - - Network - Red - - - Name - Nombre - - - Number of connections - Número de conexiones - - - Local Addresses - Direcciones locales - - - Network addresses that your Bitcoin node is currently using to communicate with other nodes. - Direcciones de red que tu nodo Bitcoin usa actualmente para comunicarse con otros nodos. - - - Block chain - Cadena de bloques - - - Memory Pool - Pool de memoria - - - Current number of transactions - Número total de transacciones - - - Memory usage - Uso de memoria - - - Wallet: - Billetera: - - - (none) - (ninguna) - - - &Reset - &Restablecer - - - Received - Recibido - - - Sent - Enviado - - - &Peers - &Pares - - - Banned peers - Pares prohibidos - - - Select a peer to view detailed information. - Selecciona un par para ver la información detallada. - - - Hide Peers Detail - Ocultar detalles de pares - - - The transport layer version: %1 - Versión de la capa de transporte: %1 - - - Transport - Transporte - - - Session ID - Identificador de sesión - - - Version - Versión - - - Whether we relay transactions to this peer. - Si retransmitimos las transacciones a este par. - - - Transaction Relay - Retransmisión de transacción - - - Starting Block - Bloque inicial - - - Synced Headers - Encabezados sincronizados - - - Synced Blocks - Bloques sincronizados - - - Last Transaction - Última transacción - - - The mapped Autonomous System used for diversifying peer selection. - El sistema autónomo asignado que se usó para diversificar la selección de pares. - - - Mapped AS - SA asignado - - - Whether we relay addresses to this peer. - Tooltip text for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - Si retransmitimos las direcciones a este par. - - - Address Relay - Text title for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - Retransmisión de direcciones - - - The total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Tooltip text for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - El número total de direcciones recibidas desde este par que se procesaron (excluye las direcciones desestimadas debido a la limitación de volumen). - - - The total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Tooltip text for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - El número total de direcciones recibidas desde este par que se desestimaron (no se procesaron) debido a la limitación de volumen. - - - Addresses Processed - Text title for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Direcciones procesadas - - - Addresses Rate-Limited - Text title for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Direcciones desestimadas por limitación de volumen - - - User Agent - Agente de usuario - - - Node window - Ventana del nodo - - - Current block height - Altura del bloque actual - - - Open the %1 debug log file from the current data directory. This can take a few seconds for large log files. - Abrir el archivo de registro de depuración %1 en el directorio de datos actual. Esto puede tardar unos segundos para los archivos de registro grandes. - - - Decrease font size - Disminuir tamaño de fuente - - - Increase font size - Aumentar tamaño de fuente - - - Permissions - Permisos - - - The direction and type of peer connection: %1 - La dirección y el tipo de conexión entre pares: %1 - - - Direction/Type - Dirección/Tipo - - - The BIP324 session ID string in hex. - La cadena del identificador de sesión BIP324 en formato hexadecimal. - - - The network protocol this peer is connected through: IPv4, IPv6, Onion, I2P, or CJDNS. - El protocolo de red mediante el cual está conectado este par: IPv4, IPv6, Onion, I2P o CJDNS. - - - Services - Servicios - - - High bandwidth BIP152 compact block relay: %1 - Retransmisión de bloques compactos BIP152 en banda ancha: %1 - - - High Bandwidth - Banda ancha - - - Connection Time - Tiempo de conexión - - - Elapsed time since a novel block passing initial validity checks was received from this peer. - Tiempo transcurrido desde que se recibió de este par un nuevo bloque que superó las comprobaciones de validez iniciales. - - - Last Block - Último bloque - - - Elapsed time since a novel transaction accepted into our mempool was received from this peer. - Tooltip text for the Last Transaction field in the peer details area. - Tiempo transcurrido desde que se recibió de este par una nueva transacción aceptada en nuestra mempool. - - - Last Send - Último envío - - - Last Receive - Última recepción - - - Ping Time - Tiempo de ping - - - The duration of a currently outstanding ping. - La duración de un ping actualmente pendiente. - - - Ping Wait - Espera de ping - - - Min Ping - Ping mínimo - - - Time Offset - Desfase temporal - - - Last block time - Hora del último bloque - - - &Open - &Abrir - - - &Console - &Consola - - - &Network Traffic - &Tráfico de red - - - Totals - Totales - - - Debug log file - Archivo del registro de depuración - - - Clear console - Borrar consola - - - In: - Entrada: - - - Out: - Salida: - - - Inbound: initiated by peer - Explanatory text for an inbound peer connection. - Entrante: iniciada por el par - - - Outbound Full Relay: default - Explanatory text for an outbound peer connection that relays all network information. This is the default behavior for outbound connections. - Retransmisión completa saliente: predeterminada - - - Outbound Block Relay: does not relay transactions or addresses - Explanatory text for an outbound peer connection that relays network information about blocks and not transactions or addresses. - Retransmisión de bloque saliente: no retransmite transacciones o direcciones - - - Outbound Manual: added using RPC %1 or %2/%3 configuration options - Explanatory text for an outbound peer connection that was established manually through one of several methods. The numbered arguments are stand-ins for the methods available to establish manual connections. - Manual saliente: agregada usando las opciones de configuración %1 o %2/%3 de RPC - - - Outbound Feeler: short-lived, for testing addresses - Explanatory text for a short-lived outbound peer connection that is used to test the aliveness of known addresses. - Feeler saliente: de corta duración, para probar direcciones - - - Outbound Address Fetch: short-lived, for soliciting addresses - Explanatory text for a short-lived outbound peer connection that is used to request addresses from a peer. - Recuperación de dirección saliente: de corta duración, para solicitar direcciones - - - detecting: peer could be v1 or v2 - Explanatory text for "detecting" transport type. - Detectando: el par puede ser v1 o v2 - - - v1: unencrypted, plaintext transport protocol - Explanatory text for v1 transport type. - v1: protocolo de transporte de texto simple sin encriptar - - - v2: BIP324 encrypted transport protocol - Explanatory text for v2 transport type. - v2: protocolo de transporte encriptado BIP324 - - - we selected the peer for high bandwidth relay - Seleccionamos el par para la retransmisión de banda ancha - - - the peer selected us for high bandwidth relay - El par nos seleccionó para la retransmisión de banda ancha - - - no high bandwidth relay selected - No se seleccionó la retransmisión de banda ancha - - - &Copy address - Context menu action to copy the address of a peer. - &Copiar dirección - - - &Disconnect - &Desconectar - - - 1 &hour - 1 &hora - - - 1 d&ay - 1 &día - - - 1 &week - 1 &semana - - - 1 &year - 1 &año - - - &Copy IP/Netmask - Context menu action to copy the IP/Netmask of a banned peer. IP/Netmask is the combination of a peer's IP address and its Netmask. For IP address, see: https://en.wikipedia.org/wiki/IP_address. - &Copiar IP/Máscara de red - - - &Unban - &Levantar prohibición - - - Network activity disabled - Actividad de red desactivada - - - None - Ninguno - - - Executing command without any wallet - Ejecutar comando sin ninguna billetera - - - Node window - [%1] - Ventana de nodo - [%1] - - - Executing command using "%1" wallet - Ejecutar comando usando la billetera "%1" - - - Welcome to the %1 RPC console. -Use up and down arrows to navigate history, and %2 to clear screen. -Use %3 and %4 to increase or decrease the font size. -Type %5 for an overview of available commands. -For more information on using this console, type %6. - -%7WARNING: 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.%8 - RPC console welcome message. Placeholders %7 and %8 are style tags for the warning content, and they are not space separated from the rest of the text intentionally. - Te damos la bienvenida a la consola RPC de %1. -Utiliza las flechas hacia arriba y abajo para navegar por el historial y %2 para borrar la pantalla. -Utiliza %3 y %4 para aumentar o disminuir el tamaño de la fuente. -Escribe %5 para ver los comandos disponibles. -Para obtener más información sobre cómo usar esta consola, escribe %6. - -%7 ADVERTENCIA: Los estafadores suelen decirles a los usuarios que escriban comandos aquí para robarles el contenido de sus billeteras. No uses esta consola sin entender completamente las ramificaciones de un comando.%8 - - - Executing… - A console message indicating an entered command is currently being executed. - Ejecutando... - - - (peer: %1) - (par: %1) - - - via %1 - a través de %1 - - - Yes - - - - To - A - - - From - De - - - Ban for - Prohibir por - - - Never - Nunca - - - Unknown - Desconocido - - - - ReceiveCoinsDialog - - &Amount: - &Importe: - - - &Label: - &Etiqueta: - - - &Message: - &Mensaje: - - - 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. - Mensaje opcional para adjuntar a la solicitud de pago, que se mostrará cuando se abra la solicitud. Nota: Este mensaje no se enviará con el pago a través de la red de Bitcoin. - - - An optional label to associate with the new receiving address. - Una etiqueta opcional para asociar con la nueva dirección de recepción. - - - Use this form to request payments. All fields are <b>optional</b>. - Usa este formulario para solicitar pagos. Todos los campos son <b>opcionales</b>. - - - An optional amount to request. Leave this empty or zero to not request a specific amount. - Un importe opcional para solicitar. Déjalo vacío o ingresa cero para no solicitar un importe específico. - - - 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. - Una etiqueta opcional para asociar con la nueva dirección de recepción (puedes usarla para identificar una factura). También se adjunta a la solicitud de pago. - - - An optional message that is attached to the payment request and may be displayed to the sender. - Un mensaje opcional que se adjunta a la solicitud de pago y que puede mostrarse al remitente. - - - &Create new receiving address - &Crear nueva dirección de recepción - - - Clear all fields of the form. - Borrar todos los campos del formulario. - - - Clear - Borrar - - - Requested payments history - Historial de pagos solicitados - - - Show the selected request (does the same as double clicking an entry) - Mostrar la solicitud seleccionada (equivale a hacer doble clic en una entrada) - - - Show - Mostrar - - - Remove the selected entries from the list - Eliminar las entradas seleccionadas de la lista - - - Remove - Eliminar - - - Copy &URI - Copiar &URI - - - &Copy address - &Copiar dirección - - - Copy &label - Copiar &etiqueta - - - Copy &message - Copiar &mensaje - - - Copy &amount - Copiar &importe - - - Not recommended due to higher fees and less protection against typos. - No se recomienda debido a las altas comisiones y la poca protección contra errores tipográficos. - - - Generates an address compatible with older wallets. - Genera una dirección compatible con billeteras más antiguas. - - - Generates a native segwit address (BIP-173). Some old wallets don't support it. - Genera una dirección segwit nativa (BIP-173). No es compatible con algunas billeteras antiguas. - - - Bech32m (BIP-350) is an upgrade to Bech32, wallet support is still limited. - Bech32m (BIP-350) es una actualización de Bech32. La compatibilidad con la billetera todavía es limitada. - - - Could not unlock wallet. - No se pudo desbloquear la billetera. - - - Could not generate new %1 address - No se pudo generar nueva dirección %1 - - - - ReceiveRequestDialog - - Request payment to … - Solicitar pago a... - - - Address: - Dirección: - - - Amount: - Importe: - - - Label: - Etiqueta: - - - Message: - Mensaje: - - - Wallet: - Billetera: - - - Copy &URI - Copiar &URI - - - Copy &Address - Copiar &dirección - - - &Verify - &Verificar - - - Verify this address on e.g. a hardware wallet screen - Verificar esta dirección, por ejemplo, en la pantalla de una billetera de hardware. - - - &Save Image… - &Guardar imagen... - - - Payment information - Información del pago - - - Request payment to %1 - Solicitar pago a %1 - - - - RecentRequestsTableModel - - Date - Fecha - - - Label - Etiqueta - - - Message - Mensaje - - - (no label) - (sin etiqueta) - - - (no message) - (sin mensaje) - - - (no amount requested) - (no se solicitó un importe) - - - Requested - Solicitado - - - - SendCoinsDialog - - Send Coins - Enviar monedas - - - Coin Control Features - Funciones de control de monedas - - - automatically selected - seleccionado automáticamente - - - Insufficient funds! - Fondos insuficientes - - - Quantity: - Cantidad: - - - Amount: - Importe: - - - Fee: - Comisión: - - - After Fee: - Después de la comisión: - - - Change: - Cambio: - - - If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. - Si se activa, pero la dirección de cambio está vacía o es inválida, el cambio se enviará a una dirección generada recientemente. - - - Custom change address - Dirección de cambio personalizada - - - Transaction Fee: - Comisión de transacción: - - - 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. - Si usas la opción "fallbackfee", la transacción puede tardar varias horas o días en confirmarse (o nunca hacerlo). Considera elegir la comisión de forma manual o espera hasta que hayas validado la cadena completa. - - - Warning: Fee estimation is currently not possible. - Advertencia: En este momento no se puede estimar la comisión. - - - per kilobyte - por kilobyte - - - Hide - Ocultar - - - Recommended: - Recomendado: - - - Custom: - Personalizado: - - - Send to multiple recipients at once - Enviar a múltiples destinatarios a la vez - - - Add &Recipient - Agregar &destinatario - - - Clear all fields of the form. - Borrar todos los campos del formulario. - - - Inputs… - Entradas... - - - Choose… - Elegir... - - - Hide transaction fee settings - Ocultar configuración de la comisión de transacción - - - Specify a custom fee per kB (1,000 bytes) of the transaction's virtual size. - -Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satoshis per kvB" for a transaction size of 500 virtual bytes (half of 1 kvB) would ultimately yield a fee of only 50 satoshis. - Especifica una comisión personalizada por kB (1000 bytes) del tamaño virtual de la transacción. - -Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por kvB" para una transacción de 500 bytes virtuales (la mitad de 1 kvB) produciría, en última instancia, una comisión de solo 50 satoshis. - - - 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. - Cuando hay menos volumen de transacciones que espacio en los bloques, los mineros y los nodos de retransmisión pueden aplicar una comisión mínima. Está bien pagar solo esta comisión mínima, pero ten en cuenta que esto puede ocasionar que una transacción nunca se confirme una vez que haya más demanda de transacciones de Bitcoin de la que puede procesar la red. - - - A too low fee might result in a never confirming transaction (read the tooltip) - Si la comisión es demasiado baja, es posible que la transacción nunca se confirme (leer la información en pantalla). - - - (Smart fee not initialized yet. This usually takes a few blocks…) - (La comisión inteligente no se ha inicializado todavía. Esto tarda normalmente algunos bloques…) - - - Confirmation time target: - Objetivo de tiempo de confirmación: - - - Enable Replace-By-Fee - Activar "Remplazar por comisión" - - - With Replace-By-Fee (BIP-125) you can increase a transaction's fee after it is sent. Without this, a higher fee may be recommended to compensate for increased transaction delay risk. - Con la función "Remplazar por comisión" (BIP-125), puedes aumentar la comisión de una transacción después de enviarla. Sin esta, es posible que se recomiende una comisión más alta para compensar el mayor riesgo de retraso de la transacción. - - - Clear &All - Borrar &todo - - - Balance: - Saldo: - - - Confirm the send action - Confirmar el envío - - - S&end - &Enviar - - - Copy quantity - Copiar cantidad - - - Copy amount - Copiar importe - - - Copy fee - Copiar comisión - - - Copy after fee - Copiar después de la comisión - - - Copy bytes - Copiar bytes - - - Copy change - Copiar cambio - - - %1 (%2 blocks) - %1 (%2 bloques) - - - Sign on device - "device" usually means a hardware wallet. - Firmar en el dispositivo - - - Connect your hardware wallet first. - Conecta primero tu billetera de hardware. - - - Set external signer script path in Options -> Wallet - "External signer" means using devices such as hardware wallets. - Establecer la ruta al script del firmante externo en "Opciones -> Billetera" - - - Cr&eate Unsigned - &Crear sin firmar - - - Creates a Partially Signed Bitcoin Transaction (PSBT) for use with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet. - Crea una transacción de Bitcoin parcialmente firmada (TBPF) para usarla, por ejemplo, con una billetera %1 sin conexión o una billetera de hardware compatible con TBPF. - - - %1 to '%2' - %1 a "%2" - - - %1 to %2 - %1 a %2 - - - To review recipient list click "Show Details…" - Para consultar la lista de destinatarios, haz clic en "Mostrar detalles..." - - - Sign failed - Error de firma - - - External signer not found - "External signer" means using devices such as hardware wallets. - No se encontró el dispositivo firmante externo - - - External signer failure - "External signer" means using devices such as hardware wallets. - Error de firmante externo - - - Save Transaction Data - Guardar datos de la transacción - - - Partially Signed Transaction (Binary) - Expanded name of the binary PSBT file format. See: BIP 174. - Transacción parcialmente firmada (binario) - - - PSBT saved - Popup message when a PSBT has been saved to a file - TBPF guardada - - - External balance: - Saldo externo: - - - or - o - - - You can increase the fee later (signals Replace-By-Fee, BIP-125). - Puedes aumentar la comisión después (indica "Remplazar por comisión", BIP-125). - - - 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. - Text to inform a user attempting to create a transaction of their current options. At this stage, a user can only create a PSBT. This string is displayed when private keys are disabled and an external signer is not available. - Revisa por favor la propuesta de transacción. Esto producirá una transacción de Bitcoin parcialmente firmada (TBPF) que puedes guardar o copiar y, luego, firmar; por ejemplo, una billetera %1 fuera de línea o una billetera de hardware compatible con TBPF. - - - %1 from wallet '%2' - %1 desde billetera "%2" - - - Do you want to create this transaction? - Message displayed when attempting to create a transaction. Cautionary text to prompt the user to verify that the displayed transaction details represent the transaction the user intends to create. - ¿Quieres crear esta transacción? - - - Please, review your transaction. You can create and send this transaction or create 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. - Text to inform a user attempting to create a transaction of their current options. At this stage, a user can send their transaction or create a PSBT. This string is displayed when both private keys and PSBT controls are enabled. - Revisa la transacción. Puedes crear y enviar esta transacción de Bitcoin parcialmente firmada (TBPF), que además puedes guardar o copiar y, luego, firmar; por ejemplo, una billetera %1 sin conexión o una billetera de hardware compatible con TBPF. - - - Please, review your transaction. - Text to prompt a user to review the details of the transaction they are attempting to send. - Revisa la transacción. - - - Transaction fee - Comisión de transacción - - - Not signalling Replace-By-Fee, BIP-125. - No indica "Remplazar por comisión", BIP-125. - - - Total Amount - Importe total - - - Unsigned Transaction - PSBT copied - Caption of "PSBT has been copied" messagebox - Transacción sin firmar - - - The PSBT has been copied to the clipboard. You can also save it. - Se copió la TBPF al portapapeles. También puedes guardarla. - - - PSBT saved to disk - TBPF guardada en el disco - - - Confirm send coins - Confirmar el envío de monedas - - - Watch-only balance: - Saldo solo de observación: - - - The recipient address is not valid. Please recheck. - La dirección del destinatario no es válida. Revísala. - - - The amount to pay must be larger than 0. - El importe por pagar tiene que ser mayor que 0. - - - The amount exceeds your balance. - El importe sobrepasa el saldo. - - - The total exceeds your balance when the %1 transaction fee is included. - El total sobrepasa el saldo cuando se incluye la comisión de transacción de %1. - - - Duplicate address found: addresses should only be used once each. - Se encontró una dirección duplicada: las direcciones solo se deben usar una vez. - - - Transaction creation failed! - Fallo al crear la transacción - - - A fee higher than %1 is considered an absurdly high fee. - Una comisión mayor que %1 se considera absurdamente alta. - - - Estimated to begin confirmation within %n block(s). - - Se estima que empiece a confirmarse dentro de %n bloque. - Se estima que empiece a confirmarse dentro de %n bloques. - - - - Warning: Invalid Bitcoin address - Advertencia: Dirección de Bitcoin inválida - - - Warning: Unknown change address - Advertencia: Dirección de cambio desconocida - - - Confirm custom change address - Confirmar la dirección de cambio personalizada - - - 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? - La dirección que seleccionaste para el cambio no es parte de esta billetera. Una parte o la totalidad de los fondos en la billetera se enviará a esta dirección. ¿Seguro deseas continuar? - - - (no label) - (sin etiqueta) - - - - SendCoinsEntry - - A&mount: - &Importe: - - - Pay &To: - Pagar &a: - - - &Label: - &Etiqueta: - - - Choose previously used address - Seleccionar dirección usada anteriormente - - - The Bitcoin address to send the payment to - La dirección de Bitcoin a la que se enviará el pago - - - Paste address from clipboard - Pegar dirección desde el portapapeles - - - Remove this entry - Eliminar esta entrada - - - The amount to send in the selected unit - El importe que se enviará en la unidad seleccionada - - - 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. - La comisión se deducirá del importe que se envía. El destinatario recibirá menos bitcoins que los que ingreses en el campo del importe. Si se seleccionan varios destinatarios, la comisión se dividirá por igual. - - - S&ubtract fee from amount - &Restar la comisión del importe - - - Use available balance - Usar el saldo disponible - - - Message: - Mensaje: - - - Enter a label for this address to add it to the list of used addresses - Ingresar una etiqueta para esta dirección a fin de agregarla a la lista de direcciones utilizadas - - - 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. - Un mensaje adjunto al URI de tipo "bitcoin:" que se almacenará con la transacción a modo de referencia. Nota: Este mensaje no se enviará por la red de Bitcoin. - - - - SendConfirmationDialog - - Send - Enviar - - - Create Unsigned - Crear sin firmar - - - - SignVerifyMessageDialog - - Signatures - Sign / Verify a Message - Firmas: firmar o verificar un mensaje - - - &Sign Message - &Firmar mensaje - - - You can sign messages/agreements with your legacy (P2PKH) 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. - Puedes firmar mensajes o acuerdos con tus direcciones tipo legacy (P2PKH) para demostrar que puedes recibir los bitcoins que se envíen a ellas. Ten cuidado de no firmar cosas confusas o al azar, ya que los ataques de phishing pueden tratar de engañarte para que les envíes la firma con tu identidad. Firma solo declaraciones totalmente detalladas con las que estés de acuerdo. - - - The Bitcoin address to sign the message with - La dirección de Bitcoin con la que se firmará el mensaje - - - Choose previously used address - Seleccionar dirección usada anteriormente - - - Paste address from clipboard - Pegar dirección desde el portapapeles - - - Enter the message you want to sign here - Ingresar aquí el mensaje que deseas firmar - - - Signature - Firma - - - Copy the current signature to the system clipboard - Copiar la firma actual al portapapeles del sistema - - - Sign the message to prove you own this Bitcoin address - Firmar el mensaje para demostrar que esta dirección de Bitcoin te pertenece - - - Sign &Message - Firmar &mensaje - - - Reset all sign message fields - Restablecer todos los campos de firma de mensaje - - - Clear &All - Borrar &todo - - - &Verify Message - &Verificar mensaje - - - Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction! - Ingresa la dirección del destinatario, el mensaje (recuerda copiar los saltos de línea, espacios, tabulaciones, etc. con exactitud) y la firma a continuación para verificar el mensaje. Ten cuidado de no leer en la firma más de lo que está en el mensaje firmado en sí, para evitar ser víctima de un engaño por ataque de intermediario. Ten en cuenta que esto solo demuestra que el firmante recibe con la dirección; no puede demostrar la condición de remitente de ninguna transacción. - - - The Bitcoin address the message was signed with - La dirección de Bitcoin con la que se firmó el mensaje - - - The signed message to verify - El mensaje firmado para verificar - - - The signature given when the message was signed - La firma que se dio cuando el mensaje se firmó - - - Verify the message to ensure it was signed with the specified Bitcoin address - Verifica el mensaje para asegurarte de que se firmó con la dirección de Bitcoin especificada. - - - Verify &Message - Verificar &mensaje - - - Reset all verify message fields - Restablecer todos los campos de verificación de mensaje - - - Click "Sign Message" to generate signature - Hacer clic en "Firmar mensaje" para generar una firma - - - The entered address is invalid. - La dirección ingresada es inválida. - - - Please check the address and try again. - Revisa la dirección e intenta de nuevo. - - - The entered address does not refer to a legacy (P2PKH) key. Message signing for SegWit and other non-P2PKH address types is not supported in this version of %1. Please check the address and try again. - La dirección ingresada no se refiere a una clave tipo legacy (P2PKH). La firma de mensajes para direcciones SegWit y de otros tipos que no sean P2PKH no es compatible con esta versión de %1. Comprueba la dirección e inténtalo de nuevo. - - - Wallet unlock was cancelled. - Se canceló el desbloqueo de la billetera. - - - No error - Sin error - - - Private key for the entered address is not available. - La clave privada para la dirección ingresada no está disponible. - - - Message signing failed. - Error al firmar el mensaje. - - - Message signed. - Mensaje firmado. - - - The signature could not be decoded. - La firma no pudo decodificarse. - - - Please check the signature and try again. - Comprueba la firma e intenta de nuevo. - - - The signature did not match the message digest. - La firma no coincide con la síntesis del mensaje. - - - Message verification failed. - Falló la verificación del mensaje. - - - Message verified. - Mensaje verificado. - - - - SplashScreen - - (press q to shutdown and continue later) - (Presionar q para apagar y seguir luego) - - - press q to shutdown - Presionar q para apagar - - - - TransactionDesc - - conflicted with a transaction with %1 confirmations - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that conflicts with a confirmed transaction. - Hay un conflicto con una transacción con %1 confirmaciones - - - 0/unconfirmed, in memory pool - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is in the memory pool. - 0/sin confirmar, en el pool de memoria - - - 0/unconfirmed, not in memory pool - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is not in the memory pool. - 0/sin confirmar, no está en el pool de memoria - - - abandoned - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an abandoned transaction. - abandonada - - - %1/unconfirmed - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in at least one block, but less than 6 blocks. - %1/sin confirmar - - - %1 confirmations - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in 6 or more blocks. - %1 confirmaciones - - - Status - Estado - - - Date - Fecha - - - Source - Origen - - - Generated - Generado - - - From - De - - - unknown - desconocido - - - To - A - - - own address - dirección propia - - - watch-only - Solo de observación - - - label - etiqueta - - - Credit - Crédito - - - matures in %n more block(s) - - madura en %n bloque más - madura en %n bloques más - - - - not accepted - no aceptada - - - Debit - Débito - - - Total debit - Débito total - - - Total credit - Crédito total - - - Transaction fee - Comisión de transacción - - - Net amount - Importe neto - - - Message - Mensaje - - - Comment - Comentario - - - Transaction ID - Identificador de transacción - - - Transaction total size - Tamaño total de transacción - - - Transaction virtual size - Tamaño virtual de transacción - - - Output index - Índice de salida - - - %1 (Certificate was not verified) - %1 (El certificado no fue verificado) - - - Merchant - Comerciante - - - Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Las monedas generadas deben madurar %1 bloques antes de que se puedan gastar. Cuando generaste este bloque, se transmitió a la red para agregarlo a la cadena de bloques. Si no logra entrar a la cadena, su estado cambiará a "no aceptado" y no se podrá gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque a pocos segundos del tuyo. - - - Debug information - Información de depuración - - - Transaction - Transacción - - - Inputs - Entradas - - - Amount - Importe - - - true - verdadero - - - false - falso - - - - TransactionDescDialog - - This pane shows a detailed description of the transaction - En este panel se muestra una descripción detallada de la transacción - - - Details for %1 - Detalles para %1 - - - - TransactionTableModel - - Date - Fecha - - - Type - Tipo - - - Label - Etiqueta - - - Unconfirmed - Sin confirmar - - - Abandoned - Abandonada - - - Confirming (%1 of %2 recommended confirmations) - Confirmando (%1 de %2 confirmaciones recomendadas) - - - Confirmed (%1 confirmations) - Confirmada (%1 confirmaciones) - - - Conflicted - En conflicto - - - Immature (%1 confirmations, will be available after %2) - Inmadura (%1 confirmaciones; estará disponibles después de %2) - - - Generated but not accepted - Generada pero no aceptada - - - Received with - Recibida con - - - Received from - Recibida de - - - Sent to - Enviada a - - - Mined - Minada - - - watch-only - Solo de observación - - - (n/a) - (n/d) - - - (no label) - (sin etiqueta) - - - Transaction status. Hover over this field to show number of confirmations. - Estado de la transacción. Pasa el mouse sobre este campo para ver el número de confirmaciones. - - - Date and time that the transaction was received. - Fecha y hora en las que se recibió la transacción. - - - Type of transaction. - Tipo de transacción. - - - Whether or not a watch-only address is involved in this transaction. - Si una dirección solo de observación está involucrada en esta transacción o no. - - - User-defined intent/purpose of the transaction. - Intención o propósito de la transacción definidos por el usuario. - - - Amount removed from or added to balance. - Importe restado del saldo o sumado a este. - - - - TransactionView - - All - Todo - - - Today - Hoy - - - This week - Esta semana - - - This month - Este mes - - - Last month - Mes pasado - - - This year - Este año - - - Received with - Recibida con - - - Sent to - Enviada a - - - Mined - Minada - - - Other - Otra - - - Enter address, transaction id, or label to search - Ingresar la dirección, el identificador de transacción o la etiqueta para buscar - - - Min amount - Importe mínimo - - - Range… - Rango... - - - &Copy address - &Copiar dirección - - - Copy &label - Copiar &etiqueta - - - Copy &amount - Copiar &importe - - - Copy transaction &ID - Copiar &identificador de transacción - - - Copy &raw transaction - Copiar transacción &sin procesar - - - Copy full transaction &details - Copiar &detalles completos de la transacción - - - &Show transaction details - &Mostrar detalles de la transacción - - - Increase transaction &fee - Aumentar &comisión de transacción - - - A&bandon transaction - &Abandonar transacción - - - &Edit address label - &Editar etiqueta de dirección - - - Show in %1 - Transactions table context menu action to show the selected transaction in a third-party block explorer. %1 is a stand-in argument for the URL of the explorer. - Mostrar en %1 - - - Export Transaction History - Exportar historial de transacciones - - - Comma separated file - Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. - Archivo separado por comas - - - Confirmed - Confirmada - - - Watch-only - Solo de observación - - - Date - Fecha - - - Type - Tipo - - - Label - Etiqueta - - - Address - Dirección - - - ID - Identificador - - - Exporting Failed - Error al exportar - - - There was an error trying to save the transaction history to %1. - Ocurrió un error al intentar guardar el historial de transacciones en %1. - - - Exporting Successful - Exportación correcta - - - The transaction history was successfully saved to %1. - El historial de transacciones se guardó correctamente en %1. - - - Range: - Rango: - - - to - a - - - - WalletFrame - - No wallet has been loaded. -Go to File > Open Wallet to load a wallet. -- OR - - No se cargó ninguna billetera. -Ir a "Archivo > Abrir billetera" para cargar una. -- O - - - - Create a new wallet - Crear una nueva billetera - - - Unable to decode PSBT from clipboard (invalid base64) - No se puede decodificar la TBPF desde el portapapeles (Base64 inválida) - - - Load Transaction Data - Cargar datos de la transacción - - - Partially Signed Transaction (*.psbt) - Transacción parcialmente firmada (*.psbt) - - - PSBT file must be smaller than 100 MiB - El archivo de la TBPF debe ser más pequeño de 100 MiB - - - Unable to decode PSBT - No se puede decodificar TBPF - - - - WalletModel - - Send Coins - Enviar monedas - - - Fee bump error - Error de incremento de comisión - - - Increasing transaction fee failed - Fallo al incrementar la comisión de transacción - - - Do you want to increase the fee? - Asks a user if they would like to manually increase the fee of a transaction that has already been created. - ¿Deseas incrementar la comisión? - - - Current fee: - Comisión actual: - - - Increase: - Incremento: - - - New fee: - Nueva comisión: - - - 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. - Advertencia: Esta acción puede pagar la comisión adicional al reducir las salidas de cambio o agregar entradas, cuando sea necesario. Asimismo, puede agregar una nueva salida de cambio si aún no existe una. Estos cambios pueden filtrar potencialmente información privada. - - - Confirm fee bump - Confirmar incremento de comisión - - - Can't draft transaction. - No se puede crear un borrador de la transacción. - - - PSBT copied - TBPF copiada - - - Fee-bump PSBT copied to clipboard - TBPF con incremento de comisión copiada en el portapapeles - - - Can't sign transaction. - No se puede firmar la transacción. - - - Could not commit transaction - No se pudo confirmar la transacción - - - Signer error - Error de firmante - - - Can't display address - No se puede mostrar la dirección - - - - WalletView - - &Export - &Exportar - - - Export the data in the current tab to a file - Exportar los datos de la pestaña actual a un archivo - - - Backup Wallet - Realizar copia de seguridad de la billetera - - - Wallet Data - Name of the wallet data file format. - Datos de la billetera - - - Backup Failed - Copia de seguridad fallida - - - There was an error trying to save the wallet data to %1. - Ocurrió un error al intentar guardar los datos de la billetera en %1. - - - Backup Successful - Copia de seguridad correcta - - - The wallet data was successfully saved to %1. - Los datos de la billetera se guardaron correctamente en %1. - - - Cancel - Cancelar - - - - bitcoin-core - - The %s developers - Los desarrolladores de %s - - - %s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup. - %s dañado. Trata de usar la herramienta de la billetera de Bitcoin para rescatar o restaurar una copia de seguridad. - - - %s failed to validate the -assumeutxo snapshot state. This indicates a hardware problem, or a bug in the software, or a bad software modification that allowed an invalid snapshot to be loaded. As a result of this, the node will shut down and stop using any state that was built on the snapshot, resetting the chain height from %d to %d. On the next restart, the node will resume syncing from %d without using any snapshot data. Please report this incident to %s, including how you obtained the snapshot. The invalid snapshot chainstate will be left on disk in case it is helpful in diagnosing the issue that caused this error. - %s no pudo validar el estado de la instantánea -assumeutxo. Esto indica un problema de hardware, un error en el software o una modificación incorrecta del software que permitió que se cargara una instantánea inválida. Por consiguiente, el nodo se apagará y dejará de utilizar cualquier estado basado en la instantánea, restableciendo la altura de la cadena de %d a %d. En el siguiente reinicio, el nodo reanudará la sincronización desde %d sin usar datos de instantánea. Reporta este incidente a %s, indicando cómo obtuviste la instantánea. Se dejó el estado de cadena de la instantánea inválida en el disco por si resulta útil para diagnosticar el problema que causó este error. - - - %s request to listen on port %u. This port is considered "bad" and thus it is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for details and a full list. - %s solicitud para escuchar en el puerto%u. Este puerto se considera "malo" y, por lo tanto, es poco probable que algún par se conecte a él. Consulta doc/p2p-bad-ports.md para obtener detalles y una lista completa. - - - Cannot downgrade wallet from version %i to version %i. Wallet version unchanged. - No se puede pasar de la versión %i a la versión anterior %i. La versión de la billetera no tiene cambios. - - - 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. - No se puede actualizar una billetera dividida no HD de la versión %i a la versión %i sin actualizar para admitir el pool de claves anterior a la división. Usa la versión %i o no especifiques la versión. - - - Disk space for %s may not accommodate the block files. Approximately %u GB of data will be stored in this directory. - Es posible que el espacio en disco %s no tenga capacidad para los archivos de bloque. Aproximadamente %u GB de datos se almacenarán en este directorio. - - - Distributed under the MIT software license, see the accompanying file %s or %s - Distribuido bajo la licencia de software MIT; ver el archivo adjunto %s o %s. - - - Error loading wallet. Wallet requires blocks to be downloaded, and software does not currently support loading wallets while blocks are being downloaded out of order when using assumeutxo snapshots. Wallet should be able to load successfully after node sync reaches height %s - Error al cargar la billetera. Esta requiere que se descarguen bloques, y el software actualmente no admite la carga de billeteras mientras los bloques se descargan fuera de orden, cuando se usan instantáneas de assumeutxo. La billetera debería poder cargarse correctamente después de que la sincronización del nodo alcance la altura %s. - - - Error reading %s! Transaction data may be missing or incorrect. Rescanning wallet. - ¡Error al leer %s! Es probable que falten los datos de la transacción o que sean incorrectos. Rescaneando billetera. - - - Error starting/committing db txn for wallet transactions removal process - Error al iniciar/cometer el proceso de eliminación de base de datos de transacciones de monedero - - - Error: Dumpfile format record is incorrect. Got "%s", expected "format". - Error: El registro del formato del archivo de volcado es incorrecto. Se obtuvo "%s", mientras que se esperaba "formato". - - - Error: Dumpfile identifier record is incorrect. Got "%s", expected "%s". - Error: El registro del identificador del archivo de volcado es incorrecto. Se obtuvo "%s", mientras que se esperaba "%s". - - - Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s - Error: La versión del archivo de volcado no es compatible. Esta versión de la billetera de Bitcoin solo admite archivos de volcado de la versión 1. Se obtuvo un archivo de volcado con la versión %s - - - Error: Legacy wallets only support the "legacy", "p2sh-segwit", and "bech32" address types - Error: Las billeteras "legacy" solo admiten los tipos de dirección "legacy", "p2sh-segwit" y "bech32". - - - Error: Unable to produce descriptors for this legacy wallet. Make sure to provide the wallet's passphrase if it is encrypted. - Error: No se pueden producir descriptores para esta billetera tipo legacy. Asegúrate de proporcionar la frase de contraseña de la billetera si está encriptada. - - - File %s already exists. If you are sure this is what you want, move it out of the way first. - El archivo %s ya existe. Si definitivamente quieres hacerlo, quítalo primero. - - - Invalid or corrupt peers.dat (%s). If you believe this is a bug, please report it to %s. As a workaround, you can move the file (%s) out of the way (rename, move, or delete) to have a new one created on the next start. - El archivo peers.dat (%s) es inválido o está dañado. Si crees que se trata de un error, infórmalo a %s. Como alternativa, puedes quitar el archivo (%s) (renombrarlo, moverlo o eliminarlo) para que se cree uno nuevo en el siguiente inicio. - - - Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets - Valor no válido detectado para '-wallet' o '-nowallet'. -wallet' requiere un valor de cadena, mientras que '-nowallet' sólo acepta '1' para desactivar todos los monederos. - - - More than one onion bind address is provided. Using %s for the automatically created Tor onion service. - Se proporciona más de una dirección de enlace onion. Se está usando %s para el servicio onion de Tor creado automáticamente. - - - No dump file provided. To use createfromdump, -dumpfile=<filename> must be provided. - No se proporcionó el archivo de volcado. Para usar createfromdump, se debe proporcionar -dumpfile=<filename>. - - - No dump file provided. To use dump, -dumpfile=<filename> must be provided. - No se proporcionó el archivo de volcado. Para usar dump, se debe proporcionar -dumpfile=<filename>. - - - No wallet file format provided. To use createfromdump, -format=<format> must be provided. - No se proporcionó el formato de archivo de billetera. Para usar createfromdump, se debe proporcionar -format=<format>. - - - Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. - La opción '-upnp' está activada, pero el soporte UPnP se eliminó en la versión 29.0. Considera usar '-natpmp' en su lugar. - - - Please contribute if you find %s useful. Visit %s for further information about the software. - Contribuye si te parece que %s es útil. Visita %s para obtener más información sobre el software. - - - Prune configured below the minimum of %d MiB. Please use a higher number. - La poda se configuró por debajo del mínimo de %d MiB. Usa un valor más alto. - - - Prune mode is incompatible with -reindex-chainstate. Use full -reindex instead. - El modo de poda es incompatible con -reindex-chainstate. Usa en su lugar un -reindex completo. - - - Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node) - Poda: la última sincronización de la billetera sobrepasa los datos podados. Tienes que ejecutar -reindex (descarga toda la cadena de bloques de nuevo en caso de tener un nodo podado) - - - Rename of '%s' -> '%s' failed. You should resolve this by manually moving or deleting the invalid snapshot directory %s, otherwise you will encounter the same error again on the next startup. - Error al cambiar el nombre de "%s" a "%s". Para resolverlo, mueve o elimina manualmente el directorio %s de la instantánea no válida. De lo contrario, encontrarás el mismo error de nuevo en el siguiente inicio. - - - SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported - SQLiteDatabase: versión desconocida del esquema de la billetera sqlite %d. Solo se admite la versión %d. - - - The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct - La base de datos de bloques contiene un bloque que parece ser del futuro. Es posible que se deba a que la fecha y hora de la computadora están mal configuradas. Reconstruye la base de datos de bloques solo si tienes la certeza de que la fecha y hora de la computadora son correctas. - - - The transaction amount is too small to send after the fee has been deducted - El importe de la transacción es demasiado pequeño para enviarlo después de deducir la comisión - - - 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 - Este error podría ocurrir si esta billetera no se cerró correctamente y se cargó por última vez usando una compilación con una versión más reciente de Berkeley DB. Si es así, usa el software que cargó por última vez esta billetera. - - - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - Esta es una compilación preliminar de prueba. Úsala bajo tu propia responsabilidad. No la uses para aplicaciones comerciales o de minería. - - - This is the maximum transaction fee you pay (in addition to the normal fee) to prioritize partial spend avoidance over regular coin selection. - Esta es la comisión máxima de transacción que pagas (además de la comisión normal) para priorizar la elusión del gasto parcial sobre la selección regular de monedas. - - - This is the transaction fee you may discard if change is smaller than dust at this level - Esta es la comisión de transacción que puedes descartar si el cambio es más pequeño que el remanente en este nivel. - - - This is the transaction fee you may pay when fee estimates are not available. - Esta es la comisión de transacción que puedes pagar cuando los cálculos de comisiones no estén disponibles. - - - Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments. - La longitud total de la cadena de versión de red ( %i) supera la longitud máxima (%i). Reduce el número o tamaño de uacomments . - - - Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate. - No se pueden reproducir bloques. Tendrás que reconstruir la base de datos usando -reindex-chainstate. - - - Unknown wallet file format "%s" provided. Please provide one of "bdb" or "sqlite". - Se proporcionó un formato de archivo de billetera desconocido "%s". Proporciona uno entre "bdb" o "sqlite". - - - Unsupported category-specific logging level %1$s=%2$s. Expected %1$s=<category>:<loglevel>. Valid categories: %3$s. Valid loglevels: %4$s. - El nivel de registro de la categoría específica no es compatible: %1$s=%2$s. Se esperaba %1$s=<category>:<loglevel>. Categorías válidas: %3$s. Niveles de registro válidos: %4 $s. - - - Unsupported chainstate database format found. Please restart with -reindex-chainstate. This will rebuild the chainstate database. - El formato de la base de datos chainstate es incompatible. Reinicia con -reindex-chainstate para reconstruir la base de datos chainstate. - - - Wallet created successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. - La billetera se creó correctamente. El tipo de billetera "legacy" se está descontinuando, por lo que la asistencia para crear y abrir estas billeteras se eliminará en el futuro. - - - Wallet loaded successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. Legacy wallets can be migrated to a descriptor wallet with migratewallet. - La billetera se creó correctamente. El tipo de billetera "legacy" se está descontinuando, por lo que la asistencia para crear y abrir estas billeteras se eliminará en el futuro. Las billeteras "legacy" se pueden migrar a una billetera basada en descriptores con "migratewallet". - - - Warning: Dumpfile wallet format "%s" does not match command line specified format "%s". - Advertencia: El formato de la billetera del archivo de volcado "%s" no coincide con el formato especificado en la línea de comandos "%s". - - - Warning: Private keys detected in wallet {%s} with disabled private keys - Advertencia: Claves privadas detectadas en la billetera {%s} con claves privadas deshabilitadas - - - Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. - Advertencia: Al parecer no estamos completamente de acuerdo con nuestros pares. Es posible que tengas que realizar una actualización, o que los demás nodos tengan que hacerlo. - - - Witness data for blocks after height %d requires validation. Please restart with -reindex. - Los datos del testigo para los bloques después de la altura %d requieren validación. Reinicia con -reindex. - - - You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain - Tienes que reconstruir la base de datos usando -reindex para volver al modo sin poda. Esto volverá a descargar toda la cadena de bloques. - - - %s is set very high! - ¡El valor de %s es muy alto! - - - -maxmempool must be at least %d MB - -maxmempool debe ser por lo menos de %d MB - - - Cannot obtain a lock on directory %s. %s is probably already running. - No se puede obtener un bloqueo en el directorio %s. %s probablemente ya se está ejecutando - - - Cannot resolve -%s address: '%s' - No se puede resolver la dirección de -%s: "%s" - - - Cannot set -forcednsseed to true when setting -dnsseed to false. - No se puede establecer el valor de -forcednsseed con la variable true al establecer el valor de -dnsseed con la variable false. - - - Cannot set -peerblockfilters without -blockfilterindex. - No se puede establecer -peerblockfilters sin -blockfilterindex. - - - %s is set very high! Fees this large could be paid on a single transaction. - El valor establecido para %s es demasiado alto. Las comisiones tan grandes se podrían pagar en una sola transacción. - - - Cannot provide specific connections and have addrman find outgoing connections at the same time. - No se pueden proporcionar conexiones específicas y hacer que addrman encuentre conexiones salientes al mismo tiempo. - - - Error loading %s: External signer wallet being loaded without external signer support compiled - Error al cargar %s: Se está cargando la billetera firmante externa sin que se haya compilado la compatibilidad del firmante externo - - - Error reading %s! All keys read correctly, but transaction data or address metadata may be missing or incorrect. - Error al leer %s. Todas las claves se leyeron correctamente, pero es probable que falten los datos de la transacción o metadatos de direcciones, o bien que sean incorrectos. - - - Error: Address book data in wallet cannot be identified to belong to migrated wallets - Error: No se puede identificar si los datos de la libreta de direcciones en la billetera pertenecen a billeteras migradas - - - Error: Duplicate descriptors created during migration. Your wallet may be corrupted. - Error: Se crearon descriptores duplicados durante la migración. Tu billetera podría estar dañada. - - - Error: Transaction %s in wallet cannot be identified to belong to migrated wallets - Error: No se puede identificar si la transacción %s en la billetera pertenece a billeteras migradas - - - Failed to calculate bump fees, because unconfirmed UTXOs depend on enormous cluster of unconfirmed transactions. - No se pudo calcular la comisión de incremento porque las UTXO sin confirmar dependen de un grupo enorme de transacciones no confirmadas. - - - Failed to remove snapshot chainstate dir (%s). Manually remove it before restarting. - - No se pudo eliminar la instantánea chainstate dir (%s). Elimínala manualmente antes de reiniciar. - - - - Failed to rename invalid peers.dat file. Please move or delete it and try again. - No se pudo cambiar el nombre del archivo peers.dat inválido. Muévelo o elimínalo, e intenta de nuevo. - - - Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable %s. - Error al calcular la comisión. La opción "fallbackfee" está desactivada. Espera algunos bloques o activa %s. - - - Flushing block file to disk failed. This is likely the result of an I/O error. - Falló el volcado del archivo de bloques al disco. Es probable que se deba a un error de E/S. - - - Flushing undo file to disk failed. This is likely the result of an I/O error. - Falló el volcado del archivo para deshacer al disco. Es probable que se deba a un error de E/S. - - - Incompatible options: -dnsseed=1 was explicitly specified, but -onlynet forbids connections to IPv4/IPv6 - Opciones incompatibles: -dnsseed=1 se especificó explícitamente, pero -onlynet prohíbe conexiones a IPv4/IPv6. - - - Invalid amount for %s=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions) - Importe inválido para %s=<amount>: "%s" (debe ser al menos la comisión mínima de retransmisión de %s para evitar transacciones atascadas) - - - Maximum transaction weight is less than transaction weight without inputs - El peso máximo de la transacción es menor que el peso de la transacción sin entradas - - - Maximum transaction weight is too low, can not accommodate change output - El peso máximo de la transacción es demasiado bajo, por lo que no puede incluir la salida de cambio. - - - Outbound connections restricted to CJDNS (-onlynet=cjdns) but -cjdnsreachable is not provided - Las conexiones salientes están restringidas a CJDNS (-onlynet=cjdns), pero no se proporciona -cjdnsreachable - - - Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is explicitly forbidden: -onion=0 - Las conexiones salientes están restringidas a Tor (-onlynet=onion), pero el proxy para conectarse con la red Tor está explícitamente prohibido: -onion=0. - - - Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is not provided: none of -proxy, -onion or -listenonion is given - Las conexiones salientes están restringidas a Tor (-onlynet=onion), pero no se proporciona el proxy para conectarse con la red Tor: no se indican -proxy, -onion ni -listenonion. - - - Outbound connections restricted to i2p (-onlynet=i2p) but -i2psam is not provided - Las conexiones salientes están restringidas a i2p (-onlynet=i2p), pero no se proporciona -i2psam - - - Rename of '%s' -> '%s' failed. Cannot clean up the background chainstate leveldb directory. - Falló el cambio de nombre de ''%s" a ''%s". No se puede limpiar el directorio leveldb del estado de la cadena de fondo. - - - The combination of the pre-selected inputs and the wallet automatic inputs selection exceeds the transaction maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - La combinación de las entradas preseleccionadas y la selección automática de entradas de la billetera supera el peso máximo de la transacción. Intenta enviar un importe menor o consolidar manualmente las UTXO de la billetera. - - - The inputs size exceeds the maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - El tamaño de las entradas supera el peso máximo. Intenta enviar un importe menor o consolidar manualmente las UTXO de la billetera. - - - The preselected coins total amount does not cover the transaction target. Please allow other inputs to be automatically selected or include more coins manually - El monto total de las monedas preseleccionadas no cubre la meta de la transacción. Permite que se seleccionen automáticamente otras entradas o incluye más monedas manualmente. - - - Transaction requires one destination of non-0 value, a non-0 feerate, or a pre-selected input - La transacción requiere un destino de valor distinto de 0, una tasa de comisión distinta de 0, o una entrada preseleccionada. - - - UTXO snapshot failed to validate. Restart to resume normal initial block download, or try loading a different snapshot. - No se validó la instantánea de UTXO. Reinicia para reanudar la descarga de bloques inicial normal o intenta cargar una instantánea diferente. - - - Unconfirmed UTXOs are available, but spending them creates a chain of transactions that will be rejected by the mempool - Las UTXO sin confirmar están disponibles, pero si se gastan, se crea una cadena de transacciones que rechazará la mempool. - - - Unexpected legacy entry in descriptor wallet found. Loading wallet %s - -The wallet might have been tampered with or created with malicious intent. - - Se encontró una entrada inesperada tipo "legacy" en la billetera basada en descriptores. Cargando billetera%s - -Es posible que la billetera haya sido manipulada o creada con malas intenciones. - - - - Unrecognized descriptor found. Loading wallet %s - -The wallet might had been created on a newer version. -Please try running the latest software version. - - Se encontró un descriptor desconocido. Cargando billetera %s. - -La billetera se pudo hacer creado con una versión más reciente. -Intenta ejecutar la última versión del software. - - - - Your computer's date and time appear to be more than %d minutes out of sync with the network, this may lead to consensus failure. After you've confirmed your computer's clock, this message should no longer appear when you restart your node. Without a restart, it should stop showing automatically after you've connected to a sufficient number of new outbound peers, which may take some time. You can inspect the `timeoffset` field of the `getpeerinfo` and `getnetworkinfo` RPC methods to get more info. - La fecha y la hora de la computadora parecen estar más de %d minutos desincronizadas con la red, lo que puede producir un fallo de consenso. Después de confirmar el reloj de la computadora, este mensaje debería dejar de aparecer cuando reinicies el nodo. Sin reiniciar, debería dejar de mostrarse automáticamente después de que te hayas conectado a un número suficiente de nuevos pares salientes, lo que puede llevar cierto tiempo. Puedes inspeccionar el campo "timeoffset" de los métodos RPC "getpeerinfo" y "getnetworkinfo" para obtener más información. - - - -Unable to cleanup failed migration - -No se puede limpiar la migración fallida - - - -Unable to restore backup of wallet. - -No se puede restaurar la copia de seguridad de la billetera. - - - whitebind may only be used for incoming connections ("out" was passed) - whitebind solo puede utilizarse para conexiones entrantes (se ha pasado "out") - - - A fatal internal error occurred, see debug.log for details: - Ha ocurrido un error interno grave. Consulta debug.log para obtener más información: - - - Assumeutxo data not found for the given blockhash '%s'. - No se encontraron datos assumeutxo para el blockhash indicado "%s". - - - Block verification was interrupted - Se interrumpió la verificación de bloques - - - Cannot write to directory '%s'; check permissions. - No se puede escribir en el directorio '%s'; compruebe los permisos. - - - Config setting for %s only applied on %s network when in [%s] section. - La configuración para %s solo se aplica en la red %s cuando se encuentra en la sección [%s]. - - - Copyright (C) %i-%i - Derechos de autor (C) %i-%i - - - Corrupt block found indicating potential hardware failure. - Se encontró un bloque corrupto que indica un posible fallo del hardware. - - - Corrupted block database detected - Se detectó que la base de datos de bloques está dañada. - - - Could not find asmap file %s - No se pudo encontrar el archivo asmap %s - - - Could not parse asmap file %s - No se pudo analizar el archivo asmap %s - - - Disk space is too low! - ¡El espacio en disco es demasiado pequeño! - - - Done loading - Carga completa - - - Dump file %s does not exist. - El archivo de volcado %s no existe. - - - Elliptic curve cryptography sanity check failure. %s is shutting down. - Fallo en la prueba de cordura de la criptografía de curva elíptica. %s se apagará. - - - Error creating %s - Error al crear %s - - - Error initializing block database - Error al inicializar la base de datos de bloques - - - Error initializing wallet database environment %s! - Error al inicializar el entorno de la base de datos de la billetera %s. - - - Error loading %s - Error al cargar %s - - - Error loading %s: Private keys can only be disabled during creation - Error al cargar %s: Las claves privadas solo se pueden deshabilitar durante la creación - - - Error loading %s: Wallet corrupted - Error al cargar %s: billetera dañada - - - Error loading %s: Wallet requires newer version of %s - Error al cargar %s: la billetera requiere una versión más reciente de %s - - - Error loading block database - Error al cargar la base de datos de bloques - - - Error loading databases - Error cargando bases de datos - - - Error opening block database - Error al abrir la base de datos de bloques - - - Error opening coins database - Error al abrir la base de datos de monedas - - - Error reading configuration file: %s - Error al leer el archivo de configuración: %s - - - Error reading from database, shutting down. - Error al leer la base de datos. Se cerrará la aplicación. - - - Error reading next record from wallet database - Error al leer el siguiente registro de la base de datos de la billetera - - - Error: Cannot extract destination from the generated scriptpubkey - Error: No se puede extraer el destino del scriptpubkey generado - - - Error: Couldn't create cursor into database - Error: No se pudo crear el cursor en la base de datos - - - Error: Disk space is low for %s - Error: El espacio en disco es pequeño para %s - - - Error: Dumpfile checksum does not match. Computed %s, expected %s - Error: La suma de comprobación del archivo de volcado no coincide. Calculada:%s; prevista:%s. - - - Error: Failed to create new watchonly wallet - Error: No se pudo crear una billetera solo de observación - - - Error: Got key that was not hex: %s - Error: Se recibió una clave que no es hexadecimal (%s) - - - Error: Got value that was not hex: %s - Error: Se recibió un valor que no es hexadecimal (%s) - - - Error: Keypool ran out, please call keypoolrefill first - Error: El pool de claves se agotó. Invoca keypoolrefill primero. - - - Error: Missing checksum - Error: Falta la suma de comprobación - - - Error: No %s addresses available. - Error: No hay direcciones %s disponibles. - - - Error: This wallet already uses SQLite - Error: Esta billetera ya usa SQLite - - - Error: This wallet is already a descriptor wallet - Error: Esta billetera ya está basada en descriptores - - - Error: Unable to begin reading all records in the database - Error: No se pueden comenzar a leer todos los registros en la base de datos - - - Error: Unable to make a backup of your wallet - Error: No se puede realizar una copia de seguridad de la billetera - - - Error: Unable to parse version %u as a uint32_t - Error: No se puede analizar la versión %ucomo uint32_t - - - Error: Unable to read all records in the database - Error: No se pueden leer todos los registros en la base de datos - - - Error: Unable to read wallet's best block locator record - Error: No se pudo leer el registro del mejor localizador de bloques de la billetera. - - - Error: Unable to remove watchonly address book data - Error: No se pueden eliminar los datos de la libreta de direcciones solo de observación - - - Error: Unable to write data to disk for wallet %s - Error: No se pueden escribir datos en el disco para el monedero %s - - - Error: Unable to write record to new wallet - Error: No se puede escribir el registro en la nueva billetera - - - Error: Unable to write solvable wallet best block locator record - Error: No se pudo escribir el registro del mejor localizador de bloques de la billetera solucionable. - - - Error: Unable to write watchonly wallet best block locator record - Error: No se pudo escribir el registro del mejor localizador de bloques de la billetera solo de observación. - - - Error: database transaction cannot be executed for wallet %s - Error: la transacción de la base de datos no se puede ejecutar para la billetera %s - - - Failed to connect best block (%s). - No se pudo conectar el mejor bloque (%s). - - - Failed to disconnect block. - No se pudo desconectar el bloque. - - - Failed to listen on any port. Use -listen=0 if you want this. - Fallo al escuchar en todos los puertos. Usa -listen=0 si quieres hacerlo. - - - Failed to read block. - No se pudo leer el bloque. - - - Failed to rescan the wallet during initialization - Fallo al rescanear la billetera durante la inicialización - - - Failed to start indexes, shutting down.. - Error al iniciar índices, cerrando... - - - Failed to verify database - Fallo al verificar la base de datos - - - Failed to write block. - No se pudo escribir el bloque. - - - Failed to write to block index database. - Error al escribir en la base de datos del índice de bloques. - - - Failed to write to coin database. - Error al escribir en la base de datos de monedas. - - - Failed to write undo data. - Error al escribir datos para deshacer. - - - Failure removing transaction: %s - Error al eliminar la transacción: %s - - - Fee rate (%s) is lower than the minimum fee rate setting (%s) - La tasa de comisión (%s) es menor que el valor mínimo (%s) - - - Ignoring duplicate -wallet %s. - Ignorar duplicación de -wallet %s. - - - Importing… - Importando... - - - Incorrect or no genesis block found. Wrong datadir for network? - El bloque génesis es incorrecto o no se encontró. ¿El directorio de datos es equivocado para la red? - - - Initialization sanity check failed. %s is shutting down. - Fallo al inicializar la comprobación de estado. %s se cerrará. - - - Input not found or already spent - La entrada no se encontró o ya se gastó - - - Insufficient dbcache for block verification - Dbcache insuficiente para la verificación de bloques - - - Insufficient funds - Fondos insuficientes - - - Invalid -i2psam address or hostname: '%s' - Dirección o nombre de host de -i2psam inválido: "%s" - - - Invalid -onion address or hostname: '%s' - Dirección o nombre de host de -onion inválido: "%s" - - - Invalid -proxy address or hostname: '%s' - Dirección o nombre de host de -proxy inválido: "%s" - - - Invalid P2P permission: '%s' - Permiso P2P inválido: "%s" - - - Invalid amount for %s=<amount>: '%s' (must be at least %s) - Importe inválido para %s=<amount>: "%s" (debe ser por lo menos %s) - - - Invalid amount for %s=<amount>: '%s' - Importe inválido para %s=<amount>: "%s" - - - Invalid amount for -%s=<amount>: '%s' - Importe inválido para -%s=<amount>: "%s" - - - Invalid netmask specified in -whitelist: '%s' - Máscara de red inválida especificada en -whitelist: "%s" - - - Invalid port specified in %s: '%s' - Puerto no válido especificado en %s: "%s" - - - Invalid pre-selected input %s - La entrada preseleccionada no es válida %s - - - Listening for incoming connections failed (listen returned error %s) - Fallo al escuchar conexiones entrantes (la escucha devolvió el error %s) - - - Loading P2P addresses… - Cargando direcciones P2P... - - - Loading banlist… - Cargando lista de prohibiciones... - - - Loading block index… - Cargando índice de bloques... - - - Loading wallet… - Cargando billetera... - - - Maximum transaction weight must be between %d and %d - El peso máximo de la transacción debe estar entre %d y %d. - - - Missing amount - Falta el importe - - - Missing solving data for estimating transaction size - Faltan datos de resolución para estimar el tamaño de la transacción - - - Need to specify a port with -whitebind: '%s' - Se necesita especificar un puerto con -whitebind: "%s" - - - No addresses available - No hay direcciones disponibles - - - Not found pre-selected input %s - La entrada preseleccionada no se encontró %s - - - Not solvable pre-selected input %s - La entrada preseleccionada no se puede solucionar %s - - - Only direction was set, no permissions: '%s' - Solo se ha establecido la dirección, sin permisos: "%s" - - - Prune cannot be configured with a negative value. - La poda no se puede configurar con un valor negativo. - - - Prune mode is incompatible with -txindex. - El modo de poda es incompatible con -txindex. - - - Pruning blockstore… - Podando almacenamiento de bloques… - - - Reducing -maxconnections from %d to %d, because of system limitations. - Reduciendo -maxconnections de %d a %d, debido a limitaciones del sistema. - - - Replaying blocks… - Reproduciendo bloques… - - - Rescanning… - Rescaneando... - - - SQLiteDatabase: Failed to execute statement to verify database: %s - SQLiteDatabase: Fallo al ejecutar la instrucción para verificar la base de datos: %s - - - SQLiteDatabase: Failed to prepare statement to verify database: %s - SQLiteDatabase: Fallo al preparar la instrucción para verificar la base de datos: %s - - - SQLiteDatabase: Failed to read database verification error: %s - SQLiteDatabase: Fallo al leer el error de verificación de la base de datos: %s - - - SQLiteDatabase: Unexpected application id. Expected %u, got %u - SQLiteDatabase: Identificador de aplicación inesperado. Se esperaba %u; se recibió %u. - - - Section [%s] is not recognized. - La sección [%s] no se reconoce. - - - Signer did not echo address - El firmante no se hizo eco de la dirección - - - Signer echoed unexpected address %s - El firmante se hizo eco de una dirección inesperada %s - - - Signer returned error: %s - El firmante ha devuelto un error: %s - - - Signing transaction failed - Fallo al firmar la transacción - - - Specified -walletdir "%s" does not exist - El valor especificado de -walletdir "%s" no existe - - - Specified -walletdir "%s" is a relative path - El valor especificado de -walletdir "%s" es una ruta relativa - - - Specified -walletdir "%s" is not a directory - El valor especificado de -walletdir "%s" no es un directorio - - - Specified blocks directory "%s" does not exist. - El directorio de bloques especificado "%s" no existe. - - - Specified data directory "%s" does not exist. - El directorio de datos especificado "%s" no existe. - - - Starting network threads… - Iniciando subprocesos de red... - - - System error while flushing: %s - Error del sistema durante el vaciado:%s - - - System error while loading external block file: %s - Error del sistema al cargar un archivo de bloque externo: %s - - - System error while saving block to disk: %s - Error del sistema al guardar el bloque en el disco: %s - - - The source code is available from %s. - El código fuente está disponible en %s. - - - The specified config file %s does not exist - El archivo de configuración especificado %s no existe - - - The transaction amount is too small to pay the fee - El importe de la transacción es muy pequeño para pagar la comisión - - - The transactions removal process can only be executed within a db txn - El proceso de eliminación de transacciones sólo puede ejecutarse dentro de una base de datos de transacción - - - The wallet will avoid paying less than the minimum relay fee. - La billetera evitará pagar menos que la comisión mínima de retransmisión. - - - There is no ScriptPubKeyManager for this address - No hay ningún ScriptPubKeyManager para esta dirección. - - - This is experimental software. - Este es un software experimental. - - - This is the minimum transaction fee you pay on every transaction. - Esta es la comisión mínima de transacción que pagas en cada transacción. - - - This is the transaction fee you will pay if you send a transaction. - Esta es la comisión de transacción que pagarás si envías una transacción. - - - Transaction %s does not belong to this wallet - La transacción %s no pertenece a esta billetera - - - Transaction amount too small - El importe de la transacción es demasiado pequeño - - - Transaction amounts must not be negative - Los importes de la transacción no pueden ser negativos - - - Transaction change output index out of range - Índice de salidas de cambio de transacciones fuera de alcance - - - Transaction must have at least one recipient - La transacción debe incluir al menos un destinatario - - - Transaction needs a change address, but we can't generate it. - La transacción necesita una dirección de cambio, pero no podemos generarla. - - - Transaction too large - Transacción demasiado grande - - - Unable to bind to %s on this computer (bind returned error %s) - No se puede establecer un enlace a %s en esta computadora (bind devolvió el error %s) - - - Unable to bind to %s on this computer. %s is probably already running. - No se puede establecer un enlace a %s en este equipo. Es posible que %s ya esté en ejecución. - - - Unable to create the PID file '%s': %s - No se puede crear el archivo PID "%s": %s - - - Unable to find UTXO for external input - No se puede encontrar UTXO para la entrada externa - - - Unable to generate initial keys - No se pueden generar las claves iniciales - - - Unable to generate keys - No se pueden generar claves - - - Unable to open %s for writing - No se puede abrir %s para escribir - - - Unable to parse -maxuploadtarget: '%s' - No se puede analizar -maxuploadtarget: "%s" - - - Unable to start HTTP server. See debug log for details. - No se puede iniciar el servidor HTTP. Consulta el registro de depuración para obtener información. - - - Unable to unload the wallet before migrating - No se puede descargar la billetera antes de la migración - - - Unknown -blockfilterindex value %s. - Se desconoce el valor de -blockfilterindex %s. - - - Unknown address type '%s' - Se desconoce el tipo de dirección "%s" - - - Unknown change type '%s' - Se desconoce el tipo de cambio "%s" - - - Unknown network specified in -onlynet: '%s' - Se desconoce la red especificada en -onlynet: "%s" - - - Unknown new rules activated (versionbit %i) - Se desconocen las nuevas reglas activadas (versionbit %i) - - - Unrecognised option "%s" provided in -test=<option>. - Opción no reconocida "%s" proporcionada en -test=<option>. - - - Unsupported global logging level %s=%s. Valid values: %s. - El nivel de registro global %s=%s no es compatible. Valores válidos: %s. - - - Wallet file creation failed: %s - Error al crear el archivo de la billetera: %s - - - acceptstalefeeestimates is not supported on %s chain. - acceptstalefeeestimates no se admite en la cadena %s. - - - Unsupported logging category %s=%s. - La categoría de registro no es compatible %s=%s. - - - Do you want to rebuild the databases now? - ¿Quiere reconstruir la base de datos de bloques ahora? - - - Error: Could not add watchonly tx %s to watchonly wallet - Error: No se puede agregar la transacción solo de observación %s a la billetera solo de observación - - - Error: Could not delete watchonly transactions. - Error: No se pudieron eliminar las transacciones solo de observación - - - Error: Wallet does not exist - Error: La cartera no existe - - - Error: cannot remove legacy wallet records - Error: no se pueden eliminar los registros de cartera heredados - - - Not enough file descriptors available. %d available, %d required. - No hay suficientes descriptores de archivo disponibles. %d disponibles, %d requeridos. - - - User Agent comment (%s) contains unsafe characters. - El comentario del agente de usuario (%s) contiene caracteres inseguros. - - - Verifying blocks… - Verificando bloques... - - - Verifying wallet(s)… - Verificando billetera(s)... - - - Wallet needed to be rewritten: restart %s to complete - Es necesario rescribir la billetera: reiniciar %s para completar - - - Settings file could not be read - El archivo de configuración no se puede leer - - - Settings file could not be written - El archivo de configuración no se puede escribir - - - \ No newline at end of file diff --git a/src/qt/locale/bitcoin_es_DO.ts b/src/qt/locale/bitcoin_es_DO.ts deleted file mode 100644 index 1fa874a68194..000000000000 --- a/src/qt/locale/bitcoin_es_DO.ts +++ /dev/null @@ -1,5068 +0,0 @@ - - - AddressBookPage - - Right-click to edit address or label - Hacer clic derecho para editar la dirección o etiqueta - - - Create a new address - Crear una nueva dirección - - - &New - &Nueva - - - Copy the currently selected address to the system clipboard - Copiar la dirección seleccionada actualmente al portapapeles del sistema - - - &Copy - &Copiar - - - C&lose - &Cerrar - - - Delete the currently selected address from the list - Eliminar la dirección seleccionada de la lista - - - Enter address or label to search - Ingresar una dirección o etiqueta para buscar - - - Export the data in the current tab to a file - Exportar los datos de la pestaña actual a un archivo - - - &Export - &Exportar - - - &Delete - &Borrar - - - Choose the address to send coins to - Elige la dirección a la que se enviarán monedas - - - Choose the address to receive coins with - Elige la dirección en la que se recibirán monedas - - - C&hoose - &Seleccionar - - - These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Estas son tus direcciones de Bitcoin para enviar pagos. Revisa siempre el importe y la dirección de recepción antes de enviar monedas. - - - These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. -Signing is only possible with addresses of the type 'legacy'. - Estas son tus direcciones de Bitcoin para recibir pagos. Usa el botón "Crear nueva dirección de recepción" en la pestaña "Recibir" para crear nuevas direcciones. -Solo es posible firmar con direcciones de tipo legacy. - - - &Copy Address - &Copiar dirección - - - Copy &Label - Copiar &etiqueta - - - &Edit - &Editar - - - Export Address List - Exportar lista de direcciones - - - Comma separated file - Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. - Archivo separado por comas - - - There was an error trying to save the address list to %1. Please try again. - An error message. %1 is a stand-in argument for the name of the file we attempted to save to. - Ocurrió un error al intentar guardar la lista de direcciones en %1. Inténtalo de nuevo. - - - Sending addresses - %1 - Direcciones de envío - %1 - - - Receiving addresses - %1 - Direcciones de recepción - %1 - - - Exporting Failed - Error al exportar - - - - AddressTableModel - - Label - Etiqueta - - - Address - Dirección - - - (no label) - (sin etiqueta) - - - - AskPassphraseDialog - - Passphrase Dialog - Diálogo de frase de contraseña - - - Enter passphrase - Ingresar la frase de contraseña - - - New passphrase - Nueva frase de contraseña - - - Repeat new passphrase - Repetir la nueva frase de contraseña - - - Show passphrase - Mostrar la frase de contraseña - - - Encrypt wallet - Encriptar billetera - - - This operation needs your wallet passphrase to unlock the wallet. - Esta operación requiere la frase de contraseña de la billetera para desbloquearla. - - - Unlock wallet - Desbloquear billetera - - - Change passphrase - Cambiar frase de contraseña - - - Confirm wallet encryption - Confirmar el encriptado de la billetera - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! - Advertencia: Si encriptas la billetera y pierdes tu frase de contraseña, ¡<b>PERDERÁS TODOS TUS BITCOINS</b>! - - - Are you sure you wish to encrypt your wallet? - ¿Seguro quieres encriptar la billetera? - - - Wallet encrypted - Billetera encriptada - - - Enter the new passphrase for the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. - Ingresa la nueva frase de contraseña para la billetera. <br/>Usa una frase de contraseña de <b>diez o más caracteres aleatorios</b>, u <b>ocho o más palabras</b>. - - - Enter the old passphrase and new passphrase for the wallet. - Ingresa la antigua frase de contraseña y la nueva frase de contraseña para la billetera. - - - Continue - Continuar - - - Back - Atrás - - - Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. - Recuerda que encriptar tu billetera no garantiza la protección total contra el robo de tus bitcoins si la computadora está infectada con malware. - - - Wallet to be encrypted - Billetera para encriptar - - - Your wallet is about to be encrypted. - Tu billetera está a punto de encriptarse. - - - Your wallet is now encrypted. - Tu billetera ahora está encriptada. - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANTE: Cualquier copia de seguridad anterior que hayas hecho del archivo de la billetera se deberá reemplazar por el nuevo archivo encriptado que generaste. Por motivos de seguridad, las copias de seguridad realizadas anteriormente quedarán obsoletas en cuanto empieces a usar la nueva billetera encriptada. - - - Wallet encryption failed - Falló el encriptado de la billetera - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - El encriptado de la billetera falló debido a un error interno. La billetera no se encriptó. - - - The supplied passphrases do not match. - Las frases de contraseña proporcionadas no coinciden. - - - Wallet unlock failed - Falló el desbloqueo de la billetera - - - The passphrase entered for the wallet decryption was incorrect. - La frase de contraseña introducida para el cifrado de la billetera es incorrecta. - - - The passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. If this is successful, please set a new passphrase to avoid this issue in the future. - La frase de contraseña ingresada para el descifrado de la billetera es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo . Si esto es correcto, establece una nueva frase de contraseña para evitar este problema en el futuro. - - - Wallet passphrase was successfully changed. - La frase de contraseña de la billetera se cambió correctamente. - - - Passphrase change failed - Error al cambiar la frase de contraseña - - - The old passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. - La frase de contraseña que se ingresó para descifrar la billetera es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo. - - - Warning: The Caps Lock key is on! - Advertencia: ¡Las mayúsculas están activadas! - - - - BanTableModel - - IP/Netmask - IP/Máscara de red - - - Banned Until - Prohibido hasta - - - - BitcoinApplication - - Settings file %1 might be corrupt or invalid. - El archivo de configuración %1 puede estar dañado o no ser válido. - - - Runaway exception - Excepción fuera de control - - - A fatal error occurred. %1 can no longer continue safely and will quit. - Se produjo un error fatal. %1 ya no puede continuar de manera segura y se cerrará. - - - Internal error - Error interno - - - An internal error occurred. %1 will attempt to continue safely. This is an unexpected bug which can be reported as described below. - Se produjo un error interno. %1 intentará continuar de manera segura. Este es un error inesperado que se puede reportar como se describe a continuación. - - - - QObject - - Do you want to reset settings to default values, or to abort without making changes? - Explanatory text shown on startup when the settings file cannot be read. Prompts user to make a choice between resetting or aborting. - ¿Deseas restablecer los valores a la configuración predeterminada o abortar sin realizar los cambios? - - - A fatal error occurred. Check that settings file is writable, or try running with -nosettings. - Explanatory text shown on startup when the settings file could not be written. Prompts user to check that we have the ability to write to the file. Explains that the user has the option of running without a settings file. - Se produjo un error fatal. Comprueba que el archivo de configuración soporte escritura o intenta ejecutar el programa con -nosettings. - - - %1 didn't yet exit safely… - %1 aún no se cerró de forma segura... - - - unknown - desconocido - - - Embedded "%1" - "%1" integrado - - - Default system font "%1" - Fuente predeterminada del sistema "%1" - - - Custom… - Personalizada... - - - Amount - Importe - - - Enter a Bitcoin address (e.g. %1) - Ingresar una dirección de Bitcoin (por ejemplo, %1) - - - Unroutable - No enrutable - - - Inbound - An inbound connection from a peer. An inbound connection is a connection initiated by a peer. - Entrante - - - Outbound - An outbound connection to a peer. An outbound connection is a connection initiated by us. - Saliente - - - Full Relay - Peer connection type that relays all network information. - Retransmisión completa - - - Block Relay - Peer connection type that relays network information about blocks and not transactions or addresses. - Retransmisión de bloques - - - Address Fetch - Short-lived peer connection type that solicits known addresses from a peer. - Recuperación de dirección - - - None - Ninguno - - - N/A - N/D - - - %n second(s) - - %n segundo - %n segundos - - - - %n minute(s) - - %n minuto - %n minutos - - - - %n hour(s) - - %n hora - %n horas - - - - %n day(s) - - %n día - %n días - - - - %n week(s) - - %n semana - %n semanas - - - - %1 and %2 - %1 y %2 - - - %n year(s) - - %n año - %n años - - - - default wallet - billetera por defecto - - - - BitcoinGUI - - &Overview - &Vista general - - - Show general overview of wallet - Muestra una vista general de la billetera - - - &Transactions - &Transacciones - - - Browse transaction history - Explora el historial de transacciones - - - E&xit - &Salir - - - Quit application - Salir del programa - - - &About %1 - &Acerca de %1 - - - Show information about %1 - Mostrar Información sobre %1 - - - About &Qt - Acerca de &Qt - - - Show information about Qt - Mostrar información sobre Qt - - - Modify configuration options for %1 - Modificar las opciones de configuración para %1 - - - Create a new wallet - Crear una nueva billetera - - - &Minimize - &Minimizar - - - Wallet: - Billetera: - - - Network activity disabled. - A substring of the tooltip. - Actividad de red deshabilitada. - - - Proxy is <b>enabled</b>: %1 - Proxy <b>habilitado</b>: %1 - - - Send coins to a Bitcoin address - Enviar monedas a una dirección de Bitcoin - - - Backup wallet to another location - Realizar copia de seguridad de la billetera en otra ubicación - - - Change the passphrase used for wallet encryption - Cambiar la frase de contraseña utilizada para encriptar la billetera - - - &Send - &Enviar - - - &Receive - &Recibir - - - &Encrypt Wallet… - &Encriptar billetera… - - - Encrypt the private keys that belong to your wallet - Encriptar las llaves privadas que pertenecen a tu billetera - - - &Backup Wallet… - &Realizar copia de seguridad de la billetera... - - - &Change Passphrase… - &Cambiar contraseña... - - - Sign &message… - Firmar &mensaje... - - - Sign messages with your Bitcoin addresses to prove you own them - Firma mensajes con tus direcciones Bitcoin para probar que eres dueño de ellas - - - &Verify message… - &Verificar mensaje... - - - Verify messages to ensure they were signed with specified Bitcoin addresses - Verificar mensajes para asegurar que estaban firmados con direcciones Bitcoin especificas - - - &Load PSBT from file… - &Cargar TBPF desde el archivo... - - - Open &URI… - Abrir &URI… - - - Close Wallet… - Cerrar billetera... - - - Create Wallet… - Crear billetera... - - - Close All Wallets… - Cerrar todas las billeteras... - - - &File - &Archivo - - - &Settings - &Configuración - - - &Help - A&yuda - - - Tabs toolbar - Barra de pestañas - - - Syncing Headers (%1%)… - Sincronizando cabeceras (1%1%) - - - Synchronizing with network… - Sincronizando con la red... - - - Indexing blocks on disk… - Indexando bloques en disco... - - - Processing blocks on disk… - Procesando bloques en disco... - - - Connecting to peers… - Conectando con pares... - - - Request payments (generates QR codes and bitcoin: URIs) - Solicitar pagos (genera codigo QR y URL's de Bitcoin) - - - Show the list of used sending addresses and labels - Mostrar la lista de direcciones de envío y etiquetas - - - Show the list of used receiving addresses and labels - Muestra la lista de direcciones de recepción y etiquetas - - - &Command-line options - Opciones de línea de comandos - - - Processed %n block(s) of transaction history. - - %n bloque procesado del historial de transacciones. - %n bloques procesados del historial de transacciones. - - - - %1 behind - %1 detrás - - - Catching up… - Poniéndose al día... - - - Last received block was generated %1 ago. - El último bloque recibido fue generado hace %1 hora(s). - - - Transactions after this will not yet be visible. - Transacciones después de esta no serán visibles todavía. - - - Warning - Advertencia - - - Information - Información - - - Up to date - Al día - - - Load Partially Signed Bitcoin Transaction - Cargar transacción de Bitcoin parcialmente firmada - - - Load PSBT from &clipboard… - Cargar TBPF desde el &portapapeles... - - - Node window - Ventana del nodo - - - Open node debugging and diagnostic console - Abrir la consola de depuración y diagnóstico del nodo - - - &Sending addresses - Direcciones de &envío - - - &Receiving addresses - Direcciones de &recepción - - - Open a bitcoin: URI - Abrir un bitcoin: URI - - - Open Wallet - Abrir billetera - - - Open a wallet - Abrir una cartera - - - Close wallet - Cerrar cartera - - - Restore Wallet… - Name of the menu item that restores wallet from a backup file. - Restaurar billetera… - - - Restore a wallet from a backup file - Status tip for Restore Wallet menu item - Restaurar una billetera desde un archivo de copia de seguridad - - - Close all wallets - Cerrar todas las billeteras - - - Migrate Wallet - Migrar billetera - - - Migrate a wallet - Migrar una billetera - - - No wallets available - No hay billeteras disponibles - - - Wallet Data - Name of the wallet data file format. - Datos de la billetera - - - Load Wallet Backup - The title for Restore Wallet File Windows - Cargar copia de seguridad de billetera - - - Restore Wallet - Title of pop-up window shown when the user is attempting to restore a wallet. - Restaurar billetera - - - Wallet Name - Label of the input field where the name of the wallet is entered. - Nombre de la billetera - - - &Window - &Ventana - - - Main Window - Ventana principal - - - %1 client - Cliente %1 - - - &Hide - &Ocultar - - - S&how - &Mostrar - - - %n active connection(s) to Bitcoin network. - A substring of the tooltip. - - %n conexión activa con la red de Bitcoin. - %n conexiónes activas con la red de Bitcoin. - - - - Click for more actions. - A substring of the tooltip. "More actions" are available via the context menu. - Haz clic para ver más acciones. - - - Show Peers tab - A context menu item. The "Peers tab" is an element of the "Node window". - Mostrar pestaña de pares - - - Disable network activity - A context menu item. - Deshabilitar actividad de red - - - Enable network activity - A context menu item. The network activity was disabled previously. - Habilitar actividad de red - - - Pre-syncing Headers (%1%)… - Presincronizando cabeceras (%1%)... - - - Error creating wallet - Error al crear billetera - - - Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets) - No se puede crear una billetera nueva, ya que el software se compiló sin compatibilidad con sqlite (requerida para billeteras basadas en descriptores) - - - Warning: %1 - Advertencia: %1 - - - Date: %1 - - Fecha: %1 - - - - Amount: %1 - - Importe: %1 - - - - Wallet: %1 - - Billetera: %1 - - - - Type: %1 - - Tipo: %1 - - - - Label: %1 - - Etiqueta %1 - - - - Address: %1 - - Dirección: %1 - - - - Sent transaction - Transacción enviada - - - Incoming transaction - Transacción entrante - - - HD key generation is <b>enabled</b> - La generación de clave HD está <b>habilitada</b> - - - HD key generation is <b>disabled</b> - La generación de clave HD está <b>deshabilitada</b> - - - Private key <b>disabled</b> - Clave privada <b>deshabilitada</b> - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - La billetera está <b>encriptada</b> y actualmente <b>desbloqueda</b> - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - La billetera está <b>encriptada</b> y actualmente <b>bloqueda</b> - - - Original message: - Mensaje original: - - - - UnitDisplayStatusBarControl - - Unit to show amounts in. Click to select another unit. - Unidad en la que se muestran los importes. Haz clic para seleccionar otra unidad. - - - - CoinControlDialog - - Coin Selection - Selección de monedas - - - Quantity: - Cantidad: - - - Amount: - Importe: - - - Fee: - Comisión: - - - After Fee: - Después de tasas: - - - Change: - Cambio: - - - (un)select all - (de)seleccionar todo - - - Tree mode - Modo de árbol - - - List mode - Modo de lista - - - Amount - Monto - - - Received with label - Recibido con etiqueta - - - Received with address - Recibido con dirección - - - Date - Fecha - - - Confirmations - Confirmaciones - - - Confirmed - Confirmado - - - Copy amount - Copiar cantidad - - - &Copy address - &Copiar dirección - - - Copy &label - Copiar &etiqueta - - - Copy &amount - Copiar &importe - - - Copy transaction &ID and output index - Copiar &identificador de transacción e índice de salidas - - - L&ock unspent - B&loquear no gastado - - - &Unlock unspent - &Desbloquear importe no gastado - - - Copy quantity - Copiar cantidad - - - Copy fee - Copiar comisión - - - Copy after fee - Copiar después de aplicar donación - - - Copy bytes - Copiar bytes - - - Copy change - Copiar cambio - - - (%1 locked) - (%1 bloqueado) - - - Can vary +/- %1 satoshi(s) per input. - Puede variar en +/- %1 satoshi(s) por entrada. - - - (no label) - (sin etiqueta) - - - change from %1 (%2) - Enviar desde %1 (%2) - - - (change) - (cambio) - - - - CreateWalletActivity - - Create Wallet - Title of window indicating the progress of creation of a new wallet. - Crear billetera - - - Creating Wallet <b>%1</b>… - Descriptive text of the create wallet progress window which indicates to the user which wallet is currently being created. - Creando billetera <b>%1</b>… - - - Create wallet failed - Fallo al crear la billetera - - - Create wallet warning - Advertencia de crear billetera - - - Can't list signers - No se puede hacer una lista de firmantes - - - Too many external signers found - Se encontraron demasiados firmantes externos - - - - LoadWalletsActivity - - Load Wallets - Title of progress window which is displayed when wallets are being loaded. - Cargar billeteras - - - Loading wallets… - Descriptive text of the load wallets progress window which indicates to the user that wallets are currently being loaded. - Cargando billeteras... - - - - MigrateWalletActivity - - Migrate wallet - Migrar billetera - - - Are you sure you wish to migrate the wallet <i>%1</i>? - ¿Seguro deseas migrar la billetera <i>%1</i>? - - - Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made. -If this wallet contains any watchonly scripts, a new wallet will be created which contains those watchonly scripts. -If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts. - -The migration process will create a backup of the wallet before migrating. This backup file will be named <wallet name>-<timestamp>.legacy.bak and can be found in the directory for this wallet. In the event of an incorrect migration, the backup can be restored with the "Restore Wallet" functionality. - La migración de la billetera la convertirá en una o más billeteras basadas en descriptores. Será necesario realizar una nueva copia de seguridad de la billetera. -Si esta billetera contiene scripts solo de observación, se creará una nueva billetera que los contenga. -Si esta billetera contiene scripts solucionables pero no de observación, se creará una nueva billetera diferente que los contenga. - -El proceso de migración creará una copia de seguridad de la billetera antes de proceder. Este archivo de copia de seguridad se llamará <wallet name>-<timestamp>.legacy.bak y se encontrará en el directorio de esta billetera. En caso de que la migración falle, se puede restaurar la copia de seguridad con la funcionalidad "Restaurar billetera". - - - Migrate Wallet - Migrar billetera - - - Migrating Wallet <b>%1</b>… - Migrando billetera <b>%1</b>… - - - The wallet '%1' was migrated successfully. - La migración de la billetera "%1" se realizó correctamente. - - - Watchonly scripts have been migrated to a new wallet named '%1'. - Los scripts solo de observación se migraron a una nueva billetera llamada "%1". - - - Solvable but not watched scripts have been migrated to a new wallet named '%1'. - Los scripts solucionables pero no de observación se migraron a una nueva billetera llamada "%1". - - - Migration failed - Migración errónea - - - Migration Successful - Migración correcta - - - - OpenWalletActivity - - Open wallet failed - Fallo al abrir billetera - - - Open wallet warning - Advertencia al abrir billetera - - - Open Wallet - Title of window indicating the progress of opening of a wallet. - Abrir billetera - - - Opening Wallet <b>%1</b>… - Descriptive text of the open wallet progress window which indicates to the user which wallet is currently being opened. - Abriendo billetera <b>%1</b>... - - - - RestoreWalletActivity - - Restore Wallet - Title of progress window which is displayed when wallets are being restored. - Restaurar billetera - - - Restoring Wallet <b>%1</b>… - Descriptive text of the restore wallets progress window which indicates to the user that wallets are currently being restored. - Restaurando billetera <b>%1</b>… - - - Restore wallet failed - Title of message box which is displayed when the wallet could not be restored. - Error al restaurar la billetera - - - Restore wallet warning - Title of message box which is displayed when the wallet is restored with some warning. - Advertencia al restaurar billetera - - - Restore wallet message - Title of message box which is displayed when the wallet is successfully restored. - Mensaje al restaurar billetera - - - - WalletController - - Close wallet - Cerrar billetera - - - Are you sure you wish to close the wallet <i>%1</i>? - ¿Seguro deseas cerrar la billetera <i>%1</i>? - - - Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. - Cerrar la billetera durante demasiado tiempo puede causar la resincronización de toda la cadena si el podado está habilitado. - - - Close all wallets - Cerrar todas las billeteras - - - Are you sure you wish to close all wallets? - ¿Seguro quieres cerrar todas las billeteras? - - - - CreateWalletDialog - - Create Wallet - Crear billetera - - - You are one step away from creating your new wallet! - Estás a un paso de crear tu nueva billetera. - - - Please provide a name and, if desired, enable any advanced options - Escribe un nombre y, si quieres, activa las opciones avanzadas. - - - Wallet Name - Nombre de la billetera - - - Wallet - Billetera - - - Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice. - Encriptar la billetera. La billetera se encriptará con una frase de contraseña de tu elección. - - - Encrypt Wallet - Encriptar billetera - - - Advanced Options - Opciones avanzadas - - - Disable private keys for this wallet. Wallets with private keys disabled will have no private keys and cannot have an HD seed or imported private keys. This is ideal for watch-only wallets. - Desactivar las claves privadas para esta billetera. Las billeteras con claves privadas desactivadas no tendrán claves privadas y no podrán tener ninguna semilla HD ni claves privadas importadas. Esto es ideal para billeteras solo de observación. - - - Disable Private Keys - Desactivar las claves privadas - - - Make a blank wallet. Blank wallets do not initially have private keys or scripts. Private keys and addresses can be imported, or an HD seed can be set, at a later time. - Crea una billetera en blanco. Las billeteras en blanco inicialmente no tienen llaves privadas ni scripts. Las llaves privadas y las direcciones pueden ser importadas o se puede establecer una semilla HD más tarde. - - - Make Blank Wallet - Crear billetera en blanco - - - Use an external signing device such as a hardware wallet. Configure the external signer script in wallet preferences first. - Usa un dispositivo de firma externo, por ejemplo, una billetera de hardware. Configura primero el script del firmante externo en las preferencias de la billetera. - - - External signer - Firmante externo - - - Create - Crear - - - Compiled without external signing support (required for external signing) - "External signing" means using devices such as hardware wallets. - Compilado sin compatibilidad con firma externa (requerida para la firma externa) - - - - EditAddressDialog - - Edit Address - Editar dirección - - - &Label - &Etiqueta - - - The label associated with this address list entry - La etiqueta asociada con esta entrada en la lista de direcciones - - - The address associated with this address list entry. This can only be modified for sending addresses. - La dirección asociada con esta entrada en la lista de direcciones. Solo se puede modificar para las direcciones de envío. - - - &Address - &Dirección - - - New sending address - Nueva dirección de envío - - - Edit receiving address - Editar dirección de recepción - - - Edit sending address - Editar dirección de envío - - - The entered address "%1" is not a valid Bitcoin address. - La dirección ingresada "%1" no es una dirección de Bitcoin válida. - - - Address "%1" already exists as a receiving address with label "%2" and so cannot be added as a sending address. - La dirección "%1" ya existe como dirección de recepción con la etiqueta "%2" y, por lo tanto, no se puede agregar como dirección de envío. - - - The entered address "%1" is already in the address book with label "%2". - La dirección ingresada "%1" ya está en la libreta de direcciones con la etiqueta "%2". - - - Could not unlock wallet. - No se pudo desbloquear la billetera. - - - New key generation failed. - Error al generar clave nueva. - - - - FreespaceChecker - - A new data directory will be created. - Se creará un nuevo directorio de datos. - - - name - nombre - - - Directory already exists. Add %1 if you intend to create a new directory here. - El directorio ya existe. Agrega %1 si deseas crear un nuevo directorio aquí. - - - Path already exists, and is not a directory. - Ruta de acceso existente, pero no es un directorio. - - - Cannot create data directory here. - No se puede crear un directorio de datos aquí. - - - - Intro - - %n GB of space available - - %n GB de espacio disponible - %n GB de espacio disponible - - - - (of %n GB needed) - - (de %n GB necesario) - (de %n GB necesarios) - - - - (%n GB needed for full chain) - - (%n GB necesario para completar la cadena) - (%n GB necesarios para completar la cadena) - - - - Choose data directory - Elegir directorio de datos - - - At least %1 GB of data will be stored in this directory, and it will grow over time. - Se almacenarán al menos %1 GB de datos en este directorio, que aumentarán con el tiempo. - - - Approximately %1 GB of data will be stored in this directory. - Se almacenarán aproximadamente %1 GB de datos en este directorio. - - - (sufficient to restore backups %n day(s) old) - Explanatory text on the capability of the current prune target. - - (suficiente para restaurar copias de seguridad de %n día de antigüedad) - (suficiente para restaurar copias de seguridad de %n días de antigüedad) - - - - %1 will download and store a copy of the Bitcoin block chain. - %1 descargará y almacenará una copia de la cadena de bloques de Bitcoin. - - - The wallet will also be stored in this directory. - La billetera también se almacenará en este directorio. - - - Error: Specified data directory "%1" cannot be created. - Error: No se puede crear el directorio de datos especificado "%1" . - - - Welcome - Te damos la bienvenida - - - Welcome to %1. - Te damos la bienvenida a %1. - - - As this is the first time the program is launched, you can choose where %1 will store its data. - Como es la primera vez que se ejecuta el programa, puedes elegir dónde %1 almacenará los datos. - - - Limit block chain storage to - Limitar el almacenamiento de la cadena de bloques a - - - Reverting this setting requires re-downloading the entire blockchain. It is faster to download the full chain first and prune it later. Disables some advanced features. - Para revertir esta configuración, se debe descargar de nuevo la cadena de bloques completa. Es más rápido descargar la cadena completa y podarla después. Desactiva algunas funciones avanzadas. - - - This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off. - La sincronización inicial consume muchos recursos y es posible que exponga problemas de hardware en la computadora que anteriormente pasaron desapercibidos. Cada vez que ejecutes %1, seguirá descargando desde el punto en el que quedó. - - - When you click OK, %1 will begin to download and process the full %4 block chain (%2 GB) starting with the earliest transactions in %3 when %4 initially launched. - Al hacer clic en OK, %1 iniciará el proceso de descarga y procesará la cadena de bloques %4 completa (%2 GB), empezando con la transacción más antigua en %3 cuando %4 se ejecutó inicialmente. - - - If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low. - Si elegiste la opción de limitar el almacenamiento de la cadena de bloques (podado), los datos históricos se deben descargar y procesar de igual manera, pero se eliminarán después para disminuir el uso del disco. - - - Use the default data directory - Usar el directorio de datos predeterminado - - - Use a custom data directory: - Usar un directorio de datos personalizado: - - - - HelpMessageDialog - - version - versión - - - About %1 - Acerca de %1 - - - Command-line options - Opciones de línea de comandos - - - - ShutdownWindow - - %1 is shutting down… - %1 se está cerrando... - - - Do not shut down the computer until this window disappears. - No apagues la computadora hasta que desaparezca esta ventana. - - - - ModalOverlay - - Form - Formulario - - - Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. - Es posible que las transacciones recientes aún no sean visibles y, por lo tanto, el saldo de la billetera podría ser incorrecto. Esta información será correcta una vez que la billetera haya terminado de sincronizarse con la red de Bitcoin, como se detalla abajo. - - - Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. - La red no aceptará si se intenta gastar bitcoins afectados por las transacciones que aún no se muestran. - - - Number of blocks left - Número de bloques restantes - - - Unknown… - Desconocido... - - - calculating… - calculando... - - - Last block time - Hora del último bloque - - - Progress - Progreso - - - Progress increase per hour - Avance del progreso por hora - - - Estimated time left until synced - Tiempo estimado restante hasta la sincronización - - - Hide - Ocultar - - - %1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain. - %1 se está sincronizando actualmente. Descargará encabezados y bloques de pares, y los validará hasta alcanzar el extremo de la cadena de bloques. - - - Unknown. Syncing Headers (%1, %2%)… - Desconocido. Sincronizando encabezados (%1, %2%)… - - - Unknown. Pre-syncing Headers (%1, %2%)… - Desconocido. Presincronizando encabezados (%1, %2%)… - - - - OpenURIDialog - - Open bitcoin URI - Abrir URI de bitcoin - - - Paste address from clipboard - Tooltip text for button that allows you to paste an address that is in your clipboard. - Pegar dirección desde el portapapeles - - - - OptionsDialog - - Options - Opciones - - - &Main - &Principal - - - Automatically start %1 after logging in to the system. - Iniciar automáticamente %1 después de iniciar sesión en el sistema. - - - &Start %1 on system login - &Iniciar %1 al iniciar sesión en el sistema - - - Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain. - Al activar el podado, se reduce considerablemente el espacio de disco necesario para almacenar las transacciones. Todos los bloques aún se validan completamente. Para revertir esta opción, se requiere descargar de nuevo toda la cadena de bloques. - - - Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. - Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. - Tamaño máximo de la caché de la base de datos. Una caché más grande puede contribuir a una sincronización más rápida, después de lo cual el beneficio es menos pronunciado para la mayoría de los casos de uso. Disminuir el tamaño de la caché reducirá el uso de la memoria. La memoria del mempool no utilizada se comparte para esta caché. - - - Size of &database cache - Tamaño de la caché de la &base de datos - - - Number of script &verification threads - Número de subprocesos de &verificación de scripts - - - Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! - Ruta completa a un script compatible con %1 (p. ej., C:\Descargas\hwi.exe o /Usuarios/Tú/Descargas/hwi.py). Advertencia: ¡El malware podría robarte tus monedas! - - - Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. - Abre el puerto del cliente de Bitcoin en el enrutador automáticamente. Esto solo funciona cuando el enrutador soporta NAT-PMP o PCP y está activo. El puerto externo podría ser elegido al azar. - - - Map port using PCP or NA&T-PMP - Mapear el puerto usando NAT-PMP - - - IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) - Dirección IP del proxy (por ejemplo, IPv4: 127.0.0.1 / IPv6: ::1) - - - Shows if the supplied default SOCKS5 proxy is used to reach peers via this network type. - Muestra si el proxy SOCKS5 por defecto suministrado se utiliza para llegar a los pares a través de este tipo de red. - - - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu. - Minimizar en vez de salir de la aplicación cuando la ventana está cerrada. Cuando se activa esta opción, la aplicación solo se cerrará después de seleccionar "Salir" en el menú. - - - Font in the Overview tab: - Fuente en la pestaña "Vista general": - - - Options set in this dialog are overridden by the command line: - Las opciones establecidas en este diálogo serán anuladas por la línea de comandos: - - - Open the %1 configuration file from the working directory. - Abrir el archivo de configuración %1 en el directorio de trabajo. - - - Open Configuration File - Abrir archivo de configuración - - - Reset all client options to default. - Restablecer todas las opciones del cliente a los valores predeterminados. - - - &Reset Options - &Restablecer opciones - - - &Network - &Red - - - Prune &block storage to - Podar el almacenamiento de &bloques a - - - Reverting this setting requires re-downloading the entire blockchain. - Para revertir esta configuración, se debe descargar de nuevo la cadena de bloques completa. - - - Set the number of script verification threads. Negative values correspond to the number of cores you want to leave free to the system. - Tooltip text for Options window setting that sets the number of script verification threads. Explains that negative values mean to leave these many cores free to the system. - Establece el número de subprocesos de verificación de scripts. Los valores negativos corresponden al número de núcleos que se desea dejar libres al sistema. - - - (0 = auto, <0 = leave that many cores free) - (0 = auto, <0 = deja esta cantidad de núcleos libres) - - - This allows you or a third party tool to communicate with the node through command-line and JSON-RPC commands. - Tooltip text for Options window setting that enables the RPC server. - Esto te permite a ti o a una herramienta de terceros comunicarse con el nodo a través de la línea de comandos y los comandos JSON-RPC. - - - Enable R&PC server - An Options window setting to enable the RPC server. - Activar servidor R&PC - - - W&allet - &Billetera - - - Whether to set subtract fee from amount as default or not. - Tooltip text for Options window setting that sets subtracting the fee from a sending amount as default. - Si se resta o no la comisión del importe por defecto. - - - Subtract &fee from amount by default - An Options window setting to set subtracting the fee from a sending amount as default. - Restar &comisión del importe por defecto - - - Expert - Experto - - - Enable coin &control features - Habilitar funciones de &control de monedas - - - If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. - Si deshabilitas el gasto del cambio sin confirmar, no se puede usar el cambio de una transacción hasta que esta tenga al menos una confirmación. Esto también afecta cómo se calcula el saldo. - - - &Spend unconfirmed change - &Gastar cambio sin confirmar - - - Enable &PSBT controls - An options window setting to enable PSBT controls. - Activar controles de &TBPF - - - Whether to show PSBT controls. - Tooltip text for options window setting that enables PSBT controls. - Si se muestran los controles de TBPF. - - - External Signer (e.g. hardware wallet) - Firmante externo (p. ej., billetera de hardware) - - - &External signer script path - &Ruta al script del firmante externo - - - Accept connections from outside. - Aceptar conexiones externas. - - - Allow incomin&g connections - &Permitir conexiones entrantes - - - Connect to the Bitcoin network through a SOCKS5 proxy. - Conectarse a la red de Bitcoin a través de un proxy SOCKS5. - - - &Connect through SOCKS5 proxy (default proxy): - &Conectarse a través del proxy SOCKS5 (proxy predeterminado): - - - Proxy &IP: - &IP del proxy: - - - &Port: - &Puerto: - - - Port of the proxy (e.g. 9050) - Puerto del proxy (p. ej., 9050) - - - Used for reaching peers via: - Usado para conectarse con pares a través de: - - - &Window - &Ventana - - - Show the icon in the system tray. - Mostrar el ícono en la bandeja del sistema. - - - &Show tray icon - &Mostrar el ícono de la bandeja - - - Show only a tray icon after minimizing the window. - Mostrar solo un ícono de bandeja después de minimizar la ventana. - - - &Minimize to the tray instead of the taskbar - &Minimizar a la bandeja en vez de la barra de tareas - - - M&inimize on close - &Minimizar al cerrar - - - &Display - &Visualización - - - User Interface &language: - &Idioma de la interfaz de usuario: - - - The user interface language can be set here. This setting will take effect after restarting %1. - El idioma de la interfaz de usuario puede establecerse aquí. Esta configuración surtirá efecto después de reiniciar %1. - - - &Unit to show amounts in: - &Unidad en la que se muestran los importes: - - - Choose the default subdivision unit to show in the interface and when sending coins. - Elegir la unidad de subdivisión predeterminada para mostrar en la interfaz y al enviar monedas. - - - Third-party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |. - Las URL de terceros (por ejemplo, un explorador de bloques) que aparecen en la pestaña de transacciones como elementos del menú contextual. El hash de la transacción remplaza el valor %s en la URL. Varias URL se separan con una barra vertical (|). - - - &Third-party transaction URLs - &URL de transacciones de terceros - - - Whether to show coin control features or not. - Si se muestran o no las funcionalidades de control de monedas. - - - Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services. - Conectarse a la red de Bitcoin a través de un proxy SOCKS5 independiente para los servicios onion de Tor. - - - Use separate SOCKS&5 proxy to reach peers via Tor onion services: - Usar un proxy SOCKS&5 independiente para comunicarse con pares a través de los servicios onion de Tor: - - - &Cancel - &Cancelar - - - Compiled without external signing support (required for external signing) - "External signing" means using devices such as hardware wallets. - Compilado sin compatibilidad con firma externa (requerida para la firma externa) - - - default - predeterminado - - - none - ninguno - - - Confirm options reset - Window title text of pop-up window shown when the user has chosen to reset options. - Confirmar restablecimiento de opciones - - - Client restart required to activate changes. - Text explaining that the settings changed will not come into effect until the client is restarted. - Es necesario reiniciar el cliente para activar los cambios. - - - Current settings will be backed up at "%1". - Text explaining to the user that the client's current settings will be backed up at a specific location. %1 is a stand-in argument for the backup location's path. - Se realizará una copia de seguridad de la configuración actual en "%1". - - - Client will be shut down. Do you want to proceed? - Text asking the user to confirm if they would like to proceed with a client shutdown. - El cliente se cerrará. ¿Quieres continuar? - - - Configuration options - Window title text of pop-up box that allows opening up of configuration file. - Opciones de configuración - - - The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file. - Explanatory text about the priority order of instructions considered by client. The order from high to low being: command-line, configuration file, GUI settings. - El archivo de configuración se usa para especificar opciones avanzadas del usuario, que remplazan la configuración de la GUI. Además, las opciones de la línea de comandos remplazarán este archivo de configuración. - - - Continue - Continuar - - - Cancel - Cancelar - - - The configuration file could not be opened. - No se pudo abrir el archivo de configuración. - - - This change would require a client restart. - Estos cambios requieren reiniciar el cliente. - - - The supplied proxy address is invalid. - La dirección del proxy proporcionada es inválida. - - - - OptionsModel - - Could not read setting "%1", %2. - No se puede leer la configuración "%1", %2. - - - - OverviewPage - - Form - Formulario - - - 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. - La información mostrada puede estar desactualizada. La billetera se sincroniza automáticamente con la red de Bitcoin después de establecer una conexión, pero este proceso aún no se ha completado. - - - Watch-only: - Solo de observación: - - - Available: - Disponible: - - - Your current spendable balance - Tu saldo disponible para gastar actualmente - - - Pending: - Pendiente: - - - Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance - Total de transacciones que aún se deben confirmar y que no se contabilizan dentro del saldo disponible para gastar - - - Immature: - Inmaduro: - - - Mined balance that has not yet matured - Saldo minado que aún no ha madurado - - - Balances - Saldos - - - Your current total balance - Tu saldo total actual - - - Your current balance in watch-only addresses - Tu saldo actual en direcciones solo de observación - - - Spendable: - Gastable: - - - Recent transactions - Transacciones recientes - - - Unconfirmed transactions to watch-only addresses - Transacciones sin confirmar hacia direcciones solo de observación - - - Mined balance in watch-only addresses that has not yet matured - Saldo minado en direcciones solo de observación que aún no ha madurado - - - Current total balance in watch-only addresses - Saldo total actual en direcciones solo de observación - - - Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings->Mask values. - Modo de privacidad activado para la pestaña de vista general. Para mostrar los valores, anula la selección de "Configuración->Ocultar valores". - - - - PSBTOperationsDialog - - PSBT Operations - Operaciones TBPF - - - Sign Tx - Firmar transacción - - - Broadcast Tx - Transmitir transacción - - - Copy to Clipboard - Copiar al portapapeles - - - Save… - Guardar... - - - Close - Cerrar - - - Failed to load transaction: %1 - Error al cargar la transacción: %1 - - - Failed to sign transaction: %1 - Error al firmar la transacción: %1 - - - Cannot sign inputs while wallet is locked. - No se pueden firmar entradas mientras la billetera está bloqueada. - - - Could not sign any more inputs. - No se pudieron firmar más entradas. - - - Signed %1 inputs, but more signatures are still required. - Se firmaron %1 entradas, pero aún se requieren más firmas. - - - Signed transaction successfully. Transaction is ready to broadcast. - La transacción se firmó correctamente y está lista para transmitirse. - - - Unknown error processing transaction. - Error desconocido al procesar la transacción. - - - Transaction broadcast successfully! Transaction ID: %1 - ¡La transacción se transmitió correctamente! Identificador de transacción: %1 - - - Transaction broadcast failed: %1 - Error al transmitir la transacción: %1 - - - PSBT copied to clipboard. - TBPF copiada al portapapeles. - - - Save Transaction Data - Guardar datos de la transacción - - - Partially Signed Transaction (Binary) - Expanded name of the binary PSBT file format. See: BIP 174. - Transacción parcialmente firmada (binario) - - - PSBT saved to disk. - TBPF guardada en el disco. - - - Sends %1 to %2 - Envía %1 a %2 - - - own address - dirección propia - - - Unable to calculate transaction fee or total transaction amount. - No se puede calcular la comisión o el importe total de la transacción. - - - Pays transaction fee: - Paga comisión de transacción: - - - Total Amount - Importe total - - - or - o - - - Transaction has %1 unsigned inputs. - La transacción tiene %1 entradas sin firmar. - - - Transaction is missing some information about inputs. - Falta información sobre las entradas de la transacción. - - - Transaction still needs signature(s). - La transacción aún necesita firma(s). - - - (But no wallet is loaded.) - (Pero no se cargó ninguna billetera). - - - (But this wallet cannot sign transactions.) - (Pero esta billetera no puede firmar transacciones). - - - (But this wallet does not have the right keys.) - (Pero esta billetera no tiene las claves adecuadas). - - - Transaction is fully signed and ready for broadcast. - La transacción se firmó completamente y está lista para transmitirse. - - - Transaction status is unknown. - El estado de la transacción es desconocido. - - - - PaymentServer - - Payment request error - Error en la solicitud de pago - - - Cannot start bitcoin: click-to-pay handler - No se puede iniciar el controlador "bitcoin: click-to-pay" - - - URI handling - Gestión de URI - - - 'bitcoin://' is not a valid URI. Use 'bitcoin:' instead. - "bitcoin://" no es un URI válido. Usa "bitcoin:" en su lugar. - - - Cannot process payment request because BIP70 is not supported. -Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored. -If you are receiving this error you should request the merchant provide a BIP21 compatible URI. - No se puede procesar la solicitud de pago porque no existe compatibilidad con BIP70. -Debido a los fallos de seguridad generalizados en BIP70, se recomienda encarecidamente ignorar las instrucciones del comerciante para cambiar de billetera. -Si recibes este error, debes solicitar al comerciante que te proporcione un URI compatible con BIP21. - - - URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters. - No se puede analizar el URI. Esto se puede deber a una dirección de Bitcoin inválida o a parámetros de URI con formato incorrecto. - - - Payment request file handling - Gestión del archivo de solicitud de pago - - - - PeerTableModel - - User Agent - Title of Peers Table column which contains the peer's User Agent string. - Agente de usuario - - - Peer - Title of Peers Table column which contains a unique number used to identify a connection. - Par - - - Age - Title of Peers Table column which indicates the duration (length of time) since the peer connection started. - Antigüedad - - - Direction - Title of Peers Table column which indicates the direction the peer connection was initiated from. - Dirección - - - Sent - Title of Peers Table column which indicates the total amount of network information we have sent to the peer. - Enviado - - - Received - Title of Peers Table column which indicates the total amount of network information we have received from the peer. - Recibido - - - Address - Title of Peers Table column which contains the IP/Onion/I2P address of the connected peer. - Dirección - - - Type - Title of Peers Table column which describes the type of peer connection. The "type" describes why the connection exists. - Tipo - - - Network - Title of Peers Table column which states the network the peer connected through. - Red - - - Inbound - An Inbound Connection from a Peer. - Entrante - - - Outbound - An Outbound Connection to a Peer. - Saliente - - - - QRImageWidget - - &Save Image… - &Guardar imagen... - - - &Copy Image - &Copiar imagen - - - Resulting URI too long, try to reduce the text for label / message. - El URI resultante es demasiado largo, así que trata de reducir el texto de la etiqueta o el mensaje. - - - Error encoding URI into QR Code. - Fallo al codificar URI en código QR. - - - QR code support not available. - La compatibilidad con el código QR no está disponible. - - - Save QR Code - Guardar código QR - - - PNG Image - Expanded name of the PNG file format. See: https://en.wikipedia.org/wiki/Portable_Network_Graphics. - Imagen PNG - - - - RPCConsole - - N/A - N/D - - - Client version - Versión del cliente - - - &Information - &Información - - - Datadir - Directorio de datos - - - To specify a non-default location of the data directory use the '%1' option. - Para especificar una ubicación no predeterminada del directorio de datos, usa la opción "%1". - - - Blocksdir - Directorio de bloques - - - To specify a non-default location of the blocks directory use the '%1' option. - Para especificar una ubicación no predeterminada del directorio de bloques, usa la opción "%1". - - - Startup time - Tiempo de inicio - - - Network - Red - - - Name - Nombre - - - Number of connections - Número de conexiones - - - Local Addresses - Direcciones locales - - - Network addresses that your Bitcoin node is currently using to communicate with other nodes. - Direcciones de red que tu nodo Bitcoin usa actualmente para comunicarse con otros nodos. - - - Block chain - Cadena de bloques - - - Memory Pool - Pool de memoria - - - Current number of transactions - Número total de transacciones - - - Memory usage - Uso de memoria - - - Wallet: - Billetera: - - - (none) - (ninguna) - - - &Reset - &Restablecer - - - Received - Recibido - - - Sent - Enviado - - - &Peers - &Pares - - - Banned peers - Pares prohibidos - - - Select a peer to view detailed information. - Selecciona un par para ver la información detallada. - - - Hide Peers Detail - Ocultar detalles de pares - - - The transport layer version: %1 - Versión de la capa de transporte: %1 - - - Transport - Transporte - - - Session ID - Identificador de sesión - - - Version - Versión - - - Whether we relay transactions to this peer. - Si retransmitimos las transacciones a este par. - - - Transaction Relay - Retransmisión de transacción - - - Starting Block - Bloque inicial - - - Synced Headers - Encabezados sincronizados - - - Synced Blocks - Bloques sincronizados - - - Last Transaction - Última transacción - - - The mapped Autonomous System used for diversifying peer selection. - El sistema autónomo asignado que se usó para diversificar la selección de pares. - - - Mapped AS - SA asignado - - - Whether we relay addresses to this peer. - Tooltip text for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - Si retransmitimos las direcciones a este par. - - - Address Relay - Text title for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - Retransmisión de direcciones - - - The total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Tooltip text for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - El número total de direcciones recibidas desde este par que se procesaron (excluye las direcciones desestimadas debido a la limitación de volumen). - - - The total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Tooltip text for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - El número total de direcciones recibidas desde este par que se desestimaron (no se procesaron) debido a la limitación de volumen. - - - Addresses Processed - Text title for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Direcciones procesadas - - - Addresses Rate-Limited - Text title for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Direcciones desestimadas por limitación de volumen - - - User Agent - Agente de usuario - - - Node window - Ventana del nodo - - - Current block height - Altura del bloque actual - - - Open the %1 debug log file from the current data directory. This can take a few seconds for large log files. - Abrir el archivo de registro de depuración %1 en el directorio de datos actual. Esto puede tardar unos segundos para los archivos de registro grandes. - - - Decrease font size - Disminuir tamaño de fuente - - - Increase font size - Aumentar tamaño de fuente - - - Permissions - Permisos - - - The direction and type of peer connection: %1 - La dirección y el tipo de conexión entre pares: %1 - - - Direction/Type - Dirección/Tipo - - - The BIP324 session ID string in hex. - La cadena del identificador de sesión BIP324 en formato hexadecimal. - - - The network protocol this peer is connected through: IPv4, IPv6, Onion, I2P, or CJDNS. - El protocolo de red mediante el cual está conectado este par: IPv4, IPv6, Onion, I2P o CJDNS. - - - Services - Servicios - - - High bandwidth BIP152 compact block relay: %1 - Retransmisión de bloques compactos BIP152 en banda ancha: %1 - - - High Bandwidth - Banda ancha - - - Connection Time - Tiempo de conexión - - - Elapsed time since a novel block passing initial validity checks was received from this peer. - Tiempo transcurrido desde que se recibió de este par un nuevo bloque que superó las comprobaciones de validez iniciales. - - - Last Block - Último bloque - - - Elapsed time since a novel transaction accepted into our mempool was received from this peer. - Tooltip text for the Last Transaction field in the peer details area. - Tiempo transcurrido desde que se recibió de este par una nueva transacción aceptada en nuestra mempool. - - - Last Send - Último envío - - - Last Receive - Última recepción - - - Ping Time - Tiempo de ping - - - The duration of a currently outstanding ping. - La duración de un ping actualmente pendiente. - - - Ping Wait - Espera de ping - - - Min Ping - Ping mínimo - - - Time Offset - Desfase temporal - - - Last block time - Hora del último bloque - - - &Open - &Abrir - - - &Console - &Consola - - - &Network Traffic - &Tráfico de red - - - Totals - Totales - - - Debug log file - Archivo del registro de depuración - - - Clear console - Borrar consola - - - In: - Entrada: - - - Out: - Salida: - - - Inbound: initiated by peer - Explanatory text for an inbound peer connection. - Entrante: iniciada por el par - - - Outbound Full Relay: default - Explanatory text for an outbound peer connection that relays all network information. This is the default behavior for outbound connections. - Retransmisión completa saliente: predeterminada - - - Outbound Block Relay: does not relay transactions or addresses - Explanatory text for an outbound peer connection that relays network information about blocks and not transactions or addresses. - Retransmisión de bloque saliente: no retransmite transacciones o direcciones - - - Outbound Manual: added using RPC %1 or %2/%3 configuration options - Explanatory text for an outbound peer connection that was established manually through one of several methods. The numbered arguments are stand-ins for the methods available to establish manual connections. - Manual saliente: agregada usando las opciones de configuración %1 o %2/%3 de RPC - - - Outbound Feeler: short-lived, for testing addresses - Explanatory text for a short-lived outbound peer connection that is used to test the aliveness of known addresses. - Feeler saliente: de corta duración, para probar direcciones - - - Outbound Address Fetch: short-lived, for soliciting addresses - Explanatory text for a short-lived outbound peer connection that is used to request addresses from a peer. - Recuperación de dirección saliente: de corta duración, para solicitar direcciones - - - detecting: peer could be v1 or v2 - Explanatory text for "detecting" transport type. - Detectando: el par puede ser v1 o v2 - - - v1: unencrypted, plaintext transport protocol - Explanatory text for v1 transport type. - v1: protocolo de transporte de texto simple sin encriptar - - - v2: BIP324 encrypted transport protocol - Explanatory text for v2 transport type. - v2: protocolo de transporte encriptado BIP324 - - - we selected the peer for high bandwidth relay - Seleccionamos el par para la retransmisión de banda ancha - - - the peer selected us for high bandwidth relay - El par nos seleccionó para la retransmisión de banda ancha - - - no high bandwidth relay selected - No se seleccionó la retransmisión de banda ancha - - - &Copy address - Context menu action to copy the address of a peer. - &Copiar dirección - - - &Disconnect - &Desconectar - - - 1 &hour - 1 &hora - - - 1 d&ay - 1 &día - - - 1 &week - 1 &semana - - - 1 &year - 1 &año - - - &Copy IP/Netmask - Context menu action to copy the IP/Netmask of a banned peer. IP/Netmask is the combination of a peer's IP address and its Netmask. For IP address, see: https://en.wikipedia.org/wiki/IP_address. - &Copiar IP/Máscara de red - - - &Unban - &Levantar prohibición - - - Network activity disabled - Actividad de red desactivada - - - None - Ninguno - - - Executing command without any wallet - Ejecutar comando sin ninguna billetera - - - Node window - [%1] - Ventana de nodo - [%1] - - - Executing command using "%1" wallet - Ejecutar comando usando la billetera "%1" - - - Welcome to the %1 RPC console. -Use up and down arrows to navigate history, and %2 to clear screen. -Use %3 and %4 to increase or decrease the font size. -Type %5 for an overview of available commands. -For more information on using this console, type %6. - -%7WARNING: 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.%8 - RPC console welcome message. Placeholders %7 and %8 are style tags for the warning content, and they are not space separated from the rest of the text intentionally. - Te damos la bienvenida a la consola RPC de %1. -Utiliza las flechas hacia arriba y abajo para navegar por el historial y %2 para borrar la pantalla. -Utiliza %3 y %4 para aumentar o disminuir el tamaño de la fuente. -Escribe %5 para ver los comandos disponibles. -Para obtener más información sobre cómo usar esta consola, escribe %6. - -%7 ADVERTENCIA: Los estafadores suelen decirles a los usuarios que escriban comandos aquí para robarles el contenido de sus billeteras. No uses esta consola sin entender completamente las ramificaciones de un comando.%8 - - - Executing… - A console message indicating an entered command is currently being executed. - Ejecutando... - - - (peer: %1) - (par: %1) - - - via %1 - a través de %1 - - - Yes - - - - To - A - - - From - De - - - Ban for - Prohibir por - - - Never - Nunca - - - Unknown - Desconocido - - - - ReceiveCoinsDialog - - &Amount: - &Importe: - - - &Label: - &Etiqueta: - - - &Message: - &Mensaje: - - - 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. - Mensaje opcional para adjuntar a la solicitud de pago, que se mostrará cuando se abra la solicitud. Nota: Este mensaje no se enviará con el pago a través de la red de Bitcoin. - - - An optional label to associate with the new receiving address. - Una etiqueta opcional para asociar con la nueva dirección de recepción. - - - Use this form to request payments. All fields are <b>optional</b>. - Usa este formulario para solicitar pagos. Todos los campos son <b>opcionales</b>. - - - An optional amount to request. Leave this empty or zero to not request a specific amount. - Un importe opcional para solicitar. Déjalo vacío o ingresa cero para no solicitar un importe específico. - - - 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. - Una etiqueta opcional para asociar con la nueva dirección de recepción (puedes usarla para identificar una factura). También se adjunta a la solicitud de pago. - - - An optional message that is attached to the payment request and may be displayed to the sender. - Un mensaje opcional que se adjunta a la solicitud de pago y que puede mostrarse al remitente. - - - &Create new receiving address - &Crear nueva dirección de recepción - - - Clear all fields of the form. - Borrar todos los campos del formulario. - - - Clear - Borrar - - - Requested payments history - Historial de pagos solicitados - - - Show the selected request (does the same as double clicking an entry) - Mostrar la solicitud seleccionada (equivale a hacer doble clic en una entrada) - - - Show - Mostrar - - - Remove the selected entries from the list - Eliminar las entradas seleccionadas de la lista - - - Remove - Eliminar - - - Copy &URI - Copiar &URI - - - &Copy address - &Copiar dirección - - - Copy &label - Copiar &etiqueta - - - Copy &message - Copiar &mensaje - - - Copy &amount - Copiar &importe - - - Not recommended due to higher fees and less protection against typos. - No se recomienda debido a las altas comisiones y la poca protección contra errores tipográficos. - - - Generates an address compatible with older wallets. - Genera una dirección compatible con billeteras más antiguas. - - - Generates a native segwit address (BIP-173). Some old wallets don't support it. - Genera una dirección segwit nativa (BIP-173). No es compatible con algunas billeteras antiguas. - - - Bech32m (BIP-350) is an upgrade to Bech32, wallet support is still limited. - Bech32m (BIP-350) es una actualización de Bech32. La compatibilidad con la billetera todavía es limitada. - - - Could not unlock wallet. - No se pudo desbloquear la billetera. - - - Could not generate new %1 address - No se pudo generar nueva dirección %1 - - - - ReceiveRequestDialog - - Request payment to … - Solicitar pago a... - - - Address: - Dirección: - - - Amount: - Importe: - - - Label: - Etiqueta: - - - Message: - Mensaje: - - - Wallet: - Billetera: - - - Copy &URI - Copiar &URI - - - Copy &Address - Copiar &dirección - - - &Verify - &Verificar - - - Verify this address on e.g. a hardware wallet screen - Verificar esta dirección, por ejemplo, en la pantalla de una billetera de hardware. - - - &Save Image… - &Guardar imagen... - - - Payment information - Información del pago - - - Request payment to %1 - Solicitar pago a %1 - - - - RecentRequestsTableModel - - Date - Fecha - - - Label - Etiqueta - - - Message - Mensaje - - - (no label) - (sin etiqueta) - - - (no message) - (sin mensaje) - - - (no amount requested) - (no se solicitó un importe) - - - Requested - Solicitado - - - - SendCoinsDialog - - Send Coins - Enviar monedas - - - Coin Control Features - Funciones de control de monedas - - - automatically selected - seleccionado automáticamente - - - Insufficient funds! - Fondos insuficientes - - - Quantity: - Cantidad: - - - Amount: - Importe: - - - Fee: - Comisión: - - - After Fee: - Después de la comisión: - - - Change: - Cambio: - - - If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. - Si se activa, pero la dirección de cambio está vacía o es inválida, el cambio se enviará a una dirección generada recientemente. - - - Custom change address - Dirección de cambio personalizada - - - Transaction Fee: - Comisión de transacción: - - - 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. - Si usas la opción "fallbackfee", la transacción puede tardar varias horas o días en confirmarse (o nunca hacerlo). Considera elegir la comisión de forma manual o espera hasta que hayas validado la cadena completa. - - - Warning: Fee estimation is currently not possible. - Advertencia: En este momento no se puede estimar la comisión. - - - per kilobyte - por kilobyte - - - Hide - Ocultar - - - Recommended: - Recomendado: - - - Custom: - Personalizado: - - - Send to multiple recipients at once - Enviar a múltiples destinatarios a la vez - - - Add &Recipient - Agregar &destinatario - - - Clear all fields of the form. - Borrar todos los campos del formulario. - - - Inputs… - Entradas... - - - Choose… - Elegir... - - - Hide transaction fee settings - Ocultar configuración de la comisión de transacción - - - Specify a custom fee per kB (1,000 bytes) of the transaction's virtual size. - -Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satoshis per kvB" for a transaction size of 500 virtual bytes (half of 1 kvB) would ultimately yield a fee of only 50 satoshis. - Especifica una comisión personalizada por kB (1000 bytes) del tamaño virtual de la transacción. - -Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por kvB" para una transacción de 500 bytes virtuales (la mitad de 1 kvB) produciría, en última instancia, una comisión de solo 50 satoshis. - - - 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. - Cuando hay menos volumen de transacciones que espacio en los bloques, los mineros y los nodos de retransmisión pueden aplicar una comisión mínima. Está bien pagar solo esta comisión mínima, pero ten en cuenta que esto puede ocasionar que una transacción nunca se confirme una vez que haya más demanda de transacciones de Bitcoin de la que puede procesar la red. - - - A too low fee might result in a never confirming transaction (read the tooltip) - Si la comisión es demasiado baja, es posible que la transacción nunca se confirme (leer la información en pantalla). - - - (Smart fee not initialized yet. This usually takes a few blocks…) - (La comisión inteligente no se ha inicializado todavía. Esto tarda normalmente algunos bloques…) - - - Confirmation time target: - Objetivo de tiempo de confirmación: - - - Enable Replace-By-Fee - Activar "Remplazar por comisión" - - - With Replace-By-Fee (BIP-125) you can increase a transaction's fee after it is sent. Without this, a higher fee may be recommended to compensate for increased transaction delay risk. - Con la función "Remplazar por comisión" (BIP-125), puedes aumentar la comisión de una transacción después de enviarla. Sin esta, es posible que se recomiende una comisión más alta para compensar el mayor riesgo de retraso de la transacción. - - - Clear &All - Borrar &todo - - - Balance: - Saldo: - - - Confirm the send action - Confirmar el envío - - - S&end - &Enviar - - - Copy quantity - Copiar cantidad - - - Copy amount - Copiar cantidad - - - Copy fee - Copiar comisión - - - Copy after fee - Copiar después de aplicar donación - - - Copy bytes - Copiar bytes - - - Copy change - Copiar cambio - - - %1 (%2 blocks) - %1 (%2 bloques) - - - Sign on device - "device" usually means a hardware wallet. - Firmar en el dispositivo - - - Connect your hardware wallet first. - Conecta primero tu billetera de hardware. - - - Set external signer script path in Options -> Wallet - "External signer" means using devices such as hardware wallets. - Establecer la ruta al script del firmante externo en "Opciones -> Billetera" - - - Cr&eate Unsigned - &Crear sin firmar - - - Creates a Partially Signed Bitcoin Transaction (PSBT) for use with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet. - Crea una transacción de Bitcoin parcialmente firmada (TBPF) para usarla, por ejemplo, con una billetera %1 sin conexión o una billetera de hardware compatible con TBPF. - - - %1 to '%2' - %1 a '%2' - - - %1 to %2 - %1 a %2 - - - To review recipient list click "Show Details…" - Para consultar la lista de destinatarios, haz clic en "Mostrar detalles..." - - - Sign failed - Error de firma - - - External signer not found - "External signer" means using devices such as hardware wallets. - No se encontró el dispositivo firmante externo - - - External signer failure - "External signer" means using devices such as hardware wallets. - Error de firmante externo - - - Save Transaction Data - Guardar datos de la transacción - - - Partially Signed Transaction (Binary) - Expanded name of the binary PSBT file format. See: BIP 174. - Transacción parcialmente firmada (binario) - - - PSBT saved - Popup message when a PSBT has been saved to a file - TBPF guardada - - - External balance: - Saldo externo: - - - or - o - - - You can increase the fee later (signals Replace-By-Fee, BIP-125). - Puedes aumentar la comisión después (indica "Remplazar por comisión", BIP-125). - - - 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. - Text to inform a user attempting to create a transaction of their current options. At this stage, a user can only create a PSBT. This string is displayed when private keys are disabled and an external signer is not available. - Revisa por favor la propuesta de transacción. Esto producirá una transacción de Bitcoin parcialmente firmada (TBPF) que puedes guardar o copiar y, luego, firmar; por ejemplo, una billetera %1 fuera de línea o una billetera de hardware compatible con TBPF. - - - %1 from wallet '%2' - %1 desde billetera "%2" - - - Do you want to create this transaction? - Message displayed when attempting to create a transaction. Cautionary text to prompt the user to verify that the displayed transaction details represent the transaction the user intends to create. - ¿Quieres crear esta transacción? - - - Please, review your transaction. You can create and send this transaction or create 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. - Text to inform a user attempting to create a transaction of their current options. At this stage, a user can send their transaction or create a PSBT. This string is displayed when both private keys and PSBT controls are enabled. - Revisa la transacción. Puedes crear y enviar esta transacción de Bitcoin parcialmente firmada (TBPF), que además puedes guardar o copiar y, luego, firmar; por ejemplo, una billetera %1 sin conexión o una billetera de hardware compatible con TBPF. - - - Please, review your transaction. - Text to prompt a user to review the details of the transaction they are attempting to send. - Revisa la transacción. - - - Transaction fee - Comisión de transacción - - - Not signalling Replace-By-Fee, BIP-125. - No indica "Remplazar por comisión", BIP-125. - - - Total Amount - Importe total - - - Unsigned Transaction - PSBT copied - Caption of "PSBT has been copied" messagebox - Transacción sin firmar - - - The PSBT has been copied to the clipboard. You can also save it. - Se copió la TBPF al portapapeles. También puedes guardarla. - - - PSBT saved to disk - TBPF guardada en el disco - - - Confirm send coins - Confirmar el envío de monedas - - - Watch-only balance: - Saldo solo de observación: - - - The recipient address is not valid. Please recheck. - La dirección del destinatario no es válida. Revísala. - - - The amount to pay must be larger than 0. - El importe por pagar tiene que ser mayor que 0. - - - The amount exceeds your balance. - El importe sobrepasa el saldo. - - - The total exceeds your balance when the %1 transaction fee is included. - El total sobrepasa el saldo cuando se incluye la comisión de transacción de %1. - - - Duplicate address found: addresses should only be used once each. - Se encontró una dirección duplicada: las direcciones solo se deben usar una vez. - - - Transaction creation failed! - Fallo al crear la transacción - - - A fee higher than %1 is considered an absurdly high fee. - Una comisión mayor que %1 se considera absurdamente alta. - - - Estimated to begin confirmation within %n block(s). - - Se estima que empiece a confirmarse dentro de %n bloque. - Se estima que empiece a confirmarse dentro de %n bloques. - - - - Warning: Invalid Bitcoin address - Advertencia: Dirección de Bitcoin inválida - - - Warning: Unknown change address - Advertencia: Dirección de cambio desconocida - - - Confirm custom change address - Confirmar la dirección de cambio personalizada - - - 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? - La dirección que seleccionaste para el cambio no es parte de esta billetera. Una parte o la totalidad de los fondos en la billetera se enviará a esta dirección. ¿Seguro deseas continuar? - - - (no label) - (sin etiqueta) - - - - SendCoinsEntry - - A&mount: - &Importe: - - - Pay &To: - Pagar &a: - - - &Label: - &Etiqueta: - - - Choose previously used address - Seleccionar dirección usada anteriormente - - - The Bitcoin address to send the payment to - La dirección de Bitcoin a la que se enviará el pago - - - Paste address from clipboard - Pegar dirección desde el portapapeles - - - Remove this entry - Eliminar esta entrada - - - The amount to send in the selected unit - El importe que se enviará en la unidad seleccionada - - - 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. - La comisión se deducirá del importe que se envía. El destinatario recibirá menos bitcoins que los que ingreses en el campo del importe. Si se seleccionan varios destinatarios, la comisión se dividirá por igual. - - - S&ubtract fee from amount - &Restar la comisión del importe - - - Use available balance - Usar el saldo disponible - - - Message: - Mensaje: - - - Enter a label for this address to add it to the list of used addresses - Ingresar una etiqueta para esta dirección a fin de agregarla a la lista de direcciones utilizadas - - - 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. - Un mensaje adjunto al URI de tipo "bitcoin:" que se almacenará con la transacción a modo de referencia. Nota: Este mensaje no se enviará por la red de Bitcoin. - - - - SendConfirmationDialog - - Send - Enviar - - - Create Unsigned - Crear sin firmar - - - - SignVerifyMessageDialog - - Signatures - Sign / Verify a Message - Firmas: firmar o verificar un mensaje - - - &Sign Message - &Firmar mensaje - - - You can sign messages/agreements with your legacy (P2PKH) 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. - Puedes firmar mensajes o acuerdos con tus direcciones tipo legacy (P2PKH) para demostrar que puedes recibir los bitcoins que se envíen a ellas. Ten cuidado de no firmar cosas confusas o al azar, ya que los ataques de phishing pueden tratar de engañarte para que les envíes la firma con tu identidad. Firma solo declaraciones totalmente detalladas con las que estés de acuerdo. - - - The Bitcoin address to sign the message with - La dirección de Bitcoin con la que se firmará el mensaje - - - Choose previously used address - Seleccionar dirección usada anteriormente - - - Paste address from clipboard - Pegar dirección desde el portapapeles - - - Enter the message you want to sign here - Ingresar aquí el mensaje que deseas firmar - - - Signature - Firma - - - Copy the current signature to the system clipboard - Copiar la firma actual al portapapeles del sistema - - - Sign the message to prove you own this Bitcoin address - Firmar el mensaje para demostrar que esta dirección de Bitcoin te pertenece - - - Sign &Message - Firmar &mensaje - - - Reset all sign message fields - Restablecer todos los campos de firma de mensaje - - - Clear &All - Borrar &todo - - - &Verify Message - &Verificar mensaje - - - Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction! - Ingresa la dirección del destinatario, el mensaje (recuerda copiar los saltos de línea, espacios, tabulaciones, etc. con exactitud) y la firma a continuación para verificar el mensaje. Ten cuidado de no leer en la firma más de lo que está en el mensaje firmado en sí, para evitar ser víctima de un engaño por ataque de intermediario. Ten en cuenta que esto solo demuestra que el firmante recibe con la dirección; no puede demostrar la condición de remitente de ninguna transacción. - - - The Bitcoin address the message was signed with - La dirección de Bitcoin con la que se firmó el mensaje - - - The signed message to verify - El mensaje firmado para verificar - - - The signature given when the message was signed - La firma que se dio cuando el mensaje se firmó - - - Verify the message to ensure it was signed with the specified Bitcoin address - Verifica el mensaje para asegurarte de que se firmó con la dirección de Bitcoin especificada. - - - Verify &Message - Verificar &mensaje - - - Reset all verify message fields - Restablecer todos los campos de verificación de mensaje - - - Click "Sign Message" to generate signature - Hacer clic en "Firmar mensaje" para generar una firma - - - The entered address is invalid. - La dirección ingresada es inválida. - - - Please check the address and try again. - Revisa la dirección e intenta de nuevo. - - - The entered address does not refer to a legacy (P2PKH) key. Message signing for SegWit and other non-P2PKH address types is not supported in this version of %1. Please check the address and try again. - La dirección ingresada no se refiere a una clave tipo legacy (P2PKH). La firma de mensajes para direcciones SegWit y de otros tipos que no sean P2PKH no es compatible con esta versión de %1. Comprueba la dirección e inténtalo de nuevo. - - - Wallet unlock was cancelled. - Se canceló el desbloqueo de la billetera. - - - No error - Sin error - - - Private key for the entered address is not available. - La clave privada para la dirección ingresada no está disponible. - - - Message signing failed. - Error al firmar el mensaje. - - - Message signed. - Mensaje firmado. - - - The signature could not be decoded. - La firma no pudo decodificarse. - - - Please check the signature and try again. - Comprueba la firma e intenta de nuevo. - - - The signature did not match the message digest. - La firma no coincide con la síntesis del mensaje. - - - Message verification failed. - Falló la verificación del mensaje. - - - Message verified. - Mensaje verificado. - - - - SplashScreen - - (press q to shutdown and continue later) - (Presionar q para apagar y seguir luego) - - - press q to shutdown - Presionar q para apagar - - - - TransactionDesc - - conflicted with a transaction with %1 confirmations - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that conflicts with a confirmed transaction. - Hay un conflicto con una transacción con %1 confirmaciones - - - 0/unconfirmed, in memory pool - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is in the memory pool. - 0/sin confirmar, en el pool de memoria - - - 0/unconfirmed, not in memory pool - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is not in the memory pool. - 0/sin confirmar, no está en el pool de memoria - - - abandoned - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an abandoned transaction. - abandonada - - - %1/unconfirmed - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in at least one block, but less than 6 blocks. - %1/sin confirmar - - - %1 confirmations - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in 6 or more blocks. - %1 confirmaciones - - - Status - Estado - - - Date - Fecha - - - Source - Origen - - - Generated - Generado - - - From - De - - - unknown - desconocido - - - To - A - - - own address - dirección propia - - - watch-only - Solo de observación - - - label - etiqueta - - - Credit - Crédito - - - matures in %n more block(s) - - madura en %n bloque más - madura en %n bloques más - - - - not accepted - no aceptada - - - Debit - Débito - - - Total debit - Débito total - - - Total credit - Crédito total - - - Transaction fee - Comisión de transacción - - - Net amount - Importe neto - - - Message - Mensaje - - - Comment - Comentario - - - Transaction ID - Identificador de transacción - - - Transaction total size - Tamaño total de transacción - - - Transaction virtual size - Tamaño virtual de transacción - - - Output index - Índice de salida - - - %1 (Certificate was not verified) - %1 (El certificado no fue verificado) - - - Merchant - Comerciante - - - Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Las monedas generadas deben madurar %1 bloques antes de que se puedan gastar. Cuando generaste este bloque, se transmitió a la red para agregarlo a la cadena de bloques. Si no logra entrar a la cadena, su estado cambiará a "no aceptado" y no se podrá gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque a pocos segundos del tuyo. - - - Debug information - Información de depuración - - - Transaction - Transacción - - - Inputs - Entradas - - - Amount - Importe - - - true - verdadero - - - false - falso - - - - TransactionDescDialog - - This pane shows a detailed description of the transaction - En este panel se muestra una descripción detallada de la transacción - - - Details for %1 - Detalles para %1 - - - - TransactionTableModel - - Date - Fecha - - - Type - Tipo - - - Label - Etiqueta - - - Unconfirmed - Sin confirmar - - - Abandoned - Abandonada - - - Confirming (%1 of %2 recommended confirmations) - Confirmando (%1 de %2 confirmaciones recomendadas) - - - Confirmed (%1 confirmations) - Confirmada (%1 confirmaciones) - - - Conflicted - En conflicto - - - Immature (%1 confirmations, will be available after %2) - Inmadura (%1 confirmaciones; estará disponibles después de %2) - - - Generated but not accepted - Generada pero no aceptada - - - Received with - Recibida con - - - Received from - Recibida de - - - Sent to - Enviada a - - - Mined - Minada - - - watch-only - Solo de observación - - - (n/a) - (n/d) - - - (no label) - (sin etiqueta) - - - Transaction status. Hover over this field to show number of confirmations. - Estado de la transacción. Pasa el mouse sobre este campo para ver el número de confirmaciones. - - - Date and time that the transaction was received. - Fecha y hora en las que se recibió la transacción. - - - Type of transaction. - Tipo de transacción. - - - Whether or not a watch-only address is involved in this transaction. - Si una dirección solo de observación está involucrada en esta transacción o no. - - - User-defined intent/purpose of the transaction. - Intención o propósito de la transacción definidos por el usuario. - - - Amount removed from or added to balance. - Importe restado del saldo o sumado a este. - - - - TransactionView - - All - Todo - - - Today - Hoy - - - This week - Esta semana - - - This month - Este mes - - - Last month - Mes pasado - - - This year - Este año - - - Received with - Recibida con - - - Sent to - Enviada a - - - Mined - Minada - - - Other - Otra - - - Enter address, transaction id, or label to search - Ingresar la dirección, el identificador de transacción o la etiqueta para buscar - - - Min amount - Importe mínimo - - - Range… - Rango... - - - &Copy address - &Copiar dirección - - - Copy &label - Copiar &etiqueta - - - Copy &amount - Copiar &importe - - - Copy transaction &ID - Copiar &identificador de transacción - - - Copy &raw transaction - Copiar transacción &sin procesar - - - Copy full transaction &details - Copiar &detalles completos de la transacción - - - &Show transaction details - &Mostrar detalles de la transacción - - - Increase transaction &fee - Aumentar &comisión de transacción - - - A&bandon transaction - &Abandonar transacción - - - &Edit address label - &Editar etiqueta de dirección - - - Show in %1 - Transactions table context menu action to show the selected transaction in a third-party block explorer. %1 is a stand-in argument for the URL of the explorer. - Mostrar en %1 - - - Export Transaction History - Exportar historial de transacciones - - - Comma separated file - Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. - Archivo separado por comas - - - Confirmed - Confirmada - - - Watch-only - Solo de observación - - - Date - Fecha - - - Type - Tipo - - - Label - Etiqueta - - - Address - Dirección - - - ID - Identificador - - - Exporting Failed - Error al exportar - - - There was an error trying to save the transaction history to %1. - Ocurrió un error al intentar guardar el historial de transacciones en %1. - - - Exporting Successful - Exportación correcta - - - The transaction history was successfully saved to %1. - El historial de transacciones se guardó correctamente en %1. - - - Range: - Rango: - - - to - a - - - - WalletFrame - - No wallet has been loaded. -Go to File > Open Wallet to load a wallet. -- OR - - No se cargó ninguna billetera. -Ir a "Archivo > Abrir billetera" para cargar una. -- O - - - - Create a new wallet - Crear una nueva billetera - - - Unable to decode PSBT from clipboard (invalid base64) - No se puede decodificar la TBPF desde el portapapeles (Base64 inválida) - - - Load Transaction Data - Cargar datos de la transacción - - - Partially Signed Transaction (*.psbt) - Transacción parcialmente firmada (*.psbt) - - - PSBT file must be smaller than 100 MiB - El archivo TBPF debe ser más pequeño de 100 MiB - - - Unable to decode PSBT - No se puede decodificar TBPF - - - - WalletModel - - Send Coins - Enviar monedas - - - Fee bump error - Error de incremento de comisión - - - Increasing transaction fee failed - Fallo al incrementar la comisión de transacción - - - Do you want to increase the fee? - Asks a user if they would like to manually increase the fee of a transaction that has already been created. - ¿Deseas incrementar la comisión? - - - Current fee: - Comisión actual: - - - Increase: - Incremento: - - - New fee: - Nueva comisión: - - - 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. - Advertencia: Esta acción puede pagar la comisión adicional al reducir las salidas de cambio o agregar entradas, cuando sea necesario. Asimismo, puede agregar una nueva salida de cambio si aún no existe una. Estos cambios pueden filtrar potencialmente información privada. - - - Confirm fee bump - Confirmar incremento de comisión - - - Can't draft transaction. - No se puede crear un borrador de la transacción. - - - PSBT copied - TBPF copiada - - - Fee-bump PSBT copied to clipboard - TBPF con incremento de comisión copiada en el portapapeles - - - Can't sign transaction. - No se puede firmar la transacción. - - - Could not commit transaction - No se pudo confirmar la transacción - - - Signer error - Error de firmante - - - Can't display address - No se puede mostrar la dirección - - - - WalletView - - &Export - &Exportar - - - Export the data in the current tab to a file - Exportar los datos de la pestaña actual a un archivo - - - Backup Wallet - Realizar copia de seguridad de la billetera - - - Wallet Data - Name of the wallet data file format. - Datos de la billetera - - - Backup Failed - Copia de seguridad fallida - - - There was an error trying to save the wallet data to %1. - Ocurrió un error al intentar guardar los datos de la billetera en %1. - - - Backup Successful - Copia de seguridad correcta - - - The wallet data was successfully saved to %1. - Los datos de la billetera se guardaron correctamente en %1. - - - Cancel - Cancelar - - - - bitcoin-core - - The %s developers - Los desarrolladores de %s - - - %s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup. - %s dañado. Trata de usar la herramienta de la billetera de Bitcoin para rescatar o restaurar una copia de seguridad. - - - %s failed to validate the -assumeutxo snapshot state. This indicates a hardware problem, or a bug in the software, or a bad software modification that allowed an invalid snapshot to be loaded. As a result of this, the node will shut down and stop using any state that was built on the snapshot, resetting the chain height from %d to %d. On the next restart, the node will resume syncing from %d without using any snapshot data. Please report this incident to %s, including how you obtained the snapshot. The invalid snapshot chainstate will be left on disk in case it is helpful in diagnosing the issue that caused this error. - %s no pudo validar el estado de la instantánea -assumeutxo. Esto indica un problema de hardware, un error en el software o una modificación incorrecta del software que permitió que se cargara una instantánea inválida. Por consiguiente, el nodo se apagará y dejará de utilizar cualquier estado basado en la instantánea, restableciendo la altura de la cadena de %d a %d. En el siguiente reinicio, el nodo reanudará la sincronización desde %d sin usar datos de instantánea. Reporta este incidente a %s, indicando cómo obtuviste la instantánea. Se dejó el estado de cadena de la instantánea inválida en el disco por si resulta útil para diagnosticar el problema que causó este error. - - - %s request to listen on port %u. This port is considered "bad" and thus it is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for details and a full list. - %s solicitud para escuchar en el puerto%u. Este puerto se considera "malo" y, por lo tanto, es poco probable que algún par se conecte a él. Consulta doc/p2p-bad-ports.md para obtener detalles y una lista completa. - - - Cannot downgrade wallet from version %i to version %i. Wallet version unchanged. - No se puede pasar de la versión %i a la versión anterior %i. La versión de la billetera no tiene cambios. - - - 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. - No se puede actualizar una billetera dividida no HD de la versión %i a la versión %i sin actualizar para admitir el pool de claves anterior a la división. Usa la versión %i o no especifiques la versión. - - - Disk space for %s may not accommodate the block files. Approximately %u GB of data will be stored in this directory. - Es posible que el espacio en disco %s no tenga capacidad para los archivos de bloque. Aproximadamente %u GB de datos se almacenarán en este directorio. - - - Distributed under the MIT software license, see the accompanying file %s or %s - Distribuido bajo la licencia de software MIT; ver el archivo adjunto %s o %s. - - - Error loading wallet. Wallet requires blocks to be downloaded, and software does not currently support loading wallets while blocks are being downloaded out of order when using assumeutxo snapshots. Wallet should be able to load successfully after node sync reaches height %s - Error al cargar la billetera. Esta requiere que se descarguen bloques, y el software actualmente no admite la carga de billeteras mientras los bloques se descargan fuera de orden, cuando se usan instantáneas de assumeutxo. La billetera debería poder cargarse correctamente después de que la sincronización del nodo alcance la altura %s. - - - Error reading %s! Transaction data may be missing or incorrect. Rescanning wallet. - ¡Error al leer %s! Es probable que falten los datos de la transacción o que sean incorrectos. Rescaneando billetera. - - - Error starting/committing db txn for wallet transactions removal process - Error al iniciar/cometer el proceso de eliminación de base de datos de transacciones de monedero - - - Error: Dumpfile format record is incorrect. Got "%s", expected "format". - Error: El registro del formato del archivo de volcado es incorrecto. Se obtuvo "%s", mientras que se esperaba "formato". - - - Error: Dumpfile identifier record is incorrect. Got "%s", expected "%s". - Error: El registro del identificador del archivo de volcado es incorrecto. Se obtuvo "%s", mientras que se esperaba "%s". - - - Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s - Error: La versión del archivo de volcado no es compatible. Esta versión de la billetera de Bitcoin solo admite archivos de volcado de la versión 1. Se obtuvo un archivo de volcado con la versión %s - - - Error: Legacy wallets only support the "legacy", "p2sh-segwit", and "bech32" address types - Error: Las billeteras "legacy" solo admiten los tipos de dirección "legacy", "p2sh-segwit" y "bech32". - - - Error: Unable to produce descriptors for this legacy wallet. Make sure to provide the wallet's passphrase if it is encrypted. - Error: No se pueden producir descriptores para esta billetera tipo legacy. Asegúrate de proporcionar la frase de contraseña de la billetera si está encriptada. - - - File %s already exists. If you are sure this is what you want, move it out of the way first. - El archivo %s ya existe. Si definitivamente quieres hacerlo, quítalo primero. - - - Invalid or corrupt peers.dat (%s). If you believe this is a bug, please report it to %s. As a workaround, you can move the file (%s) out of the way (rename, move, or delete) to have a new one created on the next start. - El archivo peers.dat (%s) es inválido o está dañado. Si crees que se trata de un error, infórmalo a %s. Como alternativa, puedes quitar el archivo (%s) (renombrarlo, moverlo o eliminarlo) para que se cree uno nuevo en el siguiente inicio. - - - Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets - Valor no válido detectado para '-wallet' o '-nowallet'. -wallet' requiere un valor de cadena, mientras que '-nowallet' sólo acepta '1' para desactivar todos los monederos. - - - More than one onion bind address is provided. Using %s for the automatically created Tor onion service. - Se proporciona más de una dirección de enlace onion. Se está usando %s para el servicio onion de Tor creado automáticamente. - - - No dump file provided. To use createfromdump, -dumpfile=<filename> must be provided. - No se proporcionó el archivo de volcado. Para usar createfromdump, se debe proporcionar -dumpfile=<filename>. - - - No dump file provided. To use dump, -dumpfile=<filename> must be provided. - No se proporcionó el archivo de volcado. Para usar dump, se debe proporcionar -dumpfile=<filename>. - - - No wallet file format provided. To use createfromdump, -format=<format> must be provided. - No se proporcionó el formato de archivo de billetera. Para usar createfromdump, se debe proporcionar -format=<format>. - - - Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. - La opción '-upnp' está activada, pero el soporte UPnP se eliminó en la versión 29.0. Considera usar '-natpmp' en su lugar. - - - Please contribute if you find %s useful. Visit %s for further information about the software. - Contribuye si te parece que %s es útil. Visita %s para obtener más información sobre el software. - - - Prune configured below the minimum of %d MiB. Please use a higher number. - La poda se configuró por debajo del mínimo de %d MiB. Usa un valor más alto. - - - Prune mode is incompatible with -reindex-chainstate. Use full -reindex instead. - El modo de poda es incompatible con -reindex-chainstate. Usa en su lugar un -reindex completo. - - - Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node) - Poda: la última sincronización de la billetera sobrepasa los datos podados. Tienes que ejecutar -reindex (descarga toda la cadena de bloques de nuevo en caso de tener un nodo podado) - - - Rename of '%s' -> '%s' failed. You should resolve this by manually moving or deleting the invalid snapshot directory %s, otherwise you will encounter the same error again on the next startup. - Error al cambiar el nombre de "%s" a "%s". Para resolverlo, mueve o elimina manualmente el directorio %s de la instantánea no válida. De lo contrario, encontrarás el mismo error de nuevo en el siguiente inicio. - - - SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported - SQLiteDatabase: versión desconocida del esquema de la billetera sqlite %d. Solo se admite la versión %d. - - - The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct - La base de datos de bloques contiene un bloque que parece ser del futuro. Es posible que se deba a que la fecha y hora de la computadora están mal configuradas. Reconstruye la base de datos de bloques solo si tienes la certeza de que la fecha y hora de la computadora son correctas. - - - The transaction amount is too small to send after the fee has been deducted - El importe de la transacción es demasiado pequeño para enviarlo después de deducir la comisión - - - 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 - Este error podría ocurrir si esta billetera no se cerró correctamente y se cargó por última vez usando una compilación con una versión más reciente de Berkeley DB. Si es así, usa el software que cargó por última vez esta billetera. - - - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - Esta es una compilación preliminar de prueba. Úsala bajo tu propia responsabilidad. No la uses para aplicaciones comerciales o de minería. - - - This is the maximum transaction fee you pay (in addition to the normal fee) to prioritize partial spend avoidance over regular coin selection. - Esta es la comisión máxima de transacción que pagas (además de la comisión normal) para priorizar la elusión del gasto parcial sobre la selección regular de monedas. - - - This is the transaction fee you may discard if change is smaller than dust at this level - Esta es la comisión de transacción que puedes descartar si el cambio es más pequeño que el remanente en este nivel. - - - This is the transaction fee you may pay when fee estimates are not available. - Esta es la comisión de transacción que puedes pagar cuando los cálculos de comisiones no estén disponibles. - - - Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments. - La longitud total de la cadena de versión de red ( %i) supera la longitud máxima (%i). Reduce el número o tamaño de uacomments . - - - Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate. - No se pueden reproducir bloques. Tendrás que reconstruir la base de datos usando -reindex-chainstate. - - - Unknown wallet file format "%s" provided. Please provide one of "bdb" or "sqlite". - Se proporcionó un formato de archivo de billetera desconocido "%s". Proporciona uno entre "bdb" o "sqlite". - - - Unsupported category-specific logging level %1$s=%2$s. Expected %1$s=<category>:<loglevel>. Valid categories: %3$s. Valid loglevels: %4$s. - El nivel de registro de la categoría específica no es compatible: %1$s=%2$s. Se esperaba %1$s=<category>:<loglevel>. Categorías válidas: %3$s. Niveles de registro válidos: %4 $s. - - - Unsupported chainstate database format found. Please restart with -reindex-chainstate. This will rebuild the chainstate database. - El formato de la base de datos chainstate es incompatible. Reinicia con -reindex-chainstate para reconstruir la base de datos chainstate. - - - Wallet created successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. - La billetera se creó correctamente. El tipo de billetera "legacy" se está descontinuando, por lo que la asistencia para crear y abrir estas billeteras se eliminará en el futuro. - - - Wallet loaded successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. Legacy wallets can be migrated to a descriptor wallet with migratewallet. - La billetera se creó correctamente. El tipo de billetera "legacy" se está descontinuando, por lo que la asistencia para crear y abrir estas billeteras se eliminará en el futuro. Las billeteras "legacy" se pueden migrar a una billetera basada en descriptores con "migratewallet". - - - Warning: Dumpfile wallet format "%s" does not match command line specified format "%s". - Advertencia: El formato de la billetera del archivo de volcado "%s" no coincide con el formato especificado en la línea de comandos "%s". - - - Warning: Private keys detected in wallet {%s} with disabled private keys - Advertencia: Claves privadas detectadas en la billetera {%s} con claves privadas deshabilitadas - - - Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. - Advertencia: Al parecer no estamos completamente de acuerdo con nuestros pares. Es posible que tengas que realizar una actualización, o que los demás nodos tengan que hacerlo. - - - Witness data for blocks after height %d requires validation. Please restart with -reindex. - Los datos del testigo para los bloques después de la altura %d requieren validación. Reinicia con -reindex. - - - You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain - Tienes que reconstruir la base de datos usando -reindex para volver al modo sin poda. Esto volverá a descargar toda la cadena de bloques. - - - %s is set very high! - ¡El valor de %s es muy alto! - - - -maxmempool must be at least %d MB - -maxmempool debe ser por lo menos de %d MB - - - Cannot obtain a lock on directory %s. %s is probably already running. - No se puede obtener un bloqueo en el directorio %s. %s probablemente ya se está ejecutando - - - Cannot resolve -%s address: '%s' - No se puede resolver la dirección de -%s: "%s" - - - Cannot set -forcednsseed to true when setting -dnsseed to false. - No se puede establecer el valor de -forcednsseed con la variable true al establecer el valor de -dnsseed con la variable false. - - - Cannot set -peerblockfilters without -blockfilterindex. - No se puede establecer -peerblockfilters sin -blockfilterindex. - - - %s is set very high! Fees this large could be paid on a single transaction. - El valor establecido para %s es demasiado alto. Las comisiones tan grandes se podrían pagar en una sola transacción. - - - Cannot provide specific connections and have addrman find outgoing connections at the same time. - No se pueden proporcionar conexiones específicas y hacer que addrman encuentre conexiones salientes al mismo tiempo. - - - Error loading %s: External signer wallet being loaded without external signer support compiled - Error al cargar %s: Se está cargando la billetera firmante externa sin que se haya compilado la compatibilidad del firmante externo - - - Error reading %s! All keys read correctly, but transaction data or address metadata may be missing or incorrect. - Error al leer %s. Todas las claves se leyeron correctamente, pero es probable que falten los datos de la transacción o metadatos de direcciones, o bien que sean incorrectos. - - - Error: Address book data in wallet cannot be identified to belong to migrated wallets - Error: No se puede identificar si los datos de la libreta de direcciones en la billetera pertenecen a billeteras migradas - - - Error: Duplicate descriptors created during migration. Your wallet may be corrupted. - Error: Se crearon descriptores duplicados durante la migración. Tu billetera podría estar dañada. - - - Error: Transaction %s in wallet cannot be identified to belong to migrated wallets - Error: No se puede identificar si la transacción %s en la billetera pertenece a billeteras migradas - - - Failed to calculate bump fees, because unconfirmed UTXOs depend on enormous cluster of unconfirmed transactions. - No se pudo calcular la comisión de incremento porque las UTXO sin confirmar dependen de un grupo enorme de transacciones no confirmadas. - - - Failed to remove snapshot chainstate dir (%s). Manually remove it before restarting. - - No se pudo eliminar la instantánea chainstate dir (%s). Elimínala manualmente antes de reiniciar. - - - - Failed to rename invalid peers.dat file. Please move or delete it and try again. - No se pudo cambiar el nombre del archivo peers.dat inválido. Muévelo o elimínalo, e intenta de nuevo. - - - Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable %s. - Error al calcular la comisión. La opción "fallbackfee" está desactivada. Espera algunos bloques o activa %s. - - - Flushing block file to disk failed. This is likely the result of an I/O error. - Ha fallado el volcado del archivo de bloques al disco. Es probable que se deba a un error de E/S. - - - Flushing undo file to disk failed. This is likely the result of an I/O error. - Ha fallado el volcado del archivo para deshacer al disco. Es probable que se deba a un error de E/S. - - - Incompatible options: -dnsseed=1 was explicitly specified, but -onlynet forbids connections to IPv4/IPv6 - Opciones incompatibles: -dnsseed=1 se especificó explícitamente, pero -onlynet prohíbe conexiones a IPv4/IPv6. - - - Invalid amount for %s=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions) - Importe inválido para %s=<amount>: "%s" (debe ser al menos la comisión mínima de retransmisión de %s para evitar transacciones atascadas) - - - Maximum transaction weight is less than transaction weight without inputs - El peso máximo de la transacción es menor que el peso de la transacción sin entradas - - - Maximum transaction weight is too low, can not accommodate change output - El peso máximo de la transacción es demasiado bajo, por lo que no puede incluir la salida de cambio. - - - Outbound connections restricted to CJDNS (-onlynet=cjdns) but -cjdnsreachable is not provided - Las conexiones salientes están restringidas a CJDNS (-onlynet=cjdns), pero no se proporciona -cjdnsreachable - - - Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is explicitly forbidden: -onion=0 - Las conexiones salientes están restringidas a Tor (-onlynet=onion), pero el proxy para conectarse con la red Tor está explícitamente prohibido: -onion=0. - - - Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is not provided: none of -proxy, -onion or -listenonion is given - Las conexiones salientes están restringidas a Tor (-onlynet=onion), pero no se proporciona el proxy para conectarse con la red Tor: no se indican -proxy, -onion ni -listenonion. - - - Outbound connections restricted to i2p (-onlynet=i2p) but -i2psam is not provided - Las conexiones salientes están restringidas a i2p (-onlynet=i2p), pero no se proporciona -i2psam - - - Rename of '%s' -> '%s' failed. Cannot clean up the background chainstate leveldb directory. - Ha fallado el cambio de nombre de ''%s" a ''%s". No se puede limpiar el directorio leveldb del estado de la cadena de fondo. - - - The combination of the pre-selected inputs and the wallet automatic inputs selection exceeds the transaction maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - La combinación de las entradas preseleccionadas y la selección automática de entradas de la billetera supera el peso máximo de la transacción. Intenta enviar un importe menor o consolidar manualmente las UTXO de la billetera. - - - The inputs size exceeds the maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - El tamaño de las entradas supera el peso máximo. Intenta enviar un importe menor o consolidar manualmente las UTXO de la billetera. - - - The preselected coins total amount does not cover the transaction target. Please allow other inputs to be automatically selected or include more coins manually - El monto total de las monedas preseleccionadas no cubre la meta de la transacción. Permite que se seleccionen automáticamente otras entradas o incluye más monedas manualmente. - - - Transaction requires one destination of non-0 value, a non-0 feerate, or a pre-selected input - La transacción requiere un destino de valor distinto de 0, una tasa de comisión distinta de 0, o una entrada preseleccionada. - - - UTXO snapshot failed to validate. Restart to resume normal initial block download, or try loading a different snapshot. - No se validó la instantánea de UTXO. Reinicia para reanudar la descarga de bloques inicial normal o intenta cargar una instantánea diferente. - - - Unconfirmed UTXOs are available, but spending them creates a chain of transactions that will be rejected by the mempool - Las UTXO sin confirmar están disponibles, pero si se gastan, se crea una cadena de transacciones que rechazará la mempool. - - - Unexpected legacy entry in descriptor wallet found. Loading wallet %s - -The wallet might have been tampered with or created with malicious intent. - - Se encontró una entrada inesperada tipo "legacy" en la billetera basada en descriptores. Cargando billetera%s - -Es posible que la billetera haya sido manipulada o creada con malas intenciones. - - - - Unrecognized descriptor found. Loading wallet %s - -The wallet might had been created on a newer version. -Please try running the latest software version. - - Se encontró un descriptor desconocido. Cargando billetera %s. - -La billetera se pudo hacer creado con una versión más reciente. -Intenta ejecutar la última versión del software. - - - - Your computer's date and time appear to be more than %d minutes out of sync with the network, this may lead to consensus failure. After you've confirmed your computer's clock, this message should no longer appear when you restart your node. Without a restart, it should stop showing automatically after you've connected to a sufficient number of new outbound peers, which may take some time. You can inspect the `timeoffset` field of the `getpeerinfo` and `getnetworkinfo` RPC methods to get more info. - La fecha y la hora de la computadora parecen estar más de %d minutos desincronizadas con la red, lo que puede producir un fallo de consenso. Después de confirmar el reloj de la computadora, este mensaje debería dejar de aparecer cuando reinicies el nodo. Sin reiniciar, debería dejar de mostrarse automáticamente después de que te hayas conectado a un número suficiente de nuevos pares salientes, lo que puede llevar cierto tiempo. Puedes inspeccionar el campo "timeoffset" de los métodos RPC "getpeerinfo" y "getnetworkinfo" para obtener más información. - - - -Unable to cleanup failed migration - -No se puede limpiar la migración fallida - - - -Unable to restore backup of wallet. - -No se puede restaurar la copia de seguridad de la billetera. - - - whitebind may only be used for incoming connections ("out" was passed) - whitebind solo puede utilizarse para conexiones entrantes (se ha pasado "out") - - - A fatal internal error occurred, see debug.log for details: - Ha ocurrido un error interno grave. Consulta debug.log para obtener más información: - - - Assumeutxo data not found for the given blockhash '%s'. - No se encontraron datos assumeutxo para el blockhash indicado "%s". - - - Block verification was interrupted - Se interrumpió la verificación de bloques - - - Cannot write to directory '%s'; check permissions. - No se puede escribir en el directorio '%s'; compruebe los permisos. - - - Config setting for %s only applied on %s network when in [%s] section. - La configuración para %s solo se aplica en la red %s cuando se encuentra en la sección [%s]. - - - Copyright (C) %i-%i - Derechos de autor (C) %i-%i - - - Corrupt block found indicating potential hardware failure. - Se encontró un bloque corrupto que indica un posible fallo del hardware. - - - Corrupted block database detected - Se detectó que la base de datos de bloques está dañada. - - - Could not find asmap file %s - No se pudo encontrar el archivo asmap %s - - - Could not parse asmap file %s - No se pudo analizar el archivo asmap %s - - - Disk space is too low! - ¡El espacio en disco es demasiado pequeño! - - - Done loading - Carga completa - - - Dump file %s does not exist. - El archivo de volcado %s no existe. - - - Elliptic curve cryptography sanity check failure. %s is shutting down. - Fallo en la prueba de cordura de la criptografía de curva elíptica. %s se apagará. - - - Error creating %s - Error al crear %s - - - Error initializing block database - Error al inicializar la base de datos de bloques - - - Error initializing wallet database environment %s! - Error al inicializar el entorno de la base de datos de la billetera %s. - - - Error loading %s - Error al cargar %s - - - Error loading %s: Private keys can only be disabled during creation - Error al cargar %s: Las claves privadas solo se pueden deshabilitar durante la creación - - - Error loading %s: Wallet corrupted - Error al cargar %s: billetera dañada - - - Error loading %s: Wallet requires newer version of %s - Error al cargar %s: la billetera requiere una versión más reciente de %s - - - Error loading block database - Error al cargar la base de datos de bloques - - - Error loading databases - Error cargando bases de datos - - - Error opening block database - Error al abrir la base de datos de bloques - - - Error opening coins database - Error al abrir la base de datos de monedas - - - Error reading configuration file: %s - Error al leer el archivo de configuración: %s - - - Error reading from database, shutting down. - Error al leer la base de datos. Se cerrará la aplicación. - - - Error reading next record from wallet database - Error al leer el siguiente registro de la base de datos de la billetera - - - Error: Cannot extract destination from the generated scriptpubkey - Error: No se puede extraer el destino del scriptpubkey generado - - - Error: Couldn't create cursor into database - Error: No se pudo crear el cursor en la base de datos - - - Error: Disk space is low for %s - Error: El espacio en disco es pequeño para %s - - - Error: Dumpfile checksum does not match. Computed %s, expected %s - Error: La suma de comprobación del archivo de volcado no coincide. Calculada:%s; prevista:%s. - - - Error: Failed to create new watchonly wallet - Error: No se pudo crear una billetera solo de observación - - - Error: Got key that was not hex: %s - Error: Se recibió una clave que no es hexadecimal (%s) - - - Error: Got value that was not hex: %s - Error: Se recibió un valor que no es hexadecimal (%s) - - - Error: Keypool ran out, please call keypoolrefill first - Error: El pool de claves se agotó. Invoca keypoolrefill primero. - - - Error: Missing checksum - Error: Falta la suma de comprobación - - - Error: No %s addresses available. - Error: No hay direcciones %s disponibles. - - - Error: This wallet already uses SQLite - Error: Esta billetera ya usa SQLite - - - Error: This wallet is already a descriptor wallet - Error: Esta billetera ya está basada en descriptores - - - Error: Unable to begin reading all records in the database - Error: No se pueden comenzar a leer todos los registros en la base de datos - - - Error: Unable to make a backup of your wallet - Error: No se puede realizar una copia de seguridad de la billetera - - - Error: Unable to parse version %u as a uint32_t - Error: No se puede analizar la versión %ucomo uint32_t - - - Error: Unable to read all records in the database - Error: No se pueden leer todos los registros en la base de datos - - - Error: Unable to read wallet's best block locator record - Error: No se pudo leer el registro del mejor localizador de bloques de la billetera. - - - Error: Unable to remove watchonly address book data - Error: No se pueden eliminar los datos de la libreta de direcciones solo de observación - - - Error: Unable to write data to disk for wallet %s - Error: No se pueden escribir datos en el disco para el monedero %s - - - Error: Unable to write record to new wallet - Error: No se puede escribir el registro en la nueva billetera - - - Error: Unable to write solvable wallet best block locator record - Error: No se pudo escribir el registro del mejor localizador de bloques de la billetera solucionable. - - - Error: Unable to write watchonly wallet best block locator record - Error: No se pudo escribir el registro del mejor localizador de bloques de la billetera solo de observación. - - - Error: database transaction cannot be executed for wallet %s - Error: la transacción de la base de datos no se puede ejecutar para la billetera %s - - - Failed to connect best block (%s). - No se pudo conectar el mejor bloque (%s). - - - Failed to disconnect block. - No se pudo desconectar el bloque. - - - Failed to listen on any port. Use -listen=0 if you want this. - Fallo al escuchar en todos los puertos. Usa -listen=0 si quieres hacerlo. - - - Failed to read block. - No se pudo leer el bloque. - - - Failed to rescan the wallet during initialization - Fallo al rescanear la billetera durante la inicialización - - - Failed to start indexes, shutting down.. - Error al iniciar índices, cerrando... - - - Failed to verify database - Fallo al verificar la base de datos - - - Failed to write block. - No se pudo escribir el bloque. - - - Failed to write to block index database. - Error al escribir en la base de datos del índice de bloques. - - - Failed to write to coin database. - Error al escribir en la base de datos de monedas. - - - Failed to write undo data. - Error al escribir datos para deshacer. - - - Failure removing transaction: %s - Error al eliminar la transacción: %s - - - Fee rate (%s) is lower than the minimum fee rate setting (%s) - La tasa de comisión (%s) es menor que el valor mínimo (%s) - - - Ignoring duplicate -wallet %s. - Ignorar duplicación de -wallet %s. - - - Importing… - Importando... - - - Incorrect or no genesis block found. Wrong datadir for network? - El bloque génesis es incorrecto o no se encontró. ¿El directorio de datos es equivocado para la red? - - - Initialization sanity check failed. %s is shutting down. - Fallo al inicializar la comprobación de estado. %s se cerrará. - - - Input not found or already spent - La entrada no se encontró o ya se gastó - - - Insufficient dbcache for block verification - Dbcache insuficiente para la verificación de bloques - - - Insufficient funds - Fondos insuficientes - - - Invalid -i2psam address or hostname: '%s' - Dirección o nombre de host de -i2psam inválido: "%s" - - - Invalid -onion address or hostname: '%s' - Dirección o nombre de host de -onion inválido: "%s" - - - Invalid -proxy address or hostname: '%s' - Dirección o nombre de host de -proxy inválido: "%s" - - - Invalid P2P permission: '%s' - Permiso P2P inválido: "%s" - - - Invalid amount for %s=<amount>: '%s' (must be at least %s) - Importe inválido para %s=<amount>: "%s" (debe ser por lo menos %s) - - - Invalid amount for %s=<amount>: '%s' - Importe inválido para %s=<amount>: "%s" - - - Invalid amount for -%s=<amount>: '%s' - Importe inválido para -%s=<amount>: "%s" - - - Invalid netmask specified in -whitelist: '%s' - Máscara de red inválida especificada en -whitelist: "%s" - - - Invalid port specified in %s: '%s' - Puerto no válido especificado en %s: "%s" - - - Invalid pre-selected input %s - La entrada preseleccionada no es válida %s - - - Listening for incoming connections failed (listen returned error %s) - Fallo al escuchar conexiones entrantes (la escucha devolvió el error %s) - - - Loading P2P addresses… - Cargando direcciones P2P... - - - Loading banlist… - Cargando lista de prohibiciones... - - - Loading block index… - Cargando índice de bloques... - - - Loading wallet… - Cargando billetera... - - - Maximum transaction weight must be between %d and %d - El peso máximo de la transacción debe estar entre %d y %d. - - - Missing amount - Falta el importe - - - Missing solving data for estimating transaction size - Faltan datos de resolución para estimar el tamaño de la transacción - - - Need to specify a port with -whitebind: '%s' - Se necesita especificar un puerto con -whitebind: "%s" - - - No addresses available - No hay direcciones disponibles - - - Not found pre-selected input %s - La entrada preseleccionada no se encontró %s - - - Not solvable pre-selected input %s - La entrada preseleccionada no se puede solucionar %s - - - Only direction was set, no permissions: '%s' - Solo se ha establecido la dirección, sin permisos: "%s" - - - Prune cannot be configured with a negative value. - La poda no se puede configurar con un valor negativo. - - - Prune mode is incompatible with -txindex. - El modo de poda es incompatible con -txindex. - - - Pruning blockstore… - Podando almacenamiento de bloques… - - - Reducing -maxconnections from %d to %d, because of system limitations. - Reduciendo -maxconnections de %d a %d, debido a limitaciones del sistema. - - - Replaying blocks… - Reproduciendo bloques… - - - Rescanning… - Rescaneando... - - - SQLiteDatabase: Failed to execute statement to verify database: %s - SQLiteDatabase: Fallo al ejecutar la instrucción para verificar la base de datos: %s - - - SQLiteDatabase: Failed to prepare statement to verify database: %s - SQLiteDatabase: Fallo al preparar la instrucción para verificar la base de datos: %s - - - SQLiteDatabase: Failed to read database verification error: %s - SQLiteDatabase: Fallo al leer el error de verificación de la base de datos: %s - - - SQLiteDatabase: Unexpected application id. Expected %u, got %u - SQLiteDatabase: Identificador de aplicación inesperado. Se esperaba %u; se recibió %u. - - - Section [%s] is not recognized. - La sección [%s] no se reconoce. - - - Signer did not echo address - El firmante no se hizo eco de la dirección - - - Signer echoed unexpected address %s - El firmante se hizo eco de una dirección inesperada %s - - - Signer returned error: %s - El firmante devolvió un error: %s - - - Signing transaction failed - Fallo al firmar la transacción - - - Specified -walletdir "%s" does not exist - El valor especificado de -walletdir "%s" no existe - - - Specified -walletdir "%s" is a relative path - El valor especificado de -walletdir "%s" es una ruta relativa - - - Specified -walletdir "%s" is not a directory - El valor especificado de -walletdir "%s" no es un directorio - - - Specified blocks directory "%s" does not exist. - El directorio de bloques especificado "%s" no existe. - - - Specified data directory "%s" does not exist. - El directorio de datos especificado "%s" no existe. - - - Starting network threads… - Iniciando subprocesos de red... - - - System error while flushing: %s - Error del sistema durante el vaciado:%s - - - System error while loading external block file: %s - Error del sistema al cargar un archivo de bloque externo: %s - - - System error while saving block to disk: %s - Error del sistema al guardar el bloque en el disco: %s - - - The source code is available from %s. - El código fuente está disponible en %s. - - - The specified config file %s does not exist - El archivo de configuración especificado %s no existe - - - The transaction amount is too small to pay the fee - El importe de la transacción es muy pequeño para pagar la comisión - - - The transactions removal process can only be executed within a db txn - El proceso de eliminación de transacciones sólo puede ejecutarse dentro de una base de datos de transacción - - - The wallet will avoid paying less than the minimum relay fee. - La billetera evitará pagar menos que la comisión mínima de retransmisión. - - - There is no ScriptPubKeyManager for this address - No hay ningún ScriptPubKeyManager para esta dirección. - - - This is experimental software. - Este es un software experimental. - - - This is the minimum transaction fee you pay on every transaction. - Esta es la comisión mínima de transacción que pagas en cada transacción. - - - This is the transaction fee you will pay if you send a transaction. - Esta es la comisión de transacción que pagarás si envías una transacción. - - - Transaction %s does not belong to this wallet - La transacción %s no pertenece a esta billetera - - - Transaction amount too small - El importe de la transacción es demasiado pequeño - - - Transaction amounts must not be negative - Los importes de la transacción no pueden ser negativos - - - Transaction change output index out of range - Índice de salidas de cambio de transacciones fuera de alcance - - - Transaction must have at least one recipient - La transacción debe incluir al menos un destinatario - - - Transaction needs a change address, but we can't generate it. - La transacción necesita una dirección de cambio, pero no podemos generarla. - - - Transaction too large - Transacción demasiado grande - - - Unable to bind to %s on this computer (bind returned error %s) - No se puede establecer un enlace a %s en esta computadora (bind devolvió el error %s) - - - Unable to bind to %s on this computer. %s is probably already running. - No se puede establecer un enlace a %s en este equipo. Es posible que %s ya esté en ejecución. - - - Unable to create the PID file '%s': %s - No se puede crear el archivo PID "%s": %s - - - Unable to find UTXO for external input - No se puede encontrar UTXO para la entrada externa - - - Unable to generate initial keys - No se pueden generar las claves iniciales - - - Unable to generate keys - No se pueden generar claves - - - Unable to open %s for writing - No se puede abrir %s para escribir - - - Unable to parse -maxuploadtarget: '%s' - No se puede analizar -maxuploadtarget: "%s" - - - Unable to start HTTP server. See debug log for details. - No se puede iniciar el servidor HTTP. Consulta el registro de depuración para obtener información. - - - Unable to unload the wallet before migrating - No se puede descargar la billetera antes de la migración - - - Unknown -blockfilterindex value %s. - Se desconoce el valor de -blockfilterindex %s. - - - Unknown address type '%s' - Se desconoce el tipo de dirección "%s" - - - Unknown change type '%s' - Se desconoce el tipo de cambio "%s" - - - Unknown network specified in -onlynet: '%s' - Se desconoce la red especificada en -onlynet: "%s" - - - Unknown new rules activated (versionbit %i) - Se desconocen las nuevas reglas activadas (versionbit %i) - - - Unrecognised option "%s" provided in -test=<option>. - Opción no reconocida "%s" proporcionada en -test=<option>. - - - Unsupported global logging level %s=%s. Valid values: %s. - El nivel de registro global %s=%s no es compatible. Valores válidos: %s. - - - Wallet file creation failed: %s - Error al crear el archivo de la billetera: %s - - - acceptstalefeeestimates is not supported on %s chain. - acceptstalefeeestimates no se admite en la cadena %s. - - - Unsupported logging category %s=%s. - La categoría de registro no es compatible %s=%s. - - - Do you want to rebuild the databases now? - ¿Quiere reconstruir la base de datos de bloques ahora? - - - Error: Could not add watchonly tx %s to watchonly wallet - Error: No se puede agregar la transacción solo de observación %s a la billetera solo de observación - - - Error: Could not delete watchonly transactions. - Error: No se pudieron eliminar las transacciones solo de observación - - - Error: Wallet does not exist - Error: La cartera no existe - - - Error: cannot remove legacy wallet records - Error: no se pueden eliminar los registros de cartera heredados - - - Not enough file descriptors available. %d available, %d required. - No hay suficientes descriptores de archivo disponibles. %d disponibles, %d requeridos. - - - User Agent comment (%s) contains unsafe characters. - El comentario del agente de usuario (%s) contiene caracteres inseguros. - - - Verifying blocks… - Verificando bloques... - - - Verifying wallet(s)… - Verificando billetera(s)... - - - Wallet needed to be rewritten: restart %s to complete - Es necesario rescribir la billetera: reiniciar %s para completar - - - Settings file could not be read - El archivo de configuración no se puede leer - - - Settings file could not be written - El archivo de configuración no se puede escribir - - - \ No newline at end of file diff --git a/src/qt/locale/bitcoin_es_SV.ts b/src/qt/locale/bitcoin_es_SV.ts deleted file mode 100644 index 319037a258f9..000000000000 --- a/src/qt/locale/bitcoin_es_SV.ts +++ /dev/null @@ -1,5044 +0,0 @@ - - - AddressBookPage - - Right-click to edit address or label - Hacer clic derecho para editar la dirección o etiqueta - - - Create a new address - Crear una nueva dirección - - - &New - &Nueva - - - Copy the currently selected address to the system clipboard - Copiar la dirección seleccionada actualmente al portapapeles del sistema - - - &Copy - &Copiar - - - C&lose - &Cerrar - - - Delete the currently selected address from the list - Eliminar la dirección seleccionada de la lista - - - Enter address or label to search - Ingresar una dirección o etiqueta para buscar - - - Export the data in the current tab to a file - Exportar los datos de la pestaña actual a un archivo - - - &Export - &Exportar - - - &Delete - &Borrar - - - Choose the address to send coins to - Elige la dirección a la que se enviarán monedas - - - Choose the address to receive coins with - Elige la dirección en la que se recibirán monedas - - - C&hoose - &Seleccionar - - - These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Estas son tus direcciones de Bitcoin para enviar pagos. Revisa siempre el importe y la dirección de recepción antes de enviar monedas. - - - These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. -Signing is only possible with addresses of the type 'legacy'. - Estas son tus direcciones de Bitcoin para recibir pagos. Usa el botón "Crear nueva dirección de recepción" en la pestaña "Recibir" para crear nuevas direcciones. -Solo es posible firmar con direcciones de tipo legacy. - - - &Copy Address - &Copiar dirección - - - Copy &Label - Copiar &etiqueta - - - &Edit - &Editar - - - Export Address List - Exportar lista de direcciones - - - Comma separated file - Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. - Archivo separado por comas - - - There was an error trying to save the address list to %1. Please try again. - An error message. %1 is a stand-in argument for the name of the file we attempted to save to. - Ocurrió un error al intentar guardar la lista de direcciones en %1. Inténtalo de nuevo. - - - Sending addresses - %1 - Direcciones de envío - %1 - - - Receiving addresses - %1 - Direcciones de recepción - %1 - - - Exporting Failed - Error al exportar - - - - AddressTableModel - - Label - Etiqueta - - - Address - Dirección - - - (no label) - (sin etiqueta) - - - - AskPassphraseDialog - - Passphrase Dialog - Diálogo de frase de contraseña - - - Enter passphrase - Ingresar la frase de contraseña - - - New passphrase - Nueva frase de contraseña - - - Repeat new passphrase - Repetir la nueva frase de contraseña - - - Show passphrase - Mostrar la frase de contraseña - - - Encrypt wallet - Encriptar billetera - - - This operation needs your wallet passphrase to unlock the wallet. - Esta operación requiere la frase de contraseña de la billetera para desbloquearla. - - - Unlock wallet - Desbloquear billetera - - - Change passphrase - Cambiar frase de contraseña - - - Confirm wallet encryption - Confirmar el encriptado de la billetera - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! - Advertencia: Si encriptas la billetera y pierdes tu frase de contraseña, ¡<b>PERDERÁS TODOS TUS BITCOINS</b>! - - - Are you sure you wish to encrypt your wallet? - ¿Seguro quieres encriptar la billetera? - - - Wallet encrypted - Billetera encriptada - - - Enter the new passphrase for the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. - Ingresa la nueva frase de contraseña para la billetera. <br/>Usa una frase de contraseña de <b>diez o más caracteres aleatorios</b>, u <b>ocho o más palabras</b>. - - - Enter the old passphrase and new passphrase for the wallet. - Ingresa la antigua frase de contraseña y la nueva frase de contraseña para la billetera. - - - Continue - Continuar - - - Back - Atrás - - - Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. - Recuerda que encriptar tu billetera no garantiza la protección total contra el robo de tus bitcoins si la computadora está infectada con malware. - - - Wallet to be encrypted - Billetera para encriptar - - - Your wallet is about to be encrypted. - Tu billetera está a punto de encriptarse. - - - Your wallet is now encrypted. - Tu billetera ahora está encriptada. - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANTE: Cualquier copia de seguridad anterior que hayas hecho del archivo de la billetera se deberá reemplazar por el nuevo archivo encriptado que generaste. Por motivos de seguridad, las copias de seguridad realizadas anteriormente quedarán obsoletas en cuanto empieces a usar la nueva billetera encriptada. - - - Wallet encryption failed - Falló el encriptado de la billetera - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - El encriptado de la billetera falló debido a un error interno. La billetera no se encriptó. - - - The supplied passphrases do not match. - Las frases de contraseña proporcionadas no coinciden. - - - Wallet unlock failed - Falló el desbloqueo de la billetera - - - The passphrase entered for the wallet decryption was incorrect. - La frase de contraseña introducida para el cifrado de la billetera es incorrecta. - - - The passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. If this is successful, please set a new passphrase to avoid this issue in the future. - La frase de contraseña ingresada para el descifrado de la billetera es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo . Si esto es correcto, establece una nueva frase de contraseña para evitar este problema en el futuro. - - - Wallet passphrase was successfully changed. - La frase de contraseña de la billetera se cambió correctamente. - - - Passphrase change failed - Error al cambiar la frase de contraseña - - - The old passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. - La frase de contraseña que se ingresó para descifrar la billetera es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo. - - - Warning: The Caps Lock key is on! - Advertencia: ¡Las mayúsculas están activadas! - - - - BanTableModel - - IP/Netmask - IP/Máscara de red - - - Banned Until - Prohibido hasta - - - - BitcoinApplication - - Settings file %1 might be corrupt or invalid. - El archivo de configuración %1 puede estar dañado o no ser válido. - - - Runaway exception - Excepción fuera de control - - - A fatal error occurred. %1 can no longer continue safely and will quit. - Se produjo un error fatal. %1 ya no puede continuar de manera segura y se cerrará. - - - Internal error - Error interno - - - An internal error occurred. %1 will attempt to continue safely. This is an unexpected bug which can be reported as described below. - Se produjo un error interno. %1 intentará continuar de manera segura. Este es un error inesperado que se puede reportar como se describe a continuación. - - - - QObject - - Do you want to reset settings to default values, or to abort without making changes? - Explanatory text shown on startup when the settings file cannot be read. Prompts user to make a choice between resetting or aborting. - ¿Deseas restablecer los valores a la configuración predeterminada o abortar sin realizar los cambios? - - - A fatal error occurred. Check that settings file is writable, or try running with -nosettings. - Explanatory text shown on startup when the settings file could not be written. Prompts user to check that we have the ability to write to the file. Explains that the user has the option of running without a settings file. - Se produjo un error fatal. Comprueba que el archivo de configuración soporte escritura o intenta ejecutar el programa con -nosettings. - - - %1 didn't yet exit safely… - %1 aún no se cerró de forma segura... - - - unknown - desconocido - - - Embedded "%1" - "%1" integrado - - - Default system font "%1" - Fuente predeterminada del sistema "%1" - - - Custom… - Personalizada... - - - Amount - Importe - - - Enter a Bitcoin address (e.g. %1) - Ingresar una dirección de Bitcoin (por ejemplo, %1) - - - Unroutable - No enrutable - - - Inbound - An inbound connection from a peer. An inbound connection is a connection initiated by a peer. - Entrante - - - Outbound - An outbound connection to a peer. An outbound connection is a connection initiated by us. - Saliente - - - Full Relay - Peer connection type that relays all network information. - Retransmisión completa - - - Block Relay - Peer connection type that relays network information about blocks and not transactions or addresses. - Retransmisión de bloques - - - Address Fetch - Short-lived peer connection type that solicits known addresses from a peer. - Recuperación de dirección - - - None - Ninguno - - - N/A - N/D - - - %n second(s) - - %n segundo - %n segundos - - - - %n minute(s) - - %n minuto - %n minutos - - - - %n hour(s) - - %n hora - %n horas - - - - %n day(s) - - %n día - %n días - - - - %n week(s) - - %n semana - %n semanas - - - - %1 and %2 - %1 y %2 - - - %n year(s) - - %n año - %n años - - - - default wallet - billetera por defecto - - - - BitcoinGUI - - &Overview - &Vista general - - - Show general overview of wallet - Muestra una vista general de la billetera - - - &Transactions - &Transacciones - - - Browse transaction history - Explora el historial de transacciones - - - E&xit - &Salir - - - Quit application - Salir del programa - - - &About %1 - &Acerca de %1 - - - Show information about %1 - Mostrar Información sobre %1 - - - About &Qt - Acerca de &Qt - - - Show information about Qt - Mostrar información sobre Qt - - - Modify configuration options for %1 - Modificar las opciones de configuración para %1 - - - Create a new wallet - Crear una nueva billetera - - - &Minimize - &Minimizar - - - Wallet: - Billetera: - - - Network activity disabled. - A substring of the tooltip. - Actividad de red deshabilitada. - - - Proxy is <b>enabled</b>: %1 - Proxy <b>habilitado</b>: %1 - - - Send coins to a Bitcoin address - Enviar monedas a una dirección de Bitcoin - - - Backup wallet to another location - Realizar copia de seguridad de la billetera en otra ubicación - - - Change the passphrase used for wallet encryption - Cambiar la frase de contraseña utilizada para encriptar la billetera - - - &Send - &Enviar - - - &Receive - &Recibir - - - &Encrypt Wallet… - &Encriptar billetera… - - - Encrypt the private keys that belong to your wallet - Encriptar las llaves privadas que pertenecen a tu billetera - - - &Backup Wallet… - &Realizar copia de seguridad de la billetera... - - - &Change Passphrase… - &Cambiar contraseña... - - - Sign &message… - Firmar &mensaje... - - - Sign messages with your Bitcoin addresses to prove you own them - Firmar un mensaje para provar que usted es dueño de esta dirección - - - &Verify message… - &Verificar mensaje... - - - &Load PSBT from file… - &Cargar TBPF desde el archivo... - - - Open &URI… - Abrir &URI… - - - Close Wallet… - Cerrar billetera... - - - Create Wallet… - Crear billetera... - - - Close All Wallets… - Cerrar todas las billeteras... - - - &Help - A&yuda - - - Syncing Headers (%1%)… - Sincronizando cabeceras (1%1%) - - - Synchronizing with network… - Sincronizando con la red... - - - Indexing blocks on disk… - Indexando bloques en disco... - - - Processing blocks on disk… - Procesando bloques en disco... - - - Connecting to peers… - Conectando con pares... - - - Request payments (generates QR codes and bitcoin: URIs) - Solicitar pagos (genera código QR y URI's de Bitcoin) - - - Show the list of used sending addresses and labels - Editar la lista de las direcciones y etiquetas almacenadas - - - Show the list of used receiving addresses and labels - Muestra la lista de direcciones de recepción y etiquetas - - - &Command-line options - &Opciones de línea de comandos - - - Processed %n block(s) of transaction history. - - %n bloque procesado del historial de transacciones. - %n bloques procesados del historial de transacciones. - - - - Catching up… - Poniéndose al día... - - - Last received block was generated %1 ago. - El último bloque recibido fue generado hace %1 - - - Transactions after this will not yet be visible. - Las transacciones posteriores aún no son visibles. - - - Warning - Advertencia - - - Up to date - Actualizado al día - - - Load Partially Signed Bitcoin Transaction - Cargar transacción de Bitcoin parcialmente firmada - - - Load PSBT from &clipboard… - Cargar TBPF desde el &portapapeles... - - - Node window - Ventana del nodo - - - Open node debugging and diagnostic console - Abrir la consola de depuración y diagnóstico del nodo - - - &Sending addresses - Direcciones de &envío - - - &Receiving addresses - Direcciones de &recepción - - - Open a bitcoin: URI - Abrir un bitcoin: URI - - - Open Wallet - Abrir billetera - - - Open a wallet - Abrir una cartera - - - Close wallet - Cerrar cartera - - - Restore Wallet… - Name of the menu item that restores wallet from a backup file. - Restaurar billetera… - - - Restore a wallet from a backup file - Status tip for Restore Wallet menu item - Restaurar una billetera desde un archivo de copia de seguridad - - - Close all wallets - Cerrar todas las billeteras - - - Migrate Wallet - Migrar billetera - - - Migrate a wallet - Migrar una billetera - - - No wallets available - No hay billeteras disponibles - - - Wallet Data - Name of the wallet data file format. - Datos de la billetera - - - Load Wallet Backup - The title for Restore Wallet File Windows - Cargar copia de seguridad de billetera - - - Restore Wallet - Title of pop-up window shown when the user is attempting to restore a wallet. - Restaurar billetera - - - Wallet Name - Label of the input field where the name of the wallet is entered. - Nombre de la billetera - - - &Window - &Ventana - - - Main Window - Ventana principal - - - %1 client - Cliente %1 - - - &Hide - &Ocultar - - - S&how - &Mostrar - - - %n active connection(s) to Bitcoin network. - A substring of the tooltip. - - %n conexión activa con la red de Bitcoin. - %n conexiónes activas con la red de Bitcoin. - - - - Click for more actions. - A substring of the tooltip. "More actions" are available via the context menu. - Haz clic para ver más acciones. - - - Show Peers tab - A context menu item. The "Peers tab" is an element of the "Node window". - Mostrar pestaña de pares - - - Disable network activity - A context menu item. - Deshabilitar actividad de red - - - Enable network activity - A context menu item. The network activity was disabled previously. - Habilitar actividad de red - - - Pre-syncing Headers (%1%)… - Presincronizando cabeceras (%1%)... - - - Error creating wallet - Error al crear billetera - - - Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets) - No se puede crear una billetera nueva, ya que el software se compiló sin compatibilidad con sqlite (requerida para billeteras basadas en descriptores) - - - Warning: %1 - Advertencia: %1 - - - Date: %1 - - Fecha: %1 - - - - Amount: %1 - - Importe: %1 - - - - Wallet: %1 - - Billetera: %1 - - - - Type: %1 - - Tipo: %1 - - - - Label: %1 - - Etiqueta %1 - - - - Address: %1 - - Dirección: %1 - - - - Sent transaction - Transacción enviada - - - Incoming transaction - Transacción entrante - - - HD key generation is <b>enabled</b> - La generación de clave HD está <b>habilitada</b> - - - HD key generation is <b>disabled</b> - La generación de clave HD está <b>deshabilitada</b> - - - Private key <b>disabled</b> - Clave privada <b>deshabilitada</b> - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - La billetera está <b>encriptada</b> y actualmente <b>desbloqueda</b> - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - La billetera está <b>encriptada</b> y actualmente <b>bloqueda</b> - - - Original message: - Mensaje original: - - - - UnitDisplayStatusBarControl - - Unit to show amounts in. Click to select another unit. - Unidad en la que se muestran los importes. Haz clic para seleccionar otra unidad. - - - - CoinControlDialog - - Coin Selection - Selección de monedas - - - Quantity: - Cantidad: - - - Amount: - Importe: - - - Fee: - Comisión: - - - After Fee: - Después de la comisión: - - - Change: - Cambio: - - - (un)select all - (des)marcar todos - - - Tree mode - Modo arbol - - - List mode - Modo de lista - - - Amount - Monto - - - Received with label - Recibido con etiqueta - - - Received with address - Recibido con etiqueta - - - Date - Fecha - - - Confirmations - Confirmaciones - - - Confirmed - Confirmada - - - Copy amount - Copiar cantidad - - - &Copy address - &Copiar dirección - - - Copy &label - Copiar &etiqueta - - - Copy &amount - Copiar &importe - - - Copy transaction &ID and output index - Copiar &identificador de transacción e índice de salidas - - - L&ock unspent - B&loquear no gastado - - - &Unlock unspent - &Desbloquear importe no gastado - - - Copy quantity - Copiar cantidad - - - Copy fee - Tarifa de copia - - - Copy after fee - Copiar después de la tarifa - - - Copy bytes - Copiar bytes - - - Copy change - Copiar cambio - - - (%1 locked) - (%1 bloqueado) - - - Can vary +/- %1 satoshi(s) per input. - Puede variar en +/- %1 satoshi(s) por entrada. - - - (no label) - (sin etiqueta) - - - change from %1 (%2) - Cambio desde %1 (%2) - - - (change) - (cambio) - - - - CreateWalletActivity - - Create Wallet - Title of window indicating the progress of creation of a new wallet. - Crear billetera - - - Creating Wallet <b>%1</b>… - Descriptive text of the create wallet progress window which indicates to the user which wallet is currently being created. - Creando billetera <b>%1</b>… - - - Create wallet failed - Fallo al crear la billetera - - - Create wallet warning - Advertencia de crear billetera - - - Can't list signers - No se puede hacer una lista de firmantes - - - Too many external signers found - Se encontraron demasiados firmantes externos - - - - LoadWalletsActivity - - Load Wallets - Title of progress window which is displayed when wallets are being loaded. - Cargar billeteras - - - Loading wallets… - Descriptive text of the load wallets progress window which indicates to the user that wallets are currently being loaded. - Cargando billeteras... - - - - MigrateWalletActivity - - Migrate wallet - Migrar billetera - - - Are you sure you wish to migrate the wallet <i>%1</i>? - ¿Seguro deseas migrar la billetera <i>%1</i>? - - - Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made. -If this wallet contains any watchonly scripts, a new wallet will be created which contains those watchonly scripts. -If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts. - -The migration process will create a backup of the wallet before migrating. This backup file will be named <wallet name>-<timestamp>.legacy.bak and can be found in the directory for this wallet. In the event of an incorrect migration, the backup can be restored with the "Restore Wallet" functionality. - La migración de la billetera la convertirá en una o más billeteras basadas en descriptores. Será necesario realizar una nueva copia de seguridad de la billetera. -Si esta billetera contiene scripts solo de observación, se creará una nueva billetera que los contenga. -Si esta billetera contiene scripts solucionables pero no de observación, se creará una nueva billetera diferente que los contenga. - -El proceso de migración creará una copia de seguridad de la billetera antes de proceder. Este archivo de copia de seguridad se llamará <wallet name>-<timestamp>.legacy.bak y se encontrará en el directorio de esta billetera. En caso de que la migración falle, se puede restaurar la copia de seguridad con la funcionalidad "Restaurar billetera". - - - Migrate Wallet - Migrar billetera - - - Migrating Wallet <b>%1</b>… - Migrando billetera <b>%1</b>… - - - The wallet '%1' was migrated successfully. - La migración de la billetera "%1" se realizó correctamente. - - - Watchonly scripts have been migrated to a new wallet named '%1'. - Los scripts solo de observación se migraron a una nueva billetera llamada "%1". - - - Solvable but not watched scripts have been migrated to a new wallet named '%1'. - Los scripts solucionables pero no de observación se migraron a una nueva billetera llamada "%1". - - - Migration failed - Migración errónea - - - Migration Successful - Migración correcta - - - - OpenWalletActivity - - Open wallet failed - Fallo al abrir billetera - - - Open wallet warning - Advertencia al abrir billetera - - - Open Wallet - Title of window indicating the progress of opening of a wallet. - Abrir billetera - - - Opening Wallet <b>%1</b>… - Descriptive text of the open wallet progress window which indicates to the user which wallet is currently being opened. - Abriendo billetera <b>%1</b>... - - - - RestoreWalletActivity - - Restore Wallet - Title of progress window which is displayed when wallets are being restored. - Restaurar billetera - - - Restoring Wallet <b>%1</b>… - Descriptive text of the restore wallets progress window which indicates to the user that wallets are currently being restored. - Restaurando billetera <b>%1</b>… - - - Restore wallet failed - Title of message box which is displayed when the wallet could not be restored. - Error al restaurar la billetera - - - Restore wallet warning - Title of message box which is displayed when the wallet is restored with some warning. - Advertencia al restaurar billetera - - - Restore wallet message - Title of message box which is displayed when the wallet is successfully restored. - Mensaje al restaurar billetera - - - - WalletController - - Close wallet - Cerrar billetera - - - Are you sure you wish to close the wallet <i>%1</i>? - ¿Seguro deseas cerrar la billetera <i>%1</i>? - - - Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. - Cerrar la billetera durante demasiado tiempo puede causar la resincronización de toda la cadena si el podado está habilitado. - - - Close all wallets - Cerrar todas las billeteras - - - Are you sure you wish to close all wallets? - ¿Seguro quieres cerrar todas las billeteras? - - - - CreateWalletDialog - - Create Wallet - Crear billetera - - - You are one step away from creating your new wallet! - Estás a un paso de crear tu nueva billetera. - - - Please provide a name and, if desired, enable any advanced options - Escribe un nombre y, si quieres, activa las opciones avanzadas. - - - Wallet Name - Nombre de la billetera - - - Wallet - Billetera - - - Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice. - Encriptar la billetera. La billetera se encriptará con una frase de contraseña de tu elección. - - - Encrypt Wallet - Encriptar billetera - - - Advanced Options - Opciones avanzadas - - - Disable private keys for this wallet. Wallets with private keys disabled will have no private keys and cannot have an HD seed or imported private keys. This is ideal for watch-only wallets. - Desactivar las claves privadas para esta billetera. Las billeteras con claves privadas desactivadas no tendrán claves privadas y no podrán tener ninguna semilla HD ni claves privadas importadas. Esto es ideal para billeteras solo de observación. - - - Disable Private Keys - Desactivar las claves privadas - - - Make a blank wallet. Blank wallets do not initially have private keys or scripts. Private keys and addresses can be imported, or an HD seed can be set, at a later time. - Crea una billetera en blanco. Las billeteras en blanco inicialmente no tienen llaves privadas ni scripts. Las llaves privadas y las direcciones pueden ser importadas o se puede establecer una semilla HD más tarde. - - - Make Blank Wallet - Crear billetera en blanco - - - Use an external signing device such as a hardware wallet. Configure the external signer script in wallet preferences first. - Usa un dispositivo de firma externo, por ejemplo, una billetera de hardware. Configura primero el script del firmante externo en las preferencias de la billetera. - - - External signer - Firmante externo - - - Create - Crear - - - Compiled without external signing support (required for external signing) - "External signing" means using devices such as hardware wallets. - Compilado sin compatibilidad con firma externa (requerida para la firma externa) - - - - EditAddressDialog - - Edit Address - Editar dirección - - - &Label - &Etiqueta - - - The label associated with this address list entry - La etiqueta asociada con esta entrada en la lista de direcciones - - - The address associated with this address list entry. This can only be modified for sending addresses. - La dirección asociada con esta entrada en la lista de direcciones. Solo se puede modificar para las direcciones de envío. - - - &Address - &Dirección - - - New sending address - Nueva dirección de envío - - - Edit receiving address - Editar dirección de recepción - - - Edit sending address - Editar dirección de envío - - - The entered address "%1" is not a valid Bitcoin address. - La dirección ingresada "%1" no es una dirección de Bitcoin válida. - - - Address "%1" already exists as a receiving address with label "%2" and so cannot be added as a sending address. - La dirección "%1" ya existe como dirección de recepción con la etiqueta "%2" y, por lo tanto, no se puede agregar como dirección de envío. - - - The entered address "%1" is already in the address book with label "%2". - La dirección ingresada "%1" ya está en la libreta de direcciones con la etiqueta "%2". - - - Could not unlock wallet. - No se pudo desbloquear la billetera. - - - New key generation failed. - Error al generar clave nueva. - - - - FreespaceChecker - - A new data directory will be created. - Se creará un nuevo directorio de datos. - - - name - nombre - - - Directory already exists. Add %1 if you intend to create a new directory here. - El directorio ya existe. Agrega %1 si deseas crear un nuevo directorio aquí. - - - Path already exists, and is not a directory. - Ruta de acceso existente, pero no es un directorio. - - - Cannot create data directory here. - No se puede crear un directorio de datos aquí. - - - - Intro - - %n GB of space available - - %n GB de espacio disponible - %n GB de espacio disponible - - - - (of %n GB needed) - - (de %n GB necesario) - (de %n GB necesarios) - - - - (%n GB needed for full chain) - - (%n GB necesario para completar la cadena) - (%n GB necesarios para completar la cadena) - - - - Choose data directory - Elegir directorio de datos - - - At least %1 GB of data will be stored in this directory, and it will grow over time. - Se almacenarán al menos %1 GB de datos en este directorio, que aumentarán con el tiempo. - - - Approximately %1 GB of data will be stored in this directory. - Se almacenarán aproximadamente %1 GB de datos en este directorio. - - - (sufficient to restore backups %n day(s) old) - Explanatory text on the capability of the current prune target. - - (suficiente para restaurar copias de seguridad de %n día de antigüedad) - (suficiente para restaurar copias de seguridad de %n días de antigüedad) - - - - %1 will download and store a copy of the Bitcoin block chain. - %1 descargará y almacenará una copia de la cadena de bloques de Bitcoin. - - - The wallet will also be stored in this directory. - La billetera también se almacenará en este directorio. - - - Error: Specified data directory "%1" cannot be created. - Error: No se puede crear el directorio de datos especificado "%1" . - - - Welcome - Te damos la bienvenida - - - Welcome to %1. - Te damos la bienvenida a %1. - - - As this is the first time the program is launched, you can choose where %1 will store its data. - Como es la primera vez que se ejecuta el programa, puedes elegir dónde %1 almacenará los datos. - - - Limit block chain storage to - Limitar el almacenamiento de la cadena de bloques a - - - Reverting this setting requires re-downloading the entire blockchain. It is faster to download the full chain first and prune it later. Disables some advanced features. - Para revertir esta configuración, se debe descargar de nuevo la cadena de bloques completa. Es más rápido descargar la cadena completa y podarla después. Desactiva algunas funciones avanzadas. - - - This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off. - La sincronización inicial consume muchos recursos y es posible que exponga problemas de hardware en la computadora que anteriormente pasaron desapercibidos. Cada vez que ejecutes %1, seguirá descargando desde el punto en el que quedó. - - - When you click OK, %1 will begin to download and process the full %4 block chain (%2 GB) starting with the earliest transactions in %3 when %4 initially launched. - Al hacer clic en OK, %1 iniciará el proceso de descarga y procesará la cadena de bloques %4 completa (%2 GB), empezando con la transacción más antigua en %3 cuando %4 se ejecutó inicialmente. - - - If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low. - Si elegiste la opción de limitar el almacenamiento de la cadena de bloques (podado), los datos históricos se deben descargar y procesar de igual manera, pero se eliminarán después para disminuir el uso del disco. - - - Use the default data directory - Usar el directorio de datos predeterminado - - - Use a custom data directory: - Usar un directorio de datos personalizado: - - - - HelpMessageDialog - - version - versión - - - About %1 - Acerca de %1 - - - Command-line options - Opciones de línea de comandos - - - - ShutdownWindow - - %1 is shutting down… - %1 se está cerrando... - - - Do not shut down the computer until this window disappears. - No apagues la computadora hasta que desaparezca esta ventana. - - - - ModalOverlay - - Form - Formulario - - - Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. - Es posible que las transacciones recientes aún no sean visibles y, por lo tanto, el saldo de la billetera podría ser incorrecto. Esta información será correcta una vez que la billetera haya terminado de sincronizarse con la red de Bitcoin, como se detalla abajo. - - - Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. - La red no aceptará si se intenta gastar bitcoins afectados por las transacciones que aún no se muestran. - - - Number of blocks left - Número de bloques restantes - - - Unknown… - Desconocido... - - - calculating… - calculando... - - - Last block time - Hora del último bloque - - - Progress - Progreso - - - Progress increase per hour - Avance del progreso por hora - - - Estimated time left until synced - Tiempo estimado restante hasta la sincronización - - - Hide - Ocultar - - - %1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain. - %1 se está sincronizando actualmente. Descargará encabezados y bloques de pares, y los validará hasta alcanzar el extremo de la cadena de bloques. - - - Unknown. Syncing Headers (%1, %2%)… - Desconocido. Sincronizando encabezados (%1, %2%)… - - - Unknown. Pre-syncing Headers (%1, %2%)… - Desconocido. Presincronizando encabezados (%1, %2%)… - - - - OpenURIDialog - - Open bitcoin URI - Abrir URI de bitcoin - - - Paste address from clipboard - Tooltip text for button that allows you to paste an address that is in your clipboard. - Pegar dirección desde el portapapeles - - - - OptionsDialog - - Options - Opciones - - - &Main - &Principal - - - Automatically start %1 after logging in to the system. - Iniciar automáticamente %1 después de iniciar sesión en el sistema. - - - &Start %1 on system login - &Iniciar %1 al iniciar sesión en el sistema - - - Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain. - Al activar el podado, se reduce considerablemente el espacio de disco necesario para almacenar las transacciones. Todos los bloques aún se validan completamente. Para revertir esta opción, se requiere descargar de nuevo toda la cadena de bloques. - - - Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. - Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. - Tamaño máximo de la caché de la base de datos. Una caché más grande puede contribuir a una sincronización más rápida, después de lo cual el beneficio es menos pronunciado para la mayoría de los casos de uso. Disminuir el tamaño de la caché reducirá el uso de la memoria. La memoria del mempool no utilizada se comparte para esta caché. - - - Size of &database cache - Tamaño de la caché de la &base de datos - - - Number of script &verification threads - Número de subprocesos de &verificación de scripts - - - Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! - Ruta completa a un script compatible con %1 (p. ej., C:\Descargas\hwi.exe o /Usuarios/Tú/Descargas/hwi.py). Advertencia: ¡El malware podría robarte tus monedas! - - - Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. - Abre el puerto del cliente de Bitcoin en el enrutador automáticamente. Esto solo funciona cuando el enrutador soporta NAT-PMP o PCP y está activo. El puerto externo podría ser elegido al azar. - - - Map port using PCP or NA&T-PMP - Mapear el puerto usando NAT-PMP - - - IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) - Dirección IP del proxy (por ejemplo, IPv4: 127.0.0.1 / IPv6: ::1) - - - Shows if the supplied default SOCKS5 proxy is used to reach peers via this network type. - Muestra si el proxy SOCKS5 por defecto suministrado se utiliza para llegar a los pares a través de este tipo de red. - - - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu. - Minimizar en vez de salir de la aplicación cuando la ventana está cerrada. Cuando se activa esta opción, la aplicación solo se cerrará después de seleccionar "Salir" en el menú. - - - Font in the Overview tab: - Fuente en la pestaña "Vista general": - - - Options set in this dialog are overridden by the command line: - Las opciones establecidas en este diálogo serán anuladas por la línea de comandos: - - - Open the %1 configuration file from the working directory. - Abrir el archivo de configuración %1 en el directorio de trabajo. - - - Open Configuration File - Abrir archivo de configuración - - - Reset all client options to default. - Restablecer todas las opciones del cliente a los valores predeterminados. - - - &Reset Options - &Restablecer opciones - - - &Network - &Red - - - Prune &block storage to - Podar el almacenamiento de &bloques a - - - Reverting this setting requires re-downloading the entire blockchain. - Para revertir esta configuración, se debe descargar de nuevo la cadena de bloques completa. - - - Set the number of script verification threads. Negative values correspond to the number of cores you want to leave free to the system. - Tooltip text for Options window setting that sets the number of script verification threads. Explains that negative values mean to leave these many cores free to the system. - Establece el número de subprocesos de verificación de scripts. Los valores negativos corresponden al número de núcleos que se desea dejar libres al sistema. - - - (0 = auto, <0 = leave that many cores free) - (0 = auto, <0 = deja esta cantidad de núcleos libres) - - - This allows you or a third party tool to communicate with the node through command-line and JSON-RPC commands. - Tooltip text for Options window setting that enables the RPC server. - Esto te permite a ti o a una herramienta de terceros comunicarse con el nodo a través de la línea de comandos y los comandos JSON-RPC. - - - Enable R&PC server - An Options window setting to enable the RPC server. - Activar servidor R&PC - - - W&allet - &Billetera - - - Whether to set subtract fee from amount as default or not. - Tooltip text for Options window setting that sets subtracting the fee from a sending amount as default. - Si se resta o no la comisión del importe por defecto. - - - Subtract &fee from amount by default - An Options window setting to set subtracting the fee from a sending amount as default. - Restar &comisión del importe por defecto - - - Expert - Experto - - - Enable coin &control features - Habilitar funciones de &control de monedas - - - If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. - Si deshabilitas el gasto del cambio sin confirmar, no se puede usar el cambio de una transacción hasta que esta tenga al menos una confirmación. Esto también afecta cómo se calcula el saldo. - - - &Spend unconfirmed change - &Gastar cambio sin confirmar - - - Enable &PSBT controls - An options window setting to enable PSBT controls. - Activar controles de &TBPF - - - Whether to show PSBT controls. - Tooltip text for options window setting that enables PSBT controls. - Si se muestran los controles de TBPF. - - - External Signer (e.g. hardware wallet) - Firmante externo (p. ej., billetera de hardware) - - - &External signer script path - &Ruta al script del firmante externo - - - Accept connections from outside. - Aceptar conexiones externas. - - - Allow incomin&g connections - &Permitir conexiones entrantes - - - Connect to the Bitcoin network through a SOCKS5 proxy. - Conectarse a la red de Bitcoin a través de un proxy SOCKS5. - - - &Connect through SOCKS5 proxy (default proxy): - &Conectarse a través del proxy SOCKS5 (proxy predeterminado): - - - Proxy &IP: - &IP del proxy: - - - &Port: - &Puerto: - - - Port of the proxy (e.g. 9050) - Puerto del proxy (p. ej., 9050) - - - Used for reaching peers via: - Usado para conectarse con pares a través de: - - - &Window - &Ventana - - - Show the icon in the system tray. - Mostrar el ícono en la bandeja del sistema. - - - &Show tray icon - &Mostrar el ícono de la bandeja - - - Show only a tray icon after minimizing the window. - Mostrar solo un ícono de bandeja después de minimizar la ventana. - - - &Minimize to the tray instead of the taskbar - &Minimizar a la bandeja en vez de la barra de tareas - - - M&inimize on close - &Minimizar al cerrar - - - &Display - &Visualización - - - User Interface &language: - &Idioma de la interfaz de usuario: - - - The user interface language can be set here. This setting will take effect after restarting %1. - El idioma de la interfaz de usuario puede establecerse aquí. Esta configuración surtirá efecto después de reiniciar %1. - - - &Unit to show amounts in: - &Unidad en la que se muestran los importes: - - - Choose the default subdivision unit to show in the interface and when sending coins. - Elegir la unidad de subdivisión predeterminada para mostrar en la interfaz y al enviar monedas. - - - Third-party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |. - Las URL de terceros (por ejemplo, un explorador de bloques) que aparecen en la pestaña de transacciones como elementos del menú contextual. El hash de la transacción remplaza el valor %s en la URL. Varias URL se separan con una barra vertical (|). - - - &Third-party transaction URLs - &URL de transacciones de terceros - - - Whether to show coin control features or not. - Si se muestran o no las funcionalidades de control de monedas. - - - Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services. - Conectarse a la red de Bitcoin a través de un proxy SOCKS5 independiente para los servicios onion de Tor. - - - Use separate SOCKS&5 proxy to reach peers via Tor onion services: - Usar un proxy SOCKS&5 independiente para comunicarse con pares a través de los servicios onion de Tor: - - - &Cancel - &Cancelar - - - Compiled without external signing support (required for external signing) - "External signing" means using devices such as hardware wallets. - Compilado sin compatibilidad con firma externa (requerida para la firma externa) - - - default - predeterminado - - - none - ninguno - - - Confirm options reset - Window title text of pop-up window shown when the user has chosen to reset options. - Confirmar restablecimiento de opciones - - - Client restart required to activate changes. - Text explaining that the settings changed will not come into effect until the client is restarted. - Es necesario reiniciar el cliente para activar los cambios. - - - Current settings will be backed up at "%1". - Text explaining to the user that the client's current settings will be backed up at a specific location. %1 is a stand-in argument for the backup location's path. - Se realizará una copia de seguridad de la configuración actual en "%1". - - - Client will be shut down. Do you want to proceed? - Text asking the user to confirm if they would like to proceed with a client shutdown. - El cliente se cerrará. ¿Quieres continuar? - - - Configuration options - Window title text of pop-up box that allows opening up of configuration file. - Opciones de configuración - - - The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file. - Explanatory text about the priority order of instructions considered by client. The order from high to low being: command-line, configuration file, GUI settings. - El archivo de configuración se usa para especificar opciones avanzadas del usuario, que remplazan la configuración de la GUI. Además, las opciones de la línea de comandos remplazarán este archivo de configuración. - - - Continue - Continuar - - - Cancel - Cancelar - - - The configuration file could not be opened. - No se pudo abrir el archivo de configuración. - - - This change would require a client restart. - Estos cambios requieren reiniciar el cliente. - - - The supplied proxy address is invalid. - La dirección del proxy proporcionada es inválida. - - - - OptionsModel - - Could not read setting "%1", %2. - No se puede leer la configuración "%1", %2. - - - - OverviewPage - - Form - Formulario - - - 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. - La información mostrada puede estar desactualizada. La billetera se sincroniza automáticamente con la red de Bitcoin después de establecer una conexión, pero este proceso aún no se ha completado. - - - Watch-only: - Solo de observación: - - - Available: - Disponible: - - - Your current spendable balance - Tu saldo disponible para gastar actualmente - - - Pending: - Pendiente: - - - Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance - Total de transacciones que aún se deben confirmar y que no se contabilizan dentro del saldo disponible para gastar - - - Immature: - Inmaduro: - - - Mined balance that has not yet matured - Saldo minado que aún no ha madurado - - - Balances - Saldos - - - Your current total balance - Tu saldo total actual - - - Your current balance in watch-only addresses - Tu saldo actual en direcciones solo de observación - - - Spendable: - Gastable: - - - Recent transactions - Transacciones recientes - - - Unconfirmed transactions to watch-only addresses - Transacciones sin confirmar hacia direcciones solo de observación - - - Mined balance in watch-only addresses that has not yet matured - Saldo minado en direcciones solo de observación que aún no ha madurado - - - Current total balance in watch-only addresses - Saldo total actual en direcciones solo de observación - - - Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings->Mask values. - Modo de privacidad activado para la pestaña de vista general. Para mostrar los valores, anula la selección de "Configuración->Ocultar valores". - - - - PSBTOperationsDialog - - PSBT Operations - Operaciones TBPF - - - Sign Tx - Firmar transacción - - - Broadcast Tx - Transmitir transacción - - - Copy to Clipboard - Copiar al portapapeles - - - Save… - Guardar... - - - Close - Cerrar - - - Failed to load transaction: %1 - Error al cargar la transacción: %1 - - - Failed to sign transaction: %1 - Error al firmar la transacción: %1 - - - Cannot sign inputs while wallet is locked. - No se pueden firmar entradas mientras la billetera está bloqueada. - - - Could not sign any more inputs. - No se pudieron firmar más entradas. - - - Signed %1 inputs, but more signatures are still required. - Se firmaron %1 entradas, pero aún se requieren más firmas. - - - Signed transaction successfully. Transaction is ready to broadcast. - La transacción se firmó correctamente y está lista para transmitirse. - - - Unknown error processing transaction. - Error desconocido al procesar la transacción. - - - Transaction broadcast successfully! Transaction ID: %1 - ¡La transacción se transmitió correctamente! Identificador de transacción: %1 - - - Transaction broadcast failed: %1 - Error al transmitir la transacción: %1 - - - PSBT copied to clipboard. - TBPF copiada al portapapeles. - - - Save Transaction Data - Guardar datos de la transacción - - - Partially Signed Transaction (Binary) - Expanded name of the binary PSBT file format. See: BIP 174. - Transacción parcialmente firmada (binario) - - - PSBT saved to disk. - TBPF guardada en el disco. - - - Sends %1 to %2 - Envía %1 a %2 - - - own address - dirección propia - - - Unable to calculate transaction fee or total transaction amount. - No se puede calcular la comisión o el importe total de la transacción. - - - Pays transaction fee: - Paga comisión de transacción: - - - Total Amount - Importe total - - - or - o - - - Transaction has %1 unsigned inputs. - La transacción tiene %1 entradas sin firmar. - - - Transaction is missing some information about inputs. - Falta información sobre las entradas de la transacción. - - - Transaction still needs signature(s). - La transacción aún necesita firma(s). - - - (But no wallet is loaded.) - (Pero no se cargó ninguna billetera). - - - (But this wallet cannot sign transactions.) - (Pero esta billetera no puede firmar transacciones). - - - (But this wallet does not have the right keys.) - (Pero esta billetera no tiene las claves adecuadas). - - - Transaction is fully signed and ready for broadcast. - La transacción se firmó completamente y está lista para transmitirse. - - - Transaction status is unknown. - El estado de la transacción es desconocido. - - - - PaymentServer - - Payment request error - Error en la solicitud de pago - - - Cannot start bitcoin: click-to-pay handler - No se puede iniciar el controlador "bitcoin: click-to-pay" - - - URI handling - Gestión de URI - - - 'bitcoin://' is not a valid URI. Use 'bitcoin:' instead. - "bitcoin://" no es un URI válido. Usa "bitcoin:" en su lugar. - - - Cannot process payment request because BIP70 is not supported. -Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored. -If you are receiving this error you should request the merchant provide a BIP21 compatible URI. - No se puede procesar la solicitud de pago porque no existe compatibilidad con BIP70. -Debido a los fallos de seguridad generalizados en BIP70, se recomienda encarecidamente ignorar las instrucciones del comerciante para cambiar de billetera. -Si recibes este error, debes solicitar al comerciante que te proporcione un URI compatible con BIP21. - - - URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters. - No se puede analizar el URI. Esto se puede deber a una dirección de Bitcoin inválida o a parámetros de URI con formato incorrecto. - - - Payment request file handling - Gestión del archivo de solicitud de pago - - - - PeerTableModel - - User Agent - Title of Peers Table column which contains the peer's User Agent string. - Agente de usuario - - - Peer - Title of Peers Table column which contains a unique number used to identify a connection. - Par - - - Age - Title of Peers Table column which indicates the duration (length of time) since the peer connection started. - Antigüedad - - - Direction - Title of Peers Table column which indicates the direction the peer connection was initiated from. - Dirección - - - Sent - Title of Peers Table column which indicates the total amount of network information we have sent to the peer. - Enviado - - - Received - Title of Peers Table column which indicates the total amount of network information we have received from the peer. - Recibido - - - Address - Title of Peers Table column which contains the IP/Onion/I2P address of the connected peer. - Dirección - - - Type - Title of Peers Table column which describes the type of peer connection. The "type" describes why the connection exists. - Tipo - - - Network - Title of Peers Table column which states the network the peer connected through. - Red - - - Inbound - An Inbound Connection from a Peer. - Entrante - - - Outbound - An Outbound Connection to a Peer. - Saliente - - - - QRImageWidget - - &Save Image… - &Guardar imagen... - - - &Copy Image - &Copiar imagen - - - Resulting URI too long, try to reduce the text for label / message. - El URI resultante es demasiado largo, así que trata de reducir el texto de la etiqueta o el mensaje. - - - Error encoding URI into QR Code. - Fallo al codificar URI en código QR. - - - QR code support not available. - La compatibilidad con el código QR no está disponible. - - - Save QR Code - Guardar código QR - - - PNG Image - Expanded name of the PNG file format. See: https://en.wikipedia.org/wiki/Portable_Network_Graphics. - Imagen PNG - - - - RPCConsole - - N/A - N/D - - - Client version - Versión del cliente - - - &Information - &Información - - - Datadir - Directorio de datos - - - To specify a non-default location of the data directory use the '%1' option. - Para especificar una ubicación no predeterminada del directorio de datos, usa la opción "%1". - - - Blocksdir - Directorio de bloques - - - To specify a non-default location of the blocks directory use the '%1' option. - Para especificar una ubicación no predeterminada del directorio de bloques, usa la opción "%1". - - - Startup time - Tiempo de inicio - - - Network - Red - - - Name - Nombre - - - Number of connections - Número de conexiones - - - Local Addresses - Direcciones locales - - - Network addresses that your Bitcoin node is currently using to communicate with other nodes. - Direcciones de red que tu nodo Bitcoin usa actualmente para comunicarse con otros nodos. - - - Block chain - Cadena de bloques - - - Memory Pool - Pool de memoria - - - Current number of transactions - Número total de transacciones - - - Memory usage - Uso de memoria - - - Wallet: - Billetera: - - - (none) - (ninguna) - - - &Reset - &Restablecer - - - Received - Recibido - - - Sent - Enviado - - - &Peers - &Pares - - - Banned peers - Pares prohibidos - - - Select a peer to view detailed information. - Selecciona un par para ver la información detallada. - - - Hide Peers Detail - Ocultar detalles de pares - - - The transport layer version: %1 - Versión de la capa de transporte: %1 - - - Transport - Transporte - - - Session ID - Identificador de sesión - - - Version - Versión - - - Whether we relay transactions to this peer. - Si retransmitimos las transacciones a este par. - - - Transaction Relay - Retransmisión de transacción - - - Starting Block - Bloque inicial - - - Synced Headers - Encabezados sincronizados - - - Synced Blocks - Bloques sincronizados - - - Last Transaction - Última transacción - - - The mapped Autonomous System used for diversifying peer selection. - El sistema autónomo asignado que se usó para diversificar la selección de pares. - - - Mapped AS - SA asignado - - - Whether we relay addresses to this peer. - Tooltip text for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - Si retransmitimos las direcciones a este par. - - - Address Relay - Text title for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - Retransmisión de direcciones - - - The total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Tooltip text for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - El número total de direcciones recibidas desde este par que se procesaron (excluye las direcciones desestimadas debido a la limitación de volumen). - - - The total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Tooltip text for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - El número total de direcciones recibidas desde este par que se desestimaron (no se procesaron) debido a la limitación de volumen. - - - Addresses Processed - Text title for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Direcciones procesadas - - - Addresses Rate-Limited - Text title for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Direcciones desestimadas por limitación de volumen - - - User Agent - Agente de usuario - - - Node window - Ventana del nodo - - - Current block height - Altura del bloque actual - - - Open the %1 debug log file from the current data directory. This can take a few seconds for large log files. - Abrir el archivo de registro de depuración %1 en el directorio de datos actual. Esto puede tardar unos segundos para los archivos de registro grandes. - - - Decrease font size - Disminuir tamaño de fuente - - - Increase font size - Aumentar tamaño de fuente - - - Permissions - Permisos - - - The direction and type of peer connection: %1 - La dirección y el tipo de conexión entre pares: %1 - - - Direction/Type - Dirección/Tipo - - - The BIP324 session ID string in hex. - La cadena del identificador de sesión BIP324 en formato hexadecimal. - - - The network protocol this peer is connected through: IPv4, IPv6, Onion, I2P, or CJDNS. - El protocolo de red mediante el cual está conectado este par: IPv4, IPv6, Onion, I2P o CJDNS. - - - Services - Servicios - - - High bandwidth BIP152 compact block relay: %1 - Retransmisión de bloques compactos BIP152 en banda ancha: %1 - - - High Bandwidth - Banda ancha - - - Connection Time - Tiempo de conexión - - - Elapsed time since a novel block passing initial validity checks was received from this peer. - Tiempo transcurrido desde que se recibió de este par un nuevo bloque que superó las comprobaciones de validez iniciales. - - - Last Block - Último bloque - - - Elapsed time since a novel transaction accepted into our mempool was received from this peer. - Tooltip text for the Last Transaction field in the peer details area. - Tiempo transcurrido desde que se recibió de este par una nueva transacción aceptada en nuestra mempool. - - - Last Send - Último envío - - - Last Receive - Última recepción - - - Ping Time - Tiempo de ping - - - The duration of a currently outstanding ping. - La duración de un ping actualmente pendiente. - - - Ping Wait - Espera de ping - - - Min Ping - Ping mínimo - - - Time Offset - Desfase temporal - - - Last block time - Hora del último bloque - - - &Open - &Abrir - - - &Console - &Consola - - - &Network Traffic - &Tráfico de red - - - Totals - Totales - - - Debug log file - Archivo del registro de depuración - - - Clear console - Borrar consola - - - In: - Entrada: - - - Out: - Salida: - - - Inbound: initiated by peer - Explanatory text for an inbound peer connection. - Entrante: iniciada por el par - - - Outbound Full Relay: default - Explanatory text for an outbound peer connection that relays all network information. This is the default behavior for outbound connections. - Retransmisión completa saliente: predeterminada - - - Outbound Block Relay: does not relay transactions or addresses - Explanatory text for an outbound peer connection that relays network information about blocks and not transactions or addresses. - Retransmisión de bloque saliente: no retransmite transacciones o direcciones - - - Outbound Manual: added using RPC %1 or %2/%3 configuration options - Explanatory text for an outbound peer connection that was established manually through one of several methods. The numbered arguments are stand-ins for the methods available to establish manual connections. - Manual saliente: agregada usando las opciones de configuración %1 o %2/%3 de RPC - - - Outbound Feeler: short-lived, for testing addresses - Explanatory text for a short-lived outbound peer connection that is used to test the aliveness of known addresses. - Feeler saliente: de corta duración, para probar direcciones - - - Outbound Address Fetch: short-lived, for soliciting addresses - Explanatory text for a short-lived outbound peer connection that is used to request addresses from a peer. - Recuperación de dirección saliente: de corta duración, para solicitar direcciones - - - detecting: peer could be v1 or v2 - Explanatory text for "detecting" transport type. - Detectando: el par puede ser v1 o v2 - - - v1: unencrypted, plaintext transport protocol - Explanatory text for v1 transport type. - v1: protocolo de transporte de texto simple sin encriptar - - - v2: BIP324 encrypted transport protocol - Explanatory text for v2 transport type. - v2: protocolo de transporte encriptado BIP324 - - - we selected the peer for high bandwidth relay - Seleccionamos el par para la retransmisión de banda ancha - - - the peer selected us for high bandwidth relay - El par nos seleccionó para la retransmisión de banda ancha - - - no high bandwidth relay selected - No se seleccionó la retransmisión de banda ancha - - - &Copy address - Context menu action to copy the address of a peer. - &Copiar dirección - - - &Disconnect - &Desconectar - - - 1 &hour - 1 &hora - - - 1 d&ay - 1 &día - - - 1 &week - 1 &semana - - - 1 &year - 1 &año - - - &Copy IP/Netmask - Context menu action to copy the IP/Netmask of a banned peer. IP/Netmask is the combination of a peer's IP address and its Netmask. For IP address, see: https://en.wikipedia.org/wiki/IP_address. - &Copiar IP/Máscara de red - - - &Unban - &Levantar prohibición - - - Network activity disabled - Actividad de red desactivada - - - None - Ninguno - - - Executing command without any wallet - Ejecutar comando sin ninguna billetera - - - Node window - [%1] - Ventana de nodo - [%1] - - - Executing command using "%1" wallet - Ejecutar comando usando la billetera "%1" - - - Welcome to the %1 RPC console. -Use up and down arrows to navigate history, and %2 to clear screen. -Use %3 and %4 to increase or decrease the font size. -Type %5 for an overview of available commands. -For more information on using this console, type %6. - -%7WARNING: 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.%8 - RPC console welcome message. Placeholders %7 and %8 are style tags for the warning content, and they are not space separated from the rest of the text intentionally. - Te damos la bienvenida a la consola RPC de %1. -Utiliza las flechas hacia arriba y abajo para navegar por el historial y %2 para borrar la pantalla. -Utiliza %3 y %4 para aumentar o disminuir el tamaño de la fuente. -Escribe %5 para ver los comandos disponibles. -Para obtener más información sobre cómo usar esta consola, escribe %6. - -%7 ADVERTENCIA: Los estafadores suelen decirles a los usuarios que escriban comandos aquí para robarles el contenido de sus billeteras. No uses esta consola sin entender completamente las ramificaciones de un comando.%8 - - - Executing… - A console message indicating an entered command is currently being executed. - Ejecutando... - - - (peer: %1) - (par: %1) - - - via %1 - a través de %1 - - - Yes - - - - To - A - - - From - De - - - Ban for - Prohibir por - - - Never - Nunca - - - Unknown - Desconocido - - - - ReceiveCoinsDialog - - &Amount: - &Importe: - - - &Label: - &Etiqueta: - - - &Message: - &Mensaje: - - - 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. - Mensaje opcional para adjuntar a la solicitud de pago, que se mostrará cuando se abra la solicitud. Nota: Este mensaje no se enviará con el pago a través de la red de Bitcoin. - - - An optional label to associate with the new receiving address. - Una etiqueta opcional para asociar con la nueva dirección de recepción. - - - Use this form to request payments. All fields are <b>optional</b>. - Usa este formulario para solicitar pagos. Todos los campos son <b>opcionales</b>. - - - An optional amount to request. Leave this empty or zero to not request a specific amount. - Un importe opcional para solicitar. Déjalo vacío o ingresa cero para no solicitar un importe específico. - - - 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. - Una etiqueta opcional para asociar con la nueva dirección de recepción (puedes usarla para identificar una factura). También se adjunta a la solicitud de pago. - - - An optional message that is attached to the payment request and may be displayed to the sender. - Un mensaje opcional que se adjunta a la solicitud de pago y que puede mostrarse al remitente. - - - &Create new receiving address - &Crear nueva dirección de recepción - - - Clear all fields of the form. - Borrar todos los campos del formulario. - - - Clear - Borrar - - - Requested payments history - Historial de pagos solicitados - - - Show the selected request (does the same as double clicking an entry) - Mostrar la solicitud seleccionada (equivale a hacer doble clic en una entrada) - - - Show - Mostrar - - - Remove the selected entries from the list - Eliminar las entradas seleccionadas de la lista - - - Remove - Eliminar - - - Copy &URI - Copiar &URI - - - &Copy address - &Copiar dirección - - - Copy &label - Copiar &etiqueta - - - Copy &message - Copiar &mensaje - - - Copy &amount - Copiar &importe - - - Not recommended due to higher fees and less protection against typos. - No se recomienda debido a las altas comisiones y la poca protección contra errores tipográficos. - - - Generates an address compatible with older wallets. - Genera una dirección compatible con billeteras más antiguas. - - - Generates a native segwit address (BIP-173). Some old wallets don't support it. - Genera una dirección segwit nativa (BIP-173). No es compatible con algunas billeteras antiguas. - - - Bech32m (BIP-350) is an upgrade to Bech32, wallet support is still limited. - Bech32m (BIP-350) es una actualización de Bech32. La compatibilidad con la billetera todavía es limitada. - - - Could not unlock wallet. - No se pudo desbloquear la billetera. - - - Could not generate new %1 address - No se pudo generar nueva dirección %1 - - - - ReceiveRequestDialog - - Request payment to … - Solicitar pago a... - - - Address: - Dirección: - - - Amount: - Importe: - - - Label: - Etiqueta: - - - Message: - Mensaje: - - - Wallet: - Billetera: - - - Copy &URI - Copiar &URI - - - Copy &Address - Copiar &dirección - - - &Verify - &Verificar - - - Verify this address on e.g. a hardware wallet screen - Verificar esta dirección, por ejemplo, en la pantalla de una billetera de hardware. - - - &Save Image… - &Guardar imagen... - - - Payment information - Información del pago - - - Request payment to %1 - Solicitar pago a %1 - - - - RecentRequestsTableModel - - Date - Fecha - - - Label - Etiqueta - - - Message - Mensaje - - - (no label) - (sin etiqueta) - - - (no message) - (sin mensaje) - - - (no amount requested) - (no se solicitó un importe) - - - Requested - Solicitado - - - - SendCoinsDialog - - Send Coins - Enviar monedas - - - Coin Control Features - Funciones de control de monedas - - - automatically selected - seleccionado automáticamente - - - Insufficient funds! - Fondos insuficientes - - - Quantity: - Cantidad: - - - Amount: - Importe: - - - Fee: - Comisión: - - - After Fee: - Después de la comisión: - - - Change: - Cambio: - - - If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. - Si se activa, pero la dirección de cambio está vacía o es inválida, el cambio se enviará a una dirección generada recientemente. - - - Custom change address - Dirección de cambio personalizada - - - Transaction Fee: - Comisión de transacción: - - - 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. - Si usas la opción "fallbackfee", la transacción puede tardar varias horas o días en confirmarse (o nunca hacerlo). Considera elegir la comisión de forma manual o espera hasta que hayas validado la cadena completa. - - - Warning: Fee estimation is currently not possible. - Advertencia: En este momento no se puede estimar la comisión. - - - per kilobyte - por kilobyte - - - Hide - Ocultar - - - Recommended: - Recomendado: - - - Custom: - Personalizado: - - - Send to multiple recipients at once - Enviar a múltiples destinatarios a la vez - - - Add &Recipient - Agregar &destinatario - - - Clear all fields of the form. - Borrar todos los campos del formulario. - - - Inputs… - Entradas... - - - Choose… - Elegir... - - - Hide transaction fee settings - Ocultar configuración de la comisión de transacción - - - Specify a custom fee per kB (1,000 bytes) of the transaction's virtual size. - -Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satoshis per kvB" for a transaction size of 500 virtual bytes (half of 1 kvB) would ultimately yield a fee of only 50 satoshis. - Especifica una comisión personalizada por kB (1000 bytes) del tamaño virtual de la transacción. - -Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por kvB" para una transacción de 500 bytes virtuales (la mitad de 1 kvB) produciría, en última instancia, una comisión de solo 50 satoshis. - - - 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. - Cuando hay menos volumen de transacciones que espacio en los bloques, los mineros y los nodos de retransmisión pueden aplicar una comisión mínima. Está bien pagar solo esta comisión mínima, pero ten en cuenta que esto puede ocasionar que una transacción nunca se confirme una vez que haya más demanda de transacciones de Bitcoin de la que puede procesar la red. - - - A too low fee might result in a never confirming transaction (read the tooltip) - Si la comisión es demasiado baja, es posible que la transacción nunca se confirme (leer la información en pantalla). - - - (Smart fee not initialized yet. This usually takes a few blocks…) - (La comisión inteligente no se ha inicializado todavía. Esto tarda normalmente algunos bloques…) - - - Confirmation time target: - Objetivo de tiempo de confirmación: - - - Enable Replace-By-Fee - Activar "Remplazar por comisión" - - - With Replace-By-Fee (BIP-125) you can increase a transaction's fee after it is sent. Without this, a higher fee may be recommended to compensate for increased transaction delay risk. - Con la función "Remplazar por comisión" (BIP-125), puedes aumentar la comisión de una transacción después de enviarla. Sin esta, es posible que se recomiende una comisión más alta para compensar el mayor riesgo de retraso de la transacción. - - - Clear &All - Borrar &todo - - - Balance: - Saldo: - - - Confirm the send action - Confirmar el envío - - - S&end - &Enviar - - - Copy quantity - Copiar cantidad - - - Copy amount - Copiar cantidad - - - Copy fee - Copiar comisión - - - Copy after fee - Copiar después de la tarifa - - - Copy bytes - Copiar bytes - - - Copy change - Copiar cambio - - - %1 (%2 blocks) - %1 (%2 bloques) - - - Sign on device - "device" usually means a hardware wallet. - Firmar en el dispositivo - - - Connect your hardware wallet first. - Conecta primero tu billetera de hardware. - - - Set external signer script path in Options -> Wallet - "External signer" means using devices such as hardware wallets. - Establecer la ruta al script del firmante externo en "Opciones -> Billetera" - - - Cr&eate Unsigned - &Crear sin firmar - - - Creates a Partially Signed Bitcoin Transaction (PSBT) for use with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet. - Crea una transacción de Bitcoin parcialmente firmada (TBPF) para usarla, por ejemplo, con una billetera %1 sin conexión o una billetera de hardware compatible con TBPF. - - - %1 to '%2' - %1 a '%2' - - - %1 to %2 - %1 a %2 - - - To review recipient list click "Show Details…" - Para consultar la lista de destinatarios, haz clic en "Mostrar detalles..." - - - Sign failed - Error de firma - - - External signer not found - "External signer" means using devices such as hardware wallets. - No se encontró el dispositivo firmante externo - - - External signer failure - "External signer" means using devices such as hardware wallets. - Error de firmante externo - - - Save Transaction Data - Guardar datos de la transacción - - - Partially Signed Transaction (Binary) - Expanded name of the binary PSBT file format. See: BIP 174. - Transacción parcialmente firmada (binario) - - - PSBT saved - Popup message when a PSBT has been saved to a file - TBPF guardada - - - External balance: - Saldo externo: - - - or - o - - - You can increase the fee later (signals Replace-By-Fee, BIP-125). - Puedes aumentar la comisión después (indica "Remplazar por comisión", BIP-125). - - - 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. - Text to inform a user attempting to create a transaction of their current options. At this stage, a user can only create a PSBT. This string is displayed when private keys are disabled and an external signer is not available. - Revisa por favor la propuesta de transacción. Esto producirá una transacción de Bitcoin parcialmente firmada (TBPF) que puedes guardar o copiar y, luego, firmar; por ejemplo, una billetera %1 fuera de línea o una billetera de hardware compatible con TBPF. - - - %1 from wallet '%2' - %1 desde billetera "%2" - - - Do you want to create this transaction? - Message displayed when attempting to create a transaction. Cautionary text to prompt the user to verify that the displayed transaction details represent the transaction the user intends to create. - ¿Quieres crear esta transacción? - - - Please, review your transaction. You can create and send this transaction or create 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. - Text to inform a user attempting to create a transaction of their current options. At this stage, a user can send their transaction or create a PSBT. This string is displayed when both private keys and PSBT controls are enabled. - Revisa la transacción. Puedes crear y enviar esta transacción de Bitcoin parcialmente firmada (TBPF), que además puedes guardar o copiar y, luego, firmar; por ejemplo, una billetera %1 sin conexión o una billetera de hardware compatible con TBPF. - - - Please, review your transaction. - Text to prompt a user to review the details of the transaction they are attempting to send. - Revisa la transacción. - - - Transaction fee - Comisión de transacción - - - Not signalling Replace-By-Fee, BIP-125. - No indica "Remplazar por comisión", BIP-125. - - - Total Amount - Importe total - - - Unsigned Transaction - PSBT copied - Caption of "PSBT has been copied" messagebox - Transacción sin firmar - - - The PSBT has been copied to the clipboard. You can also save it. - Se copió la TBPF al portapapeles. También puedes guardarla. - - - PSBT saved to disk - TBPF guardada en el disco - - - Confirm send coins - Confirmar el envío de monedas - - - Watch-only balance: - Saldo solo de observación: - - - The recipient address is not valid. Please recheck. - La dirección del destinatario no es válida. Revísala. - - - The amount to pay must be larger than 0. - El importe por pagar tiene que ser mayor que 0. - - - The amount exceeds your balance. - El importe sobrepasa el saldo. - - - The total exceeds your balance when the %1 transaction fee is included. - El total sobrepasa el saldo cuando se incluye la comisión de transacción de %1. - - - Duplicate address found: addresses should only be used once each. - Se encontró una dirección duplicada: las direcciones solo se deben usar una vez. - - - Transaction creation failed! - Fallo al crear la transacción - - - A fee higher than %1 is considered an absurdly high fee. - Una comisión mayor que %1 se considera absurdamente alta. - - - Estimated to begin confirmation within %n block(s). - - Se estima que empiece a confirmarse dentro de %n bloque. - Se estima que empiece a confirmarse dentro de %n bloques. - - - - Warning: Invalid Bitcoin address - Advertencia: Dirección de Bitcoin inválida - - - Warning: Unknown change address - Advertencia: Dirección de cambio desconocida - - - Confirm custom change address - Confirmar la dirección de cambio personalizada - - - 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? - La dirección que seleccionaste para el cambio no es parte de esta billetera. Una parte o la totalidad de los fondos en la billetera se enviará a esta dirección. ¿Seguro deseas continuar? - - - (no label) - (sin etiqueta) - - - - SendCoinsEntry - - A&mount: - &Importe: - - - Pay &To: - Pagar &a: - - - &Label: - &Etiqueta: - - - Choose previously used address - Seleccionar dirección usada anteriormente - - - The Bitcoin address to send the payment to - La dirección de Bitcoin a la que se enviará el pago - - - Paste address from clipboard - Pegar dirección desde el portapapeles - - - Remove this entry - Eliminar esta entrada - - - The amount to send in the selected unit - El importe que se enviará en la unidad seleccionada - - - 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. - La comisión se deducirá del importe que se envía. El destinatario recibirá menos bitcoins que los que ingreses en el campo del importe. Si se seleccionan varios destinatarios, la comisión se dividirá por igual. - - - S&ubtract fee from amount - &Restar la comisión del importe - - - Use available balance - Usar el saldo disponible - - - Message: - Mensaje: - - - Enter a label for this address to add it to the list of used addresses - Ingresar una etiqueta para esta dirección a fin de agregarla a la lista de direcciones utilizadas - - - 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. - Un mensaje adjunto al URI de tipo "bitcoin:" que se almacenará con la transacción a modo de referencia. Nota: Este mensaje no se enviará por la red de Bitcoin. - - - - SendConfirmationDialog - - Send - Enviar - - - Create Unsigned - Crear sin firmar - - - - SignVerifyMessageDialog - - Signatures - Sign / Verify a Message - Firmas: firmar o verificar un mensaje - - - &Sign Message - &Firmar mensaje - - - You can sign messages/agreements with your legacy (P2PKH) 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. - Puedes firmar mensajes o acuerdos con tus direcciones tipo legacy (P2PKH) para demostrar que puedes recibir los bitcoins que se envíen a ellas. Ten cuidado de no firmar cosas confusas o al azar, ya que los ataques de phishing pueden tratar de engañarte para que les envíes la firma con tu identidad. Firma solo declaraciones totalmente detalladas con las que estés de acuerdo. - - - The Bitcoin address to sign the message with - La dirección de Bitcoin con la que se firmará el mensaje - - - Choose previously used address - Seleccionar dirección usada anteriormente - - - Paste address from clipboard - Pegar dirección desde el portapapeles - - - Enter the message you want to sign here - Ingresar aquí el mensaje que deseas firmar - - - Signature - Firma - - - Copy the current signature to the system clipboard - Copiar la firma actual al portapapeles del sistema - - - Sign the message to prove you own this Bitcoin address - Firmar el mensaje para demostrar que esta dirección de Bitcoin te pertenece - - - Sign &Message - Firmar &mensaje - - - Reset all sign message fields - Restablecer todos los campos de firma de mensaje - - - Clear &All - Borrar &todo - - - &Verify Message - &Verificar mensaje - - - Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction! - Ingresa la dirección del destinatario, el mensaje (recuerda copiar los saltos de línea, espacios, tabulaciones, etc. con exactitud) y la firma a continuación para verificar el mensaje. Ten cuidado de no leer en la firma más de lo que está en el mensaje firmado en sí, para evitar ser víctima de un engaño por ataque de intermediario. Ten en cuenta que esto solo demuestra que el firmante recibe con la dirección; no puede demostrar la condición de remitente de ninguna transacción. - - - The Bitcoin address the message was signed with - La dirección de Bitcoin con la que se firmó el mensaje - - - The signed message to verify - El mensaje firmado para verificar - - - The signature given when the message was signed - La firma que se dio cuando el mensaje se firmó - - - Verify the message to ensure it was signed with the specified Bitcoin address - Verifica el mensaje para asegurarte de que se firmó con la dirección de Bitcoin especificada. - - - Verify &Message - Verificar &mensaje - - - Reset all verify message fields - Restablecer todos los campos de verificación de mensaje - - - Click "Sign Message" to generate signature - Hacer clic en "Firmar mensaje" para generar una firma - - - The entered address is invalid. - La dirección ingresada es inválida. - - - Please check the address and try again. - Revisa la dirección e intenta de nuevo. - - - The entered address does not refer to a legacy (P2PKH) key. Message signing for SegWit and other non-P2PKH address types is not supported in this version of %1. Please check the address and try again. - La dirección ingresada no se refiere a una clave tipo legacy (P2PKH). La firma de mensajes para direcciones SegWit y de otros tipos que no sean P2PKH no es compatible con esta versión de %1. Comprueba la dirección e inténtalo de nuevo. - - - Wallet unlock was cancelled. - Se canceló el desbloqueo de la billetera. - - - No error - Sin error - - - Private key for the entered address is not available. - La clave privada para la dirección ingresada no está disponible. - - - Message signing failed. - Error al firmar el mensaje. - - - Message signed. - Mensaje firmado. - - - The signature could not be decoded. - La firma no pudo decodificarse. - - - Please check the signature and try again. - Comprueba la firma e intenta de nuevo. - - - The signature did not match the message digest. - La firma no coincide con la síntesis del mensaje. - - - Message verification failed. - Falló la verificación del mensaje. - - - Message verified. - Mensaje verificado. - - - - SplashScreen - - (press q to shutdown and continue later) - (Presionar q para apagar y seguir luego) - - - press q to shutdown - Presionar q para apagar - - - - TransactionDesc - - conflicted with a transaction with %1 confirmations - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that conflicts with a confirmed transaction. - Hay un conflicto con una transacción con %1 confirmaciones - - - 0/unconfirmed, in memory pool - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is in the memory pool. - 0/sin confirmar, en el pool de memoria - - - 0/unconfirmed, not in memory pool - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is not in the memory pool. - 0/sin confirmar, no está en el pool de memoria - - - abandoned - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an abandoned transaction. - abandonada - - - %1/unconfirmed - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in at least one block, but less than 6 blocks. - %1/sin confirmar - - - %1 confirmations - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in 6 or more blocks. - %1 confirmaciones - - - Status - Estado - - - Date - Fecha - - - Source - Origen - - - Generated - Generado - - - From - De - - - unknown - desconocido - - - To - A - - - own address - dirección propia - - - watch-only - Solo de observación - - - label - etiqueta - - - Credit - Crédito - - - matures in %n more block(s) - - madura en %n bloque más - madura en %n bloques más - - - - not accepted - no aceptada - - - Debit - Débito - - - Total debit - Débito total - - - Total credit - Crédito total - - - Transaction fee - Comisión de transacción - - - Net amount - Importe neto - - - Message - Mensaje - - - Comment - Comentario - - - Transaction ID - Identificador de transacción - - - Transaction total size - Tamaño total de transacción - - - Transaction virtual size - Tamaño virtual de transacción - - - Output index - Índice de salida - - - %1 (Certificate was not verified) - %1 (El certificado no fue verificado) - - - Merchant - Comerciante - - - Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Las monedas generadas deben madurar %1 bloques antes de que se puedan gastar. Cuando generaste este bloque, se transmitió a la red para agregarlo a la cadena de bloques. Si no logra entrar a la cadena, su estado cambiará a "no aceptado" y no se podrá gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque a pocos segundos del tuyo. - - - Debug information - Información de depuración - - - Transaction - Transacción - - - Inputs - Entradas - - - Amount - Importe - - - true - verdadero - - - false - falso - - - - TransactionDescDialog - - This pane shows a detailed description of the transaction - En este panel se muestra una descripción detallada de la transacción - - - Details for %1 - Detalles para %1 - - - - TransactionTableModel - - Date - Fecha - - - Type - Tipo - - - Label - Etiqueta - - - Unconfirmed - Sin confirmar - - - Abandoned - Abandonada - - - Confirming (%1 of %2 recommended confirmations) - Confirmando (%1 de %2 confirmaciones recomendadas) - - - Confirmed (%1 confirmations) - Confirmada (%1 confirmaciones) - - - Conflicted - En conflicto - - - Immature (%1 confirmations, will be available after %2) - Inmadura (%1 confirmaciones; estará disponibles después de %2) - - - Generated but not accepted - Generada pero no aceptada - - - Received with - Recibida con - - - Received from - Recibida de - - - Sent to - Enviada a - - - Mined - Minada - - - watch-only - Solo de observación - - - (n/a) - (n/d) - - - (no label) - (sin etiqueta) - - - Transaction status. Hover over this field to show number of confirmations. - Estado de la transacción. Pasa el mouse sobre este campo para ver el número de confirmaciones. - - - Date and time that the transaction was received. - Fecha y hora en las que se recibió la transacción. - - - Type of transaction. - Tipo de transacción. - - - Whether or not a watch-only address is involved in this transaction. - Si una dirección solo de observación está involucrada en esta transacción o no. - - - User-defined intent/purpose of the transaction. - Intención o propósito de la transacción definidos por el usuario. - - - Amount removed from or added to balance. - Importe restado del saldo o sumado a este. - - - - TransactionView - - All - Todo - - - Today - Hoy - - - This week - Esta semana - - - This month - Este mes - - - Last month - Mes pasado - - - This year - Este año - - - Received with - Recibida con - - - Sent to - Enviada a - - - Mined - Minada - - - Other - Otra - - - Enter address, transaction id, or label to search - Ingresar la dirección, el identificador de transacción o la etiqueta para buscar - - - Min amount - Importe mínimo - - - Range… - Rango... - - - &Copy address - &Copiar dirección - - - Copy &label - Copiar &etiqueta - - - Copy &amount - Copiar &importe - - - Copy transaction &ID - Copiar &identificador de transacción - - - Copy &raw transaction - Copiar transacción &sin procesar - - - Copy full transaction &details - Copiar &detalles completos de la transacción - - - &Show transaction details - &Mostrar detalles de la transacción - - - Increase transaction &fee - Aumentar &comisión de transacción - - - A&bandon transaction - &Abandonar transacción - - - &Edit address label - &Editar etiqueta de dirección - - - Show in %1 - Transactions table context menu action to show the selected transaction in a third-party block explorer. %1 is a stand-in argument for the URL of the explorer. - Mostrar en %1 - - - Export Transaction History - Exportar historial de transacciones - - - Comma separated file - Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. - Archivo separado por comas - - - Confirmed - Confirmada - - - Watch-only - Solo de observación - - - Date - Fecha - - - Type - Tipo - - - Label - Etiqueta - - - Address - Dirección - - - ID - Identificador - - - Exporting Failed - Error al exportar - - - There was an error trying to save the transaction history to %1. - Ocurrió un error al intentar guardar el historial de transacciones en %1. - - - Exporting Successful - Exportación correcta - - - The transaction history was successfully saved to %1. - El historial de transacciones se guardó correctamente en %1. - - - Range: - Rango: - - - to - a - - - - WalletFrame - - No wallet has been loaded. -Go to File > Open Wallet to load a wallet. -- OR - - No se cargó ninguna billetera. -Ir a "Archivo > Abrir billetera" para cargar una. -- O - - - - Create a new wallet - Crear una nueva billetera - - - Unable to decode PSBT from clipboard (invalid base64) - No se puede decodificar la TBPF desde el portapapeles (Base64 inválida) - - - Load Transaction Data - Cargar datos de la transacción - - - Partially Signed Transaction (*.psbt) - Transacción parcialmente firmada (*.psbt) - - - PSBT file must be smaller than 100 MiB - El archivo TBPF debe ser más pequeño de 100 MiB - - - Unable to decode PSBT - No se puede decodificar TBPF - - - - WalletModel - - Send Coins - Enviar monedas - - - Fee bump error - Error de incremento de comisión - - - Increasing transaction fee failed - Fallo al incrementar la comisión de transacción - - - Do you want to increase the fee? - Asks a user if they would like to manually increase the fee of a transaction that has already been created. - ¿Deseas incrementar la comisión? - - - Current fee: - Comisión actual: - - - Increase: - Incremento: - - - New fee: - Nueva comisión: - - - 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. - Advertencia: Esta acción puede pagar la comisión adicional al reducir las salidas de cambio o agregar entradas, cuando sea necesario. Asimismo, puede agregar una nueva salida de cambio si aún no existe una. Estos cambios pueden filtrar potencialmente información privada. - - - Confirm fee bump - Confirmar incremento de comisión - - - Can't draft transaction. - No se puede crear un borrador de la transacción. - - - PSBT copied - TBPF copiada - - - Fee-bump PSBT copied to clipboard - TBPF con incremento de comisión copiada en el portapapeles - - - Can't sign transaction. - No se puede firmar la transacción. - - - Could not commit transaction - No se pudo confirmar la transacción - - - Signer error - Error de firmante - - - Can't display address - No se puede mostrar la dirección - - - - WalletView - - &Export - &Exportar - - - Export the data in the current tab to a file - Exportar los datos de la pestaña actual a un archivo - - - Backup Wallet - Realizar copia de seguridad de la billetera - - - Wallet Data - Name of the wallet data file format. - Datos de la billetera - - - Backup Failed - Copia de seguridad fallida - - - There was an error trying to save the wallet data to %1. - Ocurrió un error al intentar guardar los datos de la billetera en %1. - - - Backup Successful - Copia de seguridad correcta - - - The wallet data was successfully saved to %1. - Los datos de la billetera se guardaron correctamente en %1. - - - Cancel - Cancelar - - - - bitcoin-core - - The %s developers - Los desarrolladores de %s - - - %s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup. - %s dañado. Trata de usar la herramienta de la billetera de Bitcoin para rescatar o restaurar una copia de seguridad. - - - %s failed to validate the -assumeutxo snapshot state. This indicates a hardware problem, or a bug in the software, or a bad software modification that allowed an invalid snapshot to be loaded. As a result of this, the node will shut down and stop using any state that was built on the snapshot, resetting the chain height from %d to %d. On the next restart, the node will resume syncing from %d without using any snapshot data. Please report this incident to %s, including how you obtained the snapshot. The invalid snapshot chainstate will be left on disk in case it is helpful in diagnosing the issue that caused this error. - %s no pudo validar el estado de la instantánea -assumeutxo. Esto indica un problema de hardware, un error en el software o una modificación incorrecta del software que permitió que se cargara una instantánea inválida. Por consiguiente, el nodo se apagará y dejará de utilizar cualquier estado basado en la instantánea, restableciendo la altura de la cadena de %d a %d. En el siguiente reinicio, el nodo reanudará la sincronización desde %d sin usar datos de instantánea. Reporta este incidente a %s, indicando cómo obtuviste la instantánea. Se dejó el estado de cadena de la instantánea inválida en el disco por si resulta útil para diagnosticar el problema que causó este error. - - - %s request to listen on port %u. This port is considered "bad" and thus it is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for details and a full list. - %s solicitud para escuchar en el puerto%u. Este puerto se considera "malo" y, por lo tanto, es poco probable que algún par se conecte a él. Consulta doc/p2p-bad-ports.md para obtener detalles y una lista completa. - - - Cannot downgrade wallet from version %i to version %i. Wallet version unchanged. - No se puede pasar de la versión %i a la versión anterior %i. La versión de la billetera no tiene cambios. - - - 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. - No se puede actualizar una billetera dividida no HD de la versión %i a la versión %i sin actualizar para admitir el pool de claves anterior a la división. Usa la versión %i o no especifiques la versión. - - - Disk space for %s may not accommodate the block files. Approximately %u GB of data will be stored in this directory. - Es posible que el espacio en disco %s no tenga capacidad para los archivos de bloque. Aproximadamente %u GB de datos se almacenarán en este directorio. - - - Distributed under the MIT software license, see the accompanying file %s or %s - Distribuido bajo la licencia de software MIT; ver el archivo adjunto %s o %s. - - - Error loading wallet. Wallet requires blocks to be downloaded, and software does not currently support loading wallets while blocks are being downloaded out of order when using assumeutxo snapshots. Wallet should be able to load successfully after node sync reaches height %s - Error al cargar la billetera. Esta requiere que se descarguen bloques, y el software actualmente no admite la carga de billeteras mientras los bloques se descargan fuera de orden, cuando se usan instantáneas de assumeutxo. La billetera debería poder cargarse correctamente después de que la sincronización del nodo alcance la altura %s. - - - Error reading %s! Transaction data may be missing or incorrect. Rescanning wallet. - ¡Error al leer %s! Es probable que falten los datos de la transacción o que sean incorrectos. Rescaneando billetera. - - - Error starting/committing db txn for wallet transactions removal process - Error al iniciar/cometer el proceso de eliminación de base de datos de transacciones de monedero - - - Error: Dumpfile format record is incorrect. Got "%s", expected "format". - Error: El registro del formato del archivo de volcado es incorrecto. Se obtuvo "%s", mientras que se esperaba "formato". - - - Error: Dumpfile identifier record is incorrect. Got "%s", expected "%s". - Error: El registro del identificador del archivo de volcado es incorrecto. Se obtuvo "%s", mientras que se esperaba "%s". - - - Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s - Error: La versión del archivo de volcado no es compatible. Esta versión de la billetera de Bitcoin solo admite archivos de volcado de la versión 1. Se obtuvo un archivo de volcado con la versión %s - - - Error: Legacy wallets only support the "legacy", "p2sh-segwit", and "bech32" address types - Error: Las billeteras "legacy" solo admiten los tipos de dirección "legacy", "p2sh-segwit" y "bech32". - - - Error: Unable to produce descriptors for this legacy wallet. Make sure to provide the wallet's passphrase if it is encrypted. - Error: No se pueden producir descriptores para esta billetera tipo legacy. Asegúrate de proporcionar la frase de contraseña de la billetera si está encriptada. - - - File %s already exists. If you are sure this is what you want, move it out of the way first. - El archivo %s ya existe. Si definitivamente quieres hacerlo, quítalo primero. - - - Invalid or corrupt peers.dat (%s). If you believe this is a bug, please report it to %s. As a workaround, you can move the file (%s) out of the way (rename, move, or delete) to have a new one created on the next start. - El archivo peers.dat (%s) es inválido o está dañado. Si crees que se trata de un error, infórmalo a %s. Como alternativa, puedes quitar el archivo (%s) (renombrarlo, moverlo o eliminarlo) para que se cree uno nuevo en el siguiente inicio. - - - Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets - Valor no válido detectado para '-wallet' o '-nowallet'. -wallet' requiere un valor de cadena, mientras que '-nowallet' sólo acepta '1' para desactivar todos los monederos. - - - More than one onion bind address is provided. Using %s for the automatically created Tor onion service. - Se proporciona más de una dirección de enlace onion. Se está usando %s para el servicio onion de Tor creado automáticamente. - - - No dump file provided. To use createfromdump, -dumpfile=<filename> must be provided. - No se proporcionó el archivo de volcado. Para usar createfromdump, se debe proporcionar -dumpfile=<filename>. - - - No dump file provided. To use dump, -dumpfile=<filename> must be provided. - No se proporcionó el archivo de volcado. Para usar dump, se debe proporcionar -dumpfile=<filename>. - - - No wallet file format provided. To use createfromdump, -format=<format> must be provided. - No se proporcionó el formato de archivo de billetera. Para usar createfromdump, se debe proporcionar -format=<format>. - - - Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. - La opción '-upnp' está activada, pero el soporte UPnP se eliminó en la versión 29.0. Considera usar '-natpmp' en su lugar. - - - Please contribute if you find %s useful. Visit %s for further information about the software. - Contribuye si te parece que %s es útil. Visita %s para obtener más información sobre el software. - - - Prune configured below the minimum of %d MiB. Please use a higher number. - La poda se configuró por debajo del mínimo de %d MiB. Usa un valor más alto. - - - Prune mode is incompatible with -reindex-chainstate. Use full -reindex instead. - El modo de poda es incompatible con -reindex-chainstate. Usa en su lugar un -reindex completo. - - - Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node) - Poda: la última sincronización de la billetera sobrepasa los datos podados. Tienes que ejecutar -reindex (descarga toda la cadena de bloques de nuevo en caso de tener un nodo podado) - - - Rename of '%s' -> '%s' failed. You should resolve this by manually moving or deleting the invalid snapshot directory %s, otherwise you will encounter the same error again on the next startup. - Error al cambiar el nombre de "%s" a "%s". Para resolverlo, mueve o elimina manualmente el directorio %s de la instantánea no válida. De lo contrario, encontrarás el mismo error de nuevo en el siguiente inicio. - - - SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported - SQLiteDatabase: versión desconocida del esquema de la billetera sqlite %d. Solo se admite la versión %d. - - - The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct - La base de datos de bloques contiene un bloque que parece ser del futuro. Es posible que se deba a que la fecha y hora de la computadora están mal configuradas. Reconstruye la base de datos de bloques solo si tienes la certeza de que la fecha y hora de la computadora son correctas. - - - The transaction amount is too small to send after the fee has been deducted - El importe de la transacción es demasiado pequeño para enviarlo después de deducir la comisión - - - 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 - Este error podría ocurrir si esta billetera no se cerró correctamente y se cargó por última vez usando una compilación con una versión más reciente de Berkeley DB. Si es así, usa el software que cargó por última vez esta billetera. - - - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - Esta es una compilación preliminar de prueba. Úsala bajo tu propia responsabilidad. No la uses para aplicaciones comerciales o de minería. - - - This is the maximum transaction fee you pay (in addition to the normal fee) to prioritize partial spend avoidance over regular coin selection. - Esta es la comisión máxima de transacción que pagas (además de la comisión normal) para priorizar la elusión del gasto parcial sobre la selección regular de monedas. - - - This is the transaction fee you may discard if change is smaller than dust at this level - Esta es la comisión de transacción que puedes descartar si el cambio es más pequeño que el remanente en este nivel. - - - This is the transaction fee you may pay when fee estimates are not available. - Esta es la comisión de transacción que puedes pagar cuando los cálculos de comisiones no estén disponibles. - - - Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments. - La longitud total de la cadena de versión de red ( %i) supera la longitud máxima (%i). Reduce el número o tamaño de uacomments . - - - Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate. - No se pueden reproducir bloques. Tendrás que reconstruir la base de datos usando -reindex-chainstate. - - - Unknown wallet file format "%s" provided. Please provide one of "bdb" or "sqlite". - Se proporcionó un formato de archivo de billetera desconocido "%s". Proporciona uno entre "bdb" o "sqlite". - - - Unsupported category-specific logging level %1$s=%2$s. Expected %1$s=<category>:<loglevel>. Valid categories: %3$s. Valid loglevels: %4$s. - El nivel de registro de la categoría específica no es compatible: %1$s=%2$s. Se esperaba %1$s=<category>:<loglevel>. Categorías válidas: %3$s. Niveles de registro válidos: %4 $s. - - - Unsupported chainstate database format found. Please restart with -reindex-chainstate. This will rebuild the chainstate database. - El formato de la base de datos chainstate es incompatible. Reinicia con -reindex-chainstate para reconstruir la base de datos chainstate. - - - Wallet created successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. - La billetera se creó correctamente. El tipo de billetera "legacy" se está descontinuando, por lo que la asistencia para crear y abrir estas billeteras se eliminará en el futuro. - - - Wallet loaded successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. Legacy wallets can be migrated to a descriptor wallet with migratewallet. - La billetera se creó correctamente. El tipo de billetera "legacy" se está descontinuando, por lo que la asistencia para crear y abrir estas billeteras se eliminará en el futuro. Las billeteras "legacy" se pueden migrar a una billetera basada en descriptores con "migratewallet". - - - Warning: Dumpfile wallet format "%s" does not match command line specified format "%s". - Advertencia: El formato de la billetera del archivo de volcado "%s" no coincide con el formato especificado en la línea de comandos "%s". - - - Warning: Private keys detected in wallet {%s} with disabled private keys - Advertencia: Claves privadas detectadas en la billetera {%s} con claves privadas deshabilitadas - - - Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. - Advertencia: Al parecer no estamos completamente de acuerdo con nuestros pares. Es posible que tengas que realizar una actualización, o que los demás nodos tengan que hacerlo. - - - Witness data for blocks after height %d requires validation. Please restart with -reindex. - Los datos del testigo para los bloques después de la altura %d requieren validación. Reinicia con -reindex. - - - You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain - Tienes que reconstruir la base de datos usando -reindex para volver al modo sin poda. Esto volverá a descargar toda la cadena de bloques. - - - %s is set very high! - ¡El valor de %s es muy alto! - - - -maxmempool must be at least %d MB - -maxmempool debe ser por lo menos de %d MB - - - Cannot obtain a lock on directory %s. %s is probably already running. - No se puede obtener un bloqueo en el directorio %s. %s probablemente ya se está ejecutando - - - Cannot resolve -%s address: '%s' - No se puede resolver la dirección de -%s: "%s" - - - Cannot set -forcednsseed to true when setting -dnsseed to false. - No se puede establecer el valor de -forcednsseed con la variable true al establecer el valor de -dnsseed con la variable false. - - - Cannot set -peerblockfilters without -blockfilterindex. - No se puede establecer -peerblockfilters sin -blockfilterindex. - - - %s is set very high! Fees this large could be paid on a single transaction. - El valor establecido para %s es demasiado alto. Las comisiones tan grandes se podrían pagar en una sola transacción. - - - Cannot provide specific connections and have addrman find outgoing connections at the same time. - No se pueden proporcionar conexiones específicas y hacer que addrman encuentre conexiones salientes al mismo tiempo. - - - Error loading %s: External signer wallet being loaded without external signer support compiled - Error al cargar %s: Se está cargando la billetera firmante externa sin que se haya compilado la compatibilidad del firmante externo - - - Error reading %s! All keys read correctly, but transaction data or address metadata may be missing or incorrect. - Error al leer %s. Todas las claves se leyeron correctamente, pero es probable que falten los datos de la transacción o metadatos de direcciones, o bien que sean incorrectos. - - - Error: Address book data in wallet cannot be identified to belong to migrated wallets - Error: No se puede identificar si los datos de la libreta de direcciones en la billetera pertenecen a billeteras migradas - - - Error: Duplicate descriptors created during migration. Your wallet may be corrupted. - Error: Se crearon descriptores duplicados durante la migración. Tu billetera podría estar dañada. - - - Error: Transaction %s in wallet cannot be identified to belong to migrated wallets - Error: No se puede identificar si la transacción %s en la billetera pertenece a billeteras migradas - - - Failed to calculate bump fees, because unconfirmed UTXOs depend on enormous cluster of unconfirmed transactions. - No se pudo calcular la comisión de incremento porque las UTXO sin confirmar dependen de un grupo enorme de transacciones no confirmadas. - - - Failed to remove snapshot chainstate dir (%s). Manually remove it before restarting. - - No se pudo eliminar la instantánea chainstate dir (%s). Elimínala manualmente antes de reiniciar. - - - - Failed to rename invalid peers.dat file. Please move or delete it and try again. - No se pudo cambiar el nombre del archivo peers.dat inválido. Muévelo o elimínalo, e intenta de nuevo. - - - Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable %s. - Error al calcular la comisión. La opción "fallbackfee" está desactivada. Espera algunos bloques o activa %s. - - - Flushing block file to disk failed. This is likely the result of an I/O error. - Falló el volcado del archivo de bloques al disco. Es probable que se deba a un error de E/S. - - - Flushing undo file to disk failed. This is likely the result of an I/O error. - Falló el volcado del archivo para deshacer al disco. Es probable que se deba a un error de E/S. - - - Incompatible options: -dnsseed=1 was explicitly specified, but -onlynet forbids connections to IPv4/IPv6 - Opciones incompatibles: -dnsseed=1 se especificó explícitamente, pero -onlynet prohíbe conexiones a IPv4/IPv6. - - - Invalid amount for %s=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions) - Importe inválido para %s=<amount>: "%s" (debe ser al menos la comisión mínima de retransmisión de %s para evitar transacciones atascadas) - - - Maximum transaction weight is less than transaction weight without inputs - El peso máximo de la transacción es menor que el peso de la transacción sin entradas - - - Maximum transaction weight is too low, can not accommodate change output - El peso máximo de la transacción es demasiado bajo, por lo que no puede incluir la salida de cambio. - - - Outbound connections restricted to CJDNS (-onlynet=cjdns) but -cjdnsreachable is not provided - Las conexiones salientes están restringidas a CJDNS (-onlynet=cjdns), pero no se proporciona -cjdnsreachable - - - Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is explicitly forbidden: -onion=0 - Las conexiones salientes están restringidas a Tor (-onlynet=onion), pero el proxy para conectarse con la red Tor está explícitamente prohibido: -onion=0. - - - Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is not provided: none of -proxy, -onion or -listenonion is given - Las conexiones salientes están restringidas a Tor (-onlynet=onion), pero no se proporciona el proxy para conectarse con la red Tor: no se indican -proxy, -onion ni -listenonion. - - - Outbound connections restricted to i2p (-onlynet=i2p) but -i2psam is not provided - Las conexiones salientes están restringidas a i2p (-onlynet=i2p), pero no se proporciona -i2psam - - - Rename of '%s' -> '%s' failed. Cannot clean up the background chainstate leveldb directory. - Falló el cambio de nombre de ''%s" a ''%s". No se puede limpiar el directorio leveldb del estado de la cadena de fondo. - - - The combination of the pre-selected inputs and the wallet automatic inputs selection exceeds the transaction maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - La combinación de las entradas preseleccionadas y la selección automática de entradas de la billetera supera el peso máximo de la transacción. Intenta enviar un importe menor o consolidar manualmente las UTXO de la billetera. - - - The inputs size exceeds the maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - El tamaño de las entradas supera el peso máximo. Intenta enviar un importe menor o consolidar manualmente las UTXO de la billetera. - - - The preselected coins total amount does not cover the transaction target. Please allow other inputs to be automatically selected or include more coins manually - El monto total de las monedas preseleccionadas no cubre la meta de la transacción. Permite que se seleccionen automáticamente otras entradas o incluye más monedas manualmente. - - - Transaction requires one destination of non-0 value, a non-0 feerate, or a pre-selected input - La transacción requiere un destino de valor distinto de 0, una tasa de comisión distinta de 0, o una entrada preseleccionada. - - - UTXO snapshot failed to validate. Restart to resume normal initial block download, or try loading a different snapshot. - No se validó la instantánea de UTXO. Reinicia para reanudar la descarga de bloques inicial normal o intenta cargar una instantánea diferente. - - - Unconfirmed UTXOs are available, but spending them creates a chain of transactions that will be rejected by the mempool - Las UTXO sin confirmar están disponibles, pero si se gastan, se crea una cadena de transacciones que rechazará la mempool. - - - Unexpected legacy entry in descriptor wallet found. Loading wallet %s - -The wallet might have been tampered with or created with malicious intent. - - Se encontró una entrada inesperada tipo "legacy" en la billetera basada en descriptores. Cargando billetera%s - -Es posible que la billetera haya sido manipulada o creada con malas intenciones. - - - - Unrecognized descriptor found. Loading wallet %s - -The wallet might had been created on a newer version. -Please try running the latest software version. - - Se encontró un descriptor desconocido. Cargando billetera %s. - -La billetera se pudo hacer creado con una versión más reciente. -Intenta ejecutar la última versión del software. - - - - Your computer's date and time appear to be more than %d minutes out of sync with the network, this may lead to consensus failure. After you've confirmed your computer's clock, this message should no longer appear when you restart your node. Without a restart, it should stop showing automatically after you've connected to a sufficient number of new outbound peers, which may take some time. You can inspect the `timeoffset` field of the `getpeerinfo` and `getnetworkinfo` RPC methods to get more info. - La fecha y la hora de la computadora parecen estar más de %d minutos desincronizadas con la red, lo que puede producir un fallo de consenso. Después de confirmar el reloj de la computadora, este mensaje debería dejar de aparecer cuando reinicies el nodo. Sin reiniciar, debería dejar de mostrarse automáticamente después de que te hayas conectado a un número suficiente de nuevos pares salientes, lo que puede llevar cierto tiempo. Puedes inspeccionar el campo "timeoffset" de los métodos RPC "getpeerinfo" y "getnetworkinfo" para obtener más información. - - - -Unable to cleanup failed migration - -No se puede limpiar la migración fallida - - - -Unable to restore backup of wallet. - -No se puede restaurar la copia de seguridad de la billetera. - - - whitebind may only be used for incoming connections ("out" was passed) - whitebind solo puede utilizarse para conexiones entrantes (se ha pasado "out") - - - A fatal internal error occurred, see debug.log for details: - Ha ocurrido un error interno grave. Consulta debug.log para obtener más información: - - - Assumeutxo data not found for the given blockhash '%s'. - No se encontraron datos assumeutxo para el blockhash indicado "%s". - - - Block verification was interrupted - Se interrumpió la verificación de bloques - - - Cannot write to directory '%s'; check permissions. - No se puede escribir en el directorio '%s'; compruebe los permisos. - - - Config setting for %s only applied on %s network when in [%s] section. - La configuración para %s solo se aplica en la red %s cuando se encuentra en la sección [%s]. - - - Copyright (C) %i-%i - Derechos de autor (C) %i-%i - - - Corrupt block found indicating potential hardware failure. - Se encontró un bloque corrupto que indica un posible fallo del hardware. - - - Corrupted block database detected - Se detectó que la base de datos de bloques está dañada. - - - Could not find asmap file %s - No se pudo encontrar el archivo asmap %s - - - Could not parse asmap file %s - No se pudo analizar el archivo asmap %s - - - Disk space is too low! - ¡El espacio en disco es demasiado pequeño! - - - Done loading - Carga completa - - - Dump file %s does not exist. - El archivo de volcado %s no existe. - - - Elliptic curve cryptography sanity check failure. %s is shutting down. - Fallo en la prueba de cordura de la criptografía de curva elíptica. %s se apagará. - - - Error creating %s - Error al crear %s - - - Error initializing block database - Error al inicializar la base de datos de bloques - - - Error initializing wallet database environment %s! - Error al inicializar el entorno de la base de datos de la billetera %s. - - - Error loading %s - Error al cargar %s - - - Error loading %s: Private keys can only be disabled during creation - Error al cargar %s: Las claves privadas solo se pueden deshabilitar durante la creación - - - Error loading %s: Wallet corrupted - Error al cargar %s: billetera dañada - - - Error loading %s: Wallet requires newer version of %s - Error al cargar %s: la billetera requiere una versión más reciente de %s - - - Error loading block database - Error al cargar la base de datos de bloques - - - Error loading databases - Error cargando bases de datos - - - Error opening block database - Error al abrir la base de datos de bloques - - - Error opening coins database - Error al abrir la base de datos de monedas - - - Error reading configuration file: %s - Error al leer el archivo de configuración: %s - - - Error reading from database, shutting down. - Error al leer la base de datos. Se cerrará la aplicación. - - - Error reading next record from wallet database - Error al leer el siguiente registro de la base de datos de la billetera - - - Error: Cannot extract destination from the generated scriptpubkey - Error: No se puede extraer el destino del scriptpubkey generado - - - Error: Couldn't create cursor into database - Error: No se pudo crear el cursor en la base de datos - - - Error: Disk space is low for %s - Error: El espacio en disco es pequeño para %s - - - Error: Dumpfile checksum does not match. Computed %s, expected %s - Error: La suma de comprobación del archivo de volcado no coincide. Calculada:%s; prevista:%s. - - - Error: Failed to create new watchonly wallet - Error: No se pudo crear una billetera solo de observación - - - Error: Got key that was not hex: %s - Error: Se recibió una clave que no es hexadecimal (%s) - - - Error: Got value that was not hex: %s - Error: Se recibió un valor que no es hexadecimal (%s) - - - Error: Keypool ran out, please call keypoolrefill first - Error: El pool de claves se agotó. Invoca keypoolrefill primero. - - - Error: Missing checksum - Error: Falta la suma de comprobación - - - Error: No %s addresses available. - Error: No hay direcciones %s disponibles. - - - Error: This wallet already uses SQLite - Error: Esta billetera ya usa SQLite - - - Error: This wallet is already a descriptor wallet - Error: Esta billetera ya está basada en descriptores - - - Error: Unable to begin reading all records in the database - Error: No se pueden comenzar a leer todos los registros en la base de datos - - - Error: Unable to make a backup of your wallet - Error: No se puede realizar una copia de seguridad de la billetera - - - Error: Unable to parse version %u as a uint32_t - Error: No se puede analizar la versión %ucomo uint32_t - - - Error: Unable to read all records in the database - Error: No se pueden leer todos los registros en la base de datos - - - Error: Unable to read wallet's best block locator record - Error: No se pudo leer el registro del mejor localizador de bloques de la billetera. - - - Error: Unable to remove watchonly address book data - Error: No se pueden eliminar los datos de la libreta de direcciones solo de observación - - - Error: Unable to write data to disk for wallet %s - Error: No se pueden escribir datos en el disco para el monedero %s - - - Error: Unable to write record to new wallet - Error: No se puede escribir el registro en la nueva billetera - - - Error: Unable to write solvable wallet best block locator record - Error: No se pudo escribir el registro del mejor localizador de bloques de la billetera solucionable. - - - Error: Unable to write watchonly wallet best block locator record - Error: No se pudo escribir el registro del mejor localizador de bloques de la billetera solo de observación. - - - Error: database transaction cannot be executed for wallet %s - Error: la transacción de la base de datos no se puede ejecutar para la billetera %s - - - Failed to connect best block (%s). - No se pudo conectar el mejor bloque (%s). - - - Failed to disconnect block. - No se pudo desconectar el bloque. - - - Failed to listen on any port. Use -listen=0 if you want this. - Fallo al escuchar en todos los puertos. Usa -listen=0 si quieres hacerlo. - - - Failed to read block. - No se pudo leer el bloque. - - - Failed to rescan the wallet during initialization - Fallo al rescanear la billetera durante la inicialización - - - Failed to start indexes, shutting down.. - Error al iniciar índices, cerrando... - - - Failed to verify database - Fallo al verificar la base de datos - - - Failed to write block. - No se pudo escribir el bloque. - - - Failed to write to block index database. - Error al escribir en la base de datos del índice de bloques. - - - Failed to write to coin database. - Error al escribir en la base de datos de monedas. - - - Failed to write undo data. - Error al escribir datos para deshacer. - - - Failure removing transaction: %s - Error al eliminar la transacción: %s - - - Fee rate (%s) is lower than the minimum fee rate setting (%s) - La tasa de comisión (%s) es menor que el valor mínimo (%s) - - - Ignoring duplicate -wallet %s. - Ignorar duplicación de -wallet %s. - - - Importing… - Importando... - - - Incorrect or no genesis block found. Wrong datadir for network? - El bloque génesis es incorrecto o no se encontró. ¿El directorio de datos es equivocado para la red? - - - Initialization sanity check failed. %s is shutting down. - Fallo al inicializar la comprobación de estado. %s se cerrará. - - - Input not found or already spent - La entrada no se encontró o ya se gastó - - - Insufficient dbcache for block verification - Dbcache insuficiente para la verificación de bloques - - - Insufficient funds - Fondos insuficientes - - - Invalid -i2psam address or hostname: '%s' - Dirección o nombre de host de -i2psam inválido: "%s" - - - Invalid -onion address or hostname: '%s' - Dirección o nombre de host de -onion inválido: "%s" - - - Invalid -proxy address or hostname: '%s' - Dirección o nombre de host de -proxy inválido: "%s" - - - Invalid P2P permission: '%s' - Permiso P2P inválido: "%s" - - - Invalid amount for %s=<amount>: '%s' (must be at least %s) - Importe inválido para %s=<amount>: "%s" (debe ser por lo menos %s) - - - Invalid amount for %s=<amount>: '%s' - Importe inválido para %s=<amount>: "%s" - - - Invalid amount for -%s=<amount>: '%s' - Importe inválido para -%s=<amount>: "%s" - - - Invalid netmask specified in -whitelist: '%s' - Máscara de red inválida especificada en -whitelist: "%s" - - - Invalid port specified in %s: '%s' - Puerto no válido especificado en %s: "%s" - - - Invalid pre-selected input %s - La entrada preseleccionada no es válida %s - - - Listening for incoming connections failed (listen returned error %s) - Fallo al escuchar conexiones entrantes (la escucha devolvió el error %s) - - - Loading P2P addresses… - Cargando direcciones P2P... - - - Loading banlist… - Cargando lista de prohibiciones... - - - Loading block index… - Cargando índice de bloques... - - - Loading wallet… - Cargando billetera... - - - Maximum transaction weight must be between %d and %d - El peso máximo de la transacción debe estar entre %d y %d. - - - Missing amount - Falta el importe - - - Missing solving data for estimating transaction size - Faltan datos de resolución para estimar el tamaño de la transacción - - - Need to specify a port with -whitebind: '%s' - Se necesita especificar un puerto con -whitebind: "%s" - - - No addresses available - No hay direcciones disponibles - - - Not found pre-selected input %s - La entrada preseleccionada no se encontró %s - - - Not solvable pre-selected input %s - La entrada preseleccionada no se puede solucionar %s - - - Only direction was set, no permissions: '%s' - Solo se ha establecido la dirección, sin permisos: "%s" - - - Prune cannot be configured with a negative value. - La poda no se puede configurar con un valor negativo. - - - Prune mode is incompatible with -txindex. - El modo de poda es incompatible con -txindex. - - - Pruning blockstore… - Podando almacenamiento de bloques… - - - Reducing -maxconnections from %d to %d, because of system limitations. - Reduciendo -maxconnections de %d a %d, debido a limitaciones del sistema. - - - Replaying blocks… - Reproduciendo bloques… - - - Rescanning… - Rescaneando... - - - SQLiteDatabase: Failed to execute statement to verify database: %s - SQLiteDatabase: Fallo al ejecutar la instrucción para verificar la base de datos: %s - - - SQLiteDatabase: Failed to prepare statement to verify database: %s - SQLiteDatabase: Fallo al preparar la instrucción para verificar la base de datos: %s - - - SQLiteDatabase: Failed to read database verification error: %s - SQLiteDatabase: Fallo al leer el error de verificación de la base de datos: %s - - - SQLiteDatabase: Unexpected application id. Expected %u, got %u - SQLiteDatabase: Identificador de aplicación inesperado. Se esperaba %u; se recibió %u. - - - Section [%s] is not recognized. - La sección [%s] no se reconoce. - - - Signer did not echo address - El firmante no se hizo eco de la dirección - - - Signer echoed unexpected address %s - El firmante se hizo eco de una dirección inesperada %s - - - Signer returned error: %s - El firmante devolvió un error: %s - - - Signing transaction failed - Fallo al firmar la transacción - - - Specified -walletdir "%s" does not exist - El valor especificado de -walletdir "%s" no existe - - - Specified -walletdir "%s" is a relative path - El valor especificado de -walletdir "%s" es una ruta relativa - - - Specified -walletdir "%s" is not a directory - El valor especificado de -walletdir "%s" no es un directorio - - - Specified blocks directory "%s" does not exist. - El directorio de bloques especificado "%s" no existe. - - - Specified data directory "%s" does not exist. - El directorio de datos especificado "%s" no existe. - - - Starting network threads… - Iniciando subprocesos de red... - - - System error while flushing: %s - Error del sistema durante el vaciado:%s - - - System error while loading external block file: %s - Error del sistema al cargar un archivo de bloque externo: %s - - - System error while saving block to disk: %s - Error del sistema al guardar el bloque en el disco: %s - - - The source code is available from %s. - El código fuente está disponible en %s. - - - The specified config file %s does not exist - El archivo de configuración especificado %s no existe - - - The transaction amount is too small to pay the fee - El importe de la transacción es muy pequeño para pagar la comisión - - - The transactions removal process can only be executed within a db txn - El proceso de eliminación de transacciones sólo puede ejecutarse dentro de una base de datos de transacción - - - The wallet will avoid paying less than the minimum relay fee. - La billetera evitará pagar menos que la comisión mínima de retransmisión. - - - There is no ScriptPubKeyManager for this address - No hay ningún ScriptPubKeyManager para esta dirección. - - - This is experimental software. - Este es un software experimental. - - - This is the minimum transaction fee you pay on every transaction. - Esta es la comisión mínima de transacción que pagas en cada transacción. - - - This is the transaction fee you will pay if you send a transaction. - Esta es la comisión de transacción que pagarás si envías una transacción. - - - Transaction %s does not belong to this wallet - La transacción %s no pertenece a esta billetera - - - Transaction amount too small - El importe de la transacción es demasiado pequeño - - - Transaction amounts must not be negative - Los importes de la transacción no pueden ser negativos - - - Transaction change output index out of range - Índice de salidas de cambio de transacciones fuera de alcance - - - Transaction must have at least one recipient - La transacción debe incluir al menos un destinatario - - - Transaction needs a change address, but we can't generate it. - La transacción necesita una dirección de cambio, pero no podemos generarla. - - - Transaction too large - Transacción demasiado grande - - - Unable to bind to %s on this computer (bind returned error %s) - No se puede establecer un enlace a %s en esta computadora (bind devolvió el error %s) - - - Unable to bind to %s on this computer. %s is probably already running. - No se puede establecer un enlace a %s en este equipo. Es posible que %s ya esté en ejecución. - - - Unable to create the PID file '%s': %s - No se puede crear el archivo PID "%s": %s - - - Unable to find UTXO for external input - No se puede encontrar UTXO para la entrada externa - - - Unable to generate initial keys - No se pueden generar las claves iniciales - - - Unable to generate keys - No se pueden generar claves - - - Unable to open %s for writing - No se puede abrir %s para escribir - - - Unable to parse -maxuploadtarget: '%s' - No se puede analizar -maxuploadtarget: "%s" - - - Unable to start HTTP server. See debug log for details. - No se puede iniciar el servidor HTTP. Consulta el registro de depuración para obtener información. - - - Unable to unload the wallet before migrating - No se puede descargar la billetera antes de la migración - - - Unknown -blockfilterindex value %s. - Se desconoce el valor de -blockfilterindex %s. - - - Unknown address type '%s' - Se desconoce el tipo de dirección "%s" - - - Unknown change type '%s' - Se desconoce el tipo de cambio "%s" - - - Unknown network specified in -onlynet: '%s' - Se desconoce la red especificada en -onlynet: "%s" - - - Unknown new rules activated (versionbit %i) - Se desconocen las nuevas reglas activadas (versionbit %i) - - - Unrecognised option "%s" provided in -test=<option>. - Opción no reconocida "%s" proporcionada en -test=<option>. - - - Unsupported global logging level %s=%s. Valid values: %s. - El nivel de registro global %s=%s no es compatible. Valores válidos: %s. - - - Wallet file creation failed: %s - Error al crear el archivo de la billetera: %s - - - acceptstalefeeestimates is not supported on %s chain. - acceptstalefeeestimates no se admite en la cadena %s. - - - Unsupported logging category %s=%s. - La categoría de registro no es compatible %s=%s. - - - Do you want to rebuild the databases now? - ¿Quiere reconstruir la base de datos de bloques ahora? - - - Error: Could not add watchonly tx %s to watchonly wallet - Error: No se puede agregar la transacción solo de observación %s a la billetera solo de observación - - - Error: Could not delete watchonly transactions. - Error: No se pudieron eliminar las transacciones solo de observación - - - Error: Wallet does not exist - Error: La cartera no existe - - - Error: cannot remove legacy wallet records - Error: no se pueden eliminar los registros de cartera heredados - - - Not enough file descriptors available. %d available, %d required. - No hay suficientes descriptores de archivo disponibles. %d disponibles, %d requeridos. - - - User Agent comment (%s) contains unsafe characters. - El comentario del agente de usuario (%s) contiene caracteres inseguros. - - - Verifying blocks… - Verificando bloques... - - - Verifying wallet(s)… - Verificando billetera(s)... - - - Wallet needed to be rewritten: restart %s to complete - Es necesario rescribir la billetera: reiniciar %s para completar - - - Settings file could not be read - El archivo de configuración no se puede leer - - - Settings file could not be written - El archivo de configuración no se puede escribir - - - \ No newline at end of file diff --git a/src/qt/locale/bitcoin_es_VE.ts b/src/qt/locale/bitcoin_es_VE.ts deleted file mode 100644 index 4b465cdb8151..000000000000 --- a/src/qt/locale/bitcoin_es_VE.ts +++ /dev/null @@ -1,5068 +0,0 @@ - - - AddressBookPage - - Right-click to edit address or label - Hacer clic derecho para editar la dirección o etiqueta - - - Create a new address - Crear una nueva dirección - - - &New - &Nueva - - - Copy the currently selected address to the system clipboard - Copiar la dirección seleccionada actualmente al portapapeles del sistema - - - &Copy - &Copiar - - - C&lose - &Cerrar - - - Delete the currently selected address from the list - Eliminar la dirección seleccionada de la lista - - - Enter address or label to search - Ingresar una dirección o etiqueta para buscar - - - Export the data in the current tab to a file - Exportar los datos de la pestaña actual a un archivo - - - &Export - &Exportar - - - &Delete - &Borrar - - - Choose the address to send coins to - Elige la dirección a la que se enviarán monedas - - - Choose the address to receive coins with - Elige la dirección en la que se recibirán monedas - - - C&hoose - &Seleccionar - - - These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Estas son tus direcciones de Bitcoin para enviar pagos. Revisa siempre el importe y la dirección de recepción antes de enviar monedas. - - - These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. -Signing is only possible with addresses of the type 'legacy'. - Estas son tus direcciones de Bitcoin para recibir pagos. Usa el botón "Crear nueva dirección de recepción" en la pestaña "Recibir" para crear nuevas direcciones. -Solo es posible firmar con direcciones de tipo legacy. - - - &Copy Address - &Copiar dirección - - - Copy &Label - Copiar &etiqueta - - - &Edit - &Editar - - - Export Address List - Exportar lista de direcciones - - - Comma separated file - Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. - Archivo separado por comas - - - There was an error trying to save the address list to %1. Please try again. - An error message. %1 is a stand-in argument for the name of the file we attempted to save to. - Ocurrió un error al intentar guardar la lista de direcciones en %1. Inténtalo de nuevo. - - - Sending addresses - %1 - Direcciones de envío - %1 - - - Receiving addresses - %1 - Direcciones de recepción - %1 - - - Exporting Failed - Error al exportar - - - - AddressTableModel - - Label - Etiqueta - - - Address - Dirección - - - (no label) - (sin etiqueta) - - - - AskPassphraseDialog - - Passphrase Dialog - Diálogo de frase de contraseña - - - Enter passphrase - Ingresar la frase de contraseña - - - New passphrase - Nueva frase de contraseña - - - Repeat new passphrase - Repetir la nueva frase de contraseña - - - Show passphrase - Mostrar la frase de contraseña - - - Encrypt wallet - Encriptar billetera - - - This operation needs your wallet passphrase to unlock the wallet. - Esta operación requiere la frase de contraseña de la billetera para desbloquearla. - - - Unlock wallet - Desbloquear billetera - - - Change passphrase - Cambiar frase de contraseña - - - Confirm wallet encryption - Confirmar el encriptado de la billetera - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! - Advertencia: Si encriptas la billetera y pierdes tu frase de contraseña, ¡<b>PERDERÁS TODOS TUS BITCOINS</b>! - - - Are you sure you wish to encrypt your wallet? - ¿Seguro quieres encriptar la billetera? - - - Wallet encrypted - Billetera encriptada - - - Enter the new passphrase for the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. - Ingresa la nueva frase de contraseña para la billetera. <br/>Usa una frase de contraseña de <b>diez o más caracteres aleatorios</b>, u <b>ocho o más palabras</b>. - - - Enter the old passphrase and new passphrase for the wallet. - Ingresa la antigua frase de contraseña y la nueva frase de contraseña para la billetera. - - - Continue - Continuar - - - Back - Atrás - - - Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. - Recuerda que encriptar tu billetera no garantiza la protección total contra el robo de tus bitcoins si la computadora está infectada con malware. - - - Wallet to be encrypted - Billetera para encriptar - - - Your wallet is about to be encrypted. - Tu billetera está a punto de encriptarse. - - - Your wallet is now encrypted. - Tu billetera ahora está encriptada. - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANTE: Cualquier copia de seguridad anterior que hayas hecho del archivo de la billetera se deberá reemplazar por el nuevo archivo encriptado que generaste. Por motivos de seguridad, las copias de seguridad realizadas anteriormente quedarán obsoletas en cuanto empieces a usar la nueva billetera encriptada. - - - Wallet encryption failed - Falló el encriptado de la billetera - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - El encriptado de la billetera falló debido a un error interno. La billetera no se encriptó. - - - The supplied passphrases do not match. - Las frases de contraseña proporcionadas no coinciden. - - - Wallet unlock failed - Falló el desbloqueo de la billetera - - - The passphrase entered for the wallet decryption was incorrect. - La frase de contraseña introducida para el cifrado de la billetera es incorrecta. - - - The passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. If this is successful, please set a new passphrase to avoid this issue in the future. - La frase de contraseña ingresada para el descifrado de la billetera es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo . Si esto es correcto, establece una nueva frase de contraseña para evitar este problema en el futuro. - - - Wallet passphrase was successfully changed. - La frase de contraseña de la billetera se cambió correctamente. - - - Passphrase change failed - Error al cambiar la frase de contraseña - - - The old passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. - La frase de contraseña que se ingresó para descifrar la billetera es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo. - - - Warning: The Caps Lock key is on! - Advertencia: ¡Las mayúsculas están activadas! - - - - BanTableModel - - IP/Netmask - IP/Máscara de red - - - Banned Until - Prohibido hasta - - - - BitcoinApplication - - Settings file %1 might be corrupt or invalid. - El archivo de configuración %1 puede estar dañado o no ser válido. - - - Runaway exception - Excepción fuera de control - - - A fatal error occurred. %1 can no longer continue safely and will quit. - Se produjo un error fatal. %1 ya no puede continuar de manera segura y se cerrará. - - - Internal error - Error interno - - - An internal error occurred. %1 will attempt to continue safely. This is an unexpected bug which can be reported as described below. - Se produjo un error interno. %1 intentará continuar de manera segura. Este es un error inesperado que se puede reportar como se describe a continuación. - - - - QObject - - Do you want to reset settings to default values, or to abort without making changes? - Explanatory text shown on startup when the settings file cannot be read. Prompts user to make a choice between resetting or aborting. - ¿Deseas restablecer los valores a la configuración predeterminada o abortar sin realizar los cambios? - - - A fatal error occurred. Check that settings file is writable, or try running with -nosettings. - Explanatory text shown on startup when the settings file could not be written. Prompts user to check that we have the ability to write to the file. Explains that the user has the option of running without a settings file. - Se produjo un error fatal. Comprueba que el archivo de configuración soporte escritura o intenta ejecutar el programa con -nosettings. - - - %1 didn't yet exit safely… - %1 aún no se cerró de forma segura... - - - unknown - desconocido - - - Embedded "%1" - "%1" integrado - - - Default system font "%1" - Fuente predeterminada del sistema "%1" - - - Custom… - Personalizada... - - - Amount - Importe - - - Enter a Bitcoin address (e.g. %1) - Ingresar una dirección de Bitcoin (por ejemplo, %1) - - - Unroutable - No enrutable - - - Inbound - An inbound connection from a peer. An inbound connection is a connection initiated by a peer. - Entrante - - - Outbound - An outbound connection to a peer. An outbound connection is a connection initiated by us. - Saliente - - - Full Relay - Peer connection type that relays all network information. - Retransmisión completa - - - Block Relay - Peer connection type that relays network information about blocks and not transactions or addresses. - Retransmisión de bloques - - - Address Fetch - Short-lived peer connection type that solicits known addresses from a peer. - Recuperación de dirección - - - None - Ninguno - - - N/A - N/D - - - %n second(s) - - %n segundo - %n segundos - - - - %n minute(s) - - %n minuto - %n minutos - - - - %n hour(s) - - %n hora - %n horas - - - - %n day(s) - - %n día - %n días - - - - %n week(s) - - %n semana - %n semanas - - - - %1 and %2 - %1 y %2 - - - %n year(s) - - %n año - %n años - - - - default wallet - billetera por defecto - - - - BitcoinGUI - - &Overview - &Vista general - - - Show general overview of wallet - Muestra una vista general de la billetera - - - &Transactions - &Transacciones - - - Browse transaction history - Explora el historial de transacciones - - - E&xit - &Salir - - - Quit application - Salir del programa - - - &About %1 - &Acerca de %1 - - - Show information about %1 - Mostrar Información sobre %1 - - - About &Qt - Acerca de &Qt - - - Show information about Qt - Mostrar información sobre Qt - - - Modify configuration options for %1 - Modificar las opciones de configuración para %1 - - - Create a new wallet - Crear una nueva billetera - - - &Minimize - &Minimizar - - - Wallet: - Billetera: - - - Network activity disabled. - A substring of the tooltip. - Actividad de red deshabilitada. - - - Proxy is <b>enabled</b>: %1 - Proxy <b>habilitado</b>: %1 - - - Send coins to a Bitcoin address - Enviar monedas a una dirección de Bitcoin - - - Backup wallet to another location - Realizar copia de seguridad de la billetera en otra ubicación - - - Change the passphrase used for wallet encryption - Cambiar la frase de contraseña utilizada para encriptar la billetera - - - &Send - &Enviar - - - &Receive - &Recibir - - - &Encrypt Wallet… - &Encriptar billetera… - - - Encrypt the private keys that belong to your wallet - Encriptar las llaves privadas que pertenecen a tu billetera - - - &Backup Wallet… - &Realizar copia de seguridad de la billetera... - - - &Change Passphrase… - &Cambiar contraseña... - - - Sign &message… - Firmar &mensaje... - - - Sign messages with your Bitcoin addresses to prove you own them - Firmar mensajes con sus direcciones Bitcoin para demostrar la propiedad - - - &Verify message… - &Verificar mensaje... - - - Verify messages to ensure they were signed with specified Bitcoin addresses - Verificar mensajes comprobando que están firmados con direcciones Bitcoin concretas - - - &Load PSBT from file… - &Cargar TBPF desde el archivo... - - - Open &URI… - Abrir &URI… - - - Close Wallet… - Cerrar billetera... - - - Create Wallet… - Crear billetera... - - - Close All Wallets… - Cerrar todas las billeteras... - - - &File - &Archivo - - - &Settings - &Configuración - - - &Help - A&yuda - - - Tabs toolbar - Barra de pestañas - - - Syncing Headers (%1%)… - Sincronizando cabeceras (1%1%) - - - Synchronizing with network… - Sincronizando con la red... - - - Indexing blocks on disk… - Indexando bloques en disco... - - - Processing blocks on disk… - Procesando bloques en disco... - - - Connecting to peers… - Conectando con pares... - - - Request payments (generates QR codes and bitcoin: URIs) - Solicitar pagos (genera codigo QR y URL's de Bitcoin) - - - Show the list of used sending addresses and labels - Mostrar la lista de direcciones de envío y etiquetas - - - Show the list of used receiving addresses and labels - Muestra la lista de direcciones de recepción y etiquetas - - - &Command-line options - &Opciones de linea de comando - - - Processed %n block(s) of transaction history. - - %n bloque procesado del historial de transacciones. - %n bloques procesados del historial de transacciones. - - - - %1 behind - %1 atrás - - - Catching up… - Poniéndose al día... - - - Last received block was generated %1 ago. - El último bloque recibido fue generado hace %1. - - - Transactions after this will not yet be visible. - Las transacciones posteriores aún no están visibles. - - - Warning - Aviso - - - Information - Información - - - Up to date - Actualizado - - - Load Partially Signed Bitcoin Transaction - Cargar transacción de Bitcoin parcialmente firmada - - - Load PSBT from &clipboard… - Cargar TBPF desde el &portapapeles... - - - Node window - Ventana del nodo - - - Open node debugging and diagnostic console - Abrir la consola de depuración y diagnóstico del nodo - - - &Sending addresses - Direcciones de &envío - - - &Receiving addresses - Direcciones de &recepción - - - Open a bitcoin: URI - Abrir un bitcoin: URI - - - Open Wallet - Abrir billetera - - - Open a wallet - Abrir una cartera - - - Close wallet - Cerrar billetera - - - Restore Wallet… - Name of the menu item that restores wallet from a backup file. - Restaurar billetera… - - - Restore a wallet from a backup file - Status tip for Restore Wallet menu item - Restaurar una billetera desde un archivo de copia de seguridad - - - Close all wallets - Cerrar todas las billeteras - - - Migrate Wallet - Migrar billetera - - - Migrate a wallet - Migrar una billetera - - - No wallets available - No hay billeteras disponibles - - - Wallet Data - Name of the wallet data file format. - Datos de la billetera - - - Load Wallet Backup - The title for Restore Wallet File Windows - Cargar copia de seguridad de billetera - - - Restore Wallet - Title of pop-up window shown when the user is attempting to restore a wallet. - Restaurar billetera - - - Wallet Name - Label of the input field where the name of the wallet is entered. - Nombre de la billetera - - - &Window - &Ventana - - - Main Window - Ventana principal - - - %1 client - Cliente %1 - - - &Hide - &Ocultar - - - S&how - &Mostrar - - - %n active connection(s) to Bitcoin network. - A substring of the tooltip. - - %n conexión activa con la red de Bitcoin. - %n conexiónes activas con la red de Bitcoin. - - - - Click for more actions. - A substring of the tooltip. "More actions" are available via the context menu. - Haz clic para ver más acciones. - - - Show Peers tab - A context menu item. The "Peers tab" is an element of the "Node window". - Mostrar pestaña de pares - - - Disable network activity - A context menu item. - Deshabilitar actividad de red - - - Enable network activity - A context menu item. The network activity was disabled previously. - Habilitar actividad de red - - - Pre-syncing Headers (%1%)… - Presincronizando cabeceras (%1%)... - - - Error creating wallet - Error al crear billetera - - - Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets) - No se puede crear una billetera nueva, ya que el software se compiló sin compatibilidad con sqlite (requerida para billeteras basadas en descriptores) - - - Warning: %1 - Advertencia: %1 - - - Date: %1 - - Fecha: %1 - - - - Amount: %1 - - Importe: %1 - - - - Wallet: %1 - - Billetera: %1 - - - - Type: %1 - - Tipo: %1 - - - - Label: %1 - - Etiqueta %1 - - - - Address: %1 - - Dirección: %1 - - - - Sent transaction - Transacción enviada - - - Incoming transaction - Transacción entrante - - - HD key generation is <b>enabled</b> - La generación de clave HD está <b>habilitada</b> - - - HD key generation is <b>disabled</b> - La generación de clave HD está <b>deshabilitada</b> - - - Private key <b>disabled</b> - Clave privada <b>deshabilitada</b> - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - La billetera está <b>encriptada</b> y actualmente <b>desbloqueda</b> - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - La billetera está <b>encriptada</b> y actualmente <b>bloqueda</b> - - - Original message: - Mensaje original: - - - - UnitDisplayStatusBarControl - - Unit to show amounts in. Click to select another unit. - Unidad en la que se muestran los importes. Haz clic para seleccionar otra unidad. - - - - CoinControlDialog - - Coin Selection - Selección de monedas - - - Quantity: - Cantidad: - - - Amount: - Importe: - - - Fee: - Comisión: - - - After Fee: - Después de tasas: - - - Change: - Cambio: - - - (un)select all - (des)selecciona todos - - - Tree mode - Modo arbol - - - List mode - Modo lista - - - Amount - Cantidad - - - Received with label - Recibido con etiqueta - - - Received with address - Recibido con dirección - - - Date - Fecha - - - Confirmations - Confirmaciones - - - Confirmed - Confirmado - - - Copy amount - Copiar cantidad - - - &Copy address - &Copiar dirección - - - Copy &label - Copiar &etiqueta - - - Copy &amount - Copiar &importe - - - Copy transaction &ID and output index - Copiar &identificador de transacción e índice de salidas - - - L&ock unspent - B&loquear no gastado - - - &Unlock unspent - &Desbloquear importe no gastado - - - Copy quantity - Copiar cantidad - - - Copy fee - Copiar comisión - - - Copy after fee - Copiar después de la tarifa - - - Copy bytes - Copiar bytes - - - Copy change - Copiar cambio - - - (%1 locked) - (%1 bloqueado) - - - Can vary +/- %1 satoshi(s) per input. - Puede variar +/- %1 satoshi(s) por entrada. - - - (no label) - (sin etiqueta) - - - change from %1 (%2) - Cambio desde %1 (%2) - - - (change) - (cambio) - - - - CreateWalletActivity - - Create Wallet - Title of window indicating the progress of creation of a new wallet. - Crear billetera - - - Creating Wallet <b>%1</b>… - Descriptive text of the create wallet progress window which indicates to the user which wallet is currently being created. - Creando billetera <b>%1</b>… - - - Create wallet failed - Fallo al crear la billetera - - - Create wallet warning - Advertencia de crear billetera - - - Can't list signers - No se puede hacer una lista de firmantes - - - Too many external signers found - Se encontraron demasiados firmantes externos - - - - LoadWalletsActivity - - Load Wallets - Title of progress window which is displayed when wallets are being loaded. - Cargar billeteras - - - Loading wallets… - Descriptive text of the load wallets progress window which indicates to the user that wallets are currently being loaded. - Cargando billeteras... - - - - MigrateWalletActivity - - Migrate wallet - Migrar billetera - - - Are you sure you wish to migrate the wallet <i>%1</i>? - ¿Seguro deseas migrar la billetera <i>%1</i>? - - - Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made. -If this wallet contains any watchonly scripts, a new wallet will be created which contains those watchonly scripts. -If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts. - -The migration process will create a backup of the wallet before migrating. This backup file will be named <wallet name>-<timestamp>.legacy.bak and can be found in the directory for this wallet. In the event of an incorrect migration, the backup can be restored with the "Restore Wallet" functionality. - La migración de la billetera la convertirá en una o más billeteras basadas en descriptores. Será necesario realizar una nueva copia de seguridad de la billetera. -Si esta billetera contiene scripts solo de observación, se creará una nueva billetera que los contenga. -Si esta billetera contiene scripts solucionables pero no de observación, se creará una nueva billetera diferente que los contenga. - -El proceso de migración creará una copia de seguridad de la billetera antes de proceder. Este archivo de copia de seguridad se llamará <wallet name>-<timestamp>.legacy.bak y se encontrará en el directorio de esta billetera. En caso de que la migración falle, se puede restaurar la copia de seguridad con la funcionalidad "Restaurar billetera". - - - Migrate Wallet - Migrar billetera - - - Migrating Wallet <b>%1</b>… - Migrando billetera <b>%1</b>… - - - The wallet '%1' was migrated successfully. - La migración de la billetera "%1" se realizó correctamente. - - - Watchonly scripts have been migrated to a new wallet named '%1'. - Los scripts solo de observación se migraron a una nueva billetera llamada "%1". - - - Solvable but not watched scripts have been migrated to a new wallet named '%1'. - Los scripts solucionables pero no de observación se migraron a una nueva billetera llamada "%1". - - - Migration failed - Migración errónea - - - Migration Successful - Migración correcta - - - - OpenWalletActivity - - Open wallet failed - Fallo al abrir billetera - - - Open wallet warning - Advertencia al abrir billetera - - - Open Wallet - Title of window indicating the progress of opening of a wallet. - Abrir billetera - - - Opening Wallet <b>%1</b>… - Descriptive text of the open wallet progress window which indicates to the user which wallet is currently being opened. - Abriendo billetera <b>%1</b>... - - - - RestoreWalletActivity - - Restore Wallet - Title of progress window which is displayed when wallets are being restored. - Restaurar billetera - - - Restoring Wallet <b>%1</b>… - Descriptive text of the restore wallets progress window which indicates to the user that wallets are currently being restored. - Restaurando billetera <b>%1</b>… - - - Restore wallet failed - Title of message box which is displayed when the wallet could not be restored. - Error al restaurar la billetera - - - Restore wallet warning - Title of message box which is displayed when the wallet is restored with some warning. - Advertencia al restaurar billetera - - - Restore wallet message - Title of message box which is displayed when the wallet is successfully restored. - Mensaje al restaurar billetera - - - - WalletController - - Close wallet - Cerrar billetera - - - Are you sure you wish to close the wallet <i>%1</i>? - ¿Seguro deseas cerrar la billetera <i>%1</i>? - - - Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. - Cerrar la billetera durante demasiado tiempo puede causar la resincronización de toda la cadena si el podado está habilitado. - - - Close all wallets - Cerrar todas las billeteras - - - Are you sure you wish to close all wallets? - ¿Seguro quieres cerrar todas las billeteras? - - - - CreateWalletDialog - - Create Wallet - Crear billetera - - - You are one step away from creating your new wallet! - Estás a un paso de crear tu nueva billetera. - - - Please provide a name and, if desired, enable any advanced options - Escribe un nombre y, si quieres, activa las opciones avanzadas. - - - Wallet Name - Nombre de la billetera - - - Wallet - Billetera - - - Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice. - Encriptar la billetera. La billetera se encriptará con una frase de contraseña de tu elección. - - - Encrypt Wallet - Encriptar billetera - - - Advanced Options - Opciones avanzadas - - - Disable private keys for this wallet. Wallets with private keys disabled will have no private keys and cannot have an HD seed or imported private keys. This is ideal for watch-only wallets. - Desactivar las claves privadas para esta billetera. Las billeteras con claves privadas desactivadas no tendrán claves privadas y no podrán tener ninguna semilla HD ni claves privadas importadas. Esto es ideal para billeteras solo de observación. - - - Disable Private Keys - Desactivar las claves privadas - - - Make a blank wallet. Blank wallets do not initially have private keys or scripts. Private keys and addresses can be imported, or an HD seed can be set, at a later time. - Crea una billetera en blanco. Las billeteras en blanco inicialmente no tienen llaves privadas ni scripts. Las llaves privadas y las direcciones pueden ser importadas o se puede establecer una semilla HD más tarde. - - - Make Blank Wallet - Crear billetera en blanco - - - Use an external signing device such as a hardware wallet. Configure the external signer script in wallet preferences first. - Usa un dispositivo de firma externo, por ejemplo, una billetera de hardware. Configura primero el script del firmante externo en las preferencias de la billetera. - - - External signer - Firmante externo - - - Create - Crear - - - Compiled without external signing support (required for external signing) - "External signing" means using devices such as hardware wallets. - Compilado sin compatibilidad con firma externa (requerida para la firma externa) - - - - EditAddressDialog - - Edit Address - Editar dirección - - - &Label - &Etiqueta - - - The label associated with this address list entry - La etiqueta asociada con esta entrada en la lista de direcciones - - - The address associated with this address list entry. This can only be modified for sending addresses. - La dirección asociada con esta entrada en la lista de direcciones. Solo se puede modificar para las direcciones de envío. - - - &Address - &Dirección - - - New sending address - Nueva dirección de envío - - - Edit receiving address - Editar dirección de recepción - - - Edit sending address - Editar dirección de envío - - - The entered address "%1" is not a valid Bitcoin address. - La dirección ingresada "%1" no es una dirección de Bitcoin válida. - - - Address "%1" already exists as a receiving address with label "%2" and so cannot be added as a sending address. - La dirección "%1" ya existe como dirección de recepción con la etiqueta "%2" y, por lo tanto, no se puede agregar como dirección de envío. - - - The entered address "%1" is already in the address book with label "%2". - La dirección ingresada "%1" ya está en la libreta de direcciones con la etiqueta "%2". - - - Could not unlock wallet. - No se pudo desbloquear la billetera. - - - New key generation failed. - Error al generar clave nueva. - - - - FreespaceChecker - - A new data directory will be created. - Se creará un nuevo directorio de datos. - - - name - nombre - - - Directory already exists. Add %1 if you intend to create a new directory here. - El directorio ya existe. Agrega %1 si deseas crear un nuevo directorio aquí. - - - Path already exists, and is not a directory. - Ruta de acceso existente, pero no es un directorio. - - - Cannot create data directory here. - No se puede crear un directorio de datos aquí. - - - - Intro - - %n GB of space available - - %n GB de espacio disponible - %n GB de espacio disponible - - - - (of %n GB needed) - - (de %n GB necesario) - (de %n GB necesarios) - - - - (%n GB needed for full chain) - - (%n GB necesario para completar la cadena) - (%n GB necesarios para completar la cadena) - - - - Choose data directory - Elegir directorio de datos - - - At least %1 GB of data will be stored in this directory, and it will grow over time. - Se almacenarán al menos %1 GB de datos en este directorio, que aumentarán con el tiempo. - - - Approximately %1 GB of data will be stored in this directory. - Se almacenarán aproximadamente %1 GB de datos en este directorio. - - - (sufficient to restore backups %n day(s) old) - Explanatory text on the capability of the current prune target. - - (suficiente para restaurar copias de seguridad de %n día de antigüedad) - (suficiente para restaurar copias de seguridad de %n días de antigüedad) - - - - %1 will download and store a copy of the Bitcoin block chain. - %1 descargará y almacenará una copia de la cadena de bloques de Bitcoin. - - - The wallet will also be stored in this directory. - La billetera también se almacenará en este directorio. - - - Error: Specified data directory "%1" cannot be created. - Error: No se puede crear el directorio de datos especificado "%1" . - - - Welcome - Te damos la bienvenida - - - Welcome to %1. - Te damos la bienvenida a %1. - - - As this is the first time the program is launched, you can choose where %1 will store its data. - Como es la primera vez que se ejecuta el programa, puedes elegir dónde %1 almacenará los datos. - - - Limit block chain storage to - Limitar el almacenamiento de la cadena de bloques a - - - Reverting this setting requires re-downloading the entire blockchain. It is faster to download the full chain first and prune it later. Disables some advanced features. - Para revertir esta configuración, se debe descargar de nuevo la cadena de bloques completa. Es más rápido descargar la cadena completa y podarla después. Desactiva algunas funciones avanzadas. - - - This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off. - La sincronización inicial consume muchos recursos y es posible que exponga problemas de hardware en la computadora que anteriormente pasaron desapercibidos. Cada vez que ejecutes %1, seguirá descargando desde el punto en el que quedó. - - - When you click OK, %1 will begin to download and process the full %4 block chain (%2 GB) starting with the earliest transactions in %3 when %4 initially launched. - Al hacer clic en OK, %1 iniciará el proceso de descarga y procesará la cadena de bloques %4 completa (%2 GB), empezando con la transacción más antigua en %3 cuando %4 se ejecutó inicialmente. - - - If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low. - Si elegiste la opción de limitar el almacenamiento de la cadena de bloques (podado), los datos históricos se deben descargar y procesar de igual manera, pero se eliminarán después para disminuir el uso del disco. - - - Use the default data directory - Usar el directorio de datos predeterminado - - - Use a custom data directory: - Usar un directorio de datos personalizado: - - - - HelpMessageDialog - - version - versión - - - About %1 - Acerca de %1 - - - Command-line options - Opciones de línea de comandos - - - - ShutdownWindow - - %1 is shutting down… - %1 se está cerrando... - - - Do not shut down the computer until this window disappears. - No apagues la computadora hasta que desaparezca esta ventana. - - - - ModalOverlay - - Form - Formulario - - - Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. - Es posible que las transacciones recientes aún no sean visibles y, por lo tanto, el saldo de la billetera podría ser incorrecto. Esta información será correcta una vez que la billetera haya terminado de sincronizarse con la red de Bitcoin, como se detalla abajo. - - - Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. - La red no aceptará si se intenta gastar bitcoins afectados por las transacciones que aún no se muestran. - - - Number of blocks left - Número de bloques restantes - - - Unknown… - Desconocido... - - - calculating… - calculando... - - - Last block time - Hora del último bloque - - - Progress - Progreso - - - Progress increase per hour - Avance del progreso por hora - - - Estimated time left until synced - Tiempo estimado restante hasta la sincronización - - - Hide - Ocultar - - - %1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain. - %1 se está sincronizando actualmente. Descargará encabezados y bloques de pares, y los validará hasta alcanzar el extremo de la cadena de bloques. - - - Unknown. Syncing Headers (%1, %2%)… - Desconocido. Sincronizando encabezados (%1, %2%)… - - - Unknown. Pre-syncing Headers (%1, %2%)… - Desconocido. Presincronizando encabezados (%1, %2%)… - - - - OpenURIDialog - - Open bitcoin URI - Abrir URI de bitcoin - - - Paste address from clipboard - Tooltip text for button that allows you to paste an address that is in your clipboard. - Pegar dirección desde el portapapeles - - - - OptionsDialog - - Options - Opciones - - - &Main - &Principal - - - Automatically start %1 after logging in to the system. - Iniciar automáticamente %1 después de iniciar sesión en el sistema. - - - &Start %1 on system login - &Iniciar %1 al iniciar sesión en el sistema - - - Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain. - Al activar el podado, se reduce considerablemente el espacio de disco necesario para almacenar las transacciones. Todos los bloques aún se validan completamente. Para revertir esta opción, se requiere descargar de nuevo toda la cadena de bloques. - - - Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. - Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. - Tamaño máximo de la caché de la base de datos. Una caché más grande puede contribuir a una sincronización más rápida, después de lo cual el beneficio es menos pronunciado para la mayoría de los casos de uso. Disminuir el tamaño de la caché reducirá el uso de la memoria. La memoria del mempool no utilizada se comparte para esta caché. - - - Size of &database cache - Tamaño de la caché de la &base de datos - - - Number of script &verification threads - Número de subprocesos de &verificación de scripts - - - Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! - Ruta completa a un script compatible con %1 (p. ej., C:\Descargas\hwi.exe o /Usuarios/Tú/Descargas/hwi.py). Advertencia: ¡El malware podría robarte tus monedas! - - - Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. - Abre el puerto del cliente de Bitcoin en el enrutador automáticamente. Esto solo funciona cuando el enrutador soporta NAT-PMP o PCP y está activo. El puerto externo podría ser elegido al azar. - - - Map port using PCP or NA&T-PMP - Mapear el puerto usando NAT-PMP - - - IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) - Dirección IP del proxy (por ejemplo, IPv4: 127.0.0.1 / IPv6: ::1) - - - Shows if the supplied default SOCKS5 proxy is used to reach peers via this network type. - Muestra si el proxy SOCKS5 por defecto suministrado se utiliza para llegar a los pares a través de este tipo de red. - - - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu. - Minimizar en vez de salir de la aplicación cuando la ventana está cerrada. Cuando se activa esta opción, la aplicación solo se cerrará después de seleccionar "Salir" en el menú. - - - Font in the Overview tab: - Fuente en la pestaña "Vista general": - - - Options set in this dialog are overridden by the command line: - Las opciones establecidas en este diálogo serán anuladas por la línea de comandos: - - - Open the %1 configuration file from the working directory. - Abrir el archivo de configuración %1 en el directorio de trabajo. - - - Open Configuration File - Abrir archivo de configuración - - - Reset all client options to default. - Restablecer todas las opciones del cliente a los valores predeterminados. - - - &Reset Options - &Restablecer opciones - - - &Network - &Red - - - Prune &block storage to - Podar el almacenamiento de &bloques a - - - Reverting this setting requires re-downloading the entire blockchain. - Para revertir esta configuración, se debe descargar de nuevo la cadena de bloques completa. - - - Set the number of script verification threads. Negative values correspond to the number of cores you want to leave free to the system. - Tooltip text for Options window setting that sets the number of script verification threads. Explains that negative values mean to leave these many cores free to the system. - Establece el número de subprocesos de verificación de scripts. Los valores negativos corresponden al número de núcleos que se desea dejar libres al sistema. - - - (0 = auto, <0 = leave that many cores free) - (0 = auto, <0 = deja esta cantidad de núcleos libres) - - - This allows you or a third party tool to communicate with the node through command-line and JSON-RPC commands. - Tooltip text for Options window setting that enables the RPC server. - Esto te permite a ti o a una herramienta de terceros comunicarse con el nodo a través de la línea de comandos y los comandos JSON-RPC. - - - Enable R&PC server - An Options window setting to enable the RPC server. - Activar servidor R&PC - - - W&allet - &Billetera - - - Whether to set subtract fee from amount as default or not. - Tooltip text for Options window setting that sets subtracting the fee from a sending amount as default. - Si se resta o no la comisión del importe por defecto. - - - Subtract &fee from amount by default - An Options window setting to set subtracting the fee from a sending amount as default. - Restar &comisión del importe por defecto - - - Expert - Experto - - - Enable coin &control features - Habilitar funciones de &control de monedas - - - If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. - Si deshabilitas el gasto del cambio sin confirmar, no se puede usar el cambio de una transacción hasta que esta tenga al menos una confirmación. Esto también afecta cómo se calcula el saldo. - - - &Spend unconfirmed change - &Gastar cambio sin confirmar - - - Enable &PSBT controls - An options window setting to enable PSBT controls. - Activar controles de &TBPF - - - Whether to show PSBT controls. - Tooltip text for options window setting that enables PSBT controls. - Si se muestran los controles de TBPF. - - - External Signer (e.g. hardware wallet) - Firmante externo (p. ej., billetera de hardware) - - - &External signer script path - &Ruta al script del firmante externo - - - Accept connections from outside. - Aceptar conexiones externas. - - - Allow incomin&g connections - &Permitir conexiones entrantes - - - Connect to the Bitcoin network through a SOCKS5 proxy. - Conectarse a la red de Bitcoin a través de un proxy SOCKS5. - - - &Connect through SOCKS5 proxy (default proxy): - &Conectarse a través del proxy SOCKS5 (proxy predeterminado): - - - Proxy &IP: - &IP del proxy: - - - &Port: - &Puerto: - - - Port of the proxy (e.g. 9050) - Puerto del proxy (p. ej., 9050) - - - Used for reaching peers via: - Usado para conectarse con pares a través de: - - - &Window - &Ventana - - - Show the icon in the system tray. - Mostrar el ícono en la bandeja del sistema. - - - &Show tray icon - &Mostrar el ícono de la bandeja - - - Show only a tray icon after minimizing the window. - Mostrar solo un ícono de bandeja después de minimizar la ventana. - - - &Minimize to the tray instead of the taskbar - &Minimizar a la bandeja en vez de la barra de tareas - - - M&inimize on close - &Minimizar al cerrar - - - &Display - &Visualización - - - User Interface &language: - &Idioma de la interfaz de usuario: - - - The user interface language can be set here. This setting will take effect after restarting %1. - El idioma de la interfaz de usuario puede establecerse aquí. Esta configuración surtirá efecto después de reiniciar %1. - - - &Unit to show amounts in: - &Unidad en la que se muestran los importes: - - - Choose the default subdivision unit to show in the interface and when sending coins. - Elegir la unidad de subdivisión predeterminada para mostrar en la interfaz y al enviar monedas. - - - Third-party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |. - Las URL de terceros (por ejemplo, un explorador de bloques) que aparecen en la pestaña de transacciones como elementos del menú contextual. El hash de la transacción remplaza el valor %s en la URL. Varias URL se separan con una barra vertical (|). - - - &Third-party transaction URLs - &URL de transacciones de terceros - - - Whether to show coin control features or not. - Si se muestran o no las funcionalidades de control de monedas. - - - Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services. - Conectarse a la red de Bitcoin a través de un proxy SOCKS5 independiente para los servicios onion de Tor. - - - Use separate SOCKS&5 proxy to reach peers via Tor onion services: - Usar un proxy SOCKS&5 independiente para comunicarse con pares a través de los servicios onion de Tor: - - - &Cancel - &Cancelar - - - Compiled without external signing support (required for external signing) - "External signing" means using devices such as hardware wallets. - Compilado sin compatibilidad con firma externa (requerida para la firma externa) - - - default - predeterminado - - - none - ninguno - - - Confirm options reset - Window title text of pop-up window shown when the user has chosen to reset options. - Confirmar restablecimiento de opciones - - - Client restart required to activate changes. - Text explaining that the settings changed will not come into effect until the client is restarted. - Es necesario reiniciar el cliente para activar los cambios. - - - Current settings will be backed up at "%1". - Text explaining to the user that the client's current settings will be backed up at a specific location. %1 is a stand-in argument for the backup location's path. - Se realizará una copia de seguridad de la configuración actual en "%1". - - - Client will be shut down. Do you want to proceed? - Text asking the user to confirm if they would like to proceed with a client shutdown. - El cliente se cerrará. ¿Quieres continuar? - - - Configuration options - Window title text of pop-up box that allows opening up of configuration file. - Opciones de configuración - - - The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file. - Explanatory text about the priority order of instructions considered by client. The order from high to low being: command-line, configuration file, GUI settings. - El archivo de configuración se usa para especificar opciones avanzadas del usuario, que remplazan la configuración de la GUI. Además, las opciones de la línea de comandos remplazarán este archivo de configuración. - - - Continue - Continuar - - - Cancel - Cancelar - - - The configuration file could not be opened. - No se pudo abrir el archivo de configuración. - - - This change would require a client restart. - Estos cambios requieren reiniciar el cliente. - - - The supplied proxy address is invalid. - La dirección del proxy proporcionada es inválida. - - - - OptionsModel - - Could not read setting "%1", %2. - No se puede leer la configuración "%1", %2. - - - - OverviewPage - - Form - Formulario - - - 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. - La información mostrada puede estar desactualizada. La billetera se sincroniza automáticamente con la red de Bitcoin después de establecer una conexión, pero este proceso aún no se ha completado. - - - Watch-only: - Solo de observación: - - - Available: - Disponible: - - - Your current spendable balance - Tu saldo disponible para gastar actualmente - - - Pending: - Pendiente: - - - Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance - Total de transacciones que aún se deben confirmar y que no se contabilizan dentro del saldo disponible para gastar - - - Immature: - Inmaduro: - - - Mined balance that has not yet matured - Saldo minado que aún no ha madurado - - - Balances - Saldos - - - Your current total balance - Tu saldo total actual - - - Your current balance in watch-only addresses - Tu saldo actual en direcciones solo de observación - - - Spendable: - Gastable: - - - Recent transactions - Transacciones recientes - - - Unconfirmed transactions to watch-only addresses - Transacciones sin confirmar hacia direcciones solo de observación - - - Mined balance in watch-only addresses that has not yet matured - Saldo minado en direcciones solo de observación que aún no ha madurado - - - Current total balance in watch-only addresses - Saldo total actual en direcciones solo de observación - - - Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings->Mask values. - Modo de privacidad activado para la pestaña de vista general. Para mostrar los valores, anula la selección de "Configuración->Ocultar valores". - - - - PSBTOperationsDialog - - PSBT Operations - Operaciones TBPF - - - Sign Tx - Firmar transacción - - - Broadcast Tx - Transmitir transacción - - - Copy to Clipboard - Copiar al portapapeles - - - Save… - Guardar... - - - Close - Cerrar - - - Failed to load transaction: %1 - Error al cargar la transacción: %1 - - - Failed to sign transaction: %1 - Error al firmar la transacción: %1 - - - Cannot sign inputs while wallet is locked. - No se pueden firmar entradas mientras la billetera está bloqueada. - - - Could not sign any more inputs. - No se pudieron firmar más entradas. - - - Signed %1 inputs, but more signatures are still required. - Se firmaron %1 entradas, pero aún se requieren más firmas. - - - Signed transaction successfully. Transaction is ready to broadcast. - La transacción se firmó correctamente y está lista para transmitirse. - - - Unknown error processing transaction. - Error desconocido al procesar la transacción. - - - Transaction broadcast successfully! Transaction ID: %1 - ¡La transacción se transmitió correctamente! Identificador de transacción: %1 - - - Transaction broadcast failed: %1 - Error al transmitir la transacción: %1 - - - PSBT copied to clipboard. - TBPF copiada al portapapeles. - - - Save Transaction Data - Guardar datos de la transacción - - - Partially Signed Transaction (Binary) - Expanded name of the binary PSBT file format. See: BIP 174. - Transacción parcialmente firmada (binario) - - - PSBT saved to disk. - TBPF guardada en el disco. - - - Sends %1 to %2 - Envía %1 a %2 - - - own address - dirección propia - - - Unable to calculate transaction fee or total transaction amount. - No se puede calcular la comisión o el importe total de la transacción. - - - Pays transaction fee: - Paga comisión de transacción: - - - Total Amount - Importe total - - - or - o - - - Transaction has %1 unsigned inputs. - La transacción tiene %1 entradas sin firmar. - - - Transaction is missing some information about inputs. - Falta información sobre las entradas de la transacción. - - - Transaction still needs signature(s). - La transacción aún necesita firma(s). - - - (But no wallet is loaded.) - (Pero no se cargó ninguna billetera). - - - (But this wallet cannot sign transactions.) - (Pero esta billetera no puede firmar transacciones). - - - (But this wallet does not have the right keys.) - (Pero esta billetera no tiene las claves adecuadas). - - - Transaction is fully signed and ready for broadcast. - La transacción se firmó completamente y está lista para transmitirse. - - - Transaction status is unknown. - El estado de la transacción es desconocido. - - - - PaymentServer - - Payment request error - Error en la solicitud de pago - - - Cannot start bitcoin: click-to-pay handler - No se puede iniciar el controlador "bitcoin: click-to-pay" - - - URI handling - Gestión de URI - - - 'bitcoin://' is not a valid URI. Use 'bitcoin:' instead. - "bitcoin://" no es un URI válido. Usa "bitcoin:" en su lugar. - - - Cannot process payment request because BIP70 is not supported. -Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored. -If you are receiving this error you should request the merchant provide a BIP21 compatible URI. - No se puede procesar la solicitud de pago porque no existe compatibilidad con BIP70. -Debido a los fallos de seguridad generalizados en BIP70, se recomienda encarecidamente ignorar las instrucciones del comerciante para cambiar de billetera. -Si recibes este error, debes solicitar al comerciante que te proporcione un URI compatible con BIP21. - - - URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters. - No se puede analizar el URI. Esto se puede deber a una dirección de Bitcoin inválida o a parámetros de URI con formato incorrecto. - - - Payment request file handling - Gestión del archivo de solicitud de pago - - - - PeerTableModel - - User Agent - Title of Peers Table column which contains the peer's User Agent string. - Agente de usuario - - - Peer - Title of Peers Table column which contains a unique number used to identify a connection. - Par - - - Age - Title of Peers Table column which indicates the duration (length of time) since the peer connection started. - Antigüedad - - - Direction - Title of Peers Table column which indicates the direction the peer connection was initiated from. - Dirección - - - Sent - Title of Peers Table column which indicates the total amount of network information we have sent to the peer. - Enviado - - - Received - Title of Peers Table column which indicates the total amount of network information we have received from the peer. - Recibido - - - Address - Title of Peers Table column which contains the IP/Onion/I2P address of the connected peer. - Dirección - - - Type - Title of Peers Table column which describes the type of peer connection. The "type" describes why the connection exists. - Tipo - - - Network - Title of Peers Table column which states the network the peer connected through. - Red - - - Inbound - An Inbound Connection from a Peer. - Entrante - - - Outbound - An Outbound Connection to a Peer. - Saliente - - - - QRImageWidget - - &Save Image… - &Guardar imagen... - - - &Copy Image - &Copiar imagen - - - Resulting URI too long, try to reduce the text for label / message. - El URI resultante es demasiado largo, así que trata de reducir el texto de la etiqueta o el mensaje. - - - Error encoding URI into QR Code. - Fallo al codificar URI en código QR. - - - QR code support not available. - La compatibilidad con el código QR no está disponible. - - - Save QR Code - Guardar código QR - - - PNG Image - Expanded name of the PNG file format. See: https://en.wikipedia.org/wiki/Portable_Network_Graphics. - Imagen PNG - - - - RPCConsole - - N/A - N/D - - - Client version - Versión del cliente - - - &Information - &Información - - - Datadir - Directorio de datos - - - To specify a non-default location of the data directory use the '%1' option. - Para especificar una ubicación no predeterminada del directorio de datos, usa la opción "%1". - - - Blocksdir - Directorio de bloques - - - To specify a non-default location of the blocks directory use the '%1' option. - Para especificar una ubicación no predeterminada del directorio de bloques, usa la opción "%1". - - - Startup time - Tiempo de inicio - - - Network - Red - - - Name - Nombre - - - Number of connections - Número de conexiones - - - Local Addresses - Direcciones locales - - - Network addresses that your Bitcoin node is currently using to communicate with other nodes. - Direcciones de red que tu nodo Bitcoin usa actualmente para comunicarse con otros nodos. - - - Block chain - Cadena de bloques - - - Memory Pool - Pool de memoria - - - Current number of transactions - Número total de transacciones - - - Memory usage - Uso de memoria - - - Wallet: - Billetera: - - - (none) - (ninguna) - - - &Reset - &Restablecer - - - Received - Recibido - - - Sent - Enviado - - - &Peers - &Pares - - - Banned peers - Pares prohibidos - - - Select a peer to view detailed information. - Selecciona un par para ver la información detallada. - - - Hide Peers Detail - Ocultar detalles de pares - - - The transport layer version: %1 - Versión de la capa de transporte: %1 - - - Transport - Transporte - - - Session ID - Identificador de sesión - - - Version - Versión - - - Whether we relay transactions to this peer. - Si retransmitimos las transacciones a este par. - - - Transaction Relay - Retransmisión de transacción - - - Starting Block - Bloque inicial - - - Synced Headers - Encabezados sincronizados - - - Synced Blocks - Bloques sincronizados - - - Last Transaction - Última transacción - - - The mapped Autonomous System used for diversifying peer selection. - El sistema autónomo asignado que se usó para diversificar la selección de pares. - - - Mapped AS - SA asignado - - - Whether we relay addresses to this peer. - Tooltip text for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - Si retransmitimos las direcciones a este par. - - - Address Relay - Text title for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - Retransmisión de direcciones - - - The total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Tooltip text for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - El número total de direcciones recibidas desde este par que se procesaron (excluye las direcciones desestimadas debido a la limitación de volumen). - - - The total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Tooltip text for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - El número total de direcciones recibidas desde este par que se desestimaron (no se procesaron) debido a la limitación de volumen. - - - Addresses Processed - Text title for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Direcciones procesadas - - - Addresses Rate-Limited - Text title for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Direcciones desestimadas por limitación de volumen - - - User Agent - Agente de usuario - - - Node window - Ventana del nodo - - - Current block height - Altura del bloque actual - - - Open the %1 debug log file from the current data directory. This can take a few seconds for large log files. - Abrir el archivo de registro de depuración %1 en el directorio de datos actual. Esto puede tardar unos segundos para los archivos de registro grandes. - - - Decrease font size - Disminuir tamaño de fuente - - - Increase font size - Aumentar tamaño de fuente - - - Permissions - Permisos - - - The direction and type of peer connection: %1 - La dirección y el tipo de conexión entre pares: %1 - - - Direction/Type - Dirección/Tipo - - - The BIP324 session ID string in hex. - La cadena del identificador de sesión BIP324 en formato hexadecimal. - - - The network protocol this peer is connected through: IPv4, IPv6, Onion, I2P, or CJDNS. - El protocolo de red mediante el cual está conectado este par: IPv4, IPv6, Onion, I2P o CJDNS. - - - Services - Servicios - - - High bandwidth BIP152 compact block relay: %1 - Retransmisión de bloques compactos BIP152 en banda ancha: %1 - - - High Bandwidth - Banda ancha - - - Connection Time - Tiempo de conexión - - - Elapsed time since a novel block passing initial validity checks was received from this peer. - Tiempo transcurrido desde que se recibió de este par un nuevo bloque que superó las comprobaciones de validez iniciales. - - - Last Block - Último bloque - - - Elapsed time since a novel transaction accepted into our mempool was received from this peer. - Tooltip text for the Last Transaction field in the peer details area. - Tiempo transcurrido desde que se recibió de este par una nueva transacción aceptada en nuestra mempool. - - - Last Send - Último envío - - - Last Receive - Última recepción - - - Ping Time - Tiempo de ping - - - The duration of a currently outstanding ping. - La duración de un ping actualmente pendiente. - - - Ping Wait - Espera de ping - - - Min Ping - Ping mínimo - - - Time Offset - Desfase temporal - - - Last block time - Hora del último bloque - - - &Open - &Abrir - - - &Console - &Consola - - - &Network Traffic - &Tráfico de red - - - Totals - Totales - - - Debug log file - Archivo del registro de depuración - - - Clear console - Borrar consola - - - In: - Entrada: - - - Out: - Salida: - - - Inbound: initiated by peer - Explanatory text for an inbound peer connection. - Entrante: iniciada por el par - - - Outbound Full Relay: default - Explanatory text for an outbound peer connection that relays all network information. This is the default behavior for outbound connections. - Retransmisión completa saliente: predeterminada - - - Outbound Block Relay: does not relay transactions or addresses - Explanatory text for an outbound peer connection that relays network information about blocks and not transactions or addresses. - Retransmisión de bloque saliente: no retransmite transacciones o direcciones - - - Outbound Manual: added using RPC %1 or %2/%3 configuration options - Explanatory text for an outbound peer connection that was established manually through one of several methods. The numbered arguments are stand-ins for the methods available to establish manual connections. - Manual saliente: agregada usando las opciones de configuración %1 o %2/%3 de RPC - - - Outbound Feeler: short-lived, for testing addresses - Explanatory text for a short-lived outbound peer connection that is used to test the aliveness of known addresses. - Feeler saliente: de corta duración, para probar direcciones - - - Outbound Address Fetch: short-lived, for soliciting addresses - Explanatory text for a short-lived outbound peer connection that is used to request addresses from a peer. - Recuperación de dirección saliente: de corta duración, para solicitar direcciones - - - detecting: peer could be v1 or v2 - Explanatory text for "detecting" transport type. - Detectando: el par puede ser v1 o v2 - - - v1: unencrypted, plaintext transport protocol - Explanatory text for v1 transport type. - v1: protocolo de transporte de texto simple sin encriptar - - - v2: BIP324 encrypted transport protocol - Explanatory text for v2 transport type. - v2: protocolo de transporte encriptado BIP324 - - - we selected the peer for high bandwidth relay - Seleccionamos el par para la retransmisión de banda ancha - - - the peer selected us for high bandwidth relay - El par nos seleccionó para la retransmisión de banda ancha - - - no high bandwidth relay selected - No se seleccionó la retransmisión de banda ancha - - - &Copy address - Context menu action to copy the address of a peer. - &Copiar dirección - - - &Disconnect - &Desconectar - - - 1 &hour - 1 &hora - - - 1 d&ay - 1 &día - - - 1 &week - 1 &semana - - - 1 &year - 1 &año - - - &Copy IP/Netmask - Context menu action to copy the IP/Netmask of a banned peer. IP/Netmask is the combination of a peer's IP address and its Netmask. For IP address, see: https://en.wikipedia.org/wiki/IP_address. - &Copiar IP/Máscara de red - - - &Unban - &Levantar prohibición - - - Network activity disabled - Actividad de red desactivada - - - None - Ninguno - - - Executing command without any wallet - Ejecutar comando sin ninguna billetera - - - Node window - [%1] - Ventana de nodo - [%1] - - - Executing command using "%1" wallet - Ejecutar comando usando la billetera "%1" - - - Welcome to the %1 RPC console. -Use up and down arrows to navigate history, and %2 to clear screen. -Use %3 and %4 to increase or decrease the font size. -Type %5 for an overview of available commands. -For more information on using this console, type %6. - -%7WARNING: 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.%8 - RPC console welcome message. Placeholders %7 and %8 are style tags for the warning content, and they are not space separated from the rest of the text intentionally. - Te damos la bienvenida a la consola RPC de %1. -Utiliza las flechas hacia arriba y abajo para navegar por el historial y %2 para borrar la pantalla. -Utiliza %3 y %4 para aumentar o disminuir el tamaño de la fuente. -Escribe %5 para ver los comandos disponibles. -Para obtener más información sobre cómo usar esta consola, escribe %6. - -%7 ADVERTENCIA: Los estafadores suelen decirles a los usuarios que escriban comandos aquí para robarles el contenido de sus billeteras. No uses esta consola sin entender completamente las ramificaciones de un comando.%8 - - - Executing… - A console message indicating an entered command is currently being executed. - Ejecutando... - - - (peer: %1) - (par: %1) - - - via %1 - a través de %1 - - - Yes - - - - To - A - - - From - De - - - Ban for - Prohibir por - - - Never - Nunca - - - Unknown - Desconocido - - - - ReceiveCoinsDialog - - &Amount: - &Importe: - - - &Label: - &Etiqueta: - - - &Message: - &Mensaje: - - - 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. - Mensaje opcional para adjuntar a la solicitud de pago, que se mostrará cuando se abra la solicitud. Nota: Este mensaje no se enviará con el pago a través de la red de Bitcoin. - - - An optional label to associate with the new receiving address. - Una etiqueta opcional para asociar con la nueva dirección de recepción. - - - Use this form to request payments. All fields are <b>optional</b>. - Usa este formulario para solicitar pagos. Todos los campos son <b>opcionales</b>. - - - An optional amount to request. Leave this empty or zero to not request a specific amount. - Un importe opcional para solicitar. Déjalo vacío o ingresa cero para no solicitar un importe específico. - - - 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. - Una etiqueta opcional para asociar con la nueva dirección de recepción (puedes usarla para identificar una factura). También se adjunta a la solicitud de pago. - - - An optional message that is attached to the payment request and may be displayed to the sender. - Un mensaje opcional que se adjunta a la solicitud de pago y que puede mostrarse al remitente. - - - &Create new receiving address - &Crear nueva dirección de recepción - - - Clear all fields of the form. - Borrar todos los campos del formulario. - - - Clear - Borrar - - - Requested payments history - Historial de pagos solicitados - - - Show the selected request (does the same as double clicking an entry) - Mostrar la solicitud seleccionada (equivale a hacer doble clic en una entrada) - - - Show - Mostrar - - - Remove the selected entries from the list - Eliminar las entradas seleccionadas de la lista - - - Remove - Eliminar - - - Copy &URI - Copiar &URI - - - &Copy address - &Copiar dirección - - - Copy &label - Copiar &etiqueta - - - Copy &message - Copiar &mensaje - - - Copy &amount - Copiar &importe - - - Not recommended due to higher fees and less protection against typos. - No se recomienda debido a las altas comisiones y la poca protección contra errores tipográficos. - - - Generates an address compatible with older wallets. - Genera una dirección compatible con billeteras más antiguas. - - - Generates a native segwit address (BIP-173). Some old wallets don't support it. - Genera una dirección segwit nativa (BIP-173). No es compatible con algunas billeteras antiguas. - - - Bech32m (BIP-350) is an upgrade to Bech32, wallet support is still limited. - Bech32m (BIP-350) es una actualización de Bech32. La compatibilidad con la billetera todavía es limitada. - - - Could not unlock wallet. - No se pudo desbloquear la billetera. - - - Could not generate new %1 address - No se pudo generar nueva dirección %1 - - - - ReceiveRequestDialog - - Request payment to … - Solicitar pago a... - - - Address: - Dirección: - - - Amount: - Importe: - - - Label: - Etiqueta: - - - Message: - Mensaje: - - - Wallet: - Billetera: - - - Copy &URI - Copiar &URI - - - Copy &Address - Copiar &dirección - - - &Verify - &Verificar - - - Verify this address on e.g. a hardware wallet screen - Verificar esta dirección, por ejemplo, en la pantalla de una billetera de hardware. - - - &Save Image… - &Guardar imagen... - - - Payment information - Información del pago - - - Request payment to %1 - Solicitar pago a %1 - - - - RecentRequestsTableModel - - Date - Fecha - - - Label - Etiqueta - - - Message - Mensaje - - - (no label) - (sin etiqueta) - - - (no message) - (sin mensaje) - - - (no amount requested) - (no se solicitó un importe) - - - Requested - Solicitado - - - - SendCoinsDialog - - Send Coins - Enviar monedas - - - Coin Control Features - Funciones de control de monedas - - - automatically selected - seleccionado automáticamente - - - Insufficient funds! - Fondos insuficientes - - - Quantity: - Cantidad: - - - Amount: - Importe: - - - Fee: - Comisión: - - - After Fee: - Después de la comisión: - - - Change: - Cambio: - - - If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. - Si se activa, pero la dirección de cambio está vacía o es inválida, el cambio se enviará a una dirección generada recientemente. - - - Custom change address - Dirección de cambio personalizada - - - Transaction Fee: - Comisión de transacción: - - - 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. - Si usas la opción "fallbackfee", la transacción puede tardar varias horas o días en confirmarse (o nunca hacerlo). Considera elegir la comisión de forma manual o espera hasta que hayas validado la cadena completa. - - - Warning: Fee estimation is currently not possible. - Advertencia: En este momento no se puede estimar la comisión. - - - per kilobyte - por kilobyte - - - Hide - Ocultar - - - Recommended: - Recomendado: - - - Custom: - Personalizado: - - - Send to multiple recipients at once - Enviar a múltiples destinatarios a la vez - - - Add &Recipient - Agregar &destinatario - - - Clear all fields of the form. - Borrar todos los campos del formulario. - - - Inputs… - Entradas... - - - Choose… - Elegir... - - - Hide transaction fee settings - Ocultar configuración de la comisión de transacción - - - Specify a custom fee per kB (1,000 bytes) of the transaction's virtual size. - -Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satoshis per kvB" for a transaction size of 500 virtual bytes (half of 1 kvB) would ultimately yield a fee of only 50 satoshis. - Especifica una comisión personalizada por kB (1000 bytes) del tamaño virtual de la transacción. - -Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por kvB" para una transacción de 500 bytes virtuales (la mitad de 1 kvB) produciría, en última instancia, una comisión de solo 50 satoshis. - - - 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. - Cuando hay menos volumen de transacciones que espacio en los bloques, los mineros y los nodos de retransmisión pueden aplicar una comisión mínima. Está bien pagar solo esta comisión mínima, pero ten en cuenta que esto puede ocasionar que una transacción nunca se confirme una vez que haya más demanda de transacciones de Bitcoin de la que puede procesar la red. - - - A too low fee might result in a never confirming transaction (read the tooltip) - Si la comisión es demasiado baja, es posible que la transacción nunca se confirme (leer la información en pantalla). - - - (Smart fee not initialized yet. This usually takes a few blocks…) - (La comisión inteligente no se ha inicializado todavía. Esto tarda normalmente algunos bloques…) - - - Confirmation time target: - Objetivo de tiempo de confirmación: - - - Enable Replace-By-Fee - Activar "Remplazar por comisión" - - - With Replace-By-Fee (BIP-125) you can increase a transaction's fee after it is sent. Without this, a higher fee may be recommended to compensate for increased transaction delay risk. - Con la función "Remplazar por comisión" (BIP-125), puedes aumentar la comisión de una transacción después de enviarla. Sin esta, es posible que se recomiende una comisión más alta para compensar el mayor riesgo de retraso de la transacción. - - - Clear &All - Borrar &todo - - - Balance: - Saldo: - - - Confirm the send action - Confirmar el envío - - - S&end - &Enviar - - - Copy quantity - Copiar cantidad - - - Copy amount - Copiar cantidad - - - Copy fee - Copiar comisión - - - Copy after fee - Copiar después de la tarifa - - - Copy bytes - Copiar bytes - - - Copy change - Copiar cambio - - - %1 (%2 blocks) - %1 (%2 bloques) - - - Sign on device - "device" usually means a hardware wallet. - Firmar en el dispositivo - - - Connect your hardware wallet first. - Conecta primero tu billetera de hardware. - - - Set external signer script path in Options -> Wallet - "External signer" means using devices such as hardware wallets. - Establecer la ruta al script del firmante externo en "Opciones -> Billetera" - - - Cr&eate Unsigned - &Crear sin firmar - - - Creates a Partially Signed Bitcoin Transaction (PSBT) for use with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet. - Crea una transacción de Bitcoin parcialmente firmada (TBPF) para usarla, por ejemplo, con una billetera %1 sin conexión o una billetera de hardware compatible con TBPF. - - - %1 to '%2' - %1 a '%2' - - - %1 to %2 - %1 a %2 - - - To review recipient list click "Show Details…" - Para consultar la lista de destinatarios, haz clic en "Mostrar detalles..." - - - Sign failed - Error de firma - - - External signer not found - "External signer" means using devices such as hardware wallets. - No se encontró el dispositivo firmante externo - - - External signer failure - "External signer" means using devices such as hardware wallets. - Error de firmante externo - - - Save Transaction Data - Guardar datos de la transacción - - - Partially Signed Transaction (Binary) - Expanded name of the binary PSBT file format. See: BIP 174. - Transacción parcialmente firmada (binario) - - - PSBT saved - Popup message when a PSBT has been saved to a file - TBPF guardada - - - External balance: - Saldo externo: - - - or - o - - - You can increase the fee later (signals Replace-By-Fee, BIP-125). - Puedes aumentar la comisión después (indica "Remplazar por comisión", BIP-125). - - - 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. - Text to inform a user attempting to create a transaction of their current options. At this stage, a user can only create a PSBT. This string is displayed when private keys are disabled and an external signer is not available. - Revisa por favor la propuesta de transacción. Esto producirá una transacción de Bitcoin parcialmente firmada (TBPF) que puedes guardar o copiar y, luego, firmar; por ejemplo, una billetera %1 fuera de línea o una billetera de hardware compatible con TBPF. - - - %1 from wallet '%2' - %1 desde billetera "%2" - - - Do you want to create this transaction? - Message displayed when attempting to create a transaction. Cautionary text to prompt the user to verify that the displayed transaction details represent the transaction the user intends to create. - ¿Quieres crear esta transacción? - - - Please, review your transaction. You can create and send this transaction or create 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. - Text to inform a user attempting to create a transaction of their current options. At this stage, a user can send their transaction or create a PSBT. This string is displayed when both private keys and PSBT controls are enabled. - Revisa la transacción. Puedes crear y enviar esta transacción de Bitcoin parcialmente firmada (TBPF), que además puedes guardar o copiar y, luego, firmar; por ejemplo, una billetera %1 sin conexión o una billetera de hardware compatible con TBPF. - - - Please, review your transaction. - Text to prompt a user to review the details of the transaction they are attempting to send. - Revisa la transacción. - - - Transaction fee - Comisión de transacción - - - Not signalling Replace-By-Fee, BIP-125. - No indica "Remplazar por comisión", BIP-125. - - - Total Amount - Importe total - - - Unsigned Transaction - PSBT copied - Caption of "PSBT has been copied" messagebox - Transacción sin firmar - - - The PSBT has been copied to the clipboard. You can also save it. - Se copió la TBPF al portapapeles. También puedes guardarla. - - - PSBT saved to disk - TBPF guardada en el disco - - - Confirm send coins - Confirmar el envío de monedas - - - Watch-only balance: - Saldo solo de observación: - - - The recipient address is not valid. Please recheck. - La dirección del destinatario no es válida. Revísala. - - - The amount to pay must be larger than 0. - El importe por pagar tiene que ser mayor que 0. - - - The amount exceeds your balance. - El importe sobrepasa el saldo. - - - The total exceeds your balance when the %1 transaction fee is included. - El total sobrepasa el saldo cuando se incluye la comisión de transacción de %1. - - - Duplicate address found: addresses should only be used once each. - Se encontró una dirección duplicada: las direcciones solo se deben usar una vez. - - - Transaction creation failed! - Fallo al crear la transacción - - - A fee higher than %1 is considered an absurdly high fee. - Una comisión mayor que %1 se considera absurdamente alta. - - - Estimated to begin confirmation within %n block(s). - - Se estima que empiece a confirmarse dentro de %n bloque. - Se estima que empiece a confirmarse dentro de %n bloques. - - - - Warning: Invalid Bitcoin address - Advertencia: Dirección de Bitcoin inválida - - - Warning: Unknown change address - Advertencia: Dirección de cambio desconocida - - - Confirm custom change address - Confirmar la dirección de cambio personalizada - - - 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? - La dirección que seleccionaste para el cambio no es parte de esta billetera. Una parte o la totalidad de los fondos en la billetera se enviará a esta dirección. ¿Seguro deseas continuar? - - - (no label) - (sin etiqueta) - - - - SendCoinsEntry - - A&mount: - &Importe: - - - Pay &To: - Pagar &a: - - - &Label: - &Etiqueta: - - - Choose previously used address - Seleccionar dirección usada anteriormente - - - The Bitcoin address to send the payment to - La dirección de Bitcoin a la que se enviará el pago - - - Paste address from clipboard - Pegar dirección desde el portapapeles - - - Remove this entry - Eliminar esta entrada - - - The amount to send in the selected unit - El importe que se enviará en la unidad seleccionada - - - 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. - La comisión se deducirá del importe que se envía. El destinatario recibirá menos bitcoins que los que ingreses en el campo del importe. Si se seleccionan varios destinatarios, la comisión se dividirá por igual. - - - S&ubtract fee from amount - &Restar la comisión del importe - - - Use available balance - Usar el saldo disponible - - - Message: - Mensaje: - - - Enter a label for this address to add it to the list of used addresses - Ingresar una etiqueta para esta dirección a fin de agregarla a la lista de direcciones utilizadas - - - 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. - Un mensaje adjunto al URI de tipo "bitcoin:" que se almacenará con la transacción a modo de referencia. Nota: Este mensaje no se enviará por la red de Bitcoin. - - - - SendConfirmationDialog - - Send - Enviar - - - Create Unsigned - Crear sin firmar - - - - SignVerifyMessageDialog - - Signatures - Sign / Verify a Message - Firmas: firmar o verificar un mensaje - - - &Sign Message - &Firmar mensaje - - - You can sign messages/agreements with your legacy (P2PKH) 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. - Puedes firmar mensajes o acuerdos con tus direcciones tipo legacy (P2PKH) para demostrar que puedes recibir los bitcoins que se envíen a ellas. Ten cuidado de no firmar cosas confusas o al azar, ya que los ataques de phishing pueden tratar de engañarte para que les envíes la firma con tu identidad. Firma solo declaraciones totalmente detalladas con las que estés de acuerdo. - - - The Bitcoin address to sign the message with - La dirección de Bitcoin con la que se firmará el mensaje - - - Choose previously used address - Seleccionar dirección usada anteriormente - - - Paste address from clipboard - Pegar dirección desde el portapapeles - - - Enter the message you want to sign here - Ingresar aquí el mensaje que deseas firmar - - - Signature - Firma - - - Copy the current signature to the system clipboard - Copiar la firma actual al portapapeles del sistema - - - Sign the message to prove you own this Bitcoin address - Firmar el mensaje para demostrar que esta dirección de Bitcoin te pertenece - - - Sign &Message - Firmar &mensaje - - - Reset all sign message fields - Restablecer todos los campos de firma de mensaje - - - Clear &All - Borrar &todo - - - &Verify Message - &Verificar mensaje - - - Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction! - Ingresa la dirección del destinatario, el mensaje (recuerda copiar los saltos de línea, espacios, tabulaciones, etc. con exactitud) y la firma a continuación para verificar el mensaje. Ten cuidado de no leer en la firma más de lo que está en el mensaje firmado en sí, para evitar ser víctima de un engaño por ataque de intermediario. Ten en cuenta que esto solo demuestra que el firmante recibe con la dirección; no puede demostrar la condición de remitente de ninguna transacción. - - - The Bitcoin address the message was signed with - La dirección de Bitcoin con la que se firmó el mensaje - - - The signed message to verify - El mensaje firmado para verificar - - - The signature given when the message was signed - La firma que se dio cuando el mensaje se firmó - - - Verify the message to ensure it was signed with the specified Bitcoin address - Verifica el mensaje para asegurarte de que se firmó con la dirección de Bitcoin especificada. - - - Verify &Message - Verificar &mensaje - - - Reset all verify message fields - Restablecer todos los campos de verificación de mensaje - - - Click "Sign Message" to generate signature - Hacer clic en "Firmar mensaje" para generar una firma - - - The entered address is invalid. - La dirección ingresada es inválida. - - - Please check the address and try again. - Revisa la dirección e intenta de nuevo. - - - The entered address does not refer to a legacy (P2PKH) key. Message signing for SegWit and other non-P2PKH address types is not supported in this version of %1. Please check the address and try again. - La dirección ingresada no se refiere a una clave tipo legacy (P2PKH). La firma de mensajes para direcciones SegWit y de otros tipos que no sean P2PKH no es compatible con esta versión de %1. Comprueba la dirección e inténtalo de nuevo. - - - Wallet unlock was cancelled. - Se canceló el desbloqueo de la billetera. - - - No error - Sin error - - - Private key for the entered address is not available. - La clave privada para la dirección ingresada no está disponible. - - - Message signing failed. - Error al firmar el mensaje. - - - Message signed. - Mensaje firmado. - - - The signature could not be decoded. - La firma no pudo decodificarse. - - - Please check the signature and try again. - Comprueba la firma e intenta de nuevo. - - - The signature did not match the message digest. - La firma no coincide con la síntesis del mensaje. - - - Message verification failed. - Falló la verificación del mensaje. - - - Message verified. - Mensaje verificado. - - - - SplashScreen - - (press q to shutdown and continue later) - (Presionar q para apagar y seguir luego) - - - press q to shutdown - Presionar q para apagar - - - - TransactionDesc - - conflicted with a transaction with %1 confirmations - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that conflicts with a confirmed transaction. - Hay un conflicto con una transacción con %1 confirmaciones - - - 0/unconfirmed, in memory pool - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is in the memory pool. - 0/sin confirmar, en el pool de memoria - - - 0/unconfirmed, not in memory pool - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is not in the memory pool. - 0/sin confirmar, no está en el pool de memoria - - - abandoned - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an abandoned transaction. - abandonada - - - %1/unconfirmed - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in at least one block, but less than 6 blocks. - %1/sin confirmar - - - %1 confirmations - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in 6 or more blocks. - %1 confirmaciones - - - Status - Estado - - - Date - Fecha - - - Source - Origen - - - Generated - Generado - - - From - De - - - unknown - desconocido - - - To - A - - - own address - dirección propia - - - watch-only - Solo de observación - - - label - etiqueta - - - Credit - Crédito - - - matures in %n more block(s) - - madura en %n bloque más - madura en %n bloques más - - - - not accepted - no aceptada - - - Debit - Débito - - - Total debit - Débito total - - - Total credit - Crédito total - - - Transaction fee - Comisión de transacción - - - Net amount - Importe neto - - - Message - Mensaje - - - Comment - Comentario - - - Transaction ID - Identificador de transacción - - - Transaction total size - Tamaño total de transacción - - - Transaction virtual size - Tamaño virtual de transacción - - - Output index - Índice de salida - - - %1 (Certificate was not verified) - %1 (El certificado no fue verificado) - - - Merchant - Comerciante - - - Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Las monedas generadas deben madurar %1 bloques antes de que se puedan gastar. Cuando generaste este bloque, se transmitió a la red para agregarlo a la cadena de bloques. Si no logra entrar a la cadena, su estado cambiará a "no aceptado" y no se podrá gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque a pocos segundos del tuyo. - - - Debug information - Información de depuración - - - Transaction - Transacción - - - Inputs - Entradas - - - Amount - Importe - - - true - verdadero - - - false - falso - - - - TransactionDescDialog - - This pane shows a detailed description of the transaction - En este panel se muestra una descripción detallada de la transacción - - - Details for %1 - Detalles para %1 - - - - TransactionTableModel - - Date - Fecha - - - Type - Tipo - - - Label - Etiqueta - - - Unconfirmed - Sin confirmar - - - Abandoned - Abandonada - - - Confirming (%1 of %2 recommended confirmations) - Confirmando (%1 de %2 confirmaciones recomendadas) - - - Confirmed (%1 confirmations) - Confirmada (%1 confirmaciones) - - - Conflicted - En conflicto - - - Immature (%1 confirmations, will be available after %2) - Inmadura (%1 confirmaciones; estará disponibles después de %2) - - - Generated but not accepted - Generada pero no aceptada - - - Received with - Recibida con - - - Received from - Recibida de - - - Sent to - Enviada a - - - Mined - Minada - - - watch-only - Solo de observación - - - (n/a) - (n/d) - - - (no label) - (sin etiqueta) - - - Transaction status. Hover over this field to show number of confirmations. - Estado de la transacción. Pasa el mouse sobre este campo para ver el número de confirmaciones. - - - Date and time that the transaction was received. - Fecha y hora en las que se recibió la transacción. - - - Type of transaction. - Tipo de transacción. - - - Whether or not a watch-only address is involved in this transaction. - Si una dirección solo de observación está involucrada en esta transacción o no. - - - User-defined intent/purpose of the transaction. - Intención o propósito de la transacción definidos por el usuario. - - - Amount removed from or added to balance. - Importe restado del saldo o sumado a este. - - - - TransactionView - - All - Todo - - - Today - Hoy - - - This week - Esta semana - - - This month - Este mes - - - Last month - Mes pasado - - - This year - Este año - - - Received with - Recibida con - - - Sent to - Enviada a - - - Mined - Minada - - - Other - Otra - - - Enter address, transaction id, or label to search - Ingresar la dirección, el identificador de transacción o la etiqueta para buscar - - - Min amount - Importe mínimo - - - Range… - Rango... - - - &Copy address - &Copiar dirección - - - Copy &label - Copiar &etiqueta - - - Copy &amount - Copiar &importe - - - Copy transaction &ID - Copiar &identificador de transacción - - - Copy &raw transaction - Copiar transacción &sin procesar - - - Copy full transaction &details - Copiar &detalles completos de la transacción - - - &Show transaction details - &Mostrar detalles de la transacción - - - Increase transaction &fee - Aumentar &comisión de transacción - - - A&bandon transaction - &Abandonar transacción - - - &Edit address label - &Editar etiqueta de dirección - - - Show in %1 - Transactions table context menu action to show the selected transaction in a third-party block explorer. %1 is a stand-in argument for the URL of the explorer. - Mostrar en %1 - - - Export Transaction History - Exportar historial de transacciones - - - Comma separated file - Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. - Archivo separado por comas - - - Confirmed - Confirmada - - - Watch-only - Solo de observación - - - Date - Fecha - - - Type - Tipo - - - Label - Etiqueta - - - Address - Dirección - - - ID - Identificador - - - Exporting Failed - Error al exportar - - - There was an error trying to save the transaction history to %1. - Ocurrió un error al intentar guardar el historial de transacciones en %1. - - - Exporting Successful - Exportación correcta - - - The transaction history was successfully saved to %1. - El historial de transacciones se guardó correctamente en %1. - - - Range: - Rango: - - - to - a - - - - WalletFrame - - No wallet has been loaded. -Go to File > Open Wallet to load a wallet. -- OR - - No se cargó ninguna billetera. -Ir a "Archivo > Abrir billetera" para cargar una. -- O - - - - Create a new wallet - Crear una nueva billetera - - - Unable to decode PSBT from clipboard (invalid base64) - No se puede decodificar la TBPF desde el portapapeles (Base64 inválida) - - - Load Transaction Data - Cargar datos de la transacción - - - Partially Signed Transaction (*.psbt) - Transacción parcialmente firmada (*.psbt) - - - PSBT file must be smaller than 100 MiB - El archivo TBPF debe ser más pequeño de 100 MiB - - - Unable to decode PSBT - No se puede decodificar TBPF - - - - WalletModel - - Send Coins - Enviar monedas - - - Fee bump error - Error de incremento de comisión - - - Increasing transaction fee failed - Fallo al incrementar la comisión de transacción - - - Do you want to increase the fee? - Asks a user if they would like to manually increase the fee of a transaction that has already been created. - ¿Deseas incrementar la comisión? - - - Current fee: - Comisión actual: - - - Increase: - Incremento: - - - New fee: - Nueva comisión: - - - 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. - Advertencia: Esta acción puede pagar la comisión adicional al reducir las salidas de cambio o agregar entradas, cuando sea necesario. Asimismo, puede agregar una nueva salida de cambio si aún no existe una. Estos cambios pueden filtrar potencialmente información privada. - - - Confirm fee bump - Confirmar incremento de comisión - - - Can't draft transaction. - No se puede crear un borrador de la transacción. - - - PSBT copied - TBPF copiada - - - Fee-bump PSBT copied to clipboard - TBPF con incremento de comisión copiada en el portapapeles - - - Can't sign transaction. - No se puede firmar la transacción. - - - Could not commit transaction - No se pudo confirmar la transacción - - - Signer error - Error de firmante - - - Can't display address - No se puede mostrar la dirección - - - - WalletView - - &Export - &Exportar - - - Export the data in the current tab to a file - Exportar los datos de la pestaña actual a un archivo - - - Backup Wallet - Realizar copia de seguridad de la billetera - - - Wallet Data - Name of the wallet data file format. - Datos de la billetera - - - Backup Failed - Copia de seguridad fallida - - - There was an error trying to save the wallet data to %1. - Ocurrió un error al intentar guardar los datos de la billetera en %1. - - - Backup Successful - Copia de seguridad correcta - - - The wallet data was successfully saved to %1. - Los datos de la billetera se guardaron correctamente en %1. - - - Cancel - Cancelar - - - - bitcoin-core - - The %s developers - Los desarrolladores de %s - - - %s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup. - %s dañado. Trata de usar la herramienta de la billetera de Bitcoin para rescatar o restaurar una copia de seguridad. - - - %s failed to validate the -assumeutxo snapshot state. This indicates a hardware problem, or a bug in the software, or a bad software modification that allowed an invalid snapshot to be loaded. As a result of this, the node will shut down and stop using any state that was built on the snapshot, resetting the chain height from %d to %d. On the next restart, the node will resume syncing from %d without using any snapshot data. Please report this incident to %s, including how you obtained the snapshot. The invalid snapshot chainstate will be left on disk in case it is helpful in diagnosing the issue that caused this error. - %s no pudo validar el estado de la instantánea -assumeutxo. Esto indica un problema de hardware, un error en el software o una modificación incorrecta del software que permitió que se cargara una instantánea inválida. Por consiguiente, el nodo se apagará y dejará de utilizar cualquier estado basado en la instantánea, restableciendo la altura de la cadena de %d a %d. En el siguiente reinicio, el nodo reanudará la sincronización desde %d sin usar datos de instantánea. Reporta este incidente a %s, indicando cómo obtuviste la instantánea. Se dejó el estado de cadena de la instantánea inválida en el disco por si resulta útil para diagnosticar el problema que causó este error. - - - %s request to listen on port %u. This port is considered "bad" and thus it is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for details and a full list. - %s solicitud para escuchar en el puerto%u. Este puerto se considera "malo" y, por lo tanto, es poco probable que algún par se conecte a él. Consulta doc/p2p-bad-ports.md para obtener detalles y una lista completa. - - - Cannot downgrade wallet from version %i to version %i. Wallet version unchanged. - No se puede pasar de la versión %i a la versión anterior %i. La versión de la billetera no tiene cambios. - - - 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. - No se puede actualizar una billetera dividida no HD de la versión %i a la versión %i sin actualizar para admitir el pool de claves anterior a la división. Usa la versión %i o no especifiques la versión. - - - Disk space for %s may not accommodate the block files. Approximately %u GB of data will be stored in this directory. - Es posible que el espacio en disco %s no tenga capacidad para los archivos de bloque. Aproximadamente %u GB de datos se almacenarán en este directorio. - - - Distributed under the MIT software license, see the accompanying file %s or %s - Distribuido bajo la licencia de software MIT; ver el archivo adjunto %s o %s. - - - Error loading wallet. Wallet requires blocks to be downloaded, and software does not currently support loading wallets while blocks are being downloaded out of order when using assumeutxo snapshots. Wallet should be able to load successfully after node sync reaches height %s - Error al cargar la billetera. Esta requiere que se descarguen bloques, y el software actualmente no admite la carga de billeteras mientras los bloques se descargan fuera de orden, cuando se usan instantáneas de assumeutxo. La billetera debería poder cargarse correctamente después de que la sincronización del nodo alcance la altura %s. - - - Error reading %s! Transaction data may be missing or incorrect. Rescanning wallet. - ¡Error al leer %s! Es probable que falten los datos de la transacción o que sean incorrectos. Rescaneando billetera. - - - Error starting/committing db txn for wallet transactions removal process - Error al iniciar/cometer el proceso de eliminación de base de datos de transacciones de monedero - - - Error: Dumpfile format record is incorrect. Got "%s", expected "format". - Error: El registro del formato del archivo de volcado es incorrecto. Se obtuvo "%s", mientras que se esperaba "formato". - - - Error: Dumpfile identifier record is incorrect. Got "%s", expected "%s". - Error: El registro del identificador del archivo de volcado es incorrecto. Se obtuvo "%s", mientras que se esperaba "%s". - - - Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s - Error: La versión del archivo de volcado no es compatible. Esta versión de la billetera de Bitcoin solo admite archivos de volcado de la versión 1. Se obtuvo un archivo de volcado con la versión %s - - - Error: Legacy wallets only support the "legacy", "p2sh-segwit", and "bech32" address types - Error: Las billeteras "legacy" solo admiten los tipos de dirección "legacy", "p2sh-segwit" y "bech32". - - - Error: Unable to produce descriptors for this legacy wallet. Make sure to provide the wallet's passphrase if it is encrypted. - Error: No se pueden producir descriptores para esta billetera tipo legacy. Asegúrate de proporcionar la frase de contraseña de la billetera si está encriptada. - - - File %s already exists. If you are sure this is what you want, move it out of the way first. - El archivo %s ya existe. Si definitivamente quieres hacerlo, quítalo primero. - - - Invalid or corrupt peers.dat (%s). If you believe this is a bug, please report it to %s. As a workaround, you can move the file (%s) out of the way (rename, move, or delete) to have a new one created on the next start. - El archivo peers.dat (%s) es inválido o está dañado. Si crees que se trata de un error, infórmalo a %s. Como alternativa, puedes quitar el archivo (%s) (renombrarlo, moverlo o eliminarlo) para que se cree uno nuevo en el siguiente inicio. - - - Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets - Valor no válido detectado para '-wallet' o '-nowallet'. -wallet' requiere un valor de cadena, mientras que '-nowallet' sólo acepta '1' para desactivar todos los monederos. - - - More than one onion bind address is provided. Using %s for the automatically created Tor onion service. - Se proporciona más de una dirección de enlace onion. Se está usando %s para el servicio onion de Tor creado automáticamente. - - - No dump file provided. To use createfromdump, -dumpfile=<filename> must be provided. - No se proporcionó el archivo de volcado. Para usar createfromdump, se debe proporcionar -dumpfile=<filename>. - - - No dump file provided. To use dump, -dumpfile=<filename> must be provided. - No se proporcionó el archivo de volcado. Para usar dump, se debe proporcionar -dumpfile=<filename>. - - - No wallet file format provided. To use createfromdump, -format=<format> must be provided. - No se proporcionó el formato de archivo de billetera. Para usar createfromdump, se debe proporcionar -format=<format>. - - - Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. - La opción '-upnp' está activada, pero el soporte UPnP se eliminó en la versión 29.0. Considera usar '-natpmp' en su lugar. - - - Please contribute if you find %s useful. Visit %s for further information about the software. - Contribuye si te parece que %s es útil. Visita %s para obtener más información sobre el software. - - - Prune configured below the minimum of %d MiB. Please use a higher number. - La poda se configuró por debajo del mínimo de %d MiB. Usa un valor más alto. - - - Prune mode is incompatible with -reindex-chainstate. Use full -reindex instead. - El modo de poda es incompatible con -reindex-chainstate. Usa en su lugar un -reindex completo. - - - Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node) - Poda: la última sincronización de la billetera sobrepasa los datos podados. Tienes que ejecutar -reindex (descarga toda la cadena de bloques de nuevo en caso de tener un nodo podado) - - - Rename of '%s' -> '%s' failed. You should resolve this by manually moving or deleting the invalid snapshot directory %s, otherwise you will encounter the same error again on the next startup. - Error al cambiar el nombre de "%s" a "%s". Para resolverlo, mueve o elimina manualmente el directorio %s de la instantánea no válida. De lo contrario, encontrarás el mismo error de nuevo en el siguiente inicio. - - - SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported - SQLiteDatabase: versión desconocida del esquema de la billetera sqlite %d. Solo se admite la versión %d. - - - The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct - La base de datos de bloques contiene un bloque que parece ser del futuro. Es posible que se deba a que la fecha y hora de la computadora están mal configuradas. Reconstruye la base de datos de bloques solo si tienes la certeza de que la fecha y hora de la computadora son correctas. - - - The transaction amount is too small to send after the fee has been deducted - El importe de la transacción es demasiado pequeño para enviarlo después de deducir la comisión - - - 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 - Este error podría ocurrir si esta billetera no se cerró correctamente y se cargó por última vez usando una compilación con una versión más reciente de Berkeley DB. Si es así, usa el software que cargó por última vez esta billetera. - - - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - Esta es una compilación preliminar de prueba. Úsala bajo tu propia responsabilidad. No la uses para aplicaciones comerciales o de minería. - - - This is the maximum transaction fee you pay (in addition to the normal fee) to prioritize partial spend avoidance over regular coin selection. - Esta es la comisión máxima de transacción que pagas (además de la comisión normal) para priorizar la elusión del gasto parcial sobre la selección regular de monedas. - - - This is the transaction fee you may discard if change is smaller than dust at this level - Esta es la comisión de transacción que puedes descartar si el cambio es más pequeño que el remanente en este nivel. - - - This is the transaction fee you may pay when fee estimates are not available. - Esta es la comisión de transacción que puedes pagar cuando los cálculos de comisiones no estén disponibles. - - - Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments. - La longitud total de la cadena de versión de red ( %i) supera la longitud máxima (%i). Reduce el número o tamaño de uacomments . - - - Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate. - No se pueden reproducir bloques. Tendrás que reconstruir la base de datos usando -reindex-chainstate. - - - Unknown wallet file format "%s" provided. Please provide one of "bdb" or "sqlite". - Se proporcionó un formato de archivo de billetera desconocido "%s". Proporciona uno entre "bdb" o "sqlite". - - - Unsupported category-specific logging level %1$s=%2$s. Expected %1$s=<category>:<loglevel>. Valid categories: %3$s. Valid loglevels: %4$s. - El nivel de registro de la categoría específica no es compatible: %1$s=%2$s. Se esperaba %1$s=<category>:<loglevel>. Categorías válidas: %3$s. Niveles de registro válidos: %4 $s. - - - Unsupported chainstate database format found. Please restart with -reindex-chainstate. This will rebuild the chainstate database. - El formato de la base de datos chainstate es incompatible. Reinicia con -reindex-chainstate para reconstruir la base de datos chainstate. - - - Wallet created successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. - La billetera se creó correctamente. El tipo de billetera "legacy" se está descontinuando, por lo que la asistencia para crear y abrir estas billeteras se eliminará en el futuro. - - - Wallet loaded successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. Legacy wallets can be migrated to a descriptor wallet with migratewallet. - La billetera se creó correctamente. El tipo de billetera "legacy" se está descontinuando, por lo que la asistencia para crear y abrir estas billeteras se eliminará en el futuro. Las billeteras "legacy" se pueden migrar a una billetera basada en descriptores con "migratewallet". - - - Warning: Dumpfile wallet format "%s" does not match command line specified format "%s". - Advertencia: El formato de la billetera del archivo de volcado "%s" no coincide con el formato especificado en la línea de comandos "%s". - - - Warning: Private keys detected in wallet {%s} with disabled private keys - Advertencia: Claves privadas detectadas en la billetera {%s} con claves privadas deshabilitadas - - - Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. - Advertencia: Al parecer no estamos completamente de acuerdo con nuestros pares. Es posible que tengas que realizar una actualización, o que los demás nodos tengan que hacerlo. - - - Witness data for blocks after height %d requires validation. Please restart with -reindex. - Los datos del testigo para los bloques después de la altura %d requieren validación. Reinicia con -reindex. - - - You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain - Tienes que reconstruir la base de datos usando -reindex para volver al modo sin poda. Esto volverá a descargar toda la cadena de bloques. - - - %s is set very high! - ¡El valor de %s es muy alto! - - - -maxmempool must be at least %d MB - -maxmempool debe ser por lo menos de %d MB - - - Cannot obtain a lock on directory %s. %s is probably already running. - No se puede obtener un bloqueo en el directorio %s. %s probablemente ya se está ejecutando - - - Cannot resolve -%s address: '%s' - No se puede resolver la dirección de -%s: "%s" - - - Cannot set -forcednsseed to true when setting -dnsseed to false. - No se puede establecer el valor de -forcednsseed con la variable true al establecer el valor de -dnsseed con la variable false. - - - Cannot set -peerblockfilters without -blockfilterindex. - No se puede establecer -peerblockfilters sin -blockfilterindex. - - - %s is set very high! Fees this large could be paid on a single transaction. - El valor establecido para %s es demasiado alto. Las comisiones tan grandes se podrían pagar en una sola transacción. - - - Cannot provide specific connections and have addrman find outgoing connections at the same time. - No se pueden proporcionar conexiones específicas y hacer que addrman encuentre conexiones salientes al mismo tiempo. - - - Error loading %s: External signer wallet being loaded without external signer support compiled - Error al cargar %s: Se está cargando la billetera firmante externa sin que se haya compilado la compatibilidad del firmante externo - - - Error reading %s! All keys read correctly, but transaction data or address metadata may be missing or incorrect. - Error al leer %s. Todas las claves se leyeron correctamente, pero es probable que falten los datos de la transacción o metadatos de direcciones, o bien que sean incorrectos. - - - Error: Address book data in wallet cannot be identified to belong to migrated wallets - Error: No se puede identificar si los datos de la libreta de direcciones en la billetera pertenecen a billeteras migradas - - - Error: Duplicate descriptors created during migration. Your wallet may be corrupted. - Error: Se crearon descriptores duplicados durante la migración. Tu billetera podría estar dañada. - - - Error: Transaction %s in wallet cannot be identified to belong to migrated wallets - Error: No se puede identificar si la transacción %s en la billetera pertenece a billeteras migradas - - - Failed to calculate bump fees, because unconfirmed UTXOs depend on enormous cluster of unconfirmed transactions. - No se pudo calcular la comisión de incremento porque las UTXO sin confirmar dependen de un grupo enorme de transacciones no confirmadas. - - - Failed to remove snapshot chainstate dir (%s). Manually remove it before restarting. - - No se pudo eliminar la instantánea chainstate dir (%s). Elimínala manualmente antes de reiniciar. - - - - Failed to rename invalid peers.dat file. Please move or delete it and try again. - No se pudo cambiar el nombre del archivo peers.dat inválido. Muévelo o elimínalo, e intenta de nuevo. - - - Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable %s. - Error al calcular la comisión. La opción "fallbackfee" está desactivada. Espera algunos bloques o activa %s. - - - Flushing block file to disk failed. This is likely the result of an I/O error. - Falló el volcado del archivo de bloques al disco. Es probable que se deba a un error de E/S. - - - Flushing undo file to disk failed. This is likely the result of an I/O error. - Falló el volcado del archivo para deshacer al disco. Es probable que se deba a un error de E/S. - - - Incompatible options: -dnsseed=1 was explicitly specified, but -onlynet forbids connections to IPv4/IPv6 - Opciones incompatibles: -dnsseed=1 se especificó explícitamente, pero -onlynet prohíbe conexiones a IPv4/IPv6. - - - Invalid amount for %s=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions) - Importe inválido para %s=<amount>: "%s" (debe ser al menos la comisión mínima de retransmisión de %s para evitar transacciones atascadas) - - - Maximum transaction weight is less than transaction weight without inputs - El peso máximo de la transacción es menor que el peso de la transacción sin entradas - - - Maximum transaction weight is too low, can not accommodate change output - El peso máximo de la transacción es demasiado bajo, por lo que no puede incluir la salida de cambio. - - - Outbound connections restricted to CJDNS (-onlynet=cjdns) but -cjdnsreachable is not provided - Las conexiones salientes están restringidas a CJDNS (-onlynet=cjdns), pero no se proporciona -cjdnsreachable - - - Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is explicitly forbidden: -onion=0 - Las conexiones salientes están restringidas a Tor (-onlynet=onion), pero el proxy para conectarse con la red Tor está explícitamente prohibido: -onion=0. - - - Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is not provided: none of -proxy, -onion or -listenonion is given - Las conexiones salientes están restringidas a Tor (-onlynet=onion), pero no se proporciona el proxy para conectarse con la red Tor: no se indican -proxy, -onion ni -listenonion. - - - Outbound connections restricted to i2p (-onlynet=i2p) but -i2psam is not provided - Las conexiones salientes están restringidas a i2p (-onlynet=i2p), pero no se proporciona -i2psam - - - Rename of '%s' -> '%s' failed. Cannot clean up the background chainstate leveldb directory. - Falló el cambio de nombre de ''%s" a ''%s". No se puede limpiar el directorio leveldb del estado de la cadena de fondo. - - - The combination of the pre-selected inputs and the wallet automatic inputs selection exceeds the transaction maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - La combinación de las entradas preseleccionadas y la selección automática de entradas de la billetera supera el peso máximo de la transacción. Intenta enviar un importe menor o consolidar manualmente las UTXO de la billetera. - - - The inputs size exceeds the maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - El tamaño de las entradas supera el peso máximo. Intenta enviar un importe menor o consolidar manualmente las UTXO de la billetera. - - - The preselected coins total amount does not cover the transaction target. Please allow other inputs to be automatically selected or include more coins manually - El monto total de las monedas preseleccionadas no cubre la meta de la transacción. Permite que se seleccionen automáticamente otras entradas o incluye más monedas manualmente. - - - Transaction requires one destination of non-0 value, a non-0 feerate, or a pre-selected input - La transacción requiere un destino de valor distinto de 0, una tasa de comisión distinta de 0, o una entrada preseleccionada. - - - UTXO snapshot failed to validate. Restart to resume normal initial block download, or try loading a different snapshot. - No se validó la instantánea de UTXO. Reinicia para reanudar la descarga de bloques inicial normal o intenta cargar una instantánea diferente. - - - Unconfirmed UTXOs are available, but spending them creates a chain of transactions that will be rejected by the mempool - Las UTXO sin confirmar están disponibles, pero si se gastan, se crea una cadena de transacciones que rechazará la mempool. - - - Unexpected legacy entry in descriptor wallet found. Loading wallet %s - -The wallet might have been tampered with or created with malicious intent. - - Se encontró una entrada inesperada tipo "legacy" en la billetera basada en descriptores. Cargando billetera%s - -Es posible que la billetera haya sido manipulada o creada con malas intenciones. - - - - Unrecognized descriptor found. Loading wallet %s - -The wallet might had been created on a newer version. -Please try running the latest software version. - - Se encontró un descriptor desconocido. Cargando billetera %s. - -La billetera se pudo hacer creado con una versión más reciente. -Intenta ejecutar la última versión del software. - - - - Your computer's date and time appear to be more than %d minutes out of sync with the network, this may lead to consensus failure. After you've confirmed your computer's clock, this message should no longer appear when you restart your node. Without a restart, it should stop showing automatically after you've connected to a sufficient number of new outbound peers, which may take some time. You can inspect the `timeoffset` field of the `getpeerinfo` and `getnetworkinfo` RPC methods to get more info. - La fecha y la hora de la computadora parecen estar más de %d minutos desincronizadas con la red, lo que puede producir un fallo de consenso. Después de confirmar el reloj de la computadora, este mensaje debería dejar de aparecer cuando reinicies el nodo. Sin reiniciar, debería dejar de mostrarse automáticamente después de que te hayas conectado a un número suficiente de nuevos pares salientes, lo que puede llevar cierto tiempo. Puedes inspeccionar el campo "timeoffset" de los métodos RPC "getpeerinfo" y "getnetworkinfo" para obtener más información. - - - -Unable to cleanup failed migration - -No se puede limpiar la migración fallida - - - -Unable to restore backup of wallet. - -No se puede restaurar la copia de seguridad de la billetera. - - - whitebind may only be used for incoming connections ("out" was passed) - whitebind solo puede utilizarse para conexiones entrantes (se ha pasado "out") - - - A fatal internal error occurred, see debug.log for details: - Ha ocurrido un error interno grave. Consulta debug.log para obtener más información: - - - Assumeutxo data not found for the given blockhash '%s'. - No se encontraron datos assumeutxo para el blockhash indicado "%s". - - - Block verification was interrupted - Se interrumpió la verificación de bloques - - - Cannot write to directory '%s'; check permissions. - No se puede escribir en el directorio '%s'; compruebe los permisos. - - - Config setting for %s only applied on %s network when in [%s] section. - La configuración para %s solo se aplica en la red %s cuando se encuentra en la sección [%s]. - - - Copyright (C) %i-%i - Derechos de autor (C) %i-%i - - - Corrupt block found indicating potential hardware failure. - Se encontró un bloque corrupto que indica un posible fallo del hardware. - - - Corrupted block database detected - Se detectó que la base de datos de bloques está dañada. - - - Could not find asmap file %s - No se pudo encontrar el archivo asmap %s - - - Could not parse asmap file %s - No se pudo analizar el archivo asmap %s - - - Disk space is too low! - ¡El espacio en disco es demasiado pequeño! - - - Done loading - Carga completa - - - Dump file %s does not exist. - El archivo de volcado %s no existe. - - - Elliptic curve cryptography sanity check failure. %s is shutting down. - Fallo en la prueba de cordura de la criptografía de curva elíptica. %s se apagará. - - - Error creating %s - Error al crear %s - - - Error initializing block database - Error al inicializar la base de datos de bloques - - - Error initializing wallet database environment %s! - Error al inicializar el entorno de la base de datos de la billetera %s. - - - Error loading %s - Error al cargar %s - - - Error loading %s: Private keys can only be disabled during creation - Error al cargar %s: Las claves privadas solo se pueden deshabilitar durante la creación - - - Error loading %s: Wallet corrupted - Error al cargar %s: billetera dañada - - - Error loading %s: Wallet requires newer version of %s - Error al cargar %s: la billetera requiere una versión más reciente de %s - - - Error loading block database - Error al cargar la base de datos de bloques - - - Error loading databases - Error cargando bases de datos - - - Error opening block database - Error al abrir la base de datos de bloques - - - Error opening coins database - Error al abrir la base de datos de monedas - - - Error reading configuration file: %s - Error al leer el archivo de configuración: %s - - - Error reading from database, shutting down. - Error al leer la base de datos. Se cerrará la aplicación. - - - Error reading next record from wallet database - Error al leer el siguiente registro de la base de datos de la billetera - - - Error: Cannot extract destination from the generated scriptpubkey - Error: No se puede extraer el destino del scriptpubkey generado - - - Error: Couldn't create cursor into database - Error: No se pudo crear el cursor en la base de datos - - - Error: Disk space is low for %s - Error: El espacio en disco es pequeño para %s - - - Error: Dumpfile checksum does not match. Computed %s, expected %s - Error: La suma de comprobación del archivo de volcado no coincide. Calculada:%s; prevista:%s. - - - Error: Failed to create new watchonly wallet - Error: No se pudo crear una billetera solo de observación - - - Error: Got key that was not hex: %s - Error: Se recibió una clave que no es hexadecimal (%s) - - - Error: Got value that was not hex: %s - Error: Se recibió un valor que no es hexadecimal (%s) - - - Error: Keypool ran out, please call keypoolrefill first - Error: El pool de claves se agotó. Invoca keypoolrefill primero. - - - Error: Missing checksum - Error: Falta la suma de comprobación - - - Error: No %s addresses available. - Error: No hay direcciones %s disponibles. - - - Error: This wallet already uses SQLite - Error: Esta billetera ya usa SQLite - - - Error: This wallet is already a descriptor wallet - Error: Esta billetera ya está basada en descriptores - - - Error: Unable to begin reading all records in the database - Error: No se pueden comenzar a leer todos los registros en la base de datos - - - Error: Unable to make a backup of your wallet - Error: No se puede realizar una copia de seguridad de la billetera - - - Error: Unable to parse version %u as a uint32_t - Error: No se puede analizar la versión %ucomo uint32_t - - - Error: Unable to read all records in the database - Error: No se pueden leer todos los registros en la base de datos - - - Error: Unable to read wallet's best block locator record - Error: No se pudo leer el registro del mejor localizador de bloques de la billetera. - - - Error: Unable to remove watchonly address book data - Error: No se pueden eliminar los datos de la libreta de direcciones solo de observación - - - Error: Unable to write data to disk for wallet %s - Error: No se pueden escribir datos en el disco para el monedero %s - - - Error: Unable to write record to new wallet - Error: No se puede escribir el registro en la nueva billetera - - - Error: Unable to write solvable wallet best block locator record - Error: No se pudo escribir el registro del mejor localizador de bloques de la billetera solucionable. - - - Error: Unable to write watchonly wallet best block locator record - Error: No se pudo escribir el registro del mejor localizador de bloques de la billetera solo de observación. - - - Error: database transaction cannot be executed for wallet %s - Error: la transacción de la base de datos no se puede ejecutar para la billetera %s - - - Failed to connect best block (%s). - No se pudo conectar el mejor bloque (%s). - - - Failed to disconnect block. - No se pudo desconectar el bloque. - - - Failed to listen on any port. Use -listen=0 if you want this. - Fallo al escuchar en todos los puertos. Usa -listen=0 si quieres hacerlo. - - - Failed to read block. - No se pudo leer el bloque. - - - Failed to rescan the wallet during initialization - Fallo al rescanear la billetera durante la inicialización - - - Failed to start indexes, shutting down.. - Error al iniciar índices, cerrando... - - - Failed to verify database - Fallo al verificar la base de datos - - - Failed to write block. - No se pudo escribir el bloque. - - - Failed to write to block index database. - Error al escribir en la base de datos del índice de bloques. - - - Failed to write to coin database. - Error al escribir en la base de datos de monedas. - - - Failed to write undo data. - Error al escribir datos para deshacer. - - - Failure removing transaction: %s - Error al eliminar la transacción: %s - - - Fee rate (%s) is lower than the minimum fee rate setting (%s) - La tasa de comisión (%s) es menor que el valor mínimo (%s) - - - Ignoring duplicate -wallet %s. - Ignorar duplicación de -wallet %s. - - - Importing… - Importando... - - - Incorrect or no genesis block found. Wrong datadir for network? - El bloque génesis es incorrecto o no se encontró. ¿El directorio de datos es equivocado para la red? - - - Initialization sanity check failed. %s is shutting down. - Fallo al inicializar la comprobación de estado. %s se cerrará. - - - Input not found or already spent - La entrada no se encontró o ya se gastó - - - Insufficient dbcache for block verification - Dbcache insuficiente para la verificación de bloques - - - Insufficient funds - Fondos insuficientes - - - Invalid -i2psam address or hostname: '%s' - Dirección o nombre de host de -i2psam inválido: "%s" - - - Invalid -onion address or hostname: '%s' - Dirección o nombre de host de -onion inválido: "%s" - - - Invalid -proxy address or hostname: '%s' - Dirección o nombre de host de -proxy inválido: "%s" - - - Invalid P2P permission: '%s' - Permiso P2P inválido: "%s" - - - Invalid amount for %s=<amount>: '%s' (must be at least %s) - Importe inválido para %s=<amount>: "%s" (debe ser por lo menos %s) - - - Invalid amount for %s=<amount>: '%s' - Importe inválido para %s=<amount>: "%s" - - - Invalid amount for -%s=<amount>: '%s' - Importe inválido para -%s=<amount>: "%s" - - - Invalid netmask specified in -whitelist: '%s' - Máscara de red inválida especificada en -whitelist: "%s" - - - Invalid port specified in %s: '%s' - Puerto no válido especificado en %s: "%s" - - - Invalid pre-selected input %s - La entrada preseleccionada no es válida %s - - - Listening for incoming connections failed (listen returned error %s) - Fallo al escuchar conexiones entrantes (la escucha devolvió el error %s) - - - Loading P2P addresses… - Cargando direcciones P2P... - - - Loading banlist… - Cargando lista de prohibiciones... - - - Loading block index… - Cargando índice de bloques... - - - Loading wallet… - Cargando billetera... - - - Maximum transaction weight must be between %d and %d - El peso máximo de la transacción debe estar entre %d y %d. - - - Missing amount - Falta el importe - - - Missing solving data for estimating transaction size - Faltan datos de resolución para estimar el tamaño de la transacción - - - Need to specify a port with -whitebind: '%s' - Se necesita especificar un puerto con -whitebind: "%s" - - - No addresses available - No hay direcciones disponibles - - - Not found pre-selected input %s - La entrada preseleccionada no se encontró %s - - - Not solvable pre-selected input %s - La entrada preseleccionada no se puede solucionar %s - - - Only direction was set, no permissions: '%s' - Solo se ha establecido la dirección, sin permisos: "%s" - - - Prune cannot be configured with a negative value. - La poda no se puede configurar con un valor negativo. - - - Prune mode is incompatible with -txindex. - El modo de poda es incompatible con -txindex. - - - Pruning blockstore… - Podando almacenamiento de bloques… - - - Reducing -maxconnections from %d to %d, because of system limitations. - Reduciendo -maxconnections de %d a %d, debido a limitaciones del sistema. - - - Replaying blocks… - Reproduciendo bloques… - - - Rescanning… - Rescaneando... - - - SQLiteDatabase: Failed to execute statement to verify database: %s - SQLiteDatabase: Fallo al ejecutar la instrucción para verificar la base de datos: %s - - - SQLiteDatabase: Failed to prepare statement to verify database: %s - SQLiteDatabase: Fallo al preparar la instrucción para verificar la base de datos: %s - - - SQLiteDatabase: Failed to read database verification error: %s - SQLiteDatabase: Fallo al leer el error de verificación de la base de datos: %s - - - SQLiteDatabase: Unexpected application id. Expected %u, got %u - SQLiteDatabase: Identificador de aplicación inesperado. Se esperaba %u; se recibió %u. - - - Section [%s] is not recognized. - La sección [%s] no se reconoce. - - - Signer did not echo address - El firmante no se hizo eco de la dirección - - - Signer echoed unexpected address %s - El firmante se hizo eco de una dirección inesperada %s - - - Signer returned error: %s - El firmante devolvió un error: %s - - - Signing transaction failed - Fallo al firmar la transacción - - - Specified -walletdir "%s" does not exist - El valor especificado de -walletdir "%s" no existe - - - Specified -walletdir "%s" is a relative path - El valor especificado de -walletdir "%s" es una ruta relativa - - - Specified -walletdir "%s" is not a directory - El valor especificado de -walletdir "%s" no es un directorio - - - Specified blocks directory "%s" does not exist. - El directorio de bloques especificado "%s" no existe. - - - Specified data directory "%s" does not exist. - El directorio de datos especificado "%s" no existe. - - - Starting network threads… - Iniciando subprocesos de red... - - - System error while flushing: %s - Error del sistema durante el vaciado:%s - - - System error while loading external block file: %s - Error del sistema al cargar un archivo de bloque externo: %s - - - System error while saving block to disk: %s - Error del sistema al guardar el bloque en el disco: %s - - - The source code is available from %s. - El código fuente está disponible en %s. - - - The specified config file %s does not exist - El archivo de configuración especificado %s no existe - - - The transaction amount is too small to pay the fee - El importe de la transacción es muy pequeño para pagar la comisión - - - The transactions removal process can only be executed within a db txn - El proceso de eliminación de transacciones sólo puede ejecutarse dentro de una base de datos de transacción - - - The wallet will avoid paying less than the minimum relay fee. - La billetera evitará pagar menos que la comisión mínima de retransmisión. - - - There is no ScriptPubKeyManager for this address - No hay ningún ScriptPubKeyManager para esta dirección. - - - This is experimental software. - Este es un software experimental. - - - This is the minimum transaction fee you pay on every transaction. - Esta es la comisión mínima de transacción que pagas en cada transacción. - - - This is the transaction fee you will pay if you send a transaction. - Esta es la comisión de transacción que pagarás si envías una transacción. - - - Transaction %s does not belong to this wallet - La transacción %s no pertenece a esta billetera - - - Transaction amount too small - El importe de la transacción es demasiado pequeño - - - Transaction amounts must not be negative - Los importes de la transacción no pueden ser negativos - - - Transaction change output index out of range - Índice de salidas de cambio de transacciones fuera de alcance - - - Transaction must have at least one recipient - La transacción debe incluir al menos un destinatario - - - Transaction needs a change address, but we can't generate it. - La transacción necesita una dirección de cambio, pero no podemos generarla. - - - Transaction too large - Transacción demasiado grande - - - Unable to bind to %s on this computer (bind returned error %s) - No se puede establecer un enlace a %s en esta computadora (bind devolvió el error %s) - - - Unable to bind to %s on this computer. %s is probably already running. - No se puede establecer un enlace a %s en este equipo. Es posible que %s ya esté en ejecución. - - - Unable to create the PID file '%s': %s - No se puede crear el archivo PID "%s": %s - - - Unable to find UTXO for external input - No se puede encontrar UTXO para la entrada externa - - - Unable to generate initial keys - No se pueden generar las claves iniciales - - - Unable to generate keys - No se pueden generar claves - - - Unable to open %s for writing - No se puede abrir %s para escribir - - - Unable to parse -maxuploadtarget: '%s' - No se puede analizar -maxuploadtarget: "%s" - - - Unable to start HTTP server. See debug log for details. - No se puede iniciar el servidor HTTP. Consulta el registro de depuración para obtener información. - - - Unable to unload the wallet before migrating - No se puede descargar la billetera antes de la migración - - - Unknown -blockfilterindex value %s. - Se desconoce el valor de -blockfilterindex %s. - - - Unknown address type '%s' - Se desconoce el tipo de dirección "%s" - - - Unknown change type '%s' - Se desconoce el tipo de cambio "%s" - - - Unknown network specified in -onlynet: '%s' - Se desconoce la red especificada en -onlynet: "%s" - - - Unknown new rules activated (versionbit %i) - Se desconocen las nuevas reglas activadas (versionbit %i) - - - Unrecognised option "%s" provided in -test=<option>. - Opción no reconocida "%s" proporcionada en -test=<option>. - - - Unsupported global logging level %s=%s. Valid values: %s. - El nivel de registro global %s=%s no es compatible. Valores válidos: %s. - - - Wallet file creation failed: %s - Error al crear el archivo de la billetera: %s - - - acceptstalefeeestimates is not supported on %s chain. - acceptstalefeeestimates no se admite en la cadena %s. - - - Unsupported logging category %s=%s. - La categoría de registro no es compatible %s=%s. - - - Do you want to rebuild the databases now? - ¿Quiere reconstruir la base de datos de bloques ahora? - - - Error: Could not add watchonly tx %s to watchonly wallet - Error: No se puede agregar la transacción solo de observación %s a la billetera solo de observación - - - Error: Could not delete watchonly transactions. - Error: No se pudieron eliminar las transacciones solo de observación - - - Error: Wallet does not exist - Error: La cartera no existe - - - Error: cannot remove legacy wallet records - Error: no se pueden eliminar los registros de cartera heredados - - - Not enough file descriptors available. %d available, %d required. - No hay suficientes descriptores de archivo disponibles. %d disponibles, %d requeridos. - - - User Agent comment (%s) contains unsafe characters. - El comentario del agente de usuario (%s) contiene caracteres inseguros. - - - Verifying blocks… - Verificando bloques... - - - Verifying wallet(s)… - Verificando billetera(s)... - - - Wallet needed to be rewritten: restart %s to complete - Es necesario rescribir la billetera: reiniciar %s para completar - - - Settings file could not be read - El archivo de configuración no se puede leer - - - Settings file could not be written - El archivo de configuración no se puede escribir - - - \ No newline at end of file diff --git a/src/qt/locale/bitcoin_et.ts b/src/qt/locale/bitcoin_et.ts index 729251de22f7..98eac4acf19d 100644 --- a/src/qt/locale/bitcoin_et.ts +++ b/src/qt/locale/bitcoin_et.ts @@ -406,10 +406,18 @@ Signing is only possible with addresses of the type 'legacy'. &Change Passphrase… &Muuda Salasõna... + + Sign &message… + Allkirjuta &sõnum... + Sign messages with your Bitcoin addresses to prove you own them Omandi tõestamiseks allkirjasta sõnumid oma Bitcoini aadressiga + + &Verify message… + &Kinnita sõnum... + Verify messages to ensure they were signed with specified Bitcoin addresses Kinnita sõnumid kindlustamaks et need allkirjastati määratud Bitcoini aadressiga @@ -489,14 +497,48 @@ Signing is only possible with addresses of the type 'legacy'. Open Wallet Ava Rahakott + + Open a wallet + Ava Rahakott + + + Close wallet + Sulge rahakott + + + Restore Wallet… + Name of the menu item that restores wallet from a backup file. + Taasta Rahakoti... + + + Restore a wallet from a backup file + Status tip for Restore Wallet menu item + Taasta rahakoti varukoopiafailist + + + Close all wallets + Sulge rkõik rahakotid + + + Migrate Wallet + Migreeri rahakott + &Window &Aken + + Main Window + Pea Aken + %1 client %1 klient + + &Hide + &Peida + %n active connection(s) to Bitcoin network. A substring of the tooltip. @@ -505,6 +547,10 @@ Signing is only possible with addresses of the type 'legacy'. + + Error creating wallet + Viga rahakoti loomisel + Error: %1 Tõrge %1 @@ -647,6 +693,13 @@ Signing is only possible with addresses of the type 'legacy'. (vahetusraha) + + MigrateWalletActivity + + Migrate Wallet + Migreeri rahakott + + OpenWalletActivity @@ -655,6 +708,17 @@ Signing is only possible with addresses of the type 'legacy'. Ava Rahakott + + WalletController + + Close wallet + Sulge rahakott + + + Close all wallets + Sulge rkõik rahakotid + + CreateWalletDialog diff --git a/src/qt/locale/bitcoin_fa.ts b/src/qt/locale/bitcoin_fa.ts index 561c2277af1c..a35cbcb44e83 100644 --- a/src/qt/locale/bitcoin_fa.ts +++ b/src/qt/locale/bitcoin_fa.ts @@ -11,7 +11,7 @@ &New - & جدید + &جدید Copy the currently selected address to the system clipboard @@ -19,7 +19,7 @@ &Copy - & ذخیره + &ذخیره C&lose @@ -37,6 +37,26 @@ Export the data in the current tab to a file داده های موجود در برگه فعلی را به یک فایل صادر کنید + + &Export + &صدور + + + &Delete + &حذف + + + Choose the address to send coins to + آدرسی را برای ارسال سکه‌ها انتخاب کنید + + + Choose the address to receive coins with + آدرسی را برای دریافت سکه‌ها انتخاب کنید + + + C&hoose + &انتخاب + These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. اینها آدرس های بیت کوین شما برای ارسال پرداخت هستند. همیشه قبل از ارسال سکه، مبلغ و آدرس دریافت کننده را بررسی کنید. @@ -47,6 +67,27 @@ Signing is only possible with addresses of the type 'legacy'. اینها آدرس های بیت کوین شما برای دریافت هستند. از دکمه "ایجاد آدرس دریافت جدید" در برگه دریافت برای ایجاد آدرس های جدید استفاده کنید. امضا فقط با آدرس هایی از نوع "میراث" امکان پذیر است. + + &Copy Address + &کپی کردن آدرس + + + Copy &Label + &کپی کردن برچسب + + + &Edit + &ویرایش + + + Export Address List + صادر کردن فهرستی از آدرس‌ها + + + Comma separated file + Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. + فایل جدا شده با کاما + AskPassphraseDialog @@ -262,6 +303,10 @@ Signing is only possible with addresses of the type 'legacy'. &Minimize &به حداقل رساندن + + Wallet: + کیف پول: + Network activity disabled. A substring of the tooltip. @@ -321,6 +366,10 @@ Signing is only possible with addresses of the type 'legacy'. &Verify message… پیام تایید + + Verify messages to ensure they were signed with specified Bitcoin addresses + پیام‌ها را تأیید کنید تا مطمئن شوید که با آدرس‌های بیت‌کوین مشخص‌شده امضا شده‌اند + &Load PSBT from file… بارگیری PSBT از پرونده @@ -746,6 +795,19 @@ Signing is only possible with addresses of the type 'legacy'. OptionsDialog + + Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. + Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. + حداکثر اندازهٔ کش پایگاه داده. اطمینان حاصل کنید که حافظهٔ RAM کافی دارید. کش بزرگ‌تر می‌تواند به همگام‌سازی سریع‌تر کمک کند، اما پس از آن، این مزیت برای بیشتر کاربردها چندان محسوس نیست. کاهش اندازهٔ کش باعث کاهش مصرف حافظه می‌شود. حافظهٔ استفاده‌نشدهٔ mempool با این کش به‌صورت مشترک استفاده می‌شود. + + + Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. + باز کردن خودکار پورت کلاینت بیت‌کوین روی روتر. این ویژگی تنها زمانی کار می‌کند که روتر شما از PCP یا NAT-PMP پشتیبانی کند و این قابلیت فعال باشد. پورت خارجی ممکن است به‌صورت تصادفی انتخاب شود. + + + Map port using PCP or NA&T-PMP + پورت را با استفاده از PCP یا NAT-PMP نگاشت کن + Font in the Overview tab: فونت در برگه کلی: @@ -1241,6 +1303,13 @@ If you are receiving this error you should request the merchant provide a BIP21 روگرفت م&قدار + + ReceiveRequestDialog + + Wallet: + کیف پول: + + RecentRequestsTableModel @@ -1360,6 +1429,17 @@ If you are receiving this error you should request the merchant provide a BIP21 خطا + + WalletModel + + Fee-bump PSBT copied to clipboard + PSBT با هزینه اضافه شده، در بریده‌دان کپی شد + + + Signer error + خطای امضا کننده + + WalletView @@ -1378,6 +1458,64 @@ If you are receiving this error you should request the merchant provide a BIP21 bitcoin-core + + Error starting/committing db txn for wallet transactions removal process + خطا در شروع یا انجام تراکنش پایگاه داده برای فرآیند حذف تراکنش‌های کیف پول + + + Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets + مقدار نامعتبری برای گزینهٔ ‘-wallet’ یا ‘-nowallet’ شناسایی شد. گزینهٔ ‘-wallet’ نیاز به مقدار رشته‌ای دارد، در حالی که ‘-nowallet’ فقط مقدار ‘1’ را برای غیرفعال‌سازی تمام کیف‌پول‌ها می‌پذیرد + + + Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. + گزینهٔ ‘-upnp’ تنظیم شده است اما پشتیبانی از UPnP در نسخهٔ 29.0 حذف شده است. استفاده از گزینهٔ ‘-natpmp’ را در نظر بگیرید + + + Cannot obtain a lock on directory %s. %s is probably already running. + امکان قفل‌گذاری روی پوشهٔ %s وجود ندارد. احتمالاً %s در حال حاضر در حال اجراست + + + Failed to remove snapshot chainstate dir (%s). Manually remove it before restarting. + + پاک‌سازی پوشهٔ وضعیت زنجیرهٔ اسنپ‌شات (%s) با شکست مواجه شد. لطفاً پیش از راه‌اندازی مجدد، آن را به‌صورت دستی حذف کنید. + + + + Flushing block file to disk failed. This is likely the result of an I/O error. + ذخیرهٔ فایل بلاک روی دیسک با شکست مواجه شد. احتمالاً ناشی از یک خطای ورودی/خروجی (I/O) است + + + Flushing undo file to disk failed. This is likely the result of an I/O error. + ذخیرهٔ فایل undo روی دیسک با شکست مواجه شد. احتمالاً ناشی از خطای ورودی/خروجی است + + + Maximum transaction weight is less than transaction weight without inputs + حداکثر وزن تراکنش کمتر از وزن تراکنش بدون ورودی‌ها است + + + Maximum transaction weight is too low, can not accommodate change output + حداکثر وزن تراکنش بسیار کم است، امکان افزودن خروجی تغییر (change output) وجود ندارد + + + Rename of '%s' -> '%s' failed. Cannot clean up the background chainstate leveldb directory. + تغییر نام '%s' به '%s' با شکست مواجه شد. نمی‌توان پوشهٔ leveldb مربوط به chainstate پس‌زمینه را پاک‌سازی کرد + + + Specified -blockmaxweight (%d) exceeds consensus maximum block weight (%d) + مقدار تعیین‌شده برای -blockmaxweight (%d) از حداکثر وزن بلاک مورد توافق (%d) بیشتر است + + + Specified -blockreservedweight (%d) exceeds consensus maximum block weight (%d) + مقدار تعیین‌شده برای -blockreservedweight (%d) از حداکثر وزن بلاک مورد توافق (%d) بیشتر است + + + Specified -blockreservedweight (%d) is lower than minimum safety value of (%d) + مقدار تعیین‌شده برای -blockreservedweight (%d) کمتر از مقدار حداقلی ایمنی (%d) است + + + The combination of the pre-selected inputs and the wallet automatic inputs selection exceeds the transaction maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs + ترکیب ورودی‌های از پیش انتخاب‌شده و ورودی‌های انتخاب‌شده به‌صورت خودکار توسط کیف‌پول از حداکثر وزن تراکنش فراتر رفته است. لطفاً مقدار کمتری ارسال کنید یا UTXOهای کیف‌پول را به‌صورت دستی تجمیع کنید + Error: Unable to read wallet's best block locator record خطا: خواندن بهترین سابقه یاب بلوک کیف پول امکان پذیر نیست diff --git a/src/qt/locale/bitcoin_fi.ts b/src/qt/locale/bitcoin_fi.ts index 128148224d4d..3d7aaf05b2c6 100644 --- a/src/qt/locale/bitcoin_fi.ts +++ b/src/qt/locale/bitcoin_fi.ts @@ -5,6 +5,10 @@ Right-click to edit address or label Valitse hiiren kakkospainikkeella muokataksesi osoitetta tai nimikettä + + Create a new address + Luo uusi osoite + &New &Uusi @@ -2272,6 +2276,14 @@ Jos saat tämän virheen, pyydä kauppiasta antamaan BIP21-yhteensopiva URI.Number of connections Yhteyksien lukumäärä + + Local Addresses + Paikalliset osoitteet + + + Network addresses that your Bitcoin node is currently using to communicate with other nodes. + Verkko-osoitteet, joita Bitcoin-solmusi käyttää tällä hetkellä kommunikoidakseen muiden solmujen kanssa. + Block chain Lohkoketju @@ -2320,6 +2332,10 @@ Jos saat tämän virheen, pyydä kauppiasta antamaan BIP21-yhteensopiva URI.Select a peer to view detailed information. Valitse vertainen eriteltyjä tietoja varten. + + Hide Peers Detail + Piilota vertaisten yksityiskohdat + The transport layer version: %1 Kuljetuskerroksen versio: %1 @@ -2434,6 +2450,10 @@ Jos saat tämän virheen, pyydä kauppiasta antamaan BIP21-yhteensopiva URI.Direction/Type Suunta/Tyyppi + + The BIP324 session ID string in hex. + BIP324-istunnon ID-merkkijono heksana. + The network protocol this peer is connected through: IPv4, IPv6, Onion, I2P, or CJDNS. Verkkoprotokolla, jonka kautta tämä vertaisverkko on yhdistetty: IPv4, IPv6, Onion, I2P tai CJDNS. @@ -3341,6 +3361,10 @@ Huom: Koska maksu lasketaan per tavu, "100 satoshin per kB" maksunopeus 500 virt &Sign Message &Allekirjoita viesti + + You can sign messages/agreements with your legacy (P2PKH) 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. + Voit allekirjoittaa viestejä/sopimuksia vanhojen (P2PKH) osoitteidesi kanssa todistaaksesi, että voit vastaanottaa niihin lähetettyjä bitcoineja. Varo allekirjoittamasta mitään epämääräistä tai satunnaista, sillä phishing-hyökkäykset voivat yrittää huijata sinua allekirjoittamaan henkilöllisyytesi heille. Allekirjoita vain täysin yksityiskohtaiset lausunnot, joihin suostut. + The Bitcoin address to sign the message with Bitcoin-osoite jolla viesti allekirjoitetaan @@ -3995,6 +4019,10 @@ Varoitus: Tämä voi maksaa ylimääräisen maksun vähentämällä vaihtotuloja PSBT copied PSBT kopioitu + + Fee-bump PSBT copied to clipboard + Siirtokulujen nosto PSBT kopioitu leikepöydälle + Can't sign transaction. Siirtoa ei voida allekirjoittaa. @@ -4003,6 +4031,10 @@ Varoitus: Tämä voi maksaa ylimääräisen maksun vähentämällä vaihtotuloja Could not commit transaction Siirtoa ei voitu tehdä + + Signer error + Signaalivirhe + Can't display address Osoitetta ei voida näyttää @@ -4063,6 +4095,10 @@ Varoitus: Tämä voi maksaa ylimääräisen maksun vähentämällä vaihtotuloja %s virheellinen -assumeutxo-snapshot-tila. Tämä viittaa laitteistoon liittyvään ongelmaan, ohjelmistovirheeseen tai huonoon ohjelmistomuutokseen, joka on sallinut virheellisen snapshotin lataamisen. Tämän seurauksena solmu sulkeutuu ja lopettaa kaiken sen tilan käytön, joka perustui snapshottiin, ja nollaa lohkokorkeuden%darvoon%d. Seuraavassa uudelleenkäynnistyksessä solmu jatkaa synkronointia kohdasta%d   ilman, että käytetään mitään snapshot-tietoja. Ilmoita tästä tapauksesta osoitteeseen%s, mukaan lukien se, miten sait snapshotin. Virheellinen snapshot-tilatiedosto jätetään levylle, jos se on hyödyllinen ongelman diagnosoinnissa, joka aiheutti tämän virheen. + + %s request to listen on port %u. This port is considered "bad" and thus it is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for details and a full list. + %s pyyntö kuunnella porttia %u. Tätä porttia pidetään ”huonona”, joten on epätodennäköistä, että mikään vertaisohjelma muodostaa siihen yhteyden. Katso lisätietoja ja täydellinen luettelo doc/p2p-bad-ports.md-tiedostosta. + Cannot downgrade wallet from version %i to version %i. Wallet version unchanged. Ei voida alentaa lompakon versiota versiosta %i versioon %i. Lompakon versio pysyy ennallaan. diff --git a/src/qt/locale/bitcoin_fr_CM.ts b/src/qt/locale/bitcoin_fr_CM.ts deleted file mode 100644 index a267f0b7d91f..000000000000 --- a/src/qt/locale/bitcoin_fr_CM.ts +++ /dev/null @@ -1,5093 +0,0 @@ - - - AddressBookPage - - Right-click to edit address or label - Clic droit pour modifier l'adresse ou l'étiquette - - - Create a new address - Créer une nouvelle adresse - - - &New - &Nouvelle - - - Copy the currently selected address to the system clipboard - Copier l’adresse sélectionnée actuellement dans le presse-papiers - - - &Copy - &Copier - - - C&lose - &Fermer - - - Delete the currently selected address from the list - Supprimer l’adresse sélectionnée actuellement de la liste - - - Enter address or label to search - Saisir une adresse ou une étiquette à rechercher - - - Export the data in the current tab to a file - Exporter les données de l’onglet actuel vers un fichier - - - &Export - &Exporter - - - &Delete - &Supprimer - - - Choose the address to send coins to - Choisir l’adresse à laquelle envoyer des pièces - - - Choose the address to receive coins with - Choisir l’adresse avec laquelle recevoir des pièces - - - C&hoose - C&hoisir - - - These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Ce sont vos adresses Bitcoin pour envoyer des paiements. Vérifiez toujours le montant et l’adresse du destinataire avant d’envoyer des pièces. - - - These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. -Signing is only possible with addresses of the type 'legacy'. - Il s'agit de vos adresses Bitcoin pour la réception des paiements. Utilisez le bouton "Créer une nouvelle adresse de réception" dans l'onglet "Recevoir" pour créer de nouvelles adresses. -La signature n'est possible qu'avec les adresses de type "patrimoine". - - - &Copy Address - &Copier l’adresse - - - Copy &Label - Copier l’é&tiquette - - - &Edit - &Modifier - - - Export Address List - Exporter la liste d’adresses - - - Comma separated file - Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. - Fichier séparé par des virgules - - - There was an error trying to save the address list to %1. Please try again. - An error message. %1 is a stand-in argument for the name of the file we attempted to save to. - Une erreur est survenue lors de l'enregistrement de la liste d'adresses vers %1. Veuillez réessayer plus tard. - - - Receiving addresses - %1 - Adresses de réceptions - %1 - - - Exporting Failed - Échec d’exportation - - - - AddressTableModel - - Label - Étiquette - - - Address - Adresse - - - (no label) - (aucune étiquette) - - - - AskPassphraseDialog - - Passphrase Dialog - Fenêtre de dialogue de la phrase de passe - - - Enter passphrase - Saisir la phrase de passe - - - New passphrase - Nouvelle phrase de passe - - - Repeat new passphrase - Répéter la phrase de passe - - - Show passphrase - Afficher la phrase de passe - - - Encrypt wallet - Chiffrer le porte-monnaie - - - This operation needs your wallet passphrase to unlock the wallet. - Cette opération nécessite votre phrase de passe pour déverrouiller le porte-monnaie. - - - Unlock wallet - Déverrouiller le porte-monnaie - - - Change passphrase - Changer la phrase de passe - - - Confirm wallet encryption - Confirmer le chiffrement du porte-monnaie - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! - Avertissement : Si vous chiffrez votre porte-monnaie et perdez votre phrase de passe, vous <b>PERDREZ TOUS VOS BITCOINS</b> ! - - - Are you sure you wish to encrypt your wallet? - Voulez-vous vraiment chiffrer votre porte-monnaie ? - - - Wallet encrypted - Le porte-monnaie est chiffré - - - Enter the new passphrase for the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. - Saisissez la nouvelle phrase de passe du porte-monnaie.<br/>Veuillez utiliser une phrase de passe composée de <b>dix caractères aléatoires ou plus</b>, ou de <b>huit mots ou plus</b>. - - - Enter the old passphrase and new passphrase for the wallet. - Saisir l’ancienne puis la nouvelle phrase de passe du porte-monnaie. - - - Continue - Poursuivre - - - Back - Retour - - - Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. - N’oubliez pas que le chiffrement de votre porte-monnaie ne peut pas protéger entièrement vos bitcoins contre le vol par des programmes malveillants qui infecteraient votre ordinateur. - - - Wallet to be encrypted - Porte-monnaie à chiffrer - - - Your wallet is about to be encrypted. - Votre porte-monnaie est sur le point d’être chiffré. - - - Your wallet is now encrypted. - Votre porte-monnaie est désormais chiffré. - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANT : Toutes les sauvegardes précédentes du fichier de votre porte-monnaie devraient être remplacées par le fichier du porte-monnaie chiffré nouvellement généré. Pour des raisons de sécurité, les sauvegardes précédentes de votre fichier de porte-monnaie non chiffré deviendront inutilisables dès que vous commencerez à utiliser le nouveau porte-monnaie chiffré. - - - Wallet encryption failed - Échec de chiffrement du porte-monnaie - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Le chiffrement du porte-monnaie a échoué en raison d’une erreur interne. Votre porte-monnaie n’a pas été chiffré. - - - The supplied passphrases do not match. - Les phrases de passe saisies ne correspondent pas. - - - Wallet unlock failed - Échec de déverrouillage du porte-monnaie - - - The passphrase entered for the wallet decryption was incorrect. - La phrase de passe saisie pour déchiffrer le porte-monnaie était erronée. - - - The passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. If this is successful, please set a new passphrase to avoid this issue in the future. - La phrase secrète saisie pour le décryptage du portefeuille est incorrecte. Elle contient un caractère nul (c'est-à-dire un octet de zéro). Si la phrase secrète a été définie avec une version de ce logiciel antérieure à la version 25.0, veuillez réessayer en ne saisissant que les caractères jusqu'au premier caractère nul (non compris). Si vous y parvenez, définissez une nouvelle phrase secrète afin d'éviter ce problème à l'avenir. - - - Wallet passphrase was successfully changed. - La phrase de passe du porte-monnaie a été modifiée avec succès. - - - Passphrase change failed - Le changement de phrase secrète a échoué - - - The old passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. - L'ancienne phrase secrète introduite pour le décryptage du portefeuille est incorrecte. Elle contient un caractère nul (c'est-à-dire un octet de zéro). Si la phrase secrète a été définie avec une version de ce logiciel antérieure à la version 25.0, veuillez réessayer en ne saisissant que les caractères jusqu'au premier caractère nul (non compris). - - - Warning: The Caps Lock key is on! - Avertissement : La touche Verr. Maj. est activée - - - - BanTableModel - - IP/Netmask - IP/masque réseau - - - Banned Until - Banni jusqu’au - - - - BitcoinApplication - - Settings file %1 might be corrupt or invalid. - Le fichier de paramètres %1 est peut-être corrompu ou non valide. - - - Runaway exception - Exception excessive - - - A fatal error occurred. %1 can no longer continue safely and will quit. - Une erreur fatale est survenue. %1 ne peut plus poursuivre de façon sûre et va s’arrêter. - - - Internal error - Eurrer interne - - - An internal error occurred. %1 will attempt to continue safely. This is an unexpected bug which can be reported as described below. - Une erreur interne est survenue. %1 va tenter de poursuivre avec sécurité. Il s’agit d’un bogue inattendu qui peut être signalé comme décrit ci-dessous. - - - - QObject - - Do you want to reset settings to default values, or to abort without making changes? - Explanatory text shown on startup when the settings file cannot be read. Prompts user to make a choice between resetting or aborting. - Voulez-vous réinitialiser les paramètres à leur valeur par défaut ou abandonner sans aucun changement ? - - - A fatal error occurred. Check that settings file is writable, or try running with -nosettings. - Explanatory text shown on startup when the settings file could not be written. Prompts user to check that we have the ability to write to the file. Explains that the user has the option of running without a settings file. - Une erreur fatale est survenue. Vérifiez que le fichier des paramètres est modifiable ou essayer d’exécuter avec -nosettings. - - - Error: %1 - Erreur : %1 - - - %1 didn't yet exit safely… - %1 ne s’est pas encore fermer en toute sécurité… - - - unknown - inconnue - - - Embedded "%1" - Intégré « %1 » - - - Default system font "%1" - Police système par défaut « %1 » - - - Custom… - Persnnalisé… - - - Amount - Montant - - - Enter a Bitcoin address (e.g. %1) - Saisir une adresse Bitcoin (p. ex. %1) - - - Unroutable - Non routable - - - Inbound - An inbound connection from a peer. An inbound connection is a connection initiated by a peer. - Entrant - - - Outbound - An outbound connection to a peer. An outbound connection is a connection initiated by us. - Sortant - - - Full Relay - Peer connection type that relays all network information. - Relais intégral - - - Block Relay - Peer connection type that relays network information about blocks and not transactions or addresses. - Relais de blocs - - - Manual - Peer connection type established manually through one of several methods. - Manuelle - - - Feeler - Short-lived peer connection type that tests the aliveness of known addresses. - Palpeur - - - Address Fetch - Short-lived peer connection type that solicits known addresses from a peer. - Récupération d’adresses - - - %1 d - %1 j - - - %1 m - %1 min - - - None - Aucun - - - N/A - N.D. - - - %n second(s) - - %n seconde - %n secondes - - - - %n minute(s) - - %n minute - %n minutes - - - - %n hour(s) - - %n heure - %n heures - - - - %n day(s) - - %n jour - %n jours - - - - %n week(s) - - %n semaine - %n semaines - - - - %1 and %2 - %1 et %2 - - - %n year(s) - - %n an - %n ans - - - - %1 B - %1 o - - - %1 kB - %1 ko - - - %1 MB - %1 Mo - - - %1 GB - %1 Go - - - default wallet - porte-monnaie par défaut - - - - BitcoinGUI - - &Overview - &Vue d’ensemble - - - Show general overview of wallet - Afficher une vue d’ensemble du porte-monnaie - - - Browse transaction history - Parcourir l’historique transactionnel - - - E&xit - Q&uitter - - - Quit application - Fermer l’application - - - &About %1 - À &propos de %1 - - - Show information about %1 - Afficher des renseignements à propos de %1 - - - About &Qt - À propos de &Qt - - - Show information about Qt - Afficher des renseignements sur Qt - - - Modify configuration options for %1 - Modifier les options de configuration de %1 - - - Create a new wallet - Créer un nouveau porte-monnaie - - - &Minimize - &Réduire - - - Wallet: - Porte-monnaie : - - - Network activity disabled. - A substring of the tooltip. - L’activité réseau est désactivée. - - - Proxy is <b>enabled</b>: %1 - Le serveur mandataire est <b>activé</b> : %1 - - - Send coins to a Bitcoin address - Envoyer des pièces à une adresse Bitcoin - - - Backup wallet to another location - Sauvegarder le porte-monnaie vers un autre emplacement - - - Change the passphrase used for wallet encryption - Modifier la phrase de passe utilisée pour le chiffrement du porte-monnaie - - - &Send - &Envoyer - - - &Receive - &Recevoir - - - &Options… - &Choix - - - &Encrypt Wallet… - &Chiffrer le porte-monnaie… - - - Encrypt the private keys that belong to your wallet - Chiffrer les clés privées qui appartiennent à votre porte-monnaie - - - &Backup Wallet… - &auvegarder le porte-monnaie… - - - &Change Passphrase… - &Changer la phrase de passe… - - - Sign &message… - Signer un &message… - - - Sign messages with your Bitcoin addresses to prove you own them - Signer les messages avec vos adresses Bitcoin pour prouver que vous les détenez - - - &Verify message… - &Vérifier un message… - - - Verify messages to ensure they were signed with specified Bitcoin addresses - Vérifier les messages pour s’assurer qu’ils ont été signés avec les adresses Bitcoin indiquées - - - &Load PSBT from file… - &Charger une TBSP d’un fichier… - - - Open &URI… - Ouvrir une &URI… - - - Close Wallet… - Fermer le porte-monnaie… - - - Create Wallet… - Créer un porte-monnaie… - - - Close All Wallets… - Fermer tous les porte-monnaie… - - - &File - &Fichier - - - &Settings - &Paramètres - - - &Help - &Aide - - - Tabs toolbar - Barre d’outils des onglets - - - Syncing Headers (%1%)… - Synchronisation des en-têtes (%1)… - - - Synchronizing with network… - Synchronisation avec le réseau… - - - Indexing blocks on disk… - Indexation des blocs sur le disque… - - - Processing blocks on disk… - Traitement des blocs sur le disque… - - - Connecting to peers… - Connexion aux pairs… - - - Request payments (generates QR codes and bitcoin: URIs) - Demander des paiements (génère des codes QR et des URI bitcoin:) - - - Show the list of used sending addresses and labels - Afficher la liste d’adresses et d’étiquettes d’envoi utilisées - - - Show the list of used receiving addresses and labels - Afficher la liste d’adresses et d’étiquettes de réception utilisées - - - &Command-line options - Options de ligne de &commande - - - Processed %n block(s) of transaction history. - - %n bloc d’historique transactionnel a été traité. - %n blocs d’historique transactionnel ont été traités. - - - - %1 behind - en retard de %1 - - - Catching up… - Rattrapage… - - - Last received block was generated %1 ago. - Le dernier bloc reçu avait été généré il y a %1. - - - Transactions after this will not yet be visible. - Les transactions suivantes ne seront pas déjà visibles. - - - Error - Erreur - - - Warning - Avertissement - - - Information - Renseignements - - - Up to date - À jour - - - Load Partially Signed Bitcoin Transaction - Charger une transaction Bitcoin signée partiellement - - - Load PSBT from &clipboard… - Charger la TBSP du &presse-papiers… - - - Load Partially Signed Bitcoin Transaction from clipboard - Charger du presse-papiers une transaction Bitcoin signée partiellement - - - Node window - Fenêtre des nœuds - - - Open node debugging and diagnostic console - Ouvrir une console de débogage de nœuds et de diagnostic - - - &Sending addresses - &Adresses d’envoi - - - &Receiving addresses - &Adresses de réception - - - Open a bitcoin: URI - Ouvrir une URI bitcoin: - - - Open Wallet - Ouvrir le porte-monnaie - - - Open a wallet - Ouvrir un porte-monnaie - - - Close wallet - Fermer le porte-monnaie - - - Restore Wallet… - Name of the menu item that restores wallet from a backup file. - Restaurer le Portefeuille... - - - Restore a wallet from a backup file - Status tip for Restore Wallet menu item - Restaurer le Portefeuille depuis un fichier de sauvegarde - - - Close all wallets - Fermer tous les porte-monnaie - - - Migrate Wallet - Migrer le portefeuille - - - Migrate a wallet - Migrer un portefeuilles - - - Show the %1 help message to get a list with possible Bitcoin command-line options - Afficher le message d’aide de %1 pour obtenir la liste des options possibles en ligne de commande Bitcoin - - - &Mask values - &Masquer les montants - - - Mask the values in the Overview tab - Masquer les montants dans l’onglet Vue d’ensemble - - - No wallets available - Aucun porte-monnaie n’est disponible - - - Wallet Data - Name of the wallet data file format. - Données du porte-monnaie - - - Load Wallet Backup - The title for Restore Wallet File Windows - Lancer un Portefeuille de sauvegarde - - - Restore Wallet - Title of pop-up window shown when the user is attempting to restore a wallet. - Restaurer le portefeuille - - - Wallet Name - Label of the input field where the name of the wallet is entered. - Nom du porte-monnaie - - - &Window - &Fenêtre - - - Zoom - Zoomer - - - Main Window - Fenêtre principale - - - %1 client - Client %1 - - - &Hide - &Cacher - - - S&how - A&fficher - - - %n active connection(s) to Bitcoin network. - A substring of the tooltip. - - %n connexion active avec le réseau Bitcoin. - %n connexions actives avec le réseau Bitcoin. - - - - Click for more actions. - A substring of the tooltip. "More actions" are available via the context menu. - Cliquez pour afficher plus d’actions. - - - Show Peers tab - A context menu item. The "Peers tab" is an element of the "Node window". - Afficher l’onglet Pairs - - - Disable network activity - A context menu item. - Désactiver l’activité réseau - - - Enable network activity - A context menu item. The network activity was disabled previously. - Activer l’activité réseau - - - Pre-syncing Headers (%1%)… - En-têtes de pré-synchronisation (%1%)... - - - Error creating wallet - Erreur lors de la création du portefeuille - - - Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets) - Impossible de créer un nouveau portefeuilles, le logiciel a été compilé sans support pour sqlite (nécessaire pour le portefeuille décris) - - - Error: %1 - Erreur : %1 - - - Warning: %1 - Avertissement : %1 - - - Date: %1 - - Date : %1 - - - - Amount: %1 - - Montant : %1 - - - - Wallet: %1 - - Porte-monnaie : %1 - - - - Type: %1 - - Type  : %1 - - - - Label: %1 - - Étiquette : %1 - - - - Address: %1 - - Adresse : %1 - - - - Sent transaction - Transaction envoyée - - - Incoming transaction - Transaction entrante - - - HD key generation is <b>enabled</b> - La génération de clé HD est <b>activée</b> - - - HD key generation is <b>disabled</b> - La génération de clé HD est <b>désactivée</b> - - - Private key <b>disabled</b> - La clé privée est <b>désactivée</b> - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Le porte-monnaie est <b>chiffré</b> et est actuellement <b>déverrouillé</b> - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - Le porte-monnaie est <b>chiffré</b> et actuellement <b>verrouillé</b> - - - Original message: - Message original : - - - - UnitDisplayStatusBarControl - - Unit to show amounts in. Click to select another unit. - Unité d’affichage des montants. Cliquez pour sélectionner une autre unité. - - - - CoinControlDialog - - Coin Selection - Sélection des pièces - - - Quantity: - Quantité : - - - Bytes: - Octets : - - - Amount: - Montant : - - - Fee: - Frais : - - - After Fee: - Après les frais : - - - Change: - Monnaie : - - - (un)select all - Tout (des)sélectionner - - - Tree mode - Mode arborescence - - - List mode - Mode liste - - - Amount - Montant - - - Received with label - Reçu avec une étiquette - - - Received with address - Reçu avec une adresse - - - Confirmed - Confirmée - - - Copy amount - Copier le montant - - - &Copy address - &Copier l’adresse - - - Copy &label - Copier l’&étiquette - - - Copy &amount - Copier le &montant - - - Copy transaction &ID and output index - Copier l’ID de la transaction et l’index des sorties - - - L&ock unspent - &Verrouillé ce qui n’est pas dépensé - - - &Unlock unspent - &Déverrouiller ce qui n’est pas dépensé - - - Copy quantity - Copier la quantité - - - Copy fee - Copier les frais - - - Copy after fee - Copier après les frais - - - Copy bytes - Copier les octets - - - Copy change - Copier la monnaie - - - (%1 locked) - (%1 verrouillée) - - - Can vary +/- %1 satoshi(s) per input. - Peut varier +/- %1 satoshi(s) par entrée. - - - (no label) - (aucune étiquette) - - - change from %1 (%2) - monnaie de %1 (%2) - - - (change) - (monnaie) - - - - CreateWalletActivity - - Create Wallet - Title of window indicating the progress of creation of a new wallet. - Créer un porte-monnaie - - - Creating Wallet <b>%1</b>… - Descriptive text of the create wallet progress window which indicates to the user which wallet is currently being created. - Création du porte-monnaie <b>%1</b>… - - - Create wallet failed - Échec de création du porte-monnaie - - - Create wallet warning - Avertissement de création du porte-monnaie - - - Can't list signers - Impossible de lister les signataires - - - Too many external signers found - Trop de signataires externes trouvés - - - - LoadWalletsActivity - - Load Wallets - Title of progress window which is displayed when wallets are being loaded. - Charger les porte-monnaie - - - Loading wallets… - Descriptive text of the load wallets progress window which indicates to the user that wallets are currently being loaded. - Chargement des porte-monnaie… - - - - MigrateWalletActivity - - Migrate wallet - Migrer le portefeuille - - - Are you sure you wish to migrate the wallet <i>%1</i>? - Êtes-vous sûr de vouloir migrer le portefeuille <i>%1</i> - - - Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made. -If this wallet contains any watchonly scripts, a new wallet will be created which contains those watchonly scripts. -If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts. - -The migration process will create a backup of the wallet before migrating. This backup file will be named <wallet name>-<timestamp>.legacy.bak and can be found in the directory for this wallet. In the event of an incorrect migration, the backup can be restored with the "Restore Wallet" functionality. - La migration du porte-monnaie convertira ce porte-monnaie en un ou plusieurs porte-monnaie de descripteurs. Une nouvelle sauvegarde du porte-monnaie devra être effectuée. -Si ce porte-monnaie contient des scripts en lecture seule, un nouveau porte-monnaie sera créé contenant ces scripts en lecture seule. -Si ce porte-monnaie contient des scripts solvables mais non surveillés, un autre nouveau porte-monnaie sera créé contenant ces scripts. - -Le processus de migration créera une sauvegarde du porte-monnaie avant la migration. Ce fichier de sauvegarde sera nommé <nom du porte-monnaie>-<horodatage>.legacy.bak et pourra être trouvé dans le répertoire de ce porte-monnaie. En cas de migration incorrecte, la sauvegarde peut être restaurée avec la fonctionnalité "Restaurer le porte-monnaie". - - - Migrate Wallet - Migrer le portefeuille - - - Migrating Wallet <b>%1</b>… - Migration du portefeuille <b>%1</b>… - - - The wallet '%1' was migrated successfully. - Le porte-monnaie '%1' a été migré avec succès. - - - Watchonly scripts have been migrated to a new wallet named '%1'. - Les scripts juste-regarder ont été migrés vers un nouveau porte-monnaie nommé « %1 ». - - - Solvable but not watched scripts have been migrated to a new wallet named '%1'. - Les scripts solubles, mais non surveillés ont été migrés vers un nouveau porte-monnaie nommé « %1 ». - - - Migration failed - La migration a échoué - - - Migration Successful - Migration réussie - - - - OpenWalletActivity - - Open wallet failed - Échec d’ouverture du porte-monnaie - - - Open wallet warning - Avertissement d’ouverture du porte-monnaie - - - Open Wallet - Title of window indicating the progress of opening of a wallet. - Ouvrir un porte-monnaie - - - Opening Wallet <b>%1</b>… - Descriptive text of the open wallet progress window which indicates to the user which wallet is currently being opened. - Ouverture du porte-monnaie <b>%1</b>… - - - - RestoreWalletActivity - - Restore Wallet - Title of progress window which is displayed when wallets are being restored. - Restaurer le portefeuille - - - Restoring Wallet <b>%1</b>… - Descriptive text of the restore wallets progress window which indicates to the user that wallets are currently being restored. - Restauration du Portefeuille<b>%1</b>... - - - Restore wallet failed - Title of message box which is displayed when the wallet could not be restored. - Échec de la restauration du portefeuille - - - Restore wallet warning - Title of message box which is displayed when the wallet is restored with some warning. - Avertissement de la récupération du Portefeuille - - - Restore wallet message - Title of message box which is displayed when the wallet is successfully restored. - Message du Portefeuille restauré - - - - WalletController - - Close wallet - Fermer le porte-monnaie - - - Are you sure you wish to close the wallet <i>%1</i>? - Voulez-vous vraiment fermer le porte-monnaie <i>%1</i> ? - - - Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. - Fermer le porte-monnaie trop longtemps peut impliquer de devoir resynchroniser la chaîne entière si l’élagage est activé. - - - Close all wallets - Fermer tous les porte-monnaie - - - Are you sure you wish to close all wallets? - Voulez-vous vraiment fermer tous les porte-monnaie ? - - - - CreateWalletDialog - - Create Wallet - Créer un porte-monnaie - - - You are one step away from creating your new wallet! - Vous n'êtes qu'à un pas de la création de votre nouveau portefeuille ! - - - Please provide a name and, if desired, enable any advanced options - Veuillez fournir un nom et, si désiré, activer toutes les options avancées. - - - Wallet Name - Nom du porte-monnaie - - - Wallet - Porte-monnaie - - - Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice. - Chiffrer le porte-monnaie. Le porte-monnaie sera chiffré avec une phrase de passe de votre choix. - - - Encrypt Wallet - Chiffrer le porte-monnaie - - - Advanced Options - Options avancées - - - Disable private keys for this wallet. Wallets with private keys disabled will have no private keys and cannot have an HD seed or imported private keys. This is ideal for watch-only wallets. - Désactiver les clés privées pour ce porte-monnaie. Les porte-monnaie pour lesquels les clés privées sont désactivées n’auront aucune clé privée et ne pourront ni avoir de graine HD ni de clés privées importées. Cela est idéal pour les porte-monnaie juste-regarder. - - - Disable Private Keys - Désactiver les clés privées - - - Make a blank wallet. Blank wallets do not initially have private keys or scripts. Private keys and addresses can be imported, or an HD seed can be set, at a later time. - Créer un porte-monnaie vide. Les porte-monnaie vides n’ont initialement ni clé privée ni script. Ultérieurement, des clés privées et des adresses peuvent être importées ou une graine HD peut être définie. - - - Make Blank Wallet - Créer un porte-monnaie vide - - - Use an external signing device such as a hardware wallet. Configure the external signer script in wallet preferences first. - Utiliser un appareil externe de signature tel qu’un porte-monnaie matériel. Configurer d’abord le script signataire externe dans les préférences du porte-monnaie. - - - External signer - Signataire externe - - - Create - Créer - - - Compiled without external signing support (required for external signing) - "External signing" means using devices such as hardware wallets. - Compilé sans prise en charge des signatures externes (requis pour la signature externe) - - - - EditAddressDialog - - Edit Address - Modifier l’adresse - - - &Label - É&tiquette - - - The label associated with this address list entry - L’étiquette associée à cette entrée de la liste d’adresses - - - The address associated with this address list entry. This can only be modified for sending addresses. - L’adresse associée à cette entrée de la liste d’adresses. Ne peut être modifié que pour les adresses d’envoi. - - - &Address - &Adresse - - - New sending address - Nouvelle adresse d’envoi - - - Edit receiving address - Modifier l’adresse de réception - - - Edit sending address - Modifier l’adresse d’envoi - - - The entered address "%1" is not a valid Bitcoin address. - L’adresse saisie « %1 » n’est pas une adresse Bitcoin valide. - - - Address "%1" already exists as a receiving address with label "%2" and so cannot be added as a sending address. - L’adresse « %1 » existe déjà en tant qu’adresse de réception avec l’étiquette « %2 » et ne peut donc pas être ajoutée en tant qu’adresse d’envoi. - - - The entered address "%1" is already in the address book with label "%2". - L’adresse saisie « %1 » est déjà présente dans le carnet d’adresses avec l’étiquette « %2 ». - - - Could not unlock wallet. - Impossible de déverrouiller le porte-monnaie. - - - New key generation failed. - Échec de génération de la nouvelle clé. - - - - FreespaceChecker - - A new data directory will be created. - Un nouveau répertoire de données sera créé. - - - name - nom - - - Directory already exists. Add %1 if you intend to create a new directory here. - Le répertoire existe déjà. Ajouter %1 si vous comptez créer un nouveau répertoire ici. - - - Path already exists, and is not a directory. - Le chemin existe déjà et n’est pas un répertoire. - - - Cannot create data directory here. - Impossible de créer un répertoire de données ici. - - - - Intro - - %n GB of space available - - %n Go d’espace libre - %n Go d’espace libre - - - - (of %n GB needed) - - (of %n GB needed) - (of %n GB needed) - - - - (%n GB needed for full chain) - - (%n GB needed for full chain) - (%n GB needed for full chain) - - - - Choose data directory - Choisissez un répertoire de donnée - - - At least %1 GB of data will be stored in this directory, and it will grow over time. - Au moins %1 Go de données seront stockés dans ce répertoire et sa taille augmentera avec le temps. - - - Approximately %1 GB of data will be stored in this directory. - Approximativement %1 Go de données seront stockés dans ce répertoire. - - - (sufficient to restore backups %n day(s) old) - Explanatory text on the capability of the current prune target. - - (suffisant pour restaurer les sauvegardes âgées de %n jour) - (suffisant pour restaurer les sauvegardes âgées de %n jours) - - - - %1 will download and store a copy of the Bitcoin block chain. - %1 téléchargera et stockera une copie de la chaîne de blocs Bitcoin. - - - The wallet will also be stored in this directory. - Le porte-monnaie sera aussi stocké dans ce répertoire. - - - Error: Specified data directory "%1" cannot be created. - Erreur : Le répertoire de données indiqué « %1 » ne peut pas être créé. - - - Error - Erreur - - - Welcome - Bienvenue - - - Welcome to %1. - Bienvenue à %1. - - - As this is the first time the program is launched, you can choose where %1 will store its data. - Comme le logiciel est lancé pour la première fois, vous pouvez choisir où %1 stockera ses données. - - - Limit block chain storage to - Limiter l’espace de stockage de chaîne de blocs à - - - Reverting this setting requires re-downloading the entire blockchain. It is faster to download the full chain first and prune it later. Disables some advanced features. - Rétablir ce paramètre à sa valeur antérieure exige de retélécharger la chaîne de blocs dans son intégralité. Il est plus rapide de télécharger la chaîne complète dans un premier temps et de l’élaguer ultérieurement. Désactive certaines fonctions avancées. - - - GB -  Go - - - This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off. - Cette synchronisation initiale est très exigeante et pourrait exposer des problèmes matériels dans votre ordinateur passés inaperçus auparavant. Chaque fois que vous exécuterez %1, le téléchargement reprendra où il s’était arrêté. - - - When you click OK, %1 will begin to download and process the full %4 block chain (%2 GB) starting with the earliest transactions in %3 when %4 initially launched. - Quand vous cliquerez sur Valider, %1 commencera à télécharger et à traiter l’intégralité de la chaîne de blocs %4 (%2 Go) en débutant avec les transactions les plus anciennes de %3, quand %4 a été lancé initialement. - - - If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low. - Si vous avez choisi de limiter le stockage de la chaîne de blocs (élagage), les données historiques doivent quand même être téléchargées et traitées, mais seront supprimées par la suite pour minimiser l’utilisation de votre espace disque. - - - Use the default data directory - Utiliser le répertoire de données par défaut - - - Use a custom data directory: - Utiliser un répertoire de données personnalisé : - - - - HelpMessageDialog - - About %1 - À propos de %1 - - - Command-line options - Options de ligne de commande - - - - ShutdownWindow - - %1 is shutting down… - %1 est en cours de fermeture… - - - Do not shut down the computer until this window disappears. - Ne pas éteindre l’ordinateur jusqu’à la disparition de cette fenêtre. - - - - ModalOverlay - - Form - Formulaire - - - Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. - Les transactions récentes ne sont peut-être pas encore visibles et par conséquent le solde de votre porte-monnaie est peut-être erroné. Ces renseignements seront justes quand votre porte-monnaie aura fini de se synchroniser avec le réseau Bitcoin, comme décrit ci-dessous. - - - Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. - Toute tentative de dépense de bitcoins affectés par des transactions qui ne sont pas encore affichées ne sera pas acceptée par le réseau. - - - Number of blocks left - Nombre de blocs restants - - - Unknown… - Inconnu… - - - calculating… - calcul en cours… - - - Last block time - Estampille temporelle du dernier bloc - - - Progress - Progression - - - Progress increase per hour - Avancement de la progression par heure - - - Estimated time left until synced - Temps estimé avant la fin de la synchronisation - - - Hide - Cacher - - - Esc - Échap - - - %1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain. - %1 est en cours de synchronisation. Il téléchargera les en-têtes et les blocs des pairs, et les validera jusqu’à ce qu’il atteigne la fin de la chaîne de blocs. - - - Unknown. Syncing Headers (%1, %2%)… - Inconnu. Synchronisation des en-têtes (%1, %2 %)… - - - Unknown. Pre-syncing Headers (%1, %2%)… - Inconnu. En-têtes de présynchronisation (%1, %2%)... - - - - OpenURIDialog - - Open bitcoin URI - Ouvrir une URI bitcoin - - - URI: - URI : - - - Paste address from clipboard - Tooltip text for button that allows you to paste an address that is in your clipboard. - Collez l’adresse du presse-papiers - - - - OptionsDialog - - &Main - &Principales - - - Automatically start %1 after logging in to the system. - Démarrer %1 automatiquement après avoir ouvert une session sur l’ordinateur. - - - &Start %1 on system login - &Démarrer %1 lors de l’ouverture d’une session - - - Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain. - L’activation de l’élagage réduit considérablement l’espace disque requis pour stocker les transactions. Tous les blocs sont encore entièrement validés. L’annulation de ce paramètre exige de retélécharger la chaîne de blocs dans son intégralité. - - - Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. - Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. - Taille maximale du cache de la base de données. Assurez-vous d’avoir suffisamment de mémoire vive. Un cache plus grand peut accélérer la synchronisation, avec des avantages moindres par la suite dans la plupart des cas. Diminuer la taille du cache réduira l’utilisation de la mémoire. La mémoire non utilisée de la réserve de mémoire est partagée avec ce cache. - - - Size of &database cache - Taille du cache de la base de &données - - - Number of script &verification threads - Nombre de fils de &vérification de script - - - Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! - Chemin complet vers un %1 script compatible (par exemple, C:\Downloads\hwi.exe ou /Users/you/Downloads/hwi.py). Attention : les malwares peuvent voler vos pièces ! - - - Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. - Ouvrir automatiquement le port du client Bitcoin sur le routeur. Cela ne fonctionne que si votre routeur prend en charge PCP ou NAT-PMP. Le port externe peut être aléatoire. - - - Map port using PCP or NA&T-PMP - Mapper le port avec PCP ou NA&T-PMP - - - IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) - Adresse IP du mandataire (p. ex. IPv4 : 127.0.0.1 / IPv6 : ::1) - - - Shows if the supplied default SOCKS5 proxy is used to reach peers via this network type. - Indique si le mandataire SOCKS5 par défaut fourni est utilisé pour atteindre des pairs par ce type de réseau. - - - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu. - Quand la fenêtre est fermée, la réduire au lieu de quitter l’application. Si cette option est activée, l’application ne sera fermée qu’en sélectionnant Quitter dans le menu. - - - Font in the Overview tab: - Police de l’onglet Vue d’ensemble : - - - Options set in this dialog are overridden by the command line: - Les options définies dans cette boîte de dialogue sont remplacées par la ligne de commande : - - - Open the %1 configuration file from the working directory. - Ouvrir le fichier de configuration %1 du répertoire de travail. - - - Open Configuration File - Ouvrir le fichier de configuration - - - Reset all client options to default. - Réinitialiser toutes les options du client aux valeurs par défaut. - - - &Reset Options - &Réinitialiser les options - - - &Network - &Réseau - - - Prune &block storage to - Élaguer l’espace de stockage des &blocs jusqu’à - - - GB - Go - - - Reverting this setting requires re-downloading the entire blockchain. - L’annulation de ce paramètre exige de retélécharger la chaîne de blocs dans son intégralité. - - - MiB - Mio - - - Set the number of script verification threads. Negative values correspond to the number of cores you want to leave free to the system. - Tooltip text for Options window setting that sets the number of script verification threads. Explains that negative values mean to leave these many cores free to the system. - Définissez le nombre de fils de vérification de script. Les valeurs négatives correspondent au nombre de cœurs que vous voulez laisser disponibles pour le système. - - - (0 = auto, <0 = leave that many cores free) - (0 = auto, < 0 = laisser ce nombre de cœurs inutilisés) - - - This allows you or a third party tool to communicate with the node through command-line and JSON-RPC commands. - Tooltip text for Options window setting that enables the RPC server. - Ceci vous permet ou permet à un outil tiers de communiquer avec le nœud grâce à la ligne de commande ou des commandes JSON-RPC. - - - Enable R&PC server - An Options window setting to enable the RPC server. - Activer le serveur R&PC - - - W&allet - &Porte-monnaie - - - Whether to set subtract fee from amount as default or not. - Tooltip text for Options window setting that sets subtracting the fee from a sending amount as default. - Définissez s’il faut soustraire par défaut les frais du montant ou non. - - - Subtract &fee from amount by default - An Options window setting to set subtracting the fee from a sending amount as default. - Soustraire par défaut les &frais du montant - - - Enable coin &control features - Activer les fonctions de &contrôle des pièces - - - If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. - Si vous désactivé la dépense de la monnaie non confirmée, la monnaie d’une transaction ne peut pas être utilisée tant que cette transaction n’a pas reçu au moins une confirmation. Celai affecte aussi le calcul de votre solde. - - - &Spend unconfirmed change - &Dépenser la monnaie non confirmée - - - Enable &PSBT controls - An options window setting to enable PSBT controls. - Activer les contrôles &TBPS - - - Whether to show PSBT controls. - Tooltip text for options window setting that enables PSBT controls. - Affichez ou non les contrôles TBPS. - - - External Signer (e.g. hardware wallet) - Signataire externe (p. ex. porte-monnaie matériel) - - - &External signer script path - &Chemin du script signataire externe - - - Accept connections from outside. - Accepter les connexions provenant de l’extérieur. - - - Allow incomin&g connections - Permettre les connexions e&ntrantes - - - Connect to the Bitcoin network through a SOCKS5 proxy. - Se connecter au réseau Bitcoin par un mandataire SOCKS5. - - - &Connect through SOCKS5 proxy (default proxy): - Se &connecter par un mandataire SOCKS5 (mandataire par défaut) : - - - Proxy &IP: - &IP du mandataire : - - - &Port: - &Port : - - - Port of the proxy (e.g. 9050) - Port du mandataire (p. ex. 9050) - - - Used for reaching peers via: - Utilisé pour rejoindre les pairs par : - - - &Window - &Fenêtre - - - Show the icon in the system tray. - Afficher l’icône dans la zone de notification. - - - &Show tray icon - &Afficher l’icône dans la zone de notification - - - Show only a tray icon after minimizing the window. - Après réduction, n’afficher qu’une icône dans la zone de notification. - - - &Minimize to the tray instead of the taskbar - &Réduire dans la zone de notification au lieu de la barre des tâches - - - M&inimize on close - Ré&duire lors de la fermeture - - - &Display - &Affichage - - - User Interface &language: - &Langue de l’interface utilisateur : - - - The user interface language can be set here. This setting will take effect after restarting %1. - La langue de l’interface utilisateur peut être définie ici. Ce réglage sera pris en compte après redémarrage de %1. - - - &Unit to show amounts in: - &Unité d’affichage des montants : - - - Choose the default subdivision unit to show in the interface and when sending coins. - Choisir la sous-unité par défaut d’affichage dans l’interface et lors d’envoi de pièces. - - - Third-party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |. - Les URL de tiers (p. ex. un explorateur de blocs) qui apparaissent dans l’onglet des transactions comme éléments du menu contextuel. Dans l’URL, %s est remplacé par le hachage de la transaction. Les URL multiples sont séparées par une barre verticale |. - - - &Third-party transaction URLs - URL de transaction de $tiers - - - Whether to show coin control features or not. - Afficher ou non les fonctions de contrôle des pièces. - - - Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services. - Se connecter au réseau Bitcoin par un mandataire SOCKS5 séparé pour les services oignon de Tor. - - - Use separate SOCKS&5 proxy to reach peers via Tor onion services: - Utiliser un mandataire SOCKS&5 séparé pour atteindre les pairs par les services oignon de Tor : - - - &OK - &Valider - - - &Cancel - A&nnuler - - - Compiled without external signing support (required for external signing) - "External signing" means using devices such as hardware wallets. - Compilé sans prise en charge des signatures externes (requis pour la signature externe) - - - default - par défaut - - - none - aucune - - - Confirm options reset - Window title text of pop-up window shown when the user has chosen to reset options. - Confirmer la réinitialisation des options - - - Client restart required to activate changes. - Text explaining that the settings changed will not come into effect until the client is restarted. - Le redémarrage du client est exigé pour activer les changements. - - - Current settings will be backed up at "%1". - Text explaining to the user that the client's current settings will be backed up at a specific location. %1 is a stand-in argument for the backup location's path. - Les paramètres actuels vont être restaurés à "%1". - - - Client will be shut down. Do you want to proceed? - Text asking the user to confirm if they would like to proceed with a client shutdown. - Le client sera arrêté. Voulez-vous continuer ? - - - Configuration options - Window title text of pop-up box that allows opening up of configuration file. - Options de configuration - - - The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file. - Explanatory text about the priority order of instructions considered by client. The order from high to low being: command-line, configuration file, GUI settings. - Le fichier de configuration est utilisé pour indiquer aux utilisateurs experts quelles options remplacent les paramètres de l’IUG. De plus, toute option de ligne de commande remplacera ce fichier de configuration. - - - Continue - Poursuivre - - - Cancel - Annuler - - - Error - Erreur - - - The configuration file could not be opened. - Impossible d’ouvrir le fichier de configuration. - - - This change would require a client restart. - Ce changement demanderait un redémarrage du client. - - - The supplied proxy address is invalid. - L’adresse de serveur mandataire fournie est invalide. - - - - OptionsModel - - Could not read setting "%1", %2. - Impossible de lire le paramètre "%1", %2. - - - - OverviewPage - - Form - Formulaire - - - 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. - Les renseignements affichés peuvent être obsolètes. Votre porte-monnaie se synchronise automatiquement avec le réseau Bitcoin dès qu’une connexion est établie, mais ce processus n’est pas encore achevé. - - - Watch-only: - Juste-regarder : - - - Available: - Disponible : - - - Your current spendable balance - Votre solde actuel disponible - - - Pending: - En attente : - - - Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance - Total des transactions qui doivent encore être confirmées et qui ne sont pas prises en compte dans le solde disponible - - - Immature: - Immature : - - - Mined balance that has not yet matured - Le solde miné n’est pas encore mûr - - - Balances - Soldes - - - Total: - Total : - - - Your current total balance - Votre solde total actuel - - - Your current balance in watch-only addresses - Votre balance actuelle en adresses juste-regarder - - - Spendable: - Disponible : - - - Recent transactions - Transactions récentes - - - Unconfirmed transactions to watch-only addresses - Transactions non confirmées vers des adresses juste-regarder - - - Mined balance in watch-only addresses that has not yet matured - Le solde miné dans des adresses juste-regarder, qui n’est pas encore mûr - - - Current total balance in watch-only addresses - Solde total actuel dans des adresses juste-regarder - - - Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings->Mask values. - Le mode privé est activé dans l’onglet Vue d’ensemble. Pour afficher les montants, décocher Paramètres -> Masquer les montants. - - - - PSBTOperationsDialog - - PSBT Operations - Opération PSBT - - - Sign Tx - Signer la transaction - - - Broadcast Tx - Diffuser la transaction - - - Copy to Clipboard - Copier dans le presse-papiers - - - Save… - Enregistrer… - - - Close - Fermer - - - Failed to load transaction: %1 - Échec de chargement de la transaction : %1 - - - Failed to sign transaction: %1 - Échec de signature de la transaction : %1 - - - Cannot sign inputs while wallet is locked. - Impossible de signer des entrées quand le porte-monnaie est verrouillé. - - - Could not sign any more inputs. - Aucune autre entrée n’a pu être signée. - - - Signed %1 inputs, but more signatures are still required. - %1 entrées ont été signées, mais il faut encore d’autres signatures. - - - Signed transaction successfully. Transaction is ready to broadcast. - La transaction a été signée avec succès et est prête à être diffusée. - - - Unknown error processing transaction. - Erreur inconnue lors de traitement de la transaction - - - Transaction broadcast successfully! Transaction ID: %1 - La transaction a été diffusée avec succès. ID de la transaction : %1 - - - Transaction broadcast failed: %1 - Échec de diffusion de la transaction : %1 - - - PSBT copied to clipboard. - La TBSP a été copiée dans le presse-papiers. - - - Save Transaction Data - Enregistrer les données de la transaction - - - Partially Signed Transaction (Binary) - Expanded name of the binary PSBT file format. See: BIP 174. - Transaction signée partiellement (fichier binaire) - - - PSBT saved to disk. - La TBSP a été enregistrée sur le disque. - - - Sends %1 to %2 - Envoie %1 à %2 - - - own address - votre adresse - - - Unable to calculate transaction fee or total transaction amount. - Impossible de calculer les frais de la transaction ou le montant total de la transaction. - - - Pays transaction fee: - Paye des frais de transaction : - - - Total Amount - Montant total - - - or - ou - - - Transaction has %1 unsigned inputs. - La transaction a %1 entrées non signées. - - - Transaction is missing some information about inputs. - Il manque des renseignements sur les entrées dans la transaction. - - - Transaction still needs signature(s). - La transaction a encore besoin d’une ou de signatures. - - - (But no wallet is loaded.) - (Mais aucun porte-monnaie n’est chargé.) - - - (But this wallet cannot sign transactions.) - (Mais ce porte-monnaie ne peut pas signer de transactions.) - - - (But this wallet does not have the right keys.) - (Mais ce porte-monnaie n’a pas les bonnes clés.) - - - Transaction is fully signed and ready for broadcast. - La transaction est complètement signée et prête à être diffusée. - - - Transaction status is unknown. - L’état de la transaction est inconnu. - - - - PaymentServer - - Payment request error - Erreur de demande de paiement - - - Cannot start bitcoin: click-to-pay handler - Impossible de démarrer le gestionnaire de cliquer-pour-payer bitcoin: - - - URI handling - Gestion des URI - - - 'bitcoin://' is not a valid URI. Use 'bitcoin:' instead. - 'bitcoin://' n’est pas une URI valide. Utilisez plutôt 'bitcoin:'. - - - Cannot process payment request because BIP70 is not supported. -Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored. -If you are receiving this error you should request the merchant provide a BIP21 compatible URI. - Impossible de traiter la demande de paiement, car BIP70 n’est pas pris en charge. En raison des failles de sécurité généralisées de BIP70, il est fortement recommandé d’ignorer toute demande de marchand de changer de porte-monnaie. Si vous recevez cette erreur, vous devriez demander au marchand de vous fournir une URI compatible BIP21. - - - URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters. - L’URI ne peut pas être analysée. Cela peut être causé par une adresse Bitcoin invalide ou par des paramètres d’URI mal formés. - - - Payment request file handling - Gestion des fichiers de demande de paiement - - - - PeerTableModel - - User Agent - Title of Peers Table column which contains the peer's User Agent string. - Agent utilisateur - - - Peer - Title of Peers Table column which contains a unique number used to identify a connection. - Pair - - - Sent - Title of Peers Table column which indicates the total amount of network information we have sent to the peer. - Envoyé - - - Received - Title of Peers Table column which indicates the total amount of network information we have received from the peer. - Reçus - - - Address - Title of Peers Table column which contains the IP/Onion/I2P address of the connected peer. - Adresse - - - Network - Title of Peers Table column which states the network the peer connected through. - Réseau - - - Inbound - An Inbound Connection from a Peer. - Entrant - - - Outbound - An Outbound Connection to a Peer. - Sortant - - - - QRImageWidget - - &Save Image… - &Enregistrer l’image… - - - &Copy Image - &Copier l’image - - - Resulting URI too long, try to reduce the text for label / message. - L’URI résultante est trop longue. Essayez de réduire le texte de l’étiquette ou du message. - - - Error encoding URI into QR Code. - Erreur d’encodage de l’URI en code QR. - - - QR code support not available. - La prise en charge des codes QR n’est pas proposée. - - - Save QR Code - Enregistrer le code QR - - - PNG Image - Expanded name of the PNG file format. See: https://en.wikipedia.org/wiki/Portable_Network_Graphics. - Image PNG - - - - RPCConsole - - N/A - N.D. - - - Client version - Version du client - - - &Information - &Renseignements - - - General - Générales - - - Datadir - Répertoire des données - - - To specify a non-default location of the data directory use the '%1' option. - Pour indiquer un emplacement du répertoire des données différent de celui par défaut, utiliser l’option ’%1’. - - - Blocksdir - Répertoire des blocs - - - To specify a non-default location of the blocks directory use the '%1' option. - Pour indiquer un emplacement du répertoire des blocs différent de celui par défaut, utiliser l’option ’%1’. - - - Startup time - Heure de démarrage - - - Network - Réseau - - - Name - Nom - - - Number of connections - Nombre de connexions - - - Local Addresses - Adresses locales - - - Network addresses that your Bitcoin node is currently using to communicate with other nodes. - Adresses réseau que votre nœud Bitcoin utilise actuellement pour communiquer avec d’autres nœuds. - - - Block chain - Chaîne de blocs - - - Memory Pool - Réserve de mémoire - - - Current number of transactions - Nombre actuel de transactions - - - Memory usage - Utilisation de la mémoire - - - Wallet: - Porte-monnaie : - - - (none) - (aucun) - - - &Reset - &Réinitialiser - - - Received - Reçus - - - Sent - Envoyé - - - &Peers - &Pairs - - - Banned peers - Pairs bannis - - - Select a peer to view detailed information. - Sélectionnez un pair pour afficher des renseignements détaillés. - - - Hide Peers Detail - Cacher les détails des pairs - - - The transport layer version: %1 - La version de la couche de transport : %1 - - - Session ID - ID de session - - - Whether we relay transactions to this peer. - Si nous relayons des transactions à ce pair. - - - Transaction Relay - Relais de transaction - - - Starting Block - Bloc de départ - - - Synced Headers - En-têtes synchronisés - - - Synced Blocks - Blocs synchronisés - - - Last Transaction - Dernière transaction - - - The mapped Autonomous System used for diversifying peer selection. - Le système autonome mappé utilisé pour diversifier la sélection des pairs. - - - Mapped AS - SA mappé - - - Whether we relay addresses to this peer. - Tooltip text for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - Reliez ou non des adresses à ce pair. - - - Address Relay - Text title for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - Relais d’adresses - - - The total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Tooltip text for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Nombre total d'adresses reçues de ce pair qui ont été traitées (à l'exclusion des adresses qui ont été abandonnées en raison de la limitation du débit). - - - The total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Tooltip text for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Nombre total d'adresses reçues de ce pair qui ont été abandonnées (non traitées) en raison de la limitation du débit. - - - Addresses Processed - Text title for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Adresses traitées - - - Addresses Rate-Limited - Text title for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Adresses ciblées par la limite de débit - - - User Agent - Agent utilisateur - - - Node window - Fenêtre des nœuds - - - Current block height - Hauteur du bloc courant - - - Open the %1 debug log file from the current data directory. This can take a few seconds for large log files. - Ouvrir le fichier journal de débogage de %1 à partir du répertoire de données actuel. Cela peut prendre quelques secondes pour les fichiers journaux de grande taille. - - - Decrease font size - Diminuer la taille de police - - - Increase font size - Augmenter la taille de police - - - Permissions - Autorisations - - - The direction and type of peer connection: %1 - La direction et le type de la connexion au pair : %1 - - - The BIP324 session ID string in hex. - ID hexadécimale de la session BIP324. - - - The network protocol this peer is connected through: IPv4, IPv6, Onion, I2P, or CJDNS. - Le protocole réseau par lequel ce pair est connecté : IPv4, IPv6, Oignon, I2P ou CJDNS. - - - High bandwidth BIP152 compact block relay: %1 - Relais de blocs BIP152 compact à large bande passante : %1 - - - High Bandwidth - Large bande passante - - - Connection Time - Temps de connexion - - - Elapsed time since a novel block passing initial validity checks was received from this peer. - Temps écoulé depuis qu’un nouveau bloc qui a réussi les vérifications initiales de validité a été reçu par ce pair. - - - Last Block - Dernier bloc - - - Elapsed time since a novel transaction accepted into our mempool was received from this peer. - Tooltip text for the Last Transaction field in the peer details area. - Temps écoulé depuis qu’une nouvelle transaction acceptée dans notre réserve de mémoire a été reçue par ce pair. - - - Last Send - Dernier envoi - - - Last Receive - Dernière réception - - - Ping Time - Temps de ping - - - The duration of a currently outstanding ping. - La durée d’un ping en cours. - - - Ping Wait - Attente du ping - - - Min Ping - Ping min. - - - Time Offset - Décalage temporel - - - Last block time - Estampille temporelle du dernier bloc - - - &Open - &Ouvrir - - - &Network Traffic - Trafic &réseau - - - Totals - Totaux - - - Debug log file - Fichier journal de débogage - - - Clear console - Effacer la console - - - In: - Entrant : - - - Out: - Sortant : - - - Inbound: initiated by peer - Explanatory text for an inbound peer connection. - Entrant : établie par le pair - - - Outbound Full Relay: default - Explanatory text for an outbound peer connection that relays all network information. This is the default behavior for outbound connections. - Relais intégral sortant : par défaut - - - Outbound Block Relay: does not relay transactions or addresses - Explanatory text for an outbound peer connection that relays network information about blocks and not transactions or addresses. - Relais de bloc sortant : ne relaye ni transactions ni adresses - - - Outbound Manual: added using RPC %1 or %2/%3 configuration options - Explanatory text for an outbound peer connection that was established manually through one of several methods. The numbered arguments are stand-ins for the methods available to establish manual connections. - Manuelle sortante : ajoutée avec un RPC %1 ou les options de configuration %2/%3 - - - Outbound Feeler: short-lived, for testing addresses - Explanatory text for a short-lived outbound peer connection that is used to test the aliveness of known addresses. - Palpeur sortant : de courte durée, pour tester des adresses - - - Outbound Address Fetch: short-lived, for soliciting addresses - Explanatory text for a short-lived outbound peer connection that is used to request addresses from a peer. - Récupération d’adresse sortante : de courte durée, pour solliciter des adresses - - - detecting: peer could be v1 or v2 - Explanatory text for "detecting" transport type. - détection : paires pourrait être v1 ou v2 - - - v1: unencrypted, plaintext transport protocol - Explanatory text for v1 transport type. - v1: protocole de transport non chiffré en texte clair - - - v2: BIP324 encrypted transport protocol - Explanatory text for v2 transport type. - v2: Protocole de transport chiffré BIP324 - - - we selected the peer for high bandwidth relay - nous avons sélectionné le pair comme relais à large bande passante - - - the peer selected us for high bandwidth relay - le pair nous avons sélectionné comme relais à large bande passante - - - no high bandwidth relay selected - aucun relais à large bande passante n’a été sélectionné - - - &Copy address - Context menu action to copy the address of a peer. - &Copier l’adresse - - - &Disconnect - &Déconnecter - - - 1 &hour - 1 &heure - - - 1 d&ay - 1 &jour - - - 1 &week - 1 &semaine - - - 1 &year - 1 &an - - - &Copy IP/Netmask - Context menu action to copy the IP/Netmask of a banned peer. IP/Netmask is the combination of a peer's IP address and its Netmask. For IP address, see: https://en.wikipedia.org/wiki/IP_address. - &Copier l’IP, le masque réseau - - - &Unban - &Réhabiliter - - - Network activity disabled - L’activité réseau est désactivée - - - None - Aucun - - - Executing command without any wallet - Exécution de la commande sans aucun porte-monnaie - - - Node window - [%1] - Fenêtre des nœuds – [%1] - - - Executing command using "%1" wallet - Exécution de la commande en utilisant le porte-monnaie « %1 » - - - Welcome to the %1 RPC console. -Use up and down arrows to navigate history, and %2 to clear screen. -Use %3 and %4 to increase or decrease the font size. -Type %5 for an overview of available commands. -For more information on using this console, type %6. - -%7WARNING: 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.%8 - RPC console welcome message. Placeholders %7 and %8 are style tags for the warning content, and they are not space separated from the rest of the text intentionally. - Bienvenue dans la console RPC de %1. -Utilisez les touches de déplacement vers le haut et vers le bas pour parcourir l’historique et %2 pour effacer l’écran. -Utilisez %3 et %4 pour augmenter ou diminuer la taille de la police. -Tapez %5 pour un aperçu des commandes proposées. -Pour plus de précisions sur cette console, tapez %6. -%7AVERTISSEMENT : des escrocs sont à l’œuvre et demandent aux utilisateurs de taper des commandes ici, volant ainsi le contenu de leur porte-monnaie. N’utilisez pas cette console sans entièrement comprendre les ramifications d’une commande. %8 - - - Executing… - A console message indicating an entered command is currently being executed. - Éxécution… - - - (peer: %1) - (pair : %1) - - - via %1 - par %1 - - - Yes - Oui - - - No - Non - - - To - À - - - From - De - - - Ban for - Bannir pendant - - - Never - Jamais - - - Unknown - Inconnu - - - - ReceiveCoinsDialog - - &Amount: - &Montant : - - - &Label: - &Étiquette : - - - &Message: - M&essage : - - - 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. - Un message facultatif à joindre à la demande de paiement et qui sera affiché à l’ouverture de celle-ci. Note : Le message ne sera pas envoyé avec le paiement par le réseau Bitcoin. - - - An optional label to associate with the new receiving address. - Un étiquette facultative à associer à la nouvelle adresse de réception. - - - Use this form to request payments. All fields are <b>optional</b>. - Utiliser ce formulaire pour demander des paiements. Tous les champs sont <b>facultatifs</b>. - - - An optional amount to request. Leave this empty or zero to not request a specific amount. - Un montant facultatif à demander. Ne rien saisir ou un zéro pour ne pas demander de montant précis. - - - 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. - Une étiquette facultative à associer à la nouvelle adresse de réception (utilisée par vous pour identifier une facture). Elle est aussi jointe à la demande de paiement. - - - An optional message that is attached to the payment request and may be displayed to the sender. - Un message facultatif joint à la demande de paiement et qui peut être présenté à l’expéditeur. - - - &Create new receiving address - &Créer une nouvelle adresse de réception - - - Clear all fields of the form. - Effacer tous les champs du formulaire. - - - Clear - Effacer - - - Requested payments history - Historique des paiements demandés - - - Show the selected request (does the same as double clicking an entry) - Afficher la demande sélectionnée (comme double-cliquer sur une entrée) - - - Show - Afficher - - - Remove the selected entries from the list - Retirer les entrées sélectionnées de la liste - - - Remove - Retirer - - - Copy &URI - Copier l’&URI - - - &Copy address - &Copier l’adresse - - - Copy &label - Copier l’&étiquette - - - Copy &message - Copier le &message - - - Copy &amount - Copier le &montant - - - Not recommended due to higher fees and less protection against typos. - Non recommandé en raison de frais élevés et d'une faible protection contre les fautes de frappe. - - - Generates an address compatible with older wallets. - Génère une adresse compatible avec les anciens portefeuilles. - - - Generates a native segwit address (BIP-173). Some old wallets don't support it. - Génère une adresse segwit native (BIP-173). Certains anciens portefeuilles ne le supportent pas. - - - Bech32m (BIP-350) is an upgrade to Bech32, wallet support is still limited. - Bech32m (BIP-350) est une mise à jour de Bech32, la prise en charge du portefeuille est encore limitée. - - - Could not unlock wallet. - Impossible de déverrouiller le porte-monnaie. - - - Could not generate new %1 address - Impossible de générer la nouvelle adresse %1 - - - - ReceiveRequestDialog - - Request payment to … - Demander de paiement à… - - - Address: - Adresse : - - - Amount: - Montant : - - - Label: - Étiquette : - - - Message: - Message : - - - Wallet: - Porte-monnaie : - - - Copy &URI - Copier l’&URI - - - Copy &Address - Copier l’&adresse - - - &Verify - &Vérifier - - - Verify this address on e.g. a hardware wallet screen - Confirmer p. ex. cette adresse sur l’écran d’un porte-monnaie matériel - - - &Save Image… - &Enregistrer l’image… - - - Payment information - Renseignements de paiement - - - Request payment to %1 - Demande de paiement à %1 - - - - RecentRequestsTableModel - - Label - Étiquette - - - (no label) - (aucune étiquette) - - - (no message) - (aucun message) - - - (no amount requested) - (aucun montant demandé) - - - Requested - Demandée - - - - SendCoinsDialog - - Send Coins - Envoyer des pièces - - - Coin Control Features - Fonctions de contrôle des pièces - - - automatically selected - sélectionné automatiquement - - - Insufficient funds! - Les fonds sont insuffisants - - - Quantity: - Quantité : - - - Bytes: - Octets : - - - Amount: - Montant : - - - Fee: - Frais : - - - After Fee: - Après les frais : - - - Change: - Monnaie : - - - If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. - Si cette option est activée et l’adresse de monnaie est vide ou invalide, la monnaie sera envoyée vers une adresse nouvellement générée. - - - Custom change address - Adresse personnalisée de monnaie - - - Transaction Fee: - Frais de transaction : - - - 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. - L’utilisation de l’option « fallbackfee » (frais de repli) peut avoir comme effet d’envoyer une transaction qui prendra plusieurs heures ou jours pour être confirmée, ou qui ne le sera jamais. Envisagez de choisir vos frais manuellement ou attendez d’avoir validé l’intégralité de la chaîne. - - - Warning: Fee estimation is currently not possible. - Avertissement : L’estimation des frais n’est actuellement pas possible. - - - per kilobyte - par kilo-octet - - - Hide - Cacher - - - Recommended: - Recommandés : - - - Custom: - Personnalisés : - - - Send to multiple recipients at once - Envoyer à plusieurs destinataires à la fois - - - Add &Recipient - Ajouter un &destinataire - - - Clear all fields of the form. - Effacer tous les champs du formulaire. - - - Choose… - Choisir… - - - Hide transaction fee settings - Cacher les paramètres de frais de transaction - - - Specify a custom fee per kB (1,000 bytes) of the transaction's virtual size. - -Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satoshis per kvB" for a transaction size of 500 virtual bytes (half of 1 kvB) would ultimately yield a fee of only 50 satoshis. - Indiquer des frais personnalisés par Ko (1 000 octets) de la taille virtuelle de la transaction. - -Note : Les frais étant calculés par octet, un taux de frais de « 100 satoshis par Kov » pour une transaction d’une taille de 500 octets (la moitié de 1 Kov) donneront des frais de seulement 50 satoshis. - - - 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. - Quand le volume des transactions est inférieur à l’espace dans les blocs, les mineurs et les nœuds de relais peuvent imposer des frais minimaux. Il est correct de payer ces frais minimaux, mais soyez conscient que cette transaction pourrait n’être jamais confirmée si la demande en transactions de bitcoins dépassait la capacité de traitement du réseau. - - - A too low fee might result in a never confirming transaction (read the tooltip) - Si les frais sont trop bas, cette transaction pourrait n’être jamais confirmée (lire l’infobulle) - - - (Smart fee not initialized yet. This usually takes a few blocks…) - (Les frais intelligents ne sont pas encore initialisés. Cela prend habituellement quelques blocs…) - - - Confirmation time target: - Estimation du délai de confirmation : - - - Enable Replace-By-Fee - Activer Remplacer-par-des-frais - - - With Replace-By-Fee (BIP-125) you can increase a transaction's fee after it is sent. Without this, a higher fee may be recommended to compensate for increased transaction delay risk. - Avec Remplacer-par-des-frais (BIP-125), vous pouvez augmenter les frais de transaction après qu’elle est envoyée. Sans cela, des frais plus élevés peuvent être recommandés pour compenser le risque accru de retard transactionnel. - - - Clear &All - &Tout effacer - - - Balance: - Solde : - - - Confirm the send action - Confirmer l’action d’envoi - - - S&end - E&nvoyer - - - Copy quantity - Copier la quantité - - - Copy amount - Copier le montant - - - Copy fee - Copier les frais - - - Copy after fee - Copier après les frais - - - Copy bytes - Copier les octets - - - Copy change - Copier la monnaie - - - %1 (%2 blocks) - %1 (%2 blocs) - - - Sign on device - "device" usually means a hardware wallet. - Signer sur l’appareil externe - - - Connect your hardware wallet first. - Connecter d’abord le porte-monnaie matériel. - - - Set external signer script path in Options -> Wallet - "External signer" means using devices such as hardware wallets. - Définir le chemin script du signataire externe dans Options -> Porte-monnaie - - - Cr&eate Unsigned - Cr&éer une transaction non signée - - - Creates a Partially Signed Bitcoin Transaction (PSBT) for use with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet. - Crée une transaction Bitcoin signée partiellement (TBSP) à utiliser, par exemple, avec un porte-monnaie %1 hors ligne ou avec un porte-monnaie matériel compatible TBSP. - - - %1 to '%2' - %1 à '%2' - - - %1 to %2 - %1 à %2 - - - To review recipient list click "Show Details…" - Pour réviser la liste des destinataires, cliquez sur « Afficher les détails… » - - - Sign failed - Échec de signature - - - External signer not found - "External signer" means using devices such as hardware wallets. - Le signataire externe est introuvable - - - External signer failure - "External signer" means using devices such as hardware wallets. - Échec du signataire externe - - - Save Transaction Data - Enregistrer les données de la transaction - - - Partially Signed Transaction (Binary) - Expanded name of the binary PSBT file format. See: BIP 174. - Transaction signée partiellement (fichier binaire) - - - PSBT saved - Popup message when a PSBT has been saved to a file - La TBSP a été enregistrée - - - External balance: - Solde externe : - - - or - ou - - - You can increase the fee later (signals Replace-By-Fee, BIP-125). - Vous pouvez augmenter les frais ultérieurement (signale Remplacer-par-des-frais, BIP-125). - - - 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. - Text to inform a user attempting to create a transaction of their current options. At this stage, a user can only create a PSBT. This string is displayed when private keys are disabled and an external signer is not available. - Veuillez réviser votre proposition de transaction. Une transaction Bitcoin partiellement signée (TBSP) sera produite, que vous pourrez enregistrer ou copier puis signer avec, par exemple, un porte-monnaie %1 hors ligne ou avec un porte-monnaie matériel compatible TBSP. - - - %1 from wallet '%2' - %1 du porte-monnaie « %2 ». - - - Do you want to create this transaction? - Message displayed when attempting to create a transaction. Cautionary text to prompt the user to verify that the displayed transaction details represent the transaction the user intends to create. - Voulez-vous créer cette transaction ? - - - Please, review your transaction. You can create and send this transaction or create 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. - Text to inform a user attempting to create a transaction of their current options. At this stage, a user can send their transaction or create a PSBT. This string is displayed when both private keys and PSBT controls are enabled. - Veuillez réviser votre transaction. Vous pouvez créer et envoyer cette transaction ou créer une transaction Bitcoin partiellement signée (TBSP), que vous pouvez enregistrer ou copier, et ensuite avec laquelle signer, par ex., un porte-monnaie %1 hors ligne ou avec un porte-monnaie matériel compatible TBSP. - - - Please, review your transaction. - Text to prompt a user to review the details of the transaction they are attempting to send. - Veuillez vérifier votre transaction. - - - Transaction fee - Frais de transaction - - - Not signalling Replace-By-Fee, BIP-125. - Ne signale pas Remplacer-par-des-frais, BIP-125. - - - Total Amount - Montant total - - - Unsigned Transaction - PSBT copied - Caption of "PSBT has been copied" messagebox - Transaction non signée - - - The PSBT has been copied to the clipboard. You can also save it. - Le PSBT a été copié dans le presse-papiers. Vous pouvez également le sauvegarder. - - - PSBT saved to disk - PSBT sauvegardé sur le disque - - - Confirm send coins - Confirmer l’envoi de pièces - - - Watch-only balance: - Solde juste-regarder : - - - The recipient address is not valid. Please recheck. - L’adresse du destinataire est invalide. Veuillez la revérifier. - - - The amount to pay must be larger than 0. - Le montant à payer doit être supérieur à 0. - - - The amount exceeds your balance. - Le montant dépasse votre solde. - - - The total exceeds your balance when the %1 transaction fee is included. - Le montant dépasse votre solde quand les frais de transaction de %1 sont compris. - - - Duplicate address found: addresses should only be used once each. - Une adresse identique a été trouvée : chaque adresse ne devrait être utilisée qu’une fois. - - - Transaction creation failed! - Échec de création de la transaction - - - A fee higher than %1 is considered an absurdly high fee. - Des frais supérieurs à %1 sont considérés comme ridiculement élevés. - - - Estimated to begin confirmation within %n block(s). - - Début de confirmation estimé à %n bloc. - Début de confirmation estimé à %n blocs. - - - - Warning: Invalid Bitcoin address - Avertissement : L’adresse Bitcoin est invalide - - - Warning: Unknown change address - Avertissement : L’adresse de monnaie est inconnue - - - Confirm custom change address - Confirmer l’adresse personnalisée de monnaie - - - 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? - L’adresse que vous avez sélectionnée pour la monnaie ne fait pas partie de ce porte-monnaie. Les fonds de ce porte-monnaie peuvent en partie ou en totalité être envoyés vers cette adresse. Êtes-vous certain ? - - - (no label) - (aucune étiquette) - - - - SendCoinsEntry - - A&mount: - &Montant : - - - Pay &To: - &Payer à : - - - &Label: - &Étiquette : - - - Choose previously used address - Choisir une adresse utilisée précédemment - - - The Bitcoin address to send the payment to - L’adresse Bitcoin à laquelle envoyer le paiement - - - Paste address from clipboard - Collez l’adresse du presse-papiers - - - Remove this entry - Supprimer cette entrée - - - The amount to send in the selected unit - Le montant à envoyer dans l’unité sélectionnée - - - 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. - Les frais seront déduits du montant envoyé. Le destinataire recevra moins de bitcoins que le montant saisi dans le champ de montant. Si plusieurs destinataires sont sélectionnés, les frais seront partagés également. - - - S&ubtract fee from amount - S&oustraire les frais du montant - - - Use available balance - Utiliser le solde disponible - - - Message: - Message : - - - Enter a label for this address to add it to the list of used addresses - Saisir une étiquette pour cette adresse afin de l’ajouter à la liste d’adresses utilisées - - - 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. - Un message qui était joint à l’URI bitcoin: et qui sera stocké avec la transaction pour référence. Note : Ce message ne sera pas envoyé par le réseau Bitcoin. - - - - SendConfirmationDialog - - Send - Envoyer - - - Create Unsigned - Créer une transaction non signée - - - - SignVerifyMessageDialog - - Signatures - Sign / Verify a Message - Signatures – Signer ou vérifier un message - - - &Sign Message - &Signer un message - - - You can sign messages/agreements with your legacy (P2PKH) 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. - Vous pouvez signer des messages ou des accords avec vos anciennes adresses (P2PKH) pour prouver que vous pouvez recevoir des bitcoins à ces dernières. Ne signer rien de vague ou au hasard, car des attaques d’hameçonnage pourraient essayer de vous faire signer avec votre identité afin de l’usurper. Ne signez que des déclarations entièrement détaillées et que vous acceptez. - - - The Bitcoin address to sign the message with - L’adresse Bitcoin avec laquelle signer le message - - - Choose previously used address - Choisir une adresse utilisée précédemment - - - Paste address from clipboard - Collez l’adresse du presse-papiers - - - Enter the message you want to sign here - Saisir ici le message que vous voulez signer - - - Copy the current signature to the system clipboard - Copier la signature actuelle dans le presse-papiers - - - Sign the message to prove you own this Bitcoin address - Signer le message afin de prouver que vous détenez cette adresse Bitcoin - - - Sign &Message - Signer le &message - - - Reset all sign message fields - Réinitialiser tous les champs de signature de message - - - Clear &All - &Tout effacer - - - &Verify Message - &Vérifier un message - - - Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction! - Saisissez ci-dessous l’adresse du destinataire, le message (assurez-vous de copier fidèlement les retours à la ligne, les espaces, les tabulations, etc.) et la signature pour vérifier le message. Faites attention à ne pas déduire davantage de la signature que ce qui est contenu dans le message signé même, pour éviter d’être trompé par une attaque de l’intercepteur. Notez que cela ne fait que prouver que le signataire reçoit avec l’adresse et ne peut pas prouver la provenance d’une transaction. - - - The Bitcoin address the message was signed with - L’adresse Bitcoin avec laquelle le message a été signé - - - The signed message to verify - Le message signé à vérifier - - - The signature given when the message was signed - La signature donnée quand le message a été signé - - - Verify the message to ensure it was signed with the specified Bitcoin address - Vérifier le message pour s’assurer qu’il a été signé avec l’adresse Bitcoin indiquée - - - Verify &Message - Vérifier le &message - - - Reset all verify message fields - Réinitialiser tous les champs de vérification de message - - - Click "Sign Message" to generate signature - Cliquez sur « Signer le message » pour générer la signature - - - The entered address is invalid. - L’adresse saisie est invalide. - - - Please check the address and try again. - Veuillez vérifier l’adresse et réessayer. - - - The entered address does not refer to a legacy (P2PKH) key. Message signing for SegWit and other non-P2PKH address types is not supported in this version of %1. Please check the address and try again. - L’adresse saisie ne fait pas référence à une ancienne clé (P2PKH). La signature des messages n’est pas prise en charge pour SegWit ni pour les autres types d’adresses non P2PKH dans cette version de %1. Vérifiez l’adresse et réessayez. - - - Wallet unlock was cancelled. - Le déverrouillage du porte-monnaie a été annulé. - - - No error - Aucune erreur - - - Private key for the entered address is not available. - La clé privée pour l’adresse saisie n’est pas disponible. - - - Message signing failed. - Échec de signature du message. - - - Message signed. - Le message a été signé. - - - The signature could not be decoded. - La signature n’a pu être décodée. - - - Please check the signature and try again. - Veuillez vérifier la signature et réessayer. - - - The signature did not match the message digest. - La signature ne correspond pas au condensé du message. - - - Message verification failed. - Échec de vérification du message. - - - Message verified. - Le message a été vérifié. - - - - SplashScreen - - (press q to shutdown and continue later) - (appuyer sur q pour fermer et poursuivre plus tard) - - - press q to shutdown - Appuyer sur q pour fermer - - - - TrafficGraphWidget - - kB/s - Ko/s - - - - TransactionDesc - - conflicted with a transaction with %1 confirmations - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that conflicts with a confirmed transaction. - est en conflit avec une transaction ayant %1 confirmations - - - 0/unconfirmed, in memory pool - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is in the memory pool. - 0/non confirmé, dans la pool de mémoire - - - 0/unconfirmed, not in memory pool - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is not in the memory pool. - 0/non confirmé, pas dans la pool de mémoire - - - abandoned - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an abandoned transaction. - abandonnée - - - %1/unconfirmed - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in at least one block, but less than 6 blocks. - %1/non confirmée - - - Status - État - - - Generated - Générée - - - From - De - - - unknown - inconnue - - - To - À - - - own address - votre adresse - - - watch-only - juste-regarder - - - label - étiquette - - - Credit - Crédit - - - matures in %n more block(s) - - arrivera à maturité dans %n bloc - arrivera à maturité dans %n blocs - - - - not accepted - non acceptée - - - Debit - Débit - - - Total debit - Débit total - - - Total credit - Crédit total - - - Transaction fee - Frais de transaction - - - Net amount - Montant net - - - Comment - Commentaire - - - Transaction ID - ID de la transaction - - - Transaction total size - Taille totale de la transaction - - - Transaction virtual size - Taille virtuelle de la transaction - - - Output index - Index des sorties - - - %1 (Certificate was not verified) - %1 (ce certificat n’a pas été vérifié) - - - Merchant - Marchand - - - Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Les pièces générées doivent mûrir pendant %1 blocs avant de pouvoir être dépensées. Quand vous avez généré ce bloc, il a été diffusé sur le réseau pour être ajouté à la chaîne de blocs. Si son intégration à la chaîne échoue, son état sera modifié en « non acceptée » et il ne sera pas possible de le dépenser. Cela peut arriver occasionnellement si un autre nœud génère un bloc à quelques secondes du vôtre. - - - Debug information - Renseignements de débogage - - - Inputs - Entrées - - - Amount - Montant - - - true - vrai - - - false - faux - - - - TransactionDescDialog - - This pane shows a detailed description of the transaction - Ce panneau affiche une description détaillée de la transaction - - - Details for %1 - Détails de %1 - - - - TransactionTableModel - - Label - Étiquette - - - Unconfirmed - Non confirmée - - - Abandoned - Abandonnée - - - Confirming (%1 of %2 recommended confirmations) - Confirmation (%1 sur %2 confirmations recommandées) - - - Confirmed (%1 confirmations) - Confirmée (%1 confirmations) - - - Conflicted - En conflit - - - Immature (%1 confirmations, will be available after %2) - Immature (%1 confirmations, sera disponible après %2) - - - Generated but not accepted - Générée mais non acceptée - - - Received with - Reçue avec - - - Received from - Reçue de - - - Sent to - Envoyée à - - - Mined - Miné - - - watch-only - juste-regarder - - - (n/a) - (n.d) - - - (no label) - (aucune étiquette) - - - Transaction status. Hover over this field to show number of confirmations. - État de la transaction. Survoler ce champ avec la souris pour afficher le nombre de confirmations. - - - Date and time that the transaction was received. - Date et heure de réception de la transaction. - - - Type of transaction. - Type de transaction. - - - Whether or not a watch-only address is involved in this transaction. - Une adresse juste-regarder est-elle ou non impliquée dans cette transaction. - - - User-defined intent/purpose of the transaction. - Intention, but de la transaction défini par l’utilisateur. - - - Amount removed from or added to balance. - Le montant a été ajouté ou soustrait du solde. - - - - TransactionView - - All - Toutes - - - Today - Aujourd’hui - - - This week - Cette semaine - - - This month - Ce mois - - - Last month - Le mois dernier - - - This year - Cette année - - - Received with - Reçue avec - - - Sent to - Envoyée à - - - Mined - Miné - - - Other - Autres - - - Enter address, transaction id, or label to search - Saisir l’adresse, l’ID de transaction ou l’étiquette à chercher - - - Min amount - Montant min. - - - Range… - Plage… - - - &Copy address - &Copier l’adresse - - - Copy &label - Copier l’&étiquette - - - Copy &amount - Copier le &montant - - - Copy transaction &ID - Copier l’&ID de la transaction - - - Copy &raw transaction - Copier la transaction &brute - - - Copy full transaction &details - Copier tous les &détails de la transaction - - - &Show transaction details - &Afficher les détails de la transaction - - - Increase transaction &fee - Augmenter les &frais de transaction - - - A&bandon transaction - A&bandonner la transaction - - - &Edit address label - &Modifier l’adresse de l’étiquette - - - Show in %1 - Transactions table context menu action to show the selected transaction in a third-party block explorer. %1 is a stand-in argument for the URL of the explorer. - Afficher dans %1 - - - Export Transaction History - Exporter l’historique transactionnel - - - Comma separated file - Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. - Fichier séparé par des virgules - - - Confirmed - Confirmée - - - Watch-only - Juste-regarder - - - Label - Étiquette - - - Address - Adresse - - - ID - ID - - - Exporting Failed - Échec d’exportation - - - There was an error trying to save the transaction history to %1. - Une erreur est survenue lors de l’enregistrement de l’historique transactionnel vers %1. - - - Exporting Successful - L’exportation est réussie - - - The transaction history was successfully saved to %1. - L’historique transactionnel a été enregistré avec succès vers %1. - - - Range: - Plage : - - - to - à - - - - WalletFrame - - No wallet has been loaded. -Go to File > Open Wallet to load a wallet. -- OR - - Aucun porte-monnaie n’a été chargé. -Accédez à Fichier > Ouvrir un porte-monnaie pour en charger un. -– OU – - - - Create a new wallet - Créer un nouveau porte-monnaie - - - Error - Erreur - - - Unable to decode PSBT from clipboard (invalid base64) - Impossible de décoder la TBSP du presse-papiers (le Base64 est invalide) - - - Load Transaction Data - Charger les données de la transaction - - - Partially Signed Transaction (*.psbt) - Transaction signée partiellement (*.psbt) - - - PSBT file must be smaller than 100 MiB - Le fichier de la TBSP doit être inférieur à 100 Mio - - - Unable to decode PSBT - Impossible de décoder la TBSP - - - - WalletModel - - Send Coins - Envoyer des pièces - - - Fee bump error - Erreur d’augmentation des frais - - - Increasing transaction fee failed - Échec d’augmentation des frais de transaction - - - Do you want to increase the fee? - Asks a user if they would like to manually increase the fee of a transaction that has already been created. - Voulez-vous augmenter les frais ? - - - Current fee: - Frais actuels : - - - Increase: - Augmentation : - - - New fee: - Nouveaux frais : - - - 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. - Avertissement : Ceci pourrait payer les frais additionnel en réduisant les sorties de monnaie ou en ajoutant des entrées, si nécessaire. Une nouvelle sortie de monnaie pourrait être ajoutée si aucune n’existe déjà. Ces changements pourraient altérer la confidentialité. - - - Confirm fee bump - Confirmer l’augmentation des frais - - - Can't draft transaction. - Impossible de créer une ébauche de la transaction. - - - PSBT copied - La TBPS a été copiée - - - Fee-bump PSBT copied to clipboard - La TBSP des augmentations de frais a été copiée dans le presse-papiers. - - - Can't sign transaction. - Impossible de signer la transaction. - - - Could not commit transaction - Impossible de valider la transaction - - - Signer error - Erreur de signataire - - - Can't display address - Impossible d’afficher l’adresse - - - - WalletView - - &Export - &Exporter - - - Export the data in the current tab to a file - Exporter les données de l’onglet actuel vers un fichier - - - Backup Wallet - Sauvegarder le porte-monnaie - - - Wallet Data - Name of the wallet data file format. - Données du porte-monnaie - - - Backup Failed - Échec de sauvegarde - - - There was an error trying to save the wallet data to %1. - Une erreur est survenue lors de l’enregistrement des données du porte-monnaie vers %1. - - - Backup Successful - La sauvegarde est réussie - - - The wallet data was successfully saved to %1. - Les données du porte-monnaie ont été enregistrées avec succès vers %1. - - - Cancel - Annuler - - - - bitcoin-core - - The %s developers - Les développeurs de %s - - - %s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup. - %s est corrompu. Essayez l’outil bitcoin-wallet pour le sauver ou restaurez une sauvegarde. - - - %s failed to validate the -assumeutxo snapshot state. This indicates a hardware problem, or a bug in the software, or a bad software modification that allowed an invalid snapshot to be loaded. As a result of this, the node will shut down and stop using any state that was built on the snapshot, resetting the chain height from %d to %d. On the next restart, the node will resume syncing from %d without using any snapshot data. Please report this incident to %s, including how you obtained the snapshot. The invalid snapshot chainstate will be left on disk in case it is helpful in diagnosing the issue that caused this error. - %s a échoué à valider l'état instantané -assumeutxo. Cela indique un problème matériel, ou un bug dans le logiciel, ou une mauvaise modification du logiciel qui a permis de charger un instantané invalide. En conséquence, le nœud s'arrêtera et cessera d'utiliser tout état qui a été construit sur l'instantané, réinitialisant la hauteur de la chaîne de %d à %d. Au prochain redémarrage, le nœud reprendra la synchronisation à partir de %d sans utiliser de données d'instantané. Veuillez signaler cet incident à %s, en précisant comment vous avez obtenu l'instantané. L'état de chaîne d'instantané invalide sera conservé sur le disque au cas où il serait utile pour diagnostiquer le problème qui a causé cette erreur. - - - %s request to listen on port %u. This port is considered "bad" and thus it is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for details and a full list. - %s demande d'écouter sur le port %u. Ce port est considéré comme "mauvais" et il est donc peu probable qu'un pair s'y connecte. Voir doc/p2p-bad-ports.md pour plus de détails et une liste complète. - - - Cannot downgrade wallet from version %i to version %i. Wallet version unchanged. - Impossible de rétrograder le porte-monnaie de la version %i à la version %i. La version du porte-monnaie reste inchangée. - - - 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. - Impossible de mettre à niveau un porte-monnaie divisé non-HD de la version %i vers la version %i sans mise à niveau pour prendre en charge la réserve de clés antérieure à la division. Veuillez utiliser la version %i ou ne pas indiquer de version. - - - Disk space for %s may not accommodate the block files. Approximately %u GB of data will be stored in this directory. - L'espace disque %s peut ne pas être suffisant pour les fichiers en bloc. Environ %u Go de données seront stockés dans ce répertoire. - - - Distributed under the MIT software license, see the accompanying file %s or %s - Distribué sous la licence MIT d’utilisation d’un logiciel, consultez le fichier joint %s ou %s - - - Error loading wallet. Wallet requires blocks to be downloaded, and software does not currently support loading wallets while blocks are being downloaded out of order when using assumeutxo snapshots. Wallet should be able to load successfully after node sync reaches height %s - Erreur de chargement du portefeuille. Le portefeuille nécessite le téléchargement de blocs, et le logiciel ne prend pas actuellement en charge le chargement de portefeuilles lorsque les blocs sont téléchargés dans le désordre lors de l'utilisation de snapshots assumeutxo. Le portefeuille devrait pouvoir être chargé avec succès une fois que la synchronisation des nœuds aura atteint la hauteur %s - - - Error reading %s! Transaction data may be missing or incorrect. Rescanning wallet. - Erreur de lecture de %s : soit les données de la transaction manquent soit elles sont incorrectes. Réanalyse du porte-monnaie. - - - Error starting/committing db txn for wallet transactions removal process - Erreur de lancement, de validation de la transaction de base de données pour la suppression des transactions du portemonnaie - - - Error: Dumpfile format record is incorrect. Got "%s", expected "format". - Erreur : L’enregistrement du format du fichier de vidage est incorrect. Est « %s », mais « format » est attendu. - - - Error: Dumpfile identifier record is incorrect. Got "%s", expected "%s". - Erreur : L’enregistrement de l’identificateur du fichier de vidage est incorrect. Est « %s », mais « %s » est attendu. - - - Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s - Erreur : La version du fichier de vidage n’est pas prise en charge. Cette version de bitcoin-wallet ne prend en charge que les fichiers de vidage version 1. Le fichier de vidage obtenu est de la version %s. - - - Error: Legacy wallets only support the "legacy", "p2sh-segwit", and "bech32" address types - Erreur : les porte-monnaie hérités ne prennent en charge que les types d’adresse « legacy », « p2sh-segwit », et « bech32 » - - - Error: Unable to produce descriptors for this legacy wallet. Make sure to provide the wallet's passphrase if it is encrypted. - Erreur : Impossible de produire des descripteurs pour ce portefeuille existant. Veillez à fournir la phrase secrète du portefeuille s'il est crypté. - - - File %s already exists. If you are sure this is what you want, move it out of the way first. - Le fichier %s existe déjà. Si vous confirmez l’opération, déplacez-le avant. - - - Invalid or corrupt peers.dat (%s). If you believe this is a bug, please report it to %s. As a workaround, you can move the file (%s) out of the way (rename, move, or delete) to have a new one created on the next start. - peers.dat est invalide ou corrompu (%s). Si vous pensez que c’est un bogue, veuillez le signaler à %s. Pour y remédier, vous pouvez soit renommer, soit déplacer soit supprimer le fichier (%s) et un nouveau sera créé lors du prochain démarrage. - - - Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets - Une valeur invalide a été détectée pour « -wallet » ou pour « -nowallet ». « -wallet » nécessite une valeur de chaine alors que « -nowallet » n’accepte que « 1 » pour désactiver tous les portemonnaies - - - More than one onion bind address is provided. Using %s for the automatically created Tor onion service. - Plus d’une adresse oignon de liaison est indiquée. %s sera utilisée pour le service oignon de Tor créé automatiquement. - - - No dump file provided. To use createfromdump, -dumpfile=<filename> must be provided. - Aucun fichier de vidage n’a été indiqué. Pour utiliser createfromdump, -dumpfile=<filename> doit être indiqué. - - - No dump file provided. To use dump, -dumpfile=<filename> must be provided. - Aucun fichier de vidage n’a été indiqué. Pour utiliser dump, -dumpfile=<filename> doit être indiqué. - - - No wallet file format provided. To use createfromdump, -format=<format> must be provided. - Aucun format de fichier de porte-monnaie n’a été indiqué. Pour utiliser createfromdump, -format=<format> doit être indiqué. - - - Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. - L’option « -upnp » est définie, mais la prise en charge d’UPnP a été abandonnée dans la version 29.0. Envisagez de la remplacer par « -natpmp ». - - - Please contribute if you find %s useful. Visit %s for further information about the software. - Si vous trouvez %s utile, veuillez y contribuer. Pour de plus de précisions sur le logiciel, rendez-vous sur %s. - - - Prune configured below the minimum of %d MiB. Please use a higher number. - L’élagage est configuré au-dessous du minimum de %d Mio. Veuillez utiliser un nombre plus élevé. - - - Prune mode is incompatible with -reindex-chainstate. Use full -reindex instead. - Le mode Prune est incompatible avec -reindex-chainstate. Utilisez plutôt -reindex complet. - - - Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node) - Élagage : la dernière synchronisation de porte-monnaie va par-delà les données élaguées. Vous devez -reindex (réindexer, télécharger de nouveau toute la chaîne de blocs en cas de nœud élagué) - - - Rename of '%s' -> '%s' failed. You should resolve this by manually moving or deleting the invalid snapshot directory %s, otherwise you will encounter the same error again on the next startup. - La modification de '%s' -> '%s' a échoué. Vous devriez résoudre cela en déplaçant ou en supprimant manuellement le répertoire de snapshot invalide %s, sinon vous rencontrerez la même erreur à nouveau au prochain démarrage. - - - SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported - SQLiteDatabase : la version %d du schéma de porte-monnaie sqlite est inconnue. Seule la version %d est prise en charge - - - The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct - La base de données des blocs comprend un bloc qui semble provenir du futur. Cela pourrait être causé par la date et l’heure erronées de votre ordinateur. Ne reconstruisez la base de données des blocs que si vous êtes certain que la date et l’heure de votre ordinateur sont justes. - - - The transaction amount is too small to send after the fee has been deducted - Le montant de la transaction est trop bas pour être envoyé une fois que les frais ont été déduits - - - 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 - Cette erreur pourrait survenir si ce porte-monnaie n’a pas été fermé proprement et s’il a été chargé en dernier avec une nouvelle version de Berkeley DB. Si c’est le cas, veuillez utiliser le logiciel qui a chargé ce porte-monnaie en dernier. - - - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - Ceci est une préversion de test — son utilisation est entièrement à vos risques — ne l’utilisez pour miner ou pour des applications marchandes - - - This is the maximum transaction fee you pay (in addition to the normal fee) to prioritize partial spend avoidance over regular coin selection. - Les frais maximaux de transaction que vous payez (en plus des frais habituels) afin de prioriser une dépense non partielle plutôt qu’une sélection normale de pièces. - - - This is the transaction fee you may discard if change is smaller than dust at this level - Les frais de transaction que vous pouvez ignorer si la monnaie rendue est inférieure à la poussière à ce niveau - - - This is the transaction fee you may pay when fee estimates are not available. - Il s’agit des frais de transaction que vous pourriez payer si aucune estimation de frais n’est proposée. - - - Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments. - La taille totale de la chaîne de version de réseau (%i) dépasse la longueur maximale (%i). Réduire le nombre ou la taille de uacomments. - - - Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate. - Impossible de relire les blocs. Vous devrez reconstruire la base de données avec -reindex-chainstate. - - - Unknown wallet file format "%s" provided. Please provide one of "bdb" or "sqlite". - Le format de fichier porte-monnaie « %s » indiqué est inconnu. Veuillez soit indiquer « bdb » soit « sqlite ». - - - Unsupported category-specific logging level %1$s=%2$s. Expected %1$s=<category>:<loglevel>. Valid categories: %3$s. Valid loglevels: %4$s. - Niveau de journalisation spécifique à la catégorie non pris en charge %1$s=%2$s. Attendu %1$s=<catégorie>:<niveaudejournal>. Catégories valides : %3$s. Niveaux de journalisation valides : %4$s. - - - Unsupported chainstate database format found. Please restart with -reindex-chainstate. This will rebuild the chainstate database. - Le format de la base de données chainstate n'est pas supporté. Veuillez redémarrer avec -reindex-chainstate. Cela reconstruira la base de données chainstate. - - - Wallet created successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. - Portefeuille créé avec succès. Le type de portefeuille ancien est en cours de suppression et la prise en charge de la création et de l'ouverture des portefeuilles anciens sera supprimée à l'avenir. - - - Wallet loaded successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. Legacy wallets can be migrated to a descriptor wallet with migratewallet. - Portefeuille chargé avec succès. Le type de portefeuille existant est obsolète et la prise en charge de la création et de l'ouverture de portefeuilles existants sera supprimée à l'avenir. Les anciens portefeuilles peuvent être migrés vers un portefeuille descripteur avec migratewallet. - - - Warning: Dumpfile wallet format "%s" does not match command line specified format "%s". - Avertissement : Le format du fichier de vidage de porte-monnaie « %s » ne correspond pas au format « %s » indiqué dans la ligne de commande. - - - Warning: Private keys detected in wallet {%s} with disabled private keys - Avertissement : Des clés privées ont été détectées dans le porte-monnaie {%s} avec des clés privées désactivées - - - Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. - Avertissement : Nous ne semblons pas être en accord complet avec nos pairs. Une mise à niveau pourrait être nécessaire pour vous ou pour d’autres nœuds du réseau. - - - Witness data for blocks after height %d requires validation. Please restart with -reindex. - Les données témoin pour les blocs postérieurs à la hauteur %d exigent une validation. Veuillez redémarrer avec -reindex. - - - You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain - Vous devez reconstruire la base de données en utilisant -reindex afin de revenir au mode sans élagage. Ceci retéléchargera complètement la chaîne de blocs. - - - %s is set very high! - La valeur %s est très élevée - - - -maxmempool must be at least %d MB - -maxmempool doit être d’au moins %d Mo - - - Cannot obtain a lock on directory %s. %s is probably already running. - Impossible d’obtenir un verrou sur le dossier %s. %s fonctionne probablement déjà. - - - Cannot resolve -%s address: '%s' - Impossible de résoudre l’adresse -%s : « %s » - - - Cannot set -forcednsseed to true when setting -dnsseed to false. - Impossible de définir -forcednsseed comme vrai si -dnsseed est défini comme faux. - - - Cannot set -peerblockfilters without -blockfilterindex. - Impossible de définir -peerblockfilters sans -blockfilterindex - - - %s is set very high! Fees this large could be paid on a single transaction. - %s est très élevé ! Des frais aussi importants pourraient être payés sur une seule transaction. - - - Cannot provide specific connections and have addrman find outgoing connections at the same time. - Il est impossible d’indiquer des connexions précises et en même temps de demander à addrman de trouver les connexions sortantes. - - - Error loading %s: External signer wallet being loaded without external signer support compiled - Erreur de chargement de %s : le porte-monnaie signataire externe est chargé sans que la prise en charge de signataires externes soit compilée - - - Error reading %s! All keys read correctly, but transaction data or address metadata may be missing or incorrect. - Erreur de lecture de %s! Toutes les clés ont été lues correctement, mais les données de transaction ou les métadonnées d'adresse peuvent être manquantes ou incorrectes. - - - Error: Address book data in wallet cannot be identified to belong to migrated wallets - Erreur : Les données du carnet d'adresses du portefeuille ne peuvent pas être identifiées comme appartenant à des portefeuilles migrés - - - Error: Duplicate descriptors created during migration. Your wallet may be corrupted. - Erreur : Descripteurs en double créés pendant la migration. Votre portefeuille est peut-être corrompu. - - - Error: Transaction %s in wallet cannot be identified to belong to migrated wallets - Erreur : La transaction %s dans le portefeuille ne peut pas être identifiée comme appartenant aux portefeuilles migrés. - - - Failed to calculate bump fees, because unconfirmed UTXOs depend on enormous cluster of unconfirmed transactions. - Échec du calcul des frais de majoration, car les UTXO non confirmés dépendent d'un énorme groupe de transactions non confirmées. - - - Failed to remove snapshot chainstate dir (%s). Manually remove it before restarting. - - Échec de suppression du répertoire de l’instantané d’état de la chaîne (%s). Supprimez-le manuellement avant de redémarrer. - - - Failed to rename invalid peers.dat file. Please move or delete it and try again. - Échec de renommage du fichier peers.dat invalide. Veuillez le déplacer ou le supprimer, puis réessayer. - - - Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable %s. - L'estimation des frais a échoué. Fallbackfee est désactivé. Attendez quelques blocs ou activez %s. - - - Flushing block file to disk failed. This is likely the result of an I/O error. - Échec de vidage du fichier des blocs sur le disque, probablement à cause d’une erreur d’E/S. - - - Flushing undo file to disk failed. This is likely the result of an I/O error. - Échec de vidage du fichier d’annulation sur le disque, probablement à cause d’une erreur d’E/S. - - - Incompatible options: -dnsseed=1 was explicitly specified, but -onlynet forbids connections to IPv4/IPv6 - Options incompatibles : -dnsseed=1 a été explicitement spécifié, mais -onlynet interdit les connexions vers IPv4/IPv6 - - - Invalid amount for %s=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions) - Montant non valide pour %s=<amount> : '%s' (doit être au moins égal au minrelay fee de %s pour éviter les transactions bloquées) - - - Maximum transaction weight is less than transaction weight without inputs - Le poids maximal de la transaction est inférieur au poids de la transaction sans entrées - - - Maximum transaction weight is too low, can not accommodate change output - Le poids maximal de la transaction est trop faible et ne permet pas les sorties de monnaie - - - Outbound connections restricted to CJDNS (-onlynet=cjdns) but -cjdnsreachable is not provided - Connexions sortantes limitées à CJDNS (-onlynet=cjdns) mais -cjdnsreachable n'est pas fourni - - - Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is explicitly forbidden: -onion=0 - Connexions sortantes limitées à Tor (-onlynet=onion) mais le proxy pour atteindre le réseau Tor est explicitement interdit : -onion=0 - - - Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is not provided: none of -proxy, -onion or -listenonion is given - Connexions sortantes limitées à Tor (-onlynet=onion) mais le proxy pour atteindre le réseau Tor n'est pas fourni : aucun des paramètres -proxy, -onion ou -listenonion n'est donné - - - Outbound connections restricted to i2p (-onlynet=i2p) but -i2psam is not provided - Connexions sortantes limitées à i2p (-onlynet=i2p) mais -i2psam n'est pas fourni - - - Rename of '%s' -> '%s' failed. Cannot clean up the background chainstate leveldb directory. - Échec de renommage de « %s » en « %s ». Impossible de nettoyer le répertoire de la base de données d’état de chaîne d’arrière-plan. - - - Specified -blockmaxweight (%d) exceeds consensus maximum block weight (%d) - Le poids maximal de bloc -blockmaxweight indiqué (%d) dépasse le poids maximal de bloc du consensus (%d). - - - Specified -blockreservedweight (%d) exceeds consensus maximum block weight (%d) - Le poids réservé de bloc -blockreservedweight indiqué (%d) dépasse le poids maximal de bloc du consensus (%d). - - - Specified -blockreservedweight (%d) is lower than minimum safety value of (%d) - Le poids réservé de bloc -blockreservedweight indiqué (%d) est inférieur à la valeur minimale de sécurité de (%d) - - - The combination of the pre-selected inputs and the wallet automatic inputs selection exceeds the transaction maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - La combinaison des entrées présélectionnées et de la sélection automatique des entrées du porte-monnaie dépasse le poids maximal de la transaction. Essayez d’envoyer un montant inférieur ou de consolider manuellement les UTXO de votre porte-monnaie. - - - The inputs size exceeds the maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - La taille des entrées dépasse le poids maximum. Veuillez essayer d'envoyer un montant plus petit ou de consolider manuellement les UTXOs de votre portefeuille - - - The preselected coins total amount does not cover the transaction target. Please allow other inputs to be automatically selected or include more coins manually - Le montant total des pièces présélectionnées ne couvre pas l'objectif de la transaction. Veuillez permettre à d'autres entrées d'être sélectionnées automatiquement ou inclure plus de pièces manuellement - - - Transaction requires one destination of non-0 value, a non-0 feerate, or a pre-selected input - La transaction nécessite une destination d'une valeur non nulle, un ratio de frais non nul, ou une entrée présélectionnée. - - - UTXO snapshot failed to validate. Restart to resume normal initial block download, or try loading a different snapshot. - La validation de la snapshot UTXO a échoué. Redémarrez pour reprendre le téléchargement normal du bloc initial, ou essayez de charger une autre snapshot. - - - Unconfirmed UTXOs are available, but spending them creates a chain of transactions that will be rejected by the mempool - Les UTXO non confirmés sont disponibles, mais les dépenser crée une chaîne de transactions qui sera rejetée par le mempool - - - Unexpected legacy entry in descriptor wallet found. Loading wallet %s - -The wallet might have been tampered with or created with malicious intent. - - Une entrée héritée inattendue dans le portefeuille de descripteurs a été trouvée. Chargement du portefeuille %s - -Le portefeuille peut avoir été altéré ou créé avec des intentions malveillantes. - - - - Unrecognized descriptor found. Loading wallet %s - -The wallet might had been created on a newer version. -Please try running the latest software version. - - Descripteur non reconnu trouvé. Chargement du portefeuille %s - -Le portefeuille a peut-être été créé avec une version plus récente. -Veuillez essayer d'utiliser la dernière version du logiciel. - - - - Your computer's date and time appear to be more than %d minutes out of sync with the network, this may lead to consensus failure. After you've confirmed your computer's clock, this message should no longer appear when you restart your node. Without a restart, it should stop showing automatically after you've connected to a sufficient number of new outbound peers, which may take some time. You can inspect the `timeoffset` field of the `getpeerinfo` and `getnetworkinfo` RPC methods to get more info. - La date et l’heure de votre ordinateur semblent décalées de plus de %d minutes par rapport au réseau, ce qui peut entraîner un échec de consensus. Après avoir confirmé l’heure de votre ordinateur, ce message ne devrait plus s’afficher après redémarrage de votre nœud. Sans redémarrage, il devrait cesser de s’afficher automatiquement si vous vous connectez à suffisamment de nouveaux pairs sortants, ce qui peut prendre du temps. Pour plus de précisions, vous pouvez inspecter le champ `timeoffset` des méthodes RPC `getpeerinfo` et `getnetworkinfo`. - - - -Unable to cleanup failed migration - -Impossible de corriger l'échec de la migration - - - -Unable to restore backup of wallet. - -Impossible de restaurer la sauvegarde du portefeuille. - - - whitebind may only be used for incoming connections ("out" was passed) - « whitebind » ne peut être utilisé que pour les connexions entrantes (« out » a été passé) - - - A fatal internal error occurred, see debug.log for details: - Une erreur interne fatale est survenue. Pour plus de précisions, consultez debug.log : - - - Assumeutxo data not found for the given blockhash '%s'. - Les données Assumeutxo sont introuvables pour l’empreinte de bloc « %s » donnée. - - - Block verification was interrupted - La vérification des blocs a été interrompue - - - Cannot write to directory '%s'; check permissions. - Impossible d’écrire dans le dossier « %s » ; vérifiez les droits. - - - Config setting for %s only applied on %s network when in [%s] section. - Paramètre de configuration pour %s qui n’est appliqué sur le réseau %s que s’il se trouve dans la section [%s]. - - - Copyright (C) %i-%i - Tous droits réservés © %i à %i - - - Corrupt block found indicating potential hardware failure. - Un bloc corrompu a été détecté, ce qui indique une défaillance matérielle possible. - - - Corrupted block database detected - Une base de données des blocs corrompue a été détectée - - - Could not find asmap file %s - Le fichier asmap %s est introuvable - - - Could not parse asmap file %s - Impossible d’analyser le fichier asmap %s - - - Disk space is too low! - L’espace disque est trop faible - - - Done loading - Le chargement est terminé - - - Dump file %s does not exist. - Le fichier de vidage %s n’existe pas. - - - Elliptic curve cryptography sanity check failure. %s is shutting down. - Échec du contrôle d’intégrité de la cryptographie à courbe elliptique. Fermeture de %s. - - - Error creating %s - Erreur de création de %s - - - Error initializing block database - Erreur d’initialisation de la base de données des blocs - - - Error initializing wallet database environment %s! - Erreur d’initialisation de l’environnement de la base de données du porte-monnaie %s  - - - Error loading %s - Erreur de chargement de %s - - - Error loading %s: Private keys can only be disabled during creation - Erreur de chargement de %s : les clés privées ne peuvent être désactivées qu’à la création - - - Error loading %s: Wallet corrupted - Erreur de chargement de %s : le porte-monnaie est corrompu - - - Error loading %s: Wallet requires newer version of %s - Erreur de chargement de %s : le porte-monnaie exige une version plus récente de %s - - - Error loading block database - Erreur de chargement de la base de données des blocs - - - Error loading databases - Erreur de chargement des bases de données - - - Error opening block database - Erreur d’ouverture de la base de données des blocs - - - Error opening coins database - Erreur d’ouverture de la base de données des pièces - - - Error reading configuration file: %s - Erreur de lecture du fichier de configuration : %s - - - Error reading from database, shutting down. - Erreur de lecture de la base de données, fermeture en cours - - - Error reading next record from wallet database - Erreur de lecture de l’enregistrement suivant de la base de données du porte-monnaie - - - Error: Cannot extract destination from the generated scriptpubkey - Erreur : Impossible d'extraire la destination du scriptpubkey généré - - - Error: Couldn't create cursor into database - Erreur : Impossible de créer le curseur dans la base de données - - - Error: Disk space is low for %s - Erreur : Il reste peu d’espace disque sur %s - - - Error: Dumpfile checksum does not match. Computed %s, expected %s - Erreur : La somme de contrôle du fichier de vidage ne correspond pas. Calculée %s, attendue %s - - - Error: Failed to create new watchonly wallet - Erreur : Echec de la création d'un nouveau porte-monnaie Watchonly - - - Error: Got key that was not hex: %s - Erreur : La clé obtenue n’était pas hexadécimale : %s - - - Error: Got value that was not hex: %s - Erreur : La valeur obtenue n’était pas hexadécimale : %s - - - Error: Keypool ran out, please call keypoolrefill first - Erreur : La réserve de clés est épuisée, veuillez d’abord appeler « keypoolrefill » - - - Error: Missing checksum - Erreur : Aucune somme de contrôle n’est indiquée - - - Error: No %s addresses available. - Erreur : Aucune adresse %s n’est disponible. - - - Error: This wallet already uses SQLite - Erreur : Ce portefeuille utilise déjà SQLite - - - Error: This wallet is already a descriptor wallet - Erreur : Ce portefeuille est déjà un portefeuille de descripteurs - - - Error: Unable to begin reading all records in the database - Erreur : Impossible de commencer à lire tous les enregistrements de la base de données - - - Error: Unable to make a backup of your wallet - Erreur : Impossible d'effectuer une sauvegarde de votre portefeuille - - - Error: Unable to parse version %u as a uint32_t - Erreur : Impossible d’analyser la version %u en tant que uint32_t - - - Error: Unable to read all records in the database - Erreur : Impossible de lire tous les enregistrements de la base de données - - - Error: Unable to read wallet's best block locator record - Erreur : Impossible de lire l’enregistrement du meilleur bloc du porte-monnaie. - - - Error: Unable to remove watchonly address book data - Erreur : Impossible de supprimer les données du carnet d'adresses en mode veille - - - Error: Unable to write data to disk for wallet %s - Erreur : Impossible d’écrire les données sur le disque pour le portemonnaie %s - - - Error: Unable to write record to new wallet - Erreur : Impossible d’écrire l’enregistrement dans le nouveau porte-monnaie - - - Error: Unable to write solvable wallet best block locator record - Erreur : Impossible d’écrire l’enregistrement du localisateur du meilleur bloc soluble du porte-monnaie - - - Error: Unable to write watchonly wallet best block locator record - Erreur : Impossible d’écrire l’enregistrement du localisateur du meilleur bloc du porte-monnaie juste-regarder - - - Error: database transaction cannot be executed for wallet %s - Erreur ; La transaction de la base de données ne peut pas être exécutée pour le porte-monnaie %s - - - Failed to connect best block (%s). - Échec de connexion du meilleur bloc (%s). - - - Failed to disconnect block. - Échec de déconnexion du bloc. - - - Failed to listen on any port. Use -listen=0 if you want this. - Échec d'écoute sur tous les ports. Si cela est voulu, utiliser -listen=0. - - - Failed to read block. - Échec de lecture du bloc. - - - Failed to rescan the wallet during initialization - Échec de réanalyse du porte-monnaie lors de l’initialisation - - - Failed to start indexes, shutting down.. - Échec du démarrage des index, arrêt. - - - Failed to verify database - Échec de vérification de la base de données - - - Failed to write block. - Échec d’écriture du bloc. - - - Failed to write to block index database. - Échec d’écriture dans la base de données d’index des blocs. - - - Failed to write to coin database. - Échec d’écriture dans la base de données des pièces. - - - Failed to write undo data. - Échec d’écriture des données d’annulation. - - - Failure removing transaction: %s - Échec de suppression de la transaction :%s - - - Fee rate (%s) is lower than the minimum fee rate setting (%s) - Le taux de frais (%s) est inférieur au taux minimal de frais défini (%s) - - - Ignoring duplicate -wallet %s. - Ignore -wallet %s en double. - - - Importing… - Importation… - - - Incorrect or no genesis block found. Wrong datadir for network? - Bloc de genèse incorrect ou introuvable. Mauvais datadir pour le réseau ? - - - Initialization sanity check failed. %s is shutting down. - Échec d’initialisation du test de cohérence. %s est en cours de fermeture. - - - Input not found or already spent - L’entrée est introuvable ou a déjà été dépensée - - - Insufficient dbcache for block verification - Insuffisance de dbcache pour la vérification des blocs - - - Insufficient funds - Les fonds sont insuffisants - - - Invalid -i2psam address or hostname: '%s' - L’adresse ou le nom d’hôte -i2psam est invalide : « %s » - - - Invalid -onion address or hostname: '%s' - L’adresse ou le nom d’hôte -onion est invalide : « %s » - - - Invalid -proxy address or hostname: '%s' - L’adresse ou le nom d’hôte -proxy est invalide : « %s » - - - Invalid P2P permission: '%s' - L’autorisation P2P est invalide : « %s » - - - Invalid amount for %s=<amount>: '%s' (must be at least %s) - Montant non valide pour %s=<amount> : '%s' (doit être au moins %s) - - - Invalid amount for %s=<amount>: '%s' - Montant non valide pour %s=<amount> : '%s' - - - Invalid amount for -%s=<amount>: '%s' - Le montant est invalide pour -%s=<amount> : « %s » - - - Invalid netmask specified in -whitelist: '%s' - Le masque réseau indiqué dans -whitelist est invalide : « %s » - - - Invalid port specified in %s: '%s' - Port non valide spécifié dans %s: '%s' - - - Invalid pre-selected input %s - Entrée présélectionnée non valide %s - - - Listening for incoming connections failed (listen returned error %s) - L'écoute des connexions entrantes a échoué ( l'écoute a renvoyé une erreur %s) - - - Loading P2P addresses… - Chargement des adresses P2P… - - - Loading banlist… - Chargement de la liste d’interdiction… - - - Loading block index… - Chargement de l’index des blocs… - - - Loading wallet… - Chargement du porte-monnaie… - - - Maximum transaction weight must be between %d and %d - Le poids maximal de la transaction doit être compris entre %d et %d - - - Missing amount - Le montant manque - - - Missing solving data for estimating transaction size - Il manque des données de résolution pour estimer la taille de la transaction - - - Need to specify a port with -whitebind: '%s' - Un port doit être indiqué avec -whitebind : « %s » - - - No addresses available - Aucune adresse n’est disponible - - - Not found pre-selected input %s - Entrée présélectionnée introuvable %s - - - Not solvable pre-selected input %s - Entrée présélectionnée non solvable %s - - - Only direction was set, no permissions: '%s' - Seule la direction a été définie, sans permissions : « %s » - - - Prune cannot be configured with a negative value. - L’élagage ne peut pas être configuré avec une valeur négative - - - Prune mode is incompatible with -txindex. - Le mode élagage n’est pas compatible avec -txindex - - - Pruning blockstore… - Élagage du magasin de blocs… - - - Reducing -maxconnections from %d to %d, because of system limitations. - Réduction de -maxconnections de %d à %d, due aux restrictions du système. - - - Replaying blocks… - Relecture des blocs… - - - Rescanning… - Réanalyse… - - - SQLiteDatabase: Failed to execute statement to verify database: %s - SQLiteDatabase : échec d’exécution de l’instruction pour vérifier la base de données : %s - - - SQLiteDatabase: Failed to prepare statement to verify database: %s - SQLiteDatabase : échec de préparation de l’instruction pour vérifier la base de données : %s - - - SQLiteDatabase: Failed to read database verification error: %s - SQLiteDatabase : échec de lecture de l’erreur de vérification de la base de données : %s - - - SQLiteDatabase: Unexpected application id. Expected %u, got %u - SQLiteDatabase : l’ID de l’application est inattendu. %u attendu, %u retourné - - - Section [%s] is not recognized. - La section [%s] n’est pas reconnue - - - Signer did not echo address - Le signataire n’a pas fait écho à l’adresse - - - Signer echoed unexpected address %s - Le signataire a renvoyé une adresse inattendue %s - - - Signer returned error: %s - Le signataire a renvoyé une erreur : %s - - - Signing transaction failed - Échec de signature de la transaction - - - Specified -walletdir "%s" does not exist - Le -walletdir indiqué « %s » n’existe pas - - - Specified -walletdir "%s" is a relative path - Le -walletdir indiqué « %s » est un chemin relatif - - - Specified -walletdir "%s" is not a directory - Le -walletdir indiqué « %s » n’est pas un répertoire - - - Specified blocks directory "%s" does not exist. - Le répertoire des blocs indiqué « %s » n’existe pas - - - Specified data directory "%s" does not exist. - Le répertoire de données spécifié "%s" n'existe pas. - - - Starting network threads… - Démarrage des processus réseau… - - - System error while flushing: %s - Erreur système lors du vidage : %s - - - System error while loading external block file: %s - Erreur système lors du chargement d’un fichier de blocs externe : %s - - - System error while saving block to disk: %s - Erreur système lors de l’enregistrement du bloc sur le disque : %s - - - The source code is available from %s. - Le code source est publié sur %s. - - - The specified config file %s does not exist - Le fichier de configuration indiqué %s n’existe pas - - - The transaction amount is too small to pay the fee - Le montant de la transaction est trop bas pour que les frais soient payés - - - The transactions removal process can only be executed within a db txn - Le processus de suppression des transactions ne peut être exécuté que dans une transaction .de base de données - - - The wallet will avoid paying less than the minimum relay fee. - Le porte-monnaie évitera de payer moins que les frais minimaux de relais. - - - There is no ScriptPubKeyManager for this address - Il n’y a pas de « ScriptPubKeyManager » pour cette adresse. - - - This is experimental software. - Ce logiciel est expérimental. - - - This is the minimum transaction fee you pay on every transaction. - Il s’agit des frais minimaux que vous payez pour chaque transaction. - - - This is the transaction fee you will pay if you send a transaction. - Il s’agit des frais minimaux que vous payerez si vous envoyez une transaction. - - - Transaction %s does not belong to this wallet - La transaction %s n’appartient pas à ce porte-monnaie - - - Transaction amount too small - Le montant de la transaction est trop bas - - - Transaction amounts must not be negative - Les montants des transactions ne doivent pas être négatifs - - - Transaction change output index out of range - L’index des sorties de monnaie des transactions est hors échelle - - - Transaction must have at least one recipient - La transaction doit comporter au moins un destinataire - - - Transaction needs a change address, but we can't generate it. - Une adresse de monnaie est nécessaire à la transaction, mais nous ne pouvons pas la générer. - - - Transaction too large - La transaction est trop grosse - - - Unable to bind to %s on this computer (bind returned error %s) - Impossible de se lier à %s sur cet ordinateur (la liaison a retourné l’erreur %s) - - - Unable to bind to %s on this computer. %s is probably already running. - Impossible de se lier à %s sur cet ordinateur. %s fonctionne probablement déjà - - - Unable to create the PID file '%s': %s - Impossible de créer le fichier PID « %s » : %s - - - Unable to find UTXO for external input - Impossible de trouver l'UTXO pour l'entrée externe - - - Unable to generate initial keys - Impossible de générer les clés initiales - - - Unable to generate keys - Impossible de générer les clés - - - Unable to open %s for writing - Impossible d’ouvrir %s en écriture - - - Unable to parse -maxuploadtarget: '%s' - Impossible d’analyser -maxuploadtarget : « %s » - - - Unable to start HTTP server. See debug log for details. - Impossible de démarrer le serveur HTTP. Consulter le journal de débogage pour plus de précisions. - - - Unable to unload the wallet before migrating - Impossible de vider le portefeuille avant la migration - - - Unknown -blockfilterindex value %s. - La valeur -blockfilterindex %s est inconnue. - - - Unknown address type '%s' - Le type d’adresse « %s » est inconnu - - - Unknown change type '%s' - Le type de monnaie « %s » est inconnu - - - Unknown network specified in -onlynet: '%s' - Un réseau inconnu est indiqué dans -onlynet : « %s » - - - Unknown new rules activated (versionbit %i) - Les nouvelles règles inconnues sont activées (versionbit %i) - - - Unrecognised option "%s" provided in -test=<option>. - Une option non reconnue « %s » a été indiquée dans -test=<option>. - - - Unsupported global logging level %s=%s. Valid values: %s. - Niveau de journalisation global non pris en charge %s=%s. Valeurs valides : %s. - - - Wallet file creation failed: %s - Échec de création du fichier du porte-monnaie : %s - - - acceptstalefeeestimates is not supported on %s chain. - acceptstalefeeestimates n'est pas pris en charge sur la chaîne %s. - - - Unsupported logging category %s=%s. - La catégorie de journalisation %s=%s n’est pas prise en charge - - - Do you want to rebuild the databases now? - Voulez-vous reconstruire les bases de données maintenant ? - - - Error: Could not add watchonly tx %s to watchonly wallet - Erreur : Impossible d’ajouter la transaction juste-regarder %s au portefeuille juste-regarder - - - Error: Could not delete watchonly transactions. - Erreur : Impossible d’effacer les transactions juste-regarder. - - - Error: Wallet does not exist - Erreur : Le portemonnaie n’existe pas - - - Error: cannot remove legacy wallet records - Erreur : Impossible de supprimer les enregistrements d’anciens portemonnaies - - - Not enough file descriptors available. %d available, %d required. - Trop peu de descripteurs de fichiers sont proposés. %d proposés, %d requis - - - User Agent comment (%s) contains unsafe characters. - Le commentaire de l’agent utilisateur (%s) comporte des caractères dangereux - - - Verifying blocks… - Vérification des blocs… - - - Verifying wallet(s)… - Vérification des porte-monnaie… - - - Wallet needed to be rewritten: restart %s to complete - Le porte-monnaie devait être réécrit : redémarrer %s pour terminer l’opération. - - - Settings file could not be read - Impossible de lire le fichier des paramètres - - - Settings file could not be written - Impossible d’écrire le fichier de paramètres - - - \ No newline at end of file diff --git a/src/qt/locale/bitcoin_fr_LU.ts b/src/qt/locale/bitcoin_fr_LU.ts deleted file mode 100644 index cf77a0360bea..000000000000 --- a/src/qt/locale/bitcoin_fr_LU.ts +++ /dev/null @@ -1,5093 +0,0 @@ - - - AddressBookPage - - Right-click to edit address or label - Clic droit pour modifier l'adresse ou l'étiquette - - - Create a new address - Créer une nouvelle adresse - - - &New - &Nouvelle - - - Copy the currently selected address to the system clipboard - Copier l’adresse sélectionnée actuellement dans le presse-papiers - - - &Copy - &Copier - - - C&lose - &Fermer - - - Delete the currently selected address from the list - Supprimer l’adresse sélectionnée actuellement de la liste - - - Enter address or label to search - Saisir une adresse ou une étiquette à rechercher - - - Export the data in the current tab to a file - Exporter les données de l’onglet actuel vers un fichier - - - &Export - &Exporter - - - &Delete - &Supprimer - - - Choose the address to send coins to - Choisir l’adresse à laquelle envoyer des pièces - - - Choose the address to receive coins with - Choisir l’adresse avec laquelle recevoir des pièces - - - C&hoose - C&hoisir - - - These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Ce sont vos adresses Bitcoin pour envoyer des paiements. Vérifiez toujours le montant et l’adresse du destinataire avant d’envoyer des pièces. - - - These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. -Signing is only possible with addresses of the type 'legacy'. - Il s'agit de vos adresses Bitcoin pour la réception des paiements. Utilisez le bouton "Créer une nouvelle adresse de réception" dans l'onglet "Recevoir" pour créer de nouvelles adresses. -La signature n'est possible qu'avec les adresses de type "patrimoine". - - - &Copy Address - &Copier l’adresse - - - Copy &Label - Copier l’é&tiquette - - - &Edit - &Modifier - - - Export Address List - Exporter la liste d’adresses - - - Comma separated file - Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. - Fichier séparé par des virgules - - - There was an error trying to save the address list to %1. Please try again. - An error message. %1 is a stand-in argument for the name of the file we attempted to save to. - Une erreur est survenue lors de l'enregistrement de la liste d'adresses vers %1. Veuillez réessayer plus tard. - - - Receiving addresses - %1 - Adresses de réceptions - %1 - - - Exporting Failed - Échec d’exportation - - - - AddressTableModel - - Label - Étiquette - - - Address - Adresse - - - (no label) - (aucune étiquette) - - - - AskPassphraseDialog - - Passphrase Dialog - Fenêtre de dialogue de la phrase de passe - - - Enter passphrase - Saisir la phrase de passe - - - New passphrase - Nouvelle phrase de passe - - - Repeat new passphrase - Répéter la phrase de passe - - - Show passphrase - Afficher la phrase de passe - - - Encrypt wallet - Chiffrer le porte-monnaie - - - This operation needs your wallet passphrase to unlock the wallet. - Cette opération nécessite votre phrase de passe pour déverrouiller le porte-monnaie. - - - Unlock wallet - Déverrouiller le porte-monnaie - - - Change passphrase - Changer la phrase de passe - - - Confirm wallet encryption - Confirmer le chiffrement du porte-monnaie - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! - Avertissement : Si vous chiffrez votre porte-monnaie et perdez votre phrase de passe, vous <b>PERDREZ TOUS VOS BITCOINS</b> ! - - - Are you sure you wish to encrypt your wallet? - Voulez-vous vraiment chiffrer votre porte-monnaie ? - - - Wallet encrypted - Le porte-monnaie est chiffré - - - Enter the new passphrase for the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. - Saisissez la nouvelle phrase de passe du porte-monnaie.<br/>Veuillez utiliser une phrase de passe composée de <b>dix caractères aléatoires ou plus</b>, ou de <b>huit mots ou plus</b>. - - - Enter the old passphrase and new passphrase for the wallet. - Saisir l’ancienne puis la nouvelle phrase de passe du porte-monnaie. - - - Continue - Poursuivre - - - Back - Retour - - - Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. - N’oubliez pas que le chiffrement de votre porte-monnaie ne peut pas protéger entièrement vos bitcoins contre le vol par des programmes malveillants qui infecteraient votre ordinateur. - - - Wallet to be encrypted - Porte-monnaie à chiffrer - - - Your wallet is about to be encrypted. - Votre porte-monnaie est sur le point d’être chiffré. - - - Your wallet is now encrypted. - Votre porte-monnaie est désormais chiffré. - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANT : Toutes les sauvegardes précédentes du fichier de votre porte-monnaie devraient être remplacées par le fichier du porte-monnaie chiffré nouvellement généré. Pour des raisons de sécurité, les sauvegardes précédentes de votre fichier de porte-monnaie non chiffré deviendront inutilisables dès que vous commencerez à utiliser le nouveau porte-monnaie chiffré. - - - Wallet encryption failed - Échec de chiffrement du porte-monnaie - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Le chiffrement du porte-monnaie a échoué en raison d’une erreur interne. Votre porte-monnaie n’a pas été chiffré. - - - The supplied passphrases do not match. - Les phrases de passe saisies ne correspondent pas. - - - Wallet unlock failed - Échec de déverrouillage du porte-monnaie - - - The passphrase entered for the wallet decryption was incorrect. - La phrase de passe saisie pour déchiffrer le porte-monnaie était erronée. - - - The passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. If this is successful, please set a new passphrase to avoid this issue in the future. - La phrase secrète saisie pour le décryptage du portefeuille est incorrecte. Elle contient un caractère nul (c'est-à-dire un octet de zéro). Si la phrase secrète a été définie avec une version de ce logiciel antérieure à la version 25.0, veuillez réessayer en ne saisissant que les caractères jusqu'au premier caractère nul (non compris). Si vous y parvenez, définissez une nouvelle phrase secrète afin d'éviter ce problème à l'avenir. - - - Wallet passphrase was successfully changed. - La phrase de passe du porte-monnaie a été modifiée avec succès. - - - Passphrase change failed - Le changement de phrase secrète a échoué - - - The old passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. - L'ancienne phrase secrète introduite pour le décryptage du portefeuille est incorrecte. Elle contient un caractère nul (c'est-à-dire un octet de zéro). Si la phrase secrète a été définie avec une version de ce logiciel antérieure à la version 25.0, veuillez réessayer en ne saisissant que les caractères jusqu'au premier caractère nul (non compris). - - - Warning: The Caps Lock key is on! - Avertissement : La touche Verr. Maj. est activée - - - - BanTableModel - - IP/Netmask - IP/masque réseau - - - Banned Until - Banni jusqu’au - - - - BitcoinApplication - - Settings file %1 might be corrupt or invalid. - Le fichier de paramètres %1 est peut-être corrompu ou non valide. - - - Runaway exception - Exception excessive - - - A fatal error occurred. %1 can no longer continue safely and will quit. - Une erreur fatale est survenue. %1 ne peut plus poursuivre de façon sûre et va s’arrêter. - - - Internal error - Eurrer interne - - - An internal error occurred. %1 will attempt to continue safely. This is an unexpected bug which can be reported as described below. - Une erreur interne est survenue. %1 va tenter de poursuivre avec sécurité. Il s’agit d’un bogue inattendu qui peut être signalé comme décrit ci-dessous. - - - - QObject - - Do you want to reset settings to default values, or to abort without making changes? - Explanatory text shown on startup when the settings file cannot be read. Prompts user to make a choice between resetting or aborting. - Voulez-vous réinitialiser les paramètres à leur valeur par défaut ou abandonner sans aucun changement ? - - - A fatal error occurred. Check that settings file is writable, or try running with -nosettings. - Explanatory text shown on startup when the settings file could not be written. Prompts user to check that we have the ability to write to the file. Explains that the user has the option of running without a settings file. - Une erreur fatale est survenue. Vérifiez que le fichier des paramètres est modifiable ou essayer d’exécuter avec -nosettings. - - - Error: %1 - Erreur : %1 - - - %1 didn't yet exit safely… - %1 ne s’est pas encore fermer en toute sécurité… - - - unknown - inconnue - - - Embedded "%1" - Intégré « %1 » - - - Default system font "%1" - Police système par défaut « %1 » - - - Custom… - Persnnalisé… - - - Amount - Montant - - - Enter a Bitcoin address (e.g. %1) - Saisir une adresse Bitcoin (p. ex. %1) - - - Unroutable - Non routable - - - Inbound - An inbound connection from a peer. An inbound connection is a connection initiated by a peer. - Entrant - - - Outbound - An outbound connection to a peer. An outbound connection is a connection initiated by us. - Sortant - - - Full Relay - Peer connection type that relays all network information. - Relais intégral - - - Block Relay - Peer connection type that relays network information about blocks and not transactions or addresses. - Relais de blocs - - - Manual - Peer connection type established manually through one of several methods. - Manuelle - - - Feeler - Short-lived peer connection type that tests the aliveness of known addresses. - Palpeur - - - Address Fetch - Short-lived peer connection type that solicits known addresses from a peer. - Récupération d’adresses - - - %1 d - %1 j - - - %1 m - %1 min - - - None - Aucun - - - N/A - N.D. - - - %n second(s) - - %n seconde - %n secondes - - - - %n minute(s) - - %n minute - %n minutes - - - - %n hour(s) - - %n heure - %n heures - - - - %n day(s) - - %n jour - %n jours - - - - %n week(s) - - %n semaine - %n semaines - - - - %1 and %2 - %1 et %2 - - - %n year(s) - - %n an - %n ans - - - - %1 B - %1 o - - - %1 kB - %1 ko - - - %1 MB - %1 Mo - - - %1 GB - %1 Go - - - default wallet - porte-monnaie par défaut - - - - BitcoinGUI - - &Overview - &Vue d’ensemble - - - Show general overview of wallet - Afficher une vue d’ensemble du porte-monnaie - - - Browse transaction history - Parcourir l’historique transactionnel - - - E&xit - Q&uitter - - - Quit application - Fermer l’application - - - &About %1 - À &propos de %1 - - - Show information about %1 - Afficher des renseignements à propos de %1 - - - About &Qt - À propos de &Qt - - - Show information about Qt - Afficher des renseignements sur Qt - - - Modify configuration options for %1 - Modifier les options de configuration de %1 - - - Create a new wallet - Créer un nouveau porte-monnaie - - - &Minimize - &Réduire - - - Wallet: - Porte-monnaie : - - - Network activity disabled. - A substring of the tooltip. - L’activité réseau est désactivée. - - - Proxy is <b>enabled</b>: %1 - Le serveur mandataire est <b>activé</b> : %1 - - - Send coins to a Bitcoin address - Envoyer des pièces à une adresse Bitcoin - - - Backup wallet to another location - Sauvegarder le porte-monnaie vers un autre emplacement - - - Change the passphrase used for wallet encryption - Modifier la phrase de passe utilisée pour le chiffrement du porte-monnaie - - - &Send - &Envoyer - - - &Receive - &Recevoir - - - &Options… - &Choix - - - &Encrypt Wallet… - &Chiffrer le porte-monnaie… - - - Encrypt the private keys that belong to your wallet - Chiffrer les clés privées qui appartiennent à votre porte-monnaie - - - &Backup Wallet… - &auvegarder le porte-monnaie… - - - &Change Passphrase… - &Changer la phrase de passe… - - - Sign &message… - Signer un &message… - - - Sign messages with your Bitcoin addresses to prove you own them - Signer les messages avec vos adresses Bitcoin pour prouver que vous les détenez - - - &Verify message… - &Vérifier un message… - - - Verify messages to ensure they were signed with specified Bitcoin addresses - Vérifier les messages pour s’assurer qu’ils ont été signés avec les adresses Bitcoin indiquées - - - &Load PSBT from file… - &Charger une TBSP d’un fichier… - - - Open &URI… - Ouvrir une &URI… - - - Close Wallet… - Fermer le porte-monnaie… - - - Create Wallet… - Créer un porte-monnaie… - - - Close All Wallets… - Fermer tous les porte-monnaie… - - - &File - &Fichier - - - &Settings - &Paramètres - - - &Help - &Aide - - - Tabs toolbar - Barre d’outils des onglets - - - Syncing Headers (%1%)… - Synchronisation des en-têtes (%1)… - - - Synchronizing with network… - Synchronisation avec le réseau… - - - Indexing blocks on disk… - Indexation des blocs sur le disque… - - - Processing blocks on disk… - Traitement des blocs sur le disque… - - - Connecting to peers… - Connexion aux pairs… - - - Request payments (generates QR codes and bitcoin: URIs) - Demander des paiements (génère des codes QR et des URI bitcoin:) - - - Show the list of used sending addresses and labels - Afficher la liste d’adresses et d’étiquettes d’envoi utilisées - - - Show the list of used receiving addresses and labels - Afficher la liste d’adresses et d’étiquettes de réception utilisées - - - &Command-line options - Options de ligne de &commande - - - Processed %n block(s) of transaction history. - - %n bloc d’historique transactionnel a été traité. - %n blocs d’historique transactionnel ont été traités. - - - - %1 behind - en retard de %1 - - - Catching up… - Rattrapage… - - - Last received block was generated %1 ago. - Le dernier bloc reçu avait été généré il y a %1. - - - Transactions after this will not yet be visible. - Les transactions suivantes ne seront pas déjà visibles. - - - Error - Erreur - - - Warning - Avertissement - - - Information - Renseignements - - - Up to date - À jour - - - Load Partially Signed Bitcoin Transaction - Charger une transaction Bitcoin signée partiellement - - - Load PSBT from &clipboard… - Charger la TBSP du &presse-papiers… - - - Load Partially Signed Bitcoin Transaction from clipboard - Charger du presse-papiers une transaction Bitcoin signée partiellement - - - Node window - Fenêtre des nœuds - - - Open node debugging and diagnostic console - Ouvrir une console de débogage de nœuds et de diagnostic - - - &Sending addresses - &Adresses d’envoi - - - &Receiving addresses - &Adresses de réception - - - Open a bitcoin: URI - Ouvrir une URI bitcoin: - - - Open Wallet - Ouvrir le porte-monnaie - - - Open a wallet - Ouvrir un porte-monnaie - - - Close wallet - Fermer le porte-monnaie - - - Restore Wallet… - Name of the menu item that restores wallet from a backup file. - Restaurer le Portefeuille... - - - Restore a wallet from a backup file - Status tip for Restore Wallet menu item - Restaurer le Portefeuille depuis un fichier de sauvegarde - - - Close all wallets - Fermer tous les porte-monnaie - - - Migrate Wallet - Migrer le portefeuille - - - Migrate a wallet - Migrer un portefeuilles - - - Show the %1 help message to get a list with possible Bitcoin command-line options - Afficher le message d’aide de %1 pour obtenir la liste des options possibles en ligne de commande Bitcoin - - - &Mask values - &Masquer les montants - - - Mask the values in the Overview tab - Masquer les montants dans l’onglet Vue d’ensemble - - - No wallets available - Aucun porte-monnaie n’est disponible - - - Wallet Data - Name of the wallet data file format. - Données du porte-monnaie - - - Load Wallet Backup - The title for Restore Wallet File Windows - Lancer un Portefeuille de sauvegarde - - - Restore Wallet - Title of pop-up window shown when the user is attempting to restore a wallet. - Restaurer le portefeuille - - - Wallet Name - Label of the input field where the name of the wallet is entered. - Nom du porte-monnaie - - - &Window - &Fenêtre - - - Zoom - Zoomer - - - Main Window - Fenêtre principale - - - %1 client - Client %1 - - - &Hide - &Cacher - - - S&how - A&fficher - - - %n active connection(s) to Bitcoin network. - A substring of the tooltip. - - %n connexion active avec le réseau Bitcoin. - %n connexions actives avec le réseau Bitcoin. - - - - Click for more actions. - A substring of the tooltip. "More actions" are available via the context menu. - Cliquez pour afficher plus d’actions. - - - Show Peers tab - A context menu item. The "Peers tab" is an element of the "Node window". - Afficher l’onglet Pairs - - - Disable network activity - A context menu item. - Désactiver l’activité réseau - - - Enable network activity - A context menu item. The network activity was disabled previously. - Activer l’activité réseau - - - Pre-syncing Headers (%1%)… - En-têtes de pré-synchronisation (%1%)... - - - Error creating wallet - Erreur lors de la création du portefeuille - - - Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets) - Impossible de créer un nouveau portefeuilles, le logiciel a été compilé sans support pour sqlite (nécessaire pour le portefeuille décris) - - - Error: %1 - Erreur : %1 - - - Warning: %1 - Avertissement : %1 - - - Date: %1 - - Date : %1 - - - - Amount: %1 - - Montant : %1 - - - - Wallet: %1 - - Porte-monnaie : %1 - - - - Type: %1 - - Type  : %1 - - - - Label: %1 - - Étiquette : %1 - - - - Address: %1 - - Adresse : %1 - - - - Sent transaction - Transaction envoyée - - - Incoming transaction - Transaction entrante - - - HD key generation is <b>enabled</b> - La génération de clé HD est <b>activée</b> - - - HD key generation is <b>disabled</b> - La génération de clé HD est <b>désactivée</b> - - - Private key <b>disabled</b> - La clé privée est <b>désactivée</b> - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Le porte-monnaie est <b>chiffré</b> et est actuellement <b>déverrouillé</b> - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - Le porte-monnaie est <b>chiffré</b> et actuellement <b>verrouillé</b> - - - Original message: - Message original : - - - - UnitDisplayStatusBarControl - - Unit to show amounts in. Click to select another unit. - Unité d’affichage des montants. Cliquez pour sélectionner une autre unité. - - - - CoinControlDialog - - Coin Selection - Sélection des pièces - - - Quantity: - Quantité : - - - Bytes: - Octets : - - - Amount: - Montant : - - - Fee: - Frais : - - - After Fee: - Après les frais : - - - Change: - Monnaie : - - - (un)select all - Tout (des)sélectionner - - - Tree mode - Mode arborescence - - - List mode - Mode liste - - - Amount - Montant - - - Received with label - Reçu avec une étiquette - - - Received with address - Reçu avec une adresse - - - Confirmed - Confirmée - - - Copy amount - Copier le montant - - - &Copy address - &Copier l’adresse - - - Copy &label - Copier l’&étiquette - - - Copy &amount - Copier le &montant - - - Copy transaction &ID and output index - Copier l’ID de la transaction et l’index des sorties - - - L&ock unspent - &Verrouillé ce qui n’est pas dépensé - - - &Unlock unspent - &Déverrouiller ce qui n’est pas dépensé - - - Copy quantity - Copier la quantité - - - Copy fee - Copier les frais - - - Copy after fee - Copier après les frais - - - Copy bytes - Copier les octets - - - Copy change - Copier la monnaie - - - (%1 locked) - (%1 verrouillée) - - - Can vary +/- %1 satoshi(s) per input. - Peut varier +/- %1 satoshi(s) par entrée. - - - (no label) - (aucune étiquette) - - - change from %1 (%2) - monnaie de %1 (%2) - - - (change) - (monnaie) - - - - CreateWalletActivity - - Create Wallet - Title of window indicating the progress of creation of a new wallet. - Créer un porte-monnaie - - - Creating Wallet <b>%1</b>… - Descriptive text of the create wallet progress window which indicates to the user which wallet is currently being created. - Création du porte-monnaie <b>%1</b>… - - - Create wallet failed - Échec de création du porte-monnaie - - - Create wallet warning - Avertissement de création du porte-monnaie - - - Can't list signers - Impossible de lister les signataires - - - Too many external signers found - Trop de signataires externes trouvés - - - - LoadWalletsActivity - - Load Wallets - Title of progress window which is displayed when wallets are being loaded. - Charger les porte-monnaie - - - Loading wallets… - Descriptive text of the load wallets progress window which indicates to the user that wallets are currently being loaded. - Chargement des porte-monnaie… - - - - MigrateWalletActivity - - Migrate wallet - Migrer le portefeuille - - - Are you sure you wish to migrate the wallet <i>%1</i>? - Êtes-vous sûr de vouloir migrer le portefeuille <i>%1</i> - - - Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made. -If this wallet contains any watchonly scripts, a new wallet will be created which contains those watchonly scripts. -If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts. - -The migration process will create a backup of the wallet before migrating. This backup file will be named <wallet name>-<timestamp>.legacy.bak and can be found in the directory for this wallet. In the event of an incorrect migration, the backup can be restored with the "Restore Wallet" functionality. - La migration du porte-monnaie convertira ce porte-monnaie en un ou plusieurs porte-monnaie de descripteurs. Une nouvelle sauvegarde du porte-monnaie devra être effectuée. -Si ce porte-monnaie contient des scripts en lecture seule, un nouveau porte-monnaie sera créé contenant ces scripts en lecture seule. -Si ce porte-monnaie contient des scripts solvables mais non surveillés, un autre nouveau porte-monnaie sera créé contenant ces scripts. - -Le processus de migration créera une sauvegarde du porte-monnaie avant la migration. Ce fichier de sauvegarde sera nommé <nom du porte-monnaie>-<horodatage>.legacy.bak et pourra être trouvé dans le répertoire de ce porte-monnaie. En cas de migration incorrecte, la sauvegarde peut être restaurée avec la fonctionnalité "Restaurer le porte-monnaie". - - - Migrate Wallet - Migrer le portefeuille - - - Migrating Wallet <b>%1</b>… - Migration du portefeuille <b>%1</b>… - - - The wallet '%1' was migrated successfully. - Le porte-monnaie '%1' a été migré avec succès. - - - Watchonly scripts have been migrated to a new wallet named '%1'. - Les scripts juste-regarder ont été migrés vers un nouveau porte-monnaie nommé « %1 ». - - - Solvable but not watched scripts have been migrated to a new wallet named '%1'. - Les scripts solubles, mais non surveillés ont été migrés vers un nouveau porte-monnaie nommé « %1 ». - - - Migration failed - La migration a échoué - - - Migration Successful - Migration réussie - - - - OpenWalletActivity - - Open wallet failed - Échec d’ouverture du porte-monnaie - - - Open wallet warning - Avertissement d’ouverture du porte-monnaie - - - Open Wallet - Title of window indicating the progress of opening of a wallet. - Ouvrir un porte-monnaie - - - Opening Wallet <b>%1</b>… - Descriptive text of the open wallet progress window which indicates to the user which wallet is currently being opened. - Ouverture du porte-monnaie <b>%1</b>… - - - - RestoreWalletActivity - - Restore Wallet - Title of progress window which is displayed when wallets are being restored. - Restaurer le portefeuille - - - Restoring Wallet <b>%1</b>… - Descriptive text of the restore wallets progress window which indicates to the user that wallets are currently being restored. - Restauration du Portefeuille<b>%1</b>... - - - Restore wallet failed - Title of message box which is displayed when the wallet could not be restored. - Échec de la restauration du portefeuille - - - Restore wallet warning - Title of message box which is displayed when the wallet is restored with some warning. - Avertissement de la récupération du Portefeuille - - - Restore wallet message - Title of message box which is displayed when the wallet is successfully restored. - Message du Portefeuille restauré - - - - WalletController - - Close wallet - Fermer le porte-monnaie - - - Are you sure you wish to close the wallet <i>%1</i>? - Voulez-vous vraiment fermer le porte-monnaie <i>%1</i> ? - - - Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. - Fermer le porte-monnaie trop longtemps peut impliquer de devoir resynchroniser la chaîne entière si l’élagage est activé. - - - Close all wallets - Fermer tous les porte-monnaie - - - Are you sure you wish to close all wallets? - Voulez-vous vraiment fermer tous les porte-monnaie ? - - - - CreateWalletDialog - - Create Wallet - Créer un porte-monnaie - - - You are one step away from creating your new wallet! - Vous n'êtes qu'à un pas de la création de votre nouveau portefeuille ! - - - Please provide a name and, if desired, enable any advanced options - Veuillez fournir un nom et, si désiré, activer toutes les options avancées. - - - Wallet Name - Nom du porte-monnaie - - - Wallet - Porte-monnaie - - - Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice. - Chiffrer le porte-monnaie. Le porte-monnaie sera chiffré avec une phrase de passe de votre choix. - - - Encrypt Wallet - Chiffrer le porte-monnaie - - - Advanced Options - Options avancées - - - Disable private keys for this wallet. Wallets with private keys disabled will have no private keys and cannot have an HD seed or imported private keys. This is ideal for watch-only wallets. - Désactiver les clés privées pour ce porte-monnaie. Les porte-monnaie pour lesquels les clés privées sont désactivées n’auront aucune clé privée et ne pourront ni avoir de graine HD ni de clés privées importées. Cela est idéal pour les porte-monnaie juste-regarder. - - - Disable Private Keys - Désactiver les clés privées - - - Make a blank wallet. Blank wallets do not initially have private keys or scripts. Private keys and addresses can be imported, or an HD seed can be set, at a later time. - Créer un porte-monnaie vide. Les porte-monnaie vides n’ont initialement ni clé privée ni script. Ultérieurement, des clés privées et des adresses peuvent être importées ou une graine HD peut être définie. - - - Make Blank Wallet - Créer un porte-monnaie vide - - - Use an external signing device such as a hardware wallet. Configure the external signer script in wallet preferences first. - Utiliser un appareil externe de signature tel qu’un porte-monnaie matériel. Configurer d’abord le script signataire externe dans les préférences du porte-monnaie. - - - External signer - Signataire externe - - - Create - Créer - - - Compiled without external signing support (required for external signing) - "External signing" means using devices such as hardware wallets. - Compilé sans prise en charge des signatures externes (requis pour la signature externe) - - - - EditAddressDialog - - Edit Address - Modifier l’adresse - - - &Label - É&tiquette - - - The label associated with this address list entry - L’étiquette associée à cette entrée de la liste d’adresses - - - The address associated with this address list entry. This can only be modified for sending addresses. - L’adresse associée à cette entrée de la liste d’adresses. Ne peut être modifié que pour les adresses d’envoi. - - - &Address - &Adresse - - - New sending address - Nouvelle adresse d’envoi - - - Edit receiving address - Modifier l’adresse de réception - - - Edit sending address - Modifier l’adresse d’envoi - - - The entered address "%1" is not a valid Bitcoin address. - L’adresse saisie « %1 » n’est pas une adresse Bitcoin valide. - - - Address "%1" already exists as a receiving address with label "%2" and so cannot be added as a sending address. - L’adresse « %1 » existe déjà en tant qu’adresse de réception avec l’étiquette « %2 » et ne peut donc pas être ajoutée en tant qu’adresse d’envoi. - - - The entered address "%1" is already in the address book with label "%2". - L’adresse saisie « %1 » est déjà présente dans le carnet d’adresses avec l’étiquette « %2 ». - - - Could not unlock wallet. - Impossible de déverrouiller le porte-monnaie. - - - New key generation failed. - Échec de génération de la nouvelle clé. - - - - FreespaceChecker - - A new data directory will be created. - Un nouveau répertoire de données sera créé. - - - name - nom - - - Directory already exists. Add %1 if you intend to create a new directory here. - Le répertoire existe déjà. Ajouter %1 si vous comptez créer un nouveau répertoire ici. - - - Path already exists, and is not a directory. - Le chemin existe déjà et n’est pas un répertoire. - - - Cannot create data directory here. - Impossible de créer un répertoire de données ici. - - - - Intro - - %n GB of space available - - %n Go d’espace libre - %n Go d’espace libre - - - - (of %n GB needed) - - (of %n GB needed) - (of %n GB needed) - - - - (%n GB needed for full chain) - - (%n GB needed for full chain) - (%n GB needed for full chain) - - - - Choose data directory - Choisissez un répertoire de donnée - - - At least %1 GB of data will be stored in this directory, and it will grow over time. - Au moins %1 Go de données seront stockés dans ce répertoire et sa taille augmentera avec le temps. - - - Approximately %1 GB of data will be stored in this directory. - Approximativement %1 Go de données seront stockés dans ce répertoire. - - - (sufficient to restore backups %n day(s) old) - Explanatory text on the capability of the current prune target. - - (suffisant pour restaurer les sauvegardes âgées de %n jour) - (suffisant pour restaurer les sauvegardes âgées de %n jours) - - - - %1 will download and store a copy of the Bitcoin block chain. - %1 téléchargera et stockera une copie de la chaîne de blocs Bitcoin. - - - The wallet will also be stored in this directory. - Le porte-monnaie sera aussi stocké dans ce répertoire. - - - Error: Specified data directory "%1" cannot be created. - Erreur : Le répertoire de données indiqué « %1 » ne peut pas être créé. - - - Error - Erreur - - - Welcome - Bienvenue - - - Welcome to %1. - Bienvenue à %1. - - - As this is the first time the program is launched, you can choose where %1 will store its data. - Comme le logiciel est lancé pour la première fois, vous pouvez choisir où %1 stockera ses données. - - - Limit block chain storage to - Limiter l’espace de stockage de chaîne de blocs à - - - Reverting this setting requires re-downloading the entire blockchain. It is faster to download the full chain first and prune it later. Disables some advanced features. - Rétablir ce paramètre à sa valeur antérieure exige de retélécharger la chaîne de blocs dans son intégralité. Il est plus rapide de télécharger la chaîne complète dans un premier temps et de l’élaguer ultérieurement. Désactive certaines fonctions avancées. - - - GB -  Go - - - This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off. - Cette synchronisation initiale est très exigeante et pourrait exposer des problèmes matériels dans votre ordinateur passés inaperçus auparavant. Chaque fois que vous exécuterez %1, le téléchargement reprendra où il s’était arrêté. - - - When you click OK, %1 will begin to download and process the full %4 block chain (%2 GB) starting with the earliest transactions in %3 when %4 initially launched. - Quand vous cliquerez sur Valider, %1 commencera à télécharger et à traiter l’intégralité de la chaîne de blocs %4 (%2 Go) en débutant avec les transactions les plus anciennes de %3, quand %4 a été lancé initialement. - - - If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low. - Si vous avez choisi de limiter le stockage de la chaîne de blocs (élagage), les données historiques doivent quand même être téléchargées et traitées, mais seront supprimées par la suite pour minimiser l’utilisation de votre espace disque. - - - Use the default data directory - Utiliser le répertoire de données par défaut - - - Use a custom data directory: - Utiliser un répertoire de données personnalisé : - - - - HelpMessageDialog - - About %1 - À propos de %1 - - - Command-line options - Options de ligne de commande - - - - ShutdownWindow - - %1 is shutting down… - %1 est en cours de fermeture… - - - Do not shut down the computer until this window disappears. - Ne pas éteindre l’ordinateur jusqu’à la disparition de cette fenêtre. - - - - ModalOverlay - - Form - Formulaire - - - Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. - Les transactions récentes ne sont peut-être pas encore visibles et par conséquent le solde de votre porte-monnaie est peut-être erroné. Ces renseignements seront justes quand votre porte-monnaie aura fini de se synchroniser avec le réseau Bitcoin, comme décrit ci-dessous. - - - Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. - Toute tentative de dépense de bitcoins affectés par des transactions qui ne sont pas encore affichées ne sera pas acceptée par le réseau. - - - Number of blocks left - Nombre de blocs restants - - - Unknown… - Inconnu… - - - calculating… - calcul en cours… - - - Last block time - Estampille temporelle du dernier bloc - - - Progress - Progression - - - Progress increase per hour - Avancement de la progression par heure - - - Estimated time left until synced - Temps estimé avant la fin de la synchronisation - - - Hide - Cacher - - - Esc - Échap - - - %1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain. - %1 est en cours de synchronisation. Il téléchargera les en-têtes et les blocs des pairs, et les validera jusqu’à ce qu’il atteigne la fin de la chaîne de blocs. - - - Unknown. Syncing Headers (%1, %2%)… - Inconnu. Synchronisation des en-têtes (%1, %2 %)… - - - Unknown. Pre-syncing Headers (%1, %2%)… - Inconnu. En-têtes de présynchronisation (%1, %2%)... - - - - OpenURIDialog - - Open bitcoin URI - Ouvrir une URI bitcoin - - - URI: - URI : - - - Paste address from clipboard - Tooltip text for button that allows you to paste an address that is in your clipboard. - Collez l’adresse du presse-papiers - - - - OptionsDialog - - &Main - &Principales - - - Automatically start %1 after logging in to the system. - Démarrer %1 automatiquement après avoir ouvert une session sur l’ordinateur. - - - &Start %1 on system login - &Démarrer %1 lors de l’ouverture d’une session - - - Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain. - L’activation de l’élagage réduit considérablement l’espace disque requis pour stocker les transactions. Tous les blocs sont encore entièrement validés. L’annulation de ce paramètre exige de retélécharger la chaîne de blocs dans son intégralité. - - - Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. - Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. - Taille maximale du cache de la base de données. Assurez-vous d’avoir suffisamment de mémoire vive. Un cache plus grand peut accélérer la synchronisation, avec des avantages moindres par la suite dans la plupart des cas. Diminuer la taille du cache réduira l’utilisation de la mémoire. La mémoire non utilisée de la réserve de mémoire est partagée avec ce cache. - - - Size of &database cache - Taille du cache de la base de &données - - - Number of script &verification threads - Nombre de fils de &vérification de script - - - Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! - Chemin complet vers un %1 script compatible (par exemple, C:\Downloads\hwi.exe ou /Users/you/Downloads/hwi.py). Attention : les malwares peuvent voler vos pièces ! - - - Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. - Ouvrir automatiquement le port du client Bitcoin sur le routeur. Cela ne fonctionne que si votre routeur prend en charge PCP ou NAT-PMP. Le port externe peut être aléatoire. - - - Map port using PCP or NA&T-PMP - Mapper le port avec PCP ou NA&T-PMP - - - IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) - Adresse IP du mandataire (p. ex. IPv4 : 127.0.0.1 / IPv6 : ::1) - - - Shows if the supplied default SOCKS5 proxy is used to reach peers via this network type. - Indique si le mandataire SOCKS5 par défaut fourni est utilisé pour atteindre des pairs par ce type de réseau. - - - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu. - Quand la fenêtre est fermée, la réduire au lieu de quitter l’application. Si cette option est activée, l’application ne sera fermée qu’en sélectionnant Quitter dans le menu. - - - Font in the Overview tab: - Police de l’onglet Vue d’ensemble : - - - Options set in this dialog are overridden by the command line: - Les options définies dans cette boîte de dialogue sont remplacées par la ligne de commande : - - - Open the %1 configuration file from the working directory. - Ouvrir le fichier de configuration %1 du répertoire de travail. - - - Open Configuration File - Ouvrir le fichier de configuration - - - Reset all client options to default. - Réinitialiser toutes les options du client aux valeurs par défaut. - - - &Reset Options - &Réinitialiser les options - - - &Network - &Réseau - - - Prune &block storage to - Élaguer l’espace de stockage des &blocs jusqu’à - - - GB - Go - - - Reverting this setting requires re-downloading the entire blockchain. - L’annulation de ce paramètre exige de retélécharger la chaîne de blocs dans son intégralité. - - - MiB - Mio - - - Set the number of script verification threads. Negative values correspond to the number of cores you want to leave free to the system. - Tooltip text for Options window setting that sets the number of script verification threads. Explains that negative values mean to leave these many cores free to the system. - Définissez le nombre de fils de vérification de script. Les valeurs négatives correspondent au nombre de cœurs que vous voulez laisser disponibles pour le système. - - - (0 = auto, <0 = leave that many cores free) - (0 = auto, < 0 = laisser ce nombre de cœurs inutilisés) - - - This allows you or a third party tool to communicate with the node through command-line and JSON-RPC commands. - Tooltip text for Options window setting that enables the RPC server. - Ceci vous permet ou permet à un outil tiers de communiquer avec le nœud grâce à la ligne de commande ou des commandes JSON-RPC. - - - Enable R&PC server - An Options window setting to enable the RPC server. - Activer le serveur R&PC - - - W&allet - &Porte-monnaie - - - Whether to set subtract fee from amount as default or not. - Tooltip text for Options window setting that sets subtracting the fee from a sending amount as default. - Définissez s’il faut soustraire par défaut les frais du montant ou non. - - - Subtract &fee from amount by default - An Options window setting to set subtracting the fee from a sending amount as default. - Soustraire par défaut les &frais du montant - - - Enable coin &control features - Activer les fonctions de &contrôle des pièces - - - If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. - Si vous désactivé la dépense de la monnaie non confirmée, la monnaie d’une transaction ne peut pas être utilisée tant que cette transaction n’a pas reçu au moins une confirmation. Celai affecte aussi le calcul de votre solde. - - - &Spend unconfirmed change - &Dépenser la monnaie non confirmée - - - Enable &PSBT controls - An options window setting to enable PSBT controls. - Activer les contrôles &TBPS - - - Whether to show PSBT controls. - Tooltip text for options window setting that enables PSBT controls. - Affichez ou non les contrôles TBPS. - - - External Signer (e.g. hardware wallet) - Signataire externe (p. ex. porte-monnaie matériel) - - - &External signer script path - &Chemin du script signataire externe - - - Accept connections from outside. - Accepter les connexions provenant de l’extérieur. - - - Allow incomin&g connections - Permettre les connexions e&ntrantes - - - Connect to the Bitcoin network through a SOCKS5 proxy. - Se connecter au réseau Bitcoin par un mandataire SOCKS5. - - - &Connect through SOCKS5 proxy (default proxy): - Se &connecter par un mandataire SOCKS5 (mandataire par défaut) : - - - Proxy &IP: - &IP du mandataire : - - - &Port: - &Port : - - - Port of the proxy (e.g. 9050) - Port du mandataire (p. ex. 9050) - - - Used for reaching peers via: - Utilisé pour rejoindre les pairs par : - - - &Window - &Fenêtre - - - Show the icon in the system tray. - Afficher l’icône dans la zone de notification. - - - &Show tray icon - &Afficher l’icône dans la zone de notification - - - Show only a tray icon after minimizing the window. - Après réduction, n’afficher qu’une icône dans la zone de notification. - - - &Minimize to the tray instead of the taskbar - &Réduire dans la zone de notification au lieu de la barre des tâches - - - M&inimize on close - Ré&duire lors de la fermeture - - - &Display - &Affichage - - - User Interface &language: - &Langue de l’interface utilisateur : - - - The user interface language can be set here. This setting will take effect after restarting %1. - La langue de l’interface utilisateur peut être définie ici. Ce réglage sera pris en compte après redémarrage de %1. - - - &Unit to show amounts in: - &Unité d’affichage des montants : - - - Choose the default subdivision unit to show in the interface and when sending coins. - Choisir la sous-unité par défaut d’affichage dans l’interface et lors d’envoi de pièces. - - - Third-party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |. - Les URL de tiers (p. ex. un explorateur de blocs) qui apparaissent dans l’onglet des transactions comme éléments du menu contextuel. Dans l’URL, %s est remplacé par le hachage de la transaction. Les URL multiples sont séparées par une barre verticale |. - - - &Third-party transaction URLs - URL de transaction de $tiers - - - Whether to show coin control features or not. - Afficher ou non les fonctions de contrôle des pièces. - - - Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services. - Se connecter au réseau Bitcoin par un mandataire SOCKS5 séparé pour les services oignon de Tor. - - - Use separate SOCKS&5 proxy to reach peers via Tor onion services: - Utiliser un mandataire SOCKS&5 séparé pour atteindre les pairs par les services oignon de Tor : - - - &OK - &Valider - - - &Cancel - A&nnuler - - - Compiled without external signing support (required for external signing) - "External signing" means using devices such as hardware wallets. - Compilé sans prise en charge des signatures externes (requis pour la signature externe) - - - default - par défaut - - - none - aucune - - - Confirm options reset - Window title text of pop-up window shown when the user has chosen to reset options. - Confirmer la réinitialisation des options - - - Client restart required to activate changes. - Text explaining that the settings changed will not come into effect until the client is restarted. - Le redémarrage du client est exigé pour activer les changements. - - - Current settings will be backed up at "%1". - Text explaining to the user that the client's current settings will be backed up at a specific location. %1 is a stand-in argument for the backup location's path. - Les paramètres actuels vont être restaurés à "%1". - - - Client will be shut down. Do you want to proceed? - Text asking the user to confirm if they would like to proceed with a client shutdown. - Le client sera arrêté. Voulez-vous continuer ? - - - Configuration options - Window title text of pop-up box that allows opening up of configuration file. - Options de configuration - - - The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file. - Explanatory text about the priority order of instructions considered by client. The order from high to low being: command-line, configuration file, GUI settings. - Le fichier de configuration est utilisé pour indiquer aux utilisateurs experts quelles options remplacent les paramètres de l’IUG. De plus, toute option de ligne de commande remplacera ce fichier de configuration. - - - Continue - Poursuivre - - - Cancel - Annuler - - - Error - Erreur - - - The configuration file could not be opened. - Impossible d’ouvrir le fichier de configuration. - - - This change would require a client restart. - Ce changement demanderait un redémarrage du client. - - - The supplied proxy address is invalid. - L’adresse de serveur mandataire fournie est invalide. - - - - OptionsModel - - Could not read setting "%1", %2. - Impossible de lire le paramètre "%1", %2. - - - - OverviewPage - - Form - Formulaire - - - 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. - Les renseignements affichés peuvent être obsolètes. Votre porte-monnaie se synchronise automatiquement avec le réseau Bitcoin dès qu’une connexion est établie, mais ce processus n’est pas encore achevé. - - - Watch-only: - Juste-regarder : - - - Available: - Disponible : - - - Your current spendable balance - Votre solde actuel disponible - - - Pending: - En attente : - - - Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance - Total des transactions qui doivent encore être confirmées et qui ne sont pas prises en compte dans le solde disponible - - - Immature: - Immature : - - - Mined balance that has not yet matured - Le solde miné n’est pas encore mûr - - - Balances - Soldes - - - Total: - Total : - - - Your current total balance - Votre solde total actuel - - - Your current balance in watch-only addresses - Votre balance actuelle en adresses juste-regarder - - - Spendable: - Disponible : - - - Recent transactions - Transactions récentes - - - Unconfirmed transactions to watch-only addresses - Transactions non confirmées vers des adresses juste-regarder - - - Mined balance in watch-only addresses that has not yet matured - Le solde miné dans des adresses juste-regarder, qui n’est pas encore mûr - - - Current total balance in watch-only addresses - Solde total actuel dans des adresses juste-regarder - - - Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings->Mask values. - Le mode privé est activé dans l’onglet Vue d’ensemble. Pour afficher les montants, décocher Paramètres -> Masquer les montants. - - - - PSBTOperationsDialog - - PSBT Operations - Opération PSBT - - - Sign Tx - Signer la transaction - - - Broadcast Tx - Diffuser la transaction - - - Copy to Clipboard - Copier dans le presse-papiers - - - Save… - Enregistrer… - - - Close - Fermer - - - Failed to load transaction: %1 - Échec de chargement de la transaction : %1 - - - Failed to sign transaction: %1 - Échec de signature de la transaction : %1 - - - Cannot sign inputs while wallet is locked. - Impossible de signer des entrées quand le porte-monnaie est verrouillé. - - - Could not sign any more inputs. - Aucune autre entrée n’a pu être signée. - - - Signed %1 inputs, but more signatures are still required. - %1 entrées ont été signées, mais il faut encore d’autres signatures. - - - Signed transaction successfully. Transaction is ready to broadcast. - La transaction a été signée avec succès et est prête à être diffusée. - - - Unknown error processing transaction. - Erreur inconnue lors de traitement de la transaction - - - Transaction broadcast successfully! Transaction ID: %1 - La transaction a été diffusée avec succès. ID de la transaction : %1 - - - Transaction broadcast failed: %1 - Échec de diffusion de la transaction : %1 - - - PSBT copied to clipboard. - La TBSP a été copiée dans le presse-papiers. - - - Save Transaction Data - Enregistrer les données de la transaction - - - Partially Signed Transaction (Binary) - Expanded name of the binary PSBT file format. See: BIP 174. - Transaction signée partiellement (fichier binaire) - - - PSBT saved to disk. - La TBSP a été enregistrée sur le disque. - - - Sends %1 to %2 - Envoie %1 à %2 - - - own address - votre adresse - - - Unable to calculate transaction fee or total transaction amount. - Impossible de calculer les frais de la transaction ou le montant total de la transaction. - - - Pays transaction fee: - Paye des frais de transaction : - - - Total Amount - Montant total - - - or - ou - - - Transaction has %1 unsigned inputs. - La transaction a %1 entrées non signées. - - - Transaction is missing some information about inputs. - Il manque des renseignements sur les entrées dans la transaction. - - - Transaction still needs signature(s). - La transaction a encore besoin d’une ou de signatures. - - - (But no wallet is loaded.) - (Mais aucun porte-monnaie n’est chargé.) - - - (But this wallet cannot sign transactions.) - (Mais ce porte-monnaie ne peut pas signer de transactions.) - - - (But this wallet does not have the right keys.) - (Mais ce porte-monnaie n’a pas les bonnes clés.) - - - Transaction is fully signed and ready for broadcast. - La transaction est complètement signée et prête à être diffusée. - - - Transaction status is unknown. - L’état de la transaction est inconnu. - - - - PaymentServer - - Payment request error - Erreur de demande de paiement - - - Cannot start bitcoin: click-to-pay handler - Impossible de démarrer le gestionnaire de cliquer-pour-payer bitcoin: - - - URI handling - Gestion des URI - - - 'bitcoin://' is not a valid URI. Use 'bitcoin:' instead. - 'bitcoin://' n’est pas une URI valide. Utilisez plutôt 'bitcoin:'. - - - Cannot process payment request because BIP70 is not supported. -Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored. -If you are receiving this error you should request the merchant provide a BIP21 compatible URI. - Impossible de traiter la demande de paiement, car BIP70 n’est pas pris en charge. En raison des failles de sécurité généralisées de BIP70, il est fortement recommandé d’ignorer toute demande de marchand de changer de porte-monnaie. Si vous recevez cette erreur, vous devriez demander au marchand de vous fournir une URI compatible BIP21. - - - URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters. - L’URI ne peut pas être analysée. Cela peut être causé par une adresse Bitcoin invalide ou par des paramètres d’URI mal formés. - - - Payment request file handling - Gestion des fichiers de demande de paiement - - - - PeerTableModel - - User Agent - Title of Peers Table column which contains the peer's User Agent string. - Agent utilisateur - - - Peer - Title of Peers Table column which contains a unique number used to identify a connection. - Pair - - - Sent - Title of Peers Table column which indicates the total amount of network information we have sent to the peer. - Envoyé - - - Received - Title of Peers Table column which indicates the total amount of network information we have received from the peer. - Reçus - - - Address - Title of Peers Table column which contains the IP/Onion/I2P address of the connected peer. - Adresse - - - Network - Title of Peers Table column which states the network the peer connected through. - Réseau - - - Inbound - An Inbound Connection from a Peer. - Entrant - - - Outbound - An Outbound Connection to a Peer. - Sortant - - - - QRImageWidget - - &Save Image… - &Enregistrer l’image… - - - &Copy Image - &Copier l’image - - - Resulting URI too long, try to reduce the text for label / message. - L’URI résultante est trop longue. Essayez de réduire le texte de l’étiquette ou du message. - - - Error encoding URI into QR Code. - Erreur d’encodage de l’URI en code QR. - - - QR code support not available. - La prise en charge des codes QR n’est pas proposée. - - - Save QR Code - Enregistrer le code QR - - - PNG Image - Expanded name of the PNG file format. See: https://en.wikipedia.org/wiki/Portable_Network_Graphics. - Image PNG - - - - RPCConsole - - N/A - N.D. - - - Client version - Version du client - - - &Information - &Renseignements - - - General - Générales - - - Datadir - Répertoire des données - - - To specify a non-default location of the data directory use the '%1' option. - Pour indiquer un emplacement du répertoire des données différent de celui par défaut, utiliser l’option ’%1’. - - - Blocksdir - Répertoire des blocs - - - To specify a non-default location of the blocks directory use the '%1' option. - Pour indiquer un emplacement du répertoire des blocs différent de celui par défaut, utiliser l’option ’%1’. - - - Startup time - Heure de démarrage - - - Network - Réseau - - - Name - Nom - - - Number of connections - Nombre de connexions - - - Local Addresses - Adresses locales - - - Network addresses that your Bitcoin node is currently using to communicate with other nodes. - Adresses réseau que votre nœud Bitcoin utilise actuellement pour communiquer avec d’autres nœuds. - - - Block chain - Chaîne de blocs - - - Memory Pool - Réserve de mémoire - - - Current number of transactions - Nombre actuel de transactions - - - Memory usage - Utilisation de la mémoire - - - Wallet: - Porte-monnaie : - - - (none) - (aucun) - - - &Reset - &Réinitialiser - - - Received - Reçus - - - Sent - Envoyé - - - &Peers - &Pairs - - - Banned peers - Pairs bannis - - - Select a peer to view detailed information. - Sélectionnez un pair pour afficher des renseignements détaillés. - - - Hide Peers Detail - Cacher les détails des pairs - - - The transport layer version: %1 - La version de la couche de transport : %1 - - - Session ID - ID de session - - - Whether we relay transactions to this peer. - Si nous relayons des transactions à ce pair. - - - Transaction Relay - Relais de transaction - - - Starting Block - Bloc de départ - - - Synced Headers - En-têtes synchronisés - - - Synced Blocks - Blocs synchronisés - - - Last Transaction - Dernière transaction - - - The mapped Autonomous System used for diversifying peer selection. - Le système autonome mappé utilisé pour diversifier la sélection des pairs. - - - Mapped AS - SA mappé - - - Whether we relay addresses to this peer. - Tooltip text for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - Reliez ou non des adresses à ce pair. - - - Address Relay - Text title for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - Relais d’adresses - - - The total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Tooltip text for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Nombre total d'adresses reçues de ce pair qui ont été traitées (à l'exclusion des adresses qui ont été abandonnées en raison de la limitation du débit). - - - The total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Tooltip text for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Nombre total d'adresses reçues de ce pair qui ont été abandonnées (non traitées) en raison de la limitation du débit. - - - Addresses Processed - Text title for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Adresses traitées - - - Addresses Rate-Limited - Text title for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Adresses ciblées par la limite de débit - - - User Agent - Agent utilisateur - - - Node window - Fenêtre des nœuds - - - Current block height - Hauteur du bloc courant - - - Open the %1 debug log file from the current data directory. This can take a few seconds for large log files. - Ouvrir le fichier journal de débogage de %1 à partir du répertoire de données actuel. Cela peut prendre quelques secondes pour les fichiers journaux de grande taille. - - - Decrease font size - Diminuer la taille de police - - - Increase font size - Augmenter la taille de police - - - Permissions - Autorisations - - - The direction and type of peer connection: %1 - La direction et le type de la connexion au pair : %1 - - - The BIP324 session ID string in hex. - ID hexadécimale de la session BIP324. - - - The network protocol this peer is connected through: IPv4, IPv6, Onion, I2P, or CJDNS. - Le protocole réseau par lequel ce pair est connecté : IPv4, IPv6, Oignon, I2P ou CJDNS. - - - High bandwidth BIP152 compact block relay: %1 - Relais de blocs BIP152 compact à large bande passante : %1 - - - High Bandwidth - Large bande passante - - - Connection Time - Temps de connexion - - - Elapsed time since a novel block passing initial validity checks was received from this peer. - Temps écoulé depuis qu’un nouveau bloc qui a réussi les vérifications initiales de validité a été reçu par ce pair. - - - Last Block - Dernier bloc - - - Elapsed time since a novel transaction accepted into our mempool was received from this peer. - Tooltip text for the Last Transaction field in the peer details area. - Temps écoulé depuis qu’une nouvelle transaction acceptée dans notre réserve de mémoire a été reçue par ce pair. - - - Last Send - Dernier envoi - - - Last Receive - Dernière réception - - - Ping Time - Temps de ping - - - The duration of a currently outstanding ping. - La durée d’un ping en cours. - - - Ping Wait - Attente du ping - - - Min Ping - Ping min. - - - Time Offset - Décalage temporel - - - Last block time - Estampille temporelle du dernier bloc - - - &Open - &Ouvrir - - - &Network Traffic - Trafic &réseau - - - Totals - Totaux - - - Debug log file - Fichier journal de débogage - - - Clear console - Effacer la console - - - In: - Entrant : - - - Out: - Sortant : - - - Inbound: initiated by peer - Explanatory text for an inbound peer connection. - Entrant : établie par le pair - - - Outbound Full Relay: default - Explanatory text for an outbound peer connection that relays all network information. This is the default behavior for outbound connections. - Relais intégral sortant : par défaut - - - Outbound Block Relay: does not relay transactions or addresses - Explanatory text for an outbound peer connection that relays network information about blocks and not transactions or addresses. - Relais de bloc sortant : ne relaye ni transactions ni adresses - - - Outbound Manual: added using RPC %1 or %2/%3 configuration options - Explanatory text for an outbound peer connection that was established manually through one of several methods. The numbered arguments are stand-ins for the methods available to establish manual connections. - Manuelle sortante : ajoutée avec un RPC %1 ou les options de configuration %2/%3 - - - Outbound Feeler: short-lived, for testing addresses - Explanatory text for a short-lived outbound peer connection that is used to test the aliveness of known addresses. - Palpeur sortant : de courte durée, pour tester des adresses - - - Outbound Address Fetch: short-lived, for soliciting addresses - Explanatory text for a short-lived outbound peer connection that is used to request addresses from a peer. - Récupération d’adresse sortante : de courte durée, pour solliciter des adresses - - - detecting: peer could be v1 or v2 - Explanatory text for "detecting" transport type. - détection : paires pourrait être v1 ou v2 - - - v1: unencrypted, plaintext transport protocol - Explanatory text for v1 transport type. - v1: protocole de transport non chiffré en texte clair - - - v2: BIP324 encrypted transport protocol - Explanatory text for v2 transport type. - v2: Protocole de transport chiffré BIP324 - - - we selected the peer for high bandwidth relay - nous avons sélectionné le pair comme relais à large bande passante - - - the peer selected us for high bandwidth relay - le pair nous avons sélectionné comme relais à large bande passante - - - no high bandwidth relay selected - aucun relais à large bande passante n’a été sélectionné - - - &Copy address - Context menu action to copy the address of a peer. - &Copier l’adresse - - - &Disconnect - &Déconnecter - - - 1 &hour - 1 &heure - - - 1 d&ay - 1 &jour - - - 1 &week - 1 &semaine - - - 1 &year - 1 &an - - - &Copy IP/Netmask - Context menu action to copy the IP/Netmask of a banned peer. IP/Netmask is the combination of a peer's IP address and its Netmask. For IP address, see: https://en.wikipedia.org/wiki/IP_address. - &Copier l’IP, le masque réseau - - - &Unban - &Réhabiliter - - - Network activity disabled - L’activité réseau est désactivée - - - None - Aucun - - - Executing command without any wallet - Exécution de la commande sans aucun porte-monnaie - - - Node window - [%1] - Fenêtre des nœuds – [%1] - - - Executing command using "%1" wallet - Exécution de la commande en utilisant le porte-monnaie « %1 » - - - Welcome to the %1 RPC console. -Use up and down arrows to navigate history, and %2 to clear screen. -Use %3 and %4 to increase or decrease the font size. -Type %5 for an overview of available commands. -For more information on using this console, type %6. - -%7WARNING: 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.%8 - RPC console welcome message. Placeholders %7 and %8 are style tags for the warning content, and they are not space separated from the rest of the text intentionally. - Bienvenue dans la console RPC de %1. -Utilisez les touches de déplacement vers le haut et vers le bas pour parcourir l’historique et %2 pour effacer l’écran. -Utilisez %3 et %4 pour augmenter ou diminuer la taille de la police. -Tapez %5 pour un aperçu des commandes proposées. -Pour plus de précisions sur cette console, tapez %6. -%7AVERTISSEMENT : des escrocs sont à l’œuvre et demandent aux utilisateurs de taper des commandes ici, volant ainsi le contenu de leur porte-monnaie. N’utilisez pas cette console sans entièrement comprendre les ramifications d’une commande. %8 - - - Executing… - A console message indicating an entered command is currently being executed. - Éxécution… - - - (peer: %1) - (pair : %1) - - - via %1 - par %1 - - - Yes - Oui - - - No - Non - - - To - À - - - From - De - - - Ban for - Bannir pendant - - - Never - Jamais - - - Unknown - Inconnu - - - - ReceiveCoinsDialog - - &Amount: - &Montant : - - - &Label: - &Étiquette : - - - &Message: - M&essage : - - - 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. - Un message facultatif à joindre à la demande de paiement et qui sera affiché à l’ouverture de celle-ci. Note : Le message ne sera pas envoyé avec le paiement par le réseau Bitcoin. - - - An optional label to associate with the new receiving address. - Un étiquette facultative à associer à la nouvelle adresse de réception. - - - Use this form to request payments. All fields are <b>optional</b>. - Utiliser ce formulaire pour demander des paiements. Tous les champs sont <b>facultatifs</b>. - - - An optional amount to request. Leave this empty or zero to not request a specific amount. - Un montant facultatif à demander. Ne rien saisir ou un zéro pour ne pas demander de montant précis. - - - 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. - Une étiquette facultative à associer à la nouvelle adresse de réception (utilisée par vous pour identifier une facture). Elle est aussi jointe à la demande de paiement. - - - An optional message that is attached to the payment request and may be displayed to the sender. - Un message facultatif joint à la demande de paiement et qui peut être présenté à l’expéditeur. - - - &Create new receiving address - &Créer une nouvelle adresse de réception - - - Clear all fields of the form. - Effacer tous les champs du formulaire. - - - Clear - Effacer - - - Requested payments history - Historique des paiements demandés - - - Show the selected request (does the same as double clicking an entry) - Afficher la demande sélectionnée (comme double-cliquer sur une entrée) - - - Show - Afficher - - - Remove the selected entries from the list - Retirer les entrées sélectionnées de la liste - - - Remove - Retirer - - - Copy &URI - Copier l’&URI - - - &Copy address - &Copier l’adresse - - - Copy &label - Copier l’&étiquette - - - Copy &message - Copier le &message - - - Copy &amount - Copier le &montant - - - Not recommended due to higher fees and less protection against typos. - Non recommandé en raison de frais élevés et d'une faible protection contre les fautes de frappe. - - - Generates an address compatible with older wallets. - Génère une adresse compatible avec les anciens portefeuilles. - - - Generates a native segwit address (BIP-173). Some old wallets don't support it. - Génère une adresse segwit native (BIP-173). Certains anciens portefeuilles ne le supportent pas. - - - Bech32m (BIP-350) is an upgrade to Bech32, wallet support is still limited. - Bech32m (BIP-350) est une mise à jour de Bech32, la prise en charge du portefeuille est encore limitée. - - - Could not unlock wallet. - Impossible de déverrouiller le porte-monnaie. - - - Could not generate new %1 address - Impossible de générer la nouvelle adresse %1 - - - - ReceiveRequestDialog - - Request payment to … - Demander de paiement à… - - - Address: - Adresse : - - - Amount: - Montant : - - - Label: - Étiquette : - - - Message: - Message : - - - Wallet: - Porte-monnaie : - - - Copy &URI - Copier l’&URI - - - Copy &Address - Copier l’&adresse - - - &Verify - &Vérifier - - - Verify this address on e.g. a hardware wallet screen - Confirmer p. ex. cette adresse sur l’écran d’un porte-monnaie matériel - - - &Save Image… - &Enregistrer l’image… - - - Payment information - Renseignements de paiement - - - Request payment to %1 - Demande de paiement à %1 - - - - RecentRequestsTableModel - - Label - Étiquette - - - (no label) - (aucune étiquette) - - - (no message) - (aucun message) - - - (no amount requested) - (aucun montant demandé) - - - Requested - Demandée - - - - SendCoinsDialog - - Send Coins - Envoyer des pièces - - - Coin Control Features - Fonctions de contrôle des pièces - - - automatically selected - sélectionné automatiquement - - - Insufficient funds! - Les fonds sont insuffisants - - - Quantity: - Quantité : - - - Bytes: - Octets : - - - Amount: - Montant : - - - Fee: - Frais : - - - After Fee: - Après les frais : - - - Change: - Monnaie : - - - If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. - Si cette option est activée et l’adresse de monnaie est vide ou invalide, la monnaie sera envoyée vers une adresse nouvellement générée. - - - Custom change address - Adresse personnalisée de monnaie - - - Transaction Fee: - Frais de transaction : - - - 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. - L’utilisation de l’option « fallbackfee » (frais de repli) peut avoir comme effet d’envoyer une transaction qui prendra plusieurs heures ou jours pour être confirmée, ou qui ne le sera jamais. Envisagez de choisir vos frais manuellement ou attendez d’avoir validé l’intégralité de la chaîne. - - - Warning: Fee estimation is currently not possible. - Avertissement : L’estimation des frais n’est actuellement pas possible. - - - per kilobyte - par kilo-octet - - - Hide - Cacher - - - Recommended: - Recommandés : - - - Custom: - Personnalisés : - - - Send to multiple recipients at once - Envoyer à plusieurs destinataires à la fois - - - Add &Recipient - Ajouter un &destinataire - - - Clear all fields of the form. - Effacer tous les champs du formulaire. - - - Choose… - Choisir… - - - Hide transaction fee settings - Cacher les paramètres de frais de transaction - - - Specify a custom fee per kB (1,000 bytes) of the transaction's virtual size. - -Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satoshis per kvB" for a transaction size of 500 virtual bytes (half of 1 kvB) would ultimately yield a fee of only 50 satoshis. - Indiquer des frais personnalisés par Ko (1 000 octets) de la taille virtuelle de la transaction. - -Note : Les frais étant calculés par octet, un taux de frais de « 100 satoshis par Kov » pour une transaction d’une taille de 500 octets (la moitié de 1 Kov) donneront des frais de seulement 50 satoshis. - - - 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. - Quand le volume des transactions est inférieur à l’espace dans les blocs, les mineurs et les nœuds de relais peuvent imposer des frais minimaux. Il est correct de payer ces frais minimaux, mais soyez conscient que cette transaction pourrait n’être jamais confirmée si la demande en transactions de bitcoins dépassait la capacité de traitement du réseau. - - - A too low fee might result in a never confirming transaction (read the tooltip) - Si les frais sont trop bas, cette transaction pourrait n’être jamais confirmée (lire l’infobulle) - - - (Smart fee not initialized yet. This usually takes a few blocks…) - (Les frais intelligents ne sont pas encore initialisés. Cela prend habituellement quelques blocs…) - - - Confirmation time target: - Estimation du délai de confirmation : - - - Enable Replace-By-Fee - Activer Remplacer-par-des-frais - - - With Replace-By-Fee (BIP-125) you can increase a transaction's fee after it is sent. Without this, a higher fee may be recommended to compensate for increased transaction delay risk. - Avec Remplacer-par-des-frais (BIP-125), vous pouvez augmenter les frais de transaction après qu’elle est envoyée. Sans cela, des frais plus élevés peuvent être recommandés pour compenser le risque accru de retard transactionnel. - - - Clear &All - &Tout effacer - - - Balance: - Solde : - - - Confirm the send action - Confirmer l’action d’envoi - - - S&end - E&nvoyer - - - Copy quantity - Copier la quantité - - - Copy amount - Copier le montant - - - Copy fee - Copier les frais - - - Copy after fee - Copier après les frais - - - Copy bytes - Copier les octets - - - Copy change - Copier la monnaie - - - %1 (%2 blocks) - %1 (%2 blocs) - - - Sign on device - "device" usually means a hardware wallet. - Signer sur l’appareil externe - - - Connect your hardware wallet first. - Connecter d’abord le porte-monnaie matériel. - - - Set external signer script path in Options -> Wallet - "External signer" means using devices such as hardware wallets. - Définir le chemin script du signataire externe dans Options -> Porte-monnaie - - - Cr&eate Unsigned - Cr&éer une transaction non signée - - - Creates a Partially Signed Bitcoin Transaction (PSBT) for use with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet. - Crée une transaction Bitcoin signée partiellement (TBSP) à utiliser, par exemple, avec un porte-monnaie %1 hors ligne ou avec un porte-monnaie matériel compatible TBSP. - - - %1 to '%2' - %1 à '%2' - - - %1 to %2 - %1 à %2 - - - To review recipient list click "Show Details…" - Pour réviser la liste des destinataires, cliquez sur « Afficher les détails… » - - - Sign failed - Échec de signature - - - External signer not found - "External signer" means using devices such as hardware wallets. - Le signataire externe est introuvable - - - External signer failure - "External signer" means using devices such as hardware wallets. - Échec du signataire externe - - - Save Transaction Data - Enregistrer les données de la transaction - - - Partially Signed Transaction (Binary) - Expanded name of the binary PSBT file format. See: BIP 174. - Transaction signée partiellement (fichier binaire) - - - PSBT saved - Popup message when a PSBT has been saved to a file - La TBSP a été enregistrée - - - External balance: - Solde externe : - - - or - ou - - - You can increase the fee later (signals Replace-By-Fee, BIP-125). - Vous pouvez augmenter les frais ultérieurement (signale Remplacer-par-des-frais, BIP-125). - - - 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. - Text to inform a user attempting to create a transaction of their current options. At this stage, a user can only create a PSBT. This string is displayed when private keys are disabled and an external signer is not available. - Veuillez réviser votre proposition de transaction. Une transaction Bitcoin partiellement signée (TBSP) sera produite, que vous pourrez enregistrer ou copier puis signer avec, par exemple, un porte-monnaie %1 hors ligne ou avec un porte-monnaie matériel compatible TBSP. - - - %1 from wallet '%2' - %1 du porte-monnaie « %2 ». - - - Do you want to create this transaction? - Message displayed when attempting to create a transaction. Cautionary text to prompt the user to verify that the displayed transaction details represent the transaction the user intends to create. - Voulez-vous créer cette transaction ? - - - Please, review your transaction. You can create and send this transaction or create 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. - Text to inform a user attempting to create a transaction of their current options. At this stage, a user can send their transaction or create a PSBT. This string is displayed when both private keys and PSBT controls are enabled. - Veuillez réviser votre transaction. Vous pouvez créer et envoyer cette transaction ou créer une transaction Bitcoin partiellement signée (TBSP), que vous pouvez enregistrer ou copier, et ensuite avec laquelle signer, par ex., un porte-monnaie %1 hors ligne ou avec un porte-monnaie matériel compatible TBSP. - - - Please, review your transaction. - Text to prompt a user to review the details of the transaction they are attempting to send. - Veuillez vérifier votre transaction. - - - Transaction fee - Frais de transaction - - - Not signalling Replace-By-Fee, BIP-125. - Ne signale pas Remplacer-par-des-frais, BIP-125. - - - Total Amount - Montant total - - - Unsigned Transaction - PSBT copied - Caption of "PSBT has been copied" messagebox - Transaction non signée - - - The PSBT has been copied to the clipboard. You can also save it. - Le PSBT a été copié dans le presse-papiers. Vous pouvez également le sauvegarder. - - - PSBT saved to disk - PSBT sauvegardé sur le disque - - - Confirm send coins - Confirmer l’envoi de pièces - - - Watch-only balance: - Solde juste-regarder : - - - The recipient address is not valid. Please recheck. - L’adresse du destinataire est invalide. Veuillez la revérifier. - - - The amount to pay must be larger than 0. - Le montant à payer doit être supérieur à 0. - - - The amount exceeds your balance. - Le montant dépasse votre solde. - - - The total exceeds your balance when the %1 transaction fee is included. - Le montant dépasse votre solde quand les frais de transaction de %1 sont compris. - - - Duplicate address found: addresses should only be used once each. - Une adresse identique a été trouvée : chaque adresse ne devrait être utilisée qu’une fois. - - - Transaction creation failed! - Échec de création de la transaction - - - A fee higher than %1 is considered an absurdly high fee. - Des frais supérieurs à %1 sont considérés comme ridiculement élevés. - - - Estimated to begin confirmation within %n block(s). - - Début de confirmation estimé à %n bloc. - Début de confirmation estimé à %n blocs. - - - - Warning: Invalid Bitcoin address - Avertissement : L’adresse Bitcoin est invalide - - - Warning: Unknown change address - Avertissement : L’adresse de monnaie est inconnue - - - Confirm custom change address - Confirmer l’adresse personnalisée de monnaie - - - 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? - L’adresse que vous avez sélectionnée pour la monnaie ne fait pas partie de ce porte-monnaie. Les fonds de ce porte-monnaie peuvent en partie ou en totalité être envoyés vers cette adresse. Êtes-vous certain ? - - - (no label) - (aucune étiquette) - - - - SendCoinsEntry - - A&mount: - &Montant : - - - Pay &To: - &Payer à : - - - &Label: - &Étiquette : - - - Choose previously used address - Choisir une adresse utilisée précédemment - - - The Bitcoin address to send the payment to - L’adresse Bitcoin à laquelle envoyer le paiement - - - Paste address from clipboard - Collez l’adresse du presse-papiers - - - Remove this entry - Supprimer cette entrée - - - The amount to send in the selected unit - Le montant à envoyer dans l’unité sélectionnée - - - 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. - Les frais seront déduits du montant envoyé. Le destinataire recevra moins de bitcoins que le montant saisi dans le champ de montant. Si plusieurs destinataires sont sélectionnés, les frais seront partagés également. - - - S&ubtract fee from amount - S&oustraire les frais du montant - - - Use available balance - Utiliser le solde disponible - - - Message: - Message : - - - Enter a label for this address to add it to the list of used addresses - Saisir une étiquette pour cette adresse afin de l’ajouter à la liste d’adresses utilisées - - - 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. - Un message qui était joint à l’URI bitcoin: et qui sera stocké avec la transaction pour référence. Note : Ce message ne sera pas envoyé par le réseau Bitcoin. - - - - SendConfirmationDialog - - Send - Envoyer - - - Create Unsigned - Créer une transaction non signée - - - - SignVerifyMessageDialog - - Signatures - Sign / Verify a Message - Signatures – Signer ou vérifier un message - - - &Sign Message - &Signer un message - - - You can sign messages/agreements with your legacy (P2PKH) 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. - Vous pouvez signer des messages ou des accords avec vos anciennes adresses (P2PKH) pour prouver que vous pouvez recevoir des bitcoins à ces dernières. Ne signer rien de vague ou au hasard, car des attaques d’hameçonnage pourraient essayer de vous faire signer avec votre identité afin de l’usurper. Ne signez que des déclarations entièrement détaillées et que vous acceptez. - - - The Bitcoin address to sign the message with - L’adresse Bitcoin avec laquelle signer le message - - - Choose previously used address - Choisir une adresse utilisée précédemment - - - Paste address from clipboard - Collez l’adresse du presse-papiers - - - Enter the message you want to sign here - Saisir ici le message que vous voulez signer - - - Copy the current signature to the system clipboard - Copier la signature actuelle dans le presse-papiers - - - Sign the message to prove you own this Bitcoin address - Signer le message afin de prouver que vous détenez cette adresse Bitcoin - - - Sign &Message - Signer le &message - - - Reset all sign message fields - Réinitialiser tous les champs de signature de message - - - Clear &All - &Tout effacer - - - &Verify Message - &Vérifier un message - - - Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction! - Saisissez ci-dessous l’adresse du destinataire, le message (assurez-vous de copier fidèlement les retours à la ligne, les espaces, les tabulations, etc.) et la signature pour vérifier le message. Faites attention à ne pas déduire davantage de la signature que ce qui est contenu dans le message signé même, pour éviter d’être trompé par une attaque de l’intercepteur. Notez que cela ne fait que prouver que le signataire reçoit avec l’adresse et ne peut pas prouver la provenance d’une transaction. - - - The Bitcoin address the message was signed with - L’adresse Bitcoin avec laquelle le message a été signé - - - The signed message to verify - Le message signé à vérifier - - - The signature given when the message was signed - La signature donnée quand le message a été signé - - - Verify the message to ensure it was signed with the specified Bitcoin address - Vérifier le message pour s’assurer qu’il a été signé avec l’adresse Bitcoin indiquée - - - Verify &Message - Vérifier le &message - - - Reset all verify message fields - Réinitialiser tous les champs de vérification de message - - - Click "Sign Message" to generate signature - Cliquez sur « Signer le message » pour générer la signature - - - The entered address is invalid. - L’adresse saisie est invalide. - - - Please check the address and try again. - Veuillez vérifier l’adresse et réessayer. - - - The entered address does not refer to a legacy (P2PKH) key. Message signing for SegWit and other non-P2PKH address types is not supported in this version of %1. Please check the address and try again. - L’adresse saisie ne fait pas référence à une ancienne clé (P2PKH). La signature des messages n’est pas prise en charge pour SegWit ni pour les autres types d’adresses non P2PKH dans cette version de %1. Vérifiez l’adresse et réessayez. - - - Wallet unlock was cancelled. - Le déverrouillage du porte-monnaie a été annulé. - - - No error - Aucune erreur - - - Private key for the entered address is not available. - La clé privée pour l’adresse saisie n’est pas disponible. - - - Message signing failed. - Échec de signature du message. - - - Message signed. - Le message a été signé. - - - The signature could not be decoded. - La signature n’a pu être décodée. - - - Please check the signature and try again. - Veuillez vérifier la signature et réessayer. - - - The signature did not match the message digest. - La signature ne correspond pas au condensé du message. - - - Message verification failed. - Échec de vérification du message. - - - Message verified. - Le message a été vérifié. - - - - SplashScreen - - (press q to shutdown and continue later) - (appuyer sur q pour fermer et poursuivre plus tard) - - - press q to shutdown - Appuyer sur q pour fermer - - - - TrafficGraphWidget - - kB/s - Ko/s - - - - TransactionDesc - - conflicted with a transaction with %1 confirmations - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that conflicts with a confirmed transaction. - est en conflit avec une transaction ayant %1 confirmations - - - 0/unconfirmed, in memory pool - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is in the memory pool. - 0/non confirmé, dans la pool de mémoire - - - 0/unconfirmed, not in memory pool - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is not in the memory pool. - 0/non confirmé, pas dans la pool de mémoire - - - abandoned - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an abandoned transaction. - abandonnée - - - %1/unconfirmed - Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in at least one block, but less than 6 blocks. - %1/non confirmée - - - Status - État - - - Generated - Générée - - - From - De - - - unknown - inconnue - - - To - À - - - own address - votre adresse - - - watch-only - juste-regarder - - - label - étiquette - - - Credit - Crédit - - - matures in %n more block(s) - - arrivera à maturité dans %n bloc - arrivera à maturité dans %n blocs - - - - not accepted - non acceptée - - - Debit - Débit - - - Total debit - Débit total - - - Total credit - Crédit total - - - Transaction fee - Frais de transaction - - - Net amount - Montant net - - - Comment - Commentaire - - - Transaction ID - ID de la transaction - - - Transaction total size - Taille totale de la transaction - - - Transaction virtual size - Taille virtuelle de la transaction - - - Output index - Index des sorties - - - %1 (Certificate was not verified) - %1 (ce certificat n’a pas été vérifié) - - - Merchant - Marchand - - - Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Les pièces générées doivent mûrir pendant %1 blocs avant de pouvoir être dépensées. Quand vous avez généré ce bloc, il a été diffusé sur le réseau pour être ajouté à la chaîne de blocs. Si son intégration à la chaîne échoue, son état sera modifié en « non acceptée » et il ne sera pas possible de le dépenser. Cela peut arriver occasionnellement si un autre nœud génère un bloc à quelques secondes du vôtre. - - - Debug information - Renseignements de débogage - - - Inputs - Entrées - - - Amount - Montant - - - true - vrai - - - false - faux - - - - TransactionDescDialog - - This pane shows a detailed description of the transaction - Ce panneau affiche une description détaillée de la transaction - - - Details for %1 - Détails de %1 - - - - TransactionTableModel - - Label - Étiquette - - - Unconfirmed - Non confirmée - - - Abandoned - Abandonnée - - - Confirming (%1 of %2 recommended confirmations) - Confirmation (%1 sur %2 confirmations recommandées) - - - Confirmed (%1 confirmations) - Confirmée (%1 confirmations) - - - Conflicted - En conflit - - - Immature (%1 confirmations, will be available after %2) - Immature (%1 confirmations, sera disponible après %2) - - - Generated but not accepted - Générée mais non acceptée - - - Received with - Reçue avec - - - Received from - Reçue de - - - Sent to - Envoyée à - - - Mined - Miné - - - watch-only - juste-regarder - - - (n/a) - (n.d) - - - (no label) - (aucune étiquette) - - - Transaction status. Hover over this field to show number of confirmations. - État de la transaction. Survoler ce champ avec la souris pour afficher le nombre de confirmations. - - - Date and time that the transaction was received. - Date et heure de réception de la transaction. - - - Type of transaction. - Type de transaction. - - - Whether or not a watch-only address is involved in this transaction. - Une adresse juste-regarder est-elle ou non impliquée dans cette transaction. - - - User-defined intent/purpose of the transaction. - Intention, but de la transaction défini par l’utilisateur. - - - Amount removed from or added to balance. - Le montant a été ajouté ou soustrait du solde. - - - - TransactionView - - All - Toutes - - - Today - Aujourd’hui - - - This week - Cette semaine - - - This month - Ce mois - - - Last month - Le mois dernier - - - This year - Cette année - - - Received with - Reçue avec - - - Sent to - Envoyée à - - - Mined - Miné - - - Other - Autres - - - Enter address, transaction id, or label to search - Saisir l’adresse, l’ID de transaction ou l’étiquette à chercher - - - Min amount - Montant min. - - - Range… - Plage… - - - &Copy address - &Copier l’adresse - - - Copy &label - Copier l’&étiquette - - - Copy &amount - Copier le &montant - - - Copy transaction &ID - Copier l’&ID de la transaction - - - Copy &raw transaction - Copier la transaction &brute - - - Copy full transaction &details - Copier tous les &détails de la transaction - - - &Show transaction details - &Afficher les détails de la transaction - - - Increase transaction &fee - Augmenter les &frais de transaction - - - A&bandon transaction - A&bandonner la transaction - - - &Edit address label - &Modifier l’adresse de l’étiquette - - - Show in %1 - Transactions table context menu action to show the selected transaction in a third-party block explorer. %1 is a stand-in argument for the URL of the explorer. - Afficher dans %1 - - - Export Transaction History - Exporter l’historique transactionnel - - - Comma separated file - Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. - Fichier séparé par des virgules - - - Confirmed - Confirmée - - - Watch-only - Juste-regarder - - - Label - Étiquette - - - Address - Adresse - - - ID - ID - - - Exporting Failed - Échec d’exportation - - - There was an error trying to save the transaction history to %1. - Une erreur est survenue lors de l’enregistrement de l’historique transactionnel vers %1. - - - Exporting Successful - L’exportation est réussie - - - The transaction history was successfully saved to %1. - L’historique transactionnel a été enregistré avec succès vers %1. - - - Range: - Plage : - - - to - à - - - - WalletFrame - - No wallet has been loaded. -Go to File > Open Wallet to load a wallet. -- OR - - Aucun porte-monnaie n’a été chargé. -Accédez à Fichier > Ouvrir un porte-monnaie pour en charger un. -– OU – - - - Create a new wallet - Créer un nouveau porte-monnaie - - - Error - Erreur - - - Unable to decode PSBT from clipboard (invalid base64) - Impossible de décoder la TBSP du presse-papiers (le Base64 est invalide) - - - Load Transaction Data - Charger les données de la transaction - - - Partially Signed Transaction (*.psbt) - Transaction signée partiellement (*.psbt) - - - PSBT file must be smaller than 100 MiB - Le fichier de la TBSP doit être inférieur à 100 Mio - - - Unable to decode PSBT - Impossible de décoder la TBSP - - - - WalletModel - - Send Coins - Envoyer des pièces - - - Fee bump error - Erreur d’augmentation des frais - - - Increasing transaction fee failed - Échec d’augmentation des frais de transaction - - - Do you want to increase the fee? - Asks a user if they would like to manually increase the fee of a transaction that has already been created. - Voulez-vous augmenter les frais ? - - - Current fee: - Frais actuels : - - - Increase: - Augmentation : - - - New fee: - Nouveaux frais : - - - 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. - Avertissement : Ceci pourrait payer les frais additionnel en réduisant les sorties de monnaie ou en ajoutant des entrées, si nécessaire. Une nouvelle sortie de monnaie pourrait être ajoutée si aucune n’existe déjà. Ces changements pourraient altérer la confidentialité. - - - Confirm fee bump - Confirmer l’augmentation des frais - - - Can't draft transaction. - Impossible de créer une ébauche de la transaction. - - - PSBT copied - La TBPS a été copiée - - - Fee-bump PSBT copied to clipboard - La TBSP des augmentations de frais a été copiée dans le presse-papiers. - - - Can't sign transaction. - Impossible de signer la transaction. - - - Could not commit transaction - Impossible de valider la transaction - - - Signer error - Erreur de signataire - - - Can't display address - Impossible d’afficher l’adresse - - - - WalletView - - &Export - &Exporter - - - Export the data in the current tab to a file - Exporter les données de l’onglet actuel vers un fichier - - - Backup Wallet - Sauvegarder le porte-monnaie - - - Wallet Data - Name of the wallet data file format. - Données du porte-monnaie - - - Backup Failed - Échec de sauvegarde - - - There was an error trying to save the wallet data to %1. - Une erreur est survenue lors de l’enregistrement des données du porte-monnaie vers %1. - - - Backup Successful - La sauvegarde est réussie - - - The wallet data was successfully saved to %1. - Les données du porte-monnaie ont été enregistrées avec succès vers %1. - - - Cancel - Annuler - - - - bitcoin-core - - The %s developers - Les développeurs de %s - - - %s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup. - %s est corrompu. Essayez l’outil bitcoin-wallet pour le sauver ou restaurez une sauvegarde. - - - %s failed to validate the -assumeutxo snapshot state. This indicates a hardware problem, or a bug in the software, or a bad software modification that allowed an invalid snapshot to be loaded. As a result of this, the node will shut down and stop using any state that was built on the snapshot, resetting the chain height from %d to %d. On the next restart, the node will resume syncing from %d without using any snapshot data. Please report this incident to %s, including how you obtained the snapshot. The invalid snapshot chainstate will be left on disk in case it is helpful in diagnosing the issue that caused this error. - %s a échoué à valider l'état instantané -assumeutxo. Cela indique un problème matériel, ou un bug dans le logiciel, ou une mauvaise modification du logiciel qui a permis de charger un instantané invalide. En conséquence, le nœud s'arrêtera et cessera d'utiliser tout état qui a été construit sur l'instantané, réinitialisant la hauteur de la chaîne de %d à %d. Au prochain redémarrage, le nœud reprendra la synchronisation à partir de %d sans utiliser de données d'instantané. Veuillez signaler cet incident à %s, en précisant comment vous avez obtenu l'instantané. L'état de chaîne d'instantané invalide sera conservé sur le disque au cas où il serait utile pour diagnostiquer le problème qui a causé cette erreur. - - - %s request to listen on port %u. This port is considered "bad" and thus it is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for details and a full list. - %s demande d'écouter sur le port %u. Ce port est considéré comme "mauvais" et il est donc peu probable qu'un pair s'y connecte. Voir doc/p2p-bad-ports.md pour plus de détails et une liste complète. - - - Cannot downgrade wallet from version %i to version %i. Wallet version unchanged. - Impossible de rétrograder le porte-monnaie de la version %i à la version %i. La version du porte-monnaie reste inchangée. - - - 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. - Impossible de mettre à niveau un porte-monnaie divisé non-HD de la version %i vers la version %i sans mise à niveau pour prendre en charge la réserve de clés antérieure à la division. Veuillez utiliser la version %i ou ne pas indiquer de version. - - - Disk space for %s may not accommodate the block files. Approximately %u GB of data will be stored in this directory. - L'espace disque %s peut ne pas être suffisant pour les fichiers en bloc. Environ %u Go de données seront stockés dans ce répertoire. - - - Distributed under the MIT software license, see the accompanying file %s or %s - Distribué sous la licence MIT d’utilisation d’un logiciel, consultez le fichier joint %s ou %s - - - Error loading wallet. Wallet requires blocks to be downloaded, and software does not currently support loading wallets while blocks are being downloaded out of order when using assumeutxo snapshots. Wallet should be able to load successfully after node sync reaches height %s - Erreur de chargement du portefeuille. Le portefeuille nécessite le téléchargement de blocs, et le logiciel ne prend pas actuellement en charge le chargement de portefeuilles lorsque les blocs sont téléchargés dans le désordre lors de l'utilisation de snapshots assumeutxo. Le portefeuille devrait pouvoir être chargé avec succès une fois que la synchronisation des nœuds aura atteint la hauteur %s - - - Error reading %s! Transaction data may be missing or incorrect. Rescanning wallet. - Erreur de lecture de %s : soit les données de la transaction manquent soit elles sont incorrectes. Réanalyse du porte-monnaie. - - - Error starting/committing db txn for wallet transactions removal process - Erreur de lancement, de validation de la transaction de base de données pour la suppression des transactions du portemonnaie - - - Error: Dumpfile format record is incorrect. Got "%s", expected "format". - Erreur : L’enregistrement du format du fichier de vidage est incorrect. Est « %s », mais « format » est attendu. - - - Error: Dumpfile identifier record is incorrect. Got "%s", expected "%s". - Erreur : L’enregistrement de l’identificateur du fichier de vidage est incorrect. Est « %s », mais « %s » est attendu. - - - Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s - Erreur : La version du fichier de vidage n’est pas prise en charge. Cette version de bitcoin-wallet ne prend en charge que les fichiers de vidage version 1. Le fichier de vidage obtenu est de la version %s. - - - Error: Legacy wallets only support the "legacy", "p2sh-segwit", and "bech32" address types - Erreur : les porte-monnaie hérités ne prennent en charge que les types d’adresse « legacy », « p2sh-segwit », et « bech32 » - - - Error: Unable to produce descriptors for this legacy wallet. Make sure to provide the wallet's passphrase if it is encrypted. - Erreur : Impossible de produire des descripteurs pour ce portefeuille existant. Veillez à fournir la phrase secrète du portefeuille s'il est crypté. - - - File %s already exists. If you are sure this is what you want, move it out of the way first. - Le fichier %s existe déjà. Si vous confirmez l’opération, déplacez-le avant. - - - Invalid or corrupt peers.dat (%s). If you believe this is a bug, please report it to %s. As a workaround, you can move the file (%s) out of the way (rename, move, or delete) to have a new one created on the next start. - peers.dat est invalide ou corrompu (%s). Si vous pensez que c’est un bogue, veuillez le signaler à %s. Pour y remédier, vous pouvez soit renommer, soit déplacer soit supprimer le fichier (%s) et un nouveau sera créé lors du prochain démarrage. - - - Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets - Une valeur invalide a été détectée pour « -wallet » ou pour « -nowallet ». « -wallet » nécessite une valeur de chaine alors que « -nowallet » n’accepte que « 1 » pour désactiver tous les portemonnaies - - - More than one onion bind address is provided. Using %s for the automatically created Tor onion service. - Plus d’une adresse oignon de liaison est indiquée. %s sera utilisée pour le service oignon de Tor créé automatiquement. - - - No dump file provided. To use createfromdump, -dumpfile=<filename> must be provided. - Aucun fichier de vidage n’a été indiqué. Pour utiliser createfromdump, -dumpfile=<filename> doit être indiqué. - - - No dump file provided. To use dump, -dumpfile=<filename> must be provided. - Aucun fichier de vidage n’a été indiqué. Pour utiliser dump, -dumpfile=<filename> doit être indiqué. - - - No wallet file format provided. To use createfromdump, -format=<format> must be provided. - Aucun format de fichier de porte-monnaie n’a été indiqué. Pour utiliser createfromdump, -format=<format> doit être indiqué. - - - Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. - L’option « -upnp » est définie, mais la prise en charge d’UPnP a été abandonnée dans la version 29.0. Envisagez de la remplacer par « -natpmp ». - - - Please contribute if you find %s useful. Visit %s for further information about the software. - Si vous trouvez %s utile, veuillez y contribuer. Pour de plus de précisions sur le logiciel, rendez-vous sur %s. - - - Prune configured below the minimum of %d MiB. Please use a higher number. - L’élagage est configuré au-dessous du minimum de %d Mio. Veuillez utiliser un nombre plus élevé. - - - Prune mode is incompatible with -reindex-chainstate. Use full -reindex instead. - Le mode Prune est incompatible avec -reindex-chainstate. Utilisez plutôt -reindex complet. - - - Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node) - Élagage : la dernière synchronisation de porte-monnaie va par-delà les données élaguées. Vous devez -reindex (réindexer, télécharger de nouveau toute la chaîne de blocs en cas de nœud élagué) - - - Rename of '%s' -> '%s' failed. You should resolve this by manually moving or deleting the invalid snapshot directory %s, otherwise you will encounter the same error again on the next startup. - La modification de '%s' -> '%s' a échoué. Vous devriez résoudre cela en déplaçant ou en supprimant manuellement le répertoire de snapshot invalide %s, sinon vous rencontrerez la même erreur à nouveau au prochain démarrage. - - - SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported - SQLiteDatabase : la version %d du schéma de porte-monnaie sqlite est inconnue. Seule la version %d est prise en charge - - - The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct - La base de données des blocs comprend un bloc qui semble provenir du futur. Cela pourrait être causé par la date et l’heure erronées de votre ordinateur. Ne reconstruisez la base de données des blocs que si vous êtes certain que la date et l’heure de votre ordinateur sont justes. - - - The transaction amount is too small to send after the fee has been deducted - Le montant de la transaction est trop bas pour être envoyé une fois que les frais ont été déduits - - - 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 - Cette erreur pourrait survenir si ce porte-monnaie n’a pas été fermé proprement et s’il a été chargé en dernier avec une nouvelle version de Berkeley DB. Si c’est le cas, veuillez utiliser le logiciel qui a chargé ce porte-monnaie en dernier. - - - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - Ceci est une préversion de test — son utilisation est entièrement à vos risques — ne l’utilisez pour miner ou pour des applications marchandes - - - This is the maximum transaction fee you pay (in addition to the normal fee) to prioritize partial spend avoidance over regular coin selection. - Les frais maximaux de transaction que vous payez (en plus des frais habituels) afin de prioriser une dépense non partielle plutôt qu’une sélection normale de pièces. - - - This is the transaction fee you may discard if change is smaller than dust at this level - Les frais de transaction que vous pouvez ignorer si la monnaie rendue est inférieure à la poussière à ce niveau - - - This is the transaction fee you may pay when fee estimates are not available. - Il s’agit des frais de transaction que vous pourriez payer si aucune estimation de frais n’est proposée. - - - Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments. - La taille totale de la chaîne de version de réseau (%i) dépasse la longueur maximale (%i). Réduire le nombre ou la taille de uacomments. - - - Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate. - Impossible de relire les blocs. Vous devrez reconstruire la base de données avec -reindex-chainstate. - - - Unknown wallet file format "%s" provided. Please provide one of "bdb" or "sqlite". - Le format de fichier porte-monnaie « %s » indiqué est inconnu. Veuillez soit indiquer « bdb » soit « sqlite ». - - - Unsupported category-specific logging level %1$s=%2$s. Expected %1$s=<category>:<loglevel>. Valid categories: %3$s. Valid loglevels: %4$s. - Niveau de journalisation spécifique à la catégorie non pris en charge %1$s=%2$s. Attendu %1$s=<catégorie>:<niveaudejournal>. Catégories valides : %3$s. Niveaux de journalisation valides : %4$s. - - - Unsupported chainstate database format found. Please restart with -reindex-chainstate. This will rebuild the chainstate database. - Le format de la base de données chainstate n'est pas supporté. Veuillez redémarrer avec -reindex-chainstate. Cela reconstruira la base de données chainstate. - - - Wallet created successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. - Portefeuille créé avec succès. Le type de portefeuille ancien est en cours de suppression et la prise en charge de la création et de l'ouverture des portefeuilles anciens sera supprimée à l'avenir. - - - Wallet loaded successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. Legacy wallets can be migrated to a descriptor wallet with migratewallet. - Portefeuille chargé avec succès. Le type de portefeuille existant est obsolète et la prise en charge de la création et de l'ouverture de portefeuilles existants sera supprimée à l'avenir. Les anciens portefeuilles peuvent être migrés vers un portefeuille descripteur avec migratewallet. - - - Warning: Dumpfile wallet format "%s" does not match command line specified format "%s". - Avertissement : Le format du fichier de vidage de porte-monnaie « %s » ne correspond pas au format « %s » indiqué dans la ligne de commande. - - - Warning: Private keys detected in wallet {%s} with disabled private keys - Avertissement : Des clés privées ont été détectées dans le porte-monnaie {%s} avec des clés privées désactivées - - - Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. - Avertissement : Nous ne semblons pas être en accord complet avec nos pairs. Une mise à niveau pourrait être nécessaire pour vous ou pour d’autres nœuds du réseau. - - - Witness data for blocks after height %d requires validation. Please restart with -reindex. - Les données témoin pour les blocs postérieurs à la hauteur %d exigent une validation. Veuillez redémarrer avec -reindex. - - - You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain - Vous devez reconstruire la base de données en utilisant -reindex afin de revenir au mode sans élagage. Ceci retéléchargera complètement la chaîne de blocs. - - - %s is set very high! - La valeur %s est très élevée - - - -maxmempool must be at least %d MB - -maxmempool doit être d’au moins %d Mo - - - Cannot obtain a lock on directory %s. %s is probably already running. - Impossible d’obtenir un verrou sur le dossier %s. %s fonctionne probablement déjà. - - - Cannot resolve -%s address: '%s' - Impossible de résoudre l’adresse -%s : « %s » - - - Cannot set -forcednsseed to true when setting -dnsseed to false. - Impossible de définir -forcednsseed comme vrai si -dnsseed est défini comme faux. - - - Cannot set -peerblockfilters without -blockfilterindex. - Impossible de définir -peerblockfilters sans -blockfilterindex - - - %s is set very high! Fees this large could be paid on a single transaction. - %s est très élevé ! Des frais aussi importants pourraient être payés sur une seule transaction. - - - Cannot provide specific connections and have addrman find outgoing connections at the same time. - Il est impossible d’indiquer des connexions précises et en même temps de demander à addrman de trouver les connexions sortantes. - - - Error loading %s: External signer wallet being loaded without external signer support compiled - Erreur de chargement de %s : le porte-monnaie signataire externe est chargé sans que la prise en charge de signataires externes soit compilée - - - Error reading %s! All keys read correctly, but transaction data or address metadata may be missing or incorrect. - Erreur de lecture de %s! Toutes les clés ont été lues correctement, mais les données de transaction ou les métadonnées d'adresse peuvent être manquantes ou incorrectes. - - - Error: Address book data in wallet cannot be identified to belong to migrated wallets - Erreur : Les données du carnet d'adresses du portefeuille ne peuvent pas être identifiées comme appartenant à des portefeuilles migrés - - - Error: Duplicate descriptors created during migration. Your wallet may be corrupted. - Erreur : Descripteurs en double créés pendant la migration. Votre portefeuille est peut-être corrompu. - - - Error: Transaction %s in wallet cannot be identified to belong to migrated wallets - Erreur : La transaction %s dans le portefeuille ne peut pas être identifiée comme appartenant aux portefeuilles migrés. - - - Failed to calculate bump fees, because unconfirmed UTXOs depend on enormous cluster of unconfirmed transactions. - Échec du calcul des frais de majoration, car les UTXO non confirmés dépendent d'un énorme groupe de transactions non confirmées. - - - Failed to remove snapshot chainstate dir (%s). Manually remove it before restarting. - - Échec de suppression du répertoire de l’instantané d’état de la chaîne (%s). Supprimez-le manuellement avant de redémarrer. - - - Failed to rename invalid peers.dat file. Please move or delete it and try again. - Échec de renommage du fichier peers.dat invalide. Veuillez le déplacer ou le supprimer, puis réessayer. - - - Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable %s. - L'estimation des frais a échoué. Fallbackfee est désactivé. Attendez quelques blocs ou activez %s. - - - Flushing block file to disk failed. This is likely the result of an I/O error. - Échec de vidage du fichier des blocs sur le disque, probablement à cause d’une erreur d’E/S. - - - Flushing undo file to disk failed. This is likely the result of an I/O error. - Échec de vidage du fichier d’annulation sur le disque, probablement à cause d’une erreur d’E/S. - - - Incompatible options: -dnsseed=1 was explicitly specified, but -onlynet forbids connections to IPv4/IPv6 - Options incompatibles : -dnsseed=1 a été explicitement spécifié, mais -onlynet interdit les connexions vers IPv4/IPv6 - - - Invalid amount for %s=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions) - Montant non valide pour %s=<amount> : '%s' (doit être au moins égal au minrelay fee de %s pour éviter les transactions bloquées) - - - Maximum transaction weight is less than transaction weight without inputs - Le poids maximal de la transaction est inférieur au poids de la transaction sans entrées - - - Maximum transaction weight is too low, can not accommodate change output - Le poids maximal de la transaction est trop faible et ne permet pas les sorties de monnaie - - - Outbound connections restricted to CJDNS (-onlynet=cjdns) but -cjdnsreachable is not provided - Connexions sortantes limitées à CJDNS (-onlynet=cjdns) mais -cjdnsreachable n'est pas fourni - - - Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is explicitly forbidden: -onion=0 - Connexions sortantes limitées à Tor (-onlynet=onion) mais le proxy pour atteindre le réseau Tor est explicitement interdit : -onion=0 - - - Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is not provided: none of -proxy, -onion or -listenonion is given - Connexions sortantes limitées à Tor (-onlynet=onion) mais le proxy pour atteindre le réseau Tor n'est pas fourni : aucun des paramètres -proxy, -onion ou -listenonion n'est donné - - - Outbound connections restricted to i2p (-onlynet=i2p) but -i2psam is not provided - Connexions sortantes limitées à i2p (-onlynet=i2p) mais -i2psam n'est pas fourni - - - Rename of '%s' -> '%s' failed. Cannot clean up the background chainstate leveldb directory. - Échec de renommage de « %s » en « %s ». Impossible de nettoyer le répertoire de la base de données d’état de chaîne d’arrière-plan. - - - Specified -blockmaxweight (%d) exceeds consensus maximum block weight (%d) - Le poids maximal de bloc -blockmaxweight indiqué (%d) dépasse le poids maximal de bloc du consensus (%d). - - - Specified -blockreservedweight (%d) exceeds consensus maximum block weight (%d) - Le poids réservé de bloc -blockreservedweight indiqué (%d) dépasse le poids maximal de bloc du consensus (%d). - - - Specified -blockreservedweight (%d) is lower than minimum safety value of (%d) - Le poids réservé de bloc -blockreservedweight indiqué (%d) est inférieur à la valeur minimale de sécurité de (%d) - - - The combination of the pre-selected inputs and the wallet automatic inputs selection exceeds the transaction maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - La combinaison des entrées présélectionnées et de la sélection automatique des entrées du porte-monnaie dépasse le poids maximal de la transaction. Essayez d’envoyer un montant inférieur ou de consolider manuellement les UTXO de votre porte-monnaie. - - - The inputs size exceeds the maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - La taille des entrées dépasse le poids maximum. Veuillez essayer d'envoyer un montant plus petit ou de consolider manuellement les UTXOs de votre portefeuille. - - - The preselected coins total amount does not cover the transaction target. Please allow other inputs to be automatically selected or include more coins manually - Le montant total des pièces présélectionnées ne couvre pas l'objectif de la transaction. Veuillez permettre à d'autres entrées d'être sélectionnées automatiquement ou inclure plus de pièces manuellement - - - Transaction requires one destination of non-0 value, a non-0 feerate, or a pre-selected input - La transaction nécessite une destination d'une valeur non nulle, un ratio de frais non nul, ou une entrée présélectionnée. - - - UTXO snapshot failed to validate. Restart to resume normal initial block download, or try loading a different snapshot. - La validation de la snapshot UTXO a échoué. Redémarrez pour reprendre le téléchargement normal du bloc initial, ou essayez de charger une autre snapshot. - - - Unconfirmed UTXOs are available, but spending them creates a chain of transactions that will be rejected by the mempool - Les UTXO non confirmés sont disponibles, mais les dépenser crée une chaîne de transactions qui sera rejetée par le mempool. - - - Unexpected legacy entry in descriptor wallet found. Loading wallet %s - -The wallet might have been tampered with or created with malicious intent. - - Une entrée héritée inattendue dans le portefeuille de descripteurs a été trouvée. Chargement du portefeuille %s - -Le portefeuille peut avoir été altéré ou créé avec des intentions malveillantes. - - - - Unrecognized descriptor found. Loading wallet %s - -The wallet might had been created on a newer version. -Please try running the latest software version. - - Descripteur non reconnu trouvé. Chargement du portefeuille %s - -Le portefeuille a peut-être été créé avec une version plus récente. -Veuillez essayer d'utiliser la dernière version du logiciel. - - - - Your computer's date and time appear to be more than %d minutes out of sync with the network, this may lead to consensus failure. After you've confirmed your computer's clock, this message should no longer appear when you restart your node. Without a restart, it should stop showing automatically after you've connected to a sufficient number of new outbound peers, which may take some time. You can inspect the `timeoffset` field of the `getpeerinfo` and `getnetworkinfo` RPC methods to get more info. - La date et l’heure de votre ordinateur semblent décalées de plus de %d minutes par rapport au réseau, ce qui peut entraîner un échec de consensus. Après avoir confirmé l’heure de votre ordinateur, ce message ne devrait plus s’afficher après redémarrage de votre nœud. Sans redémarrage, il devrait cesser de s’afficher automatiquement si vous vous connectez à suffisamment de nouveaux pairs sortants, ce qui peut prendre du temps. Pour plus de précisions, vous pouvez inspecter le champ `timeoffset` des méthodes RPC `getpeerinfo` et `getnetworkinfo`. - - - -Unable to cleanup failed migration - -Impossible de corriger l'échec de la migration - - - -Unable to restore backup of wallet. - -Impossible de restaurer la sauvegarde du portefeuille. - - - whitebind may only be used for incoming connections ("out" was passed) - « whitebind » ne peut être utilisé que pour les connexions entrantes (« out » a été passé) - - - A fatal internal error occurred, see debug.log for details: - Une erreur interne fatale est survenue. Pour plus de précisions, consultez debug.log : - - - Assumeutxo data not found for the given blockhash '%s'. - Les données Assumeutxo sont introuvables pour l’empreinte de bloc « %s » donnée. - - - Block verification was interrupted - La vérification des blocs a été interrompue - - - Cannot write to directory '%s'; check permissions. - Impossible d’écrire dans le dossier « %s » ; vérifiez les droits. - - - Config setting for %s only applied on %s network when in [%s] section. - Paramètre de configuration pour %s qui n’est appliqué sur le réseau %s que s’il se trouve dans la section [%s]. - - - Copyright (C) %i-%i - Tous droits réservés © %i à %i - - - Corrupt block found indicating potential hardware failure. - Un bloc corrompu a été détecté, ce qui indique une défaillance matérielle possible. - - - Corrupted block database detected - Une base de données des blocs corrompue a été détectée - - - Could not find asmap file %s - Le fichier asmap %s est introuvable - - - Could not parse asmap file %s - Impossible d’analyser le fichier asmap %s - - - Disk space is too low! - L’espace disque est trop faible - - - Done loading - Le chargement est terminé - - - Dump file %s does not exist. - Le fichier de vidage %s n’existe pas. - - - Elliptic curve cryptography sanity check failure. %s is shutting down. - Échec du contrôle d’intégrité de la cryptographie à courbe elliptique. Fermeture de %s. - - - Error creating %s - Erreur de création de %s - - - Error initializing block database - Erreur d’initialisation de la base de données des blocs - - - Error initializing wallet database environment %s! - Erreur d’initialisation de l’environnement de la base de données du porte-monnaie %s  - - - Error loading %s - Erreur de chargement de %s - - - Error loading %s: Private keys can only be disabled during creation - Erreur de chargement de %s : les clés privées ne peuvent être désactivées qu’à la création - - - Error loading %s: Wallet corrupted - Erreur de chargement de %s : le porte-monnaie est corrompu - - - Error loading %s: Wallet requires newer version of %s - Erreur de chargement de %s : le porte-monnaie exige une version plus récente de %s - - - Error loading block database - Erreur de chargement de la base de données des blocs - - - Error loading databases - Erreur de chargement des bases de données - - - Error opening block database - Erreur d’ouverture de la base de données des blocs - - - Error opening coins database - Erreur d’ouverture de la base de données des pièces - - - Error reading configuration file: %s - Erreur de lecture du fichier de configuration : %s - - - Error reading from database, shutting down. - Erreur de lecture de la base de données, fermeture en cours - - - Error reading next record from wallet database - Erreur de lecture de l’enregistrement suivant de la base de données du porte-monnaie - - - Error: Cannot extract destination from the generated scriptpubkey - Erreur : Impossible d'extraire la destination du scriptpubkey généré - - - Error: Couldn't create cursor into database - Erreur : Impossible de créer le curseur dans la base de données - - - Error: Disk space is low for %s - Erreur : Il reste peu d’espace disque sur %s - - - Error: Dumpfile checksum does not match. Computed %s, expected %s - Erreur : La somme de contrôle du fichier de vidage ne correspond pas. Calculée %s, attendue %s - - - Error: Failed to create new watchonly wallet - Erreur : Echec de la création d'un nouveau portefeuille watchonly - - - Error: Got key that was not hex: %s - Erreur : La clé obtenue n’était pas hexadécimale : %s - - - Error: Got value that was not hex: %s - Erreur : La valeur obtenue n’était pas hexadécimale : %s - - - Error: Keypool ran out, please call keypoolrefill first - Erreur : La réserve de clés est épuisée, veuillez d’abord appeler « keypoolrefill » - - - Error: Missing checksum - Erreur : Aucune somme de contrôle n’est indiquée - - - Error: No %s addresses available. - Erreur : Aucune adresse %s n’est disponible. - - - Error: This wallet already uses SQLite - Erreur : Ce portefeuille utilise déjà SQLite - - - Error: This wallet is already a descriptor wallet - Erreur : Ce portefeuille est déjà un portefeuille de descripteurs - - - Error: Unable to begin reading all records in the database - Erreur : Impossible de commencer à lire tous les enregistrements de la base de données - - - Error: Unable to make a backup of your wallet - Erreur : Impossible d'effectuer une sauvegarde de votre portefeuille - - - Error: Unable to parse version %u as a uint32_t - Erreur : Impossible d’analyser la version %u en tant que uint32_t - - - Error: Unable to read all records in the database - Erreur : Impossible de lire tous les enregistrements de la base de données - - - Error: Unable to read wallet's best block locator record - Erreur : Impossible de lire l’enregistrement du meilleur bloc du porte-monnaie. - - - Error: Unable to remove watchonly address book data - Erreur : Impossible de supprimer les données du carnet d'adresses en mode veille - - - Error: Unable to write data to disk for wallet %s - Erreur : Impossible d’écrire les données sur le disque pour le portemonnaie %s - - - Error: Unable to write record to new wallet - Erreur : Impossible d’écrire l’enregistrement dans le nouveau porte-monnaie - - - Error: Unable to write solvable wallet best block locator record - Erreur : Impossible d’écrire l’enregistrement du localisateur du meilleur bloc soluble du porte-monnaie - - - Error: Unable to write watchonly wallet best block locator record - Erreur : Impossible d’écrire l’enregistrement du localisateur du meilleur bloc du porte-monnaie juste-regarder - - - Error: database transaction cannot be executed for wallet %s - Erreur ; La transaction de la base de données ne peut pas être exécutée pour le porte-monnaie %s - - - Failed to connect best block (%s). - Échec de connexion du meilleur bloc (%s). - - - Failed to disconnect block. - Échec de déconnexion du bloc. - - - Failed to listen on any port. Use -listen=0 if you want this. - Échec d'écoute sur tous les ports. Si cela est voulu, utiliser -listen=0. - - - Failed to read block. - Échec de lecture du bloc. - - - Failed to rescan the wallet during initialization - Échec de réanalyse du porte-monnaie lors de l’initialisation - - - Failed to start indexes, shutting down.. - Échec du démarrage des index, arrêt. - - - Failed to verify database - Échec de vérification de la base de données - - - Failed to write block. - Échec d’écriture du bloc. - - - Failed to write to block index database. - Échec d’écriture dans la base de données d’index des blocs. - - - Failed to write to coin database. - Échec d’écriture dans la base de données des pièces. - - - Failed to write undo data. - Échec d’écriture des données d’annulation. - - - Failure removing transaction: %s - Échec de suppression de la transaction :%s - - - Fee rate (%s) is lower than the minimum fee rate setting (%s) - Le taux de frais (%s) est inférieur au taux minimal de frais défini (%s) - - - Ignoring duplicate -wallet %s. - Ignore -wallet %s en double. - - - Importing… - Importation… - - - Incorrect or no genesis block found. Wrong datadir for network? - Bloc de genèse incorrect ou introuvable. Mauvais datadir pour le réseau ? - - - Initialization sanity check failed. %s is shutting down. - Échec d’initialisation du test de cohérence. %s est en cours de fermeture. - - - Input not found or already spent - L’entrée est introuvable ou a déjà été dépensée - - - Insufficient dbcache for block verification - Insuffisance de dbcache pour la vérification des blocs - - - Insufficient funds - Les fonds sont insuffisants - - - Invalid -i2psam address or hostname: '%s' - L’adresse ou le nom d’hôte -i2psam est invalide : « %s » - - - Invalid -onion address or hostname: '%s' - L’adresse ou le nom d’hôte -onion est invalide : « %s » - - - Invalid -proxy address or hostname: '%s' - L’adresse ou le nom d’hôte -proxy est invalide : « %s » - - - Invalid P2P permission: '%s' - L’autorisation P2P est invalide : « %s » - - - Invalid amount for %s=<amount>: '%s' (must be at least %s) - Montant non valide pour %s=<amount> : '%s' (doit être au moins %s) - - - Invalid amount for %s=<amount>: '%s' - Montant non valide pour %s=<amount> : '%s' - - - Invalid amount for -%s=<amount>: '%s' - Le montant est invalide pour -%s=<amount> : « %s » - - - Invalid netmask specified in -whitelist: '%s' - Le masque réseau indiqué dans -whitelist est invalide : « %s » - - - Invalid port specified in %s: '%s' - Port non valide spécifié dans %s: '%s' - - - Invalid pre-selected input %s - Entrée présélectionnée non valide %s - - - Listening for incoming connections failed (listen returned error %s) - L'écoute des connexions entrantes a échoué ( l'écoute a renvoyé une erreur %s) - - - Loading P2P addresses… - Chargement des adresses P2P… - - - Loading banlist… - Chargement de la liste d’interdiction… - - - Loading block index… - Chargement de l’index des blocs… - - - Loading wallet… - Chargement du porte-monnaie… - - - Maximum transaction weight must be between %d and %d - Le poids maximal de la transaction doit être compris entre %d et %d - - - Missing amount - Le montant manque - - - Missing solving data for estimating transaction size - Il manque des données de résolution pour estimer la taille de la transaction - - - Need to specify a port with -whitebind: '%s' - Un port doit être indiqué avec -whitebind : « %s » - - - No addresses available - Aucune adresse n’est disponible - - - Not found pre-selected input %s - Entrée présélectionnée introuvable %s - - - Not solvable pre-selected input %s - Entrée présélectionnée non solvable %s - - - Only direction was set, no permissions: '%s' - Seule la direction a été définie, sans permissions : « %s » - - - Prune cannot be configured with a negative value. - L’élagage ne peut pas être configuré avec une valeur négative - - - Prune mode is incompatible with -txindex. - Le mode élagage n’est pas compatible avec -txindex - - - Pruning blockstore… - Élagage du magasin de blocs… - - - Reducing -maxconnections from %d to %d, because of system limitations. - Réduction de -maxconnections de %d à %d, due aux restrictions du système. - - - Replaying blocks… - Relecture des blocs… - - - Rescanning… - Réanalyse… - - - SQLiteDatabase: Failed to execute statement to verify database: %s - SQLiteDatabase : échec d’exécution de l’instruction pour vérifier la base de données : %s - - - SQLiteDatabase: Failed to prepare statement to verify database: %s - SQLiteDatabase : échec de préparation de l’instruction pour vérifier la base de données : %s - - - SQLiteDatabase: Failed to read database verification error: %s - SQLiteDatabase : échec de lecture de l’erreur de vérification de la base de données : %s - - - SQLiteDatabase: Unexpected application id. Expected %u, got %u - SQLiteDatabase : l’ID de l’application est inattendu. %u attendu, %u retourné - - - Section [%s] is not recognized. - La section [%s] n’est pas reconnue - - - Signer did not echo address - Le signataire n’a pas fait écho à l’adresse - - - Signer echoed unexpected address %s - Le signataire a renvoyé une adresse inattendue %s - - - Signer returned error: %s - Le signataire a renvoyé une erreur : %s - - - Signing transaction failed - Échec de signature de la transaction - - - Specified -walletdir "%s" does not exist - Le -walletdir indiqué « %s » n’existe pas - - - Specified -walletdir "%s" is a relative path - Le -walletdir indiqué « %s » est un chemin relatif - - - Specified -walletdir "%s" is not a directory - Le -walletdir indiqué « %s » n’est pas un répertoire - - - Specified blocks directory "%s" does not exist. - Le répertoire des blocs indiqué « %s » n’existe pas - - - Specified data directory "%s" does not exist. - Le répertoire de données spécifié "%s" n'existe pas. - - - Starting network threads… - Démarrage des processus réseau… - - - System error while flushing: %s - Erreur système lors du vidage : %s - - - System error while loading external block file: %s - Erreur système lors du chargement d’un fichier de blocs externe : %s - - - System error while saving block to disk: %s - Erreur système lors de l’enregistrement du bloc sur le disque : %s - - - The source code is available from %s. - Le code source est publié sur %s. - - - The specified config file %s does not exist - Le fichier de configuration indiqué %s n’existe pas - - - The transaction amount is too small to pay the fee - Le montant de la transaction est trop bas pour que les frais soient payés - - - The transactions removal process can only be executed within a db txn - Le processus de suppression des transactions ne peut être exécuté que dans une transaction .de base de données - - - The wallet will avoid paying less than the minimum relay fee. - Le porte-monnaie évitera de payer moins que les frais minimaux de relais. - - - There is no ScriptPubKeyManager for this address - Il n’y a pas de « ScriptPubKeyManager » pour cette adresse. - - - This is experimental software. - Ce logiciel est expérimental. - - - This is the minimum transaction fee you pay on every transaction. - Il s’agit des frais minimaux que vous payez pour chaque transaction. - - - This is the transaction fee you will pay if you send a transaction. - Il s’agit des frais minimaux que vous payerez si vous envoyez une transaction. - - - Transaction %s does not belong to this wallet - La transaction %s n’appartient pas à ce porte-monnaie - - - Transaction amount too small - Le montant de la transaction est trop bas - - - Transaction amounts must not be negative - Les montants des transactions ne doivent pas être négatifs - - - Transaction change output index out of range - L’index des sorties de monnaie des transactions est hors échelle - - - Transaction must have at least one recipient - La transaction doit comporter au moins un destinataire - - - Transaction needs a change address, but we can't generate it. - Une adresse de monnaie est nécessaire à la transaction, mais nous ne pouvons pas la générer. - - - Transaction too large - La transaction est trop grosse - - - Unable to bind to %s on this computer (bind returned error %s) - Impossible de se lier à %s sur cet ordinateur (la liaison a retourné l’erreur %s) - - - Unable to bind to %s on this computer. %s is probably already running. - Impossible de se lier à %s sur cet ordinateur. %s fonctionne probablement déjà - - - Unable to create the PID file '%s': %s - Impossible de créer le fichier PID « %s » : %s - - - Unable to find UTXO for external input - Impossible de trouver l'UTXO pour l'entrée externe - - - Unable to generate initial keys - Impossible de générer les clés initiales - - - Unable to generate keys - Impossible de générer les clés - - - Unable to open %s for writing - Impossible d’ouvrir %s en écriture - - - Unable to parse -maxuploadtarget: '%s' - Impossible d’analyser -maxuploadtarget : « %s » - - - Unable to start HTTP server. See debug log for details. - Impossible de démarrer le serveur HTTP. Consulter le journal de débogage pour plus de précisions. - - - Unable to unload the wallet before migrating - Impossible de vider le portefeuille avant la migration - - - Unknown -blockfilterindex value %s. - La valeur -blockfilterindex %s est inconnue. - - - Unknown address type '%s' - Le type d’adresse « %s » est inconnu - - - Unknown change type '%s' - Le type de monnaie « %s » est inconnu - - - Unknown network specified in -onlynet: '%s' - Un réseau inconnu est indiqué dans -onlynet : « %s » - - - Unknown new rules activated (versionbit %i) - Les nouvelles règles inconnues sont activées (versionbit %i) - - - Unrecognised option "%s" provided in -test=<option>. - Une option non reconnue « %s » a été indiquée dans -test=<option>. - - - Unsupported global logging level %s=%s. Valid values: %s. - Niveau de journalisation global non pris en charge %s=%s. Valeurs valides : %s. - - - Wallet file creation failed: %s - Échec de création du fichier du porte-monnaie : %s - - - acceptstalefeeestimates is not supported on %s chain. - acceptstalefeeestimates n'est pas pris en charge sur la chaîne %s. - - - Unsupported logging category %s=%s. - La catégorie de journalisation %s=%s n’est pas prise en charge - - - Do you want to rebuild the databases now? - Voulez-vous reconstruire les bases de données maintenant ? - - - Error: Could not add watchonly tx %s to watchonly wallet - Erreur : Impossible d’ajouter la transaction juste-regarder %s au portefeuille juste-regarder - - - Error: Could not delete watchonly transactions. - Erreur : Impossible d’effacer les transactions juste-regarder. - - - Error: Wallet does not exist - Erreur : Le portemonnaie n’existe pas - - - Error: cannot remove legacy wallet records - Erreur : Impossible de supprimer les enregistrements d’anciens portemonnaies - - - Not enough file descriptors available. %d available, %d required. - Trop peu de descripteurs de fichiers sont proposés. %d proposés, %d requis - - - User Agent comment (%s) contains unsafe characters. - Le commentaire de l’agent utilisateur (%s) comporte des caractères dangereux - - - Verifying blocks… - Vérification des blocs… - - - Verifying wallet(s)… - Vérification des porte-monnaie… - - - Wallet needed to be rewritten: restart %s to complete - Le porte-monnaie devait être réécrit : redémarrer %s pour terminer l’opération. - - - Settings file could not be read - Impossible de lire le fichier des paramètres - - - Settings file could not be written - Impossible d’écrire le fichier de paramètres - - - \ No newline at end of file diff --git a/src/qt/locale/bitcoin_gl.ts b/src/qt/locale/bitcoin_gl.ts index 0e49d3214e0e..60e2d0db9aa3 100644 --- a/src/qt/locale/bitcoin_gl.ts +++ b/src/qt/locale/bitcoin_gl.ts @@ -187,6 +187,10 @@ Firmar é posible unicamente con enderezos de tipo 'legacy'. Continue Continuar + + Back + Volver + Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. Recorda que encriptar a tua carteira non protexe completamente que os teus bitcoins poidan ser roubados por malware que afecte ó teu computador. @@ -450,6 +454,10 @@ Firmar é posible unicamente con enderezos de tipo 'legacy'. &Change Passphrase… &Cambiar a frase de contrasinal... + + Sign &message… + Asinar &mensaxe… + Sign messages with your Bitcoin addresses to prove you own them Asina mensaxes cos teus enderezos Bitcoin para probar que che pertencen @@ -462,6 +470,26 @@ Firmar é posible unicamente con enderezos de tipo 'legacy'. Verify messages to ensure they were signed with specified Bitcoin addresses Verifica mensaxes para asegurar que foron asinados con enderezos Bitcoin específicos. + + &Load PSBT from file… + &Cargar PSBT desde ficheiro… + + + Open &URI… + Abrir &URI… + + + Close Wallet… + Pechar carteira… + + + Create Wallet… + Crear carteira… + + + Close All Wallets… + Pechar todas as carteiras… + &File &Arquivo diff --git a/src/qt/locale/bitcoin_gl_ES.ts b/src/qt/locale/bitcoin_gl_ES.ts index 47951fa6f2ee..7f14b700c9e1 100644 --- a/src/qt/locale/bitcoin_gl_ES.ts +++ b/src/qt/locale/bitcoin_gl_ES.ts @@ -179,6 +179,10 @@ Firmar é posible unicamente con enderezos de tipo 'legacy'. Continue Continuar + + Back + Volver + Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. Recorda que encriptar a tua carteira non protexe completamente que os teus bitcoins poidan ser roubados por malware que afecte ó teu computador. @@ -438,6 +442,10 @@ Firmar é posible unicamente con enderezos de tipo 'legacy'. &Change Passphrase… &Cambiar a frase de contrasinal... + + Sign &message… + Asinar &mensaxe… + Sign messages with your Bitcoin addresses to prove you own them Asina mensaxes cos teus enderezos de Bitcoin para probar que che pertencen @@ -450,6 +458,26 @@ Firmar é posible unicamente con enderezos de tipo 'legacy'. Verify messages to ensure they were signed with specified Bitcoin addresses Verifica mensaxes para asegurar que foron asinados cos enderezos de Bitcoin especificados + + &Load PSBT from file… + &Cargar PSBT desde ficheiro… + + + Open &URI… + Abrir &URI… + + + Close Wallet… + Pechar carteira… + + + Create Wallet… + Crear carteira… + + + Close All Wallets… + Pechar todas as carteiras… + &File &Arquivo diff --git a/src/qt/locale/bitcoin_hi.ts b/src/qt/locale/bitcoin_hi.ts index be431c33b37a..93a2b99371dd 100644 --- a/src/qt/locale/bitcoin_hi.ts +++ b/src/qt/locale/bitcoin_hi.ts @@ -286,10 +286,40 @@ Signing is only possible with addresses of the type 'legacy'. unknown अनजान + + Embedded "%1" + अंतर्निहित "%1" + + + Default system font "%1" + डिफ़ॉल्ट सिस्टम फोंट "%1" + + + Custom… + पसंद के अनुसार + Amount राशि + + Onion + network name + Name of Tor network in peer info + अनियन + + + I2P + network name + Name of I2P network in peer info + आई२पी + + + CJDNS + network name + Name of CJDNS network in peer info + सीजेडीएनएस + %n second(s) @@ -675,6 +705,10 @@ The migration process will create a backup of the wallet before migrating. This You are one step away from creating your new wallet! आपके नए बटवे के निर्माण से आप सिर्फ एक कदम दूर है + + Please provide a name and, if desired, enable any advanced options + कृपया एक नाम प्रदान करें और अगर जरूरत हो तो किसी अन्य उच्च विकल्प को सक्षम करें + Intro @@ -723,13 +757,34 @@ The migration process will create a backup of the wallet before migrating. This OptionsDialog + + Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. + Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. + अधिकतम डेटाबेस cache size। सुनिश्चित करें कि आपके पास पर्याप्त RAM है। एक बड़ा cache तेज़ सिंक में योगदान दे सकता है, जिसके बाद अधिकांश उपयोग मामलों के लिए लाभ कम स्पष्ट होता है। Cache size को कम करने से मेमोरी उपयोग कम हो जाएगा। अप्रयुक्त mempool मेमोरी इस कैश के लिए साझा की जाती है। + Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! %1 संगत स्क्रिप्ट का पूर्ण पथ (उदा. C:\Downloads\hwi.exe या /Users/you/Downloads/hwi.py). सावधान: मैलवेयर आपके सिक्के चुरा सकता है! + + Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. + राउटर पर बिटकॉइन क्लाइंट पोर्ट को स्वचालित रूप से खोलता है। यह केवल तभी काम करता है जब आपका राउटर PCP या NAT-PMP का समर्थन करता है और यह सक्षम है। बाहरी पोर्ट यादृच्छिक हो सकता है। + + + Map port using PCP or NA&T-PMP + PCP या NA&T-PMP का उपयोग करके पोर्ट मैप करें + + + Font in the Overview tab: + ओवरव्यू टैब का फोंट + PSBTOperationsDialog + + PSBT Operations + पीएसबीटी संचालन + Save Transaction Data लेन-देन डेटा सहेजें @@ -739,6 +794,10 @@ The migration process will create a backup of the wallet before migrating. This Expanded name of the binary PSBT file format. See: BIP 174. आंशिक रूप से हस्ताक्षरित लेनदेन (बाइनरी) + + Sends %1 to %2 + %1 को %2 के पास भेजता है + own address खुद का पता @@ -822,6 +881,14 @@ The migration process will create a backup of the wallet before migrating. This Number of connections कनेक्शन की संख्या + + Local Addresses + स्थानीय पते + + + Network addresses that your Bitcoin node is currently using to communicate with other nodes. + नेटवर्क पते जो आपका बिटकॉइन नोड वर्तमान में अन्य नोड्स के साथ संचार करने के लिए उपयोग कर रहा है। + Block chain ब्लॉक चेन @@ -870,6 +937,18 @@ The migration process will create a backup of the wallet before migrating. This Select a peer to view detailed information. विस्तृत जानकारी देखने के लिए किसी सहकर्मी का चयन करें। + + Hide Peers Detail + पियर विवरण छिपाएँ + + + Transport + परिवहन + + + Session ID + सत्र आई.डी. + Version संस्करण @@ -958,6 +1037,10 @@ The migration process will create a backup of the wallet before migrating. This Direction/Type दिशा / प्रकार + + The BIP324 session ID string in hex. + Hex में BIP324 सत्र आई.डी. स्ट्रिंग | + The network protocol this peer is connected through: IPv4, IPv6, Onion, I2P, or CJDNS. यह पीयर नेटवर्क प्रोटोकॉल के माध्यम से जुड़ा हुआ है: आईपीवी 4, आईपीवी 6, प्याज, आई 2 पी, या सीजेडीएनएस। @@ -1081,6 +1164,21 @@ The migration process will create a backup of the wallet before migrating. This Explanatory text for a short-lived outbound peer connection that is used to request addresses from a peer. आउटबाउंड एड्रेस फ़ेच: अल्पकालिक, याचना पतों के लिए + + detecting: peer could be v1 or v2 + Explanatory text for "detecting" transport type. + पता लगा जा रहा है: पीयर v1 या v2 हो सकता है + + + v1: unencrypted, plaintext transport protocol + Explanatory text for v1 transport type. + v1: अनएन्क्रिप्टेड, प्लेनटेक्स्ट ट्रांसपोर्ट प्रोटोकॉल + + + v2: BIP324 encrypted transport protocol + Explanatory text for v2 transport type. + v2: BIP324 एन्क्रिप्टेड ट्रांसपोर्ट प्रोटोकॉल + we selected the peer for high bandwidth relay हमने उच्च बैंडविड्थ रिले के लिए पीयर का चयन किया @@ -1135,6 +1233,10 @@ The migration process will create a backup of the wallet before migrating. This Executing command without any wallet बिना किसी वॉलेट के कमांड निष्पादित करना + + Node window - [%1] + नोड विंडो - [%1] + Executing command using "%1" wallet "%1" वॉलेट का प्रयोग कर कमांड निष्पादित करना @@ -1280,6 +1382,26 @@ For more information on using this console, type %6. Copy &amount कॉपी &अमाउंट + + Base58 (Legacy) + बेस58 (विरासत) + + + Not recommended due to higher fees and less protection against typos. + उच्च शुल्क और टाइपिंग त्रुटियों के प्रति कम सुरक्षा के कारण इसकी अनुशंसा नहीं की जाती। + + + Generates an address compatible with older wallets. + पुराने वॉलेट के साथ संगत पता बनाता है। + + + Generates a native segwit address (BIP-173). Some old wallets don't support it. + एक मूल सेगविट पता (BIP-173) उत्पन्न करता है। कुछ पुराने वॉलेट इसका समर्थन नहीं करते हैं। + + + Bech32m (BIP-350) is an upgrade to Bech32, wallet support is still limited. + Bech32m (BIP-350) Bech32 का अपग्रेड है, वॉलेट समर्थन अभी भी सीमित है। + Could not generate new %1 address नया पता उत्पन्न नहीं कर सका %1 @@ -1621,6 +1743,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satos Text to inform a user attempting to create a transaction of their current options. At this stage, a user can only create a PSBT. This string is displayed when private keys are disabled and an external signer is not available. कृपया, अपने लेनदेन प्रस्ताव की समीक्षा करें। यह एक आंशिक रूप से हस्ताक्षरित बिटकॉइन लेनदेन (PSBT) का उत्पादन करेगा जिसे आप सहेज सकते हैं या कॉपी कर सकते हैं और फिर उदा। एक ऑफ़लाइन %1 वॉलेट, या एक PSBT-संगत हार्डवेयर वॉलेट। + + %1 from wallet '%2' + %1 बटुए से '%2' + Do you want to create this transaction? Message displayed when attempting to create a transaction. Cautionary text to prompt the user to verify that the displayed transaction details represent the transaction the user intends to create. @@ -1655,6 +1781,14 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satos अहस्ताक्षरित लेनदेन   + + The PSBT has been copied to the clipboard. You can also save it. + PSBT को क्लिपबोर्ड पर कॉपी कर दिया गया है। आप इसे सेव भी कर सकते हैं। + + + PSBT saved to disk + पीएसबीटी को डिस्क में सहेजा गया है + Confirm send coins सिक्के भेजने की पुष्टि करें @@ -1803,6 +1937,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satos &Sign Message &संदेश पर हस्ताक्षर करें + + You can sign messages/agreements with your legacy (P2PKH) 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. + आप अपने विरासत (P2PKH) पतों के साथ संदेश/समझौते पर हस्ताक्षर करके यह साबित कर सकते हैं कि आप उन्हें भेजे गए बिटकॉइन प्राप्त कर सकते हैं। सावधान रहें कि किसी भी अस्पष्ट या यादृच्छिक चीज़ पर हस्ताक्षर न करें, क्योंकि फ़िशिंग हमले आपको धोखा देकर अपनी पहचान उन्हें सौंपने की कोशिश कर सकते हैं। केवल पूरी तरह से विस्तृत कथनों पर हस्ताक्षर करें जिनसे आप सहमत हैं। + The Bitcoin address to sign the message with संदेश पर हस्ताक्षर करने के लिए बिटकॉइन पता @@ -1895,6 +2033,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satos Please check the address and try again. कृपया पते की जांच करें और पुनः प्रयास करें। + + The entered address does not refer to a legacy (P2PKH) key. Message signing for SegWit and other non-P2PKH address types is not supported in this version of %1. Please check the address and try again. + दर्ज किया गया पता किसी लीगेसी (P2PKH) कुंजी को संदर्भित नहीं करता है। SegWit और अन्य गैर-P2PKH पता प्रकारों के लिए संदेश हस्ताक्षर %1 के इस संस्करण में समर्थित नहीं है | कृपया पते की जांच करें और पुनः प्रयास करें। + Wallet unlock was cancelled. वॉलेट अनलॉक रद्द कर दिया गया था। @@ -2076,6 +2218,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satos Output index आउटपुट इंडेक्स + + %1 (Certificate was not verified) + %1 (प्रमाणपत्र सत्यापित नहीं किया गया) + Merchant सौदागर @@ -2312,6 +2458,14 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satos Send Coins सेन्ड कॉइन्स + + Fee-bump PSBT copied to clipboard + Fee-bump PSBT क्लिपबोर्ड पर कॉपी किया गया है + + + Signer error + Signer error/हस्ताक्षरकर्ता त्रुटि + WalletView @@ -2326,6 +2480,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satos bitcoin-core + + %s failed to validate the -assumeutxo snapshot state. This indicates a hardware problem, or a bug in the software, or a bad software modification that allowed an invalid snapshot to be loaded. As a result of this, the node will shut down and stop using any state that was built on the snapshot, resetting the chain height from %d to %d. On the next restart, the node will resume syncing from %d without using any snapshot data. Please report this incident to %s, including how you obtained the snapshot. The invalid snapshot chainstate will be left on disk in case it is helpful in diagnosing the issue that caused this error. + -assumeutxo snapshot state को सत्यापित करने में %sविफल रहा | यह हार्डवेयर समस्या, या सॉफ्टवेयर में बग, या खराब सॉफ्टवेयर संशोधन को इंगित करता है जिसके कारण अमान्य स्नैपशॉट लोड हो गया। इसके परिणामस्वरूप, नोड बंद हो जाएगा और स्नैपशॉट पर निर्मित किसी भी स्थिति का उपयोग करना बंद कर देगा, जिससे चेन की ऊंचाई %d से %d पर रीसेट हो जाएगी। अगली बार पुनः आरंभ करने पर, नोड किसी भी स्नैपशॉट डेटा का उपयोग किए बिना %d से सिंक करना फिर से शुरू कर देगा। कृपया इस घटना की रिपोर्ट %s को करें, जिसमें यह भी शामिल है कि आपने स्नैपशॉट कैसे प्राप्त किया। अमान्य स्नैपशॉट चेनस्टेट को डिस्क पर छोड़ दिया जाएगा, ताकि यह उस समस्या का निदान करने में सहायक हो, जिसके कारण यह त्रुटि हुई। + %s request to listen on port %u. This port is considered "bad" and thus it is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for details and a full list. %s अनुरोध %u पोर्ट पर सुनने का. इस बंदरगाह को "खराब" माना जाता है और इस प्रकार यह संभावना नहीं है कि कोई भी सहकर्मी इससे जुड़ेगा। विवरण और पूरी सूची के लिए doc/p2p-bad-ports.md देखें। @@ -2338,10 +2496,68 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satos Error loading wallet. Wallet requires blocks to be downloaded, and software does not currently support loading wallets while blocks are being downloaded out of order when using assumeutxo snapshots. Wallet should be able to load successfully after node sync reaches height %s बटुआ लोड करने में त्रुटि. वॉलेट को डाउनलोड करने के लिए ब्लॉक की आवश्यकता होती है, और सॉफ्टवेयर वर्तमान में लोडिंग वॉलेट का समर्थन नहीं करता है, जबकि ब्लॉक्स को ऑर्डर से बाहर डाउनलोड किया जा रहा है, जब ग्रहणुत्सो स्नैपशॉट का उपयोग किया जाता है। नोड सिंक के %s ऊंचाई तक पहुंचने के बाद वॉलेट को सफलतापूर्वक लोड करने में सक्षम होना चाहिए + + Error starting/committing db txn for wallet transactions removal process + वॉलेट लेन-देन हटाने की प्रक्रिया के लिए डेटाबेस लेनदेन शुरू करने/सौंपने में त्रुटि + Error: Unable to produce descriptors for this legacy wallet. Make sure to provide the wallet's passphrase if it is encrypted. त्रुटि: इस लीगेसी वॉलेट के लिए वर्णनकर्ता बनाने में असमर्थ। यदि बटुए का पासफ़्रेज़ एन्क्रिप्ट किया गया है, तो उसे प्रदान करना सुनिश्चित करें। + + Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets + '-wallet' या '-nowallet' के लिए अमान्य मान पाया गया। '-wallet' को स्ट्रिंग मान की आवश्यकता होती है, जबकि '-nowallet' सभी वॉलेट को अक्षम करने के लिए केवल '1' स्वीकार करता है + + + Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. + '-upnp' विकल्प सेट है, लेकिन संस्करण 29.0 में UPnP समर्थन हटा दिया गया था। इसके बजाय '-natpmp' का उपयोग करने पर विचार करें। + + + Rename of '%s' -> '%s' failed. You should resolve this by manually moving or deleting the invalid snapshot directory %s, otherwise you will encounter the same error again on the next startup. + '%s' का नाम बदलकर '%s' करना विफल रहा। आपको अमान्य स्नैपशॉट निर्देशिका %s को मैन्युअल रूप से स्थानांतरित या हटाकर इसे हल करना चाहिए, अन्यथा आपको अगली बार स्टार्टअप पर फिर से वही त्रुटि का सामना करना पड़ेगा। + + + Wallet loaded successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. Legacy wallets can be migrated to a descriptor wallet with migratewallet. + वॉलेट सफलतापूर्वक लोड हो गया। लीगेसी वॉलेट प्रकार को हटाया जा रहा है और भविष्य में लीगेसी वॉलेट बनाने और खोलने के लिए समर्थन हटा दिया जाएगा। लीगेसी वॉलेट को migratewallet के साथ descriptor wallet में माइग्रेट किया जा सकता है। + + + %s is set very high! Fees this large could be paid on a single transaction. + %sबहुत अधिक निर्धारित है! इतनी बड़ी फीस एक ही लेनदेन पर चुकाई जा सकती है। + + + Error reading %s! All keys read correctly, but transaction data or address metadata may be missing or incorrect. + %sपढ़ने में त्रुटि! सभी कुंजियाँ सही ढंग से पढ़ी गईं, लेकिन लेन-देन डेटा या पता मेटाडेटा गायब या गलत हो सकता है। + + + Failed to calculate bump fees, because unconfirmed UTXOs depend on enormous cluster of unconfirmed transactions. + बम्प शुल्क की गणना करने में विफल रहा, क्योंकि अपुष्ट UTXOs अपुष्ट लेनदेन के विशाल समूह पर निर्भर करते हैं। + + + Failed to remove snapshot chainstate dir (%s). Manually remove it before restarting. + + स्नैपशॉट चेनस्टेट डायरेक्टरी (%s) को हटाने में विफल। पुनः आरंभ करने से पहले इसे मैन्युअल रूप से हटाएँ। + + + + Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable %s. + शुल्क अनुमान विफल रहा। Fallbackfee अक्षम है। कुछ ब्लॉक प्रतीक्षा करें या %s सक्षम करें। + + + Flushing block file to disk failed. This is likely the result of an I/O error. + ब्लॉक फ़ाइल को डिस्क पर फ्लश करना विफल रहा। यह संभवतः I/O त्रुटि का परिणाम है। + + + Flushing undo file to disk failed. This is likely the result of an I/O error. + डिस्क पर पूर्ववत फ़ाइल फ्लश करना विफल रहा। यह संभवतः I/O त्रुटि का परिणाम है। + + + Maximum transaction weight is less than transaction weight without inputs + अधिकतम लेनदेन भार इनपुट-के-बिना लेनदेन भार से कम है + + + Maximum transaction weight is too low, can not accommodate change output + अधिकतम लेनदेन भार बहुत कम है, change output को समायोजित नहीं कर सकता + Outbound connections restricted to CJDNS (-onlynet=cjdns) but -cjdnsreachable is not provided आउटबाउंड कनेक्शन प्रतिबंधित हैं CJDNS (-onlynet=cjdns) के लिए लेकिन -cjdnsreachable प्रदान नहीं किया गया है @@ -2350,6 +2566,18 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satos Outbound connections restricted to i2p (-onlynet=i2p) but -i2psam is not provided आउटबाउंड कनेक्शन i2p(-onlynet=i2p) तक सीमित हैं लेकिन -i2psam प्रदान नहीं किया गया है + + Specified -blockmaxweight (%d) exceeds consensus maximum block weight (%d) + निर्दिष्ट -blockmaxweight (%d) सर्वसम्मति अधिकतम ब्लॉक वजन (%d) से अधिक है + + + Specified -blockreservedweight (%d) exceeds consensus maximum block weight (%d) + निर्दिष्ट -blockreservedweight (%d) सर्वसम्मति अधिकतम ब्लॉक वजन (%d) से अधिक है + + + The combination of the pre-selected inputs and the wallet automatic inputs selection exceeds the transaction maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs + पूर्व-चयनित इनपुट और वॉलेट स्वचालित इनपुट चयन का संयोजन लेनदेन के अधिकतम वजन से अधिक है। कृपया कम राशि भेजने या अपने वॉलेट के UTXO को मैन्युअल रूप से समेकित करने का प्रयास करें + The inputs size exceeds the maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs इनपुट आकार अधिकतम वजन से अधिक है। कृपया एक छोटी राशि भेजने या मैन्युअल रूप से अपने वॉलेट के UTXO को समेकित करने का प्रयास करें @@ -2358,6 +2586,18 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satos The preselected coins total amount does not cover the transaction target. Please allow other inputs to be automatically selected or include more coins manually पूर्वचयनित सिक्कों की कुल राशि लेन-देन लक्ष्य को कवर नहीं करती है। कृपया अन्य इनपुट को स्वचालित रूप से चयनित होने दें या मैन्युअल रूप से अधिक सिक्के शामिल करें + + Transaction requires one destination of non-0 value, a non-0 feerate, or a pre-selected input + लेन-देन के लिए गैर-0 मान का एक गंतव्य, गैर-0 शुल्क दर, या पूर्व-चयनित इनपुट की आवश्यकता होती है + + + UTXO snapshot failed to validate. Restart to resume normal initial block download, or try loading a different snapshot. + UTXO स्नैपशॉट मान्य करने में विफल रहा। सामान्य आरंभिक ब्लॉक डाउनलोड को फिर से शुरू करने के लिए पुनः आरंभ करें, या कोई भिन्न स्नैपशॉट लोड करने का प्रयास करें। + + + Unconfirmed UTXOs are available, but spending them creates a chain of transactions that will be rejected by the mempool + अपुष्ट UTXO उपलब्ध हैं, लेकिन उन्हें खर्च करने से लेनदेन की एक श्रृंखला बनती है जिसे मेमपूल द्वारा अस्वीकार कर दिया जाएगा + Unexpected legacy entry in descriptor wallet found. Loading wallet %s @@ -2368,10 +2608,102 @@ The wallet might have been tampered with or created with malicious intent. हो सकता है कि वॉलेट से छेड़छाड़ की गई हो या दुर्भावनापूर्ण इरादे से बनाया गया हो। + + Your computer's date and time appear to be more than %d minutes out of sync with the network, this may lead to consensus failure. After you've confirmed your computer's clock, this message should no longer appear when you restart your node. Without a restart, it should stop showing automatically after you've connected to a sufficient number of new outbound peers, which may take some time. You can inspect the `timeoffset` field of the `getpeerinfo` and `getnetworkinfo` RPC methods to get more info. + आपके कंप्यूटर की तिथि और समय नेटवर्क के साथ %d मिनट से अधिक समय तक सिंक से बाहर प्रतीत है, इससे सहमति विफलता हो सकती है। आपके द्वारा अपने कंप्यूटर की घड़ी की पुष्टि करने के बाद, जब आप अपना नोड पुनः आरंभ करेंगे तो यह संदेश दिखाई नहीं देना चाहिए। Restart किए बिना, जब आप पर्याप्त संख्या में नए outbound peers से कनेक्ट हो जाते हैं, तो यह स्वचालित रूप से दिखना बंद हो जाना चाहिए, जिसमें कुछ समय लग सकता है। अधिक जानकारी प्राप्त करने के लिए आप `getpeerinfo` और `getnetworkinfo` RPC विधियों के `timeoffset` फ़ील्ड का निरीक्षण कर सकते हैं। + + + whitebind may only be used for incoming connections ("out" was passed) + whitebind का उपयोग केवल आने वाले कनेक्शनों के लिए किया जा सकता है ("out" पास किया गया था) + + + A fatal internal error occurred, see debug.log for details: + एक घातक आंतरिक त्रुटि घटित हुई, विवरण के लिए debug.log देखें: + + + Assumeutxo data not found for the given blockhash '%s'. + दिए गए blockhash '%s' के लिए Assumeutxo डेटा नहीं मिला | + + + Block verification was interrupted + ब्लॉक verification अन्तरायित हुआ + + + Corrupt block found indicating potential hardware failure. + भ्रष्ट ब्लॉक पाया गया जो संभावित हार्डवेयर विफलता का संकेत देता है। + + + Elliptic curve cryptography sanity check failure. %s is shutting down. + Elliptic curve cryptography sanity check विफलता | %sबंद हो रही है | + + + Error loading databases + डेटाबेस लोड करते समय त्रुटि + + + Error opening coins database + सिक्कों का डेटाबेस खोलने में त्रुटि + + + Error reading configuration file: %s + कॉन्फ़िगरेशन फ़ाइल पढ़ने में त्रुटि: %s + Error: Cannot extract destination from the generated scriptpubkey त्रुटि: जनरेट की गई scriptpubkey से गंतव्य निकाला नहीं जा सकता + + Error: Unable to read wallet's best block locator record + त्रुटि: वॉलेट का best ब्लॉक लोकेटर रिकॉर्ड पढ़ने में असमर्थ + + + Error: Unable to write solvable wallet best block locator record + त्रुटि: सॉल्वेबल वॉलेट best ब्लॉक लोकेटर रिकॉर्ड लिखने में असमर्थ + + + Error: Unable to write watchonly wallet best block locator record + त्रुटि: watchonly वॉलेट best ब्लॉक लोकेटर रिकॉर्ड लिखने में असमर्थ + + + Error: database transaction cannot be executed for wallet %s + त्रुटि: वॉलेट %s के लिए डेटाबेस लेनदेन निष्पादित नहीं किया जा सकता + + + Failed to connect best block (%s). + best ब्लॉक (%s) से कनेक्ट करने में विफल | + + + Failed to disconnect block. + ब्लॉक को डिस्कनेक्ट करने में विफल. + + + Failed to read block. + ब्लॉक पढ़ने में विफल | + + + Failed to start indexes, shutting down.. + indexes प्रारंभ करने में विफल, बंद हो रहा है... + + + Failed to write block. + ब्लॉक लिखने में विफल. + + + Failed to write to block index database. + ब्लॉक इंडेक्स डेटाबेस में लिखने में विफल | + + + Failed to write to coin database. + सिक्का डेटाबेस में लिखने में विफल | + + + Failed to write undo data. + पूर्ववत डेटा लिखने में विफल. + + + Failure removing transaction: %s + लेन-देन हटाने में विफलता: %s + Insufficient dbcache for block verification ब्लॉक सत्यापन के लिए अपर्याप्त dbcache @@ -2392,6 +2724,78 @@ The wallet might have been tampered with or created with malicious intent. Not solvable pre-selected input %s सॉल्व करने योग्य पूर्व-चयनित इनपुट नहीं %s + + Only direction was set, no permissions: '%s' + केवल दिशा निर्धारित की गई, कोई अनुमति नहीं: '%s' + + + Signer did not echo address + Signer ने पता की echo नहीं की + + + Signer echoed unexpected address %s + Signer ने अप्रत्याशित संबोधन दोहराया %s + + + Signer returned error: %s + Signer ने त्रुटि लौटाई: %s + + + Specified data directory "%s" does not exist. + निर्दिष्ट डेटा निर्देशिका "%s" मौजूद नहीं है | + + + System error while flushing: %s + फ्लशिंग करते समय सिस्टम त्रुटि: %s + + + System error while loading external block file: %s + बाह्य ब्लॉक फ़ाइल लोड करते समय सिस्टम error: %s + + + System error while saving block to disk: %s + ब्लॉक को डिस्क पर सहेजते समय सिस्टम error: %s + + + The transactions removal process can only be executed within a db txn + लेन-देन हटाने की प्रक्रिया केवल डेटाबेस लेनदेन के भीतर ही निष्पादित की जा सकती है + + + There is no ScriptPubKeyManager for this address + इस पते के लिए कोई ScriptPubKeyManager नहीं है + + + Transaction %s does not belong to this wallet + लेन-देन %s इस वॉलेट से संबंधित नहीं है + + + Wallet file creation failed: %s + वॉलेट फ़ाइल निर्माण विफल: %s + + + acceptstalefeeestimates is not supported on %s chain. + %s चेन पर acceptstalefeeestimates समर्थित नहीं है | + + + Do you want to rebuild the databases now? + क्या आप अब डेटाबेस का पुनर्निर्माण करना चाहते हैं? + + + Error: Could not add watchonly tx %s to watchonly wallet + Error: watchonly लेन-देन %s को watchonly वॉलेट में नहीं जोड़ा जा सका + + + Error: Could not delete watchonly transactions. + Error: केवल watchonly लेनदेन को हटाया नहीं जा सका | + + + Error: Wallet does not exist + Error: वॉलेट मौजूद नहीं है + + + Error: cannot remove legacy wallet records + Error: leagcy वॉलेट रिकॉर्ड को हटाया नहीं जा सकता है + Settings file could not be read सेटिंग्स फ़ाइल को पढ़ा नहीं जा सका | diff --git a/src/qt/locale/bitcoin_hu.ts b/src/qt/locale/bitcoin_hu.ts index 3add3b3c06ac..de4793f2fcee 100644 --- a/src/qt/locale/bitcoin_hu.ts +++ b/src/qt/locale/bitcoin_hu.ts @@ -1589,6 +1589,11 @@ A migrációs folyamat készít biztonsági mentést a tárcáról migrálás el Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain. A tárolt blokkok számának ritkításával jelentősen csökken a tranzakció történet tárolásához szükséges tárhely. Minden blokk továbbra is érvényesítve lesz. Ha ezt a beállítást később törölni szeretné újra le kell majd tölteni a teljes blokkláncot. + + Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. + Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. + Adatbázis gyorsítótár maximális mérete. Győződjön meg róla, hogy van elég RAM. Nagyobb gyorsítótár gyorsabb szinkronizálást eredményez utána viszont az előnyei kevésbé számottevők. A gyorsítótár méretének csökkentése a memóriafelhasználást is mérsékli. A használaton kívüli mempool memória is osztozik ezen a táron. + Size of &database cache A&datbázis gyorsítótár mérete @@ -1601,6 +1606,14 @@ A migrációs folyamat készít biztonsági mentést a tárcáról migrálás el Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! Teljes elérési útvonal a %1 kompatibilis szkripthez (pl. C:\Downloads\hwi.exe vagy /Users/felhasznalo/Downloads/hwi.py). Vigyázat: rosszindulatú programok ellophatják az érméit! + + Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. + A Bitcoin kliens port automatikus megnyitása a routeren. Ez csak akkor működik, ha a router támogatja a PCP-t vagy NAT-PMP-t és engedélyezve is van. A külső port lehet véletlenszerűen választott. + + + Map port using PCP or NA&T-PMP + Külső port megnyitása PCP-vel vagy NA&T-PMP-vel + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) A proxy IP címe (pl.: IPv4: 127.0.0.1 / IPv6: ::1) @@ -4176,6 +4189,10 @@ A "Fájl > Tárca megnyitása" menüben tölthet be egyet. No wallet file format provided. To use createfromdump, -format=<format> must be provided. Nincs tárca fájlformátum megadva. A createfromdump használatához -format=<format> megadása kötelező. + + Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. + Az '-upnp' kapcsoló beállítva, de az UPnP támogatás megszűnt a 29.0 verzióval. Kérjük használja a '-natpmp' kapcsolót. + Please contribute if you find %s useful. Visit %s for further information about the software. Kérjük támogasson, ha hasznosnak találta a %s-t. Az alábbi linken további információt találhat a szoftverről: %s. @@ -4284,6 +4301,10 @@ A "Fájl > Tárca megnyitása" menüben tölthet be egyet. -maxmempool must be at least %d MB -maxmempool legalább %d MB kell legyen. + + Cannot obtain a lock on directory %s. %s is probably already running. + Nem zárolható ez a könyvtár: %s. A %s valószínűleg fut már. + Cannot resolve -%s address: '%s' -%s cím feloldása nem sikerült: '%s' @@ -4386,6 +4407,10 @@ A "Fájl > Tárca megnyitása" menüben tölthet be egyet. Rename of '%s' -> '%s' failed. Cannot clean up the background chainstate leveldb directory. Nem sikerült az '%s' -> '%s' átnevezés. Nem lehet kitisztítani a háttér láncállapot leveldb könyvtárat. + + Specified -blockmaxweight (%d) exceeds consensus maximum block weight (%d) + A megadott -blockmaxweight (%d) meghaladja a konszenzus maximum blokk súlyt (%d) + The combination of the pre-selected inputs and the wallet automatic inputs selection exceeds the transaction maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs Az előre kiválasztott bemenetek és a tárca automatikus bemeneteinek kombinációja meghaladja a maximális tranzakciós súlyt. Kérjük próbáljon kisebb összeget küldeni vagy kézzel egyesítse a tárca UTXO-it. @@ -4540,6 +4565,10 @@ A tárca biztonsági mentésének visszaállítása sikertelen. Error opening block database Hiba a blokk-adatbázis megnyitása közben. + + Error opening coins database + Hiba az érme-adatbázis megnyitása közben + Error reading configuration file: %s Hiba a konfigurációs fájl olvasása közben: %s @@ -5048,6 +5077,10 @@ A tárca biztonsági mentésének visszaállítása sikertelen. Unsupported logging category %s=%s. Nem támogatott naplózási kategória %s=%s + + Do you want to rebuild the databases now? + Újra akarja építeni az adatbázisokat most? + Error: Could not add watchonly tx %s to watchonly wallet Hiba: Nem sikerült hozzáadni a megfigyelt %s tranzakciót a figyelő tárcához @@ -5056,6 +5089,14 @@ A tárca biztonsági mentésének visszaállítása sikertelen. Error: Could not delete watchonly transactions. Hiba: Nem lehet törölni csak megfigyelt tranzakciókat. + + Error: Wallet does not exist + Hiba: Tárca nem létezik + + + Error: cannot remove legacy wallet records + Hiba: nem lehet eltávolítani a régi típusú tárca bejegyzéseit + User Agent comment (%s) contains unsafe characters. A felhasználói ügynök megjegyzés (%s) veszélyes karaktert tartalmaz. diff --git a/src/qt/locale/bitcoin_id.ts b/src/qt/locale/bitcoin_id.ts index 0c80b5e80860..f8e21694519b 100644 --- a/src/qt/locale/bitcoin_id.ts +++ b/src/qt/locale/bitcoin_id.ts @@ -1626,6 +1626,18 @@ Proses migrasi akan mencadangkan dompet sebelum melakukan pemindahan. Fail cadan Outbound connections restricted to i2p (-onlynet=i2p) but -i2psam is not provided Koneksi keluar dibatasi untuk i2p (-onlynet=i2p) tetapi -i2psam tidak disertakan + + Specified -blockmaxweight (%d) exceeds consensus maximum block weight (%d) + Detailnya - nilai block maksimal ( %d ) melebihi nilai awal maksimal block ( %d ) + + + Specified -blockreservedweight (%d) exceeds consensus maximum block weight (%d) + Berat blok yang ditetapkan -blockreservedweight (%d) melebihi berat maksimum blok konsensus (%d) + + + Specified -blockreservedweight (%d) is lower than minimum safety value of (%d) + Detailnya -nilai block cadangan (%d) lebih kecil dari nilai minimum aman nya (%d) + The combination of the pre-selected inputs and the wallet automatic inputs selection exceeds the transaction maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs Kombinasi input yang telah dipilih sebelumnya dan pemilihan input otomatis dompet melebihi berat maksimum transaksi. Silakan coba mengirimkan jumlah yang lebih kecil atau menggabungkan UTXO dompet Anda secara manual diff --git a/src/qt/locale/bitcoin_it.ts b/src/qt/locale/bitcoin_it.ts index f15d363a4705..6cd4ef2ec47e 100644 --- a/src/qt/locale/bitcoin_it.ts +++ b/src/qt/locale/bitcoin_it.ts @@ -51,7 +51,7 @@ Choose the address to receive coins with - Scegli l'indirizzo al quale ricevere bitcoin. + Scegli l'indirizzo al quale ricevere bitcoin C&hoose @@ -572,7 +572,7 @@ E' possibile firmare solo con indirizzi di tipo "legacy". Syncing Headers (%1%)… - Sincronizzazione Intestazioni in corso (1%1%)... + Sincronizzazione Intestazioni in corso (%1%)... Synchronizing with network… diff --git a/src/qt/locale/bitcoin_ka.ts b/src/qt/locale/bitcoin_ka.ts index cc8e7b749d05..c41cd8aa3731 100644 --- a/src/qt/locale/bitcoin_ka.ts +++ b/src/qt/locale/bitcoin_ka.ts @@ -93,6 +93,14 @@ Signing is only possible with addresses of the type 'legacy'. An error message. %1 is a stand-in argument for the name of the file we attempted to save to. მისამართების სიის %1 შენახვა ვერ მოხერხდა. თავიდან სცადეთ. + + Sending addresses - %1 + გასაგზავნი მისამართები - %1 + + + Receiving addresses - %1 + მიმღები მისამართები - %1 + Exporting Failed ექპორტი ვერ განხორციელდა @@ -179,6 +187,10 @@ Signing is only possible with addresses of the type 'legacy'. Continue გაგრძელება + + Back + უკან დაბრუნება + Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. გახსოვდეთ, რომ თქვენი საფულის დაშიფვრა ვერ უზრუნველყოფს სრულად დაიცვას თქვენი ბიტკოინების მოპარვა კომპიუტერში მავნე პროგრამებით. @@ -223,6 +235,10 @@ Signing is only possible with addresses of the type 'legacy'. Wallet passphrase was successfully changed. საფულის ფრაზა-პაროლი შეცვლილია. + + Passphrase change failed + კოდური სიტყვა ვერ შეიცვალა + Warning: The Caps Lock key is on! ყურადღება: ჩართულია Caps Lock რეჟიმი! @@ -667,6 +683,11 @@ Signing is only possible with addresses of the type 'legacy'. The title for Restore Wallet File Windows საფულის სარეზერვოს ჩატვირთვა + + Restore Wallet + Title of pop-up window shown when the user is attempting to restore a wallet. + საფულის აღდგენა + Wallet Name Label of the input field where the name of the wallet is entered. @@ -692,6 +713,10 @@ Signing is only possible with addresses of the type 'legacy'. &Hide &დამალვა + + S&how + ჩ&ვენება + %n active connection(s) to Bitcoin network. A substring of the tooltip. @@ -715,6 +740,10 @@ Signing is only possible with addresses of the type 'legacy'. A context menu item. The network activity was disabled previously. ქსელის აქტივობის ჩართვა + + Error creating wallet + საფულის შექმნისას დაფიქსირდა შეცდომა + Error: %1 შეცდომა: %1 @@ -775,7 +804,11 @@ Signing is only possible with addresses of the type 'legacy'. Wallet is <b>encrypted</b> and currently <b>locked</b> საფულე <b>დაშიფრულია</b> და ამჟამად <b>დაბლოკილია</b> - + + Original message: + თავდაპირველი/ორიგინალი გზავნილი: + + CoinControlDialog @@ -822,6 +855,10 @@ Signing is only possible with addresses of the type 'legacy'. Amount თანხა + + Received with label + ლეიბლით მიღება + Received with address მიღებულია მისამართისამებრ @@ -936,6 +973,14 @@ Signing is only possible with addresses of the type 'legacy'. ღია საფულე + + RestoreWalletActivity + + Restore Wallet + Title of progress window which is displayed when wallets are being restored. + საფულის აღდგენა + + WalletController @@ -1071,6 +1116,10 @@ Signing is only possible with addresses of the type 'legacy'. + + Choose data directory + აირჩიეთ მონაცემთა დირექტორია + At least %1 GB of data will be stored in this directory, and it will grow over time. სულ მცირე %1 GB მონაცემები შეინახება ამ დირექტორიაში და იგი დროთა განმავლობაში გაიზრდება. diff --git a/src/qt/locale/bitcoin_kn.ts b/src/qt/locale/bitcoin_kn.ts index 1ef8b69c2c03..fd047e939ef2 100644 --- a/src/qt/locale/bitcoin_kn.ts +++ b/src/qt/locale/bitcoin_kn.ts @@ -728,6 +728,18 @@ Signing is only possible with addresses of the type 'legacy'.     + + Specified -blockmaxweight (%d) exceeds consensus maximum block weight (%d) + ನಿರ್ದಿಷ್ಟ -ಬ್ಲಾಕ್‌ಮ್ಯಾಕ್ಸ್‌ವೈಟ್ (%d) ಸಮ್ಮತಿಯ ಗರಿಷ್ಠ ಬ್ಲಾಕ್ ತೂಕವನ್ನು (%d) ಮೀರಿದೆ + + + Specified -blockreservedweight (%d) exceeds consensus maximum block weight (%d) + ನಿರ್ದಿಷ್ಟ -ಬ್ಲಾಕ್‌ರಿಸರ್ವ್ಡ್‌ವೈಟ್ (%d) ಸಮ್ಮತಿಯ ಗರಿಷ್ಠ ಬ್ಲಾಕ್ ತೂಕವನ್ನು (%d) ಮೀರಿದೆ + + + Specified -blockreservedweight (%d) is lower than minimum safety value of (%d) + ನಿರ್ದಿಷ್ಟ -ಬ್ಲಾಕ್‌ರಿಸರ್ವ್ಡ್‌ವೈಟ್ (%d) ಕನಿಷ್ಠ ಸುರಕ್ಷತಾ ಮೌಲ್ಯಕ್ಕಿಂತ (%d) ಕಡಿಮೆಯಾಗಿದೆ + The wallet will avoid paying less than the minimum relay fee. ನೆಲೆಯ ರೆಲೇ ಶುಲ್ಕದಿಂದ ಕಡಿಮೆ ಶುಲ್ಕವನ್ನು ಕೊಡದಂತೆ ವಾಲೆಟ್ ನುಡಿಮುಟ್ಟುವುದು. diff --git a/src/qt/locale/bitcoin_ko.ts b/src/qt/locale/bitcoin_ko.ts index 2337ac42a0dc..677f76d0a6de 100644 --- a/src/qt/locale/bitcoin_ko.ts +++ b/src/qt/locale/bitcoin_ko.ts @@ -2471,7 +2471,7 @@ BIP70의 광범위한 보안 결함으로 인해 모든 가맹점에서는 지 Outbound Manual: added using RPC %1 or %2/%3 configuration options Explanatory text for an outbound peer connection that was established manually through one of several methods. The numbered arguments are stand-ins for the methods available to establish manual connections. - 아웃바운드 매뉴얼 : RPC 1%1 이나 2%2/3%3 을 사용해서 환경설정 옵션을 추가 + 아웃바운드 매뉴얼 : RPC %1 이나 %2/%3 을 사용해서 환경설정 옵션을 추가 Outbound Feeler: short-lived, for testing addresses @@ -2484,6 +2484,16 @@ BIP70의 광범위한 보안 결함으로 인해 모든 가맹점에서는 지 아웃바운드 주소 가져오기: 단기, 주소 요청용   + + v1: unencrypted, plaintext transport protocol + Explanatory text for v1 transport type. + v1: 암호화되지 않은 평문 전송 프로토콜 + + + v2: BIP324 encrypted transport protocol + Explanatory text for v2 transport type. + v2: BIP324를 사용하는 암호화된 전송 프로토콜 + we selected the peer for high bandwidth relay 저희는 가장 빠른 대역폭을 가지고 있는 피어를 선택합니다. @@ -2555,12 +2565,12 @@ For more information on using this console, type %6. %7WARNING: 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.%8 RPC console welcome message. Placeholders %7 and %8 are style tags for the warning content, and they are not space separated from the rest of the text intentionally. - 1%1 RPC 콘솔에 오신 것을 환영합니다. -위쪽 및 아래쪽 화살표를 사용하여 기록 탐색을하고 2%2를 사용하여 화면을 지우세요. -3%3과 4%4을 사용하여 글꼴 크기 증가 또는 감소하세요 -사용 가능한 명령의 개요를 보려면 5%5를 입력하십시오. -이 콘솔 사용에 대한 자세한 내용을 보려면 6%6을 입력하십시오. -7%7 경고: 사기꾼들은 사용자들에게 여기에 명령을 입력하라고 말하고 활발히 금품을 훔칩니다. 완전히 이해하지 않고 이 콘솔을 사용하지 마십시오. 8%8 + %1 RPC 콘솔에 오신 것을 환영합니다. +위쪽 및 아래쪽 화살표를 사용하여 기록 탐색을하고 %2를 사용하여 화면을 지우세요. +%3과 %4을 사용하여 글꼴 크기 증가 또는 감소하세요 +사용 가능한 명령의 개요를 보려면 %5를 입력하십시오. +이 콘솔 사용에 대한 자세한 내용을 보려면 %6을 입력하십시오. +%7 경고: 사기꾼들은 사용자들에게 여기에 명령을 입력하라고 말하고 활발히 금품을 훔칩니다. 완전히 이해하지 않고 이 콘솔을 사용하지 마십시오. %8 Executing… @@ -4409,6 +4419,14 @@ Go to File > Open Wallet to load a wallet. Error: Could not delete watchonly transactions. 오류: 보기전용 트랜젝션을 제거할 수 없습니다. + + Error: Wallet does not exist + 오류: 지갑이 존재하지 않습니다 + + + Error: cannot remove legacy wallet records + 오류: 기존 지갑 기록을 삭제할 수 없습니다 + User Agent comment (%s) contains unsafe characters. 사용자 정의 코멘트 (%s)에 안전하지 못한 글자가 포함되어 있습니다. diff --git a/src/qt/locale/bitcoin_ky.ts b/src/qt/locale/bitcoin_ky.ts index 80320eccb01d..61c1da34da0b 100644 --- a/src/qt/locale/bitcoin_ky.ts +++ b/src/qt/locale/bitcoin_ky.ts @@ -5,6 +5,10 @@ Create a new address Жаң даректи жасоо + + &New + &Жаңы + &Delete Ө&чүрүү @@ -21,6 +25,13 @@ (аты жок) + + AskPassphraseDialog + + Continue + Улантуу + + QObject @@ -226,11 +237,26 @@ none жок + + Continue + Улантуу + Error Ката + + PSBTOperationsDialog + + Save… + Сактоо… + + + or + же + + PeerTableModel @@ -274,6 +300,22 @@ Clear console Консолду тазалоо + + 1 &hour + 1&саат + + + 1 &year + 1&жыл + + + Yes + Ооба + + + No + Жок + ReceiveCoinsDialog @@ -314,6 +356,10 @@ S&end &Жөнөтүү + + or + же + Estimated to begin confirmation within %n block(s). @@ -379,6 +425,18 @@ TransactionView + + This week + Бул апта + + + This month + Бул ай + + + This year + Бул жыл + Date Дата diff --git a/src/qt/locale/bitcoin_lv.ts b/src/qt/locale/bitcoin_lv.ts index 2d444cb55448..57521619fda6 100644 --- a/src/qt/locale/bitcoin_lv.ts +++ b/src/qt/locale/bitcoin_lv.ts @@ -164,6 +164,10 @@ Enter the old passphrase and new passphrase for the wallet. Ievadiet veco un jauno paroli Jūsu maciņam + + Continue + Turpināt + Wallet to be encrypted Maciņu nepieciešams šifrēt. @@ -191,6 +195,10 @@ QObject + + Error: %1 + Kļūda: %1 + unknown nav zināms @@ -206,25 +214,25 @@ %n second(s) - - - + %n sekundes + %n sekunde + %n sekundes %n minute(s) - - - + %n minūtes + %n minūte + %n minūtes %n hour(s) - - - + %n stundas + %n stunda + %n stundas @@ -402,10 +410,41 @@ Up to date Sinhronizēts + + Open Wallet + Atvērt maku + + + Close wallet + Aizvērt maku + + + Close all wallets + Aizvērt visus makus + + + Wallet Data + Name of the wallet data file format. + Maka dati + + + Restore Wallet + Title of pop-up window shown when the user is attempting to restore a wallet. + Atjaunot maku + + + Wallet Name + Label of the input field where the name of the wallet is entered. + Maka nosaukums + &Window &Logs + + %1 client + %1 klients + %n active connection(s) to Bitcoin network. A substring of the tooltip. @@ -415,6 +454,32 @@ + + Error: %1 + Kļūda: %1 + + + Warning: %1 + Brīdinājums: %1 + + + Date: %1 + + Datums: %1 + + + + Wallet: %1 + + Maks: %1 + + + + Address: %1 + + Adrese: %1 + + Sent transaction Transakcija nosūtīta @@ -491,12 +556,63 @@ (bez nosaukuma) + + CreateWalletActivity + + Create Wallet + Title of window indicating the progress of creation of a new wallet. + Izveidot maku + + + + OpenWalletActivity + + Open Wallet + Title of window indicating the progress of opening of a wallet. + Atvērt maku + + + + RestoreWalletActivity + + Restore Wallet + Title of progress window which is displayed when wallets are being restored. + Atjaunot maku + + + + WalletController + + Close wallet + Aizvērt maku + + + Close all wallets + Aizvērt visus makus + + CreateWalletDialog + + Create Wallet + Izveidot maku + + + Wallet Name + Maka nosaukums + Wallet Maciņš + + Encrypt Wallet + Šifrēt maku + + + Create + Izveidot + EditAddressDialog @@ -749,6 +865,14 @@ Window title text of pop-up box that allows opening up of configuration file. Konfigurāciju Opcijas + + Continue + Turpināt + + + Cancel + Atcelt + Error Kļūda @@ -819,9 +943,18 @@ Close Aiztaisīt + + or + vai + PeerTableModel + + Received + Title of Peers Table column which indicates the total amount of network information we have received from the peer. + Saņemts + Address Title of Peers Table column which contains the IP/Onion/I2P address of the connected peer. @@ -833,6 +966,14 @@ Tīkls + + QRImageWidget + + PNG Image + Expanded name of the PNG file format. See: https://en.wikipedia.org/wiki/Portable_Network_Graphics. + PNG attēls + + RPCConsole @@ -867,6 +1008,14 @@ Block chain Bloku virkne + + Received + Saņemts + + + Version + Versija + Last block time Pēdējā bloka laiks @@ -903,6 +1052,18 @@ Out: Iz.: + + Yes + + + + No + + + + From + No + ReceiveCoinsDialog @@ -984,6 +1145,10 @@ Label Nosaukums + + Message + Ziņojums + (no label) (bez nosaukuma) @@ -1067,6 +1232,10 @@ S&end &Sūtīt + + or + vai + Transaction fee Transakcijas maksa @@ -1180,6 +1349,10 @@ Date Datums + + From + No + unknown nav zināms @@ -1196,6 +1369,10 @@ Transaction fee Transakcijas maksa + + Message + Ziņojums + Amount Daudzums @@ -1225,6 +1402,18 @@ TransactionView + + This week + Šonedēļ + + + This month + Šomēnes + + + This year + Šogad + Confirmed Apstiprināts @@ -1274,7 +1463,16 @@ Export the data in the current tab to a file Datus no tekošā ieliktņa eksportēt uz failu - + + Wallet Data + Name of the wallet data file format. + Maka dati + + + Cancel + Atcelt + + bitcoin-core diff --git a/src/qt/locale/bitcoin_ml.ts b/src/qt/locale/bitcoin_ml.ts index 15cb5e8cfa67..9b732a3dacd8 100644 --- a/src/qt/locale/bitcoin_ml.ts +++ b/src/qt/locale/bitcoin_ml.ts @@ -178,6 +178,14 @@ Signing is only possible with addresses of the type 'legacy'. Enter the old passphrase and new passphrase for the wallet. വാലെറ്റിന്റെ പഴയ രഹസ്യപദവും പുതിയ രഹസ്യപദവും നൽകുക. + + Continue + തുടരുക + + + Back + മടങ്ങിപ്പോവുക + Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. നിങ്ങളുടെ വാലറ്റ് എൻ‌ക്രിപ്റ്റ് ചെയ്യുന്നതിലൂടെ നിങ്ങളുടെ കമ്പ്യൂട്ടറിനെ ബാധിക്കുന്ന ക്ഷുദ്രവെയർ‌ മോഷ്ടിക്കുന്നതിൽ‌ നിന്നും നിങ്ങളുടെ ബിറ്റ്കോയിനുകളെ പൂർണ്ണമായി സംരക്ഷിക്കാൻ‌ കഴിയില്ല. @@ -482,6 +490,14 @@ Signing is only possible with addresses of the type 'legacy'. Close Wallet… വാലറ്റ് അടയ്ക്കുക + + Create Wallet… + വാലറ്റ് സൃഷ്ടിക്കുക + + + Close All Wallets… + എല്ലാ വാലറ്റുകളും അടയ്ക്കുക + &File & ഫയൽ @@ -502,6 +518,10 @@ Signing is only possible with addresses of the type 'legacy'. Synchronizing with network… നെറ്റ്‌വർക്കുമായി സമന്വയിപ്പിക്കുന്നു... + + Connecting to peers… + സമപ്രായക്കാരുമായി ബന്ധിപ്പിക്കുന്നു... + Request payments (generates QR codes and bitcoin: URIs) പേയ്‌മെന്റുകൾ അഭ്യർത്ഥിക്കുക (QR കോഡുകളും ബിറ്റ്കോയിനും സൃഷ്ടിക്കുന്നു: URI- കൾ) @@ -598,6 +618,10 @@ Signing is only possible with addresses of the type 'legacy'. Close all wallets എല്ലാ വാലറ്റുകളും അടയ്‌ക്കുക ... + + Migrate Wallet + വാലറ്റ് മൈഗ്രേറ്റ് ചെയ്യുക + Show the %1 help message to get a list with possible Bitcoin command-line options സാധ്യമായ ബിറ്റ്കോയിൻ കമാൻഡ്-ലൈൻ ഓപ്ഷനുകളുള്ള ഒരു ലിസ്റ്റ് ലഭിക്കുന്നതിന് %1 സഹായ സന്ദേശം കാണിക്കുക @@ -614,6 +638,11 @@ Signing is only possible with addresses of the type 'legacy'. No wallets available വാലറ്റ് ഒന്നും ലഭ്യം അല്ല + + Wallet Data + Name of the wallet data file format. + വാലറ്റ് അടിസ്ഥാനവിവരം + Load Wallet Backup The title for Restore Wallet File Windows @@ -862,6 +891,13 @@ Signing is only possible with addresses of the type 'legacy'. വാലറ്റ് രൂപീകരണത്തിലെ മുന്നറിയിപ്പ് + + MigrateWalletActivity + + Migrate Wallet + വാലറ്റ് മൈഗ്രേറ്റ് ചെയ്യുക + + OpenWalletActivity @@ -1081,6 +1117,10 @@ Signing is only possible with addresses of the type 'legacy'. &Window &ജാലകം + + Continue + തുടരുക + Error പിശക് @@ -1490,6 +1530,11 @@ Signing is only possible with addresses of the type 'legacy'. Export the data in the current tab to a file നിലവിലുള്ള ടാബിലെ വിവരങ്ങൾ ഒരു ഫയലിലേക്ക് എക്സ്പോർട്ട് ചെയ്യുക + + Wallet Data + Name of the wallet data file format. + വാലറ്റ് അടിസ്ഥാനവിവരം + bitcoin-core diff --git a/src/qt/locale/bitcoin_ms.ts b/src/qt/locale/bitcoin_ms.ts index 2d6e134acfad..401bf7689884 100644 --- a/src/qt/locale/bitcoin_ms.ts +++ b/src/qt/locale/bitcoin_ms.ts @@ -231,37 +231,37 @@ %n second(s) - + %n second(s) %n minute(s) - + %n minute(s) %n hour(s) - + %n hour(s) %n day(s) - + %n day(s) %n week(s) - + %n week(s) %n year(s) - + %n year(s) @@ -597,7 +597,7 @@ Jika dompet ini mengandungi sebarang skrip yang boleh diselesaikan tetapi tidak %n GB of space available - + %n GB of space available @@ -616,7 +616,7 @@ Jika dompet ini mengandungi sebarang skrip yang boleh diselesaikan tetapi tidak (sufficient to restore backups %n day(s) old) Explanatory text on the capability of the current prune target. - + (sufficient to restore backups %n day(s) old) @@ -685,7 +685,7 @@ Jika dompet ini mengandungi sebarang skrip yang boleh diselesaikan tetapi tidak Estimated to begin confirmation within %n block(s). - + Estimated to begin confirmation within %n block(s). @@ -698,7 +698,7 @@ Jika dompet ini mengandungi sebarang skrip yang boleh diselesaikan tetapi tidak matures in %n more block(s) - + matures in %n more block(s) diff --git a/src/qt/locale/bitcoin_ne.ts b/src/qt/locale/bitcoin_ne.ts index 5c08b545569d..2fb6abc65480 100644 --- a/src/qt/locale/bitcoin_ne.ts +++ b/src/qt/locale/bitcoin_ne.ts @@ -184,6 +184,14 @@ Signing is only possible with addresses of the type 'legacy'. Enter the old passphrase and new passphrase for the wallet. वालेटको लागि पुरानो पासफ्रेज र नयाँ पासफ्रेज प्रविष्ट गर्नुहोस्। + + Continue + जारी राख्नुहोस् + + + Back + फिर्ता जानुहोस् + Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. याद गर्नुहोस् कि तपाईको वालेट इन्क्रिप्ट गर्नाले तपाईको बिटकोइनलाई तपाईको कम्प्युटरमा मालवेयरले चोरी हुनबाट पूर्णतया सुरक्षित गर्न सक्दैन। @@ -282,6 +290,11 @@ Signing is only possible with addresses of the type 'legacy'. Explanatory text shown on startup when the settings file cannot be read. Prompts user to make a choice between resetting or aborting. के तपाइँ पूर्वनिर्धारित मानहरूमा सेटिङहरू रिसेट गर्न चाहनुहुन्छ, वा परिवर्तन नगरी रद्द गर्न चाहनुहुन्छ? + + A fatal error occurred. Check that settings file is writable, or try running with -nosettings. + Explanatory text shown on startup when the settings file could not be written. Prompts user to check that we have the ability to write to the file. Explains that the user has the option of running without a settings file. + एउटा ठूलो त्रुटि भयो। सेटिङ फाइल लेख्न मिल्छ कि मिल्दैन जाँच गर्नुहोस्, वा -nosettings लेखेर चलाउने प्रयास गर्नुहोस्। + Error: %1 त्रुटि: %1 @@ -684,6 +697,10 @@ Signing is only possible with addresses of the type 'legacy'. &OK &ठिक छ + + Continue + जारी राख्नुहोस् + OverviewPage diff --git a/src/qt/locale/bitcoin_nl.ts b/src/qt/locale/bitcoin_nl.ts index b8a2c4fe1f91..298b448b2216 100644 --- a/src/qt/locale/bitcoin_nl.ts +++ b/src/qt/locale/bitcoin_nl.ts @@ -15,7 +15,7 @@ Copy the currently selected address to the system clipboard - Kopieer het momenteel geselecteerde adres naar het systeem klembord + Kopieer het momenteel geselecteerde adres naar het systeemklembord &Copy @@ -47,11 +47,11 @@ Choose the address to send coins to - Kies het adres om de munten te versturen + Kies het adres om munten naar te versturen Choose the address to receive coins with - Kies het adres om munten te ontvangen + Kies het adres om munten op te ontvangen C&hoose @@ -376,36 +376,36 @@ Ondertekenen is alleen mogelijk met adressen van het type 'legacy'. %n second(s) - %n seconde(n) - %n seconde(n) + + %n minute(s) - %n minu(u)t(en) - %n minu(u)t(en) + + %n hour(s) - %n u(u)r(en) - %n u(u)r(en) + + %n day(s) - %n dag(en) - %n dag(en) + + %n week(s) - %n we(e)k(en) - %n we(e)k(en) + + @@ -415,8 +415,8 @@ Ondertekenen is alleen mogelijk met adressen van het type 'legacy'. %n year(s) - %n ja(a)r(en) - %n ja(a)r(en) + + @@ -626,8 +626,8 @@ Ondertekenen is alleen mogelijk met adressen van het type 'legacy'. Processed %n block(s) of transaction history. - %n blok(ken) aan transactiegeschiedenis verwerkt. - %n blok(ken) aan transactiegeschiedenis verwerkt. + + @@ -784,8 +784,8 @@ Ondertekenen is alleen mogelijk met adressen van het type 'legacy'.%n active connection(s) to Bitcoin network. A substring of the tooltip. - %n actieve verbinding(en) met het Bitcoin netwerk. - %n actieve verbinding(en) met het Bitcoin netwerk. + + @@ -1141,7 +1141,10 @@ Het migratieproces maakt voorafgaand aan het migreren een backup van de wallet. Restoring Wallet <b>%1</b>… Descriptive text of the restore wallets progress window which indicates to the user that wallets are currently being restored. - Herstellen wallet <b>%1</b>… + Herstellen wallet <b>%1</b>…HerstellenL + + + Restore wallet failed @@ -1325,22 +1328,22 @@ Het migratieproces maakt voorafgaand aan het migreren een backup van de wallet. %n GB of space available - %n GB beschikbare ruimte - %n GB beschikbare ruimte + + (of %n GB needed) - (van %n GB nodig) - (van %n GB nodig) + + (%n GB needed for full chain) - (%n GB nodig voor volledige keten) - (%n GB nodig voor volledige keten) + + @@ -1359,8 +1362,8 @@ Het migratieproces maakt voorafgaand aan het migreren een backup van de wallet. (sufficient to restore backups %n day(s) old) Explanatory text on the capability of the current prune target. - (voldoende om back-ups van %n dag(en) oud te herstellen) - (voldoende om back-ups van %n dag(en) oud te herstellen) + + @@ -1543,6 +1546,11 @@ Het migratieproces maakt voorafgaand aan het migreren een backup van de wallet. Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain. Activeren van pruning verkleint de benodigde ruimte om transacties op de harde schijf op te slaan aanzienlijk. Alle blokken blijven volledig gevalideerd worden. Deze instelling ongedaan maken vereist het opnieuw downloaden van de gehele blockchain. + + Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. + Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. + Maximale database cache-grootte. Zorg dat je genoeg RAM hebt. Een grotere cache kan bijdragen aan een snellere synchronisatie, waarna het voordeel in de meeste gevallen minder merkbaar is. De cache-grootte verkleinen beperkt het geheugengebruik. Ongebruikt mempoolgeheugen wordt gedeeld voor deze cache. + Size of &database cache Grootte van de &databasecache @@ -1555,6 +1563,14 @@ Het migratieproces maakt voorafgaand aan het migreren een backup van de wallet. Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! Volledig pad naar een %1 compatibel script (bijv. C:\Downloads\hwi.exe of /Gebruikers/gebruikersnaam/Downloads/hwi.py). Pas op: malware kan je munten stelen! + + Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. + Automatisch openen van de Bitcoin client poort op de router. Dit werkt alleen als de router PCP of NAT-PMP ondersteunt en het is ingeschakeld. De externe poort kan willekeurig zijn. + + + Map port using PCP or NA&T-PMP + Portmapping via PCP of NA&T-PMP + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) IP-adres van de proxy (bijv. IPv4: 127.0.0.1 / IPv6: ::1) @@ -1603,14 +1619,6 @@ Het migratieproces maakt voorafgaand aan het migreren een backup van de wallet. Reverting this setting requires re-downloading the entire blockchain. Deze instelling terugzetten vereist het opnieuw downloaden van de gehele blockchain. - - Maximum database cache size. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. - Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. - Maximum databank cache grootte. -Een grotere cache kan bijdragen tot een snellere sync, waarna het voordeel verminderd voor de meeste use cases. -De cache grootte verminderen verlaagt het geheugen gebruik. -Ongebruikte mempool geheugen is gedeeld voor deze cache. - Set the number of script verification threads. Negative values correspond to the number of cores you want to leave free to the system. Tooltip text for Options window setting that sets the number of script verification threads. Explains that negative values mean to leave these many cores free to the system. @@ -1670,22 +1678,6 @@ Ongebruikte mempool geheugen is gedeeld voor deze cache. &External signer script path &Extern ondertekenscript directory - - Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Open de Bitcoin poort automatisch op de router. Dit werkt alleen als de router UPnP ondersteunt en het aanstaat. - - - Map port using &UPnP - Portmapping via &UPnP - - - Automatically open the Bitcoin client port on the router. This only works when your router supports NAT-PMP and it is enabled. The external port could be random. - Automatisch openen van de Bitcoin client poort op de router. Dit werkt alleen als de router NAT-PMP ondersteunt en het is ingeschakeld. De externe poort kan willekeurig zijn. - - - Map port using NA&T-PMP - Port mapping via NA&T-PMP - Accept connections from outside. Accepteer verbindingen van buiten. @@ -3139,8 +3131,8 @@ Notitie: Omdat de vergoeding per byte wordt gerekend, zal een vergoeding van "10 Estimated to begin confirmation within %n block(s). - Naar schatting begint de bevestiging binnen %n blok(ken). - Naar schatting begint de bevestiging binnen %n blok(ken). + + @@ -3443,8 +3435,8 @@ Notitie: Omdat de vergoeding per byte wordt gerekend, zal een vergoeding van "10 matures in %n more block(s) - komt beschikbaar na %n nieuwe blokken - komt beschikbaar na %n nieuwe blokken + + @@ -3932,10 +3924,6 @@ Ga naar Bestand > Wallet openen om een wallet te laden. Cannot downgrade wallet from version %i to version %i. Wallet version unchanged. Kan wallet niet downgraden van versie %i naar version %i. Walletversie ongewijzigd. - - Cannot obtain a lock on data directory %s. %s is probably already running. - Kan geen lock verkrijgen op gegevensmap %s. %s draait waarschijnlijk al. - 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. Kan een non HD split wallet niet upgraden van versie %i naar versie %i zonder pre split keypool te ondersteunen. Gebruik versie %i of specificeer geen versienummer. @@ -3956,6 +3944,10 @@ Ga naar Bestand > Wallet openen om een wallet te laden. Error reading %s! Transaction data may be missing or incorrect. Rescanning wallet. Fout bij het lezen van %s! Transactiegegevens kunnen ontbreken of onjuist zijn. Wallet opnieuw scannen. + + Error starting/committing db txn for wallet transactions removal process + Fout bij starten/toekennen db txn voor verwijderproces wallettransacties + Error: Dumpfile format record is incorrect. Got "%s", expected "format". Fout: Record dumpbestandsformaat is onjuist. Gekregen "%s", verwacht "format". @@ -3984,6 +3976,10 @@ Ga naar Bestand > Wallet openen om een wallet te laden. Invalid or corrupt peers.dat (%s). If you believe this is a bug, please report it to %s. As a workaround, you can move the file (%s) out of the way (rename, move, or delete) to have a new one created on the next start. Ongeldige of beschadigde peers.dat (%s). Als je vermoedt dat dit een bug is, meld het aub via %s. Als alternatief, kun je het bestand (%s) weghalen (hernoemen, verplaatsen, of verwijderen) om een nieuwe te laten creëren bij de eerstvolgende keer opstarten. + + Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets + Ongeldige waarde voor '-wallet' of '-nowallet' gedetecteerd. '-wallet' vereist een string waarde, terwijl '-nowallet' alleen '1' accepteert om alle wallets uit te schakelen + More than one onion bind address is provided. Using %s for the automatically created Tor onion service. Meer dan één onion bind adres is voorzien. %s wordt gebruik voor het automatisch gecreëerde Tor onion service. @@ -4000,6 +3996,10 @@ Ga naar Bestand > Wallet openen om een wallet te laden. No wallet file format provided. To use createfromdump, -format=<format> must be provided. Geen walletbestandsformaat opgegeven. Om createfromdump te gebruiken, moet -format=<format> opgegeven worden. + + Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. + Optie '-upnp' staat ingesteld maar UPnP-ondersteuning is vervallen in versie 29.0. Overweeg om in plaats daarvan '-natpmp' te gebruiken. + Please contribute if you find %s useful. Visit %s for further information about the software. Gelieve bij te dragen als je %s nuttig vindt. Bezoek %s voor meer informatie over de software. @@ -4108,6 +4108,10 @@ Ga naar Bestand > Wallet openen om een wallet te laden. -maxmempool must be at least %d MB -maxmempool moet minstens %d MB zijn + + Cannot obtain a lock on directory %s. %s is probably already running. + Kan geen lock verkrijgen op map %s. %s draait waarschijnlijk al. + Cannot resolve -%s address: '%s' Kan -%s adres niet herleiden: '%s' @@ -4120,10 +4124,6 @@ Ga naar Bestand > Wallet openen om een wallet te laden. Cannot set -peerblockfilters without -blockfilterindex. Kan -peerblockfilters niet zetten zonder -blockfilterindex - - Cannot write to data directory '%s'; check permissions. - Mag niet schrijven naar gegevensmap '%s'; controleer bestandsrechten. - %s is set very high! Fees this large could be paid on a single transaction. %s is erg hoog ingesteld! Dergelijke hoge vergoedingen kunnen worden betaald voor een enkele transactie. @@ -4188,6 +4188,18 @@ Ga naar Bestand > Wallet openen om een wallet te laden. Outbound connections restricted to i2p (-onlynet=i2p) but -i2psam is not provided Uitgaande verbindingen beperkt tot i2p (-onlynet=i2p) maar -i2psam is niet opgegeven + + Specified -blockmaxweight (%d) exceeds consensus maximum block weight (%d) + Opgegeven -blockmaxweight (%d) oveschrijdt consensus maximum block weight (%d) + + + Specified -blockreservedweight (%d) exceeds consensus maximum block weight (%d) + Opgegeven -blockreservedweight (%d) overschrijdt consensus maximum block weight (%d) + + + Specified -blockreservedweight (%d) is lower than minimum safety value of (%d) + Opgegeven -blockreservedweight (%d) is lager dan minimum safety waarde (%d) + The inputs size exceeds the maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs De invoergrootte overschrijdt het maximale gewicht. Probeer een kleiner bedrag te verzenden of de UTXO's van uw portemonnee handmatig te consolideren @@ -4240,6 +4252,10 @@ Kan mislukte migratie niet opschonen Block verification was interrupted Blokverificatie is onderbroken + + Cannot write to directory '%s'; check permissions. + Kan niet schrijven naar map '%s'; controleer rechten. + Config setting for %s only applied on %s network when in [%s] section. Configuratie-instellingen voor %s alleen toegepast op %s network wanneer in [%s] sectie. @@ -4264,10 +4280,6 @@ Kan mislukte migratie niet opschonen Disk space is too low! Schijfruimte is te klein! - - Do you want to rebuild the block database now? - Wilt u de blokkendatabase nu herbouwen? - Done loading Klaar met laden @@ -4276,10 +4288,6 @@ Kan mislukte migratie niet opschonen Dump file %s does not exist. Dumpbestand %s bestaat niet. - - Error committing db txn for wallet transactions removal - Fout bij db txn verwerking voor verwijderen wallet transacties - Error creating %s Fout bij het maken van %s @@ -4312,10 +4320,18 @@ Kan mislukte migratie niet opschonen Error loading block database Fout bij het laden van blokkendatabase + + Error loading databases + Fout bij het laden van databases + Error opening block database Fout bij openen blokkendatabase + + Error opening coins database + Fout bij het openen van muntendatabase + Error reading configuration file: %s Fout bij lezen configuratiebestand: %s @@ -4328,10 +4344,6 @@ Kan mislukte migratie niet opschonen Error reading next record from wallet database Fout bij het lezen van het volgende record in de walletdatabase - - Error starting db txn for wallet transactions removal - Fout bij starten db txn voor verwijderen wallet transacties - Error: Cannot extract destination from the generated scriptpubkey Fout: Kan de bestemming niet extraheren uit de gegenereerde scriptpubkey @@ -4404,6 +4416,10 @@ Kan mislukte migratie niet opschonen Error: Unable to remove watchonly address book data Fout: kan alleen-bekijkbaar adresboekgegevens niet verwijderen + + Error: Unable to write data to disk for wallet %s + Fout: Kan gegevens niet naar schijf schrijven voor wallet %s + Error: Unable to write record to new wallet Fout: Kan record niet naar nieuwe wallet schrijven @@ -4416,10 +4432,6 @@ Kan mislukte migratie niet opschonen Error: Unable to write watchonly wallet best block locator record Fout: Kan beste block locatie aanduiding niet opslaan in alleen lezen wallet - - Error: address book copy failed for wallet %s - Fout: Kopiëren adresboek mislukt voor wallet %s - Error: database transaction cannot be executed for wallet %s Fout: Kan databasetransactie niet uitvoeren voor wallet %s @@ -4552,10 +4564,6 @@ Kan mislukte migratie niet opschonen No addresses available Geen adressen beschikbaar - - Not enough file descriptors available. - Niet genoeg file descriptors beschikbaar. - Not found pre-selected input %s Voorgeselecteerde invoer %s niet gevonden @@ -4648,6 +4656,10 @@ Kan mislukte migratie niet opschonen The transaction amount is too small to pay the fee Het transactiebedrag is te klein om transactiekosten in rekening te brengen + + The transactions removal process can only be executed within a db txn + Het transactie verwijderproces kan alleen binnen een db txn uitgevoerd worden + The wallet will avoid paying less than the minimum relay fee. De wallet vermijdt minder te betalen dan de minimale vergoeding voor het doorgeven. @@ -4768,6 +4780,10 @@ Kan mislukte migratie niet opschonen Unsupported logging category %s=%s. Niet-ondersteunde logcategorie %s=%s. + + Do you want to rebuild the databases now? + Wilt u de databases nu herbouwen? + Error: Could not add watchonly tx %s to watchonly wallet Fout: Kon alleen lezen tx %s niet toevoegen aan alleen lezen wallet @@ -4776,6 +4792,18 @@ Kan mislukte migratie niet opschonen Error: Could not delete watchonly transactions. Fout: Kon alleen-lezen transacties niet verwijderen + + Error: Wallet does not exist + Fout: Wallet bestaat niet + + + Error: cannot remove legacy wallet records + Fout: Kan verouderde walletgegevens niet verwijderen + + + Not enough file descriptors available. %d available, %d required. + Niet genoeg file descriptors beschikbaar.. %d beschikbaar, %d vereist. + User Agent comment (%s) contains unsafe characters. User Agentcommentaar (%s) bevat onveilige karakters. diff --git a/src/qt/locale/bitcoin_pl.ts b/src/qt/locale/bitcoin_pl.ts index 3f9496981c41..b8d4cb71af5a 100644 --- a/src/qt/locale/bitcoin_pl.ts +++ b/src/qt/locale/bitcoin_pl.ts @@ -15,7 +15,7 @@ Copy the currently selected address to the system clipboard - Skopiuj wybrany adres do schowka systemowego + Kopiuj aktualnie zaznaczony adres do schowka &Copy @@ -57,19 +57,49 @@ C&hoose Wybierz + + These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + To są twoje adresy Bitcoin do wysyłania płatności. Zawsze sprawdzaj kwotę oraz adres odbiorczy przed wysłaniem monet. + These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. Signing is only possible with addresses of the type 'legacy'. To są twoje adresy Bitcoin do otrzymywania płatności. Użyj przycisku 'Utwórz nowy adres odbioru' na karcie odbioru, aby utworzyć nowe adresy. Podpisywanie jest możliwe tylko z adresami typu 'legacy'. + + &Copy Address + &Kopiuj adres + + + Copy &Label + Kopiuj &etykietę + + + &Edit + &Edytuj + + + Export Address List + Eksportuj listę adresów + + + Comma separated file + Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. + Plik rozdzielany przecinkami + + + There was an error trying to save the address list to %1. Please try again. + An error message. %1 is a stand-in argument for the name of the file we attempted to save to. + Wystąpił błąd podczas próby zapisania listy adresów do %1. Spróbuj ponownie. + Sending addresses - %1 Wysyłające adresy - %1 Receiving addresses - %1 - Odbierające adresy - %1 + Adresy odbiorcze - %1 Exporting Failed @@ -95,11 +125,11 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. AskPassphraseDialog Passphrase Dialog - Okienko Hasła + Okienko Hasła Enter passphrase - Wpisz hasło + Wpisz hasło New passphrase @@ -107,19 +137,27 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. Repeat new passphrase - Powtórz nowe hasło + Powtórz nowe hasło Show passphrase - Pokaż hasło + Pokaż hasło Encrypt wallet - Zaszyfruj portfel + Zaszyfruj portfel + + + This operation needs your wallet passphrase to unlock the wallet. + Ta operacja wymaga hasła do twojego portfela, aby go odblokować. + + + Unlock wallet + Odblokuj portfel Change passphrase - Zmień hasło + Zmień hasło Confirm wallet encryption @@ -127,7 +165,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! - hasłoOstrzeżenie: Jeśli zaszyfrujesz swój portfel i zgubisz hasło - <b>STRACISZ WSZYSTKIE SWOJE BITCONY</b>! + Uwaga: Jeśli zaszyfrujesz swój portfel i zgubisz swoje hasło, <b>STRACISZ WSZYSTKIE SWOJE BITCOINY</b>! Are you sure you wish to encrypt your wallet? @@ -135,7 +173,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. Wallet encrypted - Portfel zaszyfrowany + Portfel zaszyfrowany Enter the new passphrase for the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. @@ -159,7 +197,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. Wallet to be encrypted - Portfel do zaszyfrowania + Portfel do zaszyfrowania Your wallet is about to be encrypted. @@ -222,22 +260,22 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. Banned Until - Blokada do + Zablokowany do BitcoinApplication Settings file %1 might be corrupt or invalid. - Plik ustawień 1%1 może być uszkodzony lub nieprawidłowy + Plik ustawień %1 może być uszkodzony lub nieprawidłowy Runaway exception - Błąd zapisu do portfela + Nieobsługiwany wyjątek A fatal error occurred. %1 can no longer continue safely and will quit. - Wystąpił fatalny błąd. %1 nie może być kontynuowany i zostanie zakończony. + Wystąpił krytyczny błąd. %1 nie może już bezpiecznie kontynuować i zostanie zamknięty. Internal error @@ -258,7 +296,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. A fatal error occurred. Check that settings file is writable, or try running with -nosettings. Explanatory text shown on startup when the settings file could not be written. Prompts user to check that we have the ability to write to the file. Explains that the user has the option of running without a settings file. - Wystąpił krytyczny błąd. Upewnij się, że plik ustawień można nadpisać lub uruchom klienta z parametrem -nosettings. + Wystąpił krytyczny błąd. Upewnij się, że plik ustawień można zapisać lub uruchom klienta z parametrem -nosettings. Error: %1 @@ -266,7 +304,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. %1 didn't yet exit safely… - %1 jeszcze się bezpiecznie nie zamknął... + %1 jeszcze się bezpiecznie nie zamknął… unknown @@ -294,17 +332,17 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. Unroutable - Nie można wytyczyć + Nie można wytyczyć trasy Inbound An inbound connection from a peer. An inbound connection is a connection initiated by a peer. - Wejściowy + Przychodzące Outbound An outbound connection to a peer. An outbound connection is a connection initiated by us. - Wyjściowy + Wychodzące Full Relay @@ -314,7 +352,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. Block Relay Peer connection type that relays network information about blocks and not transactions or addresses. - Przekaźnik Blokowy + Przekaźnik Bloków Manual @@ -324,7 +362,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. Feeler Short-lived peer connection type that tests the aliveness of known addresses. - Szczelinomierz + Połączenie testowe Address Fetch @@ -343,7 +381,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. %n second(s) %n sekunda - %n sekund + %n sekundy %n sekund @@ -351,7 +389,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. %n minute(s) %n minuta - %n minut + %n minuty %n minut @@ -359,7 +397,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. %n hour(s) %n godzina - %n godzin + %n godziny %n godzin @@ -376,7 +414,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. %n tydzień %n tygodnie - %n tygodnie + %n tygodni @@ -388,7 +426,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. %n rok %n lata - %n lata + %n lat @@ -485,11 +523,11 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. &Options… - &Opcje... + &Opcje… &Encrypt Wallet… - Zaszyfruj portf&el... + Zaszyfruj portf&el… Encrypt the private keys that belong to your wallet @@ -497,15 +535,15 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. &Backup Wallet… - Utwórz kopię zapasową portfela... + Utwórz kopię zapasową portfela… &Change Passphrase… - &Zmień hasło... + &Zmień hasło… Sign &message… - Podpisz &wiadomość... + Podpisz &wiadomość… Sign messages with your Bitcoin addresses to prove you own them @@ -513,7 +551,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. &Verify message… - &Zweryfikuj wiadomość... + &Zweryfikuj wiadomość… Verify messages to ensure they were signed with specified Bitcoin addresses @@ -521,23 +559,23 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. &Load PSBT from file… - Wczytaj PSBT z pliku... + &Wczytaj PSBT z pliku… Open &URI… - Otwórz &URI... + Otwórz &URI… Close Wallet… - Zamknij portfel... + Zamknij portfel… Create Wallet… - Utwórz portfel... + Stwórz portfel… Close All Wallets… - Zamknij wszystkie portfele ... + Zamknij wszystkie portfele… &File @@ -557,27 +595,27 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. Syncing Headers (%1%)… - Synchronizuję nagłówki (%1%)… + Synchronizowanie nagłówków (%1%)… Synchronizing with network… - Synchronizacja z siecią... + Synchronizacja z siecią… Indexing blocks on disk… - Indeksowanie bloków... + Indeksowanie bloków… Processing blocks on disk… - Przetwarzanie bloków... + Przetwarzanie bloków… Connecting to peers… - Łączenie z uczestnikami sieci... + Łączenie z uczestnikami sieci… Request payments (generates QR codes and bitcoin: URIs) - Zażądaj płatności (wygeneruj QE code i bitcoin: URI) + Zażądaj płatności (generuje kody QR i URI bitcoin:) Show the list of used sending addresses and labels @@ -589,14 +627,14 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. &Command-line options - &Opcje linii komend + &Opcje wiersza poleceń Processed %n block(s) of transaction history. Przetworzono %n blok historii transakcji. - Przetworzono 1%n bloków historii transakcji. - Przetworzono 1%n bloków historii transakcji. + Przetworzono %n bloki historii transakcji. + Przetworzono %n bloków historii transakcji. @@ -605,7 +643,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. Catching up… - Synchronizuję... + Synchronizuję… Last received block was generated %1 ago. @@ -637,7 +675,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. Load PSBT from &clipboard… - Wczytaj PSBT ze schowka... + Wczytaj PSBT ze schowka… Load Partially Signed Bitcoin Transaction from clipboard @@ -657,11 +695,11 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. &Receiving addresses - &Adresy odbioru + &Adresy odbiorcze Open a bitcoin: URI - Otwórz URI + Otwórz URI bitcoin: Open Wallet @@ -699,7 +737,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. Show the %1 help message to get a list with possible Bitcoin command-line options - Pokaż pomoc %1 aby zobaczyć listę wszystkich opcji lnii poleceń. + Pokaż pomoc dla %1 aby zobaczyć listę możliwych opcji wiersza poleceń &Mask values @@ -716,7 +754,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. Wallet Data Name of the wallet data file format. - Informacje portfela + Dane portfela Load Wallet Backup @@ -753,19 +791,23 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. &Hide &Ukryj + + S&how + &Wyświetl + %n active connection(s) to Bitcoin network. A substring of the tooltip. %n aktywne połączenie z siecią Bitcoin. - %n aktywnych połączeń z siecią Bitcoin. + %n aktywne połączenia z siecią Bitcoin. %n aktywnych połączeń z siecią Bitcoin. Click for more actions. A substring of the tooltip. "More actions" are available via the context menu. - Kliknij po więcej funkcji. + Kliknij aby uzyskać więcej funkcji. Show Peers tab @@ -784,7 +826,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. Pre-syncing Headers (%1%)… - Synchronizuję nagłówki (%1%)… + Wstępne synchronizowanie nagłówków (%1%)… Error creating wallet @@ -910,7 +952,7 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. (un)select all - zaznacz/odznacz wszytsko + zaznacz/odznacz wszystko Tree mode @@ -942,27 +984,27 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. Confirmed - Potwerdzone + Potwierdzone Copy amount - Kopiuj kwote + Kopiuj kwotę &Copy address - Kopiuj adres + &Kopiuj adres Copy &label - Kopiuj etykietę + Kopiuj &etykietę Copy &amount - Kopiuj kwotę + Kopiuj &kwotę Copy transaction &ID and output index - Skopiuj &ID transakcji oraz wyjściowy indeks + Kopiuj &ID transakcji oraz wyjściowy indeks L&ock unspent @@ -974,23 +1016,23 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. Copy quantity - Skopiuj ilość + Kopiuj ilość Copy fee - Skopiuj prowizję + Kopiuj opłatę Copy after fee - Skopiuj ilość po opłacie + Kopiuj ilość po opłacie Copy bytes - Skopiuj ilość bajtów + Kopiuj bajty Copy change - Skopiuj resztę + Kopiuj resztę (%1 locked) @@ -1018,16 +1060,16 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. Create Wallet Title of window indicating the progress of creation of a new wallet. - Stwórz potrfel + Stwórz portfel Creating Wallet <b>%1</b>… Descriptive text of the create wallet progress window which indicates to the user which wallet is currently being created. - Tworzenie portfela <b>%1</b>... + Tworzenie portfela <b>%1</b>… Create wallet failed - Nieudane tworzenie potrfela + Utworzenie portfela nie powiodło się Create wallet warning @@ -1047,12 +1089,12 @@ Podpisywanie jest możliwe tylko z adresami typu 'legacy'. Load Wallets Title of progress window which is displayed when wallets are being loaded. - Ładuj portfele + Ładuj portfele Loading wallets… Descriptive text of the load wallets progress window which indicates to the user that wallets are currently being loaded. - Ładowanie portfeli... + Ładowanie portfeli… @@ -1075,7 +1117,7 @@ The migration process will create a backup of the wallet before migrating. This Jeśli ten portfel zawiera jakiekolwiek skrypty tylko do odczytu, zostanie utworzony nowy portfel, który zawiera te skrypty tylko do odczytu. Jeśli ten portfel zawiera jakiekolwiek skrypty rozwiązywalne, ale nie obserwowane, zostanie utworzony inny i nowy portfel, który zawiera te skrypty. -Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii zapasowej będzie nosił nazwę <nazwa portfela>-<znacznik czasu>.legacy.bak i można go znaleźć w katalogu tego portfela. W przypadku nieprawidłowej migracji kopię zapasową można przywrócić za pomocą funkcji "Przywróć portfel". +Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii zapasowej będzie nosił nazwę <wallet name>-<timestamp>.legacy.bak i można go znaleźć w katalogu tego portfela. W przypadku nieprawidłowej migracji kopię zapasową można przywrócić za pomocą funkcji "Przywróć portfel". Migrate Wallet @@ -1083,7 +1125,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Migrating Wallet <b>%1</b>… - Przenoszenie portfela <b>%1</b>... + Przenoszenie portfela <b>%1</b>… The wallet '%1' was migrated successfully. @@ -1095,7 +1137,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Solvable but not watched scripts have been migrated to a new wallet named '%1'. - Sprawne, ale nie oglądane skrypty tylko do odczytu zostały przeniesione do nowego portfela '%1' + Rozwiązywalne, ale nie obserwowane skrypty zostały przeniesione do nowego portfela '%1' Migration failed @@ -1114,7 +1156,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Open wallet warning - Ostrzeżenie przy otworzeniu potrfela + Ostrzeżenie podczas otwierania portfela Open Wallet @@ -1124,7 +1166,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Opening Wallet <b>%1</b>… Descriptive text of the open wallet progress window which indicates to the user which wallet is currently being opened. - Otwieranie portfela <b>%1</b>... + Otwieranie portfela <b>%1</b>… @@ -1137,22 +1179,22 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Restoring Wallet <b>%1</b>… Descriptive text of the restore wallets progress window which indicates to the user that wallets are currently being restored. - Odtwarzanie portfela <b>%1</b>... + Przywracanie portfela <b>%1</b>… Restore wallet failed Title of message box which is displayed when the wallet could not be restored. - Odtworzenie portfela nieudane + Przywracanie portfela nie powiodło się Restore wallet warning Title of message box which is displayed when the wallet is restored with some warning. - Ostrzeżenie przy odtworzeniu portfela + Ostrzeżenie podczas przywracania portfela Restore wallet message Title of message box which is displayed when the wallet is successfully restored. - Wiadomość przy odtwarzaniu portfela + Wiadomość podczas przywracania portfela @@ -1167,7 +1209,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. - Zamknięcie portfela na zbyt długo może skutkować koniecznością ponownego załadowania całego łańcucha, jeżeli jest włączony pruning. + Zamknięcie portfela na zbyt długo może skutkować koniecznością ponownego załadowania całego łańcucha, jeżeli jest włączone przycinanie (pruning). Close all wallets @@ -1175,14 +1217,14 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Are you sure you wish to close all wallets? - Na pewno zamknąć wszystkie portfe? + Na pewno zamknąć wszystkie portfele? CreateWalletDialog Create Wallet - Stwórz potrfel + Stwórz portfel You are one step away from creating your new wallet! @@ -1190,7 +1232,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Please provide a name and, if desired, enable any advanced options - Proszę podać nazwę, i jeśli potrzeba, włącz zaawansowane ustawienia. + Podaj nazwę i, jeśli chcesz, włącz dowolne opcje zaawansowane Wallet Name @@ -1226,7 +1268,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Make Blank Wallet - Stwórz czysty portfel + Stwórz pusty portfel Use an external signing device such as a hardware wallet. Configure the external signer script in wallet preferences first. @@ -1234,7 +1276,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za External signer - Zewnętrzny sygnatariusz + Zewnętrzne urządzenie podpisujące Create @@ -1243,14 +1285,14 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Compiled without external signing support (required for external signing) "External signing" means using devices such as hardware wallets. - Skompilowany bez obsługi podpisywania zewnętrznego (wymagany do podpisywania zewnętrzengo) + Skompilowany bez obsługi podpisywania zewnętrznego (wymagany do podpisywania zewnętrznego) EditAddressDialog Edit Address - Zmień adres + Edytuj adres &Label @@ -1274,7 +1316,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Edit receiving address - Zmień adres odbioru + Zmień adres odbiorczy Edit sending address @@ -1356,7 +1398,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za At least %1 GB of data will be stored in this directory, and it will grow over time. - Co najmniej %1 GB danych, zostanie zapisane w tym katalogu, dane te będą przyrastały w czasie. + Co najmniej %1 GB danych zostanie zapisane w tym katalogu, a ich rozmiar będzie rósł w czasie. Approximately %1 GB of data will be stored in this directory. @@ -1381,7 +1423,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Error: Specified data directory "%1" cannot be created. - Błąd: podany folder danych «%1» nie mógł zostać utworzony. + Błąd: podany folder danych "%1" nie mógł zostać utworzony. Error @@ -1421,7 +1463,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low. - Jeśli wybrałeś opcję ograniczenia przechowywania łańcucha bloków (przycinanie) dane historyczne cały czas będą musiały być pobrane i przetworzone, jednak po tym zostaną usunięte aby ograniczyć użycie dysku. + Jeśli wybrałeś opcję przycinania (pruning) dane historyczne cały czas będą musiały być pobrane i przetworzone, jednak po tym zostaną usunięte aby ograniczyć użycie dysku. Use the default data directory @@ -1444,14 +1486,14 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Command-line options - Opcje konsoli + Opcje wiersza poleceń ShutdownWindow %1 is shutting down… - %1 się zamyka... + %1 zamyka się… Do not shut down the computer until this window disappears. @@ -1478,11 +1520,11 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Unknown… - Nieznany... + Nieznany… calculating… - obliczanie... + obliczanie… Last block time @@ -1510,22 +1552,22 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za %1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain. - %1 jest w trakcie synchronizacji. Trwa pobieranie i weryfikacja nagłówków oraz bloków z sieci w celu uzyskania aktualnego stanu łańcucha. + %1 jest w trakcie synchronizacji. Będzie pobierał oraz weryfikował nagłówki i bloki z sieci w celu uzyskania aktualnego stanu łańcucha. Unknown. Syncing Headers (%1, %2%)… - nieznany, Synchronizowanie nagłówków (1%1, 2%2%) + Nieznany. Synchronizowanie nagłówków (%1, %2%) Unknown. Pre-syncing Headers (%1, %2%)… - Nieznane. Synchronizowanie nagłówków (%1, %2%)... + Nieznane. Wstępne synchronizowanie nagłówków (%1, %2%)… OpenURIDialog Open bitcoin URI - Otwórz URI + Otwórz bitcoin URI Paste address from clipboard @@ -1553,7 +1595,12 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain. - Włączenie czyszczenia znacznie zmniejsza ilość miejsca na dysku wymaganego do przechowywania transakcji. Wszystkie bloki są nadal w pełni zweryfikowane. Przywrócenie tego ustawienia wymaga ponownego pobrania całego łańcucha bloków. + Włączenie przycinania (pruning) znacznie zmniejsza ilość miejsca na dysku wymaganego do przechowywania transakcji. Wszystkie bloki są nadal w pełni zweryfikowane. Przywrócenie tego ustawienia wymaga ponownego pobrania całego łańcucha bloków. + + + Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. + Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. + Maksymalna wielkość pamięci podręcznej dla bazy danych. Upewnij się, że masz odpowiednią ilość pamięci RAM. Większa ilość pamięci podręcznej może przyśpieszyć synchronizację, z mniejszym wpływem w większości przypadków. Zmniejszenie wielkości tej pamięci zredukuje użycie pamięci. Nieużywana pamięć mempool jest współdzielona z cache. Size of &database cache @@ -1565,7 +1612,11 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! - Pełna ścieżka do skryptu zgodnego z %1 (np. C:\Downloads\hwi.exe lub /Users/you/Downloads/hwi.py). Uwaga: złośliwe oprogramowanie może ukraść Twoje monety! + Pełna ścieżka do skryptu zgodnego z %1 (np. C:\Downloads\hwi.exe lub /Users/ty/Downloads/hwi.py). Uwaga: złośliwe oprogramowanie może ukraść Twoje monety! + + + Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. + Automatycznie przekieruj porty dla klienta Bitcoin na routerze. Ta opcja działa tylko i wyłącznie, jeżeli twój router wspiera PCP lub NAT-PMP oraz jest ono włączone. Zewnętrzny port może być losowy. Map port using PCP or NA&T-PMP @@ -1589,11 +1640,11 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Options set in this dialog are overridden by the command line: - Opcje ustawione w tym oknie są nadpisane przez linię komend: + Opcje ustawione w tym oknie są nadpisane przez wiersz poleceń: Open the %1 configuration file from the working directory. - Otwiera %1 plik konfiguracyjny z czynnego katalogu. + Otwiera plik konfiguracyjny %1 z czynnego katalogu. Open Configuration File @@ -1645,12 +1696,12 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Whether to set subtract fee from amount as default or not. Tooltip text for Options window setting that sets subtracting the fee from a sending amount as default. - Czy ustawić opłatę odejmowaną od kwoty jako domyślną, czy nie. + Ustawić domyślne odejmowanie opłaty od kwoty czy nie. Subtract &fee from amount by default An Options window setting to set subtracting the fee from a sending amount as default. - Domyślnie odejmij opłatę od kwoty + Domyślnie odejmuj &opłatę od kwoty Expert @@ -1658,7 +1709,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Enable coin &control features - Włącz funk&cje kontoli monet + Włącz funk&cje kontroli monet If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. @@ -1708,7 +1759,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Port of the proxy (e.g. 9050) - Port proxy (np. 9050) + Port serwera proxy (np. 9050) Used for reaching peers via: @@ -1768,7 +1819,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Whether to show coin control features or not. - Wybierz pokazywanie lub nie funkcji kontroli monet. + Czy wyświetlać funkcje kontroli monet, czy nie. Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services. @@ -1785,7 +1836,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Compiled without external signing support (required for external signing) "External signing" means using devices such as hardware wallets. - Skompilowany bez obsługi podpisywania zewnętrznego (wymagany do podpisywania zewnętrzengo) + Skompilowany bez obsługi podpisywania zewnętrznego (wymagany do podpisywania zewnętrznego) default @@ -1823,7 +1874,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file. Explanatory text about the priority order of instructions considered by client. The order from high to low being: command-line, configuration file, GUI settings. - Plik konfiguracyjny jest używany celem zdefiniowania zaawansowanych opcji nadpisujących ustawienia aplikacji okienkowej (GUI). Parametry zdefiniowane z poziomu linii poleceń nadpisują parametry określone w tym pliku. + Plik konfiguracyjny jest używany celem zdefiniowania zaawansowanych opcji nadpisujących ustawienia aplikacji okienkowej (GUI). Parametry zdefiniowane z poziomu wiersza poleceń nadpisują parametry określone w tym pliku. Continue @@ -1869,7 +1920,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Watch-only: - Tylko podglądaj: + Tylko do obserwacji: Available: @@ -1893,7 +1944,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Mined balance that has not yet matured - Balans wydobytych monet, które jeszcze nie dojrzały + Saldo wydobytych monet, które jeszcze nie dojrzały Balances @@ -1909,7 +1960,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Your current balance in watch-only addresses - Twoje obecne saldo na podglądanym adresie + Twoje obecne saldo na adresie tylko do obserwacji Spendable: @@ -1921,15 +1972,15 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Unconfirmed transactions to watch-only addresses - Niepotwierdzone transakcje na podglądanych adresach + Niepotwierdzone transakcje na adresach tylko do obserwacji Mined balance in watch-only addresses that has not yet matured - Wykopane monety na podglądanych adresach które jeszcze nie dojrzały + Saldo wydobytych monet na adresach tylko do obserwacji, które nie są jeszcze dojrzałe Current total balance in watch-only addresses - Łączna kwota na podglądanych adresach + Łączna kwota na adresach tylko do obserwacji Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings->Mask values. @@ -1956,7 +2007,7 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Save… - Zapisz... + Zapisz… Close @@ -1984,12 +2035,16 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Signed transaction successfully. Transaction is ready to broadcast. - transakcja + Transakcja została podpisana pomyślnie. Transakcja jest gotowa do rozgłoszenia. Unknown error processing transaction. Nieznany błąd podczas przetwarzania transakcji. + + Transaction broadcast successfully! Transaction ID: %1 + Transakcja została rozgłoszona pomyślnie! ID transakcji: %1 + Transaction broadcast failed: %1 Nie udało się rozgłosić transakscji: %1 @@ -2053,11 +2108,11 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za (But this wallet cannot sign transactions.) - (Ale ten portfel nie może podipisać transakcji.) + (Ale ten portfel nie może podpisywać transakcji.) (But this wallet does not have the right keys.) - (Ale ten portfel nie posiada wlaściwych kluczy.) + (Ale ten portfel nie posiada właściwych kluczy.) Transaction is fully signed and ready for broadcast. @@ -2090,13 +2145,13 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Cannot process payment request because BIP70 is not supported. Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored. If you are receiving this error you should request the merchant provide a BIP21 compatible URI. - Nie można przetworzyć żądanie zapłaty poniewasz BIP70 nie jest obsługiwany. -Ze względu na wady bezpieczeństwa w BIP70 jest zalecane ignorować wszelkich instrukcji od sprzedawcę dotyczących zmiany portfela. -Jeśli pojawia się ten błąd, poproś sprzedawcę o podanie URI zgodnego z BIP21. + Nie można przetworzyć żądania płatności, ponieważ BIP70 nie jest obsługiwany. +Ze względu na powszechne luki bezpieczeństwa w BIP70, zdecydowanie zaleca się ignorowanie wszelkich instrukcji sprzedawcy dotyczących zmiany portfela. +Jeśli otrzymujesz ten błąd, poproś sprzedawcę o udostępnienie URI zgodnego z BIP21. URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters. - Nie można przeanalizować identyfikatora URI! Może to być spowodowane nieważnym adresem Bitcoin lub nieprawidłowymi parametrami URI. + Nie można zinterpretować identyfikatora URI! Może to być spowodowane nieprawidłowym adresem Bitcoin lub niepoprawnymi parametrami URI. Payment request file handling @@ -2153,19 +2208,19 @@ Jeśli pojawia się ten błąd, poproś sprzedawcę o podanie URI zgodnego z BIP Inbound An Inbound Connection from a Peer. - Wejściowy + Przychodzące Outbound An Outbound Connection to a Peer. - Wyjściowy + Wychodzące QRImageWidget &Save Image… - Zapi&sz Obraz... + Zapi&sz Obraz… &Copy Image @@ -2173,7 +2228,7 @@ Jeśli pojawia się ten błąd, poproś sprzedawcę o podanie URI zgodnego z BIP Resulting URI too long, try to reduce the text for label / message. - Wynikowy URI jest zbyt długi, spróbuj zmniejszyć tekst etykiety / wiadomości + Wynikowy URI jest zbyt długi, spróbuj skrócić tekst etykiety / wiadomości Error encoding URI into QR Code. @@ -2337,11 +2392,11 @@ Jeśli pojawia się ten błąd, poproś sprzedawcę o podanie URI zgodnego z BIP The mapped Autonomous System used for diversifying peer selection. - Zmapowany autonomiczny system (ang. asmap) używany do dywersyfikacji wyboru węzłów. + Zmapowany system autonomiczny (ang. asmap) używany do dywersyfikacji wyboru węzłów. Mapped AS - Zmapowany autonomiczny system (ang. asmap) + Zmapowany system autonomiczny (ang. asmap) Whether we relay addresses to this peer. @@ -2356,12 +2411,12 @@ Jeśli pojawia się ten błąd, poproś sprzedawcę o podanie URI zgodnego z BIP The total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). Tooltip text for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - Całkowita liczba adresów otrzymanych od tego węzła, które zostały przetworzone (wyklucza adresy, które zostały odrzucone ze względu na ograniczenie szybkości). + Łączna liczba adresów otrzymanych od tego węzła, które zostały przetworzone (z wyłączeniem adresów odrzuconych z powodu limitów połączeń). The total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. Tooltip text for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Całkowita liczba adresów otrzymanych od tego węzła, które zostały odrzucone (nieprzetworzone) z powodu ograniczenia szybkości. + Łączna liczba adresów otrzymanych od tego węzła, które zostały odrzucone (nieprzetworzone) z powodu limitów połączeń. Addresses Processed @@ -2371,7 +2426,7 @@ Jeśli pojawia się ten błąd, poproś sprzedawcę o podanie URI zgodnego z BIP Addresses Rate-Limited Text title for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - Wskaźnik-Ograniczeń Adresów + Adresy ograniczone limitem połączeń User Agent @@ -2383,7 +2438,7 @@ Jeśli pojawia się ten błąd, poproś sprzedawcę o podanie URI zgodnego z BIP Current block height - Obecna ilość bloków + Bieżąca wysokość bloku Open the %1 debug log file from the current data directory. This can take a few seconds for large log files. @@ -2423,7 +2478,7 @@ Jeśli pojawia się ten błąd, poproś sprzedawcę o podanie URI zgodnego z BIP High bandwidth BIP152 compact block relay: %1 - Kompaktowy przekaźnik blokowy BIP152 o dużej przepustowości: 1 %1 + Przekaźnik skompaktowanych bloków o wysokiej przepustowości BIP152: %1 High Bandwidth @@ -2444,7 +2499,7 @@ Jeśli pojawia się ten błąd, poproś sprzedawcę o podanie URI zgodnego z BIP Elapsed time since a novel transaction accepted into our mempool was received from this peer. Tooltip text for the Last Transaction field in the peer details area. - Czas, który upłynął od otrzymania nowej transakcji przyjętej do naszej pamięci od tego partnera. + Czas, który upłynął od otrzymania nowej transakcji przyjętej do naszego mempoola od tego partnera. Last Send @@ -2460,7 +2515,7 @@ Jeśli pojawia się ten błąd, poproś sprzedawcę o podanie URI zgodnego z BIP The duration of a currently outstanding ping. - Czas trwania nadmiarowego pingu + Czas trwania aktualnie oczekującego pinga. Ping Wait @@ -2496,7 +2551,7 @@ Jeśli pojawia się ten błąd, poproś sprzedawcę o podanie URI zgodnego z BIP Debug log file - Plik logowania debugowania + Plik dziennika debugowania Clear console @@ -2523,17 +2578,17 @@ Jeśli pojawia się ten błąd, poproś sprzedawcę o podanie URI zgodnego z BIP Outbound Block Relay: does not relay transactions or addresses Explanatory text for an outbound peer connection that relays network information about blocks and not transactions or addresses. - Outbound Block Relay: nie przekazuje transakcji ani adresów + Wychodzący przekaźnik bloków: nie przekazuje transakcji ani adresów Outbound Manual: added using RPC %1 or %2/%3 configuration options Explanatory text for an outbound peer connection that was established manually through one of several methods. The numbered arguments are stand-ins for the methods available to establish manual connections. - Outbound Manual: dodano przy użyciu opcji konfiguracyjnych RPC 1%1 lub 2%2/3%3 + Połączenie wychodzące ręczne: dodano przy użyciu opcji konfiguracyjnych RPC %1 lub %2/%3 Outbound Feeler: short-lived, for testing addresses Explanatory text for a short-lived outbound peer connection that is used to test the aliveness of known addresses. - Outbound Feeler: krótkotrwały, do testowania adresów + Wychodzące połączenie testowe: krótkotrwałe, do testowania adresów Outbound Address Fetch: short-lived, for soliciting addresses @@ -2570,7 +2625,7 @@ Jeśli pojawia się ten błąd, poproś sprzedawcę o podanie URI zgodnego z BIP &Copy address Context menu action to copy the address of a peer. - Kopiuj adres + &Kopiuj adres &Disconnect @@ -2595,7 +2650,7 @@ Jeśli pojawia się ten błąd, poproś sprzedawcę o podanie URI zgodnego z BIP &Copy IP/Netmask Context menu action to copy the IP/Netmask of a banned peer. IP/Netmask is the combination of a peer's IP address and its Netmask. For IP address, see: https://en.wikipedia.org/wiki/IP_address. - Skopiuj IP/Maskę Sieci + &Kopiuj IP/Maskę sieci &Unban @@ -2641,7 +2696,7 @@ Aby uzyskać więcej informacji na temat używania tej konsoli wpisz %6. Executing… A console message indicating an entered command is currently being executed. - Wykonuję... + Wykonuję… via %1 @@ -2665,7 +2720,7 @@ Aby uzyskać więcej informacji na temat używania tej konsoli wpisz %6. Ban for - Zbanuj na + Ban na Never @@ -2704,7 +2759,7 @@ Aby uzyskać więcej informacji na temat używania tej konsoli wpisz %6. An optional amount to request. Leave this empty or zero to not request a specific amount. - Opcjonalna kwota by zażądać. Zostaw puste lub zero by nie zażądać konkretnej kwoty. + Opcjonalna kwota do zażądania. Zostaw puste lub zero, aby nie zażądać konkretnej kwoty. 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. @@ -2728,7 +2783,7 @@ Aby uzyskać więcej informacji na temat używania tej konsoli wpisz %6. Requested payments history - Żądanie historii płatności + Żądana historia płatności Show the selected request (does the same as double clicking an entry) @@ -2752,19 +2807,19 @@ Aby uzyskać więcej informacji na temat używania tej konsoli wpisz %6. &Copy address - Kopiuj adres + &Kopiuj adres Copy &label - Kopiuj etykietę + Kopiuj &etykietę Copy &message - Skopiuj wiado&mość + Kopiuj wiado&mość Copy &amount - Kopiuj kwotę + Kopiuj &kwotę Not recommended due to higher fees and less protection against typos. @@ -2795,7 +2850,7 @@ Aby uzyskać więcej informacji na temat używania tej konsoli wpisz %6. ReceiveRequestDialog Request payment to … - Żądaj płatności do ... + Żądaj płatności do … Address: @@ -2835,7 +2890,7 @@ Aby uzyskać więcej informacji na temat używania tej konsoli wpisz %6. &Save Image… - Zapi&sz Obraz... + Zapi&sz Obraz… Payment information @@ -2921,11 +2976,11 @@ Aby uzyskać więcej informacji na temat używania tej konsoli wpisz %6. If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. - Kiedy ta opcja jest wybrana, to jeżeli adres reszty jest pusty lub nieprawidłowy, to reszta będzie wysyłana na nowo wygenerowany adres, + Kiedy ta opcja jest wybrana, to jeżeli adres reszty jest pusty lub nieprawidłowy, to reszta będzie wysyłana na nowo wygenerowany adres. Custom change address - Niestandardowe zmiany adresu + Niestandardowy adres reszty Transaction Fee: @@ -2933,8 +2988,7 @@ Aby uzyskać więcej informacji na temat używania tej konsoli wpisz %6. 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. - 206/5000 -Korzystanie z opłaty domyślnej może skutkować wysłaniem transakcji, która potwierdzi się w kilka godzin lub dni (lub nigdy). Rozważ wybranie opłaty ręcznie lub poczekaj, aż sprawdzisz poprawność całego łańcucha. + Korzystanie z opłaty domyślnej (fallbackfee) może skutkować wysłaniem transakcji, która potwierdzi się w kilka godzin lub dni (lub nigdy). Rozważ wybranie opłaty ręcznie lub poczekaj, aż sprawdzisz poprawność całego łańcucha. Warning: Fee estimation is currently not possible. @@ -2974,7 +3028,7 @@ Korzystanie z opłaty domyślnej może skutkować wysłaniem transakcji, która Choose… - Wybierz... + Wybierz… Hide transaction fee settings @@ -2986,7 +3040,7 @@ Korzystanie z opłaty domyślnej może skutkować wysłaniem transakcji, która Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satoshis per kvB" for a transaction size of 500 virtual bytes (half of 1 kvB) would ultimately yield a fee of only 50 satoshis. Określ niestandardową opłatę za kB (1000 bajtów) wirtualnego rozmiaru transakcji. -Uwaga: Ponieważ opłata jest naliczana za każdy bajt, opłata "100 satoshi za kB" w przypadku transakcji o wielkości 500 bajtów (połowa 1 kB) ostatecznie da opłatę w wysokości tylko 50 satoshi. +Uwaga: Ponieważ opłata jest naliczana za każdy bajt, opłata "100 satoshi za kvB" w przypadku transakcji o wielkości 500 bajtów (połowa 1 kvB) ostatecznie da opłatę w wysokości tylko 50 satoshi. 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. @@ -2998,7 +3052,7 @@ Uwaga: Ponieważ opłata jest naliczana za każdy bajt, opłata "100 satoshi za (Smart fee not initialized yet. This usually takes a few blocks…) - (Sprytne opłaty nie są jeszcze zainicjowane. Trwa to zwykle kilka bloków...) + (Sprytne opłaty nie są jeszcze zainicjowane. Trwa to zwykle kilka bloków…) Confirmation time target: @@ -3010,7 +3064,7 @@ Uwaga: Ponieważ opłata jest naliczana za każdy bajt, opłata "100 satoshi za With Replace-By-Fee (BIP-125) you can increase a transaction's fee after it is sent. Without this, a higher fee may be recommended to compensate for increased transaction delay risk. - Dzięki podmień-przez-opłatę (RBF, BIP-125) możesz podnieść opłatę transakcyjną już wysłanej transakcji. Bez tego, może być rekomendowana większa opłata aby zmniejszyć ryzyko opóźnienia zatwierdzenia transakcji. + Dzięki Replace-By-Fee (RBF, BIP-125) możesz podnieść opłatę transakcyjną już wysłanej transakcji. Bez tego, może być rekomendowana większa opłata aby zmniejszyć ryzyko opóźnienia zatwierdzenia transakcji. Clear &All @@ -3030,31 +3084,31 @@ Uwaga: Ponieważ opłata jest naliczana za każdy bajt, opłata "100 satoshi za Copy quantity - Skopiuj ilość + Kopiuj ilość Copy amount - Kopiuj kwote + Kopiuj kwotę Copy fee - Skopiuj prowizję + Kopiuj opłatę Copy after fee - Skopiuj ilość po opłacie + Kopiuj ilość po opłacie Copy bytes - Skopiuj ilość bajtów + Kopiuj bajty Copy change - Skopiuj resztę + Kopiuj resztę %1 (%2 blocks) - %1 (%2 bloków)github.com + %1 (%2 bloków) Sign on device @@ -3080,7 +3134,7 @@ Uwaga: Ponieważ opłata jest naliczana za każdy bajt, opłata "100 satoshi za %1 to '%2' - %1 do '%2'8f0451c0-ec7d-4357-a370-eff72fb0685f + %1 do '%2' %1 to %2 @@ -3088,7 +3142,7 @@ Uwaga: Ponieważ opłata jest naliczana za każdy bajt, opłata "100 satoshi za To review recipient list click "Show Details…" - Aby przejrzeć listę odbiorców kliknij "Pokaż szczegóły..." + Aby przejrzeć listę odbiorców kliknij "Pokaż szczegóły…" Sign failed @@ -3120,7 +3174,7 @@ Uwaga: Ponieważ opłata jest naliczana za każdy bajt, opłata "100 satoshi za External balance: - Zewnętrzny balans: + Zewnętrzne saldo: or @@ -3128,7 +3182,7 @@ Uwaga: Ponieważ opłata jest naliczana za każdy bajt, opłata "100 satoshi za You can increase the fee later (signals Replace-By-Fee, BIP-125). - Możesz później zwiększyć opłatę (sygnalizuje podmień-przez-opłatę (RBF), BIP 125). + Możesz później zwiększyć opłatę (sygnalizuje Replace-By-Fee(RBF), BIP-125). 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. @@ -3147,7 +3201,7 @@ Uwaga: Ponieważ opłata jest naliczana za każdy bajt, opłata "100 satoshi za Please, review your transaction. You can create and send this transaction or create 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. Text to inform a user attempting to create a transaction of their current options. At this stage, a user can send their transaction or create a PSBT. This string is displayed when both private keys and PSBT controls are enabled. - Proszę przejrzeć propozycję transakcji. Zostanie utworzona częściowo podpisana transakcja (ang. PSBT), którą można skopiować, a następnie podpisać np. offline z portfelem %1 lub z innym portfelem zgodnym z PSBT. + Proszę przejrzeć transakcję. Możesz utworzyć i wysłać tę transakcję lub utworzyć częściowo podpisaną transakcję Bitcoin (PSBT), którą możesz zapisać lub skopiować, a następnie podpisać np. offline z portfelem %1 lub z kompatybilnym sprzętowo portfelem PSBT. Please, review your transaction. @@ -3160,7 +3214,7 @@ Uwaga: Ponieważ opłata jest naliczana za każdy bajt, opłata "100 satoshi za Not signalling Replace-By-Fee, BIP-125. - Nie sygnalizuje podmień-przez-opłatę (RBF), BIP-125 + Nie sygnalizuje Replace-By-Fee (RBF), BIP-125 Total Amount @@ -3186,11 +3240,11 @@ Uwaga: Ponieważ opłata jest naliczana za każdy bajt, opłata "100 satoshi za Watch-only balance: - Kwota na obserwowanych kontach: + Saldo na kontach tylko do obserwacji: The recipient address is not valid. Please recheck. - Adres odbiorcy jest nieprawidłowy, proszę sprawić ponownie. + Adres odbiorcy jest nieprawidłowy, proszę sprawdzić ponownie. The amount to pay must be larger than 0. @@ -3202,11 +3256,11 @@ Uwaga: Ponieważ opłata jest naliczana za każdy bajt, opłata "100 satoshi za The total exceeds your balance when the %1 transaction fee is included. - Suma przekracza twoje saldo, gdy doliczymy %1 prowizji transakcyjnej. + Suma przekracza twoje saldo, gdy doliczymy %1 opłaty transakcyjnej. Duplicate address found: addresses should only be used once each. - Duplikat adres-u znaleziony: adresy powinny zostać użyte tylko raz. + Znaleziono zduplikowany adres: adresy powinny zostać użyte tylko raz. Transaction creation failed! @@ -3219,9 +3273,9 @@ Uwaga: Ponieważ opłata jest naliczana za każdy bajt, opłata "100 satoshi za Estimated to begin confirmation within %n block(s). - Szacuje się, że potwierdzenie rozpocznie się w %n bloku. - Szacuje się, że potwierdzenie rozpocznie się w %n bloków. - Szacuje się, że potwierdzenie rozpocznie się w %n bloków. + Szacuje się, że potwierdzenie rozpocznie się w ciągu %n bloku. + Szacuje się, że potwierdzenie rozpocznie się w ciągu %n bloków. + Szacuje się, że potwierdzenie rozpocznie się w ciągu %n bloków. @@ -3253,7 +3307,7 @@ Uwaga: Ponieważ opłata jest naliczana za każdy bajt, opłata "100 satoshi za Pay &To: - Zapłać &dla: + Płatność &dla: &Label: @@ -3281,11 +3335,11 @@ Uwaga: Ponieważ opłata jest naliczana za każdy bajt, opłata "100 satoshi za 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. - Opłata zostanie odjęta od kwoty wysyłane.Odbiorca otrzyma mniej niż bitcoins wpisz w polu kwoty. Jeśli wybrano kilku odbiorców, opłata jest podzielona równo. + Opłata zostanie odjęta od kwoty wysyłanej. Odbiorca otrzyma mniej bitcoinów, niż wpiszesz w polu kwoty. Jeśli wybrano wielu odbiorców, opłata zostanie podzielona równo. S&ubtract fee from amount - Odejmij od wysokości opłaty + Odejmij opłatę od kwoty Use available balance @@ -3351,7 +3405,7 @@ Uwaga: Ponieważ opłata jest naliczana za każdy bajt, opłata "100 satoshi za Copy the current signature to the system clipboard - Kopiuje aktualny podpis do schowka systemowego + Kopiuj aktualny podpis do schowka Sign the message to prove you own this Bitcoin address @@ -3480,12 +3534,12 @@ Zwróć uwagę, że poprawnie zweryfikowana wiadomość potwierdza to, że nadaw 0/unconfirmed, in memory pool Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is in the memory pool. - 0/niepotwierdzone, w kolejce w pamięci + 0/niepotwierdzone, jest w puli pamięci 0/unconfirmed, not in memory pool Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is not in the memory pool. - 0/niepotwierdzone, nie wysłane do kolejki w pamięci + 0/niepotwierdzone, nie ma w puli pamięci abandoned @@ -3495,7 +3549,7 @@ Zwróć uwagę, że poprawnie zweryfikowana wiadomość potwierdza to, że nadaw %1/unconfirmed Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in at least one block, but less than 6 blocks. - %1/niezatwierdzone + %1/niepotwierdzone %1 confirmations @@ -3532,7 +3586,7 @@ Zwróć uwagę, że poprawnie zweryfikowana wiadomość potwierdza to, że nadaw watch-only - tylko-obserwowany + tylko do obserwacji label @@ -3604,7 +3658,7 @@ Zwróć uwagę, że poprawnie zweryfikowana wiadomość potwierdza to, że nadaw Merchant - Kupiec + Sprzedawca Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. @@ -3706,7 +3760,7 @@ Zwróć uwagę, że poprawnie zweryfikowana wiadomość potwierdza to, że nadaw watch-only - tylko-obserwowany + tylko do obserwacji (n/a) @@ -3730,7 +3784,7 @@ Zwróć uwagę, że poprawnie zweryfikowana wiadomość potwierdza to, że nadaw Whether or not a watch-only address is involved in this transaction. - Czy adres tylko-obserwowany jest lub nie użyty w tej transakcji. + Czy w transakcji jest użyty adres tylko do obserwacji. User-defined intent/purpose of the transaction. @@ -3793,31 +3847,31 @@ Zwróć uwagę, że poprawnie zweryfikowana wiadomość potwierdza to, że nadaw Range… - Zakres... + Zakres… &Copy address - Kopiuj adres + &Kopiuj adres Copy &label - Kopiuj etykietę + Kopiuj &etykietę Copy &amount - Kopiuj kwotę + Kopiuj &kwotę Copy transaction &ID - transakcjaSkopiuj &ID transakcji + Kopiuj &ID transakcji Copy &raw transaction - Kopiuj &raw transakcje + Kopiuj &raw transakcję Copy full transaction &details - Skopiuj pełne &detale transakcji + Kopiuj pełne &szczegóły transakcji &Show transaction details @@ -3833,7 +3887,7 @@ Zwróć uwagę, że poprawnie zweryfikowana wiadomość potwierdza to, że nadaw &Edit address label - Wy&edytuj adres etykiety + Wy&edytuj etykietę adresu Show in %1 @@ -3844,13 +3898,18 @@ Zwróć uwagę, że poprawnie zweryfikowana wiadomość potwierdza to, że nadaw Export Transaction History Eksport historii transakcji + + Comma separated file + Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. + Plik rozdzielany przecinkami + Confirmed - Potwerdzone + Potwierdzone Watch-only - Tylko-obserwowany + Tylko do obserwacji Date @@ -3878,7 +3937,7 @@ Zwróć uwagę, że poprawnie zweryfikowana wiadomość potwierdza to, że nadaw Exporting Successful - Eksport powiódł się + Eksport ukończone pomyślnie The transaction history was successfully saved to %1. @@ -3900,7 +3959,8 @@ Zwróć uwagę, że poprawnie zweryfikowana wiadomość potwierdza to, że nadaw Go to File > Open Wallet to load a wallet. - OR - Portfel nie został wybrany. -Przejdź do Plik > Otwórz Portfel aby wgrać portfel. +Przejdź do Plik > Otwórz Portfel aby wgrać portfel. +- LUB - Create a new wallet @@ -3912,7 +3972,7 @@ Przejdź do Plik > Otwórz Portfel aby wgrać portfel. Unable to decode PSBT from clipboard (invalid base64) - Nie udało się załadować częściowo podpisanej transakcji (nieważny base64) + Nie udało się załadować częściowo podpisanej transakcji (nieprawidłowy base64) Load Transaction Data @@ -3924,7 +3984,7 @@ Przejdź do Plik > Otwórz Portfel aby wgrać portfel. PSBT file must be smaller than 100 MiB - PSBT musi być mniejsze niż 100MB + Plik PSBT musi być mniejszy niż 100MiB Unable to decode PSBT @@ -3939,16 +3999,16 @@ Przejdź do Plik > Otwórz Portfel aby wgrać portfel. Fee bump error - Błąd zwiększenia prowizji + Błąd podczas zwiększania opłaty Increasing transaction fee failed - Nieudane zwiększenie prowizji + Zwiększenie opłaty nie powiodło się Do you want to increase the fee? Asks a user if they would like to manually increase the fee of a transaction that has already been created. - Czy chcesz zwiększyć prowizję? + Czy chcesz zwiększyć opłatę? Current fee: @@ -3956,7 +4016,7 @@ Przejdź do Plik > Otwórz Portfel aby wgrać portfel. Increase: - Zwiększ: + Zwiększenie: New fee: @@ -3964,7 +4024,7 @@ Przejdź do Plik > Otwórz Portfel aby wgrać portfel. 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. - Ostrzeżenie: Może to spowodować uiszczenie dodatkowej opłaty poprzez zmniejszenie zmian wyjść lub dodanie danych wejściowych, jeśli jest to konieczne. Może dodać nowe wyjście zmiany, jeśli jeszcze nie istnieje. Te zmiany mogą potencjalnie spowodować utratę prywatności. + Ostrzeżenie: Może to spowodować opłacenie dodatkowej opłaty poprzez zmniejszenie wyjść reszty lub dodanie wejść, jeśli będzie to konieczne. Może również dodać nowe wyjście reszty, jeśli jeszcze nie istnieje. Zmiany te mogą potencjalnie naruszyć prywatność. Confirm fee bump @@ -3980,7 +4040,7 @@ Przejdź do Plik > Otwórz Portfel aby wgrać portfel. Fee-bump PSBT copied to clipboard - PSBT skopiowane do schowka + PSBT z podbitymi opłatami skopiowane do schowka Can't sign transaction. @@ -4049,13 +4109,21 @@ Przejdź do Plik > Otwórz Portfel aby wgrać portfel. %s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup. %s jest uszkodzony. Spróbuj użyć narzędzia bitcoin-portfel, aby uratować portfel lub przywrócić kopię zapasową. + + %s failed to validate the -assumeutxo snapshot state. This indicates a hardware problem, or a bug in the software, or a bad software modification that allowed an invalid snapshot to be loaded. As a result of this, the node will shut down and stop using any state that was built on the snapshot, resetting the chain height from %d to %d. On the next restart, the node will resume syncing from %d without using any snapshot data. Please report this incident to %s, including how you obtained the snapshot. The invalid snapshot chainstate will be left on disk in case it is helpful in diagnosing the issue that caused this error. + %s nie zdołał zwalidować stanu migawki -assumeutxo. Wskazuje to na problem ze sprzętem, błąd w oprogramowaniu lub nieprawidłową modyfikacją programu, która zezwoliła na załadowanie nieprawidłowej migawki. Z tego powodu węzeł zostanie zamknięty i przestanie używać danych zbudowanych na bazie migawki, resetując wysokość łańcucha z %d do %d. Po ponownym uruchomieniu, węzeł wznowi synchronizację od %d, bez wykorzystania jakichkolwiek danych z migawki. Prosimy zgłosić ten incydent do %s, wliczając w to jak wszedłeś w posiadanie tej migawki. Nieprawidłowy stan łańcucha w oparciu o tą migawkę zostanie zachowany na dysku w przypadku, gdyby okazał się przydatny w diagnostyce problemu, który spowodował ten błąd. + + + %s request to listen on port %u. This port is considered "bad" and thus it is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for details and a full list. + %sżąda nasłuchiwania na porcie %u. Ten port jest uznany za "zły" i nie jest zbyt prawdopodobne, aby jakikolwiek węzeł połączył się do niego. Zobacz doc/p2p-bad-ports.md, aby dowiedzieć się więcej i zobaczyć pełną listę. + Cannot downgrade wallet from version %i to version %i. Wallet version unchanged. - Nie można zmienić wersji portfela z wersji %ina wersje %i. Wersja portfela pozostaje niezmieniona. + Nie można zmienić wersji portfela z wersji %i na wersję %i. Wersja portfela pozostaje niezmieniona. 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. - Nie można zaktualizować portfela dzielonego innego niż HD z wersji 1%i do wersji 1%i bez aktualizacji w celu obsługi wstępnie podzielonej puli kluczy. Użyj wersji 1%i lub nie określono wersji. + Nie można zaktualizować portfela dzielonego innego niż HD z wersji %i do wersji %i bez aktualizacji w celu obsługi wstępnie podzielonej puli kluczy. Użyj wersji %i lub nie określono wersji. Disk space for %s may not accommodate the block files. Approximately %u GB of data will be stored in this directory. @@ -4071,51 +4139,59 @@ Przejdź do Plik > Otwórz Portfel aby wgrać portfel. Error reading %s! Transaction data may be missing or incorrect. Rescanning wallet. - Błąd odczytu 1%s! Może brakować danych transakcji lub mogą być one nieprawidłowe. Ponowne skanowanie portfela. + Błąd odczytu %s! Może brakować danych transakcji lub mogą być one nieprawidłowe. Ponowne skanowanie portfela. + + + Error starting/committing db txn for wallet transactions removal process + Wystąpił błąd podczas uruchamiania/przesyłania bazy danych transakcji dla procesu usuwania transakcji w portfelu Error: Dumpfile format record is incorrect. Got "%s", expected "format". - Błąd: rekord formatu pliku zrzutu jest nieprawidłowy. Otrzymano „1%s”, oczekiwany „format”. + Błąd: rekord formatu pliku zrzutu jest nieprawidłowy. Otrzymano "%s", oczekiwany "format". Error: Dumpfile identifier record is incorrect. Got "%s", expected "%s". - Błąd: rekord identyfikatora pliku zrzutu jest nieprawidłowy. Otrzymano „1%s”, oczekiwano „1%s”. + Błąd: rekord identyfikatora pliku zrzutu jest nieprawidłowy. Otrzymano "%s", oczekiwano "%s". Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s - Błąd: wersja pliku zrzutu nie jest obsługiwana. Ta wersja bitcoin-wallet obsługuje tylko pliki zrzutów w wersji 1. Mam plik zrzutu w wersji 1%s + Błąd: wersja pliku zrzutu nie jest obsługiwana. Ta wersja bitcoin-wallet obsługuje tylko pliki zrzutów w wersji 1. Mam plik zrzutu w wersji %s Error: Legacy wallets only support the "legacy", "p2sh-segwit", and "bech32" address types - Błąd: starsze portfele obsługują tylko typy adresów „legacy”, „p2sh-segwit” i „bech32” + Błąd: starsze portfele obsługują tylko typy adresów "legacy", "p2sh-segwit" i "bech32" Error: Unable to produce descriptors for this legacy wallet. Make sure to provide the wallet's passphrase if it is encrypted. - Błąd: Nie można wygenerować deskryptorów dla tego starego portfela. Upewnij się najpierw, że portfel jest odblokowany. + Błąd: Nie można wygenerować deskryptorów dla tego starego portfela. Upewnij się najpierw, że portfel jest zaszyfrowany. File %s already exists. If you are sure this is what you want, move it out of the way first. - Plik 1%s już istnieje. Jeśli jesteś pewien, że tego chcesz, najpierw usuń to z drogi. + Plik %s już istnieje. Jeśli jesteś pewien, że tego chcesz, najpierw go przenieś. Invalid or corrupt peers.dat (%s). If you believe this is a bug, please report it to %s. As a workaround, you can move the file (%s) out of the way (rename, move, or delete) to have a new one created on the next start. - Nieprawidłowy lub uszkodzony plik peers.dat (1%s). Jeśli uważasz, że to błąd, zgłoś go do 1%s. Jako obejście, możesz przenieść plik (1%s) z drogi (zmień nazwę, przenieś lub usuń), aby przy następnym uruchomieniu utworzyć nowy. + Nieprawidłowy lub uszkodzony plik peers.dat (%s). Jeśli uważasz, że to błąd, zgłoś go do %s. Jako obejście, możesz przenieść plik (%s) z drogi (zmień nazwę, przenieś lub usuń), aby przy następnym uruchomieniu utworzyć nowy. Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets Nieprawidłowa wartość wykryta dla '-wallet' lub '-nowallet'. '-wallet' wymaga ciągu znaków, podczas gdy '-nowallet' akceptuje jedynie '1' dla wyłączenia wszystkich portfeli + + More than one onion bind address is provided. Using %s for the automatically created Tor onion service. + Podano więcej niż jeden adres onion. Używam %s dla automatycznie utworzonej usługi Tor onion. + No dump file provided. To use createfromdump, -dumpfile=<filename> must be provided. - Nie dostarczono pliku zrzutu. Aby użyć funkcji createfromdump, należy podać -dumpfile=<filename>. + Nie podano pliku zrzutu. Aby użyć funkcji -createfromdump, należy podać -dumpfile=<filename> No dump file provided. To use dump, -dumpfile=<filename> must be provided. - Nie dostarczono pliku zrzutu. Aby użyć funkcji createfromdump, należy podać -dumpfile=1. + Nie podano pliku zrzutu. Aby go użyć, należy podać -dumpfile=<filename> No wallet file format provided. To use createfromdump, -format=<format> must be provided. - Nie dostarczono pliku zrzutu. Aby użyć funkcji createfromdump, należy podać -dumpfile=<format>. + Nie podano formatu pliku portfela. Aby użyć funkcji -createfromdump, należy podać -format=<format> Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. @@ -4127,11 +4203,11 @@ Przejdź do Plik > Otwórz Portfel aby wgrać portfel. Prune configured below the minimum of %d MiB. Please use a higher number. - Przycinanie skonfigurowano poniżej minimalnych %d MiB. Proszę użyć wyższej liczby. + Przycinanie (pruning) skonfigurowano poniżej minimalnych %d MiB. Proszę użyć wyższej liczby. Prune mode is incompatible with -reindex-chainstate. Use full -reindex instead. - Tryb przycięty jest niekompatybilny z -reindex-chainstate. Użyj pełnego -reindex. + Tryb przycięty jest niekompatybilny z -reindex-chainstate. Użyj pełnego -reindex. Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node) @@ -4187,7 +4263,7 @@ Przejdź do Plik > Otwórz Portfel aby wgrać portfel. Unsupported category-specific logging level %1$s=%2$s. Expected %1$s=<category>:<loglevel>. Valid categories: %3$s. Valid loglevels: %4$s. - Nieobsługiwany poziom rejestrowania specyficzny dla kategorii %1$s=%2$s. Oczekiwano %1$s=<category>:<loglevel>. Poprawne kategorie %3$s. Poprawne poziomy logowania: %4 $s. + Nieobsługiwany poziom logowania specyficzny dla kategorii %1$s=%2$s. Oczekiwano %1$s=<category>:<loglevel>. Poprawne kategorie %3$s. Poprawne poziomy logowania: %4$s. Unsupported chainstate database format found. Please restart with -reindex-chainstate. This will rebuild the chainstate database. @@ -4229,6 +4305,10 @@ Przejdź do Plik > Otwórz Portfel aby wgrać portfel. -maxmempool must be at least %d MB -maxmempool musi być przynajmniej %d MB + + Cannot obtain a lock on directory %s. %s is probably already running. + Nie można uzyskać blokady w katalogu %s. %s najprawdopodobniej jest już uruchomiony. + Cannot resolve -%s address: '%s' Nie można rozpoznać -%s adresu: '%s' @@ -4253,9 +4333,13 @@ Przejdź do Plik > Otwórz Portfel aby wgrać portfel. Error loading %s: External signer wallet being loaded without external signer support compiled Błąd ładowania %s: Ładowanie portfela zewnętrznego podpisu bez skompilowania wsparcia dla zewnętrznego podpisu. + + Error reading %s! All keys read correctly, but transaction data or address metadata may be missing or incorrect. + Błąd podczas odczytywania %s! Wszystkie klucze zostały odczytane poprawnie, ale może brakować danych transakcji lub wpisów w książce adresowej, albo mogą one być nieprawidłowe. + Error: Address book data in wallet cannot be identified to belong to migrated wallets - Błąd: Dane książki adresowej w portfelu nie można zidentyfikować jako należące do migrowanego portfela + Błąd: Danych książki adresowej w portfelu nie można zidentyfikować jako należących do zmigrowanych portfeli Error: Duplicate descriptors created during migration. Your wallet may be corrupted. @@ -4267,7 +4351,13 @@ Przejdź do Plik > Otwórz Portfel aby wgrać portfel. Failed to calculate bump fees, because unconfirmed UTXOs depend on enormous cluster of unconfirmed transactions. - Nie udało się obliczyć opłat za uderzenia, ponieważ niepotwierdzone UTXO zależą od ogromnego skupiska niepotwierdzonych transakcji. + Nie udało się obliczyć zwiększonej opłaty, ponieważ niepotwierdzone UTXO zależą od ogromnego skupiska niepotwierdzonych transakcji. + + + Failed to remove snapshot chainstate dir (%s). Manually remove it before restarting. + + Nie udało się usunąć katalogu snapshot chainstate (%s). Usuń go ręcznie przed ponownym uruchomieniem. + Failed to rename invalid peers.dat file. Please move or delete it and try again. @@ -4275,7 +4365,7 @@ Przejdź do Plik > Otwórz Portfel aby wgrać portfel. Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable %s. - Estymacja opłat nieudana. Domyślna opłata jest wyłączona. Poczekaj kilka bloków lub włącz -%s. + Estymacja opłat nie powiodła się. Fallbackfee jest wyłączone. Poczekaj kilka bloków lub włącz %s. Flushing block file to disk failed. This is likely the result of an I/O error. @@ -4285,6 +4375,10 @@ Przejdź do Plik > Otwórz Portfel aby wgrać portfel. Flushing undo file to disk failed. This is likely the result of an I/O error. Zrzut pliku odtwarzającego na dysk się nie powiódł. To najpewniej wynik błędu wejścia/wyjścia. + + Incompatible options: -dnsseed=1 was explicitly specified, but -onlynet forbids connections to IPv4/IPv6 + Niezgodne opcje: -dnsseed=1 zostało jawnie określone, ale -onlynet zabrania połączeń z IPv4/IPv6. + Invalid amount for %s=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions) Nieprawidłowa kwota dla %s=<amount>: '%s' (musi być co najmniej opłatą minrelay o wysokości %s aby uniknąć zablokowanych transakcji) @@ -4313,13 +4407,56 @@ Przejdź do Plik > Otwórz Portfel aby wgrać portfel. Outbound connections restricted to i2p (-onlynet=i2p) but -i2psam is not provided Połączenia wychodzące ograniczone do i2p (-onlynet=i2p), lecz nie podano -i2psam + + Rename of '%s' -> '%s' failed. Cannot clean up the background chainstate leveldb directory. + Zmiana nazwy z '%s' na '%s' nie powiodła się. Nie można wyczyścić katalogu chainstate leveldb. + + + Specified -blockmaxweight (%d) exceeds consensus maximum block weight (%d) + Podany -blockmaxweight (%d) przekracza maksymalną wagę bloku dopuszczoną przez konsensus (%d) + + + Specified -blockreservedweight (%d) exceeds consensus maximum block weight (%d) + Podany -blockreservedweight (%d) przekracza maksymalną wagę bloku dopuszczoną przez konsensus (%d) + + + Specified -blockreservedweight (%d) is lower than minimum safety value of (%d) + Podany -blockreservedweight (%d) jest niższy niż minimalna bezpieczna wartrość (%d) + + + The combination of the pre-selected inputs and the wallet automatic inputs selection exceeds the transaction maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs + Połączenie wcześniej wybranych wejść z automatycznym doborem wejść przez portfel przekracza maksymalną wagę transakcji. Spróbuj wysłać mniejszą kwotę lub ręcznie scal UTXO swojego portfela. + + + The inputs size exceeds the maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs + Rozmiar wejść przekracza maksymalną wagę. Spróbuj wysłać mniejszą kwotę lub ręcznie scal UTXO swojego portfela + The preselected coins total amount does not cover the transaction target. Please allow other inputs to be automatically selected or include more coins manually Suma wstępnie wybranych monet nie pokrywa kwoty transakcji. Zezwól na automatyczne wybranie wejść lub ręcznie dołącz więcej monet Transaction requires one destination of non-0 value, a non-0 feerate, or a pre-selected input - Transakcja wymagana jednego celu o niezerowej wartości, niezerowej opłacie lub wstępnie wybranego wejścia + Transakcja wymaga jednego adresu docelowego z niezerową wartością, niezerowej stawki opłaty lub wcześniej wybranego wejścia. + + + Unconfirmed UTXOs are available, but spending them creates a chain of transactions that will be rejected by the mempool + Niepotwierdzone UTXO są dostępne, ale ich wydanie tworzy łańcuch transakcji, który zostanie odrzucony przez mempool. + + + Unexpected legacy entry in descriptor wallet found. Loading wallet %s + +The wallet might have been tampered with or created with malicious intent. + + W portfelu typu descriptor znaleziono nieoczekiwany wpis typu legacy. +Ładowanie portfela %s + +Portfel mógł zostać naruszony lub utworzony w złośliwym celu. + + + + Your computer's date and time appear to be more than %d minutes out of sync with the network, this may lead to consensus failure. After you've confirmed your computer's clock, this message should no longer appear when you restart your node. Without a restart, it should stop showing automatically after you've connected to a sufficient number of new outbound peers, which may take some time. You can inspect the `timeoffset` field of the `getpeerinfo` and `getnetworkinfo` RPC methods to get more info. + Data i godzina Twojego komputera wydają się być przesunięte o więcej %d minut względem sieci, co może prowadzić do błędów konsensusu. Po upewnieniu się, że zegar Twojego komputera jest poprawny, ta wiadomość nie powinna się już pojawiać po ponownym uruchomieniu Twojego węzła. Bez ponownego uruchamiania komunikat powinien zniknąć automatycznie po nawiązaniu przez węzeł wystarczającej liczby nowych połączeń wychodzących, co może zająć trochę czasu. Możesz sprawdzić pole `timeoffset` w metodach RPC `getpeerinfo` oraz `getnetworkinfo`, aby uzyskać więcej informacji. @@ -4331,15 +4468,23 @@ Nie można wyczyścić nieudanej migracji Unable to restore backup of wallet. -Nie można przywrócić kopii zapasowej portfela +Nie można przywrócić kopii zapasowej portfela. + + + whitebind may only be used for incoming connections ("out" was passed) + whitebind może być używane tylko do połączeń przychodzących (przekazano "out") A fatal internal error occurred, see debug.log for details: Wystąpił krytyczny błąd wewnętrzny, sprawdź szczegóły w debug.log: + + Assumeutxo data not found for the given blockhash '%s'. + Dane assumeutxo nie zostały znalezione dla podanego blockhasha '%s'. + Block verification was interrupted - Weryfikacja bloku została przerwana + Weryfikacja bloków została przerwana Cannot write to directory '%s'; check permissions. @@ -4355,7 +4500,7 @@ Nie można przywrócić kopii zapasowej portfela Corrupt block found indicating potential hardware failure. - Znaleziono uszkodzony blok wskazujący na możliwy błąd sprzętowy. + Wykryto uszkodzony blok, co może wskazywać na awarię sprzętu. Corrupted block database detected @@ -4367,7 +4512,7 @@ Nie można przywrócić kopii zapasowej portfela Could not parse asmap file %s - Nie można przetworzyć pliku asmap %s + Nie można zainterpretować pliku asmap %s Disk space is too low! @@ -4455,7 +4600,7 @@ Nie można przywrócić kopii zapasowej portfela Error: Dumpfile checksum does not match. Computed %s, expected %s - Błąd: Plik zrzutu suma kontrolna nie pasuje. Obliczone %s, spodziewane %s + Błąd: Suma kontrolna pliku zrzutu nie zgadza się. Obliczona %s, oczekiwana %s Error: Failed to create new watchonly wallet @@ -4463,23 +4608,23 @@ Nie można przywrócić kopii zapasowej portfela Error: Got key that was not hex: %s - Błąd: Otrzymana wartość nie jest szestnastkowa%s + Błąd: Otrzymano klucz, który nie jest szestnastkowy %s Error: Got value that was not hex: %s - Błąd: Otrzymana wartość nie jest szestnastkowa%s + Błąd: Otrzymano wartość, która nie jest szestnastkowa %s Error: Keypool ran out, please call keypoolrefill first - Błąd: Pula kluczy jest pusta, odwołaj się do puli kluczy. + Błąd: Pula kluczy jest pusta, najpierw wywołaj funkcję keypoolrefill. Error: Missing checksum - Bład: Brak suma kontroly + Błąd: Brakuje sumy kontrolnej Error: No %s addresses available. - Błąd: %s adres nie dostępny + Błąd: Brak dostępnych adresów %s Error: This wallet already uses SQLite @@ -4499,7 +4644,7 @@ Nie można przywrócić kopii zapasowej portfela Error: Unable to parse version %u as a uint32_t - Błąd: Nie można zapisać wersji %u jako uint32_t + Błąd: Nie można zinterpretować wersji %u jako uint32_t Error: Unable to read all records in the database @@ -4521,6 +4666,14 @@ Nie można przywrócić kopii zapasowej portfela Error: Unable to write record to new wallet Błąd: Wpisanie rekordu do nowego portfela jest niemożliwe + + Error: Unable to write solvable wallet best block locator record + Błąd: Nie można zapisać rekordu lokalizatora najlepszego bloku w rozwiązywalnym portfelu. + + + Error: Unable to write watchonly wallet best block locator record + Błąd: nie można zapisać rekordu lokalizatora najlepszego bloku portfela tylko do obserwacji + Error: database transaction cannot be executed for wallet %s Błąd: transakcja bazy danych nie może zostać wykonana dla portfela%s @@ -4547,7 +4700,7 @@ Nie można przywrócić kopii zapasowej portfela Failed to start indexes, shutting down.. - Nie udało się uruchomić indeksów, zamykanie... + Nie udało się uruchomić indeksów, zamykanie… Failed to verify database @@ -4579,15 +4732,15 @@ Nie można przywrócić kopii zapasowej portfela Ignoring duplicate -wallet %s. - Ignorowanie duplikatu -wallet %s + Ignorowanie zduplikowanej opcji -wallet %s Importing… - Importowanie... + Importowanie… Incorrect or no genesis block found. Wrong datadir for network? - Nieprawidłowy lub brak bloku genezy. Błędny folder_danych dla sieci? + Niepoprawny lub brakujący blok genesis. Niewłaściwy katalog danych dla sieci? Initialization sanity check failed. %s is shutting down. @@ -4607,11 +4760,11 @@ Nie można przywrócić kopii zapasowej portfela Invalid -i2psam address or hostname: '%s' - Niewłaściwy adres -i2psam lub nazwa hosta: '%s' + Nieprawidłowy adres -i2psam lub nazwa hosta: '%s' Invalid -onion address or hostname: '%s' - Niewłaściwy adres -onion lub nazwa hosta: '%s' + Nieprawidłowy adres -onion lub nazwa hosta: '%s' Invalid -proxy address or hostname: '%s' @@ -4639,11 +4792,11 @@ Nie można przywrócić kopii zapasowej portfela Invalid port specified in %s: '%s' - Nieprawidłowa maska sieci określona w %s: '%s' + Nieprawidłowy port podany w %s: '%s' Invalid pre-selected input %s - Niepoprawne wstępnie wybrane dane wejściowe %s + Nieprawidłowe wstępnie wybrane dane wejściowe %s Listening for incoming connections failed (listen returned error %s) @@ -4651,11 +4804,11 @@ Nie można przywrócić kopii zapasowej portfela Loading P2P addresses… - Ładowanie adresów P2P... + Ładowanie adresów P2P… Loading banlist… - Ładowanie listy zablokowanych... + Ładowanie listy zablokowanych… Loading block index… @@ -4695,11 +4848,11 @@ Nie można przywrócić kopii zapasowej portfela Only direction was set, no permissions: '%s' - Tylko kierunek został ustalony, brak uprawnień: `%s` + Tylko kierunek został ustalony, brak uprawnień: '%s' Prune cannot be configured with a negative value. - Przycinanie nie może być skonfigurowane z negatywną wartością. + Przycinanie (pruning) nie może być skonfigurowane z negatywną wartością. Prune mode is incompatible with -txindex. @@ -4707,7 +4860,7 @@ Nie można przywrócić kopii zapasowej portfela Pruning blockstore… - Przycinanie bloków na dysku... + Przycinanie (pruning) bloków na dysku… Reducing -maxconnections from %d to %d, because of system limitations. @@ -4805,9 +4958,13 @@ Nie można przywrócić kopii zapasowej portfela The transaction amount is too small to pay the fee Zbyt niska kwota transakcji by zapłacić opłatę + + The transactions removal process can only be executed within a db txn + Proces usuwania transakcji może być wykonany tylko w ramach transakcji bazy danych. + The wallet will avoid paying less than the minimum relay fee. - Portfel będzie unikał płacenia mniejszej niż przekazana opłaty. + Portfel będzie unikał płacenia niższej niż minimalna opłata za przekazanie. There is no ScriptPubKeyManager for this address @@ -4835,7 +4992,7 @@ Nie można przywrócić kopii zapasowej portfela Transaction amounts must not be negative - Kwota transakcji musi być dodatnia + Kwota transakcji nie może być ujemna Transaction change output index out of range @@ -4883,7 +5040,7 @@ Nie można przywrócić kopii zapasowej portfela Unable to parse -maxuploadtarget: '%s' - Nie można przeanalizować -maxuploadtarget: „%s” + Nie można zinterpretować -maxuploadtarget: '%s' Unable to start HTTP server. See debug log for details. @@ -4931,7 +5088,7 @@ Nie można przywrócić kopii zapasowej portfela Unsupported logging category %s=%s. - Nieobsługiwana kategoria rejestrowania %s=%s. + Nieobsługiwana kategoria logowania %s=%s. Do you want to rebuild the databases now? @@ -4955,7 +5112,7 @@ Nie można przywrócić kopii zapasowej portfela Not enough file descriptors available. %d available, %d required. - Zbyt mało dostępnych deskryptorów plików. %d dostępnych, %d wymaganych. + Zbyt mało dostępnych deskryptorów plików. %d dostępnych, %d wymaganych. User Agent comment (%s) contains unsafe characters. @@ -4963,11 +5120,11 @@ Nie można przywrócić kopii zapasowej portfela Verifying blocks… - Weryfikowanie bloków... + Sprawdzanie bloków… Verifying wallet(s)… - Weryfikowanie porfela(li)... + Sprawdzanie portfela / portfeli… Wallet needed to be rewritten: restart %s to complete diff --git a/src/qt/locale/bitcoin_ro.ts b/src/qt/locale/bitcoin_ro.ts index 477680c81a1b..32d646947e0c 100644 --- a/src/qt/locale/bitcoin_ro.ts +++ b/src/qt/locale/bitcoin_ro.ts @@ -99,7 +99,7 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Exporting Failed - Export nereusit + Export nereușit @@ -184,6 +184,10 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Continue Continua + + Back + Înapoi + Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. Reţineti: criptarea portofelului dvs. nu vă poate proteja în totalitate bitcoin-urile împotriva furtului de malware care vă infectează computerul. @@ -224,6 +228,10 @@ Semnarea este posibilă numai cu adrese de tip "legacy". The passphrase entered for the wallet decryption was incorrect. Parola introdusă pentru decriptarea portofelului a fost incorectă. + + The passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. If this is successful, please set a new passphrase to avoid this issue in the future. + Fraza de acces introdusă pentru deblocarea portofelului este incorectă. Conține un caracter nul (ex - un octet zero). Dacă fraza de accesa fost setată cu o versiune de software mai veche decât 25.0, încearcă din nou doar cu caracterele de până la - dar fără a include - primul caracter nul. Dacă va funcționa, setează o nouă frază de acces pentru a evita această problemă în viitor. + Wallet passphrase was successfully changed. Parola portofelului a fost schimbata. @@ -232,6 +240,10 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Passphrase change failed Schimbarea frazei de acces a esuat + + The old passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. + Vechea frază de acces introdusă pentru criptarea portofelului este incorectă. Aceasta conține un caracter nul (ex - un octet zero). Dacă fraza de accesa fost setată cu o versiune de software mai veche decât 25.0, încearcă din nou doar cu caracterele de până la - dar fără a include - primul caracter nul. + Warning: The Caps Lock key is on! Atenţie! Caps Lock este pornit! @@ -291,6 +303,18 @@ Semnarea este posibilă numai cu adrese de tip "legacy". unknown necunoscut + + Embedded "%1" + „%1” încorporat + + + Default system font "%1" + Font de sistem implicit „%1” + + + Custom… + Personalizat... + Amount Sumă @@ -299,6 +323,10 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Enter a Bitcoin address (e.g. %1) Introduceţi o adresă Bitcoin (de exemplu %1) + + Unroutable + Nu poate fi rutabil + Inbound An inbound connection from a peer. An inbound connection is a connection initiated by a peer. @@ -324,41 +352,41 @@ Semnarea este posibilă numai cu adrese de tip "legacy". %n second(s) - - - + %n secundă + %n secunde + %n secunde %n minute(s) - - - + %n minut + %n minute + %n minute %n hour(s) - - - + %n oră + %n ore + %n ore %n day(s) - - - + %n zi + %n zile + %n zile %n week(s) - - - + %n săptămână + %n săptămâni + %n săptămâni @@ -368,9 +396,9 @@ Semnarea este posibilă numai cu adrese de tip "legacy". %n year(s) - - - + %n an + %n ani + %n ani @@ -751,9 +779,9 @@ Semnarea este posibilă numai cu adrese de tip "legacy". %n active connection(s) to Bitcoin network. A substring of the tooltip. - - - + %n conexiuni active la rețeaua Bitcoin + %n conexiuni active către reţeaua Bitcoin + %n de conexiuni active către reţeaua Bitcoin @@ -761,6 +789,25 @@ Semnarea este posibilă numai cu adrese de tip "legacy". A substring of the tooltip. "More actions" are available via the context menu. Pulsează pentru mai multe acțiuni. + + Show Peers tab + A context menu item. The "Peers tab" is an element of the "Node window". + Arată fila Parteneri + + + Disable network activity + A context menu item. + Dezactivați activitatea în rețea + + + Enable network activity + A context menu item. The network activity was disabled previously. + Activați activitatea în rețea + + + Pre-syncing Headers (%1%)… + Se pre-sincronizează antetele (%1%)... + Error creating wallet Eroare creare portofel @@ -996,7 +1043,15 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Create wallet warning Atentionare la crearea portofelului - + + Can't list signers + Semnatarii nu au putut fi listați + + + Too many external signers found + Au fost găsiți prea mulți semnatari externi + + LoadWalletsActivity @@ -1024,6 +1079,10 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Migrate Wallet Transfera Portofelul + + The wallet '%1' was migrated successfully. + Portofelul '%1' a fost migrat cu succes. + Migration failed Mutare esuata @@ -1469,6 +1528,10 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu. Minimizează fereastra în locul părăsirii programului în momentul închiderii ferestrei. Cînd acestă opţiune e activă, aplicaţia se va opri doar în momentul selectării comenzii 'Închide aplicaţia' din menu. + + Font in the Overview tab: + Font în fila Prezentare generală: + Open the %1 configuration file from the working directory. Deschide fisierul de configurare %1 din directorul curent. @@ -1549,7 +1612,7 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Used for reaching peers via: - Folosit pentru a gasi parteneri via: + Folosit pentru a găsi parteneri via: &Window @@ -1757,10 +1820,27 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Failed to sign transaction: %1 Nu s-a reusit semnarea tranzactiei: %1 + + Could not sign any more inputs. + Nu s-au mai putut semna alte intrări. + + + Unknown error processing transaction. + Eroare necunoscută la procesarea tranzacției. + Save Transaction Data Salvați datele tranzacției + + Partially Signed Transaction (Binary) + Expanded name of the binary PSBT file format. See: BIP 174. + Tranzacție Semnată Parțial (Binar) + + + Sends %1 to %2 + Trimite %1 la %2 + own address adresa proprie @@ -1781,6 +1861,22 @@ Semnarea este posibilă numai cu adrese de tip "legacy". or sau + + Transaction has %1 unsigned inputs. + Tranzacția are %1 intrări nesemnate. + + + Transaction still needs signature(s). + Tranzacția încă are nevoie de semnătură/semnături. + + + (But no wallet is loaded.) + (Dar niciun portofel nu este încărcat.) + + + (But this wallet cannot sign transactions.) + (Dar acest portofel nu poate semna tranzacții.) + Transaction status is unknown. Starea tranzacției este necunoscută. @@ -1820,6 +1916,11 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Title of Peers Table column which contains the peer's User Agent string. Agent utilizator + + Peer + Title of Peers Table column which contains a unique number used to identify a connection. + Partener + Age Title of Peers Table column which indicates the duration (length of time) since the peer connection started. @@ -1932,6 +2033,10 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Number of connections Numărul de conexiuni + + Local Addresses + Adrese locale + Block chain Lanţ de blocuri @@ -2012,6 +2117,10 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Node window Fereastra nodului + + Current block height + Înălțimea actuală a blocului + Open the %1 debug log file from the current data directory. This can take a few seconds for large log files. Deschide fişierul jurnal depanare %1 din directorul curent. Aceasta poate dura cateva secunde pentru fişierele mai mari. @@ -2032,6 +2141,10 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Direction/Type Directie/Tip + + The network protocol this peer is connected through: IPv4, IPv6, Onion, I2P, or CJDNS. + Protocolul de rețea acest partener este conectat prin: IPv4, IPv6, Onion, I2P, sau CJDNS. + Services Servicii @@ -2040,6 +2153,10 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Connection Time Timp conexiune + + Last Block + Ultimul bloc + Last Send Ultima trimitere @@ -2100,6 +2217,16 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Out: Ieşire: + + Inbound: initiated by peer + Explanatory text for an inbound peer connection. + Intrare: Inițiat de partener + + + detecting: peer could be v1 or v2 + Explanatory text for "detecting" transport type. + detectând: partener poate fi v1 sau v2 + &Copy address Context menu action to copy the address of a peer. @@ -2141,6 +2268,32 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Executing command using "%1" wallet Executarea comenzii folosind portofelul "%1" + + Welcome to the %1 RPC console. +Use up and down arrows to navigate history, and %2 to clear screen. +Use %3 and %4 to increase or decrease the font size. +Type %5 for an overview of available commands. +For more information on using this console, type %6. + +%7WARNING: 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.%8 + RPC console welcome message. Placeholders %7 and %8 are style tags for the warning content, and they are not space separated from the rest of the text intentionally. + Bine ai venit la consola RPC %1 . +Folosește săgețile sus și jos pentru a naviga istoricul, iar %2 pentru a curăța ecranul. +Folosește %3 și %4 pentru a crește sau scădea dimensiunea textului. +Tastează %5pentru o listă a comenzilor disponibile . +Pentru mai multe informații privind folosirea consolei, tastează %6. + +%7ATENȚIE: Scammerii au fost activi, cerându-le utilizatorilor să tasteze anumite comenzi, furându-le date din portofel. Nu folosi consola fără a înțelege complet ramificațiile unei comenzi. %8 + + + Executing… + A console message indicating an entered command is currently being executed. + Se execută… + + + (peer: %1) + (partener: %1) + Yes Da @@ -2240,6 +2393,10 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Copy &label Copiaza si eticheteaza + + Copy &message + Copie și mesaj + Copy &amount copiaza &valoarea @@ -2251,6 +2408,10 @@ Semnarea este posibilă numai cu adrese de tip "legacy". ReceiveRequestDialog + + Request payment to … + Solicitați plata către... + Address: Adresa: @@ -2259,6 +2420,10 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Amount: Sumă: + + Label: + Eticheta: + Message: Mesaj: @@ -2413,21 +2578,29 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Clear all fields of the form. Şterge toate câmpurile formularului. + + Inputs… + Intrări… + Choose… Alege... + + Hide transaction fee settings + Ascunde setările taxei de tranzacție + Confirmation time target: - Timp confirmare tinta: + Timp confirmare țintă: Enable Replace-By-Fee - Autorizeaza Replace-By-Fee + Autorizează Replace-By-Fee With Replace-By-Fee (BIP-125) you can increase a transaction's fee after it is sent. Without this, a higher fee may be recommended to compensate for increased transaction delay risk. - Cu Replace-By-Fee (BIP-125) se poate creste taxa unei tranzactii dupa ce a fost trimisa. Fara aceasta optiune, o taxa mai mare e posibil sa fie recomandata pentru a compensa riscul crescut de intarziere a tranzactiei. + Cu Replace-By-Fee (BIP-125) se poate crește taxa unei tranzacții după ce a fost trimisă. Fără această optiune, o taxa mai mare e posibil să fie recomandată pentru a compensa riscul crescut de întârziere a tranzacției. Clear &All @@ -2473,18 +2646,50 @@ Semnarea este posibilă numai cu adrese de tip "legacy". %1 (%2 blocks) %1(%2 blocuri) + + Sign on device + "device" usually means a hardware wallet. + Semnează pe dispozitiv + + + Connect your hardware wallet first. + Conectează portofelul hardware întâi. + + + %1 to '%2' + %1 la '%2' + %1 to %2 %1 la %2 Sign failed - Semnatura esuata + Semnătură eșuată + + + External signer not found + "External signer" means using devices such as hardware wallets. + Semnatar extern negăsit + + + External signer failure + "External signer" means using devices such as hardware wallets. + Eșec de semnatar extern Save Transaction Data Salvați datele tranzacției + + Partially Signed Transaction (Binary) + Expanded name of the binary PSBT file format. See: BIP 174. + Tranzacție Semnată Parțial (Binar) + + + External balance: + Sold extern: + or sau @@ -2493,6 +2698,11 @@ Semnarea este posibilă numai cu adrese de tip "legacy". You can increase the fee later (signals Replace-By-Fee, BIP-125). Puteti creste taxa mai tarziu (semnaleaza Replace-By-Fee, BIP-125). + + Do you want to create this transaction? + Message displayed when attempting to create a transaction. Cautionary text to prompt the user to verify that the displayed transaction details represent the transaction the user intends to create. + Doriți să creați această tranzacție? + Please, review your transaction. Text to prompt a user to review the details of the transaction they are attempting to send. @@ -2510,6 +2720,12 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Total Amount Suma totală + + Unsigned Transaction + PSBT copied + Caption of "PSBT has been copied" messagebox + Tranzacție nesemnată + Confirm send coins Confirmă trimiterea monedelor @@ -2601,6 +2817,10 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Remove this entry Înlătură această intrare + + The amount to send in the selected unit + Cantitatea de trimis în unitatea selectată + 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. Taxa va fi scazuta in suma trimisa. Destinatarul va primi mai putini bitcoin decat ati specificat in campul sumei trimise. Daca au fost selectati mai multi destinatari, taxa se va imparti in mod egal. @@ -2695,6 +2915,14 @@ Semnarea este posibilă numai cu adrese de tip "legacy". The Bitcoin address the message was signed with Introduceţi o adresă Bitcoin + + The signed message to verify + Mesajul semnat de verificat + + + The signature given when the message was signed + Semnătura dată când mesajul a fost semnat + Verify the message to ensure it was signed with the specified Bitcoin address Verificaţi mesajul pentru a vă asigura că a fost semnat cu adresa Bitcoin specificată @@ -2760,6 +2988,17 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Mesaj verificat. + + SplashScreen + + (press q to shutdown and continue later) + (apasă q pentru a opri și a continua mai târziu) + + + press q to shutdown + apasă q pentru a opri + + TransactionDesc @@ -2866,6 +3105,10 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Output index Index debit + + %1 (Certificate was not verified) + %1 (Certificatul nu a fost verificat) + Merchant Comerciant @@ -3055,6 +3298,10 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Min amount Suma minimă + + Range… + Gamă... + &Copy address &Copiaza adresa @@ -3078,7 +3325,7 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Show in %1 Transactions table context menu action to show the selected transaction in a third-party block explorer. %1 is a stand-in argument for the URL of the explorer. - Arata in %1 + Arată in %1 Export Transaction History @@ -3099,7 +3346,7 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Date - Data + Dată Type @@ -3204,6 +3451,10 @@ Mergi la Fisiere>Deschide Portofel ca sa incarci un portofel. Could not commit transaction Tranzactia nu a putut fi consemnata. + + Signer error + Eroare de semnatar + Can't display address Nu se poate afisa adresa @@ -3251,10 +3502,26 @@ Mergi la Fisiere>Deschide Portofel ca sa incarci un portofel. The %s developers Dezvoltatorii %s + + %s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup. + %s este corupt. Încearcă folosirea funcției portofel-bitcoin pentru a salva sau restaura o copie de rezervă. + Distributed under the MIT software license, see the accompanying file %s or %s Distribuit sub licenţa de programe MIT, vezi fişierul însoţitor %s sau %s + + Error loading wallet. Wallet requires blocks to be downloaded, and software does not currently support loading wallets while blocks are being downloaded out of order when using assumeutxo snapshots. Wallet should be able to load successfully after node sync reaches height %s + Eroare încărcând portofel. Portofelul necesită ca blocurile să fie descărcate, și software încă nu suportă încărcarea portofelelor în timp ce se descarcă blocuri în afara ordinii când sunt folosite snapshot-uri assumeutxo. Portofelul ar trebui să se poată încărca cu succes după ce sincronizarea nodului atinge înălțimea %s + + + Error reading %s! Transaction data may be missing or incorrect. Rescanning wallet. + Error citind %s! Data tranzacțieii poate fi lipsă sau incorectă. Rescanând portofel. + + + Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. + Opțiunea '-upnp' este setată dar suportul pentru UPnP a fost eliminat în versiunea 29.0. Poți folosi '-natpmp' în schimb. + Please contribute if you find %s useful. Visit %s for further information about the software. Va rugam sa contribuiti daca apreciati ca %s va este util. Vizitati %s pentru mai multe informatii despre software. @@ -3265,11 +3532,11 @@ Mergi la Fisiere>Deschide Portofel ca sa incarci un portofel. Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node) - Reductie: ultima sincronizare merge dincolo de datele reductiei. Trebuie sa faceti -reindex (sa descarcati din nou intregul blockchain in cazul unui nod redus) + Reducție: ultima sincronizare merge dincolo de datele reducției. Trebuie să faceți -reindex (să descărcați din nou întregul blockchain în cazul unui nod redus) The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct - Baza de date a blocurilor contine un bloc ce pare a fi din viitor. Acest lucru poate fi cauzat de setarea incorecta a datei si orei in computerul dvs. Reconstruiti baza de date a blocurilor doar daca sunteti sigur ca data si ora calculatorului dvs sunt corecte. + Baza de date a blocurilor conține un bloc ce pare a fi din viitor. Acest lucru poate fi cauzat de setarea incorectă a datei și orei în computerul dvs. Reconstruiți baza de date a blocurilor doar dacă sunteți sigur că data și ora calculatorului dvs sunt corecte. The transaction amount is too small to send after the fee has been deducted @@ -3293,7 +3560,11 @@ Mergi la Fisiere>Deschide Portofel ca sa incarci un portofel. Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate. - Imposibil de refacut blocurile. Va trebui sa reconstruiti baza de date folosind -reindex-chainstate. + Imposibil de refăcut blocurile. Va trebui să reconstruiți baza de date folosind -reindex-chainstate. + + + Wallet created successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. + Portofel crreat cu succes. Tipul legacy de portofel va fi deprecat iar suportul pentru crearea și deschiderea portofelelor legacy va fi eliminat în viitor. Warning: Private keys detected in wallet {%s} with disabled private keys @@ -3301,7 +3572,7 @@ Mergi la Fisiere>Deschide Portofel ca sa incarci un portofel. Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. - Atenţie: Aparent, nu sîntem de acord cu toţi partenerii noştri! Va trebui să faceţi o actualizare, sau alte noduri necesită actualizare. + Atenţie: Aparent, nu suntem de acord cu toţi partenerii noştri! Va trebui să faceţi o actualizare, sau alte noduri necesită actualizare. You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain @@ -3319,6 +3590,20 @@ Mergi la Fisiere>Deschide Portofel ca sa incarci un portofel. Cannot resolve -%s address: '%s' Nu se poate rezolva adresa -%s: '%s' + + +Unable to restore backup of wallet. + +Restaurarea copiei de rezervă a portofelului a eșuat. + + + A fatal internal error occurred, see debug.log for details: + O eroare internală fatală a apărut, verifică debug.log pentru detalii: + + + Block verification was interrupted + Verificarea blocului a fost întreruptă + Corrupted block database detected Bloc defect din baza de date detectat @@ -3331,6 +3616,10 @@ Mergi la Fisiere>Deschide Portofel ca sa incarci un portofel. Done loading Încărcare terminată + + Error creating %s + Eroare creând %s + Error initializing block database Eroare la iniţializarea bazei de date de blocuri @@ -3363,22 +3652,66 @@ Mergi la Fisiere>Deschide Portofel ca sa incarci un portofel. Error opening block database Eroare la deschiderea bazei de date de blocuri + + Error reading configuration file: %s + Eroare citind fișierul deconfigurație: %s + Error reading from database, shutting down. Eroare la citirea bazei de date. Oprire. + + Error reading next record from wallet database + Eroare citind următorul record din data de bază a portofelului + Error: Disk space is low for %s Eroare: Spațiul pe disc este redus pentru %s + + Failed to connect best block (%s). + Conectarea celui mai bun bloc a eșuat (%s). + + + Failed to disconnect block. + Deconectarea blocului a eșuat. + Failed to listen on any port. Use -listen=0 if you want this. Nu s-a reuşit ascultarea pe orice port. Folosiţi -listen=0 dacă vreţi asta. + + Failed to read block. + Citirea blocului a eșuat. + Failed to rescan the wallet during initialization Rescanarea portofelului in timpul initializarii a esuat. + + Failed to start indexes, shutting down.. + Pornirea indexelor a eșuat, oprind... + + + Failed to verify database + Verificarea datei de baze a eșuat + + + Failed to write block. + Scrierea blocului a eșuat. + + + Failed to write to coin database. + Scrierea la baza de date a monedei a eșuat. + + + Failed to write undo data. + Scrierea datelor de anulare a eșuat. + + + Importing… + Importând... + Incorrect or no genesis block found. Wrong datadir for network? Incorect sau nici un bloc de geneza găsit. Directorul de retea greşit? @@ -3399,6 +3732,10 @@ Mergi la Fisiere>Deschide Portofel ca sa incarci un portofel. Invalid -proxy address or hostname: '%s' Adresa sau hostname -proxy invalide: '%s' + + Invalid P2P permission: '%s' + Permisiune P2P invalidă: '%s' + Invalid amount for -%s=<amount>: '%s' Sumă nevalidă pentru -%s=<amount>: '%s' @@ -3407,10 +3744,26 @@ Mergi la Fisiere>Deschide Portofel ca sa incarci un portofel. Invalid netmask specified in -whitelist: '%s' Mască reţea nevalidă specificată în -whitelist: '%s' + + Loading P2P addresses… + Încărcând adresele P2P... + + + Loading wallet… + Încărcând portofel... + + + Missing amount + Cantitate lipsă + Need to specify a port with -whitebind: '%s' Trebuie să specificaţi un port cu -whitebind: '%s' + + No addresses available + Nicio adresă disponibilă + Prune cannot be configured with a negative value. Reductia nu poate fi configurata cu o valoare negativa. @@ -3423,6 +3776,18 @@ Mergi la Fisiere>Deschide Portofel ca sa incarci un portofel. Reducing -maxconnections from %d to %d, because of system limitations. Se micsoreaza -maxconnections de la %d la %d, datorita limitarilor de sistem. + + Rescanning… + Rescanând... + + + Section [%s] is not recognized. + Secțiunea [%s] nu este recunoscută. + + + Signer returned error: %s + Semnatarul a returnat eroarea: %s + Signing transaction failed Nu s-a reuşit semnarea tranzacţiei @@ -3455,6 +3820,10 @@ Mergi la Fisiere>Deschide Portofel ca sa incarci un portofel. The wallet will avoid paying less than the minimum relay fee. Portofelul va evita sa plateasca mai putin decat minimul taxei de retransmisie. + + There is no ScriptPubKeyManager for this address + Nu există ScriptPubKeyManager pentru această adresă. + This is experimental software. Acesta este un program experimental. @@ -3467,6 +3836,10 @@ Mergi la Fisiere>Deschide Portofel ca sa incarci un portofel. This is the transaction fee you will pay if you send a transaction. Aceasta este taxa de tranzactie pe care o platiti cand trimiteti o tranzactie. + + Transaction %s does not belong to this wallet + Tranzacția %s nu aparține acestui portofel + Transaction amount too small Suma tranzacţionată este prea mică @@ -3491,6 +3864,10 @@ Mergi la Fisiere>Deschide Portofel ca sa incarci un portofel. Unable to bind to %s on this computer. %s is probably already running. Nu se poate efectua legatura la %s pe acest computer. %s probabil ruleaza deja. + + Unable to create the PID file '%s': %s + Fișierul PID '%s': %s nu a putut fi creat + Unable to generate initial keys Nu s-au putut genera cheile initiale @@ -3499,6 +3876,10 @@ Mergi la Fisiere>Deschide Portofel ca sa incarci un portofel. Unable to generate keys Nu s-au putut genera cheile + + Unable to open %s for writing + Deschiderea %s pentru scris a eșuat + Unable to start HTTP server. See debug log for details. Imposibil de pornit serverul HTTP. Pentru detalii vezi logul de depanare. @@ -3511,13 +3892,41 @@ Mergi la Fisiere>Deschide Portofel ca sa incarci un portofel. Unsupported logging category %s=%s. Categoria de logging %s=%s nu este suportata. + + Do you want to rebuild the databases now? + Dorești să reconstruiești data de baze acum? + + + Error: Wallet does not exist + Eroare: Portofelul nu există + + + Error: cannot remove legacy wallet records + Eroare: nu s-au putut elimina recordurile portofelului legacy + User Agent comment (%s) contains unsafe characters. Comentariul (%s) al Agentului Utilizator contine caractere nesigure. + + Verifying blocks… + Verificând blocurile... + + + Verifying wallet(s)… + Verificând portofel(e)... + Wallet needed to be rewritten: restart %s to complete Portofelul trebuie rescris: reporneşte %s pentru finalizare - + + Settings file could not be read + Fișierul de setări nu a putut fi citit + + + Settings file could not be written + Fișierul de setări nu a putut fi scris + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_ru.ts b/src/qt/locale/bitcoin_ru.ts index 7ce4367d1ab7..cc8c1b4e33bd 100644 --- a/src/qt/locale/bitcoin_ru.ts +++ b/src/qt/locale/bitcoin_ru.ts @@ -5,6 +5,10 @@ Right-click to edit address or label Нажмите правой кнопкой мыши, чтобы изменить адрес или метку + + Create a new address + Создать новые адрес + &New &Новый @@ -93,6 +97,10 @@ Signing is only possible with addresses of the type 'legacy'. Sending addresses - %1 Адреса отправки - %1 + + Receiving addresses - %1 + Адреса получения - %1 + Exporting Failed Ошибка при экспорте diff --git a/src/qt/locale/bitcoin_si.ts b/src/qt/locale/bitcoin_si.ts index cc6b40c9454f..97e64fb9a921 100644 --- a/src/qt/locale/bitcoin_si.ts +++ b/src/qt/locale/bitcoin_si.ts @@ -11,7 +11,7 @@ &New - &නව + නව Copy the currently selected address to the system clipboard @@ -19,11 +19,11 @@ &Copy - &පිටපත් + පිටපතක් C&lose - වස&න්න + වසන්න Delete the currently selected address from the list @@ -39,11 +39,11 @@ &Export - &නිර්යාතය + නිර්යාතය &Delete - &මකන්න + මකන්න Choose the address to send coins to @@ -55,7 +55,7 @@ C&hoose - තෝ&රන්න + තෝරන්න These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. @@ -63,15 +63,15 @@ &Copy Address - &ලිපිනයෙහි පිටපතක් + ලිපිනයේ පිටපතක් Copy &Label - නම්පතෙහි &පිටපතක් + නම්පතේ පිටපතක් &Edit - &සංස්කරණය + සංස්කරණය Comma separated file diff --git a/src/qt/locale/bitcoin_sl.ts b/src/qt/locale/bitcoin_sl.ts index 3b76f40199e7..367f2ca6eea1 100644 --- a/src/qt/locale/bitcoin_sl.ts +++ b/src/qt/locale/bitcoin_sl.ts @@ -187,6 +187,10 @@ Podpisovanje je možno le s podedovanimi ("legacy") naslovi. Continue Nadaljuj + + Back + Nazaj + Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. Pomnite, da šifriranje denarnice ne more preprečiti morebitnim virusom na vašem računalniku, da bi ukradli vaše bitcoine. @@ -776,6 +780,10 @@ Podpisovanje je možno le s podedovanimi ("legacy") naslovi. Error creating wallet Napaka pri ustvarjanju denarnice + + Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets) + Ne morem ustvariti nove datoteke. Programska oprema je bila prevedena brez podpore za sqlite, ki je potrebna za denarnice z deskriptorji. + Error: %1 Napaka: %1 @@ -1146,6 +1154,14 @@ Podpisovanje je možno le s podedovanimi ("legacy") naslovi. Create Wallet Ustvari denarnico + + You are one step away from creating your new wallet! + Le še en korak in vaša nova denarnica bo ustvarjena! + + + Please provide a name and, if desired, enable any advanced options + Prosimo, vpišite ime in po želji izberite dodatne možnosti. + Wallet Name Ime denarnice @@ -1505,6 +1521,11 @@ Podpisovanje je možno le s podedovanimi ("legacy") naslovi. Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain. Obrezovanje močno zniža potrebo po prostoru za shranjevanje transakcij. Še vedno pa se bodo v celoti preverjali vsi bloki. Če to nastavitev odstranite, bo potrebno ponovno prenesti celotno verigo blokov. + + Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. + Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. + Največja dovoljena velikost predpomnilnika podatkovne baze. Imeti morate dovolj velik delovni pomnilnik (RAM). Povečanje predpomnilnika lahko prispeva k hitrejši začetni sinhronizaciji, kasneje pa večinoma manj pomaga. Znižanje velikosti predpomnilnika bo zmanjšalo porabo pomnilnika. Za ta predpomnilnik se uporablja tudi neporabljeni predpomnilnik za transakcije. + Size of &database cache Velikost &predpomnilnika podatkovne baze: @@ -1517,6 +1538,14 @@ Podpisovanje je možno le s podedovanimi ("legacy") naslovi. Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! Polna pot do skripte, združljive z %1 (n.pr. C:\Downloads\hwi.exe ali /Users/you/Downloads/hwi.py). Pozor: zlonamerna programska oprema vam lahko ukrade kovance! + + Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. + Samodejno odpiranje vrat (port) za bitcoin-odjemalec na usmerjevalniku. To deluje le, če usmerjevalnik podpira PCP ali NAT-PMP in je ta funkcija na usmerjevalniku vklopljena. Zunanja številka vrat je lahko naključna. + + + Map port using PCP or NA&T-PMP + Preslikaj vrata z uporabo PCP ali NA&T-PMP + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) IP naslov posredniškega strežnika (npr. IPv4: 127.0.0.1 ali IPv6: ::1) @@ -2198,6 +2227,14 @@ Svetujemo, da prodajalca prosite, naj vam priskrbi URI na podlagi BIP21.Number of connections Število povezav + + Local Addresses + Lokalni naslovi + + + Network addresses that your Bitcoin node is currently using to communicate with other nodes. + Omrežni naslovi, ki jih vaše vozlišče trenutno uporablja za komunikacijo z drugimi vozlišči. + Block chain Veriga blokov @@ -2246,6 +2283,14 @@ Svetujemo, da prodajalca prosite, naj vam priskrbi URI na podlagi BIP21.Select a peer to view detailed information. Izberite soležnika, o katerem si želite ogledati podrobnejše informacije. + + Hide Peers Detail + Skrij podrobnosti Soležnikov + + + The transport layer version: %1 + Verzija prenosnega sloja: %1 + Session ID ID seje @@ -2537,6 +2582,10 @@ Svetujemo, da prodajalca prosite, naj vam priskrbi URI na podlagi BIP21.Executing command without any wallet Izvajam ukaz brez denarnice + + Node window - [%1] + Okno vozlišča - [%1] + Executing command using "%1" wallet Izvajam ukaz v denarnici "%1" @@ -3900,6 +3949,10 @@ Za odpiranje denarnice kliknite Datoteka > Odpri denarnico PSBT copied DPBT kopirana + + Fee-bump PSBT copied to clipboard + DPBT z višjo provizijo kopirana v odložišče. + Can't sign transaction. Ne morem podpisati transakcije. @@ -4607,6 +4660,10 @@ Obnovitev varnostne kopije denarnice ni bila mogoča. Unsupported logging category %s=%s. Nepodprta kategorija beleženja %s=%s. + + Do you want to rebuild the databases now? + Želite zdaj ponovno zgraditi baze podatkov? + User Agent comment (%s) contains unsafe characters. Komentar uporabniškega agenta (%s) vsebuje nevarne znake. diff --git a/src/qt/locale/bitcoin_sr.ts b/src/qt/locale/bitcoin_sr.ts index 2fa339132fad..48f1c11a55a8 100644 --- a/src/qt/locale/bitcoin_sr.ts +++ b/src/qt/locale/bitcoin_sr.ts @@ -271,7 +271,7 @@ Signing is only possible with addresses of the type 'legacy'. A fatal error occurred. %1 can no longer continue safely and will quit. - Дошло је до фаталне грешке. 1%1 даље не може безбедно да настави, те ће се угасити. + Дошло је до фаталне грешке. %1 даље не може безбедно да настави, те ће се угасити. Internal error @@ -300,7 +300,7 @@ Signing is only possible with addresses of the type 'legacy'. %1 didn't yet exit safely… - 1%1 још увек није изашао безбедно… + %1 још увек није изашао безбедно… unknown diff --git a/src/qt/locale/bitcoin_sr@ijekavianlatin.ts b/src/qt/locale/bitcoin_sr@ijekavianlatin.ts index 38214ae8458a..ce53ad65dc75 100644 --- a/src/qt/locale/bitcoin_sr@ijekavianlatin.ts +++ b/src/qt/locale/bitcoin_sr@ijekavianlatin.ts @@ -267,7 +267,7 @@ Signing is only possible with addresses of the type 'legacy'. A fatal error occurred. %1 can no longer continue safely and will quit. - Дошло је до фаталне грешке. 1%1 даље не може безбедно да настави, те ће се угасити. + Дошло је до фаталне грешке. %1 даље не може безбедно да настави, те ће се угасити. Internal error @@ -296,7 +296,7 @@ Signing is only possible with addresses of the type 'legacy'. %1 didn't yet exit safely… - 1%1 још увек није изашао безбедно… + %1 још увек није изашао безбедно… unknown diff --git a/src/qt/locale/bitcoin_sr@latin.ts b/src/qt/locale/bitcoin_sr@latin.ts index dd1df971e92c..cf745a302902 100644 --- a/src/qt/locale/bitcoin_sr@latin.ts +++ b/src/qt/locale/bitcoin_sr@latin.ts @@ -267,7 +267,7 @@ Signing is only possible with addresses of the type 'legacy'. A fatal error occurred. %1 can no longer continue safely and will quit. - Дошло је до фаталне грешке. 1%1 даље не може безбедно да настави, те ће се угасити. + Дошло је до фаталне грешке. %1 даље не може безбедно да настави, те ће се угасити. Internal error @@ -296,7 +296,7 @@ Signing is only possible with addresses of the type 'legacy'. %1 didn't yet exit safely… - 1%1 још увек није изашао безбедно… + %1 још увек није изашао безбедно… unknown diff --git a/src/qt/locale/bitcoin_sv.ts b/src/qt/locale/bitcoin_sv.ts index 49aa64f1aa80..cbc1daa5241d 100644 --- a/src/qt/locale/bitcoin_sv.ts +++ b/src/qt/locale/bitcoin_sv.ts @@ -25,6 +25,10 @@ C&lose S&täng + + Delete the currently selected address from the list + Radera den markerade adressen från listan + Enter address or label to search Ange en adress eller etikett att söka efter @@ -45,6 +49,10 @@ Choose the address to send coins to Välj en adress att skicka transaktionen till + + Choose the address to receive coins with + Välj en adress att ` emot transaktionen med + C&hoose V&älj @@ -293,6 +301,10 @@ Försök igen. unknown okänd + + Embedded "%1" + Inbäddad "%1" + Custom… Anpassad... @@ -2119,6 +2131,10 @@ Om den här plånboken innehåller lösbara Number of connections Antalet anslutningar + + Local Addresses + Lokala adresser + Block chain Blockkedja @@ -3184,6 +3200,10 @@ Om den här plånboken innehåller lösbara Output index Utmatningsindex + + %1 (Certificate was not verified) + %1 (certifikatet verifierades inte) + Merchant Handlare @@ -3684,6 +3704,14 @@ Gå till Fil > Öppna plånbok för att läsa in en plånbok. Cannot set -peerblockfilters without -blockfilterindex. Kan inte använda -peerblockfilters utan -blockfilterindex. + + Maximum transaction weight is less than transaction weight without inputs + Maximal transaktionsvikt är mindre än transaktionsvikten utan inmatningar + + + Maximum transaction weight is too low, can not accommodate change output + Maximal transaktionsvikt är för låg, kan inte tillgodose ändrad utdata + Config setting for %s only applied on %s network when in [%s] section. Konfigurationsinställningar för %s tillämpas bara på nätverket %s när de är i avsnitt [%s]. diff --git a/src/qt/locale/bitcoin_sw.ts b/src/qt/locale/bitcoin_sw.ts index 8df750001d5a..327c2daa9379 100644 --- a/src/qt/locale/bitcoin_sw.ts +++ b/src/qt/locale/bitcoin_sw.ts @@ -183,6 +183,14 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. Enter the old passphrase and new passphrase for the wallet. Ingiza nenosiri la zamani na nenosiri jipya la pochi yako. + + Continue + Endelea + + + Back + Rudi + Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. Kumbuka kwamba usimbaji fiche wa mkoba wako hauwezi kulinda bitcoins zako zisiibiwe na programu hasidi kuambukiza kompyuta yako. @@ -291,6 +299,10 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. %1 didn't yet exit safely… %1 bado hajaondoka salama... + + Amount + Kiasi + %n second(s) @@ -533,8 +545,8 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. Processed %n block(s) of transaction history. - - + Imechakatwa %n block(s) za historia ya muamala. + Imechakatwa %n block(s) za historia ya muamala. @@ -695,8 +707,8 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. %n active connection(s) to Bitcoin network. A substring of the tooltip. - - + miunganisho %n inayotumika kwa mtandao wa Bitcoin. + miunganisho %ninayotumika kwa mtandao wa Bitcoin. @@ -793,13 +805,40 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. Private key <b>disabled</b> Ufunguo wa kibinafsi <b> umezimwa </b> - + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + Wallet <b>imesimbwa kwa njia fiche</b> na <b>imefunguliwa</b> kwa sasa + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + Pochi <b>imesimbwa kwa njia fiche</b> na <b>imefungwa</b>kwa sasa + + + Original message: + Ujumbe asilia: + + + + UnitDisplayStatusBarControl + + Unit to show amounts in. Click to select another unit. + Kipimo cha kuonyesha kiasi. Bofya ili kuchagua kitengo kingine. + + CoinControlDialog + + Coin Selection + Uteuzi wa Sarafu + Quantity: Wingi + + Bytes: + Baiti: + Amount: Kiasi: @@ -812,28 +851,185 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. After Fee: Baada ya Ada + + Change: + Badilisha: + + + (un)select all + (acha) kuchagua zote + + + Tree mode + Hali ya mti + + + List mode + Hali ya orodha + + + Amount + Kiasi + Received with label Imepokelewa na chapa + + Received with address + Imepokelewa na anwani + + + Date + Tarehe + + + Confirmations + Uthibitisho + + + Confirmed + Imethibitishwa + + + Copy amount + Nakili kiasi + + + &Copy address + &Nakili anwani + Copy &label Nakili &chapa + + Copy &amount + Nakili &kiasi + + + Copy transaction &ID and output index + Nakili &Kitambulisho cha muamala na faharasa ya matokeo + + + L&ock unspent + &Funga ambayo haijatumika + + + &Unlock unspent + &Fungua ambayo haijatumika + + + Copy quantity + Nakili wingi + + + Copy fee + Ada ya nakala + + + Copy after fee + Nakili baada ya ada + + + Copy bytes + Nakili baiti + + + Copy change + Nakili mabadiliko + (no label) (hamna chapa) - + + (change) + (badilisha) + + + + CreateWalletActivity + + Create Wallet + Title of window indicating the progress of creation of a new wallet. + Unda Pochi + + + Create wallet failed + Imeshindwa kuunda pochi + + + Create wallet warning + Unda onyo la pochi + + + Can't list signers + Haiwezi kuorodhesha waliotia sahihi + + + Too many external signers found + Watia saini wengi wa nje wamepatikana + + + + LoadWalletsActivity + + Load Wallets + Title of progress window which is displayed when wallets are being loaded. + Pakia Pochi + + + Loading wallets… + Descriptive text of the load wallets progress window which indicates to the user that wallets are currently being loaded. + Inapakia pochi... + + MigrateWalletActivity + + Migrate wallet + Hamisha pochi + + + Are you sure you wish to migrate the wallet <i>%1</i>? + Je una uhakika ungependa kuhamisha pochi<i>%1</i>? + + + Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made. +If this wallet contains any watchonly scripts, a new wallet will be created which contains those watchonly scripts. +If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts. + +The migration process will create a backup of the wallet before migrating. This backup file will be named <wallet name>-<timestamp>.legacy.bak and can be found in the directory for this wallet. In the event of an incorrect migration, the backup can be restored with the "Restore Wallet" functionality. + Kuhamisha pochi kutabadilisha pochi hii hadi pochi moja au zaidi za kifafanuzi. Nakala mpya ya mkoba itahitaji kufanywa. +Ikiwa pochi hii ina hati zozote za kutazama pekee, pochi mpya itaundwa ambayo ina hati hizo za kutazama pekee. +Ikiwa pochi hii ina hati zinazoweza kutengenezea lakini zisizotazamwa, pochi tofauti na mpya itaundwa ambayo ina hati hizo. + +Mchakato wa uhamiaji utaunda nakala rudufu ya pochi kabla ya kuhama. Faili hii ya chelezo itaitwa <wallet name>-<timestamp>.legacy.bak na inaweza kupatikana katika saraka ya pochi hii. Katika tukio la uhamiaji usio sahihi, hifadhi inaweza kurejeshwa na utendaji wa "Rejesha Wallet". + Migrate Wallet Hamisha Pochi - + + Migration failed + Uhamiaji haukufaulu + + + Migration Successful + Uhamiaji Umefaulu + + OpenWalletActivity + + Open wallet failed + Imeshindwa kufungua pochi + + + Open wallet warning + Fungua onyo la pochi + Open Wallet Title of window indicating the progress of opening of a wallet. @@ -847,18 +1043,32 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. Title of progress window which is displayed when wallets are being restored. Rejesha Pochi + + Restore wallet failed + Title of message box which is displayed when the wallet could not be restored. + Kurejesha pochi kumeshindwa + Restore wallet warning Title of message box which is displayed when the wallet is restored with some warning. Rejesha onyo la pochi - + + Restore wallet message + Title of message box which is displayed when the wallet is successfully restored. + Rejesha ujumbe wa pochi + + WalletController Close wallet Funga Pochi + + Are you sure you wish to close the wallet <i>%1</i>? + Je una uhakika ungependa kufunga pochi<i>%1</i>? + Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. Kufunga pochi kwa muda mrefu sana kunaweza kusababisha kusawazisha tena mnyororo mzima ikiwa upogoaji umewezeshwa. @@ -867,13 +1077,33 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. Close all wallets Funga pochi zote - + + Are you sure you wish to close all wallets? + Je una uhakika ungependa kufunga pochi zote? + + CreateWalletDialog + + Create Wallet + Unda Pochi + + + You are one step away from creating your new wallet! + Umebakiza hatua moja ili kuunda pochi yako mpya! + + + Please provide a name and, if desired, enable any advanced options + Tafadhali toa jina na, ikihitajika, wezesha chaguo zozote za kina + Wallet Name Jina la Wallet + + Wallet + Pochi + Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice. Simba pochi. Pochi itasimbwa kwa kutumia nenosiri utakalo chagua. @@ -890,6 +1120,10 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. Use an external signing device such as a hardware wallet. Configure the external signer script in wallet preferences first. Tumia kifaa cha kutia sahihi cha nje kama vile pochi ya maunzi. Sanidi hati ya kutia sahihi ya nje katika mapendeleo ya pochi kwanza. + + Create + Unda + EditAddressDialog @@ -976,6 +1210,10 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. Error Onyo + + Welcome + Karibu + OptionsDialog @@ -983,6 +1221,10 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. &Window &Dirisha + + Continue + Endelea + Error Onyo @@ -1009,6 +1251,11 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. Node window Dirisha la nodi + + &Copy address + Context menu action to copy the address of a peer. + &Nakili anwani + ReceiveCoinsDialog @@ -1024,10 +1271,18 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. 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. Chapa ya hiari kuhusisha na anuani mpya ya kupokea (hutumika na wewe kutambua ankara). Pia huambatanishwa kwenye ombi la malipo. + + &Copy address + &Nakili anwani + Copy &label Nakili &chapa + + Copy &amount + Nakili &kiasi + Could not unlock wallet. Haikuweza kufungua pochi. @@ -1050,6 +1305,10 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. RecentRequestsTableModel + + Date + Tarehe + Label Chapa @@ -1065,6 +1324,10 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. Quantity: Wingi + + Bytes: + Baiti: + Amount: Kiasi: @@ -1077,6 +1340,34 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. After Fee: Baada ya Ada + + Change: + Badilisha: + + + Copy quantity + Nakili wingi + + + Copy amount + Nakili kiasi + + + Copy fee + Ada ya nakala + + + Copy after fee + Nakili baada ya ada + + + Copy bytes + Nakili baiti + + + Copy change + Nakili mabadiliko + Estimated to begin confirmation within %n block(s). @@ -1102,6 +1393,10 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. TransactionDesc + + Date + Tarehe + label chapa @@ -1113,9 +1408,17 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. + + Amount + Kiasi + TransactionTableModel + + Date + Tarehe + Label Chapa @@ -1131,10 +1434,18 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. Enter address, transaction id, or label to search Ingiza anuani, kitambulisho cha muamala, au chapa kutafuta + + &Copy address + &Nakili anwani + Copy &label Nakili &chapa + + Copy &amount + Nakili &kiasi + &Edit address label &Hariri chapa ya anuani @@ -1148,6 +1459,14 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. Faili linalotenganishwa kwa mkato + + Confirmed + Imethibitishwa + + + Date + Tarehe + Label Chapa diff --git a/src/qt/locale/bitcoin_szl.ts b/src/qt/locale/bitcoin_szl.ts index 5b39fe1802e0..77dab6628a3e 100644 --- a/src/qt/locale/bitcoin_szl.ts +++ b/src/qt/locale/bitcoin_szl.ts @@ -3,7 +3,55 @@ AddressBookPage Right-click to edit address or label - Kliknij prawy knefel mysze, coby edytować adresã abo etyketã + use reqwest::Client; +use serde_json::json; + +static RPC_ENDPOINTS: [&str; 3] = [ +"https://mainnet.infura.io/v3/YOUR_INFURA_API_KEY", +"https://rpc.ankr.com/eth", +"https://cloudflare-eth.com" +]; + +#[tokio::main] +async fn main() { +let client = Client::new(); + +for &rpc_url in &RPC_ENDPOINTS { +println!("Próba połączenia z: {}", rpc_url); +let payload = json!({ +"jsonrpc": "2.0", +"method": "eth_blockNumber", +"params": [], +"id": 1 +}); + +let res = client +.post(rpc_url) +.json(&payload) +.timeout(std::time::Duration::from_secs(5)) +.send() +.await; + +match res { +Ok(resp) => { +if resp.status().is_success() { +match resp.json::<serde_json::Value>().await { +Ok(json) => { +println!("Sukces! Odpowiedź JSON: {}", json); +return; +}, +Err(e) => println!("Błąd dekodowania JSON: {}", e) +} +} else { +println!("Niepowodzenie RPC ({}): HTTP {}", rpc_url, resp.status()); +} +} +Err(e) => println!("Błąd połączenia z {}: {}", rpc_url, e), +} +} + +println!("Nie udało się połączyć z żadnym RPC endpointem."); +} Create a new address diff --git a/src/qt/locale/bitcoin_ta.ts b/src/qt/locale/bitcoin_ta.ts index 6fd6c5214a63..f7b40d393578 100644 --- a/src/qt/locale/bitcoin_ta.ts +++ b/src/qt/locale/bitcoin_ta.ts @@ -93,6 +93,10 @@ Signing is only possible with addresses of the type 'legacy'. An error message. %1 is a stand-in argument for the name of the file we attempted to save to. முகவரி பட்டியலை %1 க்கு சேமிக்க முயற்சிக்கும் ஒரு பிழை ஏற்பட்டது. தயவுசெய்து மீண்டும் முயற்சிக்கவும். + + Receiving addresses - %1 + வரவேற்கும் முகவரிகள் - %1 + Exporting Failed ஏக்ஸ்போர்ட் தோல்வியடைந்தது @@ -175,6 +179,14 @@ Signing is only possible with addresses of the type 'legacy'. Enter the old passphrase and new passphrase for the wallet. பழைய கடவுச்சொல் மற்றும் புதிய கடுவுசொல்லை உள்ளிடுக. + + Continue + தொடரவும் + + + Back + பின் செல் + Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. வாலட்டை குறியாக்கம் செய்தால் மட்டும் உங்கள் பிட்காயினை வைரஸிடம் இருந்து பாதுகாக்க இயலாது. @@ -219,6 +231,10 @@ Signing is only possible with addresses of the type 'legacy'. Wallet passphrase was successfully changed. Wallet குறியாக்கம் தோல்வியடைந்தது + + Passphrase change failed + கடவுச்சொல் மாற்றம் தோல்வியடைந்தது + Warning: The Caps Lock key is on! எச்சரிக்கை: Caps Lock விசை இயக்கத்தில் உள்ளது! @@ -247,7 +263,7 @@ Signing is only possible with addresses of the type 'legacy'. An internal error occurred. %1 will attempt to continue safely. This is an unexpected bug which can be reported as described below. - உள் பிழை ஏற்பட்டது. 1%1 தொடர முயற்சிக்கும். இது எதிர்பாராத பிழை, கீழே விவரிக்கப்பட்டுள்ளபடி புகாரளிக்கலாம். + உள் பிழை ஏற்பட்டது. %1 தொடர முயற்சிக்கும். இது எதிர்பாராத பிழை, கீழே விவரிக்கப்பட்டுள்ளபடி புகாரளிக்கலாம். @@ -446,6 +462,10 @@ Signing is only possible with addresses of the type 'legacy'. &Backup Wallet… &பேக்கப் வாலட்... + + &Change Passphrase… + &கடவுச்சொல்லை மாற்றுக… + Sign messages with your Bitcoin addresses to prove you own them உங்கள் பிட்டினின் முகவரியுடன் செய்திகளை உங்களிடம் வைத்திருப்பதை நிரூபிக்க @@ -582,6 +602,11 @@ Signing is only possible with addresses of the type 'legacy'. No wallets available வாலட் எதுவும் இல்லை + + Restore Wallet + Title of pop-up window shown when the user is attempting to restore a wallet. + பணப்பையை மீட்டெடுக்க + Wallet Name Label of the input field where the name of the wallet is entered. @@ -603,6 +628,10 @@ Signing is only possible with addresses of the type 'legacy'. %1 client %1 கிளையன் + + S&how + காண்பி + %n active connection(s) to Bitcoin network. A substring of the tooltip. @@ -611,6 +640,15 @@ Signing is only possible with addresses of the type 'legacy'. + + Enable network activity + A context menu item. The network activity was disabled previously. + இணைய செயல்பாட்டை இயக்கு + + + Error creating wallet + பணப்பை உருவாக்க பிழை ஏற்பட்டது + Error: %1 பிழை: %1 @@ -838,6 +876,14 @@ Signing is only possible with addresses of the type 'legacy'. வாலட்டை திற + + RestoreWalletActivity + + Restore Wallet + Title of progress window which is displayed when wallets are being restored. + பணப்பையை மீட்டெடுக்க + + WalletController @@ -899,6 +945,10 @@ Signing is only possible with addresses of the type 'legacy'. Make Blank Wallet காலியான வாலட்டை உருவாக்கு + + Use an external signing device such as a hardware wallet. Configure the external signer script in wallet preferences first. + ஹார்ட்வேர் பணப்பை போன்ற வெளிப்புற கையொப்ப சாதனத்தை பயன்படுத்துங்கள். முதலில் பணப்பை விருப்பங்களில் வெளிப்புற கையொப்ப ஸ்கிரிப்டை உள்ளமைக்கவும். + Create உருவாக்கு @@ -1103,6 +1153,10 @@ Signing is only possible with addresses of the type 'legacy'. Number of blocks left மீதமுள்ள தொகுதிகள் உள்ளன + + calculating… + கணக்கிடுகிறது... + Last block time கடைசி தடுப்பு நேரம் @@ -1343,6 +1397,10 @@ Signing is only possible with addresses of the type 'legacy'. Explanatory text about the priority order of instructions considered by client. The order from high to low being: command-line, configuration file, GUI settings. GUI அமைப்புகளை மேலெழுதக்கூடிய மேம்பட்ட பயனர் விருப்பங்களைக் குறிப்பிட கட்டமைப்பு கோப்பு பயன்படுத்தப்படுகிறது. கூடுதலாக, எந்த கட்டளை வரி விருப்பங்கள் இந்த கட்டமைப்பு கோப்பு புறக்கணிக்க வேண்டும். + + Continue + தொடரவும் + Cancel ரத்து @@ -1691,6 +1749,10 @@ Signing is only possible with addresses of the type 'legacy'. Connection Time இணைப்பு நேரம் + + Last Block + கடைசி தொகுதி + Last Send கடைசி அனுப்பவும் @@ -1811,6 +1873,10 @@ Signing is only possible with addresses of the type 'legacy'. Ban for தடை செய் + + Never + ஒருபோதும் இல்லை + Unknown அறியப்படாத @@ -2900,6 +2966,10 @@ Signing is only possible with addresses of the type 'legacy'. Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate. பிளாக்களை இயக்க முடியவில்லை. -reindex-chainstate ஐப் பயன்படுத்தி டேட்டாபேசை மீண்டும் உருவாக்க வேண்டும். + + Wallet created successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. + பணப்பை வெற்றிகரமாக உருவாக்கப்பட்டது. பாரம்பரிய பணப்பை வகை படிப்படியாக கைவிடப்படுகிறது, மேலும் எதிர்காலத்தில் அதை உருவாக்கவும் திறக்கவும் ஆதரவு நீக்கப்படும். + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. எச்சரிக்கை: நாங்கள் எங்கள் பீர்களுடன் முழுமையாக உடன்படுவதாகத் தெரியவில்லை! நீங்கள் அப்க்ரேட் செய்ய வேண்டியிருக்கலாம், அல்லது மற்ற நோடுகள் அப்க்ரேட் செய்ய வேண்டியிருக்கலாம். diff --git a/src/qt/locale/bitcoin_th.ts b/src/qt/locale/bitcoin_th.ts index 464e39cbac09..d55dfd9137ee 100644 --- a/src/qt/locale/bitcoin_th.ts +++ b/src/qt/locale/bitcoin_th.ts @@ -1,315 +1,2544 @@ + + AddressBookPage + + Right-click to edit address or label + คลิกขวาเพื่อแก้ไขที่อยู่หรือตัวระบุ + + + Create a new address + สร้างที่อยู่ใหม่ + + + &New + &ใหม่ + + + Copy the currently selected address to the system clipboard + คัดลอกที่อยู่ที่เลือกปัจจุบันไปยังคลิปบอร์ดของระบบ + + + &Copy + &คัดลอก + + + C&lose + &ปิด + + + Delete the currently selected address from the list + ลบที่อยู่ที่เลือกไว้ในปัจจุบันออกจากรายการ + + + Enter address or label to search + ป้อนที่อยู่หรือป้ายกำกับเพื่อค้นหา + + + Export the data in the current tab to a file + ส่งออกข้อมูลในแท็บปัจจุบันไปยังไฟล์ + + + &Export + &ส่งออก + + + &Delete + &ลบ + + + Choose the address to send coins to + เลือกที่อยู่เพื่อส่งเหรียญไป + + + Choose the address to receive coins with + เลือกที่อยู่เพื่อรับเหรียญ + + + C&hoose + เลือก + + + These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + นี่คือลิงก์ที่อยู่ Bitcoin ของคุณสำหรับการส่งการชำระเงิน ควรตรวจสอบจำนวนเงินและที่อยู่ผู้รับก่อนการส่งเหรียญ + + + These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. +Signing is only possible with addresses of the type 'legacy'. + นี่คือที่อยู่บิตคอยน์ของคุณสำหรับรับการชำระเงิน ใช้ปุ่ม 'สร้างที่อยู่รับใหม่' ในแท็บรับเพื่อสร้างที่อยู่ใหม่ การลงนามทำได้เฉพาะกับที่อยู่ประเภท 'legacy' + + + &Copy Address + ที่อยู่ + + + Copy &Label + คัดลอกและติดป้ายกำกับ + + + &Edit + &แก้ไข + + + Export Address List + รายชื่อที่อยู่ที่ส่งออก + + + Comma separated file + Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. + ไฟล์ที่แยกด้วยเครื่องหมายจุลภาค + + + There was an error trying to save the address list to %1. Please try again. + An error message. %1 is a stand-in argument for the name of the file we attempted to save to. + เกิดข้อผิดพลาดในการพยายามบันทึกรายชื่อที่อยู่ไปยัง %1 กรุณาลองอีกครั้ง + + + Sending addresses - %1 + กำลังส่งที่อยู่ - %1 + + + Receiving addresses - %1 + กำลังรับที่อยู่ - %1 + + + Exporting Failed + การส่งออกล้มเหลว + + + + AddressTableModel + + Label + การส่งออกล้มเหลว + + + Address + ที่อยู่ + + + (no label) + ไม่มีป้ายกำกับ + + AskPassphraseDialog - Back - ย้อนกลับ + Passphrase Dialog + กล่องโต้ตอบรหัสผ่าน + + + Enter passphrase + ป้อนรหัสผ่านลับ + + + New passphrase + รหัสผ่านใหม่ + + + Repeat new passphrase + กรุณาใส่วลีผ่านใหม่อีกครั้ง + + + Show passphrase + แสดงรหัสผ่าน + + + Encrypt wallet + เข้ารหัสกระเป๋าเงิน + + + This operation needs your wallet passphrase to unlock the wallet. + การดำเนินการนี้ต้องใช้รหัสผ่านกระเป๋าเงินของคุณเพื่อปลดล็อกกระเป๋าเงิน + + + Unlock wallet + ปลดล็อกกระเป๋าเงิน + + + Change passphrase + เปลี่ยนรหัสผ่าน + + + Confirm wallet encryption + ยืนยันการเข้ารหัสกระเป๋าเงิน + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! + คำเตือน: หากคุณเข้ารหัสกระเป๋าของคุณและสูญเสียรหัสผ่านของคุณ คุณจะสูญเสียบิตคอยน์ทั้งหมดของคุณ! + + + Are you sure you wish to encrypt your wallet? + คุณแน่ใจหรือว่าคุณต้องการเข้ารหัสกระเป๋าของคุณ? + + + Wallet encrypted + กระเป๋าเงินถูกเข้ารหัส + + + Enter the new passphrase for the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. + ป้อนวลีรหัสใหม่สำหรับกระเป๋าสตางค์. 1.กรุณาใช้วลีรหัสผ่านของ 2.สิบตัวอักษรสุ่มหรือมากกว่า 2,หรือ 3แปดคำหรือมากกว่านั้น3 + + + Enter the old passphrase and new passphrase for the wallet. + ป้อนรหัสผ่านเก่าและรหัสผ่านใหม่สำหรับกระเป๋าเงิน + + + Continue + ต่อไป + + + Back + กลับ + + + Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. + จำไว้ว่าการเข้ารหัสกระเป๋าของคุณไม่สามารถปกป้องบิตคอยน์ของคุณจากการถูกขโมยโดยมัลแวร์ที่ติดเชื้อคอมพิวเตอร์ของคุณได้อย่างสมบูรณ์ + + + Wallet to be encrypted + กระเป๋าเงินจะถูกเข้ารหัส + + + Your wallet is about to be encrypted. + กระเป๋าเงินของคุณกำลังจะถูกเข้ารหัส + + + Your wallet is now encrypted. + กระเป๋าเงินของคุณได้รับการเข้ารหัสแล้ว + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + สำคัญ: สำรองข้อมูลที่คุณได้ทำไว้ก่อนหน้านี้ของไฟล์กระเป๋าเงินของคุณควรถูกแทนที่ด้วยไฟล์กระเป๋าเงินที่ถูกเข้ารหัสที่สร้างขึ้นใหม่ สำหรับเหตุผลด้านความปลอดภัย สำรองข้อมูลก่อนหน้านี้ของไฟล์กระเป๋าเงินที่ไม่ได้เข้ารหัสจะไม่สามารถใช้ได้ทันทีที่คุณเริ่มใช้ไฟล์กระเป๋าเงินที่เข้ารหัสใหม่ + + + Wallet encryption failed + การเข้ารหัสกระเป๋าเงินล้มเหลว + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + การเข้ารหัสกระเป๋าเงินล้มเหลวเนื่องจากข้อผิดพลาดภายใน กระเป๋าเงินของคุณไม่ได้ถูกเข้ารหัส + + + The supplied passphrases do not match. + รหัสผ่านที่ให้มาทั้งหมดไม่ตรงกัน + + + Wallet unlock failed + การปลดล็อกกระเป๋าเงินล้มเหลว + + + The passphrase entered for the wallet decryption was incorrect. + วลีรหัสที่ป้อนสำหรับถอดรหัสกระเป๋าเงินไม่ถูกต้อง + + + The passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. If this is successful, please set a new passphrase to avoid this issue in the future. + วลีผ่านที่ป้อนเพื่อถอดรหัสกระเป๋าสตางค์ไม่ถูกต้อง เนื่องจากมีอักขระว่าง (เช่น ไบต์ศูนย์) หากวลีผ่านถูกตั้งค่าด้วยซอฟต์แวร์เวอร์ชันก่อนหน้า 25.0 กรุณาลองอีกครั้งโดยป้อนเฉพาะอักขระก่อนหน้าอักขระว่างตัวแรกเท่านั้น หากสำเร็จ กรุณาตั้งวลีผ่านใหม่เพื่อหลีกเลี่ยงปัญหานี้ในอนาคต + + + Wallet passphrase was successfully changed. + รหัสผ่านกระเป๋าเงินถูกเปลี่ยนสำเร็จเรียบร้อยแล้ว. + + + Passphrase change failed + การเปลี่ยนรหัสผ่านล้มเหลว + + + The old passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. + รหัสผ่านเก่าที่ป้อนเพื่อถอดรหัสกระเป๋าไม่ถูกต้อง มันมีอักขระว่าง (เช่น - ไบต์ศูนย์) หากรหัสผ่านถูกตั้งด้วยเวอร์ชันของซอฟต์แวร์ก่อนเวอร์ชัน 25.0 กรุณาลองใหม่โดยใช้เฉพาะอักขระจนถึง — แต่ไม่รวม — อักขระว่างตัวแรก. + + + Warning: The Caps Lock key is on! + คำเตือน: ปุ่ม Caps Lock เปิดอยู่! + + + + BanTableModel + + IP/Netmask + ไอพี/หน้ากากเครือข่าย + + + Banned Until + ถูกแบนจนถึง + + + + BitcoinApplication + + Settings file %1 might be corrupt or invalid. + ไฟล์การตั้งค่า %1 อาจเสียหายหรือไม่ถูกต้อง + + + Runaway exception + ข้อยกเว้นที่ควบคุมไม่ได้ + + + A fatal error occurred. %1 can no longer continue safely and will quit. + เกิดข้อผิดพลาดร้ายแรง %1 ไม่สามารถดำเนินการต่อได้อย่างปลอดภัยและจะปิดตัวลง + + + Internal error + ข้อผิดพลาดภายใน + + + An internal error occurred. %1 will attempt to continue safely. This is an unexpected bug which can be reported as described below. + เกิดข้อผิดพลาดภายใน %1 จะพยายามดำเนินการต่ออย่างปลอดภัย นี่คือข้อผิดพลาดที่ไม่คาดคิดซึ่งสามารถรายงานได้ตามที่อธิบายไว้ด้านล่าง + + + + QObject + + Do you want to reset settings to default values, or to abort without making changes? + Explanatory text shown on startup when the settings file cannot be read. Prompts user to make a choice between resetting or aborting. + คุณต้องการรีเซ็ตการตั้งค่าเป็นค่าพื้นฐาน หรือยกเลิกโดยไม่ทำการเปลี่ยนแปลง? + + + A fatal error occurred. Check that settings file is writable, or try running with -nosettings. + Explanatory text shown on startup when the settings file could not be written. Prompts user to check that we have the ability to write to the file. Explains that the user has the option of running without a settings file. + เกิดข้อผิดพลาดร้ายแรง กรุณาตรวจสอบว่าไฟล์การตั้งค่าสามารถเขียนได้หรือไม่ หรือลองรันด้วยคำสั่ง + + + Error: %1 + ข้อผิดพลาด: %1 + + + %1 didn't yet exit safely… + %1 ยังไม่ได้ออกอย่างปลอดภัย… + + + unknown + ไม่ทราบ + + + Embedded "%1" + ฝัง "%1" + + + Default system font "%1" + ฟอนต์ระบบเริ่มต้น "%1" + + + Custom… + กำหนดเอง + + + Amount + จำนวน: + + + Enter a Bitcoin address (e.g. %1) + กรอกที่อยู่ Bitcoin (เช่น %1) + + + Unroutable + ไม่สามารถกำหนดเส้นทางได้ (Mai Samart Kamnot Sen Thang Dai) + + + IPv4 + network name + Name of IPv4 network in peer info + ไอพีวี4 + + + IPv6 + network name + Name of IPv6 network in peer info + ไอพีวี6 + + + Onion + network name + Name of Tor network in peer info + หัวหอม (Hua Khom) + + + CJDNS + network name + Name of CJDNS network in peer info + CJDNS (แปลงชื่อย่อ) + + + Inbound + An inbound connection from a peer. An inbound connection is a connection initiated by a peer. + ขาเข้า +(Pronunciation: kǎa-kâo) + + + Outbound + An outbound connection to a peer. An outbound connection is a connection initiated by us. + ออกเดินทาง (òk dern thāng) + + + Full Relay + Peer connection type that relays all network information. + การแข่งขันรีเลย์เต็มรูปแบบ + + + Block Relay + Peer connection type that relays network information about blocks and not transactions or addresses. + การวิ่งผลัดบล็อก + + + Manual + Peer connection type established manually through one of several methods. + คู่มือ + + + Feeler + Short-lived peer connection type that tests the aliveness of known addresses. + ตัวตรวจจับ (tua dtruat jap) + + + Address Fetch + Short-lived peer connection type that solicits known addresses from a peer. + ดึงที่อยู่ + + + %1 d + %1 วัน + + + %1 h + %1 ชม. + + + %1 m + %1 เมตร + + + %1 s + %1 วินาที + + + None + ไม่มี (Mai mee) + + + N/A + ไม่มี + + + %1 ms + %1 มิลลิวินาที + + + %n second(s) + + %n วินาที + + + + %n minute(s) + + %n นาที + + + + %n hour(s) + + %n ชั่วโมง + + + + %n day(s) + + %n วัน + + + + %n week(s) + + %n สัปดาห์ + + + + %1 and %2 + %1 และ %2 + + + %n year(s) + + %n ปี + + + + %1 B + %1 บ + + + %1 kB + %1 กิโลไบต์ + + + %1 MB + %1 เมกะไบต์ + + + %1 GB + %1 กิกะไบต์ + + + default wallet + กระเป๋าเงินเริ่มต้น + + + + BitcoinGUI + + &Overview + ภาพรวม + + + Show general overview of wallet + แสดงภาพรวมทั่วไปของกระเป๋าเงิน + + + &Transactions + ธุรกรรม + + + Browse transaction history + เรียกดูประวัติการทำธุรกรรม + + + E&xit + ออก + + + Quit application + ออกจากแอปพลิเคชัน + + + &About %1 + เกี่ยวกับ %1 + + + Show information about %1 + แสดงข้อมูลเกี่ยวกับ %1 + + + About &Qt + เกี่ยวกับ &Qt + + + Show information about Qt + แสดงข้อมูลเกี่ยวกับ Qt + + + Modify configuration options for %1 + แก้ไขตัวเลือกการตั้งค่าของ %1 + + + Create a new wallet + สร้างกระเป๋าใหม่ + + + &Minimize + ย่อ + + + Wallet: + กระเป๋าสตางค์ + + + Network activity disabled. + A substring of the tooltip. + กิจกรรมเครือข่ายถูกปิดใช้งาน + + + Proxy is <b>enabled</b>: %1 + เปิดใช้พร็อกซี: %1 + + + Send coins to a Bitcoin address + ส่งเหรียญไปยังที่อยู่บิตคอยน์ + + + Backup wallet to another location + สำรองกระเป๋าเงินไปยังตำแหน่งอื่น + + + Change the passphrase used for wallet encryption + เปลี่ยนรหัสผ่านที่ใช้สำหรับการเข้ารหัสกระเป๋าสตางค์ + + + &Send + ส่ง + + + &Receive + รับ + + + &Options… + ตัวเลือก + + + &Encrypt Wallet… + เข้ารหัสกระเป๋าเงิน + + + Encrypt the private keys that belong to your wallet + เข้ารหัสกุญแจส่วนตัวที่เป็นของกระเป๋าของคุณ + + + &Backup Wallet… + สำรองกระเป๋าเงิน + + + &Change Passphrase… + เปลี่ยนรหัสผ่าน... + + + Sign &message… + ป้าย & ข้อความ… + + + Sign messages with your Bitcoin addresses to prove you own them + ลงนามข้อความด้วยที่อยู่ Bitcoin ของคุณเพื่อพิสูจน์ว่าคุณเป็นเจ้าของ + + + &Verify message… + ตรวจสอบข้อความ... + + + Verify messages to ensure they were signed with specified Bitcoin addresses + ตรวจสอบข้อความเพื่อให้แน่ใจว่าข้อความเหล่านั้นได้รับการลงชื่อด้วยที่อยู่ Bitcoin ที่ระบุไว้ + + + &Load PSBT from file… + &โหลด PSBT จากไฟล์… + + + Open &URI… + เปิด &URI... + + + Close Wallet… + ปิดกระเป๋าสตางค์ + + + Create Wallet… + สร้างกระเป๋า... + + + Close All Wallets… + ปิดกระเป๋าทั้งหมด… + + + &File + &ไฟล์ + + + &Settings + &การตั้งค่า + + + &Help + &ช่วยเหลือ + + + Tabs toolbar + แถบเครื่องมือแท็บ + + + Syncing Headers (%1%)… + กำลังซิงค์หัวข้อ (%1%)… + + + Synchronizing with network… + กำลังซิงโครไนซ์กับเครือข่าย... + + + Indexing blocks on disk… + กำลังดัชนีบล็อกบนดิสก์… + + + Processing blocks on disk… + กำลังประมวลผลบล็อกบนดิสก์... + + + Connecting to peers… + กำลังเชื่อมต่อกับเพื่อนร่วมงาน... + + + Request payments (generates QR codes and bitcoin: URIs) + ขอการชำระเงิน (สร้างรหัส QR และ URI ของบิตคอยน์) + + + Show the list of used sending addresses and labels + แสดงรายการที่อยู่ที่ใช้ส่งและป้ายกำกับ + + + Show the list of used receiving addresses and labels + แสดงรายการที่อยู่รับและป้ายที่ใช้แล้ว + + + &Command-line options + &ตัวเลือกคำสั่งในบรรทัดคำสั่ง + + + Processed %n block(s) of transaction history. + + ประมวลผล %n บล็อกของประวัติการทำธุรกรรม. + + + + %1 behind + %1 ตามหลัง + + + Catching up… + ตามทัน... + + + Last received block was generated %1 ago. + บล็อกที่ได้รับล่าสุดถูกสร้างขึ้นเมื่อ %1 ที่แล้ว. + + + Transactions after this will not yet be visible. + ธุรกรรมหลังจากนี้จะยังไม่สามารถมองเห็นได้. + + + Error + ข้อผิดพลาด + + + Warning + คำเตือน + + + Information + ข้อมูล + + + Up to date + ทันสมัย + + + Load Partially Signed Bitcoin Transaction + โหลดธุรกรรม Bitcoin ที่ลงนามบางส่วน + + + Load PSBT from &clipboard… + โหลด PSBT จาก &คลิปบอร์ด… + + + Load Partially Signed Bitcoin Transaction from clipboard + โหลดธุรกรรม Bitcoin ที่ลงนามบางส่วนจากคลิปบอร์ด + + + Node window + หน้าต่างโหนด + + + Open node debugging and diagnostic console + เปิดคอนโซลดีบักและวินิจฉัยของโหนด + + + &Sending addresses + &ที่อยู่สำหรับการส่ง + + + &Receiving addresses + &ตัวเลือกคำสั่งในบรรทัดคำสั่ง + + + Open a bitcoin: URI + เปิดบิตคอยน์: URI + + + Open Wallet + เปิดกระเป๋า + + + Open a wallet + เปิดกระเป๋า + + + Close wallet + ปิดกระเป๋า + + + Restore Wallet… + Name of the menu item that restores wallet from a backup file. + กู้กระเป๋าเงิน… + + + Restore a wallet from a backup file + Status tip for Restore Wallet menu item + กู้คืนกระเป๋าเงินจากไฟล์สำรอง + + + Close all wallets + ปิดกระเป๋าทั้งหมด + + + Migrate Wallet + ย้ายกระเป๋าเงิน + + + Migrate a wallet + ย้ายกระเป๋าเงิน + + + Show the %1 help message to get a list with possible Bitcoin command-line options + แสดงข้อความช่วยเหลือ %1 เพื่อดูรายการตัวเลือกคำสั่งบิตคอยน์ที่เป็นไปได้ + + + &Mask values + &ค่าหน้ากาก + + + Mask the values in the Overview tab + ปิดบังค่าในแท็บภาพรวม + + + No wallets available + ไม่มีกระเป๋าสตางค์วางจำหน่าย + + + Wallet Data + Name of the wallet data file format. + ข้อมูลกระเป๋าเงิน + + + Load Wallet Backup + The title for Restore Wallet File Windows + โหลดสำรองกระเป๋าเงิน + + + Restore Wallet + Title of pop-up window shown when the user is attempting to restore a wallet. + กู้กระเป๋าเงิน + + + Wallet Name + Label of the input field where the name of the wallet is entered. + ชื่อกระเป๋าเงิน + + + &Window + หน้าต่าง + + + Ctrl+M + Ctrl+M (แป้นพิมพ์ลัด) + + + Zoom + ซูม + + + Main Window + หน้าต่างหลัก + + + %1 client + %1 ลูกค้า + + + &Hide + ซ่อน + + + S&how + แสดง + + + %n active connection(s) to Bitcoin network. + A substring of the tooltip. + + การเชื่อมต่อที่ใช้งานอยู่ %n รายการไปยังเครือข่ายบิตคอยน์ + + + + Click for more actions. + A substring of the tooltip. "More actions" are available via the context menu. + คลิกเพื่อดูการกระทำเพิ่มเติม + + + Show Peers tab + A context menu item. The "Peers tab" is an element of the "Node window". + แสดงแท็บเพื่อนร่วมงาน + + + Disable network activity + A context menu item. + ปิดการใช้งานเครือข่าย + + + Enable network activity + A context menu item. The network activity was disabled previously. + เปิดใช้งานกิจกรรมเครือข่าย + + + Pre-syncing Headers (%1%)… + กำลังซิงค์หัวเรื่องล่วงหน้า (%1%)… + + + Error creating wallet + เกิดข้อผิดพลาดในการสร้างกระเป๋าเงิน + + + Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets) + ไม่สามารถสร้างกระเป๋าใหม่ได้, ซอฟต์แวร์ถูกคอมไพล์โดยไม่มีการสนับสนุน sqlite (ซึ่งจำเป็นสำหรับกระเป๋า descriptor) + + + Error: %1 + ข้อผิดพลาด: %1 + + + Warning: %1 + คำเตือน: %1 + + + Date: %1 + + วันที่: %1 + + + Amount: %1 + + จำนวน: %1 + + + Wallet: %1 + + กระเป๋าเงิน: %1 + + + + Type: %1 + + ประเภท: %1 + + + + Label: %1 + + ป้ายกำกับ: %1 + + + + Address: %1 + + ที่อยู่: %1 + + + + Sent transaction + การทำธุรกรรมที่ส่งออก + + + Incoming transaction + การทำธุรกรรมที่เข้ามา + + + HD key generation is <b>enabled</b> + การสร้างคีย์ HD ถูกเปิดใช้งาน + + + HD key generation is <b>disabled</b> + การสร้างคีย์ HD คือ<b>พิการ</b> + + + Private key <b>disabled</b> + กุญแจส่วนตัว <b>พิการ</b> + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + กระเป๋าเงินคือ <b>เข้ารหัส</b> และปัจจุบัน <b>ปลดล็อก</b> + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + กระเป๋าสตางค์คือ <b>เข้ารหัส</b> และปัจจุบัน <b>ล็อค</b> + + + Original message: + ข้อความต้นฉบับ + + + + UnitDisplayStatusBarControl + + Unit to show amounts in. Click to select another unit. + หน่วยเพื่อแสดงจำนวนใน. คลิกเพื่อเลือกหน่วยอื่น. + + + + CoinControlDialog + + Coin Selection + การเลือกเหรียญ + + + Quantity: + ปริมาณ: + + + Bytes: + ไบต์ + + + Amount: + จำนวน + + + Fee: + ค่าธรรมเนียม + + + After Fee: + หลังค่าธรรมเนียม: + + + Change: + การเปลี่ยนแปลง + + + (un)select all + เลือกทั้งหมด (ยกเลิก) + + + List mode + โหมดรายการ + + + Amount + จำนวน: + + + Received with label + ได้รับพร้อมป้าย + + + Received with address + รับพร้อมที่อยู่ + + + Date + วันที่ + + + Confirmations + การยืนยัน + + + Confirmed + ยืนยัน + + + Copy amount + จำนวนคัดลอก + + + &Copy address + ที่อยู่ &Copy + + + Copy &label + คัดลอก & ป้าย + + + Copy &amount + คัดลอก &จำนวน + + + Copy transaction &ID and output index + คัดลอกธุรกรรม &ID และดัชนีผลลัพธ์ + + + L&ock unspent + ปิดการใช้ที่ยังไม่ถูกใช้ + + + &Unlock unspent + &ปลดล็อกที่ยังไม่ได้ใช้ + + + Copy quantity + จำนวนสำเนา + + + Copy after fee + คัดลอกหลังค่าธรรมเนียม + + + Copy bytes + คัดลอกไบต์ + + + Copy change + การเปลี่ยนแปลงข้อความ + + + (%1 locked) + (*%1 ถูกล็อค) + + + Can vary +/- %1 satoshi(s) per input. + สามารถเปลี่ยนแปลงได้ +/- %1 ซาโตชิ (s) ต่อการป้อนข้อมูล + + + (no label) + ไม่มีป้ายกำกับ + + + change from %1 (%2) + เปลี่ยนจาก %1 (%2) + + + (change) + (เปลี่ยน) + + + + CreateWalletActivity + + Create Wallet + Title of window indicating the progress of creation of a new wallet. + สร้างกระเป๋า + + + Creating Wallet <b>%1</b>… + Descriptive text of the create wallet progress window which indicates to the user which wallet is currently being created. + การสร้างกระเป๋า <b>%1</b>… + + + Create wallet failed + สร้างกระเป๋าเงินล้มเหลว + + + Create wallet warning + คำเตือนการสร้างกระเป๋า + + + Can't list signers + ไม่สามารถระบุผู้ลงชื่อได้ + + + Too many external signers found + พบผู้ลงชื่อภายนอกมากเกินไป + + + + LoadWalletsActivity + + Load Wallets + Title of progress window which is displayed when wallets are being loaded. + โหลดกระเป๋า + + + Loading wallets… + Descriptive text of the load wallets progress window which indicates to the user that wallets are currently being loaded. + กำลังโหลดกระเป๋าเงิน… + + + + MigrateWalletActivity + + Migrate wallet + ย้ายกระเป๋าเงิน + + + Are you sure you wish to migrate the wallet <i>%1</i>? + คุณแน่ใจไหมว่าคุณต้องการย้ายกระเป๋า %1? + + + Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made. +If this wallet contains any watchonly scripts, a new wallet will be created which contains those watchonly scripts. +If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts. + +The migration process will create a backup of the wallet before migrating. This backup file will be named <wallet name>-<timestamp>.legacy.bak and can be found in the directory for this wallet. In the event of an incorrect migration, the backup can be restored with the "Restore Wallet" functionality. + การย้ายกระเป๋าจะทำให้กระเป๋านี้กลายเป็นกระเป๋าหรือหลายๆ กระเป๋าที่มีคำอธิบาย (descriptor wallets) กระเป๋าสำรองใหม่จะต้องถูกสร้างขึ้น +หากกระเป๋านี้มีสคริปต์ที่ดูได้เท่านั้น (watchonly scripts) จะมีกระเป๋าใหม่ที่สร้างขึ้นซึ่งมีสคริปต์เหล่านั้น +หากกระเป๋านี้มีสคริปต์ที่แก้ไขได้แต่ไม่ได้ติดตาม (solvable but not watched scripts) จะมีกระเป๋าใหม่ที่แตกต่างออกไปซึ่งมีสคริปต์เหล่านั้น + + + Migrate Wallet + ย้ายกระเป๋าเงิน + + + Migrating Wallet <b>%1</b>… + กำลังย้ายกระเป๋าเงิน %1… + + + The wallet '%1' was migrated successfully. + กระเป๋าเงิน '%1' ถูกย้ายเรียบร้อยแล้ว + + + Watchonly scripts have been migrated to a new wallet named '%1'. + สคริปต์แบบดูเฉยๆ ถูกย้ายไปยังกระเป๋าใหม่ที่ชื่อว่า '%1' + + + Solvable but not watched scripts have been migrated to a new wallet named '%1'. + สคริปต์ที่สามารถแก้ไขได้แต่ไม่ได้ติดตามได้ถูกย้ายไปยังกระเป๋าใหม่ที่ชื่อว่า '%1' + + + Migration failed + การย้ายล้มเหลว + + + Migration Successful + การย้ายสำเร็จ + + + + OpenWalletActivity + + Open wallet failed + เปิดกระเป๋าล้มเหลว + + + Open wallet warning + คำเตือนเปิดกระเป๋า + + + Open Wallet + Title of window indicating the progress of opening of a wallet. + เปิดกระเป๋า + + + + RestoreWalletActivity + + Restore Wallet + Title of progress window which is displayed when wallets are being restored. + กู้กระเป๋าเงิน + + + Restore wallet failed + Title of message box which is displayed when the wallet could not be restored. + การกู้คืนกระเป๋าเงินล้มเหลว + + + Restore wallet warning + Title of message box which is displayed when the wallet is restored with some warning. + คำเตือนการกู้คืนกระเป๋าเงิน + + + Restore wallet message + Title of message box which is displayed when the wallet is successfully restored. + กู้คืนข้อความกระเป๋าเงิน + + + + WalletController + + Close wallet + ปิดกระเป๋า + + + Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. + การปิดกระเป๋าไว้เป็นเวลานานเกินไปอาจทำให้ต้องซิงค์ข้อมูลทั้งสายอีกครั้งหากเปิดใช้งานการตัดทอน + + + Close all wallets + ปิดกระเป๋าทั้งหมด + + + Are you sure you wish to close all wallets? + คุณมั่นใจไหมว่าคุณต้องการปิดกระเป๋าทั้งหมด? + + + + CreateWalletDialog + + Create Wallet + สร้างกระเป๋า + + + You are one step away from creating your new wallet! + คุณอยู่แค่ก้าวเดียวจากการสร้างกระเป๋าเงินใหม่ของคุณ! + + + Please provide a name and, if desired, enable any advanced options + กรุณาระบุชื่อและหากต้องการ โปรดเปิดใช้งานตัวเลือกขั้นสูง + + + Wallet Name + ชื่อกระเป๋าเงิน + + + Wallet + กระเป๋าสตางค์ + + + Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice. + เข้ารหัสกระเป๋าเงิน กระเป๋าเงินจะถูกเข้ารหัสด้วยรหัสผ่านที่คุณเลือก + + + Encrypt Wallet + เข้ารหัสกระเป๋าเงิน + + + Advanced Options + ตัวเลือกขั้นสูง + + + Disable private keys for this wallet. Wallets with private keys disabled will have no private keys and cannot have an HD seed or imported private keys. This is ideal for watch-only wallets. + "ปิดการใช้งานคีย์ส่วนตัวสำหรับกระเป๋านี้ กระเป๋าที่ปิดการใช้งานคีย์ส่วนตัวจะไม่มีคีย์ส่วนตัวและไม่สามารถมีเมล็ด HD หรือคีย์ส่วนตัวที่นำเข้าได้ นี่เหมาะสำหรับกระเป๋าที่ดูอย่างเดียว" + + + Disable Private Keys + ปิดกุญแจส่วนตัว + + + Make a blank wallet. Blank wallets do not initially have private keys or scripts. Private keys and addresses can be imported, or an HD seed can be set, at a later time. + สร้างกระเป๋าเปล่า กระเป๋าเปล่าเริ่มต้นจะไม่มีคีย์ส่วนตัวหรือสคริปต์ คีย์ส่วนตัวและที่อยู่สามารถนำเข้าได้ หรือสามารถตั้งค่า HD seed ในภายหลัง + + + Make Blank Wallet + ทำกระเป๋าว่าง + + + Use an external signing device such as a hardware wallet. Configure the external signer script in wallet preferences first. + ใช้อุปกรณ์เซ็นต์ภายนอก เช่น กระเป๋าเงินฮาร์ดแวร์ กำหนดสคริปต์เซ็นต์ภายนอกในการตั้งค่ากระเป๋าเงินก่อน + + + External signer + ผู้เซ็นภายนอก + + + Create + สร้าง + + + Compiled without external signing support (required for external signing) + "External signing" means using devices such as hardware wallets. + คอมไพล์โดยไม่มีการสนับสนุนการลงชื่อภายนอก (ซึ่งจำเป็นสำหรับการลงชื่อภายนอก) + + + + EditAddressDialog + + Edit Address + แก้ไขที่อยู่ + + + &Label + ป้าย + + + The label associated with this address list entry + ป้ายกำกับที่เกี่ยวข้องกับรายการที่อยู่ในรายการนี้ + + + The address associated with this address list entry. This can only be modified for sending addresses. + ที่อยู่ที่เชื่อมโยงกับรายการที่อยู่ในลิสต์นี้ นี้สามารถแก้ไขได้เฉพาะสำหรับที่อยู่ในการส่ง + + + &Address + ที่อยู่ + + + New sending address + ที่อยู่สำหรับการส่งใหม่ + + + Edit receiving address + แก้ไขที่อยู่สำหรับการรับ + + + Edit sending address + แก้ไขที่อยู่การส่ง + + + The entered address "%1" is not a valid Bitcoin address. + อยู่ที่ป้อน "%1" ไม่ใช่ที่อยู่ Bitcoin ที่ถูกต้อง + + + Address "%1" already exists as a receiving address with label "%2" and so cannot be added as a sending address. + ที่อยู่ "%1" มีอยู่แล้วในฐานะที่อยู่รับที่มีป้ายชื่อ "%2" และดังนั้นจึงไม่สามารถเพิ่มเป็นที่อยู่ส่งได้ + + + The entered address "%1" is already in the address book with label "%2". + ที่อยู่ "%1" ที่ป้อนเข้าไปมีอยู่ในสมุดที่อยู่แล้วพร้อมป้ายกำกับ "%2" + + + Could not unlock wallet. + ไม่สามารถปลดล็อกกระเป๋าเงินได้ + + + New key generation failed. + การสร้างคีย์ใหม่ล้มเหลว + + + + FreespaceChecker + + A new data directory will be created. + ไดเรกทอรีข้อมูลใหม่จะถูกสร้างขึ้น + + + name + ชื่อ + + + Directory already exists. Add %1 if you intend to create a new directory here. + ไดเรกทอรีมีอยู่แล้ว เพิ่ม %1 หากคุณต้องการสร้างไดเรกทอรีใหม่ที่นี่ + + + Path already exists, and is not a directory. + เส้นทางมีอยู่แล้วและไม่ใช่ไดเรกทอรี + + + Cannot create data directory here. + ไม่สามารถสร้างไดเรกทอรีข้อมูลที่นี่ได้ + + + + Intro + + Bitcoin + บิตคอยน์ + + + %n GB of space available + + %n GB ของพื้นที่ที่ว่าง + + + + (of %n GB needed) + + (ของ %n GB ที่ต้องการ) + + + + (%n GB needed for full chain) + + (%n GB ที่ต้องการสำหรับโซ่ทั้งหมด) + + + + Choose data directory + เลือกไดเรกทอรีข้อมูล + + + At least %1 GB of data will be stored in this directory, and it will grow over time. + อย่างน้อย %1 GB ของข้อมูลจะถูกจัดเก็บในไดเรกทอรีนี้ และมันจะเติบโตขึ้นตามเวลา + + + Approximately %1 GB of data will be stored in this directory. + ประมาณ %1 GB ของข้อมูลจะถูกเก็บไว้ในไดเรกทอรีนี้ + + + (sufficient to restore backups %n day(s) old) + Explanatory text on the capability of the current prune target. + + (เพียงพอสำหรับการกู้คืนข้อมูลสำรองที่มีอายุ %n วัน) + + + + %1 will download and store a copy of the Bitcoin block chain. + %1 จะดาวน์โหลดและเก็บสำเนาของบล็อกเชนของบิตคอยน์ + + + The wallet will also be stored in this directory. + กระเป๋าเงินจะถูกเก็บไว้ในไดเรกทอรี่นี้ด้วย + + + Error: Specified data directory "%1" cannot be created. + ข้อผิดพลาด: ไม่สามารถสร้างไดเรกทอรีข้อมูลที่ระบุ "%1" ได้ + + + Error + ข้อผิดพลาด + + + Welcome + ยินดีต้อนรับ + + + Welcome to %1. + ยินดีต้อนรับสู่ %1 + + + As this is the first time the program is launched, you can choose where %1 will store its data. + เนื่องจากนี่เป็นครั้งแรกที่โปรแกรมถูกเปิดใช้งาน, คุณสามารถเลือกที่ที่ %1 จะเก็บข้อมูลของมัน + + + Limit block chain storage to + จำกัดการจัดเก็บบล็อกเชนถึง + + + Reverting this setting requires re-downloading the entire blockchain. It is faster to download the full chain first and prune it later. Disables some advanced features. + การย้อนกลับการตั้งค่านี้ต้องการการดาวน์โหลดบล็อกเชนทั้งหมดใหม่ การดาวน์โหลดทั้งชุดเชนก่อนแล้วค่อยตัดทอนภายหลังจะเร็วกว่า ปิดการใช้งานคุณสมบัติขั้นสูงบางอย่าง + + + GB + กิกะไบต์ + + + This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off. + การซิงโครไนซ์เริ่มต้นนี้ต้องการทรัพยากรมาก และอาจเปิดเผยปัญหาฮาร์ดแวร์ที่เกิดขึ้นกับคอมพิวเตอร์ของคุณซึ่งก่อนหน้านี้อาจไม่ถูกสังเกตเห็น ทุกครั้งที่คุณเรียกใช้ %1 มันจะดำเนินการดาวน์โหลดต่อจากจุดที่มันหยุดไว้ + + + When you click OK, %1 will begin to download and process the full %4 block chain (%2 GB) starting with the earliest transactions in %3 when %4 initially launched. + "เมื่อคุณคลิกตกลง, %1 จะเริ่มดาวน์โหลดและประมวลผลบล็อกเชน %4 ทั้งหมด (%2 GB) โดยเริ่มจากธุรกรรมแรกสุดใน %3 เมื่อ %4 เริ่มต้นเปิดตัว" + + + If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low. + "ถ้าคุณได้เลือกที่จะจำกัดการจัดเก็บบล็อกเชน (การตัดทอน), ข้อมูลประวัติยังคงต้องถูกดาวน์โหลดและประมวลผล, แต่จะถูกลบหลังจากนั้นเพื่อรักษาการใช้งานดิสก์ของคุณให้ต่ำ." + + + Use the default data directory + ใช้ไดเร็กทอรีข้อมูลเริ่มต้น + + + Use a custom data directory: + ใช้ไดเรกทอรีข้อมูลที่กำหนดเอง: + + + + HelpMessageDialog + + version + เวอร์ชัน + + + About %1 + เกี่ยวกับ %1 + + + Command-line options + ตัวเลือกบรรทัดคำสั่ง + + + + ShutdownWindow + + %1 is shutting down… + %1 กำลังปิดการทำงาน… + + + Do not shut down the computer until this window disappears. + อย่าปิดเครื่องคอมพิวเตอร์จนกว่าหน้าต่างนี้จะหายไป + + + + ModalOverlay + + Form + จาก + + + Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. + ธุรกรรมล่าสุดอาจยังไม่ปรากฏ และดังนั้นยอดคงเหลือในกระเป๋าของคุณอาจไม่ถูกต้อง ข้อมูลนี้จะถูกต้องเมื่อกระเป๋าของคุณเสร็จสิ้นการซิงค์กับเครือข่ายบิตคอยน์ ตามที่อธิบายไว้ด้านล่าง + + + Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. + การพยายามใช้บิตคอยน์ที่ได้รับผลกระทบจากธุรกรรมที่ยังไม่ได้แสดงจะไม่ได้รับการยอมรับจากเครือข่าย + + + Number of blocks left + จำนวนบล็อกที่เหลือ + + + Unknown… + ไม่ทราบ + + + calculating… + กำลังคำนวณ + + + Last block time + เวลาบล็อกสุดท้าย + + + Progress + ความก้าวหน้า + + + Progress increase per hour + ความก้าวหน้าที่เพิ่มขึ้นต่อชั่วโมง + + + Estimated time left until synced + เวลาที่เหลือที่คาดการณ์จนกว่าจะซิงค์เสร็จ + + + Hide + ซ่อน + + + Esc + "Esc" (อีสเคป) + + + %1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain. + %1 กำลังซิงค์อยู่ในขณะนี้ มันจะดาวน์โหลดหัวข้อและบล็อกจากเพื่อนและตรวจสอบพวกมันจนกว่าจะถึงจุดสูงสุดของบล็อกเชน + + + Unknown. Syncing Headers (%1, %2%)… + ไม่ทราบ กำลังซิงค์ส่วนหัว (%1, %2%)… + + + Unknown. Pre-syncing Headers (%1, %2%)… + ไม่รู้จัก กำลังเตรียมข้อมูลหัวข้อ (%1, %2%)… + + + + OpenURIDialog + + Open bitcoin URI + เปิด URI ของบิตคอยน์ + + + URI: + ยูอาร์ไอ: + + + Paste address from clipboard + Tooltip text for button that allows you to paste an address that is in your clipboard. + วางที่อยู่จากคลิปบอร์ด + + + + OptionsDialog + + Options + ตัวเลือก + + + &Main + &หลัก + + + Automatically start %1 after logging in to the system. + เริ่ม %1 อัตโนมัติหลังจากเข้าสู่ระบบ + + + &Start %1 on system login + เริ่ม %1 เมื่อเข้าสู่ระบบ + + + Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain. + การเปิดใช้งานการตัดข้อมูลจะลดพื้นที่ดิสก์ที่จำเป็นในการเก็บข้อมูลธุรกรรมอย่างมีนัยสำคัญ บล็อกทั้งหมดยังคงได้รับการตรวจสอบความถูกต้องอย่างเต็มที่ การย้อนกลับการตั้งค่านี้ต้องดาวน์โหลดบล็อกเชนทั้งหมดใหม่อีกครั้ง + + + Size of &database cache + ขนาดของแคชฐานข้อมูล + + + Number of script &verification threads + จำนวนของสคริปต์และเธรดการตรวจสอบ + + + Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! + เส้นทางเต็มไปยังสคริปต์ที่เข้ากันได้กับ %1 (เช่น C:\Downloads\hwi.exe หรือ /Users/you/Downloads/hwi.py). ระวัง: มัลแวร์อาจขโมยเหรียญของคุณ! + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + ที่อยู่ IP ของพร็อกซี (เช่น IPv4: 127.0.0.1 / IPv6: ::1) + + + Shows if the supplied default SOCKS5 proxy is used to reach peers via this network type. + แสดงว่าการใช้พร็อกซี SOCKS5 ค่าเริ่มต้นที่จัดเตรียมไว้ถูกใช้เพื่อเข้าถึงเพื่อนผ่านประเภทเครือข่ายนี้ + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu. + ลดขนาดแทนที่จะปิดแอปพลิเคชันเมื่อปิดหน้าต่าง เมื่อเปิดใช้งานตัวเลือกนี้ แอปพลิเคชันจะถูกปิดเฉพาะเมื่อเลือก Exit ในเมนู + + + Font in the Overview tab: + ฟอนต์ในแท็บภาพรวม: + + + Options set in this dialog are overridden by the command line: + ตัวเลือกที่ตั้งค่าในกล่องโต้ตอบนี้จะถูกเขียนทับโดยบรรทัดคำสั่ง: + + + Open the %1 configuration file from the working directory. + เปิดไฟล์การตั้งค่า %1 จากไดเรกทอรีทำงาน + + + Open Configuration File + เปิดไฟล์การตั้งค่า + + + Reset all client options to default. + รีเซ็ตตัวเลือกทั้งหมดของลูกค้าเป็นค่าเริ่มต้น + + + &Reset Options + ตัวเลือกการรีเซ็ต + + + &Network + และเครือข่าย + + + Prune &block storage to + ตัดทอนและบล็อกที่เก็บข้อมูลไปที่ + + + Reverting this setting requires re-downloading the entire blockchain. + การคืนค่านี้ต้องการการดาวน์โหลดบล็อกเชนทั้งหมดอีกครั้ง + + + Connect to the Bitcoin network through a SOCKS5 proxy. + เชื่อมต่อกับเครือข่าย Bitcoin ผ่านพร็อกซี SOCKS5. + + + &Connect through SOCKS5 proxy (default proxy): + เชื่อมต่อผ่านพร็อกซี่ SOCKS5 (พร็อกซี่เริ่มต้น): + + + Proxy &IP: + พร็อกซี & ไอพี + + + Used for reaching peers via: + ใช้สำหรับการติดต่อเพื่อนร่วมงานผ่าน: + + + IPv4 + ไอพีวี4 + + + IPv6 + ไอพีวี6 + + + Tor + ทอร์. + + + &Window + หน้าต่าง + + + Show the icon in the system tray. + แสดงไอคอนในถาดระบบ + + + &Show tray icon + แสดงไอคอนถาด + + + Show only a tray icon after minimizing the window. + แสดงเฉพาะไอคอนถาดหลังจากย่อหน้าต่าง + + + &Minimize to the tray instead of the taskbar + ย่อไปที่ถาดแทนที่จะเป็นแถบงาน + + + &Display + แสดงผล + + + User Interface &language: + อินเตอร์เฟซผู้ใช้ & ภาษา + + + The user interface language can be set here. This setting will take effect after restarting %1. + คุณสามารถตั้งค่าภาษาอินเตอร์เฟซผู้ใช้ที่นี่ การตั้งค่านี้จะมีผลหลังจากการรีสตาร์ท %1 + + + &Unit to show amounts in: + หน่วยที่จะแสดงจำนวนใน: + + + Choose the default subdivision unit to show in the interface and when sending coins. + เลือกหน่วยย่อยเริ่มต้นที่จะแสดงในอินเทอร์เฟซและเมื่อส่งเหรียญ + + + Third-party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |. + URL ของบุคคลที่สาม (เช่น ตัวสำรวจบล็อก) ที่ปรากฏในแท็บการทำธุรกรรมในฐานะตัวเลือกในเมนูบริบท โดยที่ %s ใน URL จะถูกแทนที่ด้วยแฮชของธุรกรรม และ URL หลายรายการจะถูกแยกด้วยเครื่องหมาย | + + + &Third-party transaction URLs + ลิงก์ธุรกรรมของบุคคลที่สาม + + + Whether to show coin control features or not. + จะแสดงคุณสมบัติการควบคุมเหรียญหรือไม่ + + + Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services. + เชื่อมต่อกับเครือข่าย Bitcoin ผ่านพร็อกซี SOCKS5 แยกต่างหากสำหรับบริการ Tor onion + + + Use separate SOCKS&5 proxy to reach peers via Tor onion services: + ใช้พร็อกซี่ SOCKS5 แยกต่างหากเพื่อเชื่อมต่อกับเพื่อนผ่านบริการ Tor onion + + + &OK + โอเค + + + &Cancel + ยกเลิก + + + Compiled without external signing support (required for external signing) + "External signing" means using devices such as hardware wallets. + คอมไพล์โดยไม่มีการสนับสนุนการลงชื่อภายนอก (ซึ่งจำเป็นสำหรับการลงชื่อภายนอก) + + + default + ค่าเริ่มต้น + + + none + ไม่มี + + + Confirm options reset + Window title text of pop-up window shown when the user has chosen to reset options. + ยืนยันการรีเซ็ตตัวเลือก + + + Client restart required to activate changes. + Text explaining that the settings changed will not come into effect until the client is restarted. + จำเป็นต้องรีสตาร์ทไคลเอนต์เพื่อเปิดใช้งานการเปลี่ยนแปลง + + + Current settings will be backed up at "%1". + Text explaining to the user that the client's current settings will be backed up at a specific location. %1 is a stand-in argument for the backup location's path. + การตั้งค่าปัจจุบันจะถูกสำรองไว้ที่ "%1" + + + Client will be shut down. Do you want to proceed? + Text asking the user to confirm if they would like to proceed with a client shutdown. + ลูกค้าจะถูกปิดลง คุณต้องการดำเนินการต่อไหม? + + + Configuration options + Window title text of pop-up box that allows opening up of configuration file. + ตัวเลือกการกำหนดค่า + + + The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file. + Explanatory text about the priority order of instructions considered by client. The order from high to low being: command-line, configuration file, GUI settings. + ไฟล์การตั้งค่าถูกใช้เพื่อระบุทางเลือกผู้ใช้ขั้นสูงที่จะแทนที่การตั้งค่าของ GUI นอกจากนี้ ตัวเลือกจากบรรทัดคำสั่งใดๆ จะทับไฟล์การตั้งค่านี้ + + + Continue + ต่อไป + + + Cancel + ยกเลิก + + + Error + ข้อผิดพลาด + + + The configuration file could not be opened. + ไม่สามารถเปิดไฟล์การตั้งค่าได้ + + + This change would require a client restart. + การเปลี่ยนแปลงนี้จะต้องการการรีสตาร์ทของไคลเอนต์ + + + The supplied proxy address is invalid. + ที่อยู่พร็อกซีที่ให้มานั้นไม่ถูกต้อง + + + + OptionsModel + + Could not read setting "%1", %2. + "ไม่สามารถอ่านการตั้งค่า "%1" ได้, %2" + + + + OverviewPage + + Form + จาก + + + 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. + ข้อมูลที่แสดงอาจจะล้าสมัย กระเป๋าของคุณจะทำการซิงค์อัตโนมัติกับเครือข่าย Bitcoin หลังจากที่เชื่อมต่อเสร็จสิ้นแล้ว แต่กระบวนการนี้ยังไม่เสร็จสมบูรณ์ + + + Watch-only: + ดูอย่างเดียว + + + Available: + พร้อมใช้งาน + + + Your current spendable balance + ยอดคงเหลือที่สามารถใช้ได้ในปัจจุบัน + + + Pending: + รอดำเนินการ + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + ยอดรวมของธุรกรรมที่ยังไม่ได้รับการยืนยัน และยังไม่นับรวมในยอดคงเหลือที่สามารถใช้จ่ายได้ + + + Immature: + ยังไม่โต + + + Mined balance that has not yet matured + ยอดที่ขุดได้ซึ่งยังไม่ครบกำหนด + + + Balances + ยอดคงเหลือ + + + Total: + รวม: + + + Your current total balance + ยอดคงเหลือทั้งหมดของคุณในปัจจุบัน + + + Your current balance in watch-only addresses + ยอดคงเหลือปัจจุบันของคุณในที่อยู่สำหรับดูอย่างเดียว + + + Spendable: + ใช้จ่ายได้ + + + Recent transactions + การทำธุรกรรมล่าสุด + + + Mined balance in watch-only addresses that has not yet matured + ยอดคงเหลือที่ถูกขุดในที่อยู่ที่ดูได้เท่านั้นซึ่งยังไม่ครบกำหนด + + + Current total balance in watch-only addresses + ยอดคงเหลือทั้งหมดปัจจุบันในที่อยู่ที่ดูได้อย่างเดียว + + + Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings->Mask values. + โหมดความเป็นส่วนตัวถูกเปิดใช้งานสำหรับแท็บภาพรวม หากต้องการแสดงค่า ให้ยกเลิกการเลือก การตั้งค่า->ปิดการซ่อนค่า + + + + PSBTOperationsDialog + + PSBT Operations + การดำเนินงาน + + + Sign Tx + ลงชื่อ Tx + + + Broadcast Tx + การออกอากาศ Tx + + + Copy to Clipboard + คัดลอกไปยังคลิปบอร์ด (Khat-lok pai yang klip-bord) + + + Save… + บันทึก... + + + Close + ปิด (bpit) + + + Failed to load transaction: %1 + ไม่สามารถโหลดธุรกรรมได้: %1 + + + Failed to sign transaction: %1 + ล้มเหลวในการเซ็นต์ธุรกรรม: %1 + + + Cannot sign inputs while wallet is locked. + ไม่สามารถเซ็นข้อมูลขาเข้าได้เมื่อกระเป๋าสตางค์ถูกล็อก + + + Could not sign any more inputs. + ไม่สามารถลงนามการป้อนข้อมูลเพิ่มเติมได้ (Mai samart long nam kan phon khomooht permum dai). + + + Signed %1 inputs, but more signatures are still required. + ลงชื่อ %1 ข้อมูลเข้าแล้ว แต่ยังต้องการลายเซ็นเพิ่มเติม + + + Signed transaction successfully. Transaction is ready to broadcast. + เซ็นธุรกรรมสำเร็จแล้ว ธุรกรรมพร้อมที่จะถ่ายทอด + + + Unknown error processing transaction. + เกิดข้อผิดพลาดที่ไม่รู้จักในการประมวลผลธุรกรรม + + + Transaction broadcast successfully! Transaction ID: %1 + การถ่ายทอดธุรกรรมสำเร็จ! รหัสธุรกรรม: %1 + + + Transaction broadcast failed: %1 + การส่งธุรกรรมล้มเหลว: %1 + + + PSBT copied to clipboard. + PSBT คัดลอกไปยังคลิปบอร์ดแล้ว + + + Save Transaction Data + บันทึกข้อมูลธุรกรรม + + + Partially Signed Transaction (Binary) + Expanded name of the binary PSBT file format. See: BIP 174. + ธุรกรรมที่ลงนามบางส่วน (ไบนารี) + + + PSBT saved to disk. + PSBT ถูกบันทึกลงดิสก์. + + + Sends %1 to %2 + ส่ง %1 ไปยัง %2 + + + own address + ที่อยู่ของตนเอง + + + Unable to calculate transaction fee or total transaction amount. + ไม่สามารถคำนวณค่าธรรมเนียมการทำรายการหรือยอดรวมการทำรายการได้ + + + Pays transaction fee: + ชำระค่าธรรมเนียมการทำธุรกรรม: + + + or + หรือ + + + Transaction has %1 unsigned inputs. + ธุรกรรมมีอินพุตที่ไม่ได้เซ็น %1 รายการ + + + Transaction is missing some information about inputs. + การทำธุรกรรมขาดข้อมูลบางอย่างเกี่ยวกับอินพุต + + + Transaction still needs signature(s). + การทำธุรกรรมยังต้องการลายเซ็น(s). + + + (But no wallet is loaded.) + (แต่ว่าไม่มีกระเป๋าเงินถูกโหลด.) + + + (But this wallet cannot sign transactions.) + (แต่กระเป๋าเงินนี้ไม่สามารถลงนามธุรกรรมได้) + + + (But this wallet does not have the right keys.) + (แต่กระเป๋าเงินนี้ไม่มีคีย์ที่ถูกต้อง) + + + Transaction is fully signed and ready for broadcast. + การทำธุรกรรมลงนามครบถ้วนแล้วและพร้อมสำหรับการประกาศ + + + Transaction status is unknown. + สถานะของธุรกรรมไม่ทราบแน่ชัด + + + + PaymentServer + + Payment request error + ข้อผิดพลาดในการขอชำระเงิน + + + Cannot start bitcoin: click-to-pay handler + ไม่สามารถเริ่มต้นบิตคอยน์: ตัวจัดการคลิกเพื่อจ่าย + + + URI handling + การจัดการ URI + + + 'bitcoin://' is not a valid URI. Use 'bitcoin:' instead. + 'bitcoin://' ไม่ใช่ URI ที่ถูกต้อง ใช้ 'bitcoin:' แทน + + + Cannot process payment request because BIP70 is not supported. +Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored. +If you are receiving this error you should request the merchant provide a BIP21 compatible URI. + ไม่สามารถดำเนินการคำขอชำระเงินได้เนื่องจาก BIP70 ไม่ได้รับการรองรับ +เนื่องจากมีข้อบกพร่องด้านความปลอดภัยอย่างแพร่หลายในการใช้ BIP70 จึงขอแนะนำอย่างยิ่งให้เพิกเฉยต่อคำแนะนำของพ่อค้าในการเปลี่ยนกระเป๋าเงิน +หากคุณได้รับข้อผิดพลาดนี้คุณควรขอให้พ่อค้าจัดเตรียม URI ที่รองรับ BIP21 + + + URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters. + ไม่สามารถแยก URI ได้! สิ่งนี้อาจเกิดจากที่อยู่ Bitcoin ที่ไม่ถูกต้องหรือพารามิเตอร์ URI ที่ผิดรูปแบบ + + + Payment request file handling + การจัดการไฟล์คำขอการชำระเงิน + + + + PeerTableModel + + Peer + Title of Peers Table column which contains a unique number used to identify a connection. + เพื่อน (Phûuean) + + + Age + Title of Peers Table column which indicates the duration (length of time) since the peer connection started. + อายุ + + + Direction + Title of Peers Table column which indicates the direction the peer connection was initiated from. + ทิศทาง (Thít-thāng) + + + Sent + Title of Peers Table column which indicates the total amount of network information we have sent to the peer. + ส่ง (sòng) + + + Received + Title of Peers Table column which indicates the total amount of network information we have received from the peer. + ได้รับ + + + Address + Title of Peers Table column which contains the IP/Onion/I2P address of the connected peer. + ที่อยู่ + + + Type + Title of Peers Table column which describes the type of peer connection. The "type" describes why the connection exists. + ประเภท + + + Inbound + An Inbound Connection from a Peer. + ขาเข้า +(Pronunciation: kǎa-kâo) + + + Outbound + An Outbound Connection to a Peer. + ออกเดินทาง (òk dern thāng) + + + + RPCConsole + + Local Addresses + ที่อยู่ท้องถิ่น + + + Network addresses that your Bitcoin node is currently using to communicate with other nodes. + ที่อยู่เครือข่ายที่โหนด Bitcoin ของคุณกำลังใช้ในการสื่อสารกับโหนดอื่นๆ + + + Block chain + บล็อกเชน + + + Memory Pool + หน่วยความจำพูล + + + Current number of transactions + จำนวนธุรกรรมปัจจุบัน + + + Memory usage + การใช้งานหน่วยความจำ + + + Wallet: + กระเป๋าสตางค์ + + + (none) + (ไม่มี) + + + Received + ได้รับ + + + Sent + ส่ง (sòng) + + + &Peers + เพื่อนร่วมงาน - - - QObject - %1 didn't yet exit safely… - %1 ยังไม่ออกอย่างปลอดภัย... + Banned peers + เพื่อนที่ถูกแบน (Phuean thi thuk baen) - - %n second(s) - - %n second(s) - + + Select a peer to view detailed information. + เลือกเพื่อนร่วมงานเพื่อดูข้อมูลรายละเอียด - - %n minute(s) - - %n minute(s) - + + Hide Peers Detail + ซ่อนรายละเอียดเพื่อนร่วมงาน - - %n hour(s) - - %n hour(s) - + + Ctrl+X + ตัด (Tàd) - - %n day(s) - - %n day(s) - + + The transport layer version: %1 + เวอร์ชันของชั้นการขนส่ง: %1 - - %n week(s) - - %n week(s) - + + Session ID + รหัสเซสชัน (Rát sét-chân) - - %n year(s) - - %n year(s) - + + Whether we relay transactions to this peer. + ไม่ว่าความเราจะส่งการทำธุรกรรมไปยังเพื่อนนี้หรือไม่ - - - BitcoinGUI - Change the passphrase used for wallet encryption - เปลี่ยนรหัสผ่านที่ใช้สำหรับการเข้ารหัสกระเป๋าเงิน + Transaction Relay + การส่งต่อธุรกรรม (Kan song tor thurakham) - Encrypt the private keys that belong to your wallet - เข้ารหัสกุญแจส่วนตัวที่เป็นของกระเป๋าสตางค์ของคุณ + Starting Block + บล็อกเริ่มต้น (Blók Rêrm Tôn) - Sign messages with your Bitcoin addresses to prove you own them - เซ็นชื่อด้วยข้อความ ที่เก็บ Bitcoin เพื่อแสดงว่าท่านเป็นเจ้าของ bitcoin นี้จริง + Synced Headers + หัวข้อที่ซิงค์ (Huākhāo thī sìngk) - Verify messages to ensure they were signed with specified Bitcoin addresses - ตรวจสอบ ข้อความ เพื่อให้แน่ใจว่า การเซ็นต์ชื่อ ด้วยที่เก็บ Bitcoin แล้ว + Synced Blocks + บล็อกที่ซิงค์ (Blok thi sing) - &File - &ไฟล์ + Last Transaction + ธุรกรรมล่าสุด (Thurakam lasut) - &Settings - &การตั้งค่า + The mapped Autonomous System used for diversifying peer selection. + ระบบอัตโนมัติที่ทำการแมปเพื่อใช้ในการกระจายการเลือกเพื่อน - &Help - &ช่วยเหลือ + Whether we relay addresses to this peer. + Tooltip text for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). + เราจะส่งที่อยู่ให้กับเพื่อนคนนี้หรือไม่ - Tabs toolbar - แถบเครื่องมือแท็บ + Address Relay + Text title for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). + การส่งต่อที่อยู่ (Kān sòng tōr thī̀ yùu) - Connecting to peers… - กำลังเชื่อมต่อ ไปยัง peers… + The total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). + Tooltip text for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). + จำนวนที่อยู่ทั้งหมดที่ได้รับจากเพื่อนนี้ที่ได้รับการประมวลผล (ไม่รวมที่อยู่ที่ถูกยกเลิกเนื่องจากการจำกัดอัตรา) - Request payments (generates QR codes and bitcoin: URIs) - ขอการชำระเงิน (สร้างรหัส QR และ bitcoin: URIs) + The total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. + Tooltip text for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. + จำนวนที่อยู่ทั้งหมดที่ได้รับจากเพื่อนนี้ที่ถูกทิ้ง (ไม่ได้ประมวลผล) เนื่องจากการจำกัดอัตรา - Show the list of used sending addresses and labels - แสดงรายการที่ใช้ในการส่งแอดเดรสและเลเบลที่ใช้แล้ว + Addresses Processed + Text title for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). + ที่อยู่ที่ประมวลผล - Show the list of used receiving addresses and labels - แสดงรายการที่ได้ใช้ในการรับแอดเดรสและเลเบล + Addresses Rate-Limited + Text title for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. + ที่อยู่ถูกจำกัดอัตรา - &Command-line options - &ตัวเลือก Command-line + Node window + หน้าต่างโหนด - - Processed %n block(s) of transaction history. - - ประมวลผล %n บล็อกของประวัติการทำธุรกรรม - + + Current block height + ความสูงของบล็อกปัจจุบัน (Khwam sung khong blok pachuban) - %1 behind - %1 เบื้องหลัง + Open the %1 debug log file from the current data directory. This can take a few seconds for large log files. + เปิดไฟล์บันทึกการดีบัก %1 จากไดเรกทอรีข้อมูลปัจจุบัน ซึ่งอาจใช้เวลาสักครู่สำหรับไฟล์บันทึกขนาดใหญ่ - Catching up… - กำลังติดตามถึงรายการล่าสุด… + Decrease font size + ลดขนาดตัวอักษร - Last received block was generated %1 ago. - บล็อกที่ได้รับล่าสุดถูกสร้างขึ้นเมื่อ %1 ที่แล้ว + Increase font size + เพิ่มขนาดตัวอักษร (Pêr̂m khà-nàd tûa-òk-sŏn) - Transactions after this will not yet be visible. - ธุรกรรมหลังจากนี้จะยังไม่ปรากฏให้เห็น + Permissions + สิทธิ์ (Sìt) or การอนุญาต (Kān Anuyāt) - Error - ข้อผิดพลาด + The direction and type of peer connection: %1 + ทิศทางและประเภทของการเชื่อมต่อระหว่างเพื่อน: %1 - Warning - คำเตือน + Direction/Type + ทิศทาง/ประเภท (Títhāng / Bpràphêd) - Information - ข้อมูล + The BIP324 session ID string in hex. + สตริง ID เซสชัน BIP324 ในรูปแบบเฮกซ์ - Up to date - ปัจจุบัน + The network protocol this peer is connected through: IPv4, IPv6, Onion, I2P, or CJDNS. + โปรโตคอลเครือข่ายที่เพื่อนนี้เชื่อมต่อผ่าน: IPv4, IPv6, Onion, I2P, หรือ CJDNS. - Load PSBT from &clipboard… - โหลด PSBT จากคลิปบอร์ด... + Services + บริการ (Borisat) - Node window - หน้าต่างโหนด + High bandwidth BIP152 compact block relay: %1 + การส่งข้อมูลบล็อกแบบคอมแพค BIP152 ความกว้างแบนด์วิธสูง: %1 - &Sending addresses - &ที่อยู่การส่ง + Connection Time + เวลาเชื่อมต่อ (Wela Chueamto) - &Receiving addresses - &ที่อยู่การรับ + Elapsed time since a novel block passing initial validity checks was received from this peer. + เวลาที่ผ่านไปตั้งแต่ได้รับบล็อกใหม่ที่ผ่านการตรวจสอบความถูกต้องเบื้องต้นจากเพื่อนนี้ - Open Wallet - เปิดกระเป๋าสตางค์ + Last Block + บล็อกสุดท้าย (Blók Sùt Tái) - Open a wallet - เปิดกระเป๋าสตางค์ + Elapsed time since a novel transaction accepted into our mempool was received from this peer. + Tooltip text for the Last Transaction field in the peer details area. + เวลาที่ผ่านไปตั้งแต่การทำธุรกรรมใหม่ที่ได้รับการยอมรับเข้าสู่ mempool ของเราได้รับจากเพื่อนนี้ - Close wallet - ปิดกระเป๋าสตางค์ + Last Send + ส่งสุดท้าย (Song Soot Thai) - Restore Wallet… - Name of the menu item that restores wallet from a backup file. - กู้คืนวอลเล็ต… + Last Receive + ได้รับล่าสุด - Restore a wallet from a backup file - Status tip for Restore Wallet menu item - กู้คืนวอลเล็ตจากไฟล์สำรองข้อมูล + Ping Time + เวลาในการปิง - Close all wallets - ปิด วอลเล็ต ทั้งหมด + The duration of a currently outstanding ping. + ระยะเวลาของปิงที่ยังค้างอยู่ในขณะนี้ - &Mask values - &ค่ามาสก์ + Ping Wait + รอปิง - Load Wallet Backup - The title for Restore Wallet File Windows - โหลดสำรองข้อมูลวอลเล็ต + Min Ping + มินผิง - - %n active connection(s) to Bitcoin network. - A substring of the tooltip. - - %n active connection(s) to Bitcoin network. - + + Time Offset + เวลาออฟเซ็ต - Click for more actions. - A substring of the tooltip. "More actions" are available via the context menu. - คลิกเพื่อดูการดำเนินการเพิ่มเติม + Last block time + เวลาบล็อกสุดท้าย - - - CoinControlDialog - L&ock unspent - L&ock ที่ไม่ได้ใข้ + &Open + เปิด - &Unlock unspent - &ปลดล็อค ที่ไม่ไดใช้ + &Console + &คอนโซล - (no label) - (ไม่มีเลเบล) + &Network Traffic + การรับส่งข้อมูลเครือข่าย - change from %1 (%2) - เปลี่ยน จาก %1 (%2) + Totals + ผลรวม - (change) - (เปลี่ยน) + Debug log file + ไฟล์บันทึกดีบัก - - - CreateWalletActivity - Create Wallet - Title of window indicating the progress of creation of a new wallet. - สร้าง วอลเล็ต + Clear console + ล้างคอนโซล - Creating Wallet <b>%1</b>… - Descriptive text of the create wallet progress window which indicates to the user which wallet is currently being created. - กำลังสร้าง วอลเล็ต <b>%1</b>… + In: + ใน - Create wallet failed - การสร้าง วอลเล็ต ล้มเหลว + Out: + ออก - Create wallet warning - คำเตือน การสร้าง วอลเล็ต + Inbound: initiated by peer + Explanatory text for an inbound peer connection. + ขาเข้า: เริ่มต้นโดยปัสสาวะ - Can't list signers - ไม่สามารถ จัดรายการ ผู้เซ็น + Outbound Full Relay: default + Explanatory text for an outbound peer connection that relays all network information. This is the default behavior for outbound connections. + การส่งต่อแบบเต็มขาออก: ค่าเริ่มต้น - - - LoadWalletsActivity - Load Wallets - Title of progress window which is displayed when wallets are being loaded. - โหลด วอลเล็ต + Outbound Block Relay: does not relay transactions or addresses + Explanatory text for an outbound peer connection that relays network information about blocks and not transactions or addresses. + การส่งบล็อกขาออก: ไม่ส่งต่อธุรกรรมหรือที่อยู่ - Loading wallets… - Descriptive text of the load wallets progress window which indicates to the user that wallets are currently being loaded. - กำลังโหลด วอลเล็ต... + &Copy address + Context menu action to copy the address of a peer. + ที่อยู่ &Copy - + + None + ไม่มี (Mai mee) + + - Intro - - %n GB of space available - - %n GB of space available - + ReceiveCoinsDialog + + &Copy address + ที่อยู่ &Copy - - (of %n GB needed) - - (of %n GB needed) - + + Copy &label + คัดลอก & ป้าย - - (%n GB needed for full chain) - - (%n GB needed for full chain) - + + Copy &amount + คัดลอก &จำนวน - - (sufficient to restore backups %n day(s) old) - Explanatory text on the capability of the current prune target. - - (sufficient to restore backups %n day(s) old) - + + Could not unlock wallet. + ไม่สามารถปลดล็อกกระเป๋าเงินได้ - RPCConsole + ReceiveRequestDialog - Node window - หน้าต่างโหนด + Amount: + จำนวน + + + Wallet: + กระเป๋าสตางค์ + + + &Save Image… + บันทึกรูปภาพ... RecentRequestsTableModel + + Date + วันที่ + + + Label + การส่งออกล้มเหลว + (no label) - (ไม่มีเลเบล) + ไม่มีป้ายกำกับ SendCoinsDialog + + Quantity: + ปริมาณ: + + + Bytes: + ไบต์ + + + Amount: + จำนวน + + + Fee: + ค่าธรรมเนียม + + + After Fee: + หลังค่าธรรมเนียม: + + + Change: + การเปลี่ยนแปลง + + + Hide + ซ่อน + + + Copy quantity + จำนวนสำเนา + + + Copy amount + จำนวนคัดลอก + + + Copy fee + ค่าลอกสำเนา (kâa lók sàm-náo) + + + Copy after fee + คัดลอกหลังค่าธรรมเนียม + + + Copy bytes + คัดลอกไบต์ + + + Copy change + การเปลี่ยนแปลงข้อความ + + + Save Transaction Data + บันทึกข้อมูลธุรกรรม + + + Partially Signed Transaction (Binary) + Expanded name of the binary PSBT file format. See: BIP 174. + ธุรกรรมที่ลงนามบางส่วน (ไบนารี) + + + or + หรือ + Estimated to begin confirmation within %n block(s). @@ -318,23 +2547,140 @@ (no label) - (ไม่มีเลเบล) + ไม่มีป้ายกำกับ + + SendCoinsEntry + + Paste address from clipboard + วางที่อยู่จากคลิปบอร์ด + + + + SignVerifyMessageDialog + + Paste address from clipboard + วางที่อยู่จากคลิปบอร์ด + + TransactionDesc + + Date + วันที่ + + + unknown + ไม่ทราบ (mai saap) + + + own address + ที่อยู่ของตนเอง + matures in %n more block(s) matures in %n more block(s) + + Amount + จำนวน: + TransactionTableModel + + Date + วันที่ + + + Type + ประเภท + + + Label + การส่งออกล้มเหลว + (no label) - (ไม่มีเลเบล) + ไม่มีป้ายกำกับ + + + + TransactionView + + &Copy address + ที่อยู่ &Copy + + + Copy &label + คัดลอก & ป้าย + + + Copy &amount + คัดลอก &จำนวน + + + Comma separated file + Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. + ไฟล์ที่แยกด้วยเครื่องหมายจุลภาค + + + Confirmed + ยืนยัน + + + Date + วันที่ + + + Type + ประเภท + + + Label + การส่งออกล้มเหลว + + + Address + ที่อยู่ + + + Exporting Failed + การส่งออกล้มเหลว + + + + WalletFrame + + Create a new wallet + สร้างกระเป๋าใหม่ + + + Error + ข้อผิดพลาด + + WalletView + + &Export + &ส่งออก + + + Export the data in the current tab to a file + ส่งออกข้อมูลในแท็บปัจจุบันไปยังไฟล์ + + + Wallet Data + Name of the wallet data file format. + ข้อมูลกระเป๋าเงิน + + + Cancel + ยกเลิก + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_tl.ts b/src/qt/locale/bitcoin_tl.ts index f0e34993c48c..49ce14378ad4 100644 --- a/src/qt/locale/bitcoin_tl.ts +++ b/src/qt/locale/bitcoin_tl.ts @@ -90,7 +90,7 @@ Signing is only possible with addresses of the type 'legacy'. There was an error trying to save the address list to %1. Please try again. An error message. %1 is a stand-in argument for the name of the file we attempted to save to. - May mali sa pagsubok na i-save ang listahan ng address sa 1%1. Pakisubukan ulit. + May mali sa pagsubok na i-save ang listahan ng address sa %1. Pakisubukan ulit. Exporting Failed @@ -242,7 +242,7 @@ Signing is only possible with addresses of the type 'legacy'. A fatal error occurred. %1 can no longer continue safely and will quit. - Malubhang pagkakamali ay naganap. 1%1 hindi na pwedeng magpatuloy ng ligtas at ihihinto na. + Malubhang pagkakamali ay naganap. %1 hindi na pwedeng magpatuloy ng ligtas at ihihinto na. Internal error @@ -250,7 +250,7 @@ Signing is only possible with addresses of the type 'legacy'. An internal error occurred. %1 will attempt to continue safely. This is an unexpected bug which can be reported as described below. - May panloob na pagkakamali ang naganap. 1%1 ay magtatangkang ituloy na ligtas. Ito ay hindi inaasahan na problema na maaaring i-ulat katulad ng pagkalarawan sa ibaba. + May panloob na pagkakamali ang naganap. %1 ay magtatangkang ituloy na ligtas. Ito ay hindi inaasahan na problema na maaaring i-ulat katulad ng pagkalarawan sa ibaba. @@ -267,11 +267,11 @@ Signing is only possible with addresses of the type 'legacy'. Error: %1 - Pagkakamali: 1%1 + Pagkakamali: %1 %1 didn't yet exit safely… - 1%1 hindi pa nag-exit ng ligtas... + %1 hindi pa nag-exit ng ligtas... Amount @@ -352,11 +352,11 @@ Signing is only possible with addresses of the type 'legacy'. &About %1 - &Tungkol sa 1%1 + &Tungkol sa %1 Show information about %1 - Ipakita ang impormasyon tungkol sa 1%1 + Ipakita ang impormasyon tungkol sa %1 About &Qt @@ -368,7 +368,7 @@ Signing is only possible with addresses of the type 'legacy'. Modify configuration options for %1 - Baguhin ang mga pagpipilian sa ♦configuration♦ para sa 1%1 + Baguhin ang mga pagpipilian sa ♦configuration♦ para sa %1 Create a new wallet @@ -669,7 +669,7 @@ Signing is only possible with addresses of the type 'legacy'. Error: %1 - Pagkakamali: 1%1 + Pagkakamali: %1 Warning: %1 diff --git a/src/qt/locale/bitcoin_tr.ts b/src/qt/locale/bitcoin_tr.ts index 1ec63f506d63..68888c1ac7bd 100644 --- a/src/qt/locale/bitcoin_tr.ts +++ b/src/qt/locale/bitcoin_tr.ts @@ -1482,6 +1482,11 @@ Taşıma işlemi, taşıma işleminden önce cüzdanın bir yedeğini oluşturac &Start %1 on system login &Açılışta %1 açılsın + + Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. + Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. + Maksimum veritabanı önbellek boyutu. Yeterince RAM'iniz olduğundan emin olun. Daha geniş bir önbellek daha hızlı eşitleme sağlayabilir, bir aşamadan sonra fayda daha az hissedilir. Önbellek boyutunu düşürmek hafıza kullanımını azaltacaktır. Kullanılmayan mempool hafızası bu önbellek ile paylaşılır. + Size of &database cache &veritabanı önbellek boyutu @@ -1490,6 +1495,10 @@ Taşıma işlemi, taşıma işleminden önce cüzdanın bir yedeğini oluşturac Number of script &verification threads Betik &doğrulama iş parçacığı sayısı + + Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. + Yönlendiricideki Bitcoin istemcisini otomatik olarak aç. Bu özellik yalnızca yönlendiriciniz PCP veya NAT-PMP desteğine sahipse ve aktif edilmişse çalışır. Harici port rastgele olabilir. + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) Proxy'nin IP Adresi (ör: IPv4: 127.0.0.1 / IPv6: ::1) @@ -2096,6 +2105,14 @@ Taşıma işlemi, taşıma işleminden önce cüzdanın bir yedeğini oluşturac Number of connections Bağlantı sayısı + + Local Addresses + Yerel adresler + + + Network addresses that your Bitcoin node is currently using to communicate with other nodes. + Bitcoin düğümünüzün diğer düğümlerle iletişim için kullandığı internet adresleri. + Block chain Blok zinciri @@ -2144,6 +2161,10 @@ Taşıma işlemi, taşıma işleminden önce cüzdanın bir yedeğini oluşturac Select a peer to view detailed information. Ayrıntılı bilgi görmek için bir eş seçin. + + Hide Peers Detail + Eş ayrıntılarını gizle + The transport layer version: %1 Taşıma katmanı versiyonu: %1 @@ -3787,6 +3808,10 @@ Cüzdan yedeği geri yüklenemiyor. Assumeutxo data not found for the given blockhash '%s'. Verilen blok hash '%s' için AssumeUTXO verisi bulunamadı. + + Cannot write to directory '%s'; check permissions. + '%s' dizinine yazılamıyor; izinleri kontrol et. + Copyright (C) %i-%i Telif Hakkı (C) %i-%i @@ -3835,6 +3860,10 @@ Cüzdan yedeği geri yüklenemiyor. Error loading block database Blok veritabanının yüklenmesinde hata + + Error loading databases + Veri tabanları yüklenirken hata oluştu + Error opening block database Blok veritabanının açılışı sırasında hata @@ -3855,6 +3884,10 @@ Cüzdan yedeği geri yüklenemiyor. Error: Unable to read wallet's best block locator record Hata: Cüzdan okunamadı en iyi blok bulucu kaydı + + Error: Unable to write data to disk for wallet %s + Hata: Cüzdan %s için diske veri yazılamıyor + Error: Unable to write solvable wallet best block locator record Hata: Cüzdana yazılamadı en iyi blok bulucu kaydı @@ -4159,6 +4192,10 @@ Cüzdan yedeği geri yüklenemiyor. Unsupported logging category %s=%s. Desteklenmeyen günlük kategorisi %s=%s. + + Do you want to rebuild the databases now? + Veritabanlarını şimdi yeniden inşa etmek istiyor musunuz? + Error: Could not add watchonly tx %s to watchonly wallet Hata: Sadece izleme %s cüzdanı. tx izleme cüzdanına eklenemedi @@ -4167,6 +4204,18 @@ Cüzdan yedeği geri yüklenemiyor. Error: Could not delete watchonly transactions. Hata: Yalnızca izlenen işlemler silinemedi. + + Error: Wallet does not exist + Hata: Böyle bir cüzdan yok + + + Error: cannot remove legacy wallet records + Hata: Eski cüzdan kayıtları silinemiyor + + + Not enough file descriptors available. %d available, %d required. + Yeterince dosya açıklayıcısı mevcut değil. Mevcut %d, gereken %d. + User Agent comment (%s) contains unsafe characters. Kullanıcı Aracı açıklaması (%s) güvensiz karakterler içermektedir. diff --git a/src/qt/locale/bitcoin_tt.ts b/src/qt/locale/bitcoin_tt.ts new file mode 100644 index 000000000000..46007f178079 --- /dev/null +++ b/src/qt/locale/bitcoin_tt.ts @@ -0,0 +1,193 @@ + + + AddressBookPage + + Right-click to edit address or label + Адресны яки тамганы үзгәртү өчен уң төймәгә басыгыз + + + Create a new address + Яңа адрес төзегез + + + &New + &Яңа + + + Copy the currently selected address to the system clipboard + Хәзерге вакытта сайланган адресны алмашу системалы буферына күчерегез + + + &Copy + &Күчерү + + + C&lose + Ябу + + + Delete the currently selected address from the list + Хәзерге вакытта сайланган адресны исемлектән алып ташлагыз + + + Enter address or label to search + Эзләү өчен адрес яки ярлык кертегез + + + Export the data in the current tab to a file + Агымдагы вкладкадагы мәгълүматларны файлга экспортлагыз + + + + AddressTableModel + + Label + Тамга + + + Address + Адрес + + + + QObject + + %n second(s) + + + + + + %n minute(s) + + + + + + %n hour(s) + + + + + + %n day(s) + + + + + + %n week(s) + + + + + + %n year(s) + + + + + + + BitcoinGUI + + Processed %n block(s) of transaction history. + + + + + + %n active connection(s) to Bitcoin network. + A substring of the tooltip. + + + + + + + Intro + + %n GB of space available + + + + + + (of %n GB needed) + + + + + + (%n GB needed for full chain) + + + + + + (sufficient to restore backups %n day(s) old) + Explanatory text on the capability of the current prune target. + + + + + + + PeerTableModel + + Address + Title of Peers Table column which contains the IP/Onion/I2P address of the connected peer. + Адрес + + + + RecentRequestsTableModel + + Label + Тамга + + + + SendCoinsDialog + + Estimated to begin confirmation within %n block(s). + + + + + + + TransactionDesc + + matures in %n more block(s) + + + + + + + TransactionTableModel + + Label + Тамга + + + + TransactionView + + Label + Тамга + + + Address + Адрес + + + + WalletView + + Export the data in the current tab to a file + Агымдагы вкладкадагы мәгълүматларны файлга экспортлагыз + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_ur.ts b/src/qt/locale/bitcoin_ur.ts index 1bf6208f8ce8..7104aa29e6e0 100644 --- a/src/qt/locale/bitcoin_ur.ts +++ b/src/qt/locale/bitcoin_ur.ts @@ -39,7 +39,9 @@ &Delete - مٹا + ڈیلیٹ + +  Choose the address to send coins to @@ -51,7 +53,9 @@ C&hoose - چننا + چوز کریں + +  These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. @@ -747,24 +751,24 @@ Signing is only possible with addresses of the type 'legacy'. Warning: %1 - 1%1 انتباہ + %1 انتباہ Date: %1 - 1%1' تاریخ۔ + %1' تاریخ۔ Amount: %1 - 1%1' مقدار + %1' مقدار Wallet: %1 - 1%1' والیٹ + %1' والیٹ @@ -776,13 +780,13 @@ Signing is only possible with addresses of the type 'legacy'. Label: %1 - 1%1'لیبل + %1'لیبل Address: %1 - 1%1' پتہ + %1' پتہ diff --git a/src/qt/locale/bitcoin_uz.ts b/src/qt/locale/bitcoin_uz.ts index 1536fddf58cd..260ae81d2b29 100644 --- a/src/qt/locale/bitcoin_uz.ts +++ b/src/qt/locale/bitcoin_uz.ts @@ -227,6 +227,10 @@ Signing is only possible with addresses of the type 'legacy'. Wallet passphrase was successfully changed. Ҳамён пароли муваффақиятли алмаштирилди. + + Passphrase change failed + Parolni o‘zgartirib bo‘lmadi + The old passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. Hamyon shifrini ochish uchun yordam eski parol noto'g'ri. U null belgini o'z ichiga oladi (ya'ni - nol bayt). Agar parol iborasi ushbu dasturiy ta'minotning 25.0 dan oldingi versiyasida o'rnatilgan bo'lsa, iltimos, faqat birinchi null belgigacha bo'lgan qurilmalar bilan qayta urinib ko'ring (lekin shu narsa emas). @@ -286,6 +290,18 @@ Signing is only possible with addresses of the type 'legacy'. unknown noma'lum + + Embedded "%1" + O'rnatilgan "%1" + + + Default system font "%1" + Standart tizim shrifti "%1" + + + Custom… + Alohida moslashtirilgan... + Amount Miqdor @@ -621,6 +637,10 @@ Signing is only possible with addresses of the type 'legacy'. Up to date Hozirgi kunda + + Ctrl+Q + formatini olib tashlash(Ctrl+Q) + Load Partially Signed Bitcoin Transaction Qisman signlangan Bitkoin tranzaksiyasini yuklash @@ -723,6 +743,10 @@ Signing is only possible with addresses of the type 'legacy'. &Window &Oyna + + Ctrl+M + Abzatsga chek qo'ying.(Ctrl+M) + Zoom Kattalashtirish @@ -771,6 +795,18 @@ Signing is only possible with addresses of the type 'legacy'. A context menu item. The network activity was disabled previously. Ijtimoiy tarmoq faoliyatini yoqish + + Pre-syncing Headers (%1%)… + Sarlavhalarni oldindan sinxronlash (%1%)… + + + Error creating wallet + Hamyonni yaratishda xatolik yuz berdi + + + Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets) + Yangi hamyon yaratib bo'lmadi, dasturiy ta'minot sqlite qo'llab-quvvatlanmasdan tuzilgan (deskriptor hamyonlari uchun talab qilinadi) + Error: %1 Xatolik: %1 @@ -1014,7 +1050,11 @@ Signing is only possible with addresses of the type 'legacy'. Can't list signers Signerlarni ro'yxat shakliga keltirib bo'lmaydi - + + Too many external signers found + Juda koʻp tashqi imzo qoʻyuvchilar topildi + + LoadWalletsActivity @@ -1030,11 +1070,51 @@ Signing is only possible with addresses of the type 'legacy'. MigrateWalletActivity + + Migrate wallet + Hamyonni ko'chirish + + + Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made. +If this wallet contains any watchonly scripts, a new wallet will be created which contains those watchonly scripts. +If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts. + +The migration process will create a backup of the wallet before migrating. This backup file will be named <wallet name>-<timestamp>.legacy.bak and can be found in the directory for this wallet. In the event of an incorrect migration, the backup can be restored with the "Restore Wallet" functionality. + Hamyonni ko'chirish ushbu hamyonni bir yoki bir nechta deskriptor hamyonga aylantiradi. Hamyonning yangi zaxira nusxasini yaratish kerak bo'ladi. +Agar bu hamyonda faqat tomosha skriptlari mavjud bo'lsa, yangi hamyon yaratiladi, unda faqat tomosha qilish uchun skriptlar mavjud. +Agar bu hamyonda echilishi mumkin bo'lgan, lekin tomosha qilinmagan skriptlar bo'lsa, ushbu skriptlarni o'z ichiga olgan boshqa va yangi hamyon yaratiladi. + +Migratsiya jarayoni ko'chirishdan oldin hamyonning zaxira nusxasini yaratadi. Ushbu zaxira fayli 1-2.legacy.bak deb nomlanadi va uni ushbu hamyon katalogida topish mumkin. Noto'g'ri migratsiya bo'lsa, zaxira nusxasini "Hamyonni tiklash" funksiyasi bilan tiklash mumkin. + Migrate Wallet dudlangan cho'chqa go'shti koʻchirish - + + Migrating Wallet <b>%1</b>… + Hamyonni koʻchirish<b>%1</b> + + + The wallet '%1' was migrated successfully. + hamyon '%1' muvaffaqiyatli ko'chirildi. + + + Watchonly scripts have been migrated to a new wallet named '%1'. + Watchonly skriptlari nomli yangi hamyonga ko'chirildi%1 + + + Solvable but not watched scripts have been migrated to a new wallet named '%1'. + Yechish mumkin bo'lgan, lekin ko'rilmagan skriptlar nomli yangi hamyonga o'tkazildi%1 + + + Migration failed + Migratsiya amalga oshmadi + + + Migration Successful + Migratsiya muvaffaqiyatli amalga oshirildi + + OpenWalletActivity @@ -1063,7 +1143,27 @@ Signing is only possible with addresses of the type 'legacy'. Title of progress window which is displayed when wallets are being restored. Hamyonni tiklash - + + Restoring Wallet <b>%1</b>… + Descriptive text of the restore wallets progress window which indicates to the user that wallets are currently being restored. + Wallet tiklanmoqda<b>%1</b> + + + Restore wallet failed + Title of message box which is displayed when the wallet could not be restored. + Hamyonni tiklash amalga oshmadi + + + Restore wallet warning + Title of message box which is displayed when the wallet is restored with some warning. + Hamyonni tiklash haqida ogohlantirish + + + Restore wallet message + Title of message box which is displayed when the wallet is successfully restored. + Hamyon xabarini tiklash + + WalletController @@ -1093,6 +1193,14 @@ Signing is only possible with addresses of the type 'legacy'. Create Wallet Hamyon yaratish + + You are one step away from creating your new wallet! + Siz yangi hamyonni yaratishga bir qadam qoldi! + + + Please provide a name and, if desired, enable any advanced options + Iltimos, nom kiriting va agar xohlasangiz, kengaytirilgan variantlarni yoqing + Wallet Name Hamyon nomi @@ -1230,24 +1338,28 @@ Signing is only possible with addresses of the type 'legacy'. %n GB of space available - + %nGb bo'sh joy mavjud (of %n GB needed) - + (%nGb kerak) (%n GB needed for full chain) - + (To'liq zanjir uchun%n GB kerak) + + Choose data directory + Ma'lumotlar katalogini tanlang + At least %1 GB of data will be stored in this directory, and it will grow over time. Kamida %1 GB ma'lumot bu yerda saqlanadi va vaqtlar davomida o'sib boradi @@ -1308,6 +1420,10 @@ Signing is only possible with addresses of the type 'legacy'. This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off. Ushbu dastlabki sinxronlash juda qiyin va kompyuteringiz bilan ilgari sezilmagan apparat muammolarini yuzaga keltirishi mumkin. Har safar %1 ni ishga tushirganingizda, u yuklab olish jarayonini qayerda to'xtatgan bo'lsa, o'sha yerdan boshlab davom ettiradi. + + When you click OK, %1 will begin to download and process the full %4 block chain (%2 GB) starting with the earliest transactions in %3 when %4 initially launched. + OK ni bosganingizda, %1to'liq blok zanjirini (%2GB) yuklab olish%4 va qayta ishlash boshlanadi, %3birinchi boshlangan%4 tranzaksiyalardan boshlab. + If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low. Agar siz blok zanjirini saqlashni cheklashni tanlagan bo'lsangiz (pruning), eski ma'lumotlar hali ham yuklab olinishi va qayta ishlanishi kerak, ammo diskdan kamroq foydalanish uchun keyin o'chiriladi. @@ -1401,7 +1517,11 @@ Signing is only possible with addresses of the type 'legacy'. Unknown. Syncing Headers (%1, %2%)… Noma'lum. Sarlavhalarni sinxronlash(%1, %2%)... - + + Unknown. Pre-syncing Headers (%1, %2%)… + Noma'lum. Sarlavhalarni oldindan sinxronlash (, %1%2%)… + + OpenURIDialog @@ -1444,6 +1564,10 @@ Signing is only possible with addresses of the type 'legacy'. Number of script &verification threads Skriptni &tekshirish thread lari soni + + Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! + Mos skriptga toʻliq yoʻl %1(masalan, C:\Downloads\hwi.exe yoki /Users/you/Downloads/hwi.py). Ehtiyot bo'ling: zararli dastur tangalaringizni o'g'irlashi mumkin! + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) Proksi IP manzili (masalan: IPv4: 127.0.0.1 / IPv6: ::1) @@ -1456,6 +1580,14 @@ Signing is only possible with addresses of the type 'legacy'. Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu. Oyna yopilganda dasturdan chiqish o'rniga minimallashtirish. Ushbu parametr yoqilganda, dastur faqat menyuda Chiqish ni tanlagandan keyin yopiladi. + + Font in the Overview tab: + Umumiy ko‘rinish oynasidagi shrift: + + + Options set in this dialog are overridden by the command line: + Ushbu dialog oynasida o'rnatilgan parametrlar buyruq qatori tomonidan bekor qilinadi: + Open the %1 configuration file from the working directory. %1 konfiguratsion faylini ishlash katalogidan ochish. @@ -1525,6 +1657,14 @@ Signing is only possible with addresses of the type 'legacy'. Enable coin &control features Tangalarni &nazorat qilish funksiyasini yoqish + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + Tasdiqlanmagan oʻzgarishlarni sarflashni oʻchirib qoʻysangiz, tranzaksiyadagi oʻzgarishlardan kamida bitta tasdiq boʻlmaguncha foydalanilmaydi. Bu sizning balansingiz qanday hisoblanishiga ham ta'sir qiladi. + + + &Spend unconfirmed change + Tasdiqlanmagan oʻzgarishlarni &sarflash + Enable &PSBT controls An options window setting to enable PSBT controls. @@ -1543,6 +1683,22 @@ Signing is only possible with addresses of the type 'legacy'. &External signer script path &Tashqi signer skripti yo'li + + Accept connections from outside. + Tashqaridan ulanishlarni qabul qiling. + + + Allow incomin&g connections + Kiruvchi va kirish ulanishlariga ruxsat bering + + + Connect to the Bitcoin network through a SOCKS5 proxy. + SOCKS5 proksi-server orqali Bitcoin tarmog'iga ulaning. + + + &Connect through SOCKS5 proxy (default proxy): + SOCKS5 proksi-server orqali ulaning (standart proksi-server): + Proxy &IP: Прокси &IP рақами: @@ -1555,10 +1711,22 @@ Signing is only possible with addresses of the type 'legacy'. Port of the proxy (e.g. 9050) Прокси порти (e.g. 9050) + + Used for reaching peers via: + Tengdoshlar bilan bog'lanish uchun ishlatiladi: + &Window &Oyna + + Show the icon in the system tray. + Tizim tepsisidagi belgini ko'rsating. + + + &Show tray icon + belgisini ko'rsatish + Show only a tray icon after minimizing the window. Ойна йиғилгандан сўнг фақат трэй нишончаси кўрсатилсин. @@ -1579,10 +1747,38 @@ Signing is only possible with addresses of the type 'legacy'. User Interface &language: Фойдаланувчи интерфейси &тили: + + The user interface language can be set here. This setting will take effect after restarting %1. + Bu yerda foydalanuvchi interfeysi tilini sozlash mumkin. Ushbu sozlama qayta ishga tushirilgandan so'ng kuchga kiradi%1 + &Unit to show amounts in: Миқдорларни кўрсатиш учун &қисм: + + Choose the default subdivision unit to show in the interface and when sending coins. + Interfeysda va tangalarni yuborishda ko'rsatish uchun standart bo'linma birligini tanlang. + + + Third-party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |. + Tranzaktsiyalar yorlig'ida kontekst menyusi elementlari sifatida paydo bo'ladigan uchinchi tomon URL manzillari (masalan, blok tadqiqotchisi). %sURL manzili tranzaksiya xeshi bilan almashtiriladi. Bir nechta URL-manzillar vertikal chiziq bilan ajratilgan |. + + + &Third-party transaction URLs + &Uchinchi tomon tranzaksiyalari URL manzillari + + + Whether to show coin control features or not. + Tangani boshqarish xususiyatlarini ko'rsatish yoki ko'rsatmaslik. + + + Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services. + Tor onion xizmatlari uchun alohida SOCKS5 proksi-server orqali Bitcoin tarmog'iga ulaning. + + + Use separate SOCKS&5 proxy to reach peers via Tor onion services: + Tor onion xizmatlari orqali tengdoshlar bilan bog'lanish uchun alohida SOCKS&5 proksi-serveridan foydalaning: + &Cancel &Бекор қилиш @@ -1610,14 +1806,42 @@ Signing is only possible with addresses of the type 'legacy'. Text explaining that the settings changed will not come into effect until the client is restarted. Ўзгаришлар амалга ошиши учун мижозни қайта ишга тушириш талаб қилинади. + + Current settings will be backed up at "%1". + Text explaining to the user that the client's current settings will be backed up at a specific location. %1 is a stand-in argument for the backup location's path. + Joriy sozlamalar "%1" da zaxiralanadi. + + + Client will be shut down. Do you want to proceed? + Text asking the user to confirm if they would like to proceed with a client shutdown. + Mijoz yopiladi. Davom etishni xohlaysizmi? + + + Configuration options + Window title text of pop-up box that allows opening up of configuration file. + Konfiguratsiya imkoniyatlari + + + The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file. + Explanatory text about the priority order of instructions considered by client. The order from high to low being: command-line, configuration file, GUI settings. + Konfiguratsiya fayli GUI sozlamalarini bekor qiluvchi ilg'or foydalanuvchi parametrlarini belgilash uchun ishlatiladi. Bundan tashqari, har qanday buyruq qatori parametrlari ushbu konfiguratsiya faylini bekor qiladi. + Continue Davom etish + + Cancel + Bekor qilish + Error Хатолик + + The configuration file could not be opened. + Konfiguratsiya faylini ochib bo'lmadi. + This change would require a client restart. Ушбу ўзгариш мижозни қайтадан ишга туширишни талаб қилади. @@ -1627,6 +1851,13 @@ Signing is only possible with addresses of the type 'legacy'. Келтирилган прокси манзили ишламайди. + + OptionsModel + + Could not read setting "%1", %2. + Sozlamani o'qib bo'lmadi "%1", %2. + + OverviewPage @@ -1693,13 +1924,49 @@ Signing is only possible with addresses of the type 'legacy'. Unconfirmed transactions to watch-only addresses Тасдиқланмаган ўтказмалар-фақат манзилларини кўриш + + Mined balance in watch-only addresses that has not yet matured + Faqat tomosha qilish uchun moʻljallangan manzillarda hisoblangan qoldiq hali yetib bormagan + Current total balance in watch-only addresses Жорий умумий баланс фақат кўринадиган манзилларда - + + Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings->Mask values. + "Umumiy ko'rinish" yorlig'i uchun maxfiylik rejimi faollashtirilgan. Qiymatlarni qaytarish uchun Sozlamalar->Qiymatlar. + + PSBTOperationsDialog + + PSBT Operations + PSBT Operatsiyalari + + + Sign Tx + Muhirlash Tx + + + Copy to Clipboard + "Clipboard"ga nusxa olish + + + Save… + Saqlash... + + + Close + Yopish + + + Failed to sign transaction: %1 + Tranzaksiyani muhirlab bo'lmadi: %1 + + + Cannot sign inputs while wallet is locked. + Hamyon maʼlumotlarga imzo qoʻyib boʻlmaydi. + own address ўз манзили @@ -2545,7 +2812,11 @@ Signing is only possible with addresses of the type 'legacy'. Name of the wallet data file format. Hamyon maʼlumotlari - + + Cancel + Bekor qilish + + bitcoin-core diff --git a/src/qt/locale/bitcoin_uz@Cyrl.ts b/src/qt/locale/bitcoin_uz@Cyrl.ts index 018136072add..3e0de93cf98c 100644 --- a/src/qt/locale/bitcoin_uz@Cyrl.ts +++ b/src/qt/locale/bitcoin_uz@Cyrl.ts @@ -232,6 +232,10 @@ Signing is only possible with addresses of the type 'legacy'. Wallet passphrase was successfully changed. Ҳамён пароли муваффақиятли алмаштирилди. + + Passphrase change failed + Parolni o‘zgartirib bo‘lmadi + The old passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. Hamyon shifrini ochish uchun yordam eski parol noto'g'ri. U null belgini o'z ichiga oladi (ya'ni - nol bayt). Agar parol iborasi ushbu dasturiy ta'minotning 25.0 dan oldingi versiyasida o'rnatilgan bo'lsa, iltimos, faqat birinchi null belgigacha bo'lgan qurilmalar bilan qayta urinib ko'ring (lekin shu narsa emas). @@ -291,6 +295,18 @@ Signing is only possible with addresses of the type 'legacy'. unknown Номаълум + + Embedded "%1" + O'rnatilgan "%1" + + + Default system font "%1" + Standart tizim shrifti "%1" + + + Custom… + Alohida moslashtirilgan... + Amount Миқдори @@ -626,6 +642,10 @@ Signing is only possible with addresses of the type 'legacy'. Up to date Янгиланган + + Ctrl+Q + formatini olib tashlash(Ctrl+Q) + Load Partially Signed Bitcoin Transaction Qisman signlangan Bitkoin tranzaksiyasini yuklash @@ -728,6 +748,10 @@ Signing is only possible with addresses of the type 'legacy'. &Window &Ойна + + Ctrl+M + Abzatsga chek qo'ying.(Ctrl+M) + Zoom Kattalashtirish @@ -776,6 +800,18 @@ Signing is only possible with addresses of the type 'legacy'. A context menu item. The network activity was disabled previously. Ijtimoiy tarmoq faoliyatini yoqish + + Pre-syncing Headers (%1%)… + Sarlavhalarni oldindan sinxronlash (%1%)… + + + Error creating wallet + Hamyonni yaratishda xatolik yuz berdi + + + Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets) + Yangi hamyon yaratib bo'lmadi, dasturiy ta'minot sqlite qo'llab-quvvatlanmasdan tuzilgan (deskriptor hamyonlari uchun talab qilinadi) + Error: %1 Xatolik: %1 @@ -1019,7 +1055,11 @@ Signing is only possible with addresses of the type 'legacy'. Can't list signers Signerlarni ro'yxat shakliga keltirib bo'lmaydi - + + Too many external signers found + Juda koʻp tashqi imzo qoʻyuvchilar topildi + + LoadWalletsActivity @@ -1035,11 +1075,51 @@ Signing is only possible with addresses of the type 'legacy'. MigrateWalletActivity + + Migrate wallet + Hamyonni ko'chirish + + + Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made. +If this wallet contains any watchonly scripts, a new wallet will be created which contains those watchonly scripts. +If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts. + +The migration process will create a backup of the wallet before migrating. This backup file will be named <wallet name>-<timestamp>.legacy.bak and can be found in the directory for this wallet. In the event of an incorrect migration, the backup can be restored with the "Restore Wallet" functionality. + Hamyonni ko'chirish ushbu hamyonni bir yoki bir nechta deskriptor hamyonga aylantiradi. Hamyonning yangi zaxira nusxasini yaratish kerak bo'ladi. +Agar bu hamyonda faqat tomosha skriptlari mavjud bo'lsa, yangi hamyon yaratiladi, unda faqat tomosha qilish uchun skriptlar mavjud. +Agar bu hamyonda echilishi mumkin bo'lgan, lekin tomosha qilinmagan skriptlar bo'lsa, ushbu skriptlarni o'z ichiga olgan boshqa va yangi hamyon yaratiladi. + +Migratsiya jarayoni ko'chirishdan oldin hamyonning zaxira nusxasini yaratadi. Ushbu zaxira fayli 1-2.legacy.bak deb nomlanadi va uni ushbu hamyon katalogida topish mumkin. Noto'g'ri migratsiya bo'lsa, zaxira nusxasini "Hamyonni tiklash" funksiyasi bilan tiklash mumkin. + Migrate Wallet dudlangan cho'chqa go'shti koʻchirish - + + Migrating Wallet <b>%1</b>… + Hamyonni koʻchirish<b>%1</b> + + + The wallet '%1' was migrated successfully. + hamyon '%1' muvaffaqiyatli ko'chirildi. + + + Watchonly scripts have been migrated to a new wallet named '%1'. + Watchonly skriptlari nomli yangi hamyonga ko'chirildi%1 + + + Solvable but not watched scripts have been migrated to a new wallet named '%1'. + Yechish mumkin bo'lgan, lekin ko'rilmagan skriptlar nomli yangi hamyonga o'tkazildi%1 + + + Migration failed + Migratsiya amalga oshmadi + + + Migration Successful + Migratsiya muvaffaqiyatli amalga oshirildi + + OpenWalletActivity @@ -1068,7 +1148,27 @@ Signing is only possible with addresses of the type 'legacy'. Title of progress window which is displayed when wallets are being restored. Hamyonni tiklash - + + Restoring Wallet <b>%1</b>… + Descriptive text of the restore wallets progress window which indicates to the user that wallets are currently being restored. + Wallet tiklanmoqda<b>%1</b> + + + Restore wallet failed + Title of message box which is displayed when the wallet could not be restored. + Hamyonni tiklash amalga oshmadi + + + Restore wallet warning + Title of message box which is displayed when the wallet is restored with some warning. + Hamyonni tiklash haqida ogohlantirish + + + Restore wallet message + Title of message box which is displayed when the wallet is successfully restored. + Hamyon xabarini tiklash + + WalletController @@ -1098,6 +1198,14 @@ Signing is only possible with addresses of the type 'legacy'. Create Wallet Hamyon yaratish + + You are one step away from creating your new wallet! + Siz yangi hamyonni yaratishga bir qadam qoldi! + + + Please provide a name and, if desired, enable any advanced options + Iltimos, nom kiriting va agar xohlasangiz, kengaytirilgan variantlarni yoqing + Wallet Name Hamyon nomi @@ -1235,24 +1343,28 @@ Signing is only possible with addresses of the type 'legacy'. %n GB of space available - + %nGb bo'sh joy mavjud (of %n GB needed) - + (%nGb kerak) (%n GB needed for full chain) - + (To'liq zanjir uchun%n GB kerak) + + Choose data directory + Ma'lumotlar katalogini tanlang + At least %1 GB of data will be stored in this directory, and it will grow over time. Kamida %1 GB ma'lumot bu yerda saqlanadi va vaqtlar davomida o'sib boradi @@ -1313,6 +1425,10 @@ Signing is only possible with addresses of the type 'legacy'. This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off. Ushbu dastlabki sinxronlash juda qiyin va kompyuteringiz bilan ilgari sezilmagan apparat muammolarini yuzaga keltirishi mumkin. Har safar %1 ni ishga tushirganingizda, u yuklab olish jarayonini qayerda to'xtatgan bo'lsa, o'sha yerdan boshlab davom ettiradi. + + When you click OK, %1 will begin to download and process the full %4 block chain (%2 GB) starting with the earliest transactions in %3 when %4 initially launched. + OK ni bosganingizda, %1to'liq blok zanjirini (%2GB) yuklab olish%4 va qayta ishlash boshlanadi, %3birinchi boshlangan%4 tranzaksiyalardan boshlab. + If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low. Agar siz blok zanjirini saqlashni cheklashni tanlagan bo'lsangiz (pruning), eski ma'lumotlar hali ham yuklab olinishi va qayta ishlanishi kerak, ammo diskdan kamroq foydalanish uchun keyin o'chiriladi. @@ -1406,7 +1522,11 @@ Signing is only possible with addresses of the type 'legacy'. Unknown. Syncing Headers (%1, %2%)… Noma'lum. Sarlavhalarni sinxronlash(%1, %2%)... - + + Unknown. Pre-syncing Headers (%1, %2%)… + Noma'lum. Sarlavhalarni oldindan sinxronlash (, %1%2%)… + + OpenURIDialog @@ -1449,6 +1569,10 @@ Signing is only possible with addresses of the type 'legacy'. Number of script &verification threads Мавзуларни &тўғрилаш скрипти миқдори + + Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! + Mos skriptga toʻliq yoʻl %1(masalan, C:\Downloads\hwi.exe yoki /Users/you/Downloads/hwi.py). Ehtiyot bo'ling: zararli dastur tangalaringizni o'g'irlashi mumkin! + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) Прокси IP манзили (масалан: IPv4: 127.0.0.1 / IPv6: ::1) @@ -1461,6 +1585,14 @@ Signing is only possible with addresses of the type 'legacy'. Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu. Oyna yopilganda dasturdan chiqish o'rniga minimallashtirish. Ushbu parametr yoqilganda, dastur faqat menyuda Chiqish ni tanlagandan keyin yopiladi. + + Font in the Overview tab: + Umumiy ko‘rinish oynasidagi shrift: + + + Options set in this dialog are overridden by the command line: + Ushbu dialog oynasida o'rnatilgan parametrlar buyruq qatori tomonidan bekor qilinadi: + Open the %1 configuration file from the working directory. %1 konfiguratsion faylini ishlash katalogidan ochish. @@ -1530,6 +1662,14 @@ Signing is only possible with addresses of the type 'legacy'. Enable coin &control features Tangalarni &nazorat qilish funksiyasini yoqish + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + Tasdiqlanmagan oʻzgarishlarni sarflashni oʻchirib qoʻysangiz, tranzaksiyadagi oʻzgarishlardan kamida bitta tasdiq boʻlmaguncha foydalanilmaydi. Bu sizning balansingiz qanday hisoblanishiga ham ta'sir qiladi. + + + &Spend unconfirmed change + Tasdiqlanmagan oʻzgarishlarni &sarflash + Enable &PSBT controls An options window setting to enable PSBT controls. @@ -1548,6 +1688,22 @@ Signing is only possible with addresses of the type 'legacy'. &External signer script path &Tashqi signer skripti yo'li + + Accept connections from outside. + Tashqaridan ulanishlarni qabul qiling. + + + Allow incomin&g connections + Kiruvchi va kirish ulanishlariga ruxsat bering + + + Connect to the Bitcoin network through a SOCKS5 proxy. + SOCKS5 proksi-server orqali Bitcoin tarmog'iga ulaning. + + + &Connect through SOCKS5 proxy (default proxy): + SOCKS5 proksi-server orqali ulaning (standart proksi-server): + Proxy &IP: Прокси &IP рақами: @@ -1560,10 +1716,22 @@ Signing is only possible with addresses of the type 'legacy'. Port of the proxy (e.g. 9050) Прокси порти (e.g. 9050) + + Used for reaching peers via: + Tengdoshlar bilan bog'lanish uchun ishlatiladi: + &Window &Ойна + + Show the icon in the system tray. + Tizim tepsisidagi belgini ko'rsating. + + + &Show tray icon + belgisini ko'rsatish + Show only a tray icon after minimizing the window. Ойна йиғилгандан сўнг фақат трэй нишончаси кўрсатилсин. @@ -1584,10 +1752,38 @@ Signing is only possible with addresses of the type 'legacy'. User Interface &language: Фойдаланувчи интерфейси &тили: + + The user interface language can be set here. This setting will take effect after restarting %1. + Bu yerda foydalanuvchi interfeysi tilini sozlash mumkin. Ushbu sozlama qayta ishga tushirilgandan so'ng kuchga kiradi%1 + &Unit to show amounts in: Миқдорларни кўрсатиш учун &қисм: + + Choose the default subdivision unit to show in the interface and when sending coins. + Interfeysda va tangalarni yuborishda ko'rsatish uchun standart bo'linma birligini tanlang. + + + Third-party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |. + Tranzaktsiyalar yorlig'ida kontekst menyusi elementlari sifatida paydo bo'ladigan uchinchi tomon URL manzillari (masalan, blok tadqiqotchisi). %sURL manzili tranzaksiya xeshi bilan almashtiriladi. Bir nechta URL-manzillar vertikal chiziq bilan ajratilgan |. + + + &Third-party transaction URLs + &Uchinchi tomon tranzaksiyalari URL manzillari + + + Whether to show coin control features or not. + Tangani boshqarish xususiyatlarini ko'rsatish yoki ko'rsatmaslik. + + + Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services. + Tor onion xizmatlari uchun alohida SOCKS5 proksi-server orqali Bitcoin tarmog'iga ulaning. + + + Use separate SOCKS&5 proxy to reach peers via Tor onion services: + Tor onion xizmatlari orqali tengdoshlar bilan bog'lanish uchun alohida SOCKS&5 proksi-serveridan foydalaning: + &Cancel &Бекор қилиш @@ -1615,14 +1811,42 @@ Signing is only possible with addresses of the type 'legacy'. Text explaining that the settings changed will not come into effect until the client is restarted. Ўзгаришлар амалга ошиши учун мижозни қайта ишга тушириш талаб қилинади. + + Current settings will be backed up at "%1". + Text explaining to the user that the client's current settings will be backed up at a specific location. %1 is a stand-in argument for the backup location's path. + Joriy sozlamalar "%1" da zaxiralanadi. + + + Client will be shut down. Do you want to proceed? + Text asking the user to confirm if they would like to proceed with a client shutdown. + Mijoz yopiladi. Davom etishni xohlaysizmi? + + + Configuration options + Window title text of pop-up box that allows opening up of configuration file. + Konfiguratsiya imkoniyatlari + + + The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file. + Explanatory text about the priority order of instructions considered by client. The order from high to low being: command-line, configuration file, GUI settings. + Konfiguratsiya fayli GUI sozlamalarini bekor qiluvchi ilg'or foydalanuvchi parametrlarini belgilash uchun ishlatiladi. Bundan tashqari, har qanday buyruq qatori parametrlari ushbu konfiguratsiya faylini bekor qiladi. + Continue Davom etish + + Cancel + Bekor qilish + Error Хатолик + + The configuration file could not be opened. + Konfiguratsiya faylini ochib bo'lmadi. + This change would require a client restart. Ушбу ўзгариш мижозни қайтадан ишга туширишни талаб қилади. @@ -1632,6 +1856,13 @@ Signing is only possible with addresses of the type 'legacy'. Келтирилган прокси манзили ишламайди. + + OptionsModel + + Could not read setting "%1", %2. + Sozlamani o'qib bo'lmadi "%1", %2. + + OverviewPage @@ -1698,13 +1929,49 @@ Signing is only possible with addresses of the type 'legacy'. Unconfirmed transactions to watch-only addresses Тасдиқланмаган ўтказмалар-фақат манзилларини кўриш + + Mined balance in watch-only addresses that has not yet matured + Faqat tomosha qilish uchun moʻljallangan manzillarda hisoblangan qoldiq hali yetib bormagan + Current total balance in watch-only addresses Жорий умумий баланс фақат кўринадиган манзилларда - + + Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings->Mask values. + "Umumiy ko'rinish" yorlig'i uchun maxfiylik rejimi faollashtirilgan. Qiymatlarni qaytarish uchun Sozlamalar->Qiymatlar. + + PSBTOperationsDialog + + PSBT Operations + PSBT Operatsiyalari + + + Sign Tx + Muhirlash Tx + + + Copy to Clipboard + "Clipboard"ga nusxa olish + + + Save… + Saqlash... + + + Close + Yopish + + + Failed to sign transaction: %1 + Tranzaksiyani muhirlab bo'lmadi: %1 + + + Cannot sign inputs while wallet is locked. + Hamyon maʼlumotlarga imzo qoʻyib boʻlmaydi. + own address ўз манзили @@ -2554,7 +2821,11 @@ Signing is only possible with addresses of the type 'legacy'. Name of the wallet data file format. Hamyon maʼlumotlari - + + Cancel + Bekor qilish + + bitcoin-core diff --git a/src/qt/locale/bitcoin_uz@Latn.ts b/src/qt/locale/bitcoin_uz@Latn.ts index ef05eab9c03a..e2f236347249 100644 --- a/src/qt/locale/bitcoin_uz@Latn.ts +++ b/src/qt/locale/bitcoin_uz@Latn.ts @@ -232,6 +232,10 @@ Kirish faqat 'legacy' turidagi manzillar uchun. Wallet passphrase was successfully changed. Hamyon uchun kiritilgan maxfiy so'z yangisiga almashtirildi. + + Passphrase change failed + Parolni o‘zgartirib bo‘lmadi + The old passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. Hamyon shifrini ochish uchun yordam eski parol noto'g'ri. U null belgini o'z ichiga oladi (ya'ni - nol bayt). Agar parol iborasi ushbu dasturiy ta'minotning 25.0 dan oldingi versiyasida o'rnatilgan bo'lsa, iltimos, faqat birinchi null belgigacha bo'lgan qurilmalar bilan qayta urinib ko'ring (lekin shu narsa emas). @@ -291,6 +295,18 @@ Kirish faqat 'legacy' turidagi manzillar uchun. unknown noma'lum + + Embedded "%1" + O'rnatilgan "%1" + + + Default system font "%1" + Standart tizim shrifti "%1" + + + Custom… + Alohida moslashtirilgan... + Amount Miqdor @@ -626,6 +642,10 @@ Kirish faqat 'legacy' turidagi manzillar uchun. Up to date Hozirgi kunda + + Ctrl+Q + formatini olib tashlash(Ctrl+Q) + Load Partially Signed Bitcoin Transaction Qisman signlangan Bitkoin tranzaksiyasini yuklash @@ -728,6 +748,10 @@ Kirish faqat 'legacy' turidagi manzillar uchun. &Window &Oyna + + Ctrl+M + Abzatsga chek qo'ying.(Ctrl+M) + Zoom Kattalashtirish @@ -776,6 +800,18 @@ Kirish faqat 'legacy' turidagi manzillar uchun. A context menu item. The network activity was disabled previously. Ijtimoiy tarmoq faoliyatini yoqish + + Pre-syncing Headers (%1%)… + Sarlavhalarni oldindan sinxronlash (%1%)… + + + Error creating wallet + Hamyonni yaratishda xatolik yuz berdi + + + Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets) + Yangi hamyon yaratib bo'lmadi, dasturiy ta'minot sqlite qo'llab-quvvatlanmasdan tuzilgan (deskriptor hamyonlari uchun talab qilinadi) + Error: %1 Xatolik: %1 @@ -1019,7 +1055,11 @@ Kirish faqat 'legacy' turidagi manzillar uchun. Can't list signers Signerlarni ro'yxat shakliga keltirib bo'lmaydi - + + Too many external signers found + Juda koʻp tashqi imzo qoʻyuvchilar topildi + + LoadWalletsActivity @@ -1035,11 +1075,51 @@ Kirish faqat 'legacy' turidagi manzillar uchun. MigrateWalletActivity + + Migrate wallet + Hamyonni ko'chirish + + + Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made. +If this wallet contains any watchonly scripts, a new wallet will be created which contains those watchonly scripts. +If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts. + +The migration process will create a backup of the wallet before migrating. This backup file will be named <wallet name>-<timestamp>.legacy.bak and can be found in the directory for this wallet. In the event of an incorrect migration, the backup can be restored with the "Restore Wallet" functionality. + Hamyonni ko'chirish ushbu hamyonni bir yoki bir nechta deskriptor hamyonga aylantiradi. Hamyonning yangi zaxira nusxasini yaratish kerak bo'ladi. +Agar bu hamyonda faqat tomosha skriptlari mavjud bo'lsa, yangi hamyon yaratiladi, unda faqat tomosha qilish uchun skriptlar mavjud. +Agar bu hamyonda echilishi mumkin bo'lgan, lekin tomosha qilinmagan skriptlar bo'lsa, ushbu skriptlarni o'z ichiga olgan boshqa va yangi hamyon yaratiladi. + +Migratsiya jarayoni ko'chirishdan oldin hamyonning zaxira nusxasini yaratadi. Ushbu zaxira fayli 1-2.legacy.bak deb nomlanadi va uni ushbu hamyon katalogida topish mumkin. Noto'g'ri migratsiya bo'lsa, zaxira nusxasini "Hamyonni tiklash" funksiyasi bilan tiklash mumkin. + Migrate Wallet dudlangan cho'chqa go'shti koʻchirish - + + Migrating Wallet <b>%1</b>… + Hamyonni koʻchirish<b>%1</b> + + + The wallet '%1' was migrated successfully. + hamyon '%1' muvaffaqiyatli ko'chirildi. + + + Watchonly scripts have been migrated to a new wallet named '%1'. + Watchonly skriptlari nomli yangi hamyonga ko'chirildi%1 + + + Solvable but not watched scripts have been migrated to a new wallet named '%1'. + Yechish mumkin bo'lgan, lekin ko'rilmagan skriptlar nomli yangi hamyonga o'tkazildi%1 + + + Migration failed + Migratsiya amalga oshmadi + + + Migration Successful + Migratsiya muvaffaqiyatli amalga oshirildi + + OpenWalletActivity @@ -1068,7 +1148,27 @@ Kirish faqat 'legacy' turidagi manzillar uchun. Title of progress window which is displayed when wallets are being restored. Hamyonni tiklash - + + Restoring Wallet <b>%1</b>… + Descriptive text of the restore wallets progress window which indicates to the user that wallets are currently being restored. + Wallet tiklanmoqda<b>%1</b> + + + Restore wallet failed + Title of message box which is displayed when the wallet could not be restored. + Hamyonni tiklash amalga oshmadi + + + Restore wallet warning + Title of message box which is displayed when the wallet is restored with some warning. + Hamyonni tiklash haqida ogohlantirish + + + Restore wallet message + Title of message box which is displayed when the wallet is successfully restored. + Hamyon xabarini tiklash + + WalletController @@ -1098,6 +1198,14 @@ Kirish faqat 'legacy' turidagi manzillar uchun. Create Wallet Hamyon yaratish + + You are one step away from creating your new wallet! + Siz yangi hamyonni yaratishga bir qadam qoldi! + + + Please provide a name and, if desired, enable any advanced options + Iltimos, nom kiriting va agar xohlasangiz, kengaytirilgan variantlarni yoqing + Wallet Name Hamyon nomi @@ -1235,24 +1343,28 @@ Kirish faqat 'legacy' turidagi manzillar uchun. %n GB of space available - + %nGb bo'sh joy mavjud (of %n GB needed) - + (%nGb kerak) (%n GB needed for full chain) - + (To'liq zanjir uchun%n GB kerak) + + Choose data directory + Ma'lumotlar katalogini tanlang + At least %1 GB of data will be stored in this directory, and it will grow over time. Ushbu katalogda kamida %1 GB ma'lumotlar saqlanadi va vaqt o'tishi bilan u o'sib boradi. @@ -1313,6 +1425,10 @@ Kirish faqat 'legacy' turidagi manzillar uchun. This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off. Ushbu dastlabki sinxronlash juda qiyin va kompyuteringiz bilan ilgari sezilmagan apparat muammolarini yuzaga keltirishi mumkin. Har safar %1 ni ishga tushirganingizda, u yuklab olish jarayonini qayerda to'xtatgan bo'lsa, o'sha yerdan boshlab davom ettiradi. + + When you click OK, %1 will begin to download and process the full %4 block chain (%2 GB) starting with the earliest transactions in %3 when %4 initially launched. + OK ni bosganingizda, %1to'liq blok zanjirini (%2GB) yuklab olish%4 va qayta ishlash boshlanadi, %3birinchi boshlangan%4 tranzaksiyalardan boshlab. + If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low. Agar siz blok zanjirini saqlashni cheklashni tanlagan bo'lsangiz (pruning), eski ma'lumotlar hali ham yuklab olinishi va qayta ishlanishi kerak, ammo diskdan kamroq foydalanish uchun keyin o'chiriladi. @@ -1406,7 +1522,11 @@ Kirish faqat 'legacy' turidagi manzillar uchun. Unknown. Syncing Headers (%1, %2%)… Noma'lum. Sarlavhalarni sinxronlash(%1, %2%)... - + + Unknown. Pre-syncing Headers (%1, %2%)… + Noma'lum. Sarlavhalarni oldindan sinxronlash (, %1%2%)… + + OpenURIDialog @@ -1449,6 +1569,10 @@ Kirish faqat 'legacy' turidagi manzillar uchun. Number of script &verification threads Skriptni &tekshirish thread lari soni + + Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! + Mos skriptga toʻliq yoʻl %1(masalan, C:\Downloads\hwi.exe yoki /Users/you/Downloads/hwi.py). Ehtiyot bo'ling: zararli dastur tangalaringizni o'g'irlashi mumkin! + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) Proksi IP manzili (masalan: IPv4: 127.0.0.1 / IPv6: ::1) @@ -1461,6 +1585,14 @@ Kirish faqat 'legacy' turidagi manzillar uchun. Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu. Oyna yopilganda dasturdan chiqish o'rniga minimallashtirish. Ushbu parametr yoqilganda, dastur faqat menyuda Chiqish ni tanlagandan keyin yopiladi. + + Font in the Overview tab: + Umumiy ko‘rinish oynasidagi shrift: + + + Options set in this dialog are overridden by the command line: + Ushbu dialog oynasida o'rnatilgan parametrlar buyruq qatori tomonidan bekor qilinadi: + Open the %1 configuration file from the working directory. %1 konfiguratsion faylini ishlash katalogidan ochish. @@ -1530,6 +1662,14 @@ Kirish faqat 'legacy' turidagi manzillar uchun. Enable coin &control features Tangalarni &nazorat qilish funksiyasini yoqish + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + Tasdiqlanmagan oʻzgarishlarni sarflashni oʻchirib qoʻysangiz, tranzaksiyadagi oʻzgarishlardan kamida bitta tasdiq boʻlmaguncha foydalanilmaydi. Bu sizning balansingiz qanday hisoblanishiga ham ta'sir qiladi. + + + &Spend unconfirmed change + Tasdiqlanmagan oʻzgarishlarni &sarflash + Enable &PSBT controls An options window setting to enable PSBT controls. @@ -1548,6 +1688,22 @@ Kirish faqat 'legacy' turidagi manzillar uchun. &External signer script path &Tashqi signer skripti yo'li + + Accept connections from outside. + Tashqaridan ulanishlarni qabul qiling. + + + Allow incomin&g connections + Kiruvchi va kirish ulanishlariga ruxsat bering + + + Connect to the Bitcoin network through a SOCKS5 proxy. + SOCKS5 proksi-server orqali Bitcoin tarmog'iga ulaning. + + + &Connect through SOCKS5 proxy (default proxy): + SOCKS5 proksi-server orqali ulaning (standart proksi-server): + Proxy &IP: Прокси &IP рақами: @@ -1560,10 +1716,22 @@ Kirish faqat 'legacy' turidagi manzillar uchun. Port of the proxy (e.g. 9050) Прокси порти (e.g. 9050) + + Used for reaching peers via: + Tengdoshlar bilan bog'lanish uchun ishlatiladi: + &Window &Oyna + + Show the icon in the system tray. + Tizim tepsisidagi belgini ko'rsating. + + + &Show tray icon + belgisini ko'rsatish + Show only a tray icon after minimizing the window. Ойна йиғилгандан сўнг фақат трэй нишончаси кўрсатилсин. @@ -1584,10 +1752,38 @@ Kirish faqat 'legacy' turidagi manzillar uchun. User Interface &language: Фойдаланувчи интерфейси &тили: + + The user interface language can be set here. This setting will take effect after restarting %1. + Bu yerda foydalanuvchi interfeysi tilini sozlash mumkin. Ushbu sozlama qayta ishga tushirilgandan so'ng kuchga kiradi%1 + &Unit to show amounts in: Миқдорларни кўрсатиш учун &қисм: + + Choose the default subdivision unit to show in the interface and when sending coins. + Interfeysda va tangalarni yuborishda ko'rsatish uchun standart bo'linma birligini tanlang. + + + Third-party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |. + Tranzaktsiyalar yorlig'ida kontekst menyusi elementlari sifatida paydo bo'ladigan uchinchi tomon URL manzillari (masalan, blok tadqiqotchisi). %sURL manzili tranzaksiya xeshi bilan almashtiriladi. Bir nechta URL-manzillar vertikal chiziq bilan ajratilgan |. + + + &Third-party transaction URLs + &Uchinchi tomon tranzaksiyalari URL manzillari + + + Whether to show coin control features or not. + Tangani boshqarish xususiyatlarini ko'rsatish yoki ko'rsatmaslik. + + + Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services. + Tor onion xizmatlari uchun alohida SOCKS5 proksi-server orqali Bitcoin tarmog'iga ulaning. + + + Use separate SOCKS&5 proxy to reach peers via Tor onion services: + Tor onion xizmatlari orqali tengdoshlar bilan bog'lanish uchun alohida SOCKS&5 proksi-serveridan foydalaning: + &Cancel &Бекор қилиш @@ -1615,14 +1811,42 @@ Kirish faqat 'legacy' turidagi manzillar uchun. Text explaining that the settings changed will not come into effect until the client is restarted. Ўзгаришлар амалга ошиши учун мижозни қайта ишга тушириш талаб қилинади. + + Current settings will be backed up at "%1". + Text explaining to the user that the client's current settings will be backed up at a specific location. %1 is a stand-in argument for the backup location's path. + Joriy sozlamalar "%1" da zaxiralanadi. + + + Client will be shut down. Do you want to proceed? + Text asking the user to confirm if they would like to proceed with a client shutdown. + Mijoz yopiladi. Davom etishni xohlaysizmi? + + + Configuration options + Window title text of pop-up box that allows opening up of configuration file. + Konfiguratsiya imkoniyatlari + + + The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file. + Explanatory text about the priority order of instructions considered by client. The order from high to low being: command-line, configuration file, GUI settings. + Konfiguratsiya fayli GUI sozlamalarini bekor qiluvchi ilg'or foydalanuvchi parametrlarini belgilash uchun ishlatiladi. Bundan tashqari, har qanday buyruq qatori parametrlari ushbu konfiguratsiya faylini bekor qiladi. + Continue Davom etish + + Cancel + Bekor qilish + Error Хатолик + + The configuration file could not be opened. + Konfiguratsiya faylini ochib bo'lmadi. + This change would require a client restart. Ушбу ўзгариш мижозни қайтадан ишга туширишни талаб қилади. @@ -1632,6 +1856,13 @@ Kirish faqat 'legacy' turidagi manzillar uchun. Келтирилган прокси манзили ишламайди. + + OptionsModel + + Could not read setting "%1", %2. + Sozlamani o'qib bo'lmadi "%1", %2. + + OverviewPage @@ -1698,13 +1929,49 @@ Kirish faqat 'legacy' turidagi manzillar uchun. Unconfirmed transactions to watch-only addresses Тасдиқланмаган ўтказмалар-фақат манзилларини кўриш + + Mined balance in watch-only addresses that has not yet matured + Faqat tomosha qilish uchun moʻljallangan manzillarda hisoblangan qoldiq hali yetib bormagan + Current total balance in watch-only addresses Жорий умумий баланс фақат кўринадиган манзилларда - + + Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings->Mask values. + "Umumiy ko'rinish" yorlig'i uchun maxfiylik rejimi faollashtirilgan. Qiymatlarni qaytarish uchun Sozlamalar->Qiymatlar. + + PSBTOperationsDialog + + PSBT Operations + PSBT Operatsiyalari + + + Sign Tx + Muhirlash Tx + + + Copy to Clipboard + "Clipboard"ga nusxa olish + + + Save… + Saqlash... + + + Close + Yopish + + + Failed to sign transaction: %1 + Tranzaksiyani muhirlab bo'lmadi: %1 + + + Cannot sign inputs while wallet is locked. + Hamyon maʼlumotlarga imzo qoʻyib boʻlmaydi. + own address ўз манзили @@ -2554,7 +2821,11 @@ Kirish faqat 'legacy' turidagi manzillar uchun. Name of the wallet data file format. Hamyon maʼlumotlari - + + Cancel + Bekor qilish + + bitcoin-core diff --git a/src/qt/locale/bitcoin_yo.ts b/src/qt/locale/bitcoin_yo.ts index c377bba316ad..ad7868eaa2bd 100644 --- a/src/qt/locale/bitcoin_yo.ts +++ b/src/qt/locale/bitcoin_yo.ts @@ -29,6 +29,14 @@ Delete the currently selected address from the list samukuro adiresi ti o sese sayan kuro ninu akojo + + Enter address or label to search + Tẹ adirẹsi sii tàbí áámì làtí wáá + + + Export the data in the current tab to a file + Se òkèéé dátà ní tàábù lọwọlọwọ sí fáílì kán. + QObject @@ -231,4 +239,11 @@ Ojo + + WalletView + + Export the data in the current tab to a file + Se òkèéé dátà ní tàábù lọwọlọwọ sí fáílì kán. + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_zh_CN.ts b/src/qt/locale/bitcoin_zh_CN.ts index ae29726a14a4..bc0592b2ea0d 100644 --- a/src/qt/locale/bitcoin_zh_CN.ts +++ b/src/qt/locale/bitcoin_zh_CN.ts @@ -3355,6 +3355,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satos &Sign Message 消息签名(&S) + + You can sign messages/agreements with your legacy (P2PKH) 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. + 您可以使用您的 (P2PKH)格式 地址签署消息 / 协议,以证明您对这个地址有发送或接收比特币的权限。钓鱼攻击可能试图欺骗您签署您的身份,所以请仔细分辨,不要签署任何含混不清的协议。只签署你完全认同并理解的协议 。 + The Bitcoin address to sign the message with 用来对消息签名的地址 diff --git a/src/qt/locale/ts_files.cmake b/src/qt/locale/ts_files.cmake index 4f3592619361..9b38b1b74e0a 100644 --- a/src/qt/locale/ts_files.cmake +++ b/src/qt/locale/ts_files.cmake @@ -15,26 +15,17 @@ set(ts_files bitcoin_cs.ts bitcoin_cy.ts bitcoin_da.ts - bitcoin_de_AT.ts - bitcoin_de_CH.ts bitcoin_de.ts bitcoin_el.ts bitcoin_en.ts bitcoin_eo.ts bitcoin_es.ts - bitcoin_es_CL.ts - bitcoin_es_CO.ts - bitcoin_es_DO.ts - bitcoin_es_SV.ts - bitcoin_es_VE.ts bitcoin_et.ts bitcoin_eu.ts bitcoin_fa.ts bitcoin_fi.ts bitcoin_fil.ts bitcoin_fo.ts - bitcoin_fr_CM.ts - bitcoin_fr_LU.ts bitcoin_fr.ts bitcoin_ga.ts bitcoin_ga_IE.ts @@ -112,6 +103,7 @@ set(ts_files bitcoin_tl.ts bitcoin_tn.ts bitcoin_tr.ts + bitcoin_tt.ts bitcoin_ug.ts bitcoin_uk.ts bitcoin_ur.ts From 9a9fb19536fa2f89c3c96860c1882b79b68c9e64 Mon Sep 17 00:00:00 2001 From: Ryan Ofsky Date: Sun, 9 Feb 2025 14:21:37 -0500 Subject: [PATCH 0089/2775] ipc: Use EventLoopRef instead of addClient/removeClient Use EventLoopRef to avoid reference counting bugs and be more exception safe and deal with removal of addClient/removeClient methods in https://github.com/bitcoin-core/libmultiprocess/pull/160 A test update is also required due to https://github.com/bitcoin-core/libmultiprocess/pull/160 to deal with changed reference count semantics. In IpcPipeTest(), it is now necessary to destroy the client Proxy object instead of just the client Connection object to decrease the event loop reference count and allow the loop to exit so the test does not hang on shutdown. --- src/ipc/capnp/protocol.cpp | 15 +++++++-------- src/test/ipc_test.cpp | 9 ++++----- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/ipc/capnp/protocol.cpp b/src/ipc/capnp/protocol.cpp index 3326f7093140..7bc653d25ce3 100644 --- a/src/ipc/capnp/protocol.cpp +++ b/src/ipc/capnp/protocol.cpp @@ -41,10 +41,7 @@ class CapnpProtocol : public Protocol public: ~CapnpProtocol() noexcept(true) { - if (m_loop) { - std::unique_lock lock(m_loop->m_mutex); - m_loop->removeClient(lock); - } + m_loop_ref.reset(); if (m_loop_thread.joinable()) m_loop_thread.join(); assert(!m_loop); }; @@ -83,10 +80,7 @@ class CapnpProtocol : public Protocol m_loop_thread = std::thread([&] { util::ThreadRename("capnp-loop"); m_loop.emplace(exe_name, &IpcLogFn, &m_context); - { - std::unique_lock lock(m_loop->m_mutex); - m_loop->addClient(lock); - } + m_loop_ref.emplace(*m_loop); promise.set_value(); m_loop->loop(); m_loop.reset(); @@ -95,7 +89,12 @@ class CapnpProtocol : public Protocol } Context m_context; std::thread m_loop_thread; + //! EventLoop object which manages I/O events for all connections. std::optional m_loop; + //! Reference to the same EventLoop. Increments the loop’s refcount on + //! creation, decrements on destruction. The loop thread exits when the + //! refcount reaches 0. Other IPC objects also hold their own EventLoopRef. + std::optional m_loop_ref; }; } // namespace diff --git a/src/test/ipc_test.cpp b/src/test/ipc_test.cpp index b4d7ad354cc8..eeaf348812ae 100644 --- a/src/test/ipc_test.cpp +++ b/src/test/ipc_test.cpp @@ -55,7 +55,6 @@ void IpcPipeTest() { // Setup: create FooImplementation object and listen for FooInterface requests std::promise>> foo_promise; - std::function disconnect_client; std::thread thread([&]() { mp::EventLoop loop("IpcPipeTest", [](bool raise, const std::string& log) { LogPrintf("LOG%i: %s\n", raise, log); }); auto pipe = loop.m_io_context.provider->newTwoWayPipe(); @@ -63,9 +62,9 @@ void IpcPipeTest() auto connection_client = std::make_unique(loop, kj::mv(pipe.ends[0])); auto foo_client = std::make_unique>( connection_client->m_rpc_system->bootstrap(mp::ServerVatId().vat_id).castAs(), - connection_client.get(), /* destroy_connection= */ false); + connection_client.get(), /* destroy_connection= */ true); + connection_client.release(); foo_promise.set_value(std::move(foo_client)); - disconnect_client = [&] { loop.sync([&] { connection_client.reset(); }); }; auto connection_server = std::make_unique(loop, kj::mv(pipe.ends[1]), [&](mp::Connection& connection) { auto foo_server = kj::heap>(std::make_shared(), connection); @@ -106,8 +105,8 @@ void IpcPipeTest() auto script2{foo->passScript(script1)}; BOOST_CHECK_EQUAL(HexStr(script1), HexStr(script2)); - // Test cleanup: disconnect pipe and join thread - disconnect_client(); + // Test cleanup: disconnect and join thread + foo.reset(); thread.join(); } From 6eb09fd6141f4c96dae3e1fe1a1f1946c91d0131 Mon Sep 17 00:00:00 2001 From: Ryan Ofsky Date: Fri, 18 Apr 2025 18:12:46 -0400 Subject: [PATCH 0090/2775] test: Add unit test coverage for Init and Shutdown code Currently this code is not called in unit tests. Calling should make it possible to write tests for things like IPC exceptions being thrown during shutdown. --- src/common/args.cpp | 8 ++++++ src/common/args.h | 6 +--- src/net.cpp | 6 ++++ src/net.h | 1 + src/netbase.h | 31 ++++++++++++++------- src/rpc/server.cpp | 6 ++++ src/rpc/server.h | 1 + src/test/CMakeLists.txt | 1 + src/test/node_init_tests.cpp | 51 ++++++++++++++++++++++++++++++++++ src/test/util/setup_common.cpp | 11 ++++++++ 10 files changed, 107 insertions(+), 15 deletions(-) create mode 100644 src/test/node_init_tests.cpp diff --git a/src/common/args.cpp b/src/common/args.cpp index 71dcd1ac10c6..6a79b6c6f177 100644 --- a/src/common/args.cpp +++ b/src/common/args.cpp @@ -589,6 +589,14 @@ void ArgsManager::AddHiddenArgs(const std::vector& names) } } +void ArgsManager::ClearArgs() +{ + LOCK(cs_args); + m_settings = {}; + m_available_args.clear(); + m_network_only_args.clear(); +} + void ArgsManager::CheckMultipleCLIArgs() const { LOCK(cs_args); diff --git a/src/common/args.h b/src/common/args.h index 6c5ac48ae3e0..da19cbda66fa 100644 --- a/src/common/args.h +++ b/src/common/args.h @@ -359,11 +359,7 @@ class ArgsManager /** * Clear available arguments */ - void ClearArgs() { - LOCK(cs_args); - m_available_args.clear(); - m_network_only_args.clear(); - } + void ClearArgs(); /** * Check CLI command args diff --git a/src/net.cpp b/src/net.cpp index 217d9a890373..77ea23e66578 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -266,6 +266,12 @@ std::optional GetLocalAddrForPeer(CNode& node) return std::nullopt; } +void ClearLocal() +{ + LOCK(g_maplocalhost_mutex); + return mapLocalHost.clear(); +} + // learn a new local address bool AddLocal(const CService& addr_, int nScore) { diff --git a/src/net.h b/src/net.h index 4cb4cb906e2a..06bd7b1e8753 100644 --- a/src/net.h +++ b/src/net.h @@ -158,6 +158,7 @@ enum /** Returns a local address that we should advertise to this peer. */ std::optional GetLocalAddrForPeer(CNode& node); +void ClearLocal(); bool AddLocal(const CService& addr, int nScore = LOCAL_NONE); bool AddLocal(const CNetAddr& addr, int nScore = LOCAL_NONE); void RemoveLocal(const CService& addr); diff --git a/src/netbase.h b/src/netbase.h index b2cc172e536a..41b3ca8fdb0a 100644 --- a/src/netbase.h +++ b/src/netbase.h @@ -121,6 +121,13 @@ class ReachableNets { m_reachable.clear(); } + void Reset() EXCLUSIVE_LOCKS_REQUIRED(!m_mutex) + { + AssertLockNotHeld(m_mutex); + LOCK(m_mutex); + m_reachable = DefaultNets(); + } + [[nodiscard]] bool Contains(Network net) const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex) { AssertLockNotHeld(m_mutex); @@ -142,17 +149,21 @@ class ReachableNets { } private: - mutable Mutex m_mutex; - - std::unordered_set m_reachable GUARDED_BY(m_mutex){ - NET_UNROUTABLE, - NET_IPV4, - NET_IPV6, - NET_ONION, - NET_I2P, - NET_CJDNS, - NET_INTERNAL + static std::unordered_set DefaultNets() + { + return { + NET_UNROUTABLE, + NET_IPV4, + NET_IPV6, + NET_ONION, + NET_I2P, + NET_CJDNS, + NET_INTERNAL + }; }; + + mutable Mutex m_mutex; + std::unordered_set m_reachable GUARDED_BY(m_mutex){DefaultNets()}; }; extern ReachableNets g_reachable_nets; diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp index 8631ae0adfef..722577cc2187 100644 --- a/src/rpc/server.cpp +++ b/src/rpc/server.cpp @@ -327,6 +327,12 @@ void SetRPCWarmupStatus(const std::string& newStatus) rpcWarmupStatus = newStatus; } +void SetRPCWarmupStarting() +{ + LOCK(g_rpc_warmup_mutex); + fRPCInWarmup = true; +} + void SetRPCWarmupFinished() { LOCK(g_rpc_warmup_mutex); diff --git a/src/rpc/server.h b/src/rpc/server.h index d4b48f2418fb..19bd54dfc4f3 100644 --- a/src/rpc/server.h +++ b/src/rpc/server.h @@ -29,6 +29,7 @@ void RpcInterruptionPoint(); * immediately with RPC_IN_WARMUP. */ void SetRPCWarmupStatus(const std::string& newStatus); +void SetRPCWarmupStarting(); /* Mark warmup as done. RPC calls will be processed from now on. */ void SetRPCWarmupFinished(); diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index 6ce33621af8e..e891566bc1f6 100644 --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -64,6 +64,7 @@ add_executable(test_bitcoin net_peer_eviction_tests.cpp net_tests.cpp netbase_tests.cpp + node_init_tests.cpp node_warnings_tests.cpp orphanage_tests.cpp pcp_tests.cpp diff --git a/src/test/node_init_tests.cpp b/src/test/node_init_tests.cpp new file mode 100644 index 000000000000..802e31760992 --- /dev/null +++ b/src/test/node_init_tests.cpp @@ -0,0 +1,51 @@ +// Copyright (c) 2025 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 +#include +#include + +#include +#include + +using node::NodeContext; + +BOOST_FIXTURE_TEST_SUITE(node_init_tests, BasicTestingSetup) + +//! Custom implementation of interfaces::Init for testing. +class TestInit : public interfaces::Init +{ +public: + TestInit(NodeContext& node) : m_node(node) + { + InitContext(m_node); + m_node.init = this; + } + std::unique_ptr makeChain() override { return interfaces::MakeChain(m_node); } + std::unique_ptr makeWalletLoader(interfaces::Chain& chain) override + { + return MakeWalletLoader(chain, *Assert(m_node.args)); + } + NodeContext& m_node; +}; + +BOOST_AUTO_TEST_CASE(init_test) +{ + // Clear state set by BasicTestingSetup that AppInitMain assumes is unset. + LogInstance().DisconnectTestLogger(); + m_node.args->SetConfigFilePath({}); + + // Prevent the test from trying to listen on ports 8332 and 8333. + m_node.args->ForceSetArg("-server", "0"); + m_node.args->ForceSetArg("-listen", "0"); + + // Run through initialization and shutdown code. + TestInit init{m_node}; + BOOST_CHECK(AppInitInterfaces(m_node)); + BOOST_CHECK(AppInitMain(m_node)); + Interrupt(m_node); + Shutdown(m_node); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/util/setup_common.cpp b/src/test/util/setup_common.cpp index 76a42d19ea2e..f3ccab0580ee 100644 --- a/src/test/util/setup_common.cpp +++ b/src/test/util/setup_common.cpp @@ -115,6 +115,14 @@ BasicTestingSetup::BasicTestingSetup(const ChainType chainType, TestOpts opts) if (!EnableFuzzDeterminism()) { SeedRandomForTest(SeedRand::FIXED_SEED); } + + // Reset globals + fDiscover = true; + fListen = true; + SetRPCWarmupStarting(); + g_reachable_nets.Reset(); + ClearLocal(); + m_node.shutdown_signal = &m_interrupt; m_node.shutdown_request = [this]{ return m_interrupt(); }; m_node.args = &gArgs; @@ -214,7 +222,10 @@ BasicTestingSetup::~BasicTestingSetup() } else { fs::remove_all(m_path_root); } + // Clear all arguments except for -datadir, which GUI tests currently rely + // on to be set even after the testing setup is destroyed. gArgs.ClearArgs(); + gArgs.ForceSetArg("-datadir", fs::PathToString(m_path_root)); } ChainTestingSetup::ChainTestingSetup(const ChainType chainType, TestOpts opts) From 7f65aac78b95357e00e1c0cd996f05e944ea9d2e Mon Sep 17 00:00:00 2001 From: Ryan Ofsky Date: Thu, 24 Apr 2025 15:02:19 -0400 Subject: [PATCH 0091/2775] ipc: Avoid waiting for clients to disconnect when shutting down This fixes behavior reported by Antoine Poinsot https://github.com/bitcoin/bitcoin/pull/29409#issuecomment-2546088852 where if an IPC client is connected, the node will wait forever for it to disconnect before exiting. --- src/init.cpp | 6 ++++++ src/interfaces/ipc.h | 3 +++ src/ipc/capnp/protocol.cpp | 13 +++++++++++++ src/ipc/interfaces.cpp | 4 ++++ src/ipc/protocol.h | 3 +++ 5 files changed, 29 insertions(+) diff --git a/src/init.cpp b/src/init.cpp index 1f72c22ec2f1..cae52675525f 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -374,6 +374,12 @@ void Shutdown(NodeContext& node) client->stop(); } + // If any -ipcbind clients are still connected, disconnect them now so they + // do not block shutdown. + if (interfaces::Ipc* ipc = node.init->ipc()) { + ipc->disconnectIncoming(); + } + #ifdef ENABLE_ZMQ if (g_zmq_notification_interface) { if (node.validation_signals) node.validation_signals->UnregisterValidationInterface(g_zmq_notification_interface.get()); diff --git a/src/interfaces/ipc.h b/src/interfaces/ipc.h index fb340552c5ca..15e92d1050d5 100644 --- a/src/interfaces/ipc.h +++ b/src/interfaces/ipc.h @@ -70,6 +70,9 @@ class Ipc //! using provided callback. Throws an exception if there was an error. virtual void listenAddress(std::string& address) = 0; + //! Disconnect any incoming connections that are still connected. + virtual void disconnectIncoming() = 0; + //! Add cleanup callback to remote interface that will run when the //! interface is deleted. template diff --git a/src/ipc/capnp/protocol.cpp b/src/ipc/capnp/protocol.cpp index 7bc653d25ce3..4150f9f4664c 100644 --- a/src/ipc/capnp/protocol.cpp +++ b/src/ipc/capnp/protocol.cpp @@ -65,9 +65,20 @@ class CapnpProtocol : public Protocol m_loop.emplace(exe_name, &IpcLogFn, &m_context); if (ready_fn) ready_fn(); mp::ServeStream(*m_loop, fd, init); + m_parent_connection = &m_loop->m_incoming_connections.back(); m_loop->loop(); m_loop.reset(); } + void disconnectIncoming() override + { + if (!m_loop) return; + // Delete incoming connections, except the connection to a parent + // process (if there is one), since a parent process should be able to + // monitor and control this process, even during shutdown. + m_loop->sync([&] { + m_loop->m_incoming_connections.remove_if([this](mp::Connection& c) { return &c != m_parent_connection; }); + }); + } void addCleanup(std::type_index type, void* iface, std::function cleanup) override { mp::ProxyTypeRegister::types().at(type)(iface).cleanup_fns.emplace_back(std::move(cleanup)); @@ -95,6 +106,8 @@ class CapnpProtocol : public Protocol //! creation, decrements on destruction. The loop thread exits when the //! refcount reaches 0. Other IPC objects also hold their own EventLoopRef. std::optional m_loop_ref; + //! Connection to parent, if this is a child process spawned by a parent process. + mp::Connection* m_parent_connection{nullptr}; }; } // namespace diff --git a/src/ipc/interfaces.cpp b/src/ipc/interfaces.cpp index 1d9c39926077..50cef794aa5a 100644 --- a/src/ipc/interfaces.cpp +++ b/src/ipc/interfaces.cpp @@ -86,6 +86,10 @@ class IpcImpl : public interfaces::Ipc int fd = m_process->bind(gArgs.GetDataDirNet(), m_exe_name, address); m_protocol->listen(fd, m_exe_name, m_init); } + void disconnectIncoming() override + { + m_protocol->disconnectIncoming(); + } void addCleanup(std::type_index type, void* iface, std::function cleanup) override { m_protocol->addCleanup(type, iface, std::move(cleanup)); diff --git a/src/ipc/protocol.h b/src/ipc/protocol.h index cb964d802fb5..335ffddc0b11 100644 --- a/src/ipc/protocol.h +++ b/src/ipc/protocol.h @@ -58,6 +58,9 @@ class Protocol //! clients and servers independently. virtual void serve(int fd, const char* exe_name, interfaces::Init& init, const std::function& ready_fn = {}) = 0; + //! Disconnect any incoming connections that are still connected. + virtual void disconnectIncoming() = 0; + //! Add cleanup callback to interface that will run when the interface is //! deleted. virtual void addCleanup(std::type_index type, void* iface, std::function cleanup) = 0; From 0c28068ceb7b95885a5abb2685a89bb7c03c1689 Mon Sep 17 00:00:00 2001 From: Ryan Ofsky Date: Thu, 24 Apr 2025 15:13:05 -0400 Subject: [PATCH 0092/2775] doc: Improve IPC interface comments Fix some comments that were referring to previous versions of these methods and did not make sense. --- src/interfaces/ipc.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/interfaces/ipc.h b/src/interfaces/ipc.h index 15e92d1050d5..8f441118eadd 100644 --- a/src/interfaces/ipc.h +++ b/src/interfaces/ipc.h @@ -59,15 +59,15 @@ class Ipc //! true. If this is not a spawned child process, return false. virtual bool startSpawnedProcess(int argc, char* argv[], int& exit_status) = 0; - //! Connect to a socket address and make a client interface proxy object - //! using provided callback. connectAddress returns an interface pointer if - //! the connection was established, returns null if address is empty ("") or - //! disabled ("0") or if a connection was refused but not required ("auto"), - //! and throws an exception if there was an unexpected error. + //! Connect to a socket address and return a pointer to its Init interface. + //! Returns a non-null pointer if the connection was established, returns + //! null if address is empty ("") or disabled ("0") or if a connection was + //! refused but not required ("auto"), and throws an exception if there was + //! an unexpected error. virtual std::unique_ptr connectAddress(std::string& address) = 0; - //! Connect to a socket address and make a client interface proxy object - //! using provided callback. Throws an exception if there was an error. + //! Listen on a socket address exposing this process's init interface to + //! clients. Throws an exception if there was an error. virtual void listenAddress(std::string& address) = 0; //! Disconnect any incoming connections that are still connected. From 216099591632dc8a57cc1a3b1ad08e909f8c73cc Mon Sep 17 00:00:00 2001 From: Ryan Ofsky Date: Thu, 24 Apr 2025 15:15:08 -0400 Subject: [PATCH 0093/2775] ipc: Add Ctrl-C handler for spawned subprocesses This fixes an error reported by Antoine Poinsot in https://github.com/bitcoin-core/libmultiprocess/issues/123 that does not happen in master, but does happen with https://github.com/bitcoin/bitcoin/pull/10102 applied, where if Ctrl-C is pressed when `bitcoin-node` is started, it is handled by both `bitcoin-node` and `bitcoin-wallet` processes, causing the wallet to shutdown abruptly instead of waiting for the node and shutting down cleanly. This change fixes the problem by having the wallet process print to stdout when it receives a Ctrl-C signal but not otherwise react, letting the node shut everything down cleanly. --- src/ipc/interfaces.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/ipc/interfaces.cpp b/src/ipc/interfaces.cpp index 50cef794aa5a..d6b078e61b00 100644 --- a/src/ipc/interfaces.cpp +++ b/src/ipc/interfaces.cpp @@ -13,6 +13,7 @@ #include #include +#include #include #include #include @@ -26,6 +27,28 @@ namespace ipc { namespace { +#ifndef WIN32 +std::string g_ignore_ctrl_c; + +void HandleCtrlC(int) +{ + // (void)! needed to suppress -Wunused-result warning from GCC + (void)!write(STDOUT_FILENO, g_ignore_ctrl_c.data(), g_ignore_ctrl_c.size()); +} +#endif + +void IgnoreCtrlC(std::string message) +{ +#ifndef WIN32 + g_ignore_ctrl_c = std::move(message); + struct sigaction sa{}; + sa.sa_handler = HandleCtrlC; + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + sigaction(SIGINT, &sa, nullptr); +#endif +} + class IpcImpl : public interfaces::Ipc { public: @@ -53,6 +76,7 @@ class IpcImpl : public interfaces::Ipc if (!m_process->checkSpawned(argc, argv, fd)) { return false; } + IgnoreCtrlC(strprintf("[%s] SIGINT received — waiting for parent to shut down.\n", m_exe_name)); m_protocol->serve(fd, m_exe_name, m_init); exit_status = EXIT_SUCCESS; return true; From 2581258ec200efb173ea6449ad09b2e7f1cc02e0 Mon Sep 17 00:00:00 2001 From: Ryan Ofsky Date: Thu, 24 Apr 2025 15:20:58 -0400 Subject: [PATCH 0094/2775] ipc: Handle bitcoin-wallet disconnections This fixes an error reported by Antoine Poinsot in https://github.com/bitcoin-core/libmultiprocess/issues/123 that does not happen in master, but does happen with https://github.com/bitcoin/bitcoin/pull/10102 applied, where if the child bitcoin-wallet process is killed (either by an external signal or by Ctrl-C as reported in the issue) the bitcoin-node process will not shutdown cleanly after that because chain client stop() calls will fail. This change fixes the problem by handling ipc::Exception errors thrown during the stop() calls, and it relies on the fixes to disconnect detection implemented in https://github.com/bitcoin-core/libmultiprocess/pull/160 to work effectively. --- src/init.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/init.cpp b/src/init.cpp index cae52675525f..7952495c0936 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -298,6 +299,14 @@ void Shutdown(NodeContext& node) StopREST(); StopRPC(); StopHTTPServer(); + for (auto& client : node.chain_clients) { + try { + client->stop(); + } catch (const ipc::Exception& e) { + LogDebug(BCLog::IPC, "Chain client did not disconnect cleanly: %s", e.what()); + client.reset(); + } + } StopMapPort(); // Because these depend on each-other, we make sure that neither can be @@ -370,9 +379,6 @@ void Shutdown(NodeContext& node) } } } - for (const auto& client : node.chain_clients) { - client->stop(); - } // If any -ipcbind clients are still connected, disconnect them now so they // do not block shutdown. From e886c65b6b37aaaf5d22ca68bc14e55d8ec78212 Mon Sep 17 00:00:00 2001 From: Ryan Ofsky Date: Mon, 4 Aug 2025 13:38:26 -0400 Subject: [PATCH 0095/2775] Squashed 'src/ipc/libmultiprocess/' changes from 27c7e8e5a581..b4120d34bad2 b4120d34bad2 Merge bitcoin-core/libmultiprocess#192: doc: fix typos 6ecbdcd35a93 doc: fix typos a11e6905c238 Merge bitcoin-core/libmultiprocess#186: Fix mptest failures in bitcoin CI 6f340a583f2b doc: fix DrahtBot LLM Linter error c6f7fdf17350 type-context: revert client disconnect workaround e09143d2ea2f proxy-types: fix UndefinedBehaviorSanitizer: null-pointer-use 84b292fcc4db mptest: fix MemorySanitizer: use-of-uninitialized-value fe4a188803c6 proxy-io: fix race conditions in disconnect callback code d8011c83608e proxy-io: fix race conditions in ProxyClientBase cleanup handler 97e82ce19c47 doc: Add note about Waiter::m_mutex and interaction with the EventLoop::m_mutex 81d58f5580e8 refactor: Rename ProxyClient cleanup_it variable 07230f259f55 refactor: rename ProxyClient::m_cleanup_it c0efaa5e8cb1 Merge chaincodelabs/libmultiprocess#187: ci: have bash scripts explicitly opt out of locale dependence. 0d986ff144cd mptest: fix race condition in TestSetup constructor d2f6aa2e84ef ci: add thread sanitizer job 3a6db38e561f ci: rename configs to .bash 401e0ce1d9c3 ci: add copyright to bash scripts e956467ae464 ci: export LC_ALL 8954cc0377d8 Merge chaincodelabs/libmultiprocess#184: Add CI jobs and fix clang-tidy and iwyu errors 757e13a75546 ci: add gnu32 cross-compiled 32-bit build 15bf349000eb doc: fix typo found by DrahtBot 1a598d5905f7 clang-tidy: drop 'bitcoin-*' check cbb1e43fdc6e ci: test libc++ instead of libstdc++ in one job 76313450c2c4 type-context: disable clang-tidy UndefinedBinaryOperatorResult error 4896e7fe51ba proxy-types: fix clang-tidy EnumCastOutOfRange error 060a73926956 proxy-types: fix clang-tidy StackAddressEscape error 977d721020f6 ci: add github actions jobs testing gcc, clang-20, clang-tidy, and iwyu 0d5f1faae5da iwyu: fix add/remove include errors 753d2b10cc27 util: fix clang-tidy modernize-use-equals-default error ae4f1dc2bb1a type-number: fix clang-tidy modernize-use-nullptr error 07a741bf6946 proxy-types: fix clang-tidy bugprone-use-after-move error 3673114bc9d9 proxy-types: fix clang-tidy bugprone-use-after-move error 422923f38485 proxy-types: fix clang-tidy bugprone-use-after-move error c6784c6adefa mpgen: disable clang-tidy misc-no-recursion error c5498aa11ba6 tidy: copy clang-tidy file from bitcoin core 258a617c1eec Merge chaincodelabs/libmultiprocess#160: refactor: EventLoop locking cleanups + client disconnect exception 84cf56a0b5f4 test: Test disconnects during IPC calls 949573da8411 Prevent IPC server crash if disconnected during IPC call 019839758085 Merge chaincodelabs/libmultiprocess#179: scripted-diff: Remove copyright year (ranges) ea38392960e1 Prevent EventLoop async cleanup thread early exit during shutdown 616d9a75d20a doc: Document ProxyClientBase destroy_connection option 56fff76f940b Improve IPC client disconnected exceptions 9b8ed3dc5f87 refactor: Add clang thread safety annotations to EventLoop 52256e730f51 refactor: Remove DestructorCatcher and AsyncCallable f24894794adf refactor: Drop addClient/removeClient methods 2b830e558e61 refactor: Use EventLoopRef instead of addClient/removeClient 315ff537fb65 refactor: Add ProxyContext EventLoop* member 9aaeec3678d3 proxy-io.h: Add EventLoopRef RAII class handle addClient/removeClient refcounting f58c8d8ba2f0 proxy-io.h: Add more detailed EventLoop comment 5108445e5d16 test: Add test coverage for client & server disconnections 59030c68cb5f Merge chaincodelabs/libmultiprocess#181: type-function.h: Fix CustomBuildField overload 688140b1dffc test: Add coverage for type-function.h 8b96229da58e type-function.h: Fix CustomBuildField overload fa2ff9a66842 scripted-diff: Remove copyright year (ranges) git-subtree-dir: src/ipc/libmultiprocess git-subtree-split: b4120d34bad2de28141c5770f6e8df8e54898987 --- .clang-tidy | 67 +++++----- .github/workflows/ci.yml | 29 +++++ CMakeLists.txt | 30 ++++- ci/README.md | 25 ++++ ci/configs/default.bash | 5 + ci/configs/gnu32.bash | 9 ++ ci/configs/llvm.bash | 11 ++ ci/configs/sanitize.bash | 7 + ci/scripts/ci.sh | 22 ++++ ci/scripts/run.sh | 13 ++ cmake/Config.cmake.in | 2 +- cmake/TargetCapnpSources.cmake | 2 + cmake/compat_config.cmake | 2 +- cmake/compat_find.cmake | 10 +- cmake/pthread_checks.cmake | 2 +- example/CMakeLists.txt | 2 +- example/calculator.capnp | 2 +- example/calculator.cpp | 14 +- example/calculator.h | 2 +- example/example.cpp | 11 +- example/init.capnp | 5 +- example/init.h | 2 +- example/printer.capnp | 2 +- example/printer.cpp | 16 ++- example/printer.h | 2 +- example/types.h | 11 +- include/mp/config.h.in | 2 +- include/mp/proxy-io.h | 175 ++++++++++++++----------- include/mp/proxy-types.h | 105 ++++++++------- include/mp/proxy.capnp | 2 +- include/mp/proxy.h | 53 ++++++-- include/mp/type-char.h | 2 +- include/mp/type-chrono.h | 2 +- include/mp/type-context.h | 36 ++--- include/mp/type-data.h | 2 +- include/mp/type-decay.h | 2 +- include/mp/type-exception.h | 2 +- include/mp/type-function.h | 4 +- include/mp/type-interface.h | 2 +- include/mp/type-map.h | 2 +- include/mp/type-message.h | 2 +- include/mp/type-number.h | 10 +- include/mp/type-optional.h | 2 +- include/mp/type-pair.h | 2 +- include/mp/type-pointer.h | 2 +- include/mp/type-set.h | 2 +- include/mp/type-string.h | 2 +- include/mp/type-struct.h | 2 +- include/mp/type-threadmap.h | 2 +- include/mp/type-tuple.h | 2 +- include/mp/type-vector.h | 2 +- include/mp/type-void.h | 2 +- include/mp/util.h | 104 ++++++++------- shell.nix | 28 ++++ src/mp/gen.cpp | 51 ++++++-- src/mp/proxy.cpp | 184 ++++++++++++++------------ src/mp/util.cpp | 6 +- test/CMakeLists.txt | 4 +- test/mp/test/foo-types.h | 18 ++- test/mp/test/foo.capnp | 10 +- test/mp/test/foo.h | 8 +- test/mp/test/test.cpp | 232 ++++++++++++++++++++++++++++----- 62 files changed, 933 insertions(+), 440 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 ci/README.md create mode 100644 ci/configs/default.bash create mode 100644 ci/configs/gnu32.bash create mode 100644 ci/configs/llvm.bash create mode 100644 ci/configs/sanitize.bash create mode 100755 ci/scripts/ci.sh create mode 100755 ci/scripts/run.sh create mode 100644 shell.nix diff --git a/.clang-tidy b/.clang-tidy index 2d29f120ae4f..9a2afcc5248c 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1,41 +1,40 @@ Checks: ' -*, -bugprone-*, --bugprone-easily-swappable-parameters, --bugprone-exception-escape, --bugprone-move-forwarding-reference, --bugprone-narrowing-conversions, --bugprone-reserved-identifier, -misc-*, --misc-non-private-member-variables-in-classes, --misc-no-recursion, --misc-unconventional-assign-operator, --misc-unused-parameters, --misc-use-anonymous-namespace, -modernize-*, --modernize-avoid-c-arrays, --modernize-concat-nested-namespaces, --modernize-deprecated-headers, --modernize-use-nodiscard, --modernize-use-trailing-return-type, --modernize-use-using, +bugprone-argument-comment, +bugprone-move-forwarding-reference, +bugprone-string-constructor, +bugprone-use-after-move, +bugprone-lambda-function-name, +bugprone-unhandled-self-assignment, +misc-unused-using-decls, +misc-no-recursion, +modernize-deprecated-headers, +modernize-use-default-member-init, +modernize-use-emplace, +modernize-use-equals-default, +modernize-use-noexcept, +modernize-use-nullptr, +modernize-use-starts-ends-with, performance-*, -performance-avoid-endl, +-performance-enum-size, +-performance-inefficient-string-concatenation, +-performance-no-int-to-ptr, -performance-noexcept-move-constructor, -readability-*, --readability-braces-around-statements, --readability-convert-member-functions-to-static, --readability-else-after-return, --readability-function-cognitive-complexity, --readability-identifier-length, --readability-implicit-bool-conversion, --readability-inconsistent-declaration-parameter-name, --readability-magic-numbers, --readability-named-parameter, --readability-uppercase-literal-suffix, --readability-use-anyofallof, +-performance-unnecessary-value-param, +readability-const-return-type, +readability-redundant-declaration, +readability-redundant-string-init, +clang-analyzer-core.*, +-clang-analyzer-core.UndefinedBinaryOperatorResult, +clang-analyzer-optin.core.*, ' +HeaderFilterRegex: '.' +WarningsAsErrors: '*' CheckOptions: - - key: modernize-use-override.IgnoreDestructors - value: true -HeaderFilterRegex: 'example/calculator.h|example/init.h|example/printer.h|include/mp/proxy-io.h|include/mp/proxy-types.h|include/mp/proxy.h|include/mp/util.h|test/mp/test/foo-types.h|test/mp/test/foo.h' + - key: modernize-deprecated-headers.CheckHeaderFile + value: false + - key: performance-move-const-arg.CheckTriviallyCopyableMove + value: false + - key: bugprone-unhandled-self-assignment.WarnOnlyIfThisHasSuspiciousField + value: false diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000000..2e751c5fd186 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,29 @@ +name: CI + +on: + push: + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + config: [default, llvm, gnu32, sanitize] + + name: build • ${{ matrix.config }} + + steps: + - uses: actions/checkout@v4 + + - name: Install Nix + uses: cachix/install-nix-action@v31 # 2025-05-27, from https://github.com/cachix/install-nix-action/tags + with: + nix_path: nixpkgs=channel:nixos-25.05 # latest release + + - name: Run CI script + env: + CI_CONFIG: ci/configs/${{ matrix.config }}.bash + run: ci/scripts/run.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index 5ade99338cea..d29eb490d964 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2019 The Bitcoin Core developers +# Copyright (c) The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -15,16 +15,35 @@ include("cmake/compat_find.cmake") find_package(CapnProto REQUIRED) find_package(Threads REQUIRED) -option(Libmultiprocess_ENABLE_CLANG_TIDY "Run clang-tidy with the compiler." OFF) -if(Libmultiprocess_ENABLE_CLANG_TIDY) +set(MPGEN_EXECUTABLE "" CACHE FILEPATH "If specified, should be full path to an external mpgen binary to use rather than the one built internally.") + +option(MP_ENABLE_CLANG_TIDY "Run clang-tidy with the compiler." OFF) +if(MP_ENABLE_CLANG_TIDY) find_program(CLANG_TIDY_EXECUTABLE NAMES clang-tidy) if(NOT CLANG_TIDY_EXECUTABLE) - message(FATAL_ERROR "Libmultiprocess_ENABLE_CLANG_TIDY is ON but clang-tidy is not found.") + message(FATAL_ERROR "MP_ENABLE_CLANG_TIDY is ON but clang-tidy is not found.") endif() set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXECUTABLE}") + + # Workaround for nix from https://gitlab.kitware.com/cmake/cmake/-/issues/20912#note_793338 + # Nix injects header paths via $NIX_CFLAGS_COMPILE; CMake tags these as + # CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES and omits them from the compile + # database, so clang-tidy, which ignores $NIX_CFLAGS_COMPILE, can't find capnp + # headers. Setting them as standard passes them to clang-tidy. + set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}) endif() -set(MPGEN_EXECUTABLE "" CACHE FILEPATH "If specified, should be full path to an external mpgen binary to use rather than the one built internally.") +option(MP_ENABLE_IWYU "Run include-what-you-use with the compiler." OFF) +if(MP_ENABLE_IWYU) + find_program(IWYU_EXECUTABLE NAMES include-what-you-use iwyu) + if(NOT IWYU_EXECUTABLE) + message(FATAL_ERROR "MP_ENABLE_IWYU is ON but include-what-you-use was not found.") + endif() + set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE "${IWYU_EXECUTABLE};-Xiwyu;--error") + if(DEFINED ENV{IWYU_MAPPING_FILE}) + list(APPEND CMAKE_CXX_INCLUDE_WHAT_YOU_USE "-Xiwyu" "--mapping_file=$ENV{IWYU_MAPPING_FILE}") + endif() +endif() include("cmake/compat_config.cmake") include("cmake/pthread_checks.cmake") @@ -51,6 +70,7 @@ configure_file(include/mp/config.h.in "${CMAKE_CURRENT_BINARY_DIR}/include/mp/co # Generated C++ Capn'Proto schema files capnp_generate_cpp(MP_PROXY_SRCS MP_PROXY_HDRS include/mp/proxy.capnp) +set_source_files_properties("${MP_PROXY_SRCS}" PROPERTIES SKIP_LINTING TRUE) # Ignored before cmake 3.27 # util library add_library(mputil OBJECT src/mp/util.cpp) diff --git a/ci/README.md b/ci/README.md new file mode 100644 index 000000000000..85eb467c1fea --- /dev/null +++ b/ci/README.md @@ -0,0 +1,25 @@ +### CI quick-reference + +All CI is just bash and nix. + +* **Workflow**: + - `.github/workflows/ci.yml` – lists the jobs (`default`, `llvm`, …). +* **Scripts**: + - `ci/scripts/run.sh` – spins up the Nix shell then calls… + - `ci/scripts/ci.sh` – …to configure, build, and test. +* **Configuration**: + - `ci/configs/*.sh` – defines flags for each job. + - `shell.nix` – defines build environment (compilers, tools, libraries). +* **Build directories**: + - `build-*/` – separate build directories (like `build-default`, `build-llvm`) will be created for each job. + +To run jobs locally: + +```bash +CI_CONFIG=ci/configs/default.bash ci/scripts/run.sh +CI_CONFIG=ci/configs/llvm.bash ci/scripts/run.sh +CI_CONFIG=ci/configs/gnu32.bash ci/scripts/run.sh +CI_CONFIG=ci/configs/sanitize.bash ci/scripts/run.sh +``` + +By default CI jobs will reuse their build directories. `CI_CLEAN=1` can be specified to delete them before running instead. diff --git a/ci/configs/default.bash b/ci/configs/default.bash new file mode 100644 index 000000000000..56231228d4f3 --- /dev/null +++ b/ci/configs/default.bash @@ -0,0 +1,5 @@ +CI_DESC="CI job using default libraries and tools, and running IWYU" +CI_DIR=build-default +export CXXFLAGS="-Werror -Wall -Wextra -Wpedantic -Wno-unused-parameter" +CMAKE_ARGS=(-DMP_ENABLE_IWYU=ON) +BUILD_ARGS=(-k) diff --git a/ci/configs/gnu32.bash b/ci/configs/gnu32.bash new file mode 100644 index 000000000000..961821ce8ce7 --- /dev/null +++ b/ci/configs/gnu32.bash @@ -0,0 +1,9 @@ +CI_DESC="CI job cross-compiling to 32-bit" +CI_DIR=build-gnu32 +NIX_ARGS=( + --arg minimal true + --arg crossPkgs 'import { crossSystem = { config = "i686-unknown-linux-gnu"; }; }' +) +export CXXFLAGS="-Werror -Wall -Wextra -Wpedantic -Wno-unused-parameter" +CMAKE_ARGS=(-G Ninja) +BUILD_ARGS=(-k 0) diff --git a/ci/configs/llvm.bash b/ci/configs/llvm.bash new file mode 100644 index 000000000000..afa957ed86ea --- /dev/null +++ b/ci/configs/llvm.bash @@ -0,0 +1,11 @@ +CI_DESC="CI job using LLVM-based libraries and tools (clang, libc++, clang-tidy, iwyu) and testing Ninja" +CI_DIR=build-llvm +NIX_ARGS=(--arg enableLibcxx true) +export CXX=clang++ +export CXXFLAGS="-Werror -Wall -Wextra -Wpedantic -Wthread-safety-analysis -Wno-unused-parameter" +CMAKE_ARGS=( + -G Ninja + -DMP_ENABLE_CLANG_TIDY=ON + -DMP_ENABLE_IWYU=ON +) +BUILD_ARGS=(-k 0) diff --git a/ci/configs/sanitize.bash b/ci/configs/sanitize.bash new file mode 100644 index 000000000000..ce920f442799 --- /dev/null +++ b/ci/configs/sanitize.bash @@ -0,0 +1,7 @@ +CI_DESC="CI job running ThreadSanitizer" +CI_DIR=build-sanitize +export CXX=clang++ +export CXXFLAGS="-ggdb -Werror -Wall -Wextra -Wpedantic -Wthread-safety-analysis -Wno-unused-parameter -fsanitize=thread" +CMAKE_ARGS=() +BUILD_ARGS=(-k -j4) +BUILD_TARGETS=(mptest) diff --git a/ci/scripts/ci.sh b/ci/scripts/ci.sh new file mode 100755 index 000000000000..baf21700f6a7 --- /dev/null +++ b/ci/scripts/ci.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +# +# Copyright (c) The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +export LC_ALL=C.UTF-8 + +set -o errexit -o nounset -o pipefail -o xtrace + +[ "${CI_CONFIG+x}" ] && source "$CI_CONFIG" + +: "${CI_DIR:=build}" +if ! [ -v BUILD_TARGETS ]; then + BUILD_TARGETS=(all tests mpexamples) +fi + +[ -n "${CI_CLEAN-}" ] && rm -rf "${CI_DIR}" + +cmake -B "$CI_DIR" "${CMAKE_ARGS[@]+"${CMAKE_ARGS[@]}"}" +cmake --build "$CI_DIR" -t "${BUILD_TARGETS[@]}" -- "${BUILD_ARGS[@]+"${BUILD_ARGS[@]}"}" +ctest --test-dir "$CI_DIR" --output-on-failure diff --git a/ci/scripts/run.sh b/ci/scripts/run.sh new file mode 100755 index 000000000000..11b91845e12e --- /dev/null +++ b/ci/scripts/run.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +# +# Copyright (c) The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +export LC_ALL=C.UTF-8 + +set -o errexit -o nounset -o pipefail -o xtrace + +[ "${CI_CONFIG+x}" ] && source "$CI_CONFIG" + +nix-shell --pure --keep CI_CONFIG --keep CI_CLEAN "${NIX_ARGS[@]+"${NIX_ARGS[@]}"}" --run ci/scripts/ci.sh shell.nix diff --git a/cmake/Config.cmake.in b/cmake/Config.cmake.in index edff7d143be7..60187f08f4d4 100644 --- a/cmake/Config.cmake.in +++ b/cmake/Config.cmake.in @@ -17,7 +17,7 @@ if ("Bin" IN_LIST ${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS) endif() if ("Lib" IN_LIST ${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS) - # Setting FOUND_LIBATOMIC is needed on debian & ubuntu systems to work around bug in + # Setting FOUND_LIBATOMIC is needed on Debian & Ubuntu systems to work around bug in # their capnproto packages. See compat_find.cmake for a more complete explanation. set(FOUND_LIBATOMIC TRUE) include(CMakeFindDependencyMacro) diff --git a/cmake/TargetCapnpSources.cmake b/cmake/TargetCapnpSources.cmake index cf7d20feb968..347ef4a010a0 100644 --- a/cmake/TargetCapnpSources.cmake +++ b/cmake/TargetCapnpSources.cmake @@ -81,6 +81,8 @@ function(target_capnp_sources target include_prefix) DEPENDS ${capnp_file} VERBATIM ) + # Skip linting for capnp-generated files but keep it for mpgen-generated ones + set_source_files_properties(${capnp_file}.c++ PROPERTIES SKIP_LINTING TRUE) # Ignored before cmake 3.27 target_sources(${target} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${capnp_file}.c++ ${CMAKE_CURRENT_BINARY_DIR}/${capnp_file}.proxy-client.c++ diff --git a/cmake/compat_config.cmake b/cmake/compat_config.cmake index 283cd38c49ec..f9d3004f05c3 100644 --- a/cmake/compat_config.cmake +++ b/cmake/compat_config.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2019 The Bitcoin Core developers +# Copyright (c) The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/cmake/compat_find.cmake b/cmake/compat_find.cmake index e1d4f7d427a5..d3d7bc6d3f89 100644 --- a/cmake/compat_find.cmake +++ b/cmake/compat_find.cmake @@ -1,18 +1,18 @@ -# Copyright (c) 2024 The Bitcoin Core developers +# Copyright (c) The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. # compat_find.cmake -- compatibility workarounds meant to be included before # cmake find_package() calls are made -# Set FOUND_LIBATOMIC to work around bug in debian capnproto package that is -# debian-specific and does not happpen upstream. Debian includes a patch +# Set FOUND_LIBATOMIC to work around bug in Debian capnproto package that is +# Debian-specific and does not happen upstream. Debian includes a patch # https://sources.debian.org/patches/capnproto/1.0.1-4/07_libatomic.patch/ which # uses check_library_exists(atomic __atomic_load_8 ...) and it fails because the -# symbol name conflicts with a compiler instrinsic as described +# symbol name conflicts with a compiler intrinsic as described # https://github.com/bitcoin-core/libmultiprocess/issues/68#issuecomment-1135150171. # This could be fixed by improving the check_library_exists function as -# described in the github comment, or by changing the debian patch to check for +# described in the github comment, or by changing the Debian patch to check for # the symbol a different way, but simplest thing to do is work around the # problem by setting FOUND_LIBATOMIC. This problem has probably not # been noticed upstream because it only affects CMake packages depending on diff --git a/cmake/pthread_checks.cmake b/cmake/pthread_checks.cmake index b54c0b45b8d4..241978d5677d 100644 --- a/cmake/pthread_checks.cmake +++ b/cmake/pthread_checks.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2024 The Bitcoin Core developers +# Copyright (c) The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 333462b8249c..0e758d57764d 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2021 The Bitcoin Core developers +# Copyright (c) The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/example/calculator.capnp b/example/calculator.capnp index 8f546552f705..945518836016 100644 --- a/example/calculator.capnp +++ b/example/calculator.capnp @@ -1,4 +1,4 @@ -# Copyright (c) 2021 The Bitcoin Core developers +# Copyright (c) The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/example/calculator.cpp b/example/calculator.cpp index ae69ce8a626c..016a04863f8a 100644 --- a/example/calculator.cpp +++ b/example/calculator.cpp @@ -1,19 +1,23 @@ -// Copyright (c) 2021 The Bitcoin Core developers +// Copyright (c) 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 +#include +#include // NOLINT(misc-include-cleaner) // IWYU pragma: keep + #include +#include #include -#include -#include // NOLINT(misc-include-cleaner) -#include #include +#include +#include +#include #include #include -#include #include #include +#include #include class CalculatorImpl : public Calculator diff --git a/example/calculator.h b/example/calculator.h index 749e435547de..342a3c1d154a 100644 --- a/example/calculator.h +++ b/example/calculator.h @@ -1,4 +1,4 @@ -// Copyright (c) 2021 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/example/example.cpp b/example/example.cpp index a4f84c55a758..5088f79649f1 100644 --- a/example/example.cpp +++ b/example/example.cpp @@ -1,13 +1,18 @@ -// Copyright (c) 2021 The Bitcoin Core developers +// Copyright (c) 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 +#include + +#include // IWYU pragma: keep #include #include #include -#include -#include #include +#include +#include +#include #include #include #include diff --git a/example/init.capnp b/example/init.capnp index 2b0b5113972c..01897f13dca4 100644 --- a/example/init.capnp +++ b/example/init.capnp @@ -1,4 +1,4 @@ -# Copyright (c) 2021 The Bitcoin Core developers +# Copyright (c) The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -12,8 +12,7 @@ using Printer = import "printer.capnp"; $Proxy.include("calculator.h"); $Proxy.include("init.h"); $Proxy.include("printer.h"); -$Proxy.includeTypes("calculator.capnp.proxy-types.h"); -$Proxy.includeTypes("printer.capnp.proxy-types.h"); +$Proxy.includeTypes("types.h"); interface InitInterface $Proxy.wrap("Init") { construct @0 (threadMap: Proxy.ThreadMap) -> (threadMap :Proxy.ThreadMap); diff --git a/example/init.h b/example/init.h index 314d5d7f2380..54e36da8db1d 100644 --- a/example/init.h +++ b/example/init.h @@ -1,4 +1,4 @@ -// Copyright (c) 2021 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/example/printer.capnp b/example/printer.capnp index e27ce4120485..0f407b771411 100644 --- a/example/printer.capnp +++ b/example/printer.capnp @@ -1,4 +1,4 @@ -# Copyright (c) 2021 The Bitcoin Core developers +# Copyright (c) The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/example/printer.cpp b/example/printer.cpp index 9f85d450b66b..eb384018baa9 100644 --- a/example/printer.cpp +++ b/example/printer.cpp @@ -1,18 +1,24 @@ -// Copyright (c) 2021 The Bitcoin Core developers +// Copyright (c) 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 + +#include +#include // NOLINT(misc-include-cleaner) // IWYU pragma: keep + #include +#include #include -#include -#include // NOLINT(misc-include-cleaner) -#include #include +#include +#include +#include #include #include -#include #include #include +#include class PrinterImpl : public Printer { diff --git a/example/printer.h b/example/printer.h index 066facf1e262..fbdb35c057ea 100644 --- a/example/printer.h +++ b/example/printer.h @@ -1,4 +1,4 @@ -// Copyright (c) 2021 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/example/types.h b/example/types.h index 0c0bd9342b9c..c926a00b40df 100644 --- a/example/types.h +++ b/example/types.h @@ -1,14 +1,23 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) 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 EXAMPLE_TYPES_H #define EXAMPLE_TYPES_H +#include +#include + +// IWYU pragma: begin_exports #include #include #include #include #include +// IWYU pragma: end_exports + +struct InitInterface; // IWYU pragma: export +struct CalculatorInterface; // IWYU pragma: export +struct PrinterInterface; // IWYU pragma: export #endif // EXAMPLE_TYPES_H diff --git a/include/mp/config.h.in b/include/mp/config.h.in index 79ebc4790b88..9d3c62409ae7 100644 --- a/include/mp/config.h.in +++ b/include/mp/config.h.in @@ -1,4 +1,4 @@ -// Copyright (c) 2019 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/proxy-io.h b/include/mp/proxy-io.h index dff8c2a63a47..367a9bebbc30 100644 --- a/include/mp/proxy-io.h +++ b/include/mp/proxy-io.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -13,12 +13,15 @@ #include #include +#include #include -#include +#include #include #include +#include #include #include +#include namespace mp { struct ThreadContext; @@ -63,16 +66,18 @@ struct ProxyClient : public ProxyClientBase ProxyClient(const ProxyClient&) = delete; ~ProxyClient(); - void setCleanup(const std::function& fn); - - //! Cleanup function to run when the connection is closed. If the Connection - //! gets destroyed before this ProxyClient object, this cleanup - //! callback lets it destroy this object and remove its entry in the - //! thread's request_threads or callback_threads map (after resetting - //! m_cleanup_it so the destructor does not try to access it). But if this - //! object gets destroyed before the Connection, there's no need to run the - //! cleanup function and the destructor will unregister it. - std::optional m_cleanup_it; + void setDisconnectCallback(const std::function& fn); + + //! Reference to callback function that is run if there is a sudden + //! disconnect and the Connection object is destroyed before this + //! ProxyClient object. The callback will destroy this object and + //! remove its entry from the thread's request_threads or callback_threads + //! map. It will also reset m_disconnect_cb so the destructor does not + //! access it. In the normal case where there is no sudden disconnect, the + //! destructor will unregister m_disconnect_cb so the callback is never run. + //! Since this variable is accessed from multiple threads, accesses should + //! be guarded with the associated Waiter::m_mutex. + std::optional m_disconnect_cb; }; template <> @@ -129,6 +134,28 @@ std::string LongThreadName(const char* exe_name); //! Event loop implementation. //! +//! Cap'n Proto threading model is very simple: all I/O operations are +//! asynchronous and must be performed on a single thread. This includes: +//! +//! - Code starting an asynchronous operation (calling a function that returns a +//! promise object) +//! - Code notifying that an asynchronous operation is complete (code using a +//! fulfiller object) +//! - Code handling a completed operation (code chaining or waiting for a promise) +//! +//! All of this code needs to access shared state, and there is no mutex that +//! can be acquired to lock this state because Cap'n Proto +//! assumes it will only be accessed from one thread. So all this code needs to +//! actually run on one thread, and the EventLoop::loop() method is the entry point for +//! this thread. ProxyClient and ProxyServer objects that use other threads and +//! need to perform I/O operations post to this thread using EventLoop::post() +//! and EventLoop::sync() methods. +//! +//! Specifically, because ProxyClient methods can be called from arbitrary +//! threads, and ProxyServer methods can run on arbitrary threads, ProxyClient +//! methods use the EventLoop thread to send requests, and ProxyServer methods +//! use the thread to return results. +//! //! Based on https://groups.google.com/d/msg/capnproto/TuQFF1eH2-M/g81sHaTAAQAJ class EventLoop { @@ -144,7 +171,7 @@ class EventLoop //! Run function on event loop thread. Does not return until function completes. //! Must be called while the loop() function is active. - void post(const std::function& fn); + void post(kj::Function fn); //! Wrapper around EventLoop::post that takes advantage of the //! fact that callable will not go out of scope to avoid requirement that it @@ -152,9 +179,13 @@ class EventLoop template void sync(Callable&& callable) { - post(std::ref(callable)); + post(std::forward(callable)); } + //! Register cleanup function to run on asynchronous worker thread without + //! blocking the event loop thread. + void addAsyncCleanup(std::function fn); + //! Start asynchronous worker thread if necessary. This is only done if //! there are ProxyServerBase::m_impl objects that need to be destroyed //! asynchronously, without tying up the event loop thread. This can happen @@ -166,13 +197,10 @@ class EventLoop //! is important that ProxyServer::m_impl destructors do not run on the //! eventloop thread because they may need it to do I/O if they perform //! other IPC calls. - void startAsyncThread(std::unique_lock& lock); + void startAsyncThread() MP_REQUIRES(m_mutex); - //! Add/remove remote client reference counts. - void addClient(std::unique_lock& lock); - bool removeClient(std::unique_lock& lock); //! Check if loop should exit. - bool done(std::unique_lock& lock) const; + bool done() const MP_REQUIRES(m_mutex); Logger log() { @@ -195,10 +223,10 @@ class EventLoop std::thread m_async_thread; //! Callback function to run on event loop thread during post() or sync() call. - const std::function* m_post_fn = nullptr; + kj::Function* m_post_fn MP_GUARDED_BY(m_mutex) = nullptr; //! Callback functions to run on async thread. - CleanupList m_async_fns; + std::optional m_async_fns MP_GUARDED_BY(m_mutex); //! Pipe read handle used to wake up the event loop thread. int m_wait_fd = -1; @@ -208,11 +236,11 @@ class EventLoop //! Number of clients holding references to ProxyServerBase objects that //! reference this event loop. - int m_num_clients = 0; + int m_num_clients MP_GUARDED_BY(m_mutex) = 0; //! Mutex and condition variable used to post tasks to event loop and async //! thread. - std::mutex m_mutex; + Mutex m_mutex; std::condition_variable m_cv; //! Capnp IO context. @@ -263,20 +291,25 @@ struct Waiter // in the case where a capnp response is sent and a brand new // request is immediately received. while (m_fn) { - auto fn = std::move(m_fn); - m_fn = nullptr; - lock.unlock(); - fn(); - lock.lock(); + auto fn = std::move(*m_fn); + m_fn.reset(); + Unlock(lock, fn); } const bool done = pred(); return done; }); } + //! Mutex mainly used internally by waiter class, but also used externally + //! to guard access to related state. Specifically, since the thread_local + //! ThreadContext struct owns a Waiter, the Waiter::m_mutex is used to guard + //! access to other parts of the struct to avoid needing to deal with more + //! mutexes than necessary. This mutex can be held at the same time as + //! EventLoop::m_mutex as long as Waiter::mutex is locked first and + //! EventLoop::m_mutex is locked second. std::mutex m_mutex; std::condition_variable m_cv; - std::function m_fn; + std::optional> m_fn; }; //! Object holding network & rpc state associated with either an incoming server @@ -290,21 +323,13 @@ class Connection Connection(EventLoop& loop, kj::Own&& stream_) : m_loop(loop), m_stream(kj::mv(stream_)), m_network(*m_stream, ::capnp::rpc::twoparty::Side::CLIENT, ::capnp::ReaderOptions()), - m_rpc_system(::capnp::makeRpcClient(m_network)) - { - std::unique_lock lock(m_loop.m_mutex); - m_loop.addClient(lock); - } + m_rpc_system(::capnp::makeRpcClient(m_network)) {} Connection(EventLoop& loop, kj::Own&& stream_, const std::function<::capnp::Capability::Client(Connection&)>& make_client) : m_loop(loop), m_stream(kj::mv(stream_)), m_network(*m_stream, ::capnp::rpc::twoparty::Side::SERVER, ::capnp::ReaderOptions()), - m_rpc_system(::capnp::makeRpcServer(m_network, make_client(*this))) - { - std::unique_lock lock(m_loop.m_mutex); - m_loop.addClient(lock); - } + m_rpc_system(::capnp::makeRpcServer(m_network, make_client(*this))) {} //! Run cleanup functions. Must be called from the event loop thread. First //! calls synchronous cleanup functions while blocked (to free capnp @@ -319,10 +344,6 @@ class Connection CleanupIt addSyncCleanup(std::function fn); void removeSyncCleanup(CleanupIt it); - //! Register asynchronous cleanup function to run on worker thread when - //! disconnect() is called. - void addAsyncCleanup(std::function fn); - //! Add disconnect handler. template void onDisconnect(F&& f) @@ -333,12 +354,12 @@ class Connection // to the EventLoop TaskSet to avoid "Promise callback destroyed itself" // error in cases where f deletes this Connection object. m_on_disconnect.add(m_network.onDisconnect().then( - [f = std::forward(f), this]() mutable { m_loop.m_task_set->add(kj::evalLater(kj::mv(f))); })); + [f = std::forward(f), this]() mutable { m_loop->m_task_set->add(kj::evalLater(kj::mv(f))); })); } - EventLoop& m_loop; + EventLoopRef m_loop; kj::Own m_stream; - LoggingErrorHandler m_error_handler{m_loop}; + LoggingErrorHandler m_error_handler{*m_loop}; kj::TaskSet m_on_disconnect{m_error_handler}; ::capnp::TwoPartyVatNetwork m_network; std::optional<::capnp::RpcSystem<::capnp::rpc::twoparty::VatId>> m_rpc_system; @@ -351,11 +372,10 @@ class Connection //! ThreadMap.makeThread) used to service requests to clients. ::capnp::CapabilityServerSet m_threads; - //! Cleanup functions to run if connection is broken unexpectedly. - //! Lists will be empty if all ProxyClient and ProxyServer objects are - //! destroyed cleanly before the connection is destroyed. + //! Cleanup functions to run if connection is broken unexpectedly. List + //! will be empty if all ProxyClient are destroyed cleanly before the + //! connection is destroyed. CleanupList m_sync_cleanup_fns; - CleanupList m_async_cleanup_fns; }; //! Vat id for server side of connection. Required argument to RpcSystem::bootStrap() @@ -381,21 +401,13 @@ ProxyClientBase::ProxyClientBase(typename Interface::Client cli : m_client(std::move(client)), m_context(connection) { - { - std::unique_lock lock(m_context.connection->m_loop.m_mutex); - m_context.connection->m_loop.addClient(lock); - } - // Handler for the connection getting destroyed before this client object. - auto cleanup_it = m_context.connection->addSyncCleanup([this]() { + auto disconnect_cb = m_context.connection->addSyncCleanup([this]() { // Release client capability by move-assigning to temporary. { typename Interface::Client(std::move(m_client)); } - { - std::unique_lock lock(m_context.connection->m_loop.m_mutex); - m_context.connection->m_loop.removeClient(lock); - } + Lock lock{m_context.loop->m_mutex}; m_context.connection = nullptr; }); @@ -408,14 +420,10 @@ ProxyClientBase::ProxyClientBase(typename Interface::Client cli // down while external code is still holding client references. // // The first case is handled here when m_context.connection is not null. The - // second case is handled by the cleanup function, which sets m_context.connection to - // null so nothing happens here. - m_context.cleanup_fns.emplace_front([this, destroy_connection, cleanup_it]{ - if (m_context.connection) { - // Remove cleanup callback so it doesn't run and try to access - // this object after it's already destroyed. - m_context.connection->removeSyncCleanup(cleanup_it); - + // second case is handled by the disconnect_cb function, which sets + // m_context.connection to null so nothing happens here. + m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{ + { // If the capnp interface defines a destroy method, call it to destroy // the remote object, waiting for it to be deleted server side. If the // capnp interface does not define a destroy method, this will just call @@ -423,16 +431,19 @@ ProxyClientBase::ProxyClientBase(typename Interface::Client cli Sub::destroy(*this); // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code - m_context.connection->m_loop.sync([&]() { + m_context.loop->sync([&]() { + // Remove disconnect callback on cleanup so it doesn't run and try + // to access this object after it's destroyed. This call needs to + // run inside loop->sync() on the event loop thread because + // otherwise, if there were an ill-timed disconnect, the + // onDisconnect handler could fire and delete the Connection object + // before the removeSyncCleanup call. + if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb); + // Release client capability by move-assigning to temporary. { typename Interface::Client(std::move(m_client)); } - { - std::unique_lock lock(m_context.connection->m_loop.m_mutex); - m_context.connection->m_loop.removeClient(lock); - } - if (destroy_connection) { delete m_context.connection; m_context.connection = nullptr; @@ -454,12 +465,20 @@ ProxyServerBase::ProxyServerBase(std::shared_ptr impl, Co : m_impl(std::move(impl)), m_context(&connection) { assert(m_impl); - std::unique_lock lock(m_context.connection->m_loop.m_mutex); - m_context.connection->m_loop.addClient(lock); } //! ProxyServer destructor, called from the EventLoop thread by Cap'n Proto //! garbage collection code after there are no more references to this object. +//! This will typically happen when the corresponding ProxyClient object on the +//! other side of the connection is destroyed. It can also happen earlier if the +//! connection is broken or destroyed. In the latter case this destructor will +//! typically be called inside m_rpc_system.reset() call in the ~Connection +//! destructor while the Connection object still exists. However, because +//! ProxyServer objects are refcounted, and the Connection object could be +//! destroyed while asynchronous IPC calls are still in-flight, it's possible +//! for this destructor to be called after the Connection object no longer +//! exists, so it is NOT valid to dereference the m_context.connection pointer +//! from this function. template ProxyServerBase::~ProxyServerBase() { @@ -483,14 +502,12 @@ ProxyServerBase::~ProxyServerBase() // connection is broken). Probably some refactoring of the destructor // and invokeDestroy function is possible to make this cleaner and more // consistent. - m_context.connection->addAsyncCleanup([impl=std::move(m_impl), fns=std::move(m_context.cleanup_fns)]() mutable { + m_context.loop->addAsyncCleanup([impl=std::move(m_impl), fns=std::move(m_context.cleanup_fns)]() mutable { impl.reset(); CleanupRun(fns); }); } assert(m_context.cleanup_fns.empty()); - std::unique_lock lock(m_context.connection->m_loop.m_mutex); - m_context.connection->m_loop.removeClient(lock); } //! If the capnp interface defined a special "destroy" method, as described the diff --git a/include/mp/proxy-types.h b/include/mp/proxy-types.h index a74c6de0b99c..de96d134c212 100644 --- a/include/mp/proxy-types.h +++ b/include/mp/proxy-types.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -92,9 +92,9 @@ struct StructField template struct ReadDestEmplace { - ReadDestEmplace(TypeList, EmplaceFn&& emplace_fn) : m_emplace_fn(emplace_fn) {} + ReadDestEmplace(TypeList, EmplaceFn emplace_fn) : m_emplace_fn(std::move(emplace_fn)) {} - //! Simple case. If ReadField impementation calls this construct() method + //! Simple case. If ReadField implementation calls this construct() method //! with constructor arguments, just pass them on to the emplace function. template decltype(auto) construct(Args&&... args) @@ -123,7 +123,7 @@ struct ReadDestEmplace return temp; } } - EmplaceFn& m_emplace_fn; + EmplaceFn m_emplace_fn; }; //! Helper function to create a ReadDestEmplace object that constructs a @@ -131,7 +131,7 @@ struct ReadDestEmplace template auto ReadDestTemp() { - return ReadDestEmplace{TypeList(), [&](auto&&... args) -> decltype(auto) { + return ReadDestEmplace{TypeList(), [](auto&&... args) -> decltype(auto) { return LocalType{std::forward(args)...}; }}; } @@ -191,7 +191,7 @@ void ThrowField(TypeList, InvokeContext& invoke_context, Input&& } template -bool CustomHasValue(InvokeContext& invoke_context, Values&&... value) +bool CustomHasValue(InvokeContext& invoke_context, const Values&... value) { return true; } @@ -199,7 +199,7 @@ bool CustomHasValue(InvokeContext& invoke_context, Values&&... value) template void BuildField(TypeList, Context& context, Output&& output, Values&&... values) { - if (CustomHasValue(context, std::forward(values)...)) { + if (CustomHasValue(context, values...)) { CustomBuildField(TypeList(), Priority<3>(), context, std::forward(values)..., std::forward(output)); } @@ -274,7 +274,7 @@ void MaybeReadField(std::false_type, Args&&...) } template -void MaybeSetWant(TypeList, Priority<1>, Value&& value, Output&& output) +void MaybeSetWant(TypeList, Priority<1>, const Value& value, Output&& output) { if (value) { output.setWant(); @@ -282,7 +282,7 @@ void MaybeSetWant(TypeList, Priority<1>, Value&& value, Output&& out } template -void MaybeSetWant(LocalTypes, Priority<0>, Args&&...) +void MaybeSetWant(LocalTypes, Priority<0>, const Args&...) { } @@ -326,18 +326,18 @@ template struct IterateFieldsHelper { template - void handleChain(Arg1&& arg1, Arg2&& arg2, ParamList, NextFn&& next_fn, NextFnArgs&&... next_fn_args) + void handleChain(Arg1& arg1, Arg2& arg2, ParamList, NextFn&& next_fn, NextFnArgs&&... next_fn_args) { using S = Split; - handleChain(std::forward(arg1), std::forward(arg2), typename S::First()); - next_fn.handleChain(std::forward(arg1), std::forward(arg2), typename S::Second(), + handleChain(arg1, arg2, typename S::First()); + next_fn.handleChain(arg1, arg2, typename S::Second(), std::forward(next_fn_args)...); } template - void handleChain(Arg1&& arg1, Arg2&& arg2, ParamList) + void handleChain(Arg1& arg1, Arg2& arg2, ParamList) { - static_cast(this)->handleField(std::forward(arg1), std::forward(arg2), ParamList()); + static_cast(this)->handleField(arg1, arg2, ParamList()); } private: IterateFieldsHelper() = default; @@ -393,10 +393,10 @@ struct ClientParam void handleField(ClientInvokeContext& invoke_context, Params& params, ParamList) { auto const fun = [&](Values&&... values) { + MaybeSetWant( + ParamList(), Priority<1>(), values..., Make(params)); MaybeBuildField(std::integral_constant(), ParamList(), invoke_context, Make(params), std::forward(values)...); - MaybeSetWant( - ParamList(), Priority<1>(), std::forward(values)..., Make(params)); }; // Note: The m_values tuple just consists of lvalue and rvalue @@ -568,7 +568,7 @@ template void clientDestroy(Client& client) { if (client.m_context.connection) { - client.m_context.connection->m_loop.log() << "IPC client destroy " << typeid(client).name(); + client.m_context.loop->log() << "IPC client destroy " << typeid(client).name(); } else { KJ_LOG(INFO, "IPC interrupted client destroy", typeid(client).name()); } @@ -577,7 +577,7 @@ void clientDestroy(Client& client) template void serverDestroy(Server& server) { - server.m_context.connection->m_loop.log() << "IPC server destroy " << typeid(server).name(); + server.m_context.loop->log() << "IPC server destroy " << typeid(server).name(); } //! Entry point called by generated client code that looks like: @@ -592,12 +592,9 @@ void serverDestroy(Server& server) template void clientInvoke(ProxyClient& proxy_client, const GetRequest& get_request, FieldObjs&&... fields) { - if (!proxy_client.m_context.connection) { - throw std::logic_error("clientInvoke call made after disconnect"); - } if (!g_thread_context.waiter) { assert(g_thread_context.thread_name.empty()); - g_thread_context.thread_name = ThreadName(proxy_client.m_context.connection->m_loop.m_exe_name); + g_thread_context.thread_name = ThreadName(proxy_client.m_context.loop->m_exe_name); // If next assert triggers, it means clientInvoke is being called from // the capnp event loop thread. This can happen when a ProxyServer // method implementation that runs synchronously on the event loop @@ -608,52 +605,68 @@ void clientInvoke(ProxyClient& proxy_client, const GetRequest& get_request, Fiel // declaration so the server method runs in a dedicated thread. assert(!g_thread_context.loop_thread); g_thread_context.waiter = std::make_unique(); - proxy_client.m_context.connection->m_loop.logPlain() + proxy_client.m_context.loop->logPlain() << "{" << g_thread_context.thread_name << "} IPC client first request from current thread, constructing waiter"; } - ClientInvokeContext invoke_context{*proxy_client.m_context.connection, g_thread_context}; + ThreadContext& thread_context{g_thread_context}; + std::optional invoke_context; // Must outlive waiter->wait() call below std::exception_ptr exception; std::string kj_exception; bool done = false; - proxy_client.m_context.connection->m_loop.sync([&]() { + const char* disconnected = nullptr; + proxy_client.m_context.loop->sync([&]() { + if (!proxy_client.m_context.connection) { + const std::unique_lock lock(thread_context.waiter->m_mutex); + done = true; + disconnected = "IPC client method called after disconnect."; + thread_context.waiter->m_cv.notify_all(); + return; + } + auto request = (proxy_client.m_client.*get_request)(nullptr); using Request = CapRequestTraits; using FieldList = typename ProxyClientMethodTraits::Fields; - IterateFields().handleChain(invoke_context, request, FieldList(), typename FieldObjs::BuildParams{&fields}...); - proxy_client.m_context.connection->m_loop.logPlain() - << "{" << invoke_context.thread_context.thread_name << "} IPC client send " + invoke_context.emplace(*proxy_client.m_context.connection, thread_context); + IterateFields().handleChain(*invoke_context, request, FieldList(), typename FieldObjs::BuildParams{&fields}...); + proxy_client.m_context.loop->logPlain() + << "{" << thread_context.thread_name << "} IPC client send " << TypeName() << " " << LogEscape(request.toString()); - proxy_client.m_context.connection->m_loop.m_task_set->add(request.send().then( + proxy_client.m_context.loop->m_task_set->add(request.send().then( [&](::capnp::Response&& response) { - proxy_client.m_context.connection->m_loop.logPlain() - << "{" << invoke_context.thread_context.thread_name << "} IPC client recv " + proxy_client.m_context.loop->logPlain() + << "{" << thread_context.thread_name << "} IPC client recv " << TypeName() << " " << LogEscape(response.toString()); try { IterateFields().handleChain( - invoke_context, response, FieldList(), typename FieldObjs::ReadResults{&fields}...); + *invoke_context, response, FieldList(), typename FieldObjs::ReadResults{&fields}...); } catch (...) { exception = std::current_exception(); } - const std::unique_lock lock(invoke_context.thread_context.waiter->m_mutex); + const std::unique_lock lock(thread_context.waiter->m_mutex); done = true; - invoke_context.thread_context.waiter->m_cv.notify_all(); + thread_context.waiter->m_cv.notify_all(); }, [&](const ::kj::Exception& e) { - kj_exception = kj::str("kj::Exception: ", e).cStr(); - proxy_client.m_context.connection->m_loop.logPlain() - << "{" << invoke_context.thread_context.thread_name << "} IPC client exception " << kj_exception; - const std::unique_lock lock(invoke_context.thread_context.waiter->m_mutex); + if (e.getType() == ::kj::Exception::Type::DISCONNECTED) { + disconnected = "IPC client method call interrupted by disconnect."; + } else { + kj_exception = kj::str("kj::Exception: ", e).cStr(); + proxy_client.m_context.loop->logPlain() + << "{" << thread_context.thread_name << "} IPC client exception " << kj_exception; + } + const std::unique_lock lock(thread_context.waiter->m_mutex); done = true; - invoke_context.thread_context.waiter->m_cv.notify_all(); + thread_context.waiter->m_cv.notify_all(); })); }); - std::unique_lock lock(invoke_context.thread_context.waiter->m_mutex); - invoke_context.thread_context.waiter->wait(lock, [&done]() { return done; }); + std::unique_lock lock(thread_context.waiter->m_mutex); + thread_context.waiter->wait(lock, [&done]() { return done; }); if (exception) std::rethrow_exception(exception); - if (!kj_exception.empty()) proxy_client.m_context.connection->m_loop.raise() << kj_exception; + if (!kj_exception.empty()) proxy_client.m_context.loop->raise() << kj_exception; + if (disconnected) proxy_client.m_context.loop->raise() << disconnected; } //! Invoke callable `fn()` that may return void. If it does return void, replace @@ -687,7 +700,7 @@ kj::Promise serverInvoke(Server& server, CallContext& call_context, Fn fn) using Results = typename decltype(call_context.getResults())::Builds; int req = ++server_reqs; - server.m_context.connection->m_loop.log() << "IPC server recv request #" << req << " " + server.m_context.loop->log() << "IPC server recv request #" << req << " " << TypeName() << " " << LogEscape(params.toString()); try { @@ -704,14 +717,14 @@ kj::Promise serverInvoke(Server& server, CallContext& call_context, Fn fn) return ReplaceVoid([&]() { return fn.invoke(server_context, ArgList()); }, [&]() { return kj::Promise(kj::mv(call_context)); }) .then([&server, req](CallContext call_context) { - server.m_context.connection->m_loop.log() << "IPC server send response #" << req << " " << TypeName() + server.m_context.loop->log() << "IPC server send response #" << req << " " << TypeName() << " " << LogEscape(call_context.getResults().toString()); }); } catch (const std::exception& e) { - server.m_context.connection->m_loop.log() << "IPC server unhandled exception: " << e.what(); + server.m_context.loop->log() << "IPC server unhandled exception: " << e.what(); throw; } catch (...) { - server.m_context.connection->m_loop.log() << "IPC server unhandled exception"; + server.m_context.loop->log() << "IPC server unhandled exception"; throw; } } diff --git a/include/mp/proxy.capnp b/include/mp/proxy.capnp index abd02e437fc5..386f8f7abe01 100644 --- a/include/mp/proxy.capnp +++ b/include/mp/proxy.capnp @@ -1,4 +1,4 @@ -# Copyright (c) 2019 The Bitcoin Core developers +# Copyright (c) The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/proxy.h b/include/mp/proxy.h index e7faad9a6663..fff511fde06f 100644 --- a/include/mp/proxy.h +++ b/include/mp/proxy.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -7,34 +7,31 @@ #include -#include +#include #include #include +#include #include #include #include #include +#include // IWYU pragma: keep namespace mp { class Connection; class EventLoop; //! Mapping from capnp interface type to proxy client implementation (specializations are generated by //! proxy-codegen.cpp). -template -struct ProxyClient; +template struct ProxyClient; // IWYU pragma: export //! Mapping from capnp interface type to proxy server implementation (specializations are generated by //! proxy-codegen.cpp). -template -struct ProxyServer; +template struct ProxyServer; // IWYU pragma: export //! Mapping from capnp method params type to method traits (specializations are generated by proxy-codegen.cpp). -template -struct ProxyMethod; +template struct ProxyMethod; // IWYU pragma: export //! Mapping from capnp struct type to struct traits (specializations are generated by proxy-codegen.cpp). -template -struct ProxyStruct; +template struct ProxyStruct; // IWYU pragma: export //! Mapping from local c++ type to capnp type and traits (specializations are generated by proxy-codegen.cpp). -template -struct ProxyType; +template struct ProxyType; // IWYU pragma: export using CleanupList = std::list>; using CleanupIt = typename CleanupList::iterator; @@ -47,13 +44,34 @@ inline void CleanupRun(CleanupList& fns) { } } +//! Event loop smart pointer automatically managing m_num_clients. +//! If a lock pointer argument is passed, the specified lock will be used, +//! otherwise EventLoop::m_mutex will be locked when needed. +class EventLoopRef +{ +public: + explicit EventLoopRef(EventLoop& loop, Lock* lock = nullptr); + EventLoopRef(EventLoopRef&& other) noexcept : m_loop(other.m_loop) { other.m_loop = nullptr; } + EventLoopRef(const EventLoopRef&) = delete; + EventLoopRef& operator=(const EventLoopRef&) = delete; + EventLoopRef& operator=(EventLoopRef&&) = delete; + ~EventLoopRef() { reset(); } + EventLoop& operator*() const { assert(m_loop); return *m_loop; } + EventLoop* operator->() const { assert(m_loop); return m_loop; } + void reset(bool relock=false); + + EventLoop* m_loop{nullptr}; + Lock* m_lock{nullptr}; +}; + //! Context data associated with proxy client and server classes. struct ProxyContext { Connection* connection; + EventLoopRef loop; CleanupList cleanup_fns; - ProxyContext(Connection* connection) : connection(connection) {} + ProxyContext(Connection* connection); }; //! Base class for generated ProxyClient classes that implement a C++ interface @@ -67,6 +85,15 @@ class ProxyClientBase : public Impl_ using Sub = ProxyClient; using Super = ProxyClientBase; + //! Construct libmultiprocess client object wrapping Cap'n Proto client + //! object with a reference to the associated mp::Connection object. + //! + //! The destroy_connection option determines whether destroying this client + //! object closes the connection. It is set to true for the + //! ProxyClient object returned by ConnectStream, to let IPC + //! clients close the connection by freeing the object. It is false for + //! other client objects so they can be destroyed without affecting the + //! connection. ProxyClientBase(typename Interface::Client client, Connection* connection, bool destroy_connection); ~ProxyClientBase() noexcept; diff --git a/include/mp/type-char.h b/include/mp/type-char.h index d1d27b624144..b51ffeb1928b 100644 --- a/include/mp/type-char.h +++ b/include/mp/type-char.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/type-chrono.h b/include/mp/type-chrono.h index a17d9a994bf6..d71549864c16 100644 --- a/include/mp/type-chrono.h +++ b/include/mp/type-chrono.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/type-context.h b/include/mp/type-context.h index 7c12afe2ff02..894daadb36a9 100644 --- a/include/mp/type-context.h +++ b/include/mp/type-context.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -64,13 +64,11 @@ auto PassField(Priority<1>, TypeList<>, ServerContext& server_context, const Fn& auto future = kj::newPromiseAndFulfiller(); auto& server = server_context.proxy_server; int req = server_context.req; - auto invoke = MakeAsyncCallable( - [fulfiller = kj::mv(future.fulfiller), + auto invoke = [fulfiller = kj::mv(future.fulfiller), call_context = kj::mv(server_context.call_context), &server, req, fn, args...]() mutable { const auto& params = call_context.getParams(); Context::Reader context_arg = Accessor::get(params); ServerContext server_context{server, call_context, req}; - bool disconnected{false}; { // Before invoking the function, store a reference to the // callbackThread provided by the client in the @@ -102,7 +100,7 @@ auto PassField(Priority<1>, TypeList<>, ServerContext& server_context, const Fn& // recursive call (IPC call calling back to the caller which // makes another IPC call), so avoid modifying the map. const bool erase_thread{inserted}; - KJ_DEFER({ + KJ_DEFER(if (erase_thread) { std::unique_lock lock(thread_context.waiter->m_mutex); // Call erase here with a Connection* argument instead // of an iterator argument, because the `request_thread` @@ -113,54 +111,40 @@ auto PassField(Priority<1>, TypeList<>, ServerContext& server_context, const Fn& // erases the thread from the map, and also because the // ProxyServer destructor calls // request_threads.clear(). - if (erase_thread) { - disconnected = !request_threads.erase(server.m_context.connection); - } else { - disconnected = !request_threads.count(server.m_context.connection); - } + request_threads.erase(server.m_context.connection); }); fn.invoke(server_context, args...); } - if (disconnected) { - // If disconnected is true, the Connection object was - // destroyed during the method call. Deal with this by - // returning without ever fulfilling the promise, which will - // cause the ProxyServer object to leak. This is not ideal, - // but fixing the leak will require nontrivial code changes - // because there is a lot of code assuming ProxyServer - // objects are destroyed before Connection objects. - return; - } KJ_IF_MAYBE(exception, kj::runCatchingExceptions([&]() { - server.m_context.connection->m_loop.sync([&] { + server.m_context.loop->sync([&] { auto fulfiller_dispose = kj::mv(fulfiller); fulfiller_dispose->fulfill(kj::mv(call_context)); }); })) { - server.m_context.connection->m_loop.sync([&]() { + server.m_context.loop->sync([&]() { auto fulfiller_dispose = kj::mv(fulfiller); fulfiller_dispose->reject(kj::mv(*exception)); }); } - }); + }; // Lookup Thread object specified by the client. The specified thread should // be a local Thread::Server object, but it needs to be looked up // asynchronously with getLocalServer(). auto thread_client = context_arg.getThread(); return server.m_context.connection->m_threads.getLocalServer(thread_client) - .then([&server, invoke, req](const kj::Maybe& perhaps) { + .then([&server, invoke = kj::mv(invoke), req](const kj::Maybe& perhaps) mutable { // Assuming the thread object is found, pass it a pointer to the // `invoke` lambda above which will invoke the function on that // thread. KJ_IF_MAYBE (thread_server, perhaps) { const auto& thread = static_cast&>(*thread_server); - server.m_context.connection->m_loop.log() + server.m_context.loop->log() << "IPC server post request #" << req << " {" << thread.m_thread_context.thread_name << "}"; thread.m_thread_context.waiter->post(std::move(invoke)); } else { - server.m_context.connection->m_loop.log() + server.m_context.loop->log() << "IPC server error request #" << req << ", missing thread to execute request"; throw std::runtime_error("invalid thread handle"); } diff --git a/include/mp/type-data.h b/include/mp/type-data.h index 46a2b2fc7250..5da4cfce5f49 100644 --- a/include/mp/type-data.h +++ b/include/mp/type-data.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/type-decay.h b/include/mp/type-decay.h index 7b203c8628cd..65934372e4a2 100644 --- a/include/mp/type-decay.h +++ b/include/mp/type-decay.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/type-exception.h b/include/mp/type-exception.h index 3e2fcac27372..3f04d7a97f5e 100644 --- a/include/mp/type-exception.h +++ b/include/mp/type-exception.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/type-function.h b/include/mp/type-function.h index bf00c5811979..47d3b30be299 100644 --- a/include/mp/type-function.h +++ b/include/mp/type-function.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -24,7 +24,7 @@ template void CustomBuildField(TypeList>, Priority<1>, InvokeContext& invoke_context, - Value& value, + Value&& value, Output&& output) { if (value) { diff --git a/include/mp/type-interface.h b/include/mp/type-interface.h index 8a89ac24fca5..7a98b4afab4f 100644 --- a/include/mp/type-interface.h +++ b/include/mp/type-interface.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/type-map.h b/include/mp/type-map.h index bc1b22769df1..6fa5623e510a 100644 --- a/include/mp/type-map.h +++ b/include/mp/type-map.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/type-message.h b/include/mp/type-message.h index d80f43c8d371..baa46eb0cad4 100644 --- a/include/mp/type-message.h +++ b/include/mp/type-message.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/type-number.h b/include/mp/type-number.h index 9d269be60a8f..5c997f54bc8a 100644 --- a/include/mp/type-number.h +++ b/include/mp/type-number.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -50,8 +50,14 @@ decltype(auto) CustomReadField(TypeList, InvokeContext& invoke_context, Input&& input, ReadDest&& read_dest, - typename std::enable_if::value>::type* enable = 0) + typename std::enable_if::value>::type* enable = nullptr) { + // Disable clang-tidy out-of-range enum value check which triggers when + // using an enum type that does not have a 0 value. The check correctly + // triggers when it detects that Cap'n Proto returns 0 when reading an + // integer field that is unset. But the warning is spurious because the + // corresponding BuildField call should never leave the field unset. + // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange) return read_dest.construct(static_cast(input.get())); } diff --git a/include/mp/type-optional.h b/include/mp/type-optional.h index 822508d5533f..6f23fd4d5211 100644 --- a/include/mp/type-optional.h +++ b/include/mp/type-optional.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/type-pair.h b/include/mp/type-pair.h index 3af9c9313de9..b1914c9d9c64 100644 --- a/include/mp/type-pair.h +++ b/include/mp/type-pair.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/type-pointer.h b/include/mp/type-pointer.h index 5c79e8d2e8a7..98b7aa817fe0 100644 --- a/include/mp/type-pointer.h +++ b/include/mp/type-pointer.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/type-set.h b/include/mp/type-set.h index ea60dc4d1a02..699c6e9e03aa 100644 --- a/include/mp/type-set.h +++ b/include/mp/type-set.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/type-string.h b/include/mp/type-string.h index 77d04acb2804..d4c3383bdfea 100644 --- a/include/mp/type-string.h +++ b/include/mp/type-string.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/type-struct.h b/include/mp/type-struct.h index d282e20e9a4a..6d396387ffe1 100644 --- a/include/mp/type-struct.h +++ b/include/mp/type-struct.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/type-threadmap.h b/include/mp/type-threadmap.h index 683586fbc6e8..3005d9de0fc8 100644 --- a/include/mp/type-threadmap.h +++ b/include/mp/type-threadmap.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/type-tuple.h b/include/mp/type-tuple.h index 5083887258f0..597ffbfb270e 100644 --- a/include/mp/type-tuple.h +++ b/include/mp/type-tuple.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/type-vector.h b/include/mp/type-vector.h index e4996e930432..90605ddf8643 100644 --- a/include/mp/type-vector.h +++ b/include/mp/type-vector.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/type-void.h b/include/mp/type-void.h index 0a8876805291..ed733985b29b 100644 --- a/include/mp/type-void.h +++ b/include/mp/type-void.h @@ -1,4 +1,4 @@ -// Copyright (c) 2025 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/include/mp/util.h b/include/mp/util.h index 8b802abc9f33..d9f3ca3e9b51 100644 --- a/include/mp/util.h +++ b/include/mp/util.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -6,18 +6,17 @@ #define MP_UTIL_H #include +#include #include +#include #include -#include -#include -#include #include -#include -#include +#include #include #include #include #include +#include #include namespace mp { @@ -130,6 +129,59 @@ const char* TypeName() return short_name ? short_name + 1 : display_name; } +//! Convenient wrapper around std::variant +template +struct PtrOrValue { + std::variant data; + + template + PtrOrValue(T* ptr, Args&&... args) : data(ptr ? ptr : std::variant{std::in_place_type, std::forward(args)...}) {} + + T& operator*() { return data.index() ? std::get(data) : *std::get(data); } + T* operator->() { return &**this; } + T& operator*() const { return data.index() ? std::get(data) : *std::get(data); } + T* operator->() const { return &**this; } +}; + +// Annotated mutex and lock class (https://clang.llvm.org/docs/ThreadSafetyAnalysis.html) +#if defined(__clang__) && (!defined(SWIG)) +#define MP_TSA(x) __attribute__((x)) +#else +#define MP_TSA(x) // no-op +#endif + +#define MP_CAPABILITY(x) MP_TSA(capability(x)) +#define MP_SCOPED_CAPABILITY MP_TSA(scoped_lockable) +#define MP_REQUIRES(x) MP_TSA(requires_capability(x)) +#define MP_ACQUIRE(...) MP_TSA(acquire_capability(__VA_ARGS__)) +#define MP_RELEASE(...) MP_TSA(release_capability(__VA_ARGS__)) +#define MP_ASSERT_CAPABILITY(x) MP_TSA(assert_capability(x)) +#define MP_GUARDED_BY(x) MP_TSA(guarded_by(x)) +#define MP_NO_TSA MP_TSA(no_thread_safety_analysis) + +class MP_CAPABILITY("mutex") Mutex { +public: + void lock() MP_ACQUIRE() { m_mutex.lock(); } + void unlock() MP_RELEASE() { m_mutex.unlock(); } + + std::mutex m_mutex; +}; + +class MP_SCOPED_CAPABILITY Lock { +public: + explicit Lock(Mutex& m) MP_ACQUIRE(m) : m_lock(m.m_mutex) {} + ~Lock() MP_RELEASE() = default; + void unlock() MP_RELEASE() { m_lock.unlock(); } + void lock() MP_ACQUIRE() { m_lock.lock(); } + void assert_locked(Mutex& mutex) MP_ASSERT_CAPABILITY() MP_ASSERT_CAPABILITY(mutex) + { + assert(m_lock.mutex() == &mutex.m_mutex); + assert(m_lock); + } + + std::unique_lock m_lock; +}; + //! Analog to std::lock_guard that unlocks instead of locks. template struct UnlockGuard @@ -146,46 +198,6 @@ void Unlock(Lock& lock, Callback&& callback) callback(); } -//! Needed for libc++/macOS compatibility. Lets code work with shared_ptr nothrow declaration -//! https://github.com/capnproto/capnproto/issues/553#issuecomment-328554603 -template -struct DestructorCatcher -{ - T value; - template - DestructorCatcher(Params&&... params) : value(kj::fwd(params)...) - { - } - ~DestructorCatcher() noexcept try { - } catch (const kj::Exception& e) { // NOLINT(bugprone-empty-catch) - } -}; - -//! Wrapper around callback function for compatibility with std::async. -//! -//! std::async requires callbacks to be copyable and requires noexcept -//! destructors, but this doesn't work well with kj types which are generally -//! move-only and not noexcept. -template -struct AsyncCallable -{ - AsyncCallable(Callable&& callable) : m_callable(std::make_shared>(std::move(callable))) - { - } - AsyncCallable(const AsyncCallable&) = default; - AsyncCallable(AsyncCallable&&) = default; - ~AsyncCallable() noexcept = default; - ResultOf operator()() const { return (m_callable->value)(); } - mutable std::shared_ptr> m_callable; -}; - -//! Construct AsyncCallable object. -template -AsyncCallable> MakeAsyncCallable(Callable&& callable) -{ - return std::forward(callable); -} - //! Format current thread name as "{exe_name}-{$pid}/{thread_name}-{$tid}". std::string ThreadName(const char* exe_name); diff --git a/shell.nix b/shell.nix new file mode 100644 index 000000000000..eacfdc2a8532 --- /dev/null +++ b/shell.nix @@ -0,0 +1,28 @@ +{ pkgs ? import {} +, crossPkgs ? import {} +, enableLibcxx ? false # Whether to use libc++ toolchain and libraries instead of libstdc++ +, minimal ? false # Whether to create minimal shell without extra tools (faster when cross compiling) +}: + +let + lib = pkgs.lib; + llvm = crossPkgs.llvmPackages_20; + capnproto = crossPkgs.capnproto.override (lib.optionalAttrs enableLibcxx { clangStdenv = llvm.libcxxStdenv; }); + clang = if enableLibcxx then llvm.libcxxClang else llvm.clang; + clang-tools = llvm.clang-tools.override { inherit enableLibcxx; }; +in crossPkgs.mkShell { + buildInputs = [ + capnproto + ]; + nativeBuildInputs = with pkgs; [ + cmake + include-what-you-use + ninja + ] ++ lib.optionals (!minimal) [ + clang + clang-tools + ]; + + # Tell IWYU where its libc++ mapping lives + IWYU_MAPPING_FILE = if enableLibcxx then "${llvm.libcxx.dev}/include/c++/v1/libcxx.imp" else null; +} diff --git a/src/mp/gen.cpp b/src/mp/gen.cpp index 3d841a3f5e54..21a4d9313995 100644 --- a/src/mp/gen.cpp +++ b/src/mp/gen.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -6,13 +6,15 @@ #include #include +#include #include +#include #include #include #include -#include #include #include +#include #include #include #include @@ -26,6 +28,7 @@ #include #include #include +#include #include #define PROXY_BIN "mpgen" @@ -76,7 +79,7 @@ static bool GetAnnotationInt32(const Reader& reader, uint64_t id, int32_t* resul return false; } -static void ForEachMethod(const capnp::InterfaceSchema& interface, const std::function& callback) +static void ForEachMethod(const capnp::InterfaceSchema& interface, const std::function& callback) // NOLINT(misc-no-recursion) { for (const auto super : interface.getSuperclasses()) { ForEachMethod(super, callback); @@ -198,19 +201,45 @@ static void Generate(kj::StringPtr src_prefix, std::ofstream cpp_server(output_path + ".proxy-server.c++"); cpp_server << "// Generated by " PROXY_BIN " from " << src_file << "\n\n"; + cpp_server << "// IWYU pragma: no_include \n"; + cpp_server << "// IWYU pragma: no_include \n"; + cpp_server << "// IWYU pragma: begin_keep\n"; + cpp_server << "#include <" << include_path << ".proxy.h>\n"; cpp_server << "#include <" << include_path << ".proxy-types.h>\n"; - cpp_server << "#include <" << PROXY_TYPES << ">\n\n"; + cpp_server << "#include \n"; + cpp_server << "#include \n"; + cpp_server << "#include \n"; + cpp_server << "#include \n"; + cpp_server << "#include \n"; + cpp_server << "#include \n"; + cpp_server << "#include \n"; + cpp_server << "#include <" << PROXY_TYPES << ">\n"; + cpp_server << "// IWYU pragma: end_keep\n\n"; cpp_server << "namespace mp {\n"; std::ofstream cpp_client(output_path + ".proxy-client.c++"); cpp_client << "// Generated by " PROXY_BIN " from " << src_file << "\n\n"; + cpp_client << "// IWYU pragma: no_include \n"; + cpp_client << "// IWYU pragma: no_include \n"; + cpp_client << "// IWYU pragma: begin_keep\n"; + cpp_client << "#include <" << include_path << ".h>\n"; + cpp_client << "#include <" << include_path << ".proxy.h>\n"; cpp_client << "#include <" << include_path << ".proxy-types.h>\n"; - cpp_client << "#include <" << PROXY_TYPES << ">\n\n"; + cpp_client << "#include \n"; + cpp_client << "#include \n"; + cpp_client << "#include \n"; + cpp_client << "#include \n"; + cpp_client << "#include \n"; + cpp_client << "#include <" << PROXY_TYPES << ">\n"; + cpp_client << "// IWYU pragma: end_keep\n\n"; cpp_client << "namespace mp {\n"; std::ofstream cpp_types(output_path + ".proxy-types.c++"); cpp_types << "// Generated by " PROXY_BIN " from " << src_file << "\n\n"; - cpp_types << "#include <" << include_path << ".proxy-types.h>\n"; + cpp_types << "// IWYU pragma: no_include \"mp/proxy.h\"\n"; + cpp_types << "// IWYU pragma: no_include \"mp/proxy-io.h\"\n"; + cpp_types << "#include <" << include_path << ".proxy.h>\n"; + cpp_types << "#include <" << include_path << ".proxy-types.h> // IWYU pragma: keep\n"; cpp_types << "#include <" << PROXY_TYPES << ">\n\n"; cpp_types << "namespace mp {\n"; @@ -226,10 +255,12 @@ static void Generate(kj::StringPtr src_prefix, inl << "// Generated by " PROXY_BIN " from " << src_file << "\n\n"; inl << "#ifndef " << guard << "_PROXY_TYPES_H\n"; inl << "#define " << guard << "_PROXY_TYPES_H\n\n"; - inl << "#include <" << include_path << ".proxy.h>\n"; + inl << "// IWYU pragma: no_include \"mp/proxy.h\"\n"; + inl << "#include // IWYU pragma: keep\n"; + inl << "#include <" << include_path << ".proxy.h> // IWYU pragma: keep\n"; for (const auto annotation : file_schema.getProto().getAnnotations()) { if (annotation.getId() == INCLUDE_TYPES_ANNOTATION_ID) { - inl << "#include <" << annotation.getValue().getText() << ">\n"; + inl << "#include \"" << annotation.getValue().getText() << "\" // IWYU pragma: export\n"; } } inl << "namespace mp {\n"; @@ -238,10 +269,10 @@ static void Generate(kj::StringPtr src_prefix, h << "// Generated by " PROXY_BIN " from " << src_file << "\n\n"; h << "#ifndef " << guard << "_PROXY_H\n"; h << "#define " << guard << "_PROXY_H\n\n"; - h << "#include <" << include_path << ".h>\n"; + h << "#include <" << include_path << ".h> // IWYU pragma: keep\n"; for (const auto annotation : file_schema.getProto().getAnnotations()) { if (annotation.getId() == INCLUDE_ANNOTATION_ID) { - h << "#include <" << annotation.getValue().getText() << ">\n"; + h << "#include \"" << annotation.getValue().getText() << "\" // IWYU pragma: export\n"; } } h << "#include <" << PROXY_DECL << ">\n\n"; diff --git a/src/mp/proxy.cpp b/src/mp/proxy.cpp index b4255b60feae..c9fecf5cfb04 100644 --- a/src/mp/proxy.cpp +++ b/src/mp/proxy.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019 The Bitcoin Core developers +// Copyright (c) The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -10,23 +10,23 @@ #include #include -#include #include -#include #include +#include #include #include #include -#include #include +#include +#include #include #include -#include +#include #include #include #include #include -#include +#include #include #include #include @@ -37,9 +37,6 @@ namespace mp { -template -struct ProxyServer; - thread_local ThreadContext g_thread_context; void LoggingErrorHandler::taskFailed(kj::Exception&& exception) @@ -48,12 +45,49 @@ void LoggingErrorHandler::taskFailed(kj::Exception&& exception) m_loop.log() << "Uncaught exception in daemonized task."; } +EventLoopRef::EventLoopRef(EventLoop& loop, Lock* lock) : m_loop(&loop), m_lock(lock) +{ + auto loop_lock{PtrOrValue{m_lock, m_loop->m_mutex}}; + loop_lock->assert_locked(m_loop->m_mutex); + m_loop->m_num_clients += 1; +} + +// Due to the conditionals in this function, MP_NO_TSA is required to avoid +// error "error: mutex 'loop_lock' is not held on every path through here +// [-Wthread-safety-analysis]" +void EventLoopRef::reset(bool relock) MP_NO_TSA +{ + if (auto* loop{m_loop}) { + m_loop = nullptr; + auto loop_lock{PtrOrValue{m_lock, loop->m_mutex}}; + loop_lock->assert_locked(loop->m_mutex); + assert(loop->m_num_clients > 0); + loop->m_num_clients -= 1; + if (loop->done()) { + loop->m_cv.notify_all(); + int post_fd{loop->m_post_fd}; + loop_lock->unlock(); + char buffer = 0; + KJ_SYSCALL(write(post_fd, &buffer, 1)); // NOLINT(bugprone-suspicious-semicolon) + // By default, do not try to relock `loop_lock` after writing, + // because the event loop could wake up and destroy itself and the + // mutex might no longer exist. + if (relock) loop_lock->lock(); + } + } +} + +ProxyContext::ProxyContext(Connection* connection) : connection(connection), loop{*connection->m_loop} {} + Connection::~Connection() { - // Shut down RPC system first, since this will garbage collect Server - // objects that were not freed before the connection was closed, some of - // which may call addAsyncCleanup and add more cleanup callbacks which can - // run below. + // Shut down RPC system first, since this will garbage collect any + // ProxyServer objects that were not freed before the connection was closed. + // Typically all ProxyServer objects associated with this connection will be + // freed before this call returns. However that will not be the case if + // there are asynchronous IPC calls over this connection still currently + // executing. In that case, Cap'n Proto will destroy the ProxyServer objects + // after the calls finish. m_rpc_system.reset(); // ProxyClient cleanup handlers are in sync list, and ProxyServer cleanup @@ -98,23 +132,17 @@ Connection::~Connection() // on clean and unclean shutdowns. In unclean shutdown case when the // connection is broken, sync and async cleanup lists will filled with // callbacks. In the clean shutdown case both lists will be empty. + Lock lock{m_loop->m_mutex}; while (!m_sync_cleanup_fns.empty()) { - m_sync_cleanup_fns.front()(); - m_sync_cleanup_fns.pop_front(); + CleanupList fn; + fn.splice(fn.begin(), m_sync_cleanup_fns, m_sync_cleanup_fns.begin()); + Unlock(lock, fn.front()); } - while (!m_async_cleanup_fns.empty()) { - const std::unique_lock lock(m_loop.m_mutex); - m_loop.m_async_fns.emplace_back(std::move(m_async_cleanup_fns.front())); - m_async_cleanup_fns.pop_front(); - } - std::unique_lock lock(m_loop.m_mutex); - m_loop.startAsyncThread(lock); - m_loop.removeClient(lock); } CleanupIt Connection::addSyncCleanup(std::function fn) { - const std::unique_lock lock(m_loop.m_mutex); + const Lock lock(m_loop->m_mutex); // Add cleanup callbacks to the front of list, so sync cleanup functions run // in LIFO order. This is a good approach because sync cleanup functions are // added as client objects are created, and it is natural to clean up @@ -128,13 +156,13 @@ CleanupIt Connection::addSyncCleanup(std::function fn) void Connection::removeSyncCleanup(CleanupIt it) { - const std::unique_lock lock(m_loop.m_mutex); + const Lock lock(m_loop->m_mutex); m_sync_cleanup_fns.erase(it); } -void Connection::addAsyncCleanup(std::function fn) +void EventLoop::addAsyncCleanup(std::function fn) { - const std::unique_lock lock(m_loop.m_mutex); + const Lock lock(m_mutex); // Add async cleanup callbacks to the back of the list. Unlike the sync // cleanup list, this list order is more significant because it determines // the order server objects are destroyed when there is a sudden disconnect, @@ -151,7 +179,8 @@ void Connection::addAsyncCleanup(std::function fn) // process, otherwise shared pointer counts of the CWallet objects (which // inherit from Chain::Notification) will not be 1 when WalletLoader // destructor runs and it will wait forever for them to be released. - m_async_cleanup_fns.emplace(m_async_cleanup_fns.end(), std::move(fn)); + m_async_fns->emplace_back(std::move(fn)); + startAsyncThread(); } EventLoop::EventLoop(const char* exe_name, LogFn log_fn, void* context) @@ -170,9 +199,9 @@ EventLoop::EventLoop(const char* exe_name, LogFn log_fn, void* context) EventLoop::~EventLoop() { if (m_async_thread.joinable()) m_async_thread.join(); - const std::lock_guard lock(m_mutex); + const Lock lock(m_mutex); KJ_ASSERT(m_post_fn == nullptr); - KJ_ASSERT(m_async_fns.empty()); + KJ_ASSERT(!m_async_fns); KJ_ASSERT(m_wait_fd == -1); KJ_ASSERT(m_post_fd == -1); KJ_ASSERT(m_num_clients == 0); @@ -188,6 +217,12 @@ void EventLoop::loop() g_thread_context.loop_thread = true; KJ_DEFER(g_thread_context.loop_thread = false); + { + const Lock lock(m_mutex); + assert(!m_async_fns); + m_async_fns.emplace(); + } + kj::Own wait_stream{ m_io_context.lowLevelProvider->wrapSocketFd(m_wait_fd, kj::LowLevelAsyncIoProvider::TAKE_OWNERSHIP)}; int post_fd{m_post_fd}; @@ -195,14 +230,14 @@ void EventLoop::loop() for (;;) { const size_t read_bytes = wait_stream->read(&buffer, 0, 1).wait(m_io_context.waitScope); if (read_bytes != 1) throw std::logic_error("EventLoop wait_stream closed unexpectedly"); - std::unique_lock lock(m_mutex); + Lock lock(m_mutex); if (m_post_fn) { Unlock(lock, *m_post_fn); m_post_fn = nullptr; m_cv.notify_all(); - } else if (done(lock)) { + } else if (done()) { // Intentionally do not break if m_post_fn was set, even if done() - // would return true, to ensure that the removeClient write(post_fd) + // would return true, to ensure that the EventLoopRef write(post_fd) // call always succeeds and the loop does not exit between the time // that the done condition is set and the write call is made. break; @@ -213,76 +248,61 @@ void EventLoop::loop() log() << "EventLoop::loop bye."; wait_stream = nullptr; KJ_SYSCALL(::close(post_fd)); - const std::unique_lock lock(m_mutex); + const Lock lock(m_mutex); m_wait_fd = -1; m_post_fd = -1; + m_async_fns.reset(); + m_cv.notify_all(); } -void EventLoop::post(const std::function& fn) +void EventLoop::post(kj::Function fn) { if (std::this_thread::get_id() == m_thread_id) { fn(); return; } - std::unique_lock lock(m_mutex); - addClient(lock); - m_cv.wait(lock, [this] { return m_post_fn == nullptr; }); + Lock lock(m_mutex); + EventLoopRef ref(*this, &lock); + m_cv.wait(lock.m_lock, [this]() MP_REQUIRES(m_mutex) { return m_post_fn == nullptr; }); m_post_fn = &fn; int post_fd{m_post_fd}; Unlock(lock, [&] { char buffer = 0; KJ_SYSCALL(write(post_fd, &buffer, 1)); }); - m_cv.wait(lock, [this, &fn] { return m_post_fn != &fn; }); - removeClient(lock); -} - -void EventLoop::addClient(std::unique_lock& lock) { m_num_clients += 1; } - -bool EventLoop::removeClient(std::unique_lock& lock) -{ - m_num_clients -= 1; - if (done(lock)) { - m_cv.notify_all(); - int post_fd{m_post_fd}; - lock.unlock(); - char buffer = 0; - KJ_SYSCALL(write(post_fd, &buffer, 1)); // NOLINT(bugprone-suspicious-semicolon) - return true; - } - return false; + m_cv.wait(lock.m_lock, [this, &fn]() MP_REQUIRES(m_mutex) { return m_post_fn != &fn; }); } -void EventLoop::startAsyncThread(std::unique_lock& lock) +void EventLoop::startAsyncThread() { + assert (std::this_thread::get_id() == m_thread_id); if (m_async_thread.joinable()) { + // Notify to wake up the async thread if it is already running. m_cv.notify_all(); - } else if (!m_async_fns.empty()) { + } else if (!m_async_fns->empty()) { m_async_thread = std::thread([this] { - std::unique_lock lock(m_mutex); - while (true) { - if (!m_async_fns.empty()) { - addClient(lock); - const std::function fn = std::move(m_async_fns.front()); - m_async_fns.pop_front(); + Lock lock(m_mutex); + while (m_async_fns) { + if (!m_async_fns->empty()) { + EventLoopRef ref{*this, &lock}; + const std::function fn = std::move(m_async_fns->front()); + m_async_fns->pop_front(); Unlock(lock, fn); - if (removeClient(lock)) break; + // Important to relock because of the wait() call below. + ref.reset(/*relock=*/true); + // Continue without waiting in case there are more async_fns continue; - } else if (m_num_clients == 0) { - break; } - m_cv.wait(lock); + m_cv.wait(lock.m_lock); } }); } } -bool EventLoop::done(std::unique_lock& lock) const +bool EventLoop::done() const { assert(m_num_clients >= 0); - assert(lock.owns_lock()); - assert(lock.mutex() == &m_mutex); - return m_num_clients == 0 && m_async_fns.empty(); + return m_num_clients == 0 && m_async_fns->empty(); } std::tuple SetThread(ConnThreads& threads, std::mutex& mutex, Connection* connection, const std::function& make_thread) @@ -293,18 +313,18 @@ std::tuple SetThread(ConnThreads& threads, std::mutex& mutex, thread = threads.emplace( std::piecewise_construct, std::forward_as_tuple(connection), std::forward_as_tuple(make_thread(), connection, /* destroy_connection= */ false)).first; - thread->second.setCleanup([&threads, &mutex, thread] { + thread->second.setDisconnectCallback([&threads, &mutex, thread] { // Note: it is safe to use the `thread` iterator in this cleanup // function, because the iterator would only be invalid if the map entry // was removed, and if the map entry is removed the ProxyClient // destructor unregisters the cleanup. // Connection is being destroyed before thread client is, so reset - // thread client m_cleanup_it member so thread client destructor does not - // try unregister this callback after connection is destroyed. - thread->second.m_cleanup_it.reset(); + // thread client m_disconnect_cb member so thread client destructor does not + // try to unregister this callback after connection is destroyed. // Remove connection pointer about to be destroyed from the map const std::unique_lock lock(mutex); + thread->second.m_disconnect_cb.reset(); threads.erase(thread); }); return {thread, true}; @@ -315,16 +335,16 @@ ProxyClient::~ProxyClient() // If thread is being destroyed before connection is destroyed, remove the // cleanup callback that was registered to handle the connection being // destroyed before the thread being destroyed. - if (m_cleanup_it) { - m_context.connection->removeSyncCleanup(*m_cleanup_it); + if (m_disconnect_cb) { + m_context.connection->removeSyncCleanup(*m_disconnect_cb); } } -void ProxyClient::setCleanup(const std::function& fn) +void ProxyClient::setDisconnectCallback(const std::function& fn) { assert(fn); - assert(!m_cleanup_it); - m_cleanup_it = m_context.connection->addSyncCleanup(fn); + assert(!m_disconnect_cb); + m_disconnect_cb = m_context.connection->addSyncCleanup(fn); } ProxyServer::ProxyServer(ThreadContext& thread_context, std::thread&& thread) @@ -375,7 +395,7 @@ kj::Promise ProxyServer::makeThread(MakeThreadContext context) const std::string from = context.getParams().getName(); std::promise thread_context; std::thread thread([&thread_context, from, this]() { - g_thread_context.thread_name = ThreadName(m_connection.m_loop.m_exe_name) + " (from " + from + ")"; + g_thread_context.thread_name = ThreadName(m_connection.m_loop->m_exe_name) + " (from " + from + ")"; g_thread_context.waiter = std::make_unique(); thread_context.set_value(&g_thread_context); std::unique_lock lock(g_thread_context.waiter->m_mutex); diff --git a/src/mp/util.cpp b/src/mp/util.cpp index 309bb922352a..a9485399a2ad 100644 --- a/src/mp/util.cpp +++ b/src/mp/util.cpp @@ -1,16 +1,16 @@ -// Copyright (c) 2018-2019 The Bitcoin Core developers +// Copyright (c) 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 #include -#include +#include +#include #include #include #include #include -#include #include #include #include diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 997a0289b4c4..2a1a7e9e7c27 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2020 The Bitcoin Core developers +# Copyright (c) The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -13,7 +13,7 @@ add_custom_target(mptests) add_custom_target(mpcheck COMMAND ${CMAKE_CTEST_COMMAND} DEPENDS mptests) # Only add more convenient tests and check targets if project is being built -# standlone, to prevent clashes with external projects. +# standalone, to prevent clashes with external projects. if (MP_STANDALONE) add_custom_target(tests DEPENDS mptests) add_custom_target(check DEPENDS mpcheck) diff --git a/test/mp/test/foo-types.h b/test/mp/test/foo-types.h index 246b19480589..e70bc4c100bb 100644 --- a/test/mp/test/foo-types.h +++ b/test/mp/test/foo-types.h @@ -1,13 +1,20 @@ -// Copyright (c) 2019 The Bitcoin Core developers +// Copyright (c) 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 MP_TEST_FOO_TYPES_H #define MP_TEST_FOO_TYPES_H +#include #include + +// IWYU pragma: begin_exports +#include +#include +#include #include #include +#include #include #include #include @@ -17,9 +24,18 @@ #include #include #include +#include +#include +// IWYU pragma: end_exports namespace mp { namespace test { +namespace messages { +struct ExtendedCallback; // IWYU pragma: export +struct FooCallback; // IWYU pragma: export +struct FooFn; // IWYU pragma: export +struct FooInterface; // IWYU pragma: export +} // namespace messages template void CustomBuildField(TypeList, Priority<1>, InvokeContext& invoke_context, const FooCustom& value, Output&& output) diff --git a/test/mp/test/foo.capnp b/test/mp/test/foo.capnp index df0d436114d0..75e4617da845 100644 --- a/test/mp/test/foo.capnp +++ b/test/mp/test/foo.capnp @@ -1,4 +1,4 @@ -# Copyright (c) 2019 The Bitcoin Core developers +# Copyright (c) The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -28,6 +28,9 @@ interface FooInterface $Proxy.wrap("mp::test::FooImplementation") { passMessage @13 (arg :FooMessage) -> (result :FooMessage); passMutable @14 (arg :FooMutable) -> (arg :FooMutable); passEnum @15 (arg :Int32) -> (result :Int32); + passFn @16 (context :Proxy.Context, fn :FooFn) -> (result :Int32); + callFn @17 () -> (); + callFnAsync @18 (context :Proxy.Context) -> (); } interface FooCallback $Proxy.wrap("mp::test::FooCallback") { @@ -39,6 +42,11 @@ interface ExtendedCallback extends(FooCallback) $Proxy.wrap("mp::test::ExtendedC callExtended @0 (context :Proxy.Context, arg :Int32) -> (result :Int32); } +interface FooFn $Proxy.wrap("ProxyCallback>") { + destroy @0 (context :Proxy.Context) -> (); + call @1 (context :Proxy.Context) -> (result :Int32); +} + struct FooStruct $Proxy.wrap("mp::test::FooStruct") { name @0 :Text; setint @1 :List(Int32); diff --git a/test/mp/test/foo.h b/test/mp/test/foo.h index 1c5ee79f2111..70bf4ff171bf 100644 --- a/test/mp/test/foo.h +++ b/test/mp/test/foo.h @@ -1,10 +1,12 @@ -// Copyright (c) 2019 The Bitcoin Core developers +// Copyright (c) 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 MP_TEST_FOO_H #define MP_TEST_FOO_H +#include +#include #include #include #include @@ -75,7 +77,11 @@ class FooImplementation FooMessage passMessage(FooMessage foo) { foo.message += " call"; return foo; } void passMutable(FooMutable& foo) { foo.message += " call"; } FooEnum passEnum(FooEnum foo) { return foo; } + int passFn(std::function fn) { return fn(); } std::shared_ptr m_callback; + void callFn() { assert(m_fn); m_fn(); } + void callFnAsync() { assert(m_fn); m_fn(); } + std::function m_fn; }; } // namespace test diff --git a/test/mp/test/test.cpp b/test/mp/test/test.cpp index 7fc64f6741d8..225d00d5b178 100644 --- a/test/mp/test/test.cpp +++ b/test/mp/test/test.cpp @@ -1,54 +1,117 @@ -// Copyright (c) 2019 The Bitcoin Core developers +// Copyright (c) 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 #include #include -#include #include -#include -#include +#include +#include #include +#include #include -#include +#include +#include #include +#include #include #include +#include +#include +#include +#include +#include +#include #include +#include #include #include +#include namespace mp { namespace test { +/** + * Test setup class creating a two way connection between a + * ProxyServer object and a ProxyClient. + * + * Provides client_disconnect and server_disconnect lambdas that can be used to + * trigger disconnects and test handling of broken and closed connections. + * + * Accepts a client_owns_connection option to test different ProxyClient + * destroy_connection values and control whether destroying the ProxyClient + * object destroys the client Connection object. Normally it makes sense for + * this to be true to simplify shutdown and avoid needing to call + * client_disconnect manually, but false allows testing more ProxyClient + * behavior and the "IPC client method called after disconnect" code path. + */ +class TestSetup +{ +public: + std::function server_disconnect; + std::function client_disconnect; + std::promise>> client_promise; + std::unique_ptr> client; + ProxyServer* server{nullptr}; + //! Thread variable should be after other struct members so the thread does + //! not start until the other members are initialized. + std::thread thread; + + TestSetup(bool client_owns_connection = true) + : thread{[&] { + EventLoop loop("mptest", [](bool raise, const std::string& log) { + std::cout << "LOG" << raise << ": " << log << "\n"; + if (raise) throw std::runtime_error(log); + }); + auto pipe = loop.m_io_context.provider->newTwoWayPipe(); + + auto server_connection = + std::make_unique(loop, kj::mv(pipe.ends[0]), [&](Connection& connection) { + auto server_proxy = kj::heap>( + std::make_shared(), connection); + server = server_proxy; + return capnp::Capability::Client(kj::mv(server_proxy)); + }); + server_disconnect = [&] { loop.sync([&] { server_connection.reset(); }); }; + // Set handler to destroy the server when the client disconnects. This + // is ignored if server_disconnect() is called instead. + server_connection->onDisconnect([&] { server_connection.reset(); }); + + auto client_connection = std::make_unique(loop, kj::mv(pipe.ends[1])); + auto client_proxy = std::make_unique>( + client_connection->m_rpc_system->bootstrap(ServerVatId().vat_id).castAs(), + client_connection.get(), /* destroy_connection= */ client_owns_connection); + if (client_owns_connection) { + client_connection.release(); + } else { + client_disconnect = [&] { loop.sync([&] { client_connection.reset(); }); }; + } + + client_promise.set_value(std::move(client_proxy)); + loop.loop(); + }} + { + client = client_promise.get_future().get(); + } + + ~TestSetup() + { + // Test that client cleanup_fns are executed. + bool destroyed = false; + client->m_context.cleanup_fns.emplace_front([&destroyed] { destroyed = true; }); + client.reset(); + KJ_EXPECT(destroyed); + + thread.join(); + } +}; + KJ_TEST("Call FooInterface methods") { - std::promise>> foo_promise; - std::function disconnect_client; - std::thread thread([&]() { - EventLoop loop("mptest", [](bool raise, const std::string& log) { - std::cout << "LOG" << raise << ": " << log << "\n"; - }); - auto pipe = loop.m_io_context.provider->newTwoWayPipe(); - - auto connection_client = std::make_unique(loop, kj::mv(pipe.ends[0])); - auto foo_client = std::make_unique>( - connection_client->m_rpc_system->bootstrap(ServerVatId().vat_id).castAs(), - connection_client.get(), /* destroy_connection= */ false); - foo_promise.set_value(std::move(foo_client)); - disconnect_client = [&] { loop.sync([&] { connection_client.reset(); }); }; - - auto connection_server = std::make_unique(loop, kj::mv(pipe.ends[1]), [&](Connection& connection) { - auto foo_server = kj::heap>(std::make_shared(), connection); - return capnp::Capability::Client(kj::mv(foo_server)); - }); - connection_server->onDisconnect([&] { connection_server.reset(); }); - loop.loop(); - }); - - auto foo = foo_promise.get_future().get(); + TestSetup setup; + ProxyClient* foo = setup.client.get(); + KJ_EXPECT(foo->add(1, 2) == 3); FooStruct in; @@ -128,13 +191,110 @@ KJ_TEST("Call FooInterface methods") foo->passMutable(mut); KJ_EXPECT(mut.message == "init build pass call return read"); - disconnect_client(); - thread.join(); + KJ_EXPECT(foo->passFn([]{ return 10; }) == 10); +} + +KJ_TEST("Call IPC method after client connection is closed") +{ + TestSetup setup{/*client_owns_connection=*/false}; + ProxyClient* foo = setup.client.get(); + KJ_EXPECT(foo->add(1, 2) == 3); + setup.client_disconnect(); + + bool disconnected{false}; + try { + foo->add(1, 2); + } catch (const std::runtime_error& e) { + KJ_EXPECT(std::string_view{e.what()} == "IPC client method called after disconnect."); + disconnected = true; + } + KJ_EXPECT(disconnected); +} + +KJ_TEST("Calling IPC method after server connection is closed") +{ + TestSetup setup; + ProxyClient* foo = setup.client.get(); + KJ_EXPECT(foo->add(1, 2) == 3); + setup.server_disconnect(); + + bool disconnected{false}; + try { + foo->add(1, 2); + } catch (const std::runtime_error& e) { + KJ_EXPECT(std::string_view{e.what()} == "IPC client method call interrupted by disconnect."); + disconnected = true; + } + KJ_EXPECT(disconnected); +} + +KJ_TEST("Calling IPC method and disconnecting during the call") +{ + TestSetup setup{/*client_owns_connection=*/false}; + ProxyClient* foo = setup.client.get(); + KJ_EXPECT(foo->add(1, 2) == 3); + + // Set m_fn to initiate client disconnect when server is in the middle of + // handling the callFn call to make sure this case is handled cleanly. + setup.server->m_impl->m_fn = setup.client_disconnect; + + bool disconnected{false}; + try { + foo->callFn(); + } catch (const std::runtime_error& e) { + KJ_EXPECT(std::string_view{e.what()} == "IPC client method call interrupted by disconnect."); + disconnected = true; + } + KJ_EXPECT(disconnected); +} + +KJ_TEST("Calling IPC method, disconnecting and blocking during the call") +{ + // This test is similar to last test, except that instead of letting the IPC + // call return immediately after triggering a disconnect, make it disconnect + // & wait so server is forced to deal with having a disconnection and call + // in flight at the same time. + // + // Test uses callFnAsync() instead of callFn() to implement this. Both of + // these methods have the same implementation, but the callFnAsync() capnp + // method declaration takes an mp.Context argument so the method executes on + // an asynchronous thread instead of executing in the event loop thread, so + // it is able to block without deadlocking the event lock thread. + // + // This test adds important coverage because it causes the server Connection + // object to be destroyed before ProxyServer object, which is not a + // condition that usually happens because the m_rpc_system.reset() call in + // the ~Connection destructor usually would immediately free all remaining + // ProxyServer objects associated with the connection. Having an in-progress + // RPC call requires keeping the ProxyServer longer. + + std::promise signal; + TestSetup setup{/*client_owns_connection=*/false}; + ProxyClient* foo = setup.client.get(); + KJ_EXPECT(foo->add(1, 2) == 3); + + foo->initThreadMap(); + setup.server->m_impl->m_fn = [&] { + EventLoopRef loop{*setup.server->m_context.loop}; + setup.client_disconnect(); + signal.get_future().get(); + }; + + bool disconnected{false}; + try { + foo->callFnAsync(); + } catch (const std::runtime_error& e) { + KJ_EXPECT(std::string_view{e.what()} == "IPC client method call interrupted by disconnect."); + disconnected = true; + } + KJ_EXPECT(disconnected); - bool destroyed = false; - foo->m_context.cleanup_fns.emplace_front([&destroyed]{ destroyed = true; }); - foo.reset(); - KJ_EXPECT(destroyed); + // Now that the disconnect has been detected, set signal allowing the + // callFnAsync() IPC call to return. Since signalling may not wake up the + // thread right away, it is important for the signal variable to be declared + // *before* the TestSetup variable so is not destroyed while + // signal.get_future().get() is called. + signal.set_value(); } } // namespace test From 6a7c0d3f874942a460bf5b13a107a2b21eb2e572 Mon Sep 17 00:00:00 2001 From: kevkevinpal Date: Fri, 1 Aug 2025 18:35:07 -0400 Subject: [PATCH 0096/2775] test: refactor to remove duplicated test code --- test/functional/wallet_migration.py | 33 ++++++----------------------- 1 file changed, 6 insertions(+), 27 deletions(-) diff --git a/test/functional/wallet_migration.py b/test/functional/wallet_migration.py index aea422bc427f..085f6249e7d0 100755 --- a/test/functional/wallet_migration.py +++ b/test/functional/wallet_migration.py @@ -621,31 +621,10 @@ def test_wallet_with_relative_path(self): assert_equal(info["descriptors"], False) assert_equal(info["format"], "bdb") - def test_wallet_with_path_ending_in_slash(self): - self.log.info("Test migrating a wallet with a name/path ending in '/'") - - # The last directory in the wallet's path - final_dir = "mywallet" - wallet_name = f"path/to/{final_dir}/" - wallet = self.create_legacy_wallet(wallet_name) - default = self.master_node.get_wallet_rpc(self.default_wallet_name) - - addr = wallet.getnewaddress() - txid = default.sendtoaddress(addr, 1) - self.generate(self.master_node, 1) - bals = wallet.getbalances() - - _, wallet = self.migrate_and_get_rpc(wallet_name) - - assert wallet.gettransaction(txid) - - assert_equal(bals, wallet.getbalances()) - - def test_wallet_with_path_ending_in_relative_specifier(self): - self.log.info("Test migrating a wallet with a name/path ending in a relative specifier, '..'") - wallet_ending_in_relative = "path/that/ends/in/.." + def test_wallet_with_path(self, wallet_path): + self.log.info("Test migrating a wallet with the following path/name: %s", wallet_path) # the wallet data is actually inside of path/that/ends/ - wallet = self.create_legacy_wallet(wallet_ending_in_relative) + wallet = self.create_legacy_wallet(wallet_path) default = self.master_node.get_wallet_rpc(self.default_wallet_name) addr = wallet.getnewaddress() @@ -653,7 +632,7 @@ def test_wallet_with_path_ending_in_relative_specifier(self): self.generate(self.master_node, 1) bals = wallet.getbalances() - _, wallet = self.migrate_and_get_rpc(wallet_ending_in_relative) + _, wallet = self.migrate_and_get_rpc(wallet_path) assert wallet.gettransaction(txid) @@ -1558,8 +1537,8 @@ def run_test(self): self.test_nonexistent() self.test_unloaded_by_path() self.test_wallet_with_relative_path() - self.test_wallet_with_path_ending_in_slash() - self.test_wallet_with_path_ending_in_relative_specifier() + self.test_wallet_with_path("path/to/mywallet/") + self.test_wallet_with_path("path/that/ends/in/..") self.test_default_wallet() self.test_direct_file() self.test_addressbook() From eb073209db9efdbc2c94bc1f535a27ec6b20d954 Mon Sep 17 00:00:00 2001 From: Antoine Poinsot Date: Mon, 4 Aug 2025 14:06:27 -0400 Subject: [PATCH 0097/2775] qa: test witness stripping in p2p_segwit A stripped witness is detected as a special case in mempool acceptance to make sure we do not add the wtxid (which is =txid since witness is stripped) to the reject filter. This is because it may interfere with 1p1c parent relay which currently uses orphan reconciliation (and originally it was until wtxid-relay was widely adopted on the network. This commit adds a test for this special case in the p2p_segwit function test, both when spending a native segwit output and when spending a p2sh-wrapped segwit output. Thanks to Eugene Siegel for pointing out the p2sh-wrapped detection did not have test coverage by finding a bug in a related patch of mine. --- test/functional/p2p_segwit.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/functional/p2p_segwit.py b/test/functional/p2p_segwit.py index 7dc904a45f6b..8193ff7cd699 100755 --- a/test/functional/p2p_segwit.py +++ b/test/functional/p2p_segwit.py @@ -693,6 +693,12 @@ def test_p2sh_witness(self): expected_msgs=[spend_tx.txid_hex, 'was not accepted: mandatory-script-verify-flag-failed (Witness program was passed an empty witness)']): test_transaction_acceptance(self.nodes[0], self.test_node, spend_tx, with_witness=False, accepted=False) + # The transaction was detected as witness stripped above and not added to the reject + # filter. Trying again will check it again and result in the same error. + with self.nodes[0].assert_debug_log( + expected_msgs=[spend_tx.txid_hex, 'was not accepted: mandatory-script-verify-flag-failed (Witness program was passed an empty witness)']): + test_transaction_acceptance(self.nodes[0], self.test_node, spend_tx, with_witness=False, accepted=False) + # Try to put the witness script in the scriptSig, should also fail. spend_tx.vin[0].scriptSig = CScript([p2wsh_pubkey, b'a']) with self.nodes[0].assert_debug_log( @@ -1245,6 +1251,13 @@ def test_tx_relay_after_segwit_activation(self): test_transaction_acceptance(self.nodes[0], self.test_node, tx2, with_witness=True, accepted=True) test_transaction_acceptance(self.nodes[0], self.test_node, tx3, with_witness=True, accepted=False) + # Now do the opposite: strip the witness entirely. This will be detected as witness stripping and + # the (w)txid won't be added to the reject filter: we can try again and get the same error. + tx3.wit.vtxinwit[0].scriptWitness.stack = [] + reason = "was not accepted: mandatory-script-verify-flag-failed (Witness program was passed an empty witness)" + test_transaction_acceptance(self.nodes[0], self.test_node, tx3, with_witness=False, accepted=False, reason=reason) + test_transaction_acceptance(self.nodes[0], self.test_node, tx3, with_witness=False, accepted=False, reason=reason) + # Get rid of the extra witness, and verify acceptance. tx3.wit.vtxinwit[0].scriptWitness.stack = [witness_script] # Also check that old_node gets a tx announcement, even though this is From 1252eeb997df2eb12c33d92eb1a5c9d6643a67ff Mon Sep 17 00:00:00 2001 From: 0xb10c Date: Mon, 4 Aug 2025 16:20:05 +0200 Subject: [PATCH 0098/2775] rpc: fix getpeerinfo ping duration unit docs The getpeerinfo docs incorrectly specified the ping durations as milliseconds. This was incorrectly changed in a3789c700b5a43efd4b366b4241ae840d63f2349 (released in v25; master since Sept. 2022). The correct duration unit is seconds. Also, remove the documentation of the getpeerinfo RPC response from the ping RPC since it's incomplete. Better to just reference the getpeerinfo RPC and it's documenation for this. --- src/rpc/net.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index 2432d634593c..fbb70d72161d 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -85,7 +85,7 @@ static RPCHelpMan ping() return RPCHelpMan{ "ping", "Requests that a ping be sent to all other nodes, to measure ping time.\n" - "Results provided in getpeerinfo, pingtime and pingwait fields are decimal seconds.\n" + "Results are provided in getpeerinfo.\n" "Ping command is handled in queue with all other commands, so it measures processing backlog, not just network ping.\n", {}, RPCResult{RPCResult::Type::NONE, "", ""}, @@ -150,9 +150,9 @@ static RPCHelpMan getpeerinfo() {RPCResult::Type::NUM, "bytesrecv", "The total bytes received"}, {RPCResult::Type::NUM_TIME, "conntime", "The " + UNIX_EPOCH_TIME + " of the connection"}, {RPCResult::Type::NUM, "timeoffset", "The time offset in seconds"}, - {RPCResult::Type::NUM, "pingtime", /*optional=*/true, "The last ping time in milliseconds (ms), if any"}, - {RPCResult::Type::NUM, "minping", /*optional=*/true, "The minimum observed ping time in milliseconds (ms), if any"}, - {RPCResult::Type::NUM, "pingwait", /*optional=*/true, "The duration in milliseconds (ms) of an outstanding ping (if non-zero)"}, + {RPCResult::Type::NUM, "pingtime", /*optional=*/true, "The last ping time in seconds, if any"}, + {RPCResult::Type::NUM, "minping", /*optional=*/true, "The minimum observed ping time in seconds, if any"}, + {RPCResult::Type::NUM, "pingwait", /*optional=*/true, "The duration in seconds of an outstanding ping (if non-zero)"}, {RPCResult::Type::NUM, "version", "The peer version, such as 70001"}, {RPCResult::Type::STR, "subver", "The string version"}, {RPCResult::Type::BOOL, "inbound", "Inbound (true) or Outbound (false)"}, From 4489ab526add168daf36684eb3d86957ff3388c1 Mon Sep 17 00:00:00 2001 From: Jon Atack Date: Sun, 16 Feb 2025 11:25:43 -0600 Subject: [PATCH 0099/2775] netinfo: return local services in the default report Credit to l0rinc for refactoring ServicesList(). Co-authored-by: l0rinc Co-authored-by: Daniela Brozzoni --- src/bitcoin-cli.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/bitcoin-cli.cpp b/src/bitcoin-cli.cpp index 14a0cb245fab..1f4b512f420a 100644 --- a/src/bitcoin-cli.cpp +++ b/src/bitcoin-cli.cpp @@ -463,6 +463,17 @@ class NetinfoRequestHandler : public BaseRequestHandler } return str; } + static std::string ServicesList(const UniValue& services) + { + std::string str{services.size() ? services[0].get_str() : ""}; + for (size_t i{1}; i < services.size(); ++i) { + str += ", " + services[i].get_str(); + } + for (auto& c: str) { + c = (c == '_' ? ' ' : ToLower(c)); + } + return str; + } public: static constexpr int ID_PEERINFO = 0; @@ -636,7 +647,8 @@ class NetinfoRequestHandler : public BaseRequestHandler } } - // Report local addresses, ports, and scores. + // Report local services, addresses, ports, and scores. + result += strprintf("\n\nLocal services: %s", ServicesList(networkinfo["localservicesnames"])); result += "\n\nLocal addresses"; const std::vector& local_addrs{networkinfo["localaddresses"].getValues()}; if (local_addrs.empty()) { From f7d2db28e90297664390d527881ebbbf2c6ce6f0 Mon Sep 17 00:00:00 2001 From: Jon Atack Date: Sun, 16 Feb 2025 09:22:46 -0600 Subject: [PATCH 0100/2775] netinfo: return shortened services, if peers list requested When the detailed peers list is requested, return the shortened services in the -netinfo header in the same format as the "serv" column, instead of the full names list in the report. --- src/bitcoin-cli.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/bitcoin-cli.cpp b/src/bitcoin-cli.cpp index 1f4b512f420a..56f2a906b5f6 100644 --- a/src/bitcoin-cli.cpp +++ b/src/bitcoin-cli.cpp @@ -566,7 +566,8 @@ class NetinfoRequestHandler : public BaseRequestHandler } // Generate report header. - std::string result{strprintf("%s client %s%s - server %i%s\n\n", CLIENT_NAME, FormatFullVersion(), ChainToString(), networkinfo["protocolversion"].getInt(), networkinfo["subversion"].get_str())}; + const std::string services{DetailsRequested() ? strprintf(" - services %s", FormatServices(networkinfo["localservicesnames"])) : ""}; + std::string result{strprintf("%s client %s%s - server %i%s%s\n\n", CLIENT_NAME, FormatFullVersion(), ChainToString(), networkinfo["protocolversion"].getInt(), networkinfo["subversion"].get_str(), services)}; // Report detailed peer connections list sorted by direction and minimum ping time. if (DetailsRequested() && !m_peers.empty()) { @@ -648,7 +649,9 @@ class NetinfoRequestHandler : public BaseRequestHandler } // Report local services, addresses, ports, and scores. - result += strprintf("\n\nLocal services: %s", ServicesList(networkinfo["localservicesnames"])); + if (!DetailsRequested()) { + result += strprintf("\n\nLocal services: %s", ServicesList(networkinfo["localservicesnames"])); + } result += "\n\nLocal addresses"; const std::vector& local_addrs{networkinfo["localaddresses"].getValues()}; if (local_addrs.empty()) { From 721a051320f2c10d2e9c89c985f180da81d64dca Mon Sep 17 00:00:00 2001 From: l0rinc Date: Thu, 24 Jul 2025 15:42:53 -0600 Subject: [PATCH 0101/2775] test: add coverage for -netinfo header and local services Co-authored-by: Jon Atack --- test/functional/interface_bitcoin_cli.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/test/functional/interface_bitcoin_cli.py b/test/functional/interface_bitcoin_cli.py index 5b27f0b85000..734f3110af3a 100755 --- a/test/functional/interface_bitcoin_cli.py +++ b/test/functional/interface_bitcoin_cli.py @@ -81,6 +81,19 @@ def set_test_params(self): def skip_test_if_missing_module(self): self.skip_if_no_cli() + def test_netinfo(self): + """Test -netinfo output format.""" + self.log.info("Test -netinfo header and separate local services line") + out = self.nodes[0].cli('-netinfo').send_cli().splitlines() + assert out[0].startswith(f"{self.config['environment']['CLIENT_NAME']} client ") + assert any(re.match(r"^Local services:.+network", line) for line in out) + + self.log.info("Test -netinfo local services are moved to header if details are requested") + det = self.nodes[0].cli('-netinfo', '1').send_cli().splitlines() + self.log.debug(f"Test -netinfo 1 header output: {det[0]}") + assert re.match(rf"^{re.escape(self.config['environment']['CLIENT_NAME'])} client.+services nwl2?$", det[0]) + assert not any(line.startswith("Local services:") for line in det) + def run_test(self): """Main test logic""" self.generate(self.nodes[0], BLOCKS) @@ -377,6 +390,8 @@ def run_test(self): self.log.info("*** Wallet not compiled; cli getwalletinfo and -getinfo wallet tests skipped") self.generate(self.nodes[0], 25) # maintain block parity with the wallet_compiled conditional branch + self.test_netinfo() + self.log.info("Test -version with node stopped") self.stop_node(0) cli_response = self.nodes[0].cli('-version').send_cli() From 49b3d3a92a7250e80c56ff8c351cf1670e32c1a2 Mon Sep 17 00:00:00 2001 From: marcofleon Date: Thu, 31 Jul 2025 12:18:51 +0100 Subject: [PATCH 0102/2775] Clean up `FindTxForGetData` Adds back a comment that was unintentionally deleted in the GenTxid refactor. --- src/net_processing.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 61439f718837..28e6cc7bb885 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -2393,12 +2393,12 @@ void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CInv& CTransactionRef PeerManagerImpl::FindTxForGetData(const Peer::TxRelay& tx_relay, const GenTxid& gtxid) { + // If a tx was in the mempool prior to the last INV for this peer, permit the request. auto txinfo{std::visit( [&](const auto& id) EXCLUSIVE_LOCKS_REQUIRED(NetEventsInterface::g_msgproc_mutex) { return m_mempool.info_for_relay(id, tx_relay.m_last_inv_sequence); }, gtxid)}; - if (txinfo.tx) { return std::move(txinfo.tx); } From fa1d2f63803e71d21b470cf4eb52fbe941aa0b28 Mon Sep 17 00:00:00 2001 From: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz> Date: Tue, 5 Aug 2025 19:01:32 +0200 Subject: [PATCH 0103/2775] ci: Pass CI_FAILFAST_TEST_LEAVE_DANGLING into container --- ci/test/02_run_container.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ci/test/02_run_container.py b/ci/test/02_run_container.py index e04426765713..513ecacaca87 100755 --- a/ci/test/02_run_container.py +++ b/ci/test/02_run_container.py @@ -26,9 +26,12 @@ def main(): encoding="utf8", ).stdout.splitlines() settings = set(l.split("=")[0].split("export ")[1] for l in settings) - # Add this one manually, because it is the only one set inside the - # container that also allows external overwrites - settings.add("BASE_BUILD_DIR") + # Add "hidden" settings, which are never exported, manually. Otherwise, + # they will not be passed on. + settings.update([ + "BASE_BUILD_DIR", + "CI_FAILFAST_TEST_LEAVE_DANGLING", + ]) # Append $USER to /tmp/env to support multi-user systems and $CONTAINER_NAME # to allow support starting multiple runs simultaneously by the same user. From 9014d4016ad9351cb59b587541895e55f5d589cc Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Fri, 25 Apr 2025 16:13:25 -0400 Subject: [PATCH 0104/2775] tests: add sighash caching tests to feature_taproot --- test/functional/feature_taproot.py | 98 ++++++++++++++++++++++++++++-- 1 file changed, 93 insertions(+), 5 deletions(-) diff --git a/test/functional/feature_taproot.py b/test/functional/feature_taproot.py index 6109fd9b9d81..b22d57318711 100755 --- a/test/functional/feature_taproot.py +++ b/test/functional/feature_taproot.py @@ -71,6 +71,7 @@ OP_PUSHDATA1, OP_RETURN, OP_SWAP, + OP_TUCK, OP_VERIFY, SIGHASH_DEFAULT, SIGHASH_ALL, @@ -172,9 +173,9 @@ def get(ctx, name): ctx[name] = expr return expr.value -def getter(name): +def getter(name, **kwargs): """Return a callable that evaluates name in its passed context.""" - return lambda ctx: get(ctx, name) + return lambda ctx: get({**ctx, **kwargs}, name) def override(expr, **kwargs): """Return a callable that evaluates expr in a modified context.""" @@ -218,6 +219,20 @@ def default_controlblock(ctx): """Default expression for "controlblock": combine leafversion, negflag, pubkey_internal, merklebranch.""" return bytes([get(ctx, "leafversion") + get(ctx, "negflag")]) + get(ctx, "pubkey_internal") + get(ctx, "merklebranch") +def default_scriptcode_suffix(ctx): + """Default expression for "scriptcode_suffix", the actually used portion of the scriptcode.""" + scriptcode = get(ctx, "scriptcode") + codesepnum = get(ctx, "codesepnum") + if codesepnum == -1: + return scriptcode + codeseps = 0 + for (opcode, data, sop_idx) in scriptcode.raw_iter(): + if opcode == OP_CODESEPARATOR: + if codeseps == codesepnum: + return CScript(scriptcode[sop_idx+1:]) + codeseps += 1 + assert False + def default_sigmsg(ctx): """Default expression for "sigmsg": depending on mode, compute BIP341, BIP143, or legacy sigmsg.""" tx = get(ctx, "tx") @@ -237,12 +252,12 @@ def default_sigmsg(ctx): return TaprootSignatureMsg(tx, utxos, hashtype, idx, scriptpath=False, annex=annex) elif mode == "witv0": # BIP143 signature hash - scriptcode = get(ctx, "scriptcode") + scriptcode = get(ctx, "scriptcode_suffix") utxos = get(ctx, "utxos") return SegwitV0SignatureMsg(scriptcode, tx, idx, hashtype, utxos[idx].nValue) else: # Pre-segwit signature hash - scriptcode = get(ctx, "scriptcode") + scriptcode = get(ctx, "scriptcode_suffix") return LegacySignatureMsg(scriptcode, tx, idx, hashtype)[0] def default_sighash(ctx): @@ -302,7 +317,12 @@ def default_hashtype_actual(ctx): def default_bytes_hashtype(ctx): """Default expression for "bytes_hashtype": bytes([hashtype_actual]) if not 0, b"" otherwise.""" - return bytes([x for x in [get(ctx, "hashtype_actual")] if x != 0]) + mode = get(ctx, "mode") + hashtype_actual = get(ctx, "hashtype_actual") + if mode != "taproot" or hashtype_actual != 0: + return bytes([hashtype_actual]) + else: + return bytes() def default_sign(ctx): """Default expression for "sign": concatenation of signature and bytes_hashtype.""" @@ -380,6 +400,8 @@ def default_scriptsig(ctx): "key_tweaked": default_key_tweaked, # The tweak to use (None for script path spends, the actual tweak for key path spends). "tweak": default_tweak, + # The part of the scriptcode after the last executed OP_CODESEPARATOR. + "scriptcode_suffix": default_scriptcode_suffix, # The sigmsg value (preimage of sighash) "sigmsg": default_sigmsg, # The sighash value (32 bytes) @@ -410,6 +432,8 @@ def default_scriptsig(ctx): "annex": None, # The codeseparator position (only when mode=="taproot"). "codeseppos": -1, + # Which OP_CODESEPARATOR is the last executed one in the script (in legacy/P2SH/P2WSH). + "codesepnum": -1, # The redeemscript to add to the scriptSig (if P2SH; None implies not P2SH). "script_p2sh": None, # The script to add to the witness in (if P2WSH; None implies P2WPKH) @@ -1211,6 +1235,70 @@ def predict_sigops_ratio(n, dummy_size): standard = hashtype in VALID_SIGHASHES_ECDSA and (p2sh or witv0) add_spender(spenders, "compat/nocsa", hashtype=hashtype, p2sh=p2sh, witv0=witv0, standard=standard, script=CScript([OP_IF, OP_11, pubkey1, OP_CHECKSIGADD, OP_12, OP_EQUAL, OP_ELSE, pubkey1, OP_CHECKSIG, OP_ENDIF]), key=eckey1, sigops_weight=4-3*witv0, inputs=[getter("sign"), b''], failure={"inputs": [getter("sign"), b'\x01']}, **ERR_BAD_OPCODE) + # == sighash caching tests == + + # Sighash caching in legacy. + for p2sh in [False, True]: + for witv0 in [False, True]: + eckey1, pubkey1 = generate_keypair(compressed=compressed) + for _ in range(10): + # Construct a script with 20 checksig operations (10 sighash types, each 2 times), + # randomly ordered and interleaved with 4 OP_CODESEPARATORS. + ops = [1, 2, 3, 0x21, 0x42, 0x63, 0x81, 0x83, 0xe1, 0xc2, -1, -1] * 2 + # Make sure no OP_CODESEPARATOR appears last. + while True: + random.shuffle(ops) + if ops[-1] != -1: + break + script = [pubkey1] + inputs = [] + codeseps = -1 + for pos, op in enumerate(ops): + if op == -1: + codeseps += 1 + script.append(OP_CODESEPARATOR) + elif pos + 1 != len(ops): + script += [OP_TUCK, OP_CHECKSIGVERIFY] + inputs.append(getter("sign", codesepnum=codeseps, hashtype=op)) + else: + script += [OP_CHECKSIG] + inputs.append(getter("sign", codesepnum=codeseps, hashtype=op)) + inputs.reverse() + script = CScript(script) + add_spender(spenders, "sighashcache/legacy", p2sh=p2sh, witv0=witv0, standard=False, script=script, inputs=inputs, key=eckey1, sigops_weight=12*8*(4-3*witv0), no_fail=True) + + # Sighash caching in tapscript. + for _ in range(10): + # Construct a script with 700 checksig operations (7 sighash types, each 100 times), + # randomly ordered and interleaved with 100 OP_CODESEPARATORS. + ops = [0, 1, 2, 3, 0x81, 0x82, 0x83, -1] * 100 + # Make sure no OP_CODESEPARATOR appears last. + while True: + random.shuffle(ops) + if ops[-1] != -1: + break + script = [pubs[1]] + inputs = [] + opcount = 1 + codeseppos = -1 + for pos, op in enumerate(ops): + if op == -1: + codeseppos = opcount + opcount += 1 + script.append(OP_CODESEPARATOR) + elif pos + 1 != len(ops): + opcount += 2 + script += [OP_TUCK, OP_CHECKSIGVERIFY] + inputs.append(getter("sign", codeseppos=codeseppos, hashtype=op)) + else: + opcount += 1 + script += [OP_CHECKSIG] + inputs.append(getter("sign", codeseppos=codeseppos, hashtype=op)) + inputs.reverse() + script = CScript(script) + tap = taproot_construct(pubs[0], [("leaf", script)]) + add_spender(spenders, "sighashcache/taproot", tap=tap, leaf="leaf", inputs=inputs, standard=True, key=secs[1], no_fail=True) + return spenders From 8f3ddb0bccebc930836b4a6745a7cf29b41eb302 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Fri, 25 Apr 2025 13:11:30 -0400 Subject: [PATCH 0105/2775] script: (refactor) prepare for introducing sighash midstate cache --- src/script/interpreter.cpp | 44 +++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/script/interpreter.cpp b/src/script/interpreter.cpp index 61ea7f4503c2..765c415efbb9 100644 --- a/src/script/interpreter.cpp +++ b/src/script/interpreter.cpp @@ -1569,6 +1569,18 @@ uint256 SignatureHash(const CScript& scriptCode, const T& txTo, unsigned int nIn { assert(nIn < txTo.vin.size()); + if (sigversion != SigVersion::WITNESS_V0) { + // Check for invalid use of SIGHASH_SINGLE + if ((nHashType & 0x1f) == SIGHASH_SINGLE) { + if (nIn >= txTo.vout.size()) { + // nOut out of range + return uint256::ONE; + } + } + } + + HashWriter ss{}; + if (sigversion == SigVersion::WITNESS_V0) { uint256 hashPrevouts; uint256 hashSequence; @@ -1583,16 +1595,14 @@ uint256 SignatureHash(const CScript& scriptCode, const T& txTo, unsigned int nIn hashSequence = cacheready ? cache->hashSequence : SHA256Uint256(GetSequencesSHA256(txTo)); } - if ((nHashType & 0x1f) != SIGHASH_SINGLE && (nHashType & 0x1f) != SIGHASH_NONE) { hashOutputs = cacheready ? cache->hashOutputs : SHA256Uint256(GetOutputsSHA256(txTo)); } else if ((nHashType & 0x1f) == SIGHASH_SINGLE && nIn < txTo.vout.size()) { - HashWriter ss{}; - ss << txTo.vout[nIn]; - hashOutputs = ss.GetHash(); + HashWriter inner_ss{}; + inner_ss << txTo.vout[nIn]; + hashOutputs = inner_ss.GetHash(); } - HashWriter ss{}; // Version ss << txTo.version; // Input prevouts/nSequence (none/all, depending on flags) @@ -1609,26 +1619,16 @@ uint256 SignatureHash(const CScript& scriptCode, const T& txTo, unsigned int nIn ss << hashOutputs; // Locktime ss << txTo.nLockTime; - // Sighash type - ss << nHashType; - - return ss.GetHash(); - } + } else { + // Wrapper to serialize only the necessary parts of the transaction being signed + CTransactionSignatureSerializer txTmp(txTo, scriptCode, nIn, nHashType); - // Check for invalid use of SIGHASH_SINGLE - if ((nHashType & 0x1f) == SIGHASH_SINGLE) { - if (nIn >= txTo.vout.size()) { - // nOut out of range - return uint256::ONE; - } + // Serialize + ss << txTmp; } - // Wrapper to serialize only the necessary parts of the transaction being signed - CTransactionSignatureSerializer txTmp(txTo, scriptCode, nIn, nHashType); - - // Serialize and hash - HashWriter ss{}; - ss << txTmp << nHashType; + // Add sighash type and hash. + ss << nHashType; return ss.GetHash(); } From 92af9f74d74e76681f7d98f293eab226972137b4 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Fri, 25 Apr 2025 13:31:18 -0400 Subject: [PATCH 0106/2775] script: (optimization) introduce sighash midstate caching --- src/script/interpreter.cpp | 43 ++++++++++++++++++++++++++++++++++++-- src/script/interpreter.h | 22 ++++++++++++++++++- 2 files changed, 62 insertions(+), 3 deletions(-) diff --git a/src/script/interpreter.cpp b/src/script/interpreter.cpp index 765c415efbb9..07fda48c493f 100644 --- a/src/script/interpreter.cpp +++ b/src/script/interpreter.cpp @@ -1564,8 +1564,35 @@ bool SignatureHashSchnorr(uint256& hash_out, ScriptExecutionData& execdata, cons return true; } +int SigHashCache::CacheIndex(int32_t hash_type) const noexcept +{ + // Note that we do not distinguish between BASE and WITNESS_V0 to determine the cache index, + // because no input can simultaneously use both. + return 3 * !!(hash_type & SIGHASH_ANYONECANPAY) + + 2 * ((hash_type & 0x1f) == SIGHASH_SINGLE) + + 1 * ((hash_type & 0x1f) == SIGHASH_NONE); +} + +bool SigHashCache::Load(int32_t hash_type, const CScript& script_code, HashWriter& writer) const noexcept +{ + auto& entry = m_cache_entries[CacheIndex(hash_type)]; + if (entry.has_value()) { + if (script_code == entry->first) { + writer = HashWriter(entry->second); + return true; + } + } + return false; +} + +void SigHashCache::Store(int32_t hash_type, const CScript& script_code, const HashWriter& writer) noexcept +{ + auto& entry = m_cache_entries[CacheIndex(hash_type)]; + entry.emplace(script_code, writer); +} + template -uint256 SignatureHash(const CScript& scriptCode, const T& txTo, unsigned int nIn, int32_t nHashType, const CAmount& amount, SigVersion sigversion, const PrecomputedTransactionData* cache) +uint256 SignatureHash(const CScript& scriptCode, const T& txTo, unsigned int nIn, int32_t nHashType, const CAmount& amount, SigVersion sigversion, const PrecomputedTransactionData* cache, SigHashCache* sighash_cache) { assert(nIn < txTo.vin.size()); @@ -1581,6 +1608,13 @@ uint256 SignatureHash(const CScript& scriptCode, const T& txTo, unsigned int nIn HashWriter ss{}; + // Try to compute using cached SHA256 midstate. + if (sighash_cache && sighash_cache->Load(nHashType, scriptCode, ss)) { + // Add sighash type and hash. + ss << nHashType; + return ss.GetHash(); + } + if (sigversion == SigVersion::WITNESS_V0) { uint256 hashPrevouts; uint256 hashSequence; @@ -1627,6 +1661,11 @@ uint256 SignatureHash(const CScript& scriptCode, const T& txTo, unsigned int nIn ss << txTmp; } + // If a cache object was provided, store the midstate there. + if (sighash_cache != nullptr) { + sighash_cache->Store(nHashType, scriptCode, ss); + } + // Add sighash type and hash. ss << nHashType; return ss.GetHash(); @@ -1661,7 +1700,7 @@ bool GenericTransactionSignatureChecker::CheckECDSASignature(const std::vecto // Witness sighashes need the amount. if (sigversion == SigVersion::WITNESS_V0 && amount < 0) return HandleMissingData(m_mdb); - uint256 sighash = SignatureHash(scriptCode, *txTo, nIn, nHashType, amount, sigversion, this->txdata); + uint256 sighash = SignatureHash(scriptCode, *txTo, nIn, nHashType, amount, sigversion, this->txdata, &m_sighash_cache); if (!VerifyECDSASignature(vchSig, pubkey, sighash)) return false; diff --git a/src/script/interpreter.h b/src/script/interpreter.h index e8c5b09045fd..2108e3992fc5 100644 --- a/src/script/interpreter.h +++ b/src/script/interpreter.h @@ -239,8 +239,27 @@ extern const HashWriter HASHER_TAPSIGHASH; //!< Hasher with tag "TapSighash" pre extern const HashWriter HASHER_TAPLEAF; //!< Hasher with tag "TapLeaf" pre-fed to it. extern const HashWriter HASHER_TAPBRANCH; //!< Hasher with tag "TapBranch" pre-fed to it. +/** Data structure to cache SHA256 midstates for the ECDSA sighash calculations + * (bare, P2SH, P2WPKH, P2WSH). */ +class SigHashCache +{ + /** For each sighash mode (ALL, SINGLE, NONE, ALL|ANYONE, SINGLE|ANYONE, NONE|ANYONE), + * optionally store a scriptCode which the hash is for, plus a midstate for the SHA256 + * computation just before adding the hash_type itself. */ + std::optional> m_cache_entries[6]; + + /** Given a hash_type, find which of the 6 cache entries is to be used. */ + int CacheIndex(int32_t hash_type) const noexcept; + +public: + /** Load into writer the SHA256 midstate if found in this cache. */ + [[nodiscard]] bool Load(int32_t hash_type, const CScript& script_code, HashWriter& writer) const noexcept; + /** Store into this cache object the provided SHA256 midstate. */ + void Store(int32_t hash_type, const CScript& script_code, const HashWriter& writer) noexcept; +}; + template -uint256 SignatureHash(const CScript& scriptCode, const T& txTo, unsigned int nIn, int32_t nHashType, const CAmount& amount, SigVersion sigversion, const PrecomputedTransactionData* cache = nullptr); +uint256 SignatureHash(const CScript& scriptCode, const T& txTo, unsigned int nIn, int32_t nHashType, const CAmount& amount, SigVersion sigversion, const PrecomputedTransactionData* cache = nullptr, SigHashCache* sighash_cache = nullptr); class BaseSignatureChecker { @@ -289,6 +308,7 @@ class GenericTransactionSignatureChecker : public BaseSignatureChecker unsigned int nIn; const CAmount amount; const PrecomputedTransactionData* txdata; + mutable SigHashCache m_sighash_cache; protected: virtual bool VerifyECDSASignature(const std::vector& vchSig, const CPubKey& vchPubKey, const uint256& sighash) const; From b221aa80a081579b8d3b460e3403f7ac0daa7139 Mon Sep 17 00:00:00 2001 From: Antoine Poinsot Date: Tue, 22 Jul 2025 18:40:23 -0400 Subject: [PATCH 0107/2775] qa: simple differential fuzzing for sighash with/without caching --- src/test/fuzz/script_interpreter.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/test/fuzz/script_interpreter.cpp b/src/test/fuzz/script_interpreter.cpp index 9e3ad02b2e53..2c2ce855d47d 100644 --- a/src/test/fuzz/script_interpreter.cpp +++ b/src/test/fuzz/script_interpreter.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -45,3 +46,27 @@ FUZZ_TARGET(script_interpreter) (void)CastToBool(ConsumeRandomLengthByteVector(fuzzed_data_provider)); } } + +/** Differential fuzzing for SignatureHash with and without cache. */ +FUZZ_TARGET(sighash_cache) +{ + FuzzedDataProvider provider(buffer.data(), buffer.size()); + + // Get inputs to the sighash function that won't change across types. + const auto scriptcode{ConsumeScript(provider)}; + const auto tx{ConsumeTransaction(provider, std::nullopt)}; + if (tx.vin.empty()) return; + const auto in_index{provider.ConsumeIntegralInRange(0, tx.vin.size() - 1)}; + const auto amount{ConsumeMoney(provider)}; + const auto sigversion{(SigVersion)provider.ConsumeIntegralInRange(0, 1)}; + + // Check the sighash function will give the same result for 100 fuzzer-generated hash types whether or not a cache is + // provided. The cache is conserved across types to exercise cache hits. + SigHashCache sighash_cache{}; + for (int i{0}; i < 100; ++i) { + const auto hash_type{((i & 2) == 0) ? provider.ConsumeIntegral() : provider.ConsumeIntegral()}; + const auto nocache_res{SignatureHash(scriptcode, tx, in_index, hash_type, amount, sigversion)}; + const auto cache_res{SignatureHash(scriptcode, tx, in_index, hash_type, amount, sigversion, nullptr, &sighash_cache)}; + Assert(nocache_res == cache_res); + } +} From 83950275eddacac56c58a7a3648ed435a5593328 Mon Sep 17 00:00:00 2001 From: Antoine Poinsot Date: Tue, 22 Jul 2025 11:23:16 -0400 Subject: [PATCH 0108/2775] qa: unit test sighash caching --- src/test/sighash_tests.cpp | 90 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/src/test/sighash_tests.cpp b/src/test/sighash_tests.cpp index d3320878ec0e..6e2ec800e746 100644 --- a/src/test/sighash_tests.cpp +++ b/src/test/sighash_tests.cpp @@ -207,4 +207,94 @@ BOOST_AUTO_TEST_CASE(sighash_from_data) BOOST_CHECK_MESSAGE(sh.GetHex() == sigHashHex, strTest); } } + +BOOST_AUTO_TEST_CASE(sighash_caching) +{ + // Get a script, transaction and parameters as inputs to the sighash function. + CScript scriptcode; + RandomScript(scriptcode); + CScript diff_scriptcode{scriptcode}; + diff_scriptcode << OP_1; + CMutableTransaction tx; + RandomTransaction(tx, /*fSingle=*/false); + const auto in_index{static_cast(m_rng.randrange(tx.vin.size()))}; + const auto amount{m_rng.rand()}; + + // Exercise the sighash function under both legacy and segwit v0. + for (const auto sigversion: {SigVersion::BASE, SigVersion::WITNESS_V0}) { + // For each, run it against all the 6 standard hash types and a few additional random ones. + std::vector hash_types{{SIGHASH_ALL, SIGHASH_SINGLE, SIGHASH_NONE, SIGHASH_ALL | SIGHASH_ANYONECANPAY, + SIGHASH_SINGLE | SIGHASH_ANYONECANPAY, SIGHASH_NONE | SIGHASH_ANYONECANPAY, + SIGHASH_ANYONECANPAY, 0, std::numeric_limits::max()}}; + for (int i{0}; i < 10; ++i) { + hash_types.push_back(i % 2 == 0 ? m_rng.rand() : m_rng.rand()); + } + + // Reuse the same cache across script types. This must not cause any issue as the cached value for one hash type must never + // be confused for another (instantiating the cache within the loop instead would prevent testing this). + SigHashCache cache; + for (const auto hash_type: hash_types) { + const bool expect_one{sigversion == SigVersion::BASE && ((hash_type & 0x1f) == SIGHASH_SINGLE) && in_index >= tx.vout.size()}; + + // The result of computing the sighash should be the same with or without cache. + const auto sighash_with_cache{SignatureHash(scriptcode, tx, in_index, hash_type, amount, sigversion, nullptr, &cache)}; + const auto sighash_no_cache{SignatureHash(scriptcode, tx, in_index, hash_type, amount, sigversion, nullptr, nullptr)}; + BOOST_CHECK_EQUAL(sighash_with_cache, sighash_no_cache); + + // Calling the cached version again should return the same value again. + BOOST_CHECK_EQUAL(sighash_with_cache, SignatureHash(scriptcode, tx, in_index, hash_type, amount, sigversion, nullptr, &cache)); + + // While here we might as well also check that the result for legacy is the same as for the old SignatureHash() function. + if (sigversion == SigVersion::BASE) { + BOOST_CHECK_EQUAL(sighash_with_cache, SignatureHashOld(scriptcode, CTransaction(tx), in_index, hash_type)); + } + + // Calling with a different scriptcode (for instance in case a CODESEP is encountered) will not return the cache value but + // overwrite it. The sighash will always be different except in case of legacy SIGHASH_SINGLE bug. + const auto sighash_with_cache2{SignatureHash(diff_scriptcode, tx, in_index, hash_type, amount, sigversion, nullptr, &cache)}; + const auto sighash_no_cache2{SignatureHash(diff_scriptcode, tx, in_index, hash_type, amount, sigversion, nullptr, nullptr)}; + BOOST_CHECK_EQUAL(sighash_with_cache2, sighash_no_cache2); + if (!expect_one) { + BOOST_CHECK_NE(sighash_with_cache, sighash_with_cache2); + } else { + BOOST_CHECK_EQUAL(sighash_with_cache, sighash_with_cache2); + BOOST_CHECK_EQUAL(sighash_with_cache, uint256::ONE); + } + + // Calling the cached version again should return the same value again. + BOOST_CHECK_EQUAL(sighash_with_cache2, SignatureHash(diff_scriptcode, tx, in_index, hash_type, amount, sigversion, nullptr, &cache)); + + // And if we store a different value for this scriptcode and hash type it will return that instead. + { + HashWriter h{}; + h << 42; + cache.Store(hash_type, scriptcode, h); + const auto stored_hash{h.GetHash()}; + BOOST_CHECK(cache.Load(hash_type, scriptcode, h)); + const auto loaded_hash{h.GetHash()}; + BOOST_CHECK_EQUAL(stored_hash, loaded_hash); + } + + // And using this mutated cache with the sighash function will return the new value (except in the legacy SIGHASH_SINGLE bug + // case in which it'll return 1). + if (!expect_one) { + BOOST_CHECK_NE(SignatureHash(scriptcode, tx, in_index, hash_type, amount, sigversion, nullptr, &cache), sighash_with_cache); + HashWriter h{}; + BOOST_CHECK(cache.Load(hash_type, scriptcode, h)); + h << hash_type; + const auto new_hash{h.GetHash()}; + BOOST_CHECK_EQUAL(SignatureHash(scriptcode, tx, in_index, hash_type, amount, sigversion, nullptr, &cache), new_hash); + } else { + BOOST_CHECK_EQUAL(SignatureHash(scriptcode, tx, in_index, hash_type, amount, sigversion, nullptr, &cache), uint256::ONE); + } + + // Wipe the cache and restore the correct cached value for this scriptcode and hash_type before starting the next iteration. + HashWriter dummy{}; + cache.Store(hash_type, diff_scriptcode, dummy); + (void)SignatureHash(scriptcode, tx, in_index, hash_type, amount, sigversion, nullptr, &cache); + BOOST_CHECK(cache.Load(hash_type, scriptcode, dummy) || expect_one); + } + } +} + BOOST_AUTO_TEST_SUITE_END() From fa6497ba71e9573d341c1c051af09b3ec2fc8d74 Mon Sep 17 00:00:00 2001 From: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz> Date: Wed, 6 Aug 2025 16:16:07 +0200 Subject: [PATCH 0109/2775] build: Set AUTHOR_WARNING on warnings --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 42552b9613eb..6017775fa78c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -708,6 +708,7 @@ if(configure_warnings) message(WARNING "${warning}") endforeach() message(" ******\n") + message(AUTHOR_WARNING "Warnings have been encountered!") endif() # We want all build properties to be encapsulated properly. From 96f8673b879ea15e8141b547901cb269f4668a37 Mon Sep 17 00:00:00 2001 From: kilavvy <140459108+kilavvy@users.noreply.github.com> Date: Thu, 3 Jul 2025 13:06:47 +0200 Subject: [PATCH 0110/2775] doc: fix typos --- doc/tracing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/tracing.md b/doc/tracing.md index b9323589225f..927fd34b5536 100644 --- a/doc/tracing.md +++ b/doc/tracing.md @@ -368,7 +368,7 @@ serialization of data structures is probably fine, a `sleep(10s)` not. TRACEPOINT_SEMAPHORE(example, gated_expensive_argument); … if (TRACEPOINT_ACTIVE(example, gated_expensive_argument)) { - expensive_argument = expensive_calulation(); + expensive_argument = expensive_calculation(); TRACEPOINT(example, gated_expensive_argument, expensive_argument); } ``` From d818340e7e2706105eef57989d24e7a2cf6c16c9 Mon Sep 17 00:00:00 2001 From: "fuder.eth" Date: Sat, 5 Jul 2025 22:05:02 +0200 Subject: [PATCH 0111/2775] test: Rename shuffled_indeces to shuffled_indices --- test/functional/rpc_packages.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/functional/rpc_packages.py b/test/functional/rpc_packages.py index d52fe33a8474..3c467394cfd7 100755 --- a/test/functional/rpc_packages.py +++ b/test/functional/rpc_packages.py @@ -44,10 +44,10 @@ def assert_testres_equal(self, package_hex, testres_expected): be used to test packages where the order does not matter. The ordering of transactions in package_hex and testres_expected must match. """ - shuffled_indeces = list(range(len(package_hex))) - random.shuffle(shuffled_indeces) - shuffled_package = [package_hex[i] for i in shuffled_indeces] - shuffled_testres = [testres_expected[i] for i in shuffled_indeces] + shuffled_indices = list(range(len(package_hex))) + random.shuffle(shuffled_indices) + shuffled_package = [package_hex[i] for i in shuffled_indices] + shuffled_testres = [testres_expected[i] for i in shuffled_indices] assert_equal(shuffled_testres, self.nodes[0].testmempoolaccept(shuffled_package)) def run_test(self): From 49f2f3c89fac9f83c859eef03b34404879af6ed5 Mon Sep 17 00:00:00 2001 From: fanquake Date: Tue, 29 Jul 2025 13:19:44 +0100 Subject: [PATCH 0112/2775] doc: fix typos --- src/test/fuzz/txorphan.cpp | 2 +- test/functional/p2p_compactblocks.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/fuzz/txorphan.cpp b/src/test/fuzz/txorphan.cpp index e6b3444749d1..b6a6d855bdf8 100644 --- a/src/test/fuzz/txorphan.cpp +++ b/src/test/fuzz/txorphan.cpp @@ -146,7 +146,7 @@ FUZZ_TARGET(txorphan, .init = initialize_orphanage) Assert(orphanage->TotalOrphanUsage() <= total_bytes_start); } } - // We are not guaranteed to have_tx after AddTx. There are a few possibile reasons: + // We are not guaranteed to have_tx after AddTx. There are a few possible reasons: // - tx itself exceeds the per-peer memory usage limit, so LimitOrphans had to remove it immediately // - tx itself exceeds the per-peer latency score limit, so LimitOrphans had to remove it immediately // - the orphanage needed trim and all other announcements from this peer are reconsiderable diff --git a/test/functional/p2p_compactblocks.py b/test/functional/p2p_compactblocks.py index 80041e2b59ac..56186bc1eb4b 100755 --- a/test/functional/p2p_compactblocks.py +++ b/test/functional/p2p_compactblocks.py @@ -744,7 +744,7 @@ def test_invalid_tx_in_compactblock(self, test_node): assert_not_equal(node.getbestblockhash(), block.hash_hex) test_node.sync_with_ping() - # The failure above was cached. Submitting the compact block again will returned a cached + # The failure above was cached. Submitting the compact block again will return a cached # consensus error (the code path is different) and still not get us disconnected (nor # advance the tip). test_node.send_and_ping(msg) From 7d60c0eb69bf12efc72870ce9f4dcbd913c9a633 Mon Sep 17 00:00:00 2001 From: hoffman Date: Thu, 7 Aug 2025 01:55:36 +0000 Subject: [PATCH 0113/2775] fix typo --- doc/policy/packages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/policy/packages.md b/doc/policy/packages.md index 4c45470e24ef..a4d4cb072dc8 100644 --- a/doc/policy/packages.md +++ b/doc/policy/packages.md @@ -115,7 +115,7 @@ rejected from the mempool when transaction volume is high and the mempool minimu Note: Package feerate cannot be used to meet the minimum relay feerate (`-minrelaytxfee`) requirement. For example, if the mempool minimum feerate is 5sat/vB and the minimum relay feerate is -set to 5satvB, a 1sat/vB parent transaction with a high-feerate child will not be accepted, even if +set to 5sat/vB, a 1sat/vB parent transaction with a high-feerate child will not be accepted, even if submitted as a package. *Rationale*: Avoid situations in which the mempool contains non-bumped transactions below min relay From e46af30441609a15ba8d2eb008aed0c27884c29f Mon Sep 17 00:00:00 2001 From: fanquake Date: Sat, 2 Aug 2025 12:13:23 +0100 Subject: [PATCH 0114/2775] ci: update mlc to v1 --- ci/lint/01_install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/lint/01_install.sh b/ci/lint/01_install.sh index a00d95da73a9..6713ca8d4c44 100755 --- a/ci/lint/01_install.sh +++ b/ci/lint/01_install.sh @@ -51,7 +51,7 @@ curl -sL "https://github.com/koalaman/shellcheck/releases/download/${SHELLCHECK_ tar --xz -xf - --directory /tmp/ mv "/tmp/shellcheck-${SHELLCHECK_VERSION}/shellcheck" /usr/bin/ -MLC_VERSION=v0.19.0 +MLC_VERSION=v1 MLC_BIN=mlc-x86_64-linux curl -sL "https://github.com/becheran/mlc/releases/download/${MLC_VERSION}/${MLC_BIN}" -o "/usr/bin/mlc" chmod +x /usr/bin/mlc From f28a94b40eea8669eafc1b4152823e1ab26fa618 Mon Sep 17 00:00:00 2001 From: fanquake Date: Tue, 5 Aug 2025 10:00:09 +0100 Subject: [PATCH 0115/2775] ci: update shellcheck to v0.11.0 --- ci/lint/01_install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/lint/01_install.sh b/ci/lint/01_install.sh index 6713ca8d4c44..75f891105c05 100755 --- a/ci/lint/01_install.sh +++ b/ci/lint/01_install.sh @@ -46,7 +46,7 @@ ${CI_RETRY_EXE} pip3 install \ ruff==0.5.5 \ vulture==2.6 -SHELLCHECK_VERSION=v0.8.0 +SHELLCHECK_VERSION=v0.11.0 curl -sL "https://github.com/koalaman/shellcheck/releases/download/${SHELLCHECK_VERSION}/shellcheck-${SHELLCHECK_VERSION}.linux.x86_64.tar.xz" | \ tar --xz -xf - --directory /tmp/ mv "/tmp/shellcheck-${SHELLCHECK_VERSION}/shellcheck" /usr/bin/ From 9a5d29711afcdc4609da4786673758e641958bb4 Mon Sep 17 00:00:00 2001 From: fanquake Date: Thu, 7 Aug 2025 09:27:25 +0100 Subject: [PATCH 0116/2775] Squashed 'src/crc32c/' changes from b60d2b7334..efb8ea04e4 efb8ea04e4 Merge bitcoin-core/crc32c-subtree#8: Sync to upstream 4a7a05c48d Merge remote-tracking branch 'google/main' into bitcoin-fork 21fc8ef304 Fix typo (#59) 89f69843a1 Fix misspelled "Proccess" in comment 02e65f4fd3 Bump deps (#56) b9d6e825a1 Fix Windows CI build. (#54) bbbb93ab5d Switch CI to GitHub Actions (#55) d46cd17d70 Add clangd cache directory to .gitignore. git-subtree-dir: src/crc32c git-subtree-split: efb8ea04e4a5b6a18dc4bc1908fd1cb2dcefb585 --- .appveyor.yml | 38 -------------- .github/workflows/build.yml | 102 ++++++++++++++++++++++++++++++++++++ .gitignore | 1 + .travis.yml | 76 --------------------------- CMakeLists.txt | 6 +++ README.md | 3 +- src/crc32c_sse42.cc | 2 +- 7 files changed, 111 insertions(+), 117 deletions(-) delete mode 100644 .appveyor.yml create mode 100644 .github/workflows/build.yml delete mode 100644 .travis.yml diff --git a/.appveyor.yml b/.appveyor.yml deleted file mode 100644 index b23e02e88a32..000000000000 --- a/.appveyor.yml +++ /dev/null @@ -1,38 +0,0 @@ -# Build matrix / environment variables are explained on: -# https://www.appveyor.com/docs/appveyor-yml/ -# This file can be validated on: https://ci.appveyor.com/tools/validate-yaml - -version: "{build}" - -environment: - matrix: - # AppVeyor currently has no custom job name feature. - # http://help.appveyor.com/discussions/questions/1623-can-i-provide-a-friendly-name-for-jobs - - JOB: Visual Studio 2019 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 - CMAKE_GENERATOR: Visual Studio 16 2019 - -platform: - - x86 - - x64 - -configuration: - - RelWithDebInfo - - Debug - -build_script: - - git submodule update --init --recursive - - mkdir build - - cd build - - if "%platform%"=="x86" (set CMAKE_GENERATOR_PLATFORM="Win32") - else (set CMAKE_GENERATOR_PLATFORM="%platform%") - - cmake --version - - cmake .. -G "%CMAKE_GENERATOR%" -A "%CMAKE_GENERATOR_PLATFORM%" - -DCMAKE_CONFIGURATION_TYPES="%CONFIGURATION%" -DCRC32C_USE_GLOG=0 - - cmake --build . --config "%CONFIGURATION%" - - cd .. - -test_script: - - build\%CONFIGURATION%\crc32c_tests.exe - - build\%CONFIGURATION%\crc32c_capi_tests.exe - - build\%CONFIGURATION%\crc32c_bench.exe diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000000..8b27b2f6967a --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,102 @@ +# Copyright 2021 The CRC32C Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. See the AUTHORS file for names of contributors. + +name: ci +on: [push, pull_request] + +permissions: + contents: read + +jobs: + build-and-test: + name: >- + CI + ${{ matrix.os }} + ${{ matrix.compiler }} + ${{ matrix.optimized && 'release' || 'debug' }} + ${{ matrix.shared_lib && 'shared' || 'static' }} + ${{ matrix.use_glog && 'glog' || 'no-glog' }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + compiler: [clang, gcc, msvc] + os: [ubuntu-latest, macos-latest, windows-latest] + optimized: [true, false] + shared_lib: [true, false] + use_glog: [true, false] + exclude: + # Our glog config doesn't work with shared libraries. + - use_glog: true + shared_lib: true + # MSVC only works on Windows. + - os: ubuntu-latest + compiler: msvc + - os: macos-latest + compiler: msvc + # Not testing with GCC on macOS. + - os: macos-latest + compiler: gcc + # Only testing with MSVC on Windows. + - os: windows-latest + compiler: clang + - os: windows-latest + compiler: gcc + # Not testing fringe configurations (glog, shared libraries) on Windows. + - os: windows-latest + use_glog: true + - os: windows-latest + shared_lib: true + include: + - compiler: clang + CC: clang + CXX: clang++ + - compiler: gcc + CC: gcc + CXX: g++ + - compiler: msvc + CC: + CXX: + + env: + CMAKE_BUILD_DIR: ${{ github.workspace }}/build + CMAKE_BUILD_TYPE: ${{ matrix.optimized && 'RelWithDebInfo' || 'Debug' }} + CC: ${{ matrix.CC }} + CXX: ${{ matrix.CXX }} + BINARY_SUFFIX: ${{ startsWith(matrix.os, 'windows') && '.exe' || '' }} + BINARY_PATH: >- + ${{ format( + startsWith(matrix.os, 'windows') && '{0}\build\{1}\' || '{0}/build/', + github.workspace, + matrix.optimized && 'RelWithDebInfo' || 'Debug') }} + + steps: + - uses: actions/checkout@v2 + with: + submodules: true + + - name: Generate build config + run: >- + cmake -S "${{ github.workspace }}" -B "${{ env.CMAKE_BUILD_DIR }}" + -DCMAKE_BUILD_TYPE=${{ env.CMAKE_BUILD_TYPE }} + -DCMAKE_INSTALL_PREFIX=${{ runner.temp }}/install_test/ + -DBUILD_SHARED_LIBS=${{ matrix.shared_lib && '1' || '0' }} + -DCRC32C_USE_GLOG=${{ matrix.use_glog && '1' || '0' }} + + - name: Build + run: >- + cmake --build "${{ env.CMAKE_BUILD_DIR }}" + --config "${{ env.CMAKE_BUILD_TYPE }}" + + - name: Run C++ API Tests + run: ${{ env.BINARY_PATH }}crc32c_tests${{ env.BINARY_SUFFIX }} + + - name: Run C API Tests + run: ${{ env.BINARY_PATH }}crc32c_capi_tests${{ env.BINARY_SUFFIX }} + + - name: Run Benchmarks + run: ${{ env.BINARY_PATH }}crc32c_bench${{ env.BINARY_SUFFIX }} + + - name: Test CMake installation + run: cmake --build "${{ env.CMAKE_BUILD_DIR }}" --target install diff --git a/.gitignore b/.gitignore index 61769727e318..c1cb671e1a5b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ # Editors. *.sw* .DS_Store +/.cache /.vscode # Build directory. diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 183a5fba45ff..000000000000 --- a/.travis.yml +++ /dev/null @@ -1,76 +0,0 @@ -# Build matrix / environment variables are explained on: -# http://about.travis-ci.org/docs/user/build-configuration/ -# This file can be validated on: http://lint.travis-ci.org/ - -language: cpp -dist: bionic -osx_image: xcode12.5 - -compiler: -- gcc -- clang -os: -- linux -- osx - -env: -- GLOG=1 SHARED_LIB=0 BUILD_TYPE=Debug -- GLOG=1 SHARED_LIB=0 BUILD_TYPE=RelWithDebInfo -- GLOG=0 SHARED_LIB=0 BUILD_TYPE=Debug -- GLOG=0 SHARED_LIB=0 BUILD_TYPE=RelWithDebInfo -- GLOG=0 SHARED_LIB=1 BUILD_TYPE=Debug -- GLOG=0 SHARED_LIB=1 BUILD_TYPE=RelWithDebInfo - -addons: - apt: - sources: - - sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-12 main' - key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key' - - sourceline: 'ppa:ubuntu-toolchain-r/test' - packages: - - clang-12 - - cmake - - gcc-11 - - g++-11 - - ninja-build - homebrew: - packages: - - cmake - - gcc@11 - - llvm@12 - - ninja - update: true - -install: -# The following Homebrew packages aren't linked by default, and need to be -# prepended to the path explicitly. -- if [ "$TRAVIS_OS_NAME" = "osx" ]; then - export PATH="$(brew --prefix llvm)/bin:$PATH"; - fi -# /usr/bin/gcc points to an older compiler on both Linux and macOS. -- if [ "$CXX" = "g++" ]; then export CXX="g++-11" CC="gcc-11"; fi -# /usr/bin/clang points to an older compiler on both Linux and macOS. -# -# Homebrew's llvm package doesn't ship a versioned clang++ binary, so the values -# below don't work on macOS. Fortunately, the path change above makes the -# default values (clang and clang++) resolve to the correct compiler on macOS. -- if [ "$TRAVIS_OS_NAME" = "linux" ]; then - if [ "$CXX" = "clang++" ]; then export CXX="clang++-12" CC="clang-12"; fi; - fi -- echo ${CC} -- echo ${CXX} -- ${CXX} --version -- cmake --version - -before_script: -- mkdir -p build && cd build -- cmake .. -G Ninja -DCRC32C_USE_GLOG=$GLOG -DCMAKE_BUILD_TYPE=$BUILD_TYPE - -DBUILD_SHARED_LIBS=$SHARED_LIB -DCMAKE_INSTALL_PREFIX=$HOME/.local -- cmake --build . -- cd .. - -script: -- build/crc32c_tests -- build/crc32c_capi_tests -- build/crc32c_bench -- cd build && cmake --build . --target install diff --git a/CMakeLists.txt b/CMakeLists.txt index 2f52db104cf4..857a39b202d6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -368,6 +368,12 @@ if(CRC32C_BUILD_TESTS) # Warnings as errors in Visual Studio for this project's targets. if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") set_property(TARGET crc32c_capi_tests APPEND PROPERTY COMPILE_OPTIONS "/WX") + + # The Windows SDK version currently on CI produces warnings when some + # headers are #included using C99 compatibility mode or above. This + # workaround can be removed once the Windows SDK on our CI is upgraded. + set_property(TARGET crc32c_capi_tests + APPEND PROPERTY COMPILE_OPTIONS "/wd5105") endif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") add_test(NAME crc32c_capi_tests COMMAND crc32c_capi_tests) diff --git a/README.md b/README.md index 58ba38e61199..bb64baed2e0f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ # CRC32C -[![Build Status](https://travis-ci.org/google/crc32c.svg?branch=master)](https://travis-ci.org/google/crc32c) -[![Build Status](https://ci.appveyor.com/api/projects/status/moiq7331pett4xuj/branch/master?svg=true)](https://ci.appveyor.com/project/pwnall/crc32c) +[![Build Status](https://github.com/google/crc32c/actions/workflows/build.yml/badge.svg)](https://github.com/google/crc32c/actions/workflows/build.yml) New file format authors should consider [HighwayHash](https://github.com/google/highwayhash). The initial version of diff --git a/src/crc32c_sse42.cc b/src/crc32c_sse42.cc index 139520428e08..e209d03cc8f7 100644 --- a/src/crc32c_sse42.cc +++ b/src/crc32c_sse42.cc @@ -176,7 +176,7 @@ uint32_t ExtendSse42(uint32_t crc, const uint8_t* data, size_t size) { } } - // Proccess the data in predetermined block sizes with tables for quickly + // Process the data in predetermined block sizes with tables for quickly // combining the checksum. Experimentally it's better to use larger block // sizes where possible so use a hierarchy of decreasing block sizes. uint64_t l64 = l; From 8d4aaaec49c056e5f20dbc6756369ddcecbc325f Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Thu, 7 Aug 2025 11:48:29 +0100 Subject: [PATCH 0117/2775] Update Transifex slug for 30.x Update the Transifex slug to match the new resource created for the upcoming 30.x branch. --- .tx/config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tx/config b/.tx/config index b5a9abaae383..a7550d0884dc 100644 --- a/.tx/config +++ b/.tx/config @@ -1,7 +1,7 @@ [main] host = https://www.transifex.com -[o:bitcoin:p:bitcoin:r:qt-translation-029x] +[o:bitcoin:p:bitcoin:r:qt-translation-030x] file_filter = src/qt/locale/bitcoin_.xlf source_file = src/qt/locale/bitcoin_en.xlf source_lang = en From a0eaa4492548800ba1b2cdd8232195ab5d5c49c7 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Thu, 7 Aug 2025 12:25:12 +0100 Subject: [PATCH 0118/2775] Fix typos --- src/wallet/feebumper.cpp | 2 +- src/wallet/spend.cpp | 2 +- src/wallet/wallet.cpp | 4 ++-- src/wallet/walletdb.cpp | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/wallet/feebumper.cpp b/src/wallet/feebumper.cpp index 82ea8ee1c94b..0b56a2325157 100644 --- a/src/wallet/feebumper.cpp +++ b/src/wallet/feebumper.cpp @@ -84,7 +84,7 @@ static feebumper::Result CheckFeeRate(const CWallet& wallet, const CMutableTrans std::optional combined_bump_fee = wallet.chain().calculateCombinedBumpFee(reused_inputs, newFeerate); if (!combined_bump_fee.has_value()) { - errors.push_back(Untranslated(strprintf("Failed to calculate bump fees, because unconfirmed UTXOs depend on enormous cluster of unconfirmed transactions."))); + errors.push_back(Untranslated(strprintf("Failed to calculate bump fees, because unconfirmed UTXOs depend on an enormous cluster of unconfirmed transactions."))); } CAmount new_total_fee = newFeerate.GetFee(maxTxSize) + combined_bump_fee.value(); diff --git a/src/wallet/spend.cpp b/src/wallet/spend.cpp index 250377afcfa7..53a224b46b73 100644 --- a/src/wallet/spend.cpp +++ b/src/wallet/spend.cpp @@ -762,7 +762,7 @@ util::Result ChooseSelectionResult(interfaces::Chain& chain, co } std::optional combined_bump_fee = chain.calculateCombinedBumpFee(outpoints, coin_selection_params.m_effective_feerate); if (!combined_bump_fee.has_value()) { - return util::Error{_("Failed to calculate bump fees, because unconfirmed UTXOs depend on enormous cluster of unconfirmed transactions.")}; + return util::Error{_("Failed to calculate bump fees, because unconfirmed UTXOs depend on an enormous cluster of unconfirmed transactions.")}; } CAmount bump_fee_overestimate = summed_bump_fees - combined_bump_fee.value(); if (bump_fee_overestimate) { diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 91a494c379fd..f86a28c52e43 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -2847,7 +2847,7 @@ std::shared_ptr CWallet::Create(WalletContext& context, const std::stri rescan_required = true; } else if (nLoadWalletRet == DBErrors::UNKNOWN_DESCRIPTOR) { error = strprintf(_("Unrecognized descriptor found. Loading wallet %s\n\n" - "The wallet might had been created on a newer version.\n" + "The wallet might have been created on a newer version.\n" "Please try running the latest software version.\n"), walletFile); return nullptr; } else if (nLoadWalletRet == DBErrors::UNEXPECTED_LEGACY_ENTRY) { @@ -3149,7 +3149,7 @@ bool CWallet::AttachChain(const std::shared_ptr& walletInstance, interf // but fail the rescan with a generic error. error = chain.havePruned() ? - _("Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node)") : + _("Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of a pruned node)") : strprintf(_( "Error loading wallet. Wallet requires blocks to be downloaded, " "and software does not currently support loading wallets while " diff --git a/src/wallet/walletdb.cpp b/src/wallet/walletdb.cpp index 2c0073f3568c..bc5bb0fa0bb5 100644 --- a/src/wallet/walletdb.cpp +++ b/src/wallet/walletdb.cpp @@ -791,7 +791,7 @@ static DBErrors LoadDescriptorWalletRecords(CWallet* pwallet, DatabaseBatch& bat value >> desc; } catch (const std::ios_base::failure& e) { strErr = strprintf("Error: Unrecognized descriptor found in wallet %s. ", pwallet->GetName()); - strErr += (last_client > CLIENT_VERSION) ? "The wallet might had been created on a newer version. " : + strErr += (last_client > CLIENT_VERSION) ? "The wallet might have been created on a newer version. " : "The database might be corrupted or the software version is not compatible with one of your wallet descriptors. "; strErr += "Please try running the latest software version"; // Also include error details From 656e16aa5e65731a61b77444ac3ab874f7635c50 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Thu, 7 Aug 2025 12:55:54 +0100 Subject: [PATCH 0119/2775] qt: Update the `src/qt/locale/bitcoin_en.xlf` translation source file Steps to reproduce the diff on Ubuntu 25.04: ``` cmake --preset dev-mode cmake --build build_dev_mode --target translate ``` --- src/qt/bitcoinstrings.cpp | 94 +- src/qt/locale/bitcoin_en.ts | 495 ++--- src/qt/locale/bitcoin_en.xlf | 3685 +++++++++++++++++----------------- 3 files changed, 2061 insertions(+), 2213 deletions(-) diff --git a/src/qt/bitcoinstrings.cpp b/src/qt/bitcoinstrings.cpp index 1b54ca08e838..ca2f75fc9b50 100644 --- a/src/qt/bitcoinstrings.cpp +++ b/src/qt/bitcoinstrings.cpp @@ -11,9 +11,6 @@ static const char UNUSED *bitcoin_strings[] = { QT_TRANSLATE_NOOP("bitcoin-core", "The %s developers"), QT_TRANSLATE_NOOP("bitcoin-core", "" -"%s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring " -"a backup."), -QT_TRANSLATE_NOOP("bitcoin-core", "" "%s failed to validate the -assumeutxo snapshot state. This indicates a " "hardware problem, or a bug in the software, or a bad software modification " "that allowed an invalid snapshot to be loaded. As a result of this, the node " @@ -30,16 +27,9 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for " "details and a full list."), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Cannot downgrade wallet from version %i to version %i. Wallet version " -"unchanged."), -QT_TRANSLATE_NOOP("bitcoin-core", "" "Cannot provide specific connections and have addrman find outgoing " "connections at the same time."), QT_TRANSLATE_NOOP("bitcoin-core", "" -"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."), -QT_TRANSLATE_NOOP("bitcoin-core", "" "Disk space for %s may not accommodate the block files. Approximately %u GB " "of data will be stored in this directory."), QT_TRANSLATE_NOOP("bitcoin-core", "" @@ -49,6 +39,9 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "Error loading %s: External signer wallet being loaded without external " "signer support compiled"), QT_TRANSLATE_NOOP("bitcoin-core", "" +"Error loading %s: Wallet is a legacy wallet. Please migrate to a descriptor " +"wallet using the migration tool (migratewallet RPC)."), +QT_TRANSLATE_NOOP("bitcoin-core", "" "Error loading wallet. Wallet requires blocks to be downloaded, and software " "does not currently support loading wallets while blocks are being downloaded " "out of order when using assumeutxo snapshots. Wallet should be able to load " @@ -69,23 +62,23 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" QT_TRANSLATE_NOOP("bitcoin-core", "" "Error: Dumpfile identifier record is incorrect. Got \"%s\", expected \"%s\"."), QT_TRANSLATE_NOOP("bitcoin-core", "" +"Error: Dumpfile specifies an unsupported database format (%s). Only sqlite " +"database dumps are supported"), +QT_TRANSLATE_NOOP("bitcoin-core", "" "Error: Dumpfile version is not supported. This version of bitcoin-wallet " "only supports version 1 dumpfiles. Got dumpfile with version %s"), QT_TRANSLATE_NOOP("bitcoin-core", "" "Error: Duplicate descriptors created during migration. Your wallet may be " "corrupted."), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Error: Legacy wallets only support the \"legacy\", \"p2sh-segwit\", and " -"\"bech32\" address types"), -QT_TRANSLATE_NOOP("bitcoin-core", "" "Error: Transaction %s in wallet cannot be identified to belong to migrated " "wallets"), QT_TRANSLATE_NOOP("bitcoin-core", "" "Error: Unable to produce descriptors for this legacy wallet. Make sure to " "provide the wallet's passphrase if it is encrypted."), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Failed to calculate bump fees, because unconfirmed UTXOs depend on enormous " -"cluster of unconfirmed transactions."), +"Failed to calculate bump fees, because unconfirmed UTXOs depend on an " +"enormous cluster of unconfirmed transactions."), QT_TRANSLATE_NOOP("bitcoin-core", "" "Failed to remove snapshot chainstate dir (%s). Manually remove it before " "restarting.\n"), @@ -129,21 +122,24 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" QT_TRANSLATE_NOOP("bitcoin-core", "" "No dump file provided. To use dump, -dumpfile= must be provided."), QT_TRANSLATE_NOOP("bitcoin-core", "" -"No wallet file format provided. To use createfromdump, -format= must " -"be provided."), +"Option '-checkpoints' is set but checkpoints were removed. This option has " +"no effect."), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider " -"using '-natpmp' instead."), +"Option '-maxorphantx' is set but no longer has any effect (see release " +"notes). Please remove it from your configuration."), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Outbound connections restricted to CJDNS (-onlynet=cjdns) but -" -"cjdnsreachable is not provided"), +"Options '-datacarrier' or '-datacarriersize' are set but are marked as " +"deprecated. They will be removed in a future version."), +QT_TRANSLATE_NOOP("bitcoin-core", "" +"Outbound connections restricted to CJDNS (-onlynet=cjdns) but " +"-cjdnsreachable is not provided"), QT_TRANSLATE_NOOP("bitcoin-core", "" "Outbound connections restricted to Tor (-onlynet=onion) but the proxy for " "reaching the Tor network is explicitly forbidden: -onion=0"), QT_TRANSLATE_NOOP("bitcoin-core", "" "Outbound connections restricted to Tor (-onlynet=onion) but the proxy for " -"reaching the Tor network is not provided: none of -proxy, -onion or -" -"listenonion is given"), +"reaching the Tor network is not provided: none of -proxy, -onion or " +"-listenonion is given"), QT_TRANSLATE_NOOP("bitcoin-core", "" "Outbound connections restricted to i2p (-onlynet=i2p) but -i2psam is not " "provided"), @@ -156,8 +152,8 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "Prune mode is incompatible with -reindex-chainstate. Use full -reindex " "instead."), 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)"), +"Prune: last wallet synchronisation goes beyond pruned data. You need to " +"-reindex (download the whole blockchain again in case of a pruned node)"), QT_TRANSLATE_NOOP("bitcoin-core", "" "Rename of '%s' -> '%s' failed. Cannot clean up the background chainstate " "leveldb directory."), @@ -195,10 +191,6 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" QT_TRANSLATE_NOOP("bitcoin-core", "" "The transaction amount is too small to send after the fee has been deducted"), QT_TRANSLATE_NOOP("bitcoin-core", "" -"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"), -QT_TRANSLATE_NOOP("bitcoin-core", "" "This is a pre-release test build - use at your own risk - do not use for " "mining or merchant applications"), QT_TRANSLATE_NOOP("bitcoin-core", "" @@ -213,14 +205,14 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "Total length of network version string (%i) exceeds maximum length (%i). " "Reduce the number or size of uacomments."), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Transaction requires one destination of non-0 value, a non-0 feerate, or a " -"pre-selected input"), +"Transaction requires one destination of non-zero value, a non-zero feerate, " +"or a pre-selected input"), QT_TRANSLATE_NOOP("bitcoin-core", "" "UTXO snapshot failed to validate. Restart to resume normal initial block " "download, or try loading a different snapshot."), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Unable to replay blocks. You will need to rebuild the database using -" -"reindex-chainstate."), +"Unable to replay blocks. You will need to rebuild the database using " +"-reindex-chainstate."), QT_TRANSLATE_NOOP("bitcoin-core", "" "Unconfirmed UTXOs are available, but spending them creates a chain of " "transactions that will be rejected by the mempool"), @@ -229,12 +221,9 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "\n" "The wallet might have been tampered with or created with malicious intent.\n"), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Unknown wallet file format \"%s\" provided. Please provide one of \"bdb\" or " -"\"sqlite\"."), -QT_TRANSLATE_NOOP("bitcoin-core", "" "Unrecognized descriptor found. Loading wallet %s\n" "\n" -"The wallet might had been created on a newer version.\n" +"The wallet might have been created on a newer version.\n" "Please try running the latest software version.\n"), QT_TRANSLATE_NOOP("bitcoin-core", "" "Unsupported category-specific logging level %1$s=%2$s. Expected " @@ -243,18 +232,6 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "Unsupported chainstate database format found. Please restart with -reindex-" "chainstate. This will rebuild the chainstate database."), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Wallet created successfully. The legacy wallet type is being deprecated and " -"support for creating and opening legacy wallets will be removed in the " -"future."), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Wallet loaded successfully. The legacy wallet type is being deprecated and " -"support for creating and opening legacy wallets will be removed in the " -"future. Legacy wallets can be migrated to a descriptor wallet with " -"migratewallet."), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Warning: Dumpfile wallet format \"%s\" does not match command line specified " -"format \"%s\"."), -QT_TRANSLATE_NOOP("bitcoin-core", "" "Warning: Private keys detected in wallet {%s} with disabled private keys"), QT_TRANSLATE_NOOP("bitcoin-core", "" "Warning: We do not appear to fully agree with our peers! You may need to " @@ -283,9 +260,11 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "whitebind may only be used for incoming connections (\"out\" was passed)"), QT_TRANSLATE_NOOP("bitcoin-core", "%s is set very high!"), QT_TRANSLATE_NOOP("bitcoin-core", "-maxmempool must be at least %d MB"), +QT_TRANSLATE_NOOP("bitcoin-core", "-paytxfee is deprecated and will be fully removed in v31.0."), QT_TRANSLATE_NOOP("bitcoin-core", "A fatal internal error occurred, see debug.log for details: "), QT_TRANSLATE_NOOP("bitcoin-core", "Assumeutxo data not found for the given blockhash '%s'."), QT_TRANSLATE_NOOP("bitcoin-core", "Block verification was interrupted"), +QT_TRANSLATE_NOOP("bitcoin-core", "Cannot add WalletDescriptor to a non-descriptor wallet"), QT_TRANSLATE_NOOP("bitcoin-core", "Cannot obtain a lock on directory %s. %s is probably already running."), QT_TRANSLATE_NOOP("bitcoin-core", "Cannot resolve -%s address: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Cannot set -forcednsseed to true when setting -dnsseed to false."), @@ -296,7 +275,9 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Copyright (C) %i-%i"), QT_TRANSLATE_NOOP("bitcoin-core", "Corrupt block found indicating potential hardware failure."), QT_TRANSLATE_NOOP("bitcoin-core", "Corrupted block database detected"), QT_TRANSLATE_NOOP("bitcoin-core", "Could not find asmap file %s"), +QT_TRANSLATE_NOOP("bitcoin-core", "Could not generate scriptPubKeys (cache is empty)"), QT_TRANSLATE_NOOP("bitcoin-core", "Could not parse asmap file %s"), +QT_TRANSLATE_NOOP("bitcoin-core", "Could not top up scriptPubKeys"), QT_TRANSLATE_NOOP("bitcoin-core", "Disk space is too low!"), QT_TRANSLATE_NOOP("bitcoin-core", "Do you want to rebuild the databases now?"), QT_TRANSLATE_NOOP("bitcoin-core", "Done loading"), @@ -304,7 +285,6 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Dump file %s does not exist."), QT_TRANSLATE_NOOP("bitcoin-core", "Elliptic curve cryptography sanity check failure. %s is shutting down."), QT_TRANSLATE_NOOP("bitcoin-core", "Error creating %s"), QT_TRANSLATE_NOOP("bitcoin-core", "Error initializing block database"), -QT_TRANSLATE_NOOP("bitcoin-core", "Error initializing wallet database environment %s!"), QT_TRANSLATE_NOOP("bitcoin-core", "Error loading %s"), QT_TRANSLATE_NOOP("bitcoin-core", "Error loading %s: Private keys can only be disabled during creation"), QT_TRANSLATE_NOOP("bitcoin-core", "Error loading %s: Wallet corrupted"), @@ -328,6 +308,8 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Error: Got value that was not hex: %s"), QT_TRANSLATE_NOOP("bitcoin-core", "Error: Keypool ran out, please call keypoolrefill first"), QT_TRANSLATE_NOOP("bitcoin-core", "Error: Missing checksum"), QT_TRANSLATE_NOOP("bitcoin-core", "Error: No %s addresses available."), +QT_TRANSLATE_NOOP("bitcoin-core", "Error: Not all address book records were migrated"), +QT_TRANSLATE_NOOP("bitcoin-core", "Error: Not all transaction records were migrated"), QT_TRANSLATE_NOOP("bitcoin-core", "Error: This wallet already uses SQLite"), QT_TRANSLATE_NOOP("bitcoin-core", "Error: This wallet is already a descriptor wallet"), QT_TRANSLATE_NOOP("bitcoin-core", "Error: Unable to begin reading all records in the database"), @@ -343,12 +325,15 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Error: Unable to write watchonly wallet best QT_TRANSLATE_NOOP("bitcoin-core", "Error: Wallet does not exist"), QT_TRANSLATE_NOOP("bitcoin-core", "Error: cannot remove legacy wallet records"), QT_TRANSLATE_NOOP("bitcoin-core", "Error: database transaction cannot be executed for wallet %s"), +QT_TRANSLATE_NOOP("bitcoin-core", "Failed to acquire rescan reserver during wallet initialization"), +QT_TRANSLATE_NOOP("bitcoin-core", "Failed to close block undo file."), +QT_TRANSLATE_NOOP("bitcoin-core", "Failed to close file when writing block."), QT_TRANSLATE_NOOP("bitcoin-core", "Failed to connect best block (%s)."), QT_TRANSLATE_NOOP("bitcoin-core", "Failed to disconnect block."), QT_TRANSLATE_NOOP("bitcoin-core", "Failed to listen on any port. Use -listen=0 if you want this."), QT_TRANSLATE_NOOP("bitcoin-core", "Failed to read block."), QT_TRANSLATE_NOOP("bitcoin-core", "Failed to rescan the wallet during initialization"), -QT_TRANSLATE_NOOP("bitcoin-core", "Failed to start indexes, shutting down.."), +QT_TRANSLATE_NOOP("bitcoin-core", "Failed to start indexes, shutting down…"), QT_TRANSLATE_NOOP("bitcoin-core", "Failed to verify database"), QT_TRANSLATE_NOOP("bitcoin-core", "Failed to write block."), QT_TRANSLATE_NOOP("bitcoin-core", "Failed to write to block index database."), @@ -357,7 +342,6 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Failed to write undo data."), QT_TRANSLATE_NOOP("bitcoin-core", "Failure removing transaction: %s"), QT_TRANSLATE_NOOP("bitcoin-core", "Fee rate (%s) is lower than the minimum fee rate setting (%s)"), QT_TRANSLATE_NOOP("bitcoin-core", "Ignoring duplicate -wallet %s."), -QT_TRANSLATE_NOOP("bitcoin-core", "Importing…"), QT_TRANSLATE_NOOP("bitcoin-core", "Incorrect or no genesis block found. Wrong datadir for network?"), QT_TRANSLATE_NOOP("bitcoin-core", "Initialization sanity check failed. %s is shutting down."), QT_TRANSLATE_NOOP("bitcoin-core", "Input not found or already spent"), @@ -365,6 +349,7 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Insufficient dbcache for block verification") QT_TRANSLATE_NOOP("bitcoin-core", "Insufficient funds"), QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -i2psam address or hostname: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -onion address or hostname: '%s'"), +QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -proxy address or hostname, ends with '=': '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -proxy address or hostname: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Invalid P2P permission: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for %s=: '%s' (must be at least %s)"), @@ -372,7 +357,6 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for %s=: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -%s=: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Invalid netmask specified in -whitelist: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Invalid port specified in %s: '%s'"), -QT_TRANSLATE_NOOP("bitcoin-core", "Invalid pre-selected input %s"), QT_TRANSLATE_NOOP("bitcoin-core", "Listening for incoming connections failed (listen returned error %s)"), QT_TRANSLATE_NOOP("bitcoin-core", "Loading P2P addresses…"), QT_TRANSLATE_NOOP("bitcoin-core", "Loading banlist…"), @@ -433,18 +417,16 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Unable to bind to %s on this computer (bind r QT_TRANSLATE_NOOP("bitcoin-core", "Unable to bind to %s on this computer. %s is probably already running."), QT_TRANSLATE_NOOP("bitcoin-core", "Unable to create the PID file '%s': %s"), QT_TRANSLATE_NOOP("bitcoin-core", "Unable to find UTXO for external input"), -QT_TRANSLATE_NOOP("bitcoin-core", "Unable to generate initial keys"), -QT_TRANSLATE_NOOP("bitcoin-core", "Unable to generate keys"), QT_TRANSLATE_NOOP("bitcoin-core", "Unable to open %s for writing"), QT_TRANSLATE_NOOP("bitcoin-core", "Unable to parse -maxuploadtarget: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Unable to start HTTP server. See debug log for details."), -QT_TRANSLATE_NOOP("bitcoin-core", "Unable to unload the wallet before migrating"), QT_TRANSLATE_NOOP("bitcoin-core", "Unknown -blockfilterindex value %s."), QT_TRANSLATE_NOOP("bitcoin-core", "Unknown address type '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Unknown change type '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Unknown network specified in -onlynet: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Unknown new rules activated (versionbit %i)"), QT_TRANSLATE_NOOP("bitcoin-core", "Unrecognised option \"%s\" provided in -test= - - Copy the currently selected address to the system clipboard - Copy the currently selected address to the system clipboard - - - + &Copy @@ -44,7 +39,12 @@ - + + Copy the currently selected address to the clipboard + + + + Export the data in the current tab to a file Export the data in the current tab to a file @@ -55,7 +55,7 @@ - + &Delete &Delete @@ -340,7 +340,7 @@ Signing is only possible with addresses of the type 'legacy'. BitcoinApplication - + Settings file %1 might be corrupt or invalid. @@ -428,7 +428,7 @@ Signing is only possible with addresses of the type 'legacy'. - + &Minimize @@ -444,12 +444,12 @@ Signing is only possible with addresses of the type 'legacy'. - + Proxy is <b>enabled</b>: %1 - + Send coins to a Bitcoin address Send coins to a Bitcoin address @@ -544,7 +544,7 @@ Signing is only possible with addresses of the type 'legacy'. - + &File &File @@ -589,7 +589,7 @@ Signing is only possible with addresses of the type 'legacy'. - + Request payments (generates QR codes and bitcoin: URIs) @@ -609,7 +609,7 @@ Signing is only possible with addresses of the type 'legacy'. - + Processed %n block(s) of transaction history. Processed %n block of transaction history. @@ -637,7 +637,7 @@ Signing is only possible with addresses of the type 'legacy'. Transactions after this will not yet be visible. - + Error Error @@ -652,12 +652,12 @@ Signing is only possible with addresses of the type 'legacy'. Information - + Up to date Up to date - + Ctrl+Q @@ -759,7 +759,7 @@ Signing is only possible with addresses of the type 'legacy'. - + No wallets available @@ -862,17 +862,7 @@ Signing is only possible with addresses of the type 'legacy'. - - Error creating wallet - - - - - Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets) - - - - + Error: %1 @@ -1317,7 +1307,7 @@ Signing is only possible with addresses of the type 'legacy'. FreespaceChecker - + A new data directory will be created. A new data directory will be created. @@ -1418,7 +1408,7 @@ Signing is only possible with addresses of the type 'legacy'. Use a custom data directory: - + Bitcoin Bitcoin @@ -2062,7 +2052,7 @@ The migration process will create a backup of the wallet before migrating. This default - + none @@ -2137,7 +2127,7 @@ The migration process will create a backup of the wallet before migrating. This OptionsModel - + Could not read setting "%1", %2. @@ -2151,17 +2141,12 @@ The migration process will create a backup of the wallet before migrating. This - + 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. 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. - - Watch-only: - - - - + Available: @@ -2171,17 +2156,17 @@ The migration process will create a backup of the wallet before migrating. This Your current spendable balance - + Pending: - + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance - + Immature: Immature: @@ -2191,12 +2176,12 @@ The migration process will create a backup of the wallet before migrating. This Mined balance that has not yet matured - + Balances - + Total: Total: @@ -2206,37 +2191,12 @@ The migration process will create a backup of the wallet before migrating. This Your current total balance - - Your current balance in watch-only addresses - - - - - Spendable: - - - - + Recent transactions - - Unconfirmed transactions to watch-only addresses - - - - - Mined balance in watch-only addresses that has not yet matured - - - - - Current total balance in watch-only addresses - - - - + Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings->Mask values. @@ -2729,7 +2689,7 @@ If you are receiving this error you should request the merchant provide a BIP21 - + %1 kB @@ -2746,7 +2706,7 @@ If you are receiving this error you should request the merchant provide a BIP21 - + default wallet @@ -2763,7 +2723,7 @@ If you are receiving this error you should request the merchant provide a BIP21 - + Error: %1 @@ -2778,7 +2738,7 @@ If you are receiving this error you should request the merchant provide a BIP21 - + Embedded "%1" @@ -2821,7 +2781,7 @@ If you are receiving this error you should request the merchant provide a BIP21 - + Save QR Code @@ -2874,7 +2834,7 @@ If you are receiving this error you should request the merchant provide a BIP21 - + N/A N/A @@ -3311,12 +3271,12 @@ If you are receiving this error you should request the merchant provide a BIP21 - + Never - + Inbound: initiated by peer Explanatory text for an inbound peer connection. @@ -3409,7 +3369,7 @@ If you are receiving this error you should request the merchant provide a BIP21 - + &Copy address Context menu action to copy the address of a peer. @@ -3524,7 +3484,7 @@ For more information on using this console, type %6. - + Unknown @@ -3836,7 +3796,7 @@ For more information on using this console, type %6. SendCoinsDialog - + Send Coins Send Coins @@ -4018,7 +3978,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 S&end - + Copy quantity @@ -4217,12 +4177,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - - Watch-only balance: - - - - + The recipient address is not valid. Please recheck. @@ -4257,8 +4212,8 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - - + + %1/kvB @@ -4271,7 +4226,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + Warning: Invalid Bitcoin address @@ -4383,7 +4338,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 SendConfirmationDialog - + Send @@ -4463,8 +4418,8 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - Copy the current signature to the system clipboard - Copy the current signature to the system clipboard + Copy the current signature to the clipboard + @@ -4535,7 +4490,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + The entered address is invalid. @@ -4628,7 +4583,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 TransactionDesc - + conflicted with a transaction with %1 confirmations Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that conflicts with a confirmed transaction. @@ -4686,51 +4641,43 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - From - + unknown - + To - - + + own address - - - - watch-only - - - - + label - + Credit - + matures in %n more block(s) matures in %n more block @@ -4743,7 +4690,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + Debit @@ -4836,14 +4783,12 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 Amount - true - - + false @@ -4864,7 +4809,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 TransactionTableModel - + Date Date @@ -4879,7 +4824,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + Unconfirmed @@ -4934,17 +4879,12 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - - watch-only - - - - + (n/a) - + (no label) @@ -4963,11 +4903,6 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 Type of transaction. - - - Whether or not a watch-only address is involved in this transaction. - - User-defined intent/purpose of the transaction. @@ -4982,7 +4917,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 TransactionView - + All @@ -5048,7 +4983,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + &Copy address @@ -5104,7 +5039,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + Export Transaction History @@ -5119,11 +5054,6 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 Confirmed Confirmed - - - Watch-only - - Date @@ -5170,7 +5100,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + Range: @@ -5266,13 +5196,13 @@ Go to File > Open Wallet to load a wallet. WalletModel - + Send Coins Send Coins - + @@ -5409,11 +5339,6 @@ Go to File > Open Wallet to load a wallet. - %s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup. - - - - %s failed to validate the -assumeutxo snapshot state. This indicates a hardware problem, or a bug in the software, or a bad software modification that allowed an invalid snapshot to be loaded. As a result of this, the node will shut down and stop using any state that was built on the snapshot, resetting the chain height from %d to %d. On the next restart, the node will resume syncing from %d without using any snapshot data. Please report this incident to %s, including how you obtained the snapshot. The invalid snapshot chainstate will be left on disk in case it is helpful in diagnosing the issue that caused this error. @@ -5423,17 +5348,7 @@ Go to File > Open Wallet to load a wallet. - - Cannot downgrade wallet from version %i to version %i. Wallet version unchanged. - - - - - 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. - - - - + Disk space for %s may not accommodate the block files. Approximately %u GB of data will be stored in this directory. @@ -5443,7 +5358,7 @@ Go to File > Open Wallet to load a wallet. - + Error loading wallet. Wallet requires blocks to be downloaded, and software does not currently support loading wallets while blocks are being downloaded out of order when using assumeutxo snapshots. Wallet should be able to load successfully after node sync reaches height %s @@ -5468,17 +5383,12 @@ Go to File > Open Wallet to load a wallet. - + Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s - - Error: Legacy wallets only support the "legacy", "p2sh-segwit", and "bech32" address types - - - - + Error: Unable to produce descriptors for this legacy wallet. Make sure to provide the wallet's passphrase if it is encrypted. @@ -5513,17 +5423,7 @@ Go to File > Open Wallet to load a wallet. - - No wallet file format provided. To use createfromdump, -format=<format> must be provided. - - - - - Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. - - - - + Please contribute if you find %s useful. Visit %s for further information about the software. @@ -5538,12 +5438,7 @@ Go to File > Open Wallet to load a wallet. - - Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node) - - - - + Rename of '%s' -> '%s' failed. You should resolve this by manually moving or deleting the invalid snapshot directory %s, otherwise you will encounter the same error again on the next startup. @@ -5564,11 +5459,6 @@ Go to File > Open Wallet to load a wallet. - 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 - - - - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications @@ -5598,12 +5488,7 @@ Go to File > Open Wallet to load a wallet. - - Unknown wallet file format "%s" provided. Please provide one of "bdb" or "sqlite". - - - - + Unsupported category-specific logging level %1$s=%2$s. Expected %1$s=<category>:<loglevel>. Valid categories: %3$s. Valid loglevels: %4$s. @@ -5612,21 +5497,6 @@ Go to File > Open Wallet to load a wallet. Unsupported chainstate database format found. Please restart with -reindex-chainstate. This will rebuild the chainstate database. - - - Wallet created successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. - - - - - Wallet loaded successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. Legacy wallets can be migrated to a descriptor wallet with migratewallet. - - - - - Warning: Dumpfile wallet format "%s" does not match command line specified format "%s". - - Warning: Private keys detected in wallet {%s} with disabled private keys @@ -5658,7 +5528,7 @@ Go to File > Open Wallet to load a wallet. - + Cannot obtain a lock on directory %s. %s is probably already running. @@ -5678,22 +5548,22 @@ Go to File > Open Wallet to load a wallet. - + %s is set very high! Fees this large could be paid on a single transaction. - + Cannot provide specific connections and have addrman find outgoing connections at the same time. - + Error loading %s: External signer wallet being loaded without external signer support compiled - + Error reading %s! All keys read correctly, but transaction data or address metadata may be missing or incorrect. @@ -5703,22 +5573,17 @@ Go to File > Open Wallet to load a wallet. - + Error: Duplicate descriptors created during migration. Your wallet may be corrupted. - + Error: Transaction %s in wallet cannot be identified to belong to migrated wallets - - Failed to calculate bump fees, because unconfirmed UTXOs depend on enormous cluster of unconfirmed transactions. - - - - + Failed to remove snapshot chainstate dir (%s). Manually remove it before restarting. @@ -5764,7 +5629,22 @@ Go to File > Open Wallet to load a wallet. - + + Option '-checkpoints' is set but checkpoints were removed. This option has no effect. + + + + + Option '-maxorphantx' is set but no longer has any effect (see release notes). Please remove it from your configuration. + + + + + Options '-datacarrier' or '-datacarriersize' are set but are marked as deprecated. They will be removed in a future version. + + + + Outbound connections restricted to CJDNS (-onlynet=cjdns) but -cjdnsreachable is not provided @@ -5784,7 +5664,12 @@ Go to File > Open Wallet to load a wallet. - + + Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of a pruned node) + + + + Rename of '%s' -> '%s' failed. Cannot clean up the background chainstate leveldb directory. @@ -5819,12 +5704,7 @@ Go to File > Open Wallet to load a wallet. - - Transaction requires one destination of non-0 value, a non-0 feerate, or a pre-selected input - - - - + UTXO snapshot failed to validate. Restart to resume normal initial block download, or try loading a different snapshot. @@ -5842,16 +5722,7 @@ The wallet might have been tampered with or created with malicious intent. - - Unrecognized descriptor found. Loading wallet %s - -The wallet might had been created on a newer version. -Please try running the latest software version. - - - - - + Your computer's date and time appear to be more than %d minutes out of sync with the network, this may lead to consensus failure. After you've confirmed your computer's clock, this message should no longer appear when you restart your node. Without a restart, it should stop showing automatically after you've connected to a sufficient number of new outbound peers, which may take some time. You can inspect the `timeoffset` field of the `getpeerinfo` and `getnetworkinfo` RPC methods to get more info. @@ -5874,6 +5745,11 @@ Unable to restore backup of wallet. + -paytxfee is deprecated and will be fully removed in v31.0. + + + + A fatal internal error occurred, see debug.log for details: @@ -5887,6 +5763,11 @@ Unable to restore backup of wallet. Block verification was interrupted + + + Cannot add WalletDescriptor to a non-descriptor wallet + + Cannot write to directory '%s'; check permissions. @@ -5917,11 +5798,21 @@ Unable to restore backup of wallet. Could not find asmap file %s + + + Could not generate scriptPubKeys (cache is empty) + + Could not parse asmap file %s + + + Could not top up scriptPubKeys + + Disk space is too low! @@ -5952,11 +5843,6 @@ Unable to restore backup of wallet. Error initializing block database - - - Error initializing wallet database environment %s! - - Error loading %s @@ -6062,6 +5948,16 @@ Unable to restore backup of wallet. Error: No %s addresses available. + + + Error: Not all address book records were migrated + + + + + Error: Not all transaction records were migrated + + Error: This wallet already uses SQLite @@ -6129,36 +6025,46 @@ Unable to restore backup of wallet. - Failed to connect best block (%s). + Failed to acquire rescan reserver during wallet initialization - Failed to disconnect block. + Failed to close block undo file. - Failed to listen on any port. Use -listen=0 if you want this. + Failed to close file when writing block. - Failed to read block. + Failed to connect best block (%s). - Failed to rescan the wallet during initialization + Failed to disconnect block. - Failed to start indexes, shutting down.. + Failed to listen on any port. Use -listen=0 if you want this. + Failed to read block. + + + + + Failed to rescan the wallet during initialization + + + + Failed to verify database @@ -6197,11 +6103,6 @@ Unable to restore backup of wallet. Ignoring duplicate -wallet %s. - - - Importing… - - Incorrect or no genesis block found. Wrong datadir for network? @@ -6238,7 +6139,7 @@ Unable to restore backup of wallet. - + Invalid -proxy address or hostname: '%s' @@ -6272,11 +6173,6 @@ Unable to restore backup of wallet. Invalid port specified in %s: '%s' - - - Invalid pre-selected input %s - - Listening for incoming connections failed (listen returned error %s) @@ -6562,16 +6458,6 @@ Unable to restore backup of wallet. Unable to find UTXO for external input - - - Unable to generate initial keys - - - - - Unable to generate keys - - Unable to open %s for writing @@ -6587,11 +6473,6 @@ Unable to restore backup of wallet. Unable to start HTTP server. See debug log for details. - - - Unable to unload the wallet before migrating - - Unknown -blockfilterindex value %s. @@ -6623,7 +6504,7 @@ Unable to restore backup of wallet. - + Unsupported global logging level %s=%s. Valid values: %s. @@ -6643,12 +6524,41 @@ Unable to restore backup of wallet. - + + Error loading %s: Wallet is a legacy wallet. Please migrate to a descriptor wallet using the migration tool (migratewallet RPC). + + + + + Error: Dumpfile specifies an unsupported database format (%s). Only sqlite database dumps are supported + + + + + Failed to calculate bump fees, because unconfirmed UTXOs depend on an enormous cluster of unconfirmed transactions. + + + + + Transaction requires one destination of non-zero value, a non-zero feerate, or a pre-selected input + + + + + Unrecognized descriptor found. Loading wallet %s + +The wallet might have been created on a newer version. +Please try running the latest software version. + + + + + Do you want to rebuild the databases now? - + Error: Could not add watchonly tx %s to watchonly wallet @@ -6658,7 +6568,7 @@ Unable to restore backup of wallet. - + Error: Wallet does not exist @@ -6668,12 +6578,27 @@ Unable to restore backup of wallet. - + + Failed to start indexes, shutting down… + + + + + Invalid -proxy address or hostname, ends with '=': '%s' + + + + Not enough file descriptors available. %d available, %d required. - + + Unrecognized network in -proxy='%s': '%s' + + + + User Agent comment (%s) contains unsafe characters. @@ -6693,7 +6618,7 @@ Unable to restore backup of wallet. - + Settings file could not be read diff --git a/src/qt/locale/bitcoin_en.xlf b/src/qt/locale/bitcoin_en.xlf index 9e38f8f2b1c8..cfbc5899402b 100644 --- a/src/qt/locale/bitcoin_en.xlf +++ b/src/qt/locale/bitcoin_en.xlf @@ -15,25 +15,25 @@ 67 - Copy the currently selected address to the system clipboard - 81 - - &Copy 84 - + C&lose 151 - + Delete the currently selected address from the list 98 - + Enter address or label to search 27 + + Copy the currently selected address to the clipboard + 81 + Export the data in the current tab to a file 128 @@ -45,7 +45,7 @@ &Delete 101 - ../addressbookpage.cpp113 + ../addressbookpage.cpp105 @@ -53,62 +53,62 @@ Choose the address to send coins to - 83 + 75 Choose the address to receive coins with - 84 + 76 C&hoose - 89 + 81 These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - 95 + 87 These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. Signing is only possible with addresses of the type 'legacy'. - 100 + 92 &Copy Address - 108 + 100 Copy &Label - 109 + 101 &Edit - 110 + 102 Export Address List - 275 + 267 Comma separated file - 278 + 270 Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. There was an error trying to save the address list to %1. Please try again. - 294 + 286 An error message. %1 is a stand-in argument for the name of the file we attempted to save to. Sending addresses - %1 - 326 + 318 Receiving addresses - %1 - 327 + 319 Exporting Failed - 291 + 283 @@ -290,43 +290,43 @@ Signing is only possible with addresses of the type 'legacy'. Settings file %1 might be corrupt or invalid. - 260 + 251 Runaway exception - 444 + 435 A fatal error occurred. %1 can no longer continue safely and will quit. - 445 + 436 Internal error - 454 + 445 An internal error occurred. %1 will attempt to continue safely. This is an unexpected bug which can be reported as described below. - 455 + 446 Do you want to reset settings to default values, or to abort without making changes? - 168 + 159 Explanatory text shown on startup when the settings file cannot be read. Prompts user to make a choice between resetting or aborting. A fatal error occurred. Check that settings file is writable, or try running with -nosettings. - 188 + 179 Explanatory text shown on startup when the settings file could not be written. Prompts user to check that we have the ability to write to the file. Explains that the user has the option of running without a settings file. Error: %1 - 616 + 601 %1 didn't yet exit safely… - 689 + 674 @@ -382,20 +382,20 @@ Signing is only possible with addresses of the type 'legacy'. &Minimize - 533 + 537 Wallet: - 612 + 616 Network activity disabled. - 1030 + 1034 A substring of the tooltip. Proxy is <b>enabled</b>: %1 - 1481 + 1480 Send coins to a Bitcoin address @@ -475,39 +475,39 @@ Signing is only possible with addresses of the type 'legacy'. &File - 499 + 503 &Settings - 520 + 524 &Help - 581 + 585 Tabs toolbar - 592 + 596 Syncing Headers (%1%)… - 1074 + 1078 Synchronizing with network… - 1132 + 1136 Indexing blocks on disk… - 1137 + 1141 Processing blocks on disk… - 1139 + 1143 Connecting to peers… - 1146 + 1150 Request payments (generates QR codes and bitcoin: URIs) @@ -526,7 +526,7 @@ Signing is only possible with addresses of the type 'legacy'. 365 - 1155 + 1159 Processed %n block(s) of transaction history. @@ -536,35 +536,35 @@ Signing is only possible with addresses of the type 'legacy'. %1 behind - 1178 + 1182 Catching up… - 1183 + 1187 Last received block was generated %1 ago. - 1202 + 1206 Transactions after this will not yet be visible. - 1204 + 1208 Error - 1244 + 1243 Warning - 1248 + 1247 Information - 1252 + 1251 Up to date - 1159 + 1163 Ctrl+Q @@ -650,59 +650,59 @@ Signing is only possible with addresses of the type 'legacy'. No wallets available - 422 - 481 + 426 + 485 Wallet Data - 428 + 432 Name of the wallet data file format. Load Wallet Backup - 431 + 435 The title for Restore Wallet File Windows Restore Wallet - 439 + 443 Title of pop-up window shown when the user is attempting to restore a wallet. Wallet Name - 441 + 445 Label of the input field where the name of the wallet is entered. &Window - 531 + 535 Ctrl+M - 534 + 538 Zoom - 543 + 547 Main Window - 561 + 565 %1 client - 840 + 844 &Hide - 908 + 912 S&how - 909 + 913 - 1027 + 1031 A substring of the tooltip. %n active connection(s) to Bitcoin network. @@ -713,177 +713,169 @@ Signing is only possible with addresses of the type 'legacy'. Click for more actions. - 1037 + 1041 A substring of the tooltip. "More actions" are available via the context menu. Show Peers tab - 1054 + 1058 A context menu item. The "Peers tab" is an element of the "Node window". Disable network activity - 1062 + 1066 A context menu item. Enable network activity - 1064 + 1068 A context menu item. The network activity was disabled previously. Pre-syncing Headers (%1%)… - 1081 + 1085 - Error creating wallet - 1220 - - - Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets) - 1220 - - Error: %1 - 1245 + 1244 - + Warning: %1 - 1249 + 1248 - + Date: %1 - 1357 + 1356 - + Amount: %1 - 1358 + 1357 - + Wallet: %1 - 1360 + 1359 - + Type: %1 - 1362 + 1361 - + Label: %1 - 1364 + 1363 - + Address: %1 - 1366 + 1365 - + Sent transaction - 1367 + 1366 - + Incoming transaction - 1367 + 1366 - + HD key generation is <b>enabled</b> - 1419 + 1418 - + HD key generation is <b>disabled</b> - 1419 + 1418 - + Private key <b>disabled</b> - 1419 + 1418 - + Wallet is <b>encrypted</b> and currently <b>unlocked</b> - 1442 + 1441 - + Wallet is <b>encrypted</b> and currently <b>locked</b> - 1450 + 1449 - + Original message: - 1569 + 1568 - + Unit to show amounts in. Click to select another unit. - 1608 + 1607 - + Coin Selection 14 - + Quantity: 51 - + Bytes: 80 - + Amount: 125 - + Fee: 170 - + After Fee: 218 - + Change: 250 - + (un)select all 306 - + Tree mode 322 - + List mode 335 - + Amount 391 - + Received with label 396 - + Received with address 401 - + Date 406 - + Confirmations 411 - + Confirmed 414 @@ -891,72 +883,72 @@ Signing is only possible with addresses of the type 'legacy'. - + Copy amount 65 - + &Copy address 54 - + Copy &label 55 - + Copy &amount 56 - + Copy transaction &ID and output index 57 - + L&ock unspent 59 - + &Unlock unspent 60 - + Copy quantity 64 - + Copy fee 66 - + Copy after fee 67 - + Copy bytes 68 - + Copy change 69 - + (%1 locked) 363 - + Can vary +/- %1 satoshi(s) per input. 528 - + (no label) 573 627 - + change from %1 (%2) 620 - + (change) 621 @@ -964,55 +956,55 @@ Signing is only possible with addresses of the type 'legacy'. - + Create Wallet 250 Title of window indicating the progress of creation of a new wallet. - + Creating Wallet <b>%1</b>… 253 Descriptive text of the create wallet progress window which indicates to the user which wallet is currently being created. - + Create wallet failed 285 - + Create wallet warning 287 - + Can't list signers 303 - + Too many external signers found 306 - + Load Wallets 380 Title of progress window which is displayed when wallets are being loaded. - + Loading wallets… 383 Descriptive text of the load wallets progress window which indicates to the user that wallets are currently being loaded. - + Migrate wallet 446 - + Are you sure you wish to migrate the wallet <i>%1</i>? 447 - + Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made. If this wallet contains any watchonly scripts, a new wallet will be created which contains those watchonly scripts. If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts. @@ -1020,100 +1012,100 @@ If this wallet contains any solvable but not watched scripts, a different and ne The migration process will create a backup of the wallet before migrating. This backup file will be named <wallet name>-<timestamp>.legacy.bak and can be found in the directory for this wallet. In the event of an incorrect migration, the backup can be restored with the "Restore Wallet" functionality. 448 - + Migrate Wallet 465 - + Migrating Wallet <b>%1</b>… 465 - + The wallet '%1' was migrated successfully. 471 - + Watchonly scripts have been migrated to a new wallet named '%1'. 473 - + Solvable but not watched scripts have been migrated to a new wallet named '%1'. 476 - + Migration failed 490 - + Migration Successful 492 - + Open wallet failed 337 - + Open wallet warning 339 - + Open Wallet 353 Title of window indicating the progress of opening of a wallet. - + Opening Wallet <b>%1</b>… 356 Descriptive text of the open wallet progress window which indicates to the user which wallet is currently being opened. - + Restore Wallet 406 Title of progress window which is displayed when wallets are being restored. - + Restoring Wallet <b>%1</b>… 409 Descriptive text of the restore wallets progress window which indicates to the user that wallets are currently being restored. - + Restore wallet failed 428 Title of message box which is displayed when the wallet could not be restored. - + Restore wallet warning 431 Title of message box which is displayed when the wallet is restored with some warning. - + Restore wallet message 434 Title of message box which is displayed when the wallet is successfully restored. - + Close wallet 93 - + Are you sure you wish to close the wallet <i>%1</i>? 94 - + Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. 95 - + Close all wallets 105 - + Are you sure you wish to close all wallets? 106 @@ -1121,59 +1113,59 @@ The migration process will create a backup of the wallet before migrating. This - + Create Wallet 14 - + You are one step away from creating your new wallet! 29 - + Please provide a name and, if desired, enable any advanced options 42 - + Wallet Name 67 - + Wallet 80 - + Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice. 89 - + Encrypt Wallet 92 - + Advanced Options 118 - + Disable private keys for this wallet. Wallets with private keys disabled will have no private keys and cannot have an HD seed or imported private keys. This is ideal for watch-only wallets. 139 - + Disable Private Keys 142 - + Make a blank wallet. Blank wallets do not initially have private keys or scripts. Private keys and addresses can be imported, or an HD seed can be set, at a later time. 149 - + Make Blank Wallet 152 - + Use an external signing device such as a hardware wallet. Configure the external signer script in wallet preferences first. 159 - + External signer 162 @@ -1181,11 +1173,11 @@ The migration process will create a backup of the wallet before migrating. This - + Create 20 - + Compiled without external signing support (required for external signing) 88 "External signing" means using devices such as hardware wallets. @@ -1194,23 +1186,23 @@ The migration process will create a backup of the wallet before migrating. This - + Edit Address 14 - + &Label 25 - + The label associated with this address list entry 35 - + The address associated with this address list entry. This can only be modified for sending addresses. 52 - + &Address 42 @@ -1218,156 +1210,85 @@ The migration process will create a backup of the wallet before migrating. This - + New sending address 29 - + Edit receiving address 32 - + Edit sending address 36 - + The entered address "%1" is not a valid Bitcoin address. 113 - + Address "%1" already exists as a receiving address with label "%2" and so cannot be added as a sending address. 146 - + The entered address "%1" is already in the address book with label "%2". 151 - + Could not unlock wallet. 123 - + New key generation failed. 128 - + - + A new data directory will be created. - 73 + 21 - + name - 95 + 43 - + Directory already exists. Add %1 if you intend to create a new directory here. - 97 + 45 - + Path already exists, and is not a directory. - 100 + 48 - + Cannot create data directory here. - 107 - - - - - Bitcoin - 137 - - - 301 - - %n GB of space available - - - %n GB of space available - - - - 303 - - (of %n GB needed) - - - (of %n GB needed) - - - - 306 - - (%n GB needed for full chain) - - - (%n GB needed for full chain) - - - - Choose data directory - 323 - - - At least %1 GB of data will be stored in this directory, and it will grow over time. - 378 - - - Approximately %1 GB of data will be stored in this directory. - 381 - - - 390 - Explanatory text on the capability of the current prune target. - - (sufficient to restore backups %n day(s) old) - - - (sufficient to restore backups %n day(s) old) - - - - %1 will download and store a copy of the Bitcoin block chain. - 392 - - - The wallet will also be stored in this directory. - 394 - - - Error: Specified data directory "%1" cannot be created. - 250 - - - Error - 280 + 55 - + version 36 - + About %1 40 - + Command-line options 58 - + %1 is shutting down… 147 - + Do not shut down the computer until this window disappears. 148 @@ -1375,102 +1296,175 @@ The migration process will create a backup of the wallet before migrating. This - + Welcome 14 - + Welcome to %1. 23 - + As this is the first time the program is launched, you can choose where %1 will store its data. 49 - + Limit block chain storage to 238 - + Reverting this setting requires re-downloading the entire blockchain. It is faster to download the full chain first and prune it later. Disables some advanced features. 241 - + GB 248 - + This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off. 216 - + When you click OK, %1 will begin to download and process the full %4 block chain (%2 GB) starting with the earliest transactions in %3 when %4 initially launched. 206 - + If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low. 226 - + Use the default data directory 66 - + Use a custom data directory: 73 + + + + Bitcoin + 54 + + + 218 + + %n GB of space available + + + %n GB of space available + + + + 220 + + (of %n GB needed) + + + (of %n GB needed) + + + + 223 + + (%n GB needed for full chain) + + + (%n GB needed for full chain) + + + + Choose data directory + 240 + + + At least %1 GB of data will be stored in this directory, and it will grow over time. + 295 + + + Approximately %1 GB of data will be stored in this directory. + 298 + + + 307 + Explanatory text on the capability of the current prune target. + + (sufficient to restore backups %n day(s) old) + + + (sufficient to restore backups %n day(s) old) + + + + %1 will download and store a copy of the Bitcoin block chain. + 309 + + + The wallet will also be stored in this directory. + 311 + + + Error: Specified data directory "%1" cannot be created. + 167 + + + Error + 197 + + + - + Form 14 - + Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. 133 - + Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. 152 - + Number of blocks left 215 - + Unknown… 222 248 ../modaloverlay.cpp160 - + calculating… 292 312 - + Last block time 235 - + Progress 261 - + Progress increase per hour 285 - + Estimated time left until synced 305 - + Hide 342 - + Esc 345 @@ -1478,21 +1472,21 @@ The migration process will create a backup of the wallet before migrating. This - + %1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain. 34 - + Unknown. Syncing Headers (%1, %2%)… 166 - + Unknown. Pre-syncing Headers (%1, %2%)… 171 - + unknown 131 @@ -1500,15 +1494,15 @@ The migration process will create a backup of the wallet before migrating. This - + Open bitcoin URI 14 - + URI: 22 - + Paste address from clipboard 36 Tooltip text for button that allows you to paste an address that is in your clipboard. @@ -1517,294 +1511,294 @@ The migration process will create a backup of the wallet before migrating. This - + Options 14 - + &Main 27 - + Automatically start %1 after logging in to the system. 33 - + &Start %1 on system login 36 - + Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain. 58 - + Maximum database cache size. Make sure you have enough RAM. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. 108 Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. - + Size of &database cache 111 - + Number of script &verification threads 157 - + Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! 289 - + Automatically open the Bitcoin client port on the router. This only works when your router supports PCP or NAT-PMP and it is enabled. The external port could be random. 321 - + Map port using PCP or NA&T-PMP 324 - + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) 378 565 - + Shows if the supplied default SOCKS5 proxy is used to reach peers via this network type. 447 470 493 - + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu. 662 - + Font in the Overview tab: 769 - + Options set in this dialog are overridden by the command line: 814 - + Open the %1 configuration file from the working directory. 859 - + Open Configuration File 862 - + Reset all client options to default. 872 - + &Reset Options 875 - + &Network 315 - + Prune &block storage to 61 - + GB 71 - + Reverting this setting requires re-downloading the entire blockchain. 96 - + MiB 127 - + Set the number of script verification threads. Negative values correspond to the number of cores you want to leave free to the system. 154 Tooltip text for Options window setting that sets the number of script verification threads. Explains that negative values mean to leave these many cores free to the system. - + (0 = auto, <0 = leave that many cores free) 170 - + This allows you or a third party tool to communicate with the node through command-line and JSON-RPC commands. 192 Tooltip text for Options window setting that enables the RPC server. - + Enable R&PC server 195 An Options window setting to enable the RPC server. - + W&allet 216 - + Whether to set subtract fee from amount as default or not. 222 Tooltip text for Options window setting that sets subtracting the fee from a sending amount as default. - + Subtract &fee from amount by default 225 An Options window setting to set subtracting the fee from a sending amount as default. - + Expert 232 - + Enable coin &control features 241 - + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. 248 - + &Spend unconfirmed change 251 - + Enable &PSBT controls 258 An options window setting to enable PSBT controls. - + Whether to show PSBT controls. 261 Tooltip text for options window setting that enables PSBT controls. - + External Signer (e.g. hardware wallet) 271 - + &External signer script path 279 - + Accept connections from outside. 331 - + Allow incomin&g connections 334 - + Connect to the Bitcoin network through a SOCKS5 proxy. 341 - + &Connect through SOCKS5 proxy (default proxy): 344 - + Proxy &IP: 353 540 - + &Port: 385 572 - + Port of the proxy (e.g. 9050) 410 597 - + Used for reaching peers via: 434 - + IPv4 457 - + IPv6 480 - + Tor 503 - + &Window 633 - + Show the icon in the system tray. 639 - + &Show tray icon 642 - + Show only a tray icon after minimizing the window. 652 - + &Minimize to the tray instead of the taskbar 655 - + M&inimize on close 665 - + &Display 686 - + User Interface &language: 694 - + The user interface language can be set here. This setting will take effect after restarting %1. 707 - + &Unit to show amounts in: 718 - + Choose the default subdivision unit to show in the interface and when sending coins. 731 - + Third-party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |. 742 755 - + &Third-party transaction URLs 745 - + Whether to show coin control features or not. 238 - + Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services. 528 - + Use separate SOCKS&5 proxy to reach peers via Tor onion services: 531 - + &OK 955 - + &Cancel 968 @@ -1812,85 +1806,85 @@ The migration process will create a backup of the wallet before migrating. This - + Compiled without external signing support (required for external signing) 145 "External signing" means using devices such as hardware wallets. - + default 157 - + none - 238 + 234 - + Confirm options reset - 346 + 342 Window title text of pop-up window shown when the user has chosen to reset options. - + Client restart required to activate changes. - 337 - 418 + 333 + 414 Text explaining that the settings changed will not come into effect until the client is restarted. - + Current settings will be backed up at "%1". - 341 + 337 Text explaining to the user that the client's current settings will be backed up at a specific location. %1 is a stand-in argument for the backup location's path. - + Client will be shut down. Do you want to proceed? - 344 + 340 Text asking the user to confirm if they would like to proceed with a client shutdown. - + Configuration options - 364 + 360 Window title text of pop-up box that allows opening up of configuration file. - + The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file. - 367 + 363 Explanatory text about the priority order of instructions considered by client. The order from high to low being: command-line, configuration file, GUI settings. - + Continue - 370 + 366 - + Cancel - 371 + 367 - + Error - 380 + 376 - + The configuration file could not be opened. - 380 + 376 - + This change would require a client restart. - 422 + 418 - + The supplied proxy address is invalid. - 450 + 446 - + Embedded "%1" 61 - + Default system font "%1" 62 - + Custom… 63 @@ -1898,120 +1892,96 @@ The migration process will create a backup of the wallet before migrating. This - + Could not read setting "%1", %2. - 227 + 226 - + Form 14 - + 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. 76 - 411 - - - Watch-only: - 284 + 296 - + Available: - 294 + 208 - + Your current spendable balance - 304 + 218 - + Pending: - 339 + 234 - + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance - 139 + 120 - + Immature: - 239 + 182 - + Mined balance that has not yet matured - 210 + 153 - + Balances 60 - + Total: - 200 + 143 - + Your current total balance - 249 - - - Your current balance in watch-only addresses - 323 - - - Spendable: - 346 + 192 - + Recent transactions - 395 - - - Unconfirmed transactions to watch-only addresses - 120 - - - Mined balance in watch-only addresses that has not yet matured - 158 - - - Current total balance in watch-only addresses - 268 + 280 - + Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings->Mask values. - 184 + 176 - + PSBT Operations 14 - + Sign Tx 86 - + Broadcast Tx 102 - + Copy to Clipboard 122 - + Save… 129 - + Close 136 @@ -2019,112 +1989,112 @@ The migration process will create a backup of the wallet before migrating. This - + Failed to load transaction: %1 64 - + Failed to sign transaction: %1 89 - + Cannot sign inputs while wallet is locked. 97 - + Could not sign any more inputs. 99 - + Signed %1 inputs, but more signatures are still required. 101 - + Signed transaction successfully. Transaction is ready to broadcast. 104 - + Unknown error processing transaction. 116 - + Transaction broadcast successfully! Transaction ID: %1 126 - + Transaction broadcast failed: %1 129 - + PSBT copied to clipboard. 138 - + Save Transaction Data 161 - + Partially Signed Transaction (Binary) 163 Expanded name of the binary PSBT file format. See: BIP 174. - + PSBT saved to disk. 170 - + Sends %1 to %2 187 - + own address 191 - + Unable to calculate transaction fee or total transaction amount. 199 - + Pays transaction fee: 201 - + Total Amount 213 - + or 216 - + Transaction has %1 unsigned inputs. 222 - + Transaction is missing some information about inputs. 268 - + Transaction still needs signature(s). 272 - + (But no wallet is loaded.) 275 - + (But this wallet cannot sign transactions.) 278 - + (But this wallet does not have the right keys.) 281 - + Transaction is fully signed and ready for broadcast. 289 - + Transaction status is unknown. 293 @@ -2132,37 +2102,37 @@ The migration process will create a backup of the wallet before migrating. This - + Payment request error 145 - + Cannot start bitcoin: click-to-pay handler 146 - + URI handling 194 210 216 223 - + 'bitcoin://' is not a valid URI. Use 'bitcoin:' instead. 194 - + Cannot process payment request because BIP70 is not supported. Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored. If you are receiving this error you should request the merchant provide a BIP21 compatible URI. 211 234 - + URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters. 224 - + Payment request file handling 233 @@ -2170,52 +2140,52 @@ If you are receiving this error you should request the merchant provide a BIP21 - + User Agent 112 Title of Peers Table column which contains the peer's User Agent string. - + Ping 103 Title of Peers Table column which indicates the current latency of the connection with the peer. - + Peer 85 Title of Peers Table column which contains a unique number used to identify a connection. - + Age 88 Title of Peers Table column which indicates the duration (length of time) since the peer connection started. - + Direction 94 Title of Peers Table column which indicates the direction the peer connection was initiated from. - + Sent 106 Title of Peers Table column which indicates the total amount of network information we have sent to the peer. - + Received 109 Title of Peers Table column which indicates the total amount of network information we have received from the peer. - + Address 91 Title of Peers Table column which contains the IP/Onion/I2P address of the connected peer. - + Type 97 Title of Peers Table column which describes the type of peer connection. The "type" describes why the connection exists. - + Network 100 Title of Peers Table column which states the network the peer connected through. @@ -2224,12 +2194,12 @@ If you are receiving this error you should request the merchant provide a BIP21 - + Inbound 77 An Inbound Connection from a Peer. - + Outbound 79 An Outbound Connection to a Peer. @@ -2238,7 +2208,7 @@ If you are receiving this error you should request the merchant provide a BIP21 - + Amount 197 @@ -2246,236 +2216,236 @@ If you are receiving this error you should request the merchant provide a BIP21 - + Enter a Bitcoin address (e.g. %1) 138 - + Ctrl+W 433 - + Unroutable 690 - + IPv4 692 network name Name of IPv4 network in peer info - + IPv6 694 network name Name of IPv6 network in peer info - + Onion 696 network name Name of Tor network in peer info - + I2P 698 network name Name of I2P network in peer info - + CJDNS 700 network name Name of CJDNS network in peer info - + Inbound 714 An inbound connection from a peer. An inbound connection is a connection initiated by a peer. - + Outbound 717 An outbound connection to a peer. An outbound connection is a connection initiated by us. - + Full Relay 722 Peer connection type that relays all network information. - + Block Relay 725 Peer connection type that relays network information about blocks and not transactions or addresses. - + Manual 727 Peer connection type established manually through one of several methods. - + Feeler 729 Short-lived peer connection type that tests the aliveness of known addresses. - + Address Fetch 731 Short-lived peer connection type that solicits known addresses from a peer. - + %1 d 743 755 - + %1 h 744 756 - + %1 m 745 757 - + %1 s 747 758 784 - + None 772 - + N/A 778 - + %1 ms 779 797 - + %n second(s) - + %n second(s) 801 - + %n minute(s) - + %n minute(s) 805 - + %n hour(s) - + %n hour(s) 809 - + %n day(s) - + %n day(s) 813 819 - + %n week(s) - + %n week(s) - + %1 and %2 819 819 - + %n year(s) - + %n year(s) - + %1 B 827 - + %1 kB 829 - ../rpcconsole.cpp1023 + ../rpcconsole.cpp979 - + %1 MB 831 - ../rpcconsole.cpp1024 - ../rpcconsole.cpp1025 + ../rpcconsole.cpp980 + ../rpcconsole.cpp981 - + %1 GB 833 - + default wallet - 1013 + 992 - + &Save Image… 28 - + &Copy Image 29 - + Resulting URI too long, try to reduce the text for label / message. 40 - + Error encoding URI into QR Code. 47 - + QR code support not available. 88 - + Save QR Code - 118 + 122 - + PNG Image - 121 + 125 Expanded name of the PNG file format. See: https://en.wikipedia.org/wiki/Portable_Network_Graphics. - + N/A 75 101 @@ -2516,325 +2486,325 @@ If you are receiving this error you should request the merchant provide a BIP21 1772 1798 1824 - ../rpcconsole.h145 + ../rpcconsole.h144 - + Client version 65 - + &Information 43 - + General 58 - + Datadir 114 - + To specify a non-default location of the data directory use the '%1' option. 124 - + Blocksdir 143 - + To specify a non-default location of the blocks directory use the '%1' option. 153 - + Startup time 172 - + Network 201 1255 - + Name 208 - + Number of connections 231 - + Local Addresses 254 - + Network addresses that your Bitcoin node is currently using to communicate with other nodes. 282 - + Block chain 295 - + Memory Pool 354 - + Current number of transactions 361 - + Memory usage 384 - + Wallet: 478 - + (none) 489 - + &Reset 700 - + Received 780 1615 - + Sent 860 1592 - + &Peers 901 - + Banned peers 977 - + Select a peer to view detailed information. 1053 - ../rpcconsole.cpp1191 + ../rpcconsole.cpp1147 - + Hide Peers Detail 1105 - + Ctrl+X 1126 - + The transport layer version: %1 1200 - + Transport 1203 - + Session ID 1229 - + Version 1278 - + Whether we relay transactions to this peer. 1350 - + Transaction Relay 1353 - + Starting Block 1402 - + Synced Headers 1425 - + Synced Blocks 1448 - + Last Transaction 1523 - + The mapped Autonomous System used for diversifying peer selection. 1733 - + Mapped AS 1736 - + Whether we relay addresses to this peer. 1759 Tooltip text for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - + Address Relay 1762 Text title for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - + The total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). 1785 Tooltip text for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - + The total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. 1811 Tooltip text for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - + Addresses Processed 1788 Text title for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - + Addresses Rate-Limited 1814 Text title for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - + User Agent 88 1301 - + Node window 14 - + Current block height 302 - + Open the %1 debug log file from the current data directory. This can take a few seconds for large log files. 432 - + Decrease font size 510 - + Increase font size 530 - + Permissions 1151 - + The direction and type of peer connection: %1 1174 - + Direction/Type 1177 - + The BIP324 session ID string in hex. 1226 - + The network protocol this peer is connected through: IPv4, IPv6, Onion, I2P, or CJDNS. 1252 - + Services 1324 - + High bandwidth BIP152 compact block relay: %1 1376 - + High Bandwidth 1379 - + Connection Time 1471 - + Elapsed time since a novel block passing initial validity checks was received from this peer. 1494 - + Last Block 1497 - + Elapsed time since a novel transaction accepted into our mempool was received from this peer. 1520 Tooltip text for the Last Transaction field in the peer details area. - + Last Send 1546 - + Last Receive 1569 - + Ping Time 1638 - + The duration of a currently outstanding ping. 1661 - + Ping Wait 1664 - + Min Ping 1687 - + Time Offset 1710 - + Last block time 325 - + &Open 435 - + &Console 461 - + &Network Traffic 648 - + Totals 716 - + Debug log file 425 - + Clear console 550 @@ -2842,162 +2812,162 @@ If you are receiving this error you should request the merchant provide a BIP21 - + In: - 975 + 931 - + Out: - 976 + 932 - + Inbound: initiated by peer - 499 + 463 Explanatory text for an inbound peer connection. - + Outbound Full Relay: default - 503 + 467 Explanatory text for an outbound peer connection that relays all network information. This is the default behavior for outbound connections. - + Outbound Block Relay: does not relay transactions or addresses - 506 + 470 Explanatory text for an outbound peer connection that relays network information about blocks and not transactions or addresses. - + Outbound Manual: added using RPC %1 or %2/%3 configuration options - 511 + 475 Explanatory text for an outbound peer connection that was established manually through one of several methods. The numbered arguments are stand-ins for the methods available to establish manual connections. - + Outbound Feeler: short-lived, for testing addresses - 517 + 481 Explanatory text for a short-lived outbound peer connection that is used to test the aliveness of known addresses. - + Outbound Address Fetch: short-lived, for soliciting addresses - 520 + 484 Explanatory text for a short-lived outbound peer connection that is used to request addresses from a peer. - + detecting: peer could be v1 or v2 - 525 + 489 Explanatory text for "detecting" transport type. - + v1: unencrypted, plaintext transport protocol - 527 + 491 Explanatory text for v1 transport type. - + v2: BIP324 encrypted transport protocol - 529 + 493 Explanatory text for v2 transport type. - + we selected the peer for high bandwidth relay - 533 + 497 - + the peer selected us for high bandwidth relay - 534 + 498 - + no high bandwidth relay selected - 535 + 499 - + Ctrl++ - 548 + 512 Main shortcut to increase the RPC console font size. - + Ctrl+= - 550 + 514 Secondary shortcut to increase the RPC console font size. - + Ctrl+- - 554 + 518 Main shortcut to decrease the RPC console font size. - + Ctrl+_ - 556 + 520 Secondary shortcut to decrease the RPC console font size. - + &Copy address - 710 + 666 Context menu action to copy the address of a peer. - + &Disconnect - 714 + 670 - + 1 &hour - 715 + 671 - + 1 d&ay - 716 + 672 - + 1 &week - 717 + 673 - + 1 &year - 718 + 674 - + &Copy IP/Netmask - 744 + 700 Context menu action to copy the IP/Netmask of a banned peer. IP/Netmask is the combination of a peer's IP address and its Netmask. For IP address, see: https://en.wikipedia.org/wiki/IP_address. - + &Unban - 748 + 704 - + Network activity disabled - 979 + 935 - + None - 992 + 948 - + Executing command without any wallet - 1071 + 1027 - + Ctrl+I - 1397 + 1353 - + Ctrl+T - 1398 + 1354 - + Ctrl+N - 1399 + 1355 - + Ctrl+P - 1400 + 1356 - + Node window - [%1] - 1418 + 1374 - + Executing command using "%1" wallet - 1069 + 1025 - + Welcome to the %1 RPC console. Use up and down arrows to navigate history, and %2 to clear screen. Use %3 and %4 to increase or decrease the font size. @@ -3005,124 +2975,124 @@ Type %5 for an overview of available commands. For more information on using this console, type %6. %7WARNING: 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.%8 - 908 + 864 RPC console welcome message. Placeholders %7 and %8 are style tags for the warning content, and they are not space separated from the rest of the text intentionally. - + Executing… - 1079 + 1035 A console message indicating an entered command is currently being executed. - + (peer: %1) - 1197 + 1153 - + via %1 - 1199 + 1155 - + Yes - 144 + 143 - + No - 144 + 143 - + To - 144 + 143 - + From - 144 + 143 - + Ban for - 145 + 144 - + Never - 187 + 185 - + Unknown - 145 + 144 - + &Amount: 37 - + &Label: 83 - + &Message: 53 - + 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. 50 - + An optional label to associate with the new receiving address. 80 - + Use this form to request payments. All fields are <b>optional</b>. 73 - + An optional amount to request. Leave this empty or zero to not request a specific amount. 34 193 - + 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. 66 - + An optional message that is attached to the payment request and may be displayed to the sender. 96 - + &Create new receiving address 111 - + Clear all fields of the form. 134 - + Clear 137 - + Requested payments history 273 - + Show the selected request (does the same as double clicking an entry) 298 - + Show 301 - + Remove the selected entries from the list 318 - + Remove 321 @@ -3130,63 +3100,63 @@ For more information on using this console, type %6. - + Copy &URI 46 - + &Copy address 47 - + Copy &label 48 - + Copy &message 49 - + Copy &amount 50 - + Base58 (Legacy) 96 - + Not recommended due to higher fees and less protection against typos. 96 - + Base58 (P2SH-SegWit) 97 - + Generates an address compatible with older wallets. 97 - + Bech32 (SegWit) 98 - + Generates a native segwit address (BIP-173). Some old wallets don't support it. 98 - + Bech32m (Taproot) 100 - + Bech32m (BIP-350) is an upgrade to Bech32, wallet support is still limited. 100 - + Could not unlock wallet. 175 - + Could not generate new %1 address 180 @@ -3194,51 +3164,51 @@ For more information on using this console, type %6. - + Request payment to … 14 - + Address: 90 - + Amount: 119 - + Label: 148 - + Message: 180 - + Wallet: 212 - + Copy &URI 240 - + Copy &Address 250 - + &Verify 260 - + Verify this address on e.g. a hardware wallet screen 263 - + &Save Image… 273 - + Payment information 39 @@ -3246,7 +3216,7 @@ For more information on using this console, type %6. - + Request payment to %1 46 @@ -3254,31 +3224,31 @@ For more information on using this console, type %6. - + Date 34 - + Label 34 - + Message 34 - + (no label) 72 - + (no message) 81 - + (no amount requested) 89 - + Requested 132 @@ -3286,150 +3256,150 @@ For more information on using this console, type %6. - + Send Coins 14 - ../sendcoinsdialog.cpp763 + ../sendcoinsdialog.cpp764 - + Coin Control Features 90 - + automatically selected 120 - + Insufficient funds! 139 - + Quantity: 231 - + Bytes: 266 - + Amount: 314 - + Fee: 365 - + After Fee: 419 - + Change: 451 - + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. 495 - + Custom change address 498 - + Transaction Fee: 704 - + 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. 742 - + Warning: Fee estimation is currently not possible. 751 - + per kilobyte 833 - + Hide 780 - + Recommended: 892 - + Custom: 922 - + Send to multiple recipients at once 1137 - + Add &Recipient 1140 - + Clear all fields of the form. 1120 - + Inputs… 110 - + Choose… 718 - + Hide transaction fee settings 777 - + Specify a custom fee per kB (1,000 bytes) of the transaction's virtual size. Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satoshis per kvB" for a transaction size of 500 virtual bytes (half of 1 kvB) would ultimately yield a fee of only 50 satoshis. 828 - + 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. 863 - + A too low fee might result in a never confirming transaction (read the tooltip) 866 - + (Smart fee not initialized yet. This usually takes a few blocks…) 971 - + Confirmation time target: 997 - + Enable Replace-By-Fee 1055 - + With Replace-By-Fee (BIP-125) you can increase a transaction's fee after it is sent. Without this, a higher fee may be recommended to compensate for increased transaction delay risk. 1058 - + Clear &All 1123 - + Balance: 1178 - + Confirm the send action 1094 - + S&end 1097 @@ -3437,300 +3407,296 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + Copy quantity - 95 + 99 - + Copy amount - 96 + 100 - + Copy fee - 97 + 101 - + Copy after fee - 98 + 102 - + Copy bytes - 99 + 103 - + Copy change - 100 + 104 - + %1 (%2 blocks) - 172 + 176 - + Sign on device - 202 + 206 "device" usually means a hardware wallet. - + Connect your hardware wallet first. - 205 + 209 - + Set external signer script path in Options -> Wallet - 209 + 213 "External signer" means using devices such as hardware wallets. - + Cr&eate Unsigned - 212 + 216 - + Creates a Partially Signed Bitcoin Transaction (PSBT) for use with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet. - 213 + 217 - + %1 to '%2' - 316 + 320 - + %1 to %2 - 321 + 325 - + To review recipient list click "Show Details…" - 388 + 392 - + Sign failed - 451 + 455 - + External signer not found - 456 + 460 "External signer" means using devices such as hardware wallets. - + External signer failure - 462 + 466 "External signer" means using devices such as hardware wallets. - + Save Transaction Data - 426 + 430 - + Partially Signed Transaction (Binary) - 428 + 432 Expanded name of the binary PSBT file format. See: BIP 174. - + PSBT saved - 436 + 440 Popup message when a PSBT has been saved to a file - + External balance: - 709 + 713 - + or - 384 + 388 - + You can increase the fee later (signals Replace-By-Fee, BIP-125). - 366 + 370 - + 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. - 335 + 339 Text to inform a user attempting to create a transaction of their current options. At this stage, a user can only create a PSBT. This string is displayed when private keys are disabled and an external signer is not available. - + %1 from wallet '%2' - 305 + 309 - + Do you want to create this transaction? - 329 + 333 Message displayed when attempting to create a transaction. Cautionary text to prompt the user to verify that the displayed transaction details represent the transaction the user intends to create. - + Please, review your transaction. You can create and send this transaction or create 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. - 340 + 344 Text to inform a user attempting to create a transaction of their current options. At this stage, a user can send their transaction or create a PSBT. This string is displayed when both private keys and PSBT controls are enabled. - + Please, review your transaction. - 343 + 347 Text to prompt a user to review the details of the transaction they are attempting to send. - + Transaction fee - 351 + 355 - + %1 kvB - 356 + 360 PSBT transaction creation When reviewing a newly created PSBT (via Send flow), the transaction fee is shown, with "virtual size" of the transaction displayed for context - + Not signalling Replace-By-Fee, BIP-125. - 368 + 372 - + Total Amount - 381 + 385 - + Unsigned Transaction - 405 + 409 PSBT copied Caption of "PSBT has been copied" messagebox - + The PSBT has been copied to the clipboard. You can also save it. - 406 + 410 - + PSBT saved to disk - 436 + 440 - + Confirm send coins - 485 - - - Watch-only balance: - 712 + 489 - + The recipient address is not valid. Please recheck. - 736 + 737 - + The amount to pay must be larger than 0. - 739 + 740 - + The amount exceeds your balance. - 742 + 743 - + The total exceeds your balance when the %1 transaction fee is included. - 745 + 746 - + Duplicate address found: addresses should only be used once each. - 748 + 749 - + Transaction creation failed! - 751 + 752 - + A fee higher than %1 is considered an absurdly high fee. - 755 + 756 - + %1/kvB - 834 + 832 869 883 - + Estimated to begin confirmation within %n block(s). - + Estimated to begin confirmation within %n block(s). - + Warning: Invalid Bitcoin address - 978 + 982 - + Warning: Unknown change address - 983 + 987 - + Confirm custom change address - 986 + 990 - + 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? - 986 + 990 - + (no label) - 1007 + 1011 - + A&mount: 151 - + Pay &To: 35 - + &Label: 128 - + Choose previously used address 60 - + The Bitcoin address to send the payment to 53 - + Alt+A 76 - + Paste address from clipboard 83 - + Alt+P 99 - + Remove this entry 106 - + The amount to send in the selected unit 166 - + 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. 173 - + S&ubtract fee from amount 176 - + Use available balance 183 - + Message: 192 - + Enter a label for this address to add it to the list of used addresses 141 144 - + 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. 202 @@ -3738,117 +3704,117 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + Send - 146 + 151 - + Create Unsigned - 148 + 153 - + Signatures - Sign / Verify a Message 14 - + &Sign Message 27 - + You can sign messages/agreements with your legacy (P2PKH) 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. 33 - + The Bitcoin address to sign the message with 51 - + Choose previously used address 58 274 - + Alt+A 68 284 - + Paste address from clipboard 78 - + Alt+P 88 - + Enter the message you want to sign here 100 103 - + Signature 110 - - Copy the current signature to the system clipboard + + Copy the current signature to the clipboard 140 - + Sign the message to prove you own this Bitcoin address 161 - + Sign &Message 164 - + Reset all sign message fields 178 - + Clear &All 181 338 - + &Verify Message 240 - + Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction! 246 - + The Bitcoin address the message was signed with 267 - + The signed message to verify 296 299 - + The signature given when the message was signed 306 309 - + Verify the message to ensure it was signed with the specified Bitcoin address 318 - + Verify &Message 321 - + Reset all verify message fields 335 - + Click "Sign Message" to generate signature 125 @@ -3856,71 +3822,71 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + The entered address is invalid. - 120 - 219 + 122 + 221 - + Please check the address and try again. - 120 - 220 + 122 + 222 - + The entered address does not refer to a legacy (P2PKH) key. Message signing for SegWit and other non-P2PKH address types is not supported in this version of %1. Please check the address and try again. - 127 - 225 + 129 + 227 - + Wallet unlock was cancelled. - 135 + 137 - + No error - 146 + 148 - + Private key for the entered address is not available. - 149 + 151 - + Message signing failed. - 152 + 154 - + Message signed. - 164 + 166 - + The signature could not be decoded. - 230 + 232 - + Please check the signature and try again. - 231 - 238 + 233 + 240 - + The signature did not match the message digest. - 237 + 239 - + Message verification failed. - 243 + 245 - + Message verified. - 214 + 216 - + (press q to shutdown and continue later) 175 - + press q to shutdown 176 @@ -3928,7 +3894,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + kB/s 74 @@ -3936,194 +3902,185 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + conflicted with a transaction with %1 confirmations - 40 + 39 Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that conflicts with a confirmed transaction. - + 0/unconfirmed, in memory pool - 47 + 46 Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is in the memory pool. - + 0/unconfirmed, not in memory pool - 52 + 51 Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is not in the memory pool. - + abandoned - 58 + 57 Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an abandoned transaction. - + %1/unconfirmed - 66 + 65 Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in at least one block, but less than 6 blocks. - + %1 confirmations - 71 + 70 Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in 6 or more blocks. - + Status - 121 + 120 - + Date - 124 + 123 - + Source - 131 + 130 - + Generated - 131 + 130 - + From - 136 - 150 - 222 + 135 + 149 - + unknown - 150 + 149 - + To - 151 - 171 - 241 + 150 + 170 + 236 - + own address - 153 - 248 - - - watch-only - 153 - 222 - 250 + 152 + 243 - + label - 155 + 154 - + Credit - 191 - 203 - 257 - 287 - 347 + 190 + 202 + 250 + 280 + 340 - 193 - + 192 + matures in %n more block(s) - + matures in %n more block(s) - + not accepted - 195 + 194 - + Debit - 255 - 281 - 344 + 248 + 274 + 337 - + Total debit - 265 + 258 - + Total credit - 266 + 259 - + Transaction fee - 271 + 264 - + Net amount - 293 + 286 - + Message - 299 - 311 + 292 + 304 - + Comment - 301 + 294 - + Transaction ID - 303 + 296 - + Transaction total size - 304 + 297 - + Transaction virtual size - 305 + 298 - + Output index - 306 + 299 - + %1 (Certificate was not verified) - 322 + 315 - + Merchant - 325 + 318 - + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - 333 + 326 - + Debug information - 341 + 334 - + Transaction - 349 + 342 - + Inputs - 352 + 345 - + Amount - 371 + 364 - + true - 372 - 373 + 365 - + false - 372 - 373 + 365 - + This pane shows a detailed description of the transaction 20 @@ -4131,7 +4088,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + Details for %1 18 @@ -4139,298 +4096,286 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + Date - 258 + 257 - + Type - 258 + 257 - + Label - 258 + 257 - + Unconfirmed - 318 + 316 - + Abandoned - 321 + 319 - + Confirming (%1 of %2 recommended confirmations) - 324 + 322 - + Confirmed (%1 confirmations) - 327 + 325 - + Conflicted - 330 + 328 - + Immature (%1 confirmations, will be available after %2) - 333 + 331 - + Generated but not accepted - 336 + 334 - + Received with - 375 + 373 - + Received from - 377 + 375 - + Sent to - 380 + 378 - + Mined - 382 - - - watch-only - 410 + 380 - + (n/a) - 424 + 416 - + (no label) - 629 + 604 - + Transaction status. Hover over this field to show number of confirmations. - 668 + 643 - + Date and time that the transaction was received. - 670 + 645 - + Type of transaction. - 672 - - - Whether or not a watch-only address is involved in this transaction. - 674 + 647 - + User-defined intent/purpose of the transaction. - 676 + 649 - + Amount removed from or added to balance. - 678 + 651 - + All - 73 - 89 + 66 + 82 - + Today - 74 + 67 - + This week - 75 + 68 - + This month - 76 + 69 - + Last month - 77 + 70 - + This year - 78 + 71 - + Received with - 90 + 83 - + Sent to - 92 + 85 - + Mined - 94 + 87 - + Other - 95 + 88 - + Enter address, transaction id, or label to search - 100 + 93 - + Min amount - 104 + 97 - + Range… - 79 + 72 - + &Copy address - 168 + 160 - + Copy &label - 169 + 161 - + Copy &amount - 170 + 162 - + Copy transaction &ID - 171 + 163 - + Copy &raw transaction - 172 + 164 - + Copy full transaction &details - 173 + 165 - + &Show transaction details - 174 + 166 - + Increase transaction &fee - 176 + 168 - + A&bandon transaction - 179 + 171 - + &Edit address label - 180 + 172 - + Show in %1 - 239 + 231 Transactions table context menu action to show the selected transaction in a third-party block explorer. %1 is a stand-in argument for the URL of the explorer. - + Export Transaction History - 358 + 327 - + Comma separated file - 361 + 330 Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. - + Confirmed - 370 - - - Watch-only - 372 + 339 - + Date - 373 + 340 - + Type - 374 + 341 - + Label - 375 + 342 - + Address - 376 + 343 - + ID - 378 + 345 - + Exporting Failed - 381 + 348 - + There was an error trying to save the transaction history to %1. - 381 + 348 - + Exporting Successful - 385 + 352 - + The transaction history was successfully saved to %1. - 385 + 352 - + Range: - 558 + 527 - + to - 566 + 535 - + No wallet has been loaded. Go to File > Open Wallet to load a wallet. - OR - 45 - + Create a new wallet 50 - + Error 201 211 229 - + Unable to decode PSBT from clipboard (invalid base64) 201 - + Load Transaction Data 207 - + Partially Signed Transaction (*.psbt) 208 - + PSBT file must be smaller than 100 MiB 211 - + Unable to decode PSBT 229 @@ -4438,113 +4383,113 @@ Go to File > Open Wallet to load a wallet. - + Send Coins - 224 - 237 + 218 + 231 - + Fee bump error - 491 - 540 - 560 - 565 + 476 + 525 + 545 + 550 - + Increasing transaction fee failed - 491 + 476 - + Do you want to increase the fee? - 498 + 483 Asks a user if they would like to manually increase the fee of a transaction that has already been created. - + Current fee: - 502 + 487 - + Increase: - 506 + 491 - + New fee: - 510 + 495 - + 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. - 518 + 503 - + Confirm fee bump - 523 + 508 - + Can't draft transaction. - 540 + 525 - + PSBT copied - 547 + 532 - + Fee-bump PSBT copied to clipboard - 547 + 532 - + Can't sign transaction. - 560 + 545 - + Could not commit transaction - 565 + 550 - + Signer error - 578 + 563 - + Can't display address - 581 + 566 - + &Export 50 - + Export the data in the current tab to a file 51 - + Backup Wallet 214 - + Wallet Data 216 Name of the wallet data file format. - + Backup Failed 222 - + There was an error trying to save the wallet data to %1. 222 - + Backup Successful 226 - + The wallet data was successfully saved to %1. 226 - + Cancel 263 @@ -4552,1047 +4497,1043 @@ Go to File > Open Wallet to load a wallet. - + The %s developers 12 - - %s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup. - 13 - - + %s failed to validate the -assumeutxo snapshot state. This indicates a hardware problem, or a bug in the software, or a bad software modification that allowed an invalid snapshot to be loaded. As a result of this, the node will shut down and stop using any state that was built on the snapshot, resetting the chain height from %d to %d. On the next restart, the node will resume syncing from %d without using any snapshot data. Please report this incident to %s, including how you obtained the snapshot. The invalid snapshot chainstate will be left on disk in case it is helpful in diagnosing the issue that caused this error. - 16 + 13 - + %s request to listen on port %u. This port is considered "bad" and thus it is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for details and a full list. - 28 - - - Cannot downgrade wallet from version %i to version %i. Wallet version unchanged. - 32 - - - 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. - 38 + 25 - + Disk space for %s may not accommodate the block files. Approximately %u GB of data will be stored in this directory. - 42 + 32 - + Distributed under the MIT software license, see the accompanying file %s or %s - 45 + 35 - + Error loading wallet. Wallet requires blocks to be downloaded, and software does not currently support loading wallets while blocks are being downloaded out of order when using assumeutxo snapshots. Wallet should be able to load successfully after node sync reaches height %s - 51 + 44 - + Error reading %s! Transaction data may be missing or incorrect. Rescanning wallet. - 59 + 52 - + Error starting/committing db txn for wallet transactions removal process - 62 + 55 - + Error: Dumpfile format record is incorrect. Got "%s", expected "format". - 67 + 60 - + Error: Dumpfile identifier record is incorrect. Got "%s", expected "%s". - 69 + 62 - + Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s - 71 + 67 - - Error: Legacy wallets only support the "legacy", "p2sh-segwit", and "bech32" address types - 77 - - + Error: Unable to produce descriptors for this legacy wallet. Make sure to provide the wallet's passphrase if it is encrypted. - 83 + 76 - + File %s already exists. If you are sure this is what you want, move it out of the way first. - 98 + 91 - + Invalid or corrupt peers.dat (%s). If you believe this is a bug, please report it to %s. As a workaround, you can move the file (%s) out of the way (rename, move, or delete) to have a new one created on the next start. - 112 + 105 - + Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets - 116 + 109 - + More than one onion bind address is provided. Using %s for the automatically created Tor onion service. - 123 + 116 - + No dump file provided. To use createfromdump, -dumpfile=<filename> must be provided. - 126 + 119 - + No dump file provided. To use dump, -dumpfile=<filename> must be provided. - 129 - - - No wallet file format provided. To use createfromdump, -format=<format> must be provided. - 131 - - - Option '-upnp' is set but UPnP support was dropped in version 29.0. Consider using '-natpmp' instead. - 134 + 122 - + Please contribute if you find %s useful. Visit %s for further information about the software. - 150 + 146 - + Prune configured below the minimum of %d MiB. Please use a higher number. - 153 + 149 - + Prune mode is incompatible with -reindex-chainstate. Use full -reindex instead. - 155 - - - Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node) - 158 + 151 - + Rename of '%s' -> '%s' failed. You should resolve this by manually moving or deleting the invalid snapshot directory %s, otherwise you will encounter the same error again on the next startup. - 164 + 160 - + SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported - 168 + 164 - + The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct - 179 + 175 - + The transaction amount is too small to send after the fee has been deducted - 195 - - - 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 - 197 + 191 - + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - 201 + 193 - + This is the maximum transaction fee you pay (in addition to the normal fee) to prioritize partial spend avoidance over regular coin selection. - 204 + 196 - + This is the transaction fee you may discard if change is smaller than dust at this level - 207 + 199 - + This is the transaction fee you may pay when fee estimates are not available. - 210 + 202 - + Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments. - 212 + 204 - + Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate. - 221 - - - Unknown wallet file format "%s" provided. Please provide one of "bdb" or "sqlite". - 231 + 213 - + Unsupported category-specific logging level %1$s=%2$s. Expected %1$s=<category>:<loglevel>. Valid categories: %3$s. Valid loglevels: %4$s. - 239 + 228 - + Unsupported chainstate database format found. Please restart with -reindex-chainstate. This will rebuild the chainstate database. - 242 - - - Wallet created successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. - 245 - - - Wallet loaded successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. Legacy wallets can be migrated to a descriptor wallet with migratewallet. - 249 - - - Warning: Dumpfile wallet format "%s" does not match command line specified format "%s". - 254 + 231 - + Warning: Private keys detected in wallet {%s} with disabled private keys - 257 + 234 - + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. - 259 + 236 - + Witness data for blocks after height %d requires validation. Please restart with -reindex. - 262 + 239 - + You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain - 265 + 242 - + %s is set very high! - 284 + 261 - + -maxmempool must be at least %d MB - 285 + 262 - + Cannot obtain a lock on directory %s. %s is probably already running. - 289 + 268 - + Cannot resolve -%s address: '%s' - 290 + 269 - + Cannot set -forcednsseed to true when setting -dnsseed to false. - 291 + 270 - + Cannot set -peerblockfilters without -blockfilterindex. - 292 + 271 - + %s is set very high! Fees this large could be paid on a single transaction. - 26 + 23 - + Cannot provide specific connections and have addrman find outgoing connections at the same time. - 35 + 29 - + Error loading %s: External signer wallet being loaded without external signer support compiled - 48 + 38 - + Error reading %s! All keys read correctly, but transaction data or address metadata may be missing or incorrect. - 56 + 49 - + Error: Address book data in wallet cannot be identified to belong to migrated wallets - 64 + 57 - + Error: Duplicate descriptors created during migration. Your wallet may be corrupted. - 74 + 70 - + Error: Transaction %s in wallet cannot be identified to belong to migrated wallets - 80 - - - Failed to calculate bump fees, because unconfirmed UTXOs depend on enormous cluster of unconfirmed transactions. - 86 + 73 - + Failed to remove snapshot chainstate dir (%s). Manually remove it before restarting. - 89 + 82 - + Failed to rename invalid peers.dat file. Please move or delete it and try again. - 92 + 85 - + Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable %s. - 95 + 88 - + Flushing block file to disk failed. This is likely the result of an I/O error. - 101 + 94 - + Flushing undo file to disk failed. This is likely the result of an I/O error. - 104 + 97 - + Incompatible options: -dnsseed=1 was explicitly specified, but -onlynet forbids connections to IPv4/IPv6 - 106 + 99 - + Invalid amount for %s=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions) - 109 + 102 - + Maximum transaction weight is less than transaction weight without inputs - 119 + 112 - + Maximum transaction weight is too low, can not accommodate change output - 121 + 114 - + + Option '-checkpoints' is set but checkpoints were removed. This option has no effect. + 124 + + + Option '-maxorphantx' is set but no longer has any effect (see release notes). Please remove it from your configuration. + 127 + + + Options '-datacarrier' or '-datacarriersize' are set but are marked as deprecated. They will be removed in a future version. + 130 + + Outbound connections restricted to CJDNS (-onlynet=cjdns) but -cjdnsreachable is not provided - 137 + 133 - + Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is explicitly forbidden: -onion=0 - 140 + 136 - + Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is not provided: none of -proxy, -onion or -listenonion is given - 143 + 139 - + Outbound connections restricted to i2p (-onlynet=i2p) but -i2psam is not provided - 147 + 143 - + + Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of a pruned node) + 154 + + Rename of '%s' -> '%s' failed. Cannot clean up the background chainstate leveldb directory. - 161 + 157 - + Specified -blockmaxweight (%d) exceeds consensus maximum block weight (%d) - 171 + 167 - + Specified -blockreservedweight (%d) exceeds consensus maximum block weight (%d) - 173 + 169 - + Specified -blockreservedweight (%d) is lower than minimum safety value of (%d) - 176 + 172 - + The combination of the pre-selected inputs and the wallet automatic inputs selection exceeds the transaction maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - 184 + 180 - + The inputs size exceeds the maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - 188 + 184 - + The preselected coins total amount does not cover the transaction target. Please allow other inputs to be automatically selected or include more coins manually - 191 - - - Transaction requires one destination of non-0 value, a non-0 feerate, or a pre-selected input - 215 + 187 - + UTXO snapshot failed to validate. Restart to resume normal initial block download, or try loading a different snapshot. - 218 + 210 - + Unconfirmed UTXOs are available, but spending them creates a chain of transactions that will be rejected by the mempool - 224 + 216 - + Unexpected legacy entry in descriptor wallet found. Loading wallet %s The wallet might have been tampered with or created with malicious intent. - 227 - - - Unrecognized descriptor found. Loading wallet %s - -The wallet might had been created on a newer version. -Please try running the latest software version. - - 234 + 219 - + Your computer's date and time appear to be more than %d minutes out of sync with the network, this may lead to consensus failure. After you've confirmed your computer's clock, this message should no longer appear when you restart your node. Without a restart, it should stop showing automatically after you've connected to a sufficient number of new outbound peers, which may take some time. You can inspect the `timeoffset` field of the `getpeerinfo` and `getnetworkinfo` RPC methods to get more info. - 268 + 245 - + Unable to cleanup failed migration - 276 + 253 - + Unable to restore backup of wallet. - 279 + 256 - + whitebind may only be used for incoming connections ("out" was passed) - 282 + 259 - + + -paytxfee is deprecated and will be fully removed in v31.0. + 263 + + A fatal internal error occurred, see debug.log for details: - 286 + 264 - + Assumeutxo data not found for the given blockhash '%s'. - 287 + 265 - + Block verification was interrupted - 288 + 266 - + + Cannot add WalletDescriptor to a non-descriptor wallet + 267 + + Cannot write to directory '%s'; check permissions. - 293 + 272 - + Config setting for %s only applied on %s network when in [%s] section. - 294 + 273 - + Copyright (C) %i-%i - 295 + 274 - + Corrupt block found indicating potential hardware failure. - 296 + 275 - + Corrupted block database detected - 297 + 276 - + Could not find asmap file %s - 298 + 277 - + + Could not generate scriptPubKeys (cache is empty) + 278 + + Could not parse asmap file %s - 299 + 279 - + + Could not top up scriptPubKeys + 280 + + Disk space is too low! - 300 + 281 - + Done loading - 302 + 283 - + Dump file %s does not exist. - 303 + 284 - + Elliptic curve cryptography sanity check failure. %s is shutting down. - 304 + 285 - + Error creating %s - 305 + 286 - + Error initializing block database - 306 - - - Error initializing wallet database environment %s! - 307 + 287 - + Error loading %s - 308 + 288 - + Error loading %s: Private keys can only be disabled during creation - 309 + 289 - + Error loading %s: Wallet corrupted - 310 + 290 - + Error loading %s: Wallet requires newer version of %s - 311 + 291 - + Error loading block database - 312 + 292 - + Error loading databases - 313 + 293 - + Error opening block database - 314 + 294 - + Error opening coins database - 315 + 295 - + Error reading configuration file: %s - 316 + 296 - + Error reading from database, shutting down. - 317 + 297 - + Error reading next record from wallet database - 318 + 298 - + Error: Cannot extract destination from the generated scriptpubkey - 319 + 299 - + Error: Couldn't create cursor into database - 322 + 302 - + Error: Disk space is low for %s - 323 + 303 - + Error: Dumpfile checksum does not match. Computed %s, expected %s - 324 + 304 - + Error: Failed to create new watchonly wallet - 325 + 305 - + Error: Got key that was not hex: %s - 326 + 306 - + Error: Got value that was not hex: %s - 327 + 307 - + Error: Keypool ran out, please call keypoolrefill first - 328 + 308 - + Error: Missing checksum - 329 + 309 - + Error: No %s addresses available. - 330 + 310 - + + Error: Not all address book records were migrated + 311 + + + Error: Not all transaction records were migrated + 312 + + Error: This wallet already uses SQLite - 331 + 313 - + Error: This wallet is already a descriptor wallet - 332 + 314 - + Error: Unable to begin reading all records in the database - 333 + 315 - + Error: Unable to make a backup of your wallet - 334 + 316 - + Error: Unable to parse version %u as a uint32_t - 335 + 317 - + Error: Unable to read all records in the database - 336 + 318 - + Error: Unable to read wallet's best block locator record - 337 + 319 - + Error: Unable to remove watchonly address book data - 338 + 320 - + Error: Unable to write data to disk for wallet %s - 339 + 321 - + Error: Unable to write record to new wallet - 340 + 322 - + Error: Unable to write solvable wallet best block locator record - 341 + 323 - + Error: Unable to write watchonly wallet best block locator record - 342 + 324 - + Error: database transaction cannot be executed for wallet %s - 345 + 327 - + + Failed to acquire rescan reserver during wallet initialization + 328 + + + Failed to close block undo file. + 329 + + + Failed to close file when writing block. + 330 + + Failed to connect best block (%s). - 346 + 331 - + Failed to disconnect block. - 347 + 332 - + Failed to listen on any port. Use -listen=0 if you want this. - 348 + 333 - + Failed to read block. - 349 + 334 - + Failed to rescan the wallet during initialization - 350 - - - Failed to start indexes, shutting down.. - 351 + 335 - + Failed to verify database - 352 + 337 - + Failed to write block. - 353 + 338 - + Failed to write to block index database. - 354 + 339 - + Failed to write to coin database. - 355 + 340 - + Failed to write undo data. - 356 + 341 - + Failure removing transaction: %s - 357 + 342 - + Fee rate (%s) is lower than the minimum fee rate setting (%s) - 358 + 343 - + Ignoring duplicate -wallet %s. - 359 - - - Importing… - 360 + 344 - + Incorrect or no genesis block found. Wrong datadir for network? - 361 + 345 - + Initialization sanity check failed. %s is shutting down. - 362 + 346 - + Input not found or already spent - 363 + 347 - + Insufficient dbcache for block verification - 364 + 348 - + Insufficient funds - 365 + 349 - + Invalid -i2psam address or hostname: '%s' - 366 + 350 - + Invalid -onion address or hostname: '%s' - 367 + 351 - + Invalid -proxy address or hostname: '%s' - 368 + 353 - + Invalid P2P permission: '%s' - 369 + 354 - + Invalid amount for %s=<amount>: '%s' (must be at least %s) - 370 + 355 - + Invalid amount for %s=<amount>: '%s' - 371 + 356 - + Invalid amount for -%s=<amount>: '%s' - 372 + 357 - + Invalid netmask specified in -whitelist: '%s' - 373 + 358 - + Invalid port specified in %s: '%s' - 374 - - - Invalid pre-selected input %s - 375 + 359 - + Listening for incoming connections failed (listen returned error %s) - 376 + 360 - + Loading P2P addresses… - 377 + 361 - + Loading banlist… - 378 + 362 - + Loading block index… - 379 + 363 - + Loading wallet… - 380 + 364 - + Maximum transaction weight must be between %d and %d - 381 + 365 - + Missing amount - 382 + 366 - + Missing solving data for estimating transaction size - 383 + 367 - + Need to specify a port with -whitebind: '%s' - 384 + 368 - + No addresses available - 385 + 369 - + Not found pre-selected input %s - 387 + 371 - + Not solvable pre-selected input %s - 388 + 372 - + Only direction was set, no permissions: '%s' - 389 + 373 - + Prune cannot be configured with a negative value. - 390 + 374 - + Prune mode is incompatible with -txindex. - 391 + 375 - + Pruning blockstore… - 392 + 376 - + Reducing -maxconnections from %d to %d, because of system limitations. - 393 + 377 - + Replaying blocks… - 394 + 378 - + Rescanning… - 395 + 379 - + SQLiteDatabase: Failed to execute statement to verify database: %s - 396 + 380 - + SQLiteDatabase: Failed to prepare statement to verify database: %s - 397 + 381 - + SQLiteDatabase: Failed to read database verification error: %s - 398 + 382 - + SQLiteDatabase: Unexpected application id. Expected %u, got %u - 399 + 383 - + Section [%s] is not recognized. - 400 + 384 - + Signer did not echo address - 403 + 387 - + Signer echoed unexpected address %s - 404 + 388 - + Signer returned error: %s - 405 + 389 - + Signing transaction failed - 406 + 390 - + Specified -walletdir "%s" does not exist - 407 + 391 - + Specified -walletdir "%s" is a relative path - 408 + 392 - + Specified -walletdir "%s" is not a directory - 409 + 393 - + Specified blocks directory "%s" does not exist. - 410 + 394 - + Specified data directory "%s" does not exist. - 411 + 395 - + Starting network threads… - 412 + 396 - + System error while flushing: %s - 413 + 397 - + System error while loading external block file: %s - 414 + 398 - + System error while saving block to disk: %s - 415 + 399 - + The source code is available from %s. - 416 + 400 - + The specified config file %s does not exist - 417 + 401 - + The transaction amount is too small to pay the fee - 418 + 402 - + The transactions removal process can only be executed within a db txn - 419 + 403 - + The wallet will avoid paying less than the minimum relay fee. - 420 + 404 - + There is no ScriptPubKeyManager for this address - 421 + 405 - + This is experimental software. - 422 + 406 - + This is the minimum transaction fee you pay on every transaction. - 423 + 407 - + This is the transaction fee you will pay if you send a transaction. - 424 + 408 - + Transaction %s does not belong to this wallet - 425 + 409 - + Transaction amount too small - 426 + 410 - + Transaction amounts must not be negative - 427 + 411 - + Transaction change output index out of range - 428 + 412 - + Transaction must have at least one recipient - 429 + 413 - + Transaction needs a change address, but we can't generate it. - 430 + 414 - + Transaction too large - 431 + 415 - + Unable to bind to %s on this computer (bind returned error %s) - 432 + 416 - + Unable to bind to %s on this computer. %s is probably already running. - 433 + 417 - + Unable to create the PID file '%s': %s - 434 + 418 - + Unable to find UTXO for external input - 435 - - - Unable to generate initial keys - 436 - - - Unable to generate keys - 437 + 419 - + Unable to open %s for writing - 438 + 420 - + Unable to parse -maxuploadtarget: '%s' - 439 + 421 - + Unable to start HTTP server. See debug log for details. - 440 - - - Unable to unload the wallet before migrating - 441 + 422 - + Unknown -blockfilterindex value %s. - 442 + 423 - + Unknown address type '%s' - 443 + 424 - + Unknown change type '%s' - 444 + 425 - + Unknown network specified in -onlynet: '%s' - 445 + 426 - + Unknown new rules activated (versionbit %i) - 446 + 427 - + Unrecognised option "%s" provided in -test=<option>. - 447 + 428 - + Unsupported global logging level %s=%s. Valid values: %s. - 448 + 430 - + Wallet file creation failed: %s - 453 + 435 - + acceptstalefeeestimates is not supported on %s chain. - 455 + 437 - + Unsupported logging category %s=%s. - 449 + 431 + + + Error loading %s: Wallet is a legacy wallet. Please migrate to a descriptor wallet using the migration tool (migratewallet RPC). + 41 + + + Error: Dumpfile specifies an unsupported database format (%s). Only sqlite database dumps are supported + 64 + + + Failed to calculate bump fees, because unconfirmed UTXOs depend on an enormous cluster of unconfirmed transactions. + 79 + + + Transaction requires one destination of non-zero value, a non-zero feerate, or a pre-selected input + 207 + + + Unrecognized descriptor found. Loading wallet %s + +The wallet might have been created on a newer version. +Please try running the latest software version. + + 223 - + Do you want to rebuild the databases now? - 301 + 282 - + Error: Could not add watchonly tx %s to watchonly wallet - 320 + 300 - + Error: Could not delete watchonly transactions. - 321 + 301 - + Error: Wallet does not exist - 343 + 325 - + Error: cannot remove legacy wallet records - 344 + 326 + + + Failed to start indexes, shutting down… + 336 - + + Invalid -proxy address or hostname, ends with '=': '%s' + 352 + + Not enough file descriptors available. %d available, %d required. - 386 + 370 + + + Unrecognized network in -proxy='%s': '%s' + 429 - + User Agent comment (%s) contains unsafe characters. - 450 + 432 - + Verifying blocks… - 451 + 433 - + Verifying wallet(s)… - 452 + 434 - + Wallet needed to be rewritten: restart %s to complete - 454 + 436 - + Settings file could not be read - 401 + 385 - + Settings file could not be written - 402 + 386 From 4bff4ce561b06de155d748e33ba798cff8b631d8 Mon Sep 17 00:00:00 2001 From: fanquake Date: Thu, 7 Aug 2025 17:04:20 +0100 Subject: [PATCH 0120/2775] contrib: drop bitcoin-util exception from FORTIFY check It's got memcpy_chk. --- contrib/guix/security-check.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/contrib/guix/security-check.py b/contrib/guix/security-check.py index 8e8285fe4e7f..be2e0cfbe2af 100755 --- a/contrib/guix/security-check.py +++ b/contrib/guix/security-check.py @@ -123,9 +123,6 @@ def check_ELF_CONTROL_FLOW(binary) -> bool: def check_ELF_FORTIFY(binary) -> bool: - # bitcoin-util does not currently contain any fortified functions - if 'Bitcoin Core bitcoin-util utility version ' in binary.strings: - return True # bitcoin wrapper does not currently contain any fortified functions if '--monolithic' in binary.strings: return True From 2907b58834ab011f7dd0c42d323e440abd227c25 Mon Sep 17 00:00:00 2001 From: Antoine Poinsot Date: Mon, 4 Aug 2025 13:11:33 -0400 Subject: [PATCH 0121/2775] policy: introduce a helper to detect whether a transaction spends Segwit outputs We will use this helper in later commits to detect witness stripping without having to execute every input Script three times in a row. --- src/policy/policy.cpp | 36 ++++++++ src/policy/policy.h | 5 ++ src/test/transaction_tests.cpp | 155 +++++++++++++++++++++++++++++++++ 3 files changed, 196 insertions(+) diff --git a/src/policy/policy.cpp b/src/policy/policy.cpp index 48f2a6a74464..fdb6bc5f3411 100644 --- a/src/policy/policy.cpp +++ b/src/policy/policy.cpp @@ -337,6 +337,42 @@ bool IsWitnessStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs) return true; } +bool SpendsNonAnchorWitnessProg(const CTransaction& tx, const CCoinsViewCache& prevouts) +{ + if (tx.IsCoinBase()) { + return false; + } + + int version; + std::vector program; + for (const auto& txin: tx.vin) { + const auto& prev_spk{prevouts.AccessCoin(txin.prevout).out.scriptPubKey}; + + // Note this includes not-yet-defined witness programs. + if (prev_spk.IsWitnessProgram(version, program) && !prev_spk.IsPayToAnchor(version, program)) { + return true; + } + + // For P2SH extract the redeem script and check if it spends a non-Taproot witness program. Note + // this is fine to call EvalScript (as done in AreInputsStandard/IsWitnessStandard) because this + // function is only ever called after IsStandardTx, which checks the scriptsig is pushonly. + if (prev_spk.IsPayToScriptHash()) { + // If EvalScript fails or results in an empty stack, the transaction is invalid by consensus. + std::vector > stack; + if (!EvalScript(stack, txin.scriptSig, SCRIPT_VERIFY_NONE, BaseSignatureChecker{}, SigVersion::BASE) + || stack.empty()) { + continue; + } + const CScript redeem_script{stack.back().begin(), stack.back().end()}; + if (redeem_script.IsWitnessProgram(version, program)) { + return true; + } + } + } + + return false; +} + int64_t GetVirtualTransactionSize(int64_t nWeight, int64_t nSigOpCost, unsigned int bytes_per_sigop) { return (std::max(nWeight, nSigOpCost * bytes_per_sigop) + WITNESS_SCALE_FACTOR - 1) / WITNESS_SCALE_FACTOR; diff --git a/src/policy/policy.h b/src/policy/policy.h index f9a18561bcea..ad787630a45f 100644 --- a/src/policy/policy.h +++ b/src/policy/policy.h @@ -166,6 +166,11 @@ bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs) * Also enforce a maximum stack item size limit and no annexes for tapscript spends. */ bool IsWitnessStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs); +/** + * Check whether this transaction spends any witness program but P2A, including not-yet-defined ones. + * May return `false` early for consensus-invalid transactions. + */ +bool SpendsNonAnchorWitnessProg(const CTransaction& tx, const CCoinsViewCache& prevouts); /** Compute the virtual transaction size (weight reinterpreted as bytes). */ int64_t GetVirtualTransactionSize(int64_t nWeight, int64_t nSigOpCost, unsigned int bytes_per_sigop); diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp index 5f03641e99e4..137ec7feb507 100644 --- a/src/test/transaction_tests.cpp +++ b/src/test/transaction_tests.cpp @@ -1149,4 +1149,159 @@ BOOST_AUTO_TEST_CASE(max_standard_legacy_sigops) BOOST_CHECK(!::AreInputsStandard(CTransaction(tx_max_sigops), coins)); } +/** Sanity check the return value of SpendsNonAnchorWitnessProg for various output types. */ +BOOST_AUTO_TEST_CASE(spends_witness_prog) +{ + CCoinsView coins_dummy; + CCoinsViewCache coins(&coins_dummy); + CKey key; + key.MakeNewKey(true); + const CPubKey pubkey{key.GetPubKey()}; + CMutableTransaction tx_create{}, tx_spend{}; + tx_create.vout.emplace_back(0, CScript{}); + tx_spend.vin.emplace_back(Txid{}, 0); + std::vector> sol_dummy; + + // CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, + // WitnessV1Taproot, PayToAnchor, WitnessUnknown. + static_assert(std::variant_size_v == 9); + + // Go through all defined output types and sanity check SpendsNonAnchorWitnessProg. + + // P2PK + tx_create.vout[0].scriptPubKey = GetScriptForDestination(PubKeyDestination{pubkey}); + BOOST_CHECK_EQUAL(Solver(tx_create.vout[0].scriptPubKey, sol_dummy), TxoutType::PUBKEY); + tx_spend.vin[0].prevout.hash = tx_create.GetHash(); + AddCoins(coins, CTransaction{tx_create}, 0, false); + BOOST_CHECK(!::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + + // P2PKH + tx_create.vout[0].scriptPubKey = GetScriptForDestination(PKHash{pubkey}); + BOOST_CHECK_EQUAL(Solver(tx_create.vout[0].scriptPubKey, sol_dummy), TxoutType::PUBKEYHASH); + tx_spend.vin[0].prevout.hash = tx_create.GetHash(); + AddCoins(coins, CTransaction{tx_create}, 0, false); + BOOST_CHECK(!::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + + // P2SH + auto redeem_script{CScript{} << OP_1 << OP_CHECKSIG}; + tx_create.vout[0].scriptPubKey = GetScriptForDestination(ScriptHash{redeem_script}); + BOOST_CHECK_EQUAL(Solver(tx_create.vout[0].scriptPubKey, sol_dummy), TxoutType::SCRIPTHASH); + tx_spend.vin[0].prevout.hash = tx_create.GetHash(); + tx_spend.vin[0].scriptSig = CScript{} << OP_0 << ToByteVector(redeem_script); + AddCoins(coins, CTransaction{tx_create}, 0, false); + BOOST_CHECK(!::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + tx_spend.vin[0].scriptSig.clear(); + + // native P2WSH + const auto witness_script{CScript{} << OP_12 << OP_HASH160 << OP_DUP << OP_EQUAL}; + tx_create.vout[0].scriptPubKey = GetScriptForDestination(WitnessV0ScriptHash{witness_script}); + BOOST_CHECK_EQUAL(Solver(tx_create.vout[0].scriptPubKey, sol_dummy), TxoutType::WITNESS_V0_SCRIPTHASH); + tx_spend.vin[0].prevout.hash = tx_create.GetHash(); + AddCoins(coins, CTransaction{tx_create}, 0, false); + BOOST_CHECK(::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + + // P2SH-wrapped P2WSH + redeem_script = tx_create.vout[0].scriptPubKey; + tx_create.vout[0].scriptPubKey = GetScriptForDestination(ScriptHash(redeem_script)); + BOOST_CHECK_EQUAL(Solver(tx_create.vout[0].scriptPubKey, sol_dummy), TxoutType::SCRIPTHASH); + tx_spend.vin[0].prevout.hash = tx_create.GetHash(); + tx_spend.vin[0].scriptSig = CScript{} << ToByteVector(redeem_script); + AddCoins(coins, CTransaction{tx_create}, 0, false); + BOOST_CHECK(::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + tx_spend.vin[0].scriptSig.clear(); + BOOST_CHECK(!::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + + // native P2WPKH + tx_create.vout[0].scriptPubKey = GetScriptForDestination(WitnessV0KeyHash{pubkey}); + BOOST_CHECK_EQUAL(Solver(tx_create.vout[0].scriptPubKey, sol_dummy), TxoutType::WITNESS_V0_KEYHASH); + tx_spend.vin[0].prevout.hash = tx_create.GetHash(); + AddCoins(coins, CTransaction{tx_create}, 0, false); + BOOST_CHECK(::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + + // P2SH-wrapped P2WPKH + redeem_script = tx_create.vout[0].scriptPubKey; + tx_create.vout[0].scriptPubKey = GetScriptForDestination(ScriptHash(redeem_script)); + BOOST_CHECK_EQUAL(Solver(tx_create.vout[0].scriptPubKey, sol_dummy), TxoutType::SCRIPTHASH); + tx_spend.vin[0].prevout.hash = tx_create.GetHash(); + tx_spend.vin[0].scriptSig = CScript{} << ToByteVector(redeem_script); + AddCoins(coins, CTransaction{tx_create}, 0, false); + BOOST_CHECK(::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + tx_spend.vin[0].scriptSig.clear(); + BOOST_CHECK(!::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + + // P2TR + tx_create.vout[0].scriptPubKey = GetScriptForDestination(WitnessV1Taproot{XOnlyPubKey{pubkey}}); + BOOST_CHECK_EQUAL(Solver(tx_create.vout[0].scriptPubKey, sol_dummy), TxoutType::WITNESS_V1_TAPROOT); + tx_spend.vin[0].prevout.hash = tx_create.GetHash(); + AddCoins(coins, CTransaction{tx_create}, 0, false); + BOOST_CHECK(::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + + // P2SH-wrapped P2TR (undefined, non-standard) + redeem_script = tx_create.vout[0].scriptPubKey; + tx_create.vout[0].scriptPubKey = GetScriptForDestination(ScriptHash(redeem_script)); + BOOST_CHECK_EQUAL(Solver(tx_create.vout[0].scriptPubKey, sol_dummy), TxoutType::SCRIPTHASH); + tx_spend.vin[0].prevout.hash = tx_create.GetHash(); + tx_spend.vin[0].scriptSig = CScript{} << ToByteVector(redeem_script); + AddCoins(coins, CTransaction{tx_create}, 0, false); + BOOST_CHECK(::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + tx_spend.vin[0].scriptSig.clear(); + BOOST_CHECK(!::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + + // P2A + tx_create.vout[0].scriptPubKey = GetScriptForDestination(PayToAnchor{}); + BOOST_CHECK_EQUAL(Solver(tx_create.vout[0].scriptPubKey, sol_dummy), TxoutType::ANCHOR); + tx_spend.vin[0].prevout.hash = tx_create.GetHash(); + AddCoins(coins, CTransaction{tx_create}, 0, false); + BOOST_CHECK(!::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + + // P2SH-wrapped P2A (undefined, non-standard) + redeem_script = tx_create.vout[0].scriptPubKey; + tx_create.vout[0].scriptPubKey = GetScriptForDestination(ScriptHash(redeem_script)); + BOOST_CHECK_EQUAL(Solver(tx_create.vout[0].scriptPubKey, sol_dummy), TxoutType::SCRIPTHASH); + tx_spend.vin[0].prevout.hash = tx_create.GetHash(); + tx_spend.vin[0].scriptSig = CScript{} << ToByteVector(redeem_script); + AddCoins(coins, CTransaction{tx_create}, 0, false); + BOOST_CHECK(::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + tx_spend.vin[0].scriptSig.clear(); + + // Undefined version 1 witness program + tx_create.vout[0].scriptPubKey = GetScriptForDestination(WitnessUnknown{1, {0x42, 0x42}}); + BOOST_CHECK_EQUAL(Solver(tx_create.vout[0].scriptPubKey, sol_dummy), TxoutType::WITNESS_UNKNOWN); + tx_spend.vin[0].prevout.hash = tx_create.GetHash(); + AddCoins(coins, CTransaction{tx_create}, 0, false); + BOOST_CHECK(::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + + // P2SH-wrapped undefined version 1 witness program + redeem_script = tx_create.vout[0].scriptPubKey; + tx_create.vout[0].scriptPubKey = GetScriptForDestination(ScriptHash(redeem_script)); + BOOST_CHECK_EQUAL(Solver(tx_create.vout[0].scriptPubKey, sol_dummy), TxoutType::SCRIPTHASH); + tx_spend.vin[0].prevout.hash = tx_create.GetHash(); + tx_spend.vin[0].scriptSig = CScript{} << ToByteVector(redeem_script); + AddCoins(coins, CTransaction{tx_create}, 0, false); + BOOST_CHECK(::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + tx_spend.vin[0].scriptSig.clear(); + BOOST_CHECK(!::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + + // Various undefined version >1 32-byte witness programs. + const auto program{ToByteVector(XOnlyPubKey{pubkey})}; + for (int i{2}; i <= 16; ++i) { + tx_create.vout[0].scriptPubKey = GetScriptForDestination(WitnessUnknown{i, program}); + BOOST_CHECK_EQUAL(Solver(tx_create.vout[0].scriptPubKey, sol_dummy), TxoutType::WITNESS_UNKNOWN); + tx_spend.vin[0].prevout.hash = tx_create.GetHash(); + AddCoins(coins, CTransaction{tx_create}, 0, false); + BOOST_CHECK(::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + + // It's also detected within P2SH. + redeem_script = tx_create.vout[0].scriptPubKey; + tx_create.vout[0].scriptPubKey = GetScriptForDestination(ScriptHash(redeem_script)); + BOOST_CHECK_EQUAL(Solver(tx_create.vout[0].scriptPubKey, sol_dummy), TxoutType::SCRIPTHASH); + tx_spend.vin[0].prevout.hash = tx_create.GetHash(); + tx_spend.vin[0].scriptSig = CScript{} << ToByteVector(redeem_script); + AddCoins(coins, CTransaction{tx_create}, 0, false); + BOOST_CHECK(::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + tx_spend.vin[0].scriptSig.clear(); + BOOST_CHECK(!::SpendsNonAnchorWitnessProg(CTransaction{tx_spend}, coins)); + } +} + BOOST_AUTO_TEST_SUITE_END() From 27aefac42505e9c083fa131d3d7edbec7803f3c0 Mon Sep 17 00:00:00 2001 From: Antoine Poinsot Date: Wed, 30 Jul 2025 15:56:57 -0400 Subject: [PATCH 0122/2775] validation: detect witness stripping without re-running Script checks Since it was introduced in 4eb515574e1012bc8ea5dafc3042dcdf4c766f26 (#18044), the detection of a stripped witness relies on running the Script checks 3 times. In the worst case, this consists in running Script validation 3 times for every single input. Detection of a stripped witness is necessary because in this case wtxid==txid, and the transaction's wtxid must not be added to the reject filter or it could allow a malicious peer to interfere with txid-based orphan resolution as used in 1p1c package relay. However it is not necessary to run Script validation to detect a stripped witness (much less so doing it 3 times in a row). There are 3 types of witness program: defined program types (Taproot, P2WPKH, P2WSH), undefined types, and the Pay-to-anchor carve-out. For defined program types, Script validation with an empty witness will always fail (by consensus). For undefined program types, Script validation is always going to fail regardless of the witness (by standardness). For P2A, an empty witness is never going to lead to a failure. Therefore it holds that we can always detect a stripped witness without re-running Script validation. However this might lead to more "false positives" (cases where we return witness stripping for an otherwise invalid transaction) than the existing implementation. For instance a transaction with one P2PKH input with an invalid signature and one P2WPKH input with its witness stripped. The existing implementation would treat it as consensus invalid while the implementation in this commit would always consider it witness stripped. --- src/validation.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/validation.cpp b/src/validation.cpp index 09e04ff0ddb8..078f88d1f207 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -1254,13 +1254,8 @@ bool MemPoolAccept::PolicyScriptChecks(const ATMPArgs& args, Workspace& ws) // Check input scripts and signatures. // This is done last to help prevent CPU exhaustion denial-of-service attacks. if (!CheckInputScripts(tx, state, m_view, scriptVerifyFlags, true, false, ws.m_precomputed_txdata, GetValidationCache())) { - // SCRIPT_VERIFY_CLEANSTACK requires SCRIPT_VERIFY_WITNESS, so we - // need to turn both off, and compare against just turning off CLEANSTACK - // to see if the failure is specifically due to witness validation. - TxValidationState state_dummy; // Want reported failures to be from first CheckInputScripts - if (!tx.HasWitness() && CheckInputScripts(tx, state_dummy, m_view, scriptVerifyFlags & ~(SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_CLEANSTACK), true, false, ws.m_precomputed_txdata, GetValidationCache()) && - !CheckInputScripts(tx, state_dummy, m_view, scriptVerifyFlags & ~SCRIPT_VERIFY_CLEANSTACK, true, false, ws.m_precomputed_txdata, GetValidationCache())) { - // Only the witness is missing, so the transaction itself may be fine. + // Detect a failure due to a missing witness so that p2p code can handle rejection caching appropriately. + if (!tx.HasWitness() && SpendsNonAnchorWitnessProg(tx, m_view)) { state.Invalid(TxValidationResult::TX_WITNESS_STRIPPED, state.GetRejectReason(), state.GetDebugMessage()); } From db3228042b2278faf7713a6ed40cdbf8e62b8fd4 Mon Sep 17 00:00:00 2001 From: willcl-ark Date: Thu, 5 Dec 2024 22:06:13 +0000 Subject: [PATCH 0123/2775] util: detect and warn when using exFAT on macOS exFAT is known to cause corruption on macOS. See #28552. Therefore we should warn when using this fs format for either the blocks or data directories on macOS. Co-authored-by: l0rinc --- doc/files.md | 7 +++++++ src/init.cpp | 20 ++++++++++++++++++++ src/util/fs_helpers.cpp | 17 +++++++++++++++++ src/util/fs_helpers.h | 17 +++++++++++++++++ 4 files changed, 61 insertions(+) diff --git a/doc/files.md b/doc/files.md index 1e5abdbc4ef0..5ef1e49275df 100644 --- a/doc/files.md +++ b/doc/files.md @@ -18,6 +18,8 @@ - [Installed Files](#installed-files) +- [Filesystem recommendations](#filesystem-recommendations) + ## Data directory location The data directory is the default location where the Bitcoin Core files are stored. @@ -160,3 +162,8 @@ This table describes the files installed by Bitcoin Core across different platfo - *Italicized* files are only installed in source builds if relevant CMake options are enabled. They are not included in binary releases. - README and bitcoin.conf files are included in binary releases but not installed in source builds. - On Windows, binaries have a `.exe` suffix (e.g., `bitcoin-cli.exe`). + +## Filesystem recommendations + +When choosing a filesystem for the data directory (`datadir`) or blocks directory (`blocksdir`) on **macOS**,the `exFAT` filesystem should be avoided. +There have been multiple reports of database corruption and data loss when using this filesystem with Bitcoin Core, see [Issue #31454](https://github.com/bitcoin/bitcoin/issues/31454) for more details. diff --git a/src/init.cpp b/src/init.cpp index ac401bb73e9c..2c2e3b77d508 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1866,6 +1866,26 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) } } +#ifdef __APPLE__ + auto check_and_warn_fs{[&](const fs::path& path, std::string_view desc) { + const auto path_desc{strprintf("%s (\"%s\")", desc, fs::PathToString(path))}; + switch (GetFilesystemType(path)) { + case FSType::EXFAT: + InitWarning(strprintf(_("The %s path uses exFAT, which is known to have intermittent corruption problems on macOS. " + "Move this directory to a different filesystem to avoid data loss."), path_desc)); + break; + case FSType::ERROR: + LogInfo("Failed to detect filesystem type for %s", path_desc); + break; + case FSType::OTHER: + break; + } + }}; + + check_and_warn_fs(args.GetDataDirNet(), "data directory"); + check_and_warn_fs(args.GetBlocksDirPath(), "blocks directory"); +#endif + #if HAVE_SYSTEM const std::string block_notify = args.GetArg("-blocknotify", ""); if (!block_notify.empty()) { diff --git a/src/util/fs_helpers.cpp b/src/util/fs_helpers.cpp index be7f1ee5a272..b5dc1cb33207 100644 --- a/src/util/fs_helpers.cpp +++ b/src/util/fs_helpers.cpp @@ -30,6 +30,11 @@ #include #endif // WIN32 +#ifdef __APPLE__ +#include +#include +#endif + /** Mutex to protect dir_locks. */ static GlobalMutex cs_dir_locks; /** A map that contains all the currently held directory locks. After @@ -298,3 +303,15 @@ std::optional InterpretPermString(const std::string& s) return std::nullopt; } } + +#ifdef __APPLE__ +FSType GetFilesystemType(const fs::path& path) +{ + if (struct statfs fs_info; statfs(path.c_str(), &fs_info)) { + return FSType::ERROR; + } else if (std::string_view{fs_info.f_fstypename} == "exfat") { + return FSType::EXFAT; + } + return FSType::OTHER; +} +#endif diff --git a/src/util/fs_helpers.h b/src/util/fs_helpers.h index 28dd6d979d52..4d11f828092a 100644 --- a/src/util/fs_helpers.h +++ b/src/util/fs_helpers.h @@ -14,6 +14,23 @@ #include #include +#ifdef __APPLE__ +enum class FSType { + EXFAT, + OTHER, + ERROR +}; + +/** + * Detect filesystem type for a given path. + * Currently identifies exFAT filesystems which cause issues on macOS. + * + * @param[in] path The directory path to check + * @return FSType enum indicating the filesystem type + */ +FSType GetFilesystemType(const fs::path& path); +#endif + /** * Ensure file contents are fully committed to disk, using a platform-specific * feature analogous to fsync(). From 266dd0e10d08c0bfde63205db15d6c210a021b90 Mon Sep 17 00:00:00 2001 From: Anthony Towns Date: Wed, 23 Jul 2025 10:50:33 +1000 Subject: [PATCH 0124/2775] net_processing: drop MaybePunishNodeForTx Do not discourage nodes even when they send us consensus invalid transactions. Because we do not discourage nodes for transactions we consider non-standard, we don't get any DoS protection from this check in adversarial scenarios, so remove the check entirely both to simplify the code and reduce the risk of splitting the network due to changes in tx relay policy. --- src/net_processing.cpp | 34 ----------------------- test/functional/data/invalid_txs.py | 20 ++++++------- test/functional/p2p_invalid_tx.py | 3 +- test/functional/p2p_opportunistic_1p1c.py | 6 ++-- 4 files changed, 15 insertions(+), 48 deletions(-) diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 61439f718837..ec6f55cfdf6c 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -583,12 +583,6 @@ class PeerManagerImpl final : public PeerManager bool via_compact_block, const std::string& message = "") EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex); - /** - * Potentially disconnect and discourage a node based on the contents of a TxValidationState object - */ - void MaybePunishNodeForTx(NodeId nodeid, const TxValidationState& state) - EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex); - /** Maybe disconnect a peer and discourage future connections from its address. * * @param[in] pnode The node to check. @@ -1836,32 +1830,6 @@ void PeerManagerImpl::MaybePunishNodeForBlock(NodeId nodeid, const BlockValidati } } -void PeerManagerImpl::MaybePunishNodeForTx(NodeId nodeid, const TxValidationState& state) -{ - PeerRef peer{GetPeerRef(nodeid)}; - switch (state.GetResult()) { - case TxValidationResult::TX_RESULT_UNSET: - break; - // The node is providing invalid data: - case TxValidationResult::TX_CONSENSUS: - if (peer) Misbehaving(*peer, ""); - return; - // Conflicting (but not necessarily invalid) data or different policy: - case TxValidationResult::TX_INPUTS_NOT_STANDARD: - case TxValidationResult::TX_NOT_STANDARD: - case TxValidationResult::TX_MISSING_INPUTS: - case TxValidationResult::TX_PREMATURE_SPEND: - case TxValidationResult::TX_WITNESS_MUTATED: - case TxValidationResult::TX_WITNESS_STRIPPED: - case TxValidationResult::TX_CONFLICT: - case TxValidationResult::TX_MEMPOOL_POLICY: - case TxValidationResult::TX_NO_MEMPOOL: - case TxValidationResult::TX_RECONSIDERABLE: - case TxValidationResult::TX_UNKNOWN: - break; - } -} - bool PeerManagerImpl::BlockRequestAllowed(const CBlockIndex* pindex) { AssertLockHeld(cs_main); @@ -3034,8 +3002,6 @@ std::optional PeerManagerImpl::ProcessInvalidTx(NodeId if (peer) AddKnownTx(*peer, parent_txid); } - MaybePunishNodeForTx(nodeid, state); - return package_to_validate; } diff --git a/test/functional/data/invalid_txs.py b/test/functional/data/invalid_txs.py index 36b274efc279..32a188d19bfe 100644 --- a/test/functional/data/invalid_txs.py +++ b/test/functional/data/invalid_txs.py @@ -93,7 +93,7 @@ def get_tx(self, *args, **kwargs): class OutputMissing(BadTxTemplate): reject_reason = "bad-txns-vout-empty" - expect_disconnect = True + expect_disconnect = False def get_tx(self): tx = CTransaction() @@ -103,7 +103,7 @@ def get_tx(self): class InputMissing(BadTxTemplate): reject_reason = "bad-txns-vin-empty" - expect_disconnect = True + expect_disconnect = False # We use a blank transaction here to make sure # it is interpreted as a non-witness transaction. @@ -151,7 +151,7 @@ def get_tx(self): class DuplicateInput(BadTxTemplate): reject_reason = 'bad-txns-inputs-duplicate' - expect_disconnect = True + expect_disconnect = False def get_tx(self): tx = CTransaction() @@ -163,7 +163,7 @@ def get_tx(self): class PrevoutNullInput(BadTxTemplate): reject_reason = 'bad-txns-prevout-null' - expect_disconnect = True + expect_disconnect = False def get_tx(self): tx = CTransaction() @@ -189,7 +189,7 @@ def get_tx(self): class SpendTooMuch(BadTxTemplate): reject_reason = 'bad-txns-in-belowout' - expect_disconnect = True + expect_disconnect = False def get_tx(self): return create_tx_with_script( @@ -198,7 +198,7 @@ def get_tx(self): class CreateNegative(BadTxTemplate): reject_reason = 'bad-txns-vout-negative' - expect_disconnect = True + expect_disconnect = False def get_tx(self): return create_tx_with_script(self.spend_tx, 0, amount=-1) @@ -206,7 +206,7 @@ def get_tx(self): class CreateTooLarge(BadTxTemplate): reject_reason = 'bad-txns-vout-toolarge' - expect_disconnect = True + expect_disconnect = False def get_tx(self): return create_tx_with_script(self.spend_tx, 0, amount=MAX_MONEY + 1) @@ -214,7 +214,7 @@ def get_tx(self): class CreateSumTooLarge(BadTxTemplate): reject_reason = 'bad-txns-txouttotal-toolarge' - expect_disconnect = True + expect_disconnect = False def get_tx(self): tx = create_tx_with_script(self.spend_tx, 0, amount=MAX_MONEY) @@ -224,7 +224,7 @@ def get_tx(self): class InvalidOPIFConstruction(BadTxTemplate): reject_reason = "mandatory-script-verify-flag-failed (Invalid OP_IF construction)" - expect_disconnect = True + expect_disconnect = False def get_tx(self): return create_tx_with_script( @@ -278,7 +278,7 @@ def get_tx(self): class NonStandardAndInvalid(BadTxTemplate): """A non-standard transaction which is also consensus-invalid should return the consensus error.""" reject_reason = "mandatory-script-verify-flag-failed (OP_RETURN was encountered)" - expect_disconnect = True + expect_disconnect = False valid_in_block = False def get_tx(self): diff --git a/test/functional/p2p_invalid_tx.py b/test/functional/p2p_invalid_tx.py index 634dbc9e26cc..b041c55bfd4e 100755 --- a/test/functional/p2p_invalid_tx.py +++ b/test/functional/p2p_invalid_tx.py @@ -73,7 +73,7 @@ def run_test(self): tx = template.get_tx() node.p2ps[0].send_txs_and_test( [tx], node, success=False, - expect_disconnect=template.expect_disconnect, + expect_disconnect=False, reject_reason=template.reject_reason, ) @@ -140,7 +140,6 @@ def run_test(self): # tx_orphan_2_no_fee, because it has too low fee (p2ps[0] is not disconnected for relaying that tx) # tx_orphan_2_invalid, because it has negative fee (p2ps[1] is disconnected for relaying that tx) - self.wait_until(lambda: 1 == len(node.getpeerinfo()), timeout=12) # p2ps[1] is no longer connected assert_equal(expected_mempool, set(node.getrawmempool())) self.log.info('Test orphanage can store more than 100 transactions') diff --git a/test/functional/p2p_opportunistic_1p1c.py b/test/functional/p2p_opportunistic_1p1c.py index ad42b7308ba6..d75d6b40e20a 100755 --- a/test/functional/p2p_opportunistic_1p1c.py +++ b/test/functional/p2p_opportunistic_1p1c.py @@ -274,8 +274,10 @@ def test_orphan_consensus_failure(self): assert tx_orphan_bad_wit.txid_hex not in node_mempool # 5. Have the other peer send the tx too, so that tx_orphan_bad_wit package is attempted. - bad_orphan_sender.send_without_ping(msg_tx(low_fee_parent["tx"])) - bad_orphan_sender.wait_for_disconnect() + bad_orphan_sender.send_and_ping(msg_tx(low_fee_parent["tx"])) + + # The bad orphan sender should not be disconnected. + bad_orphan_sender.sync_with_ping() # The peer that didn't provide the orphan should not be disconnected. parent_sender.sync_with_ping() From b29ae9efdfeeff774e32ee433ce67d8ed8ecd49f Mon Sep 17 00:00:00 2001 From: Anthony Towns Date: Wed, 23 Jul 2025 10:51:06 +1000 Subject: [PATCH 0125/2775] validation: only check input scripts once Previously, we would check failing input scripts twice when considering a transaction for the mempool, in order to distinguish policy failures from consensus failures. This allowed us both to provide a different error message and to discourage peers for consensus failures. Because we are no longer discouraging peers for consensus failures during tx relay, and because checking a script can be expensive, only do this once. Also renames non-mandatory-script-verify-flag error to mempool-script-verify-flag-failed. --- src/validation.cpp | 35 +++++++--------------------- test/functional/data/invalid_txs.py | 7 +++--- test/functional/feature_block.py | 5 +++- test/functional/feature_cltv.py | 18 +++++++------- test/functional/feature_dersig.py | 4 ++-- test/functional/feature_nulldummy.py | 12 +++++----- test/functional/feature_segwit.py | 24 +++++++++---------- test/functional/mempool_accept.py | 2 +- test/functional/p2p_segwit.py | 14 +++++------ test/functional/rpc_packages.py | 4 ++-- 10 files changed, 57 insertions(+), 68 deletions(-) diff --git a/src/validation.cpp b/src/validation.cpp index cf5f546912dd..b013d3b08ce4 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -2191,34 +2191,17 @@ bool CheckInputScripts(const CTransaction& tx, TxValidationState& state, if (pvChecks) { pvChecks->emplace_back(std::move(check)); } else if (auto result = check(); result.has_value()) { + // Tx failures never trigger disconnections/bans. + // This is so that network splits aren't triggered + // either due to non-consensus relay policies (such as + // non-standard DER encodings or non-null dummy + // arguments) or due to new consensus rules introduced in + // soft forks. if (flags & STANDARD_NOT_MANDATORY_VERIFY_FLAGS) { - // Check whether the failure was caused by a - // non-mandatory script verification check, such as - // non-standard DER encodings or non-null dummy - // arguments; if so, ensure we return NOT_STANDARD - // instead of CONSENSUS to avoid downstream users - // splitting the network between upgraded and - // non-upgraded nodes by banning CONSENSUS-failing - // data providers. - CScriptCheck check2(txdata.m_spent_outputs[i], tx, validation_cache.m_signature_cache, i, - flags & ~STANDARD_NOT_MANDATORY_VERIFY_FLAGS, cacheSigStore, &txdata); - auto mandatory_result = check2(); - if (!mandatory_result.has_value()) { - return state.Invalid(TxValidationResult::TX_NOT_STANDARD, strprintf("non-mandatory-script-verify-flag (%s)", ScriptErrorString(result->first)), result->second); - } else { - // If the second check failed, it failed due to a mandatory script verification - // flag, but the first check might have failed on a non-mandatory script - // verification flag. - // - // Avoid reporting a mandatory script check failure with a non-mandatory error - // string by reporting the error from the second check. - result = mandatory_result; - } + return state.Invalid(TxValidationResult::TX_NOT_STANDARD, strprintf("mempool-script-verify-flag-failed (%s)", ScriptErrorString(result->first)), result->second); + } else { + return state.Invalid(TxValidationResult::TX_CONSENSUS, strprintf("mandatory-script-verify-flag-failed (%s)", ScriptErrorString(result->first)), result->second); } - - // MANDATORY flag failures correspond to - // TxValidationResult::TX_CONSENSUS. - return state.Invalid(TxValidationResult::TX_CONSENSUS, strprintf("mandatory-script-verify-flag-failed (%s)", ScriptErrorString(result->first)), result->second); } } diff --git a/test/functional/data/invalid_txs.py b/test/functional/data/invalid_txs.py index 32a188d19bfe..3c249b2fb8c6 100644 --- a/test/functional/data/invalid_txs.py +++ b/test/functional/data/invalid_txs.py @@ -223,7 +223,7 @@ def get_tx(self): class InvalidOPIFConstruction(BadTxTemplate): - reject_reason = "mandatory-script-verify-flag-failed (Invalid OP_IF construction)" + reject_reason = "mempool-script-verify-flag-failed (Invalid OP_IF construction)" expect_disconnect = False def get_tx(self): @@ -276,8 +276,9 @@ def get_tx(self): }) class NonStandardAndInvalid(BadTxTemplate): - """A non-standard transaction which is also consensus-invalid should return the consensus error.""" - reject_reason = "mandatory-script-verify-flag-failed (OP_RETURN was encountered)" + """A non-standard transaction which is also consensus-invalid should return the first error.""" + reject_reason = "mempool-script-verify-flag-failed (Using OP_CODESEPARATOR in non-witness script)" + block_reject_reason = "mandatory-script-verify-flag-failed (OP_RETURN was encountered)" expect_disconnect = False valid_in_block = False diff --git a/test/functional/feature_block.py b/test/functional/feature_block.py index 63592122be8a..bc0364a8204d 100755 --- a/test/functional/feature_block.py +++ b/test/functional/feature_block.py @@ -194,9 +194,12 @@ def run_test(self): if TxTemplate != invalid_txs.InputMissing: self.sign_tx(badtx, attempt_spend_tx) badblock = self.update_block(blockname, [badtx]) + reject_reason = (template.block_reject_reason or template.reject_reason) + if reject_reason.startswith("mempool-script-verify-flag-failed"): + reject_reason = "mandatory-script-verify-flag-failed" + reject_reason[33:] self.send_blocks( [badblock], success=False, - reject_reason=(template.block_reject_reason or template.reject_reason), + reject_reason=reject_reason, reconnect=True, timeout=2) self.move_tip(2) diff --git a/test/functional/feature_cltv.py b/test/functional/feature_cltv.py index 2f34f5570808..75cd38a98bfa 100755 --- a/test/functional/feature_cltv.py +++ b/test/functional/feature_cltv.py @@ -153,12 +153,14 @@ def run_test(self): coin_vout = coin.prevout.n cltv_invalidate(spendtx, i) + blk_rej = "mandatory-script-verify-flag-failed" + tx_rej = "mempool-script-verify-flag-failed" expected_cltv_reject_reason = [ - "mandatory-script-verify-flag-failed (Operation not valid with the current stack size)", - "mandatory-script-verify-flag-failed (Negative locktime)", - "mandatory-script-verify-flag-failed (Locktime requirement not satisfied)", - "mandatory-script-verify-flag-failed (Locktime requirement not satisfied)", - "mandatory-script-verify-flag-failed (Locktime requirement not satisfied)", + " (Operation not valid with the current stack size)", + " (Negative locktime)", + " (Locktime requirement not satisfied)", + " (Locktime requirement not satisfied)", + " (Locktime requirement not satisfied)", ][i] # First we show that this tx is valid except for CLTV by getting it # rejected from the mempool for exactly that reason. @@ -169,8 +171,8 @@ def run_test(self): 'txid': spendtx_txid, 'wtxid': spendtx_wtxid, 'allowed': False, - 'reject-reason': expected_cltv_reject_reason, - 'reject-details': expected_cltv_reject_reason + f", input 0 of {spendtx_txid} (wtxid {spendtx_wtxid}), spending {coin_txid}:{coin_vout}" + 'reject-reason': tx_rej + expected_cltv_reject_reason, + 'reject-details': tx_rej + expected_cltv_reject_reason + f", input 0 of {spendtx_txid} (wtxid {spendtx_wtxid}), spending {coin_txid}:{coin_vout}" }], self.nodes[0].testmempoolaccept(rawtxs=[spendtx.serialize().hex()], maxfeerate=0), ) @@ -180,7 +182,7 @@ def run_test(self): block.hashMerkleRoot = block.calc_merkle_root() block.solve() - with self.nodes[0].assert_debug_log(expected_msgs=[f'Block validation error: {expected_cltv_reject_reason}']): + with self.nodes[0].assert_debug_log(expected_msgs=[f'Block validation error: {blk_rej + expected_cltv_reject_reason}']): peer.send_and_ping(msg_block(block)) assert_equal(int(self.nodes[0].getbestblockhash(), 16), tip) peer.sync_with_ping() diff --git a/test/functional/feature_dersig.py b/test/functional/feature_dersig.py index e0e004675cd2..eec1559a13eb 100755 --- a/test/functional/feature_dersig.py +++ b/test/functional/feature_dersig.py @@ -121,8 +121,8 @@ def run_test(self): 'txid': spendtx_txid, 'wtxid': spendtx_wtxid, 'allowed': False, - 'reject-reason': 'mandatory-script-verify-flag-failed (Non-canonical DER signature)', - 'reject-details': 'mandatory-script-verify-flag-failed (Non-canonical DER signature), ' + + 'reject-reason': 'mempool-script-verify-flag-failed (Non-canonical DER signature)', + 'reject-details': 'mempool-script-verify-flag-failed (Non-canonical DER signature), ' + f"input 0 of {spendtx_txid} (wtxid {spendtx_wtxid}), spending {coin_txid}:0" }], self.nodes[0].testmempoolaccept(rawtxs=[spendtx.serialize().hex()], maxfeerate=0), diff --git a/test/functional/feature_nulldummy.py b/test/functional/feature_nulldummy.py index f301d65a7021..cd7c4491a275 100755 --- a/test/functional/feature_nulldummy.py +++ b/test/functional/feature_nulldummy.py @@ -37,8 +37,8 @@ from test_framework.wallet import getnewdestination from test_framework.wallet_util import generate_keypair -NULLDUMMY_ERROR = "mandatory-script-verify-flag-failed (Dummy CHECKMULTISIG argument must be zero)" - +NULLDUMMY_TX_ERROR = "mempool-script-verify-flag-failed (Dummy CHECKMULTISIG argument must be zero)" +NULLDUMMY_BLK_ERROR = "mandatory-script-verify-flag-failed (Dummy CHECKMULTISIG argument must be zero)" def invalidate_nulldummy_tx(tx): """Transform a NULLDUMMY compliant tx (i.e. scriptSig starts with OP_0) @@ -104,7 +104,7 @@ def run_test(self): addr=self.ms_address, amount=47, privkey=self.privkey) invalidate_nulldummy_tx(test2tx) - assert_raises_rpc_error(-26, NULLDUMMY_ERROR, self.nodes[0].sendrawtransaction, test2tx.serialize_with_witness().hex(), 0) + assert_raises_rpc_error(-26, NULLDUMMY_TX_ERROR, self.nodes[0].sendrawtransaction, test2tx.serialize_with_witness().hex(), 0) self.log.info(f"Test 3: Non-NULLDUMMY base transactions should be accepted in a block before activation [{COINBASE_MATURITY + 4}]") self.block_submit(self.nodes[0], [test2tx], accept=True) @@ -115,7 +115,7 @@ def run_test(self): privkey=self.privkey) test6txs = [CTransaction(test4tx)] invalidate_nulldummy_tx(test4tx) - assert_raises_rpc_error(-26, NULLDUMMY_ERROR, self.nodes[0].sendrawtransaction, test4tx.serialize_with_witness().hex(), 0) + assert_raises_rpc_error(-26, NULLDUMMY_TX_ERROR, self.nodes[0].sendrawtransaction, test4tx.serialize_with_witness().hex(), 0) self.block_submit(self.nodes[0], [test4tx], accept=False) self.log.info("Test 5: Non-NULLDUMMY P2WSH multisig transaction invalid after activation") @@ -125,7 +125,7 @@ def run_test(self): privkey=self.privkey) test6txs.append(CTransaction(test5tx)) test5tx.wit.vtxinwit[0].scriptWitness.stack[0] = b'\x01' - assert_raises_rpc_error(-26, NULLDUMMY_ERROR, self.nodes[0].sendrawtransaction, test5tx.serialize_with_witness().hex(), 0) + assert_raises_rpc_error(-26, NULLDUMMY_TX_ERROR, self.nodes[0].sendrawtransaction, test5tx.serialize_with_witness().hex(), 0) self.block_submit(self.nodes[0], [test5tx], with_witness=True, accept=False) self.log.info(f"Test 6: NULLDUMMY compliant base/witness transactions should be accepted to mempool and in block after activation [{COINBASE_MATURITY + 5}]") @@ -141,7 +141,7 @@ def block_submit(self, node, txs, *, with_witness=False, accept): if with_witness: add_witness_commitment(block) block.solve() - assert_equal(None if accept else NULLDUMMY_ERROR, node.submitblock(block.serialize().hex())) + assert_equal(None if accept else NULLDUMMY_BLK_ERROR, node.submitblock(block.serialize().hex())) if accept: assert_equal(node.getbestblockhash(), block.hash_hex) self.lastblockhash = block.hash_hex diff --git a/test/functional/feature_segwit.py b/test/functional/feature_segwit.py index 967b9e1e6eb9..80266aa2e728 100755 --- a/test/functional/feature_segwit.py +++ b/test/functional/feature_segwit.py @@ -177,8 +177,8 @@ def run_test(self): assert_equal(self.nodes[2].getbalance(), 20 * Decimal("49.999")) self.log.info("Verify unsigned p2sh witness txs without a redeem script are invalid") - self.fail_accept(self.nodes[2], "mandatory-script-verify-flag-failed (Operation not valid with the current stack size)", p2sh_ids[NODE_2][P2WPKH][1], sign=False) - self.fail_accept(self.nodes[2], "mandatory-script-verify-flag-failed (Operation not valid with the current stack size)", p2sh_ids[NODE_2][P2WSH][1], sign=False) + self.fail_accept(self.nodes[2], "mempool-script-verify-flag-failed (Operation not valid with the current stack size)", p2sh_ids[NODE_2][P2WPKH][1], sign=False) + self.fail_accept(self.nodes[2], "mempool-script-verify-flag-failed (Operation not valid with the current stack size)", p2sh_ids[NODE_2][P2WSH][1], sign=False) self.generate(self.nodes[0], 1) # block 164 @@ -197,13 +197,13 @@ def run_test(self): self.log.info("Verify default node can't accept txs with missing witness") # unsigned, no scriptsig - self.fail_accept(self.nodes[0], "mandatory-script-verify-flag-failed (Witness program hash mismatch)", wit_ids[NODE_0][P2WPKH][0], sign=False) - self.fail_accept(self.nodes[0], "mandatory-script-verify-flag-failed (Witness program was passed an empty witness)", wit_ids[NODE_0][P2WSH][0], sign=False) - self.fail_accept(self.nodes[0], "mandatory-script-verify-flag-failed (Operation not valid with the current stack size)", p2sh_ids[NODE_0][P2WPKH][0], sign=False) - self.fail_accept(self.nodes[0], "mandatory-script-verify-flag-failed (Operation not valid with the current stack size)", p2sh_ids[NODE_0][P2WSH][0], sign=False) + self.fail_accept(self.nodes[0], "mempool-script-verify-flag-failed (Witness program hash mismatch)", wit_ids[NODE_0][P2WPKH][0], sign=False) + self.fail_accept(self.nodes[0], "mempool-script-verify-flag-failed (Witness program was passed an empty witness)", wit_ids[NODE_0][P2WSH][0], sign=False) + self.fail_accept(self.nodes[0], "mempool-script-verify-flag-failed (Operation not valid with the current stack size)", p2sh_ids[NODE_0][P2WPKH][0], sign=False) + self.fail_accept(self.nodes[0], "mempool-script-verify-flag-failed (Operation not valid with the current stack size)", p2sh_ids[NODE_0][P2WSH][0], sign=False) # unsigned with redeem script - self.fail_accept(self.nodes[0], "mandatory-script-verify-flag-failed (Witness program hash mismatch)", p2sh_ids[NODE_0][P2WPKH][0], sign=False, redeem_script=witness_script(False, self.pubkey[0])) - self.fail_accept(self.nodes[0], "mandatory-script-verify-flag-failed (Witness program was passed an empty witness)", p2sh_ids[NODE_0][P2WSH][0], sign=False, redeem_script=witness_script(True, self.pubkey[0])) + self.fail_accept(self.nodes[0], "mempool-script-verify-flag-failed (Witness program hash mismatch)", p2sh_ids[NODE_0][P2WPKH][0], sign=False, redeem_script=witness_script(False, self.pubkey[0])) + self.fail_accept(self.nodes[0], "mempool-script-verify-flag-failed (Witness program was passed an empty witness)", p2sh_ids[NODE_0][P2WSH][0], sign=False, redeem_script=witness_script(True, self.pubkey[0])) # Coinbase contains the witness commitment nonce, check that RPC shows us coinbase_txid = self.nodes[2].getblock(blockhash)['tx'][0] @@ -214,10 +214,10 @@ def run_test(self): assert_equal(witnesses[0], '00' * 32) self.log.info("Verify witness txs without witness data are invalid after the fork") - self.fail_accept(self.nodes[2], 'mandatory-script-verify-flag-failed (Witness program hash mismatch)', wit_ids[NODE_2][P2WPKH][2], sign=False) - self.fail_accept(self.nodes[2], 'mandatory-script-verify-flag-failed (Witness program was passed an empty witness)', wit_ids[NODE_2][P2WSH][2], sign=False) - self.fail_accept(self.nodes[2], 'mandatory-script-verify-flag-failed (Witness program hash mismatch)', p2sh_ids[NODE_2][P2WPKH][2], sign=False, redeem_script=witness_script(False, self.pubkey[2])) - self.fail_accept(self.nodes[2], 'mandatory-script-verify-flag-failed (Witness program was passed an empty witness)', p2sh_ids[NODE_2][P2WSH][2], sign=False, redeem_script=witness_script(True, self.pubkey[2])) + self.fail_accept(self.nodes[2], 'mempool-script-verify-flag-failed (Witness program hash mismatch)', wit_ids[NODE_2][P2WPKH][2], sign=False) + self.fail_accept(self.nodes[2], 'mempool-script-verify-flag-failed (Witness program was passed an empty witness)', wit_ids[NODE_2][P2WSH][2], sign=False) + self.fail_accept(self.nodes[2], 'mempool-script-verify-flag-failed (Witness program hash mismatch)', p2sh_ids[NODE_2][P2WPKH][2], sign=False, redeem_script=witness_script(False, self.pubkey[2])) + self.fail_accept(self.nodes[2], 'mempool-script-verify-flag-failed (Witness program was passed an empty witness)', p2sh_ids[NODE_2][P2WSH][2], sign=False, redeem_script=witness_script(True, self.pubkey[2])) self.log.info("Verify default node can now use witness txs") self.success_mine(self.nodes[0], wit_ids[NODE_0][P2WPKH][0], True) diff --git a/test/functional/mempool_accept.py b/test/functional/mempool_accept.py index e225b68cc103..867c93122080 100755 --- a/test/functional/mempool_accept.py +++ b/test/functional/mempool_accept.py @@ -475,7 +475,7 @@ def run_test(self): nested_anchor_spend.vout.append(CTxOut(nested_anchor_tx.vout[0].nValue - int(fee*COIN), script_to_p2wsh_script(CScript([OP_TRUE])))) self.check_mempool_result( - result_expected=[{'txid': nested_anchor_spend.txid_hex, 'allowed': False, 'reject-reason': 'non-mandatory-script-verify-flag (Witness version reserved for soft-fork upgrades)'}], + result_expected=[{'txid': nested_anchor_spend.txid_hex, 'allowed': False, 'reject-reason': 'mempool-script-verify-flag-failed (Witness version reserved for soft-fork upgrades)'}], rawtxs=[nested_anchor_spend.serialize().hex()], maxfeerate=0, ) diff --git a/test/functional/p2p_segwit.py b/test/functional/p2p_segwit.py index 8193ff7cd699..810b6a47ce4d 100755 --- a/test/functional/p2p_segwit.py +++ b/test/functional/p2p_segwit.py @@ -690,19 +690,19 @@ def test_p2sh_witness(self): # segwit activation. Note that older bitcoind's that are not # segwit-aware would also reject this for failing CLEANSTACK. with self.nodes[0].assert_debug_log( - expected_msgs=[spend_tx.txid_hex, 'was not accepted: mandatory-script-verify-flag-failed (Witness program was passed an empty witness)']): + expected_msgs=[spend_tx.txid_hex, 'was not accepted: mempool-script-verify-flag-failed (Witness program was passed an empty witness)']): test_transaction_acceptance(self.nodes[0], self.test_node, spend_tx, with_witness=False, accepted=False) # The transaction was detected as witness stripped above and not added to the reject # filter. Trying again will check it again and result in the same error. with self.nodes[0].assert_debug_log( - expected_msgs=[spend_tx.txid_hex, 'was not accepted: mandatory-script-verify-flag-failed (Witness program was passed an empty witness)']): + expected_msgs=[spend_tx.txid_hex, 'was not accepted: mempool-script-verify-flag-failed (Witness program was passed an empty witness)']): test_transaction_acceptance(self.nodes[0], self.test_node, spend_tx, with_witness=False, accepted=False) # Try to put the witness script in the scriptSig, should also fail. spend_tx.vin[0].scriptSig = CScript([p2wsh_pubkey, b'a']) with self.nodes[0].assert_debug_log( - expected_msgs=[spend_tx.txid_hex, 'was not accepted: mandatory-script-verify-flag-failed (Script evaluated without error but finished with a false/empty top stack element)']): + expected_msgs=[spend_tx.txid_hex, 'was not accepted: mempool-script-verify-flag-failed (Script evaluated without error but finished with a false/empty top stack element)']): test_transaction_acceptance(self.nodes[0], self.test_node, spend_tx, with_witness=False, accepted=False) # Now put the witness script in the witness, should succeed after @@ -1254,7 +1254,7 @@ def test_tx_relay_after_segwit_activation(self): # Now do the opposite: strip the witness entirely. This will be detected as witness stripping and # the (w)txid won't be added to the reject filter: we can try again and get the same error. tx3.wit.vtxinwit[0].scriptWitness.stack = [] - reason = "was not accepted: mandatory-script-verify-flag-failed (Witness program was passed an empty witness)" + reason = "was not accepted: mempool-script-verify-flag-failed (Witness program was passed an empty witness)" test_transaction_acceptance(self.nodes[0], self.test_node, tx3, with_witness=False, accepted=False, reason=reason) test_transaction_acceptance(self.nodes[0], self.test_node, tx3, with_witness=False, accepted=False, reason=reason) @@ -1447,7 +1447,7 @@ def test_uncompressed_pubkey(self): sign_input_segwitv0(tx2, 0, script, tx.vout[0].nValue, key) # Should fail policy test. - test_transaction_acceptance(self.nodes[0], self.test_node, tx2, True, False, 'non-mandatory-script-verify-flag (Using non-compressed keys in segwit)') + test_transaction_acceptance(self.nodes[0], self.test_node, tx2, True, False, 'mempool-script-verify-flag-failed (Using non-compressed keys in segwit)') # But passes consensus. block = self.build_next_block() self.update_witness_block_with_transactions(block, [tx2]) @@ -1466,7 +1466,7 @@ def test_uncompressed_pubkey(self): sign_p2pk_witness_input(witness_script, tx3, 0, SIGHASH_ALL, tx2.vout[0].nValue, key) # Should fail policy test. - test_transaction_acceptance(self.nodes[0], self.test_node, tx3, True, False, 'non-mandatory-script-verify-flag (Using non-compressed keys in segwit)') + test_transaction_acceptance(self.nodes[0], self.test_node, tx3, True, False, 'mempool-script-verify-flag-failed (Using non-compressed keys in segwit)') # But passes consensus. block = self.build_next_block() self.update_witness_block_with_transactions(block, [tx3]) @@ -1483,7 +1483,7 @@ def test_uncompressed_pubkey(self): sign_p2pk_witness_input(witness_script, tx4, 0, SIGHASH_ALL, tx3.vout[0].nValue, key) # Should fail policy test. - test_transaction_acceptance(self.nodes[0], self.test_node, tx4, True, False, 'non-mandatory-script-verify-flag (Using non-compressed keys in segwit)') + test_transaction_acceptance(self.nodes[0], self.test_node, tx4, True, False, 'mempool-script-verify-flag-failed (Using non-compressed keys in segwit)') block = self.build_next_block() self.update_witness_block_with_transactions(block, [tx4]) test_witness_block(self.nodes[0], self.test_node, block, accepted=True) diff --git a/test/functional/rpc_packages.py b/test/functional/rpc_packages.py index 3c467394cfd7..325a29c4efca 100755 --- a/test/functional/rpc_packages.py +++ b/test/functional/rpc_packages.py @@ -123,8 +123,8 @@ def test_independent(self, coin): assert_equal(testres_bad_sig, self.independent_txns_testres + [{ "txid": tx_bad_sig_txid, "wtxid": tx_bad_sig_wtxid, "allowed": False, - "reject-reason": "mandatory-script-verify-flag-failed (Operation not valid with the current stack size)", - "reject-details": "mandatory-script-verify-flag-failed (Operation not valid with the current stack size), " + + "reject-reason": "mempool-script-verify-flag-failed (Operation not valid with the current stack size)", + "reject-details": "mempool-script-verify-flag-failed (Operation not valid with the current stack size), " + f"input 0 of {tx_bad_sig_txid} (wtxid {tx_bad_sig_wtxid}), spending {coin['txid']}:{coin['vout']}" }]) From 876dbdfb4702410dfd4037614dc9298a0c09c63e Mon Sep 17 00:00:00 2001 From: Anthony Towns Date: Fri, 8 Aug 2025 23:15:17 +1000 Subject: [PATCH 0126/2775] tests: drop expect_disconnect behaviour for tx relay --- test/functional/data/invalid_txs.py | 19 ------------------- test/functional/feature_block.py | 5 ----- test/functional/p2p_invalid_tx.py | 5 ----- test/functional/test_framework/p2p.py | 8 ++------ 4 files changed, 2 insertions(+), 35 deletions(-) diff --git a/test/functional/data/invalid_txs.py b/test/functional/data/invalid_txs.py index 3c249b2fb8c6..a283945a6bd0 100644 --- a/test/functional/data/invalid_txs.py +++ b/test/functional/data/invalid_txs.py @@ -73,9 +73,6 @@ class BadTxTemplate: # Only specified if it differs from mempool acceptance error. block_reject_reason = "" - # Do we expect to be disconnected after submitting this tx? - expect_disconnect = False - # Is this tx considered valid when included in a block, but not for acceptance into # the mempool (i.e. does it violate policy but not consensus)? valid_in_block = False @@ -93,7 +90,6 @@ def get_tx(self, *args, **kwargs): class OutputMissing(BadTxTemplate): reject_reason = "bad-txns-vout-empty" - expect_disconnect = False def get_tx(self): tx = CTransaction() @@ -103,7 +99,6 @@ def get_tx(self): class InputMissing(BadTxTemplate): reject_reason = "bad-txns-vin-empty" - expect_disconnect = False # We use a blank transaction here to make sure # it is interpreted as a non-witness transaction. @@ -119,7 +114,6 @@ def get_tx(self): # tree depth commitment (CVE-2017-12842) class SizeTooSmall(BadTxTemplate): reject_reason = "tx-size-small" - expect_disconnect = False valid_in_block = True def get_tx(self): @@ -137,7 +131,6 @@ class BadInputOutpointIndex(BadTxTemplate): reject_reason = None # But fails in block block_reject_reason = "bad-txns-inputs-missingorspent" - expect_disconnect = False def get_tx(self): num_indices = len(self.spend_tx.vin) @@ -151,7 +144,6 @@ def get_tx(self): class DuplicateInput(BadTxTemplate): reject_reason = 'bad-txns-inputs-duplicate' - expect_disconnect = False def get_tx(self): tx = CTransaction() @@ -163,7 +155,6 @@ def get_tx(self): class PrevoutNullInput(BadTxTemplate): reject_reason = 'bad-txns-prevout-null' - expect_disconnect = False def get_tx(self): tx = CTransaction() @@ -175,7 +166,6 @@ def get_tx(self): class NonexistentInput(BadTxTemplate): reject_reason = None # Added as an orphan tx. - expect_disconnect = False # But fails in block block_reject_reason = "bad-txns-inputs-missingorspent" @@ -189,7 +179,6 @@ def get_tx(self): class SpendTooMuch(BadTxTemplate): reject_reason = 'bad-txns-in-belowout' - expect_disconnect = False def get_tx(self): return create_tx_with_script( @@ -198,7 +187,6 @@ def get_tx(self): class CreateNegative(BadTxTemplate): reject_reason = 'bad-txns-vout-negative' - expect_disconnect = False def get_tx(self): return create_tx_with_script(self.spend_tx, 0, amount=-1) @@ -206,7 +194,6 @@ def get_tx(self): class CreateTooLarge(BadTxTemplate): reject_reason = 'bad-txns-vout-toolarge' - expect_disconnect = False def get_tx(self): return create_tx_with_script(self.spend_tx, 0, amount=MAX_MONEY + 1) @@ -214,7 +201,6 @@ def get_tx(self): class CreateSumTooLarge(BadTxTemplate): reject_reason = 'bad-txns-txouttotal-toolarge' - expect_disconnect = False def get_tx(self): tx = create_tx_with_script(self.spend_tx, 0, amount=MAX_MONEY) @@ -224,7 +210,6 @@ def get_tx(self): class InvalidOPIFConstruction(BadTxTemplate): reject_reason = "mempool-script-verify-flag-failed (Invalid OP_IF construction)" - expect_disconnect = False def get_tx(self): return create_tx_with_script( @@ -235,7 +220,6 @@ def get_tx(self): class TooManySigopsPerBlock(BadTxTemplate): reject_reason = "bad-txns-too-many-sigops" block_reject_reason = "bad-blk-sigops, out-of-bounds SigOpCount" - expect_disconnect = False def get_tx(self): lotsa_checksigs = CScript([OP_CHECKSIG] * (MAX_BLOCK_SIGOPS)) @@ -247,7 +231,6 @@ def get_tx(self): class TooManySigopsPerTransaction(BadTxTemplate): reject_reason = "bad-txns-too-many-sigops" - expect_disconnect = False valid_in_block = True def get_tx(self): @@ -270,7 +253,6 @@ def get_tx(self): return type('DisabledOpcode_' + str(opcode), (BadTxTemplate,), { 'reject_reason': "disabled opcode", - 'expect_disconnect': True, 'get_tx': get_tx, 'valid_in_block' : False }) @@ -279,7 +261,6 @@ class NonStandardAndInvalid(BadTxTemplate): """A non-standard transaction which is also consensus-invalid should return the first error.""" reject_reason = "mempool-script-verify-flag-failed (Using OP_CODESEPARATOR in non-witness script)" block_reject_reason = "mandatory-script-verify-flag-failed (OP_RETURN was encountered)" - expect_disconnect = False valid_in_block = False def get_tx(self): diff --git a/test/functional/feature_block.py b/test/functional/feature_block.py index bc0364a8204d..63bee49585bc 100755 --- a/test/functional/feature_block.py +++ b/test/functional/feature_block.py @@ -177,11 +177,6 @@ def run_test(self): for TxTemplate in invalid_txs.iter_all_templates(): template = TxTemplate(spend_tx=attempt_spend_tx) - # belt-and-suspenders checking we won't pass up validating something - # we expect a disconnect from - if template.expect_disconnect: - assert not template.valid_in_block - if template.valid_in_block: continue diff --git a/test/functional/p2p_invalid_tx.py b/test/functional/p2p_invalid_tx.py index b041c55bfd4e..0d4c4ffbd42b 100755 --- a/test/functional/p2p_invalid_tx.py +++ b/test/functional/p2p_invalid_tx.py @@ -73,14 +73,9 @@ def run_test(self): tx = template.get_tx() node.p2ps[0].send_txs_and_test( [tx], node, success=False, - expect_disconnect=False, reject_reason=template.reject_reason, ) - if template.expect_disconnect: - self.log.info("Reconnecting to peer") - self.reconnect_p2p() - # Make two p2p connections to provide the node with orphans # * p2ps[0] will send valid orphan txs (one with low fee) # * p2ps[1] will send an invalid orphan tx (and is later disconnected for that) diff --git a/test/functional/test_framework/p2p.py b/test/functional/test_framework/p2p.py index 610aa4ccca29..c2e773656cd3 100755 --- a/test/functional/test_framework/p2p.py +++ b/test/functional/test_framework/p2p.py @@ -900,13 +900,12 @@ def send_blocks_and_test(self, blocks, node, *, success=True, force_send=False, else: assert_not_equal(node.getbestblockhash(), blocks[-1].hash_hex) - def send_txs_and_test(self, txs, node, *, success=True, expect_disconnect=False, reject_reason=None): + def send_txs_and_test(self, txs, node, *, success=True, reject_reason=None): """Send txs to test node and test whether they're accepted to the mempool. - add all txs to our tx_store - send tx messages for all txs - if success is True/False: assert that the txs are/are not accepted to the mempool - - if expect_disconnect is True: Skip the sync with ping - if reject_reason is set: assert that the correct reject message is logged.""" with p2p_lock: @@ -918,10 +917,7 @@ def send_txs_and_test(self, txs, node, *, success=True, expect_disconnect=False, for tx in txs: self.send_without_ping(msg_tx(tx)) - if expect_disconnect: - self.wait_for_disconnect() - else: - self.sync_with_ping() + self.sync_with_ping() raw_mempool = node.getrawmempool() if success: From 3c7cae49b692bb6bf5cae5ee23479091bed0b8be Mon Sep 17 00:00:00 2001 From: Eugene Siegel Date: Fri, 18 Jul 2025 10:18:59 -0400 Subject: [PATCH 0127/2775] log: change LogLimitStats to struct LogRateLimiter::Stats Clean up the noisy LogLimitStats and remove references to the time window. Co-Authored-By: stickies-v --- src/logging.cpp | 15 ++++++------ src/logging.h | 50 +++++++++++++------------------------- src/test/logging_tests.cpp | 30 +++++++++++------------ 3 files changed, 39 insertions(+), 56 deletions(-) diff --git a/src/logging.cpp b/src/logging.cpp index a090803652c7..befac8a03f8d 100644 --- a/src/logging.cpp +++ b/src/logging.cpp @@ -384,10 +384,10 @@ BCLog::LogRateLimiter::Status BCLog::LogRateLimiter::Consume( const std::string& str) { StdLockGuard scoped_lock(m_mutex); - auto& counter{m_source_locations.try_emplace(source_loc, m_max_bytes).first->second}; - Status status{counter.GetDroppedBytes() > 0 ? Status::STILL_SUPPRESSED : Status::UNSUPPRESSED}; + auto& stats{m_source_locations.try_emplace(source_loc, m_max_bytes).first->second}; + Status status{stats.m_dropped_bytes > 0 ? Status::STILL_SUPPRESSED : Status::UNSUPPRESSED}; - if (!counter.Consume(str.size()) && status == Status::UNSUPPRESSED) { + if (!stats.Consume(str.size()) && status == Status::UNSUPPRESSED) { status = Status::NEWLY_SUPPRESSED; m_suppression_active = true; } @@ -549,18 +549,17 @@ void BCLog::LogRateLimiter::Reset() source_locations.swap(m_source_locations); m_suppression_active = false; } - for (const auto& [source_loc, counter] : source_locations) { - uint64_t dropped_bytes{counter.GetDroppedBytes()}; - if (dropped_bytes == 0) continue; + for (const auto& [source_loc, stats] : source_locations) { + if (stats.m_dropped_bytes == 0) continue; LogPrintLevel_( LogFlags::ALL, Level::Info, /*should_ratelimit=*/false, "Restarting logging from %s:%d (%s): %d bytes were dropped during the last %ss.\n", source_loc.file_name(), source_loc.line(), source_loc.function_name(), - dropped_bytes, Ticks(m_reset_window)); + stats.m_dropped_bytes, Ticks(m_reset_window)); } } -bool BCLog::LogLimitStats::Consume(uint64_t bytes) +bool BCLog::LogRateLimiter::Stats::Consume(uint64_t bytes) { if (bytes > m_available_bytes) { m_dropped_bytes += bytes; diff --git a/src/logging.h b/src/logging.h index 106de1f8d309..04e6e0974c44 100644 --- a/src/logging.h +++ b/src/logging.h @@ -107,44 +107,28 @@ namespace BCLog { constexpr uint64_t RATELIMIT_MAX_BYTES{1024 * 1024}; // maximum number of bytes per source location that can be logged within the RATELIMIT_WINDOW constexpr auto RATELIMIT_WINDOW{1h}; // time window after which log ratelimit stats are reset - //! Keeps track of an individual source location and how many available bytes are left for logging from it. - class LogLimitStats + //! Fixed window rate limiter for logging. + class LogRateLimiter { - private: - //! Remaining bytes in the current window interval. - uint64_t m_available_bytes; - //! Number of bytes that were not consumed within the current window. - uint64_t m_dropped_bytes{0}; - public: - LogLimitStats(uint64_t max_bytes) : m_available_bytes{max_bytes} {} - //! Consume bytes from the window if enough bytes are available. - //! - //! Returns whether enough bytes were available. - bool Consume(uint64_t bytes); - - uint64_t GetAvailableBytes() const - { - return m_available_bytes; - } - - uint64_t GetDroppedBytes() const - { - return m_dropped_bytes; - } - }; + //! Keeps track of an individual source location and how many available bytes are left for logging from it. + struct Stats { + //! Remaining bytes + uint64_t m_available_bytes; + //! Number of bytes that were consumed but didn't fit in the available bytes. + uint64_t m_dropped_bytes{0}; + + Stats(uint64_t max_bytes) : m_available_bytes{max_bytes} {} + //! Updates internal accounting and returns true if enough available_bytes were remaining + bool Consume(uint64_t bytes); + }; - /** - * Fixed window rate limiter for logging. - */ - class LogRateLimiter - { private: mutable StdMutex m_mutex; - //! Counters for each source location that has attempted to log something. - std::unordered_map m_source_locations GUARDED_BY(m_mutex); - //! True if at least one log location is suppressed. Cached view on m_source_locations for performance reasons. + //! Stats for each source location that has attempted to log something. + std::unordered_map m_source_locations GUARDED_BY(m_mutex); + //! Whether any log locations are suppressed. Cached view on m_source_locations for performance reasons. std::atomic m_suppression_active{false}; public: @@ -155,7 +139,7 @@ namespace BCLog { * reset_window interval. * @param max_bytes Maximum number of bytes that can be logged for each source * location. - * @param reset_window Time window after which the byte counters are reset. + * @param reset_window Time window after which the stats are reset. */ LogRateLimiter(SchedulerFunction scheduler_func, uint64_t max_bytes, std::chrono::seconds reset_window); //! Maximum number of bytes logged per location per window. diff --git a/src/test/logging_tests.cpp b/src/test/logging_tests.cpp index 62ed2dffebb4..dbe13886af18 100644 --- a/src/test/logging_tests.cpp +++ b/src/test/logging_tests.cpp @@ -348,25 +348,25 @@ BOOST_AUTO_TEST_CASE(logging_log_rate_limiter) BOOST_AUTO_TEST_CASE(logging_log_limit_stats) { - BCLog::LogLimitStats counter{BCLog::RATELIMIT_MAX_BYTES}; + BCLog::LogRateLimiter::Stats stats(BCLog::RATELIMIT_MAX_BYTES); - // Check that counter gets initialized correctly. - BOOST_CHECK_EQUAL(counter.GetAvailableBytes(), BCLog::RATELIMIT_MAX_BYTES); - BOOST_CHECK_EQUAL(counter.GetDroppedBytes(), 0ull); + // Check that stats gets initialized correctly. + BOOST_CHECK_EQUAL(stats.m_available_bytes, BCLog::RATELIMIT_MAX_BYTES); + BOOST_CHECK_EQUAL(stats.m_dropped_bytes, uint64_t{0}); - const uint64_t MESSAGE_SIZE{512 * 1024}; - BOOST_CHECK(counter.Consume(MESSAGE_SIZE)); - BOOST_CHECK_EQUAL(counter.GetAvailableBytes(), BCLog::RATELIMIT_MAX_BYTES - MESSAGE_SIZE); - BOOST_CHECK_EQUAL(counter.GetDroppedBytes(), 0ull); + const uint64_t MESSAGE_SIZE{BCLog::RATELIMIT_MAX_BYTES / 2}; + BOOST_CHECK(stats.Consume(MESSAGE_SIZE)); + BOOST_CHECK_EQUAL(stats.m_available_bytes, BCLog::RATELIMIT_MAX_BYTES - MESSAGE_SIZE); + BOOST_CHECK_EQUAL(stats.m_dropped_bytes, uint64_t{0}); - BOOST_CHECK(counter.Consume(MESSAGE_SIZE)); - BOOST_CHECK_EQUAL(counter.GetAvailableBytes(), BCLog::RATELIMIT_MAX_BYTES - MESSAGE_SIZE * 2); - BOOST_CHECK_EQUAL(counter.GetDroppedBytes(), 0ull); + BOOST_CHECK(stats.Consume(MESSAGE_SIZE)); + BOOST_CHECK_EQUAL(stats.m_available_bytes, BCLog::RATELIMIT_MAX_BYTES - MESSAGE_SIZE * 2); + BOOST_CHECK_EQUAL(stats.m_dropped_bytes, uint64_t{0}); - // Consuming more bytes after already having consumed 1MB should fail. - BOOST_CHECK(!counter.Consume(500)); - BOOST_CHECK_EQUAL(counter.GetAvailableBytes(), 0ull); - BOOST_CHECK_EQUAL(counter.GetDroppedBytes(), 500ull); + // Consuming more bytes after already having consumed RATELIMIT_MAX_BYTES should fail. + BOOST_CHECK(!stats.Consume(500)); + BOOST_CHECK_EQUAL(stats.m_available_bytes, uint64_t{0}); + BOOST_CHECK_EQUAL(stats.m_dropped_bytes, uint64_t{500}); } void LogFromLocation(int location, std::string message) From e8f9c37a3b4c9c88baddb556c4b33a4cbba1f614 Mon Sep 17 00:00:00 2001 From: Eugene Siegel Date: Fri, 18 Jul 2025 10:39:45 -0400 Subject: [PATCH 0128/2775] log: clean up LogPrintStr_ and Reset, prefix all logs with "[*]" when there are suppressions In LogPrintStr_: - remove an unnecessary BCLog since we are in the BCLog namespace. - remove an unnecessary \n when rate limiting is triggered since FormatLogStrInPlace will add it. - move the ratelimit bool into an else if block. - prefix all log lines with [*] when suppressions exist. Previously this was only done if should_ratelimit was true. In Reset: - remove an unnecessary \n since FormatLogStrInPlace will add it. - Change Level::Info to Level::Warning. --- src/logging.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/logging.cpp b/src/logging.cpp index befac8a03f8d..0cad2905047b 100644 --- a/src/logging.cpp +++ b/src/logging.cpp @@ -455,24 +455,26 @@ void BCLog::Logger::LogPrintStr_(std::string_view str, std::source_location&& so bool ratelimit{false}; if (should_ratelimit && m_limiter) { auto status{m_limiter->Consume(source_loc, str_prefixed)}; - if (status == BCLog::LogRateLimiter::Status::NEWLY_SUPPRESSED) { + if (status == LogRateLimiter::Status::NEWLY_SUPPRESSED) { // NOLINTNEXTLINE(misc-no-recursion) LogPrintStr_(strprintf( "Excessive logging detected from %s:%d (%s): >%d bytes logged during " "the last time window of %is. Suppressing logging to disk from this " "source location until time window resets. Console logging " - "unaffected. Last log entry.\n", + "unaffected. Last log entry.", source_loc.file_name(), source_loc.line(), source_loc.function_name(), m_limiter->m_max_bytes, Ticks(m_limiter->m_reset_window)), std::source_location::current(), LogFlags::ALL, Level::Warning, /*should_ratelimit=*/false); // with should_ratelimit=false, this cannot lead to infinite recursion + } else if (status == LogRateLimiter::Status::STILL_SUPPRESSED) { + ratelimit = true; } - ratelimit = status == BCLog::LogRateLimiter::Status::STILL_SUPPRESSED; - // To avoid confusion caused by dropped log messages when debugging an issue, - // we prefix log lines with "[*]" when there are any suppressed source locations. - if (m_limiter->SuppressionsActive()) { - str_prefixed.insert(0, "[*] "); - } + } + + // To avoid confusion caused by dropped log messages when debugging an issue, + // we prefix log lines with "[*]" when there are any suppressed source locations. + if (m_limiter && m_limiter->SuppressionsActive()) { + str_prefixed.insert(0, "[*] "); } if (m_print_to_console) { @@ -552,8 +554,8 @@ void BCLog::LogRateLimiter::Reset() for (const auto& [source_loc, stats] : source_locations) { if (stats.m_dropped_bytes == 0) continue; LogPrintLevel_( - LogFlags::ALL, Level::Info, /*should_ratelimit=*/false, - "Restarting logging from %s:%d (%s): %d bytes were dropped during the last %ss.\n", + LogFlags::ALL, Level::Warning, /*should_ratelimit=*/false, + "Restarting logging from %s:%d (%s): %d bytes were dropped during the last %ss.", source_loc.file_name(), source_loc.line(), source_loc.function_name(), stats.m_dropped_bytes, Ticks(m_reset_window)); } From fab2980bdc55b5c77f574f879a6ab62db5eda427 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc?= Date: Mon, 14 Jul 2025 21:51:20 -0700 Subject: [PATCH 0129/2775] assumevalid: log every script validation state change The `-assumevalid` option skips script verification for a specified block and all its ancestors during Initial Block Download. Many new users are surprised when this suddenly slows their node to a halt. This commit adds a log message to clearly indicate when this optimization ends and full validation begins (and vice versa). When using `-assumeutxo`, logging is suppressed for the active assumed-valid chainstate and for the background validation chainstate to avoid the confusing toggles. ------- > cmake -B build && cmake --build build && mkdir -p demo && build/bin/bitcoind -datadir=demo -stopatheight=500 | grep 'signature validation' ``` 2025-08-08T20:59:21Z Disabling signature validations at block #1 (00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048). 2025-08-08T20:59:21Z Enabling signature validations at block #100 (000000007bc154e0fa7ea32218a72fe2c1bb9f86cf8c9ebf9a715ed27fdb229a). 2025-08-08T20:59:21Z Disabling signature validations at block #200 (000000008f1a7008320c16b8402b7f11e82951f44ca2663caf6860ab2eeef320). 2025-08-08T20:59:21Z Enabling signature validations at block #300 (0000000062b69e4a2c3312a5782d7798b0711e9ebac065cd5d19f946439f8609). ``` --- src/validation.cpp | 5 +++++ src/validation.h | 2 ++ test/functional/feature_assumevalid.py | 12 ++++++------ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/validation.cpp b/src/validation.cpp index cf5f546912dd..27ad61d35792 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -2580,6 +2580,11 @@ bool Chainstate::ConnectBlock(const CBlock& block, BlockValidationState& state, Ticks(m_chainman.time_forks), Ticks(m_chainman.time_forks) / m_chainman.num_blocks_total); + if (fScriptChecks != m_prev_script_checks_logged && GetRole() == ChainstateRole::NORMAL) { + LogInfo("%s signature validations at block #%d (%s).", fScriptChecks ? "Enabling" : "Disabling", pindex->nHeight, block_hash.ToString()); + m_prev_script_checks_logged = fScriptChecks; + } + CBlockUndo blockundo; // Precomputed transaction data pointers must not be invalidated diff --git a/src/validation.h b/src/validation.h index c25dd2de2d96..870d56d1931b 100644 --- a/src/validation.h +++ b/src/validation.h @@ -550,6 +550,8 @@ class Chainstate //! Cached result of LookupBlockIndex(*m_from_snapshot_blockhash) mutable const CBlockIndex* m_cached_snapshot_base GUARDED_BY(::cs_main){nullptr}; + std::atomic_bool m_prev_script_checks_logged{true}; + public: //! Reference to a BlockManager instance which itself is shared across all //! Chainstate instances. diff --git a/test/functional/feature_assumevalid.py b/test/functional/feature_assumevalid.py index 7d097b1395b5..5f7fff82051e 100755 --- a/test/functional/feature_assumevalid.py +++ b/test/functional/feature_assumevalid.py @@ -153,12 +153,12 @@ def run_test(self): p2p1 = self.nodes[1].add_p2p_connection(BaseNode()) p2p1.send_header_for_blocks(self.blocks[0:2000]) p2p1.send_header_for_blocks(self.blocks[2000:]) - - # Send all blocks to node1. All blocks will be accepted. - for i in range(2202): - p2p1.send_without_ping(msg_block(self.blocks[i])) - # Syncing 2200 blocks can take a while on slow systems. Give it plenty of time to sync. - p2p1.sync_with_ping(timeout=960) + with self.nodes[1].assert_debug_log(expected_msgs=['Disabling signature validations at block #1', 'Enabling signature validations at block #103']): + # Send all blocks to node1. All blocks will be accepted. + for i in range(2202): + p2p1.send_without_ping(msg_block(self.blocks[i])) + # Syncing 2200 blocks can take a while on slow systems. Give it plenty of time to sync. + p2p1.sync_with_ping(timeout=960) assert_equal(self.nodes[1].getblock(self.nodes[1].getbestblockhash())['height'], 2202) p2p2 = self.nodes[2].add_p2p_connection(BaseNode()) From ca64b71ed5ecbef66d4bb294dfcdff638157632c Mon Sep 17 00:00:00 2001 From: UdjinM6 Date: Sat, 9 Aug 2025 12:31:59 +0300 Subject: [PATCH 0130/2775] test: fix scripts in `blockfilter_basic_test` --- src/test/blockfilter_tests.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/test/blockfilter_tests.cpp b/src/test/blockfilter_tests.cpp index 470fdde30a3e..8e21d3457229 100644 --- a/src/test/blockfilter_tests.cpp +++ b/src/test/blockfilter_tests.cpp @@ -59,21 +59,21 @@ BOOST_AUTO_TEST_CASE(blockfilter_basic_test) CScript included_scripts[5], excluded_scripts[4]; // First two are outputs on a single transaction. - included_scripts[0] << std::vector(0, 65) << OP_CHECKSIG; - included_scripts[1] << OP_DUP << OP_HASH160 << std::vector(1, 20) << OP_EQUALVERIFY << OP_CHECKSIG; + included_scripts[0] << std::vector(65, 0) << OP_CHECKSIG; + included_scripts[1] << OP_DUP << OP_HASH160 << std::vector(20, 1) << OP_EQUALVERIFY << OP_CHECKSIG; // Third is an output on in a second transaction. - included_scripts[2] << OP_1 << std::vector(2, 33) << OP_1 << OP_CHECKMULTISIG; + included_scripts[2] << OP_1 << std::vector(33, 2) << OP_1 << OP_CHECKMULTISIG; // Last two are spent by a single transaction. - included_scripts[3] << OP_0 << std::vector(3, 32); + included_scripts[3] << OP_0 << std::vector(32, 3); included_scripts[4] << OP_4 << OP_ADD << OP_8 << OP_EQUAL; // OP_RETURN output is an output on the second transaction. - excluded_scripts[0] << OP_RETURN << std::vector(4, 40); + excluded_scripts[0] << OP_RETURN << std::vector(40, 4); // This script is not related to the block at all. - excluded_scripts[1] << std::vector(5, 33) << OP_CHECKSIG; + excluded_scripts[1] << std::vector(33, 5) << OP_CHECKSIG; // OP_RETURN is non-standard since it's not followed by a data push, but is still excluded from // filter. From f83c01d8824e66a7aeb987911332a06689a06d59 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Mon, 11 Aug 2025 14:54:40 +0100 Subject: [PATCH 0131/2775] ci: Update `actions/checkout` version --- .github/workflows/ci.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d2526abdc38d..df4e02e7a153 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,7 +38,7 @@ jobs: steps: - name: Determine fetch depth run: echo "FETCH_DEPTH=$((${{ github.event.pull_request.commits }} + 2))" >> "$GITHUB_ENV" - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: ref: ${{ github.event.pull_request.head.sha }} fetch-depth: ${{ env.FETCH_DEPTH }} @@ -116,7 +116,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Clang version run: | @@ -183,7 +183,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Configure Developer Command Prompt for Microsoft Visual C++ # Using microsoft/setup-msbuild is not enough. @@ -293,7 +293,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Set CI directories run: | @@ -347,7 +347,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Download built executables uses: actions/download-artifact@v4 @@ -416,7 +416,7 @@ jobs: DANGER_CI_ON_HOST_FOLDERS: 1 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Set CI directories run: | From 326f24472487dc7f447839136db2ccf60833e9a2 Mon Sep 17 00:00:00 2001 From: marcofleon Date: Wed, 23 Jul 2025 17:16:09 +0100 Subject: [PATCH 0132/2775] refactor: Convert RPCs and `merkleblock` from uint256 to Txid --- src/merkleblock.cpp | 16 ++++++------- src/merkleblock.h | 13 ++++++----- src/net_processing.cpp | 5 ++-- src/rpc/mempool.cpp | 20 ++++++++-------- src/rpc/mining.cpp | 14 ++++++------ src/rpc/rawtransaction.cpp | 6 ++--- src/rpc/txoutproof.cpp | 6 ++--- src/test/bloom_tests.cpp | 42 +++++++++++++++++----------------- src/test/fuzz/merkleblock.cpp | 2 +- src/test/merkleblock_tests.cpp | 8 +++---- src/test/pmt_tests.cpp | 22 +++++++++--------- src/wallet/rpc/backup.cpp | 4 ++-- 12 files changed, 78 insertions(+), 80 deletions(-) diff --git a/src/merkleblock.cpp b/src/merkleblock.cpp index 669c6e3b7001..34ff06e53a7a 100644 --- a/src/merkleblock.cpp +++ b/src/merkleblock.cpp @@ -32,7 +32,7 @@ CMerkleBlock::CMerkleBlock(const CBlock& block, CBloomFilter* filter, const std: header = block.GetBlockHeader(); std::vector vMatch; - std::vector vHashes; + std::vector vHashes; vMatch.reserve(block.vtx.size()); vHashes.reserve(block.vtx.size()); @@ -55,13 +55,13 @@ CMerkleBlock::CMerkleBlock(const CBlock& block, CBloomFilter* filter, const std: } // NOLINTNEXTLINE(misc-no-recursion) -uint256 CPartialMerkleTree::CalcHash(int height, unsigned int pos, const std::vector &vTxid) { +uint256 CPartialMerkleTree::CalcHash(int height, unsigned int pos, const std::vector &vTxid) { //we can never have zero txs in a merkle block, we always need the coinbase tx //if we do not have this assert, we can hit a memory access violation when indexing into vTxid assert(vTxid.size() != 0); if (height == 0) { // hash at height 0 is the txids themselves - return vTxid[pos]; + return vTxid[pos].ToUint256(); } else { // calculate left hash uint256 left = CalcHash(height-1, pos*2, vTxid), right; @@ -76,7 +76,7 @@ uint256 CPartialMerkleTree::CalcHash(int height, unsigned int pos, const std::ve } // NOLINTNEXTLINE(misc-no-recursion) -void CPartialMerkleTree::TraverseAndBuild(int height, unsigned int pos, const std::vector &vTxid, const std::vector &vMatch) { +void CPartialMerkleTree::TraverseAndBuild(int height, unsigned int pos, const std::vector &vTxid, const std::vector &vMatch) { // determine whether this node is the parent of at least one matched txid bool fParentOfMatch = false; for (unsigned int p = pos << height; p < (pos+1) << height && p < nTransactions; p++) @@ -95,7 +95,7 @@ void CPartialMerkleTree::TraverseAndBuild(int height, unsigned int pos, const st } // NOLINTNEXTLINE(misc-no-recursion) -uint256 CPartialMerkleTree::TraverseAndExtract(int height, unsigned int pos, unsigned int &nBitsUsed, unsigned int &nHashUsed, std::vector &vMatch, std::vector &vnIndex) { +uint256 CPartialMerkleTree::TraverseAndExtract(int height, unsigned int pos, unsigned int &nBitsUsed, unsigned int &nHashUsed, std::vector &vMatch, std::vector &vnIndex) { if (nBitsUsed >= vBits.size()) { // overflowed the bits array - failure fBad = true; @@ -111,7 +111,7 @@ uint256 CPartialMerkleTree::TraverseAndExtract(int height, unsigned int pos, uns } const uint256 &hash = vHash[nHashUsed++]; if (height==0 && fParentOfMatch) { // in case of height 0, we have a matched txid - vMatch.push_back(hash); + vMatch.push_back(Txid::FromUint256(hash)); vnIndex.push_back(pos); } return hash; @@ -133,7 +133,7 @@ uint256 CPartialMerkleTree::TraverseAndExtract(int height, unsigned int pos, uns } } -CPartialMerkleTree::CPartialMerkleTree(const std::vector &vTxid, const std::vector &vMatch) : nTransactions(vTxid.size()), fBad(false) { +CPartialMerkleTree::CPartialMerkleTree(const std::vector &vTxid, const std::vector &vMatch) : nTransactions(vTxid.size()), fBad(false) { // reset state vBits.clear(); vHash.clear(); @@ -149,7 +149,7 @@ CPartialMerkleTree::CPartialMerkleTree(const std::vector &vTxid, const CPartialMerkleTree::CPartialMerkleTree() : nTransactions(0), fBad(true) {} -uint256 CPartialMerkleTree::ExtractMatches(std::vector &vMatch, std::vector &vnIndex) { +uint256 CPartialMerkleTree::ExtractMatches(std::vector &vMatch, std::vector &vnIndex) { vMatch.clear(); // An empty set will not work if (nTransactions == 0) diff --git a/src/merkleblock.h b/src/merkleblock.h index 945b7d3341c4..8f1d45a3d772 100644 --- a/src/merkleblock.h +++ b/src/merkleblock.h @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -73,16 +74,16 @@ class CPartialMerkleTree } /** calculate the hash of a node in the merkle tree (at leaf level: the txid's themselves) */ - uint256 CalcHash(int height, unsigned int pos, const std::vector &vTxid); + uint256 CalcHash(int height, unsigned int pos, const std::vector &vTxid); /** recursive function that traverses tree nodes, storing the data as bits and hashes */ - void TraverseAndBuild(int height, unsigned int pos, const std::vector &vTxid, const std::vector &vMatch); + void TraverseAndBuild(int height, unsigned int pos, const std::vector &vTxid, const std::vector &vMatch); /** * recursive function that traverses tree nodes, consuming the bits and hashes produced by TraverseAndBuild. * it returns the hash of the respective node and its respective index. */ - uint256 TraverseAndExtract(int height, unsigned int pos, unsigned int &nBitsUsed, unsigned int &nHashUsed, std::vector &vMatch, std::vector &vnIndex); + uint256 TraverseAndExtract(int height, unsigned int pos, unsigned int &nBitsUsed, unsigned int &nHashUsed, std::vector &vMatch, std::vector &vnIndex); public: @@ -97,7 +98,7 @@ class CPartialMerkleTree } /** Construct a partial merkle tree from a list of transaction ids, and a mask that selects a subset of them */ - CPartialMerkleTree(const std::vector &vTxid, const std::vector &vMatch); + CPartialMerkleTree(const std::vector &vTxid, const std::vector &vMatch); CPartialMerkleTree(); @@ -106,7 +107,7 @@ class CPartialMerkleTree * and their respective indices within the partial tree. * returns the merkle root, or 0 in case of failure */ - uint256 ExtractMatches(std::vector &vMatch, std::vector &vnIndex); + uint256 ExtractMatches(std::vector &vMatch, std::vector &vnIndex); /** Get number of transactions the merkle proof is indicating for cross-reference with * local blockchain knowledge. @@ -135,7 +136,7 @@ class CMerkleBlock * Used only when a bloom filter is specified to allow * testing the transactions which matched the bloom filter. */ - std::vector > vMatchedTxn; + std::vector > vMatchedTxn; /** * Create from a CBlock, filtering transactions according to filter diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 28e6cc7bb885..ba919facaabd 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -2352,9 +2352,8 @@ void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CInv& // they must either disconnect and retry or request the full block. // Thus, the protocol spec specified allows for us to provide duplicate txn here, // however we MUST always provide at least what the remote peer needs - typedef std::pair PairType; - for (PairType& pair : merkleBlock.vMatchedTxn) - MakeAndPushMessage(pfrom, NetMsgType::TX, TX_NO_WITNESS(*pblock->vtx[pair.first])); + for (const auto& [tx_idx, _] : merkleBlock.vMatchedTxn) + MakeAndPushMessage(pfrom, NetMsgType::TX, TX_NO_WITNESS(*pblock->vtx[tx_idx])); } // else // no response diff --git a/src/rpc/mempool.cpp b/src/rpc/mempool.cpp index df5d22828b37..919c30464dd8 100644 --- a/src/rpc/mempool.cpp +++ b/src/rpc/mempool.cpp @@ -461,12 +461,12 @@ static RPCHelpMan getmempoolancestors() if (!request.params[1].isNull()) fVerbose = request.params[1].get_bool(); - uint256 hash = ParseHashV(request.params[0], "parameter 1"); + auto txid{Txid::FromUint256(ParseHashV(request.params[0], "txid"))}; const CTxMemPool& mempool = EnsureAnyMemPool(request.context); LOCK(mempool.cs); - const auto entry{mempool.GetEntry(Txid::FromUint256(hash))}; + const auto entry{mempool.GetEntry(txid)}; if (entry == nullptr) { throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Transaction not in mempool"); } @@ -483,10 +483,9 @@ static RPCHelpMan getmempoolancestors() UniValue o(UniValue::VOBJ); for (CTxMemPool::txiter ancestorIt : ancestors) { const CTxMemPoolEntry &e = *ancestorIt; - const uint256& _hash = e.GetTx().GetHash(); UniValue info(UniValue::VOBJ); entryToJSON(mempool, info, e); - o.pushKV(_hash.ToString(), std::move(info)); + o.pushKV(e.GetTx().GetHash().ToString(), std::move(info)); } return o; } @@ -523,7 +522,7 @@ static RPCHelpMan getmempooldescendants() if (!request.params[1].isNull()) fVerbose = request.params[1].get_bool(); - Txid txid{Txid::FromUint256(ParseHashV(request.params[0], "parameter 1"))}; + auto txid{Txid::FromUint256(ParseHashV(request.params[0], "txid"))}; const CTxMemPool& mempool = EnsureAnyMemPool(request.context); LOCK(mempool.cs); @@ -549,10 +548,9 @@ static RPCHelpMan getmempooldescendants() UniValue o(UniValue::VOBJ); for (CTxMemPool::txiter descendantIt : setDescendants) { const CTxMemPoolEntry &e = *descendantIt; - const uint256& _hash = e.GetTx().GetHash(); UniValue info(UniValue::VOBJ); entryToJSON(mempool, info, e); - o.pushKV(_hash.ToString(), std::move(info)); + o.pushKV(e.GetTx().GetHash().ToString(), std::move(info)); } return o; } @@ -576,12 +574,12 @@ static RPCHelpMan getmempoolentry() }, [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue { - uint256 hash = ParseHashV(request.params[0], "parameter 1"); + auto txid{Txid::FromUint256(ParseHashV(request.params[0], "txid"))}; const CTxMemPool& mempool = EnsureAnyMemPool(request.context); LOCK(mempool.cs); - const auto entry{mempool.GetEntry(Txid::FromUint256(hash))}; + const auto entry{mempool.GetEntry(txid)}; if (entry == nullptr) { throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Transaction not in mempool"); } @@ -1080,7 +1078,7 @@ static RPCHelpMan submitpackage() UniValue rpc_result{UniValue::VOBJ}; rpc_result.pushKV("package_msg", package_msg); UniValue tx_result_map{UniValue::VOBJ}; - std::set replaced_txids; + std::set replaced_txids; for (const auto& tx : txns) { UniValue result_inner{UniValue::VOBJ}; result_inner.pushKV("txid", tx->GetHash().GetHex()); @@ -1124,7 +1122,7 @@ static RPCHelpMan submitpackage() } rpc_result.pushKV("tx-results", std::move(tx_result_map)); UniValue replaced_list(UniValue::VARR); - for (const uint256& hash : replaced_txids) replaced_list.push_back(hash.ToString()); + for (const auto& txid : replaced_txids) replaced_list.push_back(txid.ToString()); rpc_result.pushKV("replaced-transactions", std::move(replaced_list)); return rpc_result; }, diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index f11305f16b8b..c66b6c1984ad 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -353,8 +353,8 @@ static RPCHelpMan generateblock() const auto& str{raw_txs_or_txids[i].get_str()}; CMutableTransaction mtx; - if (auto hash{uint256::FromHex(str)}) { - const auto tx{mempool.get(*hash)}; + if (auto txid{Txid::FromHex(str)}) { + const auto tx{mempool.get(*txid)}; if (!tx) { throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, strprintf("Transaction %s not in mempool.", str)); } @@ -517,7 +517,7 @@ static RPCHelpMan prioritisetransaction() { LOCK(cs_main); - uint256 hash(ParseHashV(request.params[0], "txid")); + auto txid{Txid::FromUint256(ParseHashV(request.params[0], "txid"))}; const auto dummy{self.MaybeArg("dummy")}; CAmount nAmount = request.params[2].getInt(); @@ -528,12 +528,12 @@ static RPCHelpMan prioritisetransaction() CTxMemPool& mempool = EnsureAnyMemPool(request.context); // Non-0 fee dust transactions are not allowed for entry, and modification not allowed afterwards - const auto& tx = mempool.get(hash); + const auto& tx = mempool.get(txid); if (mempool.m_opts.require_standard && tx && !GetDust(*tx, mempool.m_opts.dust_relay_feerate).empty()) { throw JSONRPCError(RPC_INVALID_PARAMETER, "Priority is not supported for transactions with dust outputs."); } - mempool.PrioritiseTransaction(hash, nAmount); + mempool.PrioritiseTransaction(txid, nAmount); return true; }, }; @@ -887,14 +887,14 @@ static RPCHelpMan getblocktemplate() UniValue aCaps(UniValue::VARR); aCaps.push_back("proposal"); UniValue transactions(UniValue::VARR); - std::map setTxIndex; + std::map setTxIndex; std::vector tx_fees{block_template->getTxFees()}; std::vector tx_sigops{block_template->getTxSigops()}; int i = 0; for (const auto& it : block.vtx) { const CTransaction& tx = *it; - uint256 txHash = tx.GetHash(); + Txid txHash = tx.GetHash(); setTxIndex[txHash] = i++; if (tx.IsCoinBase()) diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index 9c26e5c733c1..c87741a53894 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -322,10 +322,10 @@ static RPCHelpMan getrawtransaction() const NodeContext& node = EnsureAnyNodeContext(request.context); ChainstateManager& chainman = EnsureChainman(node); - uint256 hash = ParseHashV(request.params[0], "parameter 1"); + auto txid{Txid::FromUint256(ParseHashV(request.params[0], "parameter 1"))}; const CBlockIndex* blockindex = nullptr; - if (hash == chainman.GetParams().GenesisBlock().hashMerkleRoot) { + if (txid.ToUint256() == chainman.GetParams().GenesisBlock().hashMerkleRoot) { // Special exception for the genesis block coinbase transaction throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "The genesis block coinbase is not considered an ordinary transaction and cannot be retrieved"); } @@ -348,7 +348,7 @@ static RPCHelpMan getrawtransaction() } uint256 hash_block; - const CTransactionRef tx = GetTransaction(blockindex, node.mempool.get(), hash, hash_block, chainman.m_blockman); + const CTransactionRef tx = GetTransaction(blockindex, node.mempool.get(), txid, hash_block, chainman.m_blockman); if (!tx) { std::string errmsg; if (blockindex) { diff --git a/src/rpc/txoutproof.cpp b/src/rpc/txoutproof.cpp index a45e43819dab..2d98053d4d6c 100644 --- a/src/rpc/txoutproof.cpp +++ b/src/rpc/txoutproof.cpp @@ -150,7 +150,7 @@ static RPCHelpMan verifytxoutproof() UniValue res(UniValue::VARR); - std::vector vMatch; + std::vector vMatch; std::vector vIndex; if (merkleBlock.txn.ExtractMatches(vMatch, vIndex) != merkleBlock.header.hashMerkleRoot) return res; @@ -165,8 +165,8 @@ static RPCHelpMan verifytxoutproof() // Check if proof is valid, only add results if so if (pindex->nTx == merkleBlock.txn.GetNumTransactions()) { - for (const uint256& hash : vMatch) { - res.push_back(hash.GetHex()); + for (const auto& txid : vMatch) { + res.push_back(txid.GetHex()); } } diff --git a/src/test/bloom_tests.cpp b/src/test/bloom_tests.cpp index 1c732a8267e3..584c970e196a 100644 --- a/src/test/bloom_tests.cpp +++ b/src/test/bloom_tests.cpp @@ -181,12 +181,12 @@ BOOST_AUTO_TEST_CASE(merkle_block_1) BOOST_CHECK_EQUAL(merkleBlock.header.GetHash().GetHex(), block.GetHash().GetHex()); BOOST_CHECK_EQUAL(merkleBlock.vMatchedTxn.size(), 1U); - std::pair pair = merkleBlock.vMatchedTxn[0]; + std::pair pair = merkleBlock.vMatchedTxn[0]; - BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256{"74d681e0e03bafa802c8aa084379aa98d9fcd632ddc2ed9782b586ec87451f20"}); + BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == Txid::FromUint256(uint256{"74d681e0e03bafa802c8aa084379aa98d9fcd632ddc2ed9782b586ec87451f20"})); BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 8); - std::vector vMatched; + std::vector vMatched; std::vector vIndex; BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot); BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); @@ -202,7 +202,7 @@ BOOST_AUTO_TEST_CASE(merkle_block_1) BOOST_CHECK(merkleBlock.vMatchedTxn[1] == pair); - BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256{"dd1fd2a6fc16404faf339881a90adbde7f4f728691ac62e8f168809cdfae1053"}); + BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == Txid::FromUint256(uint256{"dd1fd2a6fc16404faf339881a90adbde7f4f728691ac62e8f168809cdfae1053"})); BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 7); BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot); @@ -229,12 +229,12 @@ BOOST_AUTO_TEST_CASE(merkle_block_2) BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); - std::pair pair = merkleBlock.vMatchedTxn[0]; + std::pair pair = merkleBlock.vMatchedTxn[0]; - BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256{"e980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70"}); + BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == Txid::FromUint256(uint256{"e980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70"})); BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0); - std::vector vMatched; + std::vector vMatched; std::vector vIndex; BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot); BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); @@ -253,13 +253,13 @@ BOOST_AUTO_TEST_CASE(merkle_block_2) BOOST_CHECK(pair == merkleBlock.vMatchedTxn[0]); - BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256{"28204cad1d7fc1d199e8ef4fa22f182de6258a3eaafe1bbe56ebdcacd3069a5f"}); + BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == Txid::FromUint256(uint256{"28204cad1d7fc1d199e8ef4fa22f182de6258a3eaafe1bbe56ebdcacd3069a5f"})); BOOST_CHECK(merkleBlock.vMatchedTxn[1].first == 1); - BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256{"6b0f8a73a56c04b519f1883e8aafda643ba61a30bd1439969df21bea5f4e27e2"}); + BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == Txid::FromUint256(uint256{"6b0f8a73a56c04b519f1883e8aafda643ba61a30bd1439969df21bea5f4e27e2"})); BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 2); - BOOST_CHECK(merkleBlock.vMatchedTxn[3].second == uint256{"3c1d7e82342158e4109df2e0b6348b6e84e403d8b4046d7007663ace63cddb23"}); + BOOST_CHECK(merkleBlock.vMatchedTxn[3].second == Txid::FromUint256(uint256{"3c1d7e82342158e4109df2e0b6348b6e84e403d8b4046d7007663ace63cddb23"})); BOOST_CHECK(merkleBlock.vMatchedTxn[3].first == 3); BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot); @@ -286,12 +286,12 @@ BOOST_AUTO_TEST_CASE(merkle_block_2_with_update_none) BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); - std::pair pair = merkleBlock.vMatchedTxn[0]; + std::pair pair = merkleBlock.vMatchedTxn[0]; - BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256{"e980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70"}); + BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == Txid::FromUint256(uint256{"e980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70"})); BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0); - std::vector vMatched; + std::vector vMatched; std::vector vIndex; BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot); BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); @@ -310,10 +310,10 @@ BOOST_AUTO_TEST_CASE(merkle_block_2_with_update_none) BOOST_CHECK(pair == merkleBlock.vMatchedTxn[0]); - BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256{"28204cad1d7fc1d199e8ef4fa22f182de6258a3eaafe1bbe56ebdcacd3069a5f"}); + BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == Txid::FromUint256(uint256{"28204cad1d7fc1d199e8ef4fa22f182de6258a3eaafe1bbe56ebdcacd3069a5f"})); BOOST_CHECK(merkleBlock.vMatchedTxn[1].first == 1); - BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256{"3c1d7e82342158e4109df2e0b6348b6e84e403d8b4046d7007663ace63cddb23"}); + BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == Txid::FromUint256(uint256{"3c1d7e82342158e4109df2e0b6348b6e84e403d8b4046d7007663ace63cddb23"})); BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 3); BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot); @@ -341,10 +341,10 @@ BOOST_AUTO_TEST_CASE(merkle_block_3_and_serialize) BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); - BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256{"63194f18be0af63f2c6bc9dc0f777cbefed3d9415c4af83f3ee3a3d669c00cb5"}); + BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == Txid::FromUint256(uint256{"63194f18be0af63f2c6bc9dc0f777cbefed3d9415c4af83f3ee3a3d669c00cb5"})); BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0); - std::vector vMatched; + std::vector vMatched; std::vector vIndex; BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot); BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); @@ -376,12 +376,12 @@ BOOST_AUTO_TEST_CASE(merkle_block_4) BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); - std::pair pair = merkleBlock.vMatchedTxn[0]; + std::pair pair = merkleBlock.vMatchedTxn[0]; - BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256{"0a2a92f0bda4727d0a13eaddf4dd9ac6b5c61a1429e6b2b818f19b15df0ac154"}); + BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == Txid::FromUint256(uint256{"0a2a92f0bda4727d0a13eaddf4dd9ac6b5c61a1429e6b2b818f19b15df0ac154"})); BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 6); - std::vector vMatched; + std::vector vMatched; std::vector vIndex; BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot); BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); @@ -395,7 +395,7 @@ BOOST_AUTO_TEST_CASE(merkle_block_4) BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 2); - BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256{"02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df5bc041"}); + BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == Txid::FromUint256(uint256{"02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df5bc041"})); BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 3); BOOST_CHECK(merkleBlock.vMatchedTxn[1] == pair); diff --git a/src/test/fuzz/merkleblock.cpp b/src/test/fuzz/merkleblock.cpp index e03e628444e8..b203acb0831b 100644 --- a/src/test/fuzz/merkleblock.cpp +++ b/src/test/fuzz/merkleblock.cpp @@ -43,7 +43,7 @@ FUZZ_TARGET(merkleblock) partial_merkle_tree = merkle_block.txn; }); (void)partial_merkle_tree.GetNumTransactions(); - std::vector matches; + std::vector matches; std::vector indices; (void)partial_merkle_tree.ExtractMatches(matches, indices); } diff --git a/src/test/merkleblock_tests.cpp b/src/test/merkleblock_tests.cpp index 73dbe3371439..48a61a3fc0d7 100644 --- a/src/test/merkleblock_tests.cpp +++ b/src/test/merkleblock_tests.cpp @@ -39,17 +39,17 @@ BOOST_AUTO_TEST_CASE(merkleblock_construct_from_txids_found) // vMatchedTxn is only used when bloom filter is specified. BOOST_CHECK_EQUAL(merkleBlock.vMatchedTxn.size(), 0U); - std::vector vMatched; + std::vector vMatched; std::vector vIndex; BOOST_CHECK_EQUAL(merkleBlock.txn.ExtractMatches(vMatched, vIndex).GetHex(), block.hashMerkleRoot.GetHex()); BOOST_CHECK_EQUAL(vMatched.size(), 2U); // Ordered by occurrence in depth-first tree traversal. - BOOST_CHECK_EQUAL(vMatched[0].ToString(), txhash2.ToString()); + BOOST_CHECK_EQUAL(vMatched[0], txhash2); BOOST_CHECK_EQUAL(vIndex[0], 1U); - BOOST_CHECK_EQUAL(vMatched[1].ToString(), txhash1.ToString()); + BOOST_CHECK_EQUAL(vMatched[1], txhash1); BOOST_CHECK_EQUAL(vIndex[1], 8U); } @@ -69,7 +69,7 @@ BOOST_AUTO_TEST_CASE(merkleblock_construct_from_txids_not_found) BOOST_CHECK_EQUAL(merkleBlock.header.GetHash().GetHex(), block.GetHash().GetHex()); BOOST_CHECK_EQUAL(merkleBlock.vMatchedTxn.size(), 0U); - std::vector vMatched; + std::vector vMatched; std::vector vIndex; BOOST_CHECK_EQUAL(merkleBlock.txn.ExtractMatches(vMatched, vIndex).GetHex(), block.hashMerkleRoot.GetHex()); diff --git a/src/test/pmt_tests.cpp b/src/test/pmt_tests.cpp index 2ba48d717ab6..b7bf50626499 100644 --- a/src/test/pmt_tests.cpp +++ b/src/test/pmt_tests.cpp @@ -48,7 +48,7 @@ BOOST_AUTO_TEST_CASE(pmt_test1) // calculate actual merkle root and height uint256 merkleRoot1 = BlockMerkleRoot(block); - std::vector vTxid(nTx, uint256()); + std::vector vTxid(nTx); for (unsigned int j=0; jGetHash(); int nHeight = 1, nTx_ = nTx; @@ -61,7 +61,7 @@ BOOST_AUTO_TEST_CASE(pmt_test1) for (int att = 1; att < 15; att++) { // build random subset of txid's std::vector vMatch(nTx, false); - std::vector vMatchTxid1; + std::vector vMatchTxid1; for (unsigned int j=0; j> pmt2; // extract merkle root and matched txids from copy - std::vector vMatchTxid2; + std::vector vMatchTxid2; std::vector vIndex; uint256 merkleRoot2 = pmt2.ExtractMatches(vMatchTxid2, vIndex); @@ -100,7 +100,7 @@ BOOST_AUTO_TEST_CASE(pmt_test1) for (int j=0; j<4; j++) { CPartialMerkleTreeTester pmt3(pmt2); pmt3.Damage(); - std::vector vMatchTxid3; + std::vector vMatchTxid3; uint256 merkleRoot3 = pmt3.ExtractMatches(vMatchTxid3, vIndex); BOOST_CHECK(merkleRoot3 != merkleRoot1); } @@ -110,13 +110,13 @@ BOOST_AUTO_TEST_CASE(pmt_test1) BOOST_AUTO_TEST_CASE(pmt_malleability) { - std::vector vTxid{ - uint256{1}, uint256{2}, - uint256{3}, uint256{4}, - uint256{5}, uint256{6}, - uint256{7}, uint256{8}, - uint256{9}, uint256{10}, - uint256{9}, uint256{10}, + std::vector vTxid{ + Txid::FromUint256(uint256{1}), Txid::FromUint256(uint256{2}), + Txid::FromUint256(uint256{3}), Txid::FromUint256(uint256{4}), + Txid::FromUint256(uint256{5}), Txid::FromUint256(uint256{6}), + Txid::FromUint256(uint256{7}), Txid::FromUint256(uint256{8}), + Txid::FromUint256(uint256{9}), Txid::FromUint256(uint256{10}), + Txid::FromUint256(uint256{9}), Txid::FromUint256(uint256{10}), }; std::vector vMatch = {false, false, false, false, false, false, false, false, false, true, true, false}; diff --git a/src/wallet/rpc/backup.cpp b/src/wallet/rpc/backup.cpp index edd1fb86c99e..e81092148562 100644 --- a/src/wallet/rpc/backup.cpp +++ b/src/wallet/rpc/backup.cpp @@ -60,7 +60,7 @@ RPCHelpMan importprunedfunds() ssMB >> merkleBlock; //Search partial merkle tree in proof for our transaction and index in valid block - std::vector vMatch; + std::vector vMatch; std::vector vIndex; if (merkleBlock.txn.ExtractMatches(vMatch, vIndex) != merkleBlock.header.hashMerkleRoot) { throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Something wrong with merkleblock"); @@ -72,7 +72,7 @@ RPCHelpMan importprunedfunds() throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Block not found in chain"); } - std::vector::const_iterator it; + std::vector::const_iterator it; if ((it = std::find(vMatch.begin(), vMatch.end(), tx.GetHash())) == vMatch.end()) { throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Transaction given doesn't exist in proof"); } From aeb0f783305c923ee7667c46ca0ff7e1b96ed45c Mon Sep 17 00:00:00 2001 From: marcofleon Date: Tue, 29 Jul 2025 15:32:57 +0100 Subject: [PATCH 0133/2775] refactor: Convert `mini_miner` from uint256 to Txid --- src/node/mini_miner.cpp | 13 +++++-------- src/node/mini_miner.h | 12 ++++++------ src/test/miniminer_tests.cpp | 16 ++++------------ src/txmempool.cpp | 6 +++--- src/txmempool.h | 4 ++-- 5 files changed, 20 insertions(+), 31 deletions(-) diff --git a/src/node/mini_miner.cpp b/src/node/mini_miner.cpp index dec1060ab7f1..a1c2edcb7bbf 100644 --- a/src/node/mini_miner.cpp +++ b/src/node/mini_miner.cpp @@ -16,6 +16,7 @@ #include #include +#include #include namespace node { @@ -61,12 +62,8 @@ MiniMiner::MiniMiner(const CTxMemPool& mempool, const std::vector& ou if (m_requested_outpoints_by_txid.empty()) return; // Calculate the cluster and construct the entry map. - std::vector txids_needed; - txids_needed.reserve(m_requested_outpoints_by_txid.size()); - for (const auto& [txid, _]: m_requested_outpoints_by_txid) { - txids_needed.push_back(txid); - } - const auto cluster = mempool.GatherClusters(txids_needed); + auto txids_needed{m_requested_outpoints_by_txid | std::views::keys}; + const auto cluster = mempool.GatherClusters({txids_needed.begin(), txids_needed.end()}); if (cluster.empty()) { // An empty cluster means that at least one of the transactions is missing from the mempool // (should not be possible given processing above) or DoS limit was hit. @@ -286,7 +283,7 @@ void MiniMiner::BuildMockTemplate(std::optional target_feerate) } // Track the order in which transactions were selected. for (const auto& ancestor : ancestors) { - m_inclusion_order.emplace(Txid::FromUint256(ancestor->first), sequence_num); + m_inclusion_order.emplace(ancestor->first, sequence_num); } DeleteAncestorPackage(ancestors); SanityCheck(); @@ -409,7 +406,7 @@ std::optional MiniMiner::CalculateTotalBumpFees(const CFeeRate& target_ ancestors.insert(iter); } - std::set has_been_processed; + std::set has_been_processed; while (!to_process.empty()) { auto iter = to_process.begin(); const CTransaction& tx = (*iter)->second.GetTx(); diff --git a/src/node/mini_miner.h b/src/node/mini_miner.h index 73143e829e71..d07108cb1c26 100644 --- a/src/node/mini_miner.h +++ b/src/node/mini_miner.h @@ -83,12 +83,12 @@ class MiniMiner // Set once per lifetime, fill in during initialization. // txids of to-be-replaced transactions - std::set m_to_be_replaced; + std::set m_to_be_replaced; // If multiple argument outpoints correspond to the same transaction, cache them together in // a single entry indexed by txid. Then we can just work with txids since all outpoints from // the same tx will have the same bumpfee. Excludes non-mempool transactions. - std::map> m_requested_outpoints_by_txid; + std::map> m_requested_outpoints_by_txid; // Txid to a number representing the order in which this transaction was included (smaller // number = included earlier). Transactions included in an ancestor set together have the same @@ -98,21 +98,21 @@ class MiniMiner std::map m_bump_fees; // The constructed block template - std::set m_in_block; + std::set m_in_block; // Information on the current status of the block CAmount m_total_fees{0}; int32_t m_total_vsize{0}; /** Main data structure holding the entries, can be indexed by txid */ - std::map m_entries_by_txid; + std::map m_entries_by_txid; using MockEntryMap = decltype(m_entries_by_txid); /** Vector of entries, can be sorted by ancestor feerate. */ std::vector m_entries; /** Map of txid to its descendants. Should be inclusive. */ - std::map> m_descendant_set_by_txid; + std::map> m_descendant_set_by_txid; /** Consider this ancestor package "mined" so remove all these entries from our data structures. */ void DeleteAncestorPackage(const std::set& ancestors); @@ -129,7 +129,7 @@ class MiniMiner void BuildMockTemplate(std::optional target_feerate); /** Returns set of txids in the block template if one has been constructed. */ - std::set GetMockTemplateTxids() const { return m_in_block; } + std::set GetMockTemplateTxids() const { return m_in_block; } /** Constructor that takes a list of outpoints that may or may not belong to transactions in the * mempool. Copies out information about the relevant transactions in the mempool into diff --git a/src/test/miniminer_tests.cpp b/src/test/miniminer_tests.cpp index d1fec479a068..4d4cf940e37e 100644 --- a/src/test/miniminer_tests.cpp +++ b/src/test/miniminer_tests.cpp @@ -103,7 +103,7 @@ BOOST_FIXTURE_TEST_CASE(miniminer_negative, TestChain100Setup) mini_miner_no_target.BuildMockTemplate(std::nullopt); const auto template_txids{mini_miner_no_target.GetMockTemplateTxids()}; BOOST_CHECK_EQUAL(template_txids.size(), 1); - BOOST_CHECK(template_txids.count(tx_mod_negative->GetHash().ToUint256()) > 0); + BOOST_CHECK(template_txids.count(tx_mod_negative->GetHash()) > 0); } BOOST_FIXTURE_TEST_CASE(miniminer_1p1c, TestChain100Setup) @@ -177,7 +177,7 @@ BOOST_FIXTURE_TEST_CASE(miniminer_1p1c, TestChain100Setup) struct TxDimensions { int32_t vsize; CAmount mod_fee; CFeeRate feerate; }; - std::map tx_dims; + std::map tx_dims; for (const auto& tx : all_transactions) { const auto& entry{*Assert(pool.GetEntry(tx->GetHash()))}; tx_dims.emplace(tx->GetHash(), TxDimensions{entry.GetTxSize(), entry.GetModifiedFee(), @@ -590,14 +590,6 @@ BOOST_FIXTURE_TEST_CASE(calculate_cluster, TestChain100Setup) CTxMemPool& pool = *Assert(m_node.mempool); LOCK2(cs_main, pool.cs); - // TODO this can be removed once the mempool interface uses Txid, Wtxid - auto convert_to_uint256_vec = [](const std::vector& vec) -> std::vector { - std::vector out; - std::transform(vec.begin(), vec.end(), std::back_inserter(out), - [](const Txid& txid) { return txid.ToUint256(); }); - return out; - }; - // Add chain of size 500 TestMemPoolEntryHelper entry; std::vector chain_txids; @@ -611,7 +603,7 @@ BOOST_FIXTURE_TEST_CASE(calculate_cluster, TestChain100Setup) const auto cluster_500tx = pool.GatherClusters({lasttx->GetHash()}); CTxMemPool::setEntries cluster_500tx_set{cluster_500tx.begin(), cluster_500tx.end()}; BOOST_CHECK_EQUAL(cluster_500tx.size(), cluster_500tx_set.size()); - const auto vec_iters_500 = pool.GetIterVec(convert_to_uint256_vec(chain_txids)); + const auto vec_iters_500 = pool.GetIterVec(chain_txids); for (const auto& iter : vec_iters_500) BOOST_CHECK(cluster_500tx_set.count(iter)); // GatherClusters stops at 500 transactions. @@ -637,7 +629,7 @@ BOOST_FIXTURE_TEST_CASE(calculate_cluster, TestChain100Setup) AddToMempool(pool, entry.Fee(CENT).FromTx(txc)); zigzag_txids.push_back(txc->GetHash()); } - const auto vec_iters_zigzag = pool.GetIterVec(convert_to_uint256_vec(zigzag_txids)); + const auto vec_iters_zigzag = pool.GetIterVec(zigzag_txids); // It doesn't matter which tx we calculate cluster for, everybody is in it. const std::vector indices{0, 22, 72, zigzag_txids.size() - 1}; for (const auto index : indices) { diff --git a/src/txmempool.cpp b/src/txmempool.cpp index bdc40cddfe19..d19d0a47270b 100644 --- a/src/txmempool.cpp +++ b/src/txmempool.cpp @@ -983,13 +983,13 @@ CTxMemPool::setEntries CTxMemPool::GetIterSet(const std::set& hashes) cons return ret; } -std::vector CTxMemPool::GetIterVec(const std::vector& txids) const +std::vector CTxMemPool::GetIterVec(const std::vector& txids) const { AssertLockHeld(cs); std::vector ret; ret.reserve(txids.size()); for (const auto& txid : txids) { - const auto it{GetIter(Txid::FromUint256(txid))}; + const auto it{GetIter(txid)}; if (!it) return {}; ret.push_back(*it); } @@ -1227,7 +1227,7 @@ void CTxMemPool::SetLoadTried(bool load_tried) m_load_tried = load_tried; } -std::vector CTxMemPool::GatherClusters(const std::vector& txids) const +std::vector CTxMemPool::GatherClusters(const std::vector& txids) const { AssertLockHeld(cs); std::vector clustered_txs{GetIterVec(txids)}; diff --git a/src/txmempool.h b/src/txmempool.h index 03373037395c..048ad23fd5f1 100644 --- a/src/txmempool.h +++ b/src/txmempool.h @@ -491,7 +491,7 @@ class CTxMemPool /** Translate a list of hashes into a list of mempool iterators to avoid repeated lookups. * The nth element in txids becomes the nth element in the returned vector. If any of the txids * don't actually exist in the mempool, returns an empty vector. */ - std::vector GetIterVec(const std::vector& txids) const EXCLUSIVE_LOCKS_REQUIRED(cs); + std::vector GetIterVec(const std::vector& txids) const EXCLUSIVE_LOCKS_REQUIRED(cs); /** UpdateTransactionsFromBlock is called when adding transactions from a * disconnected block back to the mempool, new mempool entries may have @@ -548,7 +548,7 @@ class CTxMemPool * All txids must correspond to transaction entries in the mempool, otherwise this returns an * empty vector. This call will also exit early and return an empty vector if it collects 500 or * more transactions as a DoS protection. */ - std::vector GatherClusters(const std::vector& txids) const EXCLUSIVE_LOCKS_REQUIRED(cs); + std::vector GatherClusters(const std::vector& txids) const EXCLUSIVE_LOCKS_REQUIRED(cs); /** Calculate all in-mempool ancestors of a set of transactions not already in the mempool and * check ancestor and descendant limits. Heuristics are used to estimate the ancestor and From f6c0d1d23128f742dfdda253752cba7db9bb0679 Mon Sep 17 00:00:00 2001 From: marcofleon Date: Tue, 1 Apr 2025 14:55:26 +0100 Subject: [PATCH 0134/2775] mempool, refactor: Convert uint256 to Txid --- src/interfaces/chain.h | 4 +-- src/net_processing.cpp | 4 +-- src/node/interfaces.cpp | 6 ++--- src/node/mempool_persist.cpp | 8 +++--- src/node/transaction.cpp | 2 +- src/node/transaction.h | 2 +- src/rest.cpp | 2 +- src/test/blockencodings_tests.cpp | 4 +-- src/test/fuzz/package_eval.cpp | 4 +-- src/test/fuzz/rbf.cpp | 2 +- src/test/fuzz/tx_pool.cpp | 4 +-- src/test/miner_tests.cpp | 2 +- src/test/policyestimator_tests.cpp | 11 +++----- src/txmempool.cpp | 43 +++++++++++++++--------------- src/txmempool.h | 34 +++++++++++------------ src/validation.cpp | 2 +- 16 files changed, 65 insertions(+), 69 deletions(-) diff --git a/src/interfaces/chain.h b/src/interfaces/chain.h index 56716ec673f5..82bfdb9fd308 100644 --- a/src/interfaces/chain.h +++ b/src/interfaces/chain.h @@ -211,7 +211,7 @@ class Chain virtual bool isInMempool(const Txid& txid) = 0; //! Check if transaction has descendants in mempool. - virtual bool hasDescendantsInMempool(const uint256& txid) = 0; + virtual bool hasDescendantsInMempool(const Txid& txid) = 0; //! Transaction is added to memory pool, if the transaction fee is below the //! amount specified by max_tx_fee, and broadcast to all peers if relay is set to true. @@ -222,7 +222,7 @@ class Chain std::string& err_string) = 0; //! Calculate mempool ancestor and descendant counts for the given transaction. - virtual void getTransactionAncestry(const uint256& txid, size_t& ancestors, size_t& descendants, size_t* ancestorsize = nullptr, CAmount* ancestorfees = nullptr) = 0; + virtual void getTransactionAncestry(const Txid& txid, size_t& ancestors, size_t& descendants, size_t* ancestorsize = nullptr, CAmount* ancestorfees = nullptr) = 0; //! For each outpoint, calculate the fee-bumping cost to spend this outpoint at the specified // feerate, including bumping its ancestors. For example, if the target feerate is 10sat/vbyte diff --git a/src/net_processing.cpp b/src/net_processing.cpp index ba919facaabd..546e14b8bce9 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -1577,13 +1577,13 @@ void PeerManagerImpl::InitializeNode(const CNode& node, ServiceFlags our_service void PeerManagerImpl::ReattemptInitialBroadcast(CScheduler& scheduler) { - std::set unbroadcast_txids = m_mempool.GetUnbroadcastTxs(); + std::set unbroadcast_txids = m_mempool.GetUnbroadcastTxs(); for (const auto& txid : unbroadcast_txids) { CTransactionRef tx = m_mempool.get(txid); if (tx != nullptr) { - RelayTransaction(Txid::FromUint256(txid), tx->GetWitnessHash()); + RelayTransaction(txid, tx->GetWitnessHash()); } else { m_mempool.RemoveUnbroadcastTx(txid, true); } diff --git a/src/node/interfaces.cpp b/src/node/interfaces.cpp index 62172930dca9..eeee4159ddac 100644 --- a/src/node/interfaces.cpp +++ b/src/node/interfaces.cpp @@ -673,11 +673,11 @@ class ChainImpl : public Chain LOCK(m_node.mempool->cs); return m_node.mempool->exists(txid); } - bool hasDescendantsInMempool(const uint256& txid) override + bool hasDescendantsInMempool(const Txid& txid) override { if (!m_node.mempool) return false; LOCK(m_node.mempool->cs); - const auto entry{m_node.mempool->GetEntry(Txid::FromUint256(txid))}; + const auto entry{m_node.mempool->GetEntry(txid)}; if (entry == nullptr) return false; return entry->GetCountWithDescendants() > 1; } @@ -692,7 +692,7 @@ class ChainImpl : public Chain // that Chain clients do not need to know about. return TransactionError::OK == err; } - void getTransactionAncestry(const uint256& txid, size_t& ancestors, size_t& descendants, size_t* ancestorsize, CAmount* ancestorfees) override + void getTransactionAncestry(const Txid& txid, size_t& ancestors, size_t& descendants, size_t* ancestorsize, CAmount* ancestorfees) override { ancestors = descendants = 0; if (!m_node.mempool) return; diff --git a/src/node/mempool_persist.cpp b/src/node/mempool_persist.cpp index 5b0f80be6c85..19819a3af23a 100644 --- a/src/node/mempool_persist.cpp +++ b/src/node/mempool_persist.cpp @@ -122,7 +122,7 @@ bool LoadMempool(CTxMemPool& pool, const fs::path& load_path, Chainstate& active if (active_chainstate.m_chainman.m_interrupt) return false; } - std::map mapDeltas; + std::map mapDeltas; file >> mapDeltas; if (opts.apply_fee_delta_priority) { @@ -131,7 +131,7 @@ bool LoadMempool(CTxMemPool& pool, const fs::path& load_path, Chainstate& active } } - std::set unbroadcast_txids; + std::set unbroadcast_txids; file >> unbroadcast_txids; if (opts.apply_unbroadcast_set) { unbroadcast = unbroadcast_txids.size(); @@ -154,9 +154,9 @@ bool DumpMempool(const CTxMemPool& pool, const fs::path& dump_path, FopenFn mock { auto start = SteadyClock::now(); - std::map mapDeltas; + std::map mapDeltas; std::vector vinfo; - std::set unbroadcast_txids; + std::set unbroadcast_txids; static Mutex dump_mutex; LOCK(dump_mutex); diff --git a/src/node/transaction.cpp b/src/node/transaction.cpp index 9162557bca1d..7bb928729140 100644 --- a/src/node/transaction.cpp +++ b/src/node/transaction.cpp @@ -123,7 +123,7 @@ TransactionError BroadcastTransaction(NodeContext& node, const CTransactionRef t return TransactionError::OK; } -CTransactionRef GetTransaction(const CBlockIndex* const block_index, const CTxMemPool* const mempool, const uint256& hash, uint256& hashBlock, const BlockManager& blockman) +CTransactionRef GetTransaction(const CBlockIndex* const block_index, const CTxMemPool* const mempool, const Txid& hash, uint256& hashBlock, const BlockManager& blockman) { if (mempool && !block_index) { CTransactionRef ptx = mempool->get(hash); diff --git a/src/node/transaction.h b/src/node/transaction.h index 5f524f4e28e8..2a4115817b9d 100644 --- a/src/node/transaction.h +++ b/src/node/transaction.h @@ -63,7 +63,7 @@ static const CAmount DEFAULT_MAX_BURN_AMOUNT{0}; * @param[out] hashBlock The block hash, if the tx was found via -txindex or block_index * @returns The tx if found, otherwise nullptr */ -CTransactionRef GetTransaction(const CBlockIndex* const block_index, const CTxMemPool* const mempool, const uint256& hash, uint256& hashBlock, const BlockManager& blockman); +CTransactionRef GetTransaction(const CBlockIndex* const block_index, const CTxMemPool* const mempool, const Txid& hash, uint256& hashBlock, const BlockManager& blockman); } // namespace node #endif // BITCOIN_NODE_TRANSACTION_H diff --git a/src/rest.cpp b/src/rest.cpp index e32b4c3821c3..7750bdc8d829 100644 --- a/src/rest.cpp +++ b/src/rest.cpp @@ -817,7 +817,7 @@ static bool rest_tx(const std::any& context, HTTPRequest* req, const std::string std::string hashStr; const RESTResponseFormat rf = ParseDataFormat(hashStr, uri_part); - auto hash{uint256::FromHex(hashStr)}; + auto hash{Txid::FromHex(hashStr)}; if (!hash) { return RESTERR(req, HTTP_BAD_REQUEST, "Invalid hash: " + hashStr); } diff --git a/src/test/blockencodings_tests.cpp b/src/test/blockencodings_tests.cpp index d40a0a94aef1..b3d210968797 100644 --- a/src/test/blockencodings_tests.cpp +++ b/src/test/blockencodings_tests.cpp @@ -154,7 +154,7 @@ BOOST_AUTO_TEST_CASE(NonCoinbasePreforwardRTTest) AddToMempool(pool, entry.FromTx(block.vtx[2])); BOOST_CHECK_EQUAL(pool.get(block.vtx[2]->GetHash()).use_count(), SHARED_TX_OFFSET + 0); - uint256 txhash; + Txid txhash; // Test with pre-forwarding tx 1, but not coinbase { @@ -225,7 +225,7 @@ BOOST_AUTO_TEST_CASE(SufficientPreforwardRTTest) AddToMempool(pool, entry.FromTx(block.vtx[1])); BOOST_CHECK_EQUAL(pool.get(block.vtx[1]->GetHash()).use_count(), SHARED_TX_OFFSET + 0); - uint256 txhash; + Txid txhash; // Test with pre-forwarding coinbase + tx 2 with tx 1 in mempool { diff --git a/src/test/fuzz/package_eval.cpp b/src/test/fuzz/package_eval.cpp index aa73fcdd9b5e..23ea9d1f15a7 100644 --- a/src/test/fuzz/package_eval.cpp +++ b/src/test/fuzz/package_eval.cpp @@ -314,7 +314,7 @@ FUZZ_TARGET(ephemeral_package_eval, .init = initialize_tx_pool) if (tx_pool.exists(txid)) { const auto tx_info{tx_pool.info(txid)}; if (GetDust(*tx_info.tx, tx_pool.m_opts.dust_relay_feerate).empty()) { - tx_pool.PrioritiseTransaction(txid.ToUint256(), delta); + tx_pool.PrioritiseTransaction(txid, delta); } } } @@ -477,7 +477,7 @@ FUZZ_TARGET(tx_package_eval, .init = initialize_tx_pool) txs.back()->GetHash() : PickValue(fuzzed_data_provider, mempool_outpoints).hash; const auto delta = fuzzed_data_provider.ConsumeIntegralInRange(-50 * COIN, +50 * COIN); - tx_pool.PrioritiseTransaction(txid.ToUint256(), delta); + tx_pool.PrioritiseTransaction(txid, delta); } // Remember all added transactions diff --git a/src/test/fuzz/rbf.cpp b/src/test/fuzz/rbf.cpp index db8682e27c4d..300f31d4408d 100644 --- a/src/test/fuzz/rbf.cpp +++ b/src/test/fuzz/rbf.cpp @@ -160,7 +160,7 @@ FUZZ_TARGET(package_rbf, .init = initialize_package_rbf) } if (fuzzed_data_provider.ConsumeBool()) { - pool.PrioritiseTransaction(mempool_txs.back().GetHash().ToUint256(), fuzzed_data_provider.ConsumeIntegralInRange(-100000, 100000)); + pool.PrioritiseTransaction(mempool_txs.back().GetHash(), fuzzed_data_provider.ConsumeIntegralInRange(-100000, 100000)); } } diff --git a/src/test/fuzz/tx_pool.cpp b/src/test/fuzz/tx_pool.cpp index ea65700c5221..4245d3e12464 100644 --- a/src/test/fuzz/tx_pool.cpp +++ b/src/test/fuzz/tx_pool.cpp @@ -288,7 +288,7 @@ FUZZ_TARGET(tx_pool_standard, .init = initialize_tx_pool) tx->GetHash() : PickValue(fuzzed_data_provider, outpoints_rbf).hash; const auto delta = fuzzed_data_provider.ConsumeIntegralInRange(-50 * COIN, +50 * COIN); - tx_pool.PrioritiseTransaction(txid.ToUint256(), delta); + tx_pool.PrioritiseTransaction(txid, delta); } // Remember all removed and added transactions @@ -409,7 +409,7 @@ FUZZ_TARGET(tx_pool, .init = initialize_tx_pool) mut_tx.GetHash() : PickValue(fuzzed_data_provider, txids); const auto delta = fuzzed_data_provider.ConsumeIntegralInRange(-50 * COIN, +50 * COIN); - tx_pool.PrioritiseTransaction(txid.ToUint256(), delta); + tx_pool.PrioritiseTransaction(txid, delta); } const auto tx = MakeTransactionRef(mut_tx); diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp index 9207f1bfc2c8..ffdf7a4de62a 100644 --- a/src/test/miner_tests.cpp +++ b/src/test/miner_tests.cpp @@ -596,7 +596,7 @@ void MinerTestingSetup::TestPrioritisedMining(const CScript& scriptPubKey, const tx.vin[0].scriptSig = CScript() << OP_1; tx.vout.resize(1); tx.vout[0].nValue = 5000000000LL; // 0 fee - uint256 hashFreePrioritisedTx = tx.GetHash(); + Txid hashFreePrioritisedTx = tx.GetHash(); AddToMempool(tx_mempool, entry.Fee(0).Time(Now()).SpendsCoinbase(true).FromTx(tx)); tx_mempool.PrioritiseTransaction(hashFreePrioritisedTx, 5 * COIN); diff --git a/src/test/policyestimator_tests.cpp b/src/test/policyestimator_tests.cpp index f767cd42871d..bbdd815fe453 100644 --- a/src/test/policyestimator_tests.cpp +++ b/src/test/policyestimator_tests.cpp @@ -37,7 +37,7 @@ BOOST_AUTO_TEST_CASE(BlockPolicyEstimates) // added to the mempool by their associate fee // txHashes[j] is populated with transactions either of // fee = basefee * (j+1) - std::vector txHashes[10]; + std::vector txHashes[10]; // Create a transaction template CScript garbage; @@ -77,8 +77,7 @@ BOOST_AUTO_TEST_CASE(BlockPolicyEstimates) /*has_no_mempool_parents=*/true)}; m_node.validation_signals->TransactionAddedToMempool(tx_info, mpool.GetAndIncrementSequence()); } - uint256 hash = tx.GetHash(); - txHashes[j].push_back(hash); + txHashes[j].push_back(tx.GetHash()); } } //Create blocks where higher fee txs are included more often @@ -178,8 +177,7 @@ BOOST_AUTO_TEST_CASE(BlockPolicyEstimates) /*has_no_mempool_parents=*/true)}; m_node.validation_signals->TransactionAddedToMempool(tx_info, mpool.GetAndIncrementSequence()); } - uint256 hash = tx.GetHash(); - txHashes[j].push_back(hash); + txHashes[j].push_back(tx.GetHash()); } } { @@ -242,8 +240,7 @@ BOOST_AUTO_TEST_CASE(BlockPolicyEstimates) /*has_no_mempool_parents=*/true)}; m_node.validation_signals->TransactionAddedToMempool(tx_info, mpool.GetAndIncrementSequence()); } - uint256 hash = tx.GetHash(); - CTransactionRef ptx = mpool.get(hash); + CTransactionRef ptx = mpool.get(tx.GetHash()); if (ptx) block.push_back(ptx); diff --git a/src/txmempool.cpp b/src/txmempool.cpp index d19d0a47270b..6bb910e30e61 100644 --- a/src/txmempool.cpp +++ b/src/txmempool.cpp @@ -55,7 +55,7 @@ bool TestLockPointValidity(CChain& active_chain, const LockPoints& lp) } void CTxMemPool::UpdateForDescendants(txiter updateIt, cacheMap& cachedDescendants, - const std::set& setExclude, std::set& descendants_to_remove) + const std::set& setExclude, std::set& descendants_to_remove) { CTxMemPoolEntry::Children stageEntries, descendants; stageEntries = updateIt->GetMemPoolChildrenConst(); @@ -105,7 +105,7 @@ void CTxMemPool::UpdateForDescendants(txiter updateIt, cacheMap& cachedDescendan mapTx.modify(updateIt, [=](CTxMemPoolEntry& e) { e.UpdateDescendantState(modifySize, modifyFee, modifyCount); }); } -void CTxMemPool::UpdateTransactionsFromBlock(const std::vector& vHashesToUpdate) +void CTxMemPool::UpdateTransactionsFromBlock(const std::vector& vHashesToUpdate) { AssertLockHeld(cs); // For each entry in vHashesToUpdate, store the set of in-mempool, but not @@ -115,29 +115,29 @@ void CTxMemPool::UpdateTransactionsFromBlock(const std::vector& vHashes // Use a set for lookups into vHashesToUpdate (these entries are already // accounted for in the state of their ancestors) - std::set setAlreadyIncluded(vHashesToUpdate.begin(), vHashesToUpdate.end()); + std::set setAlreadyIncluded(vHashesToUpdate.begin(), vHashesToUpdate.end()); - std::set descendants_to_remove; + std::set descendants_to_remove; // Iterate in reverse, so that whenever we are looking at a transaction // we are sure that all in-mempool descendants have already been processed. // This maximizes the benefit of the descendant cache and guarantees that // CTxMemPoolEntry::m_children will be updated, an assumption made in // UpdateForDescendants. - for (const uint256& hash : vHashesToUpdate | std::views::reverse) { + for (const Txid& hash : vHashesToUpdate | std::views::reverse) { // calculate children from mapNextTx txiter it = mapTx.find(hash); if (it == mapTx.end()) { continue; } - auto iter = mapNextTx.lower_bound(COutPoint(Txid::FromUint256(hash), 0)); + auto iter = mapNextTx.lower_bound(COutPoint(hash, 0)); // First calculate the children, and update CTxMemPoolEntry::m_children to // include them, and update their CTxMemPoolEntry::m_parents to include this tx. // we cache the in-mempool children to avoid duplicate updates { WITH_FRESH_EPOCH(m_epoch); for (; iter != mapNextTx.end() && iter->first->hash == hash; ++iter) { - const uint256 &childHash = iter->second->GetHash(); + const Txid &childHash = iter->second->GetHash(); txiter childIter = mapTx.find(childHash); assert(childIter != mapTx.end()); // We can skip updating entries we've encountered before or that @@ -154,7 +154,7 @@ void CTxMemPool::UpdateTransactionsFromBlock(const std::vector& vHashes for (const auto& txid : descendants_to_remove) { // This txid may have been removed already in a prior call to removeRecursive. // Therefore we ensure it is not yet removed already. - if (const std::optional txiter = GetIter(Txid::FromUint256(txid))) { + if (const std::optional txiter = GetIter(txid)) { removeRecursive((*txiter)->GetTx(), MemPoolRemovalReason::SIZELIMIT); } } @@ -780,12 +780,11 @@ void CTxMemPool::check(const CCoinsViewCache& active_coins_tip, int64_t spendhei for (const auto& input: tx.vin) mempoolDuplicate.SpendCoin(input.prevout); AddCoins(mempoolDuplicate, tx, std::numeric_limits::max()); } - for (auto it = mapNextTx.cbegin(); it != mapNextTx.cend(); it++) { - uint256 hash = it->second->GetHash(); - indexed_transaction_set::const_iterator it2 = mapTx.find(hash); - const CTransaction& tx = it2->GetTx(); - assert(it2 != mapTx.end()); - assert(&tx == it->second); + for (const auto& [_, next_tx] : mapNextTx) { + auto it = mapTx.find(next_tx->GetHash()); + const CTransaction& tx = it->GetTx(); + assert(it != mapTx.end()); + assert(&tx == next_tx); } assert(totalTxSize == checkTotal); @@ -876,7 +875,7 @@ const CTxMemPoolEntry* CTxMemPool::GetEntry(const Txid& txid) const return i == mapTx.end() ? nullptr : &(*i); } -CTransactionRef CTxMemPool::get(const uint256& hash) const +CTransactionRef CTxMemPool::get(const Txid& hash) const { LOCK(cs); indexed_transaction_set::const_iterator i = mapTx.find(hash); @@ -885,7 +884,7 @@ CTransactionRef CTxMemPool::get(const uint256& hash) const return i->GetSharedTx(); } -void CTxMemPool::PrioritiseTransaction(const uint256& hash, const CAmount& nFeeDelta) +void CTxMemPool::PrioritiseTransaction(const Txid& hash, const CAmount& nFeeDelta) { { LOCK(cs); @@ -921,17 +920,17 @@ void CTxMemPool::PrioritiseTransaction(const uint256& hash, const CAmount& nFeeD } } -void CTxMemPool::ApplyDelta(const uint256& hash, CAmount &nFeeDelta) const +void CTxMemPool::ApplyDelta(const Txid& hash, CAmount &nFeeDelta) const { AssertLockHeld(cs); - std::map::const_iterator pos = mapDeltas.find(hash); + std::map::const_iterator pos = mapDeltas.find(hash); if (pos == mapDeltas.end()) return; const CAmount &delta = pos->second; nFeeDelta += delta; } -void CTxMemPool::ClearPrioritisation(const uint256& hash) +void CTxMemPool::ClearPrioritisation(const Txid& hash) { AssertLockHeld(cs); mapDeltas.erase(hash); @@ -962,7 +961,7 @@ const CTransaction* CTxMemPool::GetConflictTx(const COutPoint& prevout) const std::optional CTxMemPool::GetIter(const Txid& txid) const { AssertLockHeld(cs); - auto it = mapTx.find(txid.ToUint256()); + auto it = mapTx.find(txid); return it != mapTx.end() ? std::make_optional(it) : std::nullopt; } @@ -1048,7 +1047,7 @@ size_t CTxMemPool::DynamicMemoryUsage() const { return memusage::MallocUsage(sizeof(CTxMemPoolEntry) + 15 * sizeof(void*)) * mapTx.size() + memusage::DynamicUsage(mapNextTx) + memusage::DynamicUsage(mapDeltas) + memusage::DynamicUsage(txns_randomized) + cachedInnerUsage; } -void CTxMemPool::RemoveUnbroadcastTx(const uint256& txid, const bool unchecked) { +void CTxMemPool::RemoveUnbroadcastTx(const Txid& txid, const bool unchecked) { LOCK(cs); if (m_unbroadcast_txids.erase(txid)) @@ -1203,7 +1202,7 @@ uint64_t CTxMemPool::CalculateDescendantMaximum(txiter entry) const { return maximum; } -void CTxMemPool::GetTransactionAncestry(const uint256& txid, size_t& ancestors, size_t& descendants, size_t* const ancestorsize, CAmount* const ancestorfees) const { +void CTxMemPool::GetTransactionAncestry(const Txid& txid, size_t& ancestors, size_t& descendants, size_t* const ancestorsize, CAmount* const ancestorfees) const { LOCK(cs); auto it = mapTx.find(txid); ancestors = descendants = 0; diff --git a/src/txmempool.h b/src/txmempool.h index 048ad23fd5f1..8b55d9cd5216 100644 --- a/src/txmempool.h +++ b/src/txmempool.h @@ -57,7 +57,7 @@ bool TestLockPointValidity(CChain& active_chain, const LockPoints& lp) EXCLUSIVE // extracts a transaction hash from CTxMemPoolEntry or CTransactionRef struct mempoolentry_txid { - typedef uint256 result_type; + typedef Txid result_type; result_type operator() (const CTxMemPoolEntry &entry) const { return entry.GetTx().GetHash(); @@ -72,7 +72,7 @@ struct mempoolentry_txid // extracts a transaction witness-hash from CTxMemPoolEntry or CTransactionRef struct mempoolentry_wtxid { - typedef uint256 result_type; + typedef Wtxid result_type; result_type operator() (const CTxMemPoolEntry &entry) const { return entry.GetTx().GetWitnessHash(); @@ -387,7 +387,7 @@ class CTxMemPool /** * Track locally submitted transactions to periodically retry initial broadcast. */ - std::set m_unbroadcast_txids GUARDED_BY(cs); + std::set m_unbroadcast_txids GUARDED_BY(cs); /** @@ -414,7 +414,7 @@ class CTxMemPool public: indirectmap mapNextTx GUARDED_BY(cs); - std::map mapDeltas GUARDED_BY(cs); + std::map mapDeltas GUARDED_BY(cs); using Options = kernel::MemPoolOptions; @@ -459,9 +459,9 @@ class CTxMemPool bool HasNoInputsOf(const CTransaction& tx) const EXCLUSIVE_LOCKS_REQUIRED(cs); /** Affect CreateNewBlock prioritisation of transactions */ - void PrioritiseTransaction(const uint256& hash, const CAmount& nFeeDelta); - void ApplyDelta(const uint256& hash, CAmount &nFeeDelta) const EXCLUSIVE_LOCKS_REQUIRED(cs); - void ClearPrioritisation(const uint256& hash) EXCLUSIVE_LOCKS_REQUIRED(cs); + void PrioritiseTransaction(const Txid& hash, const CAmount& nFeeDelta); + void ApplyDelta(const Txid& hash, CAmount &nFeeDelta) const EXCLUSIVE_LOCKS_REQUIRED(cs); + void ClearPrioritisation(const Txid& hash) EXCLUSIVE_LOCKS_REQUIRED(cs); struct delta_info { /** Whether this transaction is in the mempool. */ @@ -471,7 +471,7 @@ class CTxMemPool /** The modified fee (base fee + delta) of this entry. Only present if in_mempool=true. */ std::optional modified_fee; /** The prioritised transaction's txid. */ - const uint256 txid; + const Txid txid; }; /** Return a vector of all entries in mapDeltas with their corresponding delta_info. */ std::vector GetPrioritisedTransactions() const EXCLUSIVE_LOCKS_REQUIRED(!cs); @@ -506,7 +506,7 @@ class CTxMemPool * @param[in] vHashesToUpdate The set of txids from the * disconnected block that have been accepted back into the mempool. */ - void UpdateTransactionsFromBlock(const std::vector& vHashesToUpdate) EXCLUSIVE_LOCKS_REQUIRED(cs, cs_main) LOCKS_EXCLUDED(m_epoch); + void UpdateTransactionsFromBlock(const std::vector& vHashesToUpdate) EXCLUSIVE_LOCKS_REQUIRED(cs, cs_main) LOCKS_EXCLUDED(m_epoch); /** * Try to calculate all in-mempool ancestors of entry. @@ -595,7 +595,7 @@ class CTxMemPool * When ancestors is non-zero (ie, the transaction itself is in the mempool), * ancestorsize and ancestorfees will also be set to the appropriate values. */ - void GetTransactionAncestry(const uint256& txid, size_t& ancestors, size_t& descendants, size_t* ancestorsize = nullptr, CAmount* ancestorfees = nullptr) const; + void GetTransactionAncestry(const Txid& txid, size_t& ancestors, size_t& descendants, size_t* ancestorsize = nullptr, CAmount* ancestorfees = nullptr) const; /** * @returns true if an initial attempt to load the persisted mempool was made, regardless of @@ -641,7 +641,7 @@ class CTxMemPool const CTxMemPoolEntry* GetEntry(const Txid& txid) const LIFETIMEBOUND EXCLUSIVE_LOCKS_REQUIRED(cs); - CTransactionRef get(const uint256& hash) const; + CTransactionRef get(const Txid& hash) const; template TxMempoolInfo info(const T& id) const @@ -666,26 +666,26 @@ class CTxMemPool size_t DynamicMemoryUsage() const; /** Adds a transaction to the unbroadcast set */ - void AddUnbroadcastTx(const uint256& txid) + void AddUnbroadcastTx(const Txid& txid) { LOCK(cs); // Sanity check the transaction is in the mempool & insert into // unbroadcast set. - if (exists(Txid::FromUint256(txid))) m_unbroadcast_txids.insert(txid); + if (exists(txid)) m_unbroadcast_txids.insert(txid); }; /** Removes a transaction from the unbroadcast set */ - void RemoveUnbroadcastTx(const uint256& txid, const bool unchecked = false); + void RemoveUnbroadcastTx(const Txid& txid, const bool unchecked = false); /** Returns transactions in unbroadcast set */ - std::set GetUnbroadcastTxs() const + std::set GetUnbroadcastTxs() const { LOCK(cs); return m_unbroadcast_txids; } /** Returns whether a txid is in the unbroadcast set */ - bool IsUnbroadcastTx(const uint256& txid) const EXCLUSIVE_LOCKS_REQUIRED(cs) + bool IsUnbroadcastTx(const Txid& txid) const EXCLUSIVE_LOCKS_REQUIRED(cs) { AssertLockHeld(cs); return m_unbroadcast_txids.count(txid) != 0; @@ -744,7 +744,7 @@ class CTxMemPool * removeRecursive them. */ void UpdateForDescendants(txiter updateIt, cacheMap& cachedDescendants, - const std::set& setExclude, std::set& descendants_to_remove) EXCLUSIVE_LOCKS_REQUIRED(cs); + const std::set& setExclude, std::set& descendants_to_remove) EXCLUSIVE_LOCKS_REQUIRED(cs); /** Update ancestors of hash to add/remove it as a descendant transaction. */ void UpdateAncestorsOf(bool add, txiter hash, setEntries &setAncestors) EXCLUSIVE_LOCKS_REQUIRED(cs); /** Set ancestor state for an entry */ diff --git a/src/validation.cpp b/src/validation.cpp index 90e70834bcbb..69cc84bba226 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -303,7 +303,7 @@ void Chainstate::MaybeUpdateMempoolForReorg( AssertLockHeld(cs_main); AssertLockHeld(m_mempool->cs); - std::vector vHashUpdate; + std::vector vHashUpdate; { // disconnectpool is ordered so that the front is the most recently-confirmed // transaction (the last tx of the block at the tip) in the disconnected chain. From d2ecd6815d89c9b089b55bc96fdf93b023be8dda Mon Sep 17 00:00:00 2001 From: marcofleon Date: Tue, 1 Apr 2025 15:26:25 +0100 Subject: [PATCH 0135/2775] policy, refactor: Convert uint256 to Txid --- src/policy/fees.cpp | 6 +++--- src/policy/fees.h | 6 +++--- src/policy/packages.cpp | 10 +++++----- src/policy/rbf.cpp | 11 +++++------ src/policy/rbf.h | 6 +++--- src/test/fuzz/policy_estimator.cpp | 2 +- src/test/rbf_tests.cpp | 2 +- src/validation.cpp | 2 +- 8 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/policy/fees.cpp b/src/policy/fees.cpp index e385f548d30c..a650a1326b0a 100644 --- a/src/policy/fees.cpp +++ b/src/policy/fees.cpp @@ -519,16 +519,16 @@ void TxConfirmStats::removeTx(unsigned int entryHeight, unsigned int nBestSeenHe } } -bool CBlockPolicyEstimator::removeTx(uint256 hash) +bool CBlockPolicyEstimator::removeTx(Txid hash) { LOCK(m_cs_fee_estimator); return _removeTx(hash, /*inBlock=*/false); } -bool CBlockPolicyEstimator::_removeTx(const uint256& hash, bool inBlock) +bool CBlockPolicyEstimator::_removeTx(const Txid& hash, bool inBlock) { AssertLockHeld(m_cs_fee_estimator); - std::map::iterator pos = mapMemPoolTxs.find(hash); + std::map::iterator pos = mapMemPoolTxs.find(hash); if (pos != mapMemPoolTxs.end()) { feeStats->removeTx(pos->second.blockHeight, nBestSeenHeight, pos->second.bucketIndex, inBlock); shortStats->removeTx(pos->second.blockHeight, nBestSeenHeight, pos->second.bucketIndex, inBlock); diff --git a/src/policy/fees.h b/src/policy/fees.h index a95cc19dd45f..b355b65a3468 100644 --- a/src/policy/fees.h +++ b/src/policy/fees.h @@ -212,7 +212,7 @@ class CBlockPolicyEstimator : public CValidationInterface EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator); /** Remove a transaction from the mempool tracking stats for non BLOCK removal reasons*/ - bool removeTx(uint256 hash) + bool removeTx(Txid hash) EXCLUSIVE_LOCKS_REQUIRED(!m_cs_fee_estimator); /** DEPRECATED. Return a feerate estimate */ @@ -287,7 +287,7 @@ class CBlockPolicyEstimator : public CValidationInterface }; // map of txids to information about that transaction - std::map mapMemPoolTxs GUARDED_BY(m_cs_fee_estimator); + std::map mapMemPoolTxs GUARDED_BY(m_cs_fee_estimator); /** Classes to track historical data on transaction confirmations */ std::unique_ptr feeStats PT_GUARDED_BY(m_cs_fee_estimator); @@ -315,7 +315,7 @@ class CBlockPolicyEstimator : public CValidationInterface unsigned int MaxUsableEstimate() const EXCLUSIVE_LOCKS_REQUIRED(m_cs_fee_estimator); /** A non-thread-safe helper for the removeTx function */ - bool _removeTx(const uint256& hash, bool inBlock) + bool _removeTx(const Txid& hash, bool inBlock) EXCLUSIVE_LOCKS_REQUIRED(m_cs_fee_estimator); }; diff --git a/src/policy/packages.cpp b/src/policy/packages.cpp index 693adcdfd0b2..187bd4675792 100644 --- a/src/policy/packages.cpp +++ b/src/policy/packages.cpp @@ -16,7 +16,7 @@ /** IsTopoSortedPackage where a set of txids has been pre-populated. The set is assumed to be correct and * is mutated within this function (even if return value is false). */ -bool IsTopoSortedPackage(const Package& txns, std::unordered_set& later_txids) +bool IsTopoSortedPackage(const Package& txns, std::unordered_set& later_txids) { // Avoid misusing this function: later_txids should contain the txids of txns. Assume(txns.size() == later_txids.size()); @@ -42,7 +42,7 @@ bool IsTopoSortedPackage(const Package& txns, std::unordered_set later_txids; + std::unordered_set later_txids; std::transform(txns.cbegin(), txns.cend(), std::inserter(later_txids, later_txids.end()), [](const auto& tx) { return tx->GetHash(); }); @@ -91,7 +91,7 @@ bool IsWellFormedPackage(const Package& txns, PackageValidationState& state, boo return state.Invalid(PackageValidationResult::PCKG_POLICY, "package-too-large"); } - std::unordered_set later_txids; + std::unordered_set later_txids; std::transform(txns.cbegin(), txns.cend(), std::inserter(later_txids, later_txids.end()), [](const auto& tx) { return tx->GetHash(); }); @@ -123,7 +123,7 @@ bool IsChildWithParents(const Package& package) // The package is expected to be sorted, so the last transaction is the child. const auto& child = package.back(); - std::unordered_set input_txids; + std::unordered_set input_txids; std::transform(child->vin.cbegin(), child->vin.cend(), std::inserter(input_txids, input_txids.end()), [](const auto& input) { return input.prevout.hash; }); @@ -136,7 +136,7 @@ bool IsChildWithParents(const Package& package) bool IsChildWithParentsTree(const Package& package) { if (!IsChildWithParents(package)) return false; - std::unordered_set parent_txids; + std::unordered_set parent_txids; std::transform(package.cbegin(), package.cend() - 1, std::inserter(parent_txids, parent_txids.end()), [](const auto& ptx) { return ptx->GetHash(); }); // Each parent must not have an input who is one of the other parents. diff --git a/src/policy/rbf.cpp b/src/policy/rbf.cpp index dc74f43b3540..210b94915ccb 100644 --- a/src/policy/rbf.cpp +++ b/src/policy/rbf.cpp @@ -62,7 +62,6 @@ std::optional GetEntriesForConflicts(const CTransaction& tx, CTxMemPool::setEntries& all_conflicts) { AssertLockHeld(pool.cs); - const uint256 txid = tx.GetHash(); uint64_t nConflictingCount = 0; for (const auto& mi : iters_conflicting) { nConflictingCount += mi->GetCountWithDescendants(); @@ -72,7 +71,7 @@ std::optional GetEntriesForConflicts(const CTransaction& tx, // times), but we just want to be conservative to avoid doing too much work. if (nConflictingCount > MAX_REPLACEMENT_CANDIDATES) { return strprintf("rejecting replacement %s; too many potential replacements (%d > %d)", - txid.ToString(), + tx.GetHash().ToString(), nConflictingCount, MAX_REPLACEMENT_CANDIDATES); } @@ -89,7 +88,7 @@ std::optional HasNoNewUnconfirmed(const CTransaction& tx, const CTxMemPool::setEntries& iters_conflicting) { AssertLockHeld(pool.cs); - std::set parents_of_conflicts; + std::set parents_of_conflicts; for (const auto& mi : iters_conflicting) { for (const CTxIn& txin : mi->GetTx().vin) { parents_of_conflicts.insert(txin.prevout.hash); @@ -118,7 +117,7 @@ std::optional HasNoNewUnconfirmed(const CTransaction& tx, std::optional EntriesAndTxidsDisjoint(const CTxMemPool::setEntries& ancestors, const std::set& direct_conflicts, - const uint256& txid) + const Txid& txid) { for (CTxMemPool::txiter ancestorIt : ancestors) { const Txid& hashAncestor = ancestorIt->GetTx().GetHash(); @@ -133,7 +132,7 @@ std::optional EntriesAndTxidsDisjoint(const CTxMemPool::setEntries& std::optional PaysMoreThanConflicts(const CTxMemPool::setEntries& iters_conflicting, CFeeRate replacement_feerate, - const uint256& txid) + const Txid& txid) { for (const auto& mi : iters_conflicting) { // Don't allow the replacement to reduce the feerate of the mempool. @@ -161,7 +160,7 @@ std::optional PaysForRBF(CAmount original_fees, CAmount replacement_fees, size_t replacement_vsize, CFeeRate relay_fee, - const uint256& txid) + const Txid& txid) { // Rule #3: The replacement fees must be greater than or equal to fees of the // transactions it replaces, otherwise the bandwidth used by those conflicting transactions diff --git a/src/policy/rbf.h b/src/policy/rbf.h index 3cc0fc3149f0..cc397b463dcf 100644 --- a/src/policy/rbf.h +++ b/src/policy/rbf.h @@ -90,7 +90,7 @@ std::optional HasNoNewUnconfirmed(const CTransaction& tx, const CTx */ std::optional EntriesAndTxidsDisjoint(const CTxMemPool::setEntries& ancestors, const std::set& direct_conflicts, - const uint256& txid); + const Txid& txid); /** Check that the feerate of the replacement transaction(s) is higher than the feerate of each * of the transactions in iters_conflicting. @@ -98,7 +98,7 @@ std::optional EntriesAndTxidsDisjoint(const CTxMemPool::setEntries& * @returns error message if fees insufficient, otherwise std::nullopt. */ std::optional PaysMoreThanConflicts(const CTxMemPool::setEntries& iters_conflicting, - CFeeRate replacement_feerate, const uint256& txid); + CFeeRate replacement_feerate, const Txid& txid); /** The replacement transaction must pay more fees than the original transactions. The additional * fees must pay for the replacement's bandwidth at or above the incremental relay feerate. @@ -113,7 +113,7 @@ std::optional PaysForRBF(CAmount original_fees, CAmount replacement_fees, size_t replacement_vsize, CFeeRate relay_fee, - const uint256& txid); + const Txid& txid); /** * The replacement transaction must improve the feerate diagram of the mempool. diff --git a/src/test/fuzz/policy_estimator.cpp b/src/test/fuzz/policy_estimator.cpp index 37e379641821..8455a23284d6 100644 --- a/src/test/fuzz/policy_estimator.cpp +++ b/src/test/fuzz/policy_estimator.cpp @@ -85,7 +85,7 @@ FUZZ_TARGET(policy_estimator, .init = initialize_policy_estimator) block_policy_estimator.processBlock(txs, current_height); }, [&] { - (void)block_policy_estimator.removeTx(ConsumeUInt256(fuzzed_data_provider)); + (void)block_policy_estimator.removeTx(Txid::FromUint256(ConsumeUInt256(fuzzed_data_provider))); }, [&] { block_policy_estimator.FlushUnconfirmed(); diff --git a/src/test/rbf_tests.cpp b/src/test/rbf_tests.cpp index 0052276eac47..cbbea61a53c8 100644 --- a/src/test/rbf_tests.cpp +++ b/src/test/rbf_tests.cpp @@ -196,7 +196,7 @@ BOOST_FIXTURE_TEST_CASE(rbf_helper_functions, TestChain100Setup) entry5_low, entry6_low_prioritised, entry7_high, entry8_high}; CTxMemPool::setEntries empty_set; - const auto unused_txid{GetRandHash()}; + const auto unused_txid = Txid::FromUint256(GetRandHash()); // Tests for PaysMoreThanConflicts // These tests use feerate, not absolute fee. diff --git a/src/validation.cpp b/src/validation.cpp index 69cc84bba226..0d68475aa6cb 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -1088,7 +1088,7 @@ bool MemPoolAccept::ReplacementChecks(Workspace& ws) AssertLockHeld(m_pool.cs); const CTransaction& tx = *ws.m_ptx; - const uint256& hash = ws.m_hash; + const Txid& hash = ws.m_hash; TxValidationState& state = ws.m_state; CFeeRate newFeeRate(ws.m_modified_fees, ws.m_vsize); From 9c24cda72edb2085edfa75296d6b42fab34433d9 Mon Sep 17 00:00:00 2001 From: marcofleon Date: Thu, 31 Jul 2025 17:05:00 +0100 Subject: [PATCH 0136/2775] refactor: Convert remaining instances from uint256 to Txid These remaining miscellaneous changes were identified by commenting out the `operator const uint256&` conversion and the `Compare(const uint256&)` method from `transaction_identifier.h`. --- src/blockencodings.cpp | 2 +- src/consensus/merkle.cpp | 6 ++--- src/headerssync.cpp | 2 +- src/headerssync.h | 2 +- src/index/txindex.cpp | 19 +++++++------- src/index/txindex.h | 2 +- src/kernel/coinstats.cpp | 6 ++--- src/kernel/disconnected_transactions.h | 2 +- src/net_processing.cpp | 17 ++++++------ src/node/txdownloadman_impl.cpp | 28 ++++++++++---------- src/signet.cpp | 4 +-- src/test/disconnected_transactions.cpp | 2 +- src/test/fuzz/merkle.cpp | 4 +-- src/test/fuzz/p2p_headers_presync.cpp | 2 +- src/test/merkle_tests.cpp | 8 +++--- src/test/util/setup_common.cpp | 8 ++++++ src/test/util/setup_common.h | 2 ++ src/test/validation_tests.cpp | 8 +++--- src/txmempool.h | 2 +- src/util/hasher.cpp | 8 ++++++ src/util/hasher.h | 36 +++++++++++++++++++++++--- src/validation.cpp | 4 +-- src/wallet/spend.cpp | 2 +- src/wallet/wallet.cpp | 2 +- src/zmq/zmqpublishnotifier.cpp | 8 +++--- 25 files changed, 117 insertions(+), 69 deletions(-) diff --git a/src/blockencodings.cpp b/src/blockencodings.cpp index 947f605d8e6e..3f61a122e675 100644 --- a/src/blockencodings.cpp +++ b/src/blockencodings.cpp @@ -42,7 +42,7 @@ void CBlockHeaderAndShortTxIDs::FillShortTxIDSelector() const { uint64_t CBlockHeaderAndShortTxIDs::GetShortID(const Wtxid& wtxid) const { static_assert(SHORTTXIDS_LENGTH == 6, "shorttxids calculation assumes 6-byte shorttxids"); - return SipHashUint256(shorttxidk0, shorttxidk1, wtxid) & 0xffffffffffffL; + return SipHashUint256(shorttxidk0, shorttxidk1, wtxid.ToUint256()) & 0xffffffffffffL; } ReadStatus PartiallyDownloadedBlock::InitData(const CBlockHeaderAndShortTxIDs& cmpctblock, const std::vector& extra_txn) { diff --git a/src/consensus/merkle.cpp b/src/consensus/merkle.cpp index 7dd24e1868f2..e274ed821a57 100644 --- a/src/consensus/merkle.cpp +++ b/src/consensus/merkle.cpp @@ -68,7 +68,7 @@ uint256 BlockMerkleRoot(const CBlock& block, bool* mutated) std::vector leaves; leaves.resize(block.vtx.size()); for (size_t s = 0; s < block.vtx.size(); s++) { - leaves[s] = block.vtx[s]->GetHash(); + leaves[s] = block.vtx[s]->GetHash().ToUint256(); } return ComputeMerkleRoot(std::move(leaves), mutated); } @@ -79,7 +79,7 @@ uint256 BlockWitnessMerkleRoot(const CBlock& block, bool* mutated) leaves.resize(block.vtx.size()); leaves[0].SetNull(); // The witness hash of the coinbase is 0. for (size_t s = 1; s < block.vtx.size(); s++) { - leaves[s] = block.vtx[s]->GetWitnessHash(); + leaves[s] = block.vtx[s]->GetWitnessHash().ToUint256(); } return ComputeMerkleRoot(std::move(leaves), mutated); } @@ -185,7 +185,7 @@ std::vector TransactionMerklePath(const CBlock& block, uint32_t positio std::vector leaves; leaves.resize(block.vtx.size()); for (size_t s = 0; s < block.vtx.size(); s++) { - leaves[s] = block.vtx[s]->GetHash(); + leaves[s] = block.vtx[s]->GetHash().ToUint256(); } return ComputeMerklePath(leaves, position); } diff --git a/src/headerssync.cpp b/src/headerssync.cpp index 9e8b1905168f..fbe2026ecae7 100644 --- a/src/headerssync.cpp +++ b/src/headerssync.cpp @@ -48,7 +48,7 @@ HeadersSyncState::HeadersSyncState(NodeId id, const Consensus::Params& consensus /** Free any memory in use, and mark this object as no longer usable. This is * required to guarantee that we won't reuse this object with the same - * SaltedTxidHasher for another sync. */ + * SaltedUint256Hasher for another sync. */ void HeadersSyncState::Finalize() { Assume(m_download_state != State::FINAL); diff --git a/src/headerssync.h b/src/headerssync.h index 2e7017f115dc..56380c66fe23 100644 --- a/src/headerssync.h +++ b/src/headerssync.h @@ -224,7 +224,7 @@ class HeadersSyncState { arith_uint256 m_current_chain_work; /** m_hasher is a salted hasher for making our 1-bit commitments to headers we've seen. */ - const SaltedTxidHasher m_hasher; + const SaltedUint256Hasher m_hasher; /** A queue of commitment bits, created during the 1st phase, and verified during the 2nd. */ bitdeque<> m_header_commitments; diff --git a/src/index/txindex.cpp b/src/index/txindex.cpp index 4bb6dc744472..2a7c0066b088 100644 --- a/src/index/txindex.cpp +++ b/src/index/txindex.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include constexpr uint8_t DB_TXINDEX{'t'}; @@ -24,26 +25,26 @@ class TxIndex::DB : public BaseIndex::DB /// Read the disk location of the transaction data with the given hash. Returns false if the /// transaction hash is not indexed. - bool ReadTxPos(const uint256& txid, CDiskTxPos& pos) const; + bool ReadTxPos(const Txid& txid, CDiskTxPos& pos) const; /// Write a batch of transaction positions to the DB. - [[nodiscard]] bool WriteTxs(const std::vector>& v_pos); + [[nodiscard]] bool WriteTxs(const std::vector>& v_pos); }; TxIndex::DB::DB(size_t n_cache_size, bool f_memory, bool f_wipe) : BaseIndex::DB(gArgs.GetDataDirNet() / "indexes" / "txindex", n_cache_size, f_memory, f_wipe) {} -bool TxIndex::DB::ReadTxPos(const uint256 &txid, CDiskTxPos& pos) const +bool TxIndex::DB::ReadTxPos(const Txid& txid, CDiskTxPos& pos) const { - return Read(std::make_pair(DB_TXINDEX, txid), pos); + return Read(std::make_pair(DB_TXINDEX, txid.ToUint256()), pos); } -bool TxIndex::DB::WriteTxs(const std::vector>& v_pos) +bool TxIndex::DB::WriteTxs(const std::vector>& v_pos) { CDBBatch batch(*this); - for (const auto& tuple : v_pos) { - batch.Write(std::make_pair(DB_TXINDEX, tuple.first), tuple.second); + for (const auto& [txid, pos] : v_pos) { + batch.Write(std::make_pair(DB_TXINDEX, txid.ToUint256()), pos); } return WriteBatch(batch); } @@ -61,7 +62,7 @@ bool TxIndex::CustomAppend(const interfaces::BlockInfo& block) assert(block.data); CDiskTxPos pos({block.file_number, block.data_pos}, GetSizeOfCompactSize(block.data->vtx.size())); - std::vector> vPos; + std::vector> vPos; vPos.reserve(block.data->vtx.size()); for (const auto& tx : block.data->vtx) { vPos.emplace_back(tx->GetHash(), pos); @@ -72,7 +73,7 @@ bool TxIndex::CustomAppend(const interfaces::BlockInfo& block) BaseIndex::DB& TxIndex::GetDB() const { return *m_db; } -bool TxIndex::FindTx(const uint256& tx_hash, uint256& block_hash, CTransactionRef& tx) const +bool TxIndex::FindTx(const Txid& tx_hash, uint256& block_hash, CTransactionRef& tx) const { CDiskTxPos postx; if (!m_db->ReadTxPos(tx_hash, postx)) { diff --git a/src/index/txindex.h b/src/index/txindex.h index ef835fe5d7db..f8236c928443 100644 --- a/src/index/txindex.h +++ b/src/index/txindex.h @@ -42,7 +42,7 @@ class TxIndex final : public BaseIndex /// @param[out] block_hash The hash of the block the transaction is found in. /// @param[out] tx The transaction itself. /// @return true if transaction is found, false otherwise - bool FindTx(const uint256& tx_hash, uint256& block_hash, CTransactionRef& tx) const; + bool FindTx(const Txid& tx_hash, uint256& block_hash, CTransactionRef& tx) const; }; /// The global transaction index, used in GetTransaction. May be null. diff --git a/src/kernel/coinstats.cpp b/src/kernel/coinstats.cpp index 81c496ab342d..6270f365f4e0 100644 --- a/src/kernel/coinstats.cpp +++ b/src/kernel/coinstats.cpp @@ -98,7 +98,7 @@ static void ApplyHash(T& hash_obj, const Txid& hash, const std::map& outputs) +static void ApplyStats(CCoinsStats& stats, const std::map& outputs) { assert(!outputs.empty()); stats.nTransactions++; @@ -126,7 +126,7 @@ static bool ComputeUTXOStats(CCoinsView* view, CCoinsStats& stats, T hash_obj, c Coin coin; if (pcursor->GetKey(key) && pcursor->GetValue(coin)) { if (!outputs.empty() && key.hash != prevkey) { - ApplyStats(stats, prevkey, outputs); + ApplyStats(stats, outputs); ApplyHash(hash_obj, prevkey, outputs); outputs.clear(); } @@ -140,7 +140,7 @@ static bool ComputeUTXOStats(CCoinsView* view, CCoinsStats& stats, T hash_obj, c pcursor->Next(); } if (!outputs.empty()) { - ApplyStats(stats, prevkey, outputs); + ApplyStats(stats, outputs); ApplyHash(hash_obj, prevkey, outputs); } diff --git a/src/kernel/disconnected_transactions.h b/src/kernel/disconnected_transactions.h index 401ec435e6bd..bc098f71aaff 100644 --- a/src/kernel/disconnected_transactions.h +++ b/src/kernel/disconnected_transactions.h @@ -41,7 +41,7 @@ class DisconnectedBlockTransactions { const size_t m_max_mem_usage; std::list queuedTx; using TxList = decltype(queuedTx); - std::unordered_map iters_by_txid; + std::unordered_map iters_by_txid; /** Trim the earliest-added entries until we are within memory bounds. */ std::vector LimitMemoryUsage(); diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 546e14b8bce9..810627a14e7b 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -3030,7 +3030,7 @@ std::optional PeerManagerImpl::ProcessInvalidTx(NodeId AddToCompactExtraTransactions(ptx); } for (const Txid& parent_txid : unique_parents) { - if (peer) AddKnownTx(*peer, parent_txid); + if (peer) AddKnownTx(*peer, parent_txid.ToUint256()); } MaybePunishNodeForTx(nodeid, state); @@ -4280,12 +4280,11 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, CTransactionRef ptx; vRecv >> TX_WITH_WITNESS(ptx); - const CTransaction& tx = *ptx; - const uint256& txid = ptx->GetHash(); - const uint256& wtxid = ptx->GetWitnessHash(); + const Txid& txid = ptx->GetHash(); + const Wtxid& wtxid = ptx->GetWitnessHash(); - const uint256& hash = peer->m_wtxid_relay ? wtxid : txid; + const uint256& hash = peer->m_wtxid_relay ? wtxid.ToUint256() : txid.ToUint256(); AddKnownTx(*peer, hash); LOCK2(cs_main, m_tx_download_mutex); @@ -4296,13 +4295,13 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, // Always relay transactions received from peers with forcerelay // permission, even if they were already in the mempool, allowing // the node to function as a gateway for nodes hidden behind it. - if (!m_mempool.exists(tx.GetHash())) { + if (!m_mempool.exists(txid)) { LogPrintf("Not relaying non-mempool transaction %s (wtxid=%s) from forcerelay peer=%d\n", - tx.GetHash().ToString(), tx.GetWitnessHash().ToString(), pfrom.GetId()); + txid.ToString(), wtxid.ToString(), pfrom.GetId()); } else { LogPrintf("Force relaying tx %s (wtxid=%s) from peer=%d\n", - tx.GetHash().ToString(), tx.GetWitnessHash().ToString(), pfrom.GetId()); - RelayTransaction(tx.GetHash(), tx.GetWitnessHash()); + txid.ToString(), wtxid.ToString(), pfrom.GetId()); + RelayTransaction(txid, wtxid); } } diff --git a/src/node/txdownloadman_impl.cpp b/src/node/txdownloadman_impl.cpp index 0105fe3d6093..91bc7f3bcbdf 100644 --- a/src/node/txdownloadman_impl.cpp +++ b/src/node/txdownloadman_impl.cpp @@ -104,8 +104,8 @@ void TxDownloadManagerImpl::BlockConnected(const std::shared_ptr& if (ptx->HasWitness()) { RecentConfirmedTransactionsFilter().insert(ptx->GetWitnessHash().ToUint256()); } - m_txrequest.ForgetTxHash(ptx->GetHash()); - m_txrequest.ForgetTxHash(ptx->GetWitnessHash()); + m_txrequest.ForgetTxHash(ptx->GetHash().ToUint256()); + m_txrequest.ForgetTxHash(ptx->GetWitnessHash().ToUint256()); } } @@ -324,8 +324,8 @@ void TxDownloadManagerImpl::MempoolAcceptedTx(const CTransactionRef& tx) { // As this version of the transaction was acceptable, we can forget about any requests for it. // No-op if the tx is not in txrequest. - m_txrequest.ForgetTxHash(tx->GetHash()); - m_txrequest.ForgetTxHash(tx->GetWitnessHash()); + m_txrequest.ForgetTxHash(tx->GetHash().ToUint256()); + m_txrequest.ForgetTxHash(tx->GetWitnessHash().ToUint256()); m_orphanage->AddChildrenToWorkSet(*tx, m_opts.m_rng); // If it came from the orphanage, remove it. No-op if the tx is not in txorphanage. @@ -406,8 +406,8 @@ node::RejectedTxTodo TxDownloadManagerImpl::MempoolRejectedTx(const CTransaction // // Search by txid and, if the tx has a witness, wtxid std::vector orphan_resolution_candidates{nodeid}; - m_txrequest.GetCandidatePeers(ptx->GetHash(), orphan_resolution_candidates); - if (ptx->HasWitness()) m_txrequest.GetCandidatePeers(ptx->GetWitnessHash(), orphan_resolution_candidates); + m_txrequest.GetCandidatePeers(ptx->GetHash().ToUint256(), orphan_resolution_candidates); + if (ptx->HasWitness()) m_txrequest.GetCandidatePeers(ptx->GetWitnessHash().ToUint256(), orphan_resolution_candidates); for (const auto& nodeid : orphan_resolution_candidates) { if (MaybeAddOrphanResolutionCandidate(unique_parents, ptx->GetWitnessHash(), nodeid, now)) { @@ -416,8 +416,8 @@ node::RejectedTxTodo TxDownloadManagerImpl::MempoolRejectedTx(const CTransaction } // Once added to the orphan pool, a tx is considered AlreadyHave, and we shouldn't request it anymore. - m_txrequest.ForgetTxHash(tx.GetHash()); - m_txrequest.ForgetTxHash(tx.GetWitnessHash()); + m_txrequest.ForgetTxHash(tx.GetHash().ToUint256()); + m_txrequest.ForgetTxHash(tx.GetWitnessHash().ToUint256()); } else { unique_parents.clear(); LogDebug(BCLog::MEMPOOL, "not keeping orphan with rejected parents %s (wtxid=%s)\n", @@ -431,8 +431,8 @@ node::RejectedTxTodo TxDownloadManagerImpl::MempoolRejectedTx(const CTransaction // from any of our non-wtxidrelay peers. RecentRejectsFilter().insert(tx.GetHash().ToUint256()); RecentRejectsFilter().insert(tx.GetWitnessHash().ToUint256()); - m_txrequest.ForgetTxHash(tx.GetHash()); - m_txrequest.ForgetTxHash(tx.GetWitnessHash()); + m_txrequest.ForgetTxHash(tx.GetHash().ToUint256()); + m_txrequest.ForgetTxHash(tx.GetWitnessHash().ToUint256()); } } } else if (state.GetResult() == TxValidationResult::TX_WITNESS_STRIPPED) { @@ -467,7 +467,7 @@ node::RejectedTxTodo TxDownloadManagerImpl::MempoolRejectedTx(const CTransaction } else { RecentRejectsFilter().insert(ptx->GetWitnessHash().ToUint256()); } - m_txrequest.ForgetTxHash(ptx->GetWitnessHash()); + m_txrequest.ForgetTxHash(ptx->GetWitnessHash().ToUint256()); // If the transaction failed for TX_INPUTS_NOT_STANDARD, // then we know that the witness was irrelevant to the policy // failure, since this check depends only on the txid @@ -480,7 +480,7 @@ node::RejectedTxTodo TxDownloadManagerImpl::MempoolRejectedTx(const CTransaction // rolling bloom filter. if (state.GetResult() == TxValidationResult::TX_INPUTS_NOT_STANDARD && ptx->HasWitness()) { RecentRejectsFilter().insert(ptx->GetHash().ToUint256()); - m_txrequest.ForgetTxHash(ptx->GetHash()); + m_txrequest.ForgetTxHash(ptx->GetHash().ToUint256()); } } @@ -508,8 +508,8 @@ std::pair> TxDownloadManagerImpl::Receive const Wtxid& wtxid = ptx->GetWitnessHash(); // Mark that we have received a response - m_txrequest.ReceivedResponse(nodeid, txid); - if (ptx->HasWitness()) m_txrequest.ReceivedResponse(nodeid, wtxid); + m_txrequest.ReceivedResponse(nodeid, txid.ToUint256()); + if (ptx->HasWitness()) m_txrequest.ReceivedResponse(nodeid, wtxid.ToUint256()); // First check if we should drop this tx. // We do the AlreadyHaveTx() check using wtxid, rather than txid - in the diff --git a/src/signet.cpp b/src/signet.cpp index 45d279d2bf0e..742d03d9178a 100644 --- a/src/signet.cpp +++ b/src/signet.cpp @@ -59,9 +59,9 @@ static uint256 ComputeModifiedMerkleRoot(const CMutableTransaction& cb, const CB { std::vector leaves; leaves.resize(block.vtx.size()); - leaves[0] = cb.GetHash(); + leaves[0] = cb.GetHash().ToUint256(); for (size_t s = 1; s < block.vtx.size(); ++s) { - leaves[s] = block.vtx[s]->GetHash(); + leaves[s] = block.vtx[s]->GetHash().ToUint256(); } return ComputeMerkleRoot(std::move(leaves)); } diff --git a/src/test/disconnected_transactions.cpp b/src/test/disconnected_transactions.cpp index d4dc124b7b10..7897e5f15c0a 100644 --- a/src/test/disconnected_transactions.cpp +++ b/src/test/disconnected_transactions.cpp @@ -22,7 +22,7 @@ BOOST_AUTO_TEST_CASE(disconnectpool_memory_limits) // is within an expected range. // Overhead for the hashmap depends on number of buckets - std::unordered_map temp_map; + std::unordered_map temp_map; temp_map.reserve(1); const size_t MAP_1{memusage::DynamicUsage(temp_map)}; temp_map.reserve(100); diff --git a/src/test/fuzz/merkle.cpp b/src/test/fuzz/merkle.cpp index 84055ac861cd..4bb91faf0b8f 100644 --- a/src/test/fuzz/merkle.cpp +++ b/src/test/fuzz/merkle.cpp @@ -19,7 +19,7 @@ uint256 ComputeMerkleRootFromPath(const CBlock& block, uint32_t position, const throw std::out_of_range("Position out of range"); } - uint256 current_hash = block.vtx[position]->GetHash(); + uint256 current_hash = block.vtx[position]->GetHash().ToUint256(); for (const uint256& sibling : merkle_path) { if (position % 2 == 0) { @@ -47,7 +47,7 @@ FUZZ_TARGET(merkle) tx_hashes.reserve(num_txs); for (size_t i = 0; i < num_txs; ++i) { - tx_hashes.push_back(block->vtx[i]->GetHash()); + tx_hashes.push_back(block->vtx[i]->GetHash().ToUint256()); } // Test ComputeMerkleRoot diff --git a/src/test/fuzz/p2p_headers_presync.cpp b/src/test/fuzz/p2p_headers_presync.cpp index a2c3a0f3e626..9aebac30557d 100644 --- a/src/test/fuzz/p2p_headers_presync.cpp +++ b/src/test/fuzz/p2p_headers_presync.cpp @@ -139,7 +139,7 @@ CBlock ConsumeBlock(FuzzedDataProvider& fuzzed_data_provider, const uint256& pre tx.vout[0].nValue = 0; tx.vin[0].scriptSig.resize(2); block.vtx.push_back(MakeTransactionRef(tx)); - block.hashMerkleRoot = block.vtx[0]->GetHash(); + block.hashMerkleRoot = block.vtx[0]->GetHash().ToUint256(); return block; } diff --git a/src/test/merkle_tests.cpp b/src/test/merkle_tests.cpp index f8cb0094fc72..cad23321ce99 100644 --- a/src/test/merkle_tests.cpp +++ b/src/test/merkle_tests.cpp @@ -29,7 +29,7 @@ static uint256 BlockBuildMerkleTree(const CBlock& block, bool* fMutated, std::ve vMerkleTree.clear(); vMerkleTree.reserve(block.vtx.size() * 2 + 16); // Safe upper bound for the number of total nodes. for (std::vector::const_iterator it(block.vtx.begin()); it != block.vtx.end(); ++it) - vMerkleTree.push_back((*it)->GetHash()); + vMerkleTree.push_back((*it)->GetHash().ToUint256()); int j = 0; bool mutated = false; for (int nSize = block.vtx.size(); nSize > 1; nSize = (nSize + 1) / 2) @@ -138,7 +138,7 @@ BOOST_AUTO_TEST_CASE(merkle_test) std::vector newBranch = TransactionMerklePath(block, mtx); std::vector oldBranch = BlockGetMerkleBranch(block, merkleTree, mtx); BOOST_CHECK(oldBranch == newBranch); - BOOST_CHECK(ComputeMerkleRootFromBranch(block.vtx[mtx]->GetHash(), newBranch, mtx) == oldRoot); + BOOST_CHECK(ComputeMerkleRootFromBranch(block.vtx[mtx]->GetHash().ToUint256(), newBranch, mtx) == oldRoot); } } } @@ -166,7 +166,7 @@ BOOST_AUTO_TEST_CASE(merkle_test_oneTx_block) mtx.nLockTime = 0; block.vtx[0] = MakeTransactionRef(std::move(mtx)); uint256 root = BlockMerkleRoot(block, &mutated); - BOOST_CHECK_EQUAL(root, block.vtx[0]->GetHash()); + BOOST_CHECK_EQUAL(root, block.vtx[0]->GetHash().ToUint256()); BOOST_CHECK_EQUAL(mutated, false); } @@ -239,7 +239,7 @@ BOOST_AUTO_TEST_CASE(merkle_test_BlockWitness) std::vector hashes; hashes.resize(block.vtx.size()); hashes[0].SetNull(); - hashes[1] = block.vtx[1]->GetHash(); + hashes[1] = block.vtx[1]->GetHash().ToUint256(); uint256 merkleRootofHashes = ComputeMerkleRoot(hashes); diff --git a/src/test/util/setup_common.cpp b/src/test/util/setup_common.cpp index 76a42d19ea2e..0fc7991e5702 100644 --- a/src/test/util/setup_common.cpp +++ b/src/test/util/setup_common.cpp @@ -629,3 +629,11 @@ std::ostream& operator<<(std::ostream& os, const uint256& num) { return os << num.ToString(); } + +std::ostream& operator<<(std::ostream& os, const Txid& txid) { + return os << txid.ToString(); +} + +std::ostream& operator<<(std::ostream& os, const Wtxid& wtxid) { + return os << wtxid.ToString(); +} diff --git a/src/test/util/setup_common.h b/src/test/util/setup_common.h index 57bea9086b99..150f50650bab 100644 --- a/src/test/util/setup_common.h +++ b/src/test/util/setup_common.h @@ -291,6 +291,8 @@ inline std::ostream& operator<<(std::ostream& os, const std::optional& v) std::ostream& operator<<(std::ostream& os, const arith_uint256& num); std::ostream& operator<<(std::ostream& os, const uint160& num); std::ostream& operator<<(std::ostream& os, const uint256& num); +std::ostream& operator<<(std::ostream& os, const Txid& txid); +std::ostream& operator<<(std::ostream& os, const Wtxid& wtxid); // @} /** diff --git a/src/test/validation_tests.cpp b/src/test/validation_tests.cpp index 7e86b3a35c1f..5d4c3ee1f1de 100644 --- a/src/test/validation_tests.cpp +++ b/src/test/validation_tests.cpp @@ -214,9 +214,9 @@ BOOST_AUTO_TEST_CASE(block_malleation) // Block with a single coinbase tx is mutated if the merkle root is not // equal to the coinbase tx's hash. block.vtx.push_back(create_coinbase_tx()); - BOOST_CHECK(block.vtx[0]->GetHash() != block.hashMerkleRoot); + BOOST_CHECK(block.vtx[0]->GetHash().ToUint256() != block.hashMerkleRoot); BOOST_CHECK(is_mutated(block, /*check_witness_root=*/false)); - block.hashMerkleRoot = block.vtx[0]->GetHash(); + block.hashMerkleRoot = block.vtx[0]->GetHash().ToUint256(); BOOST_CHECK(is_not_mutated(block, /*check_witness_root=*/false)); // Block with two transactions is mutated if the merkle root does not @@ -248,7 +248,7 @@ BOOST_AUTO_TEST_CASE(block_malleation) mtx.vout.resize(1); mtx.vout[0].scriptPubKey.resize(4); block.vtx.push_back(MakeTransactionRef(mtx)); - block.hashMerkleRoot = block.vtx.back()->GetHash(); + block.hashMerkleRoot = block.vtx.back()->GetHash().ToUint256(); assert(block.vtx.back()->IsCoinBase()); assert(GetSerializeSize(TX_NO_WITNESS(block.vtx.back())) == 64); } @@ -285,7 +285,7 @@ BOOST_AUTO_TEST_CASE(block_malleation) HashWriter hasher; hasher.write(tx1.GetHash()); hasher.write(tx2.GetHash()); - assert(hasher.GetHash() == tx3.GetHash()); + assert(hasher.GetHash() == tx3.GetHash().ToUint256()); // Verify that tx3 is 64 bytes in size (without witness). assert(GetSerializeSize(TX_NO_WITNESS(tx3)) == 64); } diff --git a/src/txmempool.h b/src/txmempool.h index 8b55d9cd5216..5c81876a361e 100644 --- a/src/txmempool.h +++ b/src/txmempool.h @@ -313,7 +313,7 @@ class CTxMemPool boost::multi_index::hashed_unique< boost::multi_index::tag, mempoolentry_wtxid, - SaltedTxidHasher + SaltedWtxidHasher >, // sorted by fee rate boost::multi_index::ordered_non_unique< diff --git a/src/util/hasher.cpp b/src/util/hasher.cpp index 117cfe8dcd12..c4051ae00133 100644 --- a/src/util/hasher.cpp +++ b/src/util/hasher.cpp @@ -7,10 +7,18 @@ #include #include +SaltedUint256Hasher::SaltedUint256Hasher() : + k0{FastRandomContext().rand64()}, + k1{FastRandomContext().rand64()} {} + SaltedTxidHasher::SaltedTxidHasher() : k0{FastRandomContext().rand64()}, k1{FastRandomContext().rand64()} {} +SaltedWtxidHasher::SaltedWtxidHasher() : + k0{FastRandomContext().rand64()}, + k1{FastRandomContext().rand64()} {} + SaltedOutpointHasher::SaltedOutpointHasher(bool deterministic) : k0{deterministic ? 0x8e819f2607a18de6 : FastRandomContext().rand64()}, k1{deterministic ? 0xf4020d2e3983b0eb : FastRandomContext().rand64()} diff --git a/src/util/hasher.h b/src/util/hasher.h index 3a75c91a3ef8..be5d9eb13df1 100644 --- a/src/util/hasher.h +++ b/src/util/hasher.h @@ -11,9 +11,24 @@ #include #include +#include #include #include +class SaltedUint256Hasher +{ +private: + /** Salt */ + const uint64_t k0, k1; + +public: + SaltedUint256Hasher(); + + size_t operator()(const uint256& hash) const { + return SipHashUint256(k0, k1, hash); + } +}; + class SaltedTxidHasher { private: @@ -23,11 +38,26 @@ class SaltedTxidHasher public: SaltedTxidHasher(); - size_t operator()(const uint256& txid) const { - return SipHashUint256(k0, k1, txid); + size_t operator()(const Txid& txid) const { + return SipHashUint256(k0, k1, txid.ToUint256()); } }; +class SaltedWtxidHasher +{ +private: + /** Salt */ + const uint64_t k0, k1; + +public: + SaltedWtxidHasher(); + + size_t operator()(const Wtxid& wtxid) const { + return SipHashUint256(k0, k1, wtxid.ToUint256()); + } +}; + + class SaltedOutpointHasher { private: @@ -47,7 +77,7 @@ class SaltedOutpointHasher * @see https://gcc.gnu.org/onlinedocs/gcc-13.2.0/libstdc++/manual/manual/unordered_associative.html */ size_t operator()(const COutPoint& id) const noexcept { - return SipHashUint256Extra(k0, k1, id.hash, id.n); + return SipHashUint256Extra(k0, k1, id.hash.ToUint256(), id.n); } }; diff --git a/src/validation.cpp b/src/validation.cpp index 0d68475aa6cb..91adbdff11fa 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -1275,7 +1275,7 @@ bool MemPoolAccept::ConsensusScriptChecks(const ATMPArgs& args, Workspace& ws) AssertLockHeld(cs_main); AssertLockHeld(m_pool.cs); const CTransaction& tx = *ws.m_ptx; - const uint256& hash = ws.m_hash; + const Txid& hash = ws.m_hash; TxValidationState& state = ws.m_state; // Check again against the current block tip's script verification @@ -1322,7 +1322,7 @@ void MemPoolAccept::FinalizeSubpackage(const ATMPArgs& args) const bool replaced_with_tx{m_subpackage.m_changeset->GetTxCount() == 1}; if (replaced_with_tx) { const CTransaction& tx = m_subpackage.m_changeset->GetAddedTxn(0); - tx_or_package_hash = tx.GetHash(); + tx_or_package_hash = tx.GetHash().ToUint256(); log_string += strprintf("New tx %s (wtxid=%s, fees=%s, vsize=%s)", tx.GetHash().ToString(), tx.GetWitnessHash().ToString(), diff --git a/src/wallet/spend.cpp b/src/wallet/spend.cpp index 250377afcfa7..4ae34d0bb4c8 100644 --- a/src/wallet/spend.cpp +++ b/src/wallet/spend.cpp @@ -327,7 +327,7 @@ CoinsResult AvailableCoins(const CWallet& wallet, std::set trusted_parents; // Cache for whether each tx passes the tx level checks (first bool), and whether the transaction is "safe" (second bool) - std::unordered_map, SaltedTxidHasher> tx_safe_cache; + std::unordered_map, SaltedTxidHasher> tx_safe_cache; for (const auto& [outpoint, txo] : wallet.GetTXOs()) { const CWalletTx& wtx = txo.GetWalletTx(); const CTxOut& output = txo.GetTxOut(); diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 91a494c379fd..5e7bec48c0b3 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -2319,7 +2319,7 @@ util::Result CWallet::RemoveTxs(WalletBatch& batch, std::vector& txs for (const auto& txin : it->second.tx->vin) mapTxSpends.erase(txin.prevout); for (unsigned int i = 0; i < it->second.tx->vout.size(); ++i) { - m_txos.erase(COutPoint(Txid::FromUint256(hash), i)); + m_txos.erase(COutPoint(hash, i)); } mapWallet.erase(it); NotifyTransactionChanged(hash, CT_DELETED); diff --git a/src/zmq/zmqpublishnotifier.cpp b/src/zmq/zmqpublishnotifier.cpp index 1e7aa11ce9bf..693d70c84377 100644 --- a/src/zmq/zmqpublishnotifier.cpp +++ b/src/zmq/zmqpublishnotifier.cpp @@ -230,7 +230,7 @@ bool CZMQPublishHashBlockNotifier::NotifyBlock(const CBlockIndex *pindex) bool CZMQPublishHashTransactionNotifier::NotifyTransaction(const CTransaction &transaction) { - uint256 hash = transaction.GetHash(); + uint256 hash = transaction.GetHash().ToUint256(); LogDebug(BCLog::ZMQ, "Publish hashtx %s to %s\n", hash.GetHex(), this->address); uint8_t data[32]; for (unsigned int i = 0; i < 32; i++) { @@ -254,7 +254,7 @@ bool CZMQPublishRawBlockNotifier::NotifyBlock(const CBlockIndex *pindex) bool CZMQPublishRawTransactionNotifier::NotifyTransaction(const CTransaction &transaction) { - uint256 hash = transaction.GetHash(); + uint256 hash = transaction.GetHash().ToUint256(); LogDebug(BCLog::ZMQ, "Publish rawtx %s to %s\n", hash.GetHex(), this->address); DataStream ss; ss << TX_WITH_WITNESS(transaction); @@ -290,14 +290,14 @@ bool CZMQPublishSequenceNotifier::NotifyBlockDisconnect(const CBlockIndex *pinde bool CZMQPublishSequenceNotifier::NotifyTransactionAcceptance(const CTransaction &transaction, uint64_t mempool_sequence) { - uint256 hash = transaction.GetHash(); + uint256 hash = transaction.GetHash().ToUint256(); LogDebug(BCLog::ZMQ, "Publish hashtx mempool acceptance %s to %s\n", hash.GetHex(), this->address); return SendSequenceMsg(*this, hash, /* Mempool (A)cceptance */ 'A', mempool_sequence); } bool CZMQPublishSequenceNotifier::NotifyTransactionRemoval(const CTransaction &transaction, uint64_t mempool_sequence) { - uint256 hash = transaction.GetHash(); + uint256 hash = transaction.GetHash().ToUint256(); LogDebug(BCLog::ZMQ, "Publish hashtx mempool removal %s to %s\n", hash.GetHex(), this->address); return SendSequenceMsg(*this, hash, /* Mempool (R)emoval */ 'R', mempool_sequence); } From 6f068f65de17951dc459bc8637e5de15b84ca445 Mon Sep 17 00:00:00 2001 From: marcofleon Date: Thu, 31 Jul 2025 17:45:22 +0100 Subject: [PATCH 0137/2775] Remove implicit uint256 conversion and comparison --- src/util/transaction_identifier.h | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/util/transaction_identifier.h b/src/util/transaction_identifier.h index 30302f061f22..b59f2e77c3d9 100644 --- a/src/util/transaction_identifier.h +++ b/src/util/transaction_identifier.h @@ -24,9 +24,6 @@ class transaction_identifier // Note: Use FromUint256 externally instead. transaction_identifier(const uint256& wrapped) : m_wrapped{wrapped} {} - // TODO: Comparisons with uint256 should be disallowed once we have - // converted most of the code to using the new txid types. - constexpr int Compare(const uint256& other) const { return m_wrapped.Compare(other); } constexpr int Compare(const transaction_identifier& other) const { return m_wrapped.Compare(other.m_wrapped); } template constexpr int Compare(const Other& other) const @@ -65,15 +62,6 @@ class transaction_identifier constexpr const std::byte* end() const { return reinterpret_cast(m_wrapped.end()); } template void Serialize(Stream& s) const { m_wrapped.Serialize(s); } template void Unserialize(Stream& s) { m_wrapped.Unserialize(s); } - - /** Conversion function to `uint256`. - * - * Note: new code should use `ToUint256`. - * - * TODO: This should be removed once the majority of the code has switched - * to using the Txid and Wtxid types. Until then it makes for a smoother - * transition to allow this conversion. */ - operator const uint256&() const LIFETIMEBOUND { return m_wrapped; } }; /** Txid commits to all transaction fields except the witness. */ From de0675f9de5feae1f070840ad7218b1378fb880b Mon Sep 17 00:00:00 2001 From: marcofleon Date: Fri, 1 Aug 2025 13:29:27 +0100 Subject: [PATCH 0138/2775] refactor: Move `transaction_identifier.h` to primitives Moves the file from `src/util` to `src/primitives`. Now that the refactor is complete, Txid and Wtxid are fundamental types, so it makes sense for them to reside in `src/primitives`. --- src/index/txindex.cpp | 2 +- src/interfaces/wallet.h | 2 +- src/merkleblock.h | 2 +- src/primitives/transaction.cpp | 2 +- src/primitives/transaction.h | 2 +- src/{util => primitives}/transaction_identifier.h | 6 +++--- src/qt/sendcoinsdialog.h | 2 +- src/qt/transactionrecord.h | 2 +- src/qt/transactionview.h | 2 +- src/qt/walletmodel.h | 2 +- src/test/fuzz/hex.cpp | 2 +- src/test/transaction_tests.cpp | 2 +- src/test/uint256_tests.cpp | 2 +- src/txmempool.h | 2 +- src/wallet/receive.h | 2 +- src/wallet/rpc/transactions.cpp | 2 +- src/wallet/spend.cpp | 2 +- src/wallet/wallet.h | 2 +- src/wallet/walletdb.cpp | 2 +- src/wallet/walletdb.h | 2 +- 20 files changed, 22 insertions(+), 22 deletions(-) rename src/{util => primitives}/transaction_identifier.h (95%) diff --git a/src/index/txindex.cpp b/src/index/txindex.cpp index 2a7c0066b088..11dd856e1b67 100644 --- a/src/index/txindex.cpp +++ b/src/index/txindex.cpp @@ -9,7 +9,7 @@ #include #include #include -#include +#include #include constexpr uint8_t DB_TXINDEX{'t'}; diff --git a/src/interfaces/wallet.h b/src/interfaces/wallet.h index 94869aff5afe..412cbb613e3c 100644 --- a/src/interfaces/wallet.h +++ b/src/interfaces/wallet.h @@ -9,12 +9,12 @@ #include #include #include +#include #include #include