diff --git a/.cirrus.yml b/.cirrus.yml index f9c3d844be..f680715f2f 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -1,33 +1,3 @@ -task: - name: "FreeBsd 12.0 amd64 [GOAL: install] [no depends, only system libs]" - freebsd_instance: - image: freebsd-12-0-release-amd64 - cpu: 8 - memory: 8G - timeout_in: 60m - env: - MAKEJOBS: "-j9" - CONFIGURE_OPTS: "--disable-dependency-tracking" - GOAL: "install" - TEST_RUNNER_PORT_MIN: "14000" # Must be larger than 12321, which is used for the http cache. See https://cirrus-ci.org/guide/writing-tasks/#http-cache - CCACHE_SIZE: "200M" - CCACHE_COMPRESS: 1 - CCACHE_DIR: "/tmp/ccache_dir" - ccache_cache: - folder: "/tmp/ccache_dir" - install_script: - - pkg install -y autoconf automake boost-libs git gmake libevent libtool pkgconf python3 ccache - - ./contrib/install_db4.sh $(pwd) - - ccache --max-size=${CCACHE_SIZE} - configure_script: - - ./autogen.sh - - ./configure ${CONFIGURE_OPTS} BDB_LIBS="-L$(pwd)/db4/lib -ldb_cxx-4.8" BDB_CFLAGS="-I$(pwd)/db4/include" || ( cat config.log && false) - make_script: - - gmake ${MAKEJOBS} ${GOAL} || ( echo "Build failure. Verbose build follows." && gmake ${GOAL} V=1 ; false ) - check_script: - - gmake check ${MAKEJOBS} VERBOSE=1 - functional_test_script: - - ./test/functional/test_runner.py --jobs 9 --ci --extended --exclude feature_dbcrash --combinedlogslen=1000 --quiet --failfast task: name: "x86_64 Linux [GOAL: install] [bionic] [Using ./ci/ system]" container: diff --git a/Makefile.am b/Makefile.am index b11152c6d0..1ca44abe10 100644 --- a/Makefile.am +++ b/Makefile.am @@ -41,7 +41,7 @@ OSX_DEPLOY_SCRIPT=$(top_srcdir)/contrib/macdeploy/macdeployqtplus OSX_FANCY_PLIST=$(top_srcdir)/contrib/macdeploy/fancy.plist OSX_INSTALLER_ICONS=$(top_srcdir)/src/qt/res/icons/vertcoin.icns OSX_PLIST=$(top_builddir)/share/qt/Info.plist #not installed -OSX_QT_TRANSLATIONS = da,de,es,hu,ru,uk,zh_CN,zh_TW +OSX_QT_TRANSLATIONS = ar,bg,ca,cs,da,de,es,fa,fi,fr,gd,gl,he,hu,it,ja,ko,lt,lv,pl,pt,ru,sk,sl,sv,uk,zh_CN,zh_TW DIST_CONTRIB = \ $(top_srcdir)/contrib/linearize/linearize-data.py \ diff --git a/ci/lint/04_install.sh b/ci/lint/04_install.sh index 8b2d609504..66be213c95 100755 --- a/ci/lint/04_install.sh +++ b/ci/lint/04_install.sh @@ -11,5 +11,5 @@ travis_retry pip3 install flake8==3.7.8 travis_retry pip3 install yq SHELLCHECK_VERSION=v0.6.0 -curl -s "https://storage.googleapis.com/shellcheck/shellcheck-${SHELLCHECK_VERSION}.linux.x86_64.tar.xz" | tar --xz -xf - --directory /tmp/ +curl -sL "https://github.com/koalaman/shellcheck/releases/download/${SHELLCHECK_VERSION}/shellcheck-${SHELLCHECK_VERSION}.linux.x86_64.tar.xz" | tar --xz -xf - --directory /tmp/ export PATH="/tmp/shellcheck-${SHELLCHECK_VERSION}:${PATH}" diff --git a/configure.ac b/configure.ac index 08fd1aeff1..50e1d474dd 100644 --- a/configure.ac +++ b/configure.ac @@ -1693,7 +1693,7 @@ echo " gprof enabled = $enable_gprof" echo " werror = $enable_werror" echo echo " target os = $TARGET_OS" -echo " build os = $BUILD_OS" +echo " build os = $build_os" echo echo " CC = $CC" echo " CFLAGS = $CFLAGS" diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk index 366b1d0c42..500881e442 100644 --- a/depends/packages/qt.mk +++ b/depends/packages/qt.mk @@ -10,6 +10,7 @@ $(package)_build_subdir=qtbase $(package)_qt_libs=corelib network widgets gui plugins testlib $(package)_patches=fix_qt_pkgconfig.patch mac-qmake.conf fix_configure_mac.patch fix_no_printer.patch fix_rcc_determinism.patch fix_riscv64_arch.patch xkb-default.patch no-xlib.patch fix_android_qmake_conf.patch fix_android_jni_static.patch +# Update OSX_QT_TRANSLATIONS when this is updated $(package)_qttranslations_file_name=qttranslations-$($(package)_suffix) $(package)_qttranslations_sha256_hash=fb5a47799754af73d3bf501fe513342cfe2fc37f64e80df5533f6110e804220c @@ -79,7 +80,6 @@ $(package)_config_opts += -no-feature-colordialog $(package)_config_opts += -no-feature-commandlineparser $(package)_config_opts += -no-feature-concurrent $(package)_config_opts += -no-feature-dial -$(package)_config_opts += -no-feature-filesystemwatcher $(package)_config_opts += -no-feature-fontcombobox $(package)_config_opts += -no-feature-ftp $(package)_config_opts += -no-feature-http diff --git a/doc/man/bitcoin-cli.1 b/doc/man/bitcoin-cli.1 index 415ddb7b0d..c54f2d1d9f 100644 --- a/doc/man/bitcoin-cli.1 +++ b/doc/man/bitcoin-cli.1 @@ -1,7 +1,7 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13. -.TH BITCOIN-CLI "1" "June 2020" "bitcoin-cli v0.20.0.0" "User Commands" +.TH BITCOIN-CLI "1" "July 2020" "bitcoin-cli v0.20.1.0" "User Commands" .SH NAME -bitcoin-cli \- manual page for bitcoin-cli v0.20.0.0 +bitcoin-cli \- manual page for bitcoin-cli v0.20.1.0 .SH SYNOPSIS .B bitcoin-cli [\fI\,options\/\fR] \fI\, \/\fR[\fI\,params\/\fR] \fI\,Send command to Bitcoin Core\/\fR @@ -15,7 +15,7 @@ bitcoin-cli \- manual page for bitcoin-cli v0.20.0.0 .B bitcoin-cli [\fI\,options\/\fR] \fI\,help Get help for a command\/\fR .SH DESCRIPTION -Bitcoin Core RPC client version v0.20.0.0 +Bitcoin Core RPC client version v0.20.1.0 .SH OPTIONS .HP \-? diff --git a/doc/man/bitcoin-qt.1 b/doc/man/bitcoin-qt.1 index b7e95981cb..0f1ccf2260 100644 --- a/doc/man/bitcoin-qt.1 +++ b/doc/man/bitcoin-qt.1 @@ -1,12 +1,12 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13. -.TH BITCOIN-QT "1" "June 2020" "bitcoin-qt v0.20.0.0" "User Commands" +.TH BITCOIN-QT "1" "July 2020" "bitcoin-qt v0.20.1.0" "User Commands" .SH NAME -bitcoin-qt \- manual page for bitcoin-qt v0.20.0.0 +bitcoin-qt \- manual page for bitcoin-qt v0.20.1.0 .SH SYNOPSIS .B bitcoin-qt [\fI\,command-line options\/\fR] .SH DESCRIPTION -Bitcoin Core version v0.20.0.0 +Bitcoin Core version v0.20.1.0 .SH OPTIONS .HP \-? @@ -174,11 +174,12 @@ datadir location. .HP \fB\-banscore=\fR .IP -Threshold for disconnecting misbehaving peers (default: 100) +Threshold for disconnecting and discouraging misbehaving peers (default: +100) .HP \fB\-bantime=\fR .IP -Number of seconds to keep misbehaving peers from reconnecting (default: +Default duration (in seconds) of manually configured bans (default: 86400) .HP \fB\-bind=\fR diff --git a/doc/man/bitcoin-tx.1 b/doc/man/bitcoin-tx.1 index 3adce31dc7..f473205eca 100644 --- a/doc/man/bitcoin-tx.1 +++ b/doc/man/bitcoin-tx.1 @@ -1,7 +1,7 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13. -.TH BITCOIN-TX "1" "June 2020" "bitcoin-tx v0.20.0.0" "User Commands" +.TH BITCOIN-TX "1" "July 2020" "bitcoin-tx v0.20.1.0" "User Commands" .SH NAME -bitcoin-tx \- manual page for bitcoin-tx v0.20.0.0 +bitcoin-tx \- manual page for bitcoin-tx v0.20.1.0 .SH SYNOPSIS .B bitcoin-tx [\fI\,options\/\fR] \fI\, \/\fR[\fI\,commands\/\fR] \fI\,Update hex-encoded bitcoin transaction\/\fR @@ -9,7 +9,7 @@ bitcoin-tx \- manual page for bitcoin-tx v0.20.0.0 .B bitcoin-tx [\fI\,options\/\fR] \fI\,-create \/\fR[\fI\,commands\/\fR] \fI\,Create hex-encoded bitcoin transaction\/\fR .SH DESCRIPTION -Bitcoin Core bitcoin\-tx utility version v0.20.0.0 +Bitcoin Core bitcoin\-tx utility version v0.20.1.0 .SH OPTIONS .HP \-? diff --git a/doc/man/bitcoin-wallet.1 b/doc/man/bitcoin-wallet.1 index d33e0cb5d1..f639bb1e7b 100644 --- a/doc/man/bitcoin-wallet.1 +++ b/doc/man/bitcoin-wallet.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13. -.TH BITCOIN-WALLET "1" "June 2020" "bitcoin-wallet v0.20.0.0" "User Commands" +.TH BITCOIN-WALLET "1" "July 2020" "bitcoin-wallet v0.20.1.0" "User Commands" .SH NAME -bitcoin-wallet \- manual page for bitcoin-wallet v0.20.0.0 +bitcoin-wallet \- manual page for bitcoin-wallet v0.20.1.0 .SH DESCRIPTION -Bitcoin Core bitcoin\-wallet version v0.20.0.0 +Bitcoin Core bitcoin\-wallet version v0.20.1.0 .PP bitcoin\-wallet is an offline tool for creating and interacting with Bitcoin Core wallet files. By default bitcoin\-wallet will act on wallets in the default mainnet wallet directory in the datadir. diff --git a/doc/man/bitcoind.1 b/doc/man/bitcoind.1 index 2137e355b3..45e2ec98f9 100644 --- a/doc/man/bitcoind.1 +++ b/doc/man/bitcoind.1 @@ -1,12 +1,12 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13. -.TH BITCOIND "1" "June 2020" "bitcoind v0.20.0.0" "User Commands" +.TH BITCOIND "1" "July 2020" "bitcoind v0.20.1.0" "User Commands" .SH NAME -bitcoind \- manual page for bitcoind v0.20.0.0 +bitcoind \- manual page for bitcoind v0.20.1.0 .SH SYNOPSIS .B bitcoind [\fI\,options\/\fR] \fI\,Start Bitcoin Core\/\fR .SH DESCRIPTION -Bitcoin Core version v0.20.0.0 +Bitcoin Core version v0.20.1.0 .SH OPTIONS .HP \-? @@ -174,11 +174,12 @@ datadir location. .HP \fB\-banscore=\fR .IP -Threshold for disconnecting misbehaving peers (default: 100) +Threshold for disconnecting and discouraging misbehaving peers (default: +100) .HP \fB\-bantime=\fR .IP -Number of seconds to keep misbehaving peers from reconnecting (default: +Default duration (in seconds) of manually configured bans (default: 86400) .HP \fB\-bind=\fR diff --git a/doc/release-notes.md b/doc/release-notes.md index 30b35a521e..1ed56e92e0 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -1,11 +1,11 @@ -0.20.0 Release Notes +0.20.1 Release Notes ==================== -Bitcoin Core version 0.20.0 is now available from: +Bitcoin Core version 0.20.1 is now available from: - + -This release includes new features, various bug fixes and performance +This minor release includes various bug fixes and performance improvements, as well as updated translations. Please report bugs using the issue tracker at GitHub: @@ -160,930 +160,91 @@ this release: Notable changes =============== -P2P and network changes ------------------------ +Changes regarding misbehaving peers +----------------------------------- -#### Removal of BIP61 reject network messages from Bitcoin Core +Peers that misbehave (e.g. send us invalid blocks) are now referred to as +discouraged nodes in log output, as they're not (and weren't) strictly banned: +incoming connections are still allowed from them, but they're preferred for +eviction. -The `-enablebip61` command line option to enable BIP61 has been removed. -(#17004) +Furthermore, a few additional changes are introduced to how discouraged +addresses are treated: -This feature has been disabled by default since Bitcoin Core version 0.18.0. -Nodes on the network can not generally be trusted to send valid messages -(including reject messages), so this should only ever be used when -connected to a trusted node. Please use the alternatives recommended -below if you rely on this removed feature: +- Discouraging an address does not time out automatically after 24 hours + (or the `-bantime` setting). Depending on traffic from other peers, + discouragement may time out at an indeterminate time. -- Testing or debugging of implementations of the Bitcoin P2P network protocol - should be done by inspecting the log messages that are produced by a recent - version of Bitcoin Core. Bitcoin Core logs debug messages - (`-debug=`) to a stream (`-printtoconsole`) or to a file - (`-debuglogfile=`). +- Discouragement is not persisted over restarts. -- Testing the validity of a block can be achieved by specific RPCs: +- There is no method to list discouraged addresses. They are not returned by + the `listbanned` RPC. That RPC also no longer reports the `ban_reason` + field, as `"manually added"` is the only remaining option. - - `submitblock` +- Discouragement cannot be removed with the `setban remove` RPC command. + If you need to remove a discouragement, you can remove all discouragements by + stop-starting your node. - - `getblocktemplate` with `'mode'` set to `'proposal'` for blocks with - potentially invalid POW +Notification changes +-------------------- -- Testing the validity of a transaction can be achieved by specific RPCs: +`-walletnotify` notifications are now sent for wallet transactions that are +removed from the mempool because they conflict with a new block. These +notifications were sent previously before the v0.19 release, but had been +broken since that release (bug +[#18325](https://github.com/bitcoin/bitcoin/issues/18325)). - - `sendrawtransaction` - - - `testmempoolaccept` - -- Wallets should not assume a transaction has propagated to the network - just because there are no reject messages. Instead, listen for the - transaction to be announced by other peers on the network. Wallets - should not assume a lack of reject messages means a transaction pays - an appropriate fee. Instead, set fees using fee estimation and use - replace-by-fee to increase a transaction's fee if it hasn't confirmed - within the desired amount of time. - -The removal of BIP61 reject message support also has the following minor RPC -and logging implications: - -- `testmempoolaccept` and `sendrawtransaction` no longer return the P2P reject - code when a transaction is not accepted to the mempool. They still return the - verbal reject reason. - -- Log messages that previously reported the reject code when a transaction was - not accepted to the mempool now no longer report the reject code. The reason - for rejection is still reported. - -Updated RPCs ------------- - -- The RPCs which accept descriptors now accept the new `sortedmulti(...)` descriptor - type which supports multisig scripts where the public keys are sorted - lexicographically in the resulting script. (#17056) - -- The `walletprocesspsbt` and `walletcreatefundedpsbt` RPCs now include - BIP32 derivation paths by default for public keys if we know them. - This can be disabled by setting the `bip32derivs` parameter to - `false`. (#17264) - -- The `bumpfee` RPC's parameter `totalFee`, which was deprecated in - 0.19, has been removed. (#18312) - -- The `bumpfee` RPC will return a PSBT when used with wallets that have - private keys disabled. (#16373) - -- The `getpeerinfo` RPC now includes a `mapped_as` field to indicate the - mapped Autonomous System used for diversifying peer selection. See the - `-asmap` configuration option described below in _New Settings_. (#16702) - -- The `createmultisig` and `addmultisigaddress` RPCs now return an - output script descriptor for the newly created address. (#18032) - -Build System ------------- - -- OpenSSL is no longer used by Bitcoin Core. (#17265) - -- BIP70 support has been fully removed from Bitcoin Core. The - `--enable-bip70` option remains, but it will throw an error during configure. - (#17165) - -- glibc 2.17 or greater is now required to run the release binaries. This - retains compatibility with RHEL 7, CentOS 7, Debian 8 and Ubuntu 14.04 LTS. (#17538) - -- The source code archives that are provided with gitian builds no longer contain - any autotools artifacts. Therefore, to build from such source, a user - should run the `./autogen.sh` script from the root of the unpacked archive. - This implies that `autotools` and other required packages are installed on the - user's system. (#18331) - -New settings ------------- - -- New `rpcwhitelist` and `rpcwhitelistdefault` configuration parameters - allow giving certain RPC users permissions to only some RPC calls. - (#12763) - -- A new `-asmap` configuration option has been added to diversify the - node's network connections by mapping IP addresses Autonomous System - Numbers (ASNs) and then limiting the number of connections made to any - single ASN. See [issue #16599](https://github.com/bitcoin/bitcoin/issues/16599), - [PR #16702](https://github.com/bitcoin/bitcoin/pull/16702), and the - `bitcoind help` for more information. This option is experimental and - subject to removal or breaking changes in future releases, so the - legacy /16 prefix mapping of IP addresses remains the default. (#16702) - -Updated settings ----------------- - -- All custom settings configured when Bitcoin Core starts are now - written to the `debug.log` file to assist troubleshooting. (#16115) - -- Importing blocks upon startup via the `bootstrap.dat` file no longer - occurs by default. The file must now be specified with - `-loadblock=`. (#17044) - -- The `-debug=db` logging category has been renamed to - `-debug=walletdb` to distinguish it from `coindb`. The `-debug=db` - option has been deprecated and will be removed in the next major - release. (#17410) - -- The `-walletnotify` configuration parameter will now replace any `%w` - in its argument with the name of the wallet generating the - notification. This is not supported on Windows. (#13339) - -Removed settings ----------------- - -- The `-whitelistforcerelay` configuration parameter has been removed after - it was discovered that it was rendered ineffective in version 0.13 and - hasn't actually been supported for almost four years. (#17985) - -GUI changes ------------ - -- The "Start Bitcoin Core on system login" option has been removed on macOS. - (#17567) - -- In the Peers window, the details for a peer now displays a `Mapped AS` - field to indicate the mapped Autonomous System used for diversifying - peer selection. See the `-asmap` configuration option in _New - Settings_, above. (#18402) - -- A "known bug" [announced](https://bitcoincore.org/en/releases/0.18.0/#wallet-gui) - in the release notes of version 0.18 has been fixed. The issue - affected anyone who simultaneously used multiple Bitcoin Core wallets - and the GUI coin control feature. (#18894) - -- For watch-only wallets, creating a new transaction in the Send screen - or fee bumping an existing transaction in the Transactions screen will - automatically copy a Partially-Signed Bitcoin Transaction (PSBT) to - the system clipboard. This can then be pasted into an external - program such as [HWI](https://github.com/bitcoin-core/HWI) for - signing. Future versions of Bitcoin Core should support a GUI option - for finalizing and broadcasting PSBTs, but for now the debug console - may be used with the `finalizepsbt` and `sendrawtransaction` RPCs. - (#16944, #17492) - -Wallet ------- - -- The wallet now by default uses bech32 addresses when using RPC, and - creates native segwit change outputs. (#16884) - -- The way that output trust was computed has been fixed, which affects - confirmed/unconfirmed balance status and coin selection. (#16766) - -- The `gettransaction`, `listtransactions` and `listsinceblock` RPC - responses now also include the height of the block that contains the - wallet transaction, if any. (#17437) - -- The `getaddressinfo` RPC has had its `label` field deprecated - (re-enable for this release using the configuration parameter - `-deprecatedrpc=label`). The `labels` field is altered from returning - JSON objects to returning a JSON array of label names (re-enable - previous behavior for this release using the configuration parameter - `-deprecatedrpc=labelspurpose`). Backwards compatibility using the - deprecated configuration parameters is expected to be dropped in the - 0.21 release. (#17585, #17578) - -Documentation changes ---------------------- - -- Bitcoin Core's automatically-generated source code documentation is - now available at https://doxygen.bitcoincore.org. (#17596) - -Low-level changes -================= - -Utilities ---------- - -- The `bitcoin-cli` utility used with the `-getinfo` parameter now - returns a `headers` field with the number of downloaded block headers - on the best headers chain (similar to the `blocks` field that is also - returned) and a `verificationprogress` field that estimates how much - of the best block chain has been synced by the local node. The - information returned no longer includes the `protocolversion`, - `walletversion`, and `keypoololdest` fields. (#17302, #17650) - -- The `bitcoin-cli` utility now accepts a `-stdinwalletpassphrase` - parameter that can be used when calling the `walletpassphrase` and - `walletpassphrasechange` RPCs to read the passphrase from standard - input without echoing it to the terminal, improving security against - anyone who can look at your screen. The existing `-stdinrpcpass` - parameter is also updated to not echo the passphrase. (#13716) - -Command line ------------- - -- Command line options prefixed with main/test/regtest network names like - `-main.port=8333` `-test.server=1` previously were allowed but ignored. Now - they trigger "Invalid parameter" errors on startup. (#17482) - -New RPCs --------- - -- The `dumptxoutset` RPC outputs a serialized snapshot of the current - UTXO set. A script is provided in the `contrib/devtools` directory - for generating a snapshot of the UTXO set at a particular block - height. (#16899) - -- The `generatetodescriptor` RPC allows testers using regtest mode to - generate blocks that pay an arbitrary output script descriptor. - (#16943) - -Updated RPCs ------------- - -- The `verifychain` RPC default values are now static instead of - depending on the command line options or configuration file - (`-checklevel`, and `-checkblocks`). Users can pass in the RPC - arguments explicitly when they don't want to rely on the default - values. (#18541) - -- The `getblockchaininfo` RPC's `verificationprogress` field will no - longer report values higher than 1. Previously it would occasionally - report the chain was more than 100% verified. (#17328) - -Tests ------ - -- It is now an error to use an unqualified `walletdir=path` setting in - the config file if running on testnet or regtest networks. The setting - now needs to be qualified as `chain.walletdir=path` or placed in the - appropriate `[chain]` section. (#17447) - -- `-fallbackfee` was 0 (disabled) by default for the main chain, but - 0.0002 by default for the test chains. Now it is 0 by default for all - chains. Testnet and regtest users will have to add - `fallbackfee=0.0002` to their configuration if they weren't setting it - and they want it to keep working like before. (#16524) - -Build system ------------- - -- Support is provided for building with the Android Native Development - Kit (NDK). (#16110) - -0.20.0 change log +0.20.1 change log ================= ### Mining -- #18742 miner: Avoid stack-use-after-return in validationinterface (MarcoFalke) - -### Block and transaction handling -- #15283 log: Fix UB with bench on genesis block (instagibbs) -- #16507 feefilter: Compute the absolute fee rather than stored rate (instagibbs) -- #16688 log: Add validation interface logging (jkczyz) -- #16805 log: Add timing information to FlushStateToDisk() (jamesob) -- #16902 O(1) `OP_IF/NOTIF/ELSE/ENDIF` script implementation (sipa) -- #16945 introduce CChainState::GetCoinsCacheSizeState (jamesob) -- #16974 Walk pindexBestHeader back to ChainActive().Tip() if it is invalid (TheBlueMatt) -- #17004 Remove REJECT code from CValidationState (jnewbery) -- #17080 Explain why `fCheckDuplicateInputs` can not be skipped and remove it (MarcoFalke) -- #17328 GuessVerificationProgress: cap the ratio to 1 (darosior) -- #17399 Templatize ValidationState instead of subclassing (jkczyz) -- #17407 node: Add reference to mempool in NodeContext (MarcoFalke) -- #17708 prevector: Avoid misaligned member accesses (ajtowns) -- #17850,#17896,#17957,#18021,#18021,#18112 Serialization improvements (sipa) -- #17925 Improve UpdateTransactionsFromBlock with Epochs (JeremyRubin) -- #18002 Abstract out script execution out of `VerifyWitnessProgram()` (sipa) -- #18388 Make VerifyWitnessProgram use a Span stack (sipa) -- #18433 serialization: prevent int overflow for big Coin::nHeight (pierreN) -- #18500 chainparams: Bump assumed valid hash (MarcoFalke) -- #18551 Do not clear validationinterface entries being executed (sipa) +- #19019 Fix GBT: Restore "!segwit" and "csv" to "rules" key (luke-jr) ### P2P protocol and network code -- #15437 Remove BIP61 reject messages (MarcoFalke) -- #16702 Supply and use asmap to improve IP bucketing in addrman (naumenkogs) -- #16851 Continue relaying transactions after they expire from mapRelay (ajtowns) -- #17164 Avoid allocating memory for addrKnown where we don't need it (naumenkogs) -- #17243 tools: add PoissonNextSend method that returns mockable time (amitiuttarwar) -- #17251 SocketHandler logs peer id for close and disconnect (Sjors) -- #17573 Seed RNG with precision timestamps on receipt of net messages (TheBlueMatt) -- #17624 Fix an uninitialized read in ProcessMessage(…, "tx", …) when receiving a transaction we already have (practicalswift) -- #17754 Don't allow resolving of std::string with embedded NUL characters. Add tests (practicalswift) -- #17758 Fix CNetAddr::IsRFC2544 comment + tests (tynes) -- #17812 config, net, test: Asmap feature refinements and functional tests (jonatack) -- #17951 Use rolling bloom filter of recent block txs for AlreadyHave() check (sdaftuar) -- #17985 Remove forcerelay of rejected txs (MarcoFalke) -- #18023 Fix some asmap issues (sipa) -- #18054 Reference instead of copy in BlockConnected range loop (jonatack) -- #18376 Fix use-after-free in tests (vasild) -- #18454 Make addr relay mockable, add test (MarcoFalke) -- #18458 Add missing `cs_vNodes` lock (MarcoFalke) -- #18506 Hardcoded seeds update for 0.20 (laanwj) -- #18808 Drop unknown types in getdata (jnewbery) -- #18962 Only send a getheaders for one block in an INV (jnewbery) +- #19219 Replace automatic bans with discouragement filter (sipa) ### Wallet -- #13339 Replace %w by wallet name in -walletnotify script (promag) -- #15931 Remove GetDepthInMainChain dependency on locked chain interface (ariard) -- #16373 bumpfee: Return PSBT when wallet has privkeys disabled (instagibbs) -- #16524 Disable -fallbackfee by default (jtimon) -- #16766 Make IsTrusted scan parents recursively (JeremyRubin) -- #16884 Change default address type to bech32 (instagibbs) -- #16911 Only check the hash of transactions loaded from disk (achow101) -- #16923 Handle duplicate fileid exception (promag) -- #17056 descriptors: Introduce sortedmulti descriptor (achow101) -- #17070 Avoid showing GUI popups on RPC errors (MarcoFalke) -- #17138 Remove wallet access to some node arguments (jnewbery) -- #17237 LearnRelatedScripts only if KeepDestination (promag) -- #17260 Split some CWallet functions into new LegacyScriptPubKeyMan (achow101) -- #17261 Make ScriptPubKeyMan an actual interface and the wallet to have multiple (achow101) -- #17290 Enable BnB coin selection for preset inputs and subtract fee from outputs (achow101) -- #17373 Various fixes and cleanup to keypool handling in LegacyScriptPubKeyMan and CWallet (achow101) -- #17410 Rename `db` log category to `walletdb` (like `coindb`) (laanwj) -- #17444 Avoid showing GUI popups on RPC errors (take 2) (MarcoFalke) -- #17447 Make -walletdir network only (promag) -- #17537 Cleanup and move opportunistic and superfluous TopUp()s (achow101) -- #17553 Remove out of date comments for CalculateMaximumSignedTxSize (instagibbs) -- #17568 Fix when sufficient preset inputs and subtractFeeFromOutputs (achow101) -- #17677 Activate watchonly wallet behavior for LegacySPKM only (instagibbs) -- #17719 Document better -keypool as a look-ahead safety mechanism (ariard) -- #17843 Reset reused transactions cache (fjahr) -- #17889 Improve CWallet:MarkDestinationsDirty (promag) -- #18034 Get the OutputType for a descriptor (achow101) -- #18067 Improve LegacyScriptPubKeyMan::CanProvide script recognition (ryanofsky) -- #18115 Pass in transactions and messages for signing instead of exporting the private keys (achow101) -- #18192,#18546 Bugfix: Wallet: Safely deal with change in the address book (luke-jr) -- #18204 descriptors: Improve descriptor cache and cache xpubs (achow101) -- #18274 rpc/wallet: Initialize nFeeRequired to avoid using garbage value on failure (kallewoof) -- #18312 Remove deprecated fee bumping by totalFee (jonatack) -- #18338 Fix wallet unload race condition (promag) +- #19300 Handle concurrent wallet loading (promag) +- #18982 Minimal fix to restore conflicted transaction notifications (ryanofsky) ### RPC and other APIs -- #12763 Add RPC Whitelist Feature from #12248 (JeremyRubin) -- #13716 cli: `-stdinwalletpassphrase` and non-echo stdin passwords (kallewoof) -- #16689 Add missing fields to wallet rpc help output (ariard) -- #16821 Fix bug where duplicate PSBT keys are accepted (erasmospunk) -- #16899 UTXO snapshot creation (dumptxoutset) -- #17156 psbt: Check that various indexes and amounts are within bounds (achow101) -- #17264 Set default bip32derivs to true for psbt methods (Sjors) -- #17283 improve getaddressinfo test coverage, help, code docs (jonatack) -- #17302 cli: Add "headers" and "verificationprogress" to -getinfo (laanwj) -- #17318 replace asserts in RPC code with `CHECK_NONFATAL` and add linter (adamjonas) -- #17437 Expose block height of wallet transactions (promag) -- #17519 Remove unused `COINBASE_FLAGS` (narula) -- #17578 Simplify getaddressinfo labels, deprecate previous behavior (jonatack) -- #17585 deprecate getaddressinfo label (jonatack) -- #17746 Remove vector copy from listtransactions (promag) -- #17809 Auto-format RPCResult (MarcoFalke) -- #18032 Output a descriptor in createmultisig and addmultisigaddress (achow101) -- #18122 Update validateaddress RPCExamples to bech32 (theStack) -- #18208 Change RPCExamples to bech32 (yusufsahinhamza) -- #18268 Remove redundant types from descriptions (docallag) -- #18346 Document an RPCResult for all calls; Enforce at compile time (MarcoFalke) -- #18396 Add missing HelpExampleRpc for getblockfilter (theStack) -- #18398 Fix broken RPCExamples for waitforblock(height) (theStack) -- #18444 Remove final comma for last entry of fixed-size arrays/objects in RPCResult (luke-jr) -- #18459 Remove unused getbalances() code (jonatack) -- #18484 Correctly compute redeemScript from witnessScript for signrawtransaction (achow101) -- #18487 Fix rpcRunLater race in walletpassphrase (promag) -- #18499 Make rpc documentation not depend on call-time rpc args (MarcoFalke) -- #18532 Avoid initialization-order-fiasco on static CRPCCommand tables (MarcoFalke) -- #18541 Make verifychain default values static, not depend on global args (MarcoFalke) -- #18809 Do not advertise dumptxoutset as a way to flush the chainstate (MarcoFalke) -- #18814 Relock wallet only if most recent callback (promag) +- #19524 Increment input value sum only once per UTXO in decodepsbt (fanquake) +- #19517 psbt: Increment input value sum only once per UTXO in decodepsbt (achow101) ### GUI -- #15023 Restore RPC Console to non-wallet tray icon menu (luke-jr) -- #15084 Don't disable the sync overlay when wallet is disabled (benthecarman) -- #15098 Show addresses for "SendToSelf" transactions (hebasto) -- #15756 Add shortcuts for tab tools (promag) -- #16944 create PSBT with watch-only wallet (Sjors) -- #16964 Change sendcoins dialogue Yes to Send (instagibbs) -- #17068 Always generate `bitcoinstrings.cpp` on `make translate` (D4nte) -- #17096 Rename debug window (Zero-1729) -- #17105 Make RPCConsole::TabTypes an enum class (promag) -- #17125 Add toolTip and placeholderText to sign message fields (dannmat) -- #17165 Remove BIP70 support (fanquake) -- #17180 Improved tooltip for send amount field (JeremyCrookshank) -- #17186 Add placeholder text to the sign message field (Danny-Scott) -- #17195 Send amount placeholder value (JeremyCrookshank) -- #17226 Fix payAmount tooltip in SendCoinsEntry (promag) -- #17360 Cleaning up hide button tool tip (Danny-Scott) -- #17446 Changed tooltip for 'Label' & 'Message' text fields to be more clear (dannmat) -- #17453 Fix intro dialog labels when the prune button is toggled (hebasto) -- #17474 Bugfix: GUI: Recognise `NETWORK_LIMITED` in formatServicesStr (luke-jr) -- #17492 Bump fee returns PSBT on clipboard for watchonly-only wallets (instagibbs) -- #17567 Remove macOS start on login code (fanquake) -- #17587 Show watch-only balance in send screen (Sjors) -- #17694 Disable 3rd-party tx-urls when wallet disabled (brakmic) -- #17696 Force set nPruneSize in QSettings after the intro dialog (hebasto) -- #17702 Move static placeholder texts to forms (laanwj) -- #17826 Log Qt related info (hebasto) -- #17886 Restore English translation option (achow101) -- #17906 Set CConnman byte counters earlier to avoid uninitialized reads (ryanofsky) -- #17935 Hide HD & encryption icons when no wallet loaded (brakmic) -- #17998 Shortcut to close ModalOverlay (emilengler) -- #18007 Bugfix: GUI: Hide the HD/encrypt icons earlier so they get re-shown if another wallet is open (luke-jr) -- #18060 Drop PeerTableModel dependency to ClientModel (promag) -- #18062 Fix unintialized WalletView::progressDialog (promag) -- #18091 Pass clientmodel changes from walletframe to walletviews (jonasschnelli) -- #18101 Fix deprecated QCharRef usage (hebasto) -- #18121 Throttle GUI update pace when -reindex (hebasto) -- #18123 Fix race in WalletModel::pollBalanceChanged (ryanofsky) -- #18160 Avoid Wallet::GetBalance in WalletModel::pollBalanceChanged (promag) -- #18360 Bump transifex slug and update English translations for 0.20 (laanwj) -- #18402 Display mapped AS in peers info window (jonatack) -- #18492 Translations update pre-branch (laanwj) -- #18549 Fix Window -> Minimize menu item (hebasto) -- #18578 Fix leak in CoinControlDialog::updateView (promag) -- #18894 Fix manual coin control with multiple wallets loaded (promag) +- #19097 Add missing QPainterPath include (achow101) +- #19059 update Qt base translations for macOS release (fanquake) ### Build system -- #16667 Remove mingw linker workaround from win gitian descriptor (fanquake) -- #16669 Use new fork of osslsigncode for windows gitian signing (fanquake) -- #16949 Only pass --disable-dependency-tracking to packages that understand it (fanquake) -- #17008 Bump libevent to 2.1.11 in depends (stefanwouldgo) -- #17029 gitian: Various improvements for windows descriptor (dongcarl) -- #17033 Disable _FORTIFY_SOURCE when enable-debug (achow101) -- #17057 Switch to upstream libdmg-hfsplus (fanquake) -- #17066 Remove workaround for ancient libtool (hebasto) -- #17074 Added double quotes (mztriz) -- #17087 Add variable printing target to Makefiles (dongcarl) -- #17118 depends macOS: point --sysroot to SDK (Sjors) -- #17231 Fix boost mac cross build with clang 9+ (theuni) -- #17265 Remove OpenSSL (fanquake) -- #17284 Update retry to current version (RandyMcMillan) -- #17308 nsis: Write to correct filename in first place (dongcarl) -- #17324,#18099 Update univalue subtree (MarcoFalke) -- #17398 Update leveldb to 1.22+ (laanwj) -- #17409 Avoid hardcoded libfaketime dir in gitian (MarcoFalke) -- #17466 Fix C{,XX} pickup (dongcarl) -- #17483 Set gitian arch back to amd64 (MarcoFalke) -- #17486 Make Travis catch unused variables (Sjors) -- #17538 Bump minimum libc to 2.17 for release binaries (fanquake) -- #17542 Create test utility library from src/test/util/ (brakmic) -- #17545 Remove libanl.so.1 from ALLOWED_LIBRARIES (fanquake) -- #17547 Fix configure report about qr (hebasto) -- #17569 Allow export of environ symbols and work around rv64 toolchain issue (laanwj) -- #17647 lcov: filter depends from coverage reports (nijynot) -- #17658 Add ability to skip building qrencode (fanquake) -- #17678 Support for S390X and POWER targets (MarcoFalke) -- #17682 util: Update tinyformat to upstream (laanwj) -- #17698 Don't configure `xcb_proto` (fanquake) -- #17730 Remove Qt networking features (fanquake) -- #17738 Remove linking librt for backwards compatibility (fanquake) -- #17740 Remove configure checks for win libraries we don't link against (fanquake) -- #17741 Included `test_bitcoin-qt` in msvc build (sipsorcery) -- #17756 Remove `WINDOWS_BITS` from build system (fanquake) -- #17769 Set `AC_PREREQ` to 2.69 (fanquake) -- #17880 Add -Wdate-time to Werror flags (fanquake) -- #17910 Remove double `LIBBITCOIN_SERVER` linking (fanquake) -- #17928 Consistent use of package variable (Bushstar) -- #17933 guix: Pin Guix using `guix time-machine` (dongcarl) -- #17948 pass -fno-ident in Windows gitian descriptor (fanquake) -- #18003 Remove --large-address-aware linker flag (fanquake) -- #18004 Don't embed a build-id when building libdmg-hfsplus (fanquake) -- #18051 Fix behavior when `ALLOW_HOST_PACKAGES` unset (hebasto) -- #18059 Add missing attributes to Win installer (fanquake) -- #18104 Skip i686 build by default in guix and gitian (MarcoFalke) -- #18107 Add `cov_fuzz` target (MarcoFalke) -- #18135 Add --enable-determinism configure flag (fanquake) -- #18145 Add Wreturn-type to Werror flags, check on more Travis machines (Sjors) -- #18264 Remove Boost Chrono (fanquake) -- #18290 Set minimum Automake version to 1.13 (hebasto) -- #18320 guix: Remove now-unnecessary gcc make flag (dongcarl) -- #18331 Use git archive as source tarball (hebasto) -- #18397 Fix libevent linking for `bench_bitcoin` binary (hebasto) -- #18426 scripts: `Previous_release`: improve behaviour on failed download (theStack) -- #18429 Remove double `LIBBITCOIN_SERVER` from bench-Makefile (brakmic) -- #18528 Create `test_fuzz` library from src/test/fuzz/fuzz.cpp (brakmic) -- #18558 Fix boost detection for arch armv7l (hebasto) -- #18598 gitian: Add missing automake package to gitian-win-signer.yml (achow101) -- #18676 Check libevent minimum version in configure script (hebasto) -- #18945 Ensure source tarball has leading directory name (laanwj) - -### Platform support -- #16110 Add Android NDK support (icota) -- #16392 macOS toolchain update (fanquake) -- #16569 Increase init file stop timeout (setpill) -- #17151 Remove OpenSSL PRNG seeding (Windows, Qt only) (fanquake) -- #17365 Update README.md with working Android targets and API levels (icota) -- #17521 Only use D-Bus with Qt on linux (fanquake) -- #17550 Set minimum supported macOS to 10.12 (fanquake) -- #17592 Appveyor install libevent[thread] vcpkg (sipsorcery) -- #17660 Remove deprecated key from macOS Info.plist (fanquake) -- #17663 Pass `-dead_strip_dylibs` to ld on macOS (fanquake) -- #17676 Don't use OpenGL in Qt on macOS (fanquake) -- #17686 Add `-bind_at_load` to macOS hardened LDFLAGS (fanquake) -- #17787 scripts: Add macho pie check to security-check.py (fanquake) -- #17800 random: don't special case clock usage on macOS (fanquake) -- #17863 scripts: Add macho dylib checks to symbol-check.py (fanquake) -- #17899 msvc: Ignore msvc linker warning and update to msvc build instructions (sipsorcery) -- #17916 windows: Enable heap terminate-on-corruption (fanquake) -- #18082 logging: Enable `thread_local` usage on macos (fanquake) -- #18108 Fix `.gitignore` policy in `build_msvc` directory (hebasto) -- #18295 scripts: Add macho lazy bindings check to security-check.py (fanquake) -- #18358 util: Fix compilation with mingw-w64 7.0.0 (fanquake) -- #18359 Fix sysctl() detection on macOS (fanquake) -- #18364 random: remove getentropy() fallback for macOS < 10.12 (fanquake) -- #18395 scripts: Add pe dylib checking to symbol-check.py (fanquake) -- #18415 scripts: Add macho tests to test-security-check.py (fanquake) -- #18425 releases: Update with new Windows code signing certificate (achow101) -- #18702 Fix ASLR for bitcoin-cli on Windows (fanquake) +- #19152 improve build OS configure output (skmcontrib) +- #19536 qt, build: Fix QFileDialog for static builds (hebasto) ### Tests and QA -- #12134 Build previous releases and run functional tests (Sjors) -- #13693 Add coverage to estimaterawfee and estimatesmartfee (Empact) -- #13728 lint: Run the ci lint stage on mac (Empact) -- #15443 Add getdescriptorinfo functional test (promag) -- #15888 Add `wallet_implicitsegwit` to test the ability to transform keys between address types (luke-jr) -- #16540 Add `ASSERT_DEBUG_LOG` to unit test framework (MarcoFalke) -- #16597 travis: Run full test suite on native macos (Sjors) -- #16681 Use self.chain instead of 'regtest' in all current tests (jtimon) -- #16786 add unit test for wallet watch-only methods involving PubKeys (theStack) -- #16943 Add generatetodescriptor RPC (MarcoFalke) -- #16973 Fix `combine_logs.py` for AppVeyor build (mzumsande) -- #16975 Show debug log on unit test failure (MarcoFalke) -- #16978 Seed test RNG context for each test case, print seed (MarcoFalke) -- #17009, #17018, #17050, #17051, #17071, #17076, #17083, #17093, #17109, #17113, #17136, #17229, #17291, #17357, #17771, #17777, #17917, #17926, #17972, #17989, #17996, #18009, #18029, #18047, #18126, #18176, #18206, #18353, #18363, #18407, #18417, #18423, #18445, #18455, #18565 Add fuzzing harnesses (practicalswift) -- #17011 ci: Use busybox utils for one build (MarcoFalke) -- #17030 Fix Python Docstring to include all Args (jbampton) -- #17041 ci: Run tests on arm (MarcoFalke) -- #17069 Pass fuzzing inputs as constant references (practicalswift) -- #17091 Add test for loadblock option and linearize scripts (fjahr) -- #17108 fix "tx-size-small" errors after default address change (theStack) -- #17121 Speed up `wallet_backup` by whitelisting peers (immediate tx relay) (theStack) -- #17124 Speed up `wallet_address_types` by whitelisting peers (immediate tx relay) (theStack) -- #17140 Fix bug in `blockfilter_index_tests` (jimpo) -- #17199 use default address type (bech32) for `wallet_bumpfee` tests (theStack) -- #17205 ci: Enable address sanitizer (asan) stack-use-after-return checking (practicalswift) -- #17206 Add testcase to simulate bitcoin schema in leveldb (adamjonas) -- #17209 Remove no longer needed UBSan suppressions (issues fixed). Add documentation (practicalswift) -- #17220 Add unit testing for the CompressScript function (adamjonas) -- #17225 Test serialisation as part of deserialisation fuzzing. Test round-trip equality where possible (practicalswift) -- #17228 Add RegTestingSetup to `setup_common` (MarcoFalke) -- #17233 travis: Run unit and functional tests on native arm (MarcoFalke) -- #17235 Skip unnecessary fuzzer initialisation. Hold ECCVerifyHandle only when needed (practicalswift) -- #17240 ci: Disable functional tests on mac host (MarcoFalke) -- #17254 Fix `script_p2sh_tests` `OP_PUSHBACK2/4` missing (adamjonas) -- #17267 bench: Fix negative values and zero for -evals flag (nijynot) -- #17275 pubkey: Assert CPubKey's ECCVerifyHandle precondition (practicalswift) -- #17288 Added TestWrapper class for interactive Python environments (jachiang) -- #17292 Add new mempool benchmarks for a complex pool (JeremyRubin) -- #17299 add reason checks for non-standard txs in `test_IsStandard` (theStack) -- #17322 Fix input size assertion in `wallet_bumpfee.py` (instagibbs) -- #17327 Add `rpc_fundrawtransaction` logging (jonatack) -- #17330 Add `shrinkdebugfile=0` to regtest bitcoin.conf (sdaftuar) -- #17340 Speed up fundrawtransaction test (jnewbery) -- #17345 Do not instantiate CAddrDB for static call CAddrDB::Read() (hebasto) -- #17362 Speed up `wallet_avoidreuse`, add logging (jonatack) -- #17363 add "diamond" unit test to MempoolAncestryTests (theStack) -- #17366 Reset global args between test suites (MarcoFalke) -- #17367 ci: Run non-cross-compile builds natively (MarcoFalke) -- #17378 TestShell: Fix typos & implement cleanups (jachiang) -- #17384 Create new test library (MarcoFalke) -- #17387 `wallet_importmulti`: use addresses of the same type as being imported (achow101) -- #17388 Add missing newline in `util_ChainMerge` test (ryanofsky) -- #17390 Add `util_ArgParsing` test (ryanofsky) -- #17420 travis: Rework `cache_err_msg` (MarcoFalke) -- #17423 ci: Make ci system read-only on the git work tree (MarcoFalke) -- #17435 check custom ancestor limit in `mempool_packages.py` (theStack) -- #17455 Update valgrind suppressions (practicalswift) -- #17461 Check custom descendant limit in `mempool_packages.py` (theStack) -- #17469 Remove fragile `assert_memory_usage_stable` (MarcoFalke) -- #17470 ci: Use clang-8 for fuzzing to run on aarch64 ci systems (MarcoFalke) -- #17480 Add unit test for non-standard txs with too large scriptSig (theStack) -- #17497 Skip tests when utils haven't been compiled (fanquake) -- #17502 Add unit test for non-standard bare multisig txs (theStack) -- #17511 Add bounds checks before base58 decoding (sipa) -- #17517 ci: Bump to clang-8 for asan build to avoid segfaults on ppc64le (MarcoFalke) -- #17522 Wait until mempool is loaded in `wallet_abandonconflict` (MarcoFalke) -- #17532 Add functional test for non-standard txs with too large scriptSig (theStack) -- #17541 Add functional test for non-standard bare multisig txs (theStack) -- #17555 Add unit test for non-standard txs with wrong nVersion (dspicher) -- #17571 Add `libtest_util` library to msvc build configuration (sipsorcery) -- #17591 ci: Add big endian platform - s390x (elichai) -- #17593 Move more utility functions into test utility library (mzumsande) -- #17633 Add option --valgrind to run the functional tests under Valgrind (practicalswift) -- #17635 ci: Add centos 7 build (hebasto) -- #17641 Add unit test for leveldb creation with unicode path (sipsorcery) -- #17674 Add initialization order fiasco detection in Travis (practicalswift) -- #17675 Enable tests which are incorrectly skipped when running `test_runner.py --usecli` (practicalswift) -- #17685 Fix bug in the descriptor parsing fuzzing harness (`descriptor_parse`) (practicalswift) -- #17705 re-enable CLI test support by using EncodeDecimal in json.dumps() (fanquake) -- #17720 add unit test for non-standard "scriptsig-not-pushonly" txs (theStack) -- #17767 ci: Fix qemu issues (MarcoFalke) -- #17793 ci: Update github actions ci vcpkg cache on msbuild update (hebasto) -- #17806 Change filemode of `rpc_whitelist.py` (emilengler) -- #17849 ci: Fix brew python link (hebasto) -- #17851 Add `std::to_string` to list of locale dependent functions (practicalswift) -- #17893 Fix double-negative arg test (hebasto) -- #17900 ci: Combine 32-bit build with centos 7 build (theStack) -- #17921 Test `OP_CSV` empty stack fail in `feature_csv_activation.py` (theStack) -- #17931 Fix `p2p_invalid_messages` failing in Python 3.8 because of warning (elichai) -- #17947 add unit test for non-standard txs with too large tx size (theStack) -- #17959 Check specific reject reasons in `feature_csv_activation.py` (theStack) -- #17984 Add p2p test for forcerelay permission (MarcoFalke) -- #18001 Updated appveyor job to checkout a specific vcpkg commit ID (sipsorcery) -- #18008 fix fuzzing using libFuzzer on macOS (fanquake) -- #18013 bench: Fix benchmarks filters (elichai) -- #18018 reset fIsBareMultisigStd after bare-multisig tests (fanquake) -- #18022 Fix appveyor `test_bitcoin` build of `*.raw` (MarcoFalke) -- #18037 util: Allow scheduler to be mocked (amitiuttarwar) -- #18056 ci: Check for submodules (emilengler) -- #18069 Replace 'regtest' leftovers by self.chain (theStack) -- #18081 Set a name for CI Docker containers (fanquake) -- #18109 Avoid hitting some known minor tinyformat issues when fuzzing strprintf(…) (practicalswift) -- #18155 Add harness which fuzzes EvalScript and VerifyScript using a fuzzed signature checker (practicalswift) -- #18159 Add --valgrind option to `test/fuzz/test_runner.py` for running fuzzing test cases under valgrind (practicalswift) -- #18166 ci: Run fuzz testing test cases (bitcoin-core/qa-assets) under valgrind to catch memory errors (practicalswift) -- #18172 Transaction expiry from mempool (0xB10C) -- #18181 Remove incorrect assumptions in `validation_flush_tests` (MarcoFalke) -- #18183 Set `catch_system_errors=no` on boost unit tests (MarcoFalke) -- #18195 Add `cost_of_change` parameter assertions to `bnb_search_test` (yancyribbens) -- #18209 Reduce unneeded whitelist permissions in tests (MarcoFalke) -- #18211 Disable mockforward scheduler unit test for now (MarcoFalke) -- #18213 Fix race in `p2p_segwit` (MarcoFalke) -- #18224 Make AnalyzePSBT next role calculation simple, correct (instagibbs) -- #18228 Add missing syncwithvalidationinterfacequeue (MarcoFalke) -- #18247 Wait for both veracks in `add_p2p_connection` (MarcoFalke) -- #18249 Bump timeouts to accomodate really slow disks (MarcoFalke) -- #18255 Add `bad-txns-*-toolarge` test cases to `invalid_txs` (MarcoFalke) -- #18263 rpc: change setmocktime check to use IsMockableChain (gzhao408) -- #18285 Check that `wait_until` returns if time point is in the past (MarcoFalke) -- #18286 Add locale fuzzer to `FUZZERS_MISSING_CORPORA` (practicalswift) -- #18292 fuzz: Add `assert(script == decompressed_script)` (MarcoFalke) -- #18299 Update `FUZZERS_MISSING_CORPORA` to enable regression fuzzing for all harnesses in master (practicalswift) -- #18300 fuzz: Add option to merge input dir to test runner (MarcoFalke) -- #18305 Explain why test logging should be used (MarcoFalke) -- #18306 Add logging to `wallet_listsinceblock.py` (jonatack) -- #18311 Bumpfee test fix (instagibbs) -- #18314 Add deserialization fuzzing of SnapshotMetadata (`utxo_snapshot`) (practicalswift) -- #18319 fuzz: Add missing `ECC_Start` to `key_io` test (MarcoFalke) -- #18334 Add basic test for BIP 37 (MarcoFalke) -- #18350 Fix mining to an invalid target + ensure that a new block has the correct hash internally (TheQuantumPhysicist) -- #18378 Bugfix & simplify bn2vch using `int.to_bytes` (sipa) -- #18393 Don't assume presence of `__builtin_mul_overflow(…)` in `MultiplicationOverflow(…)` fuzzing harness (practicalswift) -- #18406 add executable flag for `rpc_estimatefee.py` (theStack) -- #18420 listsinceblock block height checks (jonatack) -- #18430 ci: Only clone bitcoin-core/qa-assets when fuzzing (MarcoFalke) -- #18438 ci: Use homebrew addon on native macos (hebasto) -- #18447 Add coverage for script parse error in ParseScript (pierreN) -- #18472 Remove unsafe `BOOST_TEST_MESSAGE` (MarcoFalke) -- #18474 check that peer is connected when calling sync_* (MarcoFalke) -- #18477 ci: Use focal for fuzzers (MarcoFalke) -- #18481 add BIP37 'filterclear' test to p2p_filter.py (theStack) -- #18496 Remove redundant `sync_with_ping` after `add_p2p_connection` (jonatack) -- #18509 fuzz: Avoid running over all inputs after merging them (MarcoFalke) -- #18510 fuzz: Add CScriptNum::getint coverage (MarcoFalke) -- #18514 remove rapidcheck integration and tests (fanquake) -- #18515 Add BIP37 remote crash bug [CVE-2013-5700] test to `p2p_filter.py` (theStack) -- #18516 relax bumpfee `dust_to_fee` txsize an extra vbyte (jonatack) -- #18518 fuzz: Extend descriptor fuzz test (MarcoFalke) -- #18519 fuzz: Extend script fuzz test (MarcoFalke) -- #18521 fuzz: Add `process_messages` harness (MarcoFalke) -- #18529 Add fuzzer version of randomized prevector test (sipa) -- #18534 skip backwards compat tests if not compiled with wallet (fanquake) -- #18540 `wallet_bumpfee` assertion fixup (jonatack) -- #18543 Use one node to avoid a race due to missing sync in `rpc_signrawtransaction` (MarcoFalke) -- #18561 Properly raise FailedToStartError when rpc shutdown before warmup finished (MarcoFalke) -- #18562 ci: Run unit tests sequential once (MarcoFalke) -- #18563 Fix `unregister_all_during_call` cleanup (ryanofsky) -- #18566 Set `-use_value_profile=1` when merging fuzz inputs (MarcoFalke) -- #18757 Remove enumeration of expected deserialization exceptions in ProcessMessage(…) fuzzer (practicalswift) -- #18878 Add test for conflicted wallet tx notifications (ryanofsky) -- #18975 Remove const to work around compiler error on xenial (laanwj) - -### Documentation -- #16947 Doxygen-friendly script/descriptor.h comments (ch4ot1c) -- #16983 Add detailed info about Bitcoin Core files (hebasto) -- #16986 Doxygen-friendly CuckooCache comments (ch4ot1c) -- #17022 move-only: Steps for "before major release branch-off" (MarcoFalke) -- #17026 Update bips.md for default bech32 addresses in 0.20.0 (MarcoFalke) -- #17081 Fix Makefile target in benchmarking.md (theStack) -- #17102 Add missing indexes/blockfilter/basic to doc/files.md (MarcoFalke) -- #17119 Fix broken bitcoin-cli examples (andrewtoth) -- #17134 Add switch on enum example to developer notes (hebasto) -- #17142 Update macdeploy README to include all files produced by `make deploy` (za-kk) -- #17146 github: Add warning for bug reports (laanwj) -- #17157 Added instructions for how to add an upsteam to forked repo (dannmat) -- #17159 Add a note about backporting (carnhofdaki) -- #17169 Correct function name in ReportHardwareRand() (fanquake) -- #17177 Describe log files + consistent paths in test READMEs (fjahr) -- #17239 Changed miniupnp links to https (sandakersmann) -- #17281 Add developer note on `c_str()` (laanwj) -- #17285 Bip70 removal follow-up (fjahr) -- #17286 Fix help-debug -checkpoints (ariard) -- #17309 update MSVC instructions to remove Qt OpenSSL linking (fanquake) -- #17339 Add template for good first issues (michaelfolkson) -- #17351 Fix some misspellings (RandyMcMillan) -- #17353 Add ShellCheck to lint tests dependencies (hebasto) -- #17370 Update doc/bips.md with recent changes in master (MarcoFalke) -- #17393 Added regtest config for linearize script (gr0kchain) -- #17411 Add some better examples for scripted diff (laanwj) -- #17503 Remove bitness from bitcoin-qt help message and manpage (laanwj) -- #17539 Update and improve Developer Notes (hebasto) -- #17561 Changed MiniUPnPc link to https in dependencies.md (sandakersmann) -- #17596 Change doxygen URL to doxygen.bitcoincore.org (laanwj) -- #17598 Update release process with latest changes (MarcoFalke) -- #17617 Unify unix epoch time descriptions (jonatack) -- #17637 script: Add keyserver to verify-commits readme (emilengler) -- #17648 Rename wallet-tool references to bitcoin-wallet (hel-o) -- #17688 Add "ci" prefix to CONTRIBUTING.md (hebasto) -- #17751 Use recommended shebang approach in documentation code block (hackerrdave) -- #17752 Fix directory path for secp256k1 subtree in developer-notes (hackerrdave) -- #17772 Mention PR Club in CONTRIBUTING.md (emilengler) -- #17804 Misc RPC help fixes (MarcoFalke) -- #17819 Developer notes guideline on RPCExamples addresses (jonatack) -- #17825 Update dependencies.md (hebasto) -- #17873 Add to Doxygen documentation guidelines (jonatack) -- #17907 Fix improper Doxygen inline comments (Empact) -- #17942 Improve fuzzing docs for macOS users (fjahr) -- #17945 Fix doxygen errors (Empact) -- #18025 Add missing supported rpcs to doc/descriptors.md (andrewtoth) -- #18070 Add note about `brew doctor` (givanse) -- #18125 Remove PPA note from release-process.md (fanquake) -- #18170 Minor grammatical changes and flow improvements (travinkeith) -- #18212 Add missing step in win deployment instructions (dangershony) -- #18219 Add warning against wallet.dat re-use (corollari) -- #18253 Correct spelling errors in comments (Empact) -- #18278 interfaces: Describe and follow some code conventions (ryanofsky) -- #18283 Explain rebase policy in CONTRIBUTING.md (MarcoFalke) -- #18340 Mention MAKE=gmake workaround when building on a BSD (fanquake) -- #18341 Replace remaining literal BTC with `CURRENCY_UNIT` (domob1812) -- #18342 Add fuzzing quickstart guides for libFuzzer and afl-fuzz (practicalswift) -- #18344 Fix nit in getblockchaininfo (stevenroose) -- #18379 Comment fix merkle.cpp (4d55397500) -- #18382 note the costs of fetching all pull requests (vasild) -- #18391 Update init and reduce-traffic docs for -blocksonly (glowang) -- #18464 Block-relay-only vs blocksonly (MarcoFalke) -- #18486 Explain new test logging (MarcoFalke) -- #18505 Update webchat URLs in README.md (SuriyaaKudoIsc) -- #18513 Fix git add argument (HashUnlimited) -- #18577 Correct scripted-diff example link (yahiheb) -- #18589 Fix naming of macOS SDK and clarify version (achow101) +- #19444 Remove cached directories and associated script blocks from appveyor config (sipsorcery) +- #18640 appveyor: Remove clcache (MarcoFalke) ### Miscellaneous -- #15600 lockedpool: When possible, use madvise to avoid including sensitive information in core dumps (luke-jr) -- #15934 Merge settings one place instead of five places (ryanofsky) -- #16115 On bitcoind startup, write config args to debug.log (LarryRuane) -- #16117 util: Replace boost sleep with std sleep (MarcoFalke) -- #16161 util: Fix compilation errors in support/lockedpool.cpp (jkczyz) -- #16802 scripts: In linearize, search for next position of magic bytes rather than fail (takinbo) -- #16889 Add some general std::vector utility functions (sipa) -- #17049 contrib: Bump gitian descriptors for 0.20 (MarcoFalke) -- #17052 scripts: Update `copyright_header` script to include additional files (GChuf) -- #17059 util: Simplify path argument for cblocktreedb ctor (hebasto) -- #17191 random: Remove call to `RAND_screen()` (Windows only) (fanquake) -- #17192 util: Add `check_nonfatal` and use it in src/rpc (MarcoFalke) -- #17218 Replace the LogPrint function with a macro (jkczyz) -- #17266 util: Rename decodedumptime to parseiso8601datetime (elichai) -- #17270 Feed environment data into RNG initializers (sipa) -- #17282 contrib: Remove accounts from bash completion (fanquake) -- #17293 Add assertion to randrange that input is not 0 (JeremyRubin) -- #17325 log: Fix log message for -par=1 (hebasto) -- #17329 linter: Strip trailing / in path for git-subtree-check (jnewbery) -- #17336 scripts: Search for first block file for linearize-data with some block files pruned (Rjected) -- #17361 scripts: Lint gitian descriptors with shellcheck (hebasto) -- #17482 util: Disallow network-qualified command line options (ryanofsky) -- #17507 random: mark RandAddPeriodic and SeedPeriodic as noexcept (fanquake) -- #17527 Fix CPUID subleaf iteration (sipa) -- #17604 util: Make schedulebatchpriority advisory only (fanquake) -- #17650 util: Remove unwanted fields from bitcoin-cli -getinfo (malevolent) -- #17671 script: Fixed wget call in gitian-build.py (willyko) -- #17699 Make env data logging optional (sipa) -- #17721 util: Don't allow base58 decoding of non-base58 strings. add base58 tests (practicalswift) -- #17750 util: Change getwarnings parameter to bool (jnewbery) -- #17753 util: Don't allow base32/64-decoding or parsemoney(…) on strings with embedded nul characters. add tests (practicalswift) -- #17823 scripts: Read suspicious hosts from a file instead of hardcoding (sanjaykdragon) -- #18162 util: Avoid potential uninitialized read in `formatiso8601datetime(int64_t)` by checking `gmtime_s`/`gmtime_r` return value (practicalswift) -- #18167 Fix a violation of C++ standard rules where unions are used for type-punning (TheQuantumPhysicist) -- #18225 util: Fail to parse empty string in parsemoney (MarcoFalke) -- #18270 util: Fail to parse whitespace-only strings in parsemoney(…) (instead of parsing as zero) (practicalswift) -- #18316 util: Helpexamplerpc formatting (jonatack) -- #18357 Fix missing header in sync.h (promag) -- #18412 script: Fix `script_err_sig_pushonly` error string (theStack) -- #18416 util: Limit decimal range of numbers parsescript accepts (pierreN) -- #18503 init: Replace `URL_WEBSITE` with `PACKAGE_URL` (MarcoFalke) -- #18526 Remove PID file at the very end (hebasto) -- #18553 Avoid non-trivial global constants in SHA-NI code (sipa) -- #18665 Do not expose and consider `-logthreadnames` when it does not work (hebasto) +- #19194 util: Don't reference errno when pthread fails (miztake) +- #18700 Fix locking on WSL using flock instead of fcntl (meshcollider) Credits ======= Thanks to everyone who directly contributed to this release: -- 0xb10c -- 251 -- 4d55397500 - Aaron Clauson -- Adam Jonas -- Albert -- Amiti Uttarwar - Andrew Chow -- Andrew Toth -- Anthony Towns -- Antoine Riard -- Ava Barron -- Ben Carman -- Ben Woosley -- Block Mechanic -- Brian Solon -- Bushstar -- Carl Dong -- Carnhof Daki -- Cory Fields -- Daki Carnhof -- Dan Gershony -- Daniel Kraft -- dannmat -- Danny-Scott -- darosior -- David O'Callaghan -- Dominik Spicher -- Elichai Turkel -- Emil Engler -- emu -- Fabian Jahr - fanquake -- Filip Gospodinov -- Franck Royer -- Gastón I. Silva -- gchuf -- Gleb Naumenko -- Gloria Zhao -- glowang -- Gr0kchain -- Gregory Sanders -- hackerrdave -- Harris -- hel0 - Hennadii Stepanov -- ianliu -- Igor Cota -- James Chiang -- James O'Beirne -- Jan Beich -- Jan Sarenik -- Jeffrey Czyz -- Jeremy Rubin -- JeremyCrookshank -- Jim Posen -- John Bampton -- John L. Jegutanis -- John Newbery -- Jon Atack -- Jon Layton -- Jonas Schnelli - João Barbosa -- Jorge Timón -- Karl-Johan Alm -- kodslav -- Larry Ruane - Luke Dashjr -- malevolent -- MapleLaker -- marcaiaf - MarcoFalke -- Marius Kjærstad -- Mark Erhardt -- Mark Tyneway -- Martin Erlandsson -- Martin Zumsande -- Matt Corallo -- Matt Ward -- Michael Folkson -- Michael Polzer -- Micky Yun Chan -- Neha Narula -- nijynot -- naumenkogs -- NullFunctor -- Peter Bushnell -- pierrenn +- MIZUTA Takeshi - Pieter Wuille -- practicalswift -- randymcmillan -- Rjected - Russell Yanofsky -- Samer Afach +- sachinkm77 - Samuel Dobson -- Sanjay K -- Sebastian Falbesoner -- setpill -- Sjors Provoost -- Stefan Richter -- stefanwouldgo -- Steven Roose -- Suhas Daftuar -- Suriyaa Sundararuban -- TheCharlatan -- Tim Akinbo -- Travin Keith -- tryphe -- Vasil Dimov -- Willy Ko -- Wilson Ccasihue S - Wladimir J. van der Laan -- Yahia Chiheb -- Yancy Ribbens -- Yusuf Sahin HAMZA -- Zakk -- Zero As well as to everyone that helped with translations on [Transifex](https://www.transifex.com/bitcoin/bitcoin/). diff --git a/src/addrdb.h b/src/addrdb.h index c6d4307d69..8410c3776c 100644 --- a/src/addrdb.h +++ b/src/addrdb.h @@ -17,13 +17,6 @@ class CSubNet; class CAddrMan; class CDataStream; -typedef enum BanReason -{ - BanReasonUnknown = 0, - BanReasonNodeMisbehaving = 1, - BanReasonManuallyAdded = 2 -} BanReason; - class CBanEntry { public: @@ -31,7 +24,6 @@ class CBanEntry int nVersion; int64_t nCreateTime; int64_t nBanUntil; - uint8_t banReason; CBanEntry() { @@ -44,31 +36,17 @@ class CBanEntry nCreateTime = nCreateTimeIn; } - explicit CBanEntry(int64_t n_create_time_in, BanReason ban_reason_in) : CBanEntry(n_create_time_in) + SERIALIZE_METHODS(CBanEntry, obj) { - banReason = ban_reason_in; + uint8_t ban_reason = 2; //! For backward compatibility + READWRITE(obj.nVersion, obj.nCreateTime, obj.nBanUntil, ban_reason); } - SERIALIZE_METHODS(CBanEntry, obj) { READWRITE(obj.nVersion, obj.nCreateTime, obj.nBanUntil, obj.banReason); } - void SetNull() { nVersion = CBanEntry::CURRENT_VERSION; nCreateTime = 0; nBanUntil = 0; - banReason = BanReasonUnknown; - } - - std::string banReasonToString() const - { - switch (banReason) { - case BanReasonNodeMisbehaving: - return "node misbehaving"; - case BanReasonManuallyAdded: - return "manually added"; - default: - return "unknown"; - } } }; diff --git a/src/banman.cpp b/src/banman.cpp index 9cc584f0e4..a1bb5be903 100644 --- a/src/banman.cpp +++ b/src/banman.cpp @@ -68,28 +68,13 @@ void BanMan::ClearBanned() if (m_client_interface) m_client_interface->BannedListChanged(); } -int BanMan::IsBannedLevel(CNetAddr net_addr) +bool BanMan::IsDiscouraged(const CNetAddr& net_addr) { - // Returns the most severe level of banning that applies to this address. - // 0 - Not banned - // 1 - Automatic misbehavior ban - // 2 - Any other ban - int level = 0; - auto current_time = GetTime(); LOCK(m_cs_banned); - for (const auto& it : m_banned) { - CSubNet sub_net = it.first; - CBanEntry ban_entry = it.second; - - if (current_time < ban_entry.nBanUntil && sub_net.Match(net_addr)) { - if (ban_entry.banReason != BanReasonNodeMisbehaving) return 2; - level = 1; - } - } - return level; + return m_discouraged.contains(net_addr.GetAddrBytes()); } -bool BanMan::IsBanned(CNetAddr net_addr) +bool BanMan::IsBanned(const CNetAddr& net_addr) { auto current_time = GetTime(); LOCK(m_cs_banned); @@ -104,7 +89,7 @@ bool BanMan::IsBanned(CNetAddr net_addr) return false; } -bool BanMan::IsBanned(CSubNet sub_net) +bool BanMan::IsBanned(const CSubNet& sub_net) { auto current_time = GetTime(); LOCK(m_cs_banned); @@ -118,15 +103,21 @@ bool BanMan::IsBanned(CSubNet sub_net) return false; } -void BanMan::Ban(const CNetAddr& net_addr, const BanReason& ban_reason, int64_t ban_time_offset, bool since_unix_epoch) +void BanMan::Ban(const CNetAddr& net_addr, int64_t ban_time_offset, bool since_unix_epoch) { CSubNet sub_net(net_addr); - Ban(sub_net, ban_reason, ban_time_offset, since_unix_epoch); + Ban(sub_net, ban_time_offset, since_unix_epoch); +} + +void BanMan::Discourage(const CNetAddr& net_addr) +{ + LOCK(m_cs_banned); + m_discouraged.insert(net_addr.GetAddrBytes()); } -void BanMan::Ban(const CSubNet& sub_net, const BanReason& ban_reason, int64_t ban_time_offset, bool since_unix_epoch) +void BanMan::Ban(const CSubNet& sub_net, int64_t ban_time_offset, bool since_unix_epoch) { - CBanEntry ban_entry(GetTime(), ban_reason); + CBanEntry ban_entry(GetTime()); int64_t normalized_ban_time_offset = ban_time_offset; bool normalized_since_unix_epoch = since_unix_epoch; @@ -146,8 +137,8 @@ void BanMan::Ban(const CSubNet& sub_net, const BanReason& ban_reason, int64_t ba } if (m_client_interface) m_client_interface->BannedListChanged(); - //store banlist to disk immediately if user requested ban - if (ban_reason == BanReasonManuallyAdded) DumpBanlist(); + //store banlist to disk immediately + DumpBanlist(); } bool BanMan::Unban(const CNetAddr& net_addr) diff --git a/src/banman.h b/src/banman.h index 6bea2e75e9..f6bfbd1e49 100644 --- a/src/banman.h +++ b/src/banman.h @@ -6,6 +6,7 @@ #define BITCOIN_BANMAN_H #include +#include #include #include // For banmap_t #include @@ -23,32 +24,55 @@ class CClientUIInterface; class CNetAddr; class CSubNet; -// Denial-of-service detection/prevention -// The idea is to detect peers that are behaving -// badly and disconnect/ban them, but do it in a -// one-coding-mistake-won't-shatter-the-entire-network -// way. -// IMPORTANT: There should be nothing I can give a -// node that it will forward on that will make that -// node's peers drop it. If there is, an attacker -// can isolate a node and/or try to split the network. -// Dropping a node for sending stuff that is invalid -// now but might be valid in a later version is also -// dangerous, because it can cause a network split -// between nodes running old code and nodes running -// new code. +// Banman manages two related but distinct concepts: +// +// 1. Banning. This is configured manually by the user, through the setban RPC. +// If an address or subnet is banned, we never accept incoming connections from +// it and never create outgoing connections to it. We won't gossip its address +// to other peers in addr messages. Banned addresses and subnets are stored to +// banlist.dat on shutdown and reloaded on startup. Banning can be used to +// prevent connections with spy nodes or other griefers. +// +// 2. Discouragement. If a peer misbehaves enough (see Misbehaving() in +// net_processing.cpp), we'll mark that address as discouraged. We still allow +// incoming connections from them, but they're preferred for eviction when +// we receive new incoming connections. We never make outgoing connections to +// them, and do not gossip their address to other peers. This is implemented as +// a bloom filter. We can (probabilistically) test for membership, but can't +// list all discouraged addresses or unmark them as discouraged. Discouragement +// can prevent our limited connection slots being used up by incompatible +// or broken peers. +// +// Neither banning nor discouragement are protections against denial-of-service +// attacks, since if an attacker has a way to waste our resources and we +// disconnect from them and ban that address, it's trivial for them to +// reconnect from another IP address. +// +// Attempting to automatically disconnect or ban any class of peer carries the +// risk of splitting the network. For example, if we banned/disconnected for a +// transaction that fails a policy check and a future version changes the +// policy check so the transaction is accepted, then that transaction could +// cause the network to split between old nodes and new nodes. class BanMan { public: ~BanMan(); BanMan(fs::path ban_file, CClientUIInterface* client_interface, int64_t default_ban_time); - void Ban(const CNetAddr& net_addr, const BanReason& ban_reason, int64_t ban_time_offset = 0, bool since_unix_epoch = false); - void Ban(const CSubNet& sub_net, const BanReason& ban_reason, int64_t ban_time_offset = 0, bool since_unix_epoch = false); + void Ban(const CNetAddr& net_addr, int64_t ban_time_offset = 0, bool since_unix_epoch = false); + void Ban(const CSubNet& sub_net, int64_t ban_time_offset = 0, bool since_unix_epoch = false); + void Discourage(const CNetAddr& net_addr); void ClearBanned(); - int IsBannedLevel(CNetAddr net_addr); - bool IsBanned(CNetAddr net_addr); - bool IsBanned(CSubNet sub_net); + + //! Return whether net_addr is banned + bool IsBanned(const CNetAddr& net_addr); + + //! Return whether sub_net is exactly banned + bool IsBanned(const CSubNet& sub_net); + + //! Return whether net_addr is discouraged. + bool IsDiscouraged(const CNetAddr& net_addr); + bool Unban(const CNetAddr& net_addr); bool Unban(const CSubNet& sub_net); void GetBanned(banmap_t& banmap); @@ -68,6 +92,7 @@ class BanMan CClientUIInterface* m_client_interface = nullptr; CBanDB m_ban_db; const int64_t m_default_ban_time; + CRollingBloomFilter m_discouraged GUARDED_BY(m_cs_banned) {50000, 0.000001}; }; #endif diff --git a/src/fs.cpp b/src/fs.cpp index 066c6c10d3..e68c97b3ca 100644 --- a/src/fs.cpp +++ b/src/fs.cpp @@ -6,6 +6,9 @@ #ifndef WIN32 #include +#include +#include +#include #else #ifndef NOMINMAX #define NOMINMAX @@ -47,20 +50,38 @@ FileLock::~FileLock() } } +static bool IsWSL() +{ + struct utsname uname_data; + return uname(&uname_data) == 0 && std::string(uname_data.version).find("Microsoft") != std::string::npos; +} + bool FileLock::TryLock() { if (fd == -1) { return false; } - struct flock lock; - lock.l_type = F_WRLCK; - lock.l_whence = SEEK_SET; - lock.l_start = 0; - lock.l_len = 0; - if (fcntl(fd, F_SETLK, &lock) == -1) { - reason = GetErrorReason(); - return false; + + // Exclusive file locking is broken on WSL using fcntl (issue #18622) + // This workaround can be removed once the bug on WSL is fixed + static const bool is_wsl = IsWSL(); + if (is_wsl) { + if (flock(fd, LOCK_EX | LOCK_NB) == -1) { + reason = GetErrorReason(); + return false; + } + } else { + struct flock lock; + lock.l_type = F_WRLCK; + lock.l_whence = SEEK_SET; + lock.l_start = 0; + lock.l_len = 0; + if (fcntl(fd, F_SETLK, &lock) == -1) { + reason = GetErrorReason(); + return false; + } } + return true; } #else diff --git a/src/init.cpp b/src/init.cpp index 0d33a95d20..922cb0c7b4 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -424,8 +424,8 @@ void SetupServerArgs() gArgs.AddArg("-addnode=", "Add a node to connect to and attempt to keep the connection open (see the `addnode` RPC command help for more info). This option can be specified multiple times to add multiple nodes.", ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION); gArgs.AddArg("-asmap=", strprintf("Specify asn mapping used for bucketing of the peers (default: %s). Relative paths will be prefixed by the net-specific datadir location.", DEFAULT_ASMAP_FILENAME), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-banscore=", strprintf("Threshold for disconnecting misbehaving peers (default: %u)", DEFAULT_BANSCORE_THRESHOLD), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-bantime=", strprintf("Number of seconds to keep misbehaving peers from reconnecting (default: %u)", DEFAULT_MISBEHAVING_BANTIME), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + gArgs.AddArg("-banscore=", strprintf("Threshold for disconnecting and discouraging misbehaving peers (default: %u)", DEFAULT_BANSCORE_THRESHOLD), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + gArgs.AddArg("-bantime=", strprintf("Default duration (in seconds) of manually configured bans (default: %u)", DEFAULT_MISBEHAVING_BANTIME), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); gArgs.AddArg("-bind=", "Bind to given address and always listen on it. Use [host]:port notation for IPv6", ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION); gArgs.AddArg("-connect=", "Connect only to the specified node; -noconnect disables automatic connections (the rules for this peer are the same as for -addnode). This option can be specified multiple times to connect to multiple nodes.", ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION); gArgs.AddArg("-discover", "Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); diff --git a/src/interfaces/chain.cpp b/src/interfaces/chain.cpp index 0b3cd08e22..7c58273f82 100644 --- a/src/interfaces/chain.cpp +++ b/src/interfaces/chain.cpp @@ -158,9 +158,9 @@ class NotificationsProxy : public CValidationInterface { m_notifications->transactionAddedToMempool(tx); } - void TransactionRemovedFromMempool(const CTransactionRef& tx) override + void TransactionRemovedFromMempool(const CTransactionRef& tx, MemPoolRemovalReason reason) override { - m_notifications->transactionRemovedFromMempool(tx); + m_notifications->transactionRemovedFromMempool(tx, reason); } void BlockConnected(const std::shared_ptr& block, const CBlockIndex* index) override { diff --git a/src/interfaces/chain.h b/src/interfaces/chain.h index e1bc9bbbf3..538aaae23b 100644 --- a/src/interfaces/chain.h +++ b/src/interfaces/chain.h @@ -20,6 +20,7 @@ class CRPCCommand; class CScheduler; class Coin; class uint256; +enum class MemPoolRemovalReason; enum class RBFTransactionState; struct CBlockLocator; struct FeeCalculation; @@ -221,7 +222,7 @@ class Chain public: virtual ~Notifications() {} virtual void transactionAddedToMempool(const CTransactionRef& tx) {} - virtual void transactionRemovedFromMempool(const CTransactionRef& ptx) {} + virtual void transactionRemovedFromMempool(const CTransactionRef& tx, MemPoolRemovalReason reason) {} virtual void blockConnected(const CBlock& block, int height) {} virtual void blockDisconnected(const CBlock& block, int height) {} virtual void updatedBlockTip() {} diff --git a/src/interfaces/node.cpp b/src/interfaces/node.cpp index 905173d20b..3bd32909bf 100644 --- a/src/interfaces/node.cpp +++ b/src/interfaces/node.cpp @@ -136,10 +136,10 @@ class NodeImpl : public Node } return false; } - bool ban(const CNetAddr& net_addr, BanReason reason, int64_t ban_time_offset) override + bool ban(const CNetAddr& net_addr, int64_t ban_time_offset) override { if (m_context.banman) { - m_context.banman->Ban(net_addr, reason, ban_time_offset); + m_context.banman->Ban(net_addr, ban_time_offset); return true; } return false; diff --git a/src/interfaces/node.h b/src/interfaces/node.h index 53a20886cd..61acde0523 100644 --- a/src/interfaces/node.h +++ b/src/interfaces/node.h @@ -118,7 +118,7 @@ class Node virtual bool getBanned(banmap_t& banmap) = 0; //! Ban node. - virtual bool ban(const CNetAddr& net_addr, BanReason reason, int64_t ban_time_offset) = 0; + virtual bool ban(const CNetAddr& net_addr, int64_t ban_time_offset) = 0; //! Unban node. virtual bool unban(const CSubNet& ip) = 0; diff --git a/src/net.cpp b/src/net.cpp index a1283fbe49..a8ce0684c6 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -996,17 +996,24 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) { // on all platforms. Set it again here just to be sure. SetSocketNoDelay(hSocket); - int bannedlevel = m_banman ? m_banman->IsBannedLevel(addr) : 0; - - // Don't accept connections from banned peers, but if our inbound slots aren't almost full, accept - // if the only banning reason was an automatic misbehavior ban. - if (!NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::PF_NOBAN) && bannedlevel > ((nInbound + 1 < nMaxInbound) ? 1 : 0)) + // Don't accept connections from banned peers. + bool banned = m_banman->IsBanned(addr); + if (!NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::PF_NOBAN) && banned) { LogPrint(BCLog::NET, "connection from %s dropped (banned)\n", addr.ToString()); CloseSocket(hSocket); return; } + // Only accept connections from discouraged peers if our inbound slots aren't (almost) full. + bool discouraged = m_banman->IsDiscouraged(addr); + if (!NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::PF_NOBAN) && nInbound + 1 >= nMaxInbound && discouraged) + { + LogPrint(BCLog::NET, "connection from %s dropped (discouraged)\n", addr.ToString()); + CloseSocket(hSocket); + return; + } + if (nInbound >= nMaxInbound) { if (!AttemptToEvictConnection()) { @@ -1030,7 +1037,7 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) { pnode->m_permissionFlags = permissionFlags; // If this flag is present, the user probably expect that RPC and QT report it as whitelisted (backward compatibility) pnode->m_legacyWhitelisted = legacyWhitelisted; - pnode->m_prefer_evict = bannedlevel > 0; + pnode->m_prefer_evict = discouraged; m_msgproc->InitializeNode(pnode); LogPrint(BCLog::NET, "connection from %s accepted\n", addr.ToString()); @@ -1987,10 +1994,10 @@ void CConnman::OpenNetworkConnection(const CAddress& addrConnect, bool fCountFai return; } if (!pszDest) { - if (IsLocal(addrConnect) || - FindNode(static_cast(addrConnect)) || (m_banman && m_banman->IsBanned(addrConnect)) || - FindNode(addrConnect.ToStringIPPort())) + bool banned_or_discouraged = m_banman && (m_banman->IsDiscouraged(addrConnect) || m_banman->IsBanned(addrConnect)); + if (IsLocal(addrConnect) || FindNode(static_cast(addrConnect)) || banned_or_discouraged || FindNode(addrConnect.ToStringIPPort())) { return; + } } else if (FindNode(std::string(pszDest))) return; diff --git a/src/net_permissions.h b/src/net_permissions.h index ad74848347..a1b45c4009 100644 --- a/src/net_permissions.h +++ b/src/net_permissions.h @@ -18,7 +18,7 @@ enum NetPermissionFlags // Always relay transactions from this peer, even if already in mempool // Keep parameter interaction: forcerelay implies relay PF_FORCERELAY = (1U << 2) | PF_RELAY, - // Can't be banned for misbehavior + // Can't be banned/disconnected/discouraged for misbehavior PF_NOBAN = (1U << 4), // Can query the mempool PF_MEMPOOL = (1U << 5), diff --git a/src/net_processing.cpp b/src/net_processing.cpp index ec0ab42562..0ae85245dd 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -215,8 +215,8 @@ struct CNodeState { bool fCurrentlyConnected; //! Accumulated misbehaviour score for this peer. int nMisbehavior; - //! Whether this peer should be disconnected and banned (unless whitelisted). - bool fShouldBan; + //! Whether this peer should be disconnected and marked as discouraged (unless whitelisted with noban). + bool m_should_discourage; //! String name of this peer (debugging/logging purposes). const std::string name; //! The best known block we know this peer has announced. @@ -369,7 +369,7 @@ struct CNodeState { { fCurrentlyConnected = false; nMisbehavior = 0; - fShouldBan = false; + m_should_discourage = false; pindexBestKnownBlock = nullptr; hashLastUnknownBlock.SetNull(); pindexLastCommonBlock = nullptr; @@ -965,7 +965,7 @@ unsigned int LimitOrphanTxSize(unsigned int nMaxOrphans) } /** - * Mark a misbehaving peer to be banned depending upon the value of `-banscore`. + * Increment peer's misbehavior score. If the new value surpasses banscore (specified on startup or by default), mark node to be discouraged, meaning the peer might be disconnected & added to the discouragement filter. */ void Misbehaving(NodeId pnode, int howmuch, const std::string& message) EXCLUSIVE_LOCKS_REQUIRED(cs_main) { @@ -981,14 +981,14 @@ void Misbehaving(NodeId pnode, int howmuch, const std::string& message) EXCLUSIV std::string message_prefixed = message.empty() ? "" : (": " + message); if (state->nMisbehavior >= banscore && state->nMisbehavior - howmuch < banscore) { - LogPrint(BCLog::NET, "%s: %s peer=%d (%d -> %d) BAN THRESHOLD EXCEEDED%s\n", __func__, state->name, pnode, state->nMisbehavior-howmuch, state->nMisbehavior, message_prefixed); - state->fShouldBan = true; + LogPrint(BCLog::NET, "%s: %s peer=%d (%d -> %d) DISCOURAGE THRESHOLD EXCEEDED%s\n", __func__, state->name, pnode, state->nMisbehavior-howmuch, state->nMisbehavior, message_prefixed); + state->m_should_discourage = true; } else LogPrint(BCLog::NET, "%s: %s peer=%d (%d -> %d)%s\n", __func__, state->name, pnode, state->nMisbehavior-howmuch, state->nMisbehavior, message_prefixed); } /** - * Potentially ban a node based on the contents of a BlockValidationState object + * Potentially mark a node discouraged based on the contents of a BlockValidationState object * * @param[in] via_compact_block this bool is passed in because net_processing should * punish peers differently depending on whether the data was provided in a compact @@ -1018,7 +1018,7 @@ static bool MaybePunishNodeForBlock(NodeId nodeid, const BlockValidationState& s break; } - // Ban outbound (but not inbound) peers if on an invalid chain. + // Discourage outbound (but not inbound) peers if on an invalid chain. // Exempt HB compact block peers and manual connections. if (!via_compact_block && !node_state->m_is_inbound && !node_state->m_is_manual_connection) { Misbehaving(nodeid, 100, message); @@ -1053,7 +1053,7 @@ static bool MaybePunishNodeForBlock(NodeId nodeid, const BlockValidationState& s } /** - * Potentially ban a node based on the contents of a TxValidationState object + * Potentially disconnect and discourage a node based on the contents of a TxValidationState object * * @return Returns true if the peer was punished (probably disconnected) */ @@ -1280,7 +1280,7 @@ void PeerLogicValidation::UpdatedBlockTip(const CBlockIndex *pindexNew, const CB } /** - * Handle invalid block rejection and consequent peer banning, maintain which + * Handle invalid block rejection and consequent peer discouragement, maintain which * peers announce compact blocks. */ void PeerLogicValidation::BlockChecked(const CBlock& block, const BlockValidationState& state) { @@ -2193,7 +2193,8 @@ bool ProcessMessage(CNode* pfrom, const std::string& msg_type, CDataStream& vRec if (addr.nTime <= 100000000 || addr.nTime > nNow + 10 * 60) addr.nTime = nNow - 5 * 24 * 60 * 60; pfrom->AddAddressKnown(addr); - if (banman->IsBanned(addr)) continue; // Do not process banned addresses beyond remembering we received them + if (banman->IsDiscouraged(addr)) continue; // Do not process banned/discouraged addresses beyond remembering we received them + if (banman->IsBanned(addr)) continue; bool fReachable = IsReachable(addr); if (addr.nTime > nSince && !pfrom->fGetAddr && vAddr.size() <= 10 && addr.IsRoutable()) { @@ -2864,7 +2865,7 @@ bool ProcessMessage(CNode* pfrom, const std::string& msg_type, CDataStream& vRec // relayed before full validation (see BIP 152), so we don't want to disconnect // the peer if the header turns out to be for an invalid block. // Note that if a peer tries to build on an invalid chain, that - // will be detected and the peer will be banned. + // will be detected and the peer will be disconnected/discouraged. return ProcessHeadersMessage(pfrom, connman, mempool, {cmpctblock.header}, chainparams, /*via_compact_block=*/true); } @@ -2950,7 +2951,7 @@ bool ProcessMessage(CNode* pfrom, const std::string& msg_type, CDataStream& vRec // 3. the block is otherwise invalid (eg invalid coinbase, // block is too big, too many legacy sigops, etc). // So if CheckBlock failed, #3 is the only possibility. - // Under BIP 152, we don't DoS-ban unless proof of work is + // Under BIP 152, we don't discourage the peer unless proof of work is // invalid (we don't require all the stateless checks to have // been run). This is handled below, so just treat this as // though the block was successfully read, and rely on the @@ -3075,7 +3076,7 @@ bool ProcessMessage(CNode* pfrom, const std::string& msg_type, CDataStream& vRec std::vector vAddr = connman->GetAddresses(); FastRandomContext insecure_rand; for (const CAddress &addr : vAddr) { - if (!banman->IsBanned(addr)) { + if (!banman->IsDiscouraged(addr) && !banman->IsBanned(addr)) { pfrom->PushAddress(addr, insecure_rand); } } @@ -3286,25 +3287,26 @@ bool ProcessMessage(CNode* pfrom, const std::string& msg_type, CDataStream& vRec return true; } -bool PeerLogicValidation::CheckIfBanned(CNode* pnode) +bool PeerLogicValidation::MaybeDiscourageAndDisconnect(CNode* pnode) { AssertLockHeld(cs_main); CNodeState &state = *State(pnode->GetId()); - if (state.fShouldBan) { - state.fShouldBan = false; - if (pnode->HasPermission(PF_NOBAN)) + if (state.m_should_discourage) { + state.m_should_discourage = false; + if (pnode->HasPermission(PF_NOBAN)) { LogPrintf("Warning: not punishing whitelisted peer %s!\n", pnode->addr.ToString()); - else if (pnode->m_manual_connection) + } else if (pnode->m_manual_connection) { LogPrintf("Warning: not punishing manually-connected peer %s!\n", pnode->addr.ToString()); - else if (pnode->addr.IsLocal()) { - // Disconnect but don't ban _this_ local node - LogPrintf("Warning: disconnecting but not banning local peer %s!\n", pnode->addr.ToString()); + } else if (pnode->addr.IsLocal()) { + // Disconnect but don't discourage this local node + LogPrintf("Warning: disconnecting but not discouraging local peer %s!\n", pnode->addr.ToString()); pnode->fDisconnect = true; } else { - // Disconnect and ban all nodes sharing the address + // Disconnect and discourage all nodes sharing the address + LogPrintf("Disconnecting and discouraging peer %s!\n", pnode->addr.ToString()); if (m_banman) { - m_banman->Ban(pnode->addr, BanReasonNodeMisbehaving); + m_banman->Discourage(pnode->addr); } connman->DisconnectNode(pnode->addr); } @@ -3411,7 +3413,7 @@ bool PeerLogicValidation::ProcessMessages(CNode* pfrom, std::atomic& inter } LOCK(cs_main); - CheckIfBanned(pfrom); + MaybeDiscourageAndDisconnect(pfrom); return fMoreWork; } @@ -3614,7 +3616,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto) if (!lockMain) return true; - if (CheckIfBanned(pto)) return true; + if (MaybeDiscourageAndDisconnect(pto)) return true; CNodeState &state = *State(pto->GetId()); diff --git a/src/net_processing.h b/src/net_processing.h index 3d9bc65a3a..ddb1780148 100644 --- a/src/net_processing.h +++ b/src/net_processing.h @@ -28,7 +28,7 @@ class PeerLogicValidation final : public CValidationInterface, public NetEventsI BanMan* const m_banman; CTxMemPool& m_mempool; - bool CheckIfBanned(CNode* pnode) EXCLUSIVE_LOCKS_REQUIRED(cs_main); + bool MaybeDiscourageAndDisconnect(CNode* pnode) EXCLUSIVE_LOCKS_REQUIRED(cs_main); public: PeerLogicValidation(CConnman* connman, BanMan* banman, CScheduler& scheduler, CTxMemPool& pool); diff --git a/src/netaddress.h b/src/netaddress.h index b7381c1eb4..0c8d600a4a 100644 --- a/src/netaddress.h +++ b/src/netaddress.h @@ -90,6 +90,7 @@ class CNetAddr uint32_t GetMappedAS(const std::vector &asmap) const; std::vector GetGroup(const std::vector &asmap) const; + std::vector GetAddrBytes() const { return {std::begin(ip), std::end(ip)}; } int GetReachabilityFrom(const CNetAddr *paddrPartner = nullptr) const; explicit CNetAddr(const struct in6_addr& pipv6Addr, const uint32_t scope = 0); diff --git a/src/psbt.cpp b/src/psbt.cpp index e6b6285652..bfa9e3c667 100644 --- a/src/psbt.cpp +++ b/src/psbt.cpp @@ -35,14 +35,6 @@ bool PartiallySignedTransaction::Merge(const PartiallySignedTransaction& psbt) return true; } -bool PartiallySignedTransaction::IsSane() const -{ - for (PSBTInput input : inputs) { - if (!input.IsSane()) return false; - } - return true; -} - bool PartiallySignedTransaction::AddInput(const CTxIn& txin, PSBTInput& psbtin) { if (std::find(tx->vin.begin(), tx->vin.end(), txin) != tx->vin.end()) { @@ -144,8 +136,8 @@ void PSBTInput::Merge(const PSBTInput& input) { if (!non_witness_utxo && input.non_witness_utxo) non_witness_utxo = input.non_witness_utxo; if (witness_utxo.IsNull() && !input.witness_utxo.IsNull()) { + // TODO: For segwit v1, we will want to clear out the non-witness utxo when setting a witness one. For v0 and non-segwit, this is not safe witness_utxo = input.witness_utxo; - non_witness_utxo = nullptr; // Clear out any non-witness utxo when we set a witness one. } partial_sigs.insert(input.partial_sigs.begin(), input.partial_sigs.end()); @@ -158,18 +150,6 @@ void PSBTInput::Merge(const PSBTInput& input) if (final_script_witness.IsNull() && !input.final_script_witness.IsNull()) final_script_witness = input.final_script_witness; } -bool PSBTInput::IsSane() const -{ - // Cannot have both witness and non-witness utxos - if (!witness_utxo.IsNull() && non_witness_utxo) return false; - - // If we have a witness_script or a scriptWitness, we must also have a witness utxo - if (!witness_script.empty() && witness_utxo.IsNull()) return false; - if (!final_script_witness.IsNull() && witness_utxo.IsNull()) return false; - - return true; -} - void PSBTOutput::FillSignatureData(SignatureData& sigdata) const { if (!redeem_script.empty()) { @@ -250,11 +230,6 @@ bool SignPSBTInput(const SigningProvider& provider, PartiallySignedTransaction& bool require_witness_sig = false; CTxOut utxo; - // Verify input sanity, which checks that at most one of witness or non-witness utxos is provided. - if (!input.IsSane()) { - return false; - } - if (input.non_witness_utxo) { // If we're taking our information from a non-witness UTXO, verify that it matches the prevout. COutPoint prevout = tx.vin[index].prevout; @@ -288,10 +263,11 @@ bool SignPSBTInput(const SigningProvider& provider, PartiallySignedTransaction& if (require_witness_sig && !sigdata.witness) return false; input.FromSignatureData(sigdata); - // If we have a witness signature, use the smaller witness UTXO. + // If we have a witness signature, put a witness UTXO. + // TODO: For segwit v1, we should remove the non_witness_utxo if (sigdata.witness) { input.witness_utxo = utxo; - input.non_witness_utxo = nullptr; + // input.non_witness_utxo = nullptr; } // Fill in the missing info @@ -345,10 +321,6 @@ TransactionError CombinePSBTs(PartiallySignedTransaction& out, const std::vector return TransactionError::PSBT_MISMATCH; } } - if (!out.IsSane()) { - return TransactionError::INVALID_PSBT; - } - return TransactionError::OK; } diff --git a/src/psbt.h b/src/psbt.h index dfba261961..6eb411e3a4 100644 --- a/src/psbt.h +++ b/src/psbt.h @@ -58,18 +58,17 @@ struct PSBTInput void FillSignatureData(SignatureData& sigdata) const; void FromSignatureData(const SignatureData& sigdata); void Merge(const PSBTInput& input); - bool IsSane() const; PSBTInput() {} template inline void Serialize(Stream& s) const { // Write the utxo - // If there is a non-witness utxo, then don't add the witness one. if (non_witness_utxo) { SerializeToVector(s, PSBT_IN_NON_WITNESS_UTXO); OverrideStream os(&s, s.GetType(), s.GetVersion() | SERIALIZE_TRANSACTION_NO_WITNESS); SerializeToVector(os, non_witness_utxo); - } else if (!witness_utxo.IsNull()) { + } + if (!witness_utxo.IsNull()) { SerializeToVector(s, PSBT_IN_WITNESS_UTXO); SerializeToVector(s, witness_utxo); } @@ -280,7 +279,6 @@ struct PSBTOutput void FillSignatureData(SignatureData& sigdata) const; void FromSignatureData(const SignatureData& sigdata); void Merge(const PSBTOutput& output); - bool IsSane() const; PSBTOutput() {} template @@ -397,7 +395,6 @@ struct PartiallySignedTransaction /** Merge psbt into this. The two psbts must have the same underlying CTransaction (i.e. the * same actual Bitcoin transaction.) Returns true if the merge succeeded, false otherwise. */ NODISCARD bool Merge(const PartiallySignedTransaction& psbt); - bool IsSane() const; bool AddInput(const CTxIn& txin, PSBTInput& psbtin); bool AddOutput(const CTxOut& txout, const PSBTOutput& psbtout); PartiallySignedTransaction() {} @@ -547,10 +544,6 @@ struct PartiallySignedTransaction if (outputs.size() != tx->vout.size()) { throw std::ios_base::failure("Outputs provided does not match the number of outputs in transaction."); } - // Sanity check - if (!IsSane()) { - throw std::ios_base::failure("PSBT is not sane."); - } } template diff --git a/src/qt/locale/bitcoin_ar.ts b/src/qt/locale/bitcoin_ar.ts index 1e357eab43..3f5e38086c 100644 --- a/src/qt/locale/bitcoin_ar.ts +++ b/src/qt/locale/bitcoin_ar.ts @@ -183,6 +183,10 @@ Enter the old passphrase and new passphrase for the wallet. ادخل كملة المرور القديمة وكلمة المرور الجديدة للمحفظة. + + Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. + تذكر أن تشفير محفظتك لا يحمي البيتكوين الخاصة بك بشكل كامل من السرقة من قبل البرامج الخبيثةالتي تصيب حاسوبك + Wallet to be encrypted سوف يتم تشفير محفظتك diff --git a/src/qt/locale/bitcoin_ca.ts b/src/qt/locale/bitcoin_ca.ts index 1149d9a3c1..ef9e6dd461 100644 --- a/src/qt/locale/bitcoin_ca.ts +++ b/src/qt/locale/bitcoin_ca.ts @@ -2389,6 +2389,10 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Are you sure you want to send? Esteu segur que ho voleu enviar? + + Please, review your transaction proposal. This will produce a Partially Signed Bitcoin Transaction (PSBT) which you can copy and then sign with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet. + Revisa la teva proposta de transacció. Es produirà una transacció de Bitcoin amb signatura parcial (PSBT) que podeu copiar i després signar, per exemple, amb una cartera %1 de tipus fora de línia o una cartera física compatible amb PSBT. + or o @@ -2405,14 +2409,26 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Transaction fee Comissió de transacció + + Not signalling Replace-By-Fee, BIP-125. + Substitució per tarifa sense senyalització, BIP-125 + Total Amount Import total + + To review recipient list click "Show Details..." + Per revisar la llista de destinataris, feu clic a "Mostra els detalls ..." + Confirm send coins Confirma l'enviament de monedes + + Confirm transaction proposal + Confirmeu la proposta de transacció + Copy PSBT to clipboard Copiar PSBT al porta-retalls. @@ -2425,6 +2441,10 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 PSBT copied PSBT copiada + + Watch-only balance: + Saldo només de vigilància: + The recipient address is not valid. Please recheck. L'adreça del destinatari no és vàlida. Torneu-la a comprovar. @@ -2457,6 +2477,10 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Payment request expired. La sol·licitud de pagament ha vençut. + + Estimated to begin confirmation within %n block(s). + S’estima que comenci la confirmació dintre d'un bloc.S’estima que comenci la confirmació dintre de %n blocs. + Warning: Invalid Vertcoin address Avís: adreça Vertcoin no vàlida @@ -2517,8 +2541,12 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Elimina aquesta entrada - The fee will be deducted from the amount being sent. The recipient will receive less vertcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally. - La comissió es deduirà de l'import que s'enviarà. El destinatari rebrà menys vertcoins que les que introduïu al camp d'import. Si se seleccionen múltiples destinataris, la comissió es dividirà per igual. + The amount to send in the selected unit + L’import a enviar a la unitat 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 comissió es deduirà de l'import que s'enviarà. El destinatari rebrà menys bitcoins que les que introduïu al camp d'import. Si se seleccionen múltiples destinataris, la comissió es dividirà per igual. S&ubtract fee from amount @@ -2642,6 +2670,14 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 The Vertcoin address the message was signed with L'adreça Vertcoin amb què va ser signat el missatge + + The signed message to verify + El missatge signat per verificar + + + The signature given when the message was signed + La signatura donada quan es va signar el missatge + Verify the message to ensure it was signed with the specified Vertcoin address Verificar el missatge per assegurar-se que ha estat signat amb una adreça Vertcoin específica @@ -2674,6 +2710,10 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Wallet unlock was cancelled. S'ha cancel·lat el desblocatge de la cartera. + + No error + Cap error + Private key for the entered address is not available. La clau privada per a la adreça introduïda no està disponible. @@ -2716,6 +2756,10 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 TransactionDesc + + Open for %n more block(s) + Obre per un bloc mésObre per %n blocs més + Open until %1 Obert fins %1 @@ -2792,6 +2836,10 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Credit Crèdit + + matures in %n more block(s) + madura en un bloc mésmadura en %n blocs més + not accepted no acceptat @@ -2840,6 +2888,10 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Output index Índex de resultats + + (Certificate was not verified) + (El certificat no s'ha verificat) + Merchant Mercader @@ -2898,6 +2950,10 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Label Etiqueta + + Open for %n more block(s) + Obre per un bloc mésObre per %n blocs més + Open until %1 Obert fins %1 @@ -3159,7 +3215,15 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Close wallet Tanca la cartera - + + Are you sure you wish to close the wallet <i>%1</i>? + Segur que voleu tancar la cartera <i>%1 </i>? + + + Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. + Si tanqueu la cartera durant massa temps, es pot haver de tornar a sincronitzar tota la cadena si teniu el sistema de poda habilitat. + + WalletFrame @@ -3185,6 +3249,10 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Do you want to increase the fee? Voleu augmentar la tarifa? + + Do you want to draft a transaction with fee increase? + Voleu redactar una transacció amb augment de tarifes? + Current fee: tarifa actual: @@ -3201,6 +3269,10 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Confirm fee bump Confirmeu el recàrrec de tarifes + + Can't draft transaction. + No es pot redactar la transacció. + PSBT copied PSBT copiada @@ -3287,10 +3359,18 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 The %s developers Els desenvolupadors %s + + Can't generate a change-address key. No keys in the internal keypool and can't generate any keys. + No es pot generar una clau d’adreça de canvi. No hi ha claus al keypool intern i no es pot generar cap clau. + Cannot obtain a lock on data directory %s. %s is probably already running. No es pot obtenir un bloqueig al directori de dades %s. %s probablement ja s'estigui executant. + + Cannot provide specific connections and have addrman find outgoing connections at the same. + No es poden proporcionar connexions específiques i no es poden trobar connexions sortint al mateix temps. + Error reading %s! All keys read correctly, but transaction data or address book entries might be missing or incorrect. S'ha produït un error en llegir %s. Totes les claus es llegeixen correctament, però les dades de la transacció o les entrades de la llibreta d'adreces podrien faltar o ser incorrectes. @@ -3351,6 +3431,10 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Change index out of range Canvieu l'índex fora de l'abast + + Config setting for %s only applied on %s network when in [%s] section. + Configuració per a %s únicament aplicada a %s de la xarxa quan es troba a la secció [%s]. + Copyright (C) %i-%i Copyright (C) %i-%i @@ -3359,6 +3443,14 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Corrupted block database detected S'ha detectat una base de dades de blocs corrupta + + Could not find asmap file %s + No s'ha pogut trobar el fitxer asmap %s + + + Could not parse asmap file %s + No s'ha pogut analitzar el fitxer asmap %s + Do you want to rebuild the block database now? Voleu reconstruir la base de dades de blocs ara? @@ -3375,6 +3467,10 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Error loading %s Error carregant %s + + Error loading %s: Private keys can only be disabled during creation + Error carregant %s: les claus privades només es poden desactivar durant la creació + Error loading %s: Wallet corrupted S'ha produït un error en carregar %s: la cartera és corrupta @@ -3395,6 +3491,10 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Failed to listen on any port. Use -listen=0 if you want this. Ha fallat escoltar a qualsevol port. Feu servir -listen=0 si voleu fer això. + + Failed to rescan the wallet during initialization + No s'ha pogut escanejar novament la cartera durant la inicialització + Importing... S'està important... @@ -3407,6 +3507,10 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Initialization sanity check failed. %s is shutting down. S'ha produït un error en la verificació de sanejament d'inicialització. S'està tancant %s. + + Invalid P2P permission: '%s' + Permís P2P no vàlid: '%s' + Invalid amount for -%s=<amount>: '%s' Import invàlid per -%s=<amount>: '%s' @@ -3419,10 +3523,30 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Invalid amount for -fallbackfee=<amount>: '%s' Import invàlid per -fallbackfee=<amount>: '%s' + + Specified blocks directory "%s" does not exist. + El directori de blocs especificat "%s" no existeix. + + + Unknown address type '%s' + Tipus d'adreça desconegut '%s' + + + Unknown change type '%s' + Tipus de canvi desconegut '%s' + + + Upgrading txindex database + Actualitzant txindex de la base de dades + Loading P2P addresses... S'estan carregant les adreces P2P ... + + Error: Disk space is too low! + Error: l'espai del disc és insuficient. + Loading banlist... Carregant banlist ... @@ -3507,6 +3631,10 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Error upgrading chainstate database S'ha produït un error en actualitzar la base de dades de chainstate + + Error: Disk space is low for %s + Error: l'espai del disc és insuficient per a %s + Invalid -onion address or hostname: '%s' Adreça o nom de l'ordinador -onion no vàlida: '%s' @@ -3527,6 +3655,10 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Need to specify a port with -whitebind: '%s' Cal especificar un port amb -whitebind: «%s» + + Prune mode is incompatible with -blockfilterindex. + El mode de poda no és compatible amb -blockfilterindex. + Reducing -maxconnections from %d to %d, because of system limitations. Reducció de -maxconnections de %d a %d, a causa de les limitacions del sistema. @@ -3539,6 +3671,24 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Signing transaction failed Ha fallat la signatura de la transacció + + Specified -walletdir "%s" does not exist + -Walletdir especificat "%s" no existeix + + + Specified -walletdir "%s" is a relative path + -Walletdir especificat "%s" és una ruta relativa + + + Specified -walletdir "%s" is not a directory + -Walletdir especificat "%s" no és un directori + + + The specified config file %s does not exist + + El fitxer de configuració especificat %s no existeix + + The transaction amount is too small to pay the fee L'import de la transacció és massa petit per pagar-ne una comissió @@ -3559,10 +3709,18 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Unable to bind to %s on this computer (bind returned error %s) No s'ha pogut vincular a %s en aquest ordinador (la vinculació ha retornat l'error %s) + + Unable to create the PID file '%s': %s + No es pot crear el fitxer PID '%s': %s + Unable to generate initial keys No s'han pogut generar les claus inicials + + Unknown -blockfilterindex value %s. + Valor %s -blockfilterindex desconegut + Verifying wallet(s)... S'estan verificant les carteres... @@ -3635,6 +3793,14 @@ Nota: Com que la comissió es calcula en funció dels bytes, una comissió de "1 Insufficient funds Balanç insuficient + + Cannot upgrade a non HD split wallet without upgrading to support pre split keypool. Please use -upgradewallet=169900 or -upgradewallet with no version specified. + No es pot actualitzar una cartera de tipus dividida que no sigui física sense haver d'actualitzar per tal de suportar keypool pre dividida. Si us plau, utilitzeu -upgradewallet = 169900 o -upgradewallet sense cap versió especificada. + + + Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable -fallbackfee. + L'estimació de la quota ha fallat. Fallbackfee està desactivat. Espereu uns quants blocs o activeu -fallbackfee. + Warning: Private keys detected in wallet {%s} with disabled private keys Avís: Claus privades detectades en la cartera {%s} amb claus privades deshabilitades diff --git a/src/qt/locale/bitcoin_cs.ts b/src/qt/locale/bitcoin_cs.ts index d5e0d00556..83cd0548eb 100644 --- a/src/qt/locale/bitcoin_cs.ts +++ b/src/qt/locale/bitcoin_cs.ts @@ -2045,7 +2045,7 @@ Generate native segwit (Bech32) address - Generovat nativní segwit adresu (Bench32) + Generovat nativní segwit adresu (Bech32) Requested payments history diff --git a/src/qt/locale/bitcoin_de.ts b/src/qt/locale/bitcoin_de.ts index c353f6e7df..3d55526e37 100644 --- a/src/qt/locale/bitcoin_de.ts +++ b/src/qt/locale/bitcoin_de.ts @@ -1012,7 +1012,7 @@ (%n GB needed for full chain) - (%n GB benötigt für komplette Blockchain)(%n GB benötigt für komplette Blockchain) + (%n GB benötigt für komplette Blockchain)(%n GB wird die komplette Blockchain benötigen) diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts index aabc150c42..5e23247f6e 100644 --- a/src/qt/locale/bitcoin_en.ts +++ b/src/qt/locale/bitcoin_en.ts @@ -3518,7 +3518,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satos TrafficGraphWidget - + KB/s diff --git a/src/qt/locale/bitcoin_en_GB.ts b/src/qt/locale/bitcoin_en_GB.ts index 9f8b323d1c..950631806a 100644 --- a/src/qt/locale/bitcoin_en_GB.ts +++ b/src/qt/locale/bitcoin_en_GB.ts @@ -1792,6 +1792,14 @@ Synced Blocks Synced Blocks + + The mapped Autonomous System used for diversifying peer selection. + The mapped Autonomous System used for diversifying peer selection. + + + Mapped AS + Mapeado como + User Agent User Agent diff --git a/src/qt/locale/bitcoin_es_MX.ts b/src/qt/locale/bitcoin_es_MX.ts index 2833461d0d..bf2855f6bb 100644 --- a/src/qt/locale/bitcoin_es_MX.ts +++ b/src/qt/locale/bitcoin_es_MX.ts @@ -131,6 +131,10 @@ Repeat new passphrase Repita la nueva contraseña + + Show passphrase + Mostrar contraseña + Encrypt wallet Encriptar cartera @@ -293,6 +297,14 @@ Open &URI... Abrir &URL... + + Create Wallet... + Crear cartera + + + Create a new wallet + Crear una nueva cartera + Wallet: Cartera: @@ -392,6 +404,10 @@ Solicitar pagos (genera códigos QR y vertcoin: URI) &Command-line options opciones de la &Linea de comandos + + Indexing blocks on disk... + Indexando bloques en el disco... + Error Error @@ -408,10 +424,56 @@ Solicitar pagos (genera códigos QR y vertcoin: URI) Up to date Actualizado al dia + + Open Wallet + Abrir Cartera + + + Open a wallet + Abrir una cartera + + + Close Wallet... + Cerrar Cartera... + + + Close wallet + Cerrar cartera + + + default wallet + cartera predeterminada + + + &Window + &Ventana + + + Minimize + Minimizar + + + Main Window + Ventana Principal + Catching up... Recibiendo... + + Error: %1 + Error: %1 + + + Warning: %1 + Alerta: %1 + + + Date: %1 + + Fecha: %1 + + Sent transaction Enviar Transacción @@ -463,6 +525,10 @@ Solicitar pagos (genera códigos QR y vertcoin: URI) Date Fecha + + Confirmations + Confirmaciones + Confirmed Confirmado @@ -525,7 +591,11 @@ Solicitar pagos (genera códigos QR y vertcoin: URI) CreateWalletDialog - + + Create + Crear + + EditAddressDialog @@ -581,6 +651,10 @@ Solicitar pagos (genera códigos QR y vertcoin: URI) Intro + + Welcome + Bienvenido + Vertcoin Vertcoin @@ -602,6 +676,10 @@ Solicitar pagos (genera códigos QR y vertcoin: URI) OpenWalletActivity + + default wallet + cartera predeterminada + OptionsDialog @@ -613,6 +691,10 @@ Solicitar pagos (genera códigos QR y vertcoin: URI) W&allet Cartera + + &Window + &Ventana + none Ninguno @@ -641,6 +723,10 @@ Solicitar pagos (genera códigos QR y vertcoin: URI) Amount Monto + + Error: %1 + Error: %1 + unknown desconocido @@ -1153,6 +1239,10 @@ Solicitar pagos (genera códigos QR y vertcoin: URI) WalletController + + Close wallet + Cerrar cartera + WalletFrame @@ -1167,7 +1257,11 @@ Solicitar pagos (genera códigos QR y vertcoin: URI) Send Coins Enviar monedas - + + default wallet + cartera predeterminada + + WalletView diff --git a/src/qt/locale/bitcoin_et.ts b/src/qt/locale/bitcoin_et.ts index 4b520eddb6..668e44ef6d 100644 --- a/src/qt/locale/bitcoin_et.ts +++ b/src/qt/locale/bitcoin_et.ts @@ -131,6 +131,10 @@ Repeat new passphrase Korda uut parooli + + Show passphrase + Näita salafraasi + Encrypt wallet Krüpteeri rahakott @@ -171,6 +175,30 @@ Wallet encrypted Rahakott krüpteeritud + + 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>. + Sisesta rahakotile uus salafraas.<br/>Kasuta salafraasi millles on<b>kümme või rohkem juhuslikku sümbolit<b>,või<b>kaheksa või rohkem sõna<b/>. + + + Enter the old passphrase and new passphrase for the wallet. + Sisesta rahakoti vana salafraas ja uus salafraas. + + + Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. + Pea meeles, et rahakoti krüpteerimine ei välista bitcoinide vargust, kui sinu arvuti on nakatunud pahavaraga. + + + Wallet to be encrypted + Krüpteeritav rahakott + + + Your wallet is about to be encrypted. + Rahakott krüpteeritakse. + + + Your wallet is now encrypted. + Rahakott krüpteeritud. + 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. TÄHTIS: Kõik varasemad rahakoti varundfailid tuleks üle kirjutada äsja loodud krüpteeritud rahakoti failiga. Turvakaalutlustel tühistatakse krüpteerimata rahakoti failid alates uue, krüpteeritud rahakoti, kasutusele võtust. @@ -214,7 +242,11 @@ IP/Netmask IP/Võrgumask - + + Banned Until + Blokeeritud kuni + + BitcoinGUI @@ -253,6 +285,10 @@ &About %1 &Teave %1 + + Show information about %1 + Näita informatsiooni %1 kohta + About &Qt Teave &Qt kohta @@ -265,6 +301,10 @@ &Options... &Valikud... + + Modify configuration options for %1 + Muuda %1 seadeid + &Encrypt Wallet... &Krüpteeri Rahakott @@ -281,6 +321,18 @@ Open &URI... Ava &URI... + + Create Wallet... + Loo rahakott + + + Create a new wallet + Loo uus rahakott + + + Wallet: + Rahakott: + Reindexing blocks on disk... Kõvakettal olevate plokkide reindekseerimine... diff --git a/src/qt/locale/bitcoin_fa.ts b/src/qt/locale/bitcoin_fa.ts index 4a3b8d65f4..9b9a3a1d7f 100644 --- a/src/qt/locale/bitcoin_fa.ts +++ b/src/qt/locale/bitcoin_fa.ts @@ -7,7 +7,7 @@ Create a new address - گشایش آدرس جدید + ساخت یک آدرس جدید &New @@ -15,7 +15,7 @@ Copy the currently selected address to the system clipboard - کپی کردن حساب انتخاب شده به حافظه سیستم - کلیپ بورد + کپی کردن آدرس انتخاب شده به حافظه کلیپ بورد سیستم &Copy @@ -141,11 +141,11 @@ This operation needs your wallet passphrase to unlock the wallet. - برای انجام این عملیات، باید رمز کیف‌پول را وارد کنید. + این عملیات نیاز به رمز کیف ‌پول شما دارد تا کیف پول باز شود Unlock wallet - بازکردن کیف‌پول + بازکردن کیف ‌پول This operation needs your wallet passphrase to decrypt the wallet. @@ -169,14 +169,18 @@ Are you sure you wish to encrypt your wallet? - آیا از رمزگذاری کیف‌پول خود اطمینان دارید؟ + آیا از رمزگذاری کیف ‌پول خود اطمینان دارید؟ Wallet encrypted کیف پول رمزگذاری شده است - Remember that encrypting your wallet cannot fully protect your vertcoins from being stolen by malware infecting your computer. + Enter the old passphrase and new passphrase for the wallet. + رمز عبور قدیمی و رمز عبور جدید کیف پول خود را وارد کنید. + + + Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. والت رمز بندی شد . یاد داشته باشید که پنجره رمز شده نمی تواند کلا از سرقت نرم افزارهای مخرب محافظ کند @@ -306,6 +310,10 @@ Open &URI... بازکردن آدرس... + + Create a new wallet + ساخت کیف پول جدید + Wallet: کیف پول: diff --git a/src/qt/locale/bitcoin_fi.ts b/src/qt/locale/bitcoin_fi.ts index 3ccbfa5712..7b33645ef1 100644 --- a/src/qt/locale/bitcoin_fi.ts +++ b/src/qt/locale/bitcoin_fi.ts @@ -2344,6 +2344,10 @@ Huom: Koska siirtomaksu lasketaan tavujen mukaan, niin määrittelemällä 500 t %1 to %2 %1 to %2 + + Do you want to draft this transaction? + Haluatko laatia tämän siirron? + Are you sure you want to send? Oletko varma, että haluat lähettää? @@ -2495,6 +2499,10 @@ Huom: Koska siirtomaksu lasketaan tavujen mukaan, niin määrittelemällä 500 t Remove this entry Poista tämä alkio + + The amount to send in the selected unit + Lähetettävä summa valitussa yksikössä + The fee will be deducted from the amount being sent. The recipient will receive less vertcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally. Kulu vähennetään lähetettävästä määrästä. Saaja vastaanottaa vähemmän vertcoineja kuin merkitset Määrä-kenttään. Jos saajia on monia, kulu jaetaan tasan. @@ -2621,6 +2629,10 @@ Huom: Koska siirtomaksu lasketaan tavujen mukaan, niin määrittelemällä 500 t The Vertcoin address the message was signed with Vertcoin-osoite jolla viesti on allekirjoitettu + + The signed message to verify + Allekirjoitettu viesti vahvistettavaksi + Verify the message to ensure it was signed with the specified Vertcoin address Tarkista viestin allekirjoitus varmistaaksesi, että se allekirjoitettiin tietyllä Vertcoin-osoitteella @@ -2827,6 +2839,10 @@ Huom: Koska siirtomaksu lasketaan tavujen mukaan, niin määrittelemällä 500 t Transaction virtual size Tapahtuman näennäiskoko + + Output index + Ulostulon indeksi + (Certificate was not verified) (Sertifikaattia ei vahvistettu) @@ -3184,6 +3200,10 @@ Huom: Koska siirtomaksu lasketaan tavujen mukaan, niin määrittelemällä 500 t Do you want to increase the fee? Haluatko nostaa siirtomaksua? + + Do you want to draft a transaction with fee increase? + Haluatko nostaa siirtomaksua siirtoon? + Current fee: Nykyinen palkkio: @@ -3354,6 +3374,10 @@ Huom: Koska siirtomaksu lasketaan tavujen mukaan, niin määrittelemällä 500 t Cannot resolve -%s address: '%s' -%s -osoitteen '%s' selvittäminen epäonnistui + + Change index out of range + Vaihda hakemisto alueen ulkopuolelle + Copyright (C) %i-%i Tekijänoikeus (C) %i-%i diff --git a/src/qt/locale/bitcoin_he.ts b/src/qt/locale/bitcoin_he.ts index 344ed53216..df7bc548d2 100644 --- a/src/qt/locale/bitcoin_he.ts +++ b/src/qt/locale/bitcoin_he.ts @@ -483,6 +483,14 @@ Up to date עדכני + + Node window + חלון צומת + + + Open node debugging and diagnostic console + פתיחת ניפוי באגים בצומת וגם מסוף בקרה לאבחון + &Sending addresses &כתובות למשלוח @@ -491,6 +499,10 @@ &Receiving addresses &כתובות לקבלה + + Open a bitcoin: URI + פתיחת ביטקוין: כתובת משאב + Open Wallet פתיחת ארנק @@ -788,7 +800,27 @@ Create Wallet צור ארנק. - + + Wallet Name + שם הארנק + + + Encrypt Wallet + הצפנת ארנק + + + Disable Private Keys + השבתת מפתחות פרטיים + + + Make Blank Wallet + צור ארנק ריק + + + Create + צור + + EditAddressDialog @@ -1006,6 +1038,10 @@ OpenURIDialog + + Open bitcoin URI + פתיחת כתובת משאב ביטקוין + URI: כתובת משאב: @@ -1013,6 +1049,14 @@ OpenWalletActivity + + Open wallet failed + פתיחת ארנק נכשלה + + + Open wallet warning + אזהרת פתיחת ארנק + default wallet ארנק בררת מחדל @@ -1551,6 +1595,10 @@ Error encoding URI into QR Code. שגיאה בקידוד ה URI לברקוד. + + QR code support not available. + תמיכה בקוד QR לא זמינה. + Save QR Code שמירת קוד QR @@ -1690,10 +1738,18 @@ Synced Blocks בלוקים מסונכרנים + + Mapped AS + מופה בתור + User Agent סוכן משתמש + + Node window + חלון צומת + Open the %1 debug log file from the current data directory. This can take a few seconds for large log files. פתחו את לוג ניפוי השגיאות ה%1 מתיקיית הנתונים הנוכחית. עבור קבצי לוג גדולים ייתכן זמן המתנה של מספר שניות. @@ -1844,7 +1900,7 @@ (node id: %1) - (node id: %1) + (מזהה צומת: %1) via %1 @@ -1905,6 +1961,10 @@ An optional amount to request. Leave this empty or zero to not request a specific amount. סכום כרשות לבקשה. ניתן להשאיר זאת ריק כדי לא לבקש סכום מסוים. + + &Create new receiving address + &יצירת כתובת קבלה חדשה + Clear all fields of the form. ניקוי של כל השדות בטופס. @@ -2154,6 +2214,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Dust: אבק: + + Hide transaction fee settings + הסתרת הגדרות עמלת עסקה + 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 vertcoin transactions than the network can process. כאשר יש פחות נפח עסקאות מאשר מקום בבלוק, כורים וכן צמתות מקשרות יכולות להכתיב עמלות מינימום. התשלום של עמלת מינימום הנו תקין, אך יש לקחת בחשבון שהדבר יכול לגרום לעסקה שלא תאושר ברגע שיש יותר ביקוש לעסקאות ביטקוין מאשר הרשת יכולה לעבד. @@ -2222,6 +2286,22 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p %1 (%2 blocks) %1 (%2 בלוקים) + + Cr&eate Unsigned + יצ&ירת לא חתום + + + Creates a Partially Signed Bitcoin Transaction (PSBT) for use with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet. + יוצר עסקת ביטקוין חתומה חלקית (PSBT) לשימוש עם ארנק %1 לא מחובר למשל, או עם PSBT ארנק חומרה תואם. + + + from wallet '%1' + מתוך ארנק '%1' + + + %1 to '%2' + %1 אל '%2' + %1 to %2 %1 ל %2 @@ -2258,6 +2338,18 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Confirm send coins אימות שליחת מטבעות + + Copy PSBT to clipboard + העתקת PSBT אל לוח הגזירים + + + Send + שלח + + + PSBT copied + PSBT הועתקה + The recipient address is not valid. Please recheck. כתובת הנמען שגויה. נא לבדוק שוב. @@ -2479,6 +2571,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p The Vertcoin address the message was signed with כתובת הביטקוין שאתה נחתמה ההודעה + + The signed message to verify + ההודעה החתומה לאימות + Verify the message to ensure it was signed with the specified Vertcoin address ניתן לאמת את ההודעה כדי להבטיח שהיא נחתמה עם כתובת הביטקוין הנתונה @@ -2511,6 +2607,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Wallet unlock was cancelled. שחרור הארנק בוטל. + + No error + אין שגיאה + Private key for the entered address is not available. המפתח הפרטי לכתובת שהוכנסה אינו זמין. @@ -2685,13 +2785,17 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Output index מפתח פלט + + (Certificate was not verified) + (האישור לא אומת) + Merchant סוחר 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. - מטבעות מופקים חייבים להבשיל במשך %1 בלוקים לפני שניתן לבזבזם. כשהפקתם בלוק זה, הבלוק שודר לרשת לצורך הוספה לבלוקצ'יין. אם הבלוק לא יתווסף לבלוקצ'יין, מצב הבלוק ישונה ל "לא התקבל" ולא יהיה ניתן לבזבזו. מצב זה עלול לקרות כאשר שרת ביטקוין אחר מפיק בלוק בהפרש של כמה שניות משלכם. + מטבעות מופקים חייבים להבשיל במשך %1 בלוקים לפני שניתן לבזבזם. כשהפקתם בלוק זה, הבלוק שודר לרשת לצורך הוספה לבלוקצ'יין. אם הבלוק לא יתווסף לבלוקצ'יין, מצב הבלוק ישונה ל"לא התקבל" ולא יהיה ניתן לבזבזו. מצב זה עלול לקרות כאשר צומת אחרת מפיקה בלוק בהפרש של כמה שניות משלכם. Debug information @@ -3008,6 +3112,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Close wallet סגירת ארנק + + Are you sure you wish to close the wallet <i>%1</i>? + האם את/ה בטוח/ה שברצונך לסגור את הארנק <i>%1</i>? + Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. סגירת הארנק למשך זמן רב מדי יכול לגרור את הצורך לסינכרון מחדש של כל השרשרת אם אופצית הגיזום אקטיבית. @@ -3054,6 +3162,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Confirm fee bump אישור הקפצת עמלה + + PSBT copied + PSBT הועתקה + Can't sign transaction. אי אפשר לחתום על ההעברה. @@ -3276,6 +3388,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Initialization sanity check failed. %s is shutting down. איתחול של תהליך בדיקות השפיות נכשל. %s בתהליך סגירה. + + Invalid P2P permission: '%s' + הרשאת P2P שגויה: '%s' + Invalid amount for -%s=<amount>: '%s' סכום שגוי עבור ‎-%s=<amount>:‏ '%s' @@ -3292,6 +3408,14 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Specified blocks directory "%s" does not exist. התיקיה שהוגדרה "%s" לא קיימת. + + Unknown address type '%s' + כתובת לא ידועה מסוג "%s" + + + Unknown change type '%s' + סוג שינוי לא ידוע: "%s" + Upgrading txindex database שדרוג מאגר נתוני txindex  diff --git a/src/qt/locale/bitcoin_hi.ts b/src/qt/locale/bitcoin_hi.ts index af95c45e30..ff0d011590 100644 --- a/src/qt/locale/bitcoin_hi.ts +++ b/src/qt/locale/bitcoin_hi.ts @@ -167,24 +167,84 @@ 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>. + वॉलेट में नया सुरक्षा संवाद दर्ज करें | कृपया दस या उससे अधिक, या फिर आठ या उससे अधिक अव्यवस्थित अंको से ही अपना सुरक्षा संवाद बनाएं । + + + Enter the old passphrase and new passphrase for the wallet. + वॉलेट में पुराना एवं नया सुरक्षा संवाद दर्ज करें । + + + 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. + वॉलेट डिक्रिप्शन के लिए दर्ज किया गया पासफ़्रेज़ गलत था। + Wallet decryption failed वॉलेट डिक्रिप्शन विफल - + + Wallet passphrase was successfully changed. + वॉलेट पासफ़्रेज़ को सफलतापूर्वक बदल दिया गया था। + + + Warning: The Caps Lock key is on! + चेतावनी: कैप्स लॉक कुंजी चालू है! + + BanTableModel - + + IP/Netmask + आईपी /नेटमास्क "Netmask" + + + Banned Until + तक बैन कर दिया + + BitcoinGUI + + Sign &message... + हस्ताक्षर और संदेश ... + Synchronizing with network... नेटवर्क से समकालिक (मिल) रहा है ... @@ -214,14 +274,38 @@ Quit application अप्लिकेशन से बाहर निकलना ! + + &About %1 + और %1 के बारे में + + + Show information about %1 + %1 के बारे में जानकारी दिखाएं + + + About &Qt + के बारे में और क्यूटी "Qt" + + + Show information about Qt + क्यूटी "Qt" के बारे में जानकारी दिखाएँ + &Options... &विकल्प + + &Encrypt Wallet... + और वॉलेट को गोपित "एन्क्रिप्ट" करें + &Backup Wallet... &बैकप वॉलेट + + &Change Passphrase... + और पासफ़्रेज़ बदलें + Wallet: तिजोरी diff --git a/src/qt/locale/bitcoin_hu.ts b/src/qt/locale/bitcoin_hu.ts index 95e7f6a4dc..b8604791d7 100644 --- a/src/qt/locale/bitcoin_hu.ts +++ b/src/qt/locale/bitcoin_hu.ts @@ -549,6 +549,10 @@ Error: %1 Hiba: %1 + + Warning: %1 + Vigyázz: %1 + Date: %1 @@ -805,6 +809,10 @@ 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. A tárcához tartozó privát kulcsok letiltása. Azok a tárcák, melyeknél a privát kulcsok le vannak tiltva, nem tartalmaznak privát kulcsokat és nem tartalmazhatnak HD magot vagy importált privát kulcsokat. Ez azoknál a tárcáknál ideális, melyeket csak megfigyelésre használnak. + + Disable Private Keys + Kapcsold ki a Privát Kódot + 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. Üres tárca készítése. Az üres tárcák kezdetben nem tartalmaznak privát kulcsokat vagy szkripteket. Később lehetséges a privát kulcsok vagy címek importálása avagy egy HD mag beállítása. diff --git a/src/qt/locale/bitcoin_id.ts b/src/qt/locale/bitcoin_id.ts index a27814875e..12778126e1 100644 --- a/src/qt/locale/bitcoin_id.ts +++ b/src/qt/locale/bitcoin_id.ts @@ -1137,6 +1137,10 @@ Hide Sembunyikan + + Esc + Keluar + %1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain. %1 menyinkronkan. Program ini akan mengunduh header dan blok dari rekan dan memvalidasi sampai blok terbaru. @@ -2330,6 +2334,10 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Dust: Dust: + + Hide transaction fee settings + Sembunyikan pengaturan biaya transaksi + 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 vertcoin transactions than the network can process. Ketika volume transaksi lebih sedikit daripada ruang di blok, penambang serta simpul yang menyiarkanikan dapat memberlakukan biaya minimum. Anda boleh hanya membayar biaya minimum, tetapi perlu diketahui bahwa ini dapat menghasilkan transaksi yang tidak pernah dikonfirmasi setelah ada lebih banyak permintaan untuk transaksi vertcoin daripada yang dapat diproses jaringan. @@ -2410,6 +2418,10 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" %1 to %2 %1 ke %2 + + Do you want to draft this transaction? + Apakah anda ingin menjadikan transaksi ini sebagai konsep? + Are you sure you want to send? Apakah anda yakin ingin mengirimkan? @@ -2446,6 +2458,18 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Confirm send coins Konfirmasi pengiriman koin + + Confirm transaction proposal + Konfirmasi proposal transaksi + + + Copy PSBT to clipboard + Salin PSBT ke papan klip + + + Send + Kirim + PSBT copied PSBT disalin @@ -2545,6 +2569,10 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Remove this entry Hapus masukan ini + + The amount to send in the selected unit + Jumlah yang ingin dikirim dalam unit yang dipilih + The fee will be deducted from the amount being sent. The recipient will receive less vertcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally. Biaya akan diambil dari jumlah yang dikirim. Penerima akan menerima vertcoin lebih sedikit daripada yang di masukkan di bidang jumlah. Jika ada beberapa penerima, biaya dibagi rata. @@ -2667,6 +2695,10 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" The Vertcoin address the message was signed with Alamat Vertcoin yang menandatangani pesan + + The signed message to verify + Pesan yang ditandatangani untuk diverifikasi + Verify the message to ensure it was signed with the specified Vertcoin address Verifikasi pesan untuk memastikannya ditandatangani dengan alamat Vertcoin tersebut @@ -2789,10 +2821,30 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Source Sumber + + Generated + Dihasilkan + + + From + Dari + unknown tidak diketahui + + To + Untuk + + + own address + alamat milik sendiri + + + watch-only + hanya-melihat + label label @@ -2821,6 +2873,10 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Transaction fee Biaya Transaksi + + Net amount + Jumlah bersih + Message Pesan @@ -2833,6 +2889,26 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Transaction ID ID Transaksi + + Transaction total size + Ukuran transaksi total + + + Transaction virtual size + Ukuran transaksi virtual + + + Output index + Indeks outpu + + + (Certificate was not verified) + (Sertifikat tidak diverifikasi) + + + Merchant + Penjual + Debug information Informasi debug @@ -2841,6 +2917,10 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Transaction Transaksi + + Inputs + Input + Amount Jumlah @@ -2879,6 +2959,10 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Label Label + + Open for %n more block(s) + Buka %n untuk blok lebih + Open until %1 Buka sampai %1 @@ -2887,6 +2971,18 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Unconfirmed Belum dikonfirmasi + + Confirmed (%1 confirmations) + Dikonfirmasi (%1 konfirmasi) + + + Conflicted + Bertentangan + + + Generated but not accepted + Dihasilkan tapi tidak diterima + Received with Diterima dengan @@ -2899,10 +2995,26 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Sent to Dikirim ke + + Payment to yourself + Pembayaran untuk diri sendiri + + + Mined + Ditambang + + + watch-only + hanya-melihat + (no label) (tidak ada label) + + Transaction status. Hover over this field to show number of confirmations. + Status transaksi. Arahkan kursor ke bidang ini untuk menampilkan jumlah konfirmasi. + Date and time that the transaction was received. Tanggal dan waktu transaksi telah diterima. @@ -2911,7 +3023,19 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Type of transaction. Tipe transaksi. - + + Whether or not a watch-only address is involved in this transaction. + Apakah alamat hanya-melihat terlibat dalam transaksi ini atau tidak. + + + User-defined intent/purpose of the transaction. + maksud/tujuan transaksi yang ditentukan pengguna. + + + Amount removed from or added to balance. + Jumlah dihapus dari atau ditambahkan ke saldo. + + TransactionView @@ -2938,6 +3062,10 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" This year Tahun ini + + Range... + Jarak... + Received with Diterima dengan @@ -2946,6 +3074,14 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Sent to Dikirim ke + + To yourself + Untuk diri sendiri + + + Mined + Ditambang + Other Lainnya @@ -2982,6 +3118,10 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Copy transaction ID Salain ID Transaksi + + Copy raw transaction + Salin transaksi yang belum diproses + Copy full transaction details Salin detail transaksi @@ -3006,6 +3146,10 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Confirmed Terkonfirmasi + + Watch-only + Hanya-melihat + Date Tanggal @@ -3030,30 +3174,66 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Exporting Failed Mengekspor Gagal + + There was an error trying to save the transaction history to %1. + Terjadi kesalahan saat mencoba menyimpan riwayat transaksi ke %1. + Exporting Successful Ekspor Berhasil - + + The transaction history was successfully saved to %1. + Riwayat transaksi berhasil disimpan ke %1. + + + Range: + Jarak: + + + to + untuk + + UnitDisplayStatusBarControl - + + Unit to show amounts in. Click to select another unit. + Unit untuk menunjukkan jumlah. Klik untuk memilih unit lain. + + WalletController Close wallet Tutup wallet - + + Are you sure you wish to close the wallet <i>%1</i>? + Apakah anda yakin ingin menutup dompet <i>%1</i>? + + + Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. + Menutup dompet terlalu lama dapat menyebabkan harus menyinkron ulang seluruh rantai jika pemangkasan diaktifkan. + + WalletFrame - + + No wallet has been loaded. + Tidak ada dompent yang dimuat. + + WalletModel Send Coins Kirim Koin + + Fee bump error + Kesalahan biaya tagihan + Increasing transaction fee failed Gagal meningkatkan biaya transaksi @@ -3062,6 +3242,10 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Do you want to increase the fee? Apa Anda ingin meningkatkan biayanya? + + Do you want to draft a transaction with fee increase? + Apakah anda ingin membuat draf transaksi dengan kenaikan biaya? + Current fee: Biaya saat ini: @@ -3074,10 +3258,26 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" New fee: Biaya baru: + + Confirm fee bump + Konfirmasi biaya tambahan + + + Can't draft transaction. + Tidak dapat membuat konsep transaksi. + PSBT copied PSBT disalin + + Can't sign transaction. + Tidak dapat menandatangani transaksi. + + + Could not commit transaction + Tidak dapat melakukan transaksi + default wallet wallet default @@ -3093,14 +3293,30 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Export the data in the current tab to a file Ekspor data dalam tab sekarang ke sebuah berkas + + Backup Wallet + Cadangkan Dompet + + + Wallet Data (*.dat) + Data Dompet (*.dat) + Backup Failed Pencadangan Gagal + + There was an error trying to save the wallet data to %1. + Terjadi kesalahan saat mencoba menyimpan data dompet ke %1. + Backup Successful Pencadangan Berhasil + + The wallet data was successfully saved to %1. + Data dompet berhasil disimpan ke %1. + Cancel Batal @@ -3108,6 +3324,66 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" vertcoin-core + + Distributed under the MIT software license, see the accompanying file %s or %s + Didistribusikan di bawah lisensi perangkat lunak MIT, lihat berkas terlampir %s atau %s + + + Prune configured below the minimum of %d MiB. Please use a higher number. + Pemangkasan dikonfigurasikan di bawah minimum dari %d MiB. Harap gunakan angka yang lebih tinggi. + + + Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node) + Pemangkasan: sinkronisasi dompet terakhir melampaui data yang sudah dipangkas. Anda perlu -reindex (unduh seluruh blockchain lagi jika terjadi node pemangkasan) + + + Error: A fatal internal error occurred, see debug.log for details + Error: Kesalahan internal fatal terjadi, lihat debug.log untuk detailnya + + + Pruning blockstore... + Memangkas blockstore... + + + Unable to start HTTP server. See debug log for details. + Tidak dapat memulai server HTTP. Lihat log debug untuk detailnya. + + + The %s developers + Pengembang %s + + + Cannot obtain a lock on data directory %s. %s is probably already running. + Tidak dapat memperoleh kunci pada direktori data %s. %s mungkin sudah berjalan. + + + Error reading %s! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + Kesalahan membaca %s! Semua kunci dibaca dengan benar, tetapi data transaksi atau entri buku alamat mungkin hilang atau salah. + + + Please check that your computer's date and time are correct! If your clock is wrong, %s will not work properly. + Periksa apakah tanggal dan waktu komputer anda benar! Jika jam anda salah, %s tidak akan berfungsi dengan baik. + + + Please contribute if you find %s useful. Visit %s for further information about the software. + Silakan berkontribusi jika %s berguna. Kunjungi %s untuk informasi lebih lanjut tentang perangkat lunak. + + + 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 + Blok basis data berisi blok yang tampaknya berasal dari masa depan. Ini mungkin karena tanggal dan waktu komputer anda diatur secara tidak benar. Bangun kembali blok basis data jika anda yakin tanggal dan waktu komputer anda benar + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + Ini adalah uji coba pra-rilis - gunakan dengan risiko anda sendiri - jangan digunakan untuk aplikasi penambangan atau penjual + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Peringatan: Jaringan tampaknya tidak sepenuhnya setuju! Beberapa penambang tampaknya mengalami masalah. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Peringatan: Kami tampaknya tidak sepenuhnya setuju dengan peers kami! Anda mungkin perlu memutakhirkan, atau nodes lain mungkin perlu dimutakhirkan. + Corrupted block database detected Menemukan database blok yang rusak @@ -3140,26 +3416,128 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Incorrect or no genesis block found. Wrong datadir for network? Tidak bisa cari blok pertama, atau blok pertama salah. Salah direktori untuk jaringan? + + Loading P2P addresses... + Memuat alamat P2P.... + Error: Disk space is too low! Eror: Kapasitas penyimpanan penuh! + + Loading banlist... + Memuat banlist... + Not enough file descriptors available. Deskripsi berkas tidak tersedia dengan cukup. + + Prune cannot be configured with a negative value. + Pemangkasan tidak dapat dikonfigurasi dengan nilai negatif. + + + The source code is available from %s. + Kode sumber tersedia dari %s. + + + Transaction fee and change calculation failed + Biaya transaksi dan kalkulasi perubahan gagal + + + Unable to bind to %s on this computer. %s is probably already running. + Tidak dapat mengikat ke %s di komputer ini. %s mungkin sudah berjalan. + + + Unable to generate keys + Tidak dapat menghasilkan kunci + + + Unsupported logging category %s=%s. + Kategori logging yang tidak didukung %s=%s. + + + Upgrading UTXO database + Memutakhirkan basis data UTXO + + + User Agent comment (%s) contains unsafe characters. + Komentar Agen Pengguna (%s) berisi karakter yang tidak aman. + Verifying blocks... Blok-blok sedang diverifikasi... + + Wallet needed to be rewritten: restart %s to complete + Dompet harus ditulis ulang: mulai ulang %s untuk menyelesaikan + + + Error: Listening for incoming connections failed (listen returned error %s) + Error: Mendengarkan koneksi yang masuk gagal (dengarkan kesalahan yang dikembalikan %s) + + + The transaction amount is too small to send after the fee has been deducted + Jumlah transaksi terlalu kecil untuk dikirim setelah biaya dikurangi + + + You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain + Anda perlu membangun kembali basis data menggunakan -reindex untuk kembali ke mode tidak dipangkas. Ini akan mengunduh ulang seluruh blockchain + + + Error reading from database, shutting down. + Kesalahan membaca dari basis data, mematikan. + + + Error upgrading chainstate database + Kesalahan memutakhirkan basis data chainstate + Error: Disk space is low for %s Eror: Kapasitas penyimpanan penuh untuk %s + + Invalid -onion address or hostname: '%s' + Alamat -onion atau hostname tidak valid: '%s' + + + Invalid -proxy address or hostname: '%s' + Alamat proxy atau hostname tidak valid: '%s' + + + Invalid netmask specified in -whitelist: '%s' + Netmask tidak valid yang ditentukan di -whitelist: '%s' + + + Need to specify a port with -whitebind: '%s' + Perlu menentukan port dengan -whitebind: '%s' + + + Prune mode is incompatible with -blockfilterindex. + Mode pemangkasan tidak kompatibel dengan -blockfilterindex. + + + Section [%s] is not recognized. + Bagian [%s] tidak dikenali. + Signing transaction failed Tandatangani transaksi tergagal + + The specified config file %s does not exist + + Berkas konfigurasi %s yang ditentukan tidak ada + + + + The transaction amount is too small to pay the fee + Jumlah transaksi terlalu kecil untuk membayar biaya ongkos + + + This is experimental software. + Ini adalah perangkat lunak eksperimental. + Transaction amount too small Nilai transaksi terlalu kecil @@ -3168,10 +3546,34 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Transaction too large Transaksi terlalu besar + + Verifying wallet(s)... + Memverifikasi dompet... + Zapping all transactions from wallet... Setiap transaksi dalam dompet sedang di-'Zap'... + + %s is set very high! + %s diset sangat tinggi! + + + The wallet will avoid paying less than the minimum relay fee. + Dompet akan menghindari pembayaran kurang dari biaya minimum ongkos relay. + + + This is the minimum transaction fee you pay on every transaction. + Ini adalah ongkos transaksi minimum yang anda bayarkan untuk setiap transaksi. + + + This is the transaction fee you will pay if you send a transaction. + Ini adalah ongkos transaksi yang akan anda bayarkan jika anda mengirim transaksi. + + + Transaction amounts must not be negative + Jumlah transaksi tidak boleh negatif + Transaction has too long of a mempool chain Transaksi mempunyai rantai mempool yang terlalu panjang @@ -3188,6 +3590,14 @@ Catatan: Karena biaya dihitung berdasarkan per byte, biaya "100 satoshi per kB" Insufficient funds Saldo tidak mencukupi + + Warning: Private keys detected in wallet {%s} with disabled private keys + Peringatan: Kunci pribadi terdeteksi di dompet {%s} dengan kunci pribadi yang dinonaktifkan + + + Cannot write to data directory '%s'; check permissions. + Tidak dapat menulis ke direktori data '%s'; periksa izinnya. + Loading block index... Memuat indeks blok... diff --git a/src/qt/locale/bitcoin_ko.ts b/src/qt/locale/bitcoin_ko.ts index aadcd7ee0e..909311a82b 100644 --- a/src/qt/locale/bitcoin_ko.ts +++ b/src/qt/locale/bitcoin_ko.ts @@ -497,6 +497,10 @@ &Receiving addresses 받는 주소(&R) + + Open a bitcoin: URI + bitcoin: URI 열기 + Open Wallet 지갑 열기 @@ -806,15 +810,27 @@ Wallet Name 지갑 이름 + + Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice. + 지갑 암호화하기. 해당 지갑은 당신이 설정한 문자열 비밀번호로 암호화될 겁니다. + Encrypt Wallet 지갑 암호화 + + Disable Private Keys + 개인키 비활성화 하기 + Make Blank Wallet 빈 지갑 만들기 - + + Create + 생성하기 + + EditAddressDialog @@ -978,7 +994,11 @@ (of %n GB needed) (%n GB가 필요) - + + (%n GB needed for full chain) + (Full 체인이 되려면 %n GB 가 필요합니다) + + ModalOverlay @@ -1025,6 +1045,10 @@ Hide 숨기기 + + Esc + Esc + Unknown. Syncing Headers (%1, %2%)... 알 수 없음. 헤더 동기화 중(%1,%2%)... @@ -1032,6 +1056,10 @@ OpenURIDialog + + Open bitcoin URI + 비트코인 URI 열기 + URI: URI: @@ -1039,6 +1067,14 @@ OpenWalletActivity + + Open wallet failed + 지갑 열기 실패 + + + Open wallet warning + 지갑 열기 경고 + default wallet 기본 지갑 @@ -1416,6 +1452,18 @@ 'vertcoin://' is not a valid URI. Use 'vertcoin:' instead. 'vertcoin://"은 잘못된 URI입니다. 'vertcoin:'을 사용하십시오. + + Cannot process payment request because BIP70 is not supported. + BIP70을 지원하지 않아서 지불 요청을 처리할 수 없습니다. + + + Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored. + BIP70의 보안적 결함 때문에 상점에 불문하고 "지갑을 바꾸라"라는 권고 또는 지시는 대부분의 경우 무시하는 방법을 강력하게 권장합니다. + + + If you are receiving this error you should request the merchant provide a BIP21 compatible URI. + 만약 이 오류 메시지가 보인다면, 상점에 BIP21이 호환되는 URI를 제공해달라고 요청해주세요. + Invalid payment address %1 잘못된 지불 주소 %1 @@ -1577,6 +1625,10 @@ Error encoding URI into QR Code. URI를 QR 코드로 인코딩하는 중 오류가 발생했습니다. + + QR code support not available. + QR 코드를 지원하지 않습니다. + Save QR Code QR코드 저장 @@ -1935,6 +1987,10 @@ An optional amount to request. Leave this empty or zero to not request a specific amount. 요청할 금액 입력칸으로 선택 사항입니다. 빈 칸으로 두거나 특정 금액이 필요하지 않는 경우 0을 입력하세요. + + &Create new receiving address + &새 받을 주소 생성하기 + Clear all fields of the form. 양식의 모든 필드를 지웁니다. @@ -2184,6 +2240,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Dust: 더스트: + + Hide transaction fee settings + 거래 수수료 설정 숨기기 + 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 vertcoin transactions than the network can process. 거래량이 블록에 남은 공간보다 적은 경우에는 채굴자나 중계 노드들이 최소 수수료를 허용할 수 있습니다. 최소 수수료만 지불하는건 괜찮지만, 네트워크가 처리할 수 있는 용량을 넘는 비트코인 거래가 있을 경우에는 이 거래가 승인이 안될 수 있다는 점을 유의하세요. @@ -2252,6 +2312,14 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p %1 (%2 blocks) %1(%2 블록) + + from wallet '%1' + %1 지갑에서 + + + %1 to '%2' + %1을(를) %2(으)로 + %1 to %2 %1을(를) %2(으)로 @@ -2288,6 +2356,22 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Confirm send coins 코인 전송을 확인 + + Copy PSBT to clipboard + PSBT를 클립보드에 복사 + + + Send + 보내기 + + + PSBT copied + PSBT 복사됨 + + + Watch-only balance: + 조회전용 잔액: + The recipient address is not valid. Please recheck. 수령인 주소가 정확하지 않습니다. 재확인 바랍니다 @@ -2541,6 +2625,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Wallet unlock was cancelled. 지갑 잠금 해제를 취소했습니다. + + No error + 오류 없음 + Private key for the entered address is not available. 입력한 주소에 대한 개인키가 없습니다. @@ -2715,6 +2803,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Output index 출력 인덱스 + + (Certificate was not verified) + (인증서가 확인되지 않았습니다) + Merchant 상점 @@ -3038,6 +3130,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Close wallet 지갑 닫기 + + Are you sure you wish to close the wallet <i>%1</i>? + 정말로 지갑 <i>%1</i> 을 닫겠습니까? + Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. 블록축소를 하고 지갑을 너무 오랫동안 닫으면 체인 전체를 다시 동기화해야 할 수도 있습니다. @@ -3084,6 +3180,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Confirm fee bump 수수료 상향 승인 + + PSBT copied + PSBT 복사됨 + Can't sign transaction. 거래에 서명 할 수 없습니다. @@ -3250,6 +3350,14 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Corrupted block database detected 손상된 블록 데이터베이스가 감지되었습니다 + + Could not find asmap file %s + asmap file %s 을/를 찾을 수 없습니다 + + + Could not parse asmap file %s + asmap file %s 을/를 파싱할 수 없습니다 + Do you want to rebuild the block database now? 블록 데이터베이스를 다시 생성하시겠습니까? @@ -3306,6 +3414,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Initialization sanity check failed. %s is shutting down. 무결성 확인 초기화가 실패했습니다. %s가 종료됩니다. + + Invalid P2P permission: '%s' + 잘못된 P2P 권한: '%s' + Invalid amount for -%s=<amount>: '%s' 유효하지 않은 금액 -%s=<amount>: '%s' @@ -3322,6 +3434,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Specified blocks directory "%s" does not exist. 지정한 블록 디렉토리 "%s" 가 존재하지 않습니다. + + Unknown change type '%s' + 알 수 없는 변경 형식 '%s' + Upgrading txindex database txindex 데이터베이스 업테이트중 @@ -3330,6 +3446,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Loading P2P addresses... P2P 주소 불러오는 중... + + Error: Disk space is too low! + 오류: 디스크 공간이 부족합니다! + Loading banlist... 추방리스트를 불러오는 중... @@ -3438,6 +3558,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Need to specify a port with -whitebind: '%s' -whitebind: '%s' 를 이용하여 포트를 지정해야 합니다 + + Prune mode is incompatible with -blockfilterindex. + 블록 축소 모드는 -blockfileterindex와 호환되지 않습니다. + Reducing -maxconnections from %d to %d, because of system limitations. 시스템 한계로 인하여 -maxconnections를 %d 에서 %d로 줄였습니다. @@ -3496,6 +3620,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Unable to generate initial keys 초기 키값 생성 불가 + + Unknown -blockfilterindex value %s. + 알 수 없는 -blockfileterindex 값 %s. + Verifying wallet(s)... 지갑 검증중... diff --git a/src/qt/locale/bitcoin_lv.ts b/src/qt/locale/bitcoin_lv.ts index 86dca48d0e..ecef210483 100644 --- a/src/qt/locale/bitcoin_lv.ts +++ b/src/qt/locale/bitcoin_lv.ts @@ -49,6 +49,18 @@ Choose the address to receive coins with Izvēlies adresi ar kuru saņemt vertcoins + + C&hoose + Izvēlēties + + + Sending addresses + Adrešu nosūtīšana + + + Receiving addresses + Adrešu saņemšana + &Copy Address &Kopēt adresi diff --git a/src/qt/locale/bitcoin_nb.ts b/src/qt/locale/bitcoin_nb.ts index 9b2611b5bc..95b95b0c1f 100644 --- a/src/qt/locale/bitcoin_nb.ts +++ b/src/qt/locale/bitcoin_nb.ts @@ -69,6 +69,10 @@ These are your Vertcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. Dette er dine Vertcoin adresser for å sende å sende betalinger. Husk å sjekke beløp og mottager adresser før du sender mynter. + + These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. + Dette er dine Bitcoin adresse for å betalinger. Det er anbefalt å bruke en my mottager adresse for hver transakjon. + &Copy Address &Kopier adresse @@ -131,6 +135,10 @@ Repeat new passphrase Repeter passorsetningen + + Show passphrase + Vis adgangsfrase + Encrypt wallet Krypter lommeboken @@ -171,10 +179,30 @@ Wallet encrypted Lommeboken er kryptert + + 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>. + Angi den nye passordfrasen for lommeboken.<br/> Vennglist du bruker en passordfrase <b> ti eller tilfeldige tegn </b>, eller <b> åtte eller flere ord. + + + Enter the old passphrase and new passphrase for the wallet. + Svriv inn den gamle passfrasen og den nye passordfrasen for lommeboken. + Remember that encrypting your wallet cannot fully protect your vertcoins from being stolen by malware infecting your computer. Husk at å kryptere lommeboken ikke vil beskytte dine vertcoins fullstendig fra å bli stjålet av skadevare som infiserer datamaskinen din. + + Wallet to be encrypted + Lommebok som skal bli kryptert + + + Your wallet is about to be encrypted. + Din lommebok er i ferd med å bli kryptert. + + + Your wallet is now encrypted. + Din lommebok er nå kryptert. + 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. VIKTIG: Alle tidligere sikkerhetskopier du har tatt av lommebokfilen bør erstattes med den nye krypterte lommebokfilen. Av sikkerhetsgrunner vil tidligere sikkerhetskopier av lommebokfilen bli ubrukelige når du begynner å bruke den ny kypterte lommeboken. @@ -297,6 +325,14 @@ Open &URI... Åpne &URI + + Create Wallet... + Lag lommebok... + + + Create a new wallet + Lag en ny lommebok + Wallet: Lommebok: @@ -449,6 +485,14 @@ Up to date Oppdatert + + Node window + Nodevindu + + + Open node debugging and diagnostic console + Åpne nodens konsoll for feilsøk og diagnostikk + &Sending addresses &Avsender adresser @@ -457,6 +501,10 @@ &Receiving addresses &Mottaker adresser + + Open a bitcoin: URI + Åpne en bitcoin: URI + Open Wallet Åpne Lommebok @@ -517,6 +565,10 @@ Error: %1 Feil: %1 + + Warning: %1 + Advarsel: %1 + Date: %1 @@ -749,10 +801,58 @@ CreateWalletActivity - + + Creating Wallet <b>%1</b>... + Lager lommebok <b>%1<b>... + + + Create wallet failed + Lage lommebok feilet + + + Create wallet warning + Lag lommebokvarsel + + CreateWalletDialog - + + Create Wallet + Lag lommebok + + + Wallet Name + Lommeboknavn + + + Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice. + Krypter lommeboken. Lommeboken blir kryptert med en passordfrase du velger. + + + Encrypt Wallet + Krypter Lommebok + + + 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. + Deaktiver private nøkler for denne lommeboken. Lommebøker med private nøkler er deaktivert vil ikke ha noen private nøkler og kan ikke ha en HD seed eller importerte private nøkler. Dette er ideelt for loomebøker som kun er klokker. + + + Disable Private Keys + Deaktiver Private Nøkler + + + 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. + Lag en tom lommebok. Tomme lommebøker har i utgangspunktet ikke private nøkler eller skript. Private nøkler og adresser kan importeres, eller et HD- frø kan angis på et senere tidspunkt. + + + Make Blank Wallet + Lag Tom Lommebok + + + Create + Opprett + + EditAddressDialog @@ -795,6 +895,10 @@ Address "%1" already exists as a receiving address with label "%2" and so cannot be added as a sending address. Adresse "%1" eksisterer allerede som en mottaksadresse merket "%2" og kan derfor ikke bli lagt til som en sendingsadresse. + + The entered address "%1" is already in the address book with label "%2". + Den oppgitte adressen ''%1'' er allerede i adresseboken med etiketten ''%2''. + Could not unlock wallet. Kunne ikke låse opp lommebok. @@ -860,6 +964,10 @@ When you click OK, %1 will begin to download and process the full %4 block chain (%2GB) starting with the earliest transactions in %3 when %4 initially launched. Når du klikker OK, vil %1 starte nedlasting og behandle hele den %4 blokkjeden (%2GB) fra de eldste transaksjonene i %3 når %4 først startet. + + 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. + Gjenoppretting av denne innstillingen krever at du laster ned hele blockchain på nytt. Det er raskere å laste ned hele kjeden først og beskjære den senere Deaktiver noen avanserte funksjoner. + 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. Den initielle synkroniseringen er svært krevende, og kan forårsake problemer med maskinvaren i datamaskinen din som du tidligere ikke merket. Hver gang du kjører %1 vil den fortsette nedlastingen der den sluttet. @@ -880,6 +988,10 @@ Vertcoin Vertcoin + + Discard blocks after verification, except most recent %1 GB (prune) + Kast blokker etter bekreftelse, bortsett fra de siste %1 GB (sviske) + At least %1 GB of data will be stored in this directory, and it will grow over time. Minst %1 GB data vil bli lagret i denne mappen og den vil vokse over tid. @@ -959,9 +1071,25 @@ Hide Skjul - + + 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 synkroniseres for øyeblikket. Den vil laste ned overskrifter og blokker fra jevnaldrende og validere dem til de når spissen av blokkjeden. + + + Unknown. Syncing Headers (%1, %2%)... + Ukjent.Synkroniser overskrifter (%1,%2%)... + + OpenURIDialog + + Open bitcoin URI + Åpne bitcoin URI + URI: URI: @@ -969,6 +1097,14 @@ OpenWalletActivity + + Open wallet failed + Åpne lommebok feilet + + + Open wallet warning + Advasel om åpen lommebok. + default wallet standard lommebok @@ -1052,10 +1188,22 @@ &Network &Nettverk + + Disables some advanced features but all blocks will still be fully validated. Reverting this setting requires re-downloading the entire blockchain. Actual disk usage may be somewhat higher. + Deaktiver noen avanserte funksjoner, men alle blokker vil fortsatt være fullglyldig. Gjenoppretting av denne innstillingen krever at du laster ned hele blockchain på nytt. Faktisk diskbruk kan være noe høvere. + + + Prune &block storage to + Beskjær og blokker lagring til + GB GB + + Reverting this setting requires re-downloading the entire blockchain. + Gjenoppretting av denne innstillingen krever at du laster ned hele blockchain på nytt + MiB MiB @@ -1184,6 +1332,10 @@ &Third party transaction URLs Tredjepart transaksjon URLer + + Options set in this dialog are overridden by the command line or in the configuration file: + Alternativer som er satt i denne dialogboksen overstyres av kommandolinjen eller i konfigurasjonsfilen: + &OK &OK @@ -1326,6 +1478,22 @@ URI handling URI-håndtering + + 'bitcoin://' is not a valid URI. Use 'bitcoin:' instead. + 'bitcoin: //' er ikke en gyldig URI. Bruk 'bitcoin:' i stedet. + + + Cannot process payment request because BIP70 is not supported. + Kan ikke behandle betalingsforespørsel fordi BIP70 ikke støttes. + + + Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored. + På grunn av utbredte sikkerhetsfeil i BIP70 anbefales det på det sterkeste at alle selgerinstruksjoner for å bytte lommebok ignoreres. + + + If you are receiving this error you should request the merchant provide a BIP21 compatible URI. + Hvis du mottar denne feilen, bør du be selgeren gi en BIP21-kompatibel URI. + Invalid payment address %1 Ugyldig betalingsadresse %1 @@ -1483,6 +1651,10 @@ Error encoding URI into QR Code. Feil ved koding av URI til QR-kode. + + QR code support not available. + Støtte for QR kode ikke tilgjengelig. + Save QR Code Lagre QR-kode @@ -1518,6 +1690,10 @@ Datadir Datamappe + + Blocksdir + Blocksdir + Startup time Oppstartstidspunkt @@ -1610,10 +1786,22 @@ Synced Blocks Synkroniserte Blokker + + The mapped Autonomous System used for diversifying peer selection. + Det kartlagte autonome systemet som brukes til å diversifisere valg av fagfeller. + + + Mapped AS + Kartlagt AS + User Agent Brukeragent + + Node window + Nodevindu + Open the %1 debug log file from the current data directory. This can take a few seconds for large log files. Åpne %1-feilrettingsloggfila fra gjeldende datamappe. Dette kan ta et par sekunder for store loggfiler. @@ -1754,6 +1942,14 @@ Network activity disabled Nettverksaktivitet avskrudd + + Executing command without any wallet + Utfør kommando uten noen lommebok + + + Executing command using "%1" wallet + Utfør kommando med lommebok "%1" + (node id: %1) (node id: %1) @@ -1817,6 +2013,18 @@ An optional amount to request. Leave this empty or zero to not request a specific amount. Et valgfritt beløp å etterspørre. La stå tomt eller null for ikke å etterspørre et spesifikt beløp. + + 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. + En valgfri etikett for å knytte til den nye mottaksadressen (brukt av deg for å identifisere en faktura). Det er også knyttet til betalingsforespørselen. + + + An optional message that is attached to the payment request and may be displayed to the sender. + En valgfri melding som er knyttet til betalingsforespørselen og kan vises til avsenderen. + + + &Create new receiving address + &Lag ny mottakeradresse + Clear all fields of the form. Fjern alle felter fra skjemaet. @@ -1825,6 +2033,14 @@ Clear Fjern + + Native segwit addresses (aka Bech32 or BIP-173) reduce your transaction fees later on and offer better protection against typos, but old wallets don't support them. When unchecked, an address compatible with older wallets will be created instead. + Innfødte segwit-adresser (også kalt Bech32 eller BIP-173) reduserer transaksjonsgebyrene senere og gir bedre beskyttelse mot skrivefeil, men gamle lommebøker støtter dem ikke. Når du ikke har merket av, opprettes en adresse som er kompatibel med eldre lommebøker. + + + Generate native segwit (Bech32) address + Generer nativ segwit (Bech32) adresse + Requested payments history Etterspurt betalingshistorikk @@ -2014,6 +2230,14 @@ Warning: Fee estimation is currently not possible. Advarsel: Gebyroverslag er ikke tilgjengelig for tiden. + + Specify a custom fee per kB (1,000 bytes) of the transaction's virtual size. + +Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis per kB" for a transaction size of 500 bytes (half of 1 kB) would ultimately yield a fee of only 50 satoshis. + Spesifiser en tilpasset avgift per kB (1000 byte) av transaksjonens virtuelle størrelse. + +Merk: Siden avgiften er beregnet per byte-basis, vil et gebyr på "100 satoshis per kB" for en transaksjonsstørrelse på 500 byte (halvparten av 1 kB) til slutt gi et gebyr på bare 50 satoshis. + per kilobyte per kilobyte @@ -2050,6 +2274,18 @@ Dust: Støv: + + Hide transaction fee settings + Skjul innstillinger for transaksjonsgebyr + + + 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. + Når det er mindre transaksjonsvolum enn plass i blokkene, kan gruvearbeidere så vel som videresende noder håndheve et minimumsgebyr. Å betale bare denne minsteavgiften er helt greit, men vær klar over at dette kan resultere i en aldri bekreftende transaksjon når det er større etterspørsel etter bitcoin-transaksjoner enn nettverket kan behandle. + + + A too low fee might result in a never confirming transaction (read the tooltip) + For lavt gebyr kan føre til en transaksjon som aldri bekreftes (les verktøytips) + Confirmation time target: Bekreftelsestidsmål: @@ -2110,10 +2346,18 @@ %1 (%2 blocks) %1 (%2 blokker) + + Cr&eate Unsigned + Cr & eate Usignert + %1 to %2 %1 til %2 + + Do you want to draft this transaction? + Vil du utarbeide denne transaksjonen? + Are you sure you want to send? Er du sikker på at du vil sende? @@ -2142,10 +2386,34 @@ Total Amount Totalbeløp + + To review recipient list click "Show Details..." + For å se gjennom mottakerlisten, klikk "Vis detaljer ..." + Confirm send coins Bekreft forsendelse av mynter + + Confirm transaction proposal + Bekreft transaksjonsforslaget + + + Copy PSBT to clipboard + Kopier PSBT til utklippstavlen + + + Send + Send + + + PSBT copied + PSBT kopiert + + + Watch-only balance: + Kun-observer balanse: + The recipient address is not valid. Please recheck. Mottakeradressen er ikke gyldig. Sjekk den igjen. @@ -2241,6 +2509,10 @@ Remove this entry Fjern denne oppføringen + + The amount to send in the selected unit + beløpet som skal sendes inn den valgte enheten. + The fee will be deducted from the amount being sent. The recipient will receive less vertcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally. Gebyret vil bli trukket fra beløpet som blir sendt. Mottakeren vil motta mindre vertcoins enn det du skriver inn i beløpsfeltet. Hvis det er valgt flere mottakere, deles gebyret likt. @@ -2367,6 +2639,14 @@ The Vertcoin address the message was signed with Vertcoin-adressen meldingen ble signert med + + The signed message to verify + Den signerte meldingen for å bekfrefte + + + The signature given when the message was signed + signaturen som ble gitt da meldingen ble signert + Verify the message to ensure it was signed with the specified Vertcoin address Verifiser meldingen for å være sikker på at den ble signert av den angitte Vertcoin-adressen @@ -2399,6 +2679,10 @@ Wallet unlock was cancelled. Opplåsning av lommebok ble avbrutt. + + No error + Ingen feil + Private key for the entered address is not available. Privat nøkkel for den angitte adressen er ikke tilgjengelig. @@ -2573,6 +2857,10 @@ Output index Utdatainndeks + + (Certificate was not verified) + (sertifikatet ble ikke bekreftet) + Merchant Forretningsdrivende @@ -2896,7 +3184,11 @@ Close wallet Lukk lommebok - + + Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. + Å lukke lommeboken for lenge kan føre til at du må synkronisere hele kjeden hvis beskjæring er aktivert. + + WalletFrame @@ -2922,6 +3214,10 @@ Do you want to increase the fee? Ønsker du å øke gebyret? + + Do you want to draft a transaction with fee increase? + Vil du utarbeide en transaksjon med gebyrøkning? + Current fee: Nåværede gebyr: @@ -2938,6 +3234,14 @@ Confirm fee bump Bekreft gebyrøkning + + Can't draft transaction. + Kan ikke utarbeide transaksjon. + + + PSBT copied + PSBT kopiert + Can't sign transaction. Kan ikke signere transaksjon @@ -3020,6 +3324,10 @@ The %s developers %s-utviklerne + + Can't generate a change-address key. No keys in the internal keypool and can't generate any keys. + Kan ikke generere en ledelse-nøkkel. Ingen taster i den interne tasten og kan ikke generere noen nøkler. + Cannot obtain a lock on data directory %s. %s is probably already running. Kan ikke låse datamappen %s. %s kjører antagelig allerede. @@ -3096,6 +3404,14 @@ Corrupted block database detected Oppdaget korrupt blokkdatabase + + Could not find asmap file %s + Kunne ikke finne asmap filen %s + + + Could not parse asmap file %s + Kunne ikke analysere asmap filen %s + Do you want to rebuild the block database now? Ønsker du å gjenopprette blokkdatabasen nå? @@ -3168,6 +3484,10 @@ Loading P2P addresses... Laster maskin-til-maskin -adresser… + + Error: Disk space is too low! + Feil: For lite diskplass! + Loading banlist... Laster inn bannlysningsliste… @@ -3276,6 +3596,10 @@ Need to specify a port with -whitebind: '%s' Må oppgi en port med -whitebind: '%s' + + Prune mode is incompatible with -blockfilterindex. + Beskjæringsmodus er inkompatibel med -blokkfilterindex. + Reducing -maxconnections from %d to %d, because of system limitations. Reduserer -maxconnections fra %d til %d, pga. systembegrensninger. @@ -3398,6 +3722,14 @@ Insufficient funds Utilstrekkelige midler + + Cannot upgrade a non HD split wallet without upgrading to support pre split keypool. Please use -upgradewallet=169900 or -upgradewallet with no version specified. + Kan ikke oppgradere en delt lommebok uten HD uten å oppgradere til støtte for forhåndsdelt tastatur. Bruk -upgradewallet = 169900 eller -upgradewallet uten versjon spesifisert. + + + Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable -fallbackfee. + Avgiftsberegning mislyktes. Fallbackfee er deaktivert. Vent et par blokker eller aktiver -fallbackfee. + Loading block index... Laster blokkindeks... diff --git a/src/qt/locale/bitcoin_ne.ts b/src/qt/locale/bitcoin_ne.ts index 543f9b4b21..0654c7e54b 100644 --- a/src/qt/locale/bitcoin_ne.ts +++ b/src/qt/locale/bitcoin_ne.ts @@ -55,8 +55,7 @@ &Copy Address - ठेगाना कपी गर्नुहोस् - + ठेगाना कपी गर्नुहोस् @@ -191,8 +190,7 @@ Copy address - ठेगाना कपी गर्नुहोस् - + ठेगाना कपी गर्नुहोस् @@ -396,8 +394,7 @@ TransactionView Copy address - ठेगाना कपी गर्नुहोस् - + ठेगाना कपी गर्नुहोस् @@ -416,8 +413,7 @@ WalletView &Export - &amp;निर्यात गर्नुहोस् - + &amp;निर्यात गर्नुहोस् Export the data in the current tab to a file diff --git a/src/qt/locale/bitcoin_nl.ts b/src/qt/locale/bitcoin_nl.ts index 5ec0021398..5c546242d6 100644 --- a/src/qt/locale/bitcoin_nl.ts +++ b/src/qt/locale/bitcoin_nl.ts @@ -1797,6 +1797,14 @@ Dit is ideaal voor alleen-lezen portommonees. Synced Blocks Gesynchroniseerde blokken + + The mapped Autonomous System used for diversifying peer selection. + Het in kaart gebrachte autonome systeem dat wordt gebruikt voor het diversifiëren van peer-selectie. + + + Mapped AS + AS in kaart gebracht. + User Agent User Agent diff --git a/src/qt/locale/bitcoin_pl.ts b/src/qt/locale/bitcoin_pl.ts index 56e59b0345..e2a9733fc9 100644 --- a/src/qt/locale/bitcoin_pl.ts +++ b/src/qt/locale/bitcoin_pl.ts @@ -1035,7 +1035,7 @@ Unknown... - Nienznane... + Nieznany... Last block time diff --git a/src/qt/locale/bitcoin_pt_BR.ts b/src/qt/locale/bitcoin_pt_BR.ts index baaba0dd52..8adabf1a7c 100644 --- a/src/qt/locale/bitcoin_pt_BR.ts +++ b/src/qt/locale/bitcoin_pt_BR.ts @@ -1874,7 +1874,7 @@ &Network Traffic - &Tráfico de Rede + &Tráfego da Rede Totals @@ -1942,7 +1942,7 @@ WARNING: Scammers have been active, telling users to type commands here, stealing their wallet contents. Do not use this console without fully understanding the ramifications of a command. - ATENÇÃO: Fraudadores solicitam a usuários que digitem comandos aqui, e assim roubão o conteúdo de suas carteiras. Não utilize este console sem antes conhecer os comandos e seus efeitos. + ATENÇÃO: Fraudadores solicitam a usuários que digitem comandos aqui, e assim roubam o conteúdo de suas carteiras. Não utilize este console sem antes conhecer os comandos e seus efeitos. Network activity disabled diff --git a/src/qt/locale/bitcoin_ru.ts b/src/qt/locale/bitcoin_ru.ts index d0a159a821..7fbfdac872 100644 --- a/src/qt/locale/bitcoin_ru.ts +++ b/src/qt/locale/bitcoin_ru.ts @@ -1792,6 +1792,14 @@ Synced Blocks Синхронизировано блоков + + The mapped Autonomous System used for diversifying peer selection. + The mapped Autonomous System used for diversifying peer selection. + + + Mapped AS + Mapped AS + User Agent Пользовательский агент @@ -2348,6 +2356,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Cr&eate Unsigned Создать Без Подписи + + Creates a Partially Signed Bitcoin Transaction (PSBT) for use with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet. + Creates a Partially Signed Bitcoin Transaction (PSBT) for use with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet. + from wallet '%1' с кошелька '%1' @@ -2368,6 +2380,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Are you sure you want to send? Вы действительно хотите выполнить отправку? + + Please, review your transaction proposal. This will produce a Partially Signed Bitcoin Transaction (PSBT) which you can copy and then sign with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet. + Please, review your transaction proposal. This will produce a Partially Signed Bitcoin Transaction (PSBT) which you can copy and then sign with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet. + or или @@ -2416,6 +2432,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p PSBT copied PSBT скопирована + + Watch-only balance: + Watch-only balance: + The recipient address is not valid. Please recheck. Адрес получателя неверный. Пожалуйста, перепроверьте. @@ -2511,6 +2531,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Remove this entry Удалить эту запись + + The amount to send in the selected unit + The amount to send in the selected unit + The fee will be deducted from the amount being sent. The recipient will receive less vertcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally. С отправляемой суммы будет удержана комиссия. Получателю придёт меньше биткойнов, чем вы вводите в поле количества. Если выбрано несколько получателей, комиссия распределяется поровну. @@ -2641,6 +2665,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p The signed message to verify Подписанное сообщение для проверки + + The signature given when the message was signed + The signature given when the message was signed + Verify the message to ensure it was signed with the specified Vertcoin address Проверить сообщение, чтобы убедиться, что оно было подписано указанным Биткойн-адресом @@ -3212,6 +3240,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Do you want to increase the fee? Желаете увеличить комиссию? + + Do you want to draft a transaction with fee increase? + Do you want to draft a transaction with fee increase? + Current fee: Текущая комиссия: diff --git a/src/qt/locale/bitcoin_sq.ts b/src/qt/locale/bitcoin_sq.ts index 1ba67365d9..fa614c22ea 100644 --- a/src/qt/locale/bitcoin_sq.ts +++ b/src/qt/locale/bitcoin_sq.ts @@ -115,6 +115,10 @@ Repeat new passphrase Përsërisni fjalëkalimin e ri + + Show passphrase + Shfaqe fjalëkalimin + Encrypt wallet Kripto portofolin @@ -151,6 +155,14 @@ Wallet encrypted Portofoli u enkriptua + + 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>. + Jepe fjalëkalimin e ri për portofolin. Ju lutemi të përdorni një fjalkalim prej dhjetë ose më shumë shkronjave të rëndomta, ose tetë e më shumë fjalë. + + + Enter the old passphrase and new passphrase for the wallet. + Jepe fjalëkalimin e vjetër dhe fjalkalimin e ri për portofolin. + Wallet encryption failed Enkriptimi i portofolit dështoi diff --git a/src/qt/locale/bitcoin_sr.ts b/src/qt/locale/bitcoin_sr.ts index 470c0fdbd2..585fadb0ff 100644 --- a/src/qt/locale/bitcoin_sr.ts +++ b/src/qt/locale/bitcoin_sr.ts @@ -31,11 +31,11 @@ Enter address or label to search - Унеси адресу или назив за претрагу + Унеси адресу или назив ознаке за претрагу Export the data in the current tab to a file - Извези податке из одабране картице у фајлj + Извези податке из одабране картице у датотеку &Export @@ -47,15 +47,15 @@ Choose the address to send coins to - Изабери адресу за слање + Одабери адресу за слање Choose the address to receive coins with - Изабери адресу за примање + Одабери адресу за примање C&hoose - &Изабери + &Одабери Sending addresses @@ -67,11 +67,11 @@ These are your Vertcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Ово су твоје Биткоин адресе за слање уплата. Увек добро проверите износ и адресу на коју шаљете пре него што пошаљете уплату. + Ово су твоје Биткоин адресе за слање уплата. Увек добро провери износ и адресу на коју шаљеш пре него што пошаљеш уплату. These are your Vertcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. - Ово су твоје Биткоин адресе за приманје уплата. Користи дугме „Направи нову адресу за примање” у картици за примање за креирање нових адреса. + Ово су твоје Биткоин адресе за примање уплата. Користи дугме „Направи нову адресу за примање” у картици за примање за креирање нових адреса. &Copy Address @@ -106,7 +106,7 @@ AddressTableModel Label - Етикета + Ознака Address @@ -114,7 +114,7 @@ (no label) - (без етикете) + (без ознаке) @@ -161,15 +161,15 @@ Change passphrase - Измену лозинку + Измени лозинку Confirm wallet encryption Потврди шифрирање новчаника - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR VERTOINS</b>! - Упозорење: Уколико шифрирате новчаник и изгубите своју лозинку, <b>ИЗГУБИЋЕТЕ СВЕ СВОЈЕ БИТКОИНЕ</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR VERTCOINS</b>! + Упозорење: Уколико шифрираш новчаник и изгубиш своју лозинку, <b>ИЗГУБИЋЕШ СВЕ СВОЈЕ БИТКОИНЕ</b>! Are you sure you wish to encrypt your wallet? @@ -185,7 +185,7 @@ Enter the old passphrase and new passphrase for the wallet. - Унеси стару лозунку и нову лозинку новчаника. + Унеси стару лозинку и нову лозинку новчаника. Remember that encrypting your wallet cannot fully protect your vertcoins from being stolen by malware infecting your computer. @@ -197,7 +197,7 @@ Your wallet is about to be encrypted. - Твој новчаник ће бити шифриран. + Твој новчаник биће шифриран. Your wallet is now encrypted. @@ -237,7 +237,7 @@ Warning: The Caps Lock key is on! - Упозорање Caps Lock дугме укључено. + Упозорање Caps Lock дугме укључено! @@ -299,7 +299,7 @@ Show information about Qt - Прегледајте информације о Qt-у + Прегледај информације о Qt-у &Options... @@ -319,11 +319,11 @@ &Change Passphrase... - Промени &лозинку... + & Промени лозинку... Open &URI... - Отвори &УРИ... + Отвори &URI... Create Wallet... @@ -335,7 +335,7 @@ Wallet: - Новчаник + Новчаник: Click to disable network activity. @@ -355,7 +355,7 @@ Reindexing blocks on disk... - Поново идексирање блокова на диску. + Поново идексирање блокова на диску... Proxy is <b>enabled</b>: %1 @@ -363,11 +363,11 @@ Send coins to a Vertcoin address - Пошаљите новац на Биткоин адресу + Пошаљи новац на Биткоин адресу Backup wallet to another location - Направите резервну копију новчаника на другој локацији + Направи резервну копију новчаника на другој локацији Change the passphrase used for wallet encryption @@ -467,7 +467,7 @@ Error - Greška + Грешка Warning @@ -479,7 +479,7 @@ Up to date - Ажурно + Ажурирано Node window @@ -588,7 +588,7 @@ Label: %1 - Етикета: %1 + Ознака: %1 @@ -619,7 +619,7 @@ Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Новчаник јс <b>шифрован</b> и тренутно <b>откључан</b> + Новчаник јс <b>шифриран</b> и тренутно <b>откључан</b> Wallet is <b>encrypted</b> and currently <b>locked</b> @@ -682,7 +682,7 @@ Received with label - Примљено са налепницом + Примљено са ознаком Received with address @@ -690,7 +690,7 @@ Date - датум + Датум Confirmations @@ -706,7 +706,7 @@ Copy label - Копирај налепницу + Копирај ознаку Copy amount @@ -746,7 +746,7 @@ Copy change - Копирај промену + Копирај кусур (%1 locked) @@ -770,7 +770,7 @@ (no label) - (без налепнице) + (без ознаке) change from %1 (%2) @@ -789,7 +789,7 @@ Create wallet failed - Креирање неуспешно + Креирање новчаника неуспешно Create wallet warning @@ -804,7 +804,7 @@ Wallet Name - Име новчаника + Име Новчаника Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice. @@ -843,11 +843,11 @@ &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. @@ -894,7 +894,7 @@ FreespaceChecker A new data directory will be created. - Нови директоријум података ће бити креиран. + Нови директоријум података биће креиран. name @@ -944,15 +944,15 @@ When you click OK, %1 will begin to download and process the full %4 block chain (%2GB) starting with the earliest transactions in %3 when %4 initially launched. - Када кликнете на ОК, %1 ће почети с преузимањем и процесирањем целокупног ланца блокова %4 (%2GB), почевши од најранијих трансакција у %3 када је %4 покренут. + Када кликнете на ОК, %1 ће почети с преузимањем и процесуирањем целокупног ланца блокова %4 (%2GB), почевши од најранијих трансакција у %3 када је %4 покренут. 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. - Враћање ове опције захтева поновно преузимање целокупног блокчејна. Брже је преузети цели ланац и касније га скратити. Онемогућава неке напредне опције. + Враћање ове опције захтева поновно преузимање целокупног блокчејна - ланца блокова. Брже је преузети цели ланац и касније га скратити. Онемогућава неке напредне опције. 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, преузимање ће се наставити тамо где је било прекинуто. + Првобитна синхронизација веома је захтевна и може изложити ваш рачунар хардверским проблемима који раније нису били примећени. Сваки пут када покренете %1, преузимање ће се наставити тамо где је било прекинуто. 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. @@ -996,11 +996,11 @@ Error - Greška + Грешка %n GB of free space available - Dostupno %n GB slobodnog prostoraДоступно %n GB слободног простораДоступно %n GB слободног простора + Доступно %n GB слободног простораДоступно %n GB слободног простораДоступно %n GB слободног простора (of %n GB needed) @@ -1019,7 +1019,7 @@ 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 vertcoin network, as detailed below. - Недавне трансакције можда не буду видљиве, зато салдо твог новчаника можда буде нетачан. + Недавне трансакције можда не буду видљиве, зато салдо твог новчаника можда буде нетачан. Ова информација биђе тачна када новчаник заврши са синхронизацијом биткоин мреже, приказаној испод. Attempting to spend vertcoins that are affected by not-yet-displayed transactions will not be accepted by the network. @@ -1027,7 +1027,7 @@ Number of blocks left - Остала количина блокова + Преостала количина блокова Unknown... @@ -1047,7 +1047,7 @@ calculating... - Рачунање + рачунање... Estimated time left until synced @@ -1148,7 +1148,11 @@ 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. - Минимизирај апликацију уместо затворити, када се затвори прозор. Када је ова опција омогућена, апликација ће бити затворена тек након одабира Излаз у менију. + Минимизирање уместо искључивања апликације када се прозор затвори. Када је ова опција омогућена, апликација ће бити затворена тек након одабира Излаз у менију. + + + 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-ова поделено је вертикалом |. Open the %1 configuration file from the working directory. @@ -1172,7 +1176,7 @@ Disables some advanced features but all blocks will still be fully validated. Reverting this setting requires re-downloading the entire blockchain. Actual disk usage may be somewhat higher. - Онемогућава поједина напредна својства, али ће сви блокови у потпуности бити валидирани. + Онемогућава поједина напредна својства, али ће сви блокови у потпуности бити валидирани. Враћање ове опције захтева да поновно преузимање целокупонг блокчејна. Prune &block storage to @@ -1196,7 +1200,7 @@ W&allet - новчаник + Н&овчаник Expert @@ -1224,7 +1228,7 @@ Accept connections from outside. - Прихвати конекције од споља. + Прихвати спољашње концекције. Allow incomin&g connections @@ -1280,7 +1284,7 @@ M&inimize on close - Минимизирај на затварању + Минимизирај при затварању &Display @@ -1352,7 +1356,7 @@ Error - Greška + Грешка The configuration file could not be opened. @@ -1395,7 +1399,7 @@ Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance - Тотал трансакција које још увек нису потврђене, и не рачунају се у баланс рачуна који је могуће потрошити + Укупан број трансакција које још увек нису потврђене, и не рачунају се у салдо рачуна који је могуће потрошити Immature: @@ -1403,7 +1407,7 @@ Mined balance that has not yet matured - Баланс рударења који још увек није доспео + Салдо рударења који још увек није доспео Balances @@ -1419,7 +1423,7 @@ Your current balance in watch-only addresses - Твој тренутни салдо са посматрај-само адресама + Твој тренутни салдо са гледај-само адресама Spendable: @@ -1435,11 +1439,11 @@ Mined balance in watch-only addresses that has not yet matured - Баланс рударења у адресама које су у моду само гледање, који још увек није доспео + Салдорударења у адресама које су у моду само гледање, који још увек није доспео Current total balance in watch-only addresses - Тренутни укупни баланс у адресама у моду само гледање + Тренутни укупни салдо у адресама у опцији само-гледај @@ -1450,11 +1454,11 @@ Cannot start vertcoin: click-to-pay handler - Не могу покренути биткоин: кликни-да-платиш механизам + Не могу покренути биткоин: "кликни-да-платиш" механизам URI handling - URI манипулација + URI руковање 'vertcoin://' is not a valid URI. Use 'vertcoin:' instead. @@ -1462,11 +1466,11 @@ Cannot process payment request because BIP70 is not supported. - Захтев за плаћање се не може обрадити, јер BIP70 није подржан. + Захтев за плаћање не може се обрадити, јер BIP70 није подржан. Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored. - Због великог броја безбедносних пропуста у BIP70, врло је препоручено да се све инструкције клијента за промену новчаника игноришу. + Због великог броја безбедносних пропуста у BIP70, препоручено је да се све инструкције трговаца за промену новчаника игноришу. If you are receiving this error you should request the merchant provide a BIP21 compatible URI. @@ -1482,7 +1486,7 @@ Payment request file handling - Манипулација датотеком захтева за плаћање + Руковање датотеком захтева за плаћање @@ -1493,11 +1497,11 @@ Node/Service - Чвор/Сервис + Ноде/Сервис NodeId - Идентификација чвора + НодеИД Ping @@ -1516,7 +1520,7 @@ QObject Amount - iznos + Износ Enter a Vertcoin address (e.g. %1) @@ -1552,7 +1556,7 @@ %n second(s) - %n секунда%n секунде%n секунди + %n секунда%n секунди%n секунди %n minute(s) @@ -1608,7 +1612,7 @@ unknown - nepoznato + непознато @@ -1623,7 +1627,7 @@ Resulting URI too long, try to reduce the text for label / message. - Дати резултат URI  предуг, покушајте да смањите текст за налепницу / поруку. + Дати резултат URI  предуг, покушај да сманиш текст за ознаку / поруку. Error encoding URI into QR Code. @@ -1854,7 +1858,7 @@ &Network Traffic - &Мрежа Саобраћај + & Саобраћај Мреже Totals @@ -1958,11 +1962,11 @@ Yes - Da + Да No - Ne + Не Unknown @@ -1973,11 +1977,11 @@ ReceiveCoinsDialog &Amount: - Iznos: + &Износ: &Label: - &Етикета + &Ознака &Message: @@ -1985,11 +1989,11 @@ 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 Vertcoin network. - Опционална порука коју можеш прикачити уз захтев за плаћање, која ће бити приказана када захтев буде отворен. Напомена: Порука неће бити послата са уплатом на Биткоин мрежи. + Опциона порука коју можеш прикачити уз захтев за плаћање, која ће бити приказана када захтев буде отворен. Напомена: Порука неће бити послата са уплатом на Биткоин мрежи. An optional label to associate with the new receiving address. - Опционална етикета за поистовећивање са новом примајућом адресом. + Опционална ознака за поистовећивање са новом примајућом адресом. Use this form to request payments. All fields are <b>optional</b>. @@ -2001,7 +2005,7 @@ 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. - Опционална етикета за поистовећивање са новом адресом примаоца (користите је за идентификацију рачуна). Она је такође придодата захтеву за плаћање. + Опционална ознака за поистовећивање са новом адресом примаоца (користите је за идентификацију рачуна). Она је такође придодата захтеву за плаћање. An optional message that is attached to the payment request and may be displayed to the sender. @@ -2021,7 +2025,7 @@ Native segwit addresses (aka Bech32 or BIP-173) reduce your transaction fees later on and offer better protection against typos, but old wallets don't support them. When unchecked, an address compatible with older wallets will be created instead. - Природне segwit адресе (нпр Bech32 или BIP-173) касније смањују трошкове ваших трансакција и нуде бољу заштиту од грешака у куцању, али их стари новчаници не подржавају. Када није потврђен, биће креирана адреса компатибилна са старијим новчаницима. + Природне segwit адресе (нпр Bech32 или BIP-173) касније смањују трошкове трансакција и нуде бољу заштиту од грешака у куцању, али их стари новчаници не подржавају. Када није одабрано, биће креирана адреса компатибилна са старијим новчаницима. Generate native segwit (Bech32) address @@ -2037,7 +2041,7 @@ Show - Prikaži + Прикажи Remove the selected entries from the list @@ -2053,8 +2057,7 @@ Copy label - Копирај налепницу - + Копирај ознаку Copy message @@ -2062,7 +2065,7 @@ Copy amount - к + Копирај износ @@ -2077,7 +2080,7 @@ Copy &Address - Kopirajte adresu + Копирај &Адресу &Save Image... @@ -2097,7 +2100,7 @@ Address - Adresa + Адреса Amount @@ -2105,11 +2108,11 @@ Label - Налепница + Ознака Message - Poruka + Порука Wallet @@ -2120,11 +2123,11 @@ RecentRequestsTableModel Date - datum + Датум Label - Налепница + Ознака Message @@ -2132,7 +2135,7 @@ (no label) - (без налепнице) + (без ознаке) (no message) @@ -2151,7 +2154,7 @@ SendCoinsDialog Send Coins - Слање новца + Пошаљи новчиће Coin Control Features @@ -2163,7 +2166,7 @@ automatically selected - аутоматски селектовано + аутоматски одабрано Insufficient funds! @@ -2179,7 +2182,7 @@ Amount: - Iznos: + Износ: Fee: @@ -2191,7 +2194,7 @@ Change: - Промени: + Кусур: If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. @@ -2243,11 +2246,11 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p (Smart fee not initialized yet. This usually takes a few blocks...) - (Паметна провизија још није покренута. Ово уобичајено траје неколико блокова...) + (Паметна накнада још није покренута. Ово уобичајено траје неколико блокова...) Send to multiple recipients at once - Пошаљи на више примаоца одједанпут + Пошаљи већем броју примаоца одједанпут Add &Recipient @@ -2255,7 +2258,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Clear all fields of the form. - Очисти сва пола форме. + Очисти сва поља форме. Dust: @@ -2263,15 +2266,15 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Hide transaction fee settings - Сакријте подешавања провизије за трансакцију + Сакријте износ накнаде за трансакцију 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 vertcoin transactions than the network can process. - Када је мањи обим трансакција од простора у блоку, рудари, као и повезани чворови могу применити минималну провизију. Плаћање само минималне провизије је добро, али треба бити свестан да ово може резултовати у трансакцији која неће никада бити потврђена, у случају када је број захтева за биткоин трансакцијама већи од могућности мреже да обради. + Када је мањи обим трансакција од простора у блоку, рудари, као и повезани нодови могу применити минималну провизију. Плаћање само минималне накнаде - провизије је добро, али треба бити свестан да ово може резултовати трансакцијом која неће никада бити потврђена, у случају када је број захтева за биткоин трансакцијама већи од могућности мреже да обради. A too low fee might result in a never confirming transaction (read the tooltip) - Сувише ниска провизија може резултовати у трансакцији која никад неће бити потврђена (прочитајте опис) + Сувише ниска накнада може резултовати у трансакцији која никад неће бити потврђена (прочитајте опис) Confirmation time target: @@ -2307,7 +2310,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Copy amount - к + Копирај износ Copy fee @@ -2471,14 +2474,14 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p (no label) - (без налепнице) + (без ознаке) SendCoinsEntry A&mount: - Iznos: + &Износ: Pay &To: @@ -2486,11 +2489,11 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p &Label: - &Етикета + &Ознака Choose previously used address - Промени претходно коришћену адресу + Одабери претходно коришћену адресу The Vertcoin address to send the payment to @@ -2498,7 +2501,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Alt+A - Alt+ + Alt+A Paste address from clipboard @@ -2522,7 +2525,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p S&ubtract fee from amount - Одузми провизију од износа + &Одузми провизију од износа Use available balance @@ -2530,7 +2533,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Message: - Poruka: + Порука: This is an unauthenticated payment request. @@ -2588,7 +2591,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Alt+A - Alt+ + Alt+A Paste address from clipboard @@ -2596,7 +2599,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Alt+P - Alt+П + Alt+P Enter the message you want to sign here @@ -2750,11 +2753,11 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p %1/unconfirmed - %1/nepotvrdjeno + %1/непотврђено %1 confirmations - %1 potvrde + %1 порврде Status @@ -2762,7 +2765,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Date - datum + Датум Source @@ -2778,7 +2781,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p unknown - nepoznato + непознато To @@ -2794,7 +2797,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p label - етикета + ознака Credit @@ -2830,7 +2833,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Message - Poruka + Порука Comment @@ -2870,7 +2873,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Transaction - transakcije + Трансакције Inputs @@ -2893,7 +2896,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p TransactionDescDialog This pane shows a detailed description of the transaction - Ovaj odeljak pokazuje detaljan opis transakcije + Овај одељак приказује детањан приказ трансакције Details for %1 @@ -2904,15 +2907,15 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p TransactionTableModel Date - datum + Датум Type - tip + Тип Label - Налепница + Ознака Open for %n more block(s) @@ -2920,7 +2923,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Open until %1 - Otvoreno do %1 + Отворено до %1 Unconfirmed @@ -2948,27 +2951,27 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Generated but not accepted - Generisan ali nije prihvaćen + Генерисан али није прихваћен Received with - Primljen sa + Примљен са Received from - Primljeno od + Примљено од Sent to - Poslat ka + Послато ка Payment to yourself - Isplata samom sebi + Уплата самом себи Mined - Minirano + Рударено watch-only @@ -2980,19 +2983,19 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p (no label) - (без налепнице) + (без ознаке) Transaction status. Hover over this field to show number of confirmations. - Status vaše transakcije. Predjite mišem preko ovog polja da bi ste videli broj konfirmacija + Статус трансакције. Пређи мишем преко поља за приказ броја трансакција. Date and time that the transaction was received. - Datum i vreme primljene transakcije. + Датум и време пријема трансакције Type of transaction. - Tip transakcije + Тип трансакције. Whether or not a watch-only address is involved in this transaction. @@ -3004,58 +3007,58 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Amount removed from or added to balance. - Iznos odbijen ili dodat balansu. + Износ одбијен или додат салду. TransactionView All - Sve + Све Today - Danas + Данас This week - ove nedelje + Oве недеље This month - Ovog meseca + Овог месеца Last month - Prošlog meseca + Претходног месеца This year - Ove godine + Ове године Range... - Opseg... + Опсег... Received with - Primljen sa + Примљен са... Sent to - Poslat ka + Послат ка To yourself - Vama - samom sebi + Теби Mined - Minirano + Рударено Other - Drugi + Други Enter address, transaction id, or label to search @@ -3063,7 +3066,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Min amount - Min iznos + Минимални износ Abandon transaction @@ -3079,12 +3082,11 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Copy label - Копирај налепницу - + Копирај ознаку Copy amount - к + Копирај износ Copy transaction ID @@ -3100,7 +3102,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Edit label - promeni naziv + Измени ознаку Show transaction details @@ -3116,7 +3118,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Confirmed - Potvrdjen + Потврђено Watch-only @@ -3124,23 +3126,23 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Date - datum + Датум Type - tip + Тип Label - Налепница + Ознака Address - Adresa + Адреса ID - Ознака + ID Exporting Failed @@ -3160,11 +3162,11 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Range: - Opseg: + Опсег: to - do + до @@ -3259,7 +3261,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p WalletView &Export - &Izvedi + &Извези Export the data in the current tab to a file @@ -3267,7 +3269,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Backup Wallet - Backup новчаника + Резервна копија новчаника Wallet Data (*.dat) @@ -3586,7 +3588,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain - Ви морате обновити базу података користећи -reindex да би се вратили у нескраћени мод. Ово ће урадити поновно преузимање комплетног ланца података + Обновите базу података користећи -reindex да би се вратили у нескраћени мод. Ово ће урадити поновно преузимање комплетног ланца података Error reading from database, shutting down. @@ -3756,7 +3758,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Insufficient funds - Nedovoljno sredstava + Недовољно средстава Cannot upgrade a non HD split wallet without upgrading to support pre split keypool. Please use -upgradewallet=169900 or -upgradewallet with no version specified. @@ -3776,7 +3778,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Loading block index... - Učitavam blok indeksa... + Учитавање индекса блокова Loading wallet... diff --git a/src/qt/locale/bitcoin_sv.ts b/src/qt/locale/bitcoin_sv.ts index 323f2a8763..f58789ddc9 100644 --- a/src/qt/locale/bitcoin_sv.ts +++ b/src/qt/locale/bitcoin_sv.ts @@ -482,6 +482,14 @@ Försök igen. Up to date Uppdaterad + + Node window + Nod-fönster + + + Open node debugging and diagnostic console + Öppna nodens konsol för felsökning och diagnostik + &Sending addresses Av&sändaradresser @@ -490,6 +498,10 @@ Försök igen. &Receiving addresses Mottaga&radresser + + Open a bitcoin: URI + Öppna en bitcoin:-URI + Open Wallet Öppna plånbok @@ -784,7 +796,11 @@ Försök igen. Create wallet failed Plånboken kunde inte skapas - + + Create wallet warning + Skapa plånboksvarning + + CreateWalletDialog @@ -803,6 +819,22 @@ Försök igen. Encrypt Wallet Kryptera plånbok + + 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. + Stäng av privata nycklar för denna plånbok. Plånböcker med privata nycklar avstängda kommer inte innehålla några privata nycklar alls, och kan inte innehålla vare sig en HD-seed eller importerade privata nycklar. Detta är idealt för plånböcker som endast ska granskas. + + + Disable Private Keys + Stäng av privata nycklar + + + 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. + Skapa en tom plånbok. Tomma plånböcker har från början inga privata nycklar eller skript. Privata nycklar och adresser kan importeras, eller en HD-seed kan väljas, vid ett senare tillfälle. + + + Make Blank Wallet + Skapa tom plånbok + Create Skapa @@ -919,6 +951,10 @@ Försök igen. When you click OK, %1 will begin to download and process the full %4 block chain (%2GB) starting with the earliest transactions in %3 when %4 initially launched. När du trycker OK kommer %1 att börja ladda ner och bearbeta den fullständiga %4-blockkedjan (%2 GB), med början vid de första transaktionerna %3 när %4 först lanserades. + + 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. + Att återställa detta alternativ påbörjar en omstart av nedladdningen av hela blockkedjan. Det går snabbare att ladda ner hela kedjan först, och gallra den senare. Detta alternativ stänger av vissa avancerade funktioner. + 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. Denna första synkronisering är väldigt krävande, och kan påvisa hårdvaruproblem hos din dator som tidigare inte visat sig. Varje gång du kör %1, kommer nerladdningen att fortsätta där den avslutades. @@ -939,6 +975,10 @@ Försök igen. Vertcoin Vertcoin + + Discard blocks after verification, except most recent %1 GB (prune) + Släng block efter verifiering, förutom de senaste %1 GB (gallra). + At least %1 GB of data will be stored in this directory, and it will grow over time. Minst %1 GB data kommer att sparas i den här katalogen, och de växer över tiden. @@ -1022,6 +1062,10 @@ Försök igen. Hide Dölj + + Esc + Esc + Unknown. Syncing Headers (%1, %2%)... Okänd. Synkar huvuden (%1, %2%)... @@ -1029,6 +1073,10 @@ Försök igen. OpenURIDialog + + Open bitcoin URI + Öppna bitcoin-URI + URI: URI: @@ -1040,6 +1088,10 @@ Försök igen. Open wallet failed Det gick inte att öppna plånboken + + Open wallet warning + Öppna plånboksvarning. + default wallet Standardplånbok @@ -1360,7 +1412,7 @@ Försök igen. Mined balance that has not yet matured - Genererat saldo som ännu inte har mognat + Grävt saldo som ännu inte har mognat Balances @@ -1392,7 +1444,7 @@ Försök igen. Mined balance in watch-only addresses that has not yet matured - Genererat saldo i granska-bara adresser som ännu inte har mognat + Grävt saldo i granska-bara adresser som ännu inte har mognat Current total balance in watch-only addresses @@ -1417,6 +1469,14 @@ Försök igen. 'vertcoin://' is not a valid URI. Use 'vertcoin:' instead. 'vertcoin://' är inte en accepterad URI. Använd 'vertcoin:' istället. + + Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored. + Som följd av utbredda säkerhetshål i BIP70, rekommenderas det starkt att en säljares instruktion för dig att byta plånbok ignoreras. + + + If you are receiving this error you should request the merchant provide a BIP21 compatible URI. + Om du får detta fel borde du be säljaren förse dig med en BIP21-kompatibel URI. + Invalid payment address %1 Ogiltig betalningsadress %1 @@ -1578,6 +1638,10 @@ Försök igen. Error encoding URI into QR Code. Fel vid skapande av QR-kod från URI. + + QR code support not available. + Stöd för QR-kod är inte längre tillgängligt. + Save QR Code Spara QR-kod @@ -1721,6 +1785,10 @@ Försök igen. User Agent Användaragent + + Node window + Nod-fönster + Open the %1 debug log file from the current data directory. This can take a few seconds for large log files. Öppna felsökningsloggen %1 från aktuell datakatalog. Detta kan ta några sekunder för stora loggfiler. @@ -2185,6 +2253,10 @@ Notera: Då avgiften beräknas per byte kommer en avgift på 50 satoshi tas ut f Dust: Damm: + + Hide transaction fee settings + Dölj alternativ för transaktionsavgift + 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 vertcoin transactions than the network can process. När transaktionsvolymen är mindre än utrymmet i blocken kan både brytardatorer och relänoder kräva en minimiavgift. Det är okej att bara betala denna minimiavgift, men du ska vara medveten om att det kan leda till att en transaktion aldrig bekräftas så fort efterfrågan på vertcointransaktioner är större än vad nätverket kan hantera. @@ -2253,14 +2325,26 @@ Notera: Då avgiften beräknas per byte kommer en avgift på 50 satoshi tas ut f %1 (%2 blocks) %1 (%2 block) + + Cr&eate Unsigned + Sk&apa Osignerad + from wallet '%1' från plånbok: '%1' + + %1 to '%2' + %1 till '%2' + %1 to %2 %1 till %2 + + Do you want to draft this transaction? + Vill du skissa denna transaktion? + Are you sure you want to send? Är du säker på att du vill skicka? @@ -2289,10 +2373,30 @@ Notera: Då avgiften beräknas per byte kommer en avgift på 50 satoshi tas ut f Total Amount Totalt belopp + + To review recipient list click "Show Details..." + För att gå igenom mottagarlistan, tryck "Visa Detaljer..." + Confirm send coins Bekräfta att pengar ska skickas + + Confirm transaction proposal + Bekräfta transaktionsförslag + + + Copy PSBT to clipboard + Kopiera PSBT till urklipp + + + Send + Skicka + + + PSBT copied + PSBT kopierad + The recipient address is not valid. Please recheck. Mottagarens adress är ogiltig. Kontrollera igen. @@ -2514,6 +2618,10 @@ Notera: Då avgiften beräknas per byte kommer en avgift på 50 satoshi tas ut f The Vertcoin address the message was signed with Vertcoin-adress som meddelandet signerades med + + The signed message to verify + Signerat meddelande som ska verifieras + Verify the message to ensure it was signed with the specified Vertcoin address Verifiera meddelandet för att vara säker på att det signerades med angiven Vertcoin-adress @@ -2546,6 +2654,10 @@ Notera: Då avgiften beräknas per byte kommer en avgift på 50 satoshi tas ut f Wallet unlock was cancelled. Upplåsningen av plånboken avbröts. + + No error + Inget fel + Private key for the entered address is not available. Den privata nyckeln för den angivna adressen är inte tillgänglig. @@ -2720,6 +2832,10 @@ Notera: Då avgiften beräknas per byte kommer en avgift på 50 satoshi tas ut f Output index Utmatningsindex + + (Certificate was not verified) + (Certifikatet verifierades inte) + Merchant Handlare @@ -2832,7 +2948,7 @@ Notera: Då avgiften beräknas per byte kommer en avgift på 50 satoshi tas ut f Mined - Genererade + Grävda watch-only @@ -2915,7 +3031,7 @@ Notera: Då avgiften beräknas per byte kommer en avgift på 50 satoshi tas ut f Mined - Genererade + Grävda Other @@ -2959,7 +3075,7 @@ Notera: Då avgiften beräknas per byte kommer en avgift på 50 satoshi tas ut f Copy full transaction details - Kopiera alla transaktionsdetaljerna + Kopiera alla transaktionsdetaljer Edit label @@ -3043,9 +3159,13 @@ Notera: Då avgiften beräknas per byte kommer en avgift på 50 satoshi tas ut f Close wallet Stäng plånboken + + Are you sure you wish to close the wallet <i>%1</i>? + Är du säker att du vill stänga plånboken <i>%1</i>? + Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. - Om plånboken är stängd under för lång tid kan hela kedjan behöva synkroniseras om, om gallring är aktiverad. + Om plånboken är stängd under för lång tid och gallring är aktiverad kan hela kedjan behöva synkroniseras på nytt. @@ -3073,6 +3193,10 @@ Notera: Då avgiften beräknas per byte kommer en avgift på 50 satoshi tas ut f Do you want to increase the fee? Vill du öka avgiften? + + Do you want to draft a transaction with fee increase? + Vill du skapa en transaktion med en avgiftsökning? + Current fee: Aktuell avgift: @@ -3089,6 +3213,10 @@ Notera: Då avgiften beräknas per byte kommer en avgift på 50 satoshi tas ut f Confirm fee bump Bekräfta avgiftshöjning + + PSBT copied + PSBT kopierad + Can't sign transaction. Kan ej signera transaktion. @@ -3311,6 +3439,10 @@ Notera: Då avgiften beräknas per byte kommer en avgift på 50 satoshi tas ut f Initialization sanity check failed. %s is shutting down. Initieringschecken fallerade. %s stängs av. + + Invalid P2P permission: '%s' + Ogiltigt P2P-tillstånd: '%s' + Invalid amount for -%s=<amount>: '%s' Ogiltigt belopp för -%s=<amount>:'%s' @@ -3328,8 +3460,12 @@ Notera: Då avgiften beräknas per byte kommer en avgift på 50 satoshi tas ut f Den specificerade mappen för block "%s" existerar inte. - Unable to create the PID file '%s': %s - Det gick inte att skapa PID-filen '%s': %s + Unknown address type '%s' + Okänd adress-typ '%s' + + + Unknown change type '%s' + Okänd växel-typ '%s' Upgrading txindex database @@ -3381,7 +3517,7 @@ Notera: Då avgiften beräknas per byte kommer en avgift på 50 satoshi tas ut f Unable to generate keys - Lyckas inte generera nycklar + Det gick inte att skapa nycklar Unsupported logging category %s=%s. @@ -3513,6 +3649,10 @@ Notera: Då avgiften beräknas per byte kommer en avgift på 50 satoshi tas ut f Unable to generate initial keys Det gick inte att skapa ursprungliga nycklar + + Unknown -blockfilterindex value %s. + Okänt värde för -blockfilterindex '%s'. + Verifying wallet(s)... Verifierar plånbok(er)... diff --git a/src/qt/locale/bitcoin_te.ts b/src/qt/locale/bitcoin_te.ts index c00e99f24a..40e17d8d74 100644 --- a/src/qt/locale/bitcoin_te.ts +++ b/src/qt/locale/bitcoin_te.ts @@ -69,6 +69,10 @@ These are your Vertcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. ఇవి మీరు పంపే చెల్లింపుల బిట్‌కాయిన్ చిరునామాలు. నాణేలు పంపే ముందు ప్రతిసారి అందుకునే చిరునామా మరియు చెల్లింపు మొత్తం సరిచూసుకోండి. + + These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. + చెల్లింపులు స్వీకరించడానికి ఇవి మీ బిట్‌కాయిన్ చిరునామాలు. క్రొత్త చిరునామాలను సృష్టించడానికి స్వీకరించు ట్యాబ్‌లోని 'క్రొత్త స్వీకరించే చిరునామాను సృష్టించండి' బటన్‌ను ఉపయోగించండి. + &Copy Address చిరునామాను కాపీ చెయ్యండి @@ -131,6 +135,14 @@ Repeat new passphrase క్రొత్త సంకేతపదము మరలా ఇవ్వండి + + Show passphrase + సంకేతపదమును చూపించు + + + Encrypt wallet + వాలెట్‌ను గుప్తీకరించండి + Unlock wallet వాలెట్ అన్లాక్ diff --git a/src/qt/locale/bitcoin_tr.ts b/src/qt/locale/bitcoin_tr.ts index d2af19431f..b88e60fec0 100644 --- a/src/qt/locale/bitcoin_tr.ts +++ b/src/qt/locale/bitcoin_tr.ts @@ -1800,6 +1800,14 @@ Synced Blocks Eşleşmiş Bloklar + + The mapped Autonomous System used for diversifying peer selection. + Eş seçimini çeşitlendirmek için kullanılan haritalı Otonom Sistem. + + + Mapped AS + Eşlenmiş OLARAK + User Agent Kullanıcı Yazılımı diff --git a/src/qt/locale/bitcoin_zh.ts b/src/qt/locale/bitcoin_zh.ts index 79a44a9daf..139b4fa53a 100644 --- a/src/qt/locale/bitcoin_zh.ts +++ b/src/qt/locale/bitcoin_zh.ts @@ -69,6 +69,10 @@ These are your Vertcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. 这些是你的比特币支付地址。在发送之前,一定要核对金额和接收地址。 + + These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. + 这些是您的比特币接收地址。建议每个交易使用一个新的接收地址。 + &Copy Address &复制地址 @@ -131,6 +135,10 @@ Repeat new passphrase 重复新密码 + + Show passphrase + 显示密码 + Encrypt wallet 加密钱包 @@ -171,6 +179,30 @@ 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>. + 输入钱包的新密码。<br/>密码中请使用<b>10个或更多随机字符</b>,或<b>8个或更多的单词</b>。 + + + Enter the old passphrase and new passphrase for the wallet. + 输入钱包的旧密码和新密码。 + + + 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. 重要提示:您以前对钱包文件所做的任何备份都应该替换为新的加密钱包文件。出于安全原因,一旦您开始使用新的加密钱包,以前未加密钱包文件备份将变得无用。 @@ -289,6 +321,14 @@ Open &URI... 打开 &URI... + + Create Wallet... + 创建钱包 + + + Create a new wallet + 创建一个新的钱包 + Wallet: 钱包: @@ -393,6 +433,10 @@ &Command-line options &命令行选项 + + %n active connection(s) to Bitcoin network + %n 活跃的链接到比特币网络 + Indexing blocks on disk... 索引磁盘上的区块... @@ -401,6 +445,10 @@ Processing blocks on disk... 处理磁盘上的区块... + + Processed %n block(s) of transaction history. + 已处理 %n 的历史交易区块 + %1 behind %1 落后 @@ -429,6 +477,14 @@ Up to date 最新的 + + Node window + 结点窗口 + + + Open node debugging and diagnostic console + 打开结点的调试和诊断控制台 + &Sending addresses &发送地址 @@ -437,6 +493,10 @@ &Receiving addresses &接受地址 + + Open a bitcoin: URI + 打开比特币: URI + Open Wallet 打开钱包 @@ -489,6 +549,10 @@ Connecting to peers... 连接到节点... + + Catching up... + 跟进中 + Date: %1 @@ -608,6 +672,14 @@ Amount 总计 + + Received with label + 收到,夹带标签 + + + Received with address + 收到,夹带地址 + Date 日期 @@ -694,6 +766,38 @@ CreateWalletDialog + + Create Wallet + 创建钱包 + + + Wallet Name + 钱包名称 + + + Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice. + 编码钱包。钱包将会根据你选择的密码进行加密编码。 + + + Encrypt Wallet + 加密钱包 + + + 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种子。 + + + Make Blank Wallet + 创建空白钱包 + EditAddressDialog @@ -1000,6 +1104,10 @@ RPCConsole + + Node window + 结点窗口 + Last block time 最后的区块时间 diff --git a/src/qt/locale/bitcoin_zh_TW.ts b/src/qt/locale/bitcoin_zh_TW.ts index 5162e20af7..707dcbcbf7 100644 --- a/src/qt/locale/bitcoin_zh_TW.ts +++ b/src/qt/locale/bitcoin_zh_TW.ts @@ -363,7 +363,7 @@ Encrypt the private keys that belong to your wallet - 把錢包中的密鑰加密 + 將錢包中之密鑰加密 Sign messages with your Vertcoin addresses to prove you own them @@ -2236,6 +2236,10 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Confirm send coins 確認付款金額 + + Send + + The recipient address is not valid. Please recheck. 收款位址無效。請再檢查看看。 @@ -3458,7 +3462,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Unable to create the PID file '%s': %s - 无法创建PID文件'%s': %s + 無法創建PID文件'%s': %s Unable to generate initial keys @@ -3530,7 +3534,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee of "100 satoshis p Transaction must have at least one recipient - 交易必須至少要有一個收款人 + 交易必須至少有一個收款人 Unknown network specified in -onlynet: '%s' diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp index 0ffdc892c5..01e387f74b 100644 --- a/src/qt/rpcconsole.cpp +++ b/src/qt/rpcconsole.cpp @@ -1216,7 +1216,7 @@ void RPCConsole::banSelectedNode(int bantime) // Find possible nodes, ban it and clear the selected node const CNodeCombinedStats *stats = clientModel->getPeerTableModel()->getNodeStats(detailNodeRow); if (stats) { - m_node.ban(stats->nodeStats.addr, BanReasonManuallyAdded, bantime); + m_node.ban(stats->nodeStats.addr, bantime); m_node.disconnectByAddress(stats->nodeStats.addr); } } diff --git a/src/qt/trafficgraphwidget.cpp b/src/qt/trafficgraphwidget.cpp index b9f01f2c99..c1227043ae 100644 --- a/src/qt/trafficgraphwidget.cpp +++ b/src/qt/trafficgraphwidget.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index 0c15b7e932..cbb1414278 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -637,6 +637,8 @@ static UniValue getblocktemplate(const JSONRPCRequest& request) result.pushKV("capabilities", aCaps); UniValue aRules(UniValue::VARR); + aRules.push_back("csv"); + if (!fPreSegWit) aRules.push_back("!segwit"); UniValue vbavailable(UniValue::VOBJ); for (int j = 0; j < (int)Consensus::MAX_VERSION_BITS_DEPLOYMENTS; ++j) { Consensus::DeploymentPos pos = Consensus::DeploymentPos(j); diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index 2722aa5184..74beac2338 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -604,12 +604,12 @@ static UniValue setban(const JSONRPCRequest& request) absolute = true; if (isSubnet) { - g_rpc_node->banman->Ban(subNet, BanReasonManuallyAdded, banTime, absolute); + g_rpc_node->banman->Ban(subNet, banTime, absolute); if (g_rpc_node->connman) { g_rpc_node->connman->DisconnectNode(subNet); } } else { - g_rpc_node->banman->Ban(netAddr, BanReasonManuallyAdded, banTime, absolute); + g_rpc_node->banman->Ban(netAddr, banTime, absolute); if (g_rpc_node->connman) { g_rpc_node->connman->DisconnectNode(netAddr); } @@ -618,7 +618,7 @@ static UniValue setban(const JSONRPCRequest& request) else if(strCommand == "remove") { if (!( isSubnet ? g_rpc_node->banman->Unban(subNet) : g_rpc_node->banman->Unban(netAddr) )) { - throw JSONRPCError(RPC_CLIENT_INVALID_IP_OR_SUBNET, "Error: Unban failed. Requested address/subnet was not previously banned."); + throw JSONRPCError(RPC_CLIENT_INVALID_IP_OR_SUBNET, "Error: Unban failed. Requested address/subnet was not previously manually banned."); } } return NullUniValue; @@ -627,7 +627,7 @@ static UniValue setban(const JSONRPCRequest& request) static UniValue listbanned(const JSONRPCRequest& request) { RPCHelpMan{"listbanned", - "\nList all banned IPs/Subnets.\n", + "\nList all manually banned IPs/Subnets.\n", {}, RPCResult{RPCResult::Type::ARR, "", "", { @@ -636,7 +636,6 @@ static UniValue listbanned(const JSONRPCRequest& request) {RPCResult::Type::STR, "address", ""}, {RPCResult::Type::NUM_TIME, "banned_until", ""}, {RPCResult::Type::NUM_TIME, "ban_created", ""}, - {RPCResult::Type::STR, "ban_reason", ""}, }}, }}, RPCExamples{ @@ -660,7 +659,6 @@ static UniValue listbanned(const JSONRPCRequest& request) rec.pushKV("address", entry.first.ToString()); rec.pushKV("banned_until", banEntry.nBanUntil); rec.pushKV("ban_created", banEntry.nCreateTime); - rec.pushKV("ban_reason", banEntry.banReasonToString()); bannedAddresses.push_back(rec); } diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index 3c0b060439..b9ec3c53d6 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -1116,30 +1116,34 @@ UniValue decodepsbt(const JSONRPCRequest& request) const PSBTInput& input = psbtx.inputs[i]; UniValue in(UniValue::VOBJ); // UTXOs + bool have_a_utxo = false; + CTxOut txout; if (!input.witness_utxo.IsNull()) { - const CTxOut& txout = input.witness_utxo; - - UniValue out(UniValue::VOBJ); - - out.pushKV("amount", ValueFromAmount(txout.nValue)); - if (MoneyRange(txout.nValue) && MoneyRange(total_in + txout.nValue)) { - total_in += txout.nValue; - } else { - // Hack to just not show fee later - have_all_utxos = false; - } + txout = input.witness_utxo; UniValue o(UniValue::VOBJ); ScriptToUniv(txout.scriptPubKey, o, true); + + UniValue out(UniValue::VOBJ); + out.pushKV("amount", ValueFromAmount(txout.nValue)); out.pushKV("scriptPubKey", o); + in.pushKV("witness_utxo", out); - } else if (input.non_witness_utxo) { + + have_a_utxo = true; + } + if (input.non_witness_utxo) { + txout = input.non_witness_utxo->vout[psbtx.tx->vin[i].prevout.n]; + UniValue non_wit(UniValue::VOBJ); TxToUniv(*input.non_witness_utxo, uint256(), non_wit, false); in.pushKV("non_witness_utxo", non_wit); - CAmount utxo_val = input.non_witness_utxo->vout[psbtx.tx->vin[i].prevout.n].nValue; - if (MoneyRange(utxo_val) && MoneyRange(total_in + utxo_val)) { - total_in += utxo_val; + + have_a_utxo = true; + } + if (have_a_utxo) { + if (MoneyRange(txout.nValue) && MoneyRange(total_in + txout.nValue)) { + total_in += txout.nValue; } else { // Hack to just not show fee later have_all_utxos = false; diff --git a/src/test/denialofservice_tests.cpp b/src/test/denialofservice_tests.cpp index 6314c1a42f..41d10ae321 100644 --- a/src/test/denialofservice_tests.cpp +++ b/src/test/denialofservice_tests.cpp @@ -238,8 +238,8 @@ BOOST_AUTO_TEST_CASE(DoS_banning) LOCK2(cs_main, dummyNode1.cs_sendProcessing); BOOST_CHECK(peerLogic->SendMessages(&dummyNode1)); } - BOOST_CHECK(banman->IsBanned(addr1)); - BOOST_CHECK(!banman->IsBanned(ip(0xa0b0c001|0x0000ff00))); // Different IP, not banned + BOOST_CHECK(banman->IsDiscouraged(addr1)); + BOOST_CHECK(!banman->IsDiscouraged(ip(0xa0b0c001|0x0000ff00))); // Different IP, not banned CAddress addr2(ip(0xa0b0c002), NODE_NONE); CNode dummyNode2(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr2, 1, 1, CAddress(), "", true); @@ -255,8 +255,8 @@ BOOST_AUTO_TEST_CASE(DoS_banning) LOCK2(cs_main, dummyNode2.cs_sendProcessing); BOOST_CHECK(peerLogic->SendMessages(&dummyNode2)); } - BOOST_CHECK(!banman->IsBanned(addr2)); // 2 not banned yet... - BOOST_CHECK(banman->IsBanned(addr1)); // ... but 1 still should be + BOOST_CHECK(!banman->IsDiscouraged(addr2)); // 2 not banned yet... + BOOST_CHECK(banman->IsDiscouraged(addr1)); // ... but 1 still should be { LOCK(cs_main); Misbehaving(dummyNode2.GetId(), 50); @@ -265,7 +265,7 @@ BOOST_AUTO_TEST_CASE(DoS_banning) LOCK2(cs_main, dummyNode2.cs_sendProcessing); BOOST_CHECK(peerLogic->SendMessages(&dummyNode2)); } - BOOST_CHECK(banman->IsBanned(addr2)); + BOOST_CHECK(banman->IsDiscouraged(addr2)); bool dummy; peerLogic->FinalizeNode(dummyNode1.GetId(), dummy); @@ -294,7 +294,7 @@ BOOST_AUTO_TEST_CASE(DoS_banscore) LOCK2(cs_main, dummyNode1.cs_sendProcessing); BOOST_CHECK(peerLogic->SendMessages(&dummyNode1)); } - BOOST_CHECK(!banman->IsBanned(addr1)); + BOOST_CHECK(!banman->IsDiscouraged(addr1)); { LOCK(cs_main); Misbehaving(dummyNode1.GetId(), 10); @@ -303,7 +303,7 @@ BOOST_AUTO_TEST_CASE(DoS_banscore) LOCK2(cs_main, dummyNode1.cs_sendProcessing); BOOST_CHECK(peerLogic->SendMessages(&dummyNode1)); } - BOOST_CHECK(!banman->IsBanned(addr1)); + BOOST_CHECK(!banman->IsDiscouraged(addr1)); { LOCK(cs_main); Misbehaving(dummyNode1.GetId(), 1); @@ -312,7 +312,7 @@ BOOST_AUTO_TEST_CASE(DoS_banscore) LOCK2(cs_main, dummyNode1.cs_sendProcessing); BOOST_CHECK(peerLogic->SendMessages(&dummyNode1)); } - BOOST_CHECK(banman->IsBanned(addr1)); + BOOST_CHECK(banman->IsDiscouraged(addr1)); gArgs.ForceSetArg("-banscore", ToString(DEFAULT_BANSCORE_THRESHOLD)); bool dummy; @@ -344,13 +344,7 @@ BOOST_AUTO_TEST_CASE(DoS_bantime) LOCK2(cs_main, dummyNode.cs_sendProcessing); BOOST_CHECK(peerLogic->SendMessages(&dummyNode)); } - BOOST_CHECK(banman->IsBanned(addr)); - - SetMockTime(nStartTime+60*60); - BOOST_CHECK(banman->IsBanned(addr)); - - SetMockTime(nStartTime+60*60*24+1); - BOOST_CHECK(!banman->IsBanned(addr)); + BOOST_CHECK(banman->IsDiscouraged(addr)); bool dummy; peerLogic->FinalizeNode(dummyNode.GetId(), dummy); diff --git a/src/test/fuzz/addrdb.cpp b/src/test/fuzz/addrdb.cpp index f21ff3fac3..a7e6e8961a 100644 --- a/src/test/fuzz/addrdb.cpp +++ b/src/test/fuzz/addrdb.cpp @@ -18,18 +18,11 @@ void test_one_input(const std::vector& buffer) FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); const CBanEntry ban_entry = [&] { - switch (fuzzed_data_provider.ConsumeIntegralInRange(0, 3)) { + switch (fuzzed_data_provider.ConsumeIntegralInRange(0, 2)) { case 0: return CBanEntry{fuzzed_data_provider.ConsumeIntegral()}; break; - case 1: - return CBanEntry{fuzzed_data_provider.ConsumeIntegral(), fuzzed_data_provider.PickValueInArray({ - BanReason::BanReasonUnknown, - BanReason::BanReasonNodeMisbehaving, - BanReason::BanReasonManuallyAdded, - })}; - break; - case 2: { + case 1: { const Optional ban_entry = ConsumeDeserializable(fuzzed_data_provider); if (ban_entry) { return *ban_entry; @@ -39,5 +32,4 @@ void test_one_input(const std::vector& buffer) } return CBanEntry{}; }(); - assert(!ban_entry.banReasonToString().empty()); } diff --git a/src/test/fuzz/psbt.cpp b/src/test/fuzz/psbt.cpp index ca3e0b8586..fe8bd20816 100644 --- a/src/test/fuzz/psbt.cpp +++ b/src/test/fuzz/psbt.cpp @@ -39,7 +39,6 @@ void test_one_input(const std::vector& buffer) } (void)psbt.IsNull(); - (void)psbt.IsSane(); Optional tx = psbt.tx; if (tx) { @@ -50,7 +49,6 @@ void test_one_input(const std::vector& buffer) for (const PSBTInput& input : psbt.inputs) { (void)PSBTInputSigned(input); (void)input.IsNull(); - (void)input.IsSane(); } for (const PSBTOutput& output : psbt.outputs) { diff --git a/src/txmempool.cpp b/src/txmempool.cpp index 47b0d39ea4..c14417a847 100644 --- a/src/txmempool.cpp +++ b/src/txmempool.cpp @@ -410,7 +410,7 @@ void CTxMemPool::removeUnchecked(txiter it, MemPoolRemovalReason reason) // for any reason except being included in a block. Clients interested // in transactions included in blocks can subscribe to the BlockConnected // notification. - GetMainSignals().TransactionRemovedFromMempool(it->GetSharedTx()); + GetMainSignals().TransactionRemovedFromMempool(it->GetSharedTx(), reason); } const uint256 hash = it->GetTx().GetHash(); diff --git a/src/util/system.cpp b/src/util/system.cpp index 4522e381e8..786a649c18 100644 --- a/src/util/system.cpp +++ b/src/util/system.cpp @@ -1150,8 +1150,9 @@ void ScheduleBatchPriority() { #ifdef SCHED_BATCH const static sched_param param{}; - if (pthread_setschedparam(pthread_self(), SCHED_BATCH, ¶m) != 0) { - LogPrintf("Failed to pthread_setschedparam: %s\n", strerror(errno)); + const int rc = pthread_setschedparam(pthread_self(), SCHED_BATCH, ¶m); + if (rc != 0) { + LogPrintf("Failed to pthread_setschedparam: %s\n", strerror(rc)); } #endif } diff --git a/src/validationinterface.cpp b/src/validationinterface.cpp index 11000774c0..6a2c151806 100644 --- a/src/validationinterface.cpp +++ b/src/validationinterface.cpp @@ -190,22 +190,22 @@ void CMainSignals::UpdatedBlockTip(const CBlockIndex *pindexNew, const CBlockInd fInitialDownload); } -void CMainSignals::TransactionAddedToMempool(const CTransactionRef &ptx) { - auto event = [ptx, this] { - m_internals->Iterate([&](CValidationInterface& callbacks) { callbacks.TransactionAddedToMempool(ptx); }); +void CMainSignals::TransactionAddedToMempool(const CTransactionRef& tx) { + auto event = [tx, this] { + m_internals->Iterate([&](CValidationInterface& callbacks) { callbacks.TransactionAddedToMempool(tx); }); }; ENQUEUE_AND_LOG_EVENT(event, "%s: txid=%s wtxid=%s", __func__, - ptx->GetHash().ToString(), - ptx->GetWitnessHash().ToString()); + tx->GetHash().ToString(), + tx->GetWitnessHash().ToString()); } -void CMainSignals::TransactionRemovedFromMempool(const CTransactionRef &ptx) { - auto event = [ptx, this] { - m_internals->Iterate([&](CValidationInterface& callbacks) { callbacks.TransactionRemovedFromMempool(ptx); }); +void CMainSignals::TransactionRemovedFromMempool(const CTransactionRef& tx, MemPoolRemovalReason reason) { + auto event = [tx, reason, this] { + m_internals->Iterate([&](CValidationInterface& callbacks) { callbacks.TransactionRemovedFromMempool(tx, reason); }); }; ENQUEUE_AND_LOG_EVENT(event, "%s: txid=%s wtxid=%s", __func__, - ptx->GetHash().ToString(), - ptx->GetWitnessHash().ToString()); + tx->GetHash().ToString(), + tx->GetWitnessHash().ToString()); } void CMainSignals::BlockConnected(const std::shared_ptr &pblock, const CBlockIndex *pindex) { diff --git a/src/validationinterface.h b/src/validationinterface.h index cb0204a555..3ab82306a6 100644 --- a/src/validationinterface.h +++ b/src/validationinterface.h @@ -21,6 +21,7 @@ class CConnman; class CValidationInterface; class uint256; class CScheduler; +enum class MemPoolRemovalReason; // These functions dispatch to one or all registered wallets @@ -96,7 +97,7 @@ class CValidationInterface { * * Called on a background thread. */ - virtual void TransactionAddedToMempool(const CTransactionRef &ptxn) {} + virtual void TransactionAddedToMempool(const CTransactionRef& tx) {} /** * Notifies listeners of a transaction leaving mempool. * @@ -129,7 +130,7 @@ class CValidationInterface { * * Called on a background thread. */ - virtual void TransactionRemovedFromMempool(const CTransactionRef &ptx) {} + virtual void TransactionRemovedFromMempool(const CTransactionRef& tx, MemPoolRemovalReason reason) {} /** * Notifies listeners of a block being connected. * Provides a vector of transactions evicted from the mempool as a result. @@ -196,8 +197,8 @@ class CMainSignals { void UpdatedBlockTip(const CBlockIndex *, const CBlockIndex *, bool fInitialDownload); - void TransactionAddedToMempool(const CTransactionRef &); - void TransactionRemovedFromMempool(const CTransactionRef &); + void TransactionAddedToMempool(const CTransactionRef&); + void TransactionRemovedFromMempool(const CTransactionRef&, MemPoolRemovalReason); void BlockConnected(const std::shared_ptr &, const CBlockIndex *pindex); void BlockDisconnected(const std::shared_ptr &, const CBlockIndex* pindex); void ChainStateFlushed(const CBlockLocator &); diff --git a/src/wallet/scriptpubkeyman.cpp b/src/wallet/scriptpubkeyman.cpp index b96cb0aa1a..8863e394eb 100644 --- a/src/wallet/scriptpubkeyman.cpp +++ b/src/wallet/scriptpubkeyman.cpp @@ -536,11 +536,6 @@ TransactionError LegacyScriptPubKeyMan::FillPSBT(PartiallySignedTransaction& psb continue; } - // Verify input looks sane. This will check that we have at most one uxto, witness or non-witness. - if (!input.IsSane()) { - return TransactionError::INVALID_PSBT; - } - // Get the Sighash type if (sign && input.sighash_type > 0 && input.sighash_type != sighash_type) { return TransactionError::SIGHASH_MISMATCH; diff --git a/src/wallet/test/psbt_wallet_tests.cpp b/src/wallet/test/psbt_wallet_tests.cpp index 8b7b7af21d..f751ba5a3a 100644 --- a/src/wallet/test/psbt_wallet_tests.cpp +++ b/src/wallet/test/psbt_wallet_tests.cpp @@ -66,7 +66,7 @@ BOOST_AUTO_TEST_CASE(psbt_updater_test) CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); ssTx << psbtx; std::string final_hex = HexStr(ssTx.begin(), ssTx.end()); - BOOST_CHECK_EQUAL(final_hex, "70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f00000000000100bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f6187650000000104475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae2206029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f10d90c6a4f000000800000008000000080220602dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d710d90c6a4f0000008000000080010000800001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e88701042200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b2028903010547522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae2206023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7310d90c6a4f000000800000008003000080220603089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc10d90c6a4f00000080000000800200008000220203a9a4c37f5996d3aa25dbac6b570af0650394492942460b354753ed9eeca5877110d90c6a4f000000800000008004000080002202027f6399757d2eff55a136ad02c684b1838b6556e5f1b6b34282a94b6b5005109610d90c6a4f00000080000000800500008000"); + BOOST_CHECK_EQUAL(final_hex, "70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f00000000000100bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f6187650000000104475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae2206029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f10d90c6a4f000000800000008000000080220602dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d710d90c6a4f0000008000000080010000800001008a020000000158e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd7501000000171600145f275f436b09a8cc9a2eb2a2f528485c68a56323feffffff02d8231f1b0100000017a914aed962d6654f9a2b36608eb9d64d2b260db4f1118700c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e8876500000001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e88701042200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b2028903010547522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae2206023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7310d90c6a4f000000800000008003000080220603089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc10d90c6a4f00000080000000800200008000220203a9a4c37f5996d3aa25dbac6b570af0650394492942460b354753ed9eeca5877110d90c6a4f000000800000008004000080002202027f6399757d2eff55a136ad02c684b1838b6556e5f1b6b34282a94b6b5005109610d90c6a4f00000080000000800500008000"); // Mutate the transaction so that one of the inputs is invalid psbtx.tx->vin[0].prevout.n = 2; diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 45f5542cad..af3f958349 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -21,6 +21,7 @@ #include