diff -Nru bitcoin-0.14.1.knots20170420/configure.ac bitcoin-0.14.2.knots20170618/configure.ac --- bitcoin-0.14.1.knots20170420/configure.ac 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/configure.ac 2017-06-18 17:25:52.000000000 +0000 @@ -2,7 +2,7 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 0) define(_CLIENT_VERSION_MINOR, 14) -define(_CLIENT_VERSION_REVISION, 1) +define(_CLIENT_VERSION_REVISION, 2) define(_CLIENT_VERSION_BUILD, 0) define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2017) diff -Nru bitcoin-0.14.1.knots20170420/contrib/debian/changelog bitcoin-0.14.2.knots20170618/contrib/debian/changelog --- bitcoin-0.14.1.knots20170420/contrib/debian/changelog 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/contrib/debian/changelog 2017-06-18 17:25:52.000000000 +0000 @@ -1,3 +1,122 @@ +bitcoin (0.14.1-trusty4) trusty; urgency=medium + + * Re-enable UPnP support. + + -- Matt Corallo (BlueMatt) Fri, 05 May 2017 13:28:00 -0400 + +bitcoin (0.14.1-trusty3) trusty; urgency=medium + + * Build with qt5 if we are on a non-Ubuntu (ie non-Unity) distro. + + -- Matt Corallo (BlueMatt) Thu, 04 May 2017 17:13:00 -0400 + +bitcoin (0.14.1-trusty2) trusty; urgency=medium + + * Bump minimum boost version in deps. + + -- Matt Corallo (BlueMatt) Thu, 04 May 2017 17:12:00 -0400 + +bitcoin (0.14.1-trusty1) trusty; urgency=medium + + * New upstream release. + + -- Matt Corallo (BlueMatt) Sat, 22 Apr 2017 17:10:00 -0400 + +bitcoin (0.14.0-trusty1) trusty; urgency=medium + + * New upstream release. + + -- Matt Corallo (BlueMatt) Wed, 08 Mar 2017 10:30:00 -0500 + +bitcoin (0.13.2-trusty1) trusty; urgency=medium + + * New upstream release. + + -- Matt Corallo (BlueMatt) Thu, 05 Jan 2017 09:59:00 -0500 + +bitcoin (0.13.1-trusty2) trusty; urgency=medium + + * Revert to Qt4, due to https://github.com/bitcoin/bitcoin/issues/9038 + + -- Matt Corallo (BlueMatt) Mon, 31 Oct 2016 11:16:00 -0400 + +bitcoin (0.13.1-trusty1) trusty; urgency=medium + + * New upstream release. + * Backport updated bitcoin-qt.desktop from upstream master + * Add zmq dependency + * Switch to Qt5 (breaks precise, but that was already broken by C++11) + + -- Matt Corallo (BlueMatt) Thu, 27 Oct 2016 17:32:00 -0400 + +bitcoin (0.13.0-trusty1) trusty; urgency=medium + + * New upstream release. + + -- Matt Corallo (BlueMatt) Sun, 04 Sep 2016 22:09:00 -0400 + +bitcoin (0.12.1-trusty1) trusty; urgency=medium + + * New upstream release. + + -- Matt Corallo (BlueMatt) Mon, 18 Apr 2016 14:26:00 -0700 + +bitcoin (0.12.0-trusty6) trusty; urgency=medium + + * Fix program-options dep. + + -- Matt Corallo (BlueMatt) Fri, 25 Mar 2016 21:41:00 -0700 + +bitcoin (0.12.0-trusty5) trusty; urgency=medium + + * Test explicit --with-gui + + -- Matt Corallo (BlueMatt) Tue, 23 Feb 2015 23:25:00 -0800 + +bitcoin (0.12.0-trusty4) trusty; urgency=medium + + * Fix libevent-dev dep. + + -- Matt Corallo (BlueMatt) Tue, 23 Feb 2015 23:25:00 -0800 + +bitcoin (0.12.0-trusty3) trusty; urgency=medium + + * Fix precise boost dep. + + -- Matt Corallo (BlueMatt) Tue, 23 Feb 2015 19:55:00 -0800 + +bitcoin (0.12.0-trusty2) trusty; urgency=medium + + * Fix libevent dep. + + -- Matt Corallo (BlueMatt) Tue, 23 Feb 2015 19:53:00 -0800 + +bitcoin (0.12.0-trusty1) trusty; urgency=medium + + * New upstream release + * Various updates to contrib/debian were merged, a few were not + + -- Matt Corallo (BlueMatt) Tue, 23 Feb 2015 19:29:00 -0800 + +bitcoin (0.11.2-trusty1) trusty; urgency=low + + * New upstream release. + + -- Matt Corallo (BlueMatt) Fri, 13 Nov 2015 18:39:00 -0800 + +bitcoin (0.11.1-trusty2) trusty; urgency=low + + * Remove minupnpc builddep. + + -- Matt Corallo (BlueMatt) Wed, 14 Oct 2015 23:06:00 -1000 + +bitcoin (0.11.1-trusty1) trusty; urgency=high + + * New upstream release. + * Disable all UPnP support. + + -- Matt Corallo (BlueMatt) Wed, 14 Oct 2015 13:57:00 -1000 + bitcoin (0.11.0-precise1) precise; urgency=medium * New upstream release. @@ -179,7 +298,7 @@ bitcoin (0.5.2-natty1) natty; urgency=low * Remove mentions on anonymity in package descriptions and manpage. - These should never have been there, bitcoin isn't anonymous without + These should never have been there, bitcoin isnt anonymous without a ton of work that virtually no users will ever be willing and capable of doing @@ -220,7 +339,7 @@ * Add test_bitcoin to build test * Fix clean - * Remove unnecessary build-dependancies + * Remove uneccessary build-dependancies -- Matt Corallo Wed, 26 Oct 2011 14:37:18 -0400 @@ -380,7 +499,7 @@ bitcoin (0.3.19~dfsg-6) unstable; urgency=low - * Fix override aggressive optimizations. + * Fix override agressive optimizations. * Fix tighten build-dependencies to really fit backporting to Lenny: + Add fallback build-dependency on libdb4.6++-dev. + Tighten unversioned Boost build-dependencies to recent versions, diff -Nru bitcoin-0.14.1.knots20170420/contrib/debian/control bitcoin-0.14.2.knots20170618/contrib/debian/control --- bitcoin-0.14.1.knots20170420/contrib/debian/control 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/contrib/debian/control 2017-06-18 17:25:52.000000000 +0000 @@ -1,41 +1,46 @@ Source: bitcoin Section: utils Priority: optional -Maintainer: Jonas Smedegaard -Uploaders: Micah Anderson +Maintainer: Luke Dashjr +Uploaders: Luke Dashjr Build-Depends: debhelper, devscripts, automake, libtool, bash-completion, - libboost-system-dev (>> 1.35) | libboost-system1.35-dev, libdb4.8++-dev, libssl-dev, pkg-config, - libminiupnpc8-dev | libminiupnpc-dev (>> 1.6), - libboost-filesystem-dev (>> 1.35) | libboost-filesystem1.35-dev, - libboost-program-options-dev (>> 1.35) | libboost-program-options1.35-dev, - libboost-thread-dev (>> 1.35) | libboost-thread1.35-dev, - libboost-test-dev (>> 1.35) | libboost-test1.35-dev, - qt4-qmake, - libqt4-dev, + libevent-dev, + libboost-system1.48-dev | libboost-system-dev (>> 1.47), + libboost-filesystem1.48-dev | libboost-filesystem-dev (>> 1.47), + libboost-program-options1.48-dev | libboost-program-options-dev (>> 1.47), + libboost-thread1.48-dev | libboost-thread-dev (>> 1.47), + libboost-test1.48-dev | libboost-test-dev (>> 1.47), + libboost-chrono1.48-dev | libboost-chrono-dev (>> 1.47), + libminiupnpc8-dev | libminiupnpc-dev, + qt4-qmake, libqt4-dev, + qttools5-dev-tools, qttools5-dev, libqrencode-dev, libprotobuf-dev, protobuf-compiler, - python + librsvg2-bin, + imagemagick, + python, + libzmq3-dev Standards-Version: 3.9.2 -Homepage: https://bitcoincore.org/ -Vcs-Git: git://github.com/bitcoin/bitcoin.git -Vcs-Browser: https://github.com/bitcoin/bitcoin +Homepage: https://bitcoinknots.org/ +Vcs-Git: git://github.com/bitcoinknots/bitcoin.git +Vcs-Browser: https://github.com/bitcoinknots/bitcoin Package: bitcoind Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: peer-to-peer network based digital currency - daemon - Bitcoin is an experimental new digital currency that enables instant - payments to anyone, anywhere in the world. Bitcoin uses peer-to-peer - technology to operate with no central authority: managing transactions - and issuing money are carried out collectively by the network. Bitcoin Core - is the name of the open source software which enables the use of this currency. + Bitcoin is a free open source peer-to-peer electronic cash system that + is completely decentralized, without the need for a central server or + trusted parties. Users hold the crypto keys to their own money and + transact directly with each other, with the help of a P2P network to + check for double-spending. . This package provides the daemon, bitcoind, and the CLI tool bitcoin-cli to interact with the daemon. @@ -44,11 +49,11 @@ Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: peer-to-peer network based digital currency - Qt GUI - Bitcoin is an experimental new digital currency that enables instant - payments to anyone, anywhere in the world. Bitcoin uses peer-to-peer - technology to operate with no central authority: managing transactions - and issuing money are carried out collectively by the network. Bitcoin Core - is the name of the open source software which enables the use of this currency. + Bitcoin is a free open source peer-to-peer electronic cash system that + is completely decentralized, without the need for a central server or + trusted parties. Users hold the crypto keys to their own money and + transact directly with each other, with the help of a P2P network to + check for double-spending. . This package provides Bitcoin-Qt, a GUI for Bitcoin based on Qt. @@ -56,11 +61,11 @@ Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: peer-to-peer digital currency - standalone transaction tool - Bitcoin is an experimental new digital currency that enables instant - payments to anyone, anywhere in the world. Bitcoin uses peer-to-peer - technology to operate with no central authority: managing transactions - and issuing money are carried out collectively by the network. Bitcoin Core - is the name of the open source software which enables the use of this currency. + Bitcoin is a free open source peer-to-peer electronic cash system that + is completely decentralized, without the need for a central server or + trusted parties. Users hold the crypto keys to their own money and + transact directly with each other, with the help of a P2P network to + check for double-spending. . This package provides bitcoin-tx, a command-line transaction creation tool which can be used without a bitcoin daemon. Some means of diff -Nru bitcoin-0.14.1.knots20170420/contrib/debian/rules bitcoin-0.14.2.knots20170618/contrib/debian/rules --- bitcoin-0.14.1.knots20170420/contrib/debian/rules 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/contrib/debian/rules 2017-06-18 17:25:52.000000000 +0000 @@ -12,10 +12,12 @@ if [ -f Makefile ]; then $(MAKE) distclean; fi rm -rf Makefile.in aclocal.m4 configure src/Makefile.in src/bitcoin-config.h.in src/build-aux src/qt/Makefile.in src/qt/test/Makefile.in src/test/Makefile.in +QT=$(shell dpkg-vendor --derives-from Ubuntu && echo qt4 || echo qt5) + # Yea, autogen should be run on the source archive, but I like doing git archive override_dh_auto_configure: ./autogen.sh - ./configure + ./configure --with-gui=$(QT) override_dh_auto_test: make check diff -Nru bitcoin-0.14.1.knots20170420/debian/changelog bitcoin-0.14.2.knots20170618/debian/changelog --- bitcoin-0.14.1.knots20170420/debian/changelog 2017-05-04 00:08:53.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/debian/changelog 2017-06-18 22:13:27.000000000 +0000 @@ -1,8 +1,26 @@ -bitcoin (0.14.1.knots20170420-yakkety5) yakkety; urgency=medium +bitcoin (0.14.2.knots20170618-yakkety1) yakkety; urgency=medium * PPA - -- Luke Dashjr Thu, 04 May 2017 00:08:53 +0000 + -- Luke Dashjr Sun, 18 Jun 2017 22:13:27 +0000 + +bitcoin (0.14.1-trusty4) trusty; urgency=medium + + * Re-enable UPnP support. + + -- Matt Corallo (BlueMatt) Fri, 05 May 2017 13:28:00 -0400 + +bitcoin (0.14.1-trusty3) trusty; urgency=medium + + * Build with qt5 if we are on a non-Ubuntu (ie non-Unity) distro. + + -- Matt Corallo (BlueMatt) Thu, 04 May 2017 17:13:00 -0400 + +bitcoin (0.14.1-trusty2) trusty; urgency=medium + + * Bump minimum boost version in deps. + + -- Matt Corallo (BlueMatt) Thu, 04 May 2017 17:12:00 -0400 bitcoin (0.14.1-trusty1) trusty; urgency=medium diff -Nru bitcoin-0.14.1.knots20170420/debian/control bitcoin-0.14.2.knots20170618/debian/control --- bitcoin-0.14.1.knots20170420/debian/control 2017-05-04 00:08:46.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/debian/control 2017-06-18 17:25:52.000000000 +0000 @@ -11,16 +11,16 @@ libdb4.8++-dev, libssl-dev, pkg-config, - libminiupnpc8-dev | libminiupnpc-dev (>> 1.6), libevent-dev, - libboost-system1.48-dev | libboost-system-dev (>> 1.35), - libboost-filesystem1.48-dev | libboost-filesystem-dev (>> 1.35), - libboost-program-options1.48-dev | libboost-program-options-dev (>> 1.35), - libboost-thread1.48-dev | libboost-thread-dev (>> 1.35), - libboost-test1.48-dev | libboost-test-dev (>> 1.35), - libboost-chrono1.48-dev | libboost-chrono-dev (>> 1.35), - qt4-qmake, - libqt4-dev, + libboost-system1.48-dev | libboost-system-dev (>> 1.47), + libboost-filesystem1.48-dev | libboost-filesystem-dev (>> 1.47), + libboost-program-options1.48-dev | libboost-program-options-dev (>> 1.47), + libboost-thread1.48-dev | libboost-thread-dev (>> 1.47), + libboost-test1.48-dev | libboost-test-dev (>> 1.47), + libboost-chrono1.48-dev | libboost-chrono-dev (>> 1.47), + libminiupnpc8-dev | libminiupnpc-dev, + qt4-qmake, libqt4-dev, + qttools5-dev-tools, qttools5-dev, libqrencode-dev, libprotobuf-dev, protobuf-compiler, librsvg2-bin, diff -Nru bitcoin-0.14.1.knots20170420/debian/rules bitcoin-0.14.2.knots20170618/debian/rules --- bitcoin-0.14.1.knots20170420/debian/rules 2017-05-04 00:08:46.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/debian/rules 2017-06-18 17:25:52.000000000 +0000 @@ -12,10 +12,12 @@ if [ -f Makefile ]; then $(MAKE) distclean; fi rm -rf Makefile.in aclocal.m4 configure src/Makefile.in src/bitcoin-config.h.in src/build-aux src/qt/Makefile.in src/qt/test/Makefile.in src/test/Makefile.in +QT=$(shell dpkg-vendor --derives-from Ubuntu && echo qt4 || echo qt5) + # Yea, autogen should be run on the source archive, but I like doing git archive override_dh_auto_configure: ./autogen.sh - ./configure --with-gui=qt4 + ./configure --with-gui=$(QT) override_dh_auto_test: make check diff -Nru bitcoin-0.14.1.knots20170420/depends/packages/miniupnpc.mk bitcoin-0.14.2.knots20170618/depends/packages/miniupnpc.mk --- bitcoin-0.14.1.knots20170420/depends/packages/miniupnpc.mk 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/depends/packages/miniupnpc.mk 2017-06-18 17:25:52.000000000 +0000 @@ -1,8 +1,8 @@ package=miniupnpc -$(package)_version=2.0 +$(package)_version=2.0.20170509 $(package)_download_path=http://miniupnp.free.fr/files $(package)_file_name=$(package)-$($(package)_version).tar.gz -$(package)_sha256_hash=d434ceb8986efbe199c5ca53f90ed53eab290b1e6d0530b717eb6fa49d61f93b +$(package)_sha256_hash=d3c368627f5cdfb66d3ebd64ca39ba54d6ff14a61966dbecb8dd296b7039f16a define $(package)_set_vars $(package)_build_opts=CC="$($(package)_cc)" diff -Nru bitcoin-0.14.1.knots20170420/doc/bips.md bitcoin-0.14.2.knots20170618/doc/bips.md --- bitcoin-0.14.1.knots20170420/doc/bips.md 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/doc/bips.md 2017-06-18 17:25:52.000000000 +0000 @@ -19,7 +19,7 @@ * [`BIP 61`](https://github.com/bitcoin/bips/blob/master/bip-0061.mediawiki): The 'reject' protocol message (and the protocol version bump to 70002) was added in **v0.9.0** ([PR #3185](https://github.com/bitcoin/bitcoin/pull/3185)). * [`BIP 65`](https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki): The CHECKLOCKTIMEVERIFY softfork was merged in **v0.12.0** ([PR #6351](https://github.com/bitcoin/bitcoin/pull/6351)), and backported to **v0.11.2** and **v0.10.4**. Mempool-only CLTV was added in [PR #6124](https://github.com/bitcoin/bitcoin/pull/6124). * [`BIP 66`](https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki): The strict DER rules and associated version 3 blocks have been implemented since **v0.10.0** ([PR #5713](https://github.com/bitcoin/bitcoin/pull/5713)). -* [`BIP 67`](https://github.com/bitcoin/bips/blob/master/bip-0067.mediawiki): Sorting multisig keys according to BIP 67 was merged in **v0.15.0** ([PR #8751](https://github.com/bitcoin/bitcoin/pull/8751)). +* [`BIP 67`](https://github.com/bitcoin/bips/blob/master/bip-0067.mediawiki): Sorting multisig keys according to BIP 67 was merged in **v0.13.0** ([PR #8751](https://github.com/bitcoin/bitcoin/pull/8751)). * [`BIP 68`](https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki): Sequence locks have been implemented as of **v0.12.1** ([PR #7184](https://github.com/bitcoin/bitcoin/pull/7184)), and have been activated since *block 419328*. * [`BIP 70`](https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki) [`71`](https://github.com/bitcoin/bips/blob/master/bip-0071.mediawiki) [`72`](https://github.com/bitcoin/bips/blob/master/bip-0072.mediawiki): Payment Protocol support has been available in Bitcoin Core GUI since **v0.9.0** ([PR #5216](https://github.com/bitcoin/bitcoin/pull/5216)). * [`BIP 90`](https://github.com/bitcoin/bips/blob/master/bip-0090.mediawiki): Trigger mechanism for activation of BIPs 34, 65, and 66 has been simplified to block height checks since **v0.14.0** ([PR #8391](https://github.com/bitcoin/bitcoin/pull/8391)). @@ -34,4 +34,5 @@ * [`BIP 144`](https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki): Segregated Witness as of **0.13.0** ([PR 8149](https://github.com/bitcoin/bitcoin/pull/8149)). * [`BIP 145`](https://github.com/bitcoin/bips/blob/master/bip-0145.mediawiki): getblocktemplate updates for Segregated Witness as of **v0.13.0** ([PR 8149](https://github.com/bitcoin/bitcoin/pull/8149)). * [`BIP 147`](https://github.com/bitcoin/bips/blob/master/bip-0147.mediawiki): NULLDUMMY softfork as of **v0.13.1** ([PR 8636](https://github.com/bitcoin/bitcoin/pull/8636) and [PR 8937](https://github.com/bitcoin/bitcoin/pull/8937)). +* [`BIP 148`](https://github.com/bitcoin/bips/blob/master/bip-0148.mediawiki): Mandatory activation of Segwit softfork as of **v0.14.2** only with `-bip148=1` ([PR 10532](https://github.com/bitcoin/bitcoin/pull/10532)). * [`BIP 152`](https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki): Compact block transfer and related optimizations are used as of **v0.13.0** ([PR 8068](https://github.com/bitcoin/bitcoin/pull/8068)). diff -Nru bitcoin-0.14.1.knots20170420/doc/build-unix.md bitcoin-0.14.2.knots20170618/doc/build-unix.md --- bitcoin-0.14.1.knots20170420/doc/build-unix.md 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/doc/build-unix.md 2017-06-18 17:25:52.000000000 +0000 @@ -321,8 +321,10 @@ started than on [OpenBSD](build-openbsd.md). Installing dependencies: pkg install autoconf automake libtool pkgconf - pkg install boost-libs openssl libevent2 + pkg install boost-libs openssl libevent + pkg install gmake +You need to use GNU make (`gmake`) instead of `make`. (`libressl` instead of `openssl` will also work) For the wallet (optional): @@ -338,7 +340,7 @@ ./autogen.sh ./configure --with-incompatible-bdb BDB_CFLAGS="-I/usr/local/include/db5" BDB_LIBS="-L/usr/local/lib -ldb_cxx-5" - make + gmake *Note on debugging*: The version of `gdb` installed by default is [ancient and considered harmful](https://wiki.freebsd.org/GdbRetirement). It is not suitable for debugging a multi-threaded C++ program, not even for getting backtraces. Please install the package `gdb` and diff -Nru bitcoin-0.14.1.knots20170420/doc/Doxyfile bitcoin-0.14.2.knots20170618/doc/Doxyfile --- bitcoin-0.14.1.knots20170420/doc/Doxyfile 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/doc/Doxyfile 2017-06-18 17:25:52.000000000 +0000 @@ -38,7 +38,7 @@ # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 0.14.1 +PROJECT_NUMBER = 0.14.2 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff -Nru bitcoin-0.14.1.knots20170420/doc/man/bitcoin-cli.1 bitcoin-0.14.2.knots20170618/doc/man/bitcoin-cli.1 --- bitcoin-0.14.1.knots20170420/doc/man/bitcoin-cli.1 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/doc/man/bitcoin-cli.1 2017-06-18 17:25:52.000000000 +0000 @@ -1,15 +1,15 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. -.TH BITCOIN-CLI "1" "February 2017" "bitcoin-cli v0.14.0.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.6. +.TH BITCOIN-CLI "1" "June 2017" "bitcoin-cli v0.14.2.0" "User Commands" .SH NAME -bitcoin-cli \- manual page for bitcoin-cli v0.14.0.0 +bitcoin-cli \- manual page for bitcoin-cli v0.14.2.0 .SH DESCRIPTION -Bitcoin Core RPC client version v0.14.0.0\-dirty +Bitcoin Knots RPC client version v0.14.2.0\-dirty .SS "Usage:" .TP bitcoin\-cli [options] [params] -Send command to Bitcoin Core +Send command to Bitcoin Knots .IP -bitcoin\-cli [options] \fB\-named\fR [name=value] ... Send command to Bitcoin Core (with named arguments) +bitcoin\-cli [options] \fB\-named\fR [name=value] ... Send command to Bitcoin Knots (with named arguments) bitcoin\-cli [options] help List commands bitcoin\-cli [options] help Get help for a command .SH OPTIONS @@ -22,6 +22,10 @@ .IP Specify configuration file (default: bitcoin.conf) .HP +\fB\-confrw=\fR +.IP +Specify read/write configuration file (default: bitcoin_rw.conf) +.HP \fB\-datadir=\fR .IP Specify data directory @@ -73,9 +77,9 @@ .SH COPYRIGHT Copyright (C) 2009-2017 The Bitcoin Core developers -Please contribute if you find Bitcoin Core useful. Visit - for further information about the software. -The source code is available from . +Please contribute if you find Bitcoin Knots useful. Visit + for further information about the software. +The source code is available from . This is experimental software. Distributed under the MIT software license, see the accompanying file COPYING diff -Nru bitcoin-0.14.1.knots20170420/doc/man/bitcoind.1 bitcoin-0.14.2.knots20170618/doc/man/bitcoind.1 --- bitcoin-0.14.1.knots20170420/doc/man/bitcoind.1 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/doc/man/bitcoind.1 2017-06-18 17:25:52.000000000 +0000 @@ -1,13 +1,13 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. -.TH BITCOIND "1" "February 2017" "bitcoind v0.14.0.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.6. +.TH BITCOIND "1" "June 2017" "bitcoind v0.14.2.0" "User Commands" .SH NAME -bitcoind \- manual page for bitcoind v0.14.0.0 +bitcoind \- manual page for bitcoind v0.14.2.0 .SH DESCRIPTION -Bitcoin Core Daemon version v0.14.0.0\-dirty +Bitcoin Knots Daemon version v0.14.2.0\-dirty .SS "Usage:" .TP bitcoind [options] -Start Bitcoin Core Daemon +Start Bitcoin Knots Daemon .SH OPTIONS .HP \-? @@ -41,6 +41,14 @@ .IP Specify configuration file (default: bitcoin.conf) .HP +\fB\-confrw=\fR +.IP +Specify read/write configuration file (default: bitcoin_rw.conf) +.HP +\fB\-corepolicy\fR +.IP +Use Bitcoin Core policy defaults (default: false) +.HP \fB\-daemon\fR .IP Run in the background as a daemon and accept commands @@ -51,7 +59,7 @@ .HP \fB\-dbcache=\fR .IP -Set database cache size in megabytes (4 to 16384, default: 300) +Set database cache size in megabytes (4 to 16384, default: 450) .HP \fB\-loadblock=\fR .IP @@ -77,7 +85,7 @@ .HP \fB\-par=\fR .IP -Set the number of script verification threads (\fB\-6\fR to 16, 0 = auto, <0 = +Set the number of script verification threads (\fB\-4\fR to 16, 0 = auto, <0 = leave that many cores free, default: 0) .HP \fB\-pid=\fR @@ -199,7 +207,7 @@ .HP \fB\-permitbaremultisig\fR .IP -Relay non\-P2SH multisig (default: 1) +Relay non\-P2SH multisig (default: 0) .HP \fB\-peerbloomfilters\fR .IP @@ -252,8 +260,8 @@ .HP \fB\-whitelist=\fR .IP -Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or -CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple +Whitelist peers using the given IP address (e.g. 1.2.3.4) or CIDR +notated network (e.g. 1.2.3.0/24). Can be specified multiple times. Whitelisted peers cannot be DoS banned and their transactions are always relayed, even if they are already in the mempool, useful e.g. for a gateway @@ -419,11 +427,19 @@ .PP Node relay options: .HP +\fB\-acceptnonstdtxn\fR +.IP +Relay and mine "non\-standard" transactions (default: 0 or testnet: 1) +.HP \fB\-bytespersigop\fR .IP Equivalent bytes per sigop in transactions for relay and mining (default: 20) .HP +\fB\-bytespersigopstrict\fR +.IP +Minimum bytes per sigop in transactions we relay and mine (default: 20) +.HP \fB\-datacarrier\fR .IP Relay and mine data carrier transactions (default: 1) @@ -431,11 +447,20 @@ \fB\-datacarriersize\fR .IP Maximum size of data in data carrier transactions we relay and mine -(default: 83) +(default: 42) .HP \fB\-mempoolreplacement\fR .IP Enable transaction replacement in the memory pool (default: 1) +.HP +\fB\-spamfilter\fR +.IP +Ignore known spam using pattern matching (default: 1) +.HP +\fB\-spkreuse\fR +.IP +Accept transactions reusing addresses or other pubkey scripts (default: +allow) .PP Block creation options: .HP @@ -445,17 +470,26 @@ .HP \fB\-blockmaxsize=\fR .IP -Set maximum block size in bytes (default: 750000) +Set maximum block size in bytes (default: 500000) .HP \fB\-blockprioritysize=\fR .IP Set maximum size of high\-priority/low\-fee transactions in bytes -(default: 0) +(default: 100000) .HP \fB\-blockmintxfee=\fR .IP Set lowest fee rate (in BTC/kB) for transactions to be included in block creation. (default: 0.00001) +.HP +\fB\-bip148\fR +.IP +Enable BIP148/UASF (default: 0) +.HP +\fB\-priorityaccurate\fR +.IP +Update coin\-age priority accurately when parent transactions are +confirmed (default: 1) .PP RPC server options: .HP @@ -509,12 +543,22 @@ \fB\-rpcthreads=\fR .IP Set the number of threads to service RPC calls (default: 4) +.PP +Statistic options: +.HP +\fB\-statsenable=\fR +.IP +Enable statistics (default: 0) +.HP +\fB\-statsmaxmemorytarget=\fR +.IP +Set the memory limit target for statictics in bytes (default: 10485760) .SH COPYRIGHT Copyright (C) 2009-2017 The Bitcoin Core developers -Please contribute if you find Bitcoin Core useful. Visit - for further information about the software. -The source code is available from . +Please contribute if you find Bitcoin Knots useful. Visit + for further information about the software. +The source code is available from . This is experimental software. Distributed under the MIT software license, see the accompanying file COPYING diff -Nru bitcoin-0.14.1.knots20170420/doc/man/bitcoin-qt.1 bitcoin-0.14.2.knots20170618/doc/man/bitcoin-qt.1 --- bitcoin-0.14.1.knots20170420/doc/man/bitcoin-qt.1 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/doc/man/bitcoin-qt.1 2017-06-18 17:25:52.000000000 +0000 @@ -1,9 +1,9 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. -.TH BITCOIN-QT "1" "February 2017" "bitcoin-qt v0.14.0.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.6. +.TH BITCOIN-QT "1" "June 2017" "bitcoin-qt v0.14.2.0" "User Commands" .SH NAME -bitcoin-qt \- manual page for bitcoin-qt v0.14.0.0 +bitcoin-qt \- manual page for bitcoin-qt v0.14.2.0 .SH DESCRIPTION -Bitcoin Core version v0.14.0.0\-dirty (64\-bit) +Bitcoin Knots version v0.14.2.0\-dirty (64\-bit) Usage: .IP bitcoin\-qt [command\-line options] @@ -40,13 +40,21 @@ .IP Specify configuration file (default: bitcoin.conf) .HP +\fB\-confrw=\fR +.IP +Specify read/write configuration file (default: bitcoin_rw.conf) +.HP +\fB\-corepolicy\fR +.IP +Use Bitcoin Core policy defaults (default: false) +.HP \fB\-datadir=\fR .IP Specify data directory .HP \fB\-dbcache=\fR .IP -Set database cache size in megabytes (4 to 16384, default: 300) +Set database cache size in megabytes (4 to 16384, default: 450) .HP \fB\-loadblock=\fR .IP @@ -72,7 +80,7 @@ .HP \fB\-par=\fR .IP -Set the number of script verification threads (\fB\-6\fR to 16, 0 = auto, <0 = +Set the number of script verification threads (\fB\-4\fR to 16, 0 = auto, <0 = leave that many cores free, default: 0) .HP \fB\-pid=\fR @@ -194,7 +202,7 @@ .HP \fB\-permitbaremultisig\fR .IP -Relay non\-P2SH multisig (default: 1) +Relay non\-P2SH multisig (default: 0) .HP \fB\-peerbloomfilters\fR .IP @@ -247,8 +255,8 @@ .HP \fB\-whitelist=\fR .IP -Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or -CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple +Whitelist peers using the given IP address (e.g. 1.2.3.4) or CIDR +notated network (e.g. 1.2.3.0/24). Can be specified multiple times. Whitelisted peers cannot be DoS banned and their transactions are always relayed, even if they are already in the mempool, useful e.g. for a gateway @@ -414,11 +422,19 @@ .PP Node relay options: .HP +\fB\-acceptnonstdtxn\fR +.IP +Relay and mine "non\-standard" transactions (default: 0 or testnet: 1) +.HP \fB\-bytespersigop\fR .IP Equivalent bytes per sigop in transactions for relay and mining (default: 20) .HP +\fB\-bytespersigopstrict\fR +.IP +Minimum bytes per sigop in transactions we relay and mine (default: 20) +.HP \fB\-datacarrier\fR .IP Relay and mine data carrier transactions (default: 1) @@ -426,11 +442,20 @@ \fB\-datacarriersize\fR .IP Maximum size of data in data carrier transactions we relay and mine -(default: 83) +(default: 42) .HP \fB\-mempoolreplacement\fR .IP Enable transaction replacement in the memory pool (default: 1) +.HP +\fB\-spamfilter\fR +.IP +Ignore known spam using pattern matching (default: 1) +.HP +\fB\-spkreuse\fR +.IP +Accept transactions reusing addresses or other pubkey scripts (default: +allow) .PP Block creation options: .HP @@ -440,17 +465,26 @@ .HP \fB\-blockmaxsize=\fR .IP -Set maximum block size in bytes (default: 750000) +Set maximum block size in bytes (default: 500000) .HP \fB\-blockprioritysize=\fR .IP Set maximum size of high\-priority/low\-fee transactions in bytes -(default: 0) +(default: 100000) .HP \fB\-blockmintxfee=\fR .IP Set lowest fee rate (in BTC/kB) for transactions to be included in block creation. (default: 0.00001) +.HP +\fB\-bip148\fR +.IP +Enable BIP148/UASF (default: 0) +.HP +\fB\-priorityaccurate\fR +.IP +Update coin\-age priority accurately when parent transactions are +confirmed (default: 1) .PP RPC server options: .HP @@ -505,6 +539,16 @@ .IP Set the number of threads to service RPC calls (default: 4) .PP +Statistic options: +.HP +\fB\-statsenable=\fR +.IP +Enable statistics (default: 0) +.HP +\fB\-statsmaxmemorytarget=\fR +.IP +Set the memory limit target for statictics in bytes (default: 10485760) +.PP UI Options: .HP \fB\-choosedatadir\fR @@ -533,9 +577,9 @@ .SH COPYRIGHT Copyright (C) 2009-2017 The Bitcoin Core developers -Please contribute if you find Bitcoin Core useful. Visit - for further information about the software. -The source code is available from . +Please contribute if you find Bitcoin Knots useful. Visit + for further information about the software. +The source code is available from . This is experimental software. Distributed under the MIT software license, see the accompanying file COPYING diff -Nru bitcoin-0.14.1.knots20170420/doc/man/bitcoin-tx.1 bitcoin-0.14.2.knots20170618/doc/man/bitcoin-tx.1 --- bitcoin-0.14.1.knots20170420/doc/man/bitcoin-tx.1 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/doc/man/bitcoin-tx.1 2017-06-18 17:25:52.000000000 +0000 @@ -1,9 +1,9 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. -.TH BITCOIN-TX "1" "February 2017" "bitcoin-tx v0.14.0.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.6. +.TH BITCOIN-TX "1" "June 2017" "bitcoin-tx v0.14.2.0" "User Commands" .SH NAME -bitcoin-tx \- manual page for bitcoin-tx v0.14.0.0 +bitcoin-tx \- manual page for bitcoin-tx v0.14.2.0 .SH DESCRIPTION -Bitcoin Core bitcoin\-tx utility version v0.14.0.0\-dirty +Bitcoin Knots bitcoin\-tx utility version v0.14.2.0\-dirty .SS "Usage:" .TP bitcoin\-tx [options] [commands] @@ -63,6 +63,11 @@ .IP Set TX version to N .IP +rbfoptin(=N) +.IP +Set RBF opt\-in sequence number for input N (if not provided, opt\-in all +available inputs) +.IP outaddr=VALUE:ADDRESS .IP Add address\-based output to TX @@ -109,9 +114,9 @@ .SH COPYRIGHT Copyright (C) 2009-2017 The Bitcoin Core developers -Please contribute if you find Bitcoin Core useful. Visit - for further information about the software. -The source code is available from . +Please contribute if you find Bitcoin Knots useful. Visit + for further information about the software. +The source code is available from . This is experimental software. Distributed under the MIT software license, see the accompanying file COPYING diff -Nru bitcoin-0.14.1.knots20170420/doc/README.md bitcoin-0.14.2.knots20170618/doc/README.md --- bitcoin-0.14.1.knots20170420/doc/README.md 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/doc/README.md 2017-06-18 17:25:52.000000000 +0000 @@ -1,4 +1,4 @@ -Bitcoin Core 0.14.1 +Bitcoin Core 0.14.2 ===================== Setup diff -Nru bitcoin-0.14.1.knots20170420/doc/README_windows.txt bitcoin-0.14.2.knots20170618/doc/README_windows.txt --- bitcoin-0.14.1.knots20170420/doc/README_windows.txt 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/doc/README_windows.txt 2017-06-18 17:25:52.000000000 +0000 @@ -1,4 +1,4 @@ -Bitcoin Core 0.14.1 +Bitcoin Core 0.14.2 ===================== Intro diff -Nru bitcoin-0.14.1.knots20170420/doc/release-notes/release-notes-0.14.1.md bitcoin-0.14.2.knots20170618/doc/release-notes/release-notes-0.14.1.md --- bitcoin-0.14.1.knots20170420/doc/release-notes/release-notes-0.14.1.md 1970-01-01 00:00:00.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/doc/release-notes/release-notes-0.14.1.md 2017-06-18 17:25:52.000000000 +0000 @@ -0,0 +1,143 @@ +Bitcoin Core version 0.14.1 is now available from: + + + +This is a new minor version release, including various bugfixes and +performance improvements, as well as updated translations. + +Please report bugs using the issue tracker at github: + + + +To receive security and update notifications, please subscribe to: + + + +Compatibility +============== + +Bitcoin Core is extensively tested on multiple operating systems using +the Linux kernel, macOS 10.8+, and Windows Vista and later. + +Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support), +No attempt is made to prevent installing or running the software on Windows XP, you +can still do so at your own risk but be aware that there are known instabilities and issues. +Please do not report issues about Windows XP to the issue tracker. + +Bitcoin Core should also work on most other Unix-like systems but is not +frequently tested on them. + +Notable changes +=============== + +RPC changes +----------- + +- The first positional argument of `createrawtransaction` was renamed from + `transactions` to `inputs`. + +- The argument of `disconnectnode` was renamed from `node` to `address`. + +These interface changes break compatibility with 0.14.0, when the named +arguments functionality, introduced in 0.14.0, is used. Client software +using these calls with named arguments needs to be updated. + +Mining +------ + +In previous versions, getblocktemplate required segwit support from downstream +clients/miners once the feature activated on the network. In this version, it +now supports non-segwit clients even after activation, by removing all segwit +transactions from the returned block template. This allows non-segwit miners to +continue functioning correctly even after segwit has activated. + +Due to the limitations in previous versions, getblocktemplate also recommended +non-segwit clients to not signal for the segwit version-bit. Since this is no +longer an issue, getblocktemplate now always recommends signalling segwit for +all miners. This is safe because ability to enforce the rule is the only +required criteria for safe activation, not actually producing segwit-enabled +blocks. + +UTXO memory accounting +---------------------- + +Memory usage for the UTXO cache is being calculated more accurately, so that +the configured limit (`-dbcache`) will be respected when memory usage peaks +during cache flushes. The memory accounting in prior releases is estimated to +only account for half the actual peak utilization. + +The default `-dbcache` has also been changed in this release to 450MiB. Users +who currently set `-dbcache` to a high value (e.g. to keep the UTXO more fully +cached in memory) should consider increasing this setting in order to achieve +the same cache performance as prior releases. Users on low-memory systems +(such as systems with 1GB or less) should consider specifying a lower value for +this parameter. + +Additional information relating to running on low-memory systems can be found +here: +[reducing-bitcoind-memory-usage.md](https://gist.github.com/laanwj/efe29c7661ce9b6620a7). + +0.14.1 Change log +================= + +Detailed release notes follow. This overview includes changes that affect +behavior, not code moves, refactors and string updates. For convenience in locating +the code changes and accompanying discussion, both the pull request and +git merge commit are mentioned. + +### RPC and other APIs +- #10084 `142fbb2` Rename first named arg of createrawtransaction (MarcoFalke) +- #10139 `f15268d` Remove auth cookie on shutdown (practicalswift) +- #10146 `2fea10a` Better error handling for submitblock (rawodb, gmaxwell) +- #10144 `d947afc` Prioritisetransaction wasn't always updating ancestor fee (sdaftuar) +- #10204 `3c79602` Rename disconnectnode argument (jnewbery) + +### Block and transaction handling +- #10126 `0b5e162` Compensate for memory peak at flush time (sipa) +- #9912 `fc3d7db` Optimize GetWitnessHash() for non-segwit transactions (sdaftuar) +- #10133 `ab864d3` Clean up calculations of pcoinsTip memory usage (morcos) + +### P2P protocol and network code +- #9953/#10013 `d2548a4` Fix shutdown hang with >= 8 -addnodes set (TheBlueMatt) +- #10176 `30fa231` net: gracefully handle NodeId wrapping (theuni) + +### Build system +- #9973 `e9611d1` depends: fix zlib build on osx (theuni) + +### GUI +- #10060 `ddc2dd1` Ensure an item exists on the rpcconsole stack before adding (achow101) + +### Mining +- #9955/#10006 `569596c` Don't require segwit in getblocktemplate for segwit signalling or mining (sdaftuar) +- #9959/#10127 `b5c3440` Prevent slowdown in CreateNewBlock on large mempools (sdaftuar) + +### Tests and QA +- #10157 `55f641c` Fix the `mempool_packages.py` test (sdaftuar) + +### Miscellaneous +- #10037 `4d8e660` Trivial: Fix typo in help getrawtransaction RPC (keystrike) +- #10120 `e4c9a90` util: Work around (virtual) memory exhaustion on 32-bit w/ glibc (laanwj) +- #10130 `ecc5232` bitcoin-tx input verification (awemany, jnewbery) + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- Alex Morcos +- Andrew Chow +- Awemany +- Cory Fields +- Gregory Maxwell +- James Evans +- John Newbery +- MarcoFalke +- Matt Corallo +- Pieter Wuille +- practicalswift +- rawodb +- Suhas Daftuar +- Wladimir J. van der Laan + +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). + diff -Nru bitcoin-0.14.1.knots20170420/doc/release-notes.md bitcoin-0.14.2.knots20170618/doc/release-notes.md --- bitcoin-0.14.1.knots20170420/doc/release-notes.md 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/doc/release-notes.md 2017-06-18 17:25:52.000000000 +0000 @@ -1,6 +1,6 @@ -Bitcoin Knots version 0.14.1.knots20170420 is now available from: +Bitcoin Knots version 0.14.2.knots20170618 is now available from: - + This is a new minor version release, including new features, various bugfixes and performance improvements, as well as updated translations. @@ -27,54 +27,128 @@ Notable changes =============== -RPC changes ------------ +BIP148 support +-------------- -- The first positional argument of `createrawtransaction` was renamed from - `transactions` to `inputs`. +A large number of users have decided to enforce Segwit activation beginning in August 2017, +using a user-activated softfork defined by BIP148. -- The argument of `disconnectnode` was renamed from `node` to `address`. +As a softfork, BIP148 is backward compatible with old nodes that don't support it. However, +as usual, unsupporting nodes are left vulnerable to a chain split attack by miners, which +can form a second variant of Bitcoin rejected by BIP148 nodes. + +Bitcoin Knots can either support BIP148 or leave it unsupported, giving the user the end +decision. This is configured using the new `bip148` config file option. Users should set +this option before August, to indicate whether they wish to support BIP148 (`bip148=1`), or +remain vulnerable to a chain split attack from miners (`bip148=0`). Please note that in +this current version of Bitcoin Knots, the default is to *not* support BIP148, but this +default may be changed in a future version, so either way, you should set the option. + +Enabling BIP148 support in August or later is supported, only provided there is either no +chain split, or your node has not pruned blocks from the beginning of the split. + +Further details on the risks of supporting or not supporting BIP148 can be read at: + + + +Software expiration +------------------- + +This release of Bitcoin Knots will expire on January 1st, 2019. This is a security +precaution to help ensure nodes remain kept up to date. Future versions of Bitcoin Knots +will also expire 1-2 years after their release. + +This is an optional feature. You may disable it by setting `softwareexpiry=0` in your +config file. You may also set `softwareexpiry` to any other POSIX timestamp, to trigger +an expiration at that time instead. + +Wallet maintenance limit +------------------------ + +Previous versions of Bitcoin Knots allowed wallet maintenance (`-salvagewallet`, +`-zapwallettxes`, and `-upgradewallet`) on multiple wallet files. This is no longer +allowed for safety. If you wish to do such maintenance to multiple wallets, please +script it by launching bitcoind once per wallet. + +Low-level RPC changes +--------------------- + +- Error codes have been updated to be more accurate for the following error cases: + - `getblock` now returns RPC_MISC_ERROR if the block can't be found on disk (for + example if the block has been pruned). Previously returned RPC_INTERNAL_ERROR. + - `pruneblockchain` now returns RPC_MISC_ERROR if the blocks cannot be pruned + because the node is not in pruned mode. Previously returned RPC_METHOD_NOT_FOUND. + - `pruneblockchain` now returns RPC_INVALID_PARAMETER if the blocks cannot be pruned + because the supplied timestamp is too late. Previously returned RPC_INTERNAL_ERROR. + - `pruneblockchain` now returns RPC_MISC_ERROR if the blocks cannot be pruned + because the blockchain is too short. Previously returned RPC_INTERNAL_ERROR. + - `setban` now returns RPC_CLIENT_INVALID_IP_OR_SUBNET if the supplied IP address + or subnet is invalid. Previously returned RPC_CLIENT_NODE_ALREADY_ADDED. + - `setban` now returns RPC_CLIENT_INVALID_IP_OR_SUBNET if the user tries to unban + a node that has not previously been banned. Previously returned RPC_MISC_ERROR. + - `removeprunedfunds` now returns RPC_WALLET_ERROR if bitcoind is unable to remove + the transaction. Previously returned RPC_INTERNAL_ERROR. + - `removeprunedfunds` now returns RPC_INVALID_PARAMETER if the transaction does not + exist in the wallet. Previously returned RPC_INTERNAL_ERROR. + - `fundrawtransaction` now returns RPC_INVALID_ADDRESS_OR_KEY if an invalid change + address is provided. Previously returned RPC_INVALID_PARAMETER. + - `fundrawtransaction` now returns RPC_WALLET_ERROR if bitcoind is unable to create + the transaction. The error message provides further details. Previously returned + RPC_INTERNAL_ERROR. + - `bumpfee` now returns RPC_INVALID_PARAMETER if the provided transaction has + descendants in the wallet. Previously returned RPC_MISC_ERROR. + - `bumpfee` now returns RPC_INVALID_PARAMETER if the provided transaction has + descendants in the mempool. Previously returned RPC_MISC_ERROR. + - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has + has been mined or conflicts with a mined transaction. Previously returned + RPC_INVALID_ADDRESS_OR_KEY. + - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction is not + BIP 125 replaceable. Previously returned RPC_INVALID_ADDRESS_OR_KEY. + - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has already + been bumped by a different transaction. Previously returned RPC_INVALID_REQUEST. + - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction contains + inputs which don't belong to this wallet. Previously returned RPC_INVALID_ADDRESS_OR_KEY. + - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has multiple change + outputs. Previously returned RPC_MISC_ERROR. + - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has no change + output. Previously returned RPC_MISC_ERROR. + - `bumpfee` now returns RPC_WALLET_ERROR if the fee is too high. Previously returned + RPC_MISC_ERROR. + - `bumpfee` now returns RPC_WALLET_ERROR if the fee is too low. Previously returned + RPC_MISC_ERROR. + - `bumpfee` now returns RPC_WALLET_ERROR if the change output is too small to bump the + fee. Previously returned RPC_MISC_ERROR. +- `signrawtransaction` errors will now include the txin witness in the object under a new + "witness" key as well as the former "txinwitness" key (which is nowdeprecated and will be + removed in 0.15). +- `getrawtransaction` can now be given an optional block hash to find the requested + transaction in. + +miniupnp CVE-2017-8798 +---------------------------- + +Bundled miniupnpc was updated to 2.0.20170509. This fixes an integer signedness error +(present in MiniUPnPc v1.4.20101221 through v2.0) that allows remote attackers +(within the LAN) to cause a denial of service or possibly have unspecified +other impact. + +This only affects users that have explicitly enabled UPnP through the GUI +setting or through the `-upnp` option, as since the last UPnP vulnerability +(in Bitcoin Core 0.10.3) it has been disabled by default. + +If you use this option, it is recommended to upgrade to this version as soon as +possible. + +Known Bugs +========== + +Since 0.14.0 the approximate transaction fee shown in Bitcoin-Qt when using coin +control and smart fee estimation does not reflect any change in target from the +smart fee slider. It will only present an approximate fee calculated using the +default target. The fee calculated using the correct target is still applied to +the transaction and shown in the final send confirmation dialog. -These interface changes break compatibility with 0.14.0, when the named -arguments functionality, introduced in 0.14.0, is used. Client software -using these calls with named arguments needs to be updated. - -Mining ------- - -In previous versions, getblocktemplate required segwit support from downstream -clients/miners once the feature activated on the network. In this version, it -now supports non-segwit clients even after activation, by removing all segwit -transactions from the returned block template. This allows non-segwit miners to -continue functioning correctly even after segwit has activated. - -Due to the limitations in previous versions, getblocktemplate also recommended -non-segwit clients to not signal for the segwit version-bit. Since this is no -longer an issue, getblocktemplate now always recommends signalling segwit for -all miners. This is safe because ability to enforce the rule is the only -required criteria for safe activation, not actually producing segwit-enabled -blocks. - -UTXO memory accounting ----------------------- - -Memory usage for the UTXO cache is being calculated more accurately, so that -the configured limit (`-dbcache`) will be respected when memory usage peaks -during cache flushes. The memory accounting in prior releases is estimated to -only account for half the actual peak utilization. - -The default `-dbcache` has also been changed in this release to 450MiB. Users -who currently set `-dbcache` to a high value (e.g. to keep the UTXO more fully -cached in memory) should consider increasing this setting in order to achieve -the same cache performance as prior releases. Users on low-memory systems -(such as systems with 1GB or less) should consider specifying a lower value for -this parameter. - -Additional information relating to running on low-memory systems can be found -here: -[reducing-bitcoind-memory-usage.md](https://gist.github.com/laanwj/efe29c7661ce9b6620a7). - -0.14.1 Change log +0.14.2 Change log ================= Detailed release notes follow. This overview includes changes that affect @@ -84,72 +158,75 @@ Core) are flagged with an asterisk ('*') before the description. ### RPC and other APIs -- #10084 `142fbb2` Rename first named arg of createrawtransaction (MarcoFalke) -- #10139 `f15268d` Remove auth cookie on shutdown (practicalswift) -- #10146 `2fea10a` Better error handling for submitblock (rawodb, gmaxwell) -- #10144 `d947afc` Prioritisetransaction wasn't always updating ancestor fee (sdaftuar) -- #10204 `3c79602` Rename disconnectnode argument (jnewbery) -- #10143 `3a8ae05` *Allow disconnectnode() to be called with node id (jnewbery) -- #10234 `408c686` *listbanned RPC and QT should show correct banned subnets (jnewbery) - -### Block and transaction handling -- #10126 `0b5e162` Compensate for memory peak at flush time (sipa) -- #9912 `fc3d7db` Optimize GetWitnessHash() for non-segwit transactions (sdaftuar) -- #10133 `ab864d3` Clean up calculations of pcoinsTip memory usage (morcos) +- #10410 `321419b` Fix importwallet edge case rescan bug (ryanofsky) +- #9853 `3ad00b4` *Return correct error codes in bumpfee (John Newbery) +- #9853 `fe51c89` *Return correct error codes in blockchain.cpp (John Newbery) +- #9853 `18c109d` *Return correct error codes in removeprunedfunds (John Newbery) +- #9853 `4943d7a` *Return correct error codes in setban (John Newbery) +- #9853 `f5efe82` *Return correct error codes in fundrawtransaction (John Newbery) +- #8384 `0daa720` *Add witness data output to TxInError messages in a new key (Gregory Sanders) +- #10275 `633d334` *Allow getrawtransaction to take optional blockhash to fetch transaction from a block directly (Karl-Johan Alm) +- #10595 `48f16d6` *Bugfix: RPC/Mining: Use pre-segwit sigops and limits, when working with non-segwit GBT clients (Luke Dashjr) ### P2P protocol and network code -- #9953/#10013 `d2548a4` Fix shutdown hang with >= 8 -addnodes set (TheBlueMatt) -- #10176 `30fa231` net: gracefully handle NodeId wrapping (theuni) +- #10424 `37a8fc5` Populate services in GetLocalAddress (morcos) +- #10441 `9e3ad50` Only enforce expected services for half of outgoing connections (theuni) +- #10593 `73ad56d` *Instead of DoS banning for invalid blocks, merely disconnect nodes if we're relying on them as a primary node (Luke Dashjr) +- #10594 `a511b89` *Bugfix: net: Apply whitelisting criteria to outgoing connections (Luke Dashjr) +- #10532 `f4935f8` *Define a service bit for BIP148 (Luke Dashjr) +- #10532 `9213b04` *Add BIP148 indicator to user agent comments (Luke Dashjr) +- #10532 `6194aab` *Preferentially peer with nodes enforcing BIP148 to avoid partitioning risk (Luke Dashjr) + +### Validation +- #10532 `c1224e9` *Add BIP148 UASF logic with a -bip148 option (mkwia) +- #10532 `0b27414` *Check BIP148 on historical blocks and rewind if necessary (Luke Dashjr) ### Build system -- #9973 `e9611d1` depends: fix zlib build on osx (theuni) +- #10414 `ffb0c4b` miniupnpc 2.0.20170509 (fanquake) +- #10228 `ae479bc` Regenerate bitcoin-config.h as necessary (theuni) +- #10328 `c94e262` *Update contrib/debian to latest Ubuntu PPA upload (Matt Corallo) -### GUI -- #10060 `ddc2dd1` Ensure an item exists on the rpcconsole stack before adding (achow101) -- #10156 `6757870` *Fix for issues with startup and mutiple monitors on windows. (Allan Doensen) -- #9890 `69e51bc` *Add a button to open the config file in a text editor (Eric Shaw Jr) -- n/a `aecd8f0` *When multiple wallets are used, include in notifications the name of the wallet involved (luke-jr) -- #10231 `0e4a1ef` *Reduce a significant cs_main lock freeze (jonasschnelli) - -### Mining -- #9955/#10006 `569596c` Don't require segwit in getblocktemplate for segwit signalling or mining (sdaftuar) -- #9959/#10127 `b5c3440` Prevent slowdown in CreateNewBlock on large mempools (sdaftuar) -- #10196 `321992e` *Bugfix: PrioritiseTransaction updates the mempool tx counter (sdaftuar) +### Miscellaneous +- #10245 `44a17f2` Minor fix in build documentation for FreeBSD 11 (shigeya) +- #10215 `0aee4a1` Check interruptNet during dnsseed lookups (TheBlueMatt) +- #10445 `87a21d5` *Fix: make CCoinsViewDbCursor::Seek work for missing keys (Pieter Wuille) +- #10282 `21f123d` *Expire bitcoind & bitcoin-qt 1-2 years after its last change (Luke Dashjr) +- #10290 `33fbec1` *Add -stopatheight for benchmarking (Andrew Chow) -### Tests and QA -- #10157 `55f641c` Fix the `mempool_packages.py` test (sdaftuar) +### GUI +- #10231 `1e936d7` Reduce a significant cs_main lock freeze (jonasschnelli) -### Miscellaneous -- #10037 `4d8e660` Trivial: Fix typo in help getrawtransaction RPC (keystrike) -- #10120 `e4c9a90` util: Work around (virtual) memory exhaustion on 32-bit w/ glibc (laanwj) -- #10130 `ecc5232` bitcoin-tx input verification (awemany, jnewbery) +### Wallet +- #10294 `1847642` Unset change position when there is no change (instagibbs) +- #10308 `28b8b8b` *Securely erase potentially sensitive keys/values (Thomas Snider) +- #8694 `d9d0870` *Include actual backup filename in recovery warning message (Luke Dashjr) +- #8694 `e2e2882` *Base backup filenames on original wallet filename (Luke Dashjr) +- #8694 `9ac761f` *Forbid -salvagewallet, -zapwallettxes, and -upgradewallet with multiple wallets (Luke Dashjr) Credits ======= Thanks to everyone who directly contributed to this release: -- aideca - Alex Morcos -- Allan Doensen - Andrew Chow -- Awemany +- Anthony Towns - Cory Fields -- Eric Shaw Jr -- Gregory Maxwell -- James Evans -- Jeremy Rubin +- earonesty +- fanquake +- Gregory Sanders - John Newbery - Jonas Schnelli - Karl-Johan Alm - Luke Dashjr -- MarcoFalke - Matt Corallo -- Pedro Branco +- mkwia - Pieter Wuille - practicalswift -- rawodb -- Suhas Daftuar +- Russell Yanofsky +- Shigeya Suzuki +- Thomas Kerin +- Thomas Snider - Wladimir J. van der Laan As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff -Nru bitcoin-0.14.1.knots20170420/Makefile.am bitcoin-0.14.2.knots20170618/Makefile.am --- bitcoin-0.14.1.knots20170420/Makefile.am 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/Makefile.am 2017-06-18 17:25:52.000000000 +0000 @@ -76,9 +76,6 @@ echo error: could not build $@ @echo built $@ -$(if $(findstring src/,$(MAKECMDGOALS)),$(MAKECMDGOALS), none): FORCE - $(MAKE) -C src $(patsubst src/%,%,$@) - $(OSX_APP)/Contents/PkgInfo: $(MKDIR_P) $(@D) @echo "APPL????" > $@ diff -Nru bitcoin-0.14.1.knots20170420/qa/pull-tester/rpc-tests.py bitcoin-0.14.2.knots20170618/qa/pull-tester/rpc-tests.py --- bitcoin-0.14.1.knots20170420/qa/pull-tester/rpc-tests.py 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/qa/pull-tester/rpc-tests.py 2017-06-18 17:25:52.000000000 +0000 @@ -103,6 +103,7 @@ 'wallet-hd.py', 'walletbackup.py', # vv Tests less than 5m vv + 'bip148-segwit-uasf.py', 'p2p-fullblocktest.py', 'fundrawtransaction.py', 'p2p-compactblocks.py', diff -Nru bitcoin-0.14.1.knots20170420/qa/rpc-tests/bip148-segwit-uasf.py bitcoin-0.14.2.knots20170618/qa/rpc-tests/bip148-segwit-uasf.py --- bitcoin-0.14.1.knots20170420/qa/rpc-tests/bip148-segwit-uasf.py 1970-01-01 00:00:00.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/qa/rpc-tests/bip148-segwit-uasf.py 2017-06-18 17:25:52.000000000 +0000 @@ -0,0 +1,281 @@ +#!/usr/bin/env python3 +# Copyright (c) 2015-2016 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +"""Test the Mandatory Activation of Segregated Witness (BIP148) soft-fork logic.""" + +from test_framework.mininode import wait_until +from test_framework.test_framework import BitcoinTestFramework +from test_framework.util import * + +import logging +import re + +## Scenario: +# +# Four miners, whose hashrate and strategies are: +# +# A ( 9%): mine longest chain, signalling segwit +# B (27%): mine longest chain, not signalling segwit +# C (37%): bip 148 enforcing, signalling segwit +# D (27%): switches from (A) to (C) during August +# +# (1, 3, 4 and 3 elevenths of total hashrate respectively; mining +# 11 blocks a day, gives 143 blocks in 13 days, just one block +# short of a retarget cycle) +# +# B, with 27% of hashrate is sufficient to block activation (which +# requires 25% on regtest) +# A+B+D has 65% of hashrate prior to D switching +# C+D has 55% of hashrate post D's switch, and since C's hashrate is larger +# than D's the original BIP-148 chain will eventually have more work +# than D's chain, forcing a reorg and eventual consensus + +def bip9_blockver(*bits): + return "-blockversion=%d" % (0x20000000 + sum(1< ancestor_height: + blockinfo = rpc.getblock(blockinfo['previousblockhash']) + parent_cache_key = blockinfo['hash'] + ancestor + if parent_cache_key in self.ancestor_cache: + rv = self.ancestor_cache[parent_cache_key] + self.ancestor_cache[cache_key] = rv + return rv + rv = (blockinfo['hash'] == ancestor) + self.ancestor_cache[cache_key] = rv + return rv + + # Taken from master test_framework.py + def sync_all(self, node_groups=None): + if not node_groups: + node_groups = [self.nodes] + + for group in node_groups: + sync_blocks(group) + sync_mempools(group) + + def sync_chaintips(self, nodes=None, timeout=60, extra_check=None): + if nodes is None: + nodes = list(range(len(self.nodes))) + statuses_where_node_has_the_block = ('valid-fork', 'active') + def chaintip_check(): + if extra_check is not None: + if not extra_check(): + return False + all_known_tips = {} + chaintips_replies = [(r, self.nodes[r].getchaintips()) for r in nodes] + for (r, tips) in chaintips_replies: + for tip in tips: + if tip['hash'] in all_known_tips and tip['status'] not in statuses_where_node_has_the_block: + continue + all_known_tips[tip['hash']] = (r, tip) + + # Make sure we know a node we can fetch the block from + for tip in all_known_tips.keys(): + if all_known_tips[tip][1]['status'] not in statuses_where_node_has_the_block: + for r in nodes: + try: + all_known_tips[tip] = (r, self.nodes[r].getblock(tip)) + break + except: + pass + + self.log.debug('There are %d tips: %s' % (len(all_known_tips), tuple(sorted(all_known_tips.keys())))) + for (r, tips) in chaintips_replies: + invalid_blocks = [] + my_known_tips = set() + active = None + # Ideally, best should use chainwork, but that's not in getchaintips... + best = {'height':0} + for tip in tips: + my_known_tips.add(tip['hash']) + if tip['status'] == 'invalid': + invalid_blocks.append(tip) + else: + if tip['height'] > best['height']: + best = tip + if tip['status'] == 'active': + active = tip + if tip['height'] == best['height']: + best = tip + if best != active: + self.log.debug("Best potentially-valid block is not active on node %s" % (r,)) + return False + missing_tips = all_known_tips.keys() - my_known_tips + for tip in set(missing_tips): + for inv_tip in invalid_blocks: + if self.is_block_ancestor(self.nodes[all_known_tips[tip][0]], tip, inv_tip['hash'], inv_tip['height']): + # One of our invalid tips is a parent of the missing tip + missing_tips.remove(tip) + break + for known_tip in my_known_tips: + # NOTE: Can't assume this node has the block, in case it's invalid + if self.is_block_ancestor(self.nodes[all_known_tips[known_tip][0]], known_tip, tip, all_known_tips[tip][1]['height']): + # We have a valid tip that descends from the missing tip + missing_tips.remove(tip) + break + if tip in missing_tips: + self.log.debug('Node %s missing tip %s' % (r, tip)) + return False + self.log.debug('All nodes have all syncable tips') + return True + assert wait_until(chaintip_check, timeout=timeout) + + def get_peerset(self, rpc): + def extract_nodenum(subver): + m = re.search(r'\((.*?)[;)]', subver) + return m.group(1) + return {pi['id']: extract_nodenum(pi['subver']) for pi in rpc.getpeerinfo()} + + def mining(self): + time = self.AUG_1 + (self.day*24*60*60) + to_mine = self.blockrate[:] + + while sum(to_mine) > 0: + for peer,blks in enumerate(to_mine): + if blks == 0: continue + set_node_times(self.nodes, time) + + peerset_before = tuple(self.get_peerset(r) for r in self.nodes) + def check_peerset(): + peerset_after = tuple(self.get_peerset(r) for r in self.nodes) + if peerset_before != peerset_after: + raise AssertionError("Network break!\nBefore=%s\nAfter =%s" % (peerset_before, peerset_after)) + return True + + to_mine[peer] -= 1 + self.nodes[peer].generate(1) + + self.sync_chaintips(extra_check=check_peerset) + time += 10*60 + + self.day += 1 + + def bip148_restart(self, peer): + self.log.info("Restarting node %d with -bip148" % (peer,)) + self.stop_node(peer) + time = self.AUG_1 + (self.day*24*60*60) + self.nodes[peer] = start_node(peer, self.options.tmpdir, self.extra_args[4] + ["-bip148", "-mocktime=%d" % (time)]) + + n = self.nodes[peer] + blk = n.getblock(n.getbestblockhash()) + while blk["mediantime"] >= self.AUG_1: + if blk["version"] | 0x20000002 != blk["version"]: + raise AssertionError("Invalid BIP148 block in node running with -bip148") + blk = n.getblock(blk["previousblockhash"]) + + self.log.info("Reconnecting nodes") + self.connect_all() + + def get_bip148_uacomment(self, subver): + m = re.search(r'([+!]BIP148\=?)', subver) + return m.group(1) + + def run_test(self): + assert self.get_bip148_uacomment(self.nodes[0].getnetworkinfo()['subversion']) == '!BIP148=' + assert self.get_bip148_uacomment(self.nodes[1].getnetworkinfo()['subversion']) == '!BIP148' + assert self.get_bip148_uacomment(self.nodes[3].getnetworkinfo()['subversion']) == '+BIP148' + + cnt = self.nodes[0].getblockcount() + + # Lock in CSV + self.nodes[0].generate(500) + if (self.nodes[0].getblockcount() != cnt + 500): + raise AssertionError("Failed to mine 500 bip9 bit 0 blocks") + cnt += 500 + + if get_bip9_status(self.nodes[0], 'csv')["status"] != "active": + raise AssertionError("Failed to activate OP_CSV") + + self.sync_all() + + for d in range(120): + swstatus = get_bip9_status(self.nodes[0], 'segwit')["status"] + if self.day == 0: + if swstatus != "started": + raise AssertionError("segwit soft-fork in state %s rather than started at day 0" % (swstatus)) + + self.mining() + tips = set(n.getbestblockhash() for n in self.nodes) + heights = [n.getblockcount() for n in self.nodes] + segwit = [get_bip9_status(n, 'segwit')["status"] for n in self.nodes] + connect = [len(n.getpeerinfo()) for n in self.nodes] + maxh = max(heights) + out = ["%d:" % (maxh)] + for c,h,s in zip(connect,heights,segwit): + a = "S" if s == "active" else "n" + a = "%d/%s" % (c,a) + if h < maxh: + out.append("%s%d" % (a, h-maxh)) + else: + out.append(a) + + self.log.info("Day %d:%s: status: %s:" % (self.day, swstatus, out)) + + if self.day == 7: + self.bip148_restart(5) + + if self.day == 20: + self.bip148_restart(4) + + for i in range(6): + if connect[i] == 0: + raise AssertionError("Peer %d has no connected peers after %d blocks" % (i,maxh)) + + if self.day > 5 and len(tips) == 1: + synccount += 1 + else: + synccount = 0 + if synccount > 5: + self.log.info("In sync for five days, consensus achieved") + break + + if len(tips) > 1: + raise AssertionError("Chain split still exists at day %d" % (self.day)) + + return + +if __name__ == '__main__': + logging.basicConfig(level=logging.INFO, stream=sys.stdout) + BIP148Test().main() diff -Nru bitcoin-0.14.1.knots20170420/qa/rpc-tests/bumpfee.py bitcoin-0.14.2.knots20170618/qa/rpc-tests/bumpfee.py --- bitcoin-0.14.1.knots20170420/qa/rpc-tests/bumpfee.py 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/qa/rpc-tests/bumpfee.py 2017-06-18 17:25:52.000000000 +0000 @@ -129,7 +129,7 @@ def test_nonrbf_bumpfee_fails(peer_node, dest_address): # cannot replace a non RBF transaction (from node which did not enable RBF) not_rbfid = create_fund_sign_send(peer_node, {dest_address: 0.00090000}) - assert_raises_message(JSONRPCException, "not BIP 125 replaceable", peer_node.bumpfee, not_rbfid) + assert_raises_jsonrpc(-4, "not BIP 125 replaceable", peer_node.bumpfee, not_rbfid) def test_notmine_bumpfee_fails(rbf_node, peer_node, dest_address): @@ -149,7 +149,7 @@ signedtx = rbf_node.signrawtransaction(rawtx) signedtx = peer_node.signrawtransaction(signedtx["hex"]) rbfid = rbf_node.sendrawtransaction(signedtx["hex"]) - assert_raises_message(JSONRPCException, "Transaction contains inputs that don't belong to this wallet", + assert_raises_jsonrpc(-4, "Transaction contains inputs that don't belong to this wallet", rbf_node.bumpfee, rbfid) @@ -160,7 +160,7 @@ tx = rbf_node.createrawtransaction([{"txid": parent_id, "vout": 0}], {dest_address: 0.00020000}) tx = rbf_node.signrawtransaction(tx) txid = rbf_node.sendrawtransaction(tx["hex"]) - assert_raises_message(JSONRPCException, "Transaction has descendants in the wallet", rbf_node.bumpfee, parent_id) + assert_raises_jsonrpc(-8, "Transaction has descendants in the wallet", rbf_node.bumpfee, parent_id) def test_small_output_fails(rbf_node, dest_address): @@ -175,7 +175,7 @@ Decimal("0.00100000"), {dest_address: 0.00080000, get_change_address(rbf_node): Decimal("0.00010000")}) - assert_raises_message(JSONRPCException, "Change output is too small", rbf_node.bumpfee, rbfid, {"totalFee": 20001}) + assert_raises_jsonrpc(-4, "Change output is too small", rbf_node.bumpfee, rbfid, {"totalFee": 20001}) def test_dust_to_fee(rbf_node, dest_address): @@ -210,7 +210,7 @@ rbf_node.settxfee(Decimal("0.00001000")) rbfid = create_fund_sign_send(rbf_node, {dest_address: 0.00090000}) bumped = rbf_node.bumpfee(rbfid, {"totalFee": 1000}) - assert_raises_message(JSONRPCException, "already bumped", rbf_node.bumpfee, rbfid, {"totalFee": 2000}) + assert_raises_jsonrpc(-4, "already bumped", rbf_node.bumpfee, rbfid, {"totalFee": 2000}) rbf_node.bumpfee(bumped["txid"], {"totalFee": 2000}) @@ -218,7 +218,7 @@ # check that re-bumping a non-replaceable bump tx fails rbfid = create_fund_sign_send(rbf_node, {dest_address: 0.00090000}) bumped = rbf_node.bumpfee(rbfid, {"totalFee": 10000, "replaceable": False}) - assert_raises_message(JSONRPCException, "Transaction is not BIP 125 replaceable", rbf_node.bumpfee, bumped["txid"], + assert_raises_jsonrpc(-4, "Transaction is not BIP 125 replaceable", rbf_node.bumpfee, bumped["txid"], {"totalFee": 20000}) @@ -269,7 +269,7 @@ def test_locked_wallet_fails(rbf_node, dest_address): rbfid = create_fund_sign_send(rbf_node, {dest_address: 0.00090000}) rbf_node.walletlock() - assert_raises_message(JSONRPCException, "Please enter the wallet passphrase with walletpassphrase first.", + assert_raises_jsonrpc(-13, "Please enter the wallet passphrase with walletpassphrase first.", rbf_node.bumpfee, rbfid) @@ -316,9 +316,7 @@ block.rehash() block.hashMerkleRoot = block.calc_merkle_root() block.solve() - error = node.submitblock(bytes_to_hex_str(block.serialize(True))) - if error is not None: - raise Exception(error) + node.submitblock(bytes_to_hex_str(block.serialize(True))) return block diff -Nru bitcoin-0.14.1.knots20170420/qa/rpc-tests/fundrawtransaction.py bitcoin-0.14.2.knots20170618/qa/rpc-tests/fundrawtransaction.py --- bitcoin-0.14.1.knots20170420/qa/rpc-tests/fundrawtransaction.py 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/qa/rpc-tests/fundrawtransaction.py 2017-06-18 17:25:52.000000000 +0000 @@ -54,6 +54,11 @@ self.nodes[0].generate(121) self.sync_all() + # ensure that setting changePosition in fundraw with an exact match is handled properly + rawmatch = self.nodes[2].createrawtransaction([], {self.nodes[2].getnewaddress():50}) + rawmatch = self.nodes[2].fundrawtransaction(rawmatch, {"changePosition":1, "subtractFeeFromOutputs":[0]}) + assert_equal(rawmatch["changepos"], -1) + watchonly_address = self.nodes[0].getnewaddress() watchonly_pubkey = self.nodes[0].validateaddress(watchonly_address)["pubkey"] watchonly_amount = Decimal(200) @@ -181,12 +186,7 @@ dec_tx = self.nodes[2].decoderawtransaction(rawtx) assert_equal(utx['txid'], dec_tx['vin'][0]['txid']) - try: - self.nodes[2].fundrawtransaction(rawtx, {'foo': 'bar'}) - raise AssertionError("Accepted invalid option foo") - except JSONRPCException as e: - assert("Unexpected key foo" in e.error['message']) - + assert_raises_jsonrpc(-3, "Unexpected key foo", self.nodes[2].fundrawtransaction, rawtx, {'foo':'bar'}) ############################################################ # test a fundrawtransaction with an invalid change address # @@ -199,12 +199,7 @@ dec_tx = self.nodes[2].decoderawtransaction(rawtx) assert_equal(utx['txid'], dec_tx['vin'][0]['txid']) - try: - self.nodes[2].fundrawtransaction(rawtx, {'changeAddress': 'foobar'}) - raise AssertionError("Accepted invalid bitcoin address") - except JSONRPCException as e: - assert("changeAddress must be a valid bitcoin address" in e.error['message']) - + assert_raises_jsonrpc(-5, "changeAddress must be a valid bitcoin address", self.nodes[2].fundrawtransaction, rawtx, {'changeAddress':'foobar'}) ############################################################ # test a fundrawtransaction with a provided change address # @@ -218,12 +213,7 @@ assert_equal(utx['txid'], dec_tx['vin'][0]['txid']) change = self.nodes[2].getnewaddress() - try: - rawtxfund = self.nodes[2].fundrawtransaction(rawtx, {'changeAddress': change, 'changePosition': 2}) - except JSONRPCException as e: - assert('changePosition out of bounds' == e.error['message']) - else: - assert(False) + assert_raises_jsonrpc(-8, "changePosition out of bounds", self.nodes[2].fundrawtransaction, rawtx, {'changeAddress':change, 'changePosition':2}) rawtxfund = self.nodes[2].fundrawtransaction(rawtx, {'changeAddress': change, 'changePosition': 0}) dec_tx = self.nodes[2].decoderawtransaction(rawtxfund['hex']) out = dec_tx['vout'][0] @@ -332,12 +322,7 @@ rawtx = self.nodes[2].createrawtransaction(inputs, outputs) dec_tx = self.nodes[2].decoderawtransaction(rawtx) - try: - rawtxfund = self.nodes[2].fundrawtransaction(rawtx) - raise AssertionError("Spent more than available") - except JSONRPCException as e: - assert("Insufficient" in e.error['message']) - + assert_raises_jsonrpc(-4, "Insufficient funds", self.nodes[2].fundrawtransaction, rawtx) ############################################################ #compare fee of a standard pubkeyhash transaction @@ -493,21 +478,13 @@ rawTx = self.nodes[1].createrawtransaction(inputs, outputs) # fund a transaction that requires a new key for the change output # creating the key must be impossible because the wallet is locked - try: - fundedTx = self.nodes[1].fundrawtransaction(rawTx) - raise AssertionError("Wallet unlocked without passphrase") - except JSONRPCException as e: - assert('Keypool ran out' in e.error['message']) + assert_raises_jsonrpc(-4, "Insufficient funds", self.nodes[1].fundrawtransaction, rawtx) #refill the keypool self.nodes[1].walletpassphrase("test", 100) self.nodes[1].walletlock() - try: - self.nodes[1].sendtoaddress(self.nodes[0].getnewaddress(), 1.2) - raise AssertionError("Wallet unlocked without passphrase") - except JSONRPCException as e: - assert('walletpassphrase' in e.error['message']) + assert_raises_jsonrpc(-13, "walletpassphrase", self.nodes[1].sendtoaddress, self.nodes[0].getnewaddress(), 1.2) oldBalance = self.nodes[0].getbalance() diff -Nru bitcoin-0.14.1.knots20170420/qa/rpc-tests/importprunedfunds.py bitcoin-0.14.2.knots20170618/qa/rpc-tests/importprunedfunds.py --- bitcoin-0.14.1.knots20170420/qa/rpc-tests/importprunedfunds.py 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/qa/rpc-tests/importprunedfunds.py 2017-06-18 17:25:52.000000000 +0000 @@ -76,12 +76,7 @@ self.sync_all() #Import with no affiliated address - try: - self.nodes[1].importprunedfunds(rawtxn1, proof1) - except JSONRPCException as e: - assert('No addresses' in e.error['message']) - else: - assert(False) + assert_raises_jsonrpc(-5, "No addresses", self.nodes[1].importprunedfunds, rawtxn1, proof1) balance1 = self.nodes[1].getbalance("", 0, True) assert_equal(balance1, Decimal(0)) @@ -112,12 +107,7 @@ assert_equal(address_info['ismine'], True) #Remove transactions - try: - self.nodes[1].removeprunedfunds(txnid1) - except JSONRPCException as e: - assert('does not exist' in e.error['message']) - else: - assert(False) + assert_raises_jsonrpc(-8, "Transaction does not exist in wallet.", self.nodes[1].removeprunedfunds, txnid1) balance1 = self.nodes[1].getbalance("*", 0, True) assert_equal(balance1, Decimal('0.075')) diff -Nru bitcoin-0.14.1.knots20170420/qa/rpc-tests/listsinceblock.py bitcoin-0.14.2.knots20170618/qa/rpc-tests/listsinceblock.py --- bitcoin-0.14.1.knots20170420/qa/rpc-tests/listsinceblock.py 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/qa/rpc-tests/listsinceblock.py 2017-06-18 17:25:52.000000000 +0000 @@ -4,7 +4,7 @@ # file COPYING or http://www.opensource.org/licenses/mit-license.php. from test_framework.test_framework import BitcoinTestFramework -from test_framework.util import assert_equal +from test_framework.util import assert_equal, connect_nodes_bi class ListSinceBlockTest (BitcoinTestFramework): @@ -13,7 +13,17 @@ self.setup_clean_chain = True self.num_nodes = 4 + # Taken from master test_framework.py + def join_network(self): + connect_nodes_bi(self.nodes, 1, 2) + self.sync_all() + # Added for compatibility with 0.14 split_network: + self.is_network_split = False + def run_test(self): + self.nodes[2].generate(101) + self.sync_all() + self.test_reorg() self.test_double_spend() self.test_double_send() @@ -47,18 +57,8 @@ This test only checks that [tx0] is present. ''' - assert_equal(self.is_network_split, False) - self.nodes[2].generate(101) - self.sync_all() - - assert_equal(self.nodes[0].getbalance(), 0) - assert_equal(self.nodes[1].getbalance(), 0) - assert_equal(self.nodes[2].getbalance(), 50) - assert_equal(self.nodes[3].getbalance(), 0) - # Split network into two self.split_network() - assert self.is_network_split # send to nodes[0] from nodes[2] senttx = self.nodes[2].sendtoaddress(self.nodes[0].getnewaddress(), 1) @@ -111,12 +111,10 @@ node wallet. ''' - assert not self.is_network_split self.sync_all() # Split network into two self.split_network() - assert self.is_network_split # share utxo between nodes[1] and nodes[2] utxos = self.nodes[2].listunspent() @@ -143,7 +141,7 @@ self.nodes[3].getnewaddress(): 1, self.nodes[2].getnewaddress(): change, } - txid2 = self.nodes[2].sendrawtransaction( + self.nodes[2].sendrawtransaction( self.nodes[2].signrawtransaction( self.nodes[2].createrawtransaction(utxoDicts, recipientDict2))['hex']) @@ -151,20 +149,19 @@ lastblockhash = self.nodes[1].generate(3)[2] self.nodes[2].generate(4) - self.sync_all() - self.join_network() - # gettransaction should work for txid1; if it does not, an exception is - # raised, so the returned value does not need verification - self.nodes[0].gettransaction(txid1) + self.sync_all() + + # gettransaction should work for txid1 + assert self.nodes[0].gettransaction(txid1)['txid'] == txid1, "gettransaction failed to find txid1" # listsinceblock(lastblockhash) should now include txid1, as seen from nodes[0] lsbres = self.nodes[0].listsinceblock(lastblockhash) assert any(tx['txid'] == txid1 for tx in lsbres['removed']) # but it should not include 'removed' if include_removed=false - lsbres2 = self.nodes[0].listsinceblock(lastblockhash, 1, False, False) + lsbres2 = self.nodes[0].listsinceblock(blockhash=lastblockhash, include_removed=False) assert 'removed' not in lsbres2 def test_double_send(self): @@ -192,12 +189,10 @@ 3 (aa1, aa2, aa3). ''' - assert not self.is_network_split self.sync_all() # Split network into two self.split_network() - assert self.is_network_split # create and sign a transaction utxos = self.nodes[2].listunspent() @@ -232,10 +227,10 @@ lastblockhash = self.nodes[1].generate(3)[2] self.nodes[2].generate(2) - self.sync_all() - self.join_network() + self.sync_all() + # gettransaction should work for txid1 self.nodes[0].gettransaction(txid1) diff -Nru bitcoin-0.14.1.knots20170420/qa/rpc-tests/nodehandling.py bitcoin-0.14.2.knots20170618/qa/rpc-tests/nodehandling.py --- bitcoin-0.14.1.knots20170420/qa/rpc-tests/nodehandling.py 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/qa/rpc-tests/nodehandling.py 2017-06-18 17:25:52.000000000 +0000 @@ -6,6 +6,7 @@ # # Test node handling # +import time from test_framework.mininode import wait_until from test_framework.test_framework import BitcoinTestFramework @@ -33,22 +34,20 @@ ########################### assert_equal(len(self.nodes[1].getpeerinfo()), 2) # node1 should have 2 connections to node0 at this point self.nodes[1].setban("127.0.0.1", "add") - wait_until(lambda: len(self.nodes[1].getpeerinfo()) == 0) + assert wait_until(lambda: len(self.nodes[1].getpeerinfo()) == 0, timeout=10) assert_equal(len(self.nodes[1].getpeerinfo()), 0) # all nodes must be disconnected at this point assert_equal(len(self.nodes[1].listbanned()), 1) self.nodes[1].clearbanned() assert_equal(len(self.nodes[1].listbanned()), 0) self.nodes[1].setban("127.0.0.0/24", "add") assert_equal(len(self.nodes[1].listbanned()), 1) - try: - self.nodes[1].setban("127.0.0.1", "add") #throws exception because 127.0.0.1 is within range 127.0.0.0/24 - except: - pass + # This will throw an exception because 127.0.0.1 is within range 127.0.0.0/24 + assert_raises_jsonrpc(-23, "IP/Subnet already banned", self.nodes[1].setban, "127.0.0.1", "add") + # This will throw an exception because 127.0.0.1/42 is not a real subnet + assert_raises_jsonrpc(-30, "Error: Invalid IP/Subnet", self.nodes[1].setban, "127.0.0.1/42", "add") assert_equal(len(self.nodes[1].listbanned()), 1) # still only one banned ip because 127.0.0.1 is within the range of 127.0.0.0/24 - try: - self.nodes[1].setban("127.0.0.1", "remove") - except: - pass + # This will throw an exception because 127.0.0.1 was not added above + assert_raises_jsonrpc(-30, "Error: Unban failed", self.nodes[1].setban, "127.0.0.1", "remove") assert_equal(len(self.nodes[1].listbanned()), 1) self.nodes[1].setban("127.0.0.0/24", "remove") assert_equal(len(self.nodes[1].listbanned()), 0) @@ -58,11 +57,15 @@ # test persisted banlist self.nodes[1].setban("127.0.0.0/32", "add") self.nodes[1].setban("127.0.0.0/24", "add") + # Set the mocktime so we can control when bans expire + old_time = int(time.time()) + self.nodes[1].setmocktime(old_time) self.nodes[1].setban("192.168.0.1", "add", 1) # ban for 1 seconds self.nodes[1].setban("2001:4d48:ac57:400:cacf:e9ff:fe1d:9c63/19", "add", 1000) # ban for 1000 seconds listBeforeShutdown = self.nodes[1].listbanned() assert_equal("192.168.0.1/32", listBeforeShutdown[2]['address']) - wait_until(lambda: len(self.nodes[1].listbanned()) == 3) + # Move time forward by 3 seconds so the third ban has expired + self.nodes[1].setmocktime(old_time + 3) assert_equal(len(self.nodes[1].listbanned()), 3) stop_node(self.nodes[1], 1) @@ -80,7 +83,6 @@ ########################### # RPC disconnectnode test # ########################### - # fail to disconnect when calling with address and nodeid address1 = self.nodes[0].getpeerinfo()[0]['addr'] node1 = self.nodes[0].getpeerinfo()[0]['addr'] @@ -91,14 +93,14 @@ address1 = self.nodes[0].getpeerinfo()[0]['addr'] self.nodes[0].disconnectnode(address=address1) - wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 1) + assert wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 1, timeout=10) assert not [node for node in self.nodes[0].getpeerinfo() if node['addr'] == address1] connect_nodes_bi(self.nodes, 0, 1) # reconnect the node assert_equal(len(self.nodes[0].getpeerinfo()), 2) assert [node for node in self.nodes[0].getpeerinfo() if node['addr'] == address1] - # successfully disconnect node by node id + # successfully disconnect node by node id") id1 = self.nodes[0].getpeerinfo()[0]['id'] self.nodes[0].disconnectnode(nodeid=id1) wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 1) diff -Nru bitcoin-0.14.1.knots20170420/qa/rpc-tests/p2p-acceptblock.py bitcoin-0.14.2.knots20170618/qa/rpc-tests/p2p-acceptblock.py --- bitcoin-0.14.1.knots20170420/qa/rpc-tests/p2p-acceptblock.py 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/qa/rpc-tests/p2p-acceptblock.py 2017-06-18 17:25:52.000000000 +0000 @@ -199,11 +199,8 @@ assert_equal(x['status'], "headers-only") # But this block should be accepted by node0 since it has more work. - try: - self.nodes[0].getblock(blocks_h3[0].hash) - print("Unrequested more-work block accepted from non-whitelisted peer") - except: - raise AssertionError("Unrequested more work block was not processed") + self.nodes[0].getblock(blocks_h3[0].hash) + print("Unrequested more-work block accepted from non-whitelisted peer") # Node1 should have accepted and reorged. assert_equal(self.nodes[1].getblockcount(), 3) @@ -227,26 +224,17 @@ tips[j] = next_block time.sleep(2) - for x in all_blocks: - try: - self.nodes[0].getblock(x.hash) - if x == all_blocks[287]: - raise AssertionError("Unrequested block too far-ahead should have been ignored") - except: - if x == all_blocks[287]: - print("Unrequested block too far-ahead not processed") - else: - raise AssertionError("Unrequested block with more work should have been accepted") + # Blocks 1-287 should be accepted, block 288 should be ignored because it's too far ahead + for x in all_blocks[:-1]: + self.nodes[0].getblock(x.hash) + assert_raises_jsonrpc(-1, "Block not found on disk", self.nodes[0].getblock, all_blocks[-1].hash) headers_message.headers.pop() # Ensure the last block is unrequested white_node.send_message(headers_message) # Send headers leading to tip white_node.send_message(msg_block(tips[1])) # Now deliver the tip - try: - white_node.sync_with_ping() - self.nodes[1].getblock(tips[1].hash) - print("Unrequested block far ahead of tip accepted from whitelisted peer") - except: - raise AssertionError("Unrequested block from whitelisted peer not accepted") + white_node.sync_with_ping() + self.nodes[1].getblock(tips[1].hash) + print("Unrequested block far ahead of tip accepted from whitelisted peer") # 5. Test handling of unrequested block on the node that didn't process # Should still not be processed (even though it has a child that has more diff -Nru bitcoin-0.14.1.knots20170420/qa/rpc-tests/pruning.py bitcoin-0.14.2.knots20170618/qa/rpc-tests/pruning.py --- bitcoin-0.14.1.knots20170420/qa/rpc-tests/pruning.py 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/qa/rpc-tests/pruning.py 2017-06-18 17:25:52.000000000 +0000 @@ -186,11 +186,8 @@ def reorg_back(self): # Verify that a block on the old main chain fork has been pruned away - try: - self.nodes[2].getblock(self.forkhash) - raise AssertionError("Old block wasn't pruned so can't test redownload") - except JSONRPCException as e: - print("Will need to redownload block",self.forkheight) + assert_raises_jsonrpc(-1, "Block not available (pruned data)", self.nodes[2].getblock, self.forkhash) + print("Will need to redownload block",self.forkheight) # Verify that we have enough history to reorg back to the fork point # Although this is more than 288 blocks, because this chain was written more recently @@ -235,7 +232,7 @@ # at this point, node has 995 blocks and has not yet run in prune mode node = self.nodes[node_number] = start_node(node_number, self.options.tmpdir, ["-debug=0"], timewait=900) assert_equal(node.getblockcount(), 995) - assert_raises_message(JSONRPCException, "not in prune mode", node.pruneblockchain, 500) + assert_raises_jsonrpc(-1, "not in prune mode", node.pruneblockchain, 500) self.stop_node(node_number) # now re-start in manual pruning mode @@ -267,14 +264,14 @@ return os.path.isfile(self.options.tmpdir + "/node{}/regtest/blocks/blk{:05}.dat".format(node_number, index)) # should not prune because chain tip of node 3 (995) < PruneAfterHeight (1000) - assert_raises_message(JSONRPCException, "Blockchain is too short for pruning", node.pruneblockchain, height(500)) + assert_raises_jsonrpc(-1, "Blockchain is too short for pruning", node.pruneblockchain, height(500)) # mine 6 blocks so we are at height 1001 (i.e., above PruneAfterHeight) node.generate(6) assert_equal(node.getblockchaininfo()["blocks"], 1001) # negative heights should raise an exception - assert_raises_message(JSONRPCException, "Negative", node.pruneblockchain, -10) + assert_raises_jsonrpc(-8, "Negative", node.pruneblockchain, -10) # height=100 too low to prune first block file so this is a no-op prune(100) @@ -320,12 +317,9 @@ def wallet_test(self): # check that the pruning node's wallet is still in good shape print("Stop and start pruning node to trigger wallet rescan") - try: - self.stop_node(2) - start_node(2, self.options.tmpdir, ["-debug=1","-prune=550"]) - print("Success") - except Exception as detail: - raise AssertionError("Wallet test: unable to re-start the pruning node") + self.stop_node(2) + start_node(2, self.options.tmpdir, ["-debug=1","-prune=550"]) + print("Success") # check that wallet loads loads successfully when restarting a pruned node after IBD. # this was reported to fail in #7494. @@ -333,12 +327,9 @@ connect_nodes(self.nodes[0], 5) nds = [self.nodes[0], self.nodes[5]] sync_blocks(nds, wait=5, timeout=300) - try: - self.stop_node(5) #stop and start to trigger rescan - start_node(5, self.options.tmpdir, ["-debug=1","-prune=550"]) - print ("Success") - except Exception as detail: - raise AssertionError("Wallet test: unable to re-start node5") + self.stop_node(5) #stop and start to trigger rescan + start_node(5, self.options.tmpdir, ["-debug=1","-prune=550"]) + print ("Success") def run_test(self): print("Warning! This test requires 4GB of disk space and takes over 30 mins (up to 2 hours)") diff -Nru bitcoin-0.14.1.knots20170420/qa/rpc-tests/rawtransactions.py bitcoin-0.14.2.knots20170618/qa/rpc-tests/rawtransactions.py --- bitcoin-0.14.1.knots20170420/qa/rpc-tests/rawtransactions.py 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/qa/rpc-tests/rawtransactions.py 2017-06-18 17:25:52.000000000 +0000 @@ -61,13 +61,22 @@ rawtx = self.nodes[2].createrawtransaction(inputs, outputs) rawtx = self.nodes[2].signrawtransaction(rawtx) - try: - rawtx = self.nodes[2].sendrawtransaction(rawtx['hex']) - except JSONRPCException as e: - assert("Missing inputs" in e.error['message']) - else: - assert(False) + # This will raise an exception since there are missing inputs + assert_raises_jsonrpc(-25, "Missing inputs", self.nodes[2].sendrawtransaction, rawtx['hex']) + ############################ + # getrawtx with block hash # + ############################ + + # make a tx by sending then generate 2 blocks; block1 has the tx in it, + # presumably + tx = self.nodes[2].sendtoaddress(self.nodes[1].getnewaddress(), 1) + block1, block2 = self.nodes[2].generate(2) + self.sync_all() + # We should be able to get the raw transaction by providing the correct block + assert_equal(self.nodes[0].getrawtransaction(tx, True, block1)['txid'], tx) + # We should not get the tx if we provide an unrelated block + assert_raises_jsonrpc(-5, "No such", self.nodes[0].getrawtransaction, tx, True, block2) ######################### # RAW TX MULTISIG TESTS # @@ -161,13 +170,13 @@ assert_equal(self.nodes[0].getrawtransaction(txHash, True)["hex"], rawTxSigned['hex']) # 6. invalid parameters - supply txid and string "Flase" - assert_raises(JSONRPCException, self.nodes[0].getrawtransaction, txHash, "Flase") + assert_raises_jsonrpc(-1,"not a boolean", self.nodes[0].getrawtransaction, txHash, "Flase") # 7. invalid parameters - supply txid and empty array - assert_raises(JSONRPCException, self.nodes[0].getrawtransaction, txHash, []) + assert_raises_jsonrpc(-1,"not a boolean", self.nodes[0].getrawtransaction, txHash, []) # 8. invalid parameters - supply txid and empty dict - assert_raises(JSONRPCException, self.nodes[0].getrawtransaction, txHash, {}) + assert_raises_jsonrpc(-1,"not a boolean", self.nodes[0].getrawtransaction, txHash, {}) inputs = [ {'txid' : "1d1d4e24ed99057e84c3f80fd8fbec79ed9e1acee37da269356ecea000000000", 'vout' : 1, 'sequence' : 1000}] outputs = { self.nodes[0].getnewaddress() : 1 } @@ -175,13 +184,15 @@ decrawtx= self.nodes[0].decoderawtransaction(rawtx) assert_equal(decrawtx['vin'][0]['sequence'], 1000) + # 9. invalid parameters - sequence number out of range inputs = [ {'txid' : "1d1d4e24ed99057e84c3f80fd8fbec79ed9e1acee37da269356ecea000000000", 'vout' : 1, 'sequence' : -1}] outputs = { self.nodes[0].getnewaddress() : 1 } - assert_raises(JSONRPCException, self.nodes[0].createrawtransaction, inputs, outputs) + assert_raises_jsonrpc(-8, 'Invalid parameter, sequence number is out of range', self.nodes[0].createrawtransaction, inputs, outputs) + # 10. invalid parameters - sequence number out of range inputs = [ {'txid' : "1d1d4e24ed99057e84c3f80fd8fbec79ed9e1acee37da269356ecea000000000", 'vout' : 1, 'sequence' : 4294967296}] outputs = { self.nodes[0].getnewaddress() : 1 } - assert_raises(JSONRPCException, self.nodes[0].createrawtransaction, inputs, outputs) + assert_raises_jsonrpc(-8, 'Invalid parameter, sequence number is out of range', self.nodes[0].createrawtransaction, inputs, outputs) inputs = [ {'txid' : "1d1d4e24ed99057e84c3f80fd8fbec79ed9e1acee37da269356ecea000000000", 'vout' : 1, 'sequence' : 4294967294}] outputs = { self.nodes[0].getnewaddress() : 1 } diff -Nru bitcoin-0.14.1.knots20170420/qa/rpc-tests/segwit.py bitcoin-0.14.2.knots20170618/qa/rpc-tests/segwit.py --- bitcoin-0.14.1.knots20170420/qa/rpc-tests/segwit.py 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/qa/rpc-tests/segwit.py 2017-06-18 17:25:52.000000000 +0000 @@ -285,6 +285,13 @@ # Now try calling getblocktemplate() without segwit support. template = self.nodes[0].getblocktemplate() + # Check that we got a pre-Segwit template + assert(template['sizelimit'] == 1000000) + assert('weightlimit' not in template) + assert(template['sigoplimit'] == 20000) + # TODO: Would be nice to test for non-zero sigops here + assert(template['transactions'][0]['sigops'] == 0) + # Check that tx1 is the only transaction of the 3 in the template. template_txids = [ t['txid'] for t in template['transactions'] ] assert(txid2 not in template_txids and txid3 not in template_txids) diff -Nru bitcoin-0.14.1.knots20170420/qa/rpc-tests/sendheaders.py bitcoin-0.14.2.knots20170618/qa/rpc-tests/sendheaders.py --- bitcoin-0.14.1.knots20170420/qa/rpc-tests/sendheaders.py 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/qa/rpc-tests/sendheaders.py 2017-06-18 17:25:52.000000000 +0000 @@ -577,25 +577,6 @@ # Remove the first two entries (blocks[1] would connect): blocks = blocks[2:] - # Now try to see how many unconnecting headers we can send - # before we get disconnected. Should be 5*MAX_UNCONNECTING_HEADERS - for i in range(5*MAX_UNCONNECTING_HEADERS - 1): - # Send a header that doesn't connect, check that we get a getheaders. - with mininode_lock: - test_node.last_getheaders = None - test_node.send_header_for_blocks([blocks[i%len(blocks)]]) - test_node.wait_for_getheaders(timeout=1) - - # Eventually this stops working. - with mininode_lock: - self.last_getheaders = None - test_node.send_header_for_blocks([blocks[-1]]) - - # Should get disconnected - test_node.wait_for_disconnect() - with mininode_lock: - self.last_getheaders = True - print("Part 5: success!") # Finally, check that the inv node never received a getdata request, diff -Nru bitcoin-0.14.1.knots20170420/qa/rpc-tests/signrawtransactions.py bitcoin-0.14.2.knots20170618/qa/rpc-tests/signrawtransactions.py --- bitcoin-0.14.1.knots20170420/qa/rpc-tests/signrawtransactions.py 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/qa/rpc-tests/signrawtransactions.py 2017-06-18 17:25:52.000000000 +0000 @@ -119,7 +119,7 @@ # 5) Script verification errors have certain properties assert 'txid' in rawTxSigned['errors'][0] assert 'vout' in rawTxSigned['errors'][0] - assert 'txinwitness' in rawTxSigned['errors'][0] + assert 'witness' in rawTxSigned['errors'][0] assert 'scriptSig' in rawTxSigned['errors'][0] assert 'sequence' in rawTxSigned['errors'][0] assert 'error' in rawTxSigned['errors'][0] @@ -129,7 +129,7 @@ assert_equal(rawTxSigned['errors'][0]['vout'], inputs[1]['vout']) assert_equal(rawTxSigned['errors'][1]['txid'], inputs[2]['txid']) assert_equal(rawTxSigned['errors'][1]['vout'], inputs[2]['vout']) - assert not rawTxSigned['errors'][0]['txinwitness'] + assert not rawTxSigned['errors'][0]['witness'] # Now test signing failure for transaction with input witnesses p2wpkh_raw_tx = "01000000000102fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f00000000494830450221008b9d1dc26ba6a9cb62127b02742fa9d754cd3bebf337f7a55d114c8e5cdd30be022040529b194ba3f9281a99f2b1c0a19c0489bc22ede944ccf4ecbab4cc618ef3ed01eeffffffef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a0100000000ffffffff02202cb206000000001976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac9093510d000000001976a9143bde42dbee7e4dbe6a21b2d50ce2f0167faa815988ac000247304402203609e17b84f6a7d30c80bfa610b5b4542f32a8a0d5447a12fb1366d7f01cc44a0220573a954c4518331561406f90300e8f3358f51928d43c212a8caed02de67eebee0121025476c2e83188368da1ff3e292e7acafcdb3566bb0ad253f62fc70f07aeee635711000000" @@ -147,12 +147,14 @@ # 9) Script verification errors have certain properties assert 'txid' in rawTxSigned['errors'][0] assert 'vout' in rawTxSigned['errors'][0] - assert 'txinwitness' in rawTxSigned['errors'][0] + assert 'witness' in rawTxSigned['errors'][0] assert 'scriptSig' in rawTxSigned['errors'][0] assert 'sequence' in rawTxSigned['errors'][0] assert 'error' in rawTxSigned['errors'][0] # Non-empty witness checked here + assert_equal(rawTxSigned['errors'][1]['witness'], ["304402203609e17b84f6a7d30c80bfa610b5b4542f32a8a0d5447a12fb1366d7f01cc44a0220573a954c4518331561406f90300e8f3358f51928d43c212a8caed02de67eebee01", "025476c2e83188368da1ff3e292e7acafcdb3566bb0ad253f62fc70f07aeee6357"]) + assert not rawTxSigned['errors'][0]['witness'] assert_equal(rawTxSigned['errors'][1]['txinwitness'], ["304402203609e17b84f6a7d30c80bfa610b5b4542f32a8a0d5447a12fb1366d7f01cc44a0220573a954c4518331561406f90300e8f3358f51928d43c212a8caed02de67eebee01", "025476c2e83188368da1ff3e292e7acafcdb3566bb0ad253f62fc70f07aeee6357"]) assert not rawTxSigned['errors'][0]['txinwitness'] diff -Nru bitcoin-0.14.1.knots20170420/qa/rpc-tests/wallet-accounts.py bitcoin-0.14.2.knots20170618/qa/rpc-tests/wallet-accounts.py --- bitcoin-0.14.1.knots20170420/qa/rpc-tests/wallet-accounts.py 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/qa/rpc-tests/wallet-accounts.py 2017-06-18 17:25:52.000000000 +0000 @@ -5,7 +5,6 @@ from test_framework.test_framework import BitcoinTestFramework from test_framework.util import ( - start_nodes, start_node, assert_equal, connect_nodes_bi, @@ -21,7 +20,9 @@ self.node_args = [[]] def setup_network(self): - self.nodes = start_nodes(self.num_nodes, self.options.tmpdir, self.node_args) + self.nodes = [] + self.nodes.append(start_node(0, self.options.tmpdir, ["-maxorphantx=1000", + "-whitelist=127.0.0.1"])) self.is_network_split = False def test_sort_multisig(self, node): diff -Nru bitcoin-0.14.1.knots20170420/src/bitcoind.cpp bitcoin-0.14.2.knots20170618/src/bitcoind.cpp --- bitcoin-0.14.1.knots20170420/src/bitcoind.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/bitcoind.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -18,6 +18,7 @@ #include "httpserver.h" #include "httprpc.h" #include "utilstrencodings.h" +#include "validation.h" #include #include @@ -123,6 +124,11 @@ // Ignore problems here, since we are responsible for this file } + if (IsThisSoftwareExpired(GetTime())) { + fprintf(stderr, "This software is expired, and may be out of consensus. You must choose to upgrade or override this expiration.\n"); + exit(EXIT_FAILURE); + } + // Command-line RPC bool fCommandLine = false; for (int i = 1; i < argc; i++) diff -Nru bitcoin-0.14.1.knots20170420/src/chainparams.cpp bitcoin-0.14.2.knots20170618/src/chainparams.cpp --- bitcoin-0.14.1.knots20170420/src/chainparams.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/chainparams.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -97,10 +97,10 @@ consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = 1510704000; // November 15th, 2017. // The best chain should have at least this much work. - consensus.nMinimumChainWork = uint256S("0x0000000000000000000000000000000000000000003f94d1ad391682fe038bf5"); + consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000621985dc695a9aa328a327"); // By default assume that the signatures in ancestors of this block are valid. - consensus.defaultAssumeValid = uint256S("0x00000000000000000013176bf8d7dfeab4e1db31dc93bc311b436e82ab226b90"); //453354 + consensus.defaultAssumeValid = uint256S("0x000000000000000000130b2bd812c6a7ae9c02a74fc111806b1dd11e8975da45"); //469766 /** * The message start string is designed to be unlikely to occur in normal data. @@ -158,6 +158,7 @@ (421888, uint256S("0x000000000000000004b232ad9492d0729d7f9d6737399ffcdaac1c8160db5ef6")) (438784, uint256S("0x0000000000000000040d6ef667d7a52caf93d8e0d1e40fd7155c787b42667179")) (451840, uint256S("0x0000000000000000029103c8ade7786e7379623465c72d71d84624eb9c159bea")) + (469766, uint256S("0x000000000000000000130b2bd812c6a7ae9c02a74fc111806b1dd11e8975da45")) }; chainTxData = ChainTxData{ diff -Nru bitcoin-0.14.1.knots20170420/src/clientversion.cpp bitcoin-0.14.2.knots20170618/src/clientversion.cpp --- bitcoin-0.14.1.knots20170420/src/clientversion.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/clientversion.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -45,8 +45,8 @@ //! git will put "#define GIT_ARCHIVE 1" on the next line inside archives. #define GIT_ARCHIVE 1 #ifdef GIT_ARCHIVE -#define GIT_COMMIT_ID "d3a038f" -#define GIT_COMMIT_DATE "Thu, 20 Apr 2017 20:24:22 +0000" +#define GIT_COMMIT_ID "e7a3c1c" +#define GIT_COMMIT_DATE "Sun, 18 Jun 2017 17:25:52 +0000" #endif #define BUILD_DESC_WITH_SUFFIX(maj, min, rev, build, suffix) \ @@ -101,6 +101,6 @@ } ss << "/"; if (!fBaseNameOnly) - ss << "Knots:20170420/"; + ss << "Knots:20170618/"; return ss.str(); } diff -Nru bitcoin-0.14.1.knots20170420/src/clientversion.h bitcoin-0.14.2.knots20170618/src/clientversion.h --- bitcoin-0.14.1.knots20170420/src/clientversion.h 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/clientversion.h 2017-06-18 17:25:52.000000000 +0000 @@ -16,7 +16,7 @@ //! These need to be macros, as clientversion.cpp's and bitcoin*-res.rc's voodoo requires it #define CLIENT_VERSION_MAJOR 0 #define CLIENT_VERSION_MINOR 14 -#define CLIENT_VERSION_REVISION 1 +#define CLIENT_VERSION_REVISION 2 #define CLIENT_VERSION_BUILD 0 //! Set to true for release, false for prerelease or test build diff -Nru bitcoin-0.14.1.knots20170420/src/consensus/consensus.h bitcoin-0.14.2.knots20170618/src/consensus/consensus.h --- bitcoin-0.14.1.knots20170420/src/consensus/consensus.h 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/consensus/consensus.h 2017-06-18 17:25:52.000000000 +0000 @@ -6,6 +6,8 @@ #ifndef BITCOIN_CONSENSUS_CONSENSUS_H #define BITCOIN_CONSENSUS_CONSENSUS_H +#include "config/bitcoin-config.h" // for COPYRIGHT_YEAR + #include /** The maximum allowed size for a serialized block, in bytes (only for buffer size limits) */ @@ -28,4 +30,8 @@ LOCKTIME_MEDIAN_TIME_PAST = (1 << 1), }; +static const int64_t SECONDS_PER_YEAR = 31558060; +static const int POSIX_EPOCH_YEAR = 1970; +static const int64_t DEFAULT_SOFTWARE_EXPIRY = ((COPYRIGHT_YEAR - POSIX_EPOCH_YEAR) * SECONDS_PER_YEAR) + (SECONDS_PER_YEAR * 2); + #endif // BITCOIN_CONSENSUS_CONSENSUS_H diff -Nru bitcoin-0.14.1.knots20170420/src/init.cpp bitcoin-0.14.2.knots20170618/src/init.cpp --- bitcoin-0.14.1.knots20170420/src/init.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/init.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -360,6 +360,9 @@ strUsage += HelpMessageOpt("-maxmempool=", strprintf(_("Keep the transaction memory pool below megabytes (default: %u)"), DEFAULT_MAX_MEMPOOL_SIZE)); strUsage += HelpMessageOpt("-mempoolexpiry=", strprintf(_("Do not keep transactions in the mempool longer than hours (default: %u)"), DEFAULT_MEMPOOL_EXPIRY)); strUsage += HelpMessageOpt("-blockreconstructionextratxn=", strprintf(_("Extra transactions to keep in memory for compact block reconstructions (default: %u)"), DEFAULT_BLOCK_RECONSTRUCTION_EXTRA_TXN)); + if (showDebug) { + strUsage += HelpMessageOpt("-softwareexpiry", strprintf("Stop working after this POSIX timestamp (default: %s)", DEFAULT_SOFTWARE_EXPIRY)); + } strUsage += HelpMessageOpt("-par=", strprintf(_("Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)"), -GetNumCores(), MAX_SCRIPTCHECK_THREADS, DEFAULT_SCRIPTCHECK_THREADS)); #ifndef WIN32 @@ -416,7 +419,7 @@ #endif #endif strUsage += HelpMessageOpt("-whitebind=", _("Bind to given address and whitelist peers connecting to it. Use [host]:port notation for IPv6")); - strUsage += HelpMessageOpt("-whitelist=", _("Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times.") + + strUsage += HelpMessageOpt("-whitelist=", _("Whitelist peers using the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times.") + " " + _("Whitelisted peers cannot be DoS banned and their transactions are always relayed, even if they are already in the mempool, useful e.g. for a gateway")); strUsage += HelpMessageOpt("-whitelistrelay", strprintf(_("Accept relayed transactions received from whitelisted peers even when not relaying transactions (default: %d)"), DEFAULT_WHITELISTRELAY)); strUsage += HelpMessageOpt("-whitelistforcerelay", strprintf(_("Force relay of transactions from whitelisted peers even if they violate local relay policy (default: %d)"), DEFAULT_WHITELISTFORCERELAY)); @@ -448,6 +451,8 @@ strUsage += HelpMessageOpt("-dropmessagestest=", "Randomly drop 1 of every network messages"); strUsage += HelpMessageOpt("-fuzzmessagestest=", "Randomly fuzz 1 of every network messages"); strUsage += HelpMessageOpt("-stopafterblockimport", strprintf("Stop running after importing blocks from disk (default: %u)", DEFAULT_STOPAFTERBLOCKIMPORT)); + strUsage += HelpMessageOpt("-stopatheight", strprintf("Stop running after reaching the given height in the main chain (default: %u)", DEFAULT_STOPATHEIGHT)); + strUsage += HelpMessageOpt("-limitancestorcount=", strprintf("Do not accept transactions if number of in-mempool ancestors is or more (default: %u)", DEFAULT_ANCESTOR_LIMIT)); strUsage += HelpMessageOpt("-limitancestorsize=", strprintf("Do not accept transactions whose size with all in-mempool ancestors exceeds kilobytes (default: %u)", DEFAULT_ANCESTOR_SIZE_LIMIT)); strUsage += HelpMessageOpt("-limitdescendantcount=", strprintf("Do not accept transactions if any ancestor would have or more in-mempool descendants (default: %u)", DEFAULT_DESCENDANT_LIMIT)); @@ -505,6 +510,7 @@ strUsage += HelpMessageOpt("-blockmaxsize=", strprintf(_("Set maximum block size in bytes (default: %d)"), DEFAULT_BLOCK_MAX_SIZE)); strUsage += HelpMessageOpt("-blockprioritysize=", strprintf(_("Set maximum size of high-priority/low-fee transactions in bytes (default: %d)"), DEFAULT_BLOCK_PRIORITY_SIZE)); strUsage += HelpMessageOpt("-blockmintxfee=", strprintf(_("Set lowest fee rate (in %s/kB) for transactions to be included in block creation. (default: %s)"), CURRENCY_UNIT, FormatMoney(DEFAULT_BLOCK_MIN_TX_FEE))); + strUsage += HelpMessageOpt("-bip148", strprintf(_("Enable BIP148/UASF (default: %d)"), DEFAULT_BIP148)); if (showDebug) strUsage += HelpMessageOpt("-blockversion=", "Override block version to test forking scenarios"); strUsage += HelpMessageOpt("-priorityaccurate", strprintf(_("Update coin-age priority accurately when parent transactions are confirmed (default: %d)"), fPriorityAccurate)); @@ -1300,6 +1306,20 @@ uacomments.push_back(cmt); } } + // Add BIP148 enforcement indicator; note this uses characters forbidden by SAFE_CHARS_UA_COMMENT (but not BIP14) to avoid users confusing it with a mere uacomment option + { + std::string uacomment_bip148; + if (GetBoolArg("-bip148", DEFAULT_BIP148)) { + uacomment_bip148 = "+"; + } else { + uacomment_bip148 = "!"; + } + uacomment_bip148 += "BIP148"; + if (!IsArgSet("-bip148")) { + uacomment_bip148 += "="; + } + uacomments.push_back(uacomment_bip148); + } strSubVersion = FormatSubVersion(CLIENT_NAME, CLIENT_VERSION, uacomments); if (strSubVersion.size() > MAX_SUBVERSION_LENGTH) { return InitError(strprintf(_("Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments."), @@ -1671,6 +1691,12 @@ nRelevantServices = ServiceFlags(nRelevantServices | NODE_WITNESS); } + if (GetBoolArg("-bip148", DEFAULT_BIP148)) { + // We want to preferentially peer with other nodes that enforce BIP148, in case of a chain split + nLocalServices = ServiceFlags(nLocalServices | NODE_BIP148); + nRelevantServices = ServiceFlags(nRelevantServices | NODE_BIP148); + } + // ********************************************************* Step 10: import blocks if (!CheckDiskSpace()) diff -Nru bitcoin-0.14.1.knots20170420/src/Makefile.am bitcoin-0.14.2.knots20170618/src/Makefile.am --- bitcoin-0.14.1.knots20170420/src/Makefile.am 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/Makefile.am 2017-06-18 17:25:52.000000000 +0000 @@ -476,6 +476,14 @@ EXTRA_DIST = $(CTAES_DIST) + +config/bitcoin-config.h: config/stamp-h1 + @$(MAKE) -C $(top_builddir) $(subdir)/$(@) +config/stamp-h1: $(top_srcdir)/$(subdir)/config/bitcoin-config.h.in $(top_builddir)/config.status + $(AM_V_at)$(MAKE) -C $(top_builddir) $(subdir)/$(@) +$(top_srcdir)/$(subdir)/config/bitcoin-config.h.in: $(am__configure_deps) + $(AM_V_at)$(MAKE) -C $(top_srcdir) $(subdir)/config/bitcoin-config.h.in + clean-local: -$(MAKE) -C secp256k1 clean -$(MAKE) -C univalue clean diff -Nru bitcoin-0.14.1.knots20170420/src/Makefile.qt.include bitcoin-0.14.2.knots20170618/src/Makefile.qt.include --- bitcoin-0.14.1.knots20170420/src/Makefile.qt.include 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/Makefile.qt.include 2017-06-18 17:25:52.000000000 +0000 @@ -66,6 +66,7 @@ qt/locale/bitcoin_mk_MK.ts \ qt/locale/bitcoin_mn.ts \ qt/locale/bitcoin_ms_MY.ts \ + qt/locale/bitcoin_my.ts \ qt/locale/bitcoin_nb.ts \ qt/locale/bitcoin_ne.ts \ qt/locale/bitcoin_nl.ts \ @@ -86,6 +87,7 @@ qt/locale/bitcoin_sv.ts \ qt/locale/bitcoin_ta.ts \ qt/locale/bitcoin_th_TH.ts \ + qt/locale/bitcoin_th.ts \ qt/locale/bitcoin_tr_TR.ts \ qt/locale/bitcoin_tr.ts \ qt/locale/bitcoin_uk.ts \ diff -Nru bitcoin-0.14.1.knots20170420/src/net.cpp bitcoin-0.14.2.knots20170618/src/net.cpp --- bitcoin-0.14.1.knots20170420/src/net.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/net.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -143,7 +143,7 @@ // one by discovery. CAddress GetLocalAddress(const CNetAddr *paddrPeer, ServiceFlags nLocalServices) { - CAddress ret(CService(CNetAddr(),GetListenPort()), NODE_NONE); + CAddress ret(CService(CNetAddr(),GetListenPort()), nLocalServices); CService addr; if (GetLocal(addr, paddrPeer)) { @@ -413,10 +413,10 @@ CBanDB bandb; banmap_t banmap; - SetBannedSetDirty(false); GetBanned(banmap); - if (!bandb.Write(banmap)) - SetBannedSetDirty(true); + if (bandb.Write(banmap)) { + SetBannedSetDirty(false); + } LogPrint("net", "Flushed %d banned node ips/subnets to banlist.dat %dms\n", banmap.size(), GetTimeMillis() - nStart); @@ -536,6 +536,8 @@ void CConnman::GetBanned(banmap_t &banMap) { LOCK(cs_setBanned); + // Sweep the banlist so expired bans are not returned + SweepBanned(); banMap = setBanned; //create a thread safe copy } @@ -1579,6 +1581,9 @@ LogPrintf("Loading addresses from DNS seeds (could take a while)\n"); BOOST_FOREACH(const CDNSSeedData &seed, vSeeds) { + if (interruptNet) { + return; + } if (HaveNameProxy()) { AddOneShot(seed.host); } else { @@ -1596,6 +1601,9 @@ found++; } } + if (interruptNet) { + return; + } // TODO: The seed name resolve may fail, yielding an IP of [::], which results in // addrman assigning the same source to results from different seeds. // This should switch to a hard-coded stable dummy IP for each seed name, so that the @@ -1716,11 +1724,17 @@ // Only connect out to one peer per network group (/16 for IPv4). // Do this here so we don't have to critsect vNodes inside mapAddresses critsect. int nOutbound = 0; + int nOutboundRelevant = 0; std::set > setConnected; { LOCK(cs_vNodes); BOOST_FOREACH(CNode* pnode, vNodes) { if (!pnode->fInbound && !pnode->fAddnode) { + + // Count the peers that have all relevant services + if (pnode->fSuccessfullyConnected && !pnode->fFeeler && ((pnode->nServices & nRelevantServices) == nRelevantServices)) { + nOutboundRelevant++; + } // Netgroups for inbound and addnode peers are not excluded because our goal here // is to not use multiple of our limited outbound slots on a single netgroup // but inbound and addnode peers do not use our outbound slots. Inbound peers @@ -1784,14 +1798,27 @@ continue; // only consider nodes missing relevant services after 40 failed attempts and only if less than half the outbound are up. - if ((addr.nServices & nRelevantServices) != nRelevantServices && (nTries < 40 || nOutbound >= (nMaxOutbound >> 1))) + ServiceFlags nRequiredServices = nRelevantServices; + if (nTries >= 40 && nOutbound < (nMaxOutbound >> 1)) { + nRequiredServices = REQUIRED_SERVICES; + } + + if ((addr.nServices & nRequiredServices) != nRequiredServices) { continue; + } // do not allow non-default ports, unless after 50 invalid addresses selected already if (addr.GetPort() != Params().GetDefaultPort() && nTries < 50) continue; addrConnect = addr; + + // regardless of the services assumed to be available, only require the minimum if half or more outbound have relevant services + if (nOutboundRelevant >= (nMaxOutbound >> 1)) { + addrConnect.nServices = REQUIRED_SERVICES; + } else { + addrConnect.nServices = nRequiredServices; + } break; } @@ -1930,6 +1957,9 @@ pnode->fFeeler = true; if (fAddnode) pnode->fAddnode = true; + if (IsWhitelistedRange(pnode->addr)) { + pnode->fWhitelisted = true; + } GetNodeSignals().InitializeNode(pnode, *this); { diff -Nru bitcoin-0.14.1.knots20170420/src/net.h bitcoin-0.14.2.knots20170618/src/net.h --- bitcoin-0.14.1.knots20170420/src/net.h 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/net.h 2017-06-18 17:25:52.000000000 +0000 @@ -235,7 +235,6 @@ bool Unban(const CSubNet &ip); void GetBanned(banmap_t &banmap); void SetBanned(const banmap_t &banmap); - void SweepBanned(); void AddOneShot(const std::string& strDest); @@ -324,6 +323,7 @@ //!set the "dirty" flag for the banlist void SetBannedSetDirty(bool dirty=true); //!clean unused entries (if bantime has expired) + void SweepBanned(); void DumpAddresses(); void DumpData(); void DumpBanlist(); @@ -347,7 +347,7 @@ uint64_t nMaxOutboundLimit; uint64_t nMaxOutboundTimeframe; - // Whitelisted ranges. Any node connecting from these is automatically + // Whitelisted ranges. Any node communicating using these is automatically // whitelisted (as well as those connecting to whitelisted binds). std::vector vWhitelistedRange; CCriticalSection cs_vWhitelistedRange; @@ -807,6 +807,11 @@ return nLocalServices; } + bool PunishInvalidBlocks() const + { + return !(fInbound || fFeeler || fWhitelisted || fAddnode); + } + std::string GetAddrName() const; //! Sets the addrName only if it was not previously set void MaybeSetAddrName(const std::string& addrNameIn); diff -Nru bitcoin-0.14.1.knots20170420/src/net_processing.cpp bitcoin-0.14.2.knots20170618/src/net_processing.cpp --- bitcoin-0.14.1.knots20170420/src/net_processing.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/net_processing.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -849,6 +849,30 @@ nTimeBestReceived = GetTime(); } +namespace { + +void HandleBlockDoS(std::string node_name, CNode * const pfrom, const int nDoS, const bool is_header) { + // We never actually DoS ban for invalid blocks, merely disconnect nodes if we're relying on them as a primary node + NodeId node_id = pfrom->GetId(); + if (node_name.empty()) { + node_name = "(unknown)"; + LOCK(cs_main); + CNodeState *nodestate = State(node_id); + if (nodestate) { + node_name = nodestate->name; + } + } + const std::string msg = strprintf("%s peer=%d got DoS score %d on invalid block%s", node_name, node_id, nDoS, is_header ? " header" : ""); + if (pfrom->PunishInvalidBlocks()) { + LogPrint("net", "%s; simply disconnecting\n", msg); + pfrom->fDisconnect = true; + } else { + LogPrint("net", "%s; tolerating\n", msg); + } +} + +} + void PeerLogicValidation::BlockChecked(const CBlock& block, const CValidationState& state) { LOCK(cs_main); @@ -859,10 +883,16 @@ if (state.IsInvalid(nDoS)) { if (it != mapBlockSource.end() && State(it->second.first)) { assert (state.GetRejectCode() < REJECT_INTERNAL); // Blocks are never rejected with internal reject codes + const NodeId node_id = it->second.first; + CNodeState * const nodestate = State(node_id); CBlockReject reject = {(unsigned char)state.GetRejectCode(), state.GetRejectReason().substr(0, MAX_REJECT_MESSAGE_LENGTH), hash}; State(it->second.first)->rejects.push_back(reject); - if (nDoS > 0 && it->second.second) - Misbehaving(it->second.first, nDoS); + if (nDoS > 0 && it->second.second) { + connman->ForNode(node_id, [nodestate, nDoS](CNode* pfrom){ + HandleBlockDoS(nodestate->name, pfrom, nDoS, false); + return true; + }); + } } } // Check that: @@ -1977,8 +2007,7 @@ int nDoS; if (state.IsInvalid(nDoS)) { if (nDoS > 0) { - LOCK(cs_main); - Misbehaving(pfrom->GetId(), nDoS); + HandleBlockDoS("", pfrom, nDoS, true); } LogPrintf("Peer %d sent us invalid header via cmpctblock\n", pfrom->id); return true; @@ -2246,12 +2275,23 @@ LOCK(cs_main); CNodeState *nodestate = State(pfrom->GetId()); + uint256 hashLastBlock; + for (const CBlockHeader& header : headers) { + if (!hashLastBlock.IsNull() && header.hashPrevBlock != hashLastBlock) { + Misbehaving(pfrom->GetId(), 20); + return error("non-continuous headers sequence"); + } + hashLastBlock = header.GetHash(); + if (!CheckProofOfWork(header.GetHash(), header.nBits, chainparams.GetConsensus())) { + Misbehaving(pfrom->GetId(), 50); + return error("proof of work failed"); + } + } + // If this looks like it could be a block announcement (nCount < // MAX_BLOCKS_TO_ANNOUNCE), use special logic for handling headers that // don't connect: // - Send a getheaders message in response to try to connect the chain. - // - The peer can send up to MAX_UNCONNECTING_HEADERS in a row that - // don't connect before giving DoS points // - Once a headers message is received that is valid and does connect, // nUnconnectingHeaders gets reset back to 0. if (mapBlockIndex.find(headers[0].hashPrevBlock) == mapBlockIndex.end() && nCount < MAX_BLOCKS_TO_ANNOUNCE) { @@ -2267,19 +2307,11 @@ // we can use this peer to download. UpdateBlockAvailability(pfrom->GetId(), headers.back().GetHash()); - if (nodestate->nUnconnectingHeaders % MAX_UNCONNECTING_HEADERS == 0) { - Misbehaving(pfrom->GetId(), 20); + if (pfrom->PunishInvalidBlocks()) { + pfrom->fDisconnect = true; } - return true; - } - uint256 hashLastBlock; - for (const CBlockHeader& header : headers) { - if (!hashLastBlock.IsNull() && header.hashPrevBlock != hashLastBlock) { - Misbehaving(pfrom->GetId(), 20); - return error("non-continuous headers sequence"); - } - hashLastBlock = header.GetHash(); + return true; } } @@ -2288,8 +2320,7 @@ int nDoS; if (state.IsInvalid(nDoS)) { if (nDoS > 0) { - LOCK(cs_main); - Misbehaving(pfrom->GetId(), nDoS); + HandleBlockDoS("", pfrom, nDoS, true); } return error("invalid header received"); } diff -Nru bitcoin-0.14.1.knots20170420/src/protocol.h bitcoin-0.14.2.knots20170618/src/protocol.h --- bitcoin-0.14.1.knots20170420/src/protocol.h 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/protocol.h 2017-06-18 17:25:52.000000000 +0000 @@ -277,6 +277,9 @@ // BIP process. NODE_REPLACE_BY_FEE = (1 << 26), + + // NODE_BIP148 means the node enforces BIP 148's mandatory Segwit activation beginning August 1, 2017 + NODE_BIP148 = (1 << 27), }; /** A CService with information about it as peer */ diff -Nru bitcoin-0.14.1.knots20170420/src/qt/bantablemodel.cpp bitcoin-0.14.2.knots20170618/src/qt/bantablemodel.cpp --- bitcoin-0.14.1.knots20170420/src/qt/bantablemodel.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/bantablemodel.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -49,7 +49,6 @@ { banmap_t banMap; if(g_connman) - g_connman->SweepBanned(); g_connman->GetBanned(banMap); cachedBanlist.clear(); diff -Nru bitcoin-0.14.1.knots20170420/src/qt/bitcoin.cpp bitcoin-0.14.2.knots20170618/src/qt/bitcoin.cpp --- bitcoin-0.14.1.knots20170420/src/qt/bitcoin.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/bitcoin.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -18,6 +18,7 @@ #include "platformstyle.h" #include "splashscreen.h" #include "utilitydialog.h" +#include "validation.h" #include "winshutdownmonitor.h" #ifdef ENABLE_WALLET @@ -653,6 +654,11 @@ // Ignore problems here, since we are responsible for this file } + if (IsThisSoftwareExpired(GetTime())) { + QMessageBox::critical(0, QObject::tr("Software expired"), QObject::tr("This software is expired, and may be out of consensus. You must choose to upgrade or override this expiration.")); + return EXIT_FAILURE; + } + QScopedPointer networkStyle(NetworkStyle::instantiate(QString::fromStdString(Params().NetworkIDString()))); assert(!networkStyle.isNull()); // Allow for separate UI settings for testnets diff -Nru bitcoin-0.14.1.knots20170420/src/qt/bitcoin_locale.qrc bitcoin-0.14.2.knots20170618/src/qt/bitcoin_locale.qrc --- bitcoin-0.14.1.knots20170420/src/qt/bitcoin_locale.qrc 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/bitcoin_locale.qrc 2017-06-18 17:25:52.000000000 +0000 @@ -59,6 +59,7 @@ locale/bitcoin_mk_MK.qm locale/bitcoin_mn.qm locale/bitcoin_ms_MY.qm + locale/bitcoin_my.qm locale/bitcoin_nb.qm locale/bitcoin_ne.qm locale/bitcoin_nl.qm @@ -79,6 +80,7 @@ locale/bitcoin_sv.qm locale/bitcoin_ta.qm locale/bitcoin_th_TH.qm + locale/bitcoin_th.qm locale/bitcoin_tr_TR.qm locale/bitcoin_tr.qm locale/bitcoin_uk.qm diff -Nru bitcoin-0.14.1.knots20170420/src/qt/bitcoinstrings.cpp bitcoin-0.14.2.knots20170618/src/qt/bitcoinstrings.cpp --- bitcoin-0.14.1.knots20170420/src/qt/bitcoinstrings.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/bitcoinstrings.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -232,8 +232,8 @@ "Warning: We do not appear to fully agree with our peers! You may need to " "upgrade, or other nodes may need to upgrade."), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR " -"notated network (e.g. 1.2.3.0/24). Can be specified multiple times."), +"Whitelist peers using the given IP address (e.g. 1.2.3.4) or CIDR notated " +"network (e.g. 1.2.3.0/24). Can be specified multiple times."), QT_TRANSLATE_NOOP("bitcoin-core", "" "Whitelisted peers cannot be DoS banned and their transactions are always " "relayed, even if they are already in the mempool, useful e.g. for a gateway"), @@ -274,6 +274,7 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Do you want to rebuild the block database now?"), QT_TRANSLATE_NOOP("bitcoin-core", "Do you want to use the standard network port for "), QT_TRANSLATE_NOOP("bitcoin-core", "Done loading"), +QT_TRANSLATE_NOOP("bitcoin-core", "Enable BIP148/UASF (default: %d)"), QT_TRANSLATE_NOOP("bitcoin-core", "Enable publish hash block in
"), QT_TRANSLATE_NOOP("bitcoin-core", "Enable publish hash transaction in
"), QT_TRANSLATE_NOOP("bitcoin-core", "Enable publish raw block in
"), diff -Nru bitcoin-0.14.1.knots20170420/src/qt/forms/sendcoinsdialog.ui bitcoin-0.14.2.knots20170618/src/qt/forms/sendcoinsdialog.ui --- bitcoin-0.14.1.knots20170420/src/qt/forms/sendcoinsdialog.ui 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/forms/sendcoinsdialog.ui 2017-06-18 17:25:52.000000000 +0000 @@ -762,7 +762,7 @@ - Using the fallbackfee can result in sending a transaction that will take serval hours or days (or never) to confirm. Consider choosing your fee manually or wait until your have validated the complete chain. + Using the fallbackfee can result in sending a transaction that will take several hours or days (or never) to confirm. Consider choosing your fee manually or wait until your have validated the complete chain. diff -Nru bitcoin-0.14.1.knots20170420/src/qt/guiutil.cpp bitcoin-0.14.2.knots20170618/src/qt/guiutil.cpp --- bitcoin-0.14.1.knots20170420/src/qt/guiutil.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/guiutil.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -996,6 +996,9 @@ case NODE_REPLACE_BY_FEE: strList.append("REPLACE_BY_FEE?"); break; + case NODE_BIP148: + strList.append("BIP148"); + break; default: strList.append(QString("%1[%2]").arg("UNKNOWN").arg(check)); } diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_af.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_af.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_af.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_af.ts 2017-06-18 17:25:52.000000000 +0000 @@ -74,6 +74,10 @@ &Dupliseer Adres + Copy &Label + Kopieer &Etiket + + &Edit &Verander @@ -204,6 +208,14 @@ U het die verkeerde wagwoord ingetik. + Wallet decryption failed + Beursie-dekripsie het misluk + + + Wallet passphrase was successfully changed. + Beursie wagwoordfrase is suksesvol verander. + + Warning: The Caps Lock key is on! WAARSKUWING: Outomatiese Kapitalisering is aktief op u sleutelbord! @@ -211,6 +223,10 @@ BanTableModel + IP/Netmask + IP/Netmasker + + Banned Until Verban tot @@ -218,6 +234,10 @@ BitcoinGUI + Sign &message... + Teken &boodskap... + + Synchronizing with network... Netwerk-sinkronisasie... @@ -302,6 +322,18 @@ Beursie: + Click to disable network activity. + Kliek om netwerkaktiwiteit af te skakel. + + + Network activity disabled. + Netwerkaktiwiteit gedeaktiveer. + + + Click to enable network activity again. + Kliek om netwerkaktiwiteit weer aan te skakel. + + Reindexing blocks on disk... Besig met herindeksering van blokke op hardeskyf... @@ -318,6 +350,14 @@ Verander die wagwoord wat ek vir kodifikasie van my beursie gebruik + &Debug window + &Ontfout venster + + + Open debugging and diagnostic console + Maak ontfouting en diagnostiese konsole oop + + Bitcoin Bitcoin @@ -770,6 +810,10 @@ &Inligting + Debug window + Ontfout venster + + General Algemeen @@ -825,6 +869,10 @@ User Agent Gebruikeragent + + Network activity disabled + Netwerkaktiwiteit gedeaktiveer + ReceiveCoinsDialog diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_ar.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_ar.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_ar.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_ar.ts 2017-06-18 17:25:52.000000000 +0000 @@ -318,6 +318,18 @@ محفظة: + Click to disable network activity. + اضغط لإلغاء تفعيل الشبكه + + + Network activity disabled. + تم إلغاء تفعيل الشبكه + + + Click to enable network activity again. + اضغط لتفعيل الشبكه مره أخرى + + Reindexing blocks on disk... إعادة الفهرسة الكتل على القرص ... @@ -517,7 +529,11 @@ Wallet is <b>encrypted</b> and currently <b>locked</b> المحفظة <b>مشفرة</b> و <b>مقفلة</b> حاليا - + + A fatal error occurred. Bitcoin can no longer continue safely and will quit. + خطأ فادح حدث . لا يمكن اتمام بيتكوين بامان سيتم الخروج + + CoinControlDialog @@ -617,6 +633,10 @@ نسخ بعد الرسوم + Copy bytes + نسخ البايتات + + Copy change نسخ التعديل @@ -815,7 +835,7 @@ Unknown... - غير معرف... + غير معرف Hide @@ -1167,6 +1187,10 @@ استخدم اسهم الاعلى و الاسفل للتنقل بين السجلات و <b>Ctrl-L</b> لمسح الشاشة + Network activity disabled + تم إلغاء تفعيل الشبكه + + %1 B %1 بايت @@ -1431,6 +1455,10 @@ نسخ بعد الرسوم + Copy bytes + نسخ البايتات + + Copy change نسخ التعديل diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_cs.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_cs.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_cs.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_cs.ts 2017-06-18 17:25:52.000000000 +0000 @@ -3218,6 +3218,10 @@ Upozornění: Nesouhlasím zcela se svými protějšky! Možná potřebuji aktualizovat nebo ostatní uzly potřebují aktualizovat. + Whitelist peers using the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. + Vždy vítat protějšky připojující se z dané IP adresy (např. 1.2.3.4) či podsítě (CIDR zápis, např. 1.2.3.0/24). Lze zadat i vícekrát. + + You need to rebuild the database using -reindex-chainstate to change -txindex Je třeba přestavět databázi použitím -reindex-chainstate, aby bylo možné změnit -txindex @@ -3798,10 +3802,6 @@ Upozornění: soubor s peněženkou je poškozený, data jsou však zachráněna! Původní soubor %s je uložený jako %s v %s. Pokud nejsou stav tvého účtu nebo transakce v pořádku, zřejmě bys měl obnovit zálohu. - Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. - Vždy vítat protějšky připojující se z dané IP adresy (např. 1.2.3.4) či podsítě (CIDR zápis, např. 1.2.3.0/24). Lze zadat i vícekrát. - - %s is set very high! %s je nastaveno velmi vysoko! diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_da.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_da.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_da.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_da.ts 2017-06-18 17:25:52.000000000 +0000 @@ -3175,7 +3175,7 @@ Reduce storage requirements by enabling pruning (deleting) of old blocks. This allows the pruneblockchain RPC to be called to delete specific blocks, and enables automatic pruning of old blocks if a target size in MiB is provided. This mode is incompatible with -txindex and -rescan. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, >%u = automatically prune block files to stay under the specified target size in MiB) - Reducér pladskravene ved at beskære (slette, "prune") gamle blokke. Dette tillader pruneblockchain-RPC'en at blive kaldt for at slette specifikke blokke, og det aktiverer automatisk beskæring af gamle blokke, hvis en målstørrelse i MiB er angivet. Denne tilstand er ikke kompatibel med -txindex og -rescan. Advarsel: Fortrydelse af denne indstilling kræver download af hele blokkæden igen. (standard: 0 = slå beskæring af blokke fra, 1 = tillad manuel beskæring via RPC, >%u = beskær automatisk blokfiler for at bliver under den angivne målstørrelse i MiB) + Reducér pladskravene ved at beskære (slette, “prune”) gamle blokke. Dette tillader pruneblockchain-RPC'en at blive kaldt for at slette specifikke blokke, og det aktiverer automatisk beskæring af gamle blokke, hvis en målstørrelse i MiB er angivet. Denne tilstand er ikke kompatibel med -txindex og -rescan. Advarsel: Fortrydelse af denne indstilling kræver download af hele blokkæden igen. (standard: 0 = slå beskæring af blokke fra, 1 = tillad manuel beskæring via RPC, >%u = beskær automatisk blokfiler for at bliver under den angivne målstørrelse i MiB) Set lowest fee rate (in %s/kB) for transactions to be included in block creation. (default: %s) @@ -3218,6 +3218,10 @@ Advarsel: Vi ser ikke ud til at være fuldt ud enige med andre knuder! Du kan være nødt til at opgradere, eller andre knuder kan være nødt til at opgradere. + Whitelist peers using the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. + Sæt knuder på hvidliste, som forbinder fra den givne IP-adresse (fx 1.2.3.4) eller CIDR-noteret netværk (fx 1.2.3.0/24). Kan angives flere gange. + + You need to rebuild the database using -reindex-chainstate to change -txindex Du er nødt til at genopbygge databasen ved hjælp af -reindex-chainstate for at ændre -txindex @@ -3798,10 +3802,6 @@ Advarsel: Tegnebogsfil ødelagt, data reddet! Oprindelig %s gemt som %s i %s; hvis din saldo eller dine transaktioner er forkert, bør du genskabe fra en sikkerhedskopi. - Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. - Sæt knuder på hvidliste, som forbinder fra den givne IP-adresse (fx 1.2.3.4) eller CIDR-noteret netværk (fx 1.2.3.0/24). Kan angives flere gange. - - %s is set very high! %s er meget højt sat! diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_de.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_de.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_de.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_de.ts 2017-06-18 17:25:52.000000000 +0000 @@ -43,7 +43,7 @@ Choose the address to send coins to - Wählen Sie die Adresse aus, an die Sie Bitcoins senden möchten + Wählen Sie die Adresse aus, an die Sie Bitcoins überweisen möchten Choose the address to receive coins with @@ -79,7 +79,7 @@ &Edit - &Editieren + B&earbeiten Export Address List @@ -133,7 +133,7 @@ Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. - Geben Sie die neue Passphrase für die Wallet ein.<br>Bitte benutzen Sie eine Passphrase bestehend aus <b>zehn oder mehr zufälligen Zeichen</b> oder <b>acht oder mehr Wörtern</b>. + Geben Sie die neue Passphrase für die Brieftasche ein.<br>Bitte benutzen Sie eine Passphrase bestehend aus <b>zehn oder mehr zufälligen Zeichen</b> oder <b>acht oder mehr Wörtern</b>. Encrypt wallet @@ -141,7 +141,7 @@ This operation needs your wallet passphrase to unlock the wallet. - Dieser Vorgang benötigt ihre Passphrase, um die Wallet zu entsperren. + Dieser Vorgang benötigt ihre Passphrase, um die Brieftasche zu entsperren. Unlock wallet @@ -149,11 +149,11 @@ This operation needs your wallet passphrase to decrypt the wallet. - Dieser Vorgang benötigt Ihre Passphrase, um die Wallet zu entschlüsseln. + Dieser Vorgang benötigt Ihre Passphrase, um die Brieftasche zu entschlüsseln. Decrypt wallet - Wallet entschlüsseln + Brieftasche entschlüsseln Change passphrase @@ -161,39 +161,39 @@ Enter the old passphrase and new passphrase to the wallet. - Geben Sie die alte und neue Wallet-Passphrase ein. + Geben Sie die alte und neue Brieftschen-Passphrase ein. Confirm wallet encryption - Wallet-Verschlüsselung bestätigen + Brieftaschen-Verschlüsselung bestätigen Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! - Warnung: Wenn Sie Ihre Wallet verschlüsseln und Ihre Passphrase verlieren, werden Sie <b>alle Ihre Bitcoins verlieren</b>! + Warnung: Wenn Sie Ihre Brieftasche verschlüsseln und Ihre Passphrase verlieren, werden Sie <b>alle Ihre Bitcoins verlieren</b>! Are you sure you wish to encrypt your wallet? - Sind Sie sich sicher, dass Sie Ihre Wallet verschlüsseln möchten? + Sind Sie sich sicher, dass Sie Ihre Brieftasche verschlüsseln möchten? Wallet encrypted - Wallet verschlüsselt + Brieftasche verschlüsselt %1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. - %1 wird jetzt beendet, um den Verschlüsselungsprozess abzuschließen. Bitte beachten Sie, dass die Wallet-Verschlüsselung nicht vollständig vor Diebstahl Ihrer Bitcoins durch Schadprogramme schützt, die Ihren Computer befällt. + %1 wird jetzt beendet, um den Verschlüsselungsprozess abzuschließen. Bitte beachten Sie, dass die Brieftaschen-Verschlüsselung nicht vollständig vor Diebstahl Ihrer Bitcoins durch Schadprogramme schützt, die Ihren Computer befällt. IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - WICHTIG: Alle vorherigen Wallet-Sicherungen sollten durch die neu erzeugte, verschlüsselte Wallet ersetzt werden. Aus Sicherheitsgründen werden vorherige Sicherungen der unverschlüsselten Wallet nutzlos, sobald Sie die neue, verschlüsselte Wallet verwenden. + WICHTIG: Alle vorherigen Brieftaschen-Sicherungen sollten durch die neu erzeugte, verschlüsselte Brieftasche ersetzt werden. Aus Sicherheitsgründen werden vorherige Sicherungen der unverschlüsselten Brieftasche nutzlos, sobald Sie die neue, verschlüsselte Brieftasche verwenden. Wallet encryption failed - Wallet-Verschlüsselung fehlgeschlagen + Brieftaschen-Verschlüsselung fehlgeschlagen Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Die Wallet-Verschlüsselung ist aufgrund eines internen Fehlers fehlgeschlagen. Ihre Wallet wurde nicht verschlüsselt. + Die Brieftaschen-Verschlüsselung ist aufgrund eines internen Fehlers fehlgeschlagen. Ihre Brieftasche wurde nicht verschlüsselt. The supplied passphrases do not match. @@ -201,19 +201,19 @@ Wallet unlock failed - Wallet-Entsperrung fehlgeschlagen + Brieftaschen-Entsperrung fehlgeschlagen The passphrase entered for the wallet decryption was incorrect. - Die eingegebene Passphrase zur Wallet-Entschlüsselung war nicht korrekt. + Die eingegebene Passphrase zur Brieftaschen-Entschlüsselung war nicht korrekt. Wallet decryption failed - Wallet-Entschlüsselung fehlgeschlagen + Brieftaschen-Entschlüsselung fehlgeschlagen Wallet passphrase was successfully changed. - Die Wallet-Passphrase wurde erfolgreich geändert. + Die Brieftaschen-Passphrase wurde erfolgreich geändert. Warning: The Caps Lock key is on! @@ -443,7 +443,7 @@ Indexing blocks on disk... - Reindiziere Blöcke auf Datenträger... + Indiziere Blöcke auf Datenträger... Processing blocks on disk... @@ -640,7 +640,7 @@ Copy transaction ID - Transaktionskennung kopieren + Transaktions-ID kopieren Lock unspent @@ -664,7 +664,7 @@ Copy bytes - Byte kopieren + Bytes kopieren Copy dust @@ -755,7 +755,7 @@ Could not unlock wallet. - Wallet konnte nicht entsperrt werden. + Brieftasche konnte nicht entsperrt werden. New key generation failed. @@ -824,7 +824,7 @@ Set language, for example "de_DE" (default: system locale) - Sprache einstellen, zum Beispiel "de_DE" (default: system locale) + Sprache einstellen, zum Beispiel "de_DE" (Standard: Systemgebietsschema) Start minimized @@ -832,7 +832,7 @@ Set SSL root certificates for payment request (default: -system-) - SSL-Wurzelzertifikate für Zahlungsanforderungen festlegen (Standard: -system-) + SSL-Wurzelzertifikate für Zahlungsanforderungen festlegen (Standard: Systemstandard) Show splash screen on startup (default: %u) @@ -3214,6 +3214,10 @@ Warnung: Wir scheinen nicht vollständig mit unseren Gegenstellen übereinzustimmen! Sie oder die anderen Knoten müssen unter Umständen Ihre Client-Software aktualisieren. + Whitelist peers using the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. + Gegenstellen die sich von der angegebenen IP-Adresse (e.g. 1.2.3.4) oder CIDR Notation (eg. 1.2.3.0/24) aus verbinden immer zulassen. Kann mehrmals angegeben werden. + + You need to rebuild the database using -reindex-chainstate to change -txindex Sie müssen die Datenbank mit Hilfe von -reindex-chainstate neu aufbauen, um -txindex zu verändern @@ -3782,10 +3786,6 @@ Warnung: Unbekannte Blockversion wird durch Mining erzeugt! Es ist möglich, dass unbekannte Regeln in Kraft sind. - Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. - Gegenstellen die sich von der angegebenen IP-Adresse (e.g. 1.2.3.4) oder CIDR Notation (eg. 1.2.3.0/24) aus verbinden immer zulassen. Kann mehrmals angegeben werden. - - %s is set very high! %s wurde sehr hoch Eingestellt! diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_el_GR.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_el_GR.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_el_GR.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_el_GR.ts 2017-06-18 17:25:52.000000000 +0000 @@ -43,11 +43,11 @@ Choose the address to send coins to - Επιλογή διεύθυνσης όπου θα σταλθούν νομίσματα + Επιλέξτε διεύθυνση αποστολής των νομισμάτων σας Choose the address to receive coins with - Επιλογή διεύθυνσης απ' όπου θα ληφθούν νομίσματα + Επιλέξτε διεύθυνση παραλαβής νομισμάτων C&hoose @@ -71,19 +71,19 @@ &Copy Address - &Αντιγραφή διεύθυνσης + &Αντιγραφή Διεύθυνσης Copy &Label - Αντιγραφή &επιγραφής + Αντιγραφή&Ετικέτα &Edit - &Επεξεργασία + &Διόρθωση Export Address List - Εξαγωγή της λίστας διευθύνσεων + Εξαγωγή Λίστας Διεύθυνσεων Comma separated file (*.csv) @@ -91,7 +91,7 @@ Exporting Failed - Η Εξαγωγή Απέτυχε + Αποτυχία Εξαγωγής There was an error trying to save the address list to %1. Please try again. @@ -102,7 +102,7 @@ AddressTableModel Label - Επιγραφή + Ετικέτα Address @@ -157,7 +157,7 @@ Change passphrase - Άλλαξε κωδικο πρόσβασης + Αλλάξτε Φράση Πρόσβασης Enter the old passphrase and new passphrase to the wallet. @@ -202,7 +202,7 @@ Wallet unlock failed - το ξεκλείδωμα του πορτοφολιού απέτυχε + Το Ξεκλείδωμα του Πορτοφολιού Απέτυχε The passphrase entered for the wallet decryption was incorrect. @@ -569,7 +569,7 @@ Copy label - Αντιγραφή επιγραφής + Αντιγραφή ετικέτας Copy amount @@ -577,7 +577,7 @@ Copy transaction ID - Αντιγραφη του ID Συναλλαγής + Αντιγραφή ταυτότητας συναλλαγής Lock unspent @@ -665,15 +665,15 @@ New receiving address - Νέα διεύθυνση λήψης + Νέα Διεύθυνση Λήψης New sending address - Νέα διεύθυνση αποστολής + Νέα Διεύθυνση Αποστολής Edit receiving address - Επεξεργασία διεύθυνσης λήψης + Διόρθωση Διεύθυνσης Λήψης Edit sending address @@ -1497,7 +1497,7 @@ Copy label - Αντιγραφή επιγραφής + Αντιγραφή ετικέτας Copy message @@ -1548,7 +1548,7 @@ Label - Επιγραφή + Ετικέτα Message @@ -1567,11 +1567,11 @@ RecentRequestsTableModel Date - Ημερομηνία + Ημερομήνια Label - Επιγραφή + Ετικέτα Message @@ -2007,7 +2007,11 @@ %1/offline - %1/χωρίς σύνδεση; + %1/αποσυνδεδεμένο + + + 0/unconfirmed, %1 + 0/ανεπιβεβαίωτο, %1 %1/unconfirmed @@ -2035,7 +2039,7 @@ Generated - Δημιουργία + Παράχθηκε From @@ -2043,7 +2047,7 @@ unknown - άγνωστο + Άγνωστο To @@ -2051,23 +2055,23 @@ own address - δική σας διεύθυνση + δική σας διεύθυνση watch-only - Επίβλεψη μόνο: + παρακολούθηση-μόνο label - eπιγραφή + ετικέτα Credit - Πίστωση + Πίστωση not accepted - μη αποδεκτό + μη έγκυρο Total debit @@ -2079,7 +2083,7 @@ Transaction fee - Τέλος συναλλαγής + Κόστος συναλλαγής Net amount @@ -2141,7 +2145,7 @@ TransactionTableModel Date - Ημερομηνία + Ημερομήνια Type @@ -2149,7 +2153,7 @@ Label - Επιγραφή + Ετικέτα Open until %1 @@ -2197,7 +2201,7 @@ watch-only - Επίβλεψη μόνο: + παρακολούθηση-μόνο (n/a) @@ -2288,7 +2292,7 @@ Copy label - Αντιγραφή επιγραφής + Αντιγραφή ετικέτας Copy amount @@ -2296,11 +2300,15 @@ Copy transaction ID - Αντιγραφη του ID Συναλλαγής + Αντιγραφή ταυτότητας συναλλαγής + + + Copy raw transaction + Αντιγραφή ανεπεξέργαστης συναλλαγής Edit label - Επεξεργασία επιγραφής + Επεξεργασία ετικέτας Show transaction details @@ -2324,7 +2332,7 @@ Date - Ημερομηνία + Ημερομήνια Type @@ -2332,7 +2340,7 @@ Label - Επιγραφή + Ετικέτα Address @@ -2340,7 +2348,7 @@ Exporting Failed - Η Εξαγωγή Απέτυχε + Αποτυχία Εξαγωγής There was an error trying to save the transaction history to %1. diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_en.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_en.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_en.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_en.ts 2017-06-18 17:25:52.000000000 +0000 @@ -286,7 +286,7 @@ BanTableModel - + IP/Netmask @@ -304,12 +304,12 @@ Sign &message... - + Synchronizing with network... Synchronizing with network... - + &Overview &Overview @@ -429,7 +429,7 @@ - + Click to disable network activity. @@ -454,7 +454,7 @@ Reindexing blocks on disk... - + Send coins to a Bitcoin address Send coins to a Bitcoin address @@ -484,12 +484,12 @@ &Verify message... - + Bitcoin Bitcoin - + Wallet Wallet @@ -574,7 +574,7 @@ - + %n active connection(s) to Bitcoin network %n active connection to Bitcoin network @@ -635,12 +635,12 @@ Up to date - + Show the %1 help message to get a list with possible Bitcoin command-line options - + %1 client @@ -667,7 +667,13 @@ - + + Wallet: %1 + + + + + Type: %1 @@ -715,7 +721,7 @@ Wallet is <b>encrypted</b> and currently <b>locked</b> - + A fatal error occurred. Bitcoin can no longer continue safely and will quit. @@ -2195,7 +2201,7 @@ - + %1 s @@ -2269,7 +2275,17 @@ - + + Software expired + + + + + This software is expired, and may be out of consensus. You must choose to upgrade or override this expiration. + + + + %1 didn't yet exit safely... @@ -2289,7 +2305,7 @@ QObject::QObject - + Error: Specified data directory "%1" does not exist. @@ -2974,7 +2990,7 @@ SendCoinsDialog - + Send Coins Send Coins @@ -3050,7 +3066,7 @@ - Using the fallbackfee can result in sending a transaction that will take serval hours or days (or never) to confirm. Consider choosing your fee manually or wait until your have validated the complete chain. + Using the fallbackfee can result in sending a transaction that will take several hours or days (or never) to confirm. Consider choosing your fee manually or wait until your have validated the complete chain. @@ -3176,7 +3192,7 @@ S&end - + Copy quantity @@ -3211,7 +3227,7 @@ - + @@ -4282,7 +4298,7 @@ WalletModel - + Send Coins Send Coins @@ -4290,7 +4306,7 @@ WalletView - + &Export &Export @@ -4300,7 +4316,7 @@ Export the data in the current tab to a file - + Backup Wallet @@ -4333,7 +4349,7 @@ bitcoin-core - + Options: Options: @@ -4343,17 +4359,17 @@ Specify data directory - + Connect to a node to retrieve peer addresses, and disconnect Connect to a node to retrieve peer addresses, and disconnect - + Specify your own public address Specify your own public address - + Accept command line and JSON-RPC commands Accept command line and JSON-RPC commands @@ -4393,7 +4409,7 @@ - + Error: A fatal internal error occurred, see debug.log for details @@ -4418,7 +4434,7 @@ - + Bitcoin Core Bitcoin Core @@ -4573,7 +4589,12 @@ - + + Whitelist peers using the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. + + + + You need to rebuild the database using -reindex-chainstate to change -txindex @@ -4669,6 +4690,11 @@ + Enable BIP148/UASF (default: %d) + + + + Enable publish hash block in <address> @@ -4963,7 +4989,7 @@ - + Allow JSON-RPC connections from specified source. Valid for <ip> are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This option can be specified multiple times @@ -5068,7 +5094,7 @@ - + Error reading from database, shutting down. @@ -5228,7 +5254,7 @@ Password for JSON-RPC connections - + Execute command when the best block changes (%s in cmd is replaced by block hash) Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -5238,12 +5264,12 @@ Allow DNS lookups for -addnode, -seednode and -connect - + Loading addresses... Loading addresses... - + (1 = keep tx meta data e.g. account owner and payment request information, 2 = drop tx meta data) @@ -5353,12 +5379,7 @@ - - Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. - - - - + %s is set very high! @@ -5373,7 +5394,7 @@ - + How many blocks to check at startup (default: %u, 0 = all) @@ -5533,17 +5554,17 @@ Loading block index... - + Add a node to connect to and attempt to keep the connection open Add a node to connect to and attempt to keep the connection open - + Loading wallet... Loading wallet... - + Cannot downgrade wallet Cannot downgrade wallet @@ -5553,17 +5574,17 @@ Cannot write default address - + Rescanning... Rescanning... - + Done loading Done loading - + Error Error diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_es_ES.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_es_ES.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_es_ES.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_es_ES.ts 2017-06-18 17:25:52.000000000 +0000 @@ -490,6 +490,10 @@ %1 cliente + Connecting to peers... + Conectando a pares... + + Catching up... Actualizando... @@ -1850,7 +1854,7 @@ Copy URI - Copiar URI + Copiar URL Copy label @@ -3812,4 +3816,4 @@ Error - \ No newline at end of file + diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_es.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_es.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_es.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_es.ts 2017-06-18 17:25:52.000000000 +0000 @@ -3226,6 +3226,10 @@ Advertencia: ¡No parecemos estar del todo con nuestros pares! Puede que necesite actualizarse, o puede que otros nodos necesiten actualizarse. + Whitelist peers using the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. + Los pares de listas blancas que se conectan desde la dirección IP dada (por ejemplo, 1.2.3.4) o la red marcada CIDR (por ejemplo, 1.2.3.0/24). Se puede especificar varias veces. + + You need to rebuild the database using -reindex-chainstate to change -txindex Necesita reconstruir la base de datos usando -reindex-chainstate para cambiar -txindex @@ -3809,10 +3813,6 @@ Aviso: fichero de monedero corrupto, datos recuperados! Original %s guardado como %s en %s; si su balance de transacciones es incorrecto, debe restaurar desde una copia de seguridad. - Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. - Los pares de listas blancas que se conectan desde la dirección IP dada (por ejemplo, 1.2.3.4) o la red marcada CIDR (por ejemplo, 1.2.3.0/24). Se puede especificar varias veces. - - %s is set very high! ¡%s se establece muy alto! diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_fa.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_fa.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_fa.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_fa.ts 2017-06-18 17:25:52.000000000 +0000 @@ -63,7 +63,7 @@ These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - این‌ها نشانی‌های بیت‌کوین شما برای ارسال وجود هستند. همیشه قبل از ارسال سکه‌ها، نشانی دریافت‌کننده و مقدار ارسالی را بررسی کنید. + اینها آدرس های شما برای فرستادن پرداخت هاست. همیشه قبل از فرستادن سکه ها مقدار و آدرس دریافت کننده را چک کنید. These are your Bitcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -71,7 +71,7 @@ &Copy Address - &کپی نشانی + کپی کردن آدرس Copy &Label @@ -83,7 +83,7 @@ Export Address List - استخراج لیست آدرس + صدور لیست آدرس ها Comma separated file (*.csv) @@ -91,7 +91,7 @@ Exporting Failed - استخراج انجام نشد + صدور موفق نبود There was an error trying to save the address list to %1. Please try again. @@ -141,7 +141,7 @@ This operation needs your wallet passphrase to unlock the wallet. - انجام این عملیات نیازمند گذرواژهٔ کیف پول شما برای باز کردن قفل آن است. + این عملیات نیاز به عبارت کیف پول شما برای بازگشایی کیف پول دارد Unlock wallet @@ -149,7 +149,7 @@ This operation needs your wallet passphrase to decrypt the wallet. - انجام این عملیات نیازمند گذرواژهٔ کیف پول شما برای رمزگشایی کردن آن است. + این عملیات نیاز به عبارت کیف پول شما برای رمزگشایی کیف پول دارد. Decrypt wallet @@ -161,7 +161,7 @@ Enter the old passphrase and new passphrase to the wallet. - رمز عبور قدیمی و رمز عبور جدید کیف پول خود را وارد گنید. + عبارت کهنه و جدید کیف پول را وارد کنید. Confirm wallet encryption @@ -318,6 +318,18 @@ کیف پول: + Click to disable network activity. + برای غیر فعال کردن فعالیت شبکه کلیک کنید. + + + Network activity disabled. + فعالیت شبکه غیر فعال شد. + + + Click to enable network activity again. + برای فعال کردن دوباره فعالیت شبکه کلیک کنید. + + Reindexing blocks on disk... بازنشانی بلوک‌ها روی دیسک... @@ -607,6 +619,14 @@ رونوشت کارمزد + Copy bytes + کپی کردن بایت ها + + + Copy change + کپی کردن تغییر + + (%1 locked) (%1 قفل شده) @@ -796,6 +816,22 @@ زمان آخرین بلوک + Progress + پیشروی + + + Progress increase per hour + پیشروی در هر ساعت بیشتر میشود + + + calculating... + در حال محاسبه... + + + Estimated time left until synced + زمان تخمینی تا سینک شدن + + Hide پنهان کردن @@ -1058,7 +1094,7 @@ Invalid payment request. - درخواست پرداخت نامعتبر + درخواست پرداخت نامعتبر. @@ -1266,6 +1302,10 @@ در: + Out: + خروجی: + + Debug log file فایلِ لاگِ اشکال زدایی @@ -1274,6 +1314,26 @@ پاکسازی کنسول + 1 &hour + 1 ساعت + + + 1 &day + 1 روز + + + 1 &week + 1 هفته + + + 1 &year + 1 سال + + + Ban for + محدود شده برای + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. دکمه‌های بالا و پایین برای پیمایش تاریخچه و <b>Ctrl-L</b> برای پاک کردن صفحه. @@ -1282,6 +1342,10 @@ برای نمایش یک مرور کلی از دستورات ممکن، عبارت <b>help</b> را بنویسید. + Network activity disabled + فعالیت شبکه غیر فعال شد + + %1 B %1 بایت @@ -1542,6 +1606,14 @@ رونوشت کارمزد + Copy bytes + کپی کردن بایت ها + + + Copy change + کپی کردن تغییر + + Are you sure you want to send? آیا مطمئن هستید که می خواهید ارسال کنید؟ @@ -2125,7 +2197,7 @@ Exporting Failed - استخراج انجام نشد + صدور موفق نبود Exporting Successful diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_fr.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_fr.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_fr.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_fr.ts 2017-06-18 17:25:52.000000000 +0000 @@ -3214,6 +3214,10 @@ Avertissement : nous ne semblons pas être en accord complet avec nos pairs ! Une mise à niveau pourrait être nécessaire pour vous ou pour d'autres nœuds du réseau. + Whitelist peers using the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. + Pairs de la liste blanche se connectant à partir de l'adresse IP donnée (p. ex. 1.2.3.4) ou du réseau noté CIDR (p. ex. 1.2.3.0/24). Peut être spécifié plusieurs fois. + + You need to rebuild the database using -reindex-chainstate to change -txindex Vous devez reconstruire la base de données avec -reindex-chainstate pour changer -txindex @@ -3794,10 +3798,6 @@ Avertissement : le fichier du porte-monnaie est corrompu, les données ont été récupérées ! Le fichier %s original a été enregistré en tant que %s dans %s ; si votre solde ou vos transactions sont incorrects, vous devriez restaurer une sauvegarde. - Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. - Pairs de la liste blanche se connectant à partir de l'adresse IP donnée (p. ex. 1.2.3.4) ou du réseau noté CIDR (p. ex. 1.2.3.0/24). Peut être spécifié plusieurs fois. - - %s is set very high! La valeur %s est très élevée ! diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_id_ID.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_id_ID.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_id_ID.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_id_ID.ts 2017-06-18 17:25:52.000000000 +0000 @@ -43,31 +43,31 @@ Choose the address to send coins to - Pilihlah alamat kemana koin Anda akan dikirim + Pilih alamat untuk mengirim koin Choose the address to receive coins with - Pilihlah alamat dimana Anda akan menerima koin + Piih alamat untuk menerima koin C&hoose - P&ilihlah + &Pilih Sending addresses - Alamat pengirim + Alamat-alamat pengirim Receiving addresses - Alamat penerima + Alamat-alamat penerima These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Alamat-alamat Anda untuk mengirim pembayaran. Periksalah jumlah dan alamat penerima setiap kali Anda mengirim Bitcoin. + Ini adalah alamat- alamat Bitcoin Anda untuk mengirimkan pembayaran. Selalu periksa jumlah dan alamat penerima sebelum mengirimkan koin. These are your Bitcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Alamat-alamat Anda untuk menerima pembayaran. Dianjurkan agar Anda menggunakan alamat yang baru untuk setiap transaksi. + Ini adalah alamat- alamat Bitcoin Anda untuk menerima pembayaran. Dianjurkan untuk menggunakan alamat penerima yang baru setiap melakukan transaksi. &Copy Address @@ -75,7 +75,7 @@ Copy &Label - Salin &Label + Salin& Label &Edit @@ -87,11 +87,11 @@ Comma separated file (*.csv) - Berkas CSV (*.csv) + File yang berformat(*.csv) Exporting Failed - Proses Ekspor Gagal + Mengekspor Gagal There was an error trying to save the address list to %1. Please try again. @@ -102,7 +102,7 @@ AddressTableModel Label - Label + Label Address @@ -133,7 +133,7 @@ Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. - Masukkan kata kunci untuk dompet Anda.<br/>Mohon gunakan kata kunci <b>yang terdiri dari 10 karakter acak</b>, atau <b>delapan atau beberapa kata lagi</b>. + Masukan kata sandi baru ke dompet.<br/>Mohon gunakan kata sandi <b>sepuluh karakter acak atau lebih</b>, atau <b> delapan atau lebih beberapa kata </​​b>. Encrypt wallet @@ -141,7 +141,7 @@ This operation needs your wallet passphrase to unlock the wallet. - Operasi ini memerlukan kata kunci dompet Anda untuk membuka dompet. + Operasi ini memerlukan kata sandi dompet Anda untuk membuka dompet. Unlock wallet @@ -149,7 +149,7 @@ This operation needs your wallet passphrase to decrypt the wallet. - Operasi ini memerlukan kata kunci dompet Anda untuk mendekripsi dompet. + Operasi ini memerlukan kata sandi dompet Anda untuk mendekripsikan dompet. Decrypt wallet @@ -157,23 +157,23 @@ Change passphrase - Ubah kata kunci + Ganti kata sandi Enter the old passphrase and new passphrase to the wallet. - Masukkan kata kunci lama dan kata kunci baru dompet Anda. + Masukkan kata sandi lama dan kata sandi baru ke dompet. Confirm wallet encryption - Konfirmasi enkripsi dompet + Konfirmasi pengenkripsian dompet Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! - Perhatian: Jika anda mengenkripsi dompet anda dan lupa kata kuncinya, anda akan <b>KEHILANGAN SELURUH BITCOIN ANDA</b>! + Peringatan: Jika Anda enkripsi dompet Anda dan lupa kata sandi anda, Anda akan <b>KEHILANGAN SEMUA BITCOIN ANDA</b>! Are you sure you wish to encrypt your wallet? - Apakah Anda yakin ingin mengenkripsi dompet Anda? + Apakah Anda yakin ingin enkripsi dompet Anda? Wallet encrypted @@ -181,31 +181,31 @@ %1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. - %1 akan ditutup untuk menyelesaikan proses enkripsi. Mohon diingat bahwa mengenkripsi dompet Anda tidak akan sepenuhnya melindungi bitcoin Anda dari virus atau malware yang menginfeksi komputer Anda. + %1 sekarang akan ditutup untuk menyelesaikan proses enkripsi. Ingatlah bahwa mengenkripsi dompet Anda tidak dapat sepenuhnya melindungi komputer Anda dari pencurian malware yang menginfeksi komputer Anda. 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. - PENTING: Setiap back up yang sudah Anda buat sebaiknya diganti dengan data dompet Anda yang baru dan terenkripsi. Untuk alasan keamanan, data back up tidak terenkripsi yang sudah Anda buat sebelumnya tidak akan dapat digunakan setelah Anda mulai menggunakan dompet yang baru dan terenkripsi. + PENTING: Backup sebelumnya yang Anda buat dari file dompet Anda harus diganti dengan file dompet terenkripsi yang baru dibuat. Demi keamanan, backup file dompet sebelumnya yang tidak dienkripsi sebelumnya akan menjadi tidak berguna begitu Anda mulai menggunakan dompet terenkripsi yang baru. Wallet encryption failed - Enkripsi dompet gagal + Pengenkripsian dompet gagal Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Enkripsi dompet gagal karena kesalahan internal. Dompet Anda tidak dienkripsi. + Pengenkripsian dompet gagal karena kesalahan internal. Dompet Anda tidak dienkripsi. The supplied passphrases do not match. - Kata kunci yang dimasukkan tidak cocok. + Kata sandi yang dimasukkan tidak cocok. Wallet unlock failed - Gagal buka dompet + Membuka dompet gagal The passphrase entered for the wallet decryption was incorrect. - Kata kunci yang dimasukkan untuk dekripsi dompet tidak cocok. + Kata sandi yang dimasukkan untuk dekripsi dompet salah. Wallet decryption failed @@ -213,11 +213,11 @@ Wallet passphrase was successfully changed. - Kata kunci dompet Anda berhasil diubah. + Kata sandi berhasil diganti. Warning: The Caps Lock key is on! - Perhatian: tombol Caps Lock sementara aktif! + Peringatan: Tombol Caps Lock aktif! @@ -270,8 +270,12 @@ Keluar dari aplikasi + &About %1 + &Tentang%1 + + Show information about %1 - Tampilkan informasi tentang %1 + Tampilkan informasi perihal %1 About &Qt @@ -286,6 +290,10 @@ &Pilihan... + Modify configuration options for %1 + Pengubahan opsi konfigurasi untuk %1 + + &Encrypt Wallet... &Enkripsi Dompet... @@ -314,6 +322,22 @@ Dompet: + Click to disable network activity. + Klik untuk menonaktifkan aktivitas jaringan. + + + Network activity disabled. + Aktivitas jaringan dinonaktifkan. + + + Click to enable network activity again. + Klik untuk mengaktifkan aktivitas jaringan lagi. + + + Syncing Headers (%1%)... + Menyinkronkan Header (%1%) ... + + Reindexing blocks on disk... Mengindex ulang blok di dalam disk... @@ -417,6 +441,14 @@ %n active connection(s) to Bitcoin network %n koneksi aktif ke jaringan Bitcoin + + Indexing blocks on disk... + Pengindeksan blok pada disk ... + + + Processing blocks on disk... + Memproses blok pada disk ... + Processed %n block(s) of transaction history. %n blok dari riwayat transaksi diproses. @@ -451,7 +483,15 @@ Show the %1 help message to get a list with possible Bitcoin command-line options - Tampilkan pesan bantuan %1 untuk mendapatkan daftar pilihan Command-line + Tampilkan %1 pesan bantuan untuk mendapatkan daftar opsi baris perintah Bitcoin yang memungkinkan + + + %1 client + %1 klien + + + Connecting to peers... + Menghubungkan ke peer... Catching up... @@ -503,7 +543,11 @@ Wallet is <b>encrypted</b> and currently <b>locked</b> Dompet saat ini <b>terenkripsi</b> dan <b>terkunci</b> - + + A fatal error occurred. Bitcoin can no longer continue safely and will quit. + Terjadi Kesalahan Fatal. Bitcoin Tidak Dapat Melanjutkan Dengan Aman Dan Akan Keluar + + CoinControlDialog @@ -584,23 +628,23 @@ Copy amount - Salin jumlah + Salin Jumlah Copy transaction ID - Salin ID transaksi + Salain ID Transaksi Lock unspent - Kunci unspent. + Kunci Yang Tidak Digunakan Unlock unspent - Buka unspent + Buka Kunci Yang Tidak Digunakan Copy quantity - Salin kuantitas + Salin Kuantitas Copy fee @@ -608,7 +652,7 @@ Copy after fee - Salin dengan biaya + Salin Setelah Upah Copy bytes @@ -616,11 +660,11 @@ Copy dust - Salin dust + Salin jumlah yang lebih kecil Copy change - Salin kembalian + Salin Perubahan (%1 locked) @@ -628,11 +672,11 @@ yes - ya + Ya no - tidak + Tidak Can vary +/- %1 satoshi(s) per input. @@ -743,6 +787,10 @@ (%1-bit) + About %1 + Tentang%1 + + Command-line options Pilihan Command-line @@ -1395,6 +1443,10 @@ Ketik <b>help</b> untuk menampilkan perintah tersedia. + Network activity disabled + Aktivitas jaringan dinonaktifkan + + %1 B %1 B @@ -1499,7 +1551,7 @@ Copy amount - Salin nilai + Salin Jumlah @@ -1542,7 +1594,7 @@ Label - Label + Label Message @@ -1565,7 +1617,7 @@ Label - Label + Label Message @@ -1688,11 +1740,11 @@ Copy quantity - Salin kuantitas + Salin Kuantitas Copy amount - Salin nilai + Salin Jumlah Copy fee @@ -1700,7 +1752,7 @@ Copy after fee - Salin dengan biaya + Salin Setelah Upah Copy bytes @@ -1712,7 +1764,7 @@ Copy change - Salin uang kembali + Salin Perubahan %1 to %2 @@ -2119,7 +2171,7 @@ Label - Label + Label Open for %n more block(s) @@ -2274,11 +2326,11 @@ Copy amount - Salin Nilai + Salin Jumlah Copy transaction ID - Menyalinkan ID transaksi + Salain ID Transaksi Edit label @@ -2294,7 +2346,7 @@ Comma separated file (*.csv) - Berkas CSV (*.csv) + Berkas yang berformat(*.csv) Confirmed @@ -2310,7 +2362,7 @@ Label - Label + Label Address @@ -2318,7 +2370,7 @@ Exporting Failed - Proses Ekspor Gagal + Mengekspor Gagal Exporting Successful diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_it.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_it.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_it.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_it.ts 2017-06-18 17:25:52.000000000 +0000 @@ -3,7 +3,7 @@ AddressBookPage Right-click to edit address or label - Fare clic con il tasto destro del mouse per modificare l'indirizzo o l'etichettadefault + Fare clic con il tasto destro del mouse per modificare l'indirizzo o l'etichetta Create a new address @@ -193,11 +193,11 @@ Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Cifratura del portamonete fallita a causa di un errore interno. Il portamonete non è stato cifrato. + Crittaggio fallito a causa di un errore interno. Il portamonete non è stato crittato. The supplied passphrases do not match. - Le passphrase inserite non corrispondono. + Le frasi di accesso non corrispondono. Wallet unlock failed @@ -209,15 +209,15 @@ Wallet decryption failed - Decifrazione del portamonete fallita + Decrittazione del portamonete fallita. Wallet passphrase was successfully changed. - Passphrase del portamonete modificata con successo. + La frase di accesso al portamonete è stata cambiata con successo. Warning: The Caps Lock key is on! - Attenzione: il tasto Blocco maiuscole è attivo! + Attenzione: è attivo il tasto blocco maiuscole ! @@ -655,6 +655,10 @@ no + This label turns red if any recipient receives an amount smaller than the current dust threshold. + Questa etichetta diventerà rossa se uno qualsiasi dei destinatari riceverà un importo inferiore alla corrente soglia minima per la movimentazione della valuta. + + Can vary +/- %1 satoshi(s) per input. Può variare di +/- %1 satoshi per input. @@ -664,7 +668,7 @@ change from %1 (%2) - resto da %1 (%2) + cambio da %1 (%2) (change) @@ -711,11 +715,11 @@ The entered address "%1" is not a valid Bitcoin address. - L'indirizzo "%1" non è un indirizzo bitcoin valido. + L'indirizzo inserito "%1" non è un indirizzo bitcoin valido. The entered address "%1" is already in the address book. - L'indirizzo "%1" è già presente in rubrica. + L'indirizzo inserito "%1" è già in rubrica. Could not unlock wallet. @@ -872,6 +876,10 @@ Modulo + Number of blocks left + Numero di blocchi mancanti + + Unknown... Sconosciuto... @@ -880,6 +888,10 @@ Ora del blocco più recente + Progress + Progresso + + Hide Nascondi @@ -1263,7 +1275,7 @@ URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters. - Impossibile interpretare l'URI! I parametri URI o l'indirizzo Bitcoin potrebbero non essere corretti. + Impossibile interpretare l'URI! I parametri dell'URI o l'indirizzo Bitcoin potrebbero non essere corretti. Payment request file handling @@ -1271,7 +1283,7 @@ Payment request file cannot be read! This can be caused by an invalid payment request file. - Impossibile leggere il file della richiesta di pagamento! Il file della richiesta di pagamento potrebbe non essere valido. + Impossibile leggere il file della richiesta di pagamento! Il file della richiesta di pagamento potrebbe non essere valido Payment request rejected @@ -1307,7 +1319,7 @@ Payment request %1 is too large (%2 bytes, allowed %3 bytes). - La richiesta di pagamento %1 (%2 byte) supera la dimensione massima di %3 byte. + La richiesta di pagamento %1 è troppo grande (%2 bytes, consentiti %3 bytes) Error communicating with %1: %2 @@ -1315,7 +1327,7 @@ Payment request cannot be parsed! - La richiesta di pagamento non può essere analizzata! + La richiesta di pagamento non può essere processata! Bad response from server %1 @@ -1433,11 +1445,11 @@ QRImageWidget &Save Image... - &Salva Immagine... + &Salva immagine &Copy Image - &Copia Immagine + &Copia immagine Save QR Code @@ -1671,6 +1683,10 @@ 1 &anno + &Disconnect + &Disconnetti + + Welcome to the %1 RPC console. Benvenuto nella console RPC di %1. @@ -1842,7 +1858,7 @@ Payment information - Informazioni pagamento + Informazioni di pagamento URI @@ -2084,7 +2100,7 @@ added as transaction fee - aggiunto come tassa di transazione + Includi il costo della transazione Total Amount %1 @@ -2108,7 +2124,7 @@ The amount exceeds your balance. - L'importo è superiore al tuo saldo attuale. + Non hai abbastanza fondi The total exceeds your balance when the %1 transaction fee is included. @@ -2120,7 +2136,11 @@ Transaction creation failed! - Creazione transazione fallita! + Creazione della transazione fallita! + + + The transaction was rejected with the following reason: %1 + La transazione è stata respinta per il seguente motivo: %1 A fee higher than %1 is considered an absurdly high fee. @@ -2424,8 +2444,16 @@ %1/offline + 0/unconfirmed, %1 + 0/non confermati, %1 + + + abandoned + abbandonato + + %1/unconfirmed - %1/non confermata + %1/non confermato %1 confirmations diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_ja.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_ja.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_ja.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_ja.ts 2017-06-18 17:25:52.000000000 +0000 @@ -3223,6 +3223,10 @@ 警告: ピアと完全に合意が取れていないようです!このノードまたは他のノードのアップグレードが必要なようです。 + Whitelist peers using the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. + ホワイトリストとして登録するピアノ、接続元の IP アドレス (例: 1.2.3.4) または CIDR 表現のネットワーク (例: 1.2.3.0/24)。複数回指定することもできる + + You need to rebuild the database using -reindex-chainstate to change -txindex -txindex を変更するには -reindex-chainstate を使用してデータベースを再構築する必要があります @@ -3804,10 +3808,6 @@ 警告: ウォレットファイルが破損していましたのでデータを復旧しました!元の %s は %s として %s に保存されました; 残高やトランザクションが正しくない場合にはバックアップから復元してください。 - Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. - ホワイトリストとして登録するピアノ、接続元の IP アドレス (例: 1.2.3.4) または CIDR 表現のネットワーク (例: 1.2.3.0/24)。複数回指定することもできる - - %s is set very high! %s の設定値は高すぎます diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_ko_KR.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_ko_KR.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_ko_KR.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_ko_KR.ts 2017-06-18 17:25:52.000000000 +0000 @@ -322,6 +322,22 @@ 지갑: + Click to disable network activity. + 네트워크 활동을 중지하려면 클릭. + + + Network activity disabled. + 네트워크 활동이 정지됨. + + + Click to enable network activity again. + 네트워크 활동을 다시 시작하려면 클릭. + + + Syncing Headers (%1%)... + 헤더 동기화중 (%1%)... + + Reindexing blocks on disk... 디스크에서 블록 다시 색인중... @@ -435,7 +451,7 @@ Processed %n block(s) of transaction history. - %n 블럭 만큼의 거래 기록이 처리됨. + %n 블록 만큼의 거래 기록이 처리됨. %1 behind @@ -474,6 +490,10 @@ %1 클라이언트 + Connecting to peers... + 피어에 연결중... + + Catching up... 블록 따라잡기... @@ -516,14 +536,26 @@ 들어오고 있는 거래 + HD key generation is <b>enabled</b> + HD 키 생성이 <b>활성화되었습니다</b> + + + HD key generation is <b>disabled</b> + HD 키 생성이 <b>비활성화되었습니다</b> + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> - 지갑이 암호화 되었고 현재 차단해제 되었습니다 + 지갑이 <b>암호화</b> 되었고 현재 <b>잠금해제</b> 되었습니다 Wallet is <b>encrypted</b> and currently <b>locked</b> - 지갑이 암호화 되었고 현재 잠겨져 있습니다 + 지갑이 <b>암호화</b> 되었고 현재 <b>잠겨져</b> 있습니다 - + + A fatal error occurred. Bitcoin can no longer continue safely and will quit. + 치명적인 오류가 발생했습니다. 비트코인을 더이상 안전하게 진행할 수 없어 곧 종료합니다. + + CoinControlDialog @@ -556,7 +588,7 @@ Change: - 체인지: + 잔돈: (un)select all @@ -655,6 +687,10 @@ 아니요 + This label turns red if any recipient receives an amount smaller than the current dust threshold. + 수령인이 현재 더스트 임계값보다 작은 양을 수신하면 이 라벨이 빨간색으로 변합니다. + + Can vary +/- %1 satoshi(s) per input. 입력마다 +/- %1 사토시(s)가 변할 수 있습니다. @@ -872,18 +908,50 @@ 유형 + Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. + 최근 거래는 아직 보이지 않을 것입니다, 그러므로 당신의 지갑의 잔액이 틀릴 수도 있습니다. 이 정보는 비트코인 네트워크와 완전한 동기화가 완료되면 아래의 설명과 같이 정확해집니다. + + + Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. + 아직 표시되지 않은 거래의 영향을 받는 비트코인을 사용하려고 하는 것은 네트워크에서 허가되지 않습니다. + + + Number of blocks left + 남은 블록의 수 + + Unknown... - 알수없음... + 알수없음... Last block time - 최종 블럭 시각 + 최종 블록 시각 + + + Progress + 진행 + + + Progress increase per hour + 시간당 진행 증가율 + + + calculating... + 계산중... + + + Estimated time left until synced + 동기화 완료까지 예상 시간 Hide 숨기기 - + + Unknown. Syncing Headers (%1)... + 알수없음. 헤더 동기화중 (%1)... + + NetWatchLogModel @@ -968,7 +1036,7 @@ Third party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |. - 서드-파티 URLs (예. 블록 탐색기)는 거래 탭의 컨텍스트 메뉴에 나타납니다. URL의 %s는 트랜잭션 해시값으로 대체됩니다. 여러 URLs는 수직 바 | 에서 나누어 집니다. + 서드-파티 URLs (예. 블록 탐색기)는 거래 탭의 컨텍스트 메뉴에 나타납니다. URL의 %s는 거래 해시값으로 대체됩니다. 여러 URLs는 수직 바 | 에서 나누어 집니다. Third party transaction URLs @@ -1008,7 +1076,7 @@ If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. - 검증되지 않은 잔돈 쓰기를 비활성화하면 트랜잭션이 적어도 1회 이상 검증되기 전까지 그 트랜잭션의 거스름돈은 사용할 수 없습니다. 이는 잔액 계산 방법에도 영향을 미칩니다. + 검증되지 않은 잔돈 쓰기를 비활성화하면 거래가 적어도 1회 이상 검증되기 전까지 그 거래의 거스름돈은 사용할 수 없습니다. 이는 잔액 계산 방법에도 영향을 미칩니다. &Spend unconfirmed change @@ -1175,7 +1243,7 @@ Watch-only: - 모니터링 지갑: + 조회전용: Available: @@ -1215,7 +1283,7 @@ Your current balance in watch-only addresses - 모니터링 지갑의 현재 잔액 + 조회전용 주소의 현재 잔액 Spendable: @@ -1227,15 +1295,15 @@ Unconfirmed transactions to watch-only addresses - 모니터링 지갑의 검증되지 않은 트랜잭션 + 조회전용 주소의 검증되지 않은 거래 Mined balance in watch-only addresses that has not yet matured - 모니터링 지갑의 채굴된 잔액 중 숙성되지 않은 것 + 조회전용 주소의 채굴된 잔액 중 숙성되지 않은 것 Current total balance in watch-only addresses - 모니터링 지갑의 현재 잔액 + 조회전용 주소의 현재 잔액 @@ -1246,7 +1314,7 @@ Cannot start bitcoin: click-to-pay handler - 비트코인을 시작할 수 없습니다: 지급제어기를 클릭하시오 + 비트코인을 시작할 수 없습니다: 지급제어기를 클릭하세요 URI handling @@ -1254,7 +1322,7 @@ Payment request fetch URL is invalid: %1 - 대금 청구서의 URL이 올바르지 않습니다: %1 + 지불 요청의 URL이 올바르지 않습니다: %1 Invalid payment address %1 @@ -1290,7 +1358,7 @@ Unverified payment requests to custom payment scripts are unsupported. - 임의로 변경한 결제 스크립트 기반의 대금 청구서 양식은 검증되기 전까지는 지원되지 않습니다. + 임의로 변경한 결제 스크립트 기반의 지불 요청 양식은 검증되기 전까지는 지원되지 않습니다. Invalid payment request. @@ -1310,19 +1378,19 @@ Error communicating with %1: %2 - %1과 소통하는데 오류: %2 + %1과 소통하는데 에러: %2 Payment request cannot be parsed! - 지불요청을 처리할 수 없습니다. + 지불요청을 파싱할 수 없습니다. Bad response from server %1 - 서버로 부터 반응이 없습니다 %1 + 서버로 부터 잘못된 반응 %1 Network request error - 네트워크 요청 오류 + 네트워크 요청 에러 Payment acknowledged @@ -1339,7 +1407,15 @@ Node/Service 노드/서비스 - + + NodeId + 노드 ID + + + Ping + + + QObject @@ -1379,16 +1455,24 @@ %1 ms + %n second(s) + %n 초 + + + %n minute(s) + %n 분 + + %n hour(s) - %n시간 + %n 시간 %n day(s) - %n일 + %n 일 %n week(s) - %n주 + %n 주 %1 and %2 @@ -1396,7 +1480,11 @@ %n year(s) - %n년 + %n 년 + + + %1 didn't yet exit safely... + %1가 아직 안전하게 종료되지 않았습니다... Blk @@ -1411,7 +1499,19 @@ QObject::QObject - + + Error: Specified data directory "%1" does not exist. + 에러: 지정한 데이터 폴더 "%1"은 존재하지 않습니다. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + 에러: 설정파일을 파싱할수 없습니다: %1. key=value syntax만 사용가능합니다. + + + Error: %1 + 에러: %1 + + QRImageWidget @@ -1428,7 +1528,7 @@ PNG Image (*.png) - PNG 이미지 (*.png) + PNG 이미지(*.png) @@ -1479,11 +1579,11 @@ Block chain - 블럭 체인 + 블록 체인 Current number of blocks - 현재 블럭 수 + 현재 블록 수 Memory Pool @@ -1491,7 +1591,7 @@ Current number of transactions - 현재 트랜잭션 수 + 현재 거래 수 Memory usage @@ -1594,12 +1694,16 @@ Ping 대기 + Min Ping + 최소 핑 + + Time Offset 시간 오프셋 Last block time - 최종 블럭 시각 + 최종 블록 시각 &Open @@ -1654,6 +1758,18 @@ 1년(&Y) + &Disconnect + 접속 끊기(&D) + + + Ban for + 추방 + + + &Unban + 노드 추방 취소(&U) + + Welcome to the %1 RPC console. %1 RPC 콘솔에 오신걸 환영합니다 @@ -1666,6 +1782,14 @@ 사용할 수 있는 명령을 둘러보려면 <b>help</b>를 입력하십시오. + WARNING: Scammers have been active, telling users to type commands here, stealing their wallet contents. Do not use this console without fully understanding the ramification of a command. + 경고 : 사기꾼이 사용자에게 여기에 명령을 입력하게 하여 지갑 내용을 훔칠수 있다는 사실을 알려드립니다. 명령어를 완전히 이해하지 못한다면 콘솔을 사용하지 마십시오. + + + Network activity disabled + 네트워크 활동이 정지됨. + + %1 B %1 바이트 @@ -1786,7 +1910,7 @@ Copy URI - URI 복사 + URI 복사 Copy label @@ -1829,7 +1953,7 @@ URI - URI + URI Address @@ -1853,7 +1977,7 @@ Error encoding URI into QR Code. - QR코드 인코딩 오류 + URI를 QR 코드로 인코딩하는 중 오류가 발생했습니다. @@ -1878,7 +2002,15 @@ (no message) (메세지가 없습니다) - + + (no amount requested) + (요청한 거래액 없음) + + + Requested + 요청됨 + + SendCoinsDialog @@ -1923,7 +2055,7 @@ Change: - 체인지: + 잔돈: If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. @@ -1951,7 +2083,7 @@ If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "total at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte. - 사용자 정의 수수료가 1000사토시로 지정된 경우 트랜잭션의 크기가 250바이트 일 경우 1킬로바이트당 250사토시만 지불되지만 "최소 수수료"에선 1000사토시가 지불됩니다. 1킬로바이트가 넘는 트랜잭션인 경우 어떠한 경우에든 1킬로바이트 기준으로 지불됩니다. + 사용자 정의 수수료가 1000사토시로 지정된 경우 거래의 크기가 250바이트 일 경우 1킬로바이트당 250사토시만 지불되지만 "최소 수수료"에선 1000사토시가 지불됩니다. 1킬로바이트가 넘는 거래인 경우 어떠한 경우에든 1킬로바이트 기준으로 지불됩니다. Hide @@ -1963,11 +2095,11 @@ Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for bitcoin transactions than the network can process. - 블록의 용량보다 트랜잭션의 용량이 작은 경우에는 최소한의 수수료만으로도 충분합니다. 그러나 비트코인 네트워크의 처리량보다 더 많은 트랜잭션 요구는 영원히 검증이 안 될 수도 있습니다. + 블록의 용량보다 거래의 용량이 작은 경우에는 최소한의 수수료만으로도 충분합니다. 그러나 비트코인 네트워크의 처리량보다 더 많은 거래 요구는 영원히 검증이 안 될 수도 있습니다. (read the tooltip) - (툴팁을 읽어보세요) + (툴팁을 꼭 읽어보세요) Recommended: @@ -1979,7 +2111,7 @@ (Smart fee not initialized yet. This usually takes a few blocks...) - (Smart fee가 아직 초기화되지 않았습니다. 블록 분석이 완료될 때 까지 기다려주십시오...) + (Smart fee가 아직 초기화 되지 않았습니다. 블록 분석이 완전하게 끝날 때 까지 기다려주십시오...) normal @@ -2006,6 +2138,10 @@ 더스트: + Confirmation time target: + 승인 시간 목표: + + Clear &All 모두 지우기(&A) @@ -2091,11 +2227,15 @@ Duplicate address found: addresses should only be used once each. - 두개 이상의 주소입니다: 한번에 하나의 주소에만 작업할 수 있습니다. + 중복된 주소 발견: 한번에 하나의 주소에만 작업할 수 있습니다. Transaction creation failed! - 거래를 생성하는 것을 실패하였습니다 + 거래를 생성하는 것을 실패하였습니다! + + + The transaction was rejected with the following reason: %1 + 거래가 다음과 같은 이유로 거부되었습니다: %1 A fee higher than %1 is considered an absurdly high fee. @@ -2105,13 +2245,17 @@ Payment request expired. 지불 요청이 만료됨. + + %n block(s) + %n 블록 + Pay only the required fee of %1 오직 %1 만의 수수료를 지불하기 Estimated to begin confirmation within %n block(s). - %n 블록 안에 거래검증이 시작 될것으로 예상합니다. + %n 블록 안에 승인이 시작될 것으로 추정됩니다. Warning: Invalid Bitcoin address @@ -2122,6 +2266,14 @@ 경고: 알려지지 않은 주소변경입니다 + Confirm custom change address + 맞춤 주소 변경 확인 + + + The address you selected for change is not part of this wallet. Any or all funds in your wallet may be sent to this address. Are you sure? + 변경하기 위해 선택한 주소는 이 지갑의 일부가 아닙니다. 지갑에 있는 일부 또는 모든 금액을 이 주소로 보낼 수 있습니다. 확실합니까? + + (no label) (라벨 없음) @@ -2224,7 +2376,7 @@ Do not shut down the computer until this window disappears. - 창이 사라지기 전까지 컴퓨터를 끄지마시오. + 이 창이 사라지기 전까지 컴퓨터를 끄지 마세요. @@ -2384,17 +2536,37 @@ TransactionDesc Open for %n more block(s) - %n 개의 추가 블록을 읽습니다. + %n개의 더 많은 블록 열기 Open until %1 %1 까지 열림 + conflicted with a transaction with %1 confirmations + %1 승인이 있는 거래와 충돌 함 + + %1/offline %1/오프라인 + 0/unconfirmed, %1 + 0/미승인, %1 + + + in memory pool + 메모리 풀 안에 있음 + + + not in memory pool + 메모리 풀 안에 없음 + + + abandoned + 버려진 + + %1/unconfirmed %1/미확인 @@ -2412,7 +2584,7 @@ , broadcast through %n node(s) - %n 노드를 거쳐 전파합니다. + , %n개 노드를 통해 전파 Date @@ -2424,7 +2596,7 @@ Generated - 생성하다 + 생성됨 From @@ -2444,7 +2616,7 @@ watch-only - 모니터링 지갑 + 조회전용 label @@ -2452,19 +2624,19 @@ Credit - 예금 + 입금액 matures in %n more block(s) - %n개 블럭 후에 코인 숙성이 완료됩니다. + %n개의 더 많은 블록을 숙성 not accepted - 허용되지 않는다 + 허용되지 않음 Debit - 차변 + 출금액 Total debit @@ -2476,7 +2648,7 @@ Transaction fee - 송금 수수료 + 거래 수수료 Net amount @@ -2492,7 +2664,15 @@ Transaction ID - 아이디 + 거래 ID + + + Transaction total size + 거래 총 크기 + + + Output index + 출력 인덱스 Merchant @@ -2500,7 +2680,7 @@ 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 @@ -2508,7 +2688,7 @@ Transaction - 송금 + 거래 Inputs @@ -2533,7 +2713,11 @@ This pane shows a detailed description of the transaction 이 창은 거래의 세부내역을 보여줍니다 - + + Details for %1 + %1에 대한 세부 정보 + + TransactionTableModel @@ -2550,7 +2734,7 @@ Open for %n more block(s) - %n 개의 추가 블록을 읽습니다. + %n개의 더 많은 블록 열기 Open until %1 @@ -2565,12 +2749,16 @@ 미확인 + Abandoned + 버려진 + + Confirming (%1 of %2 recommended confirmations) 승인 중 (권장되는 승인 회수 %2 대비 현재 승인 수 %1) Confirmed (%1 confirmations) - 확인됨 (%1 확인됨) + 승인됨 (%1 확인됨) Conflicted @@ -2582,7 +2770,7 @@ This block was not received by any other nodes and will probably not be accepted! - 이 블럭은 다른 노드로부터 받지 않아 허용되지 않을 것임. + 이 블록은 다른 노드로부터 받지 않아 허용되지 않을 것임! Generated but not accepted @@ -2610,7 +2798,7 @@ watch-only - 모니터링 지갑 + 조회전용 (n/a) @@ -2634,11 +2822,11 @@ Whether or not a watch-only address is involved in this transaction. - 이 트랜잭션에 모니터링 지갑를 포함할지의 여부입니다. + 조회전용 주소가 이 거래에 참여하는지 여부입니다. User-defined intent/purpose of the transaction. - 트랜잭션에 대한 사용자 정의 intent/purpose + 거래에 대한 사용자 정의 intent/purpose Amount removed from or added to balance. @@ -2705,7 +2893,7 @@ Abandon transaction - 버려진 트랜잭션 + 버려진 거래 Copy address @@ -2721,11 +2909,11 @@ Copy transaction ID - 트랜잭션 아이디 복사 + 거래 아이디 복사 Copy raw transaction - 로우 트랜잭션 복사 + 원시 거래 복사 Copy full transaction details @@ -2753,7 +2941,7 @@ Watch-only - 모니터링 지갑 + 조회전용 Date @@ -2880,7 +3068,15 @@ Accept connections from outside (default: 1 if no -proxy or -connect/-noconnect) - 외부 접속을 승인합니다 + 외부 접속을 승인합니다 (기본값 : -proxy 또는 -connect / -noconnect가 없는 경우 1) + + + Connect only to the specified node(s); -noconnect or -connect=0 alone to disable automatic connections + 지정된 노드에만 연결; 자동 연결을 사용하지 않으려면 -noconnect 또는 -connect=0 을 단독으로 사용하십시오. + + + Distributed under the MIT software license, see the accompanying file %s or %s + MIT 소프트웨어 라이센스에 따라 배포 됨, 첨부 파일 %s 또는 %s을 참조하십시오. If <category> is not supplied or if <category> = 1, output all debugging information. @@ -2924,7 +3120,7 @@ The %s developers - %s 코어 개발자 + %s 개발자 A fee rate (in %s/kB) that will be used when fee estimation has insufficient data (default: %s) @@ -2932,7 +3128,7 @@ Accept relayed transactions received from whitelisted peers even when not relaying transactions (default: %d) - 트랜잭션의 중계를 하지 않더라도 화이트 리스트에 포함된 피어에서 받은 트랜잭션은 중계하기 (기본값: %d) + 거래의 중계를 하지 않더라도 화이트 리스트에 포함된 피어에서 받은 트랜잭션은 중계하기 (기본값: %d) Bind to given address and always listen on it. Use [host]:port notation for IPv6 @@ -2944,7 +3140,7 @@ Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup - 시작시 모든 지갑 트랜잭션을 삭제하고 -rescan을 통하여 블록체인만 복구합니다. + 시작시 모든 지갑 거래를 삭제하고 -rescan을 통하여 블록체인만 복구합니다. Error loading %s: You can't enable HD on a already existing non-HD wallet @@ -2959,6 +3155,18 @@ 지갑 거래가 바뀌면 명령을 실행합니다.(%s 안의 명령어가 TxID로 바뀝니다) + Extra transactions to keep in memory for compact block reconstructions (default: %u) + 압축 블록 재구성을 위해 메모리에 보관해야하는 추가 거래 (기본값: %u) + + + If this block is in the chain assume that it and its ancestors are valid and potentially skip their script verification (0 to verify all, default: %s, testnet: %s) + 이 블록이 체인에 있으면 해당 블록과 그 조상이 유효하며 잠재적으로 스크립트 확인을 건너 뜁니다 (0은 모두 확인, 기본값: %s, testnet: %s) + + + Maximum allowed median peer time offset adjustment. Local perspective of time may be influenced by peers forward or backward by this amount. (default: %u seconds) + 허용 된 최대 중간 피어 시간 오프셋 조정. 시간에 대한 지역적 전망치는 전방 또는 후방의 피어에 의해 영향을 받을 수 있습니다. (기본값: %u 초) + + Maximum total fees (in %s) to use in a single wallet transaction or raw transaction; setting this too low may abort large transactions (default: %s) 하나의 지갑 트랜잭션에서의 총 수수료(%s)의 최대치; 너무 낮게 설정하면 큰 트랜잭션이 중지 됩니다 (기본값: %s) @@ -2971,6 +3179,10 @@ %s가 유용하다고 생각한다면 프로젝트에 공헌해주세요. 이 소프트웨어에 대한 보다 자세한 정보는 %s를 방문해주십시오. + Set lowest fee rate (in %s/kB) for transactions to be included in block creation. (default: %s) + 블록 생성시 거래가 포함되도록 최저 수수료율을 설정하십시오 (%s/kB 단위). (기본값: %s) + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) 스크립트 인증 스레드의 갯수 설정 (%u-%d, 0 = 자동, <0 = 지정된 코어 개수만큼 사용 안함, 기본값: %d) @@ -2980,7 +3192,7 @@ This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - 이 빌드 버전은 정식 출시 전 테스트의 목적이며, 예기치 않은 위험과 오류가 발생할 수 있습니다. 채굴과 상점용 소프트웨어로 사용하는 것을 권하지 않습니다. + 출시 전의 테스트 빌드 입니다. - 스스로의 책임하에 사용하십시오 - 채굴이나 상업적 용도로 프로그램으로 사용하지 마십시오 Unable to rewind the database to a pre-fork state. You will need to redownload the blockchain @@ -2991,16 +3203,28 @@ 리슨(Listen) 포트를 할당하기 위해 UPnP 사용 (기본값: 열려있거나 -proxy 옵션을 사용하지 않을 시 1) + Username and hashed password for JSON-RPC connections. The field <userpw> comes in the format: <USERNAME>:<SALT>$<HASH>. A canonical python script is included in share/rpcuser. The client then connects normally using the rpcuser=<USERNAME>/rpcpassword=<PASSWORD> pair of arguments. This option can be specified multiple times + 클라이언트JSON-RPC 연결시 사용자 이름과 해시화된 암호문. <userpw> 필드는 <USERNAME>:<SALT>$<HASH> 포멧으로 구성되어 있습니다. 전형적 파이썬 스크립트에선 share/rpcuser가 포함되어 있습니다. 그런 다음 클라이언트는 rpcuser=<USERNAME>/ rpcpassword=<PASSWORD> 쌍의 인수를 사용하여 정상적으로 연결합니다. 이 옵션은 여러번 지정할 수 있습니다. + + + Wallet will not create transactions that violate mempool chain limits (default: %u) + 지갑은 mempool chain limit (기본값: %u) 을 위반하는 거래를 생성하지 않습니다. + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. 경고 : 모든 네트워크가 동의해야 하나, 일부 채굴자들에게 문제가 있는 것으로 보입니다. Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. - 경고: 현재 비트코인 버전이 다른 네트워크 참여자들과 동일하지 않는 것 같습니다. 당신 또는 다른 참여자들이 동일한 비트코인 버전으로 업그레이드 할 필요가 있습니다. + 경고: 현재 비트코인 버전이 다른 네트워크 참여자들과 동일하지 않은 것 같습니다. 당신 또는 다른 참여자들이 동일한 비트코인 버전으로 업그레이드 할 필요가 있습니다. + + + Whitelist peers using the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. + 설정된 IP주소 (보기 1.2.3.4) 혹은 CIDR로 작성된 네트워크 (보기 1.2.3.0/24)로 화이트리스트에 포함된 피어에 접속합니다. 이 설정은 복수로 지정 할 수 있습니다. You need to rebuild the database using -reindex-chainstate to change -txindex - -txindex를 바꾸기 위해서는 -reindex-chainstate를 사용해서 데이터베이스를 재구성해야 합니다. + -txindex를 바꾸기 위해서는 -reindex-chainstate 를 사용해서 데이터베이스를 재구성해야 합니다. %s corrupt, salvage failed @@ -3031,6 +3255,14 @@ %s 주소를 확인할 수 없습니다: '%s' + Chain selection options: + 체인 선택 옵션: + + + Change index out of range + 범위 밖의 인덱스 변경 + + Connection options: 연결 설정 : @@ -3052,7 +3284,7 @@ Do you want to rebuild the block database now? - 블락 데이터베이스를 다시 생성하시겠습니까? + 블록 데이터베이스를 다시 생성하시겠습니까? Enable publish hash block in <address> @@ -3060,19 +3292,19 @@ Enable publish hash transaction in <address> - <address>에 대한 해시 트랙잭션 공개 활성화 + <address>에 대한 해시 거래 공개 활성화 Enable publish raw block in <address> - <address>에 대한 로우 블록 공개 활성화 + <address>에 대한 원시 블록 공개 활성화 Enable publish raw transaction in <address> - <address>에 대한 로우 트랜잭션 공개 활성화 + <address>에 대한 원시 거래 공개 활성화 Enable transaction replacement in the memory pool (default: %u) - 메모리 풀(pool) 내의 트랜잭션 치환(replacement) 활성화 (기본값: %u) + 메모리 풀(pool) 내의 거래 치환(replacement) 활성화 (기본값: %u) Error initializing block database @@ -3140,7 +3372,7 @@ Keep the transaction memory pool below <n> megabytes (default: %u) - 트랜잭션 메모리 풀의 용량을 <n>메가바이트 아래로 유지하기 (기본값: %u) + 거래 메모리 풀의 용량을 <n>메가바이트 아래로 유지하기 (기본값: %u) Loading banlist... @@ -3227,6 +3459,10 @@ 리슨(Listen) 포트를 할당하기 위해 UPnP 사용 (기본값: %u) + Use the test chain + 테스트 체인 사용 + + User Agent comment (%s) contains unsafe characters. 사용자 정의 코멘트 (%s)에 안전하지 못한 글자가 포함되어 있습니다. @@ -3284,7 +3520,7 @@ Fees (in %s/kB) smaller than this are considered zero fee for relaying, mining and transaction creation (default: %s) - 해당 금액(%s/kB) 보다 적은 수수료는 중계, 채굴, 트랜잭션 생성에서 수수료 면제로 간주됩니다 (기본값: %s) + 해당 금액(%s/kB) 보다 적은 수수료는 중계, 채굴, 거래 생성에서 수수료 면제로 간주됩니다 (기본값: %s) If paytxfee is not set, include enough fee so transactions begin confirmation on average within n blocks (default: %u) @@ -3292,11 +3528,11 @@ Invalid amount for -maxtxfee=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions) - 유효하지 않은 금액 -maxtxfee=<amount>: '%s' (트랜잭션이 막히는 상황을 방지하게 위해 적어도 %s 의 중계 수수료를 지정해야 합니다) + 유효하지 않은 금액 -maxtxfee=<amount>: '%s' (거래가 막히는 상황을 방지하게 위해 적어도 %s 의 중계 수수료를 지정해야 합니다) Maximum size of data in data carrier transactions we relay and mine (default: %u) - 중계 및 채굴을 할 때 데이터 운송 트랜잭션에서 데이터의 최대 크기 (기본값: %u) + 중계 및 채굴을 할 때 데이터 운송 거래에서 데이터의 최대 크기 (기본값: %u) Randomize credentials for every proxy connection. This enables Tor stream isolation (default: %u) @@ -3311,8 +3547,12 @@ 거래액이 수수료를 지불하기엔 너무 작습니다 + Use hierarchical deterministic key generation (HD) after BIP32. Only has effect during wallet creation/first start + BIP32 이후에는 계층적 결정성 키 생성 (HD)을 사용하십시오. 지갑 생성/처음 시작 시에만 효과가 있습니다. + + Whitelisted peers cannot be DoS banned and their transactions are always relayed, even if they are already in the mempool, useful e.g. for a gateway - 화이트리스트에 포함된 피어는 이미 메모리풀에 포함되어 있어도 DoS 추방이 되지 않으며 그들의 트랜잭션이 항상 중계됩니다, 이는 예를 들면 게이트웨이에서 유용합니다. + 화이트리스트에 포함된 피어는 이미 메모리풀에 포함되어 있어도 DoS 추방이 되지 않으며 그들의 거래가 항상 중계됩니다, 이는 예를 들면 게이트웨이에서 유용합니다. You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain @@ -3356,7 +3596,7 @@ Keep at most <n> unconnectable transactions in memory (default: %u) - 최대 <n>개의 연결할 수 없는 트랜잭션을 메모리에 저장 (기본값: %u) + 최대 <n>개의 연결할 수 없는 거래를 메모리에 저장 (기본값: %u) Need to specify a port with -whitebind: '%s' @@ -3376,7 +3616,7 @@ Rescan the block chain for missing wallet transactions on startup - 시작시 누락된 지갑 트랜잭션에 대해 블록 체인을 다시 검색 합니다 + 시작시 누락된 지갑 거래에 대해 블록 체인을 다시 검색 합니다 Send trace/debug info to console instead of debug.log file @@ -3384,7 +3624,7 @@ Send transactions as zero-fee transactions if possible (default: %u) - 가능한 경우 수수료 없이 트랜잭션 보내기 (기본값: %u) + 가능한 경우 수수료 없이 거래 보내기 (기본값: %u) Show all debugging options (usage: --help -help-debug) @@ -3420,7 +3660,7 @@ Transaction too large for fee policy - 수수료 정책에 비해 트랜잭션이 너무 큽니다 + 수수료 정책에 비해 거래가 너무 큽니다 Transaction too large @@ -3460,7 +3700,7 @@ Execute command when the best block changes (%s in cmd is replaced by block hash) - 최고의 블럭이 변하면 명령을 실행(cmd 에 있는 %s 는 블럭 해시에 의해 대체되어 짐) + 최고의 블록이 변하면 명령을 실행 (cmd 에 있는 %s 는 블록 해시에 의해 대체되어 짐) Allow DNS lookups for -addnode, -seednode and -connect @@ -3472,15 +3712,19 @@ (1 = keep tx meta data e.g. account owner and payment request information, 2 = drop tx meta data) - (1 = 트랜잭션의 메타 데이터를 유지함 예. 계좌정보 와 지불 요구 정보, 2 = 트랜잭션 메타 데이터 파기) + (1 = 거래의 메타 데이터를 유지함 예. 계좌정보 와 지불 요구 정보, 2 = 거래 메타 데이터 파기) -maxtxfee is set very high! Fees this large could be paid on a single transaction. - -maxtxfee값이 너무 큽니다! 하나의 트랜잭션에 너무 큰 수수료가 지불 됩니다. + -maxtxfee값이 너무 큽니다! 하나의 거래에 너무 큰 수수료가 지불 됩니다. Do not keep transactions in the mempool longer than <n> hours (default: %u) - 메모리 풀에 있는 트랜잭션 기록을 <n>시간 후 부터는 유지하지 않기 (기본값: %u) + 메모리 풀에 있는 거래 기록을 <n>시간 후 부터는 유지하지 않기 (기본값: %u) + + + Equivalent bytes per sigop in transactions for relay and mining (default: %u) + 릴레이 및 마이닝 거래의 sigop 당 동등한 바이트 (기본값: %u) Fees (in %s/kB) smaller than this are considered zero fee for transaction creation (default: %s) @@ -3496,7 +3740,7 @@ Maintain a full transaction index, used by the getrawtransaction rpc call (default: %u) - getrawtransaction를 RPC CALL를 통해 완전한 트랜잭션 인덱스 유지 (기본값: %u) + getrawtransaction를 RPC CALL를 통해 완전한 거래 인덱스 유지 (기본값: %u) Number of seconds to keep misbehaving peers from reconnecting (default: %u) @@ -3508,15 +3752,23 @@ Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect/-noconnect) - DNS lookup를 통해 피어 주소에 대한 쿼리 보내기 (기본값: 1 -connect 예외) + 보유한 피어 주소가 적은 경우 DNS 조회를 통해 피어 주소를 요청합니다. (-connect / -noconnect가 아니라면 기본값은 1) + + + Sets the serialization of raw transaction or block hex returned in non-verbose mode, non-segwit(0) or segwit(1) (default: %d) + non-segwit(0) 또는 segwit(1) (기본값: %d) 가 아닌 자세한 정보 표시 모드로 반환 된 원시 거래 또는 블록 hex의 직렬화를 설정합니다. Support filtering of blocks and transaction with bloom filters (default: %u) - 블룸필터를 통해 블록과 트랜잭션 필터링 지원 (기본값: %u) + 블룸필터를 통해 블록과 거래 필터링 지원 (기본값: %u) + + + This is the transaction fee you may pay when fee estimates are not available. + 이것은 수수료 견적을 이용할 수 없을 때 지불 할 수 있는 거래 수수료입니다. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit %s and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard. - 이 프로그램에는 OpenSSL 툴킷%s 사용 목적으로 개발한 OpenSSL 프로젝트를 포함하고 있으며, 암호화 프로그램은 Eric Young이, UPnP 프로그램은 Thomas Bernard가 작성했습니다. + 이 제품에는 OpenSSL Project에서 OpenSSL Toolkit %s으로 사용하기 위해 개발 한 소프트웨어와 Eric Young이 작성한 암호화 소프트웨어 및 Thomas Bernard가 작성한 UPnP 소프트웨어가 포함되어 있습니다. Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments. @@ -3547,8 +3799,8 @@ 경고 : 지갑파일이 손상되어 데이터가 복구되었습니다. 원래의 %s 파일은 %s 후에 %s 이름으로 저장됩니다. 잔액과 거래 내역이 정확하지 않다면 백업 파일로 부터 복원해야 합니다. - Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. - 설정된 IP주소 (보기 1.2.3.4) 혹은 CIDR로 작성된 네트워크 (보기 1.2.3.0/24)로 화이트리스트에 포함된 피어에 접속합니다. 이 설정은 복수로 지정 할 수 있습니다. + %s is set very high! + %s가 매우 높게 설정되었습니다! (default: %s) @@ -3571,6 +3823,10 @@ 잘못된 -proxy 주소입니다: '%s' + Keypool ran out, please call keypoolrefill first + Keypool이 종료되었습니다. 먼저 keypoolrefill을 호출하십시오. + + Listen for JSON-RPC connections on <port> (default: %u or testnet: %u) JSON-RPC 연결을 <port>포트로 받기 (기본값: %u 혹은 테스트넷: %u) @@ -3584,7 +3840,7 @@ Make the wallet broadcast transactions - 지갑 브로드캐스트 트랜잭션을 만들기 + 지갑 브로드캐스트 거래를 만들기 Maximum per-connection receive buffer, <n>*1000 bytes (default: %u) @@ -3600,17 +3856,25 @@ Relay and mine data carrier transactions (default: %u) - 데이터 운송 트랜잭션을 중계 및 채굴 (기본값: %u) + 데이터 운송 거래를 중계 및 채굴 (기본값: %u) Relay non-P2SH multisig (default: %u) 비 P2SH 다중서명을 중계 (기본값: %u) + Send transactions with full-RBF opt-in enabled (default: %u) + full-RBF opt-in이 활성화 된 거래을 전송합니다. (기본값: %u) + + Set key pool size to <n> (default: %u) 키 풀 사이즈를 <n> 로 설정 (기본값: %u) + Set maximum BIP141 block weight (default: %d) + 최대 BIP141 블록 무게 설정 (기본값: %d) + + Set the number of threads to service RPC calls (default: %d) 원격 프로시져 호출 서비스를 위한 쓰레드 개수를 설정 (기본값 : %d) @@ -3628,15 +3892,39 @@ Spend unconfirmed change when sending transactions (default: %u) - 트랜잭션을 보낼 때 검증되지 않은 잔돈 쓰기 (기본값: %u) + 거래를 보낼 때 검증되지 않은 잔돈 쓰기 (기본값: %u) Starting network threads... 네트워크 스레드 시작중... + The wallet will avoid paying less than the minimum relay fee. + 지갑은 최소 중계 수수료보다 적은 금액을 지불하는 것을 피할 것입니다. + + + This is the minimum transaction fee you pay on every transaction. + 이것은 모든 거래에서 지불하는 최소 거래 수수료입니다. + + + This is the transaction fee you will pay if you send a transaction. + 이것은 거래를 보낼 경우 지불 할 거래 수수료입니다. + + Threshold for disconnecting misbehaving peers (default: %u) - 이상행동 네트워크 참여자의 연결을 차단시키기 위한 한계치 (기본값: %u) + 비정상적인 피어의 연결을 차단시키기 위한 임계값 (기본값: %u) + + + Transaction amounts must not be negative + 거래액은 반드시 정수여야합니다. + + + Transaction has too long of a mempool chain + 거래가 너무 긴 mempool 체인을 갖고 있습니다 + + + Transaction must have at least one recipient + 거래에는 최소한 한명의 수령인이 있어야 합니다. Unknown network specified in -onlynet: '%s' @@ -3648,7 +3936,7 @@ Loading block index... - 블럭 인덱스를 불러오는 중... + 블록 인덱스를 불러오는 중... Add a node to connect to and attempt to keep the connection open @@ -3679,4 +3967,4 @@ 오류 - \ No newline at end of file + diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_my.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_my.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_my.ts 1970-01-01 00:00:00.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_my.ts 2017-06-18 17:25:52.000000000 +0000 @@ -0,0 +1,172 @@ + + + AddressBookPage + + Right-click to edit address or label + လိပ်စာ သို့မဟုတ် ခေါင်းစဉ်တပ်ရန် Right-click နှိပ်ပါ။ + + + Create a new address + လိပ်စာအသစ်ယူမယ်။ + + + &New + &အသစ် + + + Copy the currently selected address to the system clipboard + လက်ရှိရွေးထားတဲ့ လိပ်စာကို clipboard ပေါ်တင်မယ်။ + + + &Copy + &ကူးမယ် + + + Delete the currently selected address from the list + လက်ရှိရွေးထားတဲ့ လိပ်စာကို ဖျက်မယ်။ + + + Export the data in the current tab to a file + လက်ရှိ tab မှာရှိတဲ့ဒေတာတွေကို ဖိုင်လ်မှာသိမ်းမယ်။ + + + &Export + &ထုတ်ယူသိမ်းဆည်း + + + &Delete + &ဖျက် + + + + AddressTableModel + + + AskPassphraseDialog + + + BanTableModel + + + BitcoinGUI + + + CoinControlDialog + + + EditAddressDialog + + + FreespaceChecker + + + GuiNetWatch + + + HelpMessageDialog + + + Intro + + + MempoolStats + + + ModalOverlay + + + NetWatchLogModel + + + OpenURIDialog + + + OptionsDialog + + + OverviewPage + + + PaymentServer + + + PeerTableModel + + + QObject + + + QObject::QObject + + + QRImageWidget + + + RPCConsole + + + ReceiveCoinsDialog + + + ReceiveRequestDialog + + + RecentRequestsTableModel + + + SendCoinsDialog + + + SendCoinsEntry + + + SendConfirmationDialog + + + ShutdownWindow + + + SignVerifyMessageDialog + + + SplashScreen + + + TrafficGraphWidget + + + TransactionDesc + + + TransactionDescDialog + + + TransactionTableModel + + + TransactionView + + + UnitDisplayStatusBarControl + + + WalletFrame + + + WalletModel + + + WalletView + + &Export + &ထုတ်ယူသိမ်းဆည်း + + + Export the data in the current tab to a file + လက်ရှိ tab မှာရှိတဲ့ဒေတာတွေကို ဖိုင်လ်မှာသိမ်းမယ်။ + + + + bitcoin-core + + \ No newline at end of file diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_ne.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_ne.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_ne.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_ne.ts 2017-06-18 17:25:52.000000000 +0000 @@ -11,7 +11,7 @@ &New - &amp;नयाँ + &नयाँ Copy the currently selected address to the system clipboard @@ -19,7 +19,7 @@ &Copy - &amp;कपी गर्नुहोस् + &कपी गर्नुहोस् C&lose @@ -35,19 +35,28 @@ &Export - &amp;निर्यात गर्नुहोस् + &निर्यात गर्नुहोस् &Delete - &amp;मेटाउनुहोस् + &मेटाउनुहोस् + + + C&hoose + छनौट गर्नुहोस्... Sending addresses - amp;पठाउने ठेगानाहरू + पठाउने ठेगानाहरू... Receiving addresses - amp;प्राप्त गर्ने ठेगानाहरू + प्राप्त गर्ने ठेगानाहरू... + + + &Copy Address + ठेगाना कपी गर्नुहोस् + @@ -87,7 +96,7 @@ BitcoinGUI Sign &message... - सन्देशमा &amp;हस्ताक्षर गर्नुहोस्... + सन्देशमा &हस्ताक्षर गर्नुहोस्... Synchronizing with network... @@ -107,7 +116,7 @@ &Transactions - &amp;कारोबार + &कारोबार Browse transaction history @@ -123,7 +132,7 @@ &About %1 - &amp;बारेमा %1 + &बारेमा %1 Show information about %1 @@ -131,7 +140,7 @@ About &Qt - &amp;Qt + &Qt Show information about Qt @@ -139,7 +148,7 @@ &Options... - &amp;विकल्प... + &विकल्प... Modify configuration options for %1 @@ -147,27 +156,27 @@ &Encrypt Wallet... - &amp;वालेटलाई इन्क्रिप्ट गर्नुहोस्... + &वालेटलाई इन्क्रिप्ट गर्नुहोस्... &Backup Wallet... - &amp;वालेटलाई ब्याकअप गर्नुहोस्... + &वालेटलाई ब्याकअप गर्नुहोस्... &Change Passphrase... - &amp;पासफ्रेज परिवर्तन गर्नुहोस्... + &पासफ्रेज परिवर्तन गर्नुहोस्... &Sending addresses... - &amp;पठाउने ठेगानाहरू... + &पठाउने ठेगानाहरू... &Receiving addresses... - &amp;प्राप्त गर्ने ठेगानाहरू... + &प्राप्त गर्ने ठेगानाहरू... Open &URI... - URI &amp;खोल्नुहोस्... + URI &खोल्नुहोस्... Reindexing blocks on disk... @@ -187,7 +196,7 @@ &Debug window - &amp;डिबग विन्डो + &डिबग विन्डो Open debugging and diagnostic console @@ -204,6 +213,11 @@ Amount रकम + + Copy address + ठेगाना कपी गर्नुहोस् + + EditAddressDialog @@ -246,6 +260,10 @@ Options amp;विकल्प + + Choose the default subdivision unit to show in the interface and when sending coins. + इन्टरफेसमा र सिक्का पठाउँदा देखिने डिफल्ट उपविभाजन एकाइ चयन गर्नुहोस् । + OverviewPage @@ -315,6 +333,10 @@ रकम + Enter a Bitcoin address (e.g. %1) + कृपया बिटकोइन ठेगाना प्रवेश गर्नुहोस् (उदाहरण %1) + + Blk Tx Watch: Block type abbreviation ब्लक @@ -356,6 +378,11 @@ ReceiveRequestDialog + Copy &Address + ठेगाना कपी गर्नुहोस् + + + Amount रकम @@ -369,6 +396,10 @@ Amount: रकम: + + Choose... + छनौट गर्नुहोस्... + SendCoinsEntry @@ -377,10 +408,18 @@ &रकम: + Choose previously used address + पहिला प्रयोग गरिएको ठेगाना प्रयोग गर्नुहोस् + + 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. पठाइँदै गरेको रकमबाट शुल्क कटौती गरिनेछ । प्राप्तकर्ताले तपाईंले रकम क्षेत्रमा प्रवेष गरेको भन्दा थोरै बिटकोइन प्राप्त गर्ने छन् । धेरै प्राप्तकर्ता चयन गरिएको छ भने समान रूपमा शुल्क विभाजित गरिनेछ । + Enter a label for this address to add it to the list of used addresses + यो ठेगानालाई प्रयोग गरिएको ठेगानाको सूचीमा थप्न एउटा लेबल प्रविष्ट गर्नुहोस् + + A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network. बिटकोइनमा संलग्न गरिएको सन्देश: तपाईंको मध्यस्थको लागि कारोबारको साथमा भण्डारण गरिने URI । नोट: यो सन्देश बिटकोइन नेटवर्क मार्फत पठाइने छैन । @@ -397,6 +436,18 @@ You can sign messages/agreements with your addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. आफ्नो ठेगानामा पठाइएको बिटकोइन प्राप्त गर्न सकिन्छ भनेर प्रमाणित गर्न तपाईंले ती ठेगानाले सन्देश/सम्झौताहरूमा हस्ताक्षर गर्न सक्नुहुन्छ । फिसिङ आक्रमणले तपाईंलाई छक्याएर अरूका लागि तपाईंको परिचयमा हस्ताक्षर गराउने प्रयास गर्न सक्ने भएकाले अस्पष्ट वा जथाभावीमा हस्ताक्षर गर्दा ध्यान दिनुहोस् । आफू सहमत भएको पूर्ण विस्तृत-कथनमा मात्र हस्ताक्षर गर्नुहोस् । + + Choose previously used address + पहिला प्रयोग गरिएको ठेगाना प्रयोग गर्नुहोस् + + + Copy the current signature to the system clipboard + वर्तमान हस्ताक्षरलाई प्रणाली क्लिपबोर्डमा कपी गर्नुहोस् + + + Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction! + सन्देश प्रमाणित गर्न, तल दिइएको स्थानमा प्राप्तकर्ता ठेगाना, सन्देश (लाइन ब्रेक, स्पेस, ट्याब, आदि उस्तै गरी कपी गर्ने कुरा सुनिश्चित गर्नुहोस्) र हस्ताक्षर &apos;s प्रविष्ट गर्नुहोस् । बीचमा-मानिसको-आक्रमणबाट बच्न हस्ताक्षर पढ्दा हस्ताक्षर गरिएको सन्देशमा जे छ त्यो भन्दा धेरै कुरामा ध्यान नदिनुहोस् । यो कार्यले हस्ताक्षर गर्ने पक्षले मात्र यो ठेगानाले प्राप्त गर्छ भन्ने कुरा प्रमाणित गर्छ, यसले कुनै पनि कारोबारको प्रेषककर्तालाई प्रमाणित गर्न सक्दैन भन्ने कुरा याद गर्नुहोस्! + SplashScreen @@ -432,6 +483,11 @@ TransactionView + Copy address + ठेगाना कपी गर्नुहोस् + + + Watch-only हेर्ने-मात्र @@ -449,11 +505,12 @@ WalletView &Export - &निर्यात गर्नुहोस् + &निर्यात गर्नुहोस् + Export the data in the current tab to a file - वर्तमान ट्याबको डाटालाई फाइलमा निर्यात गर्नुहोस् + वर्तमान ट्याबको डाटालाई फाइलमा निर्यात गर्नुहोस् Backup Wallet @@ -467,6 +524,10 @@ amp;विकल्प: + Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup + वालेटको सबै कारोबार मेटाउनुहोस् र -स्टार्टअपको पुनः स्क्यान मार्फत ब्लकचेनका ती भागहरूलाई मात्र पुनः प्राप्त गर्नुहोस् + + 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 ब्लक डाटाबेसमा भविष्यबाट आए जस्तो देखिने एउटा ब्लक हुन्छ । तपाईंको कम्प्युटरको मिति र समय गलत तरिकाले सेट गरिएकाले यस्तो हुन सक्छ । तपाईं आफ्नो कम्प्युटरको मिति र समय सही छ भनेर पक्का हुनुहुन्छ भने मात्र ब्लक डाटाबेस पुनर्निर्माण गर्नुहोस् । @@ -671,4 +732,4 @@ यो उत्पादन ले OpenSSL टुलकिट %s को प्रयोगको लागि OpenSSL परियोजनाले विकास गरेको सफ्टवेयर, एरिक यंग द्वारा लिखित क्रिप्टोग्राफिक सफ्टवेयर र थमस बर्नार्डद्वारा लिखित UPnP सफ्टवेयरलाई समावेश गर्छ । - \ No newline at end of file + diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_nl.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_nl.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_nl.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_nl.ts 2017-06-18 17:25:52.000000000 +0000 @@ -3,7 +3,7 @@ AddressBookPage Right-click to edit address or label - Klik met de rechtermuisknop om het adres of label te wijzigen + Rechtermuisklik om het adres of label te wijzigen Create a new address @@ -322,6 +322,22 @@ Portemonnee: + Click to disable network activity. + Klik om de netwerkactiviteit te stoppen. + + + Network activity disabled. + Netwerkactiviteit gestopt. + + + Click to enable network activity again. + Klik om de netwerkactiviteit opnieuw te starten. + + + Syncing Headers (%1%)... + Kopteksten synchroniseren (%1%)... + + Reindexing blocks on disk... Bezig met herindexeren van blokken op harde schijf... @@ -474,6 +490,10 @@ %1 client + Connecting to peers... + Gelijke worden verbonden... + + Catching up... Aan het bijwerken... @@ -516,6 +536,14 @@ Binnenkomende transactie + HD key generation is <b>enabled</b> + HD sleutel voortbrenging is <b>ingeschakeld</b> + + + HD key generation is <b>disabled</b> + HD sleutel voortbrenging is <b>uitgeschakeld</b> + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> Portemonnee is <b>versleuteld</b> en momenteel <b>geopend</b> @@ -523,7 +551,11 @@ Wallet is <b>encrypted</b> and currently <b>locked</b> Portemonnee is <b>versleuteld</b> en momenteel <b>gesloten</b> - + + A fatal error occurred. Bitcoin can no longer continue safely and will quit. + Een fatale fout heeft zich voorgedaan. Bitcoin kan niet veilig worden verdergezet en wordt afgesloten. + + CoinControlDialog @@ -876,18 +908,50 @@ Vorm + Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. + Recente transacties zijn mogelijk nog niet zichtbaar. De balans van de geldbeugel is daarom mogelijk niet correct. Deze informatie is correct van zodra de synchronisatie met het Bitcoin-netwerk werd voltooid, zoals onderaan beschreven. + + + Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. + Poging om bitcoins te besteden die door "nog niet weergegeven" transacties worden beïnvloed, worden niet door het netwerk geaccepteerd. + + + Number of blocks left + Aantal blokken resterend. + + Unknown... - Onbekend... + Onbekend... Last block time Tijd laatste blok + Progress + Vooruitgang + + + Progress increase per hour + Vooruitgang per uur + + + calculating... + Berekenen... + + + Estimated time left until synced + Geschatte tijd tot volledig synchroon + + Hide Verbergen - + + Unknown. Syncing Headers (%1)... + Onbekend. Kopteksten synchroniseren (%1%)... + + NetWatchLogModel @@ -1343,7 +1407,15 @@ Node/Service Node/Dienst - + + NodeId + Node ID + + + Ping + Ping + + QObject @@ -1383,6 +1455,14 @@ %1 ms + %n second(s) + %n seconde%n seconden + + + %n minute(s) + %n minuut%n minuten + + %n hour(s) %n uur%n uren @@ -1403,6 +1483,10 @@ %n jaar%n jaren + %1 didn't yet exit safely... + %1 sloot nog niet veilig af... + + Txn Tx Watch: Transaction type abbreviation Tse @@ -1410,7 +1494,19 @@ QObject::QObject - + + Error: Specified data directory "%1" does not exist. + Fout: Opgegeven gegevensmap "%1" bestaat niet. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Fout: Kan configuratiebestand niet verwerken: %1. Gebruik enkel de key=value syntax. + + + Error: %1 + Fout: %1 + + QRImageWidget @@ -1593,6 +1689,10 @@ Pingwachttijd + Min Ping + Min Ping + + Time Offset Tijdcompensatie @@ -1653,6 +1753,18 @@ 1 &jaar + &Disconnect + &Verbreek verbinding + + + Ban for + Ban Node voor + + + &Unban + &Maak ban voor Node ongedaan + + Welcome to the %1 RPC console. Welkom bij de %1 RPC-console. @@ -1665,6 +1777,14 @@ Typ <b>help</b> voor een overzicht van de beschikbare opdrachten. + WARNING: Scammers have been active, telling users to type commands here, stealing their wallet contents. Do not use this console without fully understanding the ramification of a command. + WAARSCHUWING: Er zijn Scammers actief geweest, die gebruikers vragen om hier commando's te typen, waardoor de inhoud van hun portefeuille werd gestolen. Gebruik deze console niet zonder de toedracht van een opdracht volledig te begrijpen. + + + Network activity disabled + Netwerkactiviteit uitgeschakeld + + %1 B %1 B @@ -1785,7 +1905,7 @@ Copy URI - Kopieer URI + Kopieer URI Copy label @@ -2013,6 +2133,10 @@ Stof: + Confirmation time target: + Bevestigingstijddoel: + + Clear &All Verwijder &Alles @@ -2105,6 +2229,10 @@ Transactiecreatie mislukt + The transaction was rejected with the following reason: %1 + De transactie werd afgewezen om de volgende reden: %1 + + A fee higher than %1 is considered an absurdly high fee. Een vergoeding van meer dan %1 wordt beschouwd als een absurd hoge vergoeding. @@ -2112,6 +2240,10 @@ Payment request expired. Betalingsverzoek verlopen. + + %n block(s) + %n blok%n blokken + Pay only the required fee of %1 Betaal alleen de verplichte transactiekosten van %1 @@ -2129,6 +2261,14 @@ Waarschuwing: Onbekend wisselgeldadres + Confirm custom change address + Bevestig aangepast wisselgeldadres + + + The address you selected for change is not part of this wallet. Any or all funds in your wallet may be sent to this address. Are you sure? + Het wisselgeldadres dat u heeft geselecteerd maakt geen deel uit van deze portemonnee. Een deel of zelfs alle geld in uw portemonnee kan mogelijk naar dit adres worden verzonden. Weet je het zeker? + + (no label) (geen label) @@ -2483,7 +2623,7 @@ matures in %n more block(s) - komt tot wasdom na %n nieuw blokkomt tot wasdom na %n nieuwe blokken + komt beschikbaar na %n nieuwe blokkomt beschikbaar na %n nieuwe blokken not accepted @@ -2522,6 +2662,10 @@ Transactie-ID + Transaction total size + Transactie totale grootte + + Output index Output index @@ -2919,7 +3063,15 @@ Accept connections from outside (default: 1 if no -proxy or -connect/-noconnect) - Accepteer verbindingen van buitenaf (standaard: 1 als geen -proxy of -connect is opgegeven) + Accepteer verbindingen van buitenaf (standaard: 1 indien geen -proxy of -connect/-noconnect werd opgegeven) + + + Connect only to the specified node(s); -noconnect or -connect=0 alone to disable automatic connections + Verbind enkel met de opgegeven knooppunt(en); -noconnect of -connect = 0 alleen om automatische verbindingen uit te schakelen + + + Distributed under the MIT software license, see the accompanying file %s or %s + Uitgegeven onder de MIT software licentie, zie het bijgevoegde bestand %s of %s If <category> is not supplied or if <category> = 1, output all debugging information. @@ -2998,6 +3150,14 @@ Voer opdracht uit zodra een portemonneetransactie verandert (%s in cmd wordt vervangen door TxID) + Extra transactions to keep in memory for compact block reconstructions (default: %u) + Extra transacties wordt bijgehouden voor compacte blokreconstructie (standaard: %u) + + + If this block is in the chain assume that it and its ancestors are valid and potentially skip their script verification (0 to verify all, default: %s, testnet: %s) + Als dit blok in de keten staat, gaat het ervan uit dat dit blok en zijn voorouders geldig zijn en mogelijk hun script verificatie overslaan (0 om alles te verifiëren, standaard:%s, testnet:%s) + + Maximum allowed median peer time offset adjustment. Local perspective of time may be influenced by peers forward or backward by this amount. (default: %u seconds) Maximum toegestane peer tijd compensatie. Lokaal perspectief van tijd mag worden beinvloed door peers die met deze hoeveelheid voor of achter lopen. (standaard: %u seconden) @@ -3014,6 +3174,14 @@ Gelieve bij te dragen als je %s nuttig vindt. Bezoek %s voor meer informatie over de software. + Reduce storage requirements by enabling pruning (deleting) of old blocks. This allows the pruneblockchain RPC to be called to delete specific blocks, and enables automatic pruning of old blocks if a target size in MiB is provided. This mode is incompatible with -txindex and -rescan. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, >%u = automatically prune block files to stay under the specified target size in MiB) + Beperk benodigde opslag door trimmen (verwijderen) van oude blokken in te schakelen. Dit maakt het mogelijk om de pruneblockchain RPC aan te roepen om specifieke blokken te verwijderen, en maakt het automatische trimmen van oude blokken mogelijk wanneer een doelgrootte in MiB is voorzien. Deze modus is niet compatibele met -txindex en -rescan. Waarschuwing: Terugzetten van deze instellingen vereist het opnieuw downloaden van gehele de blokketen. (standaard:0 = uitzetten trimmodus, 1 = manueel trimmen via RPC toestaan, >%u = automatisch blokbestanden trimmen om beneden de gespecificeerde doelgrootte in MiB te blijven) + + + Set lowest fee rate (in %s/kB) for transactions to be included in block creation. (default: %s) + Specificeer het laagste tarief (in %s/kB) voor transacties die bij het maken van een blok moeten worden in rekening worden gebracht (standaard: %s) + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) Kies het aantal scriptverificatie processen (%u tot %d, 0 = auto, <0 = laat dit aantal kernen vrij, standaard: %d) @@ -3023,7 +3191,7 @@ This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - Dit is een prerelease testversie – gebruik op eigen risico! Gebruik deze niet voor mijnen of handelsdoeleinden + Dit is een pre-release testversie - gebruik op eigen risico! Gebruik deze niet voor het delven van munten of handelsdoeleinden Unable to rewind the database to a pre-fork state. You will need to redownload the blockchain @@ -3034,6 +3202,14 @@ Gebruik UPnP om de luisterende poort te mappen (standaard: 1 als er geluisterd worden en geen -proxy is meegegeven) + Username and hashed password for JSON-RPC connections. The field <userpw> comes in the format: <USERNAME>:<SALT>$<HASH>. A canonical python script is included in share/rpcuser. The client then connects normally using the rpcuser=<USERNAME>/rpcpassword=<PASSWORD> pair of arguments. This option can be specified multiple times + Gebruikersnaam en gehasht wachtwoord voor JSON-RPC-verbindingen. De velden <userpw> is in het formaat: <GEBRUIKERSNAAM>:<SALT>$<HASH>. Een kanoniek Pythonscript is inbegrepen in de share/rpcuser. De klant connecteert dan normaal via de rpcuser=<GEBRUIKERSNAAM>/rpcpassword=<PASWOORD> argumenten. Deze optie kan meerdere keren worden meegegeven + + + Wallet will not create transactions that violate mempool chain limits (default: %u) + Portemonnee creëert geen transacties die mempool-ketenlimieten schenden (standaard: %u) + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. Waarschuwing: Het lijkt erop dat het netwerk geen consensus kan vinden! Sommige delvers lijken problemen te ondervinden. @@ -3042,6 +3218,10 @@ Waarschuwing: Het lijkt erop dat we geen consensus kunnen vinden met onze peers! Mogelijk dient u te upgraden, of andere nodes moeten wellicht upgraden. + Whitelist peers using the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. + Goedgekeurde peers die verbinden vanaf een bepaald IP adres (vb. 1.2.3.4) of CIDR genoteerd netwerk (vb. 1.2.3.0/24). Kan meerdere keren worden gespecificeerd. + + You need to rebuild the database using -reindex-chainstate to change -txindex Om -txindex te kunnen veranderen dient u de database opnieuw te bouwen met gebruik van -reindex-chainstate. @@ -3074,6 +3254,10 @@ Kan -%s adres niet herleiden: '%s' + Chain selection options: + Keten selectie opties: + + Change index out of range Wijzigingsindex buiten bereik @@ -3274,6 +3458,10 @@ Gebruik UPnP om de luisterende poort te mappen (standaard: %u) + Use the test chain + Gebruik de test keten + + User Agent comment (%s) contains unsafe characters. User Agentcommentaar (%s) bevat onveilige karakters. @@ -3567,13 +3755,17 @@ Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect/-noconnect) - Query voor peeradressen via DNS- lookup , als laag op adressen (standaard: 1 unless -connect) + Query voor peer-adressen via DNS-lookup , indien laag aan adressen (default: 1 unless -connect/-noconnect) Support filtering of blocks and transaction with bloom filters (default: %u) Ondersteun filtering van blokken en transacties met bloomfilters (standaard: %u) + This is the transaction fee you may pay when fee estimates are not available. + Dit is de transactiekost die je mogelijk betaald indien geschatte tarief niet beschikbaar is + + This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit %s and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard. Dit product bevat software dat ontwikkeld is door het OpenSSL Project voor gebruik in de OpenSSL Toolkit %s en cryptografische software geschreven door Eric Young en UPnP software geschreven door Thomas Bernard. @@ -3606,6 +3798,10 @@ Waarschuwing: portomonee bestand is corrupt, data is veiliggesteld! Originele %s is opgeslagen als %s in %s; als uw balans of transacties incorrect zijn dient u een backup terug te zetten. + %s is set very high! + %s is zeer hoog ingesteld! + + (default: %s) (standaard: %s) @@ -3626,6 +3822,10 @@ Ongeldig -proxy adres: '%s' + Keypool ran out, please call keypoolrefill first + Keypool op geraakt, roep alsjeblieft eerst keypoolrefill functie aan + + Listen for JSON-RPC connections on <port> (default: %u or testnet: %u) Luister naar JSON-RPC-verbindingen op <poort> (standaard: %u of testnet: %u) @@ -3662,6 +3862,10 @@ Geef non-P2SH multisig door (standaard: %u) + Send transactions with full-RBF opt-in enabled (default: %u) + Verstuur transacties met full-RBF opt-in ingeschakeld (standaard: %u) + + Set key pool size to <n> (default: %u) Stel sleutelpoelgrootte in op <n> (standaard: %u) @@ -3694,10 +3898,34 @@ Netwerkthread starten... + The wallet will avoid paying less than the minimum relay fee. + De portemonnee vermijdt minder te betalen dan het minimale relay vergoeding. + + + This is the minimum transaction fee you pay on every transaction. + Dit is het minimum transactietarief dat je betaald op elke transactie. + + + This is the transaction fee you will pay if you send a transaction. + Dit is het transactietarief dat je betaald wanneer je een transactie verstuurt. + + Threshold for disconnecting misbehaving peers (default: %u) Drempel om verbinding te verbreken naar zich misdragende peers (standaard: %u) + Transaction amounts must not be negative + Transactiebedragen moeten positief zijn + + + Transaction has too long of a mempool chain + Transactie heeft een te lange mempoolketen + + + Transaction must have at least one recipient + Transactie moet ten minste één ontvanger hebben + + Unknown network specified in -onlynet: '%s' Onbekend netwerk gespecificeerd in -onlynet: '%s' diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_pl.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_pl.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_pl.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_pl.ts 2017-06-18 17:25:52.000000000 +0000 @@ -322,6 +322,22 @@ Portfel: + Click to disable network activity. + Kliknij aby wyłączyć aktywność sieciową. + + + Network activity disabled. + Aktywność sieciowa została wyłączona. + + + Click to enable network activity again. + Kliknij, aby ponownie włączyć aktywności sieciową. + + + Syncing Headers (%1%)... + Synchronizowanie headerów (%1%)... + + Reindexing blocks on disk... Ponowne indeksowanie bloków na dysku... @@ -474,6 +490,10 @@ %1 klient + Connecting to peers... + Łączenie z peerami... + + Catching up... Trwa synchronizacja… @@ -523,7 +543,11 @@ Wallet is <b>encrypted</b> and currently <b>locked</b> Portfel jest <b>zaszyfrowany</b> i obecnie <b>zablokowany</b> - + + A fatal error occurred. Bitcoin can no longer continue safely and will quit. + Wystąpił krytyczny błąd. Bitcoin nie jest w stanie kontynuować bezpiecznie i zostanie zamknięty. + + CoinControlDialog @@ -715,11 +739,11 @@ The entered address "%1" is not a valid Bitcoin address. - Wprowadzony adres «%1"» nie jest poprawnym adresem bitcoinowym. + Wprowadzony adres "%1" nie jest prawidłowym adresem Bitcoin. The entered address "%1" is already in the address book. - Wprowadzony adres «%1» już istnieje w książce adresowej. + Wprowadzony adres "%1" znajduje się już w książce adresowej. Could not unlock wallet. @@ -876,6 +900,10 @@ Formularz + Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. + Świeże transakcje mogą nie być jeszcze widoczne, a zatem saldo portfela może być nieprawidłowe. Te detale będą poprawne, gdy portfel zakończy synchronizację z siecią bitcoin, zgodnie z poniższym opisem. + + Number of blocks left Pozostało bloków @@ -1725,6 +1753,10 @@ Wpisz <b>help</b> aby uzyskać listę dostępnych komend + Network activity disabled + Aktywność sieciowa została wyłączona + + %1 B %1 B diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_pt_BR.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_pt_BR.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_pt_BR.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_pt_BR.ts 2017-06-18 17:25:52.000000000 +0000 @@ -3223,6 +3223,10 @@ Atenção: Nós não parecemos concordar plenamente com nossos nós! Você pode precisar atualizar ou outros nós podem precisar atualizar. + Whitelist peers using the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. + Lista Branca de conecções do endereço IP informado (ex: 1.2.3.4) ou com máscara de rede (ex: 1.2.3.0/24). Pode ser especificado várias vezes. + + You need to rebuild the database using -reindex-chainstate to change -txindex Você precisa reconstruir o banco de dados utilizando -reindex-chainstate para mudar -txindex @@ -3803,10 +3807,6 @@ Atenção: Arquivo da carteira corrompido, dados recuperados! Original %s salvo como %s em %s; se seu saldo ou transações estiverem incorretos, você deve restaurar o backup. - Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. - Lista Branca de conecções do endereço IP informado (ex: 1.2.3.4) ou com máscara de rede (ex: 1.2.3.0/24). Pode ser especificado várias vezes. - - %s is set very high! %s está muito alto! diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_ru_RU.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_ru_RU.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_ru_RU.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_ru_RU.ts 2017-06-18 17:25:52.000000000 +0000 @@ -3,7 +3,7 @@ AddressBookPage Right-click to edit address or label - Кликните правой кнопкой мыши для редоктирования адреса или ярлыка + Кликните правой кнопкой мыши для редактирования адреса или метки Create a new address @@ -15,7 +15,7 @@ Copy the currently selected address to the system clipboard - Copy the currently selected address to the system clipboardый адрес в буфер + Скопировать текущий выбранный адрес в буфер обмена системы &Copy @@ -42,6 +42,14 @@ Удалить + Choose the address to send coins to + Выбрать адрес для отправки монет + + + Choose the address to receive coins with + Выбрать адрес для получения монет + + C&hoose Выбрать diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_ru.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_ru.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_ru.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_ru.ts 2017-06-18 17:25:52.000000000 +0000 @@ -3219,6 +3219,10 @@ Внимание: мы не полностью согласны с подключенными участниками! Вам или другим участникам, возможно, следует обновиться. + Whitelist peers using the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. + Вносить в белый список участников, подключающихся с указанного IP (напр. 1.2.3.4) или CIDR-адреса сети (напр. 1.2.3.0/24). Можно использовать многократно. + + You need to rebuild the database using -reindex-chainstate to change -txindex Вам необходимо пересобрать базы данных с помощью -reindex-chainstate, чтобы изменить -txindex @@ -3799,10 +3803,6 @@ Внимание: Файл бумажника поврежден, данные восстановлены! Оригинальный %s сохранен как %s в %s; Если баланс или транзакции некорректны, вы должны восстановить файл из резервной копии. - Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. - Вносить в белый список участников, подключающихся с указанного IP (напр. 1.2.3.4) или CIDR-адреса сети (напр. 1.2.3.0/24). Можно использовать многократно. - - %s is set very high! %s задан слишком высоким! diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_sk.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_sk.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_sk.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_sk.ts 2017-06-18 17:25:52.000000000 +0000 @@ -169,7 +169,7 @@ Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! - Varovanie: Ak zašifrujete peňaženku a stratíte heslo, <b>STRATÍTE VŠETKY VAŠE BITCOINY</b>!⏎ + Varovanie: Ak zašifrujete peňaženku a stratíte heslo, <b>STRATÍTE VŠETKY VAŠE BITCOINY</b>! Are you sure you wish to encrypt your wallet? @@ -181,7 +181,7 @@ %1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. - %1 sa teraz ukončí pre dokončenie procesu šifrovania. Pamätaj, že šifrovanie peňaženky Ťa nemôže úplne ochrániť pred krádežou bitcoinov pomocou škodlivého software. + %1 sa teraz zavrie, aby sa ukončil proces šifrovania. Zašifrovanie peňaženky neochráni úplne pred krádežou bitcoinov škodlivými programami, ktoré prenikli do vášho počítača. 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. @@ -322,6 +322,22 @@ Peňaženka: + Click to disable network activity. + Kliknite pre zakázanie sieťovej aktivity. + + + Network activity disabled. + Sieťová aktivita zakázaná. + + + Click to enable network activity again. + Kliknite pre povolenie sieťovej aktivity. + + + Syncing Headers (%1%)... + Synchronizujú sa hlavičky (%1%)... + + Reindexing blocks on disk... Preindexúvam bloky na disku... @@ -443,7 +459,7 @@ Last received block was generated %1 ago. - Posledný prijatý blok bol vygenerovaný pred %1. + Posledný prijatý blok bol vygenerovaný pred: %1. Transactions after this will not yet be visible. @@ -474,6 +490,10 @@ %1 klient + Connecting to peers... + Pripája sa k partnerom... + + Catching up... Sťahujem... @@ -516,6 +536,14 @@ Prijatá transakcia + HD key generation is <b>enabled</b> + Generovanie HD kľúčov je <b>zapnuté</b> + + + HD key generation is <b>disabled</b> + Generovanie HD kľúčov je <b>vypnuté</b> + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> Peňaženka je <b>zašifrovaná</b> a momentálne <b>odomknutá</b> @@ -523,7 +551,11 @@ Wallet is <b>encrypted</b> and currently <b>locked</b> Peňaženka je <b>zašifrovaná</b> a momentálne <b>zamknutá</b> - + + A fatal error occurred. Bitcoin can no longer continue safely and will quit. + Vyskytla sa kritická chyba. Bitcoin nemôže ďalej bezpečne pokračovať a ukončí sa. + + CoinControlDialog @@ -660,7 +692,7 @@ Can vary +/- %1 satoshi(s) per input. - Môže sa líšiť o +/- %1 satoshi pre každý vstup + Môže sa líšiť o +/- %1 satoshi pre každý vstup. (no label) @@ -876,14 +908,38 @@ Forma + Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. + Nedávne transakcie nemusia byť ešte viditeľné preto môže byť zostatok vo vašej peňaženke nesprávny. Táto informácia bude správna keď sa dokončí synchronizovanie peňaženky so sieťou bitcoin, ako je rozpísané nižšie. + + + Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. + Pokus o minutie bitcoinov, ktoré sú ovplyvnené ešte nezobrazenými transakciami, nebude sieťou akceptovaný. + + + Number of blocks left + Počet zostávajúcich blokov + + Unknown... - neznámy... + Neznáme... Last block time Čas posledného bloku + Progress + Postup synchronizácie + + + Progress increase per hour + Prírastok postupu za hodinu + + + calculating... + počíta sa... + + Estimated time left until synced Odhadovaný čas do ukončenia synchronizácie @@ -891,7 +947,11 @@ Hide Skryť - + + Unknown. Syncing Headers (%1)... + Neznámy. Synchronizujú sa hlavičky (%1)... + + NetWatchLogModel @@ -1347,7 +1407,15 @@ Node/Service Uzol/Služba - + + NodeId + ID uzlu + + + Ping + Odozva + + QObject @@ -1387,6 +1455,14 @@ %1 ms + %n second(s) + %n sekunda%n sekundy%n sekúnd + + + %n minute(s) + %n minúta%n minúty%n minút + + %n hour(s) %n hodina%n hodiny%n hodín @@ -1407,6 +1483,10 @@ %n rok%n roky%n rokov + %1 didn't yet exit safely... + %1 ešte nebol bezpečne ukončený... + + Txn Tx Watch: Transaction type abbreviation Tse @@ -1414,7 +1494,11 @@ QObject::QObject - + + Error: %1 + Chyba: %1 + + QRImageWidget @@ -1458,7 +1542,7 @@ Using BerkeleyDB version - Používa BerkeleyDB verziu + Používa verziu BerkeleyDB Datadir @@ -1494,7 +1578,7 @@ Current number of transactions - Aktuálny počet tranzakcií + Aktuálny počet transakcií Memory usage @@ -1538,7 +1622,7 @@ Starting Block - Počiatočný Blok + Počiatočný blok Synced Headers @@ -1591,11 +1675,15 @@ The duration of a currently outstanding ping. - Trvanie aktuálneho pingu + Trvanie aktuálnej požiadavky na odozvu. Ping Wait - Čakanie na ping + Čakanie na odozvu + + + Min Ping + Minimálna odozva Time Offset @@ -1658,6 +1746,18 @@ 1 &rok + &Disconnect + &Odpojiť + + + Ban for + Zakázať na + + + &Unban + &Zrušiť zákaz + + Welcome to the %1 RPC console. Vitajte v %1 RPC konzole @@ -1674,6 +1774,10 @@ VAROVANIE: Podvodníci sú aktívni a môžu nabádať používateľov napísať sem príkazy, pomocou ktorých ukradnú ich obsah peňaženky. Nepoužívajte túto konzolu ak nerozumiete presne účinkom príkazov. + Network activity disabled + Sieťová aktivita zakázaná + + %1 B %1 B @@ -1794,7 +1898,7 @@ Copy URI - Kopírovať URI + Kopírovať URI Copy label @@ -1995,7 +2099,7 @@ (Smart fee not initialized yet. This usually takes a few blocks...) - (Automatický poplatok ešte nebol aktivovaný. Toto zvyčajne trvá niekoľko blokov...) + (Automatický poplatok ešte nebol vypočítaný. Toto zvyčajne trvá niekoľko blokov...) normal @@ -2079,7 +2183,7 @@ added as transaction fee - pridané ako transakčný poplatok + pridané ako poplatok za transakciu Total Amount %1 @@ -2118,16 +2222,24 @@ Vytvorenie transakcie zlyhalo! + The transaction was rejected with the following reason: %1 + Transakcia bola odmietnutá z nasledujúceho dôvodu: %1 + + A fee higher than %1 is considered an absurdly high fee. - Poplatok vyšší ako %1 je považovaný za šialene vysoký. + Poplatok vyšší ako %1 sa považuje za neprimerane vysoký. Payment request expired. Vypršala platnosť požiadavky na platbu. + + %n block(s) + %n blok%n bloky%n blokov + Pay only the required fee of %1 - Zaplatiť len vyžadovaný poplatok z %1 + Zaplatiť iba požadovaný poplatok %1 Estimated to begin confirmation within %n block(s). @@ -2186,7 +2298,7 @@ Paste address from clipboard - Vložte adresu z klipbordu + Vložiť adresu zo schránky Alt+P @@ -2283,7 +2395,7 @@ Paste address from clipboard - Vložte adresu z klipbordu + Vložiť adresu zo schránky Alt+P @@ -2299,7 +2411,7 @@ Copy the current signature to the system clipboard - Kopírovať práve zvolenú adresu do systémového klipbordu + Kopírovať tento podpis do systémovej schránky Sign the message to prove you own this Bitcoin address @@ -2527,6 +2639,10 @@ ID transakcie + Transaction total size + Celková veľkosť transakcie + + Merchant Kupec @@ -2565,7 +2681,11 @@ This pane shows a detailed description of the transaction Táto časť obrazovky zobrazuje detailný popis transakcie - + + Details for %1 + Podrobnosti pre %1 + + TransactionTableModel @@ -2752,6 +2872,10 @@ Skopírovať neupravenú transakciu + Copy full transaction details + Kopírovať všetky podrobnosti o transakcii + + Edit label Upraviť popis @@ -2903,6 +3027,10 @@ Prijať spojenia zvonku (predvolené: 1 ak žiadne -proxy alebo -connect) + Distributed under the MIT software license, see the accompanying file %s or %s + Distribuované pod softvérovou licenciou MIT, viď sprievodný súbor %s alebo %s + + If <category> is not supplied or if <category> = 1, output all debugging information. Pokiaľ <category> nie je nastavená, alebo <category> = 1, vypíš všetky informácie pre ladenie. @@ -2916,7 +3044,7 @@ Fee (in %s/kB) to add to transactions you send (default: %s) - Poplatok (za %s/kB) pridaný do tranzakcie, ktorú posielate (predvolené: %s) + Poplatok (za %s/kB) pridaný do transakcie, ktorú posielate (predvolené: %s) Pruning blockstore... @@ -2995,8 +3123,12 @@ Varovanie: Zjavne sa úplne nezhodujeme s našimi peer-mi! Možno potrebujete prejsť na novšiu verziu alebo ostatné uzly potrebujú vyššiu verziu. + Whitelist peers using the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. + Povoliť partnerov pripájajúcich sa z danej IP adresy (napr. 1.2.3.4) alebo zo siete vo formáte CIDR (napr. 1.2.3.0/24). Môže byť zadané viackrát. + + You need to rebuild the database using -reindex-chainstate to change -txindex - Potrebujete prebudovať databázu použitím -reindex-chainstate zmeniť -txindex + Potrebujete prebudovať databázu použitím -reindex-chainstate pre zmenu -txindex %s corrupt, salvage failed @@ -3012,7 +3144,7 @@ Attempt to recover private keys from a corrupt wallet on startup - Pokus o obnovenie privátnych kľúčov z poškodenej wallet pri spustení + Pokúsiť sa o obnovenie privátnych kľúčov z poškodenej peňaženky pri spustení Block creation options: @@ -3056,7 +3188,7 @@ Enable publish hash transaction in <address> - Povoliť zverejnenie hash tranzakcií pre <address> + Povoliť zverejnenie hash transakcií pre <address> Enable publish raw block in <address> @@ -3203,6 +3335,10 @@ Použiť UPnP pre mapovanie počúvajúceho portu (predvolené: %u) + Use the test chain + Použiť testovaciu sieť + + Verifying blocks... Overujem bloky... @@ -3276,7 +3412,7 @@ The transaction amount is too small to send after the fee has been deducted - Suma je príliš malá pre odoslanie tranzakcie + Suma je príliš malá pre odoslanie transakcie Whitelisted peers cannot be DoS banned and their transactions are always relayed, even if they are already in the mempool, useful e.g. for a gateway @@ -3360,7 +3496,7 @@ The transaction amount is too small to pay the fee - Suma tranzakcie je príliš malá na zaplatenie poplatku + Suma transakcie je príliš malá na zaplatenie poplatku This is experimental software. @@ -3451,6 +3587,10 @@ Dotaz na partnerské adresy pomocou vyhľadávania DNS v prípade nedostatku adries (predvolené: 1, pokiaľ -connect) + This is the transaction fee you may pay when fee estimates are not available. + Toto je poplatok za transakciu keď odhad poplatkov ešte nie je k dispozícii. + + This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit %s and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard. Tento produkt obsahuje softvér vyvinutý projektom OpenSSL pre použitie sady nástrojov OpenSSL %s a kryptografického softvéru napísaného Eric Young a UPnP softvér napísaný Thomas Bernard. @@ -3483,8 +3623,8 @@ Varovanie: Peňaženka poškodená, dáta boli zachránené! Originálna %s ako %s v %s; ak váš zostatok alebo transakcie sú nesprávne, mali by ste obnoviť zálohu. - Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. - Povoliť partnerov pripájajúcich sa z danej IP adresy (napr. 1.2.3.4) alebo zo siete vo formáte CIDR (napr. 1.2.3.0/24). Môže byť zadané viackrát. + %s is set very high! + Hodnota %s je nastavená veľmi vysoko! (default: %s) @@ -3563,6 +3703,22 @@ Minúť nepotvrdené zmenu pri posielaní transakcií (predvolené: %u) + Starting network threads... + Spúšťajú sa sieťové vlákna... + + + The wallet will avoid paying less than the minimum relay fee. + Peňaženka zabráni zaplateniu menšej sumy ako je minimálny poplatok. + + + This is the minimum transaction fee you pay on every transaction. + Toto je minimálny poplatok za transakciu pri každej transakcii. + + + This is the transaction fee you will pay if you send a transaction. + Toto je poplatok za transakciu pri odoslaní transakcie. + + Threshold for disconnecting misbehaving peers (default: %u) Hranica pre odpájanie zle sa správajúcim partnerským uzlom (predvolené: %u) @@ -3571,6 +3727,10 @@ Sumy transakcií nesmú byť záporné + Transaction must have at least one recipient + Transakcia musí mať aspoň jedného príjemcu + + Unknown network specified in -onlynet: '%s' Neznáma sieť upresnená v -onlynet: '%s' diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_th.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_th.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_th.ts 1970-01-01 00:00:00.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_th.ts 2017-06-18 17:25:52.000000000 +0000 @@ -0,0 +1,237 @@ + + + AddressBookPage + + Right-click to edit address or label + คลิกขวาเพื่อแก้ไขที่อยู่หรือชื่อ + + + Create a new address + สร้างที่อยู่ใหม่ + + + &New + ใหม่ + + + &Copy + คัดลอก + + + C&lose + ปิด + + + &Export + ส่งออก + + + &Delete + ลบ + + + Choose the address to send coins to + เลือกที่อยู่ที่จะส่งเหรียญ + + + Choose the address to receive coins with + เลือกที่อยู่ที่จะรับเหรียญ + + + C&hoose + เลือก + + + Sending addresses + ที่อยู่ในการส่ง + + + Receiving addresses + ที่อยู่ในการรับ + + + &Copy Address + คัดลอกที่อยู่ + + + Copy &Label + คัดลอกชื่อ + + + &Edit + แก้ไข + + + Exporting Failed + การส่งออกล้มเหลว + + + + AddressTableModel + + Address + ที่อยู่ + + + + AskPassphraseDialog + + + BanTableModel + + + BitcoinGUI + + &Sending addresses... + &ที่อยู่ในการส่ง... + + + &Receiving addresses... + &ที่อยู่ในการรับ... + + + + CoinControlDialog + + + EditAddressDialog + + &Address + &ที่อยู่ + + + + FreespaceChecker + + + GuiNetWatch + + + HelpMessageDialog + + + Intro + + + MempoolStats + + + ModalOverlay + + + NetWatchLogModel + + Address + NetWatch: Address header + ที่อยู่ + + + + OpenURIDialog + + + OptionsDialog + + + OverviewPage + + + PaymentServer + + + PeerTableModel + + + QObject + + + QObject::QObject + + + QRImageWidget + + + RPCConsole + + + ReceiveCoinsDialog + + + ReceiveRequestDialog + + Copy &Address + คัดลอกที่อยู่ + + + Address + ที่อยู่ + + + + RecentRequestsTableModel + + + SendCoinsDialog + + Choose... + เลือก... + + + + SendCoinsEntry + + + SendConfirmationDialog + + + ShutdownWindow + + + SignVerifyMessageDialog + + + SplashScreen + + + TrafficGraphWidget + + + TransactionDesc + + + TransactionDescDialog + + + TransactionTableModel + + + TransactionView + + Address + ที่อยู่ + + + Exporting Failed + การส่งออกล้มเหลว + + + + UnitDisplayStatusBarControl + + + WalletFrame + + + WalletModel + + + WalletView + + &Export + ส่งออก + + + + bitcoin-core + + \ No newline at end of file diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_tr.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_tr.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_tr.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_tr.ts 2017-06-18 17:25:52.000000000 +0000 @@ -3218,6 +3218,10 @@ Uyarı: Ağ eşlerimizle tamamen anlaşamamışız gibi görünüyor! Güncelleme yapmanız gerekebilir ya da diğer düğümlerin güncelleme yapmaları gerekebilir. + Whitelist peers using the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. + Beyaz listeye eklenen eşler verilen IP adresinden (ör. 1.2.3.4) veya CIDR ağından (ör. 1.2.3.0/24) bağlanabilir. Değerler birden çok kez kullanılabilir. + + You need to rebuild the database using -reindex-chainstate to change -txindex -txindex'i değiştirmek için veritabanını -reindex-chainstate kullanarak tekrar inşa etmeniz gerekmektedir @@ -3798,10 +3802,6 @@ Uyarı: wallet.dat bozuk, veriler geri kazanıldı! Özgün %s, %s olarak %s klasörüne kaydedildi; bakiyeniz ya da işlemleriniz yanlışsa bir yedeklemeden tekrar yüklemeniz gerekir. - Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. - Beyaz listeye eklenen eşler verilen IP adresinden (ör. 1.2.3.4) veya CIDR ağından (ör. 1.2.3.0/24) bağlanabilir. Değerler birden çok kez kullanılabilir. - - %s is set very high! %s çok yüksek ayarlanmış! diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_uk.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_uk.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_uk.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_uk.ts 2017-06-18 17:25:52.000000000 +0000 @@ -43,23 +43,23 @@ Choose the address to send coins to - Виберіть адресу для відправлення монет + Оберіть адресу для відправки монет Choose the address to receive coins with - Виберіть адресу для отримання монет + Оберіть адресу для отримання монет C&hoose - &Обрати + О&брати Sending addresses - Адреси для відправлення + Адреса відправлення Receiving addresses - Адреси для отримання + Адреса отримання These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. @@ -75,7 +75,7 @@ Copy &Label - Скопіювати &мітку + Зкопіювати&Створити мітку &Edit @@ -83,26 +83,26 @@ Export Address List - Експортувати список адрес + Експотувати список адрес Comma separated file (*.csv) - Значення, розділені комою (*.csv) + Файли (*.csv) розділеі комами Exporting Failed - Помилка експорту + Експортування пройшло не успішно There was an error trying to save the address list to %1. Please try again. - Виникла помилка при спробі зберігання адрес до %1. Будь ласка спробуйте ще. + Виникла помилка при спрбі збереження списку адрес %1. Будь-ласка, спробувати пізніше. AddressTableModel Label - Назва + Мітка Address @@ -110,7 +110,7 @@ (no label) - (немає назви) + (немає мітки) @@ -644,7 +644,7 @@ (no label) - (немає назви) + немає мітки change from %1 (%2) @@ -1785,7 +1785,7 @@ Label - Назва + Мітка Message @@ -1808,7 +1808,7 @@ Label - Назва + Мітка Message @@ -1816,7 +1816,7 @@ (no label) - (немає назви) + немає мітки (no message) @@ -2067,7 +2067,7 @@ (no label) - (немає назви) + немає мітки @@ -2478,7 +2478,7 @@ Label - Назва + Мітка Open for %n more block(s) @@ -2550,7 +2550,7 @@ (no label) - (немає назви) + немає мітки Transaction status. Hover over this field to show number of confirmations. @@ -2669,7 +2669,7 @@ Comma separated file (*.csv) - Значення, розділені комою (*.csv) + Файли (*.csv) розділеі комами Confirmed @@ -2689,7 +2689,7 @@ Label - Назва + Мітка Address @@ -2701,7 +2701,7 @@ Exporting Failed - Помилка експорту + Експортування пройшло не успішно There was an error trying to save the transaction history to %1. diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_ur_PK.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_ur_PK.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_ur_PK.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_ur_PK.ts 2017-06-18 17:25:52.000000000 +0000 @@ -47,7 +47,7 @@ Choose the address to receive coins with - کوئین بھیجنے والے کا پتہ + کوئین وصول کرنے والے کا پتہ C&hoose diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_vi_VN.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_vi_VN.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_vi_VN.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_vi_VN.ts 2017-06-18 17:25:52.000000000 +0000 @@ -43,7 +43,7 @@ Choose the address to send coins to - Chọn địa chỉ để gửi coin tới + Chọn địa chỉ để gửi coin đến Choose the address to receive coins with @@ -51,11 +51,11 @@ C&hoose - C&họn + Chọn Sending addresses - Địa chỉ gửi + Địa chỉ gửi đến Receiving addresses diff -Nru bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_zh_TW.ts bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_zh_TW.ts --- bitcoin-0.14.1.knots20170420/src/qt/locale/bitcoin_zh_TW.ts 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/locale/bitcoin_zh_TW.ts 2017-06-18 17:25:52.000000000 +0000 @@ -3224,6 +3224,10 @@ 警告: 我們和某些連線的節點對於區塊鏈結的決定不同!你可能需要升級,或是需要等其它的節點升級。 + Whitelist peers using the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. + 把來自指定位址(例如:1.2.3.4)或 CIDR 格式網段(例如:1.2.3.0/24)的節點放進白名單。這個選項可以設定多次。 + + You need to rebuild the database using -reindex-chainstate to change -txindex 改變 -txindex 參數後,必須要用 -reindex-chainstate 參數來重建資料庫 @@ -3804,10 +3808,6 @@ 警告: 錢包檔壞掉,但資料被救回來了!原來的檔案 %s 改儲存為 %s,在目錄 %s 下。 如果餘額或交易資料有誤的話,你應該要從備份資料復原回來。 - Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. - 把來自指定位址(例如:1.2.3.4)或 CIDR 格式網段(例如:1.2.3.0/24)的節點放進白名單。這個選項可以設定多次。 - - %s is set very high! %s 的設定值異常大! diff -Nru bitcoin-0.14.1.knots20170420/src/qt/sendcoinsdialog.cpp bitcoin-0.14.2.knots20170618/src/qt/sendcoinsdialog.cpp --- bitcoin-0.14.1.knots20170420/src/qt/sendcoinsdialog.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/qt/sendcoinsdialog.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -114,7 +114,6 @@ ui->groupCustomFee->button((int)std::max(0, std::min(1, settings.value("nCustomFeeRadio").toInt())))->setChecked(true); ui->customFee->setValue(settings.value("nTransactionFee").toLongLong()); ui->checkBoxMinimumFee->setChecked(settings.value("fPayOnlyMinFee").toBool()); - ui->optInRBF->setCheckState(model->getDefaultWalletRbf() ? Qt::Checked : Qt::Unchecked); minimizeFeeSection(settings.value("fFeeSectionMinimized").toBool()); } @@ -175,6 +174,9 @@ updateSmartFeeLabel(); updateGlobalFeeVariables(); + // set default rbf checkbox state + ui->optInRBF->setCheckState(model->getDefaultWalletRbf() ? Qt::Checked : Qt::Unchecked); + // set the smartfee-sliders default value (wallets default conf.target or last stored value) QSettings settings; if (settings.value("nSmartFeeSliderPosition").toInt() == 0) diff -Nru bitcoin-0.14.1.knots20170420/src/rpc/blockchain.cpp bitcoin-0.14.2.knots20170618/src/rpc/blockchain.cpp --- bitcoin-0.14.1.knots20170420/src/rpc/blockchain.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/rpc/blockchain.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -726,26 +726,11 @@ "}\n" "\nResult (for verbosity = 2):\n" "{\n" - " \"hash\" : \"hash\", (string) the block hash (same as provided)\n" - " \"confirmations\" : n, (numeric) The number of confirmations, or -1 if the block is not on the main chain\n" - " \"size\" : n, (numeric) The block size\n" - " \"strippedsize\" : n, (numeric) The block size excluding witness data\n" - " \"weight\" : n (numeric) The block weight (BIP 141)\n" - " \"height\" : n, (numeric) The block height or index\n" - " \"version\" : n, (numeric) The block version\n" - " \"versionHex\" : \"00000000\", (string) The block version formatted in hexadecimal\n" - " \"merkleroot\" : \"xxxx\", (string) The merkle root\n" - " \"tx\" : [ (array of Objects) The transactions in the format of the getrawtransaction RPC.\n" + " ..., Same output as verbosity = 1.\n" + " \"tx\" : [ (array of Objects) The transactions in the format of the getrawtransaction RPC. Different from verbosity = 1 \"tx\" result.\n" " ,...\n" " ],\n" - " \"time\" : ttt, (numeric) The block time in seconds since epoch (Jan 1 1970 GMT)\n" - " \"mediantime\" : ttt, (numeric) The median block time in seconds since epoch (Jan 1 1970 GMT)\n" - " \"nonce\" : n, (numeric) The nonce\n" - " \"bits\" : \"1d00ffff\", (string) The bits\n" - " \"difficulty\" : x.xxx, (numeric) The difficulty\n" - " \"chainwork\" : \"xxxx\", (string) Expected number of hashes required to produce the chain up to this block (in hex)\n" - " \"previousblockhash\" : \"hash\", (string) The hash of the previous block\n" - " \"nextblockhash\" : \"hash\" (string) The hash of the next block\n" + " ,... Same output as verbosity = 1.\n" "}\n" "\nExamples:\n" + HelpExampleCli("getblock", "\"00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09\"") @@ -772,10 +757,15 @@ CBlockIndex* pblockindex = mapBlockIndex[hash]; if (fHavePruned && !(pblockindex->nStatus & BLOCK_HAVE_DATA) && pblockindex->nTx > 0) - throw JSONRPCError(RPC_INTERNAL_ERROR, "Block not available (pruned data)"); + throw JSONRPCError(RPC_MISC_ERROR, "Block not available (pruned data)"); - if(!ReadBlockFromDisk(block, pblockindex, Params().GetConsensus())) - throw JSONRPCError(RPC_INTERNAL_ERROR, "Can't read block from disk"); + if (!ReadBlockFromDisk(block, pblockindex, Params().GetConsensus())) + // Block not found on disk. This could be because we have the block + // header in our index but don't have the block (for example if a + // non-whitelisted node sends us an unrequested long chain of valid + // blocks, we add the headers to our index, but don't accept the + // block). + throw JSONRPCError(RPC_MISC_ERROR, "Block not found on disk"); if (verbosity <= 0) { @@ -857,7 +847,7 @@ + HelpExampleRpc("pruneblockchain", "1000")); if (!fPruneMode) - throw JSONRPCError(RPC_METHOD_NOT_FOUND, "Cannot prune blocks because node is not in prune mode."); + throw JSONRPCError(RPC_MISC_ERROR, "Cannot prune blocks because node is not in prune mode."); LOCK(cs_main); @@ -875,7 +865,7 @@ // Add a 2 hour buffer to include blocks which might have had old timestamps CBlockIndex* pindex = chainActive.FindEarliestAtLeast(heightParam - 7200); if (!pindex) { - throw JSONRPCError(RPC_INTERNAL_ERROR, "Could not find block with at least the specified timestamp."); + throw JSONRPCError(RPC_INVALID_PARAMETER, "Could not find block with at least the specified timestamp."); } heightParam = pindex->nHeight; } @@ -883,7 +873,7 @@ unsigned int height = (unsigned int) heightParam; unsigned int chainHeight = (unsigned int) chainActive.Height(); if (chainHeight < Params().PruneAfterHeight()) - throw JSONRPCError(RPC_INTERNAL_ERROR, "Blockchain is too short for pruning."); + throw JSONRPCError(RPC_MISC_ERROR, "Blockchain is too short for pruning."); else if (height > chainHeight) throw JSONRPCError(RPC_INVALID_PARAMETER, "Blockchain is shorter than the attempted prune height."); else if (height > chainHeight - MIN_BLOCKS_TO_KEEP) { diff -Nru bitcoin-0.14.1.knots20170420/src/rpc/mining.cpp bitcoin-0.14.2.knots20170618/src/rpc/mining.cpp --- bitcoin-0.14.1.knots20170420/src/rpc/mining.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/rpc/mining.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -561,8 +561,7 @@ UpdateTime(pblock, consensusParams, pindexPrev); pblock->nNonce = 0; - // NOTE: If at some point we support pre-segwit miners post-segwit-activation, this needs to take segwit support into consideration - const bool fPreSegWit = (THRESHOLD_ACTIVE != VersionBitsState(pindexPrev, consensusParams, Consensus::DEPLOYMENT_SEGWIT, versionbitscache)); + const bool fPreSegWit = !(fSupportsSegwit && THRESHOLD_ACTIVE == VersionBitsState(pindexPrev, consensusParams, Consensus::DEPLOYMENT_SEGWIT, versionbitscache)); UniValue aCaps(UniValue::VARR); aCaps.push_back("proposal"); diff -Nru bitcoin-0.14.1.knots20170420/src/rpc/misc.cpp bitcoin-0.14.2.knots20170618/src/rpc/misc.cpp --- bitcoin-0.14.1.knots20170420/src/rpc/misc.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/rpc/misc.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -328,7 +328,7 @@ "Public keys can be sorted according to BIP67 during the request if required.\n" "\nArguments:\n" - "1. nrequired (numeric, required) The number of required signatures out of the n keys or addresses.\n" + "1. nrequired (numeric, required) The number of required signatures out of the n keys or addresses.\n" "2. \"keys\" (string, required) A json array of keys which are bitcoin addresses or hex-encoded public keys\n" " [\n" " \"key\" (string) bitcoin address or hex-encoded public key\n" diff -Nru bitcoin-0.14.1.knots20170420/src/rpc/net.cpp bitcoin-0.14.2.knots20170618/src/rpc/net.cpp --- bitcoin-0.14.1.knots20170420/src/rpc/net.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/rpc/net.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -526,7 +526,7 @@ LookupSubNet(request.params[0].get_str().c_str(), subNet); if (! (isSubnet ? subNet.IsValid() : netAddr.IsValid()) ) - throw JSONRPCError(RPC_CLIENT_NODE_ALREADY_ADDED, "Error: Invalid IP/Subnet"); + throw JSONRPCError(RPC_CLIENT_INVALID_IP_OR_SUBNET, "Error: Invalid IP/Subnet"); if (strCommand == "add") { @@ -546,7 +546,7 @@ else if(strCommand == "remove") { if (!( isSubnet ? g_connman->Unban(subNet) : g_connman->Unban(netAddr) )) - throw JSONRPCError(RPC_MISC_ERROR, "Error: Unban failed"); + throw JSONRPCError(RPC_CLIENT_INVALID_IP_OR_SUBNET, "Error: Unban failed. Requested address/subnet was not previously banned."); } return NullUniValue; } @@ -565,9 +565,6 @@ if(!g_connman) throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled"); - // Sweep the ban list so we don't display expired ban entries - g_connman->SweepBanned(); - banmap_t banMap; g_connman->GetBanned(banMap); diff -Nru bitcoin-0.14.1.knots20170420/src/rpc/rawtransaction.cpp bitcoin-0.14.2.knots20170618/src/rpc/rawtransaction.cpp --- bitcoin-0.14.1.knots20170420/src/rpc/rawtransaction.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/rpc/rawtransaction.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -128,12 +128,15 @@ UniValue getrawtransaction(const JSONRPCRequest& request) { - if (request.fHelp || request.params.size() < 1 || request.params.size() > 2) + if (request.fHelp || request.params.size() < 1 || request.params.size() > 3) throw runtime_error( - "getrawtransaction \"txid\" ( verbose )\n" + "getrawtransaction \"txid\" ( verbose \"blockhash\" )\n" "\nNOTE: By default this function only works for mempool transactions. If the -txindex option is\n" - "enabled, it also works for blockchain transactions.\n" + "enabled, it also works for blockchain transactions. If the block which contains the transaction\n" + "is known, its hash can be provided even for nodes without -txindex. Note that if a blockhash is\n" + "provided, only that block will be searched and if the transaction is in the mempool or other\n" + "blocks, or if this node does not have the given block available, the transaction will not be found.\n" "DEPRECATED: for now, it also works for transactions with unspent outputs.\n" "\nReturn the raw transaction data.\n" @@ -143,12 +146,14 @@ "\nArguments:\n" "1. \"txid\" (string, required) The transaction id\n" "2. verbose (bool, optional, default=false) If false, return a string, otherwise return a json object\n" + "3. \"blockhash\" (string, optional) The block in which to look for the transaction\n" "\nResult (if verbose is not set or set to false):\n" "\"data\" (string) The serialized, hex-encoded data for 'txid'\n" "\nResult (if verbose is set to true):\n" "{\n" + " \"inMainChain\": b, (bool) Whether specified block is in the main chain or not (only present with explicit \"blockhash\" argument)\n" " \"hex\" : \"data\", (string) The serialized, hex-encoded data for 'txid'\n" " \"txid\" : \"id\", (string) The transaction id (same as provided)\n" " \"hash\" : \"id\", (string) The transaction hash (differs from txid for witness transactions)\n" @@ -196,36 +201,51 @@ + HelpExampleCli("getrawtransaction", "\"mytxid\"") + HelpExampleCli("getrawtransaction", "\"mytxid\" true") + HelpExampleRpc("getrawtransaction", "\"mytxid\", true") + + HelpExampleCli("getrawtransaction", "\"mytxid\" false \"myblockhash\"") + + HelpExampleCli("getrawtransaction", "\"mytxid\" true \"myblockhash\"") ); LOCK(cs_main); + bool inMainChain = true; uint256 hash = ParseHashV(request.params[0], "parameter 1"); + CBlockIndex* blockIndex = NULL; // Accept either a bool (true) or a num (>=1) to indicate verbose output. bool fVerbose = false; if (request.params.size() > 1) { if (request.params[1].isNum()) { - if (request.params[1].get_int() != 0) { - fVerbose = true; - } + fVerbose = (request.params[1].get_int() != 0); + } else if (!request.params[1].isNull()) { + fVerbose = (request.params[1].get_bool()); } - else if(request.params[1].isBool()) { - if(request.params[1].isTrue()) { - fVerbose = true; + } + + if (request.params.size() > 2 && !request.params[2].isNull()) { + uint256 blockHash = ParseHashV(request.params[2], "parameter 3"); + if (!blockHash.IsNull()) { + BlockMap::iterator it = mapBlockIndex.find(blockHash); + if (it == mapBlockIndex.end()) { + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Block hash not found"); } + blockIndex = it->second; + inMainChain = (chainActive[blockIndex->nHeight] == blockIndex); } - else { - throw JSONRPCError(RPC_TYPE_ERROR, "Invalid type provided. Verbose parameter must be a boolean."); - } } CTransactionRef tx; uint256 hashBlock; - if (!GetTransaction(hash, tx, Params().GetConsensus(), hashBlock, true)) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string(fTxIndex ? "No such mempool or blockchain transaction" - : "No such mempool transaction. Use -txindex to enable blockchain transaction queries") + - ". Use gettransaction for wallet transactions."); + if (!GetTransaction(hash, tx, Params().GetConsensus(), hashBlock, true, blockIndex)) { + std::string errmsg; + if (blockIndex) { + errmsg = "No such transaction found in the provided block"; + } else { + errmsg = fTxIndex + ? "No such mempool or blockchain transaction" + : "No such mempool transaction. Use -txindex to enable blockchain transaction queries"; + } + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, errmsg + ". Use gettransaction for wallet transactions."); + } string strHex = EncodeHexTx(*tx, RPCSerializationFlags()); @@ -234,6 +254,7 @@ UniValue result(UniValue::VOBJ); result.push_back(Pair("hex", strHex)); + if (blockIndex) result.push_back(Pair("inMainChain", inMainChain)); TxToJSON(*tx, hashBlock, result); return result; } @@ -599,16 +620,17 @@ } /** Pushes a JSON object for script verification or signing errors to vErrorsRet. */ -static void TxInErrorToJSON(const CTxIn& txin, const CScriptWitness& witness, UniValue& vErrorsRet, const std::string& strMessage) +static void TxInErrorToJSON(const CTxIn& txin, UniValue& vErrorsRet, const std::string& strMessage) { UniValue entry(UniValue::VOBJ); entry.push_back(Pair("txid", txin.prevout.hash.ToString())); entry.push_back(Pair("vout", (uint64_t)txin.prevout.n)); - UniValue txinwitness(UniValue::VARR); - for (unsigned int i = 0; i < witness.stack.size(); i++) { - txinwitness.push_back(HexStr(witness.stack[i].begin(), witness.stack[i].end())); + UniValue witness(UniValue::VARR); + for (unsigned int i = 0; i < txin.scriptWitness.stack.size(); i++) { + witness.push_back(HexStr(txin.scriptWitness.stack[i].begin(), txin.scriptWitness.stack[i].end())); } - entry.push_back(Pair("txinwitness", txinwitness)); + entry.push_back(Pair("txinwitness", witness)); + entry.push_back(Pair("witness", witness)); entry.push_back(Pair("scriptSig", HexStr(txin.scriptSig.begin(), txin.scriptSig.end()))); entry.push_back(Pair("sequence", (uint64_t)txin.nSequence)); entry.push_back(Pair("error", strMessage)); @@ -849,7 +871,7 @@ CTxIn& txin = mergedTx.vin[i]; const CCoins* coins = view.AccessCoins(txin.prevout.hash); if (coins == NULL || !coins->IsAvailable(txin.prevout.n)) { - TxInErrorToJSON(txin, txin.scriptWitness, vErrors, "Input not found or already spent"); + TxInErrorToJSON(txin, vErrors, "Input not found or already spent"); continue; } const CScript& prevPubKey = coins->vout[txin.prevout.n].scriptPubKey; @@ -871,7 +893,7 @@ ScriptError serror = SCRIPT_ERR_OK; if (!VerifyScript(txin.scriptSig, prevPubKey, &txin.scriptWitness, STANDARD_SCRIPT_VERIFY_FLAGS, TransactionSignatureChecker(&txConst, i, amount), &serror)) { - TxInErrorToJSON(txin, txin.scriptWitness, vErrors, ScriptErrorString(serror)); + TxInErrorToJSON(txin, vErrors, ScriptErrorString(serror)); } } bool fComplete = vErrors.empty(); @@ -972,7 +994,7 @@ static const CRPCCommand commands[] = { // category name actor (function) okSafeMode // --------------------- ------------------------ ----------------------- ---------- - { "rawtransactions", "getrawtransaction", &getrawtransaction, true, {"txid","verbose"} }, + { "rawtransactions", "getrawtransaction", &getrawtransaction, true, {"txid","verbose","blockhash"} }, { "rawtransactions", "createrawtransaction", &createrawtransaction, true, {"inputs","outputs","locktime"} }, { "rawtransactions", "decoderawtransaction", &decoderawtransaction, true, {"hexstring"} }, { "rawtransactions", "decodescript", &decodescript, true, {"hexstring"} }, diff -Nru bitcoin-0.14.1.knots20170420/src/streams.h bitcoin-0.14.2.knots20170618/src/streams.h --- bitcoin-0.14.1.knots20170420/src/streams.h 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/streams.h 2017-06-18 17:25:52.000000000 +0000 @@ -248,7 +248,8 @@ void insert(iterator it, std::vector::const_iterator first, std::vector::const_iterator last) { - assert(last - first >= 0); + if (last == first) return; + assert(last - first > 0); if (it == vch.begin() + nReadPos && (unsigned int)(last - first) <= nReadPos) { // special case for inserting at the front when there's room @@ -261,7 +262,8 @@ void insert(iterator it, const char* first, const char* last) { - assert(last - first >= 0); + if (last == first) return; + assert(last - first > 0); if (it == vch.begin() + nReadPos && (unsigned int)(last - first) <= nReadPos) { // special case for inserting at the front when there's room @@ -339,6 +341,8 @@ void read(char* pch, size_t nSize) { + if (nSize == 0) return; + // Read from the beginning of the buffer unsigned int nReadPosNext = nReadPos + nSize; if (nReadPosNext >= vch.size()) diff -Nru bitcoin-0.14.1.knots20170420/src/support/cleanse.h bitcoin-0.14.2.knots20170618/src/support/cleanse.h --- bitcoin-0.14.1.knots20170420/src/support/cleanse.h 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/support/cleanse.h 2017-06-18 17:25:52.000000000 +0000 @@ -8,6 +8,7 @@ #include +// Attempt to overwrite data in the specified memory span. void memory_cleanse(void *ptr, size_t len); #endif // BITCOIN_SUPPORT_CLEANSE_H diff -Nru bitcoin-0.14.1.knots20170420/src/txdb.cpp bitcoin-0.14.2.knots20170618/src/txdb.cpp --- bitcoin-0.14.1.knots20170420/src/txdb.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/txdb.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -98,7 +98,11 @@ that restriction. */ i->pcursor->Seek(DB_COINS); // Cache key of first record - i->pcursor->GetKey(i->keyTmp); + if (i->pcursor->Valid()) { + i->pcursor->GetKey(i->keyTmp); + } else { + i->keyTmp.first = 0; // Make sure Valid() and GetKey() return false + } return i; } diff -Nru bitcoin-0.14.1.knots20170420/src/validation.cpp bitcoin-0.14.2.knots20170618/src/validation.cpp --- bitcoin-0.14.1.knots20170420/src/validation.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/validation.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -34,6 +34,7 @@ #include "utilioprio.h" #include "utilmoneystr.h" #include "utilstrencodings.h" +#include "utiltime.h" #include "validationinterface.h" #include "versionbits.h" #include "warnings.h" @@ -1229,50 +1230,51 @@ } /** Return transaction in txOut, and if it was found inside a block, its hash is placed in hashBlock */ -bool GetTransaction(const uint256 &hash, CTransactionRef &txOut, const Consensus::Params& consensusParams, uint256 &hashBlock, bool fAllowSlow) +bool GetTransaction(const uint256 &hash, CTransactionRef &txOut, const Consensus::Params& consensusParams, uint256 &hashBlock, bool fAllowSlow, CBlockIndex* blockIndex) { - CBlockIndex *pindexSlow = NULL; + CBlockIndex* pindexSlow = blockIndex; LOCK(cs_main); - CTransactionRef ptx = mempool.get(hash); - if (ptx) - { - txOut = ptx; - return true; - } - - if (fTxIndex) { - CDiskTxPos postx; - if (pblocktree->ReadTxIndex(hash, postx)) { - CAutoFile file(OpenBlockFile(postx, true), SER_DISK, CLIENT_VERSION); - if (file.IsNull()) - return error("%s: OpenBlockFile failed", __func__); - CBlockHeader header; - try { - file >> header; - fseek(file.Get(), postx.nTxOffset, SEEK_CUR); - file >> txOut; - } catch (const std::exception& e) { - return error("%s: Deserialize or I/O error - %s", __func__, e.what()); - } - hashBlock = header.GetHash(); - if (txOut->GetHash() != hash) - return error("%s: txid mismatch", __func__); + if (!blockIndex) { + CTransactionRef ptx = mempool.get(hash); + if (ptx) { + txOut = ptx; return true; } - } - if (fAllowSlow) { // use coin database to locate block that contains transaction, and scan it - int nHeight = -1; - { - const CCoinsViewCache& view = *pcoinsTip; - const CCoins* coins = view.AccessCoins(hash); - if (coins) - nHeight = coins->nHeight; + if (fTxIndex) { + CDiskTxPos postx; + if (pblocktree->ReadTxIndex(hash, postx)) { + CAutoFile file(OpenBlockFile(postx, true), SER_DISK, CLIENT_VERSION); + if (file.IsNull()) + return error("%s: OpenBlockFile failed", __func__); + CBlockHeader header; + try { + file >> header; + fseek(file.Get(), postx.nTxOffset, SEEK_CUR); + file >> txOut; + } catch (const std::exception& e) { + return error("%s: Deserialize or I/O error - %s", __func__, e.what()); + } + hashBlock = header.GetHash(); + if (txOut->GetHash() != hash) + return error("%s: txid mismatch", __func__); + return true; + } + } + + if (fAllowSlow) { // use coin database to locate block that contains transaction, and scan it + int nHeight = -1; + { + const CCoinsViewCache& view = *pcoinsTip; + const CCoins* coins = view.AccessCoins(hash); + if (coins) + nHeight = coins->nHeight; + } + if (nHeight > 0) + pindexSlow = chainActive[nHeight]; } - if (nHeight > 0) - pindexSlow = chainActive[nHeight]; } if (pindexSlow) { @@ -2049,6 +2051,13 @@ flags |= SCRIPT_VERIFY_NULLDUMMY; } + if (GetBoolArg("-bip148", DEFAULT_BIP148)) { + // BIP148 mandatory segwit signalling. + if (!CheckBIP148(pindex, chainparams.GetConsensus())) { + return state.DoS(0, error("ConnectBlock(): relayed block must signal for segwit, please upgrade"), REJECT_INVALID, "bad-no-segwit"); + } + } + int64_t nTime2 = GetTimeMicros(); nTimeForks += nTime2 - nTime1; LogPrint("bench", " - Fork checks: %.2fms [%.2fs]\n", 0.001 * (nTime2 - nTime1), nTimeForks * 0.000001); @@ -2681,6 +2690,7 @@ CBlockIndex *pindexMostWork = NULL; CBlockIndex *pindexNewTip = NULL; + int nStopAtHeight = GetArg("-stopatheight", DEFAULT_STOPATHEIGHT); do { boost::this_thread::interruption_point(); if (ShutdownRequested()) @@ -2744,6 +2754,8 @@ if (pindexFork != pindexNewTip) { uiInterface.NotifyBlockTip(fInitialDownload, pindexNewTip); } + + if (nStopAtHeight && pindexNewTip && pindexNewTip->nHeight >= nStopAtHeight) StartShutdown(); } while (pindexNewTip != pindexMostWork); CheckBlockIndex(chainparams.GetConsensus()); @@ -3030,12 +3042,25 @@ return true; } +bool IsThisSoftwareExpired(int64_t nTime) +{ + int64_t nSoftwareExpiry = GetArg("-softwareexpiry", DEFAULT_SOFTWARE_EXPIRY); + if (nSoftwareExpiry <= 0) { + nSoftwareExpiry = std::numeric_limits::max(); + } + return (nTime > nSoftwareExpiry); +} + bool CheckBlockHeader(const CBlockHeader& block, CValidationState& state, const Consensus::Params& consensusParams, bool fCheckPOW) { // Check proof of work matches claimed amount if (fCheckPOW && !CheckProofOfWork(block.GetHash(), block.nBits, consensusParams)) return state.DoS(50, false, REJECT_INVALID, "high-hash", false, "proof of work failed"); + if (IsThisSoftwareExpired(block.nTime)) { + return state.DoS(0, false, REJECT_INVALID, "node-expired", true, "node software has expired"); + } + return true; } @@ -3122,6 +3147,29 @@ return (VersionBitsState(pindexPrev, params, Consensus::DEPLOYMENT_SEGWIT, versionbitscache) == THRESHOLD_ACTIVE); } +bool IsWitnessLockedIn(const CBlockIndex* pindexPrev, const Consensus::Params& params) +{ + LOCK(cs_main); + return (VersionBitsState(pindexPrev, params, Consensus::DEPLOYMENT_SEGWIT, versionbitscache) == THRESHOLD_LOCKED_IN); +} + +bool CheckBIP148(const CBlockIndex* pindex, const Consensus::Params& params) +{ + int64_t nMedianTimePast = pindex->GetMedianTimePast(); + if ( (nMedianTimePast >= 1501545600) && // Tue 01 Aug 2017 00:00:00 UTC + (nMedianTimePast <= 1510704000) && // Wed 15 Nov 2017 00:00:00 UTC + (!IsWitnessLockedIn(pindex->pprev, params) && // Segwit is not locked in + !IsWitnessEnabled(pindex->pprev, params)) ) // and is not active. + { + bool fVersionBits = (pindex->nVersion & VERSIONBITS_TOP_MASK) == VERSIONBITS_TOP_BITS; + bool fSegbit = (pindex->nVersion & VersionBitsMask(params, Consensus::DEPLOYMENT_SEGWIT)) != 0; + if (!(fVersionBits && fSegbit)) { + return false; + } + } + return true; +} + // Compute at which vout of the block's coinbase transaction the witness // commitment occurs, or -1 if not found. static int GetWitnessCommitmentIndex(const CBlock& block) @@ -3910,10 +3958,14 @@ LOCK(cs_main); int nHeight = 1; + bool fCheckBIP148 = GetBoolArg("-bip148", DEFAULT_BIP148); while (nHeight <= chainActive.Height()) { if (IsWitnessEnabled(chainActive[nHeight - 1], params.GetConsensus()) && !(chainActive[nHeight]->nStatus & BLOCK_OPT_WITNESS)) { break; } + if (fCheckBIP148 && !CheckBIP148(chainActive[nHeight], params.GetConsensus())) { + break; + } nHeight++; } diff -Nru bitcoin-0.14.1.knots20170420/src/validation.h bitcoin-0.14.2.knots20170618/src/validation.h --- bitcoin-0.14.1.knots20170420/src/validation.h 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/validation.h 2017-06-18 17:25:52.000000000 +0000 @@ -77,6 +77,8 @@ static const unsigned int BLOCKFILE_CHUNK_SIZE = 0x1000000; // 16 MiB /** The pre-allocation chunk size for rev?????.dat files (since 0.8) */ static const unsigned int UNDOFILE_CHUNK_SIZE = 0x100000; // 1 MiB +/** Default for -bip148 enforcement */ +static const unsigned int DEFAULT_BIP148 = false; /** Maximum number of script-checking threads allowed */ static const int MAX_SCRIPTCHECK_THREADS = 16; @@ -145,11 +147,11 @@ /** Maximum number of headers to announce when relaying blocks with headers message.*/ static const unsigned int MAX_BLOCKS_TO_ANNOUNCE = 8; -/** Maximum number of unconnecting headers announcements before DoS score */ -static const int MAX_UNCONNECTING_HEADERS = 10; - static const bool DEFAULT_PEERBLOOMFILTERS = true; +/** Default for -stopatheight */ +static const int DEFAULT_STOPATHEIGHT = 0; + struct BlockHasher { size_t operator()(const uint256& hash) const { return hash.GetCheapHash(); } @@ -286,7 +288,7 @@ */ std::string GetWarnings(const std::string& strFor); /** Retrieve a transaction (from memory pool, or from disk, if possible) */ -bool GetTransaction(const uint256 &hash, CTransactionRef &tx, const Consensus::Params& params, uint256 &hashBlock, bool fAllowSlow = false); +bool GetTransaction(const uint256 &hash, CTransactionRef &tx, const Consensus::Params& params, uint256 &hashBlock, bool fAllowSlow = false, CBlockIndex* blockIndex = NULL); /** Find the best known block, and make it the tip of the block chain */ bool ActivateBestChain(CValidationState& state, const CChainParams& chainparams, std::shared_ptr pblock = std::shared_ptr()); CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams); @@ -514,6 +516,8 @@ bool ReadBlockFromDisk(CBlock& block, const CDiskBlockPos& pos, const Consensus::Params& consensusParams, bool lowprio = false); bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex, const Consensus::Params& consensusParams, bool lowprio = false); +bool IsThisSoftwareExpired(int64_t nTime); + /** Functions for validating blocks and updating the block tree */ /** Context-independent validity checks */ @@ -544,6 +548,12 @@ /** Check whether witness commitments are required for block. */ bool IsWitnessEnabled(const CBlockIndex* pindexPrev, const Consensus::Params& params); +/** Check if Segregated Witness is Locked In */ +bool IsWitnessLockedIn(const CBlockIndex* pindexPrev, const Consensus::Params& params); + +/** Check if block complies with BIP148 rule; note this accepts pindex for the block, not pindexPrev! */ +bool CheckBIP148(const CBlockIndex* pindex, const Consensus::Params&); + /** When there are blocks in the active chain with missing data, rewind the chainstate and remove them from the block index */ bool RewindBlockIndex(const CChainParams& params); diff -Nru bitcoin-0.14.1.knots20170420/src/wallet/db.cpp bitcoin-0.14.2.knots20170618/src/wallet/db.cpp --- bitcoin-0.14.1.knots20170420/src/wallet/db.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/wallet/db.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -145,7 +145,7 @@ fMockDb = true; } -CDBEnv::VerifyResult CDBEnv::Verify(const std::string& strFile, bool (*recoverFunc)(CDBEnv& dbenv, const std::string& strFile)) +CDBEnv::VerifyResult CDBEnv::Verify(const std::string& strFile, recoverFunc_type recoverFunc, std::string& out_backup_filename) { LOCK(cs_db); assert(mapFileUseCount.count(strFile) == 0); @@ -158,7 +158,7 @@ return RECOVER_FAIL; // Try to recover: - bool fRecovered = (*recoverFunc)(*this, strFile); + bool fRecovered = (*recoverFunc)(*this, strFile, out_backup_filename); return (fRecovered ? RECOVER_OK : RECOVER_FAIL); } diff -Nru bitcoin-0.14.1.knots20170420/src/wallet/db.h bitcoin-0.14.2.knots20170618/src/wallet/db.h --- bitcoin-0.14.1.knots20170420/src/wallet/db.h 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/wallet/db.h 2017-06-18 17:25:52.000000000 +0000 @@ -56,7 +56,8 @@ enum VerifyResult { VERIFY_OK, RECOVER_OK, RECOVER_FAIL }; - VerifyResult Verify(const std::string& strFile, bool (*recoverFunc)(CDBEnv& dbenv, const std::string& strFile)); + typedef bool (*recoverFunc_type)(CDBEnv& dbenv, const std::string& strFile, std::string& out_backup_filename); + VerifyResult Verify(const std::string& strFile, recoverFunc_type recoverFunc, std::string& out_backup_filename); /** * Salvage data from a file that Verify says is bad. * fAggressive sets the DB_AGGRESSIVE flag (see berkeley DB->verify() method documentation). @@ -126,22 +127,23 @@ Dbt datValue; datValue.set_flags(DB_DBT_MALLOC); int ret = pdb->get(activeTxn, &datKey, &datValue, 0); - memset(datKey.get_data(), 0, datKey.get_size()); - if (datValue.get_data() == NULL) - return false; - - // Unserialize value - try { - CDataStream ssValue((char*)datValue.get_data(), (char*)datValue.get_data() + datValue.get_size(), SER_DISK, CLIENT_VERSION); - ssValue >> value; - } catch (const std::exception&) { - return false; + memory_cleanse(datKey.get_data(), datKey.get_size()); + bool success = false; + if (datValue.get_data() != NULL) { + // Unserialize value + try { + CDataStream ssValue((char*)datValue.get_data(), (char*)datValue.get_data() + datValue.get_size(), SER_DISK, CLIENT_VERSION); + ssValue >> value; + success = true; + } catch (const std::exception&) { + // In this case success remains 'false' + } + + // Clear and free memory + memory_cleanse(datValue.get_data(), datValue.get_size()); + free(datValue.get_data()); } - - // Clear and free memory - memset(datValue.get_data(), 0, datValue.get_size()); - free(datValue.get_data()); - return (ret == 0); + return ret == 0 && success; } template @@ -168,8 +170,8 @@ int ret = pdb->put(activeTxn, &datKey, &datValue, (fOverwrite ? 0 : DB_NOOVERWRITE)); // Clear memory in case it was a private key - memset(datKey.get_data(), 0, datKey.get_size()); - memset(datValue.get_data(), 0, datValue.get_size()); + memory_cleanse(datKey.get_data(), datKey.get_size()); + memory_cleanse(datValue.get_data(), datValue.get_size()); return (ret == 0); } @@ -191,7 +193,7 @@ int ret = pdb->del(activeTxn, &datKey, 0); // Clear memory - memset(datKey.get_data(), 0, datKey.get_size()); + memory_cleanse(datKey.get_data(), datKey.get_size()); return (ret == 0 || ret == DB_NOTFOUND); } @@ -211,7 +213,7 @@ int ret = pdb->exists(activeTxn, &datKey, 0); // Clear memory - memset(datKey.get_data(), 0, datKey.get_size()); + memory_cleanse(datKey.get_data(), datKey.get_size()); return (ret == 0); } @@ -254,8 +256,8 @@ ssValue.write((char*)datValue.get_data(), datValue.get_size()); // Clear and free memory - memset(datKey.get_data(), 0, datKey.get_size()); - memset(datValue.get_data(), 0, datValue.get_size()); + memory_cleanse(datKey.get_data(), datKey.get_size()); + memory_cleanse(datValue.get_data(), datValue.get_size()); free(datKey.get_data()); free(datValue.get_data()); return 0; diff -Nru bitcoin-0.14.1.knots20170420/src/wallet/rpcdump.cpp bitcoin-0.14.2.knots20170618/src/wallet/rpcdump.cpp --- bitcoin-0.14.1.knots20170420/src/wallet/rpcdump.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/wallet/rpcdump.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -348,11 +348,11 @@ vector vHashOut; if (pwallet->ZapSelectTx(vHash, vHashOut) != DB_LOAD_OK) { - throw JSONRPCError(RPC_INTERNAL_ERROR, "Could not properly delete the transaction."); + throw JSONRPCError(RPC_WALLET_ERROR, "Could not properly delete the transaction."); } if(vHashOut.empty()) { - throw JSONRPCError(RPC_INTERNAL_ERROR, "Transaction does not exist in wallet."); + throw JSONRPCError(RPC_INVALID_PARAMETER, "Transaction does not exist in wallet."); } return NullUniValue; @@ -509,14 +509,11 @@ } file.close(); pwallet->ShowProgress("", 100); // hide progress dialog in GUI - - CBlockIndex *pindex = chainActive.Tip(); - while (pindex && pindex->pprev && pindex->GetBlockTime() > nTimeBegin - 7200) - pindex = pindex->pprev; - pwallet->UpdateTimeFirstKey(nTimeBegin); - LogPrintf("Rescanning last %i blocks\n", chainActive.Height() - pindex->nHeight + 1); + CBlockIndex *pindex = chainActive.FindEarliestAtLeast(nTimeBegin - 7200); + + LogPrintf("Rescanning last %i blocks\n", pindex ? chainActive.Height() - pindex->nHeight + 1 : 0); pwallet->ScanForWalletTransactions(pindex); pwallet->MarkDirty(); @@ -1166,44 +1163,50 @@ return NullUniValue; } - if (request.fHelp || request.params.size() > 2) - throw runtime_error( - "rescanblockchain \"start-height\" \"stop-height\"\n" - "\nRescan the local blockchain for wallet related transactions.\n" - "\nArguments:\n" - "1. \"start-height\" (number, optional) blockheight where the rescan should start\n" - "2. \"stop-height\" (number, optional) blockheight where the rescan should stop\n" - "\nExamples:\n" - + HelpExampleCli("rescanblockchain", "\"100000 120000\"") - + HelpExampleRpc("rescanblockchain", "\"100000 120000\"") - ); + if (request.fHelp || request.params.size() > 2) { + throw std::runtime_error( + "rescanblockchain (\"startheight\") (\"stopheight\")\n" + "\nRescan the local blockchain for wallet related transactions.\n" + "\nArguments:\n" + "1. \"startHeight\" (number, optional) blockheight where the rescan should start\n" + "2. \"stopHeight\" (number, optional) blockheight where the rescan should stop\n" + "\nExamples:\n" + + HelpExampleCli("rescanblockchain", "\"100000 120000\"") + + HelpExampleRpc("rescanblockchain", "\"100000 120000\"") + ); + } LOCK2(cs_main, pwallet->cs_wallet); CBlockIndex *pIndexStart = NULL; CBlockIndex *pIndexStop = NULL; - if (request.params.size() > 0 && request.params[0].isNum()) + if (request.params.size() > 0 && request.params[0].isNum()) { pIndexStart = chainActive[request.params[0].get_int()]; + } - if (request.params.size() > 1 && request.params[1].isNum()) + if (request.params.size() > 1 && request.params[1].isNum()) { pIndexStop = chainActive[request.params[1].get_int()]; + } - if (!pIndexStart) + if (!pIndexStart) { pIndexStart = chainActive.Genesis(); + } //We can't rescan beyond non-pruned blocks, stop and throw an error - if (fPruneMode) - { + if (fPruneMode) { CBlockIndex *block = chainActive.Tip(); - while (block && block->pprev && (block->pprev->nStatus & BLOCK_HAVE_DATA)) + while (block && block->pprev && (block->pprev->nStatus & BLOCK_HAVE_DATA)) { block = block->pprev; + } - if (pIndexStart->nHeight < block->nHeight) - throw JSONRPCError(RPC_WALLET_ERROR, "Can't rescan beyond pruned data."); + if (pIndexStart->nHeight < block->nHeight) { + throw JSONRPCError(RPC_WALLET_ERROR, "Can't rescan beyond pruned data. Use RPC call getblockchaininfo to determine your pruned height."); + } } - if (pwallet) + if (pwallet) { pwallet->ScanForWalletTransactions(pIndexStart, pIndexStop, true); + } return NullUniValue; } diff -Nru bitcoin-0.14.1.knots20170420/src/wallet/rpcwallet.cpp bitcoin-0.14.2.knots20170618/src/wallet/rpcwallet.cpp --- bitcoin-0.14.1.knots20170420/src/wallet/rpcwallet.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/wallet/rpcwallet.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -1205,9 +1205,9 @@ return NullUniValue; } - if (request.fHelp || request.params.size() < 2 || request.params.size() > 4) + if (request.fHelp || request.params.size() < 2 || request.params.size() > 3) { - string msg = "addmultisigaddress nrequired [\"key\",...] ( \"account\" ) ( options )\n" + std::string msg = "addmultisigaddress nrequired [\"key\",...] ( \"account\" or options )\n" "\nAdd a nrequired-to-sign multisignature address to the wallet.\n" "Each key is a Bitcoin address or hex-encoded public key.\n" "If 'account' is specified (DEPRECATED), assign address to that account.\n" @@ -1222,7 +1222,7 @@ " ]\n" "3. options (object, optional)\n" " {\n" - " \"sort\" (bool, optional, default=false) Whether to sort public keys according to BIP67.\n" + " \"sort\" (bool, optional, default=false) Whether to sort public keys according to BIP67.\n" " }\n" "\nResult:\n" @@ -1968,9 +1968,9 @@ "Additionally, if include_removed is set, transactions affecting the wallet which were removed are returned in the \"removed\" array.\n" "\nArguments:\n" "1. \"blockhash\" (string, optional) The block hash to list transactions since\n" - "2. target_confirmations: (numeric, optional) The confirmations required, must be 1 or more\n" - "3. include_watchonly: (bool, optional, default=false) Include transactions to watch-only addresses (see 'importaddress')" - "4. include_removed: (bool, optional, default=true) Show transactions that were removed due to a reorg in the \"removed\" array" + "2. target_confirmations: (numeric, optional, default=1) The confirmations required, must be 1 or more\n" + "3. include_watchonly: (bool, optional, default=false) Include transactions to watch-only addresses (see 'importaddress')\n" + "4. include_removed: (bool, optional, default=true) Show transactions that were removed due to a reorg in the \"removed\" array\n" "\nResult:\n" "{\n" " \"transactions\": [\n" @@ -2009,12 +2009,12 @@ LOCK2(cs_main, pwallet->cs_wallet); - const CBlockIndex* pindex = NULL; - const CBlockIndex* paltindex = NULL; + const CBlockIndex* pindex = NULL; // Block index of the specified block or the common ancestor, if the block provided was in a deactivated chain. + const CBlockIndex* paltindex = NULL; // Block index of the specified block, even if it's in a deactivated chain. int target_confirms = 1; isminefilter filter = ISMINE_SPENDABLE; - if (request.params.size() > 0) + if (request.params.size() > 0 && !request.params[0].isNull()) { uint256 blockId; @@ -2033,7 +2033,7 @@ } } - if (request.params.size() > 1) + if (request.params.size() > 1 && !request.params[1].isNull()) { target_confirms = request.params[1].get_int(); @@ -2041,12 +2041,12 @@ throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter"); } - if (request.params.size() > 2 && request.params[2].get_bool()) + if (request.params.size() > 2 && !request.params[2].isNull() && request.params[2].get_bool()) { filter = filter | ISMINE_WATCH_ONLY; } - bool include_removed = (request.params.size() < 4 || request.params[3].get_bool()); + bool include_removed = (request.params.size() < 4 || request.params[3].isNull() || request.params[3].get_bool()); int depth = pindex ? (1 + chainActive.Height() - pindex->nHeight) : -1; @@ -3016,7 +3016,7 @@ CBitcoinAddress address(options["changeAddress"].get_str()); if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_PARAMETER, "changeAddress must be a valid bitcoin address"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "changeAddress must be a valid bitcoin address"); coinControl.destChange = address.Get(); } @@ -3074,7 +3074,7 @@ string strFailReason; if (!pwallet->FundTransaction(tx, nFeeOut, changePosition, strFailReason, lockUnspents, setSubtractFeeFromOutputs, coinControl, reserveChangeKey)) { - throw JSONRPCError(RPC_INTERNAL_ERROR, strFailReason); + throw JSONRPCError(RPC_WALLET_ERROR, strFailReason); } UniValue result(UniValue::VOBJ); @@ -3175,33 +3175,33 @@ CWalletTx& wtx = pwallet->mapWallet[hash]; if (pwallet->HasWalletSpend(hash)) { - throw JSONRPCError(RPC_MISC_ERROR, "Transaction has descendants in the wallet"); + throw JSONRPCError(RPC_INVALID_PARAMETER, "Transaction has descendants in the wallet"); } { LOCK(mempool.cs); auto it = mempool.mapTx.find(hash); if (it != mempool.mapTx.end() && it->GetCountWithDescendants() > 1) { - throw JSONRPCError(RPC_MISC_ERROR, "Transaction has descendants in the mempool"); + throw JSONRPCError(RPC_INVALID_PARAMETER, "Transaction has descendants in the mempool"); } } if (wtx.GetDepthInMainChain() != 0) { - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Transaction has been mined, or is conflicted with a mined transaction"); + throw JSONRPCError(RPC_WALLET_ERROR, "Transaction has been mined, or is conflicted with a mined transaction"); } if (!SignalsOptInRBF(wtx)) { - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Transaction is not BIP 125 replaceable"); + throw JSONRPCError(RPC_WALLET_ERROR, "Transaction is not BIP 125 replaceable"); } if (wtx.mapValue.count("replaced_by_txid")) { - throw JSONRPCError(RPC_INVALID_REQUEST, strprintf("Cannot bump transaction %s which was already bumped by transaction %s", hash.ToString(), wtx.mapValue.at("replaced_by_txid"))); + throw JSONRPCError(RPC_WALLET_ERROR, strprintf("Cannot bump transaction %s which was already bumped by transaction %s", hash.ToString(), wtx.mapValue.at("replaced_by_txid"))); } // check that original tx consists entirely of our inputs // if not, we can't bump the fee, because the wallet has no way of knowing the value of the other inputs (thus the fee) if (!pwallet->IsAllFromMe(wtx, ISMINE_SPENDABLE)) { - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Transaction contains inputs that don't belong to this wallet"); + throw JSONRPCError(RPC_WALLET_ERROR, "Transaction contains inputs that don't belong to this wallet"); } // figure out which output was change @@ -3210,13 +3210,13 @@ for (size_t i = 0; i < wtx.tx->vout.size(); ++i) { if (pwallet->IsChange(wtx.tx->vout[i])) { if (nOutput != -1) { - throw JSONRPCError(RPC_MISC_ERROR, "Transaction has multiple change outputs"); + throw JSONRPCError(RPC_WALLET_ERROR, "Transaction has multiple change outputs"); } nOutput = i; } } if (nOutput == -1) { - throw JSONRPCError(RPC_MISC_ERROR, "Transaction does not have a change output"); + throw JSONRPCError(RPC_WALLET_ERROR, "Transaction does not have a change output"); } // Calculate the expected size of the new transaction. @@ -3307,7 +3307,7 @@ // Check that in all cases the new fee doesn't violate maxTxFee if (nNewFee > maxTxFee) { - throw JSONRPCError(RPC_MISC_ERROR, + throw JSONRPCError(RPC_WALLET_ERROR, strprintf("Specified or calculated fee %s is too high (cannot be higher than maxTxFee %s)", FormatMoney(nNewFee), FormatMoney(maxTxFee))); } @@ -3319,7 +3319,7 @@ // moment earlier. In this case, we report an error to the user, who may use totalFee to make an adjustment. CFeeRate minMempoolFeeRate = mempool.GetMinFee(GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000); if (nNewFeeRate.GetFeePerK() < minMempoolFeeRate.GetFeePerK()) { - throw JSONRPCError(RPC_MISC_ERROR, strprintf("New fee rate (%s) is less than the minimum fee rate (%s) to get into the mempool. totalFee value should to be at least %s or settxfee value should be at least %s to add transaction.", FormatMoney(nNewFeeRate.GetFeePerK()), FormatMoney(minMempoolFeeRate.GetFeePerK()), FormatMoney(minMempoolFeeRate.GetFee(maxNewTxSize)), FormatMoney(minMempoolFeeRate.GetFeePerK()))); + throw JSONRPCError(RPC_WALLET_ERROR, strprintf("New fee rate (%s) is less than the minimum fee rate (%s) to get into the mempool. totalFee value should to be at least %s or settxfee value should be at least %s to add transaction.", FormatMoney(nNewFeeRate.GetFeePerK()), FormatMoney(minMempoolFeeRate.GetFeePerK()), FormatMoney(minMempoolFeeRate.GetFee(maxNewTxSize)), FormatMoney(minMempoolFeeRate.GetFeePerK()))); } // Now modify the output to increase the fee. @@ -3329,7 +3329,7 @@ CMutableTransaction tx(*(wtx.tx)); CTxOut* poutput = &(tx.vout[nOutput]); if (poutput->nValue < nDelta) { - throw JSONRPCError(RPC_MISC_ERROR, "Change output is too small to bump the fee"); + throw JSONRPCError(RPC_WALLET_ERROR, "Change output is too small to bump the fee"); } // If the output would become dust, discard it (converting the dust to fee) @@ -3468,7 +3468,7 @@ { "wallet", "walletpassphrasechange", &walletpassphrasechange, true, {"oldpassphrase","newpassphrase"} }, { "wallet", "walletpassphrase", &walletpassphrase, true, {"passphrase","timeout"} }, { "wallet", "removeprunedfunds", &removeprunedfunds, true, {"txid"} }, - { "wallet", "rescanblockchain", &rescanblockchain, true, {"height"} }, + { "wallet", "rescanblockchain", &rescanblockchain, true, {"startheight", "stopheight"} }, }; void RegisterWalletRPCCommands(CRPCTable &t) diff -Nru bitcoin-0.14.1.knots20170420/src/wallet/test/wallet_tests.cpp bitcoin-0.14.2.knots20170618/src/wallet/test/wallet_tests.cpp --- bitcoin-0.14.1.knots20170420/src/wallet/test/wallet_tests.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/wallet/test/wallet_tests.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -18,7 +18,11 @@ #include #include +extern CWallet* pwalletMain; + extern UniValue importmulti(const JSONRPCRequest& request); +extern UniValue dumpwallet(const JSONRPCRequest& request); +extern UniValue importwallet(const JSONRPCRequest& request); // how many times to run all the tests to have a chance to catch errors that only show up with particular random shuffles #define RUN_TESTS 100 @@ -426,6 +430,64 @@ } } +// Verify importwallet RPC starts rescan at earliest block with timestamp +// greater or equal than key birthday. Previously there was a bug where +// importwallet RPC would start the scan at the latest block with timestamp less +// than or equal to key birthday. +BOOST_FIXTURE_TEST_CASE(importwallet_rescan, TestChain100Setup) +{ + LOCK(cs_main); + + // Create two blocks with same timestamp to verify that importwallet rescan + // will pick up both blocks, not just the first. + const int64_t BLOCK_TIME = chainActive.Tip()->GetBlockTimeMax() + 5; + SetMockTime(BLOCK_TIME); + coinbaseTxns.emplace_back(*CreateAndProcessBlock({}, GetScriptForRawPubKey(coinbaseKey.GetPubKey())).vtx[0]); + coinbaseTxns.emplace_back(*CreateAndProcessBlock({}, GetScriptForRawPubKey(coinbaseKey.GetPubKey())).vtx[0]); + + // Set key birthday to block time increased by the timestamp window, so + // rescan will start at the block time. + const int64_t KEY_TIME = BLOCK_TIME + 7200; + SetMockTime(KEY_TIME); + coinbaseTxns.emplace_back(*CreateAndProcessBlock({}, GetScriptForRawPubKey(coinbaseKey.GetPubKey())).vtx[0]); + + // Import key into wallet and call dumpwallet to create backup file. + { + CWallet wallet; + LOCK(wallet.cs_wallet); + wallet.mapKeyMetadata[coinbaseKey.GetPubKey().GetID()].nCreateTime = KEY_TIME; + wallet.AddKeyPubKey(coinbaseKey, coinbaseKey.GetPubKey()); + + JSONRPCRequest request; + request.params.setArray(); + request.params.push_back("wallet.backup"); + request.wallet = &wallet; + ::dumpwallet(request); + } + + // Call importwallet RPC and verify all blocks with timestamps >= BLOCK_TIME + // were scanned, and no prior blocks were scanned. + { + CWallet wallet; + + JSONRPCRequest request; + request.params.setArray(); + request.params.push_back("wallet.backup"); + request.wallet = &wallet; + ::importwallet(request); + + BOOST_CHECK_EQUAL(wallet.mapWallet.size(), 3); + BOOST_CHECK_EQUAL(coinbaseTxns.size(), 103); + for (size_t i = 0; i < coinbaseTxns.size(); ++i) { + bool found = wallet.GetWalletTx(coinbaseTxns[i].GetHash()); + bool expected = i >= 100; + BOOST_CHECK_EQUAL(found, expected); + } + } + + SetMockTime(0); +} + // Check that GetImmatureCredit() returns a newly calculated value instead of // the cached value after a MarkDirty() call. // diff -Nru bitcoin-0.14.1.knots20170420/src/wallet/wallet.cpp bitcoin-0.14.2.knots20170618/src/wallet/wallet.cpp --- bitcoin-0.14.1.knots20170420/src/wallet/wallet.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/wallet/wallet.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -455,8 +455,6 @@ LogPrintf("Using BerkeleyDB version %s\n", DbEnv::version(0, 0, 0)); - SoftSetArg("-wallet", DEFAULT_WALLET_DAT); - uiInterface.InitMessage(_("Verifying wallet...")); for (const std::string& walletFile : mapMultiArgs.at("-wallet")) { @@ -494,20 +492,22 @@ if (GetBoolArg("-salvagewallet", false)) { // Recover readable keypairs: - if (!CWalletDB::Recover(bitdb, walletFile, true)) + std::string backup_filename; + if (!CWalletDB::Recover(bitdb, walletFile, true, backup_filename)) return false; } if (boost::filesystem::exists(GetDataDir() / walletFile)) { - CDBEnv::VerifyResult r = bitdb.Verify(walletFile, CWalletDB::Recover); + std::string backup_filename; + CDBEnv::VerifyResult r = bitdb.Verify(walletFile, CWalletDB::Recover, backup_filename); if (r == CDBEnv::RECOVER_OK) { InitWarning(strprintf(_("Warning: Wallet file corrupt, data salvaged!" " Original %s saved as %s in %s; if" " your balance or transactions are incorrect you should" " restore from a backup."), - walletFile, "wallet.{timestamp}.bak", GetDataDir())); + walletFile, backup_filename, GetDataDir())); } if (r == CDBEnv::RECOVER_FAIL) return InitError(strprintf(_("%s corrupt, salvage failed"), walletFile)); @@ -1566,6 +1566,9 @@ * from or to us. If fUpdate is true, found transactions that already * exist in the wallet will be updated. * + * If pindexStop is not a nullptr, the scan will stop at the block-index + * defined by pindexStop + * * Returns pointer to the first block in the last contiguous range that was * successfully scanned. * @@ -1576,8 +1579,9 @@ int64_t nNow = GetTime(); const CChainParams& chainParams = Params(); - if (pindexStop && pindexStop->nHeight < pindexStart->nHeight) - return ret; + if (pindexStop && pindexStop->nHeight < pindexStart->nHeight) { + return nullptr; + } CBlockIndex* pindex = pindexStart; { @@ -1595,6 +1599,10 @@ { if (pindex->nHeight % 100 == 0 && dProgressTip - dProgressStart > 0.0) ShowProgress(_("Rescanning..."), std::max(1, std::min(99, (int)((GuessVerificationProgress(chainParams.TxData(), pindex) - dProgressStart) / (dProgressTip - dProgressStart) * 100)))); + if (GetTime() >= nNow + 60) { + nNow = GetTime(); + LogPrintf("Still rescanning. At block %d. Progress=%f\n", pindex->nHeight, GuessVerificationProgress(chainParams.TxData(), pindex)); + } CBlock block; if (ReadBlockFromDisk(block, pindex, Params().GetConsensus())) { @@ -1607,13 +1615,10 @@ } else { ret = nullptr; } - if (pindex == pindexStop) + if (pindex == pindexStop) { break; - pindex = chainActive.Next(pindex); - if (GetTime() >= nNow + 60) { - nNow = GetTime(); - LogPrintf("Still rescanning. At block %d. Progress=%f\n", pindex->nHeight, GuessVerificationProgress(chainParams.TxData(), pindex)); } + pindex = chainActive.Next(pindex); } ShowProgress(_("Rescanning..."), 100); // hide progress dialog in GUI } @@ -2641,9 +2646,10 @@ vector::iterator position = txNew.vout.begin()+nChangePosInOut; txNew.vout.insert(position, newTxOut); } - } - else + } else { reservekey.ReturnKey(); + nChangePosInOut = -1; + } // Fill vin // @@ -3769,7 +3775,7 @@ uiInterface.InitMessage(_("Rescanning...")); LogPrintf("Rescanning last %i blocks (from block %i)...\n", chainActive.Height() - pindexRescan->nHeight, pindexRescan->nHeight); nStart = GetTimeMillis(); - walletInstance->ScanForWalletTransactions(pindexRescan, NULL, true); + walletInstance->ScanForWalletTransactions(pindexRescan, true); LogPrintf(" rescan %15dms\n", GetTimeMillis() - nStart); walletInstance->SetBestChain(chainActive.GetLocator()); CWalletDB::IncrementUpdateCounter(walletFile); @@ -3845,6 +3851,9 @@ bool CWallet::ParameterInteraction() { + SoftSetArg("-wallet", DEFAULT_WALLET_DAT); + const bool is_multiwallet = mapMultiArgs.at("-wallet").size() > 1; + if (GetBoolArg("-disablewallet", DEFAULT_DISABLE_WALLET)) return true; @@ -3853,15 +3862,27 @@ } if (GetBoolArg("-salvagewallet", false) && SoftSetBoolArg("-rescan", true)) { + if (is_multiwallet) { + return InitError(strprintf("%s is only allowed with a single wallet file", "-salvagewallet")); + } // Rewrite just private keys: rescan to find transactions LogPrintf("%s: parameter interaction: -salvagewallet=1 -> setting -rescan=1\n", __func__); } // -zapwallettx implies a rescan if (GetBoolArg("-zapwallettxes", false) && SoftSetBoolArg("-rescan", true)) { + if (is_multiwallet) { + return InitError(strprintf("%s is only allowed with a single wallet file", "-zapwallettxes")); + } LogPrintf("%s: parameter interaction: -zapwallettxes= -> setting -rescan=1\n", __func__); } + if (is_multiwallet) { + if (GetBoolArg("-upgradewallet", false)) { + return InitError(strprintf("%s is only allowed with a single wallet file", "-upgradewallet")); + } + } + if (GetBoolArg("-sysperms", false)) return InitError("-sysperms is not allowed in combination with enabled wallet functionality"); if (GetArg("-prune", 0) && GetBoolArg("-rescan", false)) diff -Nru bitcoin-0.14.1.knots20170420/src/wallet/walletdb.cpp bitcoin-0.14.2.knots20170618/src/wallet/walletdb.cpp --- bitcoin-0.14.1.knots20170420/src/wallet/walletdb.cpp 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/wallet/walletdb.cpp 2017-06-18 17:25:52.000000000 +0000 @@ -842,17 +842,17 @@ // // Try to (very carefully!) recover wallet file if there is a problem. // -bool CWalletDB::Recover(CDBEnv& dbenv, const std::string& filename, bool fOnlyKeys) +bool CWalletDB::Recover(CDBEnv& dbenv, const std::string& filename, bool fOnlyKeys, std::string& newFilename) { // Recovery procedure: - // move wallet file to wallet.timestamp.bak + // move wallet file to walletfilename.timestamp.bak // Call Salvage with fAggressive=true to // get as much data as possible. // Rewrite salvaged data to fresh wallet file // Set -rescan so any missing transactions will be // found. int64_t now = GetTime(); - std::string newFilename = strprintf("wallet.%d.bak", now); + newFilename = strprintf("%s.%d.bak", filename, now); int result = dbenv.dbenv->dbrename(NULL, filename.c_str(), NULL, newFilename.c_str(), DB_AUTO_COMMIT); @@ -923,9 +923,9 @@ return fSuccess; } -bool CWalletDB::Recover(CDBEnv& dbenv, const std::string& filename) +bool CWalletDB::Recover(CDBEnv& dbenv, const std::string& filename, std::string& out_backup_filename) { - return CWalletDB::Recover(dbenv, filename, false); + return CWalletDB::Recover(dbenv, filename, false, out_backup_filename); } bool CWalletDB::WriteDestData(const std::string &address, const std::string &key, const std::string &value) diff -Nru bitcoin-0.14.1.knots20170420/src/wallet/walletdb.h bitcoin-0.14.2.knots20170618/src/wallet/walletdb.h --- bitcoin-0.14.1.knots20170420/src/wallet/walletdb.h 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/wallet/walletdb.h 2017-06-18 17:25:52.000000000 +0000 @@ -204,8 +204,8 @@ DBErrors FindWalletTx(CWallet* pwallet, std::vector& vTxHash, std::vector& vWtx); DBErrors ZapWalletTx(CWallet* pwallet, std::vector& vWtx); DBErrors ZapSelectTx(CWallet* pwallet, std::vector& vHashIn, std::vector& vHashOut); - static bool Recover(CDBEnv& dbenv, const std::string& filename, bool fOnlyKeys); - static bool Recover(CDBEnv& dbenv, const std::string& filename); + static bool Recover(CDBEnv& dbenv, const std::string& filename, bool fOnlyKeys, std::string& out_backup_filename); + static bool Recover(CDBEnv& dbenv, const std::string& filename, std::string& out_backup_filename); //! write the hdchain model (external chain child index counter) bool WriteHDChain(const CHDChain& chain); diff -Nru bitcoin-0.14.1.knots20170420/src/wallet/wallet.h bitcoin-0.14.2.knots20170618/src/wallet/wallet.h --- bitcoin-0.14.1.knots20170420/src/wallet/wallet.h 2017-04-20 20:24:22.000000000 +0000 +++ bitcoin-0.14.2.knots20170618/src/wallet/wallet.h 2017-06-18 17:25:52.000000000 +0000 @@ -804,7 +804,7 @@ bool AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlockIndex* pIndex, int posInBlock, bool fUpdate); CBlockIndex* ScanForWalletTransactions(CBlockIndex* pindexStart, CBlockIndex* pindexStop, bool fUpdate = false); CBlockIndex* ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate = false) { - return ScanForWalletTransactions(pindexStart, NULL, fUpdate); + return ScanForWalletTransactions(pindexStart, nullptr, fUpdate); } void ReacceptWalletTransactions(); void ResendWalletTransactions(int64_t nBestBlockTime, CConnman* connman) override;