diff options
55 files changed, 911 insertions, 799 deletions
@@ -49,8 +49,8 @@ Testing ------- Testing and code review is the bottleneck for development; we get more pull -requests than we can review and test. Please be patient and help out, and -remember this is a security-critical project where any mistake might cost people +requests than we can review and test on short notice. Please be patient and help out by testing +other people's pull requests, and remember this is a security-critical project where any mistake might cost people lots of money. ### Automated Testing @@ -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; @@ -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 f47c9ee825..8a05eb60d2 100644 --- a/src/main.h +++ b/src/main.h @@ -102,7 +102,6 @@ extern unsigned int nCoinCacheSize; static const uint64_t nMinDiskSpace = 52428800; -class CCoinsDB; class CBlockTreeDB; struct CDiskBlockPos; class CTxUndo; @@ -849,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. @@ -862,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. @@ -953,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/mruset.h b/src/mruset.h index c36a0c8f37..c1c08b0288 100644 --- a/src/mruset.h +++ b/src/mruset.h @@ -32,6 +32,7 @@ public: bool empty() const { return set.empty(); } iterator find(const key_type& k) const { return set.find(k); } size_type count(const key_type& k) const { return set.count(k); } + void clear() { set.clear(); queue.clear(); } bool inline friend operator==(const mruset<T>& a, const mruset<T>& b) { return a.set == b.set; } bool inline friend operator==(const mruset<T>& a, const std::set<T>& b) { return a.set == b; } bool inline friend operator<(const mruset<T>& a, const mruset<T>& b) { return a.set < b.set; } diff --git a/src/net.cpp b/src/net.cpp index 6bde1e7999..b0e6699ed2 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(); } } @@ -1458,13 +1455,13 @@ bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOu // for now, use a very simple selection metric: the node from which we received // most recently -double static NodeSyncScore(const CNode *pnode) { - return -pnode->nLastRecv; +static int64_t NodeSyncScore(const CNode *pnode) { + return pnode->nLastRecv; } void static StartSync(const vector<CNode*> &vNodes) { CNode *pnodeNewSync = NULL; - double dBestScore = 0; + int64_t nBestScore = 0; int nBestHeight = g_signals.GetHeight().get_value_or(0); @@ -1476,10 +1473,10 @@ void static StartSync(const vector<CNode*> &vNodes) { (pnode->nStartingHeight > (nBestHeight - 144)) && (pnode->nVersion < NOBLKS_VERSION_START || pnode->nVersion >= NOBLKS_VERSION_END)) { // if ok, compare node's score with the best so far - double dScore = NodeSyncScore(pnode); - if (pnodeNewSync == NULL || dScore > dBestScore) { + int64_t nScore = NodeSyncScore(pnode); + if (pnodeNewSync == NULL || nScore > nBestScore) { pnodeNewSync = pnode; - dBestScore = dScore; + nBestScore = nScore; } } } @@ -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) @@ -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())); @@ -255,7 +262,7 @@ public: // flood relay std::vector<CAddress> vAddrToSend; - std::set<CAddress> setAddrKnown; + mruset<CAddress> setAddrKnown; bool fGetAddr; std::set<uint256> setKnown; @@ -271,7 +278,7 @@ public: int64_t nPingUsecTime; bool fPingQueued; - CNode(SOCKET hSocketIn, CAddress addrIn, std::string addrNameIn = "", bool fInboundIn=false) : ssSend(SER_NETWORK, INIT_PROTO_VERSION) + CNode(SOCKET hSocketIn, CAddress addrIn, std::string addrNameIn = "", bool fInboundIn=false) : ssSend(SER_NETWORK, INIT_PROTO_VERSION), setAddrKnown(5000) { nServices = 0; hSocket = hSocketIn; @@ -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..23cfb1f158 100644 --- a/src/netbase.h +++ b/src/netbase.h @@ -17,6 +17,7 @@ #include <vector> extern int nConnectTimeout; +extern bool fNameLookup; #ifdef WIN32 // In MSVC, this is defined as a macro, undefine it to prevent a compile and link error @@ -33,9 +34,6 @@ enum Network NET_MAX, }; -extern int nConnectTimeout; -extern bool fNameLookup; - /** IP address (IPv6, or IPv4 using mapped IPv6 range (::FFFF:0:0/96)) */ class CNetAddr { @@ -173,11 +171,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..a0514035fd 100644 --- a/src/qt/locale/bitcoin_da.ts +++ b/src/qt/locale/bitcoin_da.ts @@ -3,11 +3,11 @@ <name>AboutDialog</name> <message> <source>About Bitcoin Core</source> - <translation type="unfinished"/> + <translation>Om Bitcoin Core</translation> </message> <message> <source><b>Bitcoin Core</b> version</source> - <translation type="unfinished"/> + <translation><b>Bitcoin Core</b> version</translation> </message> <message> <source> @@ -25,15 +25,15 @@ 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> - <translation type="unfinished"/> + <translation>Udviklerne af Bitcoin Core</translation> </message> <message> <source>(%1-bit)</source> - <translation type="unfinished"/> + <translation>(%1-bit)</translation> </message> </context> <context> @@ -48,7 +48,7 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open </message> <message> <source>&New</source> - <translation>&Ny</translation> + <translation>Ny</translation> </message> <message> <source>Copy the currently selected address to the system clipboard</source> @@ -56,11 +56,11 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open </message> <message> <source>&Copy</source> - <translation>&Kopiér</translation> + <translation>Kopiér</translation> </message> <message> <source>C&lose</source> - <translation type="unfinished"/> + <translation>Luk</translation> </message> <message> <source>&Copy Address</source> @@ -76,7 +76,7 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open </message> <message> <source>&Export</source> - <translation>Eksporter</translation> + <translation>Eksportér</translation> </message> <message> <source>&Delete</source> @@ -84,15 +84,15 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open </message> <message> <source>Choose the address to send coins to</source> - <translation type="unfinished"/> + <translation>Vælg adresse at sende bitcoins til</translation> </message> <message> <source>Choose the address to receive coins with</source> - <translation type="unfinished"/> + <translation>Vælg adresse at modtage bitcoins med</translation> </message> <message> <source>C&hoose</source> - <translation type="unfinished"/> + <translation>Vælg</translation> </message> <message> <source>Sending addresses</source> @@ -108,7 +108,7 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open </message> <message> <source>These are your Bitcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source> - <translation type="unfinished"/> + <translation>Dette er dine Bitcoin-adresser til at modtage betalinger med. Det anbefales are bruge en ny modtagelsesadresse for hver transaktion.</translation> </message> <message> <source>Copy &Label</source> @@ -120,7 +120,7 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open </message> <message> <source>Export Address List</source> - <translation type="unfinished"/> + <translation>Eksportér adresseliste</translation> </message> <message> <source>Comma separated file (*.csv)</source> @@ -128,11 +128,11 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open </message> <message> <source>Exporting Failed</source> - <translation type="unfinished"/> + <translation>Eksport mislykkedes</translation> </message> <message> <source>There was an error trying to save the address list to %1.</source> - <translation type="unfinished"/> + <translation>En fejl opstod under gemning af adresseliste til %1.</translation> </message> </context> <context> @@ -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> @@ -273,7 +273,7 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open </message> <message> <source>Node</source> - <translation type="unfinished"/> + <translation>Knude</translation> </message> <message> <source>Show general overview of wallet</source> @@ -325,23 +325,23 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open </message> <message> <source>&Sending addresses...</source> - <translation>&Afsendelsesadresser...</translation> + <translation>Afsendelsesadresser …</translation> </message> <message> <source>&Receiving addresses...</source> - <translation>&Modtagelsesadresser...</translation> + <translation>Modtagelsesadresser …</translation> </message> <message> <source>Open &URI...</source> - <translation type="unfinished"/> + <translation>Åbn URI …</translation> </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>&File</source> @@ -433,31 +433,31 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open </message> <message> <source>Request payments (generates QR codes and bitcoin: URIs)</source> - <translation type="unfinished"/> + <translation>Forespørg betalinger (genererer QR-koder og "bitcoin:"-URI'er)</translation> </message> <message> <source>&About Bitcoin Core</source> - <translation type="unfinished"/> + <translation>Om Bitcoin Core</translation> </message> <message> <source>Show the list of used sending addresses and labels</source> - <translation type="unfinished"/> + <translation>Vis listen over brugte afsendelsesadresser og -mærkater</translation> </message> <message> <source>Show the list of used receiving addresses and labels</source> - <translation type="unfinished"/> + <translation>Vis listen over brugte modtagelsesadresser og -mærkater</translation> </message> <message> <source>Open a bitcoin: URI or payment request</source> - <translation type="unfinished"/> + <translation>Åbn en "bitcoin:"-URI eller betalingsforespørgsel</translation> </message> <message> <source>&Command-line options</source> - <translation type="unfinished"/> + <translation>Tilvalg for kommandolinje</translation> </message> <message> <source>Show the Bitcoin Core help message to get a list with possible Bitcoin command-line options</source> - <translation type="unfinished"/> + <translation>Vis Bitcoin Core hjælpebesked for at få en liste over mulige tilvalg for Bitcoin kommandolinje</translation> </message> <message> <source>Bitcoin client</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> @@ -493,11 +493,11 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open </message> <message> <source>%1 and %2</source> - <translation type="unfinished"/> + <translation>%1 og %2</translation> </message> <message numerus="yes"> <source>%n year(s)</source> - <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> + <translation><numerusform>%n år</numerusform><numerusform>%n år</numerusform></translation> </message> <message> <source>%1 behind</source> @@ -575,15 +575,15 @@ Adresse: %4 <name>CoinControlDialog</name> <message> <source>Coin Control Address Selection</source> - <translation type="unfinished"/> + <translation>Adressevalg for coin-styring</translation> </message> <message> <source>Quantity:</source> - <translation type="unfinished"/> + <translation>Mængde:</translation> </message> <message> <source>Bytes:</source> - <translation type="unfinished"/> + <translation>Byte:</translation> </message> <message> <source>Amount:</source> @@ -591,35 +591,35 @@ Adresse: %4 </message> <message> <source>Priority:</source> - <translation type="unfinished"/> + <translation>Prioritet:</translation> </message> <message> <source>Fee:</source> - <translation type="unfinished"/> + <translation>Gebyr:</translation> </message> <message> <source>Low Output:</source> - <translation type="unfinished"/> + <translation>Lavt output:</translation> </message> <message> <source>After Fee:</source> - <translation type="unfinished"/> + <translation>Efter gebyr:</translation> </message> <message> <source>Change:</source> - <translation type="unfinished"/> + <translation>Byttepenge:</translation> </message> <message> <source>(un)select all</source> - <translation type="unfinished"/> + <translation>(af)vælg alle</translation> </message> <message> <source>Tree mode</source> - <translation type="unfinished"/> + <translation>Trætilstand</translation> </message> <message> <source>List mode</source> - <translation type="unfinished"/> + <translation>Listetilstand</translation> </message> <message> <source>Amount</source> @@ -635,7 +635,7 @@ Adresse: %4 </message> <message> <source>Confirmations</source> - <translation type="unfinished"/> + <translation>Bekræftelser</translation> </message> <message> <source>Confirmed</source> @@ -643,151 +643,151 @@ Adresse: %4 </message> <message> <source>Priority</source> - <translation type="unfinished"/> + <translation>Prioritet</translation> </message> <message> <source>Copy address</source> - <translation>Kopier adresse</translation> + <translation>Kopiér adresse</translation> </message> <message> <source>Copy label</source> - <translation>Kopier mærkat</translation> + <translation>Kopiér mærkat</translation> </message> <message> <source>Copy amount</source> - <translation>Kopier beløb</translation> + <translation>Kopiér beløb</translation> </message> <message> <source>Copy transaction ID</source> - <translation>Kopier transaktionens ID</translation> + <translation>Kopiér transaktions-ID</translation> </message> <message> <source>Lock unspent</source> - <translation type="unfinished"/> + <translation>Fastlås ubrugte</translation> </message> <message> <source>Unlock unspent</source> - <translation type="unfinished"/> + <translation>Lås ubrugte op</translation> </message> <message> <source>Copy quantity</source> - <translation type="unfinished"/> + <translation>Kopiér mængde</translation> </message> <message> <source>Copy fee</source> - <translation type="unfinished"/> + <translation>Kopiér gebyr</translation> </message> <message> <source>Copy after fee</source> - <translation type="unfinished"/> + <translation>Kopiér efter-gebyr</translation> </message> <message> <source>Copy bytes</source> - <translation type="unfinished"/> + <translation>Kopiér byte</translation> </message> <message> <source>Copy priority</source> - <translation type="unfinished"/> + <translation>Kopiér prioritet</translation> </message> <message> <source>Copy low output</source> - <translation type="unfinished"/> + <translation>Kopiér lavt output</translation> </message> <message> <source>Copy change</source> - <translation type="unfinished"/> + <translation>Kopiér byttepenge</translation> </message> <message> <source>highest</source> - <translation type="unfinished"/> + <translation>højest</translation> </message> <message> <source>higher</source> - <translation type="unfinished"/> + <translation>højere</translation> </message> <message> <source>high</source> - <translation type="unfinished"/> + <translation>højt</translation> </message> <message> <source>medium-high</source> - <translation type="unfinished"/> + <translation>mellemhøj</translation> </message> <message> <source>medium</source> - <translation type="unfinished"/> + <translation>medium</translation> </message> <message> <source>low-medium</source> - <translation type="unfinished"/> + <translation>mellemlav</translation> </message> <message> <source>low</source> - <translation type="unfinished"/> + <translation>lav</translation> </message> <message> <source>lower</source> - <translation type="unfinished"/> + <translation>lavere</translation> </message> <message> <source>lowest</source> - <translation type="unfinished"/> + <translation>lavest</translation> </message> <message> <source>(%1 locked)</source> - <translation type="unfinished"/> + <translation>(%1 fastlåst)</translation> </message> <message> <source>none</source> - <translation type="unfinished"/> + <translation>ingen</translation> </message> <message> <source>Dust</source> - <translation type="unfinished"/> + <translation>Støv</translation> </message> <message> <source>yes</source> - <translation type="unfinished"/> + <translation>ja</translation> </message> <message> <source>no</source> - <translation type="unfinished"/> + <translation>nej</translation> </message> <message> <source>This label turns red, if the transaction size is greater than 1000 bytes.</source> - <translation type="unfinished"/> + <translation>Dette mærkat bliver rødt, hvis transaktionsstørrelsen er større end 1000 byte.</translation> </message> <message> <source>This means a fee of at least %1 per kB is required.</source> - <translation type="unfinished"/> + <translation>Dette betyder, at et gebyr på mindst %1 pr. kB er nødvendigt.</translation> </message> <message> <source>Can vary +/- 1 byte per input.</source> - <translation type="unfinished"/> + <translation>Kan variere ±1 byte pr. input.</translation> </message> <message> <source>Transactions with higher priority are more likely to get included into a block.</source> - <translation type="unfinished"/> + <translation>Transaktioner med højere prioritet har højere sansynlighed for at blive inkluderet i en blok.</translation> </message> <message> <source>This label turns red, if the priority is smaller than "medium".</source> - <translation type="unfinished"/> + <translation>Dette mærkat bliver rødt, hvis prioriteten er mindre end "medium".</translation> </message> <message> <source>This label turns red, if any recipient receives an amount smaller than %1.</source> - <translation type="unfinished"/> + <translation>Dette mærkat bliver rødt, hvis mindst én modtager et beløb mindre end %1.</translation> </message> <message> <source>This means a fee of at least %1 is required.</source> - <translation type="unfinished"/> + <translation>Dette betyder, at et gebyr på mindst %1 er nødvendigt.</translation> </message> <message> <source>Amounts below 0.546 times the minimum relay fee are shown as dust.</source> - <translation type="unfinished"/> + <translation>Beløb under 0,546 gange det minimale videreførselsgebyr vises som støv.</translation> </message> <message> <source>This label turns red, if the change is smaller than %1.</source> - <translation type="unfinished"/> + <translation>Dette mærkat bliver rødt, hvis byttepengene er mindre end %1.</translation> </message> <message> <source>(no label)</source> @@ -795,11 +795,11 @@ Adresse: %4 </message> <message> <source>change from %1 (%2)</source> - <translation type="unfinished"/> + <translation>byttepenge fra %1 (%2)</translation> </message> <message> <source>(change)</source> - <translation type="unfinished"/> + <translation>(byttepange)</translation> </message> </context> <context> @@ -814,11 +814,11 @@ Adresse: %4 </message> <message> <source>The label associated with this address list entry</source> - <translation type="unfinished"/> + <translation>Mærkatet, der er associeret med denne indgang i adresselisten</translation> </message> <message> <source>The address associated with this address list entry. This can only be modified for sending addresses.</source> - <translation type="unfinished"/> + <translation>Adressen, der er associeret med denne indgang i adresselisten. Denne kan kune ændres for afsendelsesadresser.</translation> </message> <message> <source>&Address</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,22 +869,22 @@ 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> <name>HelpMessageDialog</name> <message> <source>Bitcoin Core - Command-line options</source> - <translation type="unfinished"/> + <translation>Bitcoin Core – tilvalg for kommandolinje</translation> </message> <message> <source>Bitcoin Core</source> @@ -908,7 +908,7 @@ Adresse: %4 </message> <message> <source>Set language, for example "de_DE" (default: system locale)</source> - <translation>Angiv sprog, f.eks "de_DE" (standard: systemlokalitet)</translation> + <translation>Angiv sprog, fx "da_DK" (standard: systemlokalitet)</translation> </message> <message> <source>Start minimized</source> @@ -916,15 +916,15 @@ Adresse: %4 </message> <message> <source>Set SSL root certificates for payment request (default: -system-)</source> - <translation type="unfinished"/> + <translation>Sæt SSL-rodcertifikater for betalingsforespørgsel (standard: -system-)</translation> </message> <message> <source>Show splash screen on startup (default: 1)</source> - <translation>Vis opstartsbillede ved start (standard: 1)</translation> + <translation>Vis opstartsbillede ved opstart (standard: 1)</translation> </message> <message> <source>Choose data directory on startup (default: 0)</source> - <translation type="unfinished"/> + <translation>Vælg datamappe ved opstart (standard: 0)</translation> </message> </context> <context> @@ -935,23 +935,23 @@ Adresse: %4 </message> <message> <source>Welcome to Bitcoin Core.</source> - <translation type="unfinished"/> + <translation>Velkommen til Bitcoin Core.</translation> </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>Siden dette er første gang, programmet startes, kan du vælge, hvor Bitcoin Core skal gemme sin data.</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>Bitcoin Core vil downloade og gemme et kopi af Bitcoin-blokkæden. Mindst %1 GB data vil blive gemt i denne mappe, og den vil vokse over tid. Tegnebogen vil også blive gemt i denne mappe.</translation> </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> @@ -959,7 +959,7 @@ Adresse: %4 </message> <message> <source>Error: Specified data directory "%1" can not be created.</source> - <translation type="unfinished"/> + <translation>Fejl: Angivet datamappe "%1" kan ikke oprettes.</translation> </message> <message> <source>Error</source> @@ -967,34 +967,34 @@ 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> <name>OpenURIDialog</name> <message> <source>Open URI</source> - <translation type="unfinished"/> + <translation>Åbn URI</translation> </message> <message> <source>Open payment request from URI or file</source> - <translation type="unfinished"/> + <translation>Åbn betalingsforespørgsel fra URI eller fil</translation> </message> <message> <source>URI:</source> - <translation type="unfinished"/> + <translation>URI:</translation> </message> <message> <source>Select payment request file</source> - <translation type="unfinished"/> + <translation>Vælg fil for betalingsforespørgsel</translation> </message> <message> <source>Select payment request file to open</source> - <translation type="unfinished"/> + <translation>Vælg fil for betalingsforespørgsel til åbning</translation> </message> </context> <context> @@ -1025,39 +1025,39 @@ Adresse: %4 </message> <message> <source>Size of &database cache</source> - <translation type="unfinished"/> + <translation>Størrelsen på databasens cache</translation> </message> <message> <source>MB</source> - <translation type="unfinished"/> + <translation>MB</translation> </message> <message> <source>Number of script &verification threads</source> - <translation type="unfinished"/> + <translation>Antallet af scriptverificeringstråde</translation> </message> <message> <source>Connect to the Bitcoin network through a SOCKS proxy.</source> - <translation type="unfinished"/> + <translation>Forbind til Bitcoin-netværket gennem en SOCKS-proxy.</translation> </message> <message> <source>&Connect through SOCKS proxy (default proxy):</source> - <translation type="unfinished"/> + <translation>Forbind gennem SOCKS-proxy (standard-proxy):</translation> </message> <message> <source>IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1)</source> - <translation type="unfinished"/> + <translation>IP-adresse for proxyen (fx IPv4: 127.0.0.1 / IPv6: ::1)</translation> </message> <message> <source>Third party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |.</source> - <translation type="unfinished"/> + <translation>Tredjeparts-URL'er (fx et blokhåndteringsværktøj), der vises i transaktionsfanen som genvejsmenupunkter. %s i URL'en erstattes med transaktionens hash. Flere URL'er separeres med en lodret streg |.</translation> </message> <message> <source>Third party transaction URLs</source> - <translation type="unfinished"/> + <translation>Tredjeparts-transaktions-URL'er</translation> </message> <message> <source>Active command-line options that override above options:</source> - <translation type="unfinished"/> + <translation>Aktuelle tilvalg for kommandolinjen, der tilsidesætter ovenstående tilvalg:</translation> </message> <message> <source>Reset all client options to default.</source> @@ -1073,27 +1073,27 @@ Adresse: %4 </message> <message> <source>(0 = auto, <0 = leave that many cores free)</source> - <translation type="unfinished"/> + <translation>(0 = auto, <0 = efterlad så mange kerner fri)</translation> </message> <message> <source>W&allet</source> - <translation type="unfinished"/> + <translation>Tegnebog</translation> </message> <message> <source>Expert</source> - <translation type="unfinished"/> + <translation>Ekspert</translation> </message> <message> <source>Enable coin &control features</source> - <translation type="unfinished"/> + <translation>Slå egenskaber for coin-styring til</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> - <translation type="unfinished"/> + <translation>Hvis du slår brug af ubekræftede byttepenge fra, kan byttepengene fra en transaktion ikke bruges, før pågældende transaktion har mindst én bekræftelse. Dette påvirker også måden hvorpå din saldo beregnes.</translation> </message> <message> <source>&Spend unconfirmed change</source> - <translation type="unfinished"/> + <translation>Brug ubekræftede byttepenge</translation> </message> <message> <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> @@ -1133,15 +1133,15 @@ Adresse: %4 </message> <message> <source>&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&inimize on close</source> - <translation>Minimer ved lukning</translation> + <translation>Minimér ved lukning</translation> </message> <message> <source>&Display</source> @@ -1149,11 +1149,11 @@ Adresse: %4 </message> <message> <source>User Interface &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>&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> @@ -1173,7 +1173,7 @@ Adresse: %4 </message> <message> <source>Whether to show coin control features or not.</source> - <translation type="unfinished"/> + <translation>Hvorvidt egenskaber for coin-styring skal vises eller ej.</translation> </message> <message> <source>&OK</source> @@ -1181,7 +1181,7 @@ Adresse: %4 </message> <message> <source>&Cancel</source> - <translation>Annuller</translation> + <translation>Annullér</translation> </message> <message> <source>default</source> @@ -1189,7 +1189,7 @@ Adresse: %4 </message> <message> <source>none</source> - <translation type="unfinished"/> + <translation>ingeningen</translation> </message> <message> <source>Confirm options reset</source> @@ -1197,19 +1197,19 @@ Adresse: %4 </message> <message> <source>Client restart required to activate changes.</source> - <translation type="unfinished"/> + <translation>Genstart af klienten er nødvendig for at aktivere ændringer.</translation> </message> <message> <source>Client will be shutdown, do you want to proceed?</source> - <translation type="unfinished"/> + <translation>Klienten vil blive lukket ned; vil du fortsætte?</translation> </message> <message> <source>This change would require a client restart.</source> - <translation type="unfinished"/> + <translation>Denne ændring vil kræve en genstart af klienten.</translation> </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> @@ -1228,7 +1228,7 @@ Adresse: %4 </message> <message> <source>Available:</source> - <translation type="unfinished"/> + <translation>Tilgængelig:</translation> </message> <message> <source>Your current spendable balance</source> @@ -1236,11 +1236,11 @@ Adresse: %4 </message> <message> <source>Pending:</source> - <translation type="unfinished"/> + <translation>Uafgjort:</translation> </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> @@ -1279,11 +1279,11 @@ Adresse: %4 </message> <message> <source>Requested payment amount of %1 is too small (considered dust).</source> - <translation type="unfinished"/> + <translation>Forespurgt betalingsbeløb på %1 er for lille (regnes som støv).</translation> </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> @@ -1291,27 +1291,27 @@ Adresse: %4 </message> <message> <source>Net manager warning</source> - <translation type="unfinished"/> + <translation>Net-håndterings-advarsel</translation> </message> <message> <source>Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy.</source> - <translation type="unfinished"/> + <translation>Din aktuelle proxy understøtter ikke SOCKS5, hvilket kræves for betalingsforespørgsler via proxy.</translation> </message> <message> <source>Payment request fetch URL is invalid: %1</source> - <translation type="unfinished"/> + <translation>Betalingsforespørgslens hentnings-URL er ugyldig: %1</translation> </message> <message> <source>Payment request file handling</source> - <translation type="unfinished"/> + <translation>Filhåndtering for betalingsanmodninger</translation> </message> <message> <source>Payment request file can not be read or processed! This can be caused by an invalid payment request file.</source> - <translation type="unfinished"/> + <translation>Betalingsanmodningsfil kan ikke indlæses eller bearbejdes! Dette kan skyldes en ugyldig betalingsanmodningsfil.</translation> </message> <message> <source>Unverified payment requests to custom payment scripts are unsupported.</source> - <translation type="unfinished"/> + <translation>Ikke-verificerede betalingsforespørgsler for tilpassede betalings-scripts understøttes ikke.</translation> </message> <message> <source>Refund from %1</source> @@ -1319,23 +1319,23 @@ Adresse: %4 </message> <message> <source>Error communicating with %1: %2</source> - <translation type="unfinished"/> + <translation>Fejl under kommunikation med %1: %2</translation> </message> <message> <source>Payment request can not be parsed or processed!</source> - <translation type="unfinished"/> + <translation>Betalingsanmodning kan ikke fortolkes eller bearbejdes!</translation> </message> <message> <source>Bad response from server %1</source> - <translation type="unfinished"/> + <translation>Fejlagtigt svar fra server %1</translation> </message> <message> <source>Payment acknowledged</source> - <translation type="unfinished"/> + <translation>Betaling anerkendt</translation> </message> <message> <source>Network request error</source> - <translation type="unfinished"/> + <translation>Fejl i netværksforespørgsel</translation> </message> </context> <context> @@ -1346,34 +1346,34 @@ Adresse: %4 </message> <message> <source>Error: Specified data directory "%1" does not exist.</source> - <translation type="unfinished"/> + <translation>Fejl: Angivet datamappe "%1" eksisterer ikke.</translation> </message> <message> <source>Error: Cannot parse configuration file: %1. Only use key=value syntax.</source> - <translation type="unfinished"/> + <translation>Fejl: Kan ikke fortolke konfigurationsfil: %1. Brug kun syntaksen nøgle=værdi.</translation> </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't yet exit safely...</source> - <translation type="unfinished"/> + <translation>Bitcoin Core blev ikke afsluttet på sikker vis …</translation> </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> <name>QRImageWidget</name> <message> <source>&Save Image...</source> - <translation>&Gem foto...</translation> + <translation>Gem billede …</translation> </message> <message> <source>&Copy Image</source> - <translation>&Kopiér foto</translation> + <translation>Kopiér foto</translation> </message> <message> <source>Save QR Code</source> @@ -1381,7 +1381,7 @@ Adresse: %4 </message> <message> <source>PNG Image (*.png)</source> - <translation type="unfinished"/> + <translation>PNG-billede (*.png)</translation> </message> </context> <context> @@ -1404,11 +1404,11 @@ Adresse: %4 </message> <message> <source>Debug window</source> - <translation type="unfinished"/> + <translation>Fejlsøgningsvindue</translation> </message> <message> <source>General</source> - <translation type="unfinished"/> + <translation>Generelt</translation> </message> <message> <source>Using OpenSSL version</source> @@ -1456,23 +1456,23 @@ Adresse: %4 </message> <message> <source>&Network Traffic</source> - <translation type="unfinished"/> + <translation>Netværkstrafik</translation> </message> <message> <source>&Clear</source> - <translation type="unfinished"/> + <translation>Ryd</translation> </message> <message> <source>Totals</source> - <translation type="unfinished"/> + <translation>Totaler</translation> </message> <message> <source>In:</source> - <translation type="unfinished"/> + <translation>Indkommende:</translation> </message> <message> <source>Out:</source> - <translation>Ud:</translation> + <translation>Udgående:</translation> </message> <message> <source>Build date</source> @@ -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> @@ -1535,7 +1535,7 @@ Adresse: %4 <name>ReceiveCoinsDialog</name> <message> <source>&Amount:</source> - <translation>&Mængde:</translation> + <translation>Beløb:</translation> </message> <message> <source>&Label:</source> @@ -1543,35 +1543,35 @@ Adresse: %4 </message> <message> <source>&Message:</source> - <translation>&Besked:</translation> + <translation>Besked:</translation> </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>Genbrug en af de tidligere brugte modtagelsesadresser. Genbrug af adresser har indflydelse på sikkerhed og privatliv. Brug ikke dette med mindre du genskaber en betalingsforespørgsel fra tidligere.</translation> </message> <message> <source>R&euse an existing receiving address (not recommended)</source> - <translation type="unfinished"/> + <translation>Genbrug en eksisterende modtagelsesadresse (anbefales ikke)</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> - <translation type="unfinished"/> + <translation>En valgfri besked, der føjes til betalingsanmodningen, og som vil vises, når anmodningen åbnes. Bemærk: Beskeden vil ikke sendes med betalingen over Bitcoin-netværket.</translation> </message> <message> <source>An optional label to associate with the new receiving address.</source> - <translation type="unfinished"/> + <translation>Et valgfrit mærkat, der associeres med den nye modtagelsesadresse.</translation> </message> <message> <source>Use this form to request payments. All fields are <b>optional</b>.</source> - <translation type="unfinished"/> + <translation>Brug denne formular for at anmode om betalinger. Alle felter er <b>valgfri</b>.</translation> </message> <message> <source>An optional amount to request. Leave this empty or zero to not request a specific amount.</source> - <translation type="unfinished"/> + <translation>Et valgfrit beløb til anmodning. Lad dette felt være tomt eller indeholde nul for at anmode om et ikke-specifikt beløb.</translation> </message> <message> <source>Clear all fields of the form.</source> - <translation>Ryd alle fælter af formen.</translation> + <translation>Ryd alle felter af formen.</translation> </message> <message> <source>Clear</source> @@ -1579,35 +1579,35 @@ Adresse: %4 </message> <message> <source>Requested payments history</source> - <translation type="unfinished"/> + <translation>Historik over betalingsanmodninger</translation> </message> <message> <source>&Request payment</source> - <translation>&Anmod betaling</translation> + <translation>Anmod om betaling</translation> </message> <message> <source>Show the selected request (does the same as double clicking an entry)</source> - <translation type="unfinished"/> + <translation>Vis den valgte forespørgsel (gør det samme som dobbeltklik på en indgang)</translation> </message> <message> <source>Show</source> - <translation type="unfinished"/> + <translation>Vis</translation> </message> <message> <source>Remove the selected entries from the list</source> - <translation type="unfinished"/> + <translation>Fjern de valgte indgange fra listen</translation> </message> <message> <source>Remove</source> - <translation type="unfinished"/> + <translation>Fjern</translation> </message> <message> <source>Copy label</source> - <translation>Kopier mærkat</translation> + <translation>Kopiér mærkat</translation> </message> <message> <source>Copy message</source> - <translation type="unfinished"/> + <translation>Kopiér besked</translation> </message> <message> <source>Copy amount</source> @@ -1618,23 +1618,23 @@ Adresse: %4 <name>ReceiveRequestDialog</name> <message> <source>QR Code</source> - <translation>QR Kode</translation> + <translation>QR-kode</translation> </message> <message> <source>Copy &URI</source> - <translation>Kopiér &URL</translation> + <translation>Kopiér URI</translation> </message> <message> <source>Copy &Address</source> - <translation>Kopiér &Adresse</translation> + <translation>Kopiér adresse</translation> </message> <message> <source>&Save Image...</source> - <translation>&Gem foto...</translation> + <translation>Gem billede …</translation> </message> <message> <source>Request payment to %1</source> - <translation type="unfinished"/> + <translation>Anmod om betaling til %1</translation> </message> <message> <source>Payment information</source> @@ -1666,7 +1666,7 @@ Adresse: %4 </message> <message> <source>Error encoding URI into QR Code.</source> - <translation>Fejl ved kodning fra URI til QR-kode</translation> + <translation>Fejl ved kodning fra URI til QR-kode.</translation> </message> </context> <context> @@ -1693,11 +1693,11 @@ Adresse: %4 </message> <message> <source>(no message)</source> - <translation type="unfinished"/> + <translation>(ingen besked)</translation> </message> <message> <source>(no amount)</source> - <translation type="unfinished"/> + <translation>(intet beløb)</translation> </message> </context> <context> @@ -1708,27 +1708,27 @@ Adresse: %4 </message> <message> <source>Coin Control Features</source> - <translation type="unfinished"/> + <translation>Egenskaber for coin-styring</translation> </message> <message> <source>Inputs...</source> - <translation type="unfinished"/> + <translation>Inputs …</translation> </message> <message> <source>automatically selected</source> - <translation type="unfinished"/> + <translation>valgt automatisk</translation> </message> <message> <source>Insufficient funds!</source> - <translation type="unfinished"/> + <translation>Utilstrækkelige midler!</translation> </message> <message> <source>Quantity:</source> - <translation type="unfinished"/> + <translation>Mængde:</translation> </message> <message> <source>Bytes:</source> - <translation type="unfinished"/> + <translation>Byte:</translation> </message> <message> <source>Amount:</source> @@ -1736,31 +1736,31 @@ Adresse: %4 </message> <message> <source>Priority:</source> - <translation type="unfinished"/> + <translation>Prioritet:</translation> </message> <message> <source>Fee:</source> - <translation type="unfinished"/> + <translation>Gebyr:</translation> </message> <message> <source>Low Output:</source> - <translation type="unfinished"/> + <translation>Lavt output:</translation> </message> <message> <source>After Fee:</source> - <translation type="unfinished"/> + <translation>Efter gebyr:</translation> </message> <message> <source>Change:</source> - <translation type="unfinished"/> + <translation>Byttepenge:</translation> </message> <message> <source>If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address.</source> - <translation type="unfinished"/> + <translation>Hvis dette aktiveres, men byttepengeadressen er tom eller ugyldig, vil byttepenge blive sendt til en nygenereret adresse.</translation> </message> <message> <source>Custom change address</source> - <translation type="unfinished"/> + <translation>Tilpasset byttepengeadresse</translation> </message> <message> <source>Send to multiple recipients at once</source> @@ -1772,7 +1772,7 @@ Adresse: %4 </message> <message> <source>Clear all fields of the form.</source> - <translation>Ryd alle fælter af formen.</translation> + <translation>Ryd alle felter af formen.</translation> </message> <message> <source>Clear &All</source> @@ -1796,11 +1796,11 @@ Adresse: %4 </message> <message> <source>%1 to %2</source> - <translation type="unfinished"/> + <translation>%1 til %2</translation> </message> <message> <source>Copy quantity</source> - <translation type="unfinished"/> + <translation>Kopiér mængde</translation> </message> <message> <source>Copy amount</source> @@ -1808,35 +1808,35 @@ Adresse: %4 </message> <message> <source>Copy fee</source> - <translation type="unfinished"/> + <translation>Kopiér gebyr</translation> </message> <message> <source>Copy after fee</source> - <translation type="unfinished"/> + <translation>Kopiér efter-gebyr</translation> </message> <message> <source>Copy bytes</source> - <translation type="unfinished"/> + <translation>Kopiér byte</translation> </message> <message> <source>Copy priority</source> - <translation type="unfinished"/> + <translation>Kopiér prioritet</translation> </message> <message> <source>Copy low output</source> - <translation type="unfinished"/> + <translation>Kopiér lavt output</translation> </message> <message> <source>Copy change</source> - <translation type="unfinished"/> + <translation>Kopiér byttepenge</translation> </message> <message> <source>Total Amount %1 (= %2)</source> - <translation type="unfinished"/> + <translation>Totalbeløb %1 (= %2)</translation> </message> <message> <source>or</source> - <translation type="unfinished"/> + <translation>eller</translation> </message> <message> <source>The recipient address is not valid, please recheck.</source> @@ -1860,15 +1860,15 @@ Adresse: %4 </message> <message> <source>Transaction creation failed!</source> - <translation type="unfinished"/> + <translation>Oprettelse af transaktion mislykkedes!</translation> </message> <message> <source>The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> - <translation type="unfinished"/> + <translation>Transaktionen blev afvist! Dette kan ske, hvis nogle af dine bitcoins i din tegnebog allerede er brugt, som hvis du brugte en kopi af wallet.dat og dine bitcoins er blevet brugt i kopien, men ikke er markeret som brugt her.</translation> </message> <message> <source>Warning: Invalid Bitcoin address</source> - <translation type="unfinished"/> + <translation>Advarsel: Ugyldig Bitcoin-adresse</translation> </message> <message> <source>(no label)</source> @@ -1876,11 +1876,11 @@ Adresse: %4 </message> <message> <source>Warning: Unknown change address</source> - <translation type="unfinished"/> + <translation>Advarsel: Ukendt byttepengeadresse</translation> </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,11 +1888,11 @@ 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> - <translation type="unfinished"/> + <translation>Ugyldig betalingsadresse %1</translation> </message> </context> <context> @@ -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> @@ -1919,11 +1919,11 @@ Adresse: %4 </message> <message> <source>Choose previously used address</source> - <translation type="unfinished"/> + <translation>Vælg tidligere brugt adresse</translation> </message> <message> <source>This is a normal payment.</source> - <translation type="unfinished"/> + <translation>Dette er en normal betaling.</translation> </message> <message> <source>Alt+A</source> @@ -1939,7 +1939,7 @@ Adresse: %4 </message> <message> <source>Remove this entry</source> - <translation type="unfinished"/> + <translation>Fjern denne indgang</translation> </message> <message> <source>Message:</source> @@ -1947,38 +1947,38 @@ Adresse: %4 </message> <message> <source>This is a verified payment request.</source> - <translation type="unfinished"/> + <translation>Dette er en verificeret betalingsforespørgsel.</translation> </message> <message> <source>Enter a label for this address to add it to the list of used addresses</source> - <translation type="unfinished"/> + <translation>Indtast et mærkat for denne adresse for at føje den til listen over brugte adresser</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> - <translation type="unfinished"/> + <translation>En besked, som blev føjet til "bitcon:"-URI'en, som vil gemmes med transaktionen til din reference. Bemærk: Denne besked vil ikke blive sendt over Bitcoin-netværket.</translation> </message> <message> <source>This is an unverified payment request.</source> - <translation type="unfinished"/> + <translation>Dette er en ikke-verificeret betalingsforespørgsel.</translation> </message> <message> <source>Pay To:</source> - <translation type="unfinished"/> + <translation>Betal til:</translation> </message> <message> <source>Memo:</source> - <translation type="unfinished"/> + <translation>Memo:</translation> </message> </context> <context> <name>ShutdownWindow</name> <message> <source>Bitcoin Core is shutting down...</source> - <translation type="unfinished"/> + <translation>Bitcoin Core lukker ned …</translation> </message> <message> <source>Do not shut down the computer until this window disappears.</source> - <translation type="unfinished"/> + <translation>Luk ikke computeren ned, før dette vindue forsvinder.</translation> </message> </context> <context> @@ -1997,11 +1997,11 @@ 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> - <translation type="unfinished"/> + <translation>Vælg tidligere brugt adresse</translation> </message> <message> <source>Alt+A</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 "Sign Message" 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> @@ -2132,11 +2132,11 @@ Adresse: %4 </message> <message> <source>The Bitcoin Core developers</source> - <translation type="unfinished"/> + <translation>Udviklerne af Bitcoin Core</translation> </message> <message> <source>[testnet]</source> - <translation>[testnet]</translation> + <translation>[testnetværk]</translation> </message> </context> <context> @@ -2154,7 +2154,7 @@ Adresse: %4 </message> <message> <source>conflicted</source> - <translation type="unfinished"/> + <translation>konflikt</translation> </message> <message> <source>%1/offline</source> @@ -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,15 +2238,15 @@ Adresse: %4 </message> <message> <source>Transaction ID</source> - <translation>Transaktionens ID</translation> + <translation>Transaktions-ID</translation> </message> <message> <source>Merchant</source> - <translation type="unfinished"/> + <translation>Forretningsdrivende</translation> </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 "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> - <translation type="unfinished"/> + <translation>Udvundne bitcoins skal modne %1 blokke, før de kan bruges. Da du genererede denne blok, blev den udsendt til netværket for at blive føjet til blokkæden. Hvis det ikke lykkes at få den i kæden, vil dens tilstand ændres til "ikke accepteret", og den vil ikke kunne bruges. Dette kan ske nu og da, hvis en anden knude udvinder en blok inden for nogle få sekunder fra din.</translation> </message> <message> <source>Debug information</source> @@ -2316,7 +2316,7 @@ Adresse: %4 </message> <message> <source>Immature (%1 confirmations, will be available after %2)</source> - <translation type="unfinished"/> + <translation>Umoden (%1 bekræftelser; vil være tilgængelig efter %2)</translation> </message> <message numerus="yes"> <source>Open for %n more block(s)</source> @@ -2340,19 +2340,19 @@ Adresse: %4 </message> <message> <source>Offline</source> - <translation type="unfinished"/> + <translation>Offline</translation> </message> <message> <source>Unconfirmed</source> - <translation type="unfinished"/> + <translation>Ubekræftet</translation> </message> <message> <source>Confirming (%1 of %2 recommended confirmations)</source> - <translation type="unfinished"/> + <translation>Bekræfter (%1 af %2 anbefalede bekræftelser)</translation> </message> <message> <source>Conflicted</source> - <translation type="unfinished"/> + <translation>Konflikt</translation> </message> <message> <source>Received with</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> @@ -2483,23 +2483,23 @@ Adresse: %4 </message> <message> <source>Export Transaction History</source> - <translation type="unfinished"/> + <translation>Historik for eksport af transaktioner</translation> </message> <message> <source>Exporting Failed</source> - <translation type="unfinished"/> + <translation>Eksport mislykkedes</translation> </message> <message> <source>There was an error trying to save the transaction history to %1.</source> - <translation type="unfinished"/> + <translation>En fejl opstod under gemning af transaktionshistorik til %1.</translation> </message> <message> <source>Exporting Successful</source> - <translation type="unfinished"/> + <translation>Eksport problemfri</translation> </message> <message> <source>The transaction history was successfully saved to %1.</source> - <translation type="unfinished"/> + <translation>Transaktionshistorikken blev gemt til %1 med succes.</translation> </message> <message> <source>Comma separated file (*.csv)</source> @@ -2546,7 +2546,7 @@ Adresse: %4 <name>WalletFrame</name> <message> <source>No wallet has been loaded.</source> - <translation type="unfinished"/> + <translation>Ingen tegnebog er indlæst.</translation> </message> </context> <context> @@ -2560,7 +2560,7 @@ Adresse: %4 <name>WalletView</name> <message> <source>&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,19 +2576,19 @@ 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> - <translation type="unfinished"/> + <translation>Der skete en fejl under gemning af tegnebogsdata til %1.</translation> </message> <message> <source>The wallet data was successfully saved to %1.</source> - <translation type="unfinished"/> + <translation>Tegnebogsdata blev gemt til %1 med succes.</translation> </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 <port> (default: 8333 or testnet: 18333)</source> @@ -2659,7 +2659,7 @@ Adresse: %4 </message> <message> <source>Bitcoin Core RPC client version</source> - <translation type="unfinished"/> + <translation>Bitcoin Core RPC-klient-version</translation> </message> <message> <source>Run in the background as a daemon and accept commands</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,12 +2694,12 @@ 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 "Bitcoin Alert" admin@foo.com +fx: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </translation> </message> <message> <source>Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH)</source> - <translation type="unfinished"/> + <translation>Accepterede krypteringer (standard: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH)</translation> </message> <message> <source>An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s</source> @@ -2711,19 +2711,19 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15)</source> - <translation type="unfinished"/> + <translation>Rate-begræns kontinuerligt frie transaktioner til <n>*1000 byte i minuttet (standard:15)</translation> </message> <message> <source>Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development.</source> - <translation type="unfinished"/> + <translation>Start regressionstesttilstand, som bruger en speciel kæde, hvor blokke kan løses med det samme. Dette er tiltænkt til testværktøjer for regression of programudvikling.</translation> </message> <message> <source>Enter regression test mode, which uses a special chain in which blocks can be solved instantly.</source> - <translation type="unfinished"/> + <translation>Start regressionstesttilstand, som bruger en speciel kæde, hvor blokke kan løses med det samme.</translation> </message> <message> <source>Error: Listening for incoming connections failed (listen returned error %d)</source> - <translation type="unfinished"/> + <translation>Fejl: Lytning efter indkommende forbindelser mislykkedes (lytning returnerede fejl %d)</translation> </message> <message> <source>Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> @@ -2731,7 +2731,7 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" 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> @@ -2739,27 +2739,27 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Fees smaller than this are considered zero fee (for transaction creation) (default:</source> - <translation type="unfinished"/> + <translation>Gebyrer mindre end dette opfattes som nul-gebyr (for oprettelse af transaktioner) (standard:</translation> </message> <message> <source>Flush database activity from memory pool to disk log every <n> megabytes (default: 100)</source> - <translation type="unfinished"/> + <translation>Flyt databaseaktivitet fra hukommelsespulje til disklog hver <n> megabytes (standard: 100)</translation> </message> <message> <source>How thorough the block verification of -checkblocks is (0-4, default: 3)</source> - <translation type="unfinished"/> + <translation>Hvor gennemarbejdet blokverificeringen for -checkblocks er (0-4; standard: 3)</translation> </message> <message> <source>In this mode -genproclimit controls how many blocks are generated immediately.</source> - <translation type="unfinished"/> + <translation>I denne tilstand styrer -genproclimit hvor mange blokke, der genereres med det samme.</translation> </message> <message> <source>Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)</source> - <translation type="unfinished"/> + <translation>Sæt antallet af scriptverificeringstråde (%u til %d, 0 = auto, <0 = efterlad det antal kernet fri, standard: %d)</translation> </message> <message> <source>Set the processor limit for when generation is on (-1 = unlimited, default: -1)</source> - <translation type="unfinished"/> + <translation>Sæt processorbegrænsning for når generering er slået til (-1 = ubegrænset, standard: -1)</translation> </message> <message> <source>This is a pre-release test build - use at your own risk - do not use for mining or merchant applications</source> @@ -2767,11 +2767,11 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Unable to bind to %s on this computer. Bitcoin Core is probably already running.</source> - <translation type="unfinished"/> + <translation>Ikke i stand til at tildele til %s på denne computer. Bitcoin Core kører sansynligvis allerede.</translation> </message> <message> <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy)</source> - <translation type="unfinished"/> + <translation>Brug separat SOCS5-proxy for at nå andre knuder via Tor skjulte tjenester (standard: -proxy)</translation> </message> <message> <source>Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction.</source> @@ -2783,11 +2783,11 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" 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,19 +2795,19 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" 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> - <translation type="unfinished"/> + <translation>(standard: 1)</translation> </message> <message> <source>(default: wallet.dat)</source> - <translation type="unfinished"/> + <translation>(standard: wallet.dat)</translation> </message> <message> <source><category> can be:</source> - <translation type="unfinished"/> + <translation><kategori> kan være:</translation> </message> <message> <source>Attempt to recover private keys from a corrupt wallet.dat</source> @@ -2815,7 +2815,7 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Bitcoin Core Daemon</source> - <translation type="unfinished"/> + <translation>Bitcoin Core-tjeneste</translation> </message> <message> <source>Block creation options:</source> @@ -2823,7 +2823,7 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Clear list of wallet transactions (diagnostic tool; implies -rescan)</source> - <translation type="unfinished"/> + <translation>Ryd liste over transaktioner i tegnebog (diagnoseværktøj; medfører -rescan)</translation> </message> <message> <source>Connect only to the specified node(s)</source> @@ -2831,15 +2831,15 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Connect through SOCKS proxy</source> - <translation type="unfinished"/> + <translation>Forbind gennem SOCKS-proxy</translation> </message> <message> <source>Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332)</source> - <translation type="unfinished"/> + <translation>Forbind til JSON-RPC på <port> (standard: 8332 eller testnetværk: 18332)</translation> </message> <message> <source>Connection options:</source> - <translation type="unfinished"/> + <translation>Tilvalg for forbindelser:</translation> </message> <message> <source>Corrupted block database detected</source> @@ -2847,11 +2847,11 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Debugging/Testing options:</source> - <translation type="unfinished"/> + <translation>Tilvalg for fejlfinding/test:</translation> </message> <message> <source>Disable safemode, override a real safe mode event (default: 0)</source> - <translation type="unfinished"/> + <translation>Slå sikker tilstand fra, tilsidesæt hændelser fra sikker tilstand (standard: 0)</translation> </message> <message> <source>Discover own IP address (default: 1 when listening and no -externalip)</source> @@ -2859,7 +2859,7 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Do not load the wallet and disable wallet RPC calls</source> - <translation type="unfinished"/> + <translation>Indlæs ikke tegnebogen og slå tegnebogs-RPC-kald fra</translation> </message> <message> <source>Do you want to rebuild the block database now?</source> @@ -2939,43 +2939,43 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Fee per kB to add to transactions you send</source> - <translation type="unfinished"/> + <translation>Føj gebyr pr. kB til transaktioner, du sender</translation> </message> <message> <source>Fees smaller than this are considered zero fee (for relaying) (default:</source> - <translation type="unfinished"/> + <translation>Gebyrer mindre end dette opfattes som nul-gebyr (for videreførsler) (standard:</translation> </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> - <translation type="unfinished"/> + <translation>Gennemtving sikker tilstand (standard: 0)</translation> </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 <category> is not supplied, output all debugging information.</source> - <translation type="unfinished"/> + <translation>Hvis <kategori> ikke angives, udskriv al fejlsøgningsinformation.</translation> </message> <message> <source>Importing...</source> - <translation type="unfinished"/> + <translation>Importerer …</translation> </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: '%s'</source> - <translation type="unfinished"/> + <translation>Ugyldig -onion adresse: "%s"</translation> </message> <message> <source>Not enough file descriptors available.</source> @@ -2983,11 +2983,11 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Prepend debug output with timestamp (default: 1)</source> - <translation type="unfinished"/> + <translation>Føj tidsstempel foran fejlsøgningsoutput (standard: 1)</translation> </message> <message> <source>RPC client options:</source> - <translation type="unfinished"/> + <translation>Tilvalg for RPC-klient:</translation> </message> <message> <source>Rebuild block chain index from current blk000??.dat files</source> @@ -2995,15 +2995,15 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Select SOCKS version for -proxy (4 or 5, default: 5)</source> - <translation type="unfinished"/> + <translation>Vælg SOCKS-version for -proxy (4 eller 5, standard: 5)</translation> </message> <message> <source>Set database cache size in megabytes (%d to %d, default: %d)</source> - <translation type="unfinished"/> + <translation>Sæt cache-størrelse for database i megabytes (%d til %d; standard: %d)</translation> </message> <message> <source>Set maximum block size in bytes (default: %d)</source> - <translation type="unfinished"/> + <translation>Sæt maksimum blokstørrelse i byte (standard: %d)</translation> </message> <message> <source>Set the number of threads to service RPC calls (default: 4)</source> @@ -3011,47 +3011,47 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" 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> - <translation type="unfinished"/> + <translation>Brug ubekræftede byttepenge under afsendelse af transaktioner (standard: 1)</translation> </message> <message> <source>This is intended for regression testing tools and app development.</source> - <translation type="unfinished"/> + <translation>This is intended for regression testing tools and app development.</translation> </message> <message> <source>Usage (deprecated, use bitcoin-cli):</source> - <translation type="unfinished"/> + <translation>Brug (forældet, brug bitcoin-cli):</translation> </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> - <translation type="unfinished"/> + <translation>Vent på opstart af RPC-server</translation> </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> - <translation type="unfinished"/> + <translation>Tilvalg for tegnebog:</translation> </message> <message> <source>Warning: Deprecated argument -debugnet ignored, use -debug=net</source> - <translation type="unfinished"/> + <translation>Advarsel: Forældet argument -debugnet ignoreret; brug -debug=net</translation> </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> @@ -3059,19 +3059,19 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.</source> - <translation type="unfinished"/> + <translation>Kan ikke opnå en lås på datamappe %s. Bitcoin Core kører sansynligvis allerede.</translation> </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 <category> is optional)</source> - <translation type="unfinished"/> + <translation>Udskriv fejlsøgningsinformation (standard: 0, angivelse af <kategori> er valgfri)</translation> </message> <message> <source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source> - <translation type="unfinished"/> + <translation>Sæt maksimumstørrelse for højprioritet/lavgebyr-transaktioner i byte (standard: %d)</translation> </message> <message> <source>Information</source> @@ -3079,19 +3079,19 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Invalid amount for -minrelaytxfee=<amount>: '%s'</source> - <translation>Ugyldigt beløb til -minrelaytxfee=<beløb>:'%s'</translation> + <translation>Ugyldigt beløb til -minrelaytxfee=<beløb>: "%s"</translation> </message> <message> <source>Invalid amount for -mintxfee=<amount>: '%s'</source> - <translation>Ugyldigt beløb til -mintxfee=<beløb>:'%s'</translation> + <translation>Ugyldigt beløb til -mintxfee=<beløb>: "%s"</translation> </message> <message> <source>Limit size of signature cache to <n> entries (default: 50000)</source> - <translation type="unfinished"/> + <translation>Begræns størrelsen på signaturcache til <n> indgange (standard: 50000)</translation> </message> <message> <source>Log transaction priority and fee per kB when mining blocks (default: 0)</source> - <translation type="unfinished"/> + <translation>Prioritet for transaktionslog og gebyr pr. kB under udvinding af blokke (standard: 0)</translation> </message> <message> <source>Maintain a full transaction index (default: 0)</source> @@ -3099,15 +3099,15 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000)</source> - <translation>Maksimum for modtagelsesbuffer pr. forbindelse, <n>*1000 bytes (standard: 5000)</translation> + <translation>Maksimum for modtagelsesbuffer pr. forbindelse, <n>*1000 byte (standard: 5000)</translation> </message> <message> <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 1000)</source> - <translation>Maksimum for afsendelsesbuffer pr. forbindelse, <n>*1000 bytes (standard: 1000)</translation> + <translation>Maksimum for afsendelsesbuffer pr. forbindelse, <n>*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 <net> (IPv4, IPv6 or Tor)</source> @@ -3115,31 +3115,31 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Print block on startup, if found in block index</source> - <translation type="unfinished"/> + <translation>Udskriv blok under opstart, hvis den findes i blokindeks</translation> </message> <message> <source>Print block tree on startup (default: 0)</source> - <translation type="unfinished"/> + <translation>Udskriv bloktræ under startop (standard: 0)</translation> </message> <message> <source>RPC SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> - <translation type="unfinished"/> + <translation>Tilvalg for RPC SSL: (se Bitcoin Wiki for instruktioner i SSL-opstart)</translation> </message> <message> <source>RPC server options:</source> - <translation type="unfinished"/> + <translation>Tilvalg for RPC-server:</translation> </message> <message> <source>Randomly drop 1 of every <n> network messages</source> - <translation type="unfinished"/> + <translation>Drop tilfældigt 1 ud af hver <n> netværksbeskeder</translation> </message> <message> <source>Randomly fuzz 1 of every <n> network messages</source> - <translation type="unfinished"/> + <translation>Slør tilfældigt 1 ud af hver <n> netværksbeskeder</translation> </message> <message> <source>Run a thread to flush wallet periodically (default: 1)</source> - <translation type="unfinished"/> + <translation>Kør en tråd for at rydde tegnebog periodisk (standard: 1)</translation> </message> <message> <source>SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> @@ -3147,7 +3147,7 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Send command to Bitcoin Core</source> - <translation type="unfinished"/> + <translation>Send kommando til Bitcoin Core</translation> </message> <message> <source>Send trace/debug info to console instead of debug.log file</source> @@ -3155,19 +3155,19 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" 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> - <translation type="unfinished"/> + <translation>Sætter DB_PRIVATE-flaget i tegnebogens db-miljø (standard: 1)</translation> </message> <message> <source>Show all debugging options (usage: --help -help-debug)</source> - <translation type="unfinished"/> + <translation>Vis alle tilvalg for fejlsøgning (brug: --help -help-debug)</translation> </message> <message> <source>Show benchmark information (default: 0)</source> - <translation type="unfinished"/> + <translation>Vis information om ydelsesmåling (standard: 0)</translation> </message> <message> <source>Shrink debug.log file on client startup (default: 1 when no -debug)</source> @@ -3183,7 +3183,7 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Start Bitcoin Core Daemon</source> - <translation type="unfinished"/> + <translation>Start Bitcoin Core-tjeneste</translation> </message> <message> <source>System error: </source> @@ -3203,11 +3203,11 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" 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> @@ -3223,11 +3223,11 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Zapping all transactions from wallet...</source> - <translation type="unfinished"/> + <translation>Zapper alle transaktioner fra tegnebog …</translation> </message> <message> <source>on startup</source> - <translation type="unfinished"/> + <translation>under opstart</translation> </message> <message> <source>version</source> @@ -3311,11 +3311,11 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Invalid -proxy address: '%s'</source> - <translation>Ugyldig -proxy adresse: '%s'</translation> + <translation>Ugyldig -proxy adresse: "%s"</translation> </message> <message> <source>Unknown network specified in -onlynet: '%s'</source> - <translation>Ukendt netværk anført i -onlynet: '%s'</translation> + <translation>Ukendt netværk anført i -onlynet: "%s"</translation> </message> <message> <source>Unknown -socks proxy version requested: %i</source> @@ -3323,15 +3323,15 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com </message> <message> <source>Cannot resolve -bind address: '%s'</source> - <translation>Kan ikke finde -bind adressen: '%s'</translation> + <translation>Kan ikke finde -bind adressen: "%s"</translation> </message> <message> <source>Cannot resolve -externalip address: '%s'</source> - <translation>Kan ikke finde -externalip adressen: '%s'</translation> + <translation>Kan ikke finde -externalip adressen: "%s"</translation> </message> <message> <source>Invalid amount for -paytxfee=<amount>: '%s'</source> - <translation>Ugyldigt beløb for -paytxfee=<amount>: '%s'</translation> + <translation>Ugyldigt beløb for -paytxfee=<beløb>: "%s"</translation> </message> <message> <source>Invalid amount</source> @@ -3381,7 +3381,7 @@ f.eks.: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com <source>You must set rpcpassword=<password> 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=<password> i konfigurationsfilen: + <translation>Du skal angive rpcpassword=<adgangskode> 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>&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>&Clear</source> - <translation type="unfinished"/> + <translation>&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&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 "Bitcoin Alert" 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 "Bitcoin Alert" 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><category> can be:</source> @@ -2830,7 +2830,7 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" 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 "Bitcoin Alert" 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 "Bitcoin Alert" 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 "Bitcoin Alert" 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 "Bitcoin Alert" 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 "Bitcoin Alert" 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 "Bitcoin Alert" 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..ce30a8603d 100644 --- a/src/qt/locale/bitcoin_ko_KR.ts +++ b/src/qt/locale/bitcoin_ko_KR.ts @@ -33,14 +33,14 @@ MIT/X11 프로그램 라이선스에 따라 배포합니다. COPYING 또는 http </message> <message> <source>(%1-bit)</source> - <translation type="unfinished"/> + <translation>(%1-비트)</translation> </message> </context> <context> <name>AddressBookPage</name> <message> <source>Double-click to edit address or label</source> - <translation>주소 또는 표를 편집하기 위해 더블클릭 하시오</translation> + <translation>지갑 주소나 제목을 수정하려면 더블클릭하세요.</translation> </message> <message> <source>Create a new address</source> @@ -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> @@ -755,7 +755,7 @@ Address: %4 </message> <message> <source>This label turns red, if the transaction size is greater than 1000 bytes.</source> - <translation type="unfinished"/> + <translation>만약 거래 양이 1000bytes 보다 크면 제목이 빨간색으로 변합니다</translation> </message> <message> <source>This means a fee of at least %1 per kB is required.</source> @@ -767,27 +767,27 @@ 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 "medium".</source> - <translation type="unfinished"/> + <translation>우선권이 중간보다 작으면 제목이 빨간색으로 변합니다. </translation> </message> <message> <source>This label turns red, if any recipient receives an amount smaller than %1.</source> - <translation type="unfinished"/> + <translation>만약 수령인이 받은 액수가 잔고의 1%보다 작으면 이 제목이 빨간색으로 변합니다.</translation> </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> - <translation type="unfinished"/> + <translation>만약 잔돈이 1%보다 작다면 제목이 빨간색으로 변합니다</translation> </message> <message> <source>(no label)</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 "%1" can not be created.</source> - <translation type="unfinished"/> + <translation>오류 : 별도 정의한 폴더명 "%1" 생성에 실패했습니다. </translation> </message> <message> <source>Error</source> @@ -1033,7 +1033,7 @@ Address: %4 </message> <message> <source>Number of script &verification threads</source> - <translation type="unfinished"/> + <translation>스크립트 인증 쓰레드의 개수</translation> </message> <message> <source>Connect to the Bitcoin network through a SOCKS proxy.</source> @@ -1053,7 +1053,7 @@ Address: %4 </message> <message> <source>Third party transaction URLs</source> - <translation type="unfinished"/> + <translation>제 3자 거래 URLs</translation> </message> <message> <source>Active command-line options that override above options:</source> @@ -1081,11 +1081,11 @@ Address: %4 </message> <message> <source>Expert</source> - <translation type="unfinished"/> + <translation>전문가</translation> </message> <message> <source>Enable coin &control features</source> - <translation type="unfinished"/> + <translation>코인 상세 제어기능을 활성화합니다 - &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> @@ -1093,7 +1093,7 @@ Address: %4 </message> <message> <source>&Spend unconfirmed change</source> - <translation type="unfinished"/> + <translation>&확인되지 않은 돈을 쓰다</translation> </message> <message> <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</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>&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'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> @@ -1303,7 +1303,7 @@ Address: %4 </message> <message> <source>Payment request file handling</source> - <translation type="unfinished"/> + <translation>지불이 파일 처리를 요청합니다</translation> </message> <message> <source>Payment request file can not be read or processed! This can be caused by an invalid payment request file.</source> @@ -1354,7 +1354,7 @@ Address: %4 </message> <message> <source>Error: Invalid combination of -regtest and -testnet.</source> - <translation type="unfinished"/> + <translation>오류: 잘못된 -regtest 와 -testnet의 조합입니다.</translation> </message> <message> <source>Bitcoin Core didn't yet exit safely...</source> @@ -1460,7 +1460,7 @@ Address: %4 </message> <message> <source>&Clear</source> - <translation type="unfinished"/> + <translation>&지우기</translation> </message> <message> <source>Totals</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&euse an existing receiving address (not recommended)</source> - <translation type="unfinished"/> + <translation>현재의 수취용 주소를 재사용합니다만 권장하지는 않습니다. (R&)</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> @@ -1712,7 +1712,7 @@ Address: %4 </message> <message> <source>Inputs...</source> - <translation type="unfinished"/> + <translation>입력...</translation> </message> <message> <source>automatically selected</source> @@ -1864,7 +1864,7 @@ Address: %4 </message> <message> <source>The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> - <translation type="unfinished"/> + <translation>거래가 거부되었습니다. 몇몇 코인들이 지갑에서 이미 사용된 경우, 예를 들어 코인을 이미 사용한 wallet.dat를 복사해서 사용한 경우 지금 지갑에 기록이 안되있어 이런 일이 생길 수 있습니다.</translation> </message> <message> <source>Warning: Invalid Bitcoin address</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 "not accepted" and it won'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 개의 블럭이 경과되어야 합니다. 블럭을 생성할 때 블럭체인에 추가되도록 네트워크에 전파되는 과정을 거치는데, 블럭체인에 포함되지 못하고 실패한다면 해당 블럭의 상태는 '미승인'으로 표현되고 비트코인 또한 사용될 수 없습니다. 이 현상은 다른 노드가 비슷한 시간대에 동시에 블럭을 생성할 때 종종 발생할 수 있습니다. </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> @@ -2651,7 +2651,7 @@ Address: %4 </message> <message> <source>Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332)</source> - <translation type="unfinished"/> + <translation>포트 <port>을 통해 JSON-RPC 연결 (기본값: 8332 또는 testnet: 18332)</translation> </message> <message> <source>Accept command line and JSON-RPC commands</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> @@ -2693,7 +2693,7 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. </message> <message> <source>An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s</source> - <translation type="unfinished"/> + <translation>IPv6 연결을 위해 RPC port %u 설정 중 오류가 발생했습니다. IPv4: %s 환경으로 돌아갑니다.</translation> </message> <message> <source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source> @@ -2717,7 +2717,9 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. </message> <message> <source>Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> - <translation type="unfinished"/> + <translation>에러: 거래가 거부되었습니다! 이런 일이 생길 수 있습니다 만약 몇개의 코인들을 지갑에서 이미 사용했다면요, 예를 들어 만약 당신이 wallet.dat를 복사해서 사용했거나 코인들을 사용 후에 복사했다면 여기선 표시가 안되서 사용할 수 없습니다 + +-번역은 했으나 약간 이상한점이 있어서 수정해야함-</translation> </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> @@ -2725,11 +2727,11 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. </message> <message> <source>Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)</source> - <translation type="unfinished"/> + <translation>지갑 거래가 바뀌면 명령을 실행합니다.(%s 안의 명령어가 TxID로 바뀝니다)</translation> </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 <n> megabytes (default: 100)</source> @@ -2789,11 +2791,11 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" 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><category> can be:</source> @@ -2829,7 +2831,7 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. </message> <message> <source>Connection options:</source> - <translation type="unfinished"/> + <translation>연결 설정 : </translation> </message> <message> <source>Corrupted block database detected</source> @@ -2837,11 +2839,11 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" 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> - <translation type="unfinished"/> + <translation>안전 모드를 비활성화하고 안전 모드의 이벤트가 발생하더라도 무시합니다. (기본값: 0, 비활성화)</translation> </message> <message> <source>Discover own IP address (default: 1 when listening and no -externalip)</source> @@ -2861,7 +2863,7 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. </message> <message> <source>Error initializing wallet database environment %s!</source> - <translation type="unfinished"/> + <translation>지갑 데이터베이스 환경 초기화하는데 오류</translation> </message> <message> <source>Error loading block database</source> @@ -2929,11 +2931,11 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" 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 +2943,7 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" 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> @@ -2961,7 +2963,7 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. </message> <message> <source>Incorrect or no genesis block found. Wrong datadir for network?</source> - <translation type="unfinished"/> + <translation>올바르지 않거나 생성된 블록을 찾을 수 없습니다. 잘못된 네트워크 자료 디렉토리?</translation> </message> <message> <source>Invalid -onion address: '%s'</source> @@ -3053,7 +3055,7 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. </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>이 사항과 관련있는 경고가 발생하거나 아주 긴 포크가 발생했을 때 명령어를 실행해 주세요. (cmd 명령어 목록에서 %s는 메시지로 대체됩니다) </translation> </message> <message> <source>Output debugging information (default: 0, supplying <category> is optional)</source> @@ -3061,7 +3063,7 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. </message> <message> <source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source> - <translation type="unfinished"/> + <translation>최대 크기를 최우선으로 설정 / 바이트당 최소 수수료로 거래(기본값: %d)</translation> </message> <message> <source>Information</source> @@ -3077,11 +3079,11 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. </message> <message> <source>Limit size of signature cache to <n> entries (default: 50000)</source> - <translation type="unfinished"/> + <translation><n>번 째 순서에서 전자서명 캐쉬의 용량을 제한합니다. (기본값: 50000) </translation> </message> <message> <source>Log transaction priority and fee per kB when mining blocks (default: 0)</source> - <translation type="unfinished"/> + <translation>블럭을 채굴할 때 kB당 거래 우선 순위와 수수료를 로그에 남깁니다. (기본값: 0, 비활성화)</translation> </message> <message> <source>Maintain a full transaction index (default: 0)</source> @@ -3089,11 +3091,11 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. </message> <message> <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000)</source> - <translation type="unfinished"/> + <translation>최대 연결마다 1000bytes 버퍼를 받는다. (기본값: 5000)</translation> </message> <message> <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 1000)</source> - <translation type="unfinished"/> + <translation>최대 연결 마다 1000bytes 버퍼를 보낸다.(기본값: 1000) </translation> </message> <message> <source>Only accept block chain matching built-in checkpoints (default: 1)</source> @@ -3101,27 +3103,27 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. </message> <message> <source>Only connect to nodes in network <net> (IPv4, IPv6 or Tor)</source> - <translation type="unfinished"/> + <translation>노드가 있는 네트워크에만 접속 합니다(IPv4, IPv6 또는 Tor)</translation> </message> <message> <source>Print block on startup, if found in block index</source> - <translation type="unfinished"/> + <translation>블럭 색인을 발견하면 구동 시 블럭을 출력합니다.</translation> </message> <message> <source>Print block tree on startup (default: 0)</source> - <translation type="unfinished"/> + <translation>구동 시 블럭 트리를 출력합니다. (기본값: 0, 비활성화)</translation> </message> <message> <source>RPC SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> - <translation type="unfinished"/> + <translation>RPC SSL 옵션: (비트코인 위키의 SSL 설정 설명서 참고)</translation> </message> <message> <source>RPC server options:</source> - <translation type="unfinished"/> + <translation>RPC 서버 설정</translation> </message> <message> <source>Randomly drop 1 of every <n> network messages</source> - <translation type="unfinished"/> + <translation>모든 네트워크 메시지 마다 무작위로 1이 떨어진다</translation> </message> <message> <source>Randomly fuzz 1 of every <n> network messages</source> @@ -3137,7 +3139,7 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. </message> <message> <source>Send command to Bitcoin Core</source> - <translation type="unfinished"/> + <translation>비트코인 코어로 명령 보내기</translation> </message> <message> <source>Send trace/debug info to console instead of debug.log file</source> @@ -3149,15 +3151,15 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. </message> <message> <source>Sets the DB_PRIVATE flag in the wallet db environment (default: 1)</source> - <translation type="unfinished"/> + <translation>전자지갑 데이터베이스 환경에 DB_PRIVATE 플래그를 설정합니다. (기본값: 1, 활성화)</translation> </message> <message> <source>Show all debugging options (usage: --help -help-debug)</source> - <translation type="unfinished"/> + <translation>모든 디버그 설정 보기(설정: --help -help-debug)</translation> </message> <message> <source>Show benchmark information (default: 0)</source> - <translation type="unfinished"/> + <translation>벤치마크 정보 보기(기본값: 0)</translation> </message> <message> <source>Shrink debug.log file on client startup (default: 1 when no -debug)</source> @@ -3217,7 +3219,7 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. </message> <message> <source>on startup</source> - <translation type="unfinished"/> + <translation>구동 중</translation> </message> <message> <source>version</source> diff --git a/src/qt/locale/bitcoin_nb.ts b/src/qt/locale/bitcoin_nb.ts index 1267ad65b9..9e38c69c60 100644 --- a/src/qt/locale/bitcoin_nb.ts +++ b/src/qt/locale/bitcoin_nb.ts @@ -599,7 +599,7 @@ Adresse: %4 </message> <message> <source>Low Output:</source> - <translation>Lav Utdata:</translation> + <translation>Svake Utdata:</translation> </message> <message> <source>After Fee:</source> @@ -1744,7 +1744,7 @@ Adresse: %4 </message> <message> <source>Low Output:</source> - <translation>Svak Utdata:</translation> + <translation>Svake Utdata:</translation> </message> <message> <source>After Fee:</source> @@ -2730,7 +2730,7 @@ For eksempel: varselmelding=echo %%s | mail -s "Bitcoin Varsel" admin@ </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>Feil: Denne transaksjonen trenger en gebyr på minst %s på grunn av beløpet, kompleksiteten eller bruk av allerede mottatte penger!</translation> + <translation>Feil: Denne transaksjonen trenger et gebyr på minst %s på grunn av beløpet, kompleksiteten eller bruk av allerede mottatte penger!</translation> </message> <message> <source>Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)</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 "Alerta Bitcoin" 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/locale/bitcoin_zh_CN.ts b/src/qt/locale/bitcoin_zh_CN.ts index ea98c4e4b1..b87d27fe12 100644 --- a/src/qt/locale/bitcoin_zh_CN.ts +++ b/src/qt/locale/bitcoin_zh_CN.ts @@ -917,7 +917,7 @@ Address: %4 </message> <message> <source>Set SSL root certificates for payment request (default: -system-)</source> - <translation type="unfinished"/> + <translation>设置SSL根证书的付款请求(默认:-系统-)</translation> </message> <message> <source>Show splash screen on startup (default: 1)</source> @@ -1050,11 +1050,11 @@ Address: %4 </message> <message> <source>Third party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |.</source> - <translation type="unfinished"/> + <translation>出现在交易的选项卡的上下文菜单项的第三方网址 (例如:区块链接查询) 。 %s的URL被替换为交易哈希。多个的URL需要竖线 | 分隔。</translation> </message> <message> <source>Third party transaction URLs</source> - <translation type="unfinished"/> + <translation>第三方交易网址</translation> </message> <message> <source>Active command-line options that override above options:</source> @@ -1074,7 +1074,7 @@ Address: %4 </message> <message> <source>(0 = auto, <0 = leave that many cores free)</source> - <translation type="unfinished"/> + <translation>(0 = 自动, <0 = 离开很多免费的核心)</translation> </message> <message> <source>W&allet</source> @@ -1086,7 +1086,7 @@ Address: %4 </message> <message> <source>Enable coin &control features</source> - <translation type="unfinished"/> + <translation>启动货币 &控制功能</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> @@ -1094,7 +1094,7 @@ Address: %4 </message> <message> <source>&Spend unconfirmed change</source> - <translation type="unfinished"/> + <translation>&选择未经确认的花费</translation> </message> <message> <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> @@ -1351,7 +1351,7 @@ Address: %4 </message> <message> <source>Error: Cannot parse configuration file: %1. Only use key=value syntax.</source> - <translation type="unfinished"/> + <translation>错误: 无法解析配置文件: %1. 只有钥匙=重要的私匙.</translation> </message> <message> <source>Error: Invalid combination of -regtest and -testnet.</source> @@ -1359,7 +1359,7 @@ Address: %4 </message> <message> <source>Bitcoin Core didn't yet exit safely...</source> - <translation type="unfinished"/> + <translation>比特币核心钱包没有安全退出....</translation> </message> <message> <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> @@ -2667,7 +2667,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> @@ -2722,7 +2722,7 @@ rpcpassword=%s </message> <message> <source>Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15)</source> - <translation type="unfinished"/> + <translation>自由交易不断的速率限制为<n>*1000 字节每分钟(默认值:15)</translation> </message> <message> <source>Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development.</source> @@ -2734,7 +2734,7 @@ rpcpassword=%s </message> <message> <source>Error: Listening for incoming connections failed (listen returned error %d)</source> - <translation type="unfinished"/> + <translation>错误: 监听接收连接失败 (监听错误 %d)</translation> </message> <message> <source>Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> @@ -2750,27 +2750,27 @@ rpcpassword=%s </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 <n> megabytes (default: 100)</source> - <translation type="unfinished"/> + <translation>从缓冲池清理磁盘数据库活动日志每<n>兆字节 (默认值: 100)</translation> </message> <message> <source>How thorough the block verification of -checkblocks is (0-4, default: 3)</source> - <translation type="unfinished"/> + <translation>如何有效的验证checkblocks区块(0-4, 默认值: 3)</translation> </message> <message> <source>In this mode -genproclimit controls how many blocks are generated immediately.</source> - <translation type="unfinished"/> + <translation>在-genproclimit这种模式下控制产出多少区块</translation> </message> <message> <source>Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)</source> - <translation type="unfinished"/> + <translation>设置脚本验证的程序 (%u 到 %d, 0 = 自动, <0 = 保留自由的核心, 默认值: %d)</translation> </message> <message> <source>Set the processor limit for when generation is on (-1 = unlimited, default: -1)</source> - <translation type="unfinished"/> + <translation>设置处理器生成的限制 (-1 = 无限, 默认值: -1)</translation> </message> <message> <source>This is a pre-release test build - use at your own risk - do not use for mining or merchant applications</source> @@ -2778,7 +2778,7 @@ rpcpassword=%s </message> <message> <source>Unable to bind to %s on this computer. Bitcoin Core is probably already running.</source> - <translation type="unfinished"/> + <translation>无法 %s的绑定到电脑上,比特币核心钱包可能已经在运行。</translation> </message> <message> <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy)</source> @@ -2810,11 +2810,11 @@ rpcpassword=%s </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><category> can be:</source> @@ -2850,7 +2850,7 @@ rpcpassword=%s </message> <message> <source>Connection options:</source> - <translation type="unfinished"/> + <translation>连接选项:</translation> </message> <message> <source>Corrupted block database detected</source> @@ -2858,11 +2858,11 @@ rpcpassword=%s </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> - <translation type="unfinished"/> + <translation>禁止使用安全模式,重新写入一个真正的安全模式日志(默认值: 0)</translation> </message> <message> <source>Discover own IP address (default: 1 when listening and no -externalip)</source> @@ -2954,7 +2954,7 @@ rpcpassword=%s </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> @@ -2962,7 +2962,7 @@ rpcpassword=%s </message> <message> <source>Force safe mode (default: 0)</source> - <translation type="unfinished"/> + <translation>强制安全模式(默认值: 0)</translation> </message> <message> <source>Generate coins (default: 0)</source> @@ -3010,7 +3010,7 @@ rpcpassword=%s </message> <message> <source>Set database cache size in megabytes (%d to %d, default: %d)</source> - <translation type="unfinished"/> + <translation>设置以MB为单位的数据库缓存大小(%d 到 %d, 默认值: %d)</translation> </message> <message> <source>Set maximum block size in bytes (default: %d)</source> @@ -3070,7 +3070,7 @@ rpcpassword=%s </message> <message> <source>Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.</source> - <translation type="unfinished"/> + <translation>无法获取数据目录的 %s. 比特币核心钱包可能已经在运行.</translation> </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> @@ -3098,11 +3098,11 @@ rpcpassword=%s </message> <message> <source>Limit size of signature cache to <n> entries (default: 50000)</source> - <translation type="unfinished"/> + <translation>签名缓冲大小限制每<n> 条目 (默认值: 50000)</translation> </message> <message> <source>Log transaction priority and fee per kB when mining blocks (default: 0)</source> - <translation type="unfinished"/> + <translation>开采区块时,日志优先级和手续费每KB (默认值: 0)</translation> </message> <message> <source>Maintain a full transaction index (default: 0)</source> @@ -3126,15 +3126,15 @@ rpcpassword=%s </message> <message> <source>Print block on startup, if found in block index</source> - <translation type="unfinished"/> + <translation>如果在搜索区块中找到,请启动打印区块</translation> </message> <message> <source>Print block tree on startup (default: 0)</source> - <translation>启动时打印块树 (默认: 0)</translation> + <translation>启动时打印区块树 (默认值: 0)</translation> </message> <message> <source>RPC SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> - <translation type="unfinished"/> + <translation>RPC SSL选项:(见有关比特币设置用于SSL说明的维基百科)</translation> </message> <message> <source>RPC server options:</source> @@ -3142,15 +3142,15 @@ rpcpassword=%s </message> <message> <source>Randomly drop 1 of every <n> network messages</source> - <translation type="unfinished"/> + <translation>随机每1个丢失测试<n>网络信息</translation> </message> <message> <source>Randomly fuzz 1 of every <n> network messages</source> - <translation type="unfinished"/> + <translation>随机每1个模拟测试<n>网络信息</translation> </message> <message> <source>Run a thread to flush wallet periodically (default: 1)</source> - <translation type="unfinished"/> + <translation>运行一个程序,定时清理钱包 (默认值:1)</translation> </message> <message> <source>SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> @@ -3158,7 +3158,7 @@ rpcpassword=%s </message> <message> <source>Send command to Bitcoin Core</source> - <translation type="unfinished"/> + <translation>发送指令到比特币核心钱包</translation> </message> <message> <source>Send trace/debug info to console instead of debug.log file</source> @@ -3170,15 +3170,15 @@ rpcpassword=%s </message> <message> <source>Sets the DB_PRIVATE flag in the wallet db environment (default: 1)</source> - <translation type="unfinished"/> + <translation>设置DB_PRIVATE钱包标志DB环境 (默认值: 1)</translation> </message> <message> <source>Show all debugging options (usage: --help -help-debug)</source> - <translation type="unfinished"/> + <translation>显示所有调试选项 (用法: --帮助 -帮助调试)</translation> </message> <message> <source>Show benchmark information (default: 0)</source> - <translation type="unfinished"/> + <translation>显示标准信息 (默认值: 0)</translation> </message> <message> <source>Shrink debug.log file on client startup (default: 1 when no -debug)</source> @@ -3194,7 +3194,7 @@ rpcpassword=%s </message> <message> <source>Start Bitcoin Core Daemon</source> - <translation type="unfinished"/> + <translation>开启比特币核心钱包守护进程</translation> </message> <message> <source>System error: </source> @@ -3238,7 +3238,7 @@ rpcpassword=%s </message> <message> <source>on startup</source> - <translation type="unfinished"/> + <translation>启动中</translation> </message> <message> <source>version</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/qt/transactiondesc.cpp b/src/qt/transactiondesc.cpp index 45fb3d40c2..0cfcb048c8 100644 --- a/src/qt/transactiondesc.cpp +++ b/src/qt/transactiondesc.cpp @@ -42,7 +42,7 @@ QString TransactionDesc::FormatTxStatus(const CWalletTx& wtx) } } -QString TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx, int vout, int unit) +QString TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx, TransactionRecord *rec, int unit) { QString strHTML; @@ -86,26 +86,19 @@ QString TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx, int vout, int u if (nNet > 0) { // Credit - BOOST_FOREACH(const CTxOut& txout, wtx.vout) + if (CBitcoinAddress(rec->address).IsValid()) { - if (wallet->IsMine(txout)) + CTxDestination address = CBitcoinAddress(rec->address).Get(); + if (wallet->mapAddressBook.count(address)) { - CTxDestination address; - if (ExtractDestination(txout.scriptPubKey, address) && IsMine(*wallet, address)) - { - if (wallet->mapAddressBook.count(address)) - { - strHTML += "<b>" + tr("From") + ":</b> " + tr("unknown") + "<br>"; - strHTML += "<b>" + tr("To") + ":</b> "; - strHTML += GUIUtil::HtmlEscape(CBitcoinAddress(address).ToString()); - if (!wallet->mapAddressBook[address].name.empty()) - strHTML += " (" + tr("own address") + ", " + tr("label") + ": " + GUIUtil::HtmlEscape(wallet->mapAddressBook[address].name) + ")"; - else - strHTML += " (" + tr("own address") + ")"; - strHTML += "<br>"; - } - } - break; + strHTML += "<b>" + tr("From") + ":</b> " + tr("unknown") + "<br>"; + strHTML += "<b>" + tr("To") + ":</b> "; + strHTML += GUIUtil::HtmlEscape(rec->address); + if (!wallet->mapAddressBook[address].name.empty()) + strHTML += " (" + tr("own address") + ", " + tr("label") + ": " + GUIUtil::HtmlEscape(wallet->mapAddressBook[address].name) + ")"; + else + strHTML += " (" + tr("own address") + ")"; + strHTML += "<br>"; } } } @@ -224,7 +217,7 @@ QString TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx, int vout, int u if (wtx.mapValue.count("comment") && !wtx.mapValue["comment"].empty()) strHTML += "<br><b>" + tr("Comment") + ":</b><br>" + GUIUtil::HtmlEscape(wtx.mapValue["comment"], true) + "<br>"; - strHTML += "<b>" + tr("Transaction ID") + ":</b> " + TransactionRecord::formatSubTxId(wtx.GetHash(), vout) + "<br>"; + strHTML += "<b>" + tr("Transaction ID") + ":</b> " + TransactionRecord::formatSubTxId(wtx.GetHash(), rec->idx) + "<br>"; // Message from normal bitcoin:URI (bitcoin:123...?message=example) foreach (const PAIRTYPE(string, string)& r, wtx.vOrderForm) diff --git a/src/qt/transactiondesc.h b/src/qt/transactiondesc.h index 92d093b3eb..f5a1328a71 100644 --- a/src/qt/transactiondesc.h +++ b/src/qt/transactiondesc.h @@ -8,6 +8,7 @@ #include <QObject> #include <QString> +class TransactionRecord; class CWallet; class CWalletTx; @@ -18,7 +19,7 @@ class TransactionDesc: public QObject Q_OBJECT public: - static QString toHTML(CWallet *wallet, CWalletTx &wtx, int vout, int unit); + static QString toHTML(CWallet *wallet, CWalletTx &wtx, TransactionRecord *rec, int unit); private: TransactionDesc() {} diff --git a/src/qt/transactiontablemodel.cpp b/src/qt/transactiontablemodel.cpp index 8cf2b0a1b1..b9fcd0d6b0 100644 --- a/src/qt/transactiontablemodel.cpp +++ b/src/qt/transactiontablemodel.cpp @@ -222,7 +222,7 @@ public: std::map<uint256, CWalletTx>::iterator mi = wallet->mapWallet.find(rec->hash); if(mi != wallet->mapWallet.end()) { - return TransactionDesc::toHTML(wallet, mi->second, rec->idx, unit); + return TransactionDesc::toHTML(wallet, mi->second, rec, unit); } } return QString(""); 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..aa8e5ca6c3 100644 --- a/src/test/data/tx_valid.json +++ b/src/test/data/tx_valid.json @@ -16,7 +16,7 @@ ["It is an OP_CHECKMULTISIG with an arbitrary extra byte stuffed into the signature at pos length - 2"], ["The dummy byte is fine however, so the NULLDUMMY flag should be happy"], [[["60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1", 0, "1 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x41 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG"]], -"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba260000000004A0048304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2bab01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000", "P2SH,NULLDUMMY"], +"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba260000000004a0048304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2bab01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000", "P2SH,NULLDUMMY"], ["The following is a tweaked form of 23b397edccd3740a74adb603c9756370fafcde9bcc4483eb271ecad09a94dd63"], ["It is an OP_CHECKMULTISIG with the dummy value set to something other than an empty string"], @@ -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()); } }; |