aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bitcoin-qt.pro2
-rw-r--r--contrib/debian/control4
-rw-r--r--contrib/debian/copyright6
-rw-r--r--contrib/gitian-descriptors/gitian-win32.yml2
-rwxr-xr-xcontrib/pyminer/pyminer.py2
-rw-r--r--doc/README4
-rw-r--r--doc/README_windows.txt2
-rw-r--r--doc/Tor.txt4
-rw-r--r--doc/assets-attribution.txt4
-rw-r--r--doc/build-msw.txt2
-rw-r--r--doc/build-osx.txt2
-rw-r--r--doc/build-unix.txt2
-rw-r--r--doc/readme-qt.rst15
-rw-r--r--doc/translation_process.md2
-rw-r--r--doc/unit-tests.txt2
-rw-r--r--share/setup.nsi4
-rw-r--r--src/bignum.h2
-rw-r--r--src/bitcoinrpc.cpp27
-rw-r--r--src/db.cpp53
-rw-r--r--src/db.h3
-rw-r--r--src/init.cpp5
-rw-r--r--src/main.cpp217
-rw-r--r--src/main.h5
-rw-r--r--src/makefile.linux-mingw2
-rw-r--r--src/makefile.mingw6
-rw-r--r--src/makefile.osx2
-rw-r--r--src/makefile.unix2
-rw-r--r--src/net.cpp6
-rw-r--r--src/qt/addressbookpage.cpp2
-rw-r--r--src/qt/askpassphrasedialog.cpp2
-rw-r--r--src/qt/bitcoin.cpp16
-rw-r--r--src/qt/forms/aboutdialog.ui2
-rw-r--r--src/qt/forms/addressbookpage.ui4
-rw-r--r--src/qt/forms/rpcconsole.ui4
-rw-r--r--src/qt/guiconstants.h4
-rw-r--r--src/qt/guiutil.cpp2
-rw-r--r--src/qt/guiutil.h2
-rw-r--r--src/qt/locale/bitcoin_bg.ts2
-rw-r--r--src/qt/locale/bitcoin_ca_ES.ts2
-rw-r--r--src/qt/locale/bitcoin_cs.ts2
-rw-r--r--src/qt/locale/bitcoin_da.ts2
-rw-r--r--src/qt/locale/bitcoin_de.ts2
-rw-r--r--src/qt/locale/bitcoin_el_GR.ts2
-rw-r--r--src/qt/locale/bitcoin_en.ts612
-rw-r--r--src/qt/locale/bitcoin_es.ts2
-rw-r--r--src/qt/locale/bitcoin_es_CL.ts2
-rw-r--r--src/qt/locale/bitcoin_et.ts2
-rw-r--r--src/qt/locale/bitcoin_eu_ES.ts2
-rw-r--r--src/qt/locale/bitcoin_fa.ts2
-rw-r--r--src/qt/locale/bitcoin_fa_IR.ts2
-rw-r--r--src/qt/locale/bitcoin_fi.ts2
-rw-r--r--src/qt/locale/bitcoin_fr.ts2
-rw-r--r--src/qt/locale/bitcoin_fr_CA.ts2
-rw-r--r--src/qt/locale/bitcoin_he.ts2
-rw-r--r--src/qt/locale/bitcoin_hr.ts2
-rw-r--r--src/qt/locale/bitcoin_hu.ts2
-rw-r--r--src/qt/locale/bitcoin_it.ts2
-rw-r--r--src/qt/locale/bitcoin_lt.ts2
-rw-r--r--src/qt/locale/bitcoin_nb.ts2
-rw-r--r--src/qt/locale/bitcoin_nl.ts2
-rw-r--r--src/qt/locale/bitcoin_pl.ts2
-rw-r--r--src/qt/locale/bitcoin_pt_BR.ts2
-rw-r--r--src/qt/locale/bitcoin_pt_PT.ts2
-rw-r--r--src/qt/locale/bitcoin_ro_RO.ts2
-rw-r--r--src/qt/locale/bitcoin_ru.ts2
-rw-r--r--src/qt/locale/bitcoin_sk.ts2
-rw-r--r--src/qt/locale/bitcoin_sr.ts2
-rw-r--r--src/qt/locale/bitcoin_sv.ts2
-rw-r--r--src/qt/locale/bitcoin_tr.ts2
-rw-r--r--src/qt/locale/bitcoin_uk.ts2
-rw-r--r--src/qt/locale/bitcoin_zh_CN.ts2
-rw-r--r--src/qt/locale/bitcoin_zh_TW.ts2
-rw-r--r--src/qt/optionsdialog.cpp78
-rw-r--r--src/qt/optionsdialog.h4
-rw-r--r--src/qt/qtipcserver.cpp89
-rw-r--r--src/qt/qtipcserver.h7
-rw-r--r--src/qt/sendcoinsdialog.cpp2
-rw-r--r--src/qt/transactionview.cpp2
-rw-r--r--src/rpcrawtransaction.cpp27
-rw-r--r--src/test/miner_tests.cpp190
-rw-r--r--src/test/test_bitcoin.cpp8
-rw-r--r--src/util.cpp6
82 files changed, 1267 insertions, 253 deletions
diff --git a/bitcoin-qt.pro b/bitcoin-qt.pro
index f2d9b6f087..f432d0e4d3 100644
--- a/bitcoin-qt.pro
+++ b/bitcoin-qt.pro
@@ -279,7 +279,7 @@ OTHER_FILES += \
# platform specific defaults, if not overridden on command line
isEmpty(BOOST_LIB_SUFFIX) {
macx:BOOST_LIB_SUFFIX = -mt
- windows:BOOST_LIB_SUFFIX = -mgw44-mt-1_43
+ windows:BOOST_LIB_SUFFIX = -mgw44-mt-s-1_49
}
isEmpty(BOOST_THREAD_LIB_SUFFIX) {
diff --git a/contrib/debian/control b/contrib/debian/control
index 4425e716d8..c8266f686b 100644
--- a/contrib/debian/control
+++ b/contrib/debian/control
@@ -44,7 +44,7 @@ Description: peer-to-peer network based digital currency - daemon
Package: bitcoin-qt
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
-Description: peer-to-peer network based digital currency - QT GUI
+Description: peer-to-peer network based digital currency - Qt GUI
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
@@ -56,4 +56,4 @@ Description: peer-to-peer network based digital currency - QT GUI
Full transaction history is stored locally at each client. This
requires 2+ GB of space, slowly growing.
.
- This package provides bitcoin-qt, a GUI for Bitcoin based on QT.
+ This package provides Bitcoin-Qt, a GUI for Bitcoin based on Qt.
diff --git a/contrib/debian/copyright b/contrib/debian/copyright
index 71fa77cf6c..71913c5a3a 100644
--- a/contrib/debian/copyright
+++ b/contrib/debian/copyright
@@ -6,7 +6,7 @@ Source: http://sourceforge.net/projects/bitcoin/files/
https://github.com/bitcoin/bitcoin
Files: *
-Copyright: 2009-2011, Bitcoin Developers
+Copyright: 2009-2012, Bitcoin Developers
License: Expat
Comment: The Bitcoin Developers encompasses the current developers listed on bitcoin.org,
as well as the numerous contributors to the project.
@@ -57,7 +57,7 @@ Files: src/qt/res/icons/transaction*.png
Copyright: md2k7
License: You are free to do with these icons as you wish, including selling,
copying, modifying etc.
-Comment: Site: https://forum.bitcoin.org/index.php?topic=15276.0
+Comment: Site: https://bitcointalk.org/index.php?topic=15276.0
Files: src/qt/res/icons/configure.png, src/qt/res/icons/quit.png,
src/qt/res/icons/editcopy.png, src/qt/res/icons/editpaste.png,
@@ -70,7 +70,7 @@ Comment: Icon Pack: Crystal SVG
Files: src/qt/res/icons/bitcoin.png, src/qt/res/icons/toolbar.png
Copyright: Bitboy (optimized for 16x16 by Wladimir van der Laan)
License: PUB-DOM
-Comment: Site: http://forum.bitcoin.org/?topic=1756.0
+Comment: Site: https://bitcointalk.org/?topic=1756.0
Files: scripts/img/reload.xcf, src/qt/res/movies/update_spinner.mng
Copyright: Everaldo (Everaldo Coelho)
diff --git a/contrib/gitian-descriptors/gitian-win32.yml b/contrib/gitian-descriptors/gitian-win32.yml
index 6e2eff15f3..6f0e4e2318 100644
--- a/contrib/gitian-descriptors/gitian-win32.yml
+++ b/contrib/gitian-descriptors/gitian-win32.yml
@@ -47,7 +47,7 @@ script: |
mkdir -p $OUTDIR/src
git archive HEAD | tar -x -C $OUTDIR/src
cp $OUTDIR/src/doc/README_windows.txt $OUTDIR/readme.txt
- cp $OUTDIR/src/COPYING $OUTDIR/license.txt
+ cp $OUTDIR/src/COPYING $OUTDIR/COPYING.txt
export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
export FAKETIME=$REFERENCE_DATETIME
export TZ=UTC
diff --git a/contrib/pyminer/pyminer.py b/contrib/pyminer/pyminer.py
index 2887aba591..0a2932d66e 100755
--- a/contrib/pyminer/pyminer.py
+++ b/contrib/pyminer/pyminer.py
@@ -2,7 +2,7 @@
#
# Copyright (c) 2011 The Bitcoin developers
# Distributed under the MIT/X11 software license, see the accompanying
-# file license.txt or http://www.opensource.org/licenses/mit-license.php.
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
#
import time
diff --git a/doc/README b/doc/README
index 4eda8bcd76..ee6478d59e 100644
--- a/doc/README
+++ b/doc/README
@@ -2,7 +2,7 @@ Bitcoin 0.6.99 BETA
Copyright (c) 2009-2012 Bitcoin Developers
Distributed under the MIT/X11 software license, see the accompanying
-file license.txt or http://www.opensource.org/licenses/mit-license.php.
+file COPYING or http://www.opensource.org/licenses/mit-license.php.
This product includes software developed by the OpenSSL Project for use in
the OpenSSL Toolkit (http://www.openssl.org/). This product includes
cryptographic software written by Eric Young (eay@cryptsoft.com).
@@ -18,7 +18,7 @@ with each other, with the help of a P2P network to check for double-spending.
Setup
-----
-You need the Qt4 run-time libraries to run bitcoin-qt. On Debian or Ubuntu:
+You need the Qt4 run-time libraries to run Bitcoin-Qt. On Debian or Ubuntu:
sudo apt-get install libqtgui4
Unpack the files into a directory and run:
diff --git a/doc/README_windows.txt b/doc/README_windows.txt
index eec252931d..dd8a62a448 100644
--- a/doc/README_windows.txt
+++ b/doc/README_windows.txt
@@ -2,7 +2,7 @@ Bitcoin 0.6.99 BETA
Copyright (c) 2009-2012 Bitcoin Developers
Distributed under the MIT/X11 software license, see the accompanying
-file license.txt or http://www.opensource.org/licenses/mit-license.php.
+file COPYING or http://www.opensource.org/licenses/mit-license.php.
This product includes software developed by the OpenSSL Project for use in
the OpenSSL Toolkit (http://www.openssl.org/). This product includes
cryptographic software written by Eric Young (eay@cryptsoft.com).
diff --git a/doc/Tor.txt b/doc/Tor.txt
index f44b016f22..8a00cd2f9d 100644
--- a/doc/Tor.txt
+++ b/doc/Tor.txt
@@ -36,7 +36,7 @@ outgoing connections be anonimized, but more is possible.
to run a hidden service (see next section), you'll need to enable
it explicitly.
--connect=X When behing a Tor proxy, you can specify .onion addresses instead
+-connect=X When behind a Tor proxy, you can specify .onion addresses instead
-addnode=X of IP addresses or hostnames in these parameters. It requires
-seednode=X SOCKS5. In Tor mode, such addresses can also be exchanged with
other P2P nodes.
@@ -59,7 +59,7 @@ config file):
The directory can be different of course, but (both) 8333's should be equal to your
bitcoind's P2P listen port (8333 by default).
--externalip=X You can tell bitcoin about its publically reachable address using
+-externalip=X You can tell bitcoin about its publicly reachable address using
this option, and this can be a .onion address. Given the above
configuration, you can find your onion address in
/var/lib/tor/bitcoin-service/hostname. Onion addresses are given
diff --git a/doc/assets-attribution.txt b/doc/assets-attribution.txt
index 75062f7fef..4a4ab08685 100644
--- a/doc/assets-attribution.txt
+++ b/doc/assets-attribution.txt
@@ -26,7 +26,7 @@ Site: http://findicons.com/icon/93743/blocks_gnome_netstatus_0
Icon: src/qt/res/icons/transaction*.png
Designer: md2k7
-Site: https://forum.bitcoin.org/index.php?topic=15276.0
+Site: https://bitcointalk.org/index.php?topic=15276.0
License: You are free to do with these icons as you wish, including selling,
copying, modifying etc.
@@ -41,7 +41,7 @@ License: LGPL
Icon: src/qt/res/icons/bitcoin.png, src/qt/res/icons/toolbar.png
Designer: Bitboy (optimized for 16x16 by Wladimir van der Laan)
License: Public Domain
-Site: http://forum.bitcoin.org/?topic=1756.0
+Site: https://bitcointalk.org/?topic=1756.0
Icon: scripts/img/reload.xcf (modified),src/qt/res/movies/update_spinner.mng
Icon Pack: Kids
diff --git a/doc/build-msw.txt b/doc/build-msw.txt
index d4ae51d3f1..c887a7be8c 100644
--- a/doc/build-msw.txt
+++ b/doc/build-msw.txt
@@ -1,6 +1,6 @@
Copyright (c) 2009-2012 Bitcoin Developers
Distributed under the MIT/X11 software license, see the accompanying
-file license.txt or http://www.opensource.org/licenses/mit-license.php.
+file COPYING or http://www.opensource.org/licenses/mit-license.php.
This product includes software developed by the OpenSSL Project for use in
the OpenSSL Toolkit (http://www.openssl.org/). This product includes
cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP
diff --git a/doc/build-osx.txt b/doc/build-osx.txt
index 24e825ca8c..af16162a59 100644
--- a/doc/build-osx.txt
+++ b/doc/build-osx.txt
@@ -1,6 +1,6 @@
Copyright (c) 2009-2012 Bitcoin Developers
Distributed under the MIT/X11 software license, see the accompanying
-file license.txt or http://www.opensource.org/licenses/mit-license.php.
+file COPYING or http://www.opensource.org/licenses/mit-license.php.
This product includes software developed by the OpenSSL Project for use in
the OpenSSL Toolkit (http://www.openssl.org/). This product includes
cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP
diff --git a/doc/build-unix.txt b/doc/build-unix.txt
index 825491bba3..784d86e63d 100644
--- a/doc/build-unix.txt
+++ b/doc/build-unix.txt
@@ -1,6 +1,6 @@
Copyright (c) 2009-2012 Bitcoin Developers
Distributed under the MIT/X11 software license, see the accompanying
-file license.txt or http://www.opensource.org/licenses/mit-license.php.
+file COPYING or http://www.opensource.org/licenses/mit-license.php.
This product includes software developed by the OpenSSL Project for use in
the OpenSSL Toolkit (http://www.openssl.org/). This product includes
cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP
diff --git a/doc/readme-qt.rst b/doc/readme-qt.rst
index 294f31ac24..951e86f9cb 100644
--- a/doc/readme-qt.rst
+++ b/doc/readme-qt.rst
@@ -1,4 +1,4 @@
-Bitcoin-qt: Qt4 GUI for Bitcoin
+Bitcoin-Qt: Qt4 GUI for Bitcoin
===============================
Build instructions
@@ -23,25 +23,26 @@ then execute the following:
qmake
make
-Alternatively, install Qt Creator and open the `bitcoin-qt.pro` file.
+Alternatively, install `Qt Creator`_ and open the `bitcoin-qt.pro` file.
An executable named `bitcoin-qt` will be built.
+.. _`Qt Creator`: http://qt.nokia.com/downloads/
Windows
--------
Windows build instructions:
-- Download the `QT Windows SDK`_ and install it. You don't need the Symbian stuff, just the desktop Qt.
+- Download the `Qt Windows SDK`_ and install it. You don't need the Symbian stuff, just the desktop Qt.
- Download and extract the `dependencies archive`_ [#]_, or compile openssl, boost and dbcxx yourself.
- Copy the contents of the folder "deps" to "X:\\QtSDK\\mingw", replace X:\\ with the location where you installed the Qt SDK. Make sure that the contents of "deps\\include" end up in the current "include" directory.
-- Open the .pro file in QT creator and build as normal (ctrl-B)
+- Open the bitcoin-qt.pro file in Qt Creator and build as normal (ctrl-B)
-.. _`QT Windows SDK`: http://qt.nokia.com/downloads/sdk-windows-cpp
+.. _`Qt Windows SDK`: http://qt.nokia.com/downloads/sdk-windows-cpp
.. _`dependencies archive`: https://download.visucore.com/bitcoin/qtgui_deps_1.zip
.. [#] PGP signature: https://download.visucore.com/bitcoin/qtgui_deps_1.zip.sig (signed with RSA key ID `610945D0`_)
.. _`610945D0`: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x610945D0
@@ -61,7 +62,7 @@ Mac OS X
sudo port selfupdate
sudo port install boost db48 miniupnpc
-- Open the .pro file in Qt Creator and build as normal (cmd-B)
+- Open the bitcoin-qt.pro file in Qt Creator and build as normal (cmd-B)
.. _`Qt Mac OS X SDK`: http://qt.nokia.com/downloads/sdk-mac-os-cpp
.. _`MacPorts`: http://www.macports.org/install.php
@@ -70,7 +71,7 @@ Mac OS X
Build configuration options
============================
-UPNnP port forwarding
+UPnP port forwarding
---------------------
To use UPnP for port forwarding behind a NAT router (recommended, as more connections overall allow for a faster and more stable bitcoin experience), pass the following argument to qmake:
diff --git a/doc/translation_process.md b/doc/translation_process.md
index c483020989..7ef22d83b0 100644
--- a/doc/translation_process.md
+++ b/doc/translation_process.md
@@ -37,7 +37,7 @@ by running `lupdate` (included in the Qt SDK). Also, a custom script is used
to extract strings from the non-Qt parts:
python share/qt/extract_strings_qt.py
- lupdate bitcoin-qt.pro -no-obsolete -locations none -ts src/qt/locale/bitcoin_en.ts
+ lupdate bitcoin-qt.pro -no-obsolete -locations relative -ts src/qt/locale/bitcoin_en.ts
##### Handling of plurals in the source file
diff --git a/doc/unit-tests.txt b/doc/unit-tests.txt
index e7f215188e..f76970d51e 100644
--- a/doc/unit-tests.txt
+++ b/doc/unit-tests.txt
@@ -1,4 +1,4 @@
-Compiling/runing bitcoind unit tests
+Compiling/running bitcoind unit tests
------------------------------------
bitcoind unit tests are in the src/test/ directory; they
diff --git a/share/setup.nsi b/share/setup.nsi
index c0bc880a56..87cd58a855 100644
--- a/share/setup.nsi
+++ b/share/setup.nsi
@@ -67,7 +67,7 @@ Section -Main SEC0000
SetOutPath $INSTDIR
SetOverwrite on
File ../release/bitcoin-qt.exe
- File /oname=license.txt ../COPYING
+ File /oname=COPYING.txt ../COPYING
File /oname=readme.txt ../doc/README_windows.txt
SetOutPath $INSTDIR\daemon
File ../src/bitcoind.exe
@@ -120,7 +120,7 @@ done${UNSECTION_ID}:
# Uninstaller sections
Section /o -un.Main UNSEC0000
Delete /REBOOTOK $INSTDIR\bitcoin-qt.exe
- Delete /REBOOTOK $INSTDIR\license.txt
+ Delete /REBOOTOK $INSTDIR\COPYING.txt
Delete /REBOOTOK $INSTDIR\readme.txt
RMDir /r /REBOOTOK $INSTDIR\daemon
RMDir /r /REBOOTOK $INSTDIR\src
diff --git a/src/bignum.h b/src/bignum.h
index 47f6229431..9fea3f70fb 100644
--- a/src/bignum.h
+++ b/src/bignum.h
@@ -416,7 +416,7 @@ public:
CBigNum& operator>>=(unsigned int shift)
{
// Note: BN_rshift segfaults on 64-bit if 2^shift is greater than the number
- // if built on ubuntu 9.04 or 9.10, probably depends on version of openssl
+ // if built on ubuntu 9.04 or 9.10, probably depends on version of OpenSSL
CBigNum a = 1;
a <<= shift;
if (BN_cmp(&a, this) > 0)
diff --git a/src/bitcoinrpc.cpp b/src/bitcoinrpc.cpp
index c2bf45e1e2..3af298a58b 100644
--- a/src/bitcoinrpc.cpp
+++ b/src/bitcoinrpc.cpp
@@ -1851,8 +1851,13 @@ Value getwork(const Array& params, bool fHelp)
delete pblock;
vNewBlock.clear();
}
+
+ // Clear pindexPrev so future getworks make a new block, despite any failures from here on
+ pindexPrev = NULL;
+
+ // Store the pindexBest used before CreateNewBlock, to avoid races
nTransactionsUpdatedLast = nTransactionsUpdated;
- pindexPrev = pindexBest;
+ CBlockIndex* pindexPrevNew = pindexBest;
nStart = GetTime();
// Create new block
@@ -1860,6 +1865,9 @@ Value getwork(const Array& params, bool fHelp)
if (!pblock)
throw JSONRPCError(-7, "Out of memory");
vNewBlock.push_back(pblock);
+
+ // Need to update only after we know CreateNewBlock succeeded
+ pindexPrev = pindexPrevNew;
}
// Update nTime
@@ -1950,16 +1958,26 @@ Value getmemorypool(const Array& params, bool fHelp)
if (pindexPrev != pindexBest ||
(nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 5))
{
+ // Clear pindexPrev so future calls make a new block, despite any failures from here on
+ pindexPrev = NULL;
+
+ // Store the pindexBest used before CreateNewBlock, to avoid races
nTransactionsUpdatedLast = nTransactionsUpdated;
- pindexPrev = pindexBest;
+ CBlockIndex* pindexPrevNew = pindexBest;
nStart = GetTime();
// Create new block
if(pblock)
+ {
delete pblock;
+ pblock = NULL;
+ }
pblock = CreateNewBlock(reservekey);
if (!pblock)
throw JSONRPCError(-7, "Out of memory");
+
+ // Need to update only after we know CreateNewBlock succeeded
+ pindexPrev = pindexPrevNew;
}
// Update nTime
@@ -2957,8 +2975,9 @@ void ConvertTo(Value& value)
{
// reinterpret string as unquoted json value
Value value2;
- if (!read_string(value.get_str(), value2))
- throw runtime_error("type mismatch");
+ string strJSON = value.get_str();
+ if (!read_string(strJSON, value2))
+ throw runtime_error(string("Error parsing JSON:")+strJSON);
value = value2.get_value<T>();
}
else
diff --git a/src/db.cpp b/src/db.cpp
index e494d28e3c..5671993d37 100644
--- a/src/db.cpp
+++ b/src/db.cpp
@@ -42,7 +42,8 @@ void CDBEnv::EnvShutdown()
{
printf("EnvShutdown exception: %s (%d)\n", e.what(), e.get_errno());
}
- DbEnv(0).remove(GetDataDir().string().c_str(), 0);
+ if (!fMockDb)
+ DbEnv(0).remove(GetDataDir().string().c_str(), 0);
}
CDBEnv::CDBEnv() : dbenv(0)
@@ -103,12 +104,48 @@ bool CDBEnv::Open(boost::filesystem::path pathEnv_)
return error("CDB() : error %d opening database environment", ret);
fDbEnvInit = true;
+ fMockDb = false;
return true;
}
+void CDBEnv::MakeMock()
+{
+ if (fDbEnvInit)
+ throw runtime_error("CDBEnv::MakeMock(): already initialized");
+
+ if (fShutdown)
+ throw runtime_error("CDBEnv::MakeMock(): during shutdown");
+
+ printf("CDBEnv::MakeMock()\n");
+
+ dbenv.set_cachesize(1, 0, 1);
+ dbenv.set_lg_bsize(10485760*4);
+ dbenv.set_lg_max(10485760);
+ dbenv.set_lk_max_locks(10000);
+ dbenv.set_lk_max_objects(10000);
+ dbenv.set_flags(DB_AUTO_COMMIT, 1);
+ dbenv.log_set_config(DB_LOG_IN_MEMORY, 1);
+ int ret = dbenv.open(NULL,
+ DB_CREATE |
+ DB_INIT_LOCK |
+ DB_INIT_LOG |
+ DB_INIT_MPOOL |
+ DB_INIT_TXN |
+ DB_THREAD |
+ DB_PRIVATE,
+ S_IRUSR | S_IWUSR);
+ if (ret > 0)
+ throw runtime_error(strprintf("CDBEnv::MakeMock(): error %d opening database environment", ret));
+
+ fDbEnvInit = true;
+ fMockDb = true;
+}
+
void CDBEnv::CheckpointLSN(std::string strFile)
{
dbenv.txn_checkpoint(0, 0, 0);
+ if (fMockDb)
+ return;
dbenv.lsn_reset(strFile.c_str(), 0);
}
@@ -138,8 +175,17 @@ CDB::CDB(const char *pszFile, const char* pszMode) :
{
pdb = new Db(&bitdb.dbenv, 0);
+ bool fMockDb = bitdb.IsMock();
+ if (fMockDb)
+ {
+ DbMpoolFile*mpf = pdb->get_mpf();
+ ret = mpf->set_flags(DB_MPOOL_NOFILE, 1);
+ if (ret != 0)
+ throw runtime_error(strprintf("CDB() : failed to configure for no temp file backing for database %s", pszFile));
+ }
+
ret = pdb->open(NULL, // Txn pointer
- pszFile, // Filename
+ fMockDb ? NULL : pszFile, // Filename
"main", // Logical db name
DB_BTREE, // Database type
nFlags, // Flags
@@ -337,7 +383,8 @@ void CDBEnv::Flush(bool fShutdown)
dbenv.txn_checkpoint(0, 0, 0);
if (!IsChainFile(strFile) || fDetachDB) {
printf("%s detach\n", strFile.c_str());
- dbenv.lsn_reset(strFile.c_str(), 0);
+ if (!fMockDb)
+ dbenv.lsn_reset(strFile.c_str(), 0);
}
printf("%s closed\n", strFile.c_str());
mapFileUseCount.erase(mi++);
diff --git a/src/db.h b/src/db.h
index 1030a40c48..4a08bf10a1 100644
--- a/src/db.h
+++ b/src/db.h
@@ -35,6 +35,7 @@ class CDBEnv
private:
bool fDetachDB;
bool fDbEnvInit;
+ bool fMockDb;
boost::filesystem::path pathEnv;
void EnvShutdown();
@@ -47,6 +48,8 @@ public:
CDBEnv();
~CDBEnv();
+ void MakeMock();
+ bool IsMock() { return fMockDb; };
bool Open(boost::filesystem::path pathEnv_);
void Close();
void Flush(bool fShutdown);
diff --git a/src/init.cpp b/src/init.cpp
index 83870f9f8c..35230095a8 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -279,6 +279,11 @@ std::string HelpMessage()
" -checkblocks=<n> " + _("How many blocks to check at startup (default: 2500, 0 = all)") + "\n" +
" -checklevel=<n> " + _("How thorough the block verification is (0-6, default: 1)") + "\n" +
" -loadblock=<file> " + _("Imports blocks from external blk000?.dat file") + "\n" +
+ _("\nBlock creation options:\n") +
+ " -blockminsize=<n> " + _("Minimum size, in bytes (default: 0)\n") +
+ " -blockmaxsize=<n> " + _("Maximum size, in bytes (default: 250000)\n") +
+ " -blockprioritysize=<n> " + _("Maximum bytes of high-priority/low-fee transactions (default: 27000)\n") +
+
" -? " + _("This help message") + "\n";
strUsage += string() +
diff --git a/src/main.cpp b/src/main.cpp
index c4472c4556..0c636cdec1 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -653,6 +653,15 @@ bool CTxMemPool::remove(CTransaction &tx)
return true;
}
+void
+CTxMemPool::clear()
+{
+ LOCK(cs);
+ mapTx.clear();
+ mapNextTx.clear();
+ ++nTransactionsUpdated;
+}
+
void CTxMemPool::queryHashes(std::vector<uint256>& vtxid)
{
vtxid.clear();
@@ -828,7 +837,7 @@ int64 static GetBlockValue(int nHeight, int64 nFees)
{
int64 nSubsidy = 50 * COIN;
- // Subsidy is cut in half every 4 years
+ // Subsidy is cut in half every 210000 blocks, which will occur approximately every 4 years
nSubsidy >>= (nHeight / 210000);
return nSubsidy + nFees;
@@ -1316,10 +1325,10 @@ bool CBlock::DisconnectBlock(CTxDB& txdb, CBlockIndex* pindex)
return true;
}
-bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex)
+bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck)
{
// Check it again in case a previous version let a bad block in
- if (!CheckBlock())
+ if (!CheckBlock(!fJustCheck, !fJustCheck))
return false;
// Do not allow blocks that contain transactions which 'overwrite' older transactions,
@@ -1339,7 +1348,13 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex)
bool fStrictPayToScriptHash = (pindex->nTime >= nBIP16SwitchTime);
//// issue here: it doesn't know the version
- unsigned int nTxPos = pindex->nBlockPos + ::GetSerializeSize(CBlock(), SER_DISK, CLIENT_VERSION) - 1 + GetSizeOfCompactSize(vtx.size());
+ unsigned int nTxPos;
+ if (fJustCheck)
+ // FetchInputs treats CDiskTxPos(1,1,1) as a special "refer to memorypool" indicator
+ // Since we're just checking the block and not actually connecting it, it might not (and probably shouldn't) be on the disk to get the transaction from
+ nTxPos = 1;
+ else
+ nTxPos = pindex->nBlockPos + ::GetSerializeSize(CBlock(), SER_DISK, CLIENT_VERSION) - 1 + GetSizeOfCompactSize(vtx.size());
map<uint256, CTxIndex> mapQueuedChanges;
int64 nFees = 0;
@@ -1362,7 +1377,8 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex)
return DoS(100, error("ConnectBlock() : too many sigops"));
CDiskTxPos posThisTx(pindex->nFile, pindex->nBlockPos, nTxPos);
- nTxPos += ::GetSerializeSize(tx, SER_DISK, CLIENT_VERSION);
+ if (!fJustCheck)
+ nTxPos += ::GetSerializeSize(tx, SER_DISK, CLIENT_VERSION);
MapPrevTx mapInputs;
if (!tx.IsCoinBase())
@@ -1390,6 +1406,12 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex)
mapQueuedChanges[hashTx] = CTxIndex(posThisTx, tx.vout.size());
}
+ if (vtx[0].GetValueOut() > GetBlockValue(pindex->nHeight, nFees))
+ return false;
+
+ if (fJustCheck)
+ return true;
+
// Write queued txindex changes
for (map<uint256, CTxIndex>::iterator mi = mapQueuedChanges.begin(); mi != mapQueuedChanges.end(); ++mi)
{
@@ -1397,9 +1419,6 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex)
return error("ConnectBlock() : UpdateTxIndex failed");
}
- if (vtx[0].GetValueOut() > GetBlockValue(pindex->nHeight, nFees))
- return false;
-
// Update block index on disk without changing it in memory.
// The memory index structure will be changed after the db commits.
if (pindex->pprev)
@@ -1703,7 +1722,7 @@ bool CBlock::AddToBlockIndex(unsigned int nFile, unsigned int nBlockPos)
-bool CBlock::CheckBlock() const
+bool CBlock::CheckBlock(bool fCheckPOW, bool fCheckMerkleRoot) const
{
// These are checks that are independent of context
// that can be verified before saving an orphan block.
@@ -1713,7 +1732,7 @@ bool CBlock::CheckBlock() const
return DoS(100, error("CheckBlock() : size limits failed"));
// Check proof of work matches claimed amount
- if (!CheckProofOfWork(GetHash(), nBits))
+ if (fCheckPOW && !CheckProofOfWork(GetHash(), nBits))
return DoS(50, error("CheckBlock() : proof of work failed"));
// Check timestamp
@@ -1751,7 +1770,7 @@ bool CBlock::CheckBlock() const
return DoS(100, error("CheckBlock() : out-of-bounds SigOpCount"));
// Check merkleroot
- if (hashMerkleRoot != BuildMerkleTree())
+ if (fCheckMerkleRoot && hashMerkleRoot != BuildMerkleTree())
return DoS(100, error("CheckBlock() : hashMerkleRoot mismatch"));
return true;
@@ -1959,10 +1978,10 @@ bool LoadBlockIndex(bool fAllowNew)
{
if (fTestNet)
{
- pchMessageStart[0] = 0xfa;
- pchMessageStart[1] = 0xbf;
- pchMessageStart[2] = 0xb5;
- pchMessageStart[3] = 0xda;
+ pchMessageStart[0] = 0x0b;
+ pchMessageStart[1] = 0x11;
+ pchMessageStart[2] = 0x09;
+ pchMessageStart[3] = 0x07;
hashGenesisBlock = uint256("000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943");
}
@@ -3293,16 +3312,18 @@ public:
CTransaction* ptx;
set<uint256> setDependsOn;
double dPriority;
+ double dFeePerKb;
COrphan(CTransaction* ptxIn)
{
ptx = ptxIn;
- dPriority = 0;
+ dPriority = dFeePerKb = 0;
}
void print() const
{
- printf("COrphan(hash=%s, dPriority=%.1f)\n", ptx->GetHash().ToString().substr(0,10).c_str(), dPriority);
+ printf("COrphan(hash=%s, dPriority=%.1f, dFeePerKb=%.1f)\n",
+ ptx->GetHash().ToString().substr(0,10).c_str(), dPriority, dFeePerKb);
BOOST_FOREACH(uint256 hash, setDependsOn)
printf(" setDependsOn %s\n", hash.ToString().substr(0,10).c_str());
}
@@ -3312,6 +3333,33 @@ public:
uint64 nLastBlockTx = 0;
uint64 nLastBlockSize = 0;
+// We want to sort transactions by priority and fee, so:
+typedef boost::tuple<double, double, CTransaction*> TxPriority;
+class TxPriorityCompare
+{
+ bool byFee;
+public:
+ TxPriorityCompare(bool _byFee) : byFee(_byFee) { }
+ bool operator()(const TxPriority& a, const TxPriority& b)
+ {
+ if (byFee)
+ {
+ if (a.get<1>() == b.get<1>())
+ return a.get<0>() < b.get<0>();
+ return a.get<1>() < b.get<1>();
+ }
+ else
+ {
+ if (a.get<0>() == b.get<0>())
+ return a.get<1>() < b.get<1>();
+ return a.get<0>() < b.get<0>();
+ }
+ }
+};
+
+const char* pszDummy = "\0\0";
+CScript scriptDummy(std::vector<unsigned char>(pszDummy, pszDummy + sizeof(pszDummy)));
+
CBlock* CreateNewBlock(CReserveKey& reservekey)
{
CBlockIndex* pindexPrev = pindexBest;
@@ -3331,6 +3379,30 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
// Add our coinbase tx as first transaction
pblock->vtx.push_back(txNew);
+ // Largest block you're willing to create:
+ unsigned int nBlockMaxSize = GetArg("-blockmaxsize", MAX_BLOCK_SIZE_GEN/2);
+ // Limit to betweeen 1K and MAX_BLOCK_SIZE-1K for sanity:
+ nBlockMaxSize = std::max((unsigned int)1000, std::min((unsigned int)(MAX_BLOCK_SIZE-1000), nBlockMaxSize));
+
+ // How much of the block should be dedicated to high-priority transactions,
+ // included regardless of the fees they pay
+ unsigned int nBlockPrioritySize = GetArg("-blockprioritysize", 27000);
+ nBlockPrioritySize = std::min(nBlockMaxSize, nBlockPrioritySize);
+
+ // Minimum block size you want to create; block will be filled with free transactions
+ // until there are no more or the block reaches this size:
+ unsigned int nBlockMinSize = GetArg("-blockminsize", 0);
+ nBlockMinSize = std::min(nBlockMaxSize, nBlockMinSize);
+
+ // Fee-per-kilobyte amount considered the same as "free"
+ // Be careful setting this: if you set it to zero then
+ // a transaction spammer can cheaply fill blocks using
+ // 1-satoshi-fee transactions. It should be set above the real
+ // cost to you of processing a transaction.
+ int64 nMinTxFee = MIN_TX_FEE;
+ if (mapArgs.count("-mintxfee"))
+ ParseMoney(mapArgs["-mintxfee"], nMinTxFee);
+
// Collect memory pool transactions into the block
int64 nFees = 0;
{
@@ -3340,7 +3412,10 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
// Priority order to process transactions
list<COrphan> vOrphan; // list memory doesn't move
map<uint256, vector<COrphan*> > mapDependers;
- multimap<double, CTransaction*> mapPriority;
+
+ // This vector will be sorted into a priority queue:
+ vector<TxPriority> vecPriority;
+ vecPriority.reserve(mempool.mapTx.size());
for (map<uint256, CTransaction>::iterator mi = mempool.mapTx.begin(); mi != mempool.mapTx.end(); ++mi)
{
CTransaction& tx = (*mi).second;
@@ -3349,6 +3424,8 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
COrphan* porphan = NULL;
double dPriority = 0;
+ int64 nTotalIn = 0;
+ bool fMissingInputs = false;
BOOST_FOREACH(const CTxIn& txin, tx.vin)
{
// Read prev transaction
@@ -3356,6 +3433,19 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
CTxIndex txindex;
if (!txPrev.ReadFromDisk(txdb, txin.prevout, txindex))
{
+ // This should never happen; all transactions in the memory
+ // pool should connect to either transactions in the chain
+ // or other transactions in the memory pool.
+ if (!mempool.mapTx.count(txin.prevout.hash))
+ {
+ printf("ERROR: mempool transaction missing input\n");
+ if (fDebug) assert("mempool transaction missing input" == 0);
+ fMissingInputs = true;
+ if (porphan)
+ vOrphan.pop_back();
+ break;
+ }
+
// Has to wait for dependencies
if (!porphan)
{
@@ -3365,34 +3455,33 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
}
mapDependers[txin.prevout.hash].push_back(porphan);
porphan->setDependsOn.insert(txin.prevout.hash);
+ nTotalIn += mempool.mapTx[txin.prevout.hash].vout[txin.prevout.n].nValue;
continue;
}
int64 nValueIn = txPrev.vout[txin.prevout.n].nValue;
+ nTotalIn += nValueIn;
- // Read block header
int nConf = txindex.GetDepthInMainChain();
-
dPriority += (double)nValueIn * nConf;
-
- if (fDebug && GetBoolArg("-printpriority"))
- printf("priority nValueIn=%-12"PRI64d" nConf=%-5d dPriority=%-20.1f\n", nValueIn, nConf, dPriority);
}
+ if (fMissingInputs) continue;
// Priority is sum(valuein * age) / txsize
- dPriority /= ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION);
+ unsigned int nTxSize = ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION);
+ dPriority /= nTxSize;
- if (porphan)
- porphan->dPriority = dPriority;
- else
- mapPriority.insert(make_pair(-dPriority, &(*mi).second));
+ // This is a more accurate fee-per-kilobyte than is used by the client code, because the
+ // client code rounds up the size to the nearest 1K. That's good, because it gives an
+ // incentive to create smaller transactions.
+ double dFeePerKb = double(nTotalIn-tx.GetValueOut()) / (double(nTxSize)/1000.0);
- if (fDebug && GetBoolArg("-printpriority"))
+ if (porphan)
{
- printf("priority %-20.1f %s\n%s", dPriority, tx.GetHash().ToString().substr(0,10).c_str(), tx.ToString().c_str());
- if (porphan)
- porphan->print();
- printf("\n");
+ porphan->dPriority = dPriority;
+ porphan->dFeePerKb = dFeePerKb;
}
+ else
+ vecPriority.push_back(TxPriority(dPriority, dFeePerKb, &(*mi).second));
}
// Collect transactions into block
@@ -3400,16 +3489,24 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
uint64 nBlockSize = 1000;
uint64 nBlockTx = 0;
int nBlockSigOps = 100;
- while (!mapPriority.empty())
+ bool fSortedByFee = (nBlockPrioritySize <= 0);
+
+ TxPriorityCompare comparer(fSortedByFee);
+ std::make_heap(vecPriority.begin(), vecPriority.end(), comparer);
+
+ while (!vecPriority.empty())
{
- // Take highest priority transaction off priority queue
- double dPriority = -(*mapPriority.begin()).first;
- CTransaction& tx = *(*mapPriority.begin()).second;
- mapPriority.erase(mapPriority.begin());
+ // Take highest priority transaction off the priority queue:
+ double dPriority = vecPriority.front().get<0>();
+ double dFeePerKb = vecPriority.front().get<1>();
+ CTransaction& tx = *(vecPriority.front().get<2>());
+
+ std::pop_heap(vecPriority.begin(), vecPriority.end(), comparer);
+ vecPriority.pop_back();
// Size limits
unsigned int nTxSize = ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION);
- if (nBlockSize + nTxSize >= MAX_BLOCK_SIZE_GEN)
+ if (nBlockSize + nTxSize >= nBlockMaxSize)
continue;
// Legacy limits on sigOps:
@@ -3417,9 +3514,19 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
if (nBlockSigOps + nTxSigOps >= MAX_BLOCK_SIGOPS)
continue;
- // Transaction fee required depends on block size
- bool fAllowFree = (nBlockSize + nTxSize < 4000 || CTransaction::AllowFree(dPriority));
- int64 nMinFee = tx.GetMinFee(nBlockSize, fAllowFree, GMF_BLOCK);
+ // Skip free transactions if we're past the minimum block size:
+ if (fSortedByFee && (dFeePerKb < nMinTxFee) && (nBlockSize + nTxSize >= nBlockMinSize))
+ continue;
+
+ // Prioritize by fee once past the priority size or we run out of high-priority
+ // transactions:
+ if (!fSortedByFee &&
+ ((nBlockSize + nTxSize >= nBlockPrioritySize) || (dPriority < COIN * 144 / 250)))
+ {
+ fSortedByFee = true;
+ comparer = TxPriorityCompare(fSortedByFee);
+ std::make_heap(vecPriority.begin(), vecPriority.end(), comparer);
+ }
// Connecting shouldn't fail due to dependency on other memory pool transactions
// because we're already processing them in order of dependency
@@ -3430,8 +3537,6 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
continue;
int64 nTxFees = tx.GetValueIn(mapInputs)-tx.GetValueOut();
- if (nTxFees < nMinFee)
- continue;
nTxSigOps += tx.GetP2SHSigOpCount(mapInputs);
if (nBlockSigOps + nTxSigOps >= MAX_BLOCK_SIGOPS)
@@ -3449,6 +3554,12 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
nBlockSigOps += nTxSigOps;
nFees += nTxFees;
+ if (fDebug && GetBoolArg("-printpriority"))
+ {
+ printf("priority %.1f feeperkb %.1f txid %s\n",
+ dPriority, dFeePerKb, tx.GetHash().ToString().c_str());
+ }
+
// Add transactions that depend on this one to the priority queue
uint256 hash = tx.GetHash();
if (mapDependers.count(hash))
@@ -3459,7 +3570,10 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
{
porphan->setDependsOn.erase(hash);
if (porphan->setDependsOn.empty())
- mapPriority.insert(make_pair(-porphan->dPriority, porphan->ptx));
+ {
+ vecPriority.push_back(TxPriority(porphan->dPriority, porphan->dFeePerKb, porphan->ptx));
+ std::push_heap(vecPriority.begin(), vecPriority.end(), comparer);
+ }
}
}
}
@@ -3469,16 +3583,22 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
nLastBlockSize = nBlockSize;
printf("CreateNewBlock(): total size %lu\n", nBlockSize);
- }
pblock->vtx[0].vout[0].nValue = GetBlockValue(pindexPrev->nHeight+1, nFees);
// Fill in header
pblock->hashPrevBlock = pindexPrev->GetBlockHash();
- pblock->hashMerkleRoot = pblock->BuildMerkleTree();
pblock->UpdateTime(pindexPrev);
pblock->nBits = GetNextWorkRequired(pindexPrev, pblock.get());
pblock->nNonce = 0;
+ pblock->vtx[0].vin[0].scriptSig = scriptDummy;
+ CBlockIndex indexDummy(1, 1, *pblock);
+ indexDummy.pprev = pindexPrev;
+ indexDummy.nHeight = pindexPrev->nHeight + 1;
+ if (!pblock->ConnectBlock(txdb, &indexDummy, true))
+ throw std::runtime_error("CreateNewBlock() : ConnectBlock failed");
+ }
+
return pblock.release();
}
@@ -3626,7 +3746,8 @@ void static BitcoinMiner(CWallet *pwallet)
return;
IncrementExtraNonce(pblock.get(), pindexPrev, nExtraNonce);
- printf("Running BitcoinMiner with %d transactions in block\n", pblock->vtx.size());
+ printf("Running BitcoinMiner with %d transactions in block (%u bytes)\n", pblock->vtx.size(),
+ ::GetSerializeSize(*pblock, SER_NETWORK, PROTOCOL_VERSION));
//
diff --git a/src/main.h b/src/main.h
index b3cc9ab40e..301badcca9 100644
--- a/src/main.h
+++ b/src/main.h
@@ -1016,11 +1016,11 @@ public:
bool DisconnectBlock(CTxDB& txdb, CBlockIndex* pindex);
- bool ConnectBlock(CTxDB& txdb, CBlockIndex* pindex);
+ bool ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck=false);
bool ReadFromDisk(const CBlockIndex* pindex, bool fReadTransactions=true);
bool SetBestChain(CTxDB& txdb, CBlockIndex* pindexNew);
bool AddToBlockIndex(unsigned int nFile, unsigned int nBlockPos);
- bool CheckBlock() const;
+ bool CheckBlock(bool fCheckPOW=true, bool fCheckMerkleRoot=true) const;
bool AcceptBlock();
private:
@@ -1606,6 +1606,7 @@ public:
bool fCheckInputs, bool* pfMissingInputs);
bool addUnchecked(const uint256& hash, CTransaction &tx);
bool remove(CTransaction &tx);
+ void clear();
void queryHashes(std::vector<uint256>& vtxid);
unsigned long size()
diff --git a/src/makefile.linux-mingw b/src/makefile.linux-mingw
index 6cd464266d..fc22bb76ee 100644
--- a/src/makefile.linux-mingw
+++ b/src/makefile.linux-mingw
@@ -1,6 +1,6 @@
# Copyright (c) 2009-2010 Satoshi Nakamoto
# Distributed under the MIT/X11 software license, see the accompanying
-# file license.txt or http://www.opensource.org/licenses/mit-license.php.
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
DEPSDIR:=/usr/i586-mingw32msvc
diff --git a/src/makefile.mingw b/src/makefile.mingw
index c270d4599a..47637f0bc6 100644
--- a/src/makefile.mingw
+++ b/src/makefile.mingw
@@ -1,18 +1,18 @@
# Copyright (c) 2009-2010 Satoshi Nakamoto
# Distributed under the MIT/X11 software license, see the accompanying
-# file license.txt or http://www.opensource.org/licenses/mit-license.php.
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
USE_UPNP:=0
INCLUDEPATHS= \
-I"C:\boost-1.49.0-mgw" \
-I"C:\db-4.8.30.NC-mgw\build_unix" \
- -I"C:\openssl-1.0.0d-mgw\include"
+ -I"C:\openssl-1.0.1b-mgw\include"
LIBPATHS= \
-L"C:\boost-1.49.0-mgw\stage\lib" \
-L"C:\db-4.8.30.NC-mgw\build_unix" \
- -L"C:\openssl-1.0.0d-mgw"
+ -L"C:\openssl-1.0.1b-mgw"
LIBS= \
-l boost_system-mgw45-mt-s-1_49 \
diff --git a/src/makefile.osx b/src/makefile.osx
index f9f28267be..d64bed5617 100644
--- a/src/makefile.osx
+++ b/src/makefile.osx
@@ -1,7 +1,7 @@
# -*- mode: Makefile; -*-
# Copyright (c) 2011 Bitcoin Developers
# Distributed under the MIT/X11 software license, see the accompanying
-# file license.txt or http://www.opensource.org/licenses/mit-license.php.
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
# Mac OS X makefile for bitcoin
# Originally by Laszlo Hanyecz (solar@heliacal.net)
diff --git a/src/makefile.unix b/src/makefile.unix
index a81300329e..857f44531e 100644
--- a/src/makefile.unix
+++ b/src/makefile.unix
@@ -1,6 +1,6 @@
# Copyright (c) 2009-2010 Satoshi Nakamoto
# Distributed under the MIT/X11 software license, see the accompanying
-# file license.txt or http://www.opensource.org/licenses/mit-license.php.
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
USE_UPNP:=0
diff --git a/src/net.cpp b/src/net.cpp
index 78b5a752db..08f47ae62f 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -407,7 +407,7 @@ bool GetMyExternalIP(CNetAddr& ipRet)
void ThreadGetMyExternalIP(void* parg)
{
- // Make this thread recognisable as the message handling thread
+ // Make this thread recognisable as the external IP detection thread
RenameThread("bitcoin-ext-ip");
CNetAddr addrLocalHost;
@@ -1878,7 +1878,9 @@ void static Discover()
}
#endif
- CreateThread(ThreadGetMyExternalIP, NULL);
+ // Don't use external IPv4 discovery, when -onlynet="IPv6"
+ if (!IsLimited(NET_IPV4))
+ CreateThread(ThreadGetMyExternalIP, NULL);
}
void StartNode(void* parg)
diff --git a/src/qt/addressbookpage.cpp b/src/qt/addressbookpage.cpp
index 7edf4b1ec6..8a74a47f58 100644
--- a/src/qt/addressbookpage.cpp
+++ b/src/qt/addressbookpage.cpp
@@ -113,6 +113,8 @@ void AddressBookPage::setModel(AddressTableModel *model)
proxyModel = new QSortFilterProxyModel(this);
proxyModel->setSourceModel(model);
proxyModel->setDynamicSortFilter(true);
+ proxyModel->setSortCaseSensitivity(Qt::CaseInsensitive);
+ proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
switch(tab)
{
case ReceivingTab:
diff --git a/src/qt/askpassphrasedialog.cpp b/src/qt/askpassphrasedialog.cpp
index 0a8ace09df..3656cbea1f 100644
--- a/src/qt/askpassphrasedialog.cpp
+++ b/src/qt/askpassphrasedialog.cpp
@@ -157,7 +157,7 @@ void AskPassphraseDialog::accept()
if(model->changePassphrase(oldpass, newpass1))
{
QMessageBox::information(this, tr("Wallet encrypted"),
- tr("Wallet passphrase was succesfully changed."));
+ tr("Wallet passphrase was successfully changed."));
QDialog::accept(); // Success
}
else
diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp
index 55b5f74c3b..6bdac2ad70 100644
--- a/src/qt/bitcoin.cpp
+++ b/src/qt/bitcoin.cpp
@@ -109,7 +109,7 @@ static std::string Translate(const char* psz)
static void handleRunawayException(std::exception *e)
{
PrintExceptionContinue(e, "Runaway exception");
- QMessageBox::critical(0, "Runaway exception", BitcoinGUI::tr("A fatal error occured. Bitcoin can no longer continue safely and will quit.") + QString("\n\n") + QString::fromStdString(strMiscWarning));
+ QMessageBox::critical(0, "Runaway exception", BitcoinGUI::tr("A fatal error occurred. Bitcoin can no longer continue safely and will quit.") + QString("\n\n") + QString::fromStdString(strMiscWarning));
exit(1);
}
@@ -126,13 +126,21 @@ int main(int argc, char *argv[])
const char *strURI = argv[i];
try {
boost::interprocess::message_queue mq(boost::interprocess::open_only, BITCOINURI_QUEUE_NAME);
- if(mq.try_send(strURI, strlen(strURI), 0))
+ if (mq.try_send(strURI, strlen(strURI), 0))
+ // if URI could be sent to the message queue exit here
exit(0);
else
+ // if URI could not be sent to the message queue do a normal Bitcoin-Qt startup
break;
}
catch (boost::interprocess::interprocess_exception &ex) {
- break;
+ // don't log the "file not found" exception, because that's normal for
+ // the first start of the first instance
+ if (ex.get_error_code() != boost::interprocess::not_found_error)
+ {
+ printf("main() - boost interprocess exception #%d: %s\n", ex.get_error_code(), ex.what());
+ break;
+ }
}
}
}
@@ -278,6 +286,8 @@ int main(int argc, char *argv[])
mq.try_send(strURI, strlen(strURI), 0);
}
catch (boost::interprocess::interprocess_exception &ex) {
+ printf("main() - boost interprocess exception #%d: %s\n", ex.get_error_code(), ex.what());
+ break;
}
}
}
diff --git a/src/qt/forms/aboutdialog.ui b/src/qt/forms/aboutdialog.ui
index 21fc7b2019..6632e311d0 100644
--- a/src/qt/forms/aboutdialog.ui
+++ b/src/qt/forms/aboutdialog.ui
@@ -98,7 +98,7 @@
This is experimental software.
-Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php.
+Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php.
This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</string>
</property>
diff --git a/src/qt/forms/addressbookpage.ui b/src/qt/forms/addressbookpage.ui
index 7708e15363..eac35c27ae 100644
--- a/src/qt/forms/addressbookpage.ui
+++ b/src/qt/forms/addressbookpage.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>691</width>
- <height>347</height>
+ <width>760</width>
+ <height>380</height>
</rect>
</property>
<property name="windowTitle">
diff --git a/src/qt/forms/rpcconsole.ui b/src/qt/forms/rpcconsole.ui
index 5593791814..d1d8ab42a0 100644
--- a/src/qt/forms/rpcconsole.ui
+++ b/src/qt/forms/rpcconsole.ui
@@ -315,14 +315,14 @@
</font>
</property>
<property name="text">
- <string>Debug logfile</string>
+ <string>Debug log file</string>
</property>
</widget>
</item>
<item row="15" column="0">
<widget class="QPushButton" name="openDebugLogfileButton">
<property name="toolTip">
- <string>Open the Bitcoin debug logfile from the current data directory. This can take a few seconds for large logfiles.</string>
+ <string>Open the Bitcoin debug log file from the current data directory. This can take a few seconds for large log files.</string>
</property>
<property name="text">
<string>&amp;Open</string>
diff --git a/src/qt/guiconstants.h b/src/qt/guiconstants.h
index 6f6fa7f261..405ba396b7 100644
--- a/src/qt/guiconstants.h
+++ b/src/qt/guiconstants.h
@@ -4,10 +4,10 @@
/* Milliseconds between model updates */
static const int MODEL_UPDATE_DELAY = 500;
-/* Maximum passphrase length */
+/* AskPassphraseDialog -- Maximum passphrase length */
static const int MAX_PASSPHRASE_SIZE = 1024;
-/* Size of icons in status bar */
+/* BitcoinGUI -- Size of icons in status bar */
static const int STATUSBAR_ICONSIZE = 16;
/* Invalid field background style */
diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp
index 50ed2eed04..e6af9c3608 100644
--- a/src/qt/guiutil.cpp
+++ b/src/qt/guiutil.cpp
@@ -412,7 +412,7 @@ bool SetStartOnSystemStartup(bool fAutoStart)
#else
// TODO: OSX startup stuff; see:
-// http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/CustomLogin.html
+// https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPSystemStartup/Articles/CustomLogin.html
bool GetStartOnSystemStartup() { return false; }
bool SetStartOnSystemStartup(bool fAutoStart) { return false; }
diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h
index 0240695505..a6d11081d6 100644
--- a/src/qt/guiutil.h
+++ b/src/qt/guiutil.h
@@ -30,7 +30,7 @@ namespace GUIUtil
void setupAddressWidget(QLineEdit *widget, QWidget *parent);
void setupAmountWidget(QLineEdit *widget, QWidget *parent);
- // Parse "bitcoin:" URI into recipient object, return true on succesful parsing
+ // Parse "bitcoin:" URI into recipient object, return true on successful parsing
// See Bitcoin URI definition discussion here: https://bitcointalk.org/index.php?topic=33490.0
bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out);
bool parseBitcoinURI(QString uri, SendCoinsRecipient *out);
diff --git a/src/qt/locale/bitcoin_bg.ts b/src/qt/locale/bitcoin_bg.ts
index 9006870b9f..d9dc925973 100644
--- a/src/qt/locale/bitcoin_bg.ts
+++ b/src/qt/locale/bitcoin_bg.ts
@@ -264,7 +264,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Паролата за портфейла беше променена успешно.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_ca_ES.ts b/src/qt/locale/bitcoin_ca_ES.ts
index deb7ea9040..a44eca9159 100644
--- a/src/qt/locale/bitcoin_ca_ES.ts
+++ b/src/qt/locale/bitcoin_ca_ES.ts
@@ -263,7 +263,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation type="unfinished"/>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_cs.ts b/src/qt/locale/bitcoin_cs.ts
index 528e17ae99..1a3b99ebbd 100644
--- a/src/qt/locale/bitcoin_cs.ts
+++ b/src/qt/locale/bitcoin_cs.ts
@@ -270,7 +270,7 @@ Jsi si jistý, že chceš peněženku zašifrovat?</translation>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Heslo k peněžence bylo v pořádku změněno.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_da.ts b/src/qt/locale/bitcoin_da.ts
index 66166a74c4..70a5e2f9e7 100644
--- a/src/qt/locale/bitcoin_da.ts
+++ b/src/qt/locale/bitcoin_da.ts
@@ -264,7 +264,7 @@ Er du sikker på at du ønsker at kryptere din tegnebog?</translation>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Tegnebogskodeord blev ændret.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_de.ts b/src/qt/locale/bitcoin_de.ts
index 2b9aaf3296..5b96fbe299 100644
--- a/src/qt/locale/bitcoin_de.ts
+++ b/src/qt/locale/bitcoin_de.ts
@@ -269,7 +269,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Die Passphrase der Brieftasche wurde erfolgreich geändert.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_el_GR.ts b/src/qt/locale/bitcoin_el_GR.ts
index 2058e1a123..63d7bd26a8 100644
--- a/src/qt/locale/bitcoin_el_GR.ts
+++ b/src/qt/locale/bitcoin_el_GR.ts
@@ -270,7 +270,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Ο κωδικος του πορτοφολιού άλλαξε με επιτυχία.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts
index 8561db16f1..c6baca2dd9 100644
--- a/src/qt/locale/bitcoin_en.ts
+++ b/src/qt/locale/bitcoin_en.ts
@@ -5,19 +5,22 @@
<context>
<name>AboutDialog</name>
<message>
+ <location filename="../forms/aboutdialog.ui" line="+14"/>
<source>About Bitcoin</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+39"/>
<source>&lt;b&gt;Bitcoin&lt;/b&gt; version</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+44"/>
<source>Copyright © 2009-2012 Bitcoin Developers
This is experimental software.
-Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php.
+Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php.
This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source>
<translation type="unfinished"></translation>
@@ -26,82 +29,102 @@ This product includes software developed by the OpenSSL Project for use in the O
<context>
<name>AddressBookPage</name>
<message>
+ <location filename="../forms/addressbookpage.ui" line="+14"/>
<source>Address Book</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+22"/>
<source>Double-click to edit address or label</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+27"/>
<source>Create a new address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+14"/>
<source>Copy the currently selected address to the system clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-11"/>
<source>&amp;New Address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-46"/>
<source>These are your Bitcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+60"/>
<source>&amp;Copy Address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+11"/>
<source>Show &amp;QR Code</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+11"/>
<source>Sign a message to prove you own a Bitcoin address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>&amp;Sign Message</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+11"/>
<source>Verify a message to ensure it was signed with a specified Bitcoin address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>&amp;Verify Message</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+11"/>
<source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>&amp;Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../addressbookpage.cpp" line="+65"/>
<source>Copy &amp;Label</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>&amp;Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+250"/>
<source>Export Address Book Data</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Comma separated file (*.csv)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+13"/>
<source>Error exporting</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+0"/>
<source>Could not write to file %1.</source>
<translation type="unfinished"></translation>
</message>
@@ -109,14 +132,17 @@ This product includes software developed by the OpenSSL Project for use in the O
<context>
<name>AddressTableModel</name>
<message>
+ <location filename="../addresstablemodel.cpp" line="+142"/>
<source>Label</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+0"/>
<source>Address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+36"/>
<source>(no label)</source>
<translation type="unfinished"></translation>
</message>
@@ -124,198 +150,244 @@ This product includes software developed by the OpenSSL Project for use in the O
<context>
<name>AskPassphraseDialog</name>
<message>
+ <location filename="../forms/askpassphrasedialog.ui" line="+26"/>
<source>Passphrase Dialog</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+21"/>
<source>Enter passphrase</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+14"/>
<source>New passphrase</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+14"/>
<source>Repeat new passphrase</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../askpassphrasedialog.cpp" line="+33"/>
<source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;10 or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Encrypt wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>This operation needs your wallet passphrase to unlock the wallet.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>Unlock wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>This operation needs your wallet passphrase to decrypt the wallet.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>Decrypt wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Change passphrase</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Enter the old and new passphrase to the wallet.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+46"/>
<source>Confirm wallet encryption</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>WARNING: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!
Are you sure you wish to encrypt your wallet?</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+9"/>
+ <location line="+49"/>
<source>Wallet encrypted</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-48"/>
<source>Bitcoin 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.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+96"/>
+ <location line="+24"/>
<source>Warning: The Caps Lock key is on.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-115"/>
+ <location line="+7"/>
+ <location line="+42"/>
+ <location line="+6"/>
<source>Wallet encryption failed</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-54"/>
<source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
+ <location line="+48"/>
<source>The supplied passphrases do not match.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-37"/>
<source>Wallet unlock failed</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
+ <location line="+11"/>
+ <location line="+19"/>
<source>The passphrase entered for the wallet decryption was incorrect.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-20"/>
<source>Wallet decryption failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Wallet passphrase was succesfully changed.</source>
+ <location line="+14"/>
+ <source>Wallet passphrase was successfully changed.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>BitcoinGUI</name>
<message>
- <source>Bitcoin Wallet</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
+ <location filename="../bitcoingui.cpp" line="+218"/>
<source>Sign &amp;message...</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+48"/>
<source>Show/Hide &amp;Bitcoin</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+247"/>
<source>Synchronizing with network...</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-325"/>
<source>&amp;Overview</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Show general overview of wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>&amp;Transactions</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Browse transaction history</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>&amp;Address Book</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Edit the list of stored addresses and labels</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>&amp;Receive coins</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Show the list of addresses for receiving payments</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>&amp;Send coins</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+41"/>
<source>E&amp;xit</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Quit application</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>&amp;About %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
+ <location line="+4"/>
<source>Show information about Bitcoin</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>About &amp;Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Show information about Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>&amp;Options...</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>&amp;Encrypt Wallet...</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>&amp;Backup Wallet...</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>&amp;Change Passphrase...</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
+ <location line="+240"/>
<source>~%n block(s) remaining</source>
<translation>
<numerusform>~%n block remaining</numerusform>
@@ -323,94 +395,134 @@ Are you sure you wish to encrypt your wallet?</source>
</translation>
</message>
<message>
+ <location line="+11"/>
<source>Downloaded %1 of %2 blocks of transaction history (%3% done).</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-258"/>
<source>&amp;Export...</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-55"/>
<source>Send coins to a Bitcoin address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+6"/>
<source>Sign a message to prove you own a Bitcoin address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+4"/>
<source>Verify a message to ensure it was signed with a specified Bitcoin address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+4"/>
<source>S&amp;ignatures</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+37"/>
<source>Modify configuration options for Bitcoin</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Show or hide the Bitcoin window</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Export the data in the current tab to a file</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Encrypt or decrypt wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Backup wallet to another location</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Change the passphrase used for wallet encryption</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>&amp;Debug window</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Open debugging and diagnostic console</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-56"/>
<source>&amp;Verify message...</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-151"/>
+ <source>Bitcoin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+0"/>
+ <source>Wallet</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+186"/>
+ <source>&amp;About Bitcoin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+44"/>
<source>&amp;File</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+10"/>
<source>&amp;Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+6"/>
<source>&amp;Help</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+9"/>
<source>Tabs toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+11"/>
<source>Actions toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+13"/>
+ <location line="+9"/>
<source>[testnet]</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+0"/>
+ <location line="+60"/>
<source>Bitcoin client</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
+ <location line="+71"/>
<source>%n active connection(s) to Bitcoin network</source>
<translation>
<numerusform>%n active connection to Bitcoin network</numerusform>
@@ -418,10 +530,12 @@ Are you sure you wish to encrypt your wallet?</source>
</translation>
</message>
<message>
+ <location line="+48"/>
<source>Downloaded %1 blocks of transaction history.</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
+ <location line="+15"/>
<source>%n second(s) ago</source>
<translation>
<numerusform>%n second ago</numerusform>
@@ -429,6 +543,7 @@ Are you sure you wish to encrypt your wallet?</source>
</translation>
</message>
<message numerus="yes">
+ <location line="+4"/>
<source>%n minute(s) ago</source>
<translation>
<numerusform>%n minute ago</numerusform>
@@ -436,6 +551,7 @@ Are you sure you wish to encrypt your wallet?</source>
</translation>
</message>
<message numerus="yes">
+ <location line="+4"/>
<source>%n hour(s) ago</source>
<translation>
<numerusform>%n hour ago</numerusform>
@@ -443,6 +559,7 @@ Are you sure you wish to encrypt your wallet?</source>
</translation>
</message>
<message numerus="yes">
+ <location line="+4"/>
<source>%n day(s) ago</source>
<translation>
<numerusform>%n day ago</numerusform>
@@ -450,34 +567,42 @@ Are you sure you wish to encrypt your wallet?</source>
</translation>
</message>
<message>
+ <location line="+6"/>
<source>Up to date</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>Catching up...</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+10"/>
<source>Last received block was generated %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+59"/>
<source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>Confirm transaction fee</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+27"/>
<source>Sent transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Incoming transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Date: %1
Amount: %2
Type: %3
@@ -486,45 +611,57 @@ Address: %4
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+120"/>
+ <location line="+15"/>
<source>URI handling</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-15"/>
+ <location line="+15"/>
<source>URI can not be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+16"/>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+8"/>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+23"/>
<source>Backup Wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+0"/>
<source>Wallet Data (*.dat)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Backup Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+0"/>
<source>There was an error trying to save the wallet data to the new location.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>A fatal error occured. Bitcoin can no longer continue safely and will quit.</source>
+ <location filename="../bitcoin.cpp" line="+112"/>
+ <source>A fatal error occurred. Bitcoin can no longer continue safely and will quit.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ClientModel</name>
<message>
+ <location filename="../clientmodel.cpp" line="+84"/>
<source>Network Alert</source>
<translation type="unfinished"></translation>
</message>
@@ -532,54 +669,67 @@ Address: %4
<context>
<name>EditAddressDialog</name>
<message>
+ <location filename="../forms/editaddressdialog.ui" line="+14"/>
<source>Edit Address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+11"/>
<source>&amp;Label</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+10"/>
<source>The label associated with this address book entry</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>&amp;Address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+10"/>
<source>The address associated with this address book entry. This can only be modified for sending addresses.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../editaddressdialog.cpp" line="+20"/>
<source>New receiving address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+4"/>
<source>New sending address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Edit receiving address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+4"/>
<source>Edit sending address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+60"/>
<source>The entered address &quot;%1&quot; is already in the address book.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>The entered address &quot;%1&quot; is not a valid Bitcoin address.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>Could not unlock wallet.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>New key generation failed.</source>
<translation type="unfinished"></translation>
</message>
@@ -587,34 +737,43 @@ Address: %4
<context>
<name>GUIUtil::HelpMessageBox</name>
<message>
+ <location filename="../guiutil.cpp" line="+425"/>
+ <location line="+12"/>
<source>Bitcoin-Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-12"/>
<source>version</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Usage:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>command-line options</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+4"/>
<source>UI options</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Set language, for example &quot;de_DE&quot; (default: system locale)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Start minimized</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Show splash screen on startup (default: 1)</source>
<translation type="unfinished"></translation>
</message>
@@ -622,154 +781,194 @@ Address: %4
<context>
<name>OptionsDialog</name>
<message>
+ <location filename="../forms/optionsdialog.ui" line="+14"/>
<source>Options</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+16"/>
<source>&amp;Main</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+6"/>
<source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+15"/>
<source>Pay transaction &amp;fee</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+31"/>
<source>Automatically start Bitcoin after logging in to the system.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>&amp;Start Bitcoin on system login</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>Detach block and address databases at shutdown. This means they can be moved to another data directory, but it slows down shutdown. The wallet is always detached.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>&amp;Detach databases at shutdown</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+21"/>
<source>&amp;Network</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+6"/>
<source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Map port using &amp;UPnP</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>Connect to the Bitcoin network through a SOCKS proxy (e.g. when connecting through Tor).</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>&amp;Connect through SOCKS proxy:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+9"/>
<source>Proxy &amp;IP:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+19"/>
<source>IP address of the proxy (e.g. 127.0.0.1)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>&amp;Port:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+19"/>
<source>Port of the proxy (e.g. 9050)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>SOCKS &amp;Version:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+13"/>
<source>SOCKS version of the proxy (e.g. 5)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+36"/>
<source>&amp;Window</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+6"/>
<source>Show only a tray icon after minimizing the window.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>&amp;Minimize to the tray instead of the taskbar</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>M&amp;inimize on close</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+21"/>
<source>&amp;Display</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+8"/>
<source>User Interface &amp;language:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+13"/>
<source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+11"/>
<source>&amp;Unit to show amounts in:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+13"/>
<source>Choose the default subdivision unit to show in the interface and when sending coins.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+9"/>
<source>Whether to show Bitcoin addresses in the transaction list or not.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>&amp;Display addresses in transaction list</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+71"/>
<source>&amp;OK</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+10"/>
<source>&amp;Apply</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../optionsdialog.cpp" line="+63"/>
<source>default</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+133"/>
+ <location line="+9"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-9"/>
+ <location line="+9"/>
<source>This setting will take effect after restarting Bitcoin.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+25"/>
<source>The supplied proxy address is invalid.</source>
<translation type="unfinished"></translation>
</message>
@@ -777,54 +976,69 @@ Address: %4
<context>
<name>OverviewPage</name>
<message>
+ <location filename="../forms/overviewpage.ui" line="+14"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+33"/>
+ <location line="+183"/>
<source>The displayed information may be out of date. Your wallet automatically synchronizes with the Bitcoin network after a connection is established, but this process has not completed yet.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-141"/>
<source>Balance:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+58"/>
<source>Number of transactions:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-29"/>
<source>Unconfirmed:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-78"/>
<source>Wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+124"/>
<source>Immature:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+13"/>
<source>Mined balance that has not yet matured</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+46"/>
<source>&lt;b&gt;Recent transactions&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-118"/>
<source>Your current balance</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+29"/>
<source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+20"/>
<source>Total number of transactions in wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../overviewpage.cpp" line="+112"/>
+ <location line="+1"/>
<source>out of sync</source>
<translation type="unfinished"></translation>
</message>
@@ -832,46 +1046,57 @@ Address: %4
<context>
<name>QRCodeDialog</name>
<message>
+ <location filename="../forms/qrcodedialog.ui" line="+14"/>
<source>QR Code Dialog</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+59"/>
<source>Request Payment</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+56"/>
<source>Amount:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-44"/>
<source>Label:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+19"/>
<source>Message:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+71"/>
<source>&amp;Save As...</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../qrcodedialog.cpp" line="+62"/>
<source>Error encoding URI into QR Code.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+40"/>
<source>The entered amount is invalid, please check.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+23"/>
<source>Resulting URI too long, try to reduce the text for label / message.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+25"/>
<source>Save QR Code</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+0"/>
<source>PNG Images (*.png)</source>
<translation type="unfinished"></translation>
</message>
@@ -879,110 +1104,146 @@ Address: %4
<context>
<name>RPCConsole</name>
<message>
- <source>Bitcoin debug window</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
+ <location filename="../forms/rpcconsole.ui" line="+46"/>
<source>Client name</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+10"/>
+ <location line="+23"/>
+ <location line="+26"/>
+ <location line="+23"/>
+ <location line="+23"/>
+ <location line="+36"/>
+ <location line="+53"/>
+ <location line="+23"/>
+ <location line="+23"/>
+ <location filename="../rpcconsole.cpp" line="+246"/>
<source>N/A</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-217"/>
<source>Client version</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-45"/>
<source>&amp;Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Client</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
+ <location line="+68"/>
<source>Using OpenSSL version</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+49"/>
<source>Startup time</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+29"/>
<source>Network</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>Number of connections</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+23"/>
<source>On testnet</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+23"/>
<source>Block chain</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>Current number of blocks</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+23"/>
<source>Estimated total blocks</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+23"/>
<source>Last block time</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Debug logfile</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Open the Bitcoin debug logfile from the current data directory. This can take a few seconds for large logfiles.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
+ <location line="+52"/>
<source>&amp;Open</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+16"/>
<source>Command-line options</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>Show the Bitcoin-Qt help message to get a list with possible Bitcoin command-line options.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>&amp;Show</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+24"/>
<source>&amp;Console</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-260"/>
<source>Build date</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-104"/>
+ <source>Bitcoin - Debug window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+25"/>
+ <source>Bitcoin Core</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+279"/>
+ <source>Debug log file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Open the Bitcoin debug log file from the current data directory. This can take a few seconds for large log files.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+102"/>
<source>Clear console</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../rpcconsole.cpp" line="-33"/>
<source>Welcome to the Bitcoin RPC console.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Type &lt;b&gt;help&lt;/b&gt; for an overview of available commands.</source>
<translation type="unfinished"></translation>
</message>
@@ -990,82 +1251,109 @@ Address: %4
<context>
<name>SendCoinsDialog</name>
<message>
+ <location filename="../forms/sendcoinsdialog.ui" line="+14"/>
+ <location filename="../sendcoinsdialog.cpp" line="+123"/>
+ <location line="+5"/>
+ <location line="+5"/>
+ <location line="+5"/>
+ <location line="+6"/>
+ <location line="+5"/>
+ <location line="+5"/>
<source>Send Coins</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+50"/>
<source>Send to multiple recipients at once</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>&amp;Add Recipient</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+20"/>
<source>Remove all transaction fields</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Clear &amp;All</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+22"/>
<source>Balance:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+10"/>
<source>123.456 BTC</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+31"/>
<source>Confirm the send action</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>&amp;Send</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../sendcoinsdialog.cpp" line="-59"/>
<source>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>Confirm send coins</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Are you sure you want to send %1?</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+0"/>
<source> and </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The recepient address is not valid, please recheck.</source>
+ <location line="+23"/>
+ <source>The recipient address is not valid, please recheck.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>The amount to pay must be larger than 0.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>The amount exceeds your balance.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+6"/>
<source>Duplicate address found, can only send to each address once per send operation.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>Error: Transaction creation failed.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
<translation type="unfinished"></translation>
</message>
@@ -1073,50 +1361,63 @@ Address: %4
<context>
<name>SendCoinsEntry</name>
<message>
+ <location filename="../forms/sendcoinsentry.ui" line="+14"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+15"/>
<source>A&amp;mount:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+13"/>
<source>Pay &amp;To:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+24"/>
+ <location filename="../sendcoinsentry.cpp" line="+25"/>
<source>Enter a label for this address to add it to your address book</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+9"/>
<source>&amp;Label:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+18"/>
<source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+10"/>
<source>Choose address from address book</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+10"/>
<source>Alt+A</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>Paste address from clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+10"/>
<source>Alt+P</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>Remove this recipient</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../sendcoinsentry.cpp" line="+1"/>
<source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
<translation type="unfinished"></translation>
</message>
@@ -1124,134 +1425,179 @@ Address: %4
<context>
<name>SignVerifyMessageDialog</name>
<message>
- <source>Messaging - Sign / Verify a Message</source>
+ <location filename="../forms/signverifymessagedialog.ui" line="+14"/>
+ <source>Signatures - Sign / Verify a Message</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+13"/>
+ <location line="+124"/>
<source>&amp;Sign Message</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-118"/>
<source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+18"/>
<source>The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+10"/>
+ <location line="+203"/>
<source>Choose an address from the address book</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-193"/>
+ <location line="+203"/>
<source>Alt+A</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-193"/>
<source>Paste address from clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+10"/>
<source>Alt+P</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+12"/>
<source>Enter the message you want to sign here</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+24"/>
<source>Copy the current signature to the system clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+21"/>
<source>Sign the message to prove you own this Bitcoin address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+17"/>
<source>Reset all sign message fields</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
+ <location line="+146"/>
<source>Clear &amp;All</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-87"/>
+ <location line="+70"/>
<source>&amp;Verify Message</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-64"/>
<source>Enter the signing 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.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+21"/>
<source>The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+40"/>
<source>Verify the message to ensure it was signed with the specified Bitcoin address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+17"/>
<source>Reset all verify message fields</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../signverifymessagedialog.cpp" line="+27"/>
+ <location line="+3"/>
<source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-2"/>
<source>Click &quot;Sign Message&quot; to generate signature</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Enter Bitcoin signature</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+82"/>
+ <location line="+81"/>
<source>The entered address is invalid.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-81"/>
+ <location line="+8"/>
+ <location line="+73"/>
+ <location line="+8"/>
<source>Please check the address and try again.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-81"/>
+ <location line="+81"/>
<source>The entered address does not refer to a key.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-73"/>
<source>Wallet unlock was canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+8"/>
<source>Private key for the entered address is not available.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+12"/>
<source>Message signing failed.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>Message signed.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+59"/>
<source>The signature could not be decoded.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+0"/>
+ <location line="+13"/>
<source>Please check the signature and try again.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+0"/>
<source>The signature did not match the message digest.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>Message verification failed.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>Message verified.</source>
<translation type="unfinished"></translation>
</message>
@@ -1259,10 +1605,12 @@ Address: %4
<context>
<name>TransactionDesc</name>
<message>
+ <location filename="../transactiondesc.cpp" line="+19"/>
<source>Open until %1</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
+ <location line="-2"/>
<source>Open for %n block(s)</source>
<translation type="unfinished">
<numerusform>Open for %n block</numerusform>
@@ -1270,22 +1618,27 @@ Address: %4
</translation>
</message>
<message>
+ <location line="+8"/>
<source>%1/offline</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>%1/unconfirmed</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>%1 confirmations</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+18"/>
<source>Status</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
+ <location line="+7"/>
<source>, broadcast through %n node(s)</source>
<translation>
<numerusform>, broadcast through %n node</numerusform>
@@ -1293,38 +1646,55 @@ Address: %4
</translation>
</message>
<message>
+ <location line="+4"/>
<source>Date</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+0"/>
<source>Generated</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+6"/>
+ <location line="+17"/>
<source>From</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
+ <location line="+22"/>
+ <location line="+58"/>
<source>To</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-77"/>
+ <location line="+2"/>
<source>own address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-2"/>
<source>label</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+37"/>
+ <location line="+12"/>
+ <location line="+45"/>
+ <location line="+17"/>
+ <location line="+30"/>
<source>Credit</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
+ <location line="-102"/>
<source>matures in %n more block(s)</source>
<translation>
<numerusform>matures in %n more block</numerusform>
@@ -1332,66 +1702,85 @@ Address: %4
</translation>
</message>
<message>
+ <location line="+2"/>
<source>not accepted</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+44"/>
+ <location line="+8"/>
+ <location line="+15"/>
+ <location line="+30"/>
<source>Debit</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-39"/>
<source>Transaction fee</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+16"/>
<source>Net amount</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+6"/>
<source>Message</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Comment</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Transaction ID</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to &quot;not accepted&quot; and it won&apos;t be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>Debug information</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+8"/>
<source>Transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+5"/>
<source>Inputs</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+23"/>
<source>Amount</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>true</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+0"/>
<source>false</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-212"/>
<source>, has not been successfully broadcast yet</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+36"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
@@ -1399,10 +1788,12 @@ Address: %4
<context>
<name>TransactionDescDialog</name>
<message>
+ <location filename="../forms/transactiondescdialog.ui" line="+14"/>
<source>Transaction details</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+6"/>
<source>This pane shows a detailed description of the transaction</source>
<translation type="unfinished"></translation>
</message>
@@ -1410,22 +1801,27 @@ Address: %4
<context>
<name>TransactionTableModel</name>
<message>
+ <location filename="../transactiontablemodel.cpp" line="+226"/>
<source>Date</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+0"/>
<source>Type</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+0"/>
<source>Address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+0"/>
<source>Amount</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
+ <location line="+57"/>
<source>Open for %n block(s)</source>
<translation>
<numerusform>Open for %n block</numerusform>
@@ -1433,22 +1829,27 @@ Address: %4
</translation>
</message>
<message>
+ <location line="+3"/>
<source>Open until %1</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Offline (%1 confirmations)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Unconfirmed (%1 of %2 confirmations)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Confirmed (%1 confirmations)</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
+ <location line="+8"/>
<source>Mined balance will be available when it matures in %n more block(s)</source>
<translation>
<numerusform>Mined balance will be available when it matures in %n more block</numerusform>
@@ -1456,54 +1857,67 @@ Address: %4
</translation>
</message>
<message>
+ <location line="+5"/>
<source>This block was not received by any other nodes and will probably not be accepted!</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Generated but not accepted</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+43"/>
<source>Received with</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Received from</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Sent to</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Payment to yourself</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Mined</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+38"/>
<source>(n/a)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+199"/>
<source>Transaction status. Hover over this field to show number of confirmations.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Date and time that the transaction was received.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Type of transaction.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Destination address of transaction.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Amount removed from or added to balance.</source>
<translation type="unfinished"></translation>
</message>
@@ -1511,130 +1925,163 @@ Address: %4
<context>
<name>TransactionView</name>
<message>
+ <location filename="../transactionview.cpp" line="+55"/>
+ <location line="+16"/>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-15"/>
<source>Today</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>This week</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>This month</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Last month</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>This year</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Range...</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+11"/>
<source>Received with</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Sent to</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>To yourself</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Mined</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Other</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>Enter address or label to search</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+7"/>
<source>Min amount</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+34"/>
<source>Copy address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Copy label</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Copy amount</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Edit label</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Show transaction details</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+142"/>
<source>Export Transaction Data</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Comma separated file (*.csv)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+8"/>
<source>Confirmed</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Date</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Type</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Label</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Amount</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>ID</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+4"/>
<source>Error exporting</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+0"/>
<source>Could not write to file %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+95"/>
<source>Range:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+8"/>
<source>to</source>
<translation type="unfinished"></translation>
</message>
@@ -1642,6 +2089,7 @@ Address: %4
<context>
<name>WalletModel</name>
<message>
+ <location filename="../walletmodel.cpp" line="+192"/>
<source>Sending...</source>
<translation type="unfinished"></translation>
</message>
@@ -1649,411 +2097,513 @@ Address: %4
<context>
<name>bitcoin-core</name>
<message>
+ <location filename="../bitcoinstrings.cpp" line="+62"/>
<source>Bitcoin version</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+76"/>
<source>Usage:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-22"/>
<source>Send command to -server or bitcoind</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-19"/>
<source>List commands</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-9"/>
<source>Get help for a command</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+19"/>
<source>Options:</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+19"/>
<source>Specify configuration file (default: bitcoin.conf)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Specify pid file (default: bitcoind.pid)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-42"/>
<source>Generate coins</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-14"/>
<source>Don&apos;t generate coins</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+55"/>
<source>Specify data directory</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-5"/>
<source>Set database cache size in megabytes (default: 25)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Set database disk log size in megabytes (default: 100)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Specify connection timeout (in milliseconds)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-28"/>
<source>Listen for connections on &lt;port&gt; (default: 8333 or testnet: 18333)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+4"/>
<source>Maintain at most &lt;n&gt; connections to peers (default: 125)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-32"/>
<source>Connect to a node to retrieve peer addresses, and disconnect</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+59"/>
<source>Specify your own public address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-69"/>
<source>Bind to given address. Use [host]:port notation for IPv6</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+71"/>
<source>Threshold for disconnecting misbehaving peers (default: 100)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-96"/>
<source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-12"/>
<source>Detach block and address databases. Increases shutdown time (default: 0)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+31"/>
<source>Accept command line and JSON-RPC commands</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+59"/>
<source>Run in the background as a daemon and accept commands</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+29"/>
<source>Use the test network</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-87"/>
<source>Accept connections from outside (default: 1 if no -proxy or -connect)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+13"/>
<source>Connect only to the specified node(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Discover own IP address (default: 1 when listening and no -externalip)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+11"/>
<source>Failed to listen on any port. Use -listen=0 if you want this.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Find peers using DNS lookup (default: 1 unless -connect)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+9"/>
<source>Invalid -tor address: &apos;%s&apos;</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+10"/>
<source>Maximum per-connection receive buffer, &lt;n&gt;*1000 bytes (default: 5000)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Maximum per-connection send buffer, &lt;n&gt;*1000 bytes (default: 1000)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Only connect to nodes in network &lt;net&gt; (IPv4, IPv6 or Tor)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Output extra debugging information. Implies all other -debug* options</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Output extra network debugging information</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Prepend debug output with timestamp</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+4"/>
<source>Select the version of socks proxy to use (4-5, default: 5)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Send trace/debug info to console instead of debug.log file</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Send trace/debug info to debugger</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+21"/>
<source>Use UPnP to map the listening port (default: 0)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Use UPnP to map the listening port (default: 1 when listening)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Use proxy to reach tor hidden services (default: same as -proxy)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Username for JSON-RPC connections</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Warning: this version is obsolete, upgrade required</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-37"/>
<source>Password for JSON-RPC connections</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-12"/>
<source>Listen for JSON-RPC connections on &lt;port&gt; (default: 8332)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-39"/>
<source>Allow JSON-RPC connections from specified IP address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+58"/>
<source>Send commands to node running on &lt;ip&gt; (default: 127.0.0.1)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-84"/>
<source>Execute command when the best block changes (%s in cmd is replaced by block hash)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+104"/>
<source>Upgrade wallet to latest format</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-12"/>
<source>Set key pool size to &lt;n&gt; (default: 100)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-13"/>
<source>Rescan the block chain for missing wallet transactions</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-23"/>
<source>How many blocks to check at startup (default: 2500, 0 = all)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>How thorough the block verification is (0-6, default: 1)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Imports blocks from external blk000?.dat file</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-39"/>
<source>
SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+87"/>
<source>Use OpenSSL (https) for JSON-RPC connections</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-18"/>
<source>Server certificate file (default: server.cert)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Server private key (default: server.pem)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-104"/>
<source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+128"/>
<source>Warning: Disk space is low</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-15"/>
<source>This help message</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-110"/>
<source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+42"/>
<source>Bitcoin</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+71"/>
<source>Unable to bind to %s on this computer (bind returned error %d, %s)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-64"/>
<source>Connect through socks proxy</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-12"/>
<source>Allow DNS lookups for -addnode, -seednode and -connect</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+42"/>
<source>Loading addresses...</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-25"/>
<source>Error loading blkindex.dat</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+2"/>
<source>Error loading wallet.dat: Wallet corrupted</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+67"/>
<source>Wallet needed to be rewritten: restart Bitcoin to complete</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-69"/>
<source>Error loading wallet.dat</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+17"/>
<source>Invalid -proxy address: &apos;%s&apos;</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+43"/>
<source>Unknown network specified in -onlynet: &apos;%s&apos;</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-1"/>
<source>Unknown -socks proxy version requested: %i</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-69"/>
<source>Cannot resolve -bind address: &apos;%s&apos;</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Cannot resolve -externalip address: &apos;%s&apos;</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+28"/>
<source>Invalid amount for -paytxfee=&lt;amount&gt;: &apos;%s&apos;</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-13"/>
<source>Error: could not start node</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-1"/>
<source>Error: Wallet locked, unable to create transaction </source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-51"/>
<source>Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds </source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+50"/>
<source>Error: Transaction creation failed </source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+40"/>
<source>Sending...</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-94"/>
<source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+70"/>
<source>Invalid amount</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-4"/>
<source>Insufficient funds</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+9"/>
<source>Loading block index...</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-44"/>
<source>Add a node to connect to and attempt to keep the connection open</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-18"/>
<source>Unable to bind to %s on this computer. Bitcoin is probably already running.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+47"/>
<source>Find peers using internet relay chat (default: 0)</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-2"/>
<source>Fee per KB to add to transactions you send</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-43"/>
<source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+61"/>
<source>Loading wallet...</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-38"/>
<source>Cannot downgrade wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+1"/>
<source>Cannot initialize keypool</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+3"/>
<source>Cannot write default address</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+45"/>
<source>Rescanning...</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-39"/>
<source>Done loading</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+59"/>
<source>To use the %s option</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-124"/>
<source>%s, you must set a rpcpassword in the configuration file:
%s
It is recommended you use the following random password:
@@ -2065,20 +2615,24 @@ If the file does not exist, create it with owner-readable-only file permissions.
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="+70"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-19"/>
<source>An error occured while setting up the RPC port %i for listening: %s</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-13"/>
<source>You must set rpcpassword=&lt;password&gt; in the configuration file:
%s
If the file does not exist, create it with owner-readable-only file permissions.</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location line="-3"/>
<source>Warning: Please check that your computer&apos;s date and time are correct. If your clock is wrong Bitcoin will not work properly.</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src/qt/locale/bitcoin_es.ts b/src/qt/locale/bitcoin_es.ts
index 2636d196d6..aa93097c4c 100644
--- a/src/qt/locale/bitcoin_es.ts
+++ b/src/qt/locale/bitcoin_es.ts
@@ -270,7 +270,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>La contraseña del monedero ha sido cambiada correctamente.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_es_CL.ts b/src/qt/locale/bitcoin_es_CL.ts
index 89228e5a97..e1be3866a1 100644
--- a/src/qt/locale/bitcoin_es_CL.ts
+++ b/src/qt/locale/bitcoin_es_CL.ts
@@ -270,7 +270,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>La contraseña de billetera ha sido cambiada con éxito.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_et.ts b/src/qt/locale/bitcoin_et.ts
index aafd7a214f..c4c18244e9 100644
--- a/src/qt/locale/bitcoin_et.ts
+++ b/src/qt/locale/bitcoin_et.ts
@@ -263,7 +263,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation type="unfinished"/>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_eu_ES.ts b/src/qt/locale/bitcoin_eu_ES.ts
index 01a156c0b1..4466b568da 100644
--- a/src/qt/locale/bitcoin_eu_ES.ts
+++ b/src/qt/locale/bitcoin_eu_ES.ts
@@ -263,7 +263,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation type="unfinished"/>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_fa.ts b/src/qt/locale/bitcoin_fa.ts
index e918c460e5..7184b84b40 100644
--- a/src/qt/locale/bitcoin_fa.ts
+++ b/src/qt/locale/bitcoin_fa.ts
@@ -272,7 +272,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>عبارت عبور با موفقیت تغییر شد</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_fa_IR.ts b/src/qt/locale/bitcoin_fa_IR.ts
index 01958e81d7..fd5116a547 100644
--- a/src/qt/locale/bitcoin_fa_IR.ts
+++ b/src/qt/locale/bitcoin_fa_IR.ts
@@ -263,7 +263,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation type="unfinished"/>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_fi.ts b/src/qt/locale/bitcoin_fi.ts
index e9fcf50330..a6ad4f8f77 100644
--- a/src/qt/locale/bitcoin_fi.ts
+++ b/src/qt/locale/bitcoin_fi.ts
@@ -270,7 +270,7 @@ Tahdotko varmasti salata lompakon?</translation>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Lompakon tunnuslause on vaihdettu.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_fr.ts b/src/qt/locale/bitcoin_fr.ts
index 03ff69e3c6..bc71752a87 100644
--- a/src/qt/locale/bitcoin_fr.ts
+++ b/src/qt/locale/bitcoin_fr.ts
@@ -270,7 +270,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>La phrase de passe du porte-monnaie a été modifiée avec succès.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_fr_CA.ts b/src/qt/locale/bitcoin_fr_CA.ts
index e3565d210b..a6bf6704b4 100644
--- a/src/qt/locale/bitcoin_fr_CA.ts
+++ b/src/qt/locale/bitcoin_fr_CA.ts
@@ -263,7 +263,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation type="unfinished"/>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_he.ts b/src/qt/locale/bitcoin_he.ts
index 224bf54d5d..de1d6aae30 100644
--- a/src/qt/locale/bitcoin_he.ts
+++ b/src/qt/locale/bitcoin_he.ts
@@ -270,7 +270,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>סיסמת הארנק שונתה בהצלחה.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_hr.ts b/src/qt/locale/bitcoin_hr.ts
index 300bbd64b6..20d1520d90 100644
--- a/src/qt/locale/bitcoin_hr.ts
+++ b/src/qt/locale/bitcoin_hr.ts
@@ -270,7 +270,7 @@ Jeste li sigurni da želite šifrirati svoj novčanik?</translation>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Lozinka novčanika je uspješno promijenjena.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_hu.ts b/src/qt/locale/bitcoin_hu.ts
index e69453c8e6..67dd119650 100644
--- a/src/qt/locale/bitcoin_hu.ts
+++ b/src/qt/locale/bitcoin_hu.ts
@@ -264,7 +264,7 @@ Biztosan kódolni akarod a tárcát?</translation>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Jelszó megváltoztatva.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_it.ts b/src/qt/locale/bitcoin_it.ts
index 92d3b7cf2d..fb3ceaa40e 100644
--- a/src/qt/locale/bitcoin_it.ts
+++ b/src/qt/locale/bitcoin_it.ts
@@ -270,7 +270,7 @@ Si è sicuri di voler cifrare il portamonete?</translation>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Passphrase del portamonete modificata con successo.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_lt.ts b/src/qt/locale/bitcoin_lt.ts
index f14b5ecb86..d89080084e 100644
--- a/src/qt/locale/bitcoin_lt.ts
+++ b/src/qt/locale/bitcoin_lt.ts
@@ -271,7 +271,7 @@ Ar jūs tikrai norite užšifruoti savo piniginę?</translation>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Sėkmingai pakeistas piniginės slaptažodis</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_nb.ts b/src/qt/locale/bitcoin_nb.ts
index 8f32f6b65f..4fe706a37b 100644
--- a/src/qt/locale/bitcoin_nb.ts
+++ b/src/qt/locale/bitcoin_nb.ts
@@ -270,7 +270,7 @@ Er du sikker på at du vil kryptere lommeboken?</translation>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Lommebokens adgangsfrase ble endret.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_nl.ts b/src/qt/locale/bitcoin_nl.ts
index 8ffa7694ff..43ac38a211 100644
--- a/src/qt/locale/bitcoin_nl.ts
+++ b/src/qt/locale/bitcoin_nl.ts
@@ -271,7 +271,7 @@ Bent u er zeker van uw dat u uw portemonnee wilt versleutelen?</translation>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Portemonneewachtwoord is succesvol gewijzigd</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_pl.ts b/src/qt/locale/bitcoin_pl.ts
index fe44a97a03..62535cf803 100644
--- a/src/qt/locale/bitcoin_pl.ts
+++ b/src/qt/locale/bitcoin_pl.ts
@@ -275,7 +275,7 @@ Czy na pewno chcesz zaszyfrować swój portfel?</translation>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Hasło do portfela zostało pomyślnie zmienione.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_pt_BR.ts b/src/qt/locale/bitcoin_pt_BR.ts
index 64e292358e..2252b3129a 100644
--- a/src/qt/locale/bitcoin_pt_BR.ts
+++ b/src/qt/locale/bitcoin_pt_BR.ts
@@ -269,7 +269,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>A frase de segurança da carteira foi alterada com êxito.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_pt_PT.ts b/src/qt/locale/bitcoin_pt_PT.ts
index bd7f74bb7f..30717fda8e 100644
--- a/src/qt/locale/bitcoin_pt_PT.ts
+++ b/src/qt/locale/bitcoin_pt_PT.ts
@@ -269,7 +269,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>A frase de segurança da carteira foi alterada com êxito.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_ro_RO.ts b/src/qt/locale/bitcoin_ro_RO.ts
index 6b8bbd3732..1f387b06cf 100644
--- a/src/qt/locale/bitcoin_ro_RO.ts
+++ b/src/qt/locale/bitcoin_ro_RO.ts
@@ -264,7 +264,7 @@ Sunteţi sigur că doriţi să criptaţi portofelul electronic?</translation>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Parola portofelului electronic a fost schimbată.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_ru.ts b/src/qt/locale/bitcoin_ru.ts
index f4e3c8c851..2d481ec7c2 100644
--- a/src/qt/locale/bitcoin_ru.ts
+++ b/src/qt/locale/bitcoin_ru.ts
@@ -270,7 +270,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Пароль бумажника успешно изменён.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_sk.ts b/src/qt/locale/bitcoin_sk.ts
index bd56dd1bf6..d423ae44be 100644
--- a/src/qt/locale/bitcoin_sk.ts
+++ b/src/qt/locale/bitcoin_sk.ts
@@ -264,7 +264,7 @@ Ste si istí, že si želáte zašifrovať peňaženku?</translation>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Heslo k peňaženke bolo úspešne zmenené.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_sr.ts b/src/qt/locale/bitcoin_sr.ts
index 89d8f77a5f..bac82f14b9 100644
--- a/src/qt/locale/bitcoin_sr.ts
+++ b/src/qt/locale/bitcoin_sr.ts
@@ -264,7 +264,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Лозинка за приступ новчанику је успешно промењена.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_sv.ts b/src/qt/locale/bitcoin_sv.ts
index d41390fb7c..9b03314d5e 100644
--- a/src/qt/locale/bitcoin_sv.ts
+++ b/src/qt/locale/bitcoin_sv.ts
@@ -270,7 +270,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Plånbokens lösenord har ändrats.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_tr.ts b/src/qt/locale/bitcoin_tr.ts
index 4e0e82dc1d..b84e078cc1 100644
--- a/src/qt/locale/bitcoin_tr.ts
+++ b/src/qt/locale/bitcoin_tr.ts
@@ -270,7 +270,7 @@ Cüzdanınızı şifrelemek istediğinizden emin misiniz?</translation>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Cüzdan parolası başarılı bir şekilde değiştirildi.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_uk.ts b/src/qt/locale/bitcoin_uk.ts
index bf41f5113a..dda0e5b419 100644
--- a/src/qt/locale/bitcoin_uk.ts
+++ b/src/qt/locale/bitcoin_uk.ts
@@ -270,7 +270,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>Пароль було успішно змінено.</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_zh_CN.ts b/src/qt/locale/bitcoin_zh_CN.ts
index 087e19b00e..6029be0708 100644
--- a/src/qt/locale/bitcoin_zh_CN.ts
+++ b/src/qt/locale/bitcoin_zh_CN.ts
@@ -270,7 +270,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>钱包口令修改成功</translation>
</message>
</context>
diff --git a/src/qt/locale/bitcoin_zh_TW.ts b/src/qt/locale/bitcoin_zh_TW.ts
index c2b318e990..74027800c1 100644
--- a/src/qt/locale/bitcoin_zh_TW.ts
+++ b/src/qt/locale/bitcoin_zh_TW.ts
@@ -270,7 +270,7 @@ Are you sure you wish to encrypt your wallet?</source>
</message>
<message>
<location filename="../askpassphrasedialog.cpp" line="160"/>
- <source>Wallet passphrase was succesfully changed.</source>
+ <source>Wallet passphrase was successfully changed.</source>
<translation>錢包密碼變更成功.</translation>
</message>
</context>
diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp
index 5f39c7814d..6bb7eaec2e 100644
--- a/src/qt/optionsdialog.cpp
+++ b/src/qt/optionsdialog.cpp
@@ -1,26 +1,17 @@
#include "optionsdialog.h"
#include "ui_optionsdialog.h"
-#include "bitcoinamountfield.h"
#include "bitcoinunits.h"
#include "monitoreddatamapper.h"
#include "netbase.h"
#include "optionsmodel.h"
-#include "qvalidatedlineedit.h"
-#include "qvaluecombobox.h"
-#include <QCheckBox>
#include <QDir>
#include <QIntValidator>
-#include <QLabel>
-#include <QLineEdit>
#include <QLocale>
#include <QMessageBox>
-#include <QPushButton>
#include <QRegExp>
#include <QRegExpValidator>
-#include <QTabWidget>
-#include <QWidget>
OptionsDialog::OptionsDialog(QWidget *parent) :
QDialog(parent),
@@ -38,18 +29,19 @@ OptionsDialog::OptionsDialog(QWidget *parent) :
ui->mapPortUpnp->setEnabled(false);
#endif
+ ui->proxyIp->setEnabled(false);
+ ui->proxyPort->setEnabled(false);
+ ui->proxyPort->setValidator(new QIntValidator(1, 65535, this));
+
ui->socksVersion->setEnabled(false);
ui->socksVersion->addItem("5", 5);
ui->socksVersion->addItem("4", 4);
ui->socksVersion->setCurrentIndex(0);
- ui->proxyIp->setEnabled(false);
- ui->proxyPort->setEnabled(false);
- ui->proxyPort->setValidator(new QIntValidator(0, 65535, this));
-
- connect(ui->connectSocks, SIGNAL(toggled(bool)), ui->socksVersion, SLOT(setEnabled(bool)));
connect(ui->connectSocks, SIGNAL(toggled(bool)), ui->proxyIp, SLOT(setEnabled(bool)));
connect(ui->connectSocks, SIGNAL(toggled(bool)), ui->proxyPort, SLOT(setEnabled(bool)));
+ connect(ui->connectSocks, SIGNAL(toggled(bool)), ui->socksVersion, SLOT(setEnabled(bool)));
+ connect(ui->connectSocks, SIGNAL(clicked(bool)), this, SLOT(showRestartWarning_Proxy()));
ui->proxyIp->installEventFilter(this);
@@ -90,9 +82,6 @@ OptionsDialog::OptionsDialog(QWidget *parent) :
ui->unit->setModel(new BitcoinUnits(this));
- connect(ui->connectSocks, SIGNAL(clicked(bool)), this, SLOT(showRestartWarning_Proxy()));
- connect(ui->lang, SIGNAL(activated(int)), this, SLOT(showRestartWarning_Lang()));
-
/* Widget-to-option mapper */
mapper = new MonitoredDataMapper(this);
mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
@@ -102,8 +91,8 @@ OptionsDialog::OptionsDialog(QWidget *parent) :
connect(mapper, SIGNAL(viewModified()), this, SLOT(enableSaveButtons()));
/* disable save buttons when new data loaded */
connect(mapper, SIGNAL(currentIndexChanged(int)), this, SLOT(disableSaveButtons()));
- /* disable/enable save buttons when proxy IP is invalid/valid */
- connect(this, SIGNAL(proxyIpValid(bool)), this, SLOT(setSaveButtonState(bool)));
+ /* setup/change UI elements when proxy IP is invalid/valid */
+ connect(this, SIGNAL(proxyIpValid(QValidatedLineEdit *, bool)), this, SLOT(handleProxyIpValid(QValidatedLineEdit *, bool)));
}
OptionsDialog::~OptionsDialog()
@@ -124,8 +113,11 @@ void OptionsDialog::setModel(OptionsModel *model)
mapper->toFirst();
}
- // update the display unit, to not use the default ("BTC")
+ /* update the display unit, to not use the default ("BTC") */
updateDisplayUnit();
+
+ /* warn only when language selection changes (placed here so init of ui->lang via mapper doesn't trigger this) */
+ connect(ui->lang, SIGNAL(valueChanged()), this, SLOT(showRestartWarning_Lang()));
}
void OptionsDialog::setMapper()
@@ -137,10 +129,11 @@ void OptionsDialog::setMapper()
/* Network */
mapper->addMapping(ui->mapPortUpnp, OptionsModel::MapPortUPnP);
+
mapper->addMapping(ui->connectSocks, OptionsModel::ProxyUse);
- mapper->addMapping(ui->socksVersion, OptionsModel::ProxySocksVersion);
mapper->addMapping(ui->proxyIp, OptionsModel::ProxyIP);
mapper->addMapping(ui->proxyPort, OptionsModel::ProxyPort);
+ mapper->addMapping(ui->socksVersion, OptionsModel::ProxySocksVersion);
/* Window */
#ifndef Q_WS_MAC
@@ -156,7 +149,7 @@ void OptionsDialog::setMapper()
void OptionsDialog::enableSaveButtons()
{
- // prevent enabling of the save buttons when data modified, if there is an invalid proxy address present
+ /* prevent enabling of the save buttons when data modified, if there is an invalid proxy address present */
if(fProxyIpValid)
setSaveButtonState(true);
}
@@ -211,30 +204,39 @@ void OptionsDialog::updateDisplayUnit()
{
if(model)
{
- // Update transactionFee with the current unit
+ /* Update transactionFee with the current unit */
ui->transactionFee->setDisplayUnit(model->getDisplayUnit());
}
}
+void OptionsDialog::handleProxyIpValid(QValidatedLineEdit *object, bool fState)
+{
+ // this is used in a check before re-enabling the save buttons
+ fProxyIpValid = fState;
+
+ if(fProxyIpValid)
+ {
+ enableSaveButtons();
+ ui->statusLabel->clear();
+ }
+ else
+ {
+ disableSaveButtons();
+ object->setValid(fProxyIpValid);
+ ui->statusLabel->setStyleSheet("QLabel { color: red; }");
+ ui->statusLabel->setText(tr("The supplied proxy address is invalid."));
+ }
+}
+
bool OptionsDialog::eventFilter(QObject *object, QEvent *event)
{
- if(object == ui->proxyIp && event->type() == QEvent::FocusOut)
+ if(event->type() == QEvent::FocusOut)
{
- // Check proxyIP for a valid IPv4/IPv6 address
- CService addr;
- if(!LookupNumeric(ui->proxyIp->text().toStdString().c_str(), addr))
- {
- ui->proxyIp->setValid(false);
- fProxyIpValid = false;
- ui->statusLabel->setStyleSheet("QLabel { color: red; }");
- ui->statusLabel->setText(tr("The supplied proxy address is invalid."));
- emit proxyIpValid(false);
- }
- else
+ if(object == ui->proxyIp)
{
- fProxyIpValid = true;
- ui->statusLabel->clear();
- emit proxyIpValid(true);
+ CService addr;
+ /* Check proxyIp for a valid IPv4/IPv6 address and emit the proxyIpValid signal */
+ emit proxyIpValid(ui->proxyIp, LookupNumeric(ui->proxyIp->text().toStdString().c_str(), addr));
}
}
return QDialog::eventFilter(object, event);
diff --git a/src/qt/optionsdialog.h b/src/qt/optionsdialog.h
index 7e91c96475..9e91000b63 100644
--- a/src/qt/optionsdialog.h
+++ b/src/qt/optionsdialog.h
@@ -8,6 +8,7 @@ class OptionsDialog;
}
class OptionsModel;
class MonitoredDataMapper;
+class QValidatedLineEdit;
/** Preferences dialog. */
class OptionsDialog : public QDialog
@@ -38,9 +39,10 @@ private slots:
void showRestartWarning_Proxy();
void showRestartWarning_Lang();
void updateDisplayUnit();
+ void handleProxyIpValid(QValidatedLineEdit *object, bool fState);
signals:
- void proxyIpValid(bool fValid);
+ void proxyIpValid(QValidatedLineEdit *object, bool fValid);
private:
Ui::OptionsDialog *ui;
diff --git a/src/qt/qtipcserver.cpp b/src/qt/qtipcserver.cpp
index f9ee9ad5ca..ccdfc66bad 100644
--- a/src/qt/qtipcserver.cpp
+++ b/src/qt/qtipcserver.cpp
@@ -1,81 +1,97 @@
// Copyright (c) 2009-2012 The Bitcoin developers
// Distributed under the MIT/X11 software license, see the accompanying
-// file license.txt or http://www.opensource.org/licenses/mit-license.php.
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#include "qtipcserver.h"
+#include "guiconstants.h"
+#include "ui_interface.h"
+#include "util.h"
-#include <boost/algorithm/string.hpp>
-#include <boost/interprocess/ipc/message_queue.hpp>
-#include <boost/tokenizer.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
+#include <boost/interprocess/ipc/message_queue.hpp>
#include <boost/version.hpp>
#if defined(WIN32) && (!defined(BOOST_INTERPROCESS_HAS_WINDOWS_KERNEL_BOOTTIME) || !defined(BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME) || BOOST_VERSION < 104900)
#warning Compiling without BOOST_INTERPROCESS_HAS_WINDOWS_KERNEL_BOOTTIME and BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME uncommented in boost/interprocess/detail/tmp_dir_helpers.hpp or using a boost version before 1.49 may have unintended results see svn.boost.org/trac/boost/ticket/5392
#endif
-#include "ui_interface.h"
-#include "qtipcserver.h"
-#include "util.h"
-
+using namespace boost;
using namespace boost::interprocess;
using namespace boost::posix_time;
-using namespace boost;
-using namespace std;
+
+static void ipcThread2(void* pArg);
#ifdef MAC_OSX
// URI handling not implemented on OSX yet
void ipcInit() { }
-void ipcShutdown() { }
#else
-void ipcShutdown()
+static void ipcThread(void* pArg)
{
- message_queue::remove(BITCOINURI_QUEUE_NAME);
+ IMPLEMENT_RANDOMIZE_STACK(ipcThread(pArg));
+
+ // Make this thread recognisable as the GUI-IPC thread
+ RenameThread("bitcoin-gui-ipc");
+
+ try
+ {
+ ipcThread2(pArg);
+ }
+ catch (std::exception& e) {
+ PrintExceptionContinue(&e, "ipcThread()");
+ } catch (...) {
+ PrintExceptionContinue(NULL, "ipcThread()");
+ }
+ printf("ipcThread exited\n");
}
-void ipcThread(void* parg)
+static void ipcThread2(void* pArg)
{
- // Make this thread recognisable as the GUI-IPC thread
- RenameThread("bitcoin-gui-ipc");
+ printf("ipcThread started\n");
+
+ message_queue* mq = (message_queue*)pArg;
+ char buffer[MAX_URI_LENGTH + 1] = "";
+ size_t nSize = 0;
+ unsigned int nPriority = 0;
- message_queue* mq = (message_queue*)parg;
- char strBuf[257];
- size_t nSize;
- unsigned int nPriority;
loop
{
ptime d = boost::posix_time::microsec_clock::universal_time() + millisec(100);
- if(mq->timed_receive(&strBuf, sizeof(strBuf), nSize, nPriority, d))
+ if (mq->timed_receive(&buffer, sizeof(buffer), nSize, nPriority, d))
{
- uiInterface.ThreadSafeHandleURI(std::string(strBuf, nSize));
+ uiInterface.ThreadSafeHandleURI(std::string(buffer, nSize));
Sleep(1000);
}
+
if (fShutdown)
- {
- ipcShutdown();
break;
- }
}
- ipcShutdown();
+
+ // Remove message queue
+ message_queue::remove(BITCOINURI_QUEUE_NAME);
+ // Cleanup allocated memory
+ delete mq;
}
void ipcInit()
{
- message_queue* mq;
- char strBuf[257];
- size_t nSize;
- unsigned int nPriority;
+ message_queue* mq = NULL;
+ char buffer[MAX_URI_LENGTH + 1] = "";
+ size_t nSize = 0;
+ unsigned int nPriority = 0;
+
try {
- mq = new message_queue(open_or_create, BITCOINURI_QUEUE_NAME, 2, 256);
+ mq = new message_queue(open_or_create, BITCOINURI_QUEUE_NAME, 2, MAX_URI_LENGTH);
// Make sure we don't lose any bitcoin: URIs
for (int i = 0; i < 2; i++)
{
ptime d = boost::posix_time::microsec_clock::universal_time() + millisec(1);
- if(mq->timed_receive(&strBuf, sizeof(strBuf), nSize, nPriority, d))
+ if (mq->timed_receive(&buffer, sizeof(buffer), nSize, nPriority, d))
{
- uiInterface.ThreadSafeHandleURI(std::string(strBuf, nSize));
+ uiInterface.ThreadSafeHandleURI(std::string(buffer, nSize));
}
else
break;
@@ -83,14 +99,19 @@ void ipcInit()
// Make sure only one bitcoin instance is listening
message_queue::remove(BITCOINURI_QUEUE_NAME);
- mq = new message_queue(open_or_create, BITCOINURI_QUEUE_NAME, 2, 256);
+ delete mq;
+
+ mq = new message_queue(open_or_create, BITCOINURI_QUEUE_NAME, 2, MAX_URI_LENGTH);
}
catch (interprocess_exception &ex) {
+ printf("ipcInit() - boost interprocess exception #%d: %s\n", ex.get_error_code(), ex.what());
return;
}
+
if (!CreateThread(ipcThread, mq))
{
delete mq;
+ return;
}
}
diff --git a/src/qt/qtipcserver.h b/src/qt/qtipcserver.h
index fcff10d8da..484b6222eb 100644
--- a/src/qt/qtipcserver.h
+++ b/src/qt/qtipcserver.h
@@ -1,4 +1,9 @@
+#ifndef QTIPCSERVER_H
+#define QTIPCSERVER_H
+
+// Define Bitcoin-Qt message queue name
#define BITCOINURI_QUEUE_NAME "BitcoinURI"
void ipcInit();
-void ipcShutdown();
+
+#endif // QTIPCSERVER_H
diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp
index 86c2b01fec..2c46ea5a70 100644
--- a/src/qt/sendcoinsdialog.cpp
+++ b/src/qt/sendcoinsdialog.cpp
@@ -121,7 +121,7 @@ void SendCoinsDialog::on_sendButton_clicked()
{
case WalletModel::InvalidAddress:
QMessageBox::warning(this, tr("Send Coins"),
- tr("The recepient address is not valid, please recheck."),
+ tr("The recipient address is not valid, please recheck."),
QMessageBox::Ok, QMessageBox::Ok);
break;
case WalletModel::InvalidAmount:
diff --git a/src/qt/transactionview.cpp b/src/qt/transactionview.cpp
index a0e7dd4e77..1370a30ce4 100644
--- a/src/qt/transactionview.cpp
+++ b/src/qt/transactionview.cpp
@@ -160,6 +160,8 @@ void TransactionView::setModel(WalletModel *model)
transactionProxyModel = new TransactionFilterProxy(this);
transactionProxyModel->setSourceModel(model->getTransactionTableModel());
transactionProxyModel->setDynamicSortFilter(true);
+ transactionProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive);
+ transactionProxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
transactionProxyModel->setSortRole(Qt::EditRole);
diff --git a/src/rpcrawtransaction.cpp b/src/rpcrawtransaction.cpp
index 8ffe4844c6..66e4d85f37 100644
--- a/src/rpcrawtransaction.cpp
+++ b/src/rpcrawtransaction.cpp
@@ -276,14 +276,16 @@ Value decoderawtransaction(const Array& params, bool fHelp)
Value signrawtransaction(const Array& params, bool fHelp)
{
- if (fHelp || params.size() < 1 || params.size() > 3)
+ if (fHelp || params.size() < 1 || params.size() > 4)
throw runtime_error(
- "signrawtransaction <hex string> [{\"txid\":txid,\"vout\":n,\"scriptPubKey\":hex},...] [<privatekey1>,...]\n"
+ "signrawtransaction <hex string> [{\"txid\":txid,\"vout\":n,\"scriptPubKey\":hex},...] [<privatekey1>,...] [sighashtype=\"ALL\"]\n"
"Sign inputs for raw transaction (serialized, hex-encoded).\n"
"Second optional argument is an array of previous transaction outputs that\n"
"this transaction depends on but may not yet be in the blockchain.\n"
"Third optional argument is an array of base58-encoded private\n"
"keys that, if given, will be the only keys used to sign the transaction.\n"
+ "Fourth option is a string that is one of six values; ALL, NONE, SINGLE or\n"
+ "ALL|ANYONECANPAY, NONE|ANYONECANPAY, SINGLE|ANYONECANPAY.\n"
"Returns json object with keys:\n"
" hex : raw transaction with signature(s) (hex-encoded string)\n"
" complete : 1 if transaction has a complete set of signature (0 if not)"
@@ -402,6 +404,25 @@ Value signrawtransaction(const Array& params, bool fHelp)
}
const CKeyStore& keystore = (fGivenKeys ? tempKeystore : *pwalletMain);
+ int nHashType = SIGHASH_ALL;
+ if (params.size() > 3)
+ {
+ static map<string, int> mapSigHashValues =
+ boost::assign::map_list_of
+ (string("ALL"), int(SIGHASH_ALL))
+ (string("ALL|ANYONECANPAY"), int(SIGHASH_ALL|SIGHASH_ANYONECANPAY))
+ (string("NONE"), int(SIGHASH_NONE))
+ (string("NONE|ANYONECANPAY"), int(SIGHASH_NONE|SIGHASH_ANYONECANPAY))
+ (string("SINGLE"), int(SIGHASH_SINGLE))
+ (string("SINGLE|ANYONECANPAY"), int(SIGHASH_SINGLE|SIGHASH_ANYONECANPAY))
+ ;
+ string strHashType = params[3].get_str();
+ if (mapSigHashValues.count(strHashType))
+ nHashType = mapSigHashValues[strHashType];
+ else
+ throw JSONRPCError(-8, "Invalid sighash param");
+ }
+
// Sign what we can:
for (unsigned int i = 0; i < mergedTx.vin.size(); i++)
{
@@ -414,7 +435,7 @@ Value signrawtransaction(const Array& params, bool fHelp)
const CScript& prevPubKey = mapPrevOut[txin.prevout];
txin.scriptSig.clear();
- SignSignature(keystore, prevPubKey, mergedTx, i);
+ SignSignature(keystore, prevPubKey, mergedTx, i, nHashType);
// ... and merge in other signatures:
BOOST_FOREACH(const CTransaction& txv, txVariants)
diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp
index 5712b4a1b1..3c6039541e 100644
--- a/src/test/miner_tests.cpp
+++ b/src/test/miner_tests.cpp
@@ -1,12 +1,202 @@
#include <boost/test/unit_test.hpp>
+#include "init.h"
+#include "main.h"
#include "uint256.h"
#include "util.h"
+#include "wallet.h"
extern void SHA256Transform(void* pstate, void* pinput, const void* pinit);
BOOST_AUTO_TEST_SUITE(miner_tests)
+static
+struct {
+ unsigned char extranonce;
+ unsigned int nonce;
+} blockinfo[] = {
+ {4, 0xa4a3e223}, {2, 0x15c32f9e}, {1, 0x0375b547}, {1, 0x7004a8a5},
+ {2, 0xce440296}, {2, 0x52cfe198}, {1, 0x77a72cd0}, {2, 0xbb5d6f84},
+ {2, 0x83f30c2c}, {1, 0x48a73d5b}, {1, 0xef7dcd01}, {2, 0x6809c6c4},
+ {2, 0x0883ab3c}, {1, 0x087bbbe2}, {2, 0x2104a814}, {2, 0xdffb6daa},
+ {1, 0xee8a0a08}, {2, 0xba4237c1}, {1, 0xa70349dc}, {1, 0x344722bb},
+ {3, 0xd6294733}, {2, 0xec9f5c94}, {2, 0xca2fbc28}, {1, 0x6ba4f406},
+ {2, 0x015d4532}, {1, 0x6e119b7c}, {2, 0x43e8f314}, {2, 0x27962f38},
+ {2, 0xb571b51b}, {2, 0xb36bee23}, {2, 0xd17924a8}, {2, 0x6bc212d9},
+ {1, 0x630d4948}, {2, 0x9a4c4ebb}, {2, 0x554be537}, {1, 0xd63ddfc7},
+ {2, 0xa10acc11}, {1, 0x759a8363}, {2, 0xfb73090d}, {1, 0xe82c6a34},
+ {1, 0xe33e92d7}, {3, 0x658ef5cb}, {2, 0xba32ff22}, {5, 0x0227a10c},
+ {1, 0xa9a70155}, {5, 0xd096d809}, {1, 0x37176174}, {1, 0x830b8d0f},
+ {1, 0xc6e3910e}, {2, 0x823f3ca8}, {1, 0x99850849}, {1, 0x7521fb81},
+ {1, 0xaacaabab}, {1, 0xd645a2eb}, {5, 0x7aea1781}, {5, 0x9d6e4b78},
+ {1, 0x4ce90fd8}, {1, 0xabdc832d}, {6, 0x4a34f32a}, {2, 0xf2524c1c},
+ {2, 0x1bbeb08a}, {1, 0xad47f480}, {1, 0x9f026aeb}, {1, 0x15a95049},
+ {2, 0xd1cb95b2}, {2, 0xf84bbda5}, {1, 0x0fa62cd1}, {1, 0xe05f9169},
+ {1, 0x78d194a9}, {5, 0x3e38147b}, {5, 0x737ba0d4}, {1, 0x63378e10},
+ {1, 0x6d5f91cf}, {2, 0x88612eb8}, {2, 0xe9639484}, {1, 0xb7fabc9d},
+ {2, 0x19b01592}, {1, 0x5a90dd31}, {2, 0x5bd7e028}, {2, 0x94d00323},
+ {1, 0xa9b9c01a}, {1, 0x3a40de61}, {1, 0x56e7eec7}, {5, 0x859f7ef6},
+ {1, 0xfd8e5630}, {1, 0x2b0c9f7f}, {1, 0xba700e26}, {1, 0x7170a408},
+ {1, 0x70de86a8}, {1, 0x74d64cd5}, {1, 0x49e738a1}, {2, 0x6910b602},
+ {0, 0x643c565f}, {1, 0x54264b3f}, {2, 0x97ea6396}, {2, 0x55174459},
+ {2, 0x03e8779a}, {1, 0x98f34d8f}, {1, 0xc07b2b07}, {1, 0xdfe29668},
+ {1, 0x3141c7c1}, {1, 0xb3b595f4}, {1, 0x735abf08}, {5, 0x623bfbce},
+ {2, 0xd351e722}, {1, 0xf4ca48c9}, {1, 0x5b19c670}, {1, 0xa164bf0e},
+ {2, 0xbbbeb305}, {2, 0xfe1c810a},
+};
+
+// NOTE: These tests rely on CreateNewBlock doing its own self-validation!
+BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
+{
+ CReserveKey reservekey(pwalletMain);
+ CBlock *pblock;
+ CTransaction tx;
+ CScript script;
+ uint256 hash;
+
+ // Simple block creation, nothing special yet:
+ BOOST_CHECK(pblock = CreateNewBlock(reservekey));
+
+ // We can't make transactions until we have inputs
+ // Therefore, load 100 blocks :)
+ std::vector<CTransaction*>txFirst;
+ for (unsigned int i = 0; i < sizeof(blockinfo)/sizeof(*blockinfo); ++i)
+ {
+ pblock->nTime = pindexBest->GetMedianTimePast()+1;
+ pblock->vtx[0].vin[0].scriptSig = CScript();
+ pblock->vtx[0].vin[0].scriptSig.push_back(blockinfo[i].extranonce);
+ pblock->vtx[0].vin[0].scriptSig.push_back(pindexBest->nHeight);
+ pblock->vtx[0].vout[0].scriptPubKey = CScript();
+ if (txFirst.size() < 2)
+ txFirst.push_back(new CTransaction(pblock->vtx[0]));
+ pblock->hashMerkleRoot = pblock->BuildMerkleTree();
+ pblock->nNonce = blockinfo[i].nonce;
+ assert(ProcessBlock(NULL, pblock));
+ pblock->hashPrevBlock = pblock->GetHash();
+ }
+ delete pblock;
+
+ // Just to make sure we can still make simple blocks
+ BOOST_CHECK(pblock = CreateNewBlock(reservekey));
+
+ // block sigops > limit: 1000 CHECKMULTISIG + 1
+ tx.vin.resize(1);
+ // NOTE: OP_NOP is used to force 20 SigOps for the CHECKMULTISIG
+ tx.vin[0].scriptSig = CScript() << OP_0 << OP_0 << OP_0 << OP_NOP << OP_CHECKMULTISIG << OP_1;
+ tx.vin[0].prevout.hash = txFirst[0]->GetHash();
+ tx.vin[0].prevout.n = 0;
+ tx.vout.resize(1);
+ tx.vout[0].nValue = 5000000000LL;
+ for (unsigned int i = 0; i < 1001; ++i)
+ {
+ tx.vout[0].nValue -= 1000000;
+ hash = tx.GetHash();
+ mempool.addUnchecked(hash, tx);
+ tx.vin[0].prevout.hash = hash;
+ }
+ BOOST_CHECK(pblock = CreateNewBlock(reservekey));
+ delete pblock;
+ mempool.clear();
+
+ // block size > limit
+ tx.vin[0].scriptSig = CScript();
+ // 18 * (520char + DROP) + OP_1 = 9433 bytes
+ std::vector<unsigned char> vchData(520);
+ for (unsigned int i = 0; i < 18; ++i)
+ tx.vin[0].scriptSig << vchData << OP_DROP;
+ tx.vin[0].scriptSig << OP_1;
+ tx.vin[0].prevout.hash = txFirst[0]->GetHash();
+ tx.vout[0].nValue = 5000000000LL;
+ for (unsigned int i = 0; i < 128; ++i)
+ {
+ tx.vout[0].nValue -= 10000000;
+ hash = tx.GetHash();
+ mempool.addUnchecked(hash, tx);
+ tx.vin[0].prevout.hash = hash;
+ }
+ BOOST_CHECK(pblock = CreateNewBlock(reservekey));
+ delete pblock;
+ mempool.clear();
+
+ // orphan in mempool
+ hash = tx.GetHash();
+ mempool.addUnchecked(hash, tx);
+ BOOST_CHECK(pblock = CreateNewBlock(reservekey));
+ delete pblock;
+ mempool.clear();
+
+ // child with higher priority than parent
+ tx.vin[0].scriptSig = CScript() << OP_1;
+ tx.vin[0].prevout.hash = txFirst[1]->GetHash();
+ tx.vout[0].nValue = 4900000000LL;
+ hash = tx.GetHash();
+ mempool.addUnchecked(hash, tx);
+ tx.vin[0].prevout.hash = hash;
+ tx.vin.resize(2);
+ tx.vin[1].scriptSig = CScript() << OP_1;
+ tx.vin[1].prevout.hash = txFirst[0]->GetHash();
+ tx.vin[1].prevout.n = 0;
+ tx.vout[0].nValue = 5900000000LL;
+ hash = tx.GetHash();
+ mempool.addUnchecked(hash, tx);
+ BOOST_CHECK(pblock = CreateNewBlock(reservekey));
+ delete pblock;
+ mempool.clear();
+
+ // coinbase in mempool
+ tx.vin.resize(1);
+ tx.vin[0].prevout.SetNull();
+ tx.vin[0].scriptSig = CScript() << OP_0 << OP_1;
+ tx.vout[0].nValue = 0;
+ hash = tx.GetHash();
+ mempool.addUnchecked(hash, tx);
+ BOOST_CHECK(pblock = CreateNewBlock(reservekey));
+ delete pblock;
+ mempool.clear();
+
+ // invalid (pre-p2sh) txn in mempool
+ tx.vin[0].prevout.hash = txFirst[0]->GetHash();
+ tx.vin[0].prevout.n = 0;
+ tx.vin[0].scriptSig = CScript() << OP_1;
+ tx.vout[0].nValue = 4900000000LL;
+ script = CScript() << OP_0;
+ tx.vout[0].scriptPubKey.SetDestination(script.GetID());
+ hash = tx.GetHash();
+ mempool.addUnchecked(hash, tx);
+ tx.vin[0].prevout.hash = hash;
+ tx.vin[0].scriptSig = CScript() << (std::vector<unsigned char>)script;
+ tx.vout[0].nValue -= 1000000;
+ hash = tx.GetHash();
+ mempool.addUnchecked(hash,tx);
+ BOOST_CHECK(pblock = CreateNewBlock(reservekey));
+ delete pblock;
+ mempool.clear();
+
+ // double spend txn pair in mempool
+ tx.vin[0].prevout.hash = txFirst[0]->GetHash();
+ tx.vin[0].scriptSig = CScript() << OP_1;
+ tx.vout[0].nValue = 4900000000LL;
+ tx.vout[0].scriptPubKey = CScript() << OP_1;
+ hash = tx.GetHash();
+ mempool.addUnchecked(hash, tx);
+ tx.vout[0].scriptPubKey = CScript() << OP_2;
+ hash = tx.GetHash();
+ mempool.addUnchecked(hash, tx);
+ BOOST_CHECK(pblock = CreateNewBlock(reservekey));
+ delete pblock;
+ mempool.clear();
+
+ // subsidy changing
+ int nHeight = pindexBest->nHeight;
+ pindexBest->nHeight = 209999;
+ BOOST_CHECK(pblock = CreateNewBlock(reservekey));
+ delete pblock;
+ pindexBest->nHeight = 210000;
+ BOOST_CHECK(pblock = CreateNewBlock(reservekey));
+ delete pblock;
+ pindexBest->nHeight = nHeight;
+}
+
BOOST_AUTO_TEST_CASE(sha256transform_equality)
{
unsigned int pSHA256InitState[8] = {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19};
diff --git a/src/test/test_bitcoin.cpp b/src/test/test_bitcoin.cpp
index 96d63bff97..cae0bb6baf 100644
--- a/src/test/test_bitcoin.cpp
+++ b/src/test/test_bitcoin.cpp
@@ -1,6 +1,7 @@
#define BOOST_TEST_MODULE Bitcoin Test Suite
#include <boost/test/unit_test.hpp>
+#include "db.h"
#include "main.h"
#include "wallet.h"
@@ -14,13 +15,18 @@ struct TestingSetup {
TestingSetup() {
fPrintToConsole = true; // don't want to write to debug.log file
noui_connect();
- pwalletMain = new CWallet();
+ bitdb.MakeMock();
+ LoadBlockIndex(true);
+ bool fFirstRun;
+ pwalletMain = new CWallet("wallet.dat");
+ pwalletMain->LoadWallet(fFirstRun);
RegisterWallet(pwalletMain);
}
~TestingSetup()
{
delete pwalletMain;
pwalletMain = NULL;
+ bitdb.Flush(true);
}
};
diff --git a/src/util.cpp b/src/util.cpp
index 963d58cd8b..4cb8a214da 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -75,7 +75,7 @@ bool fLogTimestamps = false;
CMedianFilter<int64> vTimeOffsets(200,0);
bool fReopenDebugLog = false;
-// Init openssl library multithreading support
+// Init OpenSSL library multithreading support
static CCriticalSection** ppmutexOpenSSL;
void locking_callback(int mode, int i, const char* file, int line)
{
@@ -92,7 +92,7 @@ class CInit
public:
CInit()
{
- // Init openssl library multithreading support
+ // Init OpenSSL library multithreading support
ppmutexOpenSSL = (CCriticalSection**)OPENSSL_malloc(CRYPTO_num_locks() * sizeof(CCriticalSection*));
for (int i = 0; i < CRYPTO_num_locks(); i++)
ppmutexOpenSSL[i] = new CCriticalSection();
@@ -108,7 +108,7 @@ public:
}
~CInit()
{
- // Shutdown openssl library multithreading support
+ // Shutdown OpenSSL library multithreading support
CRYPTO_set_locking_callback(NULL);
for (int i = 0; i < CRYPTO_num_locks(); i++)
delete ppmutexOpenSSL[i];