aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md35
-rw-r--r--configure.ac2
-rw-r--r--contrib/gitian-descriptors/gitian-osx-bitcoin.yml25
-rw-r--r--contrib/gitian-descriptors/gitian-osx-depends.yml15
-rw-r--r--contrib/gitian-descriptors/gitian-osx-native.yml15
-rw-r--r--contrib/gitian-descriptors/gitian-osx-qt.yml24
-rw-r--r--contrib/gitian-downloader/cfields-key.pgp52
-rw-r--r--contrib/gitian-downloader/linux-download-config3
-rw-r--r--contrib/gitian-downloader/win32-download-config3
-rw-r--r--contrib/macdeploy/README.md4
-rwxr-xr-xcontrib/macdeploy/macdeployqtplus11
-rw-r--r--doc/README_osx.txt14
-rw-r--r--doc/build-unix.md10
-rw-r--r--doc/release-notes/release-notes-0.9.1.md53
-rw-r--r--doc/release-process.md8
-rw-r--r--src/addrman.h4
-rw-r--r--src/checkpoints.cpp4
-rw-r--r--src/core.cpp29
-rw-r--r--src/core.h1
-rw-r--r--src/init.cpp2
-rw-r--r--src/key.cpp15
-rw-r--r--src/key.h4
-rw-r--r--src/leveldbwrapper.h4
-rw-r--r--src/main.cpp13
-rw-r--r--src/main.h14
-rw-r--r--src/net.cpp31
-rw-r--r--src/net.h9
-rw-r--r--src/netbase.cpp46
-rw-r--r--src/netbase.h3
-rw-r--r--src/qt/bitcoingui.cpp2
-rw-r--r--src/qt/guiutil.cpp6
-rw-r--r--src/qt/locale/bitcoin_da.ts166
-rw-r--r--src/qt/locale/bitcoin_id_ID.ts72
-rw-r--r--src/qt/locale/bitcoin_ko_KR.ts74
-rw-r--r--src/qt/locale/bitcoin_ro_RO.ts6
-rw-r--r--src/qt/macdockiconhandler.mm2
-rw-r--r--src/qt/notificator.cpp2
-rw-r--r--src/qt/optionsmodel.cpp6
-rw-r--r--src/qt/test/test_main.cpp1
-rw-r--r--src/rpcnet.cpp2
-rw-r--r--src/rpcprotocol.cpp10
-rw-r--r--src/rpcwallet.cpp13
-rw-r--r--src/script.h2
-rw-r--r--src/test/data/tx_valid.json46
-rw-r--r--src/test/util_tests.cpp4
-rw-r--r--src/util.cpp18
-rw-r--r--src/util.h11
-rw-r--r--src/wallet.cpp15
-rw-r--r--src/wallet.h5
49 files changed, 517 insertions, 399 deletions
diff --git a/README.md b/README.md
index ddeaf988ee..102aa56201 100644
--- a/README.md
+++ b/README.md
@@ -81,3 +81,38 @@ Periodically the translations are pulled from Transifex and merged into the git
**Important**: We do not accept translation changes as github pull request because the next
pull from Transifex would automatically overwrite them again.
+
+Development tips and tricks
+---------------------------
+
+**compiling for debugging**
+
+Run configure with the --enable-debug option, then make. Or run configure with
+CXXFLAGS="-g -ggdb -O0" or whatever debug flags you need.
+
+**debug.log**
+
+If the code is behaving strangely, take a look in the debug.log file in the data directory;
+error and debugging message are written there.
+
+The -debug=... command-line option controls debugging; running with just -debug will turn
+on all categories (and give you a very large debug.log file).
+
+The Qt code routes qDebug() output to debug.log under category "qt": run with -debug=qt
+to see it.
+
+**testnet and regtest modes**
+
+Run with the -testnet option to run with "play bitcoins" on the test network, if you
+are testing multi-machine code that needs to operate across the internet.
+
+If you are testing something that can run on one machine, run with the -regtest option.
+In regression test mode blocks can be created on-demand; see qa/rpc-tests/ for tests
+that run in -regest mode.
+
+**DEBUG_LOCKORDER**
+
+Bitcoin Core is a multithreaded application, and deadlocks or other multithreading bugs
+can be very difficult to track down. Compiling with -DDEBUG_LOCKORDER (configure
+CXXFLAGS="-DDEBUG_LOCKORDER -g") inserts run-time checks to keep track of what locks
+are held, and adds warning to the debug.log file if inconsistencies are detected.
diff --git a/configure.ac b/configure.ac
index 6a8afe6e44..3a8d33a5a0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -303,6 +303,8 @@ INCLUDES="$INCLUDES $PTHREAD_CFLAGS"
# they also need to be passed down to any subprojects. Pull the results out of
# the cache and add them to CPPFLAGS.
AC_SYS_LARGEFILE
+# detect POSIX or GNU variant of strerror_r
+AC_FUNC_STRERROR_R
if test x$ac_cv_sys_file_offset_bits != x &&
test x$ac_cv_sys_file_offset_bits != xno &&
diff --git a/contrib/gitian-descriptors/gitian-osx-bitcoin.yml b/contrib/gitian-descriptors/gitian-osx-bitcoin.yml
index aea4b93a1f..e29047d610 100644
--- a/contrib/gitian-descriptors/gitian-osx-bitcoin.yml
+++ b/contrib/gitian-descriptors/gitian-osx-bitcoin.yml
@@ -17,33 +17,28 @@ remotes:
- "url": "https://github.com/bitcoin/bitcoin.git"
"dir": "bitcoin"
files:
-- "osx-native-depends-r2.tar.gz"
-- "osx-depends-r2.tar.gz"
-- "osx-depends-qt-5.2.1-r2.tar.gz"
-- "MacOSX10.6.pkg"
+- "osx-native-depends-r3.tar.gz"
+- "osx-depends-r3.tar.gz"
+- "osx-depends-qt-5.2.1-r3.tar.gz"
+- "MacOSX10.7.sdk.tar.gz"
script: |
- echo "a2ccf2299de4e0bb88bd17a3355f02b747575b97492c7c2f5b789a64ccc4cbd6 MacOSX10.6.pkg" | sha256sum -c
-
HOST=x86_64-apple-darwin11
PREFIX=`pwd`/osx-cross-depends/prefix
- SDK=`pwd`/osx-cross-depends/SDKs/MacOSX10.6.sdk
+ SDK=`pwd`/osx-cross-depends/SDKs/MacOSX10.7.sdk
NATIVEPREFIX=`pwd`/osx-cross-depends/native-prefix
export TAR_OPTIONS="-m --mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME""
export SOURCES_PATH=`pwd`
- mkdir osx-cross-depends
+ mkdir -p osx-cross-depends/SDKs
- cd osx-cross-depends
- mkdir -p SDKs
- 7z -bd -so -y e ${SOURCES_PATH}/MacOSX10.6.pkg Payload | gzip -d -c | cpio -i
- cd ..
+ tar -C osx-cross-depends/SDKs -xf ${SOURCES_PATH}/MacOSX10.7.sdk.tar.gz
- tar -C osx-cross-depends -xf osx-native-depends-r2.tar.gz
- tar -C osx-cross-depends -xf osx-depends-r2.tar.gz
- tar -C osx-cross-depends -xf osx-depends-qt-5.2.1-r2.tar.gz
+ tar -C osx-cross-depends -xf osx-native-depends-r3.tar.gz
+ tar -C osx-cross-depends -xf osx-depends-r3.tar.gz
+ tar -C osx-cross-depends -xf osx-depends-qt-5.2.1-r3.tar.gz
export PATH=`pwd`/osx-cross-depends/native-prefix/bin:$PATH
cd bitcoin
diff --git a/contrib/gitian-descriptors/gitian-osx-depends.yml b/contrib/gitian-descriptors/gitian-osx-depends.yml
index 8e91a30ded..adc86e5cb4 100644
--- a/contrib/gitian-descriptors/gitian-osx-depends.yml
+++ b/contrib/gitian-descriptors/gitian-osx-depends.yml
@@ -18,8 +18,8 @@ files:
- "openssl-1.0.1g.tar.gz"
- "protobuf-2.5.0.tar.bz2"
- "qrencode-3.4.3.tar.bz2"
-- "MacOSX10.6.pkg"
-- "osx-native-depends-r2.tar.gz"
+- "MacOSX10.7.sdk.tar.gz"
+- "osx-native-depends-r3.tar.gz"
script: |
@@ -29,9 +29,8 @@ script: |
echo "53cb818c3b90e507a8348f4f5eaedb05d8bfe5358aabb508b7263cc670c3e028 openssl-1.0.1g.tar.gz" | sha256sum -c
echo "13bfc5ae543cf3aa180ac2485c0bc89495e3ae711fc6fab4f8ffe90dfb4bb677 protobuf-2.5.0.tar.bz2" | sha256sum -c
echo "dfd71487513c871bad485806bfd1fdb304dedc84d2b01a8fb8e0940b50597a98 qrencode-3.4.3.tar.bz2" | sha256sum -c
- echo "a2ccf2299de4e0bb88bd17a3355f02b747575b97492c7c2f5b789a64ccc4cbd6 MacOSX10.6.pkg" | sha256sum -c
- REVISION=r2
+ REVISION=r3
export SOURCES_PATH=`pwd`
export TAR_OPTIONS="-m --mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME""
export PATH=$HOME:$PATH
@@ -44,7 +43,7 @@ script: |
PREFIX=`pwd`/prefix
NATIVEPREFIX=`pwd`/native-prefix
BUILD_BASE=`pwd`/build
- SDK=`pwd`/SDKs/MacOSX10.6.sdk
+ SDK=`pwd`/SDKs/MacOSX10.7.sdk
HOST=x86_64-apple-darwin11
MIN_VERSION=10.6
@@ -70,10 +69,10 @@ script: |
mkdir -p ${PREFIX}/lib
mkdir -p ${BUILD_BASE}
- mkdir -p ${SDK}
- 7z -bd -so -y e ${SOURCES_PATH}/MacOSX10.6.pkg Payload | gzip -d -c | cpio -i
+ mkdir -p SDKs
+ tar -C SDKs -xf ${SOURCES_PATH}/MacOSX10.7.sdk.tar.gz
- tar xf /home/ubuntu/build/osx-native-depends-r2.tar.gz
+ tar xf /home/ubuntu/build/osx-native-depends-r3.tar.gz
# bdb
SOURCE_FILE=${SOURCES_PATH}/db-4.8.30.NC.tar.gz
diff --git a/contrib/gitian-descriptors/gitian-osx-native.yml b/contrib/gitian-descriptors/gitian-osx-native.yml
index 6040e5ac5b..a753ad704f 100644
--- a/contrib/gitian-descriptors/gitian-osx-native.yml
+++ b/contrib/gitian-descriptors/gitian-osx-native.yml
@@ -24,7 +24,7 @@ files:
- "dyld-195.5.tar.gz"
- "ld64-127.2.tar.gz"
- "protobuf-2.5.0.tar.bz2"
-- "MacOSX10.6.pkg"
+- "MacOSX10.7.sdk.tar.gz"
- "cdrkit-1.1.11.tar.gz"
- "libdmg-hfsplus-v0.1.tar.gz"
- "clang-llvm-3.2-x86-linux-ubuntu-12.04.tar.gz"
@@ -38,14 +38,13 @@ script: |
echo "2cf0484c87cf79b606b351a7055a247dae84093ae92c747a74e0cde2c8c8f83c dyld-195.5.tar.gz" | sha256sum -c
echo "97b75547b2bd761306ab3e15ae297f01e7ab9760b922bc657f4ef72e4e052142 ld64-127.2.tar.gz" | sha256sum -c
echo "13bfc5ae543cf3aa180ac2485c0bc89495e3ae711fc6fab4f8ffe90dfb4bb677 protobuf-2.5.0.tar.bz2" | sha256sum -c
- echo "a2ccf2299de4e0bb88bd17a3355f02b747575b97492c7c2f5b789a64ccc4cbd6 MacOSX10.6.pkg" | sha256sum -c
echo "d1c030756ecc182defee9fe885638c1785d35a2c2a297b4604c0e0dcc78e47da cdrkit-1.1.11.tar.gz" | sha256sum -c
echo "6569a02eb31c2827080d7d59001869ea14484c281efab0ae7f2b86af5c3120b3 libdmg-hfsplus-v0.1.tar.gz" | sha256sum -c
echo "b9d57a88f9514fa1f327a1a703756d0c1c960f4c58494a5bd80313245d13ffff clang-llvm-3.2-x86-linux-ubuntu-12.04.tar.gz" | sha256sum -c
echo "cc12bdbd7a09f71cb2a6a3e6ec3e0abe885ca7111c2b47857f5095e5980caf4f cdrkit-deterministic.patch" | sha256sum -c
- REVISION=r2
+ REVISION=r3
export REFERENCE_DATETIME
export TAR_OPTIONS="-m --mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME""
export FAKETIME=$REFERENCE_DATETIME
@@ -78,7 +77,7 @@ script: |
NATIVEPREFIX=`pwd`/native-prefix
BUILD_BASE=`pwd`/build
- SDK=`pwd`/SDKs/MacOSX10.6.sdk
+ SDK=`pwd`/SDKs/MacOSX10.7.sdk
HOST=x86_64-apple-darwin11
MIN_VERSION=10.6
@@ -91,8 +90,8 @@ script: |
mkdir -p ${NATIVEPREFIX}/bin
mkdir -p ${NATIVEPREFIX}/lib
- mkdir -p ${SDK}
- 7z -bd -so -y e ${SOURCES_PATH}/MacOSX10.6.pkg Payload | gzip -d -c | cpio -i
+ mkdir -p SDKs
+ tar -C SDKs -xf ${SOURCES_PATH}/MacOSX10.7.sdk.tar.gz
# Clang
SOURCE_FILE=${SOURCES_PATH}/clang-llvm-3.2-x86-linux-ubuntu-12.04.tar.gz
@@ -112,7 +111,7 @@ script: |
tar -C ${BUILD_BASE} -xf ${SOURCE_FILE}
mkdir -p ${BUILD_DIR}/sdks
pushd ${BUILD_DIR}/sdks;
- ln -sf ${SDK} MacOSX10.6.sdk
+ ln -sf ${SDK} MacOSX10.7.sdk
ln -sf ${SOURCES_PATH}/cctools-809.tar.gz ${BUILD_DIR}/cctools2odcctools/cctools-809.tar.gz
ln -sf ${SOURCES_PATH}/ld64-127.2.tar.gz ${BUILD_DIR}/cctools2odcctools/ld64-127.2.tar.gz
ln -sf ${SOURCES_PATH}/dyld-195.5.tar.gz ${BUILD_DIR}/cctools2odcctools/dyld-195.5.tar.gz
@@ -127,7 +126,7 @@ script: |
sed -i 's/\# Dynamically linked LTO/\t ;\&\n\t linux*)\n# Dynamically linked LTO/' ${BUILD_DIR}/cctools2odcctools/files/configure.ac
cd ${BUILD_DIR}/cctools2odcctools
- ./extract.sh --osxver 10.6
+ ./extract.sh --osxver 10.7
cd odcctools-809
./configure --prefix=${NATIVEPREFIX} --target=${HOST} CFLAGS="${CFLAGS} -I${NATIVEPREFIX}/include -D__DARWIN_UNIX03 -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS" LDFLAGS="${LDFLAGS} -Wl,-rpath=\\\$\$ORIGIN/../lib" --with-sysroot=${SDK}
diff --git a/contrib/gitian-descriptors/gitian-osx-qt.yml b/contrib/gitian-descriptors/gitian-osx-qt.yml
index d0be016e68..b57908dbd9 100644
--- a/contrib/gitian-descriptors/gitian-osx-qt.yml
+++ b/contrib/gitian-descriptors/gitian-osx-qt.yml
@@ -13,16 +13,15 @@ reference_datetime: "2013-06-01 00:00:00"
remotes: []
files:
- "qt-everywhere-opensource-src-5.2.1.tar.gz"
-- "osx-native-depends-r2.tar.gz"
-- "osx-depends-r2.tar.gz"
-- "MacOSX10.6.pkg"
+- "osx-native-depends-r3.tar.gz"
+- "osx-depends-r3.tar.gz"
+- "MacOSX10.7.sdk.tar.gz"
script: |
echo "84e924181d4ad6db00239d87250cc89868484a14841f77fb85ab1f1dbdcd7da1 qt-everywhere-opensource-src-5.2.1.tar.gz" | sha256sum -c
- echo "a2ccf2299de4e0bb88bd17a3355f02b747575b97492c7c2f5b789a64ccc4cbd6 MacOSX10.6.pkg" | sha256sum -c
- REVISION=r2
+ REVISION=r3
export SOURCES_PATH=`pwd`
export TAR_OPTIONS="-m --mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME""
export ZERO_AR_DATE=1
@@ -42,7 +41,7 @@ script: |
PREFIX=`pwd`/prefix
NATIVEPREFIX=`pwd`/native-prefix
BUILD_BASE=`pwd`/build
- SDK=`pwd`/SDKs/MacOSX10.6.sdk
+ SDK=`pwd`/SDKs/MacOSX10.7.sdk
HOST=x86_64-apple-darwin11
MIN_VERSION=10.6
@@ -68,18 +67,13 @@ script: |
mkdir -p ${PREFIX}/lib
mkdir -p ${BUILD_BASE}
- mkdir -p ${SDK}
- 7z -bd -so -y e ${SOURCES_PATH}/MacOSX10.6.pkg Payload | gzip -d -c | cpio -i
-
- tar xf /home/ubuntu/build/osx-native-depends-r2.tar.gz
-
-
mkdir -p SDKs
- 7z -bd -so -y e ${SOURCES_PATH}/MacOSX10.6.pkg Payload | gzip -d -c | cpio -i
+ tar -C SDKs -xf ${SOURCES_PATH}/MacOSX10.7.sdk.tar.gz
+
+ tar xf /home/ubuntu/build/osx-native-depends-r3.tar.gz
- tar xf /home/ubuntu/build/osx-native-depends-r2.tar.gz
export PATH=`pwd`/native-prefix/bin:$PATH
- tar xf /home/ubuntu/build/osx-depends-r2.tar.gz
+ tar xf /home/ubuntu/build/osx-depends-r3.tar.gz
SOURCE_FILE=${SOURCES_PATH}/qt-everywhere-opensource-src-5.2.1.tar.gz
BUILD_DIR=${BUILD_BASE}/qt-everywhere-opensource-src-5.2.1
diff --git a/contrib/gitian-downloader/cfields-key.pgp b/contrib/gitian-downloader/cfields-key.pgp
new file mode 100644
index 0000000000..6b0bd240ba
--- /dev/null
+++ b/contrib/gitian-downloader/cfields-key.pgp
@@ -0,0 +1,52 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.12 (GNU/Linux)
+
+mQINBFOHTh4BEADdKsRvmNhX+B+bcPsgMkp8ztwJA5g/rmrOlHQpKOOf4P2tAr6w
+FmXCChWF9Iq3pDFQ0t0iq5rgisFPyrGVT/VToMmH+/PSLTyIdAlgkRYDMAPsMAFV
+MaADH4yiAgJ3cdXtysjaNQV5O25ypqq6/obUjZJD5Enn6b/UgHe2+7LTmTNsskOx
+5s/WPPht79EY1kM4JQfmDx68CsmqeSAlT6yeO3RQcLn/l46cfXiwzMO4h1hsZS1r
+pgciRp0EHK9uAjF2rjqt8v4SDxwyTnwfpBBulzvH9mBf+HRXWzoTMR4sC/oOZext
+hKAH/ex47BxN3HU3ftNhCK2c1xcU1UOGSjbf0RdbwuSCxxa7mktEDumvOxAk9EBB
++PDPv7jO1FBK3rsJdscYQIL0AiRyO49VfNLARa34OqUi8pOAxKBQ9plO02W1gp7a
+DVBPI05TZ46Y8dTR2Bc1raAgOyxnXM7jfiQG2gSULiKAJAI4HwOiodaiiHAxDaIo
+a3mtsmfN25TZUQuA0I0BvHbJvLRlVnyZm3XVOcwReKJpZJV4qRhd3XNrERZdz6ZK
+cAZnyC/X+Uzo4HfnVSsJk1GpIa4seYyrVCFfHMiAA6SkgAUFbV26KCOv4rNR2GlV
+l2fVhu1RKOEUJ8nRcEqf93SehRVYdI67LepIPgmIwi0KG4HhoTbIHDAKWQARAQAB
+tCtDb3J5IEZpZWxkcyA8Y2ZpZWxkc0BiaXRjb2luZm91bmRhdGlvbi5vcmc+iQI4
+BBMBAgAiBQJTh04eAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAcJJH/
+6w73cBTiEADIGZSueBFmaOTJCgasKGguHns/n8P94EQBZr07rrgN99Rzp85WvDUN
+Qa72wj3GNcAffN7aZlIWv4g+fjyr9AzHekjI/7iwwSYIfjfTR/xRUW7czRfKAOrK
+iwpEzgv440i7PBvkS/AhNdUNkm+cJvaQUej/F2/O52qDLEpHuzvjAUUWlSeF9/oO
+AjM9dfC24L5k5cVwQvH9noxk3EyuE7BuiGE5a+kKiORrtxiHeUG6GYQxuqrPucLU
+fI67ETyXa0YSpYm5/O65BKMTMpmkMvv1JC2kqqsYTrO5p158CrKzq2xvpuG4ABsb
+9KwICUGW31Ndr6TXwQJFa1b7VK4G1g6M1DFkVTOLJnEyOwgYxsXrV5QFpzpAOAji
+6KcxNGeow1avAFYbqjjLgu9UNuq6b8du13hjkQxVs2NAP1Kd/u2ADwxQHMhZGVEC
+9LIcLVSP9ShY6fR8m6fwSlJfpiV81uLNVD8KIyvp+pYTQ/FnxoPhPIwalYquBZKi
+0u38igW75IzZ0fYvJgTumE/8ofSVkutVtrQb21eJclVrJGMNweTlJcJhAWdKkjDC
+e6mSj8GItKV1ef+eusXSzs/wPyTaqgkELvvAOZdwUq3kobQErE5HOuPEOvcwuY96
+DcxLexirCGW5wCUq7Db0c0dUjQwzzb5OTW2jdnPVR0qxi29TnOJ2aLkCDQRTh04e
+ARAAuJKpI6NTCQrjEqe9AYywN8676+fPS5bqXkyb/iub6MXeQdwpH0K42lXAaYMq
+ow/0aLlvGWCHuJJGozoOWpTzQ+VPbhpdARoLCop5fYTpy8Q17ubLeeODDtr6jtDN
+lmg+9PBIErIVUnUS2wNZuJRVsfwlLaU3T2v8kQnQ6AEbl/QwyWW9nB8rAWBu6Hvs
+VdtcBmtHSr9xAGBGfW6rSVhTitikR4lWJPdNJxI3pLaswpLIUIQ1rssKO4glljcp
+C6nhMvRkDLvDFvDP9QnmwY/A4ch5S6ANPrhOjQuu9njjQ+/ImrJTjAXqHwg5KdTc
+NKxufgvi9elOQ422o0No3yKdRoRA4kdcUmqA9gNZDyX0ZTd17aNqc42Zt3aYLJ11
+bLZZp0qnfhkmhbsBZZtaLNkuF+RGPWysxY7KPMm+nHn6f3Wpr18E+T02wi02r4nS
+HOQI+gppDqy3Vq3ZZNoUZynctiLZVHkqi+WYXqfD2tEn8UJKpht7jrZlNgkHFgT7
+T0/U4+JmaQ/HltE+IexAIH0GP0Jt6hmRoZimdoy8Q8NY5t/fn9CQNJm5InrHvooN
+aFmZMvzGTGiTqBqnA/7k9FCUEG98LK11MsIssY8YE/F6HD69R3ISyRvhUbpFvhD8
+c6zOkEKngTWvyRevrDrDz2yoZ1+T1X350+92rbEc/8WyutcAEQEAAYkCHwQYAQIA
+CQUCU4dOHgIbDAAKCRAcJJH/6w73cAakEACv4EUEjtFjqnGB0Lru5FKs1obWcf37
+c4a5yYvOw58dkEZ9hsq34qWGLT128n6R24KEG+3O4CbplAD5Kt2eAPracbPHMAn8
+TGmC+KjiGlBR5xCY9dD0fn5EbRWOa+Fdcj1DpneaqMl9vLnBbqGp7pa/MwSOc+FB
+0Ms2rcGJJMNHgITfP22eCf6pvf/xq7kKbUJ3Kjqdc2hWlRMjC/OOeITdrgycfDk/
+AOzLNqk5q7bYOxna6rWDLGSkCATyQKaBTVK7wRd1VrIhI4vfFqy+BWYXyXJ0pxjS
+eaCDwbWHX/KW+0qLsmHxFMAyHJPjs8LEwK/DRbmWhe1HzPcBKmpyjqlkuxPjAdSl
+hP4+IBvVNLf2Kh3uFHehk9A6oCYZGe3lLfQnOxIantXF7IROTmiZZsb+08w6cIXE
++r6kWG6vP2aCVtzYNfY+2p5xfg3yMxcxENJki1WSCOq6WVf9IWFzSJu+0+eazD3L
+3QpZoSX5VvT6x05C0Ay1ert0Q5MyF84Eh8mDqL4PhpWtQhZMp8SG4jqFVgrhM4sl
+vWGYXGns4tbnNPiiksjBD8TTvG3+mt48sNJIpHThjdWJSZjllYG7jV8oi7HrX8M2
+LOwWWLYxHkqi9wpmrWHSmniex6ABozcqrb+EgSMnHuSd7glmOJxHToJIudJbKG5D
+MrD0ofsytfy1LQ==
+=DE4h
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/contrib/gitian-downloader/linux-download-config b/contrib/gitian-downloader/linux-download-config
index b5e0561aa3..f5e6382b84 100644
--- a/contrib/gitian-downloader/linux-download-config
+++ b/contrib/gitian-downloader/linux-download-config
@@ -37,3 +37,6 @@ signers:
E944AE667CF960B1004BC32FCA662BE18B877A60:
name: "Andreas Schildbach"
key: aschildbach
+ C060A6635913D98A3587D7DB1C2491FFEB0EF770:
+ name: "Cory Fields"
+ key: "cfields"
diff --git a/contrib/gitian-downloader/win32-download-config b/contrib/gitian-downloader/win32-download-config
index 5d56db863e..06c164180d 100644
--- a/contrib/gitian-downloader/win32-download-config
+++ b/contrib/gitian-downloader/win32-download-config
@@ -37,3 +37,6 @@ signers:
E944AE667CF960B1004BC32FCA662BE18B877A60:
name: "Andreas Schildbach"
key: aschildbach
+ C060A6635913D98A3587D7DB1C2491FFEB0EF770:
+ name: "Cory Fields"
+ key: "cfields"
diff --git a/contrib/macdeploy/README.md b/contrib/macdeploy/README.md
index 5f0611f20c..0aa57b4777 100644
--- a/contrib/macdeploy/README.md
+++ b/contrib/macdeploy/README.md
@@ -1,9 +1,5 @@
### MacDeploy ###
-You will need the appscript package for the fancy disk image creation to work:
-
- sudo easy_install appscript
-
For Snow Leopard (which uses [Python 2.6](http://www.python.org/download/releases/2.6/)), you will need the param_parser package:
sudo easy_install argparse
diff --git a/contrib/macdeploy/macdeployqtplus b/contrib/macdeploy/macdeployqtplus
index 599713fbbb..ce4169a410 100755
--- a/contrib/macdeploy/macdeployqtplus
+++ b/contrib/macdeploy/macdeployqtplus
@@ -19,7 +19,6 @@
import subprocess, sys, re, os, shutil, stat, os.path
from string import Template
-from time import sleep
from argparse import ArgumentParser
# This is ported from the original macdeployqt with modifications
@@ -488,16 +487,6 @@ if len(config.fancy) == 1:
sys.stderr.write("Error: Could not import plistlib which is required for fancy disk images.\n")
sys.exit(1)
- if verbose >= 3:
- print "Fancy: Importing appscript..."
- try:
- import appscript
- except ImportError:
- if verbose >= 1:
- sys.stderr.write("Error: Could not import appscript which is required for fancy disk images.\n")
- sys.stderr.write("Please install it e.g. with \"sudo easy_install appscript\".\n")
- sys.exit(1)
-
p = config.fancy[0]
if verbose >= 3:
print "Fancy: Loading \"%s\"..." % p
diff --git a/doc/README_osx.txt b/doc/README_osx.txt
index 6eae4f5cf1..2be56c1592 100644
--- a/doc/README_osx.txt
+++ b/doc/README_osx.txt
@@ -37,11 +37,15 @@ originally done in toolchain4.
To complicate things further, all builds must target an Apple SDK. These SDKs
are free to download, but not redistributable.
-To obtain it, register for a developer account, then download xcode_3.2.6_and_ios_sdk_4.3.dmg:
-https://developer.apple.com/devcenter/download.action?path=/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg
-This file is several gigabytes in size, but only a single .pkg file inside is
-needed (MacOSX10.6.pkg). From Linux, 7-zip can be used to extract this file.
-The DMG can then be discarded.
+To obtain it, register for a developer account, then download xcode4630916281a.dmg:
+https://developer.apple.com/downloads/download.action?path=Developer_Tools/xcode_4.6.3/xcode4630916281a.dmg
+This file is several gigabytes in size, but only a single directory inside is
+needed: Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk
+
+Unfortunately, the usual linux tools (7zip, hpmount, loopback mount) are incapable of opening this file.
+To create a tarball suitable for gitian input, mount the dmg in OSX, then create it with:
+ $ tar -C /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ -czf MacOSX10.7.sdk.tar.gz MacOSX10.7.sdk
+
The gitian descriptors build 2 sets of files: Linux tools, then Apple binaries
which are created using these tools. The build process has been designed to
diff --git a/doc/build-unix.md b/doc/build-unix.md
index ab5fbad521..1d75c206e5 100644
--- a/doc/build-unix.md
+++ b/doc/build-unix.md
@@ -2,6 +2,16 @@ UNIX BUILD NOTES
====================
Some notes on how to build Bitcoin in Unix.
+Note
+---------------------
+Always use absolute paths to configure and compile bitcoin and the dependencies,
+for example, when specifying the the path of the dependency:
+
+ ../dist/configure --enable-cxx --disable-shared --with-pic --prefix=$BDB_PREFIX
+
+Here BDB_PREFIX must absolute path - it is defined using $(pwd) which ensures
+the usage of the absolute path.
+
To Build
---------------------
diff --git a/doc/release-notes/release-notes-0.9.1.md b/doc/release-notes/release-notes-0.9.1.md
new file mode 100644
index 0000000000..0552053d27
--- /dev/null
+++ b/doc/release-notes/release-notes-0.9.1.md
@@ -0,0 +1,53 @@
+Bitcoin Core version 0.9.1 is now available from:
+
+ https://bitcoin.org/bin/0.9.1/
+
+This is a security update. It is recommended to upgrade to this release
+as soon as possible.
+
+It is especially important to upgrade if you currently have version
+0.9.0 installed and are using the graphical interface OR you are using
+bitcoind from any pre-0.9.1 version, and have enabled SSL for RPC and
+have configured allowip to allow rpc connections from potentially
+hostile hosts.
+
+Please report bugs using the issue tracker at github:
+
+ https://github.com/bitcoin/bitcoin/issues
+
+How to Upgrade
+--------------
+
+If you are running an older version, shut it down. Wait until it has completely
+shut down (which might take a few minutes for older versions), then run the
+installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or
+bitcoind/bitcoin-qt (on Linux).
+
+If you are upgrading from version 0.7.2 or earlier, the first time you run
+0.9.1 your blockchain files will be re-indexed, which will take anywhere from
+30 minutes to several hours, depending on the speed of your machine.
+
+0.9.1 Release notes
+=======================
+
+No code changes were made between 0.9.0 and 0.9.1. Only the dependencies were changed.
+
+- Upgrade OpenSSL to 1.0.1g. This release fixes the following vulnerabilities which can
+ affect the Bitcoin Core software:
+
+ - CVE-2014-0160 ("heartbleed")
+ A missing bounds check in the handling of the TLS heartbeat extension can
+ be used to reveal up to 64k of memory to a connected client or server.
+
+ - CVE-2014-0076
+ The Montgomery ladder implementation in OpenSSL does not ensure that
+ certain swap operations have a constant-time behavior, which makes it
+ easier for local users to obtain ECDSA nonces via a FLUSH+RELOAD cache
+ side-channel attack.
+
+- Add statically built executables to Linux build
+
+Credits
+--------
+
+Credits go to the OpenSSL team for fixing the vulnerabilities quickly.
diff --git a/doc/release-process.md b/doc/release-process.md
index be00cb8092..6d08c48496 100644
--- a/doc/release-process.md
+++ b/doc/release-process.md
@@ -36,12 +36,10 @@ Release Process
mkdir -p inputs; cd inputs/
Register and download the Apple SDK (see OSX Readme for details)
- visit https://developer.apple.com/devcenter/download.action?path=/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg
+ visit https://developer.apple.com/downloads/download.action?path=Developer_Tools/xcode_4.6.3/xcode4630916281a.dmg
- Extract MacOSX10.6.pkg using 7zip
- 7z e -y xcode_3.2.6_and_ios_sdk_4.3.dmg 5.hfs
- 7z -y e 5.hfs "Xcode and iOS SDK/Packages/MacOSX10.6.pkg"
- rm 5.hfs
+ Using a Mac, create a tarball for the 10.7 SDK
+ tar -C /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ -czf MacOSX10.7.sdk.tar.gz MacOSX10.7.sdk
Fetch and build inputs: (first time, or when dependency versions change)
diff --git a/src/addrman.h b/src/addrman.h
index e2b0cb1093..5328a93b45 100644
--- a/src/addrman.h
+++ b/src/addrman.h
@@ -420,7 +420,7 @@ public:
Check();
}
if (fRet)
- LogPrint("addrman", "Added %s from %s: %i tried, %i new\n", addr.ToStringIPPort().c_str(), source.ToString().c_str(), nTried, nNew);
+ LogPrint("addrman", "Added %s from %s: %i tried, %i new\n", addr.ToStringIPPort().c_str(), source.ToString(), nTried, nNew);
return fRet;
}
@@ -436,7 +436,7 @@ public:
Check();
}
if (nAdd)
- LogPrint("addrman", "Added %i addresses from %s: %i tried, %i new\n", nAdd, source.ToString().c_str(), nTried, nNew);
+ LogPrint("addrman", "Added %i addresses from %s: %i tried, %i new\n", nAdd, source.ToString(), nTried, nNew);
return nAdd > 0;
}
diff --git a/src/checkpoints.cpp b/src/checkpoints.cpp
index 9ab8b68443..926949e06a 100644
--- a/src/checkpoints.cpp
+++ b/src/checkpoints.cpp
@@ -66,8 +66,8 @@ namespace Checkpoints
;
static const CCheckpointData dataTestnet = {
&mapCheckpointsTestnet,
- 1338180505,
- 16341,
+ 1337966069,
+ 1488,
300
};
diff --git a/src/core.cpp b/src/core.cpp
index 7651ce9957..aadcb44b98 100644
--- a/src/core.cpp
+++ b/src/core.cpp
@@ -77,35 +77,6 @@ uint256 CTransaction::GetHash() const
return SerializeHash(*this);
}
-bool CTransaction::IsNewerThan(const CTransaction& old) const
-{
- if (vin.size() != old.vin.size())
- return false;
- for (unsigned int i = 0; i < vin.size(); i++)
- if (vin[i].prevout != old.vin[i].prevout)
- return false;
-
- bool fNewer = false;
- unsigned int nLowest = std::numeric_limits<unsigned int>::max();
- for (unsigned int i = 0; i < vin.size(); i++)
- {
- if (vin[i].nSequence != old.vin[i].nSequence)
- {
- if (vin[i].nSequence <= nLowest)
- {
- fNewer = false;
- nLowest = vin[i].nSequence;
- }
- if (old.vin[i].nSequence < nLowest)
- {
- fNewer = true;
- nLowest = old.vin[i].nSequence;
- }
- }
- }
- return fNewer;
-}
-
int64_t CTransaction::GetValueOut() const
{
int64_t nValueOut = 0;
diff --git a/src/core.h b/src/core.h
index 5eb953610d..ba7f691119 100644
--- a/src/core.h
+++ b/src/core.h
@@ -219,7 +219,6 @@ public:
}
uint256 GetHash() const;
- bool IsNewerThan(const CTransaction& old) const;
// Return sum of txouts.
int64_t GetValueOut() const;
diff --git a/src/init.cpp b/src/init.cpp
index 7664988762..bc4924b48d 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -914,7 +914,7 @@ bool AppInit2(boost::thread_group& threadGroup)
for (map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.begin(); mi != mapBlockIndex.end(); ++mi)
{
uint256 hash = (*mi).first;
- if (strncmp(hash.ToString().c_str(), strMatch.c_str(), strMatch.size()) == 0)
+ if (boost::algorithm::starts_with(hash.ToString(), strMatch))
{
CBlockIndex* pindex = (*mi).second;
CBlock block;
diff --git a/src/key.cpp b/src/key.cpp
index 2199996cf3..aa24f0a622 100644
--- a/src/key.cpp
+++ b/src/key.cpp
@@ -485,21 +485,6 @@ bool CPubKey::RecoverCompact(const uint256 &hash, const std::vector<unsigned cha
return true;
}
-bool CPubKey::VerifyCompact(const uint256 &hash, const std::vector<unsigned char>& vchSig) const {
- if (!IsValid())
- return false;
- if (vchSig.size() != 65)
- return false;
- CECKey key;
- if (!key.Recover(hash, &vchSig[1], (vchSig[0] - 27) & ~4))
- return false;
- CPubKey pubkeyRec;
- key.GetPubKey(pubkeyRec, IsCompressed());
- if (*this != pubkeyRec)
- return false;
- return true;
-}
-
bool CPubKey::IsFullyValid() const {
if (!IsValid())
return false;
diff --git a/src/key.h b/src/key.h
index 37a06810b4..983775fd23 100644
--- a/src/key.h
+++ b/src/key.h
@@ -156,10 +156,6 @@ public:
// If this public key is not fully valid, the return value will be false.
bool Verify(const uint256 &hash, const std::vector<unsigned char>& vchSig) const;
- // Verify a compact signature (~65 bytes).
- // See CKey::SignCompact.
- bool VerifyCompact(const uint256 &hash, const std::vector<unsigned char>& vchSig) const;
-
// Recover a public key from a compact signature.
bool RecoverCompact(const uint256 &hash, const std::vector<unsigned char>& vchSig);
diff --git a/src/leveldbwrapper.h b/src/leveldbwrapper.h
index 53e9e439bd..043a56bf38 100644
--- a/src/leveldbwrapper.h
+++ b/src/leveldbwrapper.h
@@ -93,7 +93,7 @@ public:
if (!status.ok()) {
if (status.IsNotFound())
return false;
- LogPrintf("LevelDB read failure: %s\n", status.ToString().c_str());
+ LogPrintf("LevelDB read failure: %s\n", status.ToString());
HandleError(status);
}
try {
@@ -122,7 +122,7 @@ public:
if (!status.ok()) {
if (status.IsNotFound())
return false;
- LogPrintf("LevelDB read failure: %s\n", status.ToString().c_str());
+ LogPrintf("LevelDB read failure: %s\n", status.ToString());
HandleError(status);
}
return true;
diff --git a/src/main.cpp b/src/main.cpp
index a1fe6c07bc..18c00d90ac 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -2575,19 +2575,6 @@ bool CBlockIndex::IsSuperMajority(int minVersion, const CBlockIndex* pstart, uns
return (nFound >= nRequired);
}
-int64_t CBlockIndex::GetMedianTime() const
-{
- AssertLockHeld(cs_main);
- const CBlockIndex* pindex = this;
- for (int i = 0; i < nMedianTimeSpan/2; i++)
- {
- if (!chainActive.Next(pindex))
- return GetBlockTime();
- pindex = chainActive.Next(pindex);
- }
- return pindex->GetMedianTimePast();
-}
-
void PushGetBlocks(CNode* pnode, CBlockIndex* pindexBegin, uint256 hashEnd)
{
AssertLockHeld(cs_main);
diff --git a/src/main.h b/src/main.h
index 6f39b6e89d..8a05eb60d2 100644
--- a/src/main.h
+++ b/src/main.h
@@ -848,8 +848,6 @@ public:
return pbegin[(pend - pbegin)/2];
}
- int64_t GetMedianTime() const;
-
/**
* Returns true if there are nRequired or more blocks of minVersion or above
* in the last nToCheck blocks, starting at pstart and going backwards.
@@ -861,13 +859,13 @@ public:
{
return strprintf("CBlockIndex(pprev=%p, nHeight=%d, merkle=%s, hashBlock=%s)",
pprev, nHeight,
- hashMerkleRoot.ToString().c_str(),
- GetBlockHash().ToString().c_str());
+ hashMerkleRoot.ToString(),
+ GetBlockHash().ToString());
}
void print() const
{
- LogPrintf("%s\n", ToString().c_str());
+ LogPrintf("%s\n", ToString());
}
// Check whether this block index entry is valid up to the passed validity level.
@@ -952,14 +950,14 @@ public:
std::string str = "CDiskBlockIndex(";
str += CBlockIndex::ToString();
str += strprintf("\n hashBlock=%s, hashPrev=%s)",
- GetBlockHash().ToString().c_str(),
- hashPrev.ToString().c_str());
+ GetBlockHash().ToString(),
+ hashPrev.ToString());
return str;
}
void print() const
{
- LogPrintf("%s\n", ToString().c_str());
+ LogPrintf("%s\n", ToString());
}
};
diff --git a/src/net.cpp b/src/net.cpp
index 6bde1e7999..c2dde97040 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -41,9 +41,6 @@ using namespace boost;
static const int MAX_OUTBOUND_CONNECTIONS = 8;
-bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOutbound = NULL, const char *strDest = NULL, bool fOneShot = false);
-
-
//
// Global state variables
//
@@ -178,7 +175,7 @@ bool RecvLine(SOCKET hSocket, string& strLine)
{
// socket error
int nErr = WSAGetLastError();
- LogPrint("net", "recv failed: %d\n", nErr);
+ LogPrint("net", "recv failed: %s\n", NetworkErrorString(nErr));
return false;
}
}
@@ -489,10 +486,10 @@ CNode* ConnectNode(CAddress addrConnect, const char *pszDest)
#ifdef WIN32
u_long nOne = 1;
if (ioctlsocket(hSocket, FIONBIO, &nOne) == SOCKET_ERROR)
- LogPrintf("ConnectSocket() : ioctlsocket non-blocking setting failed, error %d\n", WSAGetLastError());
+ LogPrintf("ConnectSocket() : ioctlsocket non-blocking setting failed, error %s\n", NetworkErrorString(WSAGetLastError()));
#else
if (fcntl(hSocket, F_SETFL, O_NONBLOCK) == SOCKET_ERROR)
- LogPrintf("ConnectSocket() : fcntl non-blocking setting failed, error %d\n", errno);
+ LogPrintf("ConnectSocket() : fcntl non-blocking setting failed, error %s\n", NetworkErrorString(errno));
#endif
// Add node
@@ -736,7 +733,7 @@ void SocketSendData(CNode *pnode)
int nErr = WSAGetLastError();
if (nErr != WSAEWOULDBLOCK && nErr != WSAEMSGSIZE && nErr != WSAEINTR && nErr != WSAEINPROGRESS)
{
- LogPrintf("socket send error %d\n", nErr);
+ LogPrintf("socket send error %s\n", NetworkErrorString(nErr));
pnode->CloseSocketDisconnect();
}
}
@@ -896,7 +893,7 @@ void ThreadSocketHandler()
if (have_fds)
{
int nErr = WSAGetLastError();
- LogPrintf("socket select error %d\n", nErr);
+ LogPrintf("socket select error %s\n", NetworkErrorString(nErr));
for (unsigned int i = 0; i <= hSocketMax; i++)
FD_SET(i, &fdsetRecv);
}
@@ -933,7 +930,7 @@ void ThreadSocketHandler()
{
int nErr = WSAGetLastError();
if (nErr != WSAEWOULDBLOCK)
- LogPrintf("socket error accept failed: %d\n", nErr);
+ LogPrintf("socket error accept failed: %s\n", NetworkErrorString(nErr));
}
else if (nInbound >= nMaxConnections - MAX_OUTBOUND_CONNECTIONS)
{
@@ -1007,7 +1004,7 @@ void ThreadSocketHandler()
if (nErr != WSAEWOULDBLOCK && nErr != WSAEMSGSIZE && nErr != WSAEINTR && nErr != WSAEINPROGRESS)
{
if (!pnode->fDisconnect)
- LogPrintf("socket recv error %d\n", nErr);
+ LogPrintf("socket recv error %s\n", NetworkErrorString(nErr));
pnode->CloseSocketDisconnect();
}
}
@@ -1585,7 +1582,7 @@ bool BindListenPort(const CService &addrBind, string& strError)
SOCKET hListenSocket = socket(((struct sockaddr*)&sockaddr)->sa_family, SOCK_STREAM, IPPROTO_TCP);
if (hListenSocket == INVALID_SOCKET)
{
- strError = strprintf("Error: Couldn't open socket for incoming connections (socket returned error %d)", WSAGetLastError());
+ strError = strprintf("Error: Couldn't open socket for incoming connections (socket returned error %s)", NetworkErrorString(WSAGetLastError()));
LogPrintf("%s\n", strError);
return false;
}
@@ -1609,7 +1606,7 @@ bool BindListenPort(const CService &addrBind, string& strError)
if (fcntl(hListenSocket, F_SETFL, O_NONBLOCK) == SOCKET_ERROR)
#endif
{
- strError = strprintf("Error: Couldn't set properties on socket for incoming connections (error %d)", WSAGetLastError());
+ strError = strprintf("Error: Couldn't set properties on socket for incoming connections (error %s)", NetworkErrorString(WSAGetLastError()));
LogPrintf("%s\n", strError);
return false;
}
@@ -1638,7 +1635,7 @@ bool BindListenPort(const CService &addrBind, string& strError)
if (nErr == WSAEADDRINUSE)
strError = strprintf(_("Unable to bind to %s on this computer. Bitcoin Core is probably already running."), addrBind.ToString());
else
- strError = strprintf(_("Unable to bind to %s on this computer (bind returned error %d, %s)"), addrBind.ToString(), nErr, strerror(nErr));
+ strError = strprintf(_("Unable to bind to %s on this computer (bind returned error %s)"), addrBind.ToString(), NetworkErrorString(nErr));
LogPrintf("%s\n", strError);
return false;
}
@@ -1647,7 +1644,7 @@ bool BindListenPort(const CService &addrBind, string& strError)
// Listen for incoming connections
if (listen(hListenSocket, SOMAXCONN) == SOCKET_ERROR)
{
- strError = strprintf(_("Error: Listening for incoming connections failed (listen returned error %d)"), WSAGetLastError());
+ strError = strprintf(_("Error: Listening for incoming connections failed (listen returned error %s)"), NetworkErrorString(WSAGetLastError()));
LogPrintf("%s\n", strError);
return false;
}
@@ -1736,10 +1733,8 @@ void StartNode(boost::thread_group& threadGroup)
else
threadGroup.create_thread(boost::bind(&TraceThread<void (*)()>, "dnsseed", &ThreadDNSAddressSeed));
-#ifdef USE_UPNP
// Map ports with UPnP
- MapPort(GetBoolArg("-upnp", USE_UPNP));
-#endif
+ MapPort(GetBoolArg("-upnp", DEFAULT_UPNP));
// Send and receive from sockets, accept connections
threadGroup.create_thread(boost::bind(&TraceThread<void (*)()>, "net", &ThreadSocketHandler));
@@ -1785,7 +1780,7 @@ public:
BOOST_FOREACH(SOCKET hListenSocket, vhListenSocket)
if (hListenSocket != INVALID_SOCKET)
if (closesocket(hListenSocket) == SOCKET_ERROR)
- LogPrintf("closesocket(hListenSocket) failed with error %d\n", WSAGetLastError());
+ LogPrintf("closesocket(hListenSocket) failed with error %s\n", NetworkErrorString(WSAGetLastError()));
// clean up some globals (to help leak detection)
BOOST_FOREACH(CNode *pnode, vNodes)
diff --git a/src/net.h b/src/net.h
index 729b1bcd57..ac90ef25ef 100644
--- a/src/net.h
+++ b/src/net.h
@@ -38,6 +38,12 @@ namespace boost {
/** The maximum number of entries in an 'inv' protocol message */
static const unsigned int MAX_INV_SZ = 50000;
+/** -upnp default */
+#ifdef USE_UPNP
+static const bool DEFAULT_UPNP = USE_UPNP;
+#else
+static const bool DEFAULT_UPNP = false;
+#endif
inline unsigned int ReceiveFloodSize() { return 1000*GetArg("-maxreceivebuffer", 5*1000); }
inline unsigned int SendBufferSize() { return 1000*GetArg("-maxsendbuffer", 1*1000); }
@@ -49,6 +55,7 @@ void AddressCurrentlyConnected(const CService& addr);
CNode* FindNode(const CNetAddr& ip);
CNode* FindNode(const CService& ip);
CNode* ConnectNode(CAddress addrConnect, const char *strDest = NULL);
+bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOutbound = NULL, const char *strDest = NULL, bool fOneShot = false);
void MapPort(bool fUseUPnP);
unsigned short GetListenPort();
bool BindListenPort(const CService &bindAddr, std::string& strError=REF(std::string()));
@@ -430,7 +437,7 @@ public:
nRequestTime = it->second;
else
nRequestTime = 0;
- LogPrint("net", "askfor %s %d (%s)\n", inv.ToString().c_str(), nRequestTime, DateTimeStrFormat("%H:%M:%S", nRequestTime/1000000).c_str());
+ LogPrint("net", "askfor %s %d (%s)\n", inv.ToString(), nRequestTime, DateTimeStrFormat("%H:%M:%S", nRequestTime/1000000).c_str());
// Make sure not to reuse time indexes to keep things in the same order
int64_t nNow = GetTimeMicros() - 1000000;
diff --git a/src/netbase.cpp b/src/netbase.cpp
index 82a681281d..4aa7367f39 100644
--- a/src/netbase.cpp
+++ b/src/netbase.cpp
@@ -123,11 +123,6 @@ bool LookupHost(const char *pszName, std::vector<CNetAddr>& vIP, unsigned int nM
return LookupIntern(strHost.c_str(), vIP, nMaxSolutions, fAllowLookup);
}
-bool LookupHostNumeric(const char *pszName, std::vector<CNetAddr>& vIP, unsigned int nMaxSolutions)
-{
- return LookupHost(pszName, vIP, nMaxSolutions, false);
-}
-
bool Lookup(const char *pszName, std::vector<CService>& vAddr, int portDefault, bool fAllowLookup, unsigned int nMaxSolutions)
{
if (pszName[0] == 0)
@@ -361,7 +356,7 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe
}
if (nRet == SOCKET_ERROR)
{
- LogPrintf("select() for %s failed: %i\n", addrConnect.ToString(), WSAGetLastError());
+ LogPrintf("select() for %s failed: %s\n", addrConnect.ToString(), NetworkErrorString(WSAGetLastError()));
closesocket(hSocket);
return false;
}
@@ -372,13 +367,13 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe
if (getsockopt(hSocket, SOL_SOCKET, SO_ERROR, &nRet, &nRetSize) == SOCKET_ERROR)
#endif
{
- LogPrintf("getsockopt() for %s failed: %i\n", addrConnect.ToString(), WSAGetLastError());
+ LogPrintf("getsockopt() for %s failed: %s\n", addrConnect.ToString(), NetworkErrorString(WSAGetLastError()));
closesocket(hSocket);
return false;
}
if (nRet != 0)
{
- LogPrintf("connect() to %s failed after select(): %s\n", addrConnect.ToString(), strerror(nRet));
+ LogPrintf("connect() to %s failed after select(): %s\n", addrConnect.ToString(), NetworkErrorString(nRet));
closesocket(hSocket);
return false;
}
@@ -389,7 +384,7 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe
else
#endif
{
- LogPrintf("connect() to %s failed: %i\n", addrConnect.ToString(), WSAGetLastError());
+ LogPrintf("connect() to %s failed: %s\n", addrConnect.ToString(), NetworkErrorString(WSAGetLastError()));
closesocket(hSocket);
return false;
}
@@ -1237,3 +1232,36 @@ bool operator!=(const CSubNet& a, const CSubNet& b)
{
return !(a==b);
}
+
+#ifdef WIN32
+std::string NetworkErrorString(int err)
+{
+ char buf[256];
+ buf[0] = 0;
+ if(FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK,
+ NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ buf, sizeof(buf), NULL))
+ {
+ return strprintf("%s (%d)", buf, err);
+ }
+ else
+ {
+ return strprintf("Unknown error (%d)", err);
+ }
+}
+#else
+std::string NetworkErrorString(int err)
+{
+ char buf[256];
+ const char *s = buf;
+ buf[0] = 0;
+ /* Too bad there are two incompatible implementations of the
+ * thread-safe strerror. */
+#ifdef STRERROR_R_CHAR_P /* GNU variant can return a pointer outside the passed buffer */
+ s = strerror_r(err, buf, sizeof(buf));
+#else /* POSIX variant always returns message in buffer */
+ (void) strerror_r(err, buf, sizeof(buf));
+#endif
+ return strprintf("%s (%d)", s, err);
+}
+#endif
diff --git a/src/netbase.h b/src/netbase.h
index 118f866d6c..f5a64cb51f 100644
--- a/src/netbase.h
+++ b/src/netbase.h
@@ -173,11 +173,12 @@ bool IsProxy(const CNetAddr &addr);
bool SetNameProxy(CService addrProxy, int nSocksVersion = 5);
bool HaveNameProxy();
bool LookupHost(const char *pszName, std::vector<CNetAddr>& vIP, unsigned int nMaxSolutions = 0, bool fAllowLookup = true);
-bool LookupHostNumeric(const char *pszName, std::vector<CNetAddr>& vIP, unsigned int nMaxSolutions = 0);
bool Lookup(const char *pszName, CService& addr, int portDefault = 0, bool fAllowLookup = true);
bool Lookup(const char *pszName, std::vector<CService>& vAddr, int portDefault = 0, bool fAllowLookup = true, unsigned int nMaxSolutions = 0);
bool LookupNumeric(const char *pszName, CService& addr, int portDefault = 0);
bool ConnectSocket(const CService &addr, SOCKET& hSocketRet, int nTimeout = nConnectTimeout);
bool ConnectSocketByName(CService &addr, SOCKET& hSocketRet, const char *pszDest, int portDefault = 0, int nTimeout = nConnectTimeout);
+/** Return readable error string for a network error code */
+std::string NetworkErrorString(int err);
#endif
diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp
index e6190aec13..68ae8b4668 100644
--- a/src/qt/bitcoingui.cpp
+++ b/src/qt/bitcoingui.cpp
@@ -188,7 +188,7 @@ BitcoinGUI::BitcoinGUI(bool fIsTestnet, QWidget *parent) :
connect(openRPCConsoleAction, SIGNAL(triggered()), rpcConsole, SLOT(show()));
- // prevents an oben debug window from becoming stuck/unusable on client shutdown
+ // prevents an open debug window from becoming stuck/unusable on client shutdown
connect(quitAction, SIGNAL(triggered()), rpcConsole, SLOT(hide()));
// Install event filter to be able to catch status tip events (QEvent::StatusTip)
diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp
index 7b264d27c7..183fcac4a0 100644
--- a/src/qt/guiutil.cpp
+++ b/src/qt/guiutil.cpp
@@ -76,7 +76,11 @@ QString dateTimeStr(qint64 nTime)
QFont bitcoinAddressFont()
{
QFont font("Monospace");
+#if QT_VERSION >= 0x040800
+ font.setStyleHint(QFont::Monospace);
+#else
font.setStyleHint(QFont::TypeWriter);
+#endif
return font;
}
@@ -570,7 +574,7 @@ bool SetStartOnSystemStartup(bool fAutoStart)
return true;
}
-#elif defined(LINUX)
+#elif defined(Q_OS_LINUX)
// Follow the Desktop Application Autostart Spec:
// http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html
diff --git a/src/qt/locale/bitcoin_da.ts b/src/qt/locale/bitcoin_da.ts
index 5795701497..b13b38a878 100644
--- a/src/qt/locale/bitcoin_da.ts
+++ b/src/qt/locale/bitcoin_da.ts
@@ -25,7 +25,7 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open
</message>
<message>
<source>Copyright</source>
- <translation>Copyright</translation>
+ <translation>Ophavsret</translation>
</message>
<message>
<source>The Bitcoin Core developers</source>
@@ -76,7 +76,7 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open
</message>
<message>
<source>&amp;Export</source>
- <translation>Eksporter</translation>
+ <translation>Eksportér</translation>
</message>
<message>
<source>&amp;Delete</source>
@@ -214,7 +214,7 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open
</message>
<message>
<source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
- <translation>VIGTIGT: Enhver tidligere sikkerhedskopi, som du har lavet af tegnebogsfilen, bør blive erstattet af den nyligt genererede, krypterede tegnebogsfil. Af sikkerhedsmæssige årsager vil tidligere sikkerhedskopier af den ikke-krypterede tegnebogsfil blive ubrugelig i det øjeblik, du starter med at anvende den nye, krypterede tegnebog.</translation>
+ <translation>VIGTIGT: Enhver tidligere sikkerhedskopi, som du har lavet af tegnebogsfilen, bør blive erstattet af den nyligt genererede, krypterede tegnebogsfil. Af sikkerhedsmæssige årsager vil tidligere sikkerhedskopier af den ikke-krypterede tegnebogsfil blive ubrugelige i det øjeblik, du starter med at anvende den nye, krypterede tegnebog.</translation>
</message>
<message>
<source>Warning: The Caps Lock key is on!</source>
@@ -337,11 +337,11 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open
</message>
<message>
<source>Importing blocks from disk...</source>
- <translation>Importerer blokke fra disken...</translation>
+ <translation>Importerer blokke fra disken …</translation>
</message>
<message>
<source>Reindexing blocks on disk...</source>
- <translation>Genindekserer blokke på disken...</translation>
+ <translation>Genindekserer blokke på disken …</translation>
</message>
<message>
<source>Send coins to a Bitcoin address</source>
@@ -397,7 +397,7 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open
</message>
<message>
<source>Encrypt the private keys that belong to your wallet</source>
- <translation>Krypter de private nøgler, der hører til din tegnebog</translation>
+ <translation>Kryptér de private nøgler, der hører til din tegnebog</translation>
</message>
<message>
<source>Sign messages with your Bitcoin addresses to prove you own them</source>
@@ -405,7 +405,7 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open
</message>
<message>
<source>Verify messages to ensure they were signed with specified Bitcoin addresses</source>
- <translation>Verificér beskeder for at sikre, at de er underskrevet med de(n) angivne Bitcoin-adresse(r)</translation>
+ <translation>Verificér beskeder for at sikre, at de er underskrevet med de angivne Bitcoin-adresser</translation>
</message>
<message>
<source>&amp;File</source>
@@ -469,7 +469,7 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open
</message>
<message>
<source>No block source available...</source>
- <translation>Ingen blokkilde tilgængelig...</translation>
+ <translation>Ingen blokkilde tilgængelig …</translation>
</message>
<message>
<source>Processed %1 of %2 (estimated) blocks of transaction history.</source>
@@ -861,7 +861,7 @@ Adresse: %4
<name>FreespaceChecker</name>
<message>
<source>A new data directory will be created.</source>
- <translation type="unfinished"/>
+ <translation>En ny datamappe vil blive oprettet.</translation>
</message>
<message>
<source>name</source>
@@ -869,15 +869,15 @@ Adresse: %4
</message>
<message>
<source>Directory already exists. Add %1 if you intend to create a new directory here.</source>
- <translation type="unfinished"/>
+ <translation>Mappe eksisterer allerede. Tilføj %1, hvis du vil oprette en ny mappe her.</translation>
</message>
<message>
<source>Path already exists, and is not a directory.</source>
- <translation type="unfinished"/>
+ <translation>Sti eksisterer allerede og er ikke en mappe.</translation>
</message>
<message>
<source>Cannot create data directory here.</source>
- <translation type="unfinished"/>
+ <translation>Kan ikke oprette en mappe her.</translation>
</message>
</context>
<context>
@@ -947,11 +947,11 @@ Adresse: %4
</message>
<message>
<source>Use the default data directory</source>
- <translation type="unfinished"/>
+ <translation>Brug standardmappen for data</translation>
</message>
<message>
<source>Use a custom data directory:</source>
- <translation type="unfinished"/>
+ <translation>Brug tilpasset mappe for data:</translation>
</message>
<message>
<source>Bitcoin</source>
@@ -967,11 +967,11 @@ Adresse: %4
</message>
<message>
<source>GB of free space available</source>
- <translation type="unfinished"/>
+ <translation>GB fri plads tilgængelig</translation>
</message>
<message>
<source>(of %1GB needed)</source>
- <translation type="unfinished"/>
+ <translation>(ud af %1 GB behøvet)</translation>
</message>
</context>
<context>
@@ -1133,15 +1133,15 @@ Adresse: %4
</message>
<message>
<source>&amp;Minimize to the tray instead of the taskbar</source>
- <translation>Minimer til statusfeltet i stedet for proceslinjen</translation>
+ <translation>Minimér til statusfeltet i stedet for proceslinjen</translation>
</message>
<message>
<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>Minimer i stedet for at afslutte programmet, når vinduet lukkes. Når denne indstilling er valgt, vil programmet kun blive lukket, når du har valgt Afslut i menuen.</translation>
+ <translation>Minimér i stedet for at afslutte programmet, når vinduet lukkes. Når denne indstilling er valgt, vil programmet kun blive lukket, når du har valgt Afslut i menuen.</translation>
</message>
<message>
<source>M&amp;inimize on close</source>
- <translation>Minimer ved lukning</translation>
+ <translation>Minimér ved lukning</translation>
</message>
<message>
<source>&amp;Display</source>
@@ -1149,11 +1149,11 @@ Adresse: %4
</message>
<message>
<source>User Interface &amp;language:</source>
- <translation>Brugergrænsefladesprog:</translation>
+ <translation>Sprog for brugergrænseflade:</translation>
</message>
<message>
<source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Brugergrænsefladesproget kan angives her. Denne indstilling træder først i kraft, når Bitcoin genstartes.</translation>
+ <translation>Sproget for brugergrænsefladen kan angives her. Denne indstilling træder først i kraft, når Bitcoin genstartes.</translation>
</message>
<message>
<source>&amp;Unit to show amounts in:</source>
@@ -1161,7 +1161,7 @@ Adresse: %4
</message>
<message>
<source>Choose the default subdivision unit to show in the interface and when sending coins.</source>
- <translation>Vælg den standard underopdelingsenhed, som skal vises i brugergrænsefladen og ved afsendelse af bitcoins.</translation>
+ <translation>Vælg standard for underopdeling af enhed, som skal vises i brugergrænsefladen og ved afsendelse af bitcoins.</translation>
</message>
<message>
<source>Whether to show Bitcoin addresses in the transaction list or not.</source>
@@ -1181,7 +1181,7 @@ Adresse: %4
</message>
<message>
<source>&amp;Cancel</source>
- <translation>Annuller</translation>
+ <translation>Annullér</translation>
</message>
<message>
<source>default</source>
@@ -1209,7 +1209,7 @@ Adresse: %4
</message>
<message>
<source>The supplied proxy address is invalid.</source>
- <translation>Ugyldig proxy-adresse</translation>
+ <translation>Den angivne proxy-adresse er ugyldig.</translation>
</message>
</context>
<context>
@@ -1240,7 +1240,7 @@ Adresse: %4
</message>
<message>
<source>Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance</source>
- <translation>Total transaktioner, som ikke er blevet bekræftet endnu, og som ikke endnu er en del af den nuværende saldo</translation>
+ <translation>Total saldo for transaktioner, som ikke er blevet bekræftet endnu, og som ikke endnu er en del af den tilgængelige saldo</translation>
</message>
<message>
<source>Immature:</source>
@@ -1283,7 +1283,7 @@ Adresse: %4
</message>
<message>
<source>Payment request error</source>
- <translation>Fejl i betalingsforespørgelse</translation>
+ <translation>Fejl i betalingsforespørgsel</translation>
</message>
<message>
<source>Cannot start bitcoin: click-to-pay handler</source>
@@ -1335,7 +1335,7 @@ Adresse: %4
</message>
<message>
<source>Network request error</source>
- <translation type="unfinished"/>
+ <translation>Fejl i netværksforespørgsel</translation>
</message>
</context>
<context>
@@ -1346,7 +1346,7 @@ Adresse: %4
</message>
<message>
<source>Error: Specified data directory &quot;%1&quot; does not exist.</source>
- <translation type="unfinished"/>
+ <translation>Fejl: Angivet datamappe &quot;%1&quot; eksisterer ikke.</translation>
</message>
<message>
<source>Error: Cannot parse configuration file: %1. Only use key=value syntax.</source>
@@ -1354,7 +1354,7 @@ Adresse: %4
</message>
<message>
<source>Error: Invalid combination of -regtest and -testnet.</source>
- <translation type="unfinished"/>
+ <translation>Fejl: Ugyldig kombination af -regtest og -testnet.</translation>
</message>
<message>
<source>Bitcoin Core didn&apos;t yet exit safely...</source>
@@ -1362,7 +1362,7 @@ Adresse: %4
</message>
<message>
<source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
- <translation>Indtast en Bitcoin-adresse (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+ <translation>Indtast en Bitcoin-adresse (fx 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
</message>
</context>
<context>
@@ -1484,7 +1484,7 @@ Adresse: %4
</message>
<message>
<source>Open the Bitcoin debug log file from the current data directory. This can take a few seconds for large log files.</source>
- <translation>Åbn Bitcoin-fejlsøgningslogfilen fra det nuværende datakatalog. Dette kan tage nogle få sekunder for en store logfiler.</translation>
+ <translation>Åbn Bitcoin-fejlsøgningslogfilen fra den nuværende datamappe. Dette kan tage nogle få sekunder for store logfiler.</translation>
</message>
<message>
<source>Clear console</source>
@@ -1880,7 +1880,7 @@ Adresse: %4
</message>
<message>
<source>Are you sure you want to send?</source>
- <translation>Er du sikker på at du vil sende?</translation>
+ <translation>Er du sikker på, at du vil sende?</translation>
</message>
<message>
<source>added as transaction fee</source>
@@ -1888,7 +1888,7 @@ Adresse: %4
</message>
<message>
<source>Payment request expired</source>
- <translation>Betalingsforespørgsel udløb</translation>
+ <translation>Betalingsforespørgsel udløbet</translation>
</message>
<message>
<source>Invalid payment address %1</source>
@@ -1907,7 +1907,7 @@ Adresse: %4
</message>
<message>
<source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
- <translation>Bitcoin-adressen som betalingen skal sendes til (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+ <translation>Bitcoin-adressen som betalingen skal sendes til (fx 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
</message>
<message>
<source>Enter a label for this address to add it to your address book</source>
@@ -1997,7 +1997,7 @@ Adresse: %4
</message>
<message>
<source>The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
- <translation>Bitcoin-adressen som beskeden skal underskrives med (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+ <translation>Bitcoin-adressen som beskeden skal underskrives med (fx 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
</message>
<message>
<source>Choose previously used address</source>
@@ -2017,7 +2017,7 @@ Adresse: %4
</message>
<message>
<source>Enter the message you want to sign here</source>
- <translation>Indtast beskeden, du ønsker at underskrive</translation>
+ <translation>Indtast her beskeden, du ønsker at underskrive</translation>
</message>
<message>
<source>Signature</source>
@@ -2025,7 +2025,7 @@ Adresse: %4
</message>
<message>
<source>Copy the current signature to the system clipboard</source>
- <translation>Kopier den nuværende underskrift til systemets udklipsholder</translation>
+ <translation>Kopiér den nuværende underskrift til systemets udklipsholder</translation>
</message>
<message>
<source>Sign the message to prove you own this Bitcoin address</source>
@@ -2049,11 +2049,11 @@ Adresse: %4
</message>
<message>
<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>Indtast den underskrevne adresse, beskeden (inkluder linjeskift, mellemrum mv. nøjagtigt, som de fremgår) og underskriften for at verificére beskeden. Vær forsigtig med ikke at lægge mere i underskriften end besked selv, så du undgår at blive narret af et man-in-the-middle-angreb.</translation>
+ <translation>Indtast herunder den underskrivende adresse, beskeden (inkludér linjeskift, mellemrum mv. nøjagtigt, som de fremgår) og underskriften for at verificere beskeden. Vær forsigtig med ikke at lægge mere i underskriften end besked selv, så du undgår at blive narret af et man-in-the-middle-angreb.</translation>
</message>
<message>
<source>The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
- <translation>Bitcoin-adressen som beskeden er underskrevet med (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+ <translation>Bitcoin-adressen som beskeden er underskrevet med (fx 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
</message>
<message>
<source>Verify the message to ensure it was signed with the specified Bitcoin address</source>
@@ -2069,7 +2069,7 @@ Adresse: %4
</message>
<message>
<source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
- <translation>Indtast en Bitcoin-adresse (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+ <translation>Indtast en Bitcoin-adresse (fx 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
</message>
<message>
<source>Click &quot;Sign Message&quot; to generate signature</source>
@@ -2081,7 +2081,7 @@ Adresse: %4
</message>
<message>
<source>Please check the address and try again.</source>
- <translation>Tjek venligst adressen, og forsøg igen.</translation>
+ <translation>Tjek venligst adressen og forsøg igen.</translation>
</message>
<message>
<source>The entered address does not refer to a key.</source>
@@ -2117,11 +2117,11 @@ Adresse: %4
</message>
<message>
<source>Message verification failed.</source>
- <translation>Verificéring af besked mislykkedes.</translation>
+ <translation>Verificering af besked mislykkedes.</translation>
</message>
<message>
<source>Message verified.</source>
- <translation>Besked verificéret.</translation>
+ <translation>Besked verificeret.</translation>
</message>
</context>
<context>
@@ -2136,7 +2136,7 @@ Adresse: %4
</message>
<message>
<source>[testnet]</source>
- <translation>[testnet]</translation>
+ <translation>[testnetværk]</translation>
</message>
</context>
<context>
@@ -2174,7 +2174,7 @@ Adresse: %4
</message>
<message numerus="yes">
<source>, broadcast through %n node(s)</source>
- <translation><numerusform>, transmitteret igennem %n knude(r)</numerusform><numerusform>, transmitteret igennem %n knude(r)</numerusform></translation>
+ <translation><numerusform>, transmitteret igennem %n knude</numerusform><numerusform>, transmitteret igennem %n knuder</numerusform></translation>
</message>
<message>
<source>Date</source>
@@ -2210,7 +2210,7 @@ Adresse: %4
</message>
<message numerus="yes">
<source>matures in %n more block(s)</source>
- <translation><numerusform>modner efter yderligere %n blok(ke)</numerusform><numerusform>modner efter yderligere %n blok(ke)</numerusform></translation>
+ <translation><numerusform>modner efter yderligere %n blok</numerusform><numerusform>modner efter yderligere %n blokke</numerusform></translation>
</message>
<message>
<source>not accepted</source>
@@ -2238,7 +2238,7 @@ Adresse: %4
</message>
<message>
<source>Transaction ID</source>
- <translation>Transaktionens ID</translation>
+ <translation>Transaktions-ID</translation>
</message>
<message>
<source>Merchant</source>
@@ -2471,7 +2471,7 @@ Adresse: %4
</message>
<message>
<source>Copy transaction ID</source>
- <translation>Kopier transaktionens ID</translation>
+ <translation>Kopiér transaktions-ID</translation>
</message>
<message>
<source>Edit label</source>
@@ -2560,7 +2560,7 @@ Adresse: %4
<name>WalletView</name>
<message>
<source>&amp;Export</source>
- <translation>Eksporter</translation>
+ <translation>Eksportér</translation>
</message>
<message>
<source>Export the data in the current tab to a file</source>
@@ -2568,7 +2568,7 @@ Adresse: %4
</message>
<message>
<source>Backup Wallet</source>
- <translation>Sikkerhedskopier tegnebog</translation>
+ <translation>Sikkerhedskopiér tegnebog</translation>
</message>
<message>
<source>Wallet Data (*.dat)</source>
@@ -2576,7 +2576,7 @@ Adresse: %4
</message>
<message>
<source>Backup Failed</source>
- <translation>Foretagelse af sikkerhedskopi fejlede</translation>
+ <translation>Sikkerhedskopiering mislykkedes</translation>
</message>
<message>
<source>There was an error trying to save the wallet data to %1.</source>
@@ -2588,7 +2588,7 @@ Adresse: %4
</message>
<message>
<source>Backup Successful</source>
- <translation>Sikkerhedskopieret problemfri</translation>
+ <translation>Sikkerhedskopiering problemfri</translation>
</message>
</context>
<context>
@@ -2619,7 +2619,7 @@ Adresse: %4
</message>
<message>
<source>Specify data directory</source>
- <translation>Angiv datakatalog</translation>
+ <translation>Angiv datamappe</translation>
</message>
<message>
<source>Listen for connections on &lt;port&gt; (default: 8333 or testnet: 18333)</source>
@@ -2671,7 +2671,7 @@ Adresse: %4
</message>
<message>
<source>Accept connections from outside (default: 1 if no -proxy or -connect)</source>
- <translation>Accepter forbindelser udefra (standard: 1 hvis hverken -proxy eller -connect)</translation>
+ <translation>Acceptér forbindelser udefra (standard: 1 hvis hverken -proxy eller -connect)</translation>
</message>
<message>
<source>%s, you must set a rpcpassword in the configuration file:
@@ -2694,7 +2694,7 @@ rpcpassword=%s
Brugernavnet og adgangskode MÅ IKKE være det samme.
Hvis filen ikke eksisterer, opret den og giv ingen andre end ejeren læserettighed.
Det anbefales også at angive alertnotify, så du påmindes om problemer;
-f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
+fx: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
</translation>
</message>
<message>
@@ -2731,7 +2731,7 @@ f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
</message>
<message>
<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>Fejl: Denne transaktion kræver et transaktionsgebyr på minimum %s pga. dens størrelse, kompleksitet eller anvendelse af nyligt modtagne bitcoins!</translation>
+ <translation>Fejl: Denne transaktion kræver et transaktionsgebyr på minimum %s pga. dens beløb, kompleksitet eller anvendelse af nyligt modtagne bitcoins!</translation>
</message>
<message>
<source>Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)</source>
@@ -2783,11 +2783,11 @@ f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
</message>
<message>
<source>Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues.</source>
- <translation type="unfinished"/>
+ <translation>Advarsel: Netværket ser ikke ud til at være fuldt ud enige! Enkelte minere ser ud til at opleve problemer.</translation>
</message>
<message>
<source>Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade.</source>
- <translation type="unfinished"/>
+ <translation>Advarsel: Vi ser ikke ud til at være fuldt ud enige med andre noder! Du kan være nødt til at opgradere, eller andre noder kan være nødt til at opgradere.</translation>
</message>
<message>
<source>Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect.</source>
@@ -2795,7 +2795,7 @@ f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
</message>
<message>
<source>Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup.</source>
- <translation>Advarsel: wallet.dat ødelagt, data reddet! Oprindelig wallet.net gemt som wallet.{timestamp}.bak i %s; hvis din saldo eller dine transaktioner er forkert, bør du genskabe fra en sikkerhedskopi.</translation>
+ <translation>Advarsel: wallet.dat ødelagt, data reddet! Oprindelig wallet.dat gemt som wallet.{timestamp}.bak i %s; hvis din saldo eller dine transaktioner er forkert, bør du genskabe fra en sikkerhedskopi.</translation>
</message>
<message>
<source>(default: 1)</source>
@@ -2947,7 +2947,7 @@ f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
</message>
<message>
<source>Find peers using DNS lookup (default: 1 unless -connect)</source>
- <translation>Find ligeværdige ved DNS-opslag (standard: 1 hvis ikke -connect)</translation>
+ <translation>Find andre knuder ved DNS-opslag (standard: 1 hvis ikke -connect)</translation>
</message>
<message>
<source>Force safe mode (default: 0)</source>
@@ -2955,11 +2955,11 @@ f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
</message>
<message>
<source>Generate coins (default: 0)</source>
- <translation>Generer bitcoins (standard: 0)</translation>
+ <translation>Generér bitcoins (standard: 0)</translation>
</message>
<message>
<source>How many blocks to check at startup (default: 288, 0 = all)</source>
- <translation>Antal blokke som tjekkes ved opstart (0=alle, standard: 288)</translation>
+ <translation>Antal blokke som tjekkes ved opstart (standard: 288, 0=alle)</translation>
</message>
<message>
<source>If &lt;category&gt; is not supplied, output all debugging information.</source>
@@ -2971,7 +2971,7 @@ f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
</message>
<message>
<source>Incorrect or no genesis block found. Wrong datadir for network?</source>
- <translation type="unfinished"/>
+ <translation>Ukorrekt eller ingen tilblivelsesblok fundet. Forkert datamappe for netværk?</translation>
</message>
<message>
<source>Invalid -onion address: &apos;%s&apos;</source>
@@ -3011,7 +3011,7 @@ f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
</message>
<message>
<source>Specify wallet file (within data directory)</source>
- <translation type="unfinished"/>
+ <translation>Angiv tegnebogsfil (inden for datamappe)</translation>
</message>
<message>
<source>Spend unconfirmed change when sending transactions (default: 1)</source>
@@ -3027,11 +3027,11 @@ f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
</message>
<message>
<source>Verifying blocks...</source>
- <translation>Verificerer blokke...</translation>
+ <translation>Verificerer blokke …</translation>
</message>
<message>
<source>Verifying wallet...</source>
- <translation>Verificerer tegnebog...</translation>
+ <translation>Verificerer tegnebog …</translation>
</message>
<message>
<source>Wait for RPC server to start</source>
@@ -3039,7 +3039,7 @@ f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
</message>
<message>
<source>Wallet %s resides outside data directory %s</source>
- <translation type="unfinished"/>
+ <translation>Tegnebog %1 findes uden for datamappe %s</translation>
</message>
<message>
<source>Wallet options:</source>
@@ -3051,7 +3051,7 @@ f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
</message>
<message>
<source>You need to rebuild the database using -reindex to change -txindex</source>
- <translation type="unfinished"/>
+ <translation>Du er nødt til at genopbygge databasen ved hjælp af -reindex for at ændre -txindex</translation>
</message>
<message>
<source>Imports blocks from external blk000??.dat file</source>
@@ -3063,7 +3063,7 @@ f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
</message>
<message>
<source>Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message)</source>
- <translation type="unfinished"/>
+ <translation>Udfør kommando, når en relevant alarm modtages eller vi ser en virkelig lang udsplitning (%s i cmd erstattes af besked)</translation>
</message>
<message>
<source>Output debugging information (default: 0, supplying &lt;category&gt; is optional)</source>
@@ -3079,11 +3079,11 @@ f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
</message>
<message>
<source>Invalid amount for -minrelaytxfee=&lt;amount&gt;: &apos;%s&apos;</source>
- <translation>Ugyldigt beløb til -minrelaytxfee=&lt;beløb&gt;:&apos;%s&apos;</translation>
+ <translation>Ugyldigt beløb til -minrelaytxfee=&lt;beløb&gt;: &quot;%s&quot;</translation>
</message>
<message>
<source>Invalid amount for -mintxfee=&lt;amount&gt;: &apos;%s&apos;</source>
- <translation>Ugyldigt beløb til -mintxfee=&lt;beløb&gt;:&apos;%s&apos;</translation>
+ <translation>Ugyldigt beløb til -mintxfee=&lt;beløb&gt;: &quot;%s&quot;</translation>
</message>
<message>
<source>Limit size of signature cache to &lt;n&gt; entries (default: 50000)</source>
@@ -3099,15 +3099,15 @@ f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
</message>
<message>
<source>Maximum per-connection receive buffer, &lt;n&gt;*1000 bytes (default: 5000)</source>
- <translation>Maksimum for modtagelsesbuffer pr. forbindelse, &lt;n&gt;*1000 bytes (standard: 5000)</translation>
+ <translation>Maksimum for modtagelsesbuffer pr. forbindelse, &lt;n&gt;*1000 byte (standard: 5000)</translation>
</message>
<message>
<source>Maximum per-connection send buffer, &lt;n&gt;*1000 bytes (default: 1000)</source>
- <translation>Maksimum for afsendelsesbuffer pr. forbindelse, &lt;n&gt;*1000 bytes (standard: 1000)</translation>
+ <translation>Maksimum for afsendelsesbuffer pr. forbindelse, &lt;n&gt;*1000 byte (standard: 1000)</translation>
</message>
<message>
<source>Only accept block chain matching built-in checkpoints (default: 1)</source>
- <translation>Accepter kun blokkæde, som matcher indbyggede kontrolposter (standard: 1)</translation>
+ <translation>Acceptér kun blokkæde, som matcher indbyggede kontrolposter (standard: 1)</translation>
</message>
<message>
<source>Only connect to nodes in network &lt;net&gt; (IPv4, IPv6 or Tor)</source>
@@ -3155,7 +3155,7 @@ f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
</message>
<message>
<source>Set minimum block size in bytes (default: 0)</source>
- <translation>Angiv minimumsblokstørrelse i bytes (standard: 0)</translation>
+ <translation>Angiv minimumsblokstørrelse i byte (standard: 0)</translation>
</message>
<message>
<source>Sets the DB_PRIVATE flag in the wallet db environment (default: 1)</source>
@@ -3203,11 +3203,11 @@ f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
</message>
<message>
<source>Use UPnP to map the listening port (default: 0)</source>
- <translation>Forsøg at bruge UPnP til at konfigurere den lyttende port (standard: 0)</translation>
+ <translation>Brug UPnP til at konfigurere den lyttende port (standard: 0)</translation>
</message>
<message>
<source>Use UPnP to map the listening port (default: 1 when listening)</source>
- <translation>Forsøg at bruge UPnP til at konfigurere den lyttende port (standard: 1 når lytter)</translation>
+ <translation>Brug UPnP til at konfigurere den lyttende port (standard: 1 under lytning)</translation>
</message>
<message>
<source>Username for JSON-RPC connections</source>
@@ -3311,11 +3311,11 @@ f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
</message>
<message>
<source>Invalid -proxy address: &apos;%s&apos;</source>
- <translation>Ugyldig -proxy adresse: &apos;%s&apos;</translation>
+ <translation>Ugyldig -proxy adresse: &quot;%s&quot;</translation>
</message>
<message>
<source>Unknown network specified in -onlynet: &apos;%s&apos;</source>
- <translation>Ukendt netværk anført i -onlynet: &apos;%s&apos;</translation>
+ <translation>Ukendt netværk anført i -onlynet: &quot;%s&quot;</translation>
</message>
<message>
<source>Unknown -socks proxy version requested: %i</source>
@@ -3323,15 +3323,15 @@ f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
</message>
<message>
<source>Cannot resolve -bind address: &apos;%s&apos;</source>
- <translation>Kan ikke finde -bind adressen: &apos;%s&apos;</translation>
+ <translation>Kan ikke finde -bind adressen: &quot;%s&quot;</translation>
</message>
<message>
<source>Cannot resolve -externalip address: &apos;%s&apos;</source>
- <translation>Kan ikke finde -externalip adressen: &apos;%s&apos;</translation>
+ <translation>Kan ikke finde -externalip adressen: &quot;%s&quot;</translation>
</message>
<message>
<source>Invalid amount for -paytxfee=&lt;amount&gt;: &apos;%s&apos;</source>
- <translation>Ugyldigt beløb for -paytxfee=&lt;amount&gt;: &apos;%s&apos;</translation>
+ <translation>Ugyldigt beløb for -paytxfee=&lt;beløb&gt;: &quot;%s&quot;</translation>
</message>
<message>
<source>Invalid amount</source>
@@ -3381,7 +3381,7 @@ f.eks.: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.com
<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>Du skal angive rpcpassword=&lt;password&gt; i konfigurationsfilen:
+ <translation>Du skal angive rpcpassword=&lt;adgangskode&gt; i konfigurationsfilen:
%s
Hvis filen ikke eksisterer, opret den og giv ingen andre end ejeren læserettighed.</translation>
</message>
diff --git a/src/qt/locale/bitcoin_id_ID.ts b/src/qt/locale/bitcoin_id_ID.ts
index c4dee5f92d..2b9685f6a0 100644
--- a/src/qt/locale/bitcoin_id_ID.ts
+++ b/src/qt/locale/bitcoin_id_ID.ts
@@ -433,7 +433,7 @@ Produk ini termasuk software yang dibangun oleh Proyek OpenSSL untuk Toolkit Ope
</message>
<message>
<source>Request payments (generates QR codes and bitcoin: URIs)</source>
- <translation type="unfinished"/>
+ <translation>Permintaan pembayaran (membangkitkan kode QR dan bitcoin: URIs)</translation>
</message>
<message>
<source>&amp;About Bitcoin Core</source>
@@ -473,7 +473,7 @@ Produk ini termasuk software yang dibangun oleh Proyek OpenSSL untuk Toolkit Ope
</message>
<message>
<source>Processed %1 of %2 (estimated) blocks of transaction history.</source>
- <translation type="unfinished"/>
+ <translation>Proses % 1 dar i% 2 (perkiraan) blok catatan transaksi</translation>
</message>
<message>
<source>Processed %1 blocks of transaction history.</source>
@@ -509,7 +509,7 @@ Produk ini termasuk software yang dibangun oleh Proyek OpenSSL untuk Toolkit Ope
</message>
<message>
<source>Transactions after this will not yet be visible.</source>
- <translation type="unfinished"/>
+ <translation>Transaksi setelah ini tidak akan ditampilkan</translation>
</message>
<message>
<source>Error</source>
@@ -561,7 +561,7 @@ Alamat: %4
</message>
<message>
<source>A fatal error occurred. Bitcoin can no longer continue safely and will quit.</source>
- <translation type="unfinished"/>
+ <translation>Terjadi kesalahan fatal. Bitcoin tidak bisa lagi meneruskan dengan aman dan akan berhenti.</translation>
</message>
</context>
<context>
@@ -611,15 +611,15 @@ Alamat: %4
</message>
<message>
<source>(un)select all</source>
- <translation type="unfinished"/>
+ <translation>(Tidak)memilih semua</translation>
</message>
<message>
<source>Tree mode</source>
- <translation type="unfinished"/>
+ <translation>mode pohon</translation>
</message>
<message>
<source>List mode</source>
- <translation type="unfinished"/>
+ <translation>Mode daftar</translation>
</message>
<message>
<source>Amount</source>
@@ -663,11 +663,11 @@ Alamat: %4
</message>
<message>
<source>Lock unspent</source>
- <translation type="unfinished"/>
+ <translation>Kunci terpakai.</translation>
</message>
<message>
<source>Unlock unspent</source>
- <translation type="unfinished"/>
+ <translation>Membuka kunci terpakai</translation>
</message>
<message>
<source>Copy quantity</source>
@@ -1350,7 +1350,7 @@ Alamat: %4
</message>
<message>
<source>Error: Cannot parse configuration file: %1. Only use key=value syntax.</source>
- <translation type="unfinished"/>
+ <translation>Kesalahan: Tidak dapat memproses pengaturan berkas: %1. Hanya menggunakan kunci= nilai sintak.</translation>
</message>
<message>
<source>Error: Invalid combination of -regtest and -testnet.</source>
@@ -1408,7 +1408,7 @@ Alamat: %4
</message>
<message>
<source>General</source>
- <translation type="unfinished"/>
+ <translation>Umum</translation>
</message>
<message>
<source>Using OpenSSL version</source>
@@ -1460,7 +1460,7 @@ Alamat: %4
</message>
<message>
<source>&amp;Clear</source>
- <translation type="unfinished"/>
+ <translation>&amp;Kosongkan</translation>
</message>
<message>
<source>Totals</source>
@@ -1504,31 +1504,31 @@ Alamat: %4
</message>
<message>
<source>%1 B</source>
- <translation type="unfinished"/>
+ <translation>%1 B</translation>
</message>
<message>
<source>%1 KB</source>
- <translation type="unfinished"/>
+ <translation>%1 KB</translation>
</message>
<message>
<source>%1 MB</source>
- <translation type="unfinished"/>
+ <translation>%1 MB</translation>
</message>
<message>
<source>%1 GB</source>
- <translation type="unfinished"/>
+ <translation>%1 GB</translation>
</message>
<message>
<source>%1 m</source>
- <translation type="unfinished"/>
+ <translation>%1 menit</translation>
</message>
<message>
<source>%1 h</source>
- <translation type="unfinished"/>
+ <translation>%1 Jam</translation>
</message>
<message>
<source>%1 h %2 m</source>
- <translation type="unfinished"/>
+ <translation>%1 Jam %2 menit</translation>
</message>
</context>
<context>
@@ -1551,7 +1551,7 @@ Alamat: %4
</message>
<message>
<source>R&amp;euse an existing receiving address (not recommended)</source>
- <translation type="unfinished"/>
+ <translation>Gunakan lagi alamat penerima yang ada (tidak disarankan)</translation>
</message>
<message>
<source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Bitcoin network.</source>
@@ -1716,7 +1716,7 @@ Alamat: %4
</message>
<message>
<source>automatically selected</source>
- <translation type="unfinished"/>
+ <translation>Pemilihan otomatis</translation>
</message>
<message>
<source>Insufficient funds!</source>
@@ -1947,7 +1947,7 @@ Alamat: %4
</message>
<message>
<source>This is a verified payment request.</source>
- <translation type="unfinished"/>
+ <translation>Permintaan pembayaran terverifikasi.</translation>
</message>
<message>
<source>Enter a label for this address to add it to the list of used addresses</source>
@@ -1959,7 +1959,7 @@ Alamat: %4
</message>
<message>
<source>This is an unverified payment request.</source>
- <translation type="unfinished"/>
+ <translation>Permintaan pembayaran tidak terverifikasi.</translation>
</message>
<message>
<source>Pay To:</source>
@@ -2005,7 +2005,7 @@ Alamat: %4
</message>
<message>
<source>Alt+A</source>
- <translation>Alt+J</translation>
+ <translation>Alt+A</translation>
</message>
<message>
<source>Paste address from clipboard</source>
@@ -2726,7 +2726,7 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
</message>
<message>
<source>Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)</source>
- <translation type="unfinished"/>
+ <translation>Jalankan perintah ketika perubahan transaksi dompet (%s di cmd digantikan oleh TxID)</translation>
</message>
<message>
<source>Fees smaller than this are considered zero fee (for transaction creation) (default:</source>
@@ -2790,11 +2790,11 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
</message>
<message>
<source>(default: 1)</source>
- <translation type="unfinished"/>
+ <translation>(pengaturan awal: 1)</translation>
</message>
<message>
<source>(default: wallet.dat)</source>
- <translation type="unfinished"/>
+ <translation>(pengaturan awal: wallet.dat)</translation>
</message>
<message>
<source>&lt;category&gt; can be:</source>
@@ -2830,7 +2830,7 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
</message>
<message>
<source>Connection options:</source>
- <translation type="unfinished"/>
+ <translation>Pilih koneksi:</translation>
</message>
<message>
<source>Corrupted block database detected</source>
@@ -2858,11 +2858,11 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
</message>
<message>
<source>Error initializing block database</source>
- <translation type="unfinished"/>
+ <translation>Kesalahan menginisialisasi database blok</translation>
</message>
<message>
<source>Error initializing wallet database environment %s!</source>
- <translation type="unfinished"/>
+ <translation>Kesalahan menginisialisasi dompet pada database%s!</translation>
</message>
<message>
<source>Error loading block database</source>
@@ -2958,7 +2958,7 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
</message>
<message>
<source>Importing...</source>
- <translation type="unfinished"/>
+ <translation>mengimpor...</translation>
</message>
<message>
<source>Incorrect or no genesis block found. Wrong datadir for network?</source>
@@ -2970,7 +2970,7 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
</message>
<message>
<source>Not enough file descriptors available.</source>
- <translation type="unfinished"/>
+ <translation>Deskripsi berkas tidak tersedia dengan cukup.</translation>
</message>
<message>
<source>Prepend debug output with timestamp (default: 1)</source>
@@ -2978,7 +2978,7 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
</message>
<message>
<source>RPC client options:</source>
- <translation type="unfinished"/>
+ <translation>Pilihan RPC klien:</translation>
</message>
<message>
<source>Rebuild block chain index from current blk000??.dat files</source>
@@ -2998,7 +2998,7 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
</message>
<message>
<source>Set the number of threads to service RPC calls (default: 4)</source>
- <translation type="unfinished"/>
+ <translation>Mengatur jumlah urutan untuk layanan panggilan RPC (pengaturan awal: 4)</translation>
</message>
<message>
<source>Specify wallet file (within data directory)</source>
@@ -3174,11 +3174,11 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
</message>
<message>
<source>Start Bitcoin Core Daemon</source>
- <translation type="unfinished"/>
+ <translation>Memulai Bitcoin Core Daemon</translation>
</message>
<message>
<source>System error: </source>
- <translation type="unfinished"/>
+ <translation>Kesalahan sistem:</translation>
</message>
<message>
<source>Transaction amount too small</source>
diff --git a/src/qt/locale/bitcoin_ko_KR.ts b/src/qt/locale/bitcoin_ko_KR.ts
index fb013f4c1d..8e2b681ba9 100644
--- a/src/qt/locale/bitcoin_ko_KR.ts
+++ b/src/qt/locale/bitcoin_ko_KR.ts
@@ -33,7 +33,7 @@ MIT/X11 프로그램 라이선스에 따라 배포합니다. COPYING 또는 http
</message>
<message>
<source>(%1-bit)</source>
- <translation type="unfinished"/>
+ <translation>(%1-비트)</translation>
</message>
</context>
<context>
@@ -611,7 +611,7 @@ Address: %4
</message>
<message>
<source>(un)select all</source>
- <translation type="unfinished"/>
+ <translation>모두 선택(하지 않음)</translation>
</message>
<message>
<source>Tree mode</source>
@@ -663,11 +663,11 @@ Address: %4
</message>
<message>
<source>Lock unspent</source>
- <translation type="unfinished"/>
+ <translation>비트코인이 사용되지 않은 주소를 잠금 처리합니다.</translation>
</message>
<message>
<source>Unlock unspent</source>
- <translation type="unfinished"/>
+ <translation>비트코인이 사용되지 않은 주소를 잠금 해제합니다. </translation>
</message>
<message>
<source>Copy quantity</source>
@@ -767,7 +767,7 @@ Address: %4
</message>
<message>
<source>Transactions with higher priority are more likely to get included into a block.</source>
- <translation type="unfinished"/>
+ <translation>우선 순위가 높은 거래의 경우 블럭에 포함될 가능성이 더 많습니다.</translation>
</message>
<message>
<source>This label turns red, if the priority is smaller than &quot;medium&quot;.</source>
@@ -779,11 +779,11 @@ Address: %4
</message>
<message>
<source>This means a fee of at least %1 is required.</source>
- <translation type="unfinished"/>
+ <translation>최소 %1의 거래 수수료가 필요하다는 뜻입니다. </translation>
</message>
<message>
<source>Amounts below 0.546 times the minimum relay fee are shown as dust.</source>
- <translation type="unfinished"/>
+ <translation>노드 릴레이를 위한 최저 수수료의 0.546배보다 낮은 거래는 먼지 거래로 표현됩니다.</translation>
</message>
<message>
<source>This label turns red, if the change is smaller than %1.</source>
@@ -916,7 +916,7 @@ Address: %4
</message>
<message>
<source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation type="unfinished"/>
+ <translation>지불 요청을 위해 SSL 최상위 인증을 설정합니다. (기본값: -system-)</translation>
</message>
<message>
<source>Show splash screen on startup (default: 1)</source>
@@ -939,11 +939,11 @@ Address: %4
</message>
<message>
<source>As this is the first time the program is launched, you can choose where Bitcoin Core will store its data.</source>
- <translation type="unfinished"/>
+ <translation>프로그램이 처음으로 실행되고 있습니다. 비트코인 코어가 어디에 데이터를 저장할지 선택할 수 있습니다. </translation>
</message>
<message>
<source>Bitcoin Core will download and store a copy of the Bitcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- <translation type="unfinished"/>
+ <translation>비트코인 코어가 블럭체인의 복사본을 다운로드 저장합니다. 적어도 %1GB의 데이터가 이 폴더에 저장되며 시간이 경과할수록 점차 증가합니다. 그리고 지갑 또한 이 폴더에 저장됩니다. </translation>
</message>
<message>
<source>Use the default data directory</source>
@@ -959,7 +959,7 @@ Address: %4
</message>
<message>
<source>Error: Specified data directory &quot;%1&quot; can not be created.</source>
- <translation type="unfinished"/>
+ <translation>오류 : 별도 정의한 폴더명 &quot;%1&quot; 생성에 실패했습니다. </translation>
</message>
<message>
<source>Error</source>
@@ -1033,7 +1033,7 @@ Address: %4
</message>
<message>
<source>Number of script &amp;verification threads</source>
- <translation type="unfinished"/>
+ <translation>스크립트 인증 쓰레드의 개수</translation>
</message>
<message>
<source>Connect to the Bitcoin network through a SOCKS proxy.</source>
@@ -1081,11 +1081,11 @@ Address: %4
</message>
<message>
<source>Expert</source>
- <translation type="unfinished"/>
+ <translation>전문가</translation>
</message>
<message>
<source>Enable coin &amp;control features</source>
- <translation type="unfinished"/>
+ <translation>코인 상세 제어기능을 활성화합니다 - &amp;C</translation>
</message>
<message>
<source>If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed.</source>
@@ -1173,7 +1173,7 @@ Address: %4
</message>
<message>
<source>Whether to show coin control features or not.</source>
- <translation type="unfinished"/>
+ <translation>코인 상세 제어기능에 대한 표시 여부를 선택할 수 있습니다.</translation>
</message>
<message>
<source>&amp;OK</source>
@@ -1197,7 +1197,7 @@ Address: %4
</message>
<message>
<source>Client restart required to activate changes.</source>
- <translation type="unfinished"/>
+ <translation>변경 사항을 적용하기 위해서는 프로그램이 종료 후 재시작되어야 합니다.</translation>
</message>
<message>
<source>Client will be shutdown, do you want to proceed?</source>
@@ -1205,7 +1205,7 @@ Address: %4
</message>
<message>
<source>This change would require a client restart.</source>
- <translation type="unfinished"/>
+ <translation>이 변경 사항 적용을 위해 프로그램 재시작이 필요합니다. </translation>
</message>
<message>
<source>The supplied proxy address is invalid.</source>
@@ -1279,7 +1279,7 @@ Address: %4
</message>
<message>
<source>Requested payment amount of %1 is too small (considered dust).</source>
- <translation type="unfinished"/>
+ <translation>요청한 금액 %1의 양이 너무 적습니다. (스팸성 거래로 간주)</translation>
</message>
<message>
<source>Payment request error</source>
@@ -1295,7 +1295,7 @@ Address: %4
</message>
<message>
<source>Your active proxy doesn&apos;t support SOCKS5, which is required for payment requests via proxy.</source>
- <translation type="unfinished"/>
+ <translation>현재의 프록시가 SOCKS5를 지원하지 않아 지불 요청을 수행할 수 없습니다. </translation>
</message>
<message>
<source>Payment request fetch URL is invalid: %1</source>
@@ -1547,11 +1547,11 @@ Address: %4
</message>
<message>
<source>Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before.</source>
- <translation type="unfinished"/>
+ <translation>이전에 사용된 수취용 주소를 사용할려고 합니다. 주소의 재사용은 보안과 개인정보 보호 측면에서 문제를 초래할 수 있습니다. 이전 지불 요청을 재생성하는 경우가 아니라면 주소 재사용을 권하지 않습니다. </translation>
</message>
<message>
<source>R&amp;euse an existing receiving address (not recommended)</source>
- <translation type="unfinished"/>
+ <translation>현재의 수취용 주소를 재사용합니다만 권장하지는 않습니다. (R&amp;)</translation>
</message>
<message>
<source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Bitcoin network.</source>
@@ -1567,7 +1567,7 @@ Address: %4
</message>
<message>
<source>An optional amount to request. Leave this empty or zero to not request a specific amount.</source>
- <translation type="unfinished"/>
+ <translation>요청할 금액 입력칸으로 선택 사항입니다. 빈 칸으로 두거나 특정 금액이 필요하지 않는 경우 0을 입력하세요. </translation>
</message>
<message>
<source>Clear all fields of the form.</source>
@@ -1951,7 +1951,7 @@ Address: %4
</message>
<message>
<source>Enter a label for this address to add it to the list of used addresses</source>
- <translation type="unfinished"/>
+ <translation>사용된 주소 목록에 새 주소를 추가하기 위해 제목을 입력합니다. </translation>
</message>
<message>
<source>A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network.</source>
@@ -1963,7 +1963,7 @@ Address: %4
</message>
<message>
<source>Pay To:</source>
- <translation type="unfinished"/>
+ <translation>송금할 대상 : </translation>
</message>
<message>
<source>Memo:</source>
@@ -2246,7 +2246,7 @@ Address: %4
</message>
<message>
<source>Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to &quot;not accepted&quot; and it won&apos;t be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source>
- <translation type="unfinished"/>
+ <translation>신규 채굴된 코인이 사용되기 위해서는 %1 개의 블럭이 경과되어야 합니다. 블럭을 생성할 때 블럭체인에 추가되도록 네트워크에 전파되는 과정을 거치는데, 블럭체인에 포함되지 못하고 실패한다면 해당 블럭의 상태는 &apos;미승인&apos;으로 표현되고 비트코인 또한 사용될 수 없습니다. 이 현상은 다른 노드가 비슷한 시간대에 동시에 블럭을 생성할 때 종종 발생할 수 있습니다. </translation>
</message>
<message>
<source>Debug information</source>
@@ -2316,7 +2316,7 @@ Address: %4
</message>
<message>
<source>Immature (%1 confirmations, will be available after %2)</source>
- <translation type="unfinished"/>
+ <translation>충분히 숙성되지 않은 상태 (%1 승인, %2 후에 사용 가능합니다)</translation>
</message>
<message numerus="yes">
<source>Open for %n more block(s)</source>
@@ -2348,7 +2348,7 @@ Address: %4
</message>
<message>
<source>Confirming (%1 of %2 recommended confirmations)</source>
- <translation type="unfinished"/>
+ <translation>승인 중 (권장되는 승인 회수 %2 대비 현재 승인 수 %1)</translation>
</message>
<message>
<source>Conflicted</source>
@@ -2580,7 +2580,7 @@ Address: %4
</message>
<message>
<source>There was an error trying to save the wallet data to %1.</source>
- <translation type="unfinished"/>
+ <translation>지갑 데이터를 %1 폴더에 저장하는 동안 오류가 발생했습니다. </translation>
</message>
<message>
<source>The wallet data was successfully saved to %1.</source>
@@ -2659,7 +2659,7 @@ Address: %4
</message>
<message>
<source>Bitcoin Core RPC client version</source>
- <translation type="unfinished"/>
+ <translation>비트코인 코어 RPC 클라이언트 버전</translation>
</message>
<message>
<source>Run in the background as a daemon and accept commands</source>
@@ -2729,7 +2729,7 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
</message>
<message>
<source>Fees smaller than this are considered zero fee (for transaction creation) (default:</source>
- <translation type="unfinished"/>
+ <translation>해당 금액보다 적은 수수료는 수수료 면제로 간주됩니다. (거래 생성의 목적)(기본값:</translation>
</message>
<message>
<source>Flush database activity from memory pool to disk log every &lt;n&gt; megabytes (default: 100)</source>
@@ -2789,11 +2789,11 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
</message>
<message>
<source>(default: 1)</source>
- <translation type="unfinished"/>
+ <translation>(기본값: 1)</translation>
</message>
<message>
<source>(default: wallet.dat)</source>
- <translation type="unfinished"/>
+ <translation>(기본값: wallet.dat)</translation>
</message>
<message>
<source>&lt;category&gt; can be:</source>
@@ -2829,7 +2829,7 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
</message>
<message>
<source>Connection options:</source>
- <translation type="unfinished"/>
+ <translation>연결 설정 : </translation>
</message>
<message>
<source>Corrupted block database detected</source>
@@ -2837,7 +2837,7 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
</message>
<message>
<source>Debugging/Testing options:</source>
- <translation type="unfinished"/>
+ <translation>디버그 및 테스트 설정</translation>
</message>
<message>
<source>Disable safemode, override a real safe mode event (default: 0)</source>
@@ -2929,11 +2929,11 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
</message>
<message>
<source>Fee per kB to add to transactions you send</source>
- <translation type="unfinished"/>
+ <translation>송금 거래시 추가되는 KB 당 수수료입니다. </translation>
</message>
<message>
<source>Fees smaller than this are considered zero fee (for relaying) (default:</source>
- <translation type="unfinished"/>
+ <translation>해당 금액보다 적은 수수료는 수수료 면제로 간주됩니다. (릴레이 목적)(기본값:</translation>
</message>
<message>
<source>Find peers using DNS lookup (default: 1 unless -connect)</source>
@@ -2941,7 +2941,7 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
</message>
<message>
<source>Force safe mode (default: 0)</source>
- <translation type="unfinished"/>
+ <translation>안전 모드로 강제 진입하는 기능입니다.(기본값: 0) </translation>
</message>
<message>
<source>Generate coins (default: 0)</source>
diff --git a/src/qt/locale/bitcoin_ro_RO.ts b/src/qt/locale/bitcoin_ro_RO.ts
index 1d9d4cc936..d09c40f62e 100644
--- a/src/qt/locale/bitcoin_ro_RO.ts
+++ b/src/qt/locale/bitcoin_ro_RO.ts
@@ -795,7 +795,7 @@ Adresa: %4
</message>
<message>
<source>change from %1 (%2)</source>
- <translation type="unfinished"/>
+ <translation>restul de la %1 (%2)</translation>
</message>
<message>
<source>(change)</source>
@@ -1587,7 +1587,7 @@ Adresa: %4
</message>
<message>
<source>Show the selected request (does the same as double clicking an entry)</source>
- <translation type="unfinished"/>
+ <translation>Arata cererea selectata (acelas lucru ca si dublu-click pe o inregistrare)</translation>
</message>
<message>
<source>Show</source>
@@ -3008,7 +3008,7 @@ spre exemplu: alertnotify=echo %%s | mail -s &quot;Alerta Bitcoin&quot; admin@fo
</message>
<message>
<source>Set the number of threads to service RPC calls (default: 4)</source>
- <translation type="unfinished"/>
+ <translation>Stabileste numarul de thread-uri care servesc apeluri RPC (implicit: 4)</translation>
</message>
<message>
<source>Specify wallet file (within data directory)</source>
diff --git a/src/qt/macdockiconhandler.mm b/src/qt/macdockiconhandler.mm
index 64291c9188..74fb64ace3 100644
--- a/src/qt/macdockiconhandler.mm
+++ b/src/qt/macdockiconhandler.mm
@@ -62,6 +62,8 @@ MacDockIconHandler::MacDockIconHandler() : QObject()
this->setMainWindow(NULL);
#if QT_VERSION < 0x050000
qt_mac_set_dock_menu(this->m_dockMenu);
+#elif QT_VERSION >= 0x050200
+ this->m_dockMenu->setAsDockMenu();
#endif
[pool release];
}
diff --git a/src/qt/notificator.cpp b/src/qt/notificator.cpp
index 38a029dbe5..3d588cd317 100644
--- a/src/qt/notificator.cpp
+++ b/src/qt/notificator.cpp
@@ -28,8 +28,10 @@
#endif
+#ifdef USE_DBUS
// https://wiki.ubuntu.com/NotificationDevelopmentGuidelines recommends at least 128
const int FREEDESKTOP_NOTIFICATION_ICON_SIZE = 128;
+#endif
Notificator::Notificator(const QString &programName, QSystemTrayIcon *trayicon, QWidget *parent) :
QObject(parent),
diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp
index e87a1d97e7..051098315d 100644
--- a/src/qt/optionsmodel.cpp
+++ b/src/qt/optionsmodel.cpp
@@ -106,11 +106,7 @@ void OptionsModel::Init()
// Network
if (!settings.contains("fUseUPnP"))
-#ifdef USE_UPNP
- settings.setValue("fUseUPnP", true);
-#else
- settings.setValue("fUseUPnP", false);
-#endif
+ settings.setValue("fUseUPnP", DEFAULT_UPNP);
if (!SoftSetBoolArg("-upnp", settings.value("fUseUPnP").toBool()))
addOverriddenOption("-upnp");
diff --git a/src/qt/test/test_main.cpp b/src/qt/test/test_main.cpp
index a2adb00327..220da28cfe 100644
--- a/src/qt/test/test_main.cpp
+++ b/src/qt/test/test_main.cpp
@@ -1,4 +1,3 @@
-#include "bitcoin-config.h"
#if defined(HAVE_CONFIG_H)
#include "bitcoin-config.h"
#endif
diff --git a/src/rpcnet.cpp b/src/rpcnet.cpp
index 024f6a09de..63eed09b64 100644
--- a/src/rpcnet.cpp
+++ b/src/rpcnet.cpp
@@ -166,7 +166,7 @@ Value addnode(const Array& params, bool fHelp)
if (strCommand == "onetry")
{
CAddress addr;
- ConnectNode(addr, strNode.c_str());
+ OpenNetworkConnection(addr, NULL, strNode.c_str());
return Value::null;
}
diff --git a/src/rpcprotocol.cpp b/src/rpcprotocol.cpp
index 5cbaa535ab..2718f81783 100644
--- a/src/rpcprotocol.cpp
+++ b/src/rpcprotocol.cpp
@@ -51,15 +51,7 @@ string HTTPPost(const string& strMsg, const map<string,string>& mapRequestHeader
static string rfc1123Time()
{
- char buffer[64];
- time_t now;
- time(&now);
- struct tm* now_gmt = gmtime(&now);
- string locale(setlocale(LC_TIME, NULL));
- setlocale(LC_TIME, "C"); // we want POSIX (aka "C") weekday/month strings
- strftime(buffer, sizeof(buffer), "%a, %d %b %Y %H:%M:%S +0000", now_gmt);
- setlocale(LC_TIME, locale.c_str());
- return string(buffer);
+ return DateTimeStrFormat("%a, %d %b %Y %H:%M:%S +0000", GetTime());
}
string HTTPReply(int nStatus, const string& strMsg, bool keepalive)
diff --git a/src/rpcwallet.cpp b/src/rpcwallet.cpp
index a8f267d7fc..e3b35dbb04 100644
--- a/src/rpcwallet.cpp
+++ b/src/rpcwallet.cpp
@@ -318,7 +318,7 @@ Value sendtoaddress(const Array& params, bool fHelp)
" to which you're sending the transaction. This is not part of the \n"
" transaction, just kept in your wallet.\n"
"\nResult:\n"
- "\"transactionid\" (string) The transaction id. (view at https://blockchain.info/tx/[transactionid])\n"
+ "\"transactionid\" (string) The transaction id.\n"
"\nExamples:\n"
+ HelpExampleCli("sendtoaddress", "\"1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd\" 0.1")
+ HelpExampleCli("sendtoaddress", "\"1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd\" 0.1 \"donation\" \"seans outpost\"")
@@ -747,7 +747,7 @@ Value sendfrom(const Array& params, bool fHelp)
" to which you're sending the transaction. This is not part of the transaction, \n"
" it is just kept in your wallet.\n"
"\nResult:\n"
- "\"transactionid\" (string) The transaction id. (view at https://blockchain.info/tx/[transactionid])\n"
+ "\"transactionid\" (string) The transaction id.\n"
"\nExamples:\n"
"\nSend 0.01 btc from the default account to the address, must have at least 1 confirmation\n"
+ HelpExampleCli("sendfrom", "\"\" \"1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd\" 0.01") +
@@ -807,7 +807,7 @@ Value sendmany(const Array& params, bool fHelp)
"4. \"comment\" (string, optional) A comment\n"
"\nResult:\n"
"\"transactionid\" (string) The transaction id for the send. Only 1 transaction is created regardless of \n"
- " the number of addresses. See https://blockchain.info/tx/[transactionid]\n"
+ " the number of addresses.\n"
"\nExamples:\n"
"\nSend two amounts to two different addresses:\n"
+ HelpExampleCli("sendmany", "\"tabby\" \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\"") +
@@ -1209,8 +1209,7 @@ Value listtransactions(const Array& params, bool fHelp)
" category of transactions.\n"
" \"blockindex\": n, (numeric) The block index containing the transaction. Available for 'send' and 'receive'\n"
" category of transactions.\n"
- " \"txid\": \"transactionid\", (string) The transaction id (see https://blockchain.info/tx/[transactionid]. Available \n"
- " for 'send' and 'receive' category of transactions.\n"
+ " \"txid\": \"transactionid\", (string) The transaction id. Available for 'send' and 'receive' category of transactions.\n"
" \"time\": xxx, (numeric) The transaction time in seconds since epoch (midnight Jan 1 1970 GMT).\n"
" \"timereceived\": xxx, (numeric) The time received in seconds since epoch (midnight Jan 1 1970 GMT). Available \n"
" for 'send' and 'receive' category of transactions.\n"
@@ -1375,7 +1374,7 @@ Value listsinceblock(const Array& params, bool fHelp)
" \"blockhash\": \"hashvalue\", (string) The block hash containing the transaction. Available for 'send' and 'receive' category of transactions.\n"
" \"blockindex\": n, (numeric) The block index containing the transaction. Available for 'send' and 'receive' category of transactions.\n"
" \"blocktime\": xxx, (numeric) The block time in seconds since epoch (1 Jan 1970 GMT).\n"
- " \"txid\": \"transactionid\", (string) The transaction id (see https://blockchain.info/tx/[transactionid]. Available for 'send' and 'receive' category of transactions.\n"
+ " \"txid\": \"transactionid\", (string) The transaction id. Available for 'send' and 'receive' category of transactions.\n"
" \"time\": xxx, (numeric) The transaction time in seconds since epoch (Jan 1 1970 GMT).\n"
" \"timereceived\": xxx, (numeric) The time received in seconds since epoch (Jan 1 1970 GMT). Available for 'send' and 'receive' category of transactions.\n"
" \"comment\": \"...\", (string) If a comment is associated with the transaction.\n"
@@ -1447,7 +1446,7 @@ Value gettransaction(const Array& params, bool fHelp)
" \"blockhash\" : \"hash\", (string) The block hash\n"
" \"blockindex\" : xx, (numeric) The block index\n"
" \"blocktime\" : ttt, (numeric) The time in seconds since epoch (1 Jan 1970 GMT)\n"
- " \"txid\" : \"transactionid\", (string) The transaction id, see also https://blockchain.info/tx/[transactionid]\n"
+ " \"txid\" : \"transactionid\", (string) The transaction id.\n"
" \"time\" : ttt, (numeric) The transaction time in seconds since epoch (1 Jan 1970 GMT)\n"
" \"timereceived\" : ttt, (numeric) The time received in seconds since epoch (1 Jan 1970 GMT)\n"
" \"details\" : [\n"
diff --git a/src/script.h b/src/script.h
index 0d8a8544bd..aed2b7a6ad 100644
--- a/src/script.h
+++ b/src/script.h
@@ -722,7 +722,7 @@ public:
void print() const
{
- LogPrintf("%s\n", ToString().c_str());
+ LogPrintf("%s\n", ToString());
}
CScriptID GetID() const
diff --git a/src/test/data/tx_valid.json b/src/test/data/tx_valid.json
index 1f51d3ce55..40275cd194 100644
--- a/src/test/data/tx_valid.json
+++ b/src/test/data/tx_valid.json
@@ -132,5 +132,51 @@
[[["ba4cd7ae2ad4d4d13ebfc8ab1d93a63e4a6563f25089a18bf0fc68f282aa88c1", 0, "2 0x21 0x037c615d761e71d38903609bf4f46847266edc2fb37532047d747ba47eaae5ffe1 0x21 0x02edc823cd634f2c4033d94f5755207cb6b60c4b1f1f056ad7471c47de5f2e4d50 2 CHECKMULTISIG NOT"]],
"0100000001c188aa82f268fcf08ba18950f263654a3ea6931dabc8bf3ed1d4d42aaed74cba000000004b0000483045022100940378576e069aca261a6b26fb38344e4497ca6751bb10905c76bb689f4222b002204833806b014c26fd801727b792b1260003c55710f87c5adbd7a9cb57446dbc9801ffffffff0101000000000000002321037c615d761e71d38903609bf4f46847266edc2fb37532047d747ba47eaae5ffe1ac00000000", "P2SH"],
+
+["OP_CODESEPARATOR tests"],
+
+["Test that SignatureHash() removes OP_CODESEPARATOR with FindAndDelete()"],
+[[["bc7fd132fcf817918334822ee6d9bd95c889099c96e07ca2c1eb2cc70db63224", 0, "CODESEPARATOR 0x21 0x038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041 CHECKSIG"]],
+"01000000012432b60dc72cebc1a27ce0969c0989c895bdd9e62e8234839117f8fc32d17fbc000000004a493046022100a576b52051962c25e642c0fd3d77ee6c92487048e5d90818bcf5b51abaccd7900221008204f8fb121be4ec3b24483b1f92d89b1b0548513a134e345c5442e86e8617a501ffffffff010000000000000000016a00000000", "P2SH"],
+[[["83e194f90b6ef21fa2e3a365b63794fb5daa844bdc9b25de30899fcfe7b01047", 0, "CODESEPARATOR CODESEPARATOR 0x21 0x038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041 CHECKSIG"]],
+"01000000014710b0e7cf9f8930de259bdc4b84aa5dfb9437b665a3e3a21ff26e0bf994e183000000004a493046022100a166121a61b4eeb19d8f922b978ff6ab58ead8a5a5552bf9be73dc9c156873ea02210092ad9bc43ee647da4f6652c320800debcf08ec20a094a0aaf085f63ecb37a17201ffffffff010000000000000000016a00000000", "P2SH"],
+
+["Hashed data starts at the CODESEPARATOR"],
+[[["326882a7f22b5191f1a0cc9962ca4b878cd969cf3b3a70887aece4d801a0ba5e", 0, "0x21 0x038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041 CODESEPARATOR CHECKSIG"]],
+"01000000015ebaa001d8e4ec7a88703a3bcf69d98c874bca6299cca0f191512bf2a7826832000000004948304502203bf754d1c6732fbf87c5dcd81258aefd30f2060d7bd8ac4a5696f7927091dad1022100f5bcb726c4cf5ed0ed34cc13dadeedf628ae1045b7cb34421bc60b89f4cecae701ffffffff010000000000000000016a00000000", "P2SH"],
+
+["But only if execution has reached it"],
+[[["a955032f4d6b0c9bfe8cad8f00a8933790b9c1dc28c82e0f48e75b35da0e4944", 0, "0x21 0x038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041 CHECKSIGVERIFY CODESEPARATOR 0x21 0x038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041 CHECKSIGVERIFY CODESEPARATOR 1"]],
+"010000000144490eda355be7480f2ec828dcc1b9903793a8008fad8cfe9b0c6b4d2f0355a900000000924830450221009c0a27f886a1d8cb87f6f595fbc3163d28f7a81ec3c4b252ee7f3ac77fd13ffa02203caa8dfa09713c8c4d7ef575c75ed97812072405d932bd11e6a1593a98b679370148304502201e3861ef39a526406bad1e20ecad06be7375ad40ddb582c9be42d26c3a0d7b240221009d0a3985e96522e59635d19cc4448547477396ce0ef17a58e7d74c3ef464292301ffffffff010000000000000000016a00000000", "P2SH"],
+
+["CHECKSIG is legal in scriptSigs"],
+[[["ccf7f4053a02e653c36ac75c891b7496d0dc5ce5214f6c913d9cf8f1329ebee0", 0, "DUP HASH160 0x14 0xee5a6aa40facefb2655ac23c0c28c57c65c41f9b EQUALVERIFY CHECKSIG"]],
+"0100000001e0be9e32f1f89c3d916c4f21e55cdcd096741b895cc76ac353e6023a05f4f7cc00000000d86149304602210086e5f736a2c3622ebb62bd9d93d8e5d76508b98be922b97160edc3dcca6d8c47022100b23c312ac232a4473f19d2aeb95ab7bdf2b65518911a0d72d50e38b5dd31dc820121038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ac4730440220508fa761865c8abd81244a168392876ee1d94e8ed83897066b5e2df2400dad24022043f5ee7538e87e9c6aef7ef55133d3e51da7cc522830a9c4d736977a76ef755c0121038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ffffffff010000000000000000016a00000000", "P2SH"],
+
+["Same semantics for OP_CODESEPARATOR"],
+[[["10c9f0effe83e97f80f067de2b11c6a00c3088a4bce42c5ae761519af9306f3c", 1, "DUP HASH160 0x14 0xee5a6aa40facefb2655ac23c0c28c57c65c41f9b EQUALVERIFY CHECKSIG"]],
+"01000000013c6f30f99a5161e75a2ce4bca488300ca0c6112bde67f0807fe983feeff0c91001000000e608646561646265656675ab61493046022100ce18d384221a731c993939015e3d1bcebafb16e8c0b5b5d14097ec8177ae6f28022100bcab227af90bab33c3fe0a9abfee03ba976ee25dc6ce542526e9b2e56e14b7f10121038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ac493046022100c3b93edcc0fd6250eb32f2dd8a0bba1754b0f6c3be8ed4100ed582f3db73eba2022100bf75b5bd2eff4d6bf2bda2e34a40fcc07d4aa3cf862ceaa77b47b81eff829f9a01ab21038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ffffffff010000000000000000016a00000000", "P2SH"],
+
+["Signatures are removed from the script they are in by FindAndDelete() in the CHECKSIG code; even multiple instances of one signature can be removed."],
+[[["6056ebd549003b10cbbd915cea0d82209fe40b8617104be917a26fa92cbe3d6f", 0, "DUP HASH160 0x14 0xee5a6aa40facefb2655ac23c0c28c57c65c41f9b EQUALVERIFY CHECKSIG"]],
+"01000000016f3dbe2ca96fa217e94b1017860be49f20820dea5c91bdcb103b0049d5eb566000000000fd1d0147304402203989ac8f9ad36b5d0919d97fa0a7f70c5272abee3b14477dc646288a8b976df5022027d19da84a066af9053ad3d1d7459d171b7e3a80bc6c4ef7a330677a6be548140147304402203989ac8f9ad36b5d0919d97fa0a7f70c5272abee3b14477dc646288a8b976df5022027d19da84a066af9053ad3d1d7459d171b7e3a80bc6c4ef7a330677a6be548140121038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ac47304402203757e937ba807e4a5da8534c17f9d121176056406a6465054bdd260457515c1a02200f02eccf1bec0f3a0d65df37889143c2e88ab7acec61a7b6f5aa264139141a2b0121038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ffffffff010000000000000000016a00000000", "P2SH"],
+
+["That also includes ahead of the opcode being executed."],
+[[["5a6b0021a6042a686b6b94abc36b387bef9109847774e8b1e51eb8cc55c53921", 1, "DUP HASH160 0x14 0xee5a6aa40facefb2655ac23c0c28c57c65c41f9b EQUALVERIFY CHECKSIG"]],
+"01000000012139c555ccb81ee5b1e87477840991ef7b386bc3ab946b6b682a04a621006b5a01000000fdb40148304502201723e692e5f409a7151db386291b63524c5eb2030df652b1f53022fd8207349f022100b90d9bbf2f3366ce176e5e780a00433da67d9e5c79312c6388312a296a5800390148304502201723e692e5f409a7151db386291b63524c5eb2030df652b1f53022fd8207349f022100b90d9bbf2f3366ce176e5e780a00433da67d9e5c79312c6388312a296a5800390121038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f2204148304502201723e692e5f409a7151db386291b63524c5eb2030df652b1f53022fd8207349f022100b90d9bbf2f3366ce176e5e780a00433da67d9e5c79312c6388312a296a5800390175ac4830450220646b72c35beeec51f4d5bc1cbae01863825750d7f490864af354e6ea4f625e9c022100f04b98432df3a9641719dbced53393022e7249fb59db993af1118539830aab870148304502201723e692e5f409a7151db386291b63524c5eb2030df652b1f53022fd8207349f022100b90d9bbf2f3366ce176e5e780a00433da67d9e5c79312c6388312a296a580039017521038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ffffffff010000000000000000016a00000000", "P2SH"],
+
+["Finally CHECKMULTISIG removes all signatures prior to hashing the script containing those signatures. In conjunction with the SIGHASH_SINGLE bug this lets us test whether or not FindAndDelete() is actually present in scriptPubKey/redeemScript evaluation by including a signature of the digest 0x01 We can compute in advance for our pubkey, embed it it in the scriptPubKey, and then also using a normal SIGHASH_ALL signature. If FindAndDelete() wasn't run, the 'bugged' signature would still be in the hashed script, and the normal signature would fail."],
+
+["Here's an example on mainnet within a P2SH redeemScript. Remarkably it's a standard transaction in <0.9"],
+[[["b5b598de91787439afd5938116654e0b16b7a0d0f82742ba37564219c5afcbf9", 0, "DUP HASH160 0x14 0xf6f365c40f0739b61de827a44751e5e99032ed8f EQUALVERIFY CHECKSIG"],
+ ["ab9805c6d57d7070d9a42c5176e47bb705023e6b67249fb6760880548298e742", 0, "HASH160 0x14 0xd8dacdadb7462ae15cd906f1878706d0da8660e6 EQUAL"]],
+"0100000002f9cbafc519425637ba4227f8d0a0b7160b4e65168193d5af39747891de98b5b5000000006b4830450221008dd619c563e527c47d9bd53534a770b102e40faa87f61433580e04e271ef2f960220029886434e18122b53d5decd25f1f4acb2480659fea20aabd856987ba3c3907e0121022b78b756e2258af13779c1a1f37ea6800259716ca4b7f0b87610e0bf3ab52a01ffffffff42e7988254800876b69f24676b3e0205b77be476512ca4d970707dd5c60598ab00000000fd260100483045022015bd0139bcccf990a6af6ec5c1c52ed8222e03a0d51c334df139968525d2fcd20221009f9efe325476eb64c3958e4713e9eefe49bf1d820ed58d2112721b134e2a1a53034930460221008431bdfa72bc67f9d41fe72e94c88fb8f359ffa30b33c72c121c5a877d922e1002210089ef5fc22dd8bfc6bf9ffdb01a9862d27687d424d1fefbab9e9c7176844a187a014c9052483045022015bd0139bcccf990a6af6ec5c1c52ed8222e03a0d51c334df139968525d2fcd20221009f9efe325476eb64c3958e4713e9eefe49bf1d820ed58d2112721b134e2a1a5303210378d430274f8c5ec1321338151e9f27f4c676a008bdf8638d07c0b6be9ab35c71210378d430274f8c5ec1321338151e9f27f4c676a008bdf8638d07c0b6be9ab35c7153aeffffffff01a08601000000000017a914d8dacdadb7462ae15cd906f1878706d0da8660e68700000000", "P2SH"],
+
+["Same idea, but with bare CHECKMULTISIG"],
+[[["ceafe58e0f6e7d67c0409fbbf673c84c166e3c5d3c24af58f7175b18df3bb3db", 0, "DUP HASH160 0x14 0xf6f365c40f0739b61de827a44751e5e99032ed8f EQUALVERIFY CHECKSIG"],
+ ["ceafe58e0f6e7d67c0409fbbf673c84c166e3c5d3c24af58f7175b18df3bb3db", 1, "2 0x48 0x3045022015bd0139bcccf990a6af6ec5c1c52ed8222e03a0d51c334df139968525d2fcd20221009f9efe325476eb64c3958e4713e9eefe49bf1d820ed58d2112721b134e2a1a5303 0x21 0x0378d430274f8c5ec1321338151e9f27f4c676a008bdf8638d07c0b6be9ab35c71 0x21 0x0378d430274f8c5ec1321338151e9f27f4c676a008bdf8638d07c0b6be9ab35c71 3 CHECKMULTISIG"]],
+"0100000002dbb33bdf185b17f758af243c5d3c6e164cc873f6bb9f40c0677d6e0f8ee5afce000000006b4830450221009627444320dc5ef8d7f68f35010b4c050a6ed0d96b67a84db99fda9c9de58b1e02203e4b4aaa019e012e65d69b487fdf8719df72f488fa91506a80c49a33929f1fd50121022b78b756e2258af13779c1a1f37ea6800259716ca4b7f0b87610e0bf3ab52a01ffffffffdbb33bdf185b17f758af243c5d3c6e164cc873f6bb9f40c0677d6e0f8ee5afce010000009300483045022015bd0139bcccf990a6af6ec5c1c52ed8222e03a0d51c334df139968525d2fcd20221009f9efe325476eb64c3958e4713e9eefe49bf1d820ed58d2112721b134e2a1a5303483045022015bd0139bcccf990a6af6ec5c1c52ed8222e03a0d51c334df139968525d2fcd20221009f9efe325476eb64c3958e4713e9eefe49bf1d820ed58d2112721b134e2a1a5303ffffffff01a0860100000000001976a9149bc0bbdd3024da4d0c38ed1aecf5c68dd1d3fa1288ac00000000", "P2SH"],
+
+
["Make diffs cleaner by leaving a comment here without comma at the end"]
]
diff --git a/src/test/util_tests.cpp b/src/test/util_tests.cpp
index 3811569c0a..0e53a57593 100644
--- a/src/test/util_tests.cpp
+++ b/src/test/util_tests.cpp
@@ -108,13 +108,11 @@ BOOST_AUTO_TEST_CASE(util_HexStr)
BOOST_AUTO_TEST_CASE(util_DateTimeStrFormat)
{
-/*These are platform-dependant and thus removed to avoid useless test failures
BOOST_CHECK_EQUAL(DateTimeStrFormat("%Y-%m-%d %H:%M:%S", 0), "1970-01-01 00:00:00");
BOOST_CHECK_EQUAL(DateTimeStrFormat("%Y-%m-%d %H:%M:%S", 0x7FFFFFFF), "2038-01-19 03:14:07");
- // Formats used within Bitcoin
BOOST_CHECK_EQUAL(DateTimeStrFormat("%Y-%m-%d %H:%M:%S", 1317425777), "2011-09-30 23:36:17");
BOOST_CHECK_EQUAL(DateTimeStrFormat("%Y-%m-%d %H:%M", 1317425777), "2011-09-30 23:36");
-*/
+ BOOST_CHECK_EQUAL(DateTimeStrFormat("%a, %d %b %Y %H:%M:%S +0000", 1317425777), "Fri, 30 Sep 2011 23:36:17 +0000");
}
BOOST_AUTO_TEST_CASE(util_ParseParameters)
diff --git a/src/util.cpp b/src/util.cpp
index aa3adf89ec..336ef31725 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -14,6 +14,8 @@
#include <stdarg.h>
+#include <boost/date_time/posix_time/posix_time.hpp>
+
#ifndef WIN32
// for posix_fallocate
#ifdef __linux_
@@ -885,12 +887,6 @@ static std::string FormatException(std::exception* pex, const char* pszThread)
"UNKNOWN EXCEPTION \n%s in %s \n", pszModule, pszThread);
}
-void LogException(std::exception* pex, const char* pszThread)
-{
- std::string message = FormatException(pex, pszThread);
- LogPrintf("\n%s", message);
-}
-
void PrintExceptionContinue(std::exception* pex, const char* pszThread)
{
std::string message = FormatException(pex, pszThread);
@@ -1400,3 +1396,13 @@ void SetupEnvironment()
}
#endif
}
+
+std::string DateTimeStrFormat(const char* pszFormat, int64_t nTime)
+{
+ // std::locale takes ownership of the pointer
+ std::locale loc(std::locale::classic(), new boost::posix_time::time_facet(pszFormat));
+ std::stringstream ss;
+ ss.imbue(loc);
+ ss << boost::posix_time::from_time_t(nTime);
+ return ss.str();
+}
diff --git a/src/util.h b/src/util.h
index 97185073e0..ffcb20d822 100644
--- a/src/util.h
+++ b/src/util.h
@@ -151,8 +151,6 @@ static inline bool error(const char* format)
return false;
}
-
-void LogException(std::exception* pex, const char* pszThread);
void PrintExceptionContinue(std::exception* pex, const char* pszThread);
std::string FormatMoney(int64_t n, bool fPlus=false);
bool ParseMoney(const std::string& str, int64_t& nRet);
@@ -325,14 +323,7 @@ inline int64_t GetTimeMicros()
boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_microseconds();
}
-inline std::string DateTimeStrFormat(const char* pszFormat, int64_t nTime)
-{
- time_t n = nTime;
- struct tm* ptmTime = gmtime(&n);
- char pszTime[200];
- strftime(pszTime, sizeof(pszTime), pszFormat, ptmTime);
- return pszTime;
-}
+std::string DateTimeStrFormat(const char* pszFormat, int64_t nTime);
inline bool IsSwitchChar(char c)
{
diff --git a/src/wallet.cpp b/src/wallet.cpp
index fa7aecddb6..89604f96ac 100644
--- a/src/wallet.cpp
+++ b/src/wallet.cpp
@@ -1671,21 +1671,6 @@ void CWallet::ReserveKeyFromKeyPool(int64_t& nIndex, CKeyPool& keypool)
}
}
-int64_t CWallet::AddReserveKey(const CKeyPool& keypool)
-{
- {
- LOCK2(cs_main, cs_wallet);
- CWalletDB walletdb(strWalletFile);
-
- int64_t nIndex = 1 + *(--setKeyPool.end());
- if (!walletdb.WritePool(nIndex, keypool))
- throw runtime_error("AddReserveKey() : writing added key failed");
- setKeyPool.insert(nIndex);
- return nIndex;
- }
- return -1;
-}
-
void CWallet::KeepKey(int64_t nIndex)
{
// Remove from key pool
diff --git a/src/wallet.h b/src/wallet.h
index b2c06d3f61..96074151ad 100644
--- a/src/wallet.h
+++ b/src/wallet.h
@@ -263,7 +263,6 @@ public:
bool NewKeyPool();
bool TopUpKeyPool(unsigned int kpSize = 0);
- int64_t AddReserveKey(const CKeyPool& keypool);
void ReserveKeyFromKeyPool(int64_t& nIndex, CKeyPool& keypool);
void KeepKey(int64_t nIndex);
void ReturnKey(int64_t nIndex);
@@ -720,12 +719,12 @@ public:
std::string ToString() const
{
- return strprintf("COutput(%s, %d, %d) [%s]", tx->GetHash().ToString().c_str(), i, nDepth, FormatMoney(tx->vout[i].nValue).c_str());
+ return strprintf("COutput(%s, %d, %d) [%s]", tx->GetHash().ToString(), i, nDepth, FormatMoney(tx->vout[i].nValue).c_str());
}
void print() const
{
- LogPrintf("%s\n", ToString().c_str());
+ LogPrintf("%s\n", ToString());
}
};