aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml2
-rw-r--r--.tx/config2
-rw-r--r--COPYING2
-rw-r--r--Makefile.am9
-rw-r--r--build-aux/m4/bitcoin_qt.m41
-rw-r--r--configure.ac11
-rw-r--r--contrib/gitian-descriptors/gitian-osx-signer.yml2
-rw-r--r--contrib/gitian-descriptors/gitian-osx.yml2
-rw-r--r--contrib/init/bitcoind.openrc2
-rw-r--r--contrib/linearize/example-linearize.cfg10
-rwxr-xr-xcontrib/linearize/linearize-data.py6
-rw-r--r--contrib/macdeploy/DS_Storebin10244 -> 10244 bytes
-rw-r--r--contrib/macdeploy/README.md2
-rwxr-xr-xcontrib/macdeploy/detached-sig-apply.sh21
-rwxr-xr-xcontrib/macdeploy/detached-sig-create.sh22
-rw-r--r--contrib/macdeploy/fancy.plist2
-rwxr-xr-xcontrib/macdeploy/macdeployqtplus6
-rw-r--r--depends/Makefile40
-rw-r--r--depends/README.md56
-rw-r--r--depends/README.usage34
-rw-r--r--depends/description.md (renamed from depends/README)18
-rw-r--r--depends/funcs.mk13
-rw-r--r--depends/packages.md (renamed from depends/README.packages)129
-rw-r--r--depends/packages/native_cctools.mk2
-rw-r--r--doc/README.md4
-rw-r--r--doc/README_osx.txt4
-rw-r--r--doc/REST-interface.md51
-rw-r--r--doc/assets-attribution.md1
-rw-r--r--doc/bips.md2
-rw-r--r--doc/build-osx.md6
-rw-r--r--doc/build-unix.md6
-rw-r--r--doc/developer-notes.md6
-rw-r--r--doc/dnsseed-policy.md13
-rw-r--r--doc/gitian-building.md10
-rw-r--r--doc/init.md2
-rw-r--r--doc/release-notes/release-notes-0.10.1.md143
-rw-r--r--doc/release-notes/release-notes-0.10.2.md86
-rw-r--r--doc/release-notes/release-notes-0.9.4.md95
-rw-r--r--doc/release-process.md2
-rw-r--r--doc/translation_process.md4
-rwxr-xr-xqa/pull-tester/rpc-tests.sh5
-rw-r--r--qa/rpc-tests/README.md2
-rw-r--r--qa/rpc-tests/bignum.py102
-rwxr-xr-xqa/rpc-tests/bipdersig-p2p.py183
-rw-r--r--qa/rpc-tests/blockstore.py127
-rw-r--r--qa/rpc-tests/blocktools.py65
-rwxr-xr-xqa/rpc-tests/comptool.py341
-rwxr-xr-xqa/rpc-tests/conflictedbalance.sh2
-rwxr-xr-xqa/rpc-tests/invalidblockrequest.py115
-rwxr-xr-xqa/rpc-tests/maxblocksinflight.py101
-rwxr-xr-xqa/rpc-tests/mininode.py1256
-rwxr-xr-xqa/rpc-tests/pruning.py19
-rwxr-xr-xqa/rpc-tests/rawtransactions.py144
-rwxr-xr-xqa/rpc-tests/rest.py186
-rw-r--r--qa/rpc-tests/script.py896
-rwxr-xr-xqa/rpc-tests/script_test.py253
-rwxr-xr-xqa/rpc-tests/signrawtransactions.py109
-rwxr-xr-xqa/rpc-tests/smartfees.py281
-rwxr-xr-xqa/rpc-tests/test_framework.py44
-rw-r--r--qa/rpc-tests/util.py29
-rwxr-xr-xqa/rpc-tests/wallet.py2
-rw-r--r--share/certs/PrivateKeyNotes.md4
-rwxr-xr-xshare/genbuild.sh2
-rw-r--r--src/Makefile.am55
-rw-r--r--src/Makefile.qt.include1
-rw-r--r--src/Makefile.test.include2
-rw-r--r--src/addrman.h16
-rw-r--r--src/base58.h6
-rw-r--r--src/bitcoin-cli.cpp2
-rw-r--r--src/bitcoin-tx.cpp15
-rw-r--r--src/bitcoind.cpp5
-rw-r--r--src/bloom.cpp83
-rw-r--r--src/bloom.h36
-rw-r--r--src/chain.h2
-rw-r--r--src/chainparams.cpp135
-rw-r--r--src/chainparams.h23
-rw-r--r--src/chainparamsbase.h4
-rw-r--r--src/checkpoints.cpp35
-rw-r--r--src/checkpoints.h14
-rw-r--r--src/checkqueue.h6
-rw-r--r--src/coins.cpp24
-rw-r--r--src/coins.h20
-rw-r--r--src/hash.cpp8
-rw-r--r--src/hash.h4
-rw-r--r--src/init.cpp66
-rw-r--r--src/init.h3
-rw-r--r--src/key.cpp73
-rw-r--r--src/key.h18
-rw-r--r--src/main.cpp236
-rw-r--r--src/main.h13
-rw-r--r--src/memusage.h111
-rw-r--r--src/merkleblock.cpp4
-rw-r--r--src/merkleblock.h2
-rw-r--r--src/miner.cpp18
-rw-r--r--src/mruset.h36
-rw-r--r--src/net.cpp34
-rw-r--r--src/net.h13
-rw-r--r--src/netbase.cpp4
-rw-r--r--src/policy/fees.cpp529
-rw-r--r--src/policy/fees.h276
-rw-r--r--src/pow.cpp17
-rw-r--r--src/pow.h3
-rw-r--r--src/pubkey.cpp10
-rw-r--r--src/pubkey.h10
-rw-r--r--src/qt/askpassphrasedialog.cpp2
-rw-r--r--src/qt/bitcoin.cpp6
-rw-r--r--src/qt/bitcoin.qrc1
-rw-r--r--src/qt/bitcoingui.cpp3
-rw-r--r--src/qt/bitcoinstrings.cpp19
-rw-r--r--src/qt/clientmodel.cpp2
-rw-r--r--src/qt/coincontroldialog.cpp20
-rw-r--r--src/qt/forms/overviewpage.ui64
-rw-r--r--src/qt/forms/sendcoinsentry.ui33
-rw-r--r--src/qt/locale/bitcoin_af_ZA.ts8
-rw-r--r--src/qt/locale/bitcoin_ar.ts78
-rw-r--r--src/qt/locale/bitcoin_be_BY.ts506
-rw-r--r--src/qt/locale/bitcoin_bg.ts994
-rw-r--r--src/qt/locale/bitcoin_ca.ts200
-rw-r--r--src/qt/locale/bitcoin_ca@valencia.ts196
-rw-r--r--src/qt/locale/bitcoin_ca_ES.ts200
-rw-r--r--src/qt/locale/bitcoin_cs.ts196
-rw-r--r--src/qt/locale/bitcoin_cy.ts12
-rw-r--r--src/qt/locale/bitcoin_da.ts384
-rw-r--r--src/qt/locale/bitcoin_de.ts363
-rw-r--r--src/qt/locale/bitcoin_el_GR.ts225
-rw-r--r--src/qt/locale/bitcoin_en.ts254
-rw-r--r--src/qt/locale/bitcoin_eo.ts176
-rw-r--r--src/qt/locale/bitcoin_es.ts266
-rw-r--r--src/qt/locale/bitcoin_es_CL.ts97
-rw-r--r--src/qt/locale/bitcoin_es_DO.ts144
-rw-r--r--src/qt/locale/bitcoin_es_MX.ts92
-rw-r--r--src/qt/locale/bitcoin_es_UY.ts16
-rw-r--r--src/qt/locale/bitcoin_et.ts433
-rw-r--r--src/qt/locale/bitcoin_eu_ES.ts16
-rw-r--r--src/qt/locale/bitcoin_fa.ts196
-rw-r--r--src/qt/locale/bitcoin_fa_IR.ts37
-rw-r--r--src/qt/locale/bitcoin_fi.ts179
-rw-r--r--src/qt/locale/bitcoin_fr.ts370
-rw-r--r--src/qt/locale/bitcoin_fr_CA.ts4
-rw-r--r--src/qt/locale/bitcoin_gl.ts154
-rw-r--r--src/qt/locale/bitcoin_he.ts203
-rw-r--r--src/qt/locale/bitcoin_hi_IN.ts45
-rw-r--r--src/qt/locale/bitcoin_hr.ts86
-rw-r--r--src/qt/locale/bitcoin_hu.ts184
-rw-r--r--src/qt/locale/bitcoin_id_ID.ts130
-rw-r--r--src/qt/locale/bitcoin_it.ts377
-rw-r--r--src/qt/locale/bitcoin_ja.ts381
-rw-r--r--src/qt/locale/bitcoin_ka.ts148
-rw-r--r--src/qt/locale/bitcoin_kk_KZ.ts4
-rw-r--r--src/qt/locale/bitcoin_ko_KR.ts152
-rw-r--r--src/qt/locale/bitcoin_ky.ts4
-rw-r--r--src/qt/locale/bitcoin_la.ts148
-rw-r--r--src/qt/locale/bitcoin_lt.ts109
-rw-r--r--src/qt/locale/bitcoin_lv_LV.ts142
-rw-r--r--src/qt/locale/bitcoin_mn.ts55
-rw-r--r--src/qt/locale/bitcoin_ms_MY.ts4
-rw-r--r--src/qt/locale/bitcoin_nb.ts382
-rw-r--r--src/qt/locale/bitcoin_nl.ts268
-rw-r--r--src/qt/locale/bitcoin_pam.ts112
-rw-r--r--src/qt/locale/bitcoin_pl.ts246
-rw-r--r--src/qt/locale/bitcoin_pt_BR.ts311
-rw-r--r--src/qt/locale/bitcoin_pt_PT.ts187
-rw-r--r--src/qt/locale/bitcoin_ro_RO.ts176
-rw-r--r--src/qt/locale/bitcoin_ru.ts248
-rw-r--r--src/qt/locale/bitcoin_sk.ts213
-rw-r--r--src/qt/locale/bitcoin_sl_SI.ts142
-rw-r--r--src/qt/locale/bitcoin_sq.ts28
-rw-r--r--src/qt/locale/bitcoin_sr.ts32
-rw-r--r--src/qt/locale/bitcoin_sv.ts381
-rw-r--r--src/qt/locale/bitcoin_th_TH.ts8
-rw-r--r--src/qt/locale/bitcoin_tr.ts386
-rw-r--r--src/qt/locale/bitcoin_uk.ts198
-rw-r--r--src/qt/locale/bitcoin_ur_PK.ts4
-rw-r--r--src/qt/locale/bitcoin_uz@Cyrl.ts108
-rw-r--r--src/qt/locale/bitcoin_vi.ts4
-rw-r--r--src/qt/locale/bitcoin_vi_VN.ts20
-rw-r--r--src/qt/locale/bitcoin_zh_CN.ts372
-rw-r--r--src/qt/locale/bitcoin_zh_TW.ts204
-rw-r--r--src/qt/optionsdialog.cpp2
-rw-r--r--src/qt/overviewpage.cpp14
-rw-r--r--src/qt/res/icons/warning.pngbin0 -> 3810 bytes
-rw-r--r--src/qt/scicon.cpp16
-rw-r--r--src/qt/sendcoinsdialog.cpp10
-rw-r--r--src/qt/sendcoinsdialog.h2
-rw-r--r--src/qt/sendcoinsentry.cpp2
-rw-r--r--src/qt/transactiondesc.cpp1
-rw-r--r--src/rest.cpp247
-rw-r--r--src/rpcblockchain.cpp16
-rw-r--r--src/rpcclient.cpp1
-rw-r--r--src/rpcmining.cpp1
-rw-r--r--src/rpcrawtransaction.cpp56
-rw-r--r--src/rpcserver.cpp6
-rw-r--r--src/rpcserver.h1
-rw-r--r--src/scheduler.cpp126
-rw-r--r--src/scheduler.h83
-rw-r--r--src/script/script.h3
-rw-r--r--src/secp256k1/.gitignore1
-rw-r--r--src/secp256k1/.travis.yml41
-rw-r--r--src/secp256k1/include/secp256k1.h150
-rw-r--r--src/secp256k1/src/bench.h2
-rw-r--r--src/secp256k1/src/bench_recover.c8
-rw-r--r--src/secp256k1/src/bench_sign.c8
-rw-r--r--src/secp256k1/src/bench_verify.c11
-rw-r--r--src/secp256k1/src/ecdsa.h7
-rw-r--r--src/secp256k1/src/ecdsa_impl.h84
-rw-r--r--src/secp256k1/src/eckey.h8
-rw-r--r--src/secp256k1/src/eckey_impl.h48
-rw-r--r--src/secp256k1/src/ecmult.h18
-rw-r--r--src/secp256k1/src/ecmult_gen.h30
-rw-r--r--src/secp256k1/src/ecmult_gen_impl.h134
-rw-r--r--src/secp256k1/src/ecmult_impl.h113
-rw-r--r--src/secp256k1/src/field.h3
-rw-r--r--src/secp256k1/src/field_10x26_impl.h31
-rw-r--r--src/secp256k1/src/field_5x52_impl.h26
-rw-r--r--src/secp256k1/src/field_impl.h99
-rw-r--r--src/secp256k1/src/group.h3
-rw-r--r--src/secp256k1/src/group_impl.h41
-rw-r--r--src/secp256k1/src/hash_impl.h15
-rw-r--r--src/secp256k1/src/num_gmp_impl.h49
-rw-r--r--src/secp256k1/src/scalar_impl.h114
-rw-r--r--src/secp256k1/src/secp256k1.c125
-rw-r--r--src/secp256k1/src/tests.c453
-rw-r--r--src/serialize.h4
-rw-r--r--src/support/pagelocker.h1
-rw-r--r--src/test/Checkpoints_tests.cpp16
-rw-r--r--src/test/bloom_tests.cpp78
-rw-r--r--src/test/coins_tests.cpp27
-rw-r--r--src/test/data/script_invalid.json20
-rw-r--r--src/test/data/script_valid.json3
-rw-r--r--src/test/data/tx_invalid.json6
-rw-r--r--src/test/main_tests.cpp39
-rw-r--r--src/test/miner_tests.cpp4
-rw-r--r--src/test/mruset_tests.cpp126
-rw-r--r--src/test/policyestimator_tests.cpp186
-rw-r--r--src/test/pow_tests.cpp24
-rw-r--r--src/test/scheduler_tests.cpp119
-rw-r--r--src/test/test_bitcoin.cpp5
-rw-r--r--src/txdb.h2
-rw-r--r--src/txmempool.cpp382
-rw-r--r--src/txmempool.h20
-rw-r--r--src/ui_interface.h13
-rw-r--r--src/util.cpp21
-rw-r--r--src/util.h57
-rw-r--r--src/utiltime.cpp4
-rw-r--r--src/validationinterface.h14
-rw-r--r--src/wallet/db.h3
-rw-r--r--src/wallet/rpcwallet.cpp2
-rw-r--r--src/wallet/wallet.cpp40
-rw-r--r--src/wallet/wallet.h2
-rw-r--r--src/wallet/walletdb.cpp3
250 files changed, 13813 insertions, 8834 deletions
diff --git a/.travis.yml b/.travis.yml
index 44ea7b62d7..1f6eb15c27 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -16,6 +16,8 @@ env:
- CCACHE_COMPRESS=1
- BASE_OUTDIR=$TRAVIS_BUILD_DIR/out
- SDK_URL=https://bitcoincore.org/depends-sources/sdks
+ - PYTHON_DEBUG=1
+ - WINEDEBUG=fixme-all
cache:
apt: true
directories:
diff --git a/.tx/config b/.tx/config
index 472d27b46f..6c534f06e4 100644
--- a/.tx/config
+++ b/.tx/config
@@ -1,7 +1,7 @@
[main]
host = https://www.transifex.com
-[bitcoin.qt-translation-010x]
+[bitcoin.qt-translation-011x]
file_filter = src/qt/locale/bitcoin_<lang>.ts
source_file = src/qt/locale/bitcoin_en.ts
source_lang = en
diff --git a/COPYING b/COPYING
index 9fd3266622..cae0f5b6f4 100644
--- a/COPYING
+++ b/COPYING
@@ -1,4 +1,4 @@
-Copyright (c) 2009-2015 Bitcoin Developers
+Copyright (c) 2009-2015 The Bitcoin Core developers
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/Makefile.am b/Makefile.am
index c59648fd02..56c8c09223 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -14,8 +14,8 @@ BITCOIN_QT_BIN=$(top_builddir)/src/qt/bitcoin-qt$(EXEEXT)
BITCOIN_CLI_BIN=$(top_builddir)/src/bitcoin-cli$(EXEEXT)
BITCOIN_WIN_INSTALLER=$(PACKAGE)-$(PACKAGE_VERSION)-win$(WINDOWS_BITS)-setup$(EXEEXT)
-OSX_APP=Bitcoin-Qt.app
-OSX_DMG=Bitcoin-Qt.dmg
+OSX_APP=Bitcoin-Core.app
+OSX_DMG=Bitcoin-Core.dmg
OSX_BACKGROUND_IMAGE=background.tiff
OSX_DEPLOY_SCRIPT=$(top_srcdir)/contrib/macdeploy/macdeployqtplus
OSX_FANCY_PLIST=$(top_srcdir)/contrib/macdeploy/fancy.plist
@@ -59,8 +59,9 @@ $(BITCOIN_WIN_INSTALLER): all-recursive
STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIND_BIN) $(top_builddir)/release
STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIN_QT_BIN) $(top_builddir)/release
STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIN_CLI_BIN) $(top_builddir)/release
- @test -f $(MAKENSIS) && $(MAKENSIS) $(top_builddir)/share/setup.nsi || \
+ @test -f $(MAKENSIS) && $(MAKENSIS) -V2 $(top_builddir)/share/setup.nsi || \
echo error: could not build $@
+ @echo built $@
$(if $(findstring src/,$(MAKECMDGOALS)),$(MAKECMDGOALS), none): FORCE
$(MAKE) -C src $(patsubst src/%,%,$@)
@@ -105,7 +106,7 @@ $(APP_DIST_DIR)/Applications:
$(APP_DIST_EXTRAS): $(APP_DIST_DIR)/$(OSX_APP)/Contents/MacOS/Bitcoin-Qt
$(OSX_DMG): $(APP_DIST_EXTRAS)
- $(GENISOIMAGE) -no-cache-inodes -D -l -probe -V "Bitcoin-Qt" -no-pad -r -apple -o $@ dist
+ $(GENISOIMAGE) -no-cache-inodes -D -l -probe -V "Bitcoin-Core" -no-pad -r -apple -o $@ dist
$(APP_DIST_DIR)/.background/$(OSX_BACKGROUND_IMAGE): contrib/macdeploy/$(OSX_BACKGROUND_IMAGE)
$(MKDIR_P) $(@D)
diff --git a/build-aux/m4/bitcoin_qt.m4 b/build-aux/m4/bitcoin_qt.m4
index 2a72262653..570ccb8b6f 100644
--- a/build-aux/m4/bitcoin_qt.m4
+++ b/build-aux/m4/bitcoin_qt.m4
@@ -6,6 +6,7 @@ AC_DEFUN([BITCOIN_QT_FAIL],[
AC_MSG_WARN([$1; bitcoin-qt frontend will not be built])
fi
bitcoin_enable_qt=no
+ bitcoin_enable_qt_test=no
else
AC_MSG_ERROR([$1])
fi
diff --git a/configure.ac b/configure.ac
index 2c918218bb..c5d08a0285 100644
--- a/configure.ac
+++ b/configure.ac
@@ -6,7 +6,7 @@ define(_CLIENT_VERSION_REVISION, 99)
define(_CLIENT_VERSION_BUILD, 0)
define(_CLIENT_VERSION_IS_RELEASE, false)
define(_COPYRIGHT_YEAR, 2015)
-AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[info@bitcoin.org],[bitcoin])
+AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[https://github.com/bitcoin/bitcoin/issues],[bitcoin])
AC_CONFIG_SRCDIR([src/main.cpp])
AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
AC_CONFIG_AUX_DIR([build-aux])
@@ -590,17 +590,15 @@ fi
if test x$use_boost = xyes; then
-BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB"
+BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
dnl a working version is available, else fall back to sleep. sleep was removed
dnl after 1.56.
dnl If neither is available, abort.
-dnl If sleep_for is used, boost_chrono becomes a requirement.
-if test x$ax_cv_boost_chrono = xyes; then
TEMP_LIBS="$LIBS"
-LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB $LIBS"
+LIBS="$BOOST_LIBS $LIBS"
TEMP_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
@@ -613,12 +611,11 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
choke me
#endif
]])],
- [boost_sleep=yes; BOOST_LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB";
+ [boost_sleep=yes;
AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
[boost_sleep=no])
LIBS="$TEMP_LIBS"
CPPFLAGS="$TEMP_CPPFLAGS"
-fi
if test x$boost_sleep != xyes; then
TEMP_LIBS="$LIBS"
diff --git a/contrib/gitian-descriptors/gitian-osx-signer.yml b/contrib/gitian-descriptors/gitian-osx-signer.yml
index 1792f9de3f..afe03c7a22 100644
--- a/contrib/gitian-descriptors/gitian-osx-signer.yml
+++ b/contrib/gitian-descriptors/gitian-osx-signer.yml
@@ -33,5 +33,5 @@ script: |
tar -xf ${UNSIGNED}
./detached-sig-apply.sh ${UNSIGNED} signature.tar.gz
- ${WRAP_DIR}/genisoimage -no-cache-inodes -D -l -probe -V "Bitcoin-Qt" -no-pad -r -apple -o uncompressed.dmg signed-app
+ ${WRAP_DIR}/genisoimage -no-cache-inodes -D -l -probe -V "Bitcoin-Core" -no-pad -r -apple -o uncompressed.dmg signed-app
${WRAP_DIR}/dmg dmg uncompressed.dmg ${OUTDIR}/${SIGNED}
diff --git a/contrib/gitian-descriptors/gitian-osx.yml b/contrib/gitian-descriptors/gitian-osx.yml
index b401482c70..61eb5b1001 100644
--- a/contrib/gitian-descriptors/gitian-osx.yml
+++ b/contrib/gitian-descriptors/gitian-osx.yml
@@ -120,7 +120,7 @@ script: |
popd
make deploy
- ${WRAP_DIR}/dmg dmg Bitcoin-Qt.dmg ${OUTDIR}/${DISTNAME}-osx-unsigned.dmg
+ ${WRAP_DIR}/dmg dmg Bitcoin-Core.dmg ${OUTDIR}/${DISTNAME}-osx-unsigned.dmg
cd installed
find . -name "lib*.la" -delete
diff --git a/contrib/init/bitcoind.openrc b/contrib/init/bitcoind.openrc
index b0ac5e31e1..a94f03680d 100644
--- a/contrib/init/bitcoind.openrc
+++ b/contrib/init/bitcoind.openrc
@@ -19,7 +19,7 @@ BITCOIND_NICE=${BITCOIND_NICE:-${NICELEVEL:-0}}
BITCOIND_OPTS="${BITCOIND_OPTS:-${BITCOIN_OPTS}}"
name="Bitcoin Core Daemon"
-description="Bitcoin crypto-currency p2p network daemon"
+description="Bitcoin cryptocurrency P2P network daemon"
command="/usr/bin/bitcoind"
command_args="-pid=\"${BITCOIND_PIDFILE}\" \
diff --git a/contrib/linearize/example-linearize.cfg b/contrib/linearize/example-linearize.cfg
index e0fef13886..38da02e66c 100644
--- a/contrib/linearize/example-linearize.cfg
+++ b/contrib/linearize/example-linearize.cfg
@@ -4,13 +4,23 @@ rpcuser=someuser
rpcpassword=somepassword
host=127.0.0.1
port=8332
+#port=18332
# bootstrap.dat hashlist settings (linearize-hashes)
max_height=313000
# bootstrap.dat input/output settings (linearize-data)
+
+# mainnet
netmagic=f9beb4d9
+genesis=000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
input=/home/example/.bitcoin/blocks
+
+# testnet
+#netmagic=0b110907
+#genesis=000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943
+#input=/home/example/.bitcoin/testnet3/blocks
+
output_file=/home/example/Downloads/bootstrap.dat
hashlist=hashlist.txt
split_year=1
diff --git a/contrib/linearize/linearize-data.py b/contrib/linearize/linearize-data.py
index a3a1173b1f..7947c6bf72 100755
--- a/contrib/linearize/linearize-data.py
+++ b/contrib/linearize/linearize-data.py
@@ -205,7 +205,7 @@ class BlockDataCopier:
inMagic = inhdr[:4]
if (inMagic != self.settings['netmagic']):
- print("Invalid magic: " + inMagic)
+ print("Invalid magic: " + inMagic.encode('hex'))
return
inLenLE = inhdr[4:]
su = struct.unpack("<I", inLenLE)
@@ -265,6 +265,8 @@ if __name__ == '__main__':
if 'netmagic' not in settings:
settings['netmagic'] = 'f9beb4d9'
+ if 'genesis' not in settings:
+ settings['genesis'] = '000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f'
if 'input' not in settings:
settings['input'] = 'input'
if 'hashlist' not in settings:
@@ -291,7 +293,7 @@ if __name__ == '__main__':
blkindex = get_block_hashes(settings)
blkmap = mkblockmap(blkindex)
- if not "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f" in blkmap:
+ if not settings['genesis'] in blkmap:
print("Genesis block not found in hashlist")
else:
BlockDataCopier(settings, blkindex, blkmap).run()
diff --git a/contrib/macdeploy/DS_Store b/contrib/macdeploy/DS_Store
index 099960712a..ca19b207c0 100644
--- a/contrib/macdeploy/DS_Store
+++ b/contrib/macdeploy/DS_Store
Binary files differ
diff --git a/contrib/macdeploy/README.md b/contrib/macdeploy/README.md
index 0aa57b4777..6163734e62 100644
--- a/contrib/macdeploy/README.md
+++ b/contrib/macdeploy/README.md
@@ -11,5 +11,5 @@ This script should not be run manually, instead, after building as usual:
During the process, the disk image window will pop up briefly where the fancy
settings are applied. This is normal, please do not interfere.
-When finished, it will produce `Bitcoin-Qt.dmg`.
+When finished, it will produce `Bitcoin-Core.dmg`.
diff --git a/contrib/macdeploy/detached-sig-apply.sh b/contrib/macdeploy/detached-sig-apply.sh
index 7b3eb1b197..169f690438 100755
--- a/contrib/macdeploy/detached-sig-apply.sh
+++ b/contrib/macdeploy/detached-sig-apply.sh
@@ -1,11 +1,10 @@
#!/bin/sh
set -e
-UNSIGNED=$1
-SIGNATURE=$2
+UNSIGNED="$1"
+SIGNATURE="$2"
ARCH=x86_64
ROOTDIR=dist
-BUNDLE=${ROOTDIR}/Bitcoin-Qt.app
TEMPDIR=signed.temp
OUTDIR=signed-app
@@ -31,21 +30,21 @@ if [ -z "${CODESIGN_ALLOCATE}" ]; then
CODESIGN_ALLOCATE=${TEMPDIR}/codesign_allocate
fi
-for i in `find ${TEMPDIR} -name "*.sign"`; do
- SIZE=`stat -c %s ${i}`
- TARGET_FILE=`echo ${i} | sed 's/\.sign$//'`
+find ${TEMPDIR} -name "*.sign" | while read i; do
+ SIZE=`stat -c %s "${i}"`
+ TARGET_FILE="`echo "${i}" | sed 's/\.sign$//'`"
echo "Allocating space for the signature of size ${SIZE} in ${TARGET_FILE}"
- ${CODESIGN_ALLOCATE} -i ${TARGET_FILE} -a ${ARCH} ${SIZE} -o ${i}.tmp
+ ${CODESIGN_ALLOCATE} -i "${TARGET_FILE}" -a ${ARCH} ${SIZE} -o "${i}.tmp"
- OFFSET=`${PAGESTUFF} ${i}.tmp -p | tail -2 | grep offset | sed 's/[^0-9]*//g'`
+ OFFSET=`${PAGESTUFF} "${i}.tmp" -p | tail -2 | grep offset | sed 's/[^0-9]*//g'`
if [ -z ${QUIET} ]; then
echo "Attaching signature at offset ${OFFSET}"
fi
- dd if=$i of=${i}.tmp bs=1 seek=${OFFSET} count=${SIZE} 2>/dev/null
- mv ${i}.tmp ${TARGET_FILE}
- rm ${i}
+ dd if="$i" of="${i}.tmp" bs=1 seek=${OFFSET} count=${SIZE} 2>/dev/null
+ mv "${i}.tmp" "${TARGET_FILE}"
+ rm "${i}"
echo "Success."
done
mv ${TEMPDIR}/${ROOTDIR} ${OUTDIR}
diff --git a/contrib/macdeploy/detached-sig-create.sh b/contrib/macdeploy/detached-sig-create.sh
index aff4f08da8..fd7314bd7e 100755
--- a/contrib/macdeploy/detached-sig-create.sh
+++ b/contrib/macdeploy/detached-sig-create.sh
@@ -2,7 +2,7 @@
set -e
ROOTDIR=dist
-BUNDLE=${ROOTDIR}/Bitcoin-Qt.app
+BUNDLE="${ROOTDIR}/Bitcoin Core.app"
CODESIGN=codesign
TEMPDIR=sign.temp
TEMPLIST=${TEMPDIR}/signatures.txt
@@ -19,19 +19,19 @@ mkdir -p ${TEMPDIR}
${CODESIGN} -f --file-list ${TEMPLIST} "$@" "${BUNDLE}"
-for i in `grep -v CodeResources ${TEMPLIST}`; do
- TARGETFILE="${BUNDLE}/`echo ${i} | sed "s|.*${BUNDLE}/||"`"
- SIZE=`pagestuff $i -p | tail -2 | grep size | sed 's/[^0-9]*//g'`
- OFFSET=`pagestuff $i -p | tail -2 | grep offset | sed 's/[^0-9]*//g'`
+grep -v CodeResources < "${TEMPLIST}" | while read i; do
+ TARGETFILE="${BUNDLE}/`echo "${i}" | sed "s|.*${BUNDLE}/||"`"
+ SIZE=`pagestuff "$i" -p | tail -2 | grep size | sed 's/[^0-9]*//g'`
+ OFFSET=`pagestuff "$i" -p | tail -2 | grep offset | sed 's/[^0-9]*//g'`
SIGNFILE="${TEMPDIR}/${TARGETFILE}.sign"
- DIRNAME="`dirname ${SIGNFILE}`"
+ DIRNAME="`dirname "${SIGNFILE}"`"
mkdir -p "${DIRNAME}"
echo "Adding detached signature for: ${TARGETFILE}. Size: ${SIZE}. Offset: ${OFFSET}"
- dd if=$i of=${SIGNFILE} bs=1 skip=${OFFSET} count=${SIZE} 2>/dev/null
+ dd if="$i" of="${SIGNFILE}" bs=1 skip=${OFFSET} count=${SIZE} 2>/dev/null
done
-for i in `grep CodeResources ${TEMPLIST}`; do
- TARGETFILE="${BUNDLE}/`echo ${i} | sed "s|.*${BUNDLE}/||"`"
+grep CodeResources < "${TEMPLIST}" | while read i; do
+ TARGETFILE="${BUNDLE}/`echo "${i}" | sed "s|.*${BUNDLE}/||"`"
RESOURCE="${TEMPDIR}/${TARGETFILE}"
DIRNAME="`dirname "${RESOURCE}"`"
mkdir -p "${DIRNAME}"
@@ -41,6 +41,6 @@ done
rm ${TEMPLIST}
-tar -C ${TEMPDIR} -czf ${OUT} .
-rm -rf ${TEMPDIR}
+tar -C "${TEMPDIR}" -czf "${OUT}" .
+rm -rf "${TEMPDIR}"
echo "Created ${OUT}"
diff --git a/contrib/macdeploy/fancy.plist b/contrib/macdeploy/fancy.plist
index ef277a7f14..a333f5dccd 100644
--- a/contrib/macdeploy/fancy.plist
+++ b/contrib/macdeploy/fancy.plist
@@ -22,7 +22,7 @@
<integer>370</integer>
<integer>156</integer>
</array>
- <key>Bitcoin-Qt.app</key>
+ <key>Bitcoin Core.app</key>
<array>
<integer>128</integer>
<integer>156</integer>
diff --git a/contrib/macdeploy/macdeployqtplus b/contrib/macdeploy/macdeployqtplus
index 0eb6b2c84d..a625987ca7 100755
--- a/contrib/macdeploy/macdeployqtplus
+++ b/contrib/macdeploy/macdeployqtplus
@@ -155,7 +155,7 @@ class FrameworkInfo(object):
class ApplicationBundleInfo(object):
def __init__(self, path):
self.path = path
- appName = os.path.splitext(os.path.basename(path))[0]
+ appName = "Bitcoin-Qt"
self.binaryPath = os.path.join(path, "Contents", "MacOS", appName)
if not os.path.exists(self.binaryPath):
raise RuntimeError("Could not find bundle binary for " + path)
@@ -596,7 +596,7 @@ if os.path.exists("dist"):
# ------------------------------------------------
-target = os.path.join("dist", app_bundle)
+target = os.path.join("dist", "Bitcoin Core.app")
if verbose >= 2:
print "+ Copying source bundle +"
@@ -837,7 +837,7 @@ if config.dmg is not None:
items_positions.append(itemscript.substitute(params))
params = {
- "disk" : "Bitcoin-Qt",
+ "disk" : "Bitcoin-Core",
"window_bounds" : "300,300,800,620",
"icon_size" : "96",
"background_commands" : "",
diff --git a/depends/Makefile b/depends/Makefile
index 05ef33f2ee..ef5a20e6c3 100644
--- a/depends/Makefile
+++ b/depends/Makefile
@@ -91,12 +91,12 @@ include funcs.mk
toolchain_path=$($($(host_arch)_$(host_os)_native_toolchain)_prefixbin)
final_build_id_long+=$(shell $(build_SHA256SUM) config.site.in)
final_build_id+=$(shell echo -n $(final_build_id_long) | $(build_SHA256SUM) | cut -c-$(HASH_LENGTH))
-$(host_prefix)/.stamp_$(final_build_id): | $(native_packages) $(packages)
+$(host_prefix)/.stamp_$(final_build_id): $(native_packages) $(packages)
$(AT)rm -rf $(@D)
$(AT)mkdir -p $(@D)
- $(AT)echo copying packages: $|
+ $(AT)echo copying packages: $^
$(AT)echo to: $(@D)
- $(AT)cd $(@D); $(foreach package,$|, tar xf $($(package)_cached); )
+ $(AT)cd $(@D); $(foreach package,$^, tar xf $($(package)_cached); )
$(AT)touch $@
$(host_prefix)/share/config.site : config.site.in $(host_prefix)/.stamp_$(final_build_id)
@@ -121,8 +121,35 @@ $(host_prefix)/share/config.site : config.site.in $(host_prefix)/.stamp_$(final_
$< > $@
$(AT)touch $@
-install: $(host_prefix)/share/config.site
-download-one: $(all_sources)
+
+define check_or_remove_cached
+ mkdir -p $(BASE_CACHE)/$(host)/$(package) && cd $(BASE_CACHE)/$(host)/$(package); \
+ $(build_SHA256SUM) -c $($(package)_cached_checksum) >/dev/null 2>/dev/null || \
+ ( rm -f $($(package)_cached_checksum); \
+ if test -f "$($(package)_cached)"; then echo "Checksum mismatch for $(package). Forcing rebuild.."; rm -f $($(package)_cached_checksum) $($(package)_cached); fi )
+endef
+
+define check_or_remove_sources
+ mkdir -p $($(package)_source_dir); cd $($(package)_source_dir); \
+ $(build_SHA256SUM) -c $($(package)_fetched) >/dev/null 2>/dev/null || \
+ ( if test -f $($(package)_all_sources); then echo "Checksum missing or mismatched for $(package) source. Forcing re-download."; fi; \
+ rm -f $($(package)_all_sources) $($(1)_fetched))
+endef
+
+check-packages:
+ @$(foreach package,$(all_packages),$(call check_or_remove_cached,$(package));)
+check-sources:
+ @$(foreach package,$(all_packages),$(call check_or_remove_sources,$(package));)
+
+$(host_prefix)/share/config.site: check-packages
+
+check-packages: check-sources
+
+install: check-packages $(host_prefix)/share/config.site
+
+
+download-one: check-sources $(all_sources)
+
download-osx:
@$(MAKE) -s HOST=x86_64-apple-darwin11 download-one
download-linux:
@@ -130,4 +157,5 @@ download-linux:
download-win:
@$(MAKE) -s HOST=x86_64-w64-mingw32 download-one
download: download-osx download-linux download-win
-.PHONY: install cached download-one download-osx download-linux download-win download
+
+.PHONY: install cached download-one download-osx download-linux download-win download check-packages check-sources
diff --git a/depends/README.md b/depends/README.md
new file mode 100644
index 0000000000..2dc0b9e47e
--- /dev/null
+++ b/depends/README.md
@@ -0,0 +1,56 @@
+### Usage
+
+To build dependencies for the current arch+OS:
+
+ make
+
+To build for another arch/OS:
+
+ make HOST=host-platform-triplet
+
+For example:
+
+ make HOST=x86_64-w64-mingw32 -j4
+
+A prefix will be generated that's suitable for plugging into Bitcoin's
+configure. In the above example, a dir named i686-w64-mingw32 will be
+created. To use it for Bitcoin:
+
+ ./configure --prefix=`pwd`/depends/x86_64-w64-mingw32
+
+Common `host-platform-triplets` for cross compilation are:
+
+- `i686-w64-mingw32` for Win32
+- `x86_64-w64-mingw32` for Win64
+- `x86_64-apple-darwin11` for MacOSX
+- `arm-linux-gnueabihf` for Linux ARM
+
+No other options are needed, the paths are automatically configured.
+
+Dependency Options:
+The following can be set when running make: make FOO=bar
+
+ SOURCES_PATH: downloaded sources will be placed here
+ BASE_CACHE: built packages will be placed here
+ SDK_PATH: Path where sdk's can be found (used by OSX)
+ FALLBACK_DOWNLOAD_PATH: If a source file can't be fetched, try here before giving up
+ NO_QT: Don't download/build/cache qt and its dependencies
+ NO_WALLET: Don't download/build/cache libs needed to enable the wallet
+ NO_UPNP: Don't download/build/cache packages needed for enabling upnp
+ DEBUG: disable some optimizations and enable more runtime checking
+
+If some packages are not built, for example `make NO_WALLET=1`, the appropriate
+options will be passed to bitcoin's configure. In this case, `--disable-wallet`.
+
+Additional targets:
+
+ download: run 'make download' to fetch all sources without building them
+ download-osx: run 'make download-osx' to fetch all sources needed for osx builds
+ download-win: run 'make download-win' to fetch all sources needed for win builds
+ download-linux: run 'make download-linux' to fetch all sources needed for linux builds
+
+### Other documentation
+
+- [description.md](description.md): General description of the depends system
+- [packages.md](packages.md): Steps for adding packages
+
diff --git a/depends/README.usage b/depends/README.usage
deleted file mode 100644
index 24e1231d82..0000000000
--- a/depends/README.usage
+++ /dev/null
@@ -1,34 +0,0 @@
-To build dependencies for the current arch+OS:
- make
-To build for another arch/OS:
- make HOST=host-platform-triplet && make HOST=host-platform-triplet
- (For example: make HOST=i686-w64-mingw32 -j4)
-
-A prefix will be generated that's suitable for plugging into Bitcoin's
-configure. In the above example, a dir named i686-w64-mingw32 will be
-created. To use it for Bitcoin:
-
-./configure --prefix=`pwd`/depends/i686-w64-mingw32
-
-No other options are needed, the paths are automatically configured.
-
-Dependency Options:
-The following can be set when running make: make FOO=bar
-
-SOURCES_PATH: downloaded sources will be placed here
-BASE_CACHE: built packages will be placed here
-SDK_PATH: Path where sdk's can be found (used by OSX)
-FALLBACK_DOWNLOAD_PATH: If a source file can't be fetched, try here before giving up
-NO_QT: Don't download/build/cache qt and its dependencies
-NO_WALLET: Don't download/build/cache libs needed to enable the wallet
-NO_UPNP: Don't download/build/cache packages needed for enabling upnp
-DEBUG: disable some optimizations and enable more runtime checking
-
-If some packages are not built, for example 'make NO_WALLET=1', the appropriate
-options will be passed to bitcoin's configure. In this case, --disable-wallet.
-
-Additional targets:
-download: run 'make download' to fetch all sources without building them
-download-osx: run 'make download-osx' to fetch all sources needed for osx builds
-download-win: run 'make download-win' to fetch all sources needed for win builds
-download-linux: run 'make download-linux' to fetch all sources needed for linux builds
diff --git a/depends/README b/depends/description.md
index 55e7222697..74f9ef3f20 100644
--- a/depends/README
+++ b/depends/description.md
@@ -1,9 +1,7 @@
-This is a system of building and caching dependencies necessary for building
-Bitcoin.
-
+This is a system of building and caching dependencies necessary for building Bitcoin.
There are several features that make it different from most similar systems:
-- It is designed to be builder and host agnostic
+### It is designed to be builder and host agnostic
In theory, binaries for any target OS/architecture can be created, from a
builder running any OS/architecture. In practice, build-side tools must be
@@ -11,18 +9,18 @@ specified when the defaults don't fit, and packages must be amended to work
on new hosts. For now, a build architecture of x86_64 is assumed, either on
Linux or OSX.
-- No reliance on timestamps
+### No reliance on timestamps
File presence is used to determine what needs to be built. This makes the
results distributable and easily digestable by automated builders.
-- Each build only has its specified dependencies available at build-time.
+### Each build only has its specified dependencies available at build-time.
For each build, the sysroot is wiped and the (recursive) dependencies are
installed. This makes each build deterministic, since there will never be any
unknown files available to cause side-effects.
-- Each package is cached and only rebuilt as needed.
+### Each package is cached and only rebuilt as needed.
Before building, a unique build-id is generated for each package. This id
consists of a hash of all files used to build the package (Makefiles, packages,
@@ -32,7 +30,7 @@ any other package that depends on it. If any of the main makefiles (Makefile,
funcs.mk, etc) are changed, all packages will be rebuilt. After building, the
results are cached into a tarball that can be re-used and distributed.
-- Package build results are (relatively) deterministic.
+### Package build results are (relatively) deterministic.
Each package is configured and patched so that it will yield the same
build-results with each consequent build, within a reasonable set of
@@ -41,13 +39,13 @@ beyond the scope of this system. Additionally, the toolchain itself must be
capable of deterministic results. When revisions are properly bumped, a cached
build should represent an exact single payload.
-- Sources are fetched and verified automatically
+### Sources are fetched and verified automatically
Each package must define its source location and checksum. The build will fail
if the fetched source does not match. Sources may be pre-seeded and/or cached
as desired.
-- Self-cleaning
+### Self-cleaning
Build and staging dirs are wiped after use, and any previous version of a
cached result is removed following a successful build. Automated builders
diff --git a/depends/funcs.mk b/depends/funcs.mk
index b407737f7f..050a9b1321 100644
--- a/depends/funcs.mk
+++ b/depends/funcs.mk
@@ -53,12 +53,14 @@ $(1)_staging_prefix_dir:=$$($(1)_staging_dir)$($($(1)_type)_prefix)
$(1)_extract_dir:=$(base_build_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id)
$(1)_download_dir:=$(base_download_dir)/$(1)-$($(1)_version)
$(1)_build_dir:=$$($(1)_extract_dir)/$$($(1)_build_subdir)
+$(1)_cached_checksum:=$(BASE_CACHE)/$(host)/$(1)/$(1)-$($(1)_version)-$($(1)_build_id).tar.gz.hash
$(1)_patch_dir:=$(base_build_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id)/.patches-$($(1)_build_id)
$(1)_prefixbin:=$($($(1)_type)_prefix)/bin/
$(1)_cached:=$(BASE_CACHE)/$(host)/$(1)/$(1)-$($(1)_version)-$($(1)_build_id).tar.gz
+$(1)_all_sources=$($(1)_file_name) $($(1)_extra_sources)
#stamps
-$(1)_fetched=$$($(1)_source_dir)/download-stamps/.stamp_fetched-$(1)-$($(1)_file_name)
+$(1)_fetched=$(SOURCES_PATH)/download-stamps/.stamp_fetched-$(1)-$($(1)_file_name).hash
$(1)_extracted=$$($(1)_extract_dir)/.stamp_extracted
$(1)_preprocessed=$$($(1)_extract_dir)/.stamp_preprocessed
$(1)_cleaned=$$($(1)_extract_dir)/.stamp_cleaned
@@ -154,7 +156,10 @@ endef
define int_add_cmds
$($(1)_fetched):
$(AT)mkdir -p $$(@D) $(SOURCES_PATH)
+ $(AT)rm -f $$@
+ $(AT)touch $$@
$(AT)cd $$(@D); $(call $(1)_fetch_cmds,$(1))
+ $(AT)cd $($(1)_source_dir); $(foreach source,$($(1)_all_sources),$(build_SHA256SUM) $(source) >> $$(@);)
$(AT)touch $$@
$($(1)_extracted): | $($(1)_fetched)
$(AT)echo Extracting $(1)...
@@ -195,10 +200,12 @@ $($(1)_cached): | $($(1)_dependencies) $($(1)_postprocessed)
$(AT)rm -rf $$(@D) && mkdir -p $$(@D)
$(AT)mv $$($(1)_staging_dir)/$$(@F) $$(@)
$(AT)rm -rf $($(1)_staging_dir)
+$($(1)_cached_checksum): $($(1)_cached)
+ $(AT)cd $$(@D); $(build_SHA256SUM) $$(<F) > $$(@)
.PHONY: $(1)
-$(1): | $($(1)_cached)
-.SECONDARY: $($(1)_postprocessed) $($(1)_staged) $($(1)_built) $($(1)_configured) $($(1)_preprocessed) $($(1)_extracted) $($(1)_fetched)
+$(1): | $($(1)_cached_checksum)
+.SECONDARY: $($(1)_cached) $($(1)_postprocessed) $($(1)_staged) $($(1)_built) $($(1)_configured) $($(1)_preprocessed) $($(1)_extracted) $($(1)_fetched)
endef
diff --git a/depends/README.packages b/depends/packages.md
index 5ab7ed7dee..7c80362509 100644
--- a/depends/README.packages
+++ b/depends/packages.md
@@ -4,119 +4,137 @@ variables, and defining build commands.
The package "mylib" will be used here as an example
General tips:
-mylib_foo is written as $(package)_foo in order to make recipes more similar.
+- mylib_foo is written as $(package)_foo in order to make recipes more similar.
-Identifiers:
+## Identifiers
Each package is required to define at least these variables:
- $(package)_version:
+
+ $(package)_version:
Version of the upstream library or program. If there is no version, a
placeholder such as 1.0 can be used.
- $(package)_download_path:
+
+ $(package)_download_path:
Location of the upstream source, without the file-name. Usually http or
ftp.
- $(package)_file_name:
+
+ $(package)_file_name:
The upstream source filename available at the download path.
- $(package)_sha256_hash:
+
+ $(package)_sha256_hash:
The sha256 hash of the upstream file
These variables are optional:
- $(package)_build_subdir:
+
+ $(package)_build_subdir:
cd to this dir before running configure/build/stage commands.
- $(package)_download_file:
+
+ $(package)_download_file:
The file-name of the upstream source if it differs from how it should be
stored locally. This can be used to avoid storing file-names with strange
characters.
- $(package)_dependencies:
+
+ $(package)_dependencies:
Names of any other packages that this one depends on.
- $(package)_patches:
+
+ $(package)_patches:
Filenames of any patches needed to build the package
+ $(package)_extra_sources:
+ Any extra files that will be fetched via $(package)_fetch_cmds. These are
+ specified so that they can be fetched and verified via 'make download'.
+
-Build Variables:
+## Build Variables:
After defining the main identifiers, build variables may be added or customized
before running the build commands. They should be added to a function called
$(package)_set_vars. For example:
-define $(package)_set_vars
-...
-endef
+ define $(package)_set_vars
+ ...
+ endef
Most variables can be prefixed with the host, architecture, or both, to make
the modifications specific to that case. For example:
- Universal: $(package)_cc=gcc
- Linux only: $(package)_linux_cc=gcc
- x86_64 only: $(package)_x86_64_cc = gcc
- x86_64 linux only: $(package)_x86_64_linux_cc = gcc
+ Universal: $(package)_cc=gcc
+ Linux only: $(package)_linux_cc=gcc
+ x86_64 only: $(package)_x86_64_cc = gcc
+ x86_64 linux only: $(package)_x86_64_linux_cc = gcc
These variables may be set to override or append their default values.
- $(package)_cc
- $(package)_cxx
- $(package)_objc
- $(package)_objcxx
- $(package)_ar
- $(package)_ranlib
- $(package)_libtool
- $(package)_nm
- $(package)_cflags
- $(package)_cxxflags
- $(package)_ldflags
- $(package)_cppflags
- $(package)_config_env
- $(package)_build_env
- $(package)_stage_env
- $(package)_build_opts
- $(package)_config_opts
+
+ $(package)_cc
+ $(package)_cxx
+ $(package)_objc
+ $(package)_objcxx
+ $(package)_ar
+ $(package)_ranlib
+ $(package)_libtool
+ $(package)_nm
+ $(package)_cflags
+ $(package)_cxxflags
+ $(package)_ldflags
+ $(package)_cppflags
+ $(package)_config_env
+ $(package)_build_env
+ $(package)_stage_env
+ $(package)_build_opts
+ $(package)_config_opts
The *_env variables are used to add environment variables to the respective
commands.
Many variables respect a debug/release suffix as well, in order to use them for
only the appropriate build config. For example:
- $(package)_cflags_release = -O3
- $(package)_cflags_i686_debug = -g
- $(package)_config_opts_release = --disable-debug
+
+ $(package)_cflags_release = -O3
+ $(package)_cflags_i686_debug = -g
+ $(package)_config_opts_release = --disable-debug
These will be used in addition to the options that do not specify
debug/release. All builds are considered to be release unless DEBUG=1 is set by
-the user.
+the user. Other variables may be defined as needed.
-Other variables may be defined as needed.
-
-Build commands:
+## Build commands:
For each build, a unique build dir and staging dir are created. For example,
- work/build/mylib/1.0-1adac830f6e and work/staging/mylib/1.0-1adac830f6e.
+ `work/build/mylib/1.0-1adac830f6e` and `work/staging/mylib/1.0-1adac830f6e`.
The following build commands are available for each recipe:
- $(package)_fetch_cmds:
+ $(package)_fetch_cmds:
Runs from: build dir
Fetch the source file. If undefined, it will be fetched and verified
against its hash.
- $(package)_extract_cmds:
+
+ $(package)_extract_cmds:
Runs from: build dir
Verify the source file against its hash and extract it. If undefined, the
source is assumed to be a tarball.
- $(package)_preprocess_cmds:
+
+ $(package)_preprocess_cmds:
Runs from: build dir/$(package)_build_subdir
Preprocess the source as necessary. If undefined, does nothing.
- $(package)_config_cmds:
+
+ $(package)_config_cmds:
Runs from: build dir/$(package)_build_subdir
Configure the source. If undefined, does nothing.
- $(package)_build_cmds:
+
+ $(package)_build_cmds:
Runs from: build dir/$(package)_build_subdir
Build the source. If undefined, does nothing.
- $(package)_stage_cmds:
+
+ $(package)_stage_cmds:
Runs from: build dir/$(package)_build_subdir
Stage the build results. If undefined, does nothing.
The following variables are available for each recipe:
- $(1)_staging_dir: package's destination sysroot path
- $(1)_staging_prefix_dir: prefix path inside of the package's staging dir
- $(1)_extract_dir: path to the package's extracted sources
- $(1)_build_dir: path where configure/build/stage commands will be run
- $(1)_patch_dir: path where the package's patches (if any) are found
+
+ $(1)_staging_dir: package's destination sysroot path
+ $(1)_staging_prefix_dir: prefix path inside of the package's staging dir
+ $(1)_extract_dir: path to the package's extracted sources
+ $(1)_build_dir: path where configure/build/stage commands will be run
+ $(1)_patch_dir: path where the package's patches (if any) are found
Notes on build commands:
@@ -125,4 +143,5 @@ configure step to (usually) correctly configure automatically. Any
$($(package)_config_opts) will be appended.
Most autotools projects can be properly staged using:
- $(MAKE) DESTDIR=$($(package)_staging_dir) install
+
+ $(MAKE) DESTDIR=$($(package)_staging_dir) install
diff --git a/depends/packages/native_cctools.mk b/depends/packages/native_cctools.mk
index 951ad4fb29..1c1bcf199a 100644
--- a/depends/packages/native_cctools.mk
+++ b/depends/packages/native_cctools.mk
@@ -9,6 +9,8 @@ $(package)_clang_download_path=http://llvm.org/releases/$($(package)_clang_versi
$(package)_clang_download_file=clang+llvm-$($(package)_clang_version)-amd64-Ubuntu-12.04.2.tar.gz
$(package)_clang_file_name=clang-llvm-$($(package)_clang_version)-amd64-Ubuntu-12.04.2.tar.gz
$(package)_clang_sha256_hash=60d8f69f032d62ef61bf527857ebb933741ec3352d4d328c5516aa520662dab7
+$(package)_extra_sources=$($(package)_clang_file_name)
+
define $(package)_fetch_cmds
$(call fetch_file,$(package),$($(package)_download_path),$($(package)_download_file),$($(package)_file_name),$($(package)_sha256_hash)) && \
$(call fetch_file,$(package),$($(package)_clang_download_path),$($(package)_clang_download_file),$($(package)_clang_file_name),$($(package)_clang_sha256_hash))
diff --git a/doc/README.md b/doc/README.md
index 0ade8f9923..22b7065f62 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -43,6 +43,7 @@ The following are developer notes on how to build Bitcoin on your native platfor
- [OSX Build Notes](build-osx.md)
- [Unix Build Notes](build-unix.md)
+- [Gitian Building Guide](gitian-building.md)
Development
---------------------
@@ -55,6 +56,9 @@ The Bitcoin repo's [root README](https://github.com/bitcoin/bitcoin/blob/master/
- [Source Code Documentation (External Link)](https://dev.visucore.com/bitcoin/doxygen/)
- [Translation Process](translation_process.md)
- [Unit Tests](unit-tests.md)
+- [Unauthenticated REST Interface](REST-interface.md)
+- [BIPS](bips.md)
+- [Dnsseed Policy](dnsseed-policy.md)
### Resources
* Discuss on the [BitcoinTalk](https://bitcointalk.org/) forums, in the [Development & Technical Discussion board](https://bitcointalk.org/index.php?board=6.0).
diff --git a/doc/README_osx.txt b/doc/README_osx.txt
index 6c0c21c190..e8af46e0e4 100644
--- a/doc/README_osx.txt
+++ b/doc/README_osx.txt
@@ -1,6 +1,6 @@
Deterministic OSX Dmg Notes.
-Working OSX DMG's are created in Linux by combining a recent clang,
+Working OSX DMGs are created in Linux by combining a recent clang,
the Apple's binutils (ld, ar, etc), and DMG authoring tools.
Apple uses clang extensively for development and has upstreamed the necessary
@@ -58,7 +58,7 @@ libdmg-hfsplus project is used to compress it. There are several bugs in this
tool and its maintainer has seemingly abandoned the project. It has been forked
and is available (with fixes) here: https://github.com/theuni/libdmg-hfsplus .
-The 'dmg' tool has the ability to create DMG's from scratch as well, but this
+The 'dmg' tool has the ability to create DMGs from scratch as well, but this
functionality is broken. Only the compression feature is currently used.
Ideally, the creation could be fixed and genisoimage would no longer be necessary.
diff --git a/doc/REST-interface.md b/doc/REST-interface.md
index f14aed7287..0b718d664e 100644
--- a/doc/REST-interface.md
+++ b/doc/REST-interface.md
@@ -5,15 +5,18 @@ The REST API can be enabled with the `-rest` option.
Supported API
-------------
-`GET /rest/tx/TX-HASH.{bin|hex|json}`
+
+####Transactions
+`GET /rest/tx/<TX-HASH>.<bin|hex|json>`
Given a transaction hash,
Returns a transaction, in binary, hex-encoded binary or JSON formats.
For full TX query capability, one must enable the transaction index via "txindex=1" command line / configuration option.
-`GET /rest/block/BLOCK-HASH.{bin|hex|json}`
-`GET /rest/block/notxdetails/BLOCK-HASH.{bin|hex|json}`
+####Blocks
+`GET /rest/block/<BLOCK-HASH>.<bin|hex|json>`
+`GET /rest/block/notxdetails/<BLOCK-HASH>.<bin|hex|json>`
Given a block hash,
Returns a block, in binary, hex-encoded binary or JSON formats.
@@ -22,6 +25,15 @@ The HTTP request and response are both handled entirely in-memory, thus making m
With the /notxdetails/ option JSON response will only contain the transaction hash instead of the complete transaction details. The option only affects the JSON response.
+####Blockheaders
+`GET /rest/headers/<COUNT>/<BLOCK-HASH>.<bin|hex>`
+
+Given a block hash,
+Returns <COUNT> amount of blockheaders in upward direction.
+
+JSON is not supported.
+
+####Chaininfos
`GET /rest/chaininfo.json`
Returns various state info regarding block chain processing.
@@ -34,6 +46,39 @@ Only supports JSON as output format.
* verificationprogress : (numeric) estimate of verification progress [0..1]
* chainwork : (string) total amount of work in active chain, in hexadecimal
+####Query UTXO set
+`GET /rest/getutxos.<bin|hex|json>`
+
+The getutxo command allows querying of the UTXO set given a set of outpoints.
+See BIP64 for input and output serialisation:
+https://github.com/bitcoin/bips/blob/master/bip-0064.mediawiki
+
+Example:
+```
+$ curl --data '{"checkmempool":true,"outpoints":[{"txid":"b2cdfd7b89def827ff8af7cd9bff7627ff72e5e8b0f71210f92ea7a4000c5d75","n":0}]}' localhost:18332/rest/getutxos.json 2>/dev/null | json_pp
+{
+ "chaintipHash" : "00000000fb01a7f3745a717f8caebee056c484e6e0bfe4a9591c235bb70506fb",
+ "chainHeight" : 325347,
+ "utxos" : [
+ {
+ "scriptPubKey" : {
+ "addresses" : [
+ "mi7as51dvLJsizWnTMurtRmrP8hG2m1XvD"
+ ],
+ "type" : "pubkeyhash",
+ "hex" : "76a9141c7cebb529b86a04c683dfa87be49de35bcf589e88ac",
+ "reqSigs" : 1,
+ "asm" : "OP_DUP OP_HASH160 1c7cebb529b86a04c683dfa87be49de35bcf589e OP_EQUALVERIFY OP_CHECKSIG"
+ },
+ "value" : 8.8687,
+ "height" : 2147483647,
+ "txvers" : 1
+ }
+ ],
+ "bitmap" : "1"
+}
+```
+
Risks
-------------
Running a webbrowser on the same node with a REST enabled bitcoind can be a risk. Accessing prepared XSS websites could read out tx/block data of your node by placing links like `<script src="http://127.0.0.1:8332/rest/tx/1234567890.json">` which might break the nodes privacy.
diff --git a/doc/assets-attribution.md b/doc/assets-attribution.md
index c860cdc534..ebba64a61a 100644
--- a/doc/assets-attribution.md
+++ b/doc/assets-attribution.md
@@ -22,6 +22,7 @@ The following is a list of assets used in the bitcoin source and their proper at
src/qt/res/icons/receive.png, src/qt/res/icons/remove.png,
src/qt/res/icons/send.png, src/qt/res/icons/synced.png,
src/qt/res/icons/transaction*.png, src/qt/res/icons/tx_output.png,
+ src/qt/res/icons/warning.png
Jonas Schnelli
-----------------------
diff --git a/doc/bips.md b/doc/bips.md
index 579eadfff3..90e98ed419 100644
--- a/doc/bips.md
+++ b/doc/bips.md
@@ -11,7 +11,7 @@ BIPs that are implemented by Bitcoin Core (up-to-date up to **v0.10.0**):
* [`BIP 31`](https://github.com/bitcoin/bips/blob/master/bip-0031.mediawiki): The 'pong' protocol message (and the protocol version bump to 60001) has been implemented since **v0.6.1** ([PR #1081](https://github.com/bitcoin/bitcoin/pull/1081)).
* [`BIP 34`](https://github.com/bitcoin/bips/blob/master/bip-0034.mediawiki): The rule that requires blocks to contain their height (number) in the coinbase input, and the introduction of version 2 blocks has been implemented since **v0.7.0**. The rule took effect for version 2 blocks as of *block 224413* (March 5th 2013), and version 1 blocks are no longer allowed since *block 227931* (March 25th 2013) ([PR #1526](https://github.com/bitcoin/bitcoin/pull/1526)).
* [`BIP 35`](https://github.com/bitcoin/bips/blob/master/bip-0035.mediawiki): The 'mempool' protocol message (and the protocol version bump to 60002) has been implemented since **v0.7.0** ([PR #1641](https://github.com/bitcoin/bitcoin/pull/1641)).
-* [`BIP 37`](https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki): The bloom filtering for transaction relaying, partial merkle trees for blocks , and the protocol version bump to 70001 (enabling low-bandwidth SPV clients) has been implemented since **v0.8.0** ([PR #1795](https://github.com/bitcoin/bitcoin/pull/1795)).
+* [`BIP 37`](https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki): The bloom filtering for transaction relaying, partial merkle trees for blocks, and the protocol version bump to 70001 (enabling low-bandwidth SPV clients) has been implemented since **v0.8.0** ([PR #1795](https://github.com/bitcoin/bitcoin/pull/1795)).
* [`BIP 42`](https://github.com/bitcoin/bips/blob/master/bip-0042.mediawiki): The bug that would have caused the subsidy schedule to resume after block 13440000 was fixed in **v0.9.2** ([PR #3842](https://github.com/bitcoin/bitcoin/pull/3842)).
* [`BIP 61`](https://github.com/bitcoin/bips/blob/master/bip-0061.mediawiki): The 'reject' protocol message (and the protocol version bump to 70002) was added in **v0.9.0** ([PR #3185](https://github.com/bitcoin/bitcoin/pull/3185)).
* [`BIP 66`](https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki): The strict DER rules and associated version 3 blocks have been implemented since **v0.10.0** ([PR #5713](https://github.com/bitcoin/bitcoin/pull/5713)).
diff --git a/doc/build-osx.md b/doc/build-osx.md
index d6e93cb23d..02adff0615 100644
--- a/doc/build-osx.md
+++ b/doc/build-osx.md
@@ -1,6 +1,6 @@
Mac OS X Build Instructions and Notes
====================================
-This guide will show you how to build bitcoind(headless client) for OSX.
+This guide will show you how to build bitcoind (headless client) for OSX.
Notes
-----
@@ -100,7 +100,7 @@ Creating a release build
------------------------
You can ignore this section if you are building `bitcoind` for your own use.
-bitcoind/bitcoin-cli binaries are not included in the Bitcoin-Qt.app bundle.
+bitcoind/bitcoin-cli binaries are not included in the Bitcoin-Core.app bundle.
If you are building `bitcoind` or `Bitcoin-Qt` for others, your build machine should be set up
as follows for maximum compatibility:
@@ -111,7 +111,7 @@ All dependencies should be compiled with these flags:
-arch x86_64
-isysroot $(xcode-select --print-path)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk
-Once dependencies are compiled, see [doc/release-process.md](release-process.md) for how the Bitcoin-Qt.app
+Once dependencies are compiled, see [doc/release-process.md](release-process.md) for how the Bitcoin-Core.app
bundle is packaged and signed to create the .dmg disk image that is distributed.
Running
diff --git a/doc/build-unix.md b/doc/build-unix.md
index 0984f689a8..f70bf7f1fe 100644
--- a/doc/build-unix.md
+++ b/doc/build-unix.md
@@ -195,12 +195,12 @@ Hardening enables the following features:
* Position Independent Executable
Build position independent code to take advantage of Address Space Layout Randomization
- offered by some kernels. An attacker who is able to cause execution of code at an arbitrary
- memory location is thwarted if he or she doesn't know where anything useful is located.
+ offered by some kernels. Attackers who can cause execution of code at an arbitrary memory
+ location are thwarted if they don't know where anything useful is located.
The stack and heap are randomly located by default but this allows the code section to be
randomly located as well.
- On an Amd64 processor where a library was not compiled with -fPIC, this will cause an error
+ On an AMD64 processor where a library was not compiled with -fPIC, this will cause an error
such as: "relocation R_X86_64_32 against `......' can not be used when making a shared object;"
To test that you have built PIE executable, install scanelf, part of paxutils, and use:
diff --git a/doc/developer-notes.md b/doc/developer-notes.md
index eaeb90da1d..8f7db31d59 100644
--- a/doc/developer-notes.md
+++ b/doc/developer-notes.md
@@ -53,7 +53,7 @@ bool function(int arg1, const char *arg2)
```
A complete list of `@xxx` commands can be found at http://www.stack.nl/~dimitri/doxygen/manual/commands.html.
As Doxygen recognizes the comments by the delimiters (`/**` and `*/` in this case), you don't
-*need* to provide any commands for a comment to be valid, just a description text is fine.
+*need* to provide any commands for a comment to be valid; just a description text is fine.
To describe a class use the same construct above the class definition:
```c++
@@ -175,7 +175,7 @@ Threads
Pull Request Terminology
------------------------
-Concept ACK - Agree with the idea and overall direction, but haven't reviewed the code changes or tested them.
+Concept ACK - Agree with the idea and overall direction, but have neither reviewed nor tested the code changes.
utACK (untested ACK) - Reviewed and agree with the code changes but haven't actually tested them.
@@ -183,4 +183,4 @@ Tested ACK - Reviewed the code changes and have verified the functionality or bu
ACK - A loose ACK can be confusing. It's best to avoid them unless it's a documentation/comment only change in which case there is nothing to test/verify; therefore the tested/untested distinction is not there.
-NACK - Disagree with the code changes/concept. Should be accompanied by an explanation.
+NACK - Disagree with the code changes/concept. Should be accompanied by an explanation.
diff --git a/doc/dnsseed-policy.md b/doc/dnsseed-policy.md
index f15ff44e5d..506e171153 100644
--- a/doc/dnsseed-policy.md
+++ b/doc/dnsseed-policy.md
@@ -10,15 +10,14 @@ Other implementations of Bitcoin software may also use the same
seeds and may be more exposed. In light of this exposure, this
document establishes some basic expectations for operating dnsseeds.
-0. A DNS seed operating organization or person is expected
-to follow good host security practices and maintain control of
-their serving infrastructure and not sell or transfer control of their
-DNS seed. Any hosting services contracted by the operator are
-equally expected to uphold these expectations.
+0. A DNS seed operating organization or person is expected to follow good
+host security practices, maintain control of applicable infrastructure,
+and not sell or transfer control of the DNS seed. Any hosting services
+contracted by the operator are equally expected to uphold these expectations.
1. The DNS seed results must consist exclusively of fairly selected and
functioning Bitcoin nodes from the public network to the best of the
-operators understanding and capability.
+operator's understanding and capability.
2. For the avoidance of doubt, the results may be randomized but must not
single-out any group of hosts to receive different results unless due to an
@@ -28,7 +27,7 @@ urgent technical necessity and disclosed.
4. Any logging of DNS queries should be only that which is necessary
for the operation of the service or urgent health of the Bitcoin
-network and must not be retained longer than necessary or disclosed
+network and must not be retained longer than necessary nor disclosed
to any third party.
5. Information gathered as a result of the operators node-spidering
diff --git a/doc/gitian-building.md b/doc/gitian-building.md
index d285fffdbb..1fa5b5f989 100644
--- a/doc/gitian-building.md
+++ b/doc/gitian-building.md
@@ -87,7 +87,7 @@ After creating the VM, we need to configure it.
![](gitian-building/network_settings.png)
-- Click `Advanced`, then `Port Forwarding`. We want to set up a port through where we can reach the VM to get files in and out.
+- Click `Advanced`, then `Port Forwarding`. We want to set up a port through which we can reach the VM to get files in and out.
- Create a new rule by clicking the plus icon.
![](gitian-building/port_forwarding_rules.png)
@@ -111,7 +111,7 @@ Installing Debian
This section will explain how to install Debian on the newly created VM.
-- Choose the non-graphical installer. We do not need the graphical environment, it will only increase installation time and disk usage.
+- Choose the non-graphical installer. We do not need the graphical environment; it will only increase installation time and disk usage.
![](gitian-building/debian_install_1_boot_menu.png)
@@ -144,7 +144,7 @@ and proceed, just press `Enter`. To select a different button, press `Tab`.
![](gitian-building/debian_install_9_user_password.png)
-- The installer will set up the clock using a time server, this process should be automatic
+- The installer will set up the clock using a time server; this process should be automatic
- Set up the clock: choose a time zone (depends on the locale settings that you picked earlier; specifics don't matter)
![](gitian-building/debian_install_10_configure_clock.png)
@@ -371,7 +371,7 @@ COMMIT=2014_03_windows_unicode_path
Signing externally
-------------------
-If you want to do the PGP signing on another device that's also possible; just define `SIGNER` as mentioned
+If you want to do the PGP signing on another device, that's also possible; just define `SIGNER` as mentioned
and follow the steps in the build process as normal.
gpg: skipped "laanwj": secret key not available
@@ -393,4 +393,4 @@ Uploading signatures
After building and signing you can push your signatures (both the `.assert` and `.assert.sig` files) to the
[bitcoin/gitian.sigs](https://github.com/bitcoin/gitian.sigs/) repository, or if that's not possible create a pull
-request. You can also mail the files to me (laanwj@gmail.com) and I'll commit them.
+request. You can also mail the files to Wladimir (laanwj@gmail.com) and he will commit them.
diff --git a/doc/init.md b/doc/init.md
index 871bdc8123..1f206a6c02 100644
--- a/doc/init.md
+++ b/doc/init.md
@@ -63,7 +63,7 @@ can then be controlled by group membership.
4a) systemd
-Installing this .service file consists on just copying it to
+Installing this .service file consists of just copying it to
/usr/lib/systemd/system directory, followed by the command
"systemctl daemon-reload" in order to update running systemd configuration.
diff --git a/doc/release-notes/release-notes-0.10.1.md b/doc/release-notes/release-notes-0.10.1.md
new file mode 100644
index 0000000000..5e939600a0
--- /dev/null
+++ b/doc/release-notes/release-notes-0.10.1.md
@@ -0,0 +1,143 @@
+Bitcoin Core version 0.10.1 is now available from:
+
+ <https://bitcoin.org/bin/bitcoin-core-0.10.1/>
+
+This is a new minor version release, bringing bug fixes and translation
+updates. It is recommended to upgrade to this version.
+
+Please report bugs using the issue tracker at github:
+
+ <https://github.com/bitcoin/bitcoin/issues>
+
+Upgrading and downgrading
+=========================
+
+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).
+
+Downgrade warning
+------------------
+
+Because release 0.10.0 and later makes use of headers-first synchronization and
+parallel block download (see further), the block files and databases are not
+backwards-compatible with pre-0.10 versions of Bitcoin Core or other software:
+
+* Blocks will be stored on disk out of order (in the order they are
+received, really), which makes it incompatible with some tools or
+other programs. Reindexing using earlier versions will also not work
+anymore as a result of this.
+
+* The block index database will now hold headers for which no block is
+stored on disk, which earlier versions won't support.
+
+If you want to be able to downgrade smoothly, make a backup of your entire data
+directory. Without this your node will need start syncing (or importing from
+bootstrap.dat) anew afterwards. It is possible that the data from a completely
+synchronised 0.10 node may be usable in older versions as-is, but this is not
+supported and may break as soon as the older version attempts to reindex.
+
+This does not affect wallet forward or backward compatibility.
+
+Notable changes
+===============
+
+This is a minor release and hence there are no notable changes.
+For the notable changes in 0.10, refer to the release notes for the
+0.10.0 release at https://github.com/bitcoin/bitcoin/blob/v0.10.0/doc/release-notes.md
+
+0.10.1 Change log
+=================
+
+Detailed release notes follow. This overview includes changes that affect external
+behavior, not code moves, refactors or string updates.
+
+RPC:
+- `7f502be` fix crash: createmultisig and addmultisigaddress
+- `eae305f` Fix missing lock in submitblock
+
+Block (database) and transaction handling:
+- `1d2cdd2` Fix InvalidateBlock to add chainActive.Tip to setBlockIndexCandidates
+- `c91c660` fix InvalidateBlock to repopulate setBlockIndexCandidates
+- `002c8a2` fix possible block db breakage during re-index
+- `a1f425b` Add (optional) consistency check for the block chain data structures
+- `1c62e84` Keep mempool consistent during block-reorgs
+- `57d1f46` Fix CheckBlockIndex for reindex
+- `bac6fca` Set nSequenceId when a block is fully linked
+
+P2P protocol and network code:
+- `78f64ef` don't trickle for whitelisted nodes
+- `ca301bf` Reduce fingerprinting through timestamps in 'addr' messages.
+- `200f293` Ignore getaddr messages on Outbound connections.
+- `d5d8998` Limit message sizes before transfer
+- `aeb9279` Better fingerprinting protection for non-main-chain getdatas.
+- `cf0218f` Make addrman's bucket placement deterministic (countermeasure 1 against eclipse attacks, see http://cs-people.bu.edu/heilman/eclipse/)
+- `0c6f334` Always use a 50% chance to choose between tried and new entries (countermeasure 2 against eclipse attacks)
+- `214154e` Do not bias outgoing connections towards fresh addresses (countermeasure 2 against eclipse attacks)
+- `aa587d4` Scale up addrman (countermeasure 6 against eclipse attacks)
+- `139cd81` Cap nAttempts penalty at 8 and switch to pow instead of a division loop
+
+Validation:
+- `d148f62` Acquire CCheckQueue's lock to avoid race condition
+
+Build system:
+- `8752b5c` 0.10 fix for crashes on OSX 10.6
+
+Wallet:
+- N/A
+
+GUI:
+- `2c08406` some mac specifiy cleanup (memory handling, unnecessary code)
+- `81145a6` fix OSX dock icon window reopening
+- `786cf72` fix a issue where "command line options"-action overwrite "Preference"-action (on OSX)
+
+Tests:
+- `1117378` add RPC test for InvalidateBlock
+
+Miscellaneous:
+- `c9e022b` Initialization: set Boost path locale in main thread
+- `23126a0` Sanitize command strings before logging them.
+- `323de27` Initialization: setup environment before starting QT tests
+- `7494e09` Initialization: setup environment before starting tests
+- `df45564` Initialization: set fallback locale as environment variable
+
+Credits
+=======
+
+Thanks to everyone who directly contributed to this release:
+
+- Alex Morcos
+- Cory Fields
+- dexX7
+- fsb4000
+- Gavin Andresen
+- Gregory Maxwell
+- Ivan Pustogarov
+- Jonas Schnelli
+- Matt Corallo
+- mrbandrews
+- Pieter Wuille
+- Ruben de Vries
+- Suhas Daftuar
+- Wladimir J. van der Laan
+
+And all those who contributed additional code review and/or security research:
+- 21E14
+- Alison Kendler
+- Aviv Zohar
+- Ethan Heilman
+- Evil-Knievel
+- fanquake
+- Jeff Garzik
+- Jonas Nick
+- Luke Dashjr
+- Patrick Strateman
+- Philip Kaufmann
+- Sergio Demian Lerner
+- Sharon Goldberg
+
+As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/).
diff --git a/doc/release-notes/release-notes-0.10.2.md b/doc/release-notes/release-notes-0.10.2.md
new file mode 100644
index 0000000000..192ed69d29
--- /dev/null
+++ b/doc/release-notes/release-notes-0.10.2.md
@@ -0,0 +1,86 @@
+Bitcoin Core version 0.10.2 is now available from:
+
+ <https://bitcoin.org/bin/bitcoin-core-0.10.2/>
+
+This is a new minor version release, bringing minor bug fixes and translation
+updates. It is recommended to upgrade to this version.
+
+Please report bugs using the issue tracker at github:
+
+ <https://github.com/bitcoin/bitcoin/issues>
+
+Upgrading and downgrading
+=========================
+
+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).
+
+Downgrade warning
+------------------
+
+Because release 0.10.0 and later makes use of headers-first synchronization and
+parallel block download (see further), the block files and databases are not
+backwards-compatible with pre-0.10 versions of Bitcoin Core or other software:
+
+* Blocks will be stored on disk out of order (in the order they are
+received, really), which makes it incompatible with some tools or
+other programs. Reindexing using earlier versions will also not work
+anymore as a result of this.
+
+* The block index database will now hold headers for which no block is
+stored on disk, which earlier versions won't support.
+
+If you want to be able to downgrade smoothly, make a backup of your entire data
+directory. Without this your node will need start syncing (or importing from
+bootstrap.dat) anew afterwards. It is possible that the data from a completely
+synchronised 0.10 node may be usable in older versions as-is, but this is not
+supported and may break as soon as the older version attempts to reindex.
+
+This does not affect wallet forward or backward compatibility.
+
+Notable changes
+===============
+
+This fixes a serious problem on Windows with data directories that have non-ASCII
+characters (https://github.com/bitcoin/bitcoin/issues/6078).
+
+For other platforms there are no notable changes.
+
+For the notable changes in 0.10, refer to the release notes
+at https://github.com/bitcoin/bitcoin/blob/v0.10.0/doc/release-notes.md
+
+0.10.2 Change log
+=================
+
+Detailed release notes follow. This overview includes changes that affect external
+behavior, not code moves, refactors or string updates.
+
+Wallet:
+- `824c011` fix boost::get usage with boost 1.58
+
+Miscellaneous:
+- `da65606` Avoid crash on start in TestBlockValidity with gen=1.
+- `424ae66` don't imbue boost::filesystem::path with locale "C" on windows (fixes #6078)
+
+Credits
+=======
+
+Thanks to everyone who directly contributed to this release:
+
+- Cory Fields
+- Gregory Maxwell
+- Jonas Schnelli
+- Wladimir J. van der Laan
+
+And all those who contributed additional code review and/or security research:
+
+- dexX7
+- Pieter Wuille
+- vayvanne
+
+As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/).
diff --git a/doc/release-notes/release-notes-0.9.4.md b/doc/release-notes/release-notes-0.9.4.md
new file mode 100644
index 0000000000..7ee73246a9
--- /dev/null
+++ b/doc/release-notes/release-notes-0.9.4.md
@@ -0,0 +1,95 @@
+Bitcoin Core version 0.9.4 is now available from:
+
+ https://bitcoin.org/bin/0.9.4/
+
+This is a new minor version release, bringing only bug fixes and updated
+translations. Upgrading to this release is recommended.
+
+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).
+
+OpenSSL Warning
+================
+
+OpenSSL 1.0.0p / 1.0.1k was recently released and is being pushed out by
+various operating system maintainers. Review by Gregory Maxwell determined that
+this update is incompatible with the Bitcoin system and could lead to consensus
+forks.
+
+Bitcoin Core released binaries from https://bitcoin.org are unaffected,
+as are any built with the gitian deterministic build system.
+
+However, if you are running either
+
+- The Ubuntu PPA from https://launchpad.net/~bitcoin/+archive/ubuntu/bitcoin
+- A third-party or self-compiled Bitcoin Core
+
+upgrade to Bitcoin Core 0.9.4, which includes a workaround, **before** updating
+OpenSSL.
+
+The incompatibility is due to the OpenSSL update changing the
+behavior of ECDSA validation to reject any signature which is
+not encoded in a very rigid manner. This was a result of
+OpenSSL's change for CVE-2014-8275 "Certificate fingerprints
+can be modified".
+
+We are specifically aware of potential hard-forks due to signature
+encoding handling and had been hoping to close them via BIP62 in 0.10.
+BIP62's purpose is to improve transaction malleability handling and
+as a side effect rigidly defines the encoding for signatures, but the
+overall scope of BIP62 has made it take longer than we'd like to
+deploy.
+
+0.9.4 changelog
+================
+
+Validation:
+- `b8e81b7` consensus: guard against openssl's new strict DER checks
+- `60c51f1` fail immediately on an empty signature
+- `037bfef` Improve robustness of DER recoding code
+
+Command-line options:
+- `cd5164a` Make -proxy set all network types, avoiding a connect leak.
+
+P2P:
+- `bb424e4` Limit the number of new addressses to accumulate
+
+RPC:
+- `0a94661` Disable SSLv3 (in favor of TLS) for the RPC client and server.
+
+Build system:
+- `f047dfa` gitian: openssl-1.0.1i.tar.gz -> openssl-1.0.1k.tar.gz
+- `5b9f78d` build: Fix OSX build when using Homebrew and qt5
+- `ffab1dd` Keep symlinks when copying into .app bundle
+- `613247f` osx: fix signing to make Gatekeeper happy (again)
+
+Miscellaneous:
+- `25b49b5` Refactor -alertnotify code
+- `2743529` doc: Add instructions for consistent Mac OS X build names
+
+Credits
+--------
+
+Thanks to who contributed to this release, at least:
+
+- Cory Fields
+- Gavin Andresen
+- Gregory Maxwell
+- Jeff Garzik
+- Luke Dashjr
+- Matt Corallo
+- Pieter Wuille
+- Saivann
+- Sergio Demian Lerner
+- Wladimir J. van der Laan
+
+As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/).
diff --git a/doc/release-process.md b/doc/release-process.md
index 5dad9bf5de..cdcee0ec36 100644
--- a/doc/release-process.md
+++ b/doc/release-process.md
@@ -164,4 +164,4 @@ Note: check that SHA256SUMS itself doesn't end up in SHA256SUMS, which is a spur
- Add release notes for the new version to the directory `doc/release-notes` in git master
-- Celebrate
+- Celebrate
diff --git a/doc/translation_process.md b/doc/translation_process.md
index eed467706e..3653e53021 100644
--- a/doc/translation_process.md
+++ b/doc/translation_process.md
@@ -32,7 +32,7 @@ QToolBar *toolbar = addToolBar(tr("Tabs toolbar"));
### Creating a pull-request
For general PRs, you shouldn’t include any updates to the translation source files. They will be updated periodically, primarily around pre-releases, allowing time for any new phrases to be translated before public releases. This is also important in avoiding translation related merge conflicts.
-When an updated source file is merged into the Github repo, Transifex will automatically detect it (although it can take several hours). Once processed, the new strings will show up as "Remaining" in the Transifex web interface and are ready for translators.
+When an updated source file is merged into the Github repo, Transifex will automatically detect it (although it can take several hours). Once processed, the new strings will show up as "Remaining" in the Transifex web interface and are ready for translators.
To create the pull-request, use the following commands:
```
@@ -108,4 +108,4 @@ To create a new language template, you will need to edit the languages manifest
### Questions and general assistance
The Bitcoin-Core translation maintainers include *tcatm, seone, Diapolo, wumpus and luke-jr*.You can find them, and others, in the Freenode IRC chatroom - `irc.freenode.net #bitcoin-dev`.
-If you are a translator, you should also subscribe to the mailing list, https://groups.google.com/forum/#!forum/bitcoin-translators. Announcements will be posted during application pre-releases to notify translators to check for updates. \ No newline at end of file
+If you are a translator, you should also subscribe to the mailing list, https://groups.google.com/forum/#!forum/bitcoin-translators. Announcements will be posted during application pre-releases to notify translators to check for updates.
diff --git a/qa/pull-tester/rpc-tests.sh b/qa/pull-tester/rpc-tests.sh
index dd2f8d4e5e..ecde45059b 100755
--- a/qa/pull-tester/rpc-tests.sh
+++ b/qa/pull-tester/rpc-tests.sh
@@ -22,6 +22,7 @@ testScripts=(
'txn_doublespend.py'
'txn_doublespend.py --mineblock'
'getchaintips.py'
+ 'rawtransactions.py'
'rest.py'
'mempool_spendcoinbase.py'
'mempool_coinbase_spends.py'
@@ -29,6 +30,10 @@ testScripts=(
'zapwallettxes.py'
'proxy_test.py'
'merkle_blocks.py'
+ 'signrawtransactions.py'
+ 'maxblocksinflight.py'
+ 'invalidblockrequest.py'
+ 'rawtransactions.py'
# 'forknotify.py'
);
if [ "x${ENABLE_BITCOIND}${ENABLE_UTILS}${ENABLE_WALLET}" = "x111" ]; then
diff --git a/qa/rpc-tests/README.md b/qa/rpc-tests/README.md
index 02170d13ec..d9fbb109e8 100644
--- a/qa/rpc-tests/README.md
+++ b/qa/rpc-tests/README.md
@@ -28,7 +28,7 @@ Notes
A 200-block -regtest blockchain and wallets for four nodes
is created the first time a regression test is run and
is stored in the cache/ directory. Each node has 25 mature
-blocks (25*50=1250 BTC) in their wallet.
+blocks (25*50=1250 BTC) in its wallet.
After the first run, the cache/ blockchain and wallets are
copied into a temporary directory and used as the initial
diff --git a/qa/rpc-tests/bignum.py b/qa/rpc-tests/bignum.py
new file mode 100644
index 0000000000..b0c58ccd47
--- /dev/null
+++ b/qa/rpc-tests/bignum.py
@@ -0,0 +1,102 @@
+#
+#
+# bignum.py
+#
+# This file is copied from python-bitcoinlib.
+#
+# Distributed under the MIT/X11 software license, see the accompanying
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
+#
+
+"""Bignum routines"""
+
+from __future__ import absolute_import, division, print_function, unicode_literals
+
+import struct
+
+
+# generic big endian MPI format
+
+def bn_bytes(v, have_ext=False):
+ ext = 0
+ if have_ext:
+ ext = 1
+ return ((v.bit_length()+7)//8) + ext
+
+def bn2bin(v):
+ s = bytearray()
+ i = bn_bytes(v)
+ while i > 0:
+ s.append((v >> ((i-1) * 8)) & 0xff)
+ i -= 1
+ return s
+
+def bin2bn(s):
+ l = 0
+ for ch in s:
+ l = (l << 8) | ch
+ return l
+
+def bn2mpi(v):
+ have_ext = False
+ if v.bit_length() > 0:
+ have_ext = (v.bit_length() & 0x07) == 0
+
+ neg = False
+ if v < 0:
+ neg = True
+ v = -v
+
+ s = struct.pack(b">I", bn_bytes(v, have_ext))
+ ext = bytearray()
+ if have_ext:
+ ext.append(0)
+ v_bin = bn2bin(v)
+ if neg:
+ if have_ext:
+ ext[0] |= 0x80
+ else:
+ v_bin[0] |= 0x80
+ return s + ext + v_bin
+
+def mpi2bn(s):
+ if len(s) < 4:
+ return None
+ s_size = bytes(s[:4])
+ v_len = struct.unpack(b">I", s_size)[0]
+ if len(s) != (v_len + 4):
+ return None
+ if v_len == 0:
+ return 0
+
+ v_str = bytearray(s[4:])
+ neg = False
+ i = v_str[0]
+ if i & 0x80:
+ neg = True
+ i &= ~0x80
+ v_str[0] = i
+
+ v = bin2bn(v_str)
+
+ if neg:
+ return -v
+ return v
+
+# bitcoin-specific little endian format, with implicit size
+def mpi2vch(s):
+ r = s[4:] # strip size
+ r = r[::-1] # reverse string, converting BE->LE
+ return r
+
+def bn2vch(v):
+ return bytes(mpi2vch(bn2mpi(v)))
+
+def vch2mpi(s):
+ r = struct.pack(b">I", len(s)) # size
+ r += s[::-1] # reverse string, converting LE->BE
+ return r
+
+def vch2bn(s):
+ return mpi2bn(vch2mpi(s))
+
diff --git a/qa/rpc-tests/bipdersig-p2p.py b/qa/rpc-tests/bipdersig-p2p.py
new file mode 100755
index 0000000000..ff0c878898
--- /dev/null
+++ b/qa/rpc-tests/bipdersig-p2p.py
@@ -0,0 +1,183 @@
+#!/usr/bin/env python2
+#
+# Distributed under the MIT/X11 software license, see the accompanying
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
+#
+
+from test_framework import ComparisonTestFramework
+from util import *
+from mininode import CTransaction, NetworkThread
+from blocktools import create_coinbase, create_block
+from binascii import hexlify, unhexlify
+import cStringIO
+from comptool import TestInstance, TestManager
+from script import CScript
+import time
+
+# A canonical signature consists of:
+# <30> <total len> <02> <len R> <R> <02> <len S> <S> <hashtype>
+def unDERify(tx):
+ '''
+ Make the signature in vin 0 of a tx non-DER-compliant,
+ by adding padding after the S-value.
+ '''
+ scriptSig = CScript(tx.vin[0].scriptSig)
+ newscript = []
+ for i in scriptSig:
+ if (len(newscript) == 0):
+ newscript.append(i[0:-1] + '\0' + i[-1])
+ else:
+ newscript.append(i)
+ tx.vin[0].scriptSig = CScript(newscript)
+
+'''
+This test is meant to exercise BIP66 (DER SIG).
+Connect to a single node.
+Mine 2 (version 2) blocks (save the coinbases for later).
+Generate 98 more version 2 blocks, verify the node accepts.
+Mine 749 version 3 blocks, verify the node accepts.
+Check that the new DERSIG rules are not enforced on the 750th version 3 block.
+Check that the new DERSIG rules are enforced on the 751st version 3 block.
+Mine 199 new version blocks.
+Mine 1 old-version block.
+Mine 1 new version block.
+Mine 1 old version block, see that the node rejects.
+'''
+
+class BIP66Test(ComparisonTestFramework):
+
+ def __init__(self):
+ self.num_nodes = 1
+
+ def setup_network(self):
+ # Must set the blockversion for this test
+ self.nodes = start_nodes(1, self.options.tmpdir,
+ extra_args=[['-debug', '-whitelist=127.0.0.1', '-blockversion=2']],
+ binary=[self.options.testbinary])
+
+ def run_test(self):
+ test = TestManager(self, self.options.tmpdir)
+ test.add_all_connections(self.nodes)
+ NetworkThread().start() # Start up network handling in another thread
+ test.run()
+
+ def create_transaction(self, node, coinbase, to_address, amount):
+ from_txid = node.getblock(coinbase)['tx'][0]
+ inputs = [{ "txid" : from_txid, "vout" : 0}]
+ outputs = { to_address : amount }
+ rawtx = node.createrawtransaction(inputs, outputs)
+ signresult = node.signrawtransaction(rawtx)
+ tx = CTransaction()
+ f = cStringIO.StringIO(unhexlify(signresult['hex']))
+ tx.deserialize(f)
+ return tx
+
+ def get_tests(self):
+
+ self.coinbase_blocks = self.nodes[0].generate(2)
+ self.tip = int ("0x" + self.nodes[0].getbestblockhash() + "L", 0)
+ self.nodeaddress = self.nodes[0].getnewaddress()
+ self.last_block_time = time.time()
+
+ ''' 98 more version 2 blocks '''
+ test_blocks = []
+ for i in xrange(98):
+ block = create_block(self.tip, create_coinbase(2), self.last_block_time + 1)
+ block.nVersion = 2
+ block.rehash()
+ block.solve()
+ test_blocks.append([block, True])
+ self.last_block_time += 1
+ self.tip = block.sha256
+ yield TestInstance(test_blocks, sync_every_block=False)
+
+ ''' Mine 749 version 3 blocks '''
+ test_blocks = []
+ for i in xrange(749):
+ block = create_block(self.tip, create_coinbase(2), self.last_block_time + 1)
+ block.nVersion = 3
+ block.rehash()
+ block.solve()
+ test_blocks.append([block, True])
+ self.last_block_time += 1
+ self.tip = block.sha256
+ yield TestInstance(test_blocks, sync_every_block=False)
+
+ '''
+ Check that the new DERSIG rules are not enforced in the 750th
+ version 3 block.
+ '''
+ spendtx = self.create_transaction(self.nodes[0],
+ self.coinbase_blocks[0], self.nodeaddress, 1.0)
+ unDERify(spendtx)
+ spendtx.rehash()
+
+ block = create_block(self.tip, create_coinbase(2), self.last_block_time + 1)
+ block.nVersion = 3
+ block.vtx.append(spendtx)
+ block.hashMerkleRoot = block.calc_merkle_root()
+ block.rehash()
+ block.solve()
+
+ self.last_block_time += 1
+ self.tip = block.sha256
+ yield TestInstance([[block, True]])
+
+ '''
+ Check that the new DERSIG rules are enforced in the 751st version 3
+ block.
+ '''
+ spendtx = self.create_transaction(self.nodes[0],
+ self.coinbase_blocks[1], self.nodeaddress, 1.0)
+ unDERify(spendtx)
+ spendtx.rehash()
+
+ block = create_block(self.tip, create_coinbase(1), self.last_block_time + 1)
+ block.nVersion = 3
+ block.vtx.append(spendtx)
+ block.hashMerkleRoot = block.calc_merkle_root()
+ block.rehash()
+ block.solve()
+ self.last_block_time += 1
+ yield TestInstance([[block, False]])
+
+ ''' Mine 199 new version blocks on last valid tip '''
+ test_blocks = []
+ for i in xrange(199):
+ block = create_block(self.tip, create_coinbase(1), self.last_block_time + 1)
+ block.nVersion = 3
+ block.rehash()
+ block.solve()
+ test_blocks.append([block, True])
+ self.last_block_time += 1
+ self.tip = block.sha256
+ yield TestInstance(test_blocks, sync_every_block=False)
+
+ ''' Mine 1 old version block '''
+ block = create_block(self.tip, create_coinbase(1), self.last_block_time + 1)
+ block.nVersion = 2
+ block.rehash()
+ block.solve()
+ self.last_block_time += 1
+ self.tip = block.sha256
+ yield TestInstance([[block, True]])
+
+ ''' Mine 1 new version block '''
+ block = create_block(self.tip, create_coinbase(1), self.last_block_time + 1)
+ block.nVersion = 3
+ block.rehash()
+ block.solve()
+ self.last_block_time += 1
+ self.tip = block.sha256
+ yield TestInstance([[block, True]])
+
+ ''' Mine 1 old version block, should be invalid '''
+ block = create_block(self.tip, create_coinbase(1), self.last_block_time + 1)
+ block.nVersion = 2
+ block.rehash()
+ block.solve()
+ self.last_block_time += 1
+ yield TestInstance([[block, False]])
+
+if __name__ == '__main__':
+ BIP66Test().main()
diff --git a/qa/rpc-tests/blockstore.py b/qa/rpc-tests/blockstore.py
new file mode 100644
index 0000000000..c57b6df81b
--- /dev/null
+++ b/qa/rpc-tests/blockstore.py
@@ -0,0 +1,127 @@
+# BlockStore: a helper class that keeps a map of blocks and implements
+# helper functions for responding to getheaders and getdata,
+# and for constructing a getheaders message
+#
+
+from mininode import *
+import dbm
+
+class BlockStore(object):
+ def __init__(self, datadir):
+ self.blockDB = dbm.open(datadir + "/blocks", 'c')
+ self.currentBlock = 0L
+
+ def close(self):
+ self.blockDB.close()
+
+ def get(self, blockhash):
+ serialized_block = None
+ try:
+ serialized_block = self.blockDB[repr(blockhash)]
+ except KeyError:
+ return None
+ f = cStringIO.StringIO(serialized_block)
+ ret = CBlock()
+ ret.deserialize(f)
+ ret.calc_sha256()
+ return ret
+
+ # Note: this pulls full blocks out of the database just to retrieve
+ # the headers -- perhaps we could keep a separate data structure
+ # to avoid this overhead.
+ def headers_for(self, locator, hash_stop, current_tip=None):
+ if current_tip is None:
+ current_tip = self.currentBlock
+ current_block = self.get(current_tip)
+ if current_block is None:
+ return None
+
+ response = msg_headers()
+ headersList = [ CBlockHeader(current_block) ]
+ maxheaders = 2000
+ while (headersList[0].sha256 not in locator.vHave):
+ prevBlockHash = headersList[0].hashPrevBlock
+ prevBlock = self.get(prevBlockHash)
+ if prevBlock is not None:
+ headersList.insert(0, CBlockHeader(prevBlock))
+ else:
+ break
+ headersList = headersList[:maxheaders] # truncate if we have too many
+ hashList = [x.sha256 for x in headersList]
+ index = len(headersList)
+ if (hash_stop in hashList):
+ index = hashList.index(hash_stop)+1
+ response.headers = headersList[:index]
+ return response
+
+ def add_block(self, block):
+ block.calc_sha256()
+ try:
+ self.blockDB[repr(block.sha256)] = bytes(block.serialize())
+ except TypeError as e:
+ print "Unexpected error: ", sys.exc_info()[0], e.args
+ self.currentBlock = block.sha256
+
+ def get_blocks(self, inv):
+ responses = []
+ for i in inv:
+ if (i.type == 2): # MSG_BLOCK
+ block = self.get(i.hash)
+ if block is not None:
+ responses.append(msg_block(block))
+ return responses
+
+ def get_locator(self, current_tip=None):
+ if current_tip is None:
+ current_tip = self.currentBlock
+ r = []
+ counter = 0
+ step = 1
+ lastBlock = self.get(current_tip)
+ while lastBlock is not None:
+ r.append(lastBlock.hashPrevBlock)
+ for i in range(step):
+ lastBlock = self.get(lastBlock.hashPrevBlock)
+ if lastBlock is None:
+ break
+ counter += 1
+ if counter > 10:
+ step *= 2
+ locator = CBlockLocator()
+ locator.vHave = r
+ return locator
+
+class TxStore(object):
+ def __init__(self, datadir):
+ self.txDB = dbm.open(datadir + "/transactions", 'c')
+
+ def close(self):
+ self.txDB.close()
+
+ def get(self, txhash):
+ serialized_tx = None
+ try:
+ serialized_tx = self.txDB[repr(txhash)]
+ except KeyError:
+ return None
+ f = cStringIO.StringIO(serialized_tx)
+ ret = CTransaction()
+ ret.deserialize(f)
+ ret.calc_sha256()
+ return ret
+
+ def add_transaction(self, tx):
+ tx.calc_sha256()
+ try:
+ self.txDB[repr(tx.sha256)] = bytes(tx.serialize())
+ except TypeError as e:
+ print "Unexpected error: ", sys.exc_info()[0], e.args
+
+ def get_transactions(self, inv):
+ responses = []
+ for i in inv:
+ if (i.type == 1): # MSG_TX
+ tx = self.get(i.hash)
+ if tx is not None:
+ responses.append(msg_tx(tx))
+ return responses
diff --git a/qa/rpc-tests/blocktools.py b/qa/rpc-tests/blocktools.py
new file mode 100644
index 0000000000..f397fe7cd6
--- /dev/null
+++ b/qa/rpc-tests/blocktools.py
@@ -0,0 +1,65 @@
+# blocktools.py - utilities for manipulating blocks and transactions
+#
+# Distributed under the MIT/X11 software license, see the accompanying
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
+#
+
+from mininode import *
+from script import CScript, CScriptOp
+
+# Create a block (with regtest difficulty)
+def create_block(hashprev, coinbase, nTime=None):
+ block = CBlock()
+ if nTime is None:
+ import time
+ block.nTime = int(time.time()+600)
+ else:
+ block.nTime = nTime
+ block.hashPrevBlock = hashprev
+ block.nBits = 0x207fffff # Will break after a difficulty adjustment...
+ block.vtx.append(coinbase)
+ block.hashMerkleRoot = block.calc_merkle_root()
+ block.calc_sha256()
+ return block
+
+def serialize_script_num(value):
+ r = bytearray(0)
+ if value == 0:
+ return r
+ neg = value < 0
+ absvalue = -value if neg else value
+ while (absvalue):
+ r.append(chr(absvalue & 0xff))
+ absvalue >>= 8
+ if r[-1] & 0x80:
+ r.append(0x80 if neg else 0)
+ elif neg:
+ r[-1] |= 0x80
+ return r
+
+counter=1
+# Create an anyone-can-spend coinbase transaction, assuming no miner fees
+def create_coinbase(heightAdjust = 0):
+ global counter
+ coinbase = CTransaction()
+ coinbase.vin.append(CTxIn(COutPoint(0, 0xffffffff),
+ ser_string(serialize_script_num(counter+heightAdjust)), 0xffffffff))
+ counter += 1
+ coinbaseoutput = CTxOut()
+ coinbaseoutput.nValue = 50*100000000
+ halvings = int((counter+heightAdjust)/150) # regtest
+ coinbaseoutput.nValue >>= halvings
+ coinbaseoutput.scriptPubKey = ""
+ coinbase.vout = [ coinbaseoutput ]
+ coinbase.calc_sha256()
+ return coinbase
+
+# Create a transaction with an anyone-can-spend output, that spends the
+# nth output of prevtx.
+def create_transaction(prevtx, n, sig, value):
+ tx = CTransaction()
+ assert(n < len(prevtx.vout))
+ tx.vin.append(CTxIn(COutPoint(prevtx.sha256, n), sig, 0xffffffff))
+ tx.vout.append(CTxOut(value, ""))
+ tx.calc_sha256()
+ return tx
diff --git a/qa/rpc-tests/comptool.py b/qa/rpc-tests/comptool.py
new file mode 100755
index 0000000000..23a979250c
--- /dev/null
+++ b/qa/rpc-tests/comptool.py
@@ -0,0 +1,341 @@
+#!/usr/bin/env python2
+#
+# Distributed under the MIT/X11 software license, see the accompanying
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
+#
+
+from mininode import *
+from blockstore import BlockStore, TxStore
+from util import p2p_port
+
+'''
+This is a tool for comparing two or more bitcoinds to each other
+using a script provided.
+
+To use, create a class that implements get_tests(), and pass it in
+as the test generator to TestManager. get_tests() should be a python
+generator that returns TestInstance objects. See below for definition.
+'''
+
+# TestNode behaves as follows:
+# Configure with a BlockStore and TxStore
+# on_inv: log the message but don't request
+# on_headers: log the chain tip
+# on_pong: update ping response map (for synchronization)
+# on_getheaders: provide headers via BlockStore
+# on_getdata: provide blocks via BlockStore
+
+global mininode_lock
+
+class TestNode(NodeConnCB):
+
+ def __init__(self, block_store, tx_store):
+ NodeConnCB.__init__(self)
+ self.create_callback_map()
+ self.conn = None
+ self.bestblockhash = None
+ self.block_store = block_store
+ self.block_request_map = {}
+ self.tx_store = tx_store
+ self.tx_request_map = {}
+
+ # When the pingmap is non-empty we're waiting for
+ # a response
+ self.pingMap = {}
+ self.lastInv = []
+
+ def add_connection(self, conn):
+ self.conn = conn
+
+ def on_headers(self, conn, message):
+ if len(message.headers) > 0:
+ best_header = message.headers[-1]
+ best_header.calc_sha256()
+ self.bestblockhash = best_header.sha256
+
+ def on_getheaders(self, conn, message):
+ response = self.block_store.headers_for(message.locator, message.hashstop)
+ if response is not None:
+ conn.send_message(response)
+
+ def on_getdata(self, conn, message):
+ [conn.send_message(r) for r in self.block_store.get_blocks(message.inv)]
+ [conn.send_message(r) for r in self.tx_store.get_transactions(message.inv)]
+
+ for i in message.inv:
+ if i.type == 1:
+ self.tx_request_map[i.hash] = True
+ elif i.type == 2:
+ self.block_request_map[i.hash] = True
+
+ def on_inv(self, conn, message):
+ self.lastInv = [x.hash for x in message.inv]
+
+ def on_pong(self, conn, message):
+ try:
+ del self.pingMap[message.nonce]
+ except KeyError:
+ raise AssertionError("Got pong for unknown ping [%s]" % repr(message))
+
+ def send_inv(self, obj):
+ mtype = 2 if isinstance(obj, CBlock) else 1
+ self.conn.send_message(msg_inv([CInv(mtype, obj.sha256)]))
+
+ def send_getheaders(self):
+ # We ask for headers from their last tip.
+ m = msg_getheaders()
+ m.locator = self.block_store.get_locator(self.bestblockhash)
+ self.conn.send_message(m)
+
+ # This assumes BIP31
+ def send_ping(self, nonce):
+ self.pingMap[nonce] = True
+ self.conn.send_message(msg_ping(nonce))
+
+ def received_ping_response(self, nonce):
+ return nonce not in self.pingMap
+
+ def send_mempool(self):
+ self.lastInv = []
+ self.conn.send_message(msg_mempool())
+
+# TestInstance:
+#
+# Instances of these are generated by the test generator, and fed into the
+# comptool.
+#
+# "blocks_and_transactions" should be an array of [obj, True/False/None]:
+# - obj is either a CBlock or a CTransaction, and
+# - the second value indicates whether the object should be accepted
+# into the blockchain or mempool (for tests where we expect a certain
+# answer), or "None" if we don't expect a certain answer and are just
+# comparing the behavior of the nodes being tested.
+# sync_every_block: if True, then each block will be inv'ed, synced, and
+# nodes will be tested based on the outcome for the block. If False,
+# then inv's accumulate until all blocks are processed (or max inv size
+# is reached) and then sent out in one inv message. Then the final block
+# will be synced across all connections, and the outcome of the final
+# block will be tested.
+# sync_every_tx: analagous to behavior for sync_every_block, except if outcome
+# on the final tx is None, then contents of entire mempool are compared
+# across all connections. (If outcome of final tx is specified as true
+# or false, then only the last tx is tested against outcome.)
+
+class TestInstance(object):
+ def __init__(self, objects=[], sync_every_block=True, sync_every_tx=False):
+ self.blocks_and_transactions = objects
+ self.sync_every_block = sync_every_block
+ self.sync_every_tx = sync_every_tx
+
+class TestManager(object):
+
+ def __init__(self, testgen, datadir):
+ self.test_generator = testgen
+ self.connections = []
+ self.block_store = BlockStore(datadir)
+ self.tx_store = TxStore(datadir)
+ self.ping_counter = 1
+
+ def add_all_connections(self, nodes):
+ for i in range(len(nodes)):
+ # Create a p2p connection to each node
+ self.connections.append(NodeConn('127.0.0.1', p2p_port(i),
+ nodes[i], TestNode(self.block_store, self.tx_store)))
+ # Make sure the TestNode (callback class) has a reference to its
+ # associated NodeConn
+ self.connections[-1].cb.add_connection(self.connections[-1])
+
+ def wait_for_verack(self):
+ sleep_time = 0.05
+ max_tries = 10 / sleep_time # Wait at most 10 seconds
+ while max_tries > 0:
+ done = True
+ with mininode_lock:
+ for c in self.connections:
+ if c.cb.verack_received is False:
+ done = False
+ break
+ if done:
+ break
+ time.sleep(sleep_time)
+
+ def wait_for_pings(self, counter):
+ received_pongs = False
+ while received_pongs is not True:
+ time.sleep(0.05)
+ received_pongs = True
+ with mininode_lock:
+ for c in self.connections:
+ if c.cb.received_ping_response(counter) is not True:
+ received_pongs = False
+ break
+
+ # sync_blocks: Wait for all connections to request the blockhash given
+ # then send get_headers to find out the tip of each node, and synchronize
+ # the response by using a ping (and waiting for pong with same nonce).
+ def sync_blocks(self, blockhash, num_blocks):
+ # Wait for nodes to request block (50ms sleep * 20 tries * num_blocks)
+ max_tries = 20*num_blocks
+ while max_tries > 0:
+ with mininode_lock:
+ results = [ blockhash in c.cb.block_request_map and
+ c.cb.block_request_map[blockhash] for c in self.connections ]
+ if False not in results:
+ break
+ time.sleep(0.05)
+ max_tries -= 1
+
+ # --> error if not requested
+ if max_tries == 0:
+ # print [ c.cb.block_request_map for c in self.connections ]
+ raise AssertionError("Not all nodes requested block")
+ # --> Answer request (we did this inline!)
+
+ # Send getheaders message
+ [ c.cb.send_getheaders() for c in self.connections ]
+
+ # Send ping and wait for response -- synchronization hack
+ [ c.cb.send_ping(self.ping_counter) for c in self.connections ]
+ self.wait_for_pings(self.ping_counter)
+ self.ping_counter += 1
+
+ # Analogous to sync_block (see above)
+ def sync_transaction(self, txhash, num_events):
+ # Wait for nodes to request transaction (50ms sleep * 20 tries * num_events)
+ max_tries = 20*num_events
+ while max_tries > 0:
+ with mininode_lock:
+ results = [ txhash in c.cb.tx_request_map and
+ c.cb.tx_request_map[txhash] for c in self.connections ]
+ if False not in results:
+ break
+ time.sleep(0.05)
+ max_tries -= 1
+
+ # --> error if not requested
+ if max_tries == 0:
+ # print [ c.cb.tx_request_map for c in self.connections ]
+ raise AssertionError("Not all nodes requested transaction")
+ # --> Answer request (we did this inline!)
+
+ # Get the mempool
+ [ c.cb.send_mempool() for c in self.connections ]
+
+ # Send ping and wait for response -- synchronization hack
+ [ c.cb.send_ping(self.ping_counter) for c in self.connections ]
+ self.wait_for_pings(self.ping_counter)
+ self.ping_counter += 1
+
+ # Sort inv responses from each node
+ with mininode_lock:
+ [ c.cb.lastInv.sort() for c in self.connections ]
+
+ # Verify that the tip of each connection all agree with each other, and
+ # with the expected outcome (if given)
+ def check_results(self, blockhash, outcome):
+ with mininode_lock:
+ for c in self.connections:
+ if outcome is None:
+ if c.cb.bestblockhash != self.connections[0].cb.bestblockhash:
+ return False
+ elif ((c.cb.bestblockhash == blockhash) != outcome):
+ # print c.cb.bestblockhash, blockhash, outcome
+ return False
+ return True
+
+ # Either check that the mempools all agree with each other, or that
+ # txhash's presence in the mempool matches the outcome specified.
+ # This is somewhat of a strange comparison, in that we're either comparing
+ # a particular tx to an outcome, or the entire mempools altogether;
+ # perhaps it would be useful to add the ability to check explicitly that
+ # a particular tx's existence in the mempool is the same across all nodes.
+ def check_mempool(self, txhash, outcome):
+ with mininode_lock:
+ for c in self.connections:
+ if outcome is None:
+ # Make sure the mempools agree with each other
+ if c.cb.lastInv != self.connections[0].cb.lastInv:
+ # print c.rpc.getrawmempool()
+ return False
+ elif ((txhash in c.cb.lastInv) != outcome):
+ # print c.rpc.getrawmempool(), c.cb.lastInv
+ return False
+ return True
+
+ def run(self):
+ # Wait until verack is received
+ self.wait_for_verack()
+
+ test_number = 1
+ for test_instance in self.test_generator.get_tests():
+ # We use these variables to keep track of the last block
+ # and last transaction in the tests, which are used
+ # if we're not syncing on every block or every tx.
+ [ block, block_outcome ] = [ None, None ]
+ [ tx, tx_outcome ] = [ None, None ]
+ invqueue = []
+
+ for b_or_t, outcome in test_instance.blocks_and_transactions:
+ # Determine if we're dealing with a block or tx
+ if isinstance(b_or_t, CBlock): # Block test runner
+ block = b_or_t
+ block_outcome = outcome
+ # Add to shared block_store, set as current block
+ with mininode_lock:
+ self.block_store.add_block(block)
+ for c in self.connections:
+ c.cb.block_request_map[block.sha256] = False
+ # Either send inv's to each node and sync, or add
+ # to invqueue for later inv'ing.
+ if (test_instance.sync_every_block):
+ [ c.cb.send_inv(block) for c in self.connections ]
+ self.sync_blocks(block.sha256, 1)
+ if (not self.check_results(block.sha256, outcome)):
+ raise AssertionError("Test failed at test %d" % test_number)
+ else:
+ invqueue.append(CInv(2, block.sha256))
+ else: # Tx test runner
+ assert(isinstance(b_or_t, CTransaction))
+ tx = b_or_t
+ tx_outcome = outcome
+ # Add to shared tx store and clear map entry
+ with mininode_lock:
+ self.tx_store.add_transaction(tx)
+ for c in self.connections:
+ c.cb.tx_request_map[tx.sha256] = False
+ # Again, either inv to all nodes or save for later
+ if (test_instance.sync_every_tx):
+ [ c.cb.send_inv(tx) for c in self.connections ]
+ self.sync_transaction(tx.sha256, 1)
+ if (not self.check_mempool(tx.sha256, outcome)):
+ raise AssertionError("Test failed at test %d" % test_number)
+ else:
+ invqueue.append(CInv(1, tx.sha256))
+ # Ensure we're not overflowing the inv queue
+ if len(invqueue) == MAX_INV_SZ:
+ [ c.send_message(msg_inv(invqueue)) for c in self.connections ]
+ invqueue = []
+
+ # Do final sync if we weren't syncing on every block or every tx.
+ if (not test_instance.sync_every_block and block is not None):
+ if len(invqueue) > 0:
+ [ c.send_message(msg_inv(invqueue)) for c in self.connections ]
+ invqueue = []
+ self.sync_blocks(block.sha256,
+ len(test_instance.blocks_and_transactions))
+ if (not self.check_results(block.sha256, block_outcome)):
+ raise AssertionError("Block test failed at test %d" % test_number)
+ if (not test_instance.sync_every_tx and tx is not None):
+ if len(invqueue) > 0:
+ [ c.send_message(msg_inv(invqueue)) for c in self.connections ]
+ invqueue = []
+ self.sync_transaction(tx.sha256, len(test_instance.blocks_and_transactions))
+ if (not self.check_mempool(tx.sha256, tx_outcome)):
+ raise AssertionError("Mempool test failed at test %d" % test_number)
+
+ print "Test %d: PASS" % test_number, [ c.rpc.getblockcount() for c in self.connections ]
+ test_number += 1
+
+ self.block_store.close()
+ self.tx_store.close()
+ [ c.disconnect_node() for c in self.connections ]
diff --git a/qa/rpc-tests/conflictedbalance.sh b/qa/rpc-tests/conflictedbalance.sh
index 3b6c8dc318..7e44097374 100755
--- a/qa/rpc-tests/conflictedbalance.sh
+++ b/qa/rpc-tests/conflictedbalance.sh
@@ -49,7 +49,7 @@ B2ARGS="-datadir=$D2 -debug=mempool"
$BITCOIND $B2ARGS &
B2PID=$!
-# Wait until all four nodes are at the same block number
+# Wait until both nodes are at the same block number
function WaitBlocks {
while :
do
diff --git a/qa/rpc-tests/invalidblockrequest.py b/qa/rpc-tests/invalidblockrequest.py
new file mode 100755
index 0000000000..8b685ed9b2
--- /dev/null
+++ b/qa/rpc-tests/invalidblockrequest.py
@@ -0,0 +1,115 @@
+#!/usr/bin/env python2
+#
+# Distributed under the MIT/X11 software license, see the accompanying
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
+#
+
+from test_framework import ComparisonTestFramework
+from util import *
+from comptool import TestManager, TestInstance
+from mininode import *
+from blocktools import *
+import logging
+import copy
+import time
+
+
+'''
+In this test we connect to one node over p2p, and test block requests:
+1) Valid blocks should be requested and become chain tip.
+2) Invalid block with duplicated transaction should be re-requested.
+3) Invalid block with bad coinbase value should be rejected and not
+re-requested.
+'''
+
+# Use the ComparisonTestFramework with 1 node: only use --testbinary.
+class InvalidBlockRequestTest(ComparisonTestFramework):
+
+ ''' Can either run this test as 1 node with expected answers, or two and compare them.
+ Change the "outcome" variable from each TestInstance object to only do the comparison. '''
+ def __init__(self):
+ self.num_nodes = 1
+
+ def run_test(self):
+ test = TestManager(self, self.options.tmpdir)
+ test.add_all_connections(self.nodes)
+ self.tip = None
+ self.block_time = None
+ NetworkThread().start() # Start up network handling in another thread
+ test.run()
+
+ def get_tests(self):
+ if self.tip is None:
+ self.tip = int ("0x" + self.nodes[0].getbestblockhash() + "L", 0)
+ self.block_time = int(time.time())+1
+
+ '''
+ Create a new block with an anyone-can-spend coinbase
+ '''
+ block = create_block(self.tip, create_coinbase(), self.block_time)
+ self.block_time += 1
+ block.solve()
+ # Save the coinbase for later
+ self.block1 = block
+ self.tip = block.sha256
+ yield TestInstance([[block, True]])
+
+ '''
+ Now we need that block to mature so we can spend the coinbase.
+ '''
+ test = TestInstance(sync_every_block=False)
+ for i in xrange(100):
+ block = create_block(self.tip, create_coinbase(), self.block_time)
+ block.solve()
+ self.tip = block.sha256
+ self.block_time += 1
+ test.blocks_and_transactions.append([block, True])
+ yield test
+
+ '''
+ Now we use merkle-root malleability to generate an invalid block with
+ same blockheader.
+ Manufacture a block with 3 transactions (coinbase, spend of prior
+ coinbase, spend of that spend). Duplicate the 3rd transaction to
+ leave merkle root and blockheader unchanged but invalidate the block.
+ '''
+ block2 = create_block(self.tip, create_coinbase(), self.block_time)
+ self.block_time += 1
+
+ # chr(81) is OP_TRUE
+ tx1 = create_transaction(self.block1.vtx[0], 0, chr(81), 50*100000000)
+ tx2 = create_transaction(tx1, 0, chr(81), 50*100000000)
+
+ block2.vtx.extend([tx1, tx2])
+ block2.hashMerkleRoot = block2.calc_merkle_root()
+ block2.rehash()
+ block2.solve()
+ orig_hash = block2.sha256
+ block2_orig = copy.deepcopy(block2)
+
+ # Mutate block 2
+ block2.vtx.append(tx2)
+ assert_equal(block2.hashMerkleRoot, block2.calc_merkle_root())
+ assert_equal(orig_hash, block2.rehash())
+ assert(block2_orig.vtx != block2.vtx)
+
+ self.tip = block2.sha256
+ yield TestInstance([[block2, False], [block2_orig, True]])
+
+ '''
+ Make sure that a totally screwed up block is not valid.
+ '''
+ block3 = create_block(self.tip, create_coinbase(), self.block_time)
+ self.block_time += 1
+ block3.vtx[0].vout[0].nValue = 100*100000000 # Too high!
+ block3.vtx[0].sha256=None
+ block3.vtx[0].calc_sha256()
+ block3.hashMerkleRoot = block3.calc_merkle_root()
+ block3.rehash()
+ block3.solve()
+
+ yield TestInstance([[block3, False]])
+
+
+if __name__ == '__main__':
+ InvalidBlockRequestTest().main()
diff --git a/qa/rpc-tests/maxblocksinflight.py b/qa/rpc-tests/maxblocksinflight.py
new file mode 100755
index 0000000000..87c80cd97e
--- /dev/null
+++ b/qa/rpc-tests/maxblocksinflight.py
@@ -0,0 +1,101 @@
+#!/usr/bin/env python2
+#
+# Distributed under the MIT/X11 software license, see the accompanying
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
+#
+
+from mininode import *
+from test_framework import BitcoinTestFramework
+from util import *
+import logging
+
+'''
+In this test we connect to one node over p2p, send it numerous inv's, and
+compare the resulting number of getdata requests to a max allowed value. We
+test for exceeding 128 blocks in flight, which was the limit an 0.9 client will
+reach. [0.10 clients shouldn't request more than 16 from a single peer.]
+'''
+MAX_REQUESTS = 128
+
+class TestManager(NodeConnCB):
+ # set up NodeConnCB callbacks, overriding base class
+ def on_getdata(self, conn, message):
+ self.log.debug("got getdata %s" % repr(message))
+ # Log the requests
+ for inv in message.inv:
+ if inv.hash not in self.blockReqCounts:
+ self.blockReqCounts[inv.hash] = 0
+ self.blockReqCounts[inv.hash] += 1
+
+ def on_close(self, conn):
+ if not self.disconnectOkay:
+ raise EarlyDisconnectError(0)
+
+ def __init__(self):
+ NodeConnCB.__init__(self)
+ self.log = logging.getLogger("BlockRelayTest")
+ self.create_callback_map()
+
+ def add_new_connection(self, connection):
+ self.connection = connection
+ self.blockReqCounts = {}
+ self.disconnectOkay = False
+
+ def run(self):
+ try:
+ fail = False
+ self.connection.rpc.generate(1) # Leave IBD
+
+ numBlocksToGenerate = [ 8, 16, 128, 1024 ]
+ for count in range(len(numBlocksToGenerate)):
+ current_invs = []
+ for i in range(numBlocksToGenerate[count]):
+ current_invs.append(CInv(2, random.randrange(0, 1<<256)))
+ if len(current_invs) >= 50000:
+ self.connection.send_message(msg_inv(current_invs))
+ current_invs = []
+ if len(current_invs) > 0:
+ self.connection.send_message(msg_inv(current_invs))
+
+ # Wait and see how many blocks were requested
+ time.sleep(2)
+
+ total_requests = 0
+ with mininode_lock:
+ for key in self.blockReqCounts:
+ total_requests += self.blockReqCounts[key]
+ if self.blockReqCounts[key] > 1:
+ raise AssertionError("Error, test failed: block %064x requested more than once" % key)
+ if total_requests > MAX_REQUESTS:
+ raise AssertionError("Error, too many blocks (%d) requested" % total_requests)
+ print "Round %d: success (total requests: %d)" % (count, total_requests)
+ except AssertionError as e:
+ print "TEST FAILED: ", e.args
+
+ self.disconnectOkay = True
+ self.connection.disconnect_node()
+
+
+class MaxBlocksInFlightTest(BitcoinTestFramework):
+ def add_options(self, parser):
+ parser.add_option("--testbinary", dest="testbinary",
+ default=os.getenv("BITCOIND", "bitcoind"),
+ help="Binary to test max block requests behavior")
+
+ def setup_chain(self):
+ print "Initializing test directory "+self.options.tmpdir
+ initialize_chain_clean(self.options.tmpdir, 1)
+
+ def setup_network(self):
+ self.nodes = start_nodes(1, self.options.tmpdir,
+ extra_args=[['-debug', '-whitelist=127.0.0.1']],
+ binary=[self.options.testbinary])
+
+ def run_test(self):
+ test = TestManager()
+ test.add_new_connection(NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], test))
+ NetworkThread().start() # Start up network handling in another thread
+ test.run()
+
+if __name__ == '__main__':
+ MaxBlocksInFlightTest().main()
diff --git a/qa/rpc-tests/mininode.py b/qa/rpc-tests/mininode.py
new file mode 100755
index 0000000000..b7d78e74fa
--- /dev/null
+++ b/qa/rpc-tests/mininode.py
@@ -0,0 +1,1256 @@
+# mininode.py - Bitcoin P2P network half-a-node
+#
+# Distributed under the MIT/X11 software license, see the accompanying
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
+#
+# This python code was modified from ArtForz' public domain half-a-node, as
+# found in the mini-node branch of http://github.com/jgarzik/pynode.
+#
+# NodeConn: an object which manages p2p connectivity to a bitcoin node
+# NodeConnCB: a base class that describes the interface for receiving
+# callbacks with network messages from a NodeConn
+# CBlock, CTransaction, CBlockHeader, CTxIn, CTxOut, etc....:
+# data structures that should map to corresponding structures in
+# bitcoin/primitives
+# msg_block, msg_tx, msg_headers, etc.:
+# data structures that represent network messages
+# ser_*, deser_*: functions that handle serialization/deserialization
+
+
+import struct
+import socket
+import asyncore
+import binascii
+import time
+import sys
+import random
+import cStringIO
+import hashlib
+from threading import RLock
+from threading import Thread
+import logging
+import copy
+
+BIP0031_VERSION = 60000
+MY_VERSION = 60001 # past bip-31 for ping/pong
+MY_SUBVERSION = "/python-mininode-tester:0.0.1/"
+
+MAX_INV_SZ = 50000
+
+# Keep our own socket map for asyncore, so that we can track disconnects
+# ourselves (to workaround an issue with closing an asyncore socket when
+# using select)
+mininode_socket_map = dict()
+
+# One lock for synchronizing all data access between the networking thread (see
+# NetworkThread below) and the thread running the test logic. For simplicity,
+# NodeConn acquires this lock whenever delivering a message to to a NodeConnCB,
+# and whenever adding anything to the send buffer (in send_message()). This
+# lock should be acquired in the thread running the test logic to synchronize
+# access to any data shared with the NodeConnCB or NodeConn.
+mininode_lock = RLock()
+
+# Serialization/deserialization tools
+def sha256(s):
+ return hashlib.new('sha256', s).digest()
+
+
+def hash256(s):
+ return sha256(sha256(s))
+
+
+def deser_string(f):
+ nit = struct.unpack("<B", f.read(1))[0]
+ if nit == 253:
+ nit = struct.unpack("<H", f.read(2))[0]
+ elif nit == 254:
+ nit = struct.unpack("<I", f.read(4))[0]
+ elif nit == 255:
+ nit = struct.unpack("<Q", f.read(8))[0]
+ return f.read(nit)
+
+
+def ser_string(s):
+ if len(s) < 253:
+ return chr(len(s)) + s
+ elif len(s) < 0x10000:
+ return chr(253) + struct.pack("<H", len(s)) + s
+ elif len(s) < 0x100000000L:
+ return chr(254) + struct.pack("<I", len(s)) + s
+ return chr(255) + struct.pack("<Q", len(s)) + s
+
+
+def deser_uint256(f):
+ r = 0L
+ for i in xrange(8):
+ t = struct.unpack("<I", f.read(4))[0]
+ r += t << (i * 32)
+ return r
+
+
+def ser_uint256(u):
+ rs = ""
+ for i in xrange(8):
+ rs += struct.pack("<I", u & 0xFFFFFFFFL)
+ u >>= 32
+ return rs
+
+
+def uint256_from_str(s):
+ r = 0L
+ t = struct.unpack("<IIIIIIII", s[:32])
+ for i in xrange(8):
+ r += t[i] << (i * 32)
+ return r
+
+
+def uint256_from_compact(c):
+ nbytes = (c >> 24) & 0xFF
+ v = (c & 0xFFFFFFL) << (8 * (nbytes - 3))
+ return v
+
+
+def deser_vector(f, c):
+ nit = struct.unpack("<B", f.read(1))[0]
+ if nit == 253:
+ nit = struct.unpack("<H", f.read(2))[0]
+ elif nit == 254:
+ nit = struct.unpack("<I", f.read(4))[0]
+ elif nit == 255:
+ nit = struct.unpack("<Q", f.read(8))[0]
+ r = []
+ for i in xrange(nit):
+ t = c()
+ t.deserialize(f)
+ r.append(t)
+ return r
+
+
+def ser_vector(l):
+ r = ""
+ if len(l) < 253:
+ r = chr(len(l))
+ elif len(l) < 0x10000:
+ r = chr(253) + struct.pack("<H", len(l))
+ elif len(l) < 0x100000000L:
+ r = chr(254) + struct.pack("<I", len(l))
+ else:
+ r = chr(255) + struct.pack("<Q", len(l))
+ for i in l:
+ r += i.serialize()
+ return r
+
+
+def deser_uint256_vector(f):
+ nit = struct.unpack("<B", f.read(1))[0]
+ if nit == 253:
+ nit = struct.unpack("<H", f.read(2))[0]
+ elif nit == 254:
+ nit = struct.unpack("<I", f.read(4))[0]
+ elif nit == 255:
+ nit = struct.unpack("<Q", f.read(8))[0]
+ r = []
+ for i in xrange(nit):
+ t = deser_uint256(f)
+ r.append(t)
+ return r
+
+
+def ser_uint256_vector(l):
+ r = ""
+ if len(l) < 253:
+ r = chr(len(l))
+ elif len(l) < 0x10000:
+ r = chr(253) + struct.pack("<H", len(l))
+ elif len(l) < 0x100000000L:
+ r = chr(254) + struct.pack("<I", len(l))
+ else:
+ r = chr(255) + struct.pack("<Q", len(l))
+ for i in l:
+ r += ser_uint256(i)
+ return r
+
+
+def deser_string_vector(f):
+ nit = struct.unpack("<B", f.read(1))[0]
+ if nit == 253:
+ nit = struct.unpack("<H", f.read(2))[0]
+ elif nit == 254:
+ nit = struct.unpack("<I", f.read(4))[0]
+ elif nit == 255:
+ nit = struct.unpack("<Q", f.read(8))[0]
+ r = []
+ for i in xrange(nit):
+ t = deser_string(f)
+ r.append(t)
+ return r
+
+
+def ser_string_vector(l):
+ r = ""
+ if len(l) < 253:
+ r = chr(len(l))
+ elif len(l) < 0x10000:
+ r = chr(253) + struct.pack("<H", len(l))
+ elif len(l) < 0x100000000L:
+ r = chr(254) + struct.pack("<I", len(l))
+ else:
+ r = chr(255) + struct.pack("<Q", len(l))
+ for sv in l:
+ r += ser_string(sv)
+ return r
+
+
+def deser_int_vector(f):
+ nit = struct.unpack("<B", f.read(1))[0]
+ if nit == 253:
+ nit = struct.unpack("<H", f.read(2))[0]
+ elif nit == 254:
+ nit = struct.unpack("<I", f.read(4))[0]
+ elif nit == 255:
+ nit = struct.unpack("<Q", f.read(8))[0]
+ r = []
+ for i in xrange(nit):
+ t = struct.unpack("<i", f.read(4))[0]
+ r.append(t)
+ return r
+
+
+def ser_int_vector(l):
+ r = ""
+ if len(l) < 253:
+ r = chr(len(l))
+ elif len(l) < 0x10000:
+ r = chr(253) + struct.pack("<H", len(l))
+ elif len(l) < 0x100000000L:
+ r = chr(254) + struct.pack("<I", len(l))
+ else:
+ r = chr(255) + struct.pack("<Q", len(l))
+ for i in l:
+ r += struct.pack("<i", i)
+ return r
+
+
+# Objects that map to bitcoind objects, which can be serialized/deserialized
+
+class CAddress(object):
+ def __init__(self):
+ self.nServices = 1
+ self.pchReserved = "\x00" * 10 + "\xff" * 2
+ self.ip = "0.0.0.0"
+ self.port = 0
+
+ def deserialize(self, f):
+ self.nServices = struct.unpack("<Q", f.read(8))[0]
+ self.pchReserved = f.read(12)
+ self.ip = socket.inet_ntoa(f.read(4))
+ self.port = struct.unpack(">H", f.read(2))[0]
+
+ def serialize(self):
+ r = ""
+ r += struct.pack("<Q", self.nServices)
+ r += self.pchReserved
+ r += socket.inet_aton(self.ip)
+ r += struct.pack(">H", self.port)
+ return r
+
+ def __repr__(self):
+ return "CAddress(nServices=%i ip=%s port=%i)" % (self.nServices,
+ self.ip, self.port)
+
+
+class CInv(object):
+ typemap = {
+ 0: "Error",
+ 1: "TX",
+ 2: "Block"}
+
+ def __init__(self, t=0, h=0L):
+ self.type = t
+ self.hash = h
+
+ def deserialize(self, f):
+ self.type = struct.unpack("<i", f.read(4))[0]
+ self.hash = deser_uint256(f)
+
+ def serialize(self):
+ r = ""
+ r += struct.pack("<i", self.type)
+ r += ser_uint256(self.hash)
+ return r
+
+ def __repr__(self):
+ return "CInv(type=%s hash=%064x)" \
+ % (self.typemap[self.type], self.hash)
+
+
+class CBlockLocator(object):
+ def __init__(self):
+ self.nVersion = MY_VERSION
+ self.vHave = []
+
+ def deserialize(self, f):
+ self.nVersion = struct.unpack("<i", f.read(4))[0]
+ self.vHave = deser_uint256_vector(f)
+
+ def serialize(self):
+ r = ""
+ r += struct.pack("<i", self.nVersion)
+ r += ser_uint256_vector(self.vHave)
+ return r
+
+ def __repr__(self):
+ return "CBlockLocator(nVersion=%i vHave=%s)" \
+ % (self.nVersion, repr(self.vHave))
+
+
+class COutPoint(object):
+ def __init__(self, hash=0, n=0):
+ self.hash = hash
+ self.n = n
+
+ def deserialize(self, f):
+ self.hash = deser_uint256(f)
+ self.n = struct.unpack("<I", f.read(4))[0]
+
+ def serialize(self):
+ r = ""
+ r += ser_uint256(self.hash)
+ r += struct.pack("<I", self.n)
+ return r
+
+ def __repr__(self):
+ return "COutPoint(hash=%064x n=%i)" % (self.hash, self.n)
+
+
+class CTxIn(object):
+ def __init__(self, outpoint=None, scriptSig="", nSequence=0):
+ if outpoint is None:
+ self.prevout = COutPoint()
+ else:
+ self.prevout = outpoint
+ self.scriptSig = scriptSig
+ self.nSequence = nSequence
+
+ def deserialize(self, f):
+ self.prevout = COutPoint()
+ self.prevout.deserialize(f)
+ self.scriptSig = deser_string(f)
+ self.nSequence = struct.unpack("<I", f.read(4))[0]
+
+ def serialize(self):
+ r = ""
+ r += self.prevout.serialize()
+ r += ser_string(self.scriptSig)
+ r += struct.pack("<I", self.nSequence)
+ return r
+
+ def __repr__(self):
+ return "CTxIn(prevout=%s scriptSig=%s nSequence=%i)" \
+ % (repr(self.prevout), binascii.hexlify(self.scriptSig),
+ self.nSequence)
+
+
+class CTxOut(object):
+ def __init__(self, nValue=0, scriptPubKey=""):
+ self.nValue = nValue
+ self.scriptPubKey = scriptPubKey
+
+ def deserialize(self, f):
+ self.nValue = struct.unpack("<q", f.read(8))[0]
+ self.scriptPubKey = deser_string(f)
+
+ def serialize(self):
+ r = ""
+ r += struct.pack("<q", self.nValue)
+ r += ser_string(self.scriptPubKey)
+ return r
+
+ def __repr__(self):
+ return "CTxOut(nValue=%i.%08i scriptPubKey=%s)" \
+ % (self.nValue // 100000000, self.nValue % 100000000,
+ binascii.hexlify(self.scriptPubKey))
+
+
+class CTransaction(object):
+ def __init__(self, tx=None):
+ if tx is None:
+ self.nVersion = 1
+ self.vin = []
+ self.vout = []
+ self.nLockTime = 0
+ self.sha256 = None
+ self.hash = None
+ else:
+ self.nVersion = tx.nVersion
+ self.vin = copy.deepcopy(tx.vin)
+ self.vout = copy.deepcopy(tx.vout)
+ self.nLockTime = tx.nLockTime
+ self.sha256 = None
+ self.hash = None
+
+ def deserialize(self, f):
+ self.nVersion = struct.unpack("<i", f.read(4))[0]
+ self.vin = deser_vector(f, CTxIn)
+ self.vout = deser_vector(f, CTxOut)
+ self.nLockTime = struct.unpack("<I", f.read(4))[0]
+ self.sha256 = None
+ self.hash = None
+
+ def serialize(self):
+ r = ""
+ r += struct.pack("<i", self.nVersion)
+ r += ser_vector(self.vin)
+ r += ser_vector(self.vout)
+ r += struct.pack("<I", self.nLockTime)
+ return r
+
+ def rehash(self):
+ self.sha256 = None
+ self.calc_sha256()
+
+ def calc_sha256(self):
+ if self.sha256 is None:
+ self.sha256 = uint256_from_str(hash256(self.serialize()))
+ self.hash = hash256(self.serialize())[::-1].encode('hex_codec')
+
+ def is_valid(self):
+ self.calc_sha256()
+ for tout in self.vout:
+ if tout.nValue < 0 or tout.nValue > 21000000L * 100000000L:
+ return False
+ return True
+
+ def __repr__(self):
+ return "CTransaction(nVersion=%i vin=%s vout=%s nLockTime=%i)" \
+ % (self.nVersion, repr(self.vin), repr(self.vout), self.nLockTime)
+
+
+class CBlockHeader(object):
+ def __init__(self, header=None):
+ if header is None:
+ self.set_null()
+ else:
+ self.nVersion = header.nVersion
+ self.hashPrevBlock = header.hashPrevBlock
+ self.hashMerkleRoot = header.hashMerkleRoot
+ self.nTime = header.nTime
+ self.nBits = header.nBits
+ self.nNonce = header.nNonce
+ self.sha256 = header.sha256
+ self.hash = header.hash
+ self.calc_sha256()
+
+ def set_null(self):
+ self.nVersion = 1
+ self.hashPrevBlock = 0
+ self.hashMerkleRoot = 0
+ self.nTime = 0
+ self.nBits = 0
+ self.nNonce = 0
+ self.sha256 = None
+ self.hash = None
+
+ def deserialize(self, f):
+ self.nVersion = struct.unpack("<i", f.read(4))[0]
+ self.hashPrevBlock = deser_uint256(f)
+ self.hashMerkleRoot = deser_uint256(f)
+ self.nTime = struct.unpack("<I", f.read(4))[0]
+ self.nBits = struct.unpack("<I", f.read(4))[0]
+ self.nNonce = struct.unpack("<I", f.read(4))[0]
+ self.sha256 = None
+ self.hash = None
+
+ def serialize(self):
+ r = ""
+ r += struct.pack("<i", self.nVersion)
+ r += ser_uint256(self.hashPrevBlock)
+ r += ser_uint256(self.hashMerkleRoot)
+ r += struct.pack("<I", self.nTime)
+ r += struct.pack("<I", self.nBits)
+ r += struct.pack("<I", self.nNonce)
+ return r
+
+ def calc_sha256(self):
+ if self.sha256 is None:
+ r = ""
+ r += struct.pack("<i", self.nVersion)
+ r += ser_uint256(self.hashPrevBlock)
+ r += ser_uint256(self.hashMerkleRoot)
+ r += struct.pack("<I", self.nTime)
+ r += struct.pack("<I", self.nBits)
+ r += struct.pack("<I", self.nNonce)
+ self.sha256 = uint256_from_str(hash256(r))
+ self.hash = hash256(r)[::-1].encode('hex_codec')
+
+ def rehash(self):
+ self.sha256 = None
+ self.calc_sha256()
+ return self.sha256
+
+ def __repr__(self):
+ return "CBlockHeader(nVersion=%i hashPrevBlock=%064x hashMerkleRoot=%064x nTime=%s nBits=%08x nNonce=%08x)" \
+ % (self.nVersion, self.hashPrevBlock, self.hashMerkleRoot,
+ time.ctime(self.nTime), self.nBits, self.nNonce)
+
+
+class CBlock(CBlockHeader):
+ def __init__(self, header=None):
+ super(CBlock, self).__init__(header)
+ self.vtx = []
+
+ def deserialize(self, f):
+ super(CBlock, self).deserialize(f)
+ self.vtx = deser_vector(f, CTransaction)
+
+ def serialize(self):
+ r = ""
+ r += super(CBlock, self).serialize()
+ r += ser_vector(self.vtx)
+ return r
+
+ def calc_merkle_root(self):
+ hashes = []
+ for tx in self.vtx:
+ tx.calc_sha256()
+ hashes.append(ser_uint256(tx.sha256))
+ while len(hashes) > 1:
+ newhashes = []
+ for i in xrange(0, len(hashes), 2):
+ i2 = min(i+1, len(hashes)-1)
+ newhashes.append(hash256(hashes[i] + hashes[i2]))
+ hashes = newhashes
+ return uint256_from_str(hashes[0])
+
+ def is_valid(self):
+ self.calc_sha256()
+ target = uint256_from_compact(self.nBits)
+ if self.sha256 > target:
+ return False
+ for tx in self.vtx:
+ if not tx.is_valid():
+ return False
+ if self.calc_merkle_root() != self.hashMerkleRoot:
+ return False
+ return True
+
+ def solve(self):
+ self.calc_sha256()
+ target = uint256_from_compact(self.nBits)
+ while self.sha256 > target:
+ self.nNonce += 1
+ self.rehash()
+
+ def __repr__(self):
+ return "CBlock(nVersion=%i hashPrevBlock=%064x hashMerkleRoot=%064x nTime=%s nBits=%08x nNonce=%08x vtx=%s)" \
+ % (self.nVersion, self.hashPrevBlock, self.hashMerkleRoot,
+ time.ctime(self.nTime), self.nBits, self.nNonce, repr(self.vtx))
+
+
+class CUnsignedAlert(object):
+ def __init__(self):
+ self.nVersion = 1
+ self.nRelayUntil = 0
+ self.nExpiration = 0
+ self.nID = 0
+ self.nCancel = 0
+ self.setCancel = []
+ self.nMinVer = 0
+ self.nMaxVer = 0
+ self.setSubVer = []
+ self.nPriority = 0
+ self.strComment = ""
+ self.strStatusBar = ""
+ self.strReserved = ""
+
+ def deserialize(self, f):
+ self.nVersion = struct.unpack("<i", f.read(4))[0]
+ self.nRelayUntil = struct.unpack("<q", f.read(8))[0]
+ self.nExpiration = struct.unpack("<q", f.read(8))[0]
+ self.nID = struct.unpack("<i", f.read(4))[0]
+ self.nCancel = struct.unpack("<i", f.read(4))[0]
+ self.setCancel = deser_int_vector(f)
+ self.nMinVer = struct.unpack("<i", f.read(4))[0]
+ self.nMaxVer = struct.unpack("<i", f.read(4))[0]
+ self.setSubVer = deser_string_vector(f)
+ self.nPriority = struct.unpack("<i", f.read(4))[0]
+ self.strComment = deser_string(f)
+ self.strStatusBar = deser_string(f)
+ self.strReserved = deser_string(f)
+
+ def serialize(self):
+ r = ""
+ r += struct.pack("<i", self.nVersion)
+ r += struct.pack("<q", self.nRelayUntil)
+ r += struct.pack("<q", self.nExpiration)
+ r += struct.pack("<i", self.nID)
+ r += struct.pack("<i", self.nCancel)
+ r += ser_int_vector(self.setCancel)
+ r += struct.pack("<i", self.nMinVer)
+ r += struct.pack("<i", self.nMaxVer)
+ r += ser_string_vector(self.setSubVer)
+ r += struct.pack("<i", self.nPriority)
+ r += ser_string(self.strComment)
+ r += ser_string(self.strStatusBar)
+ r += ser_string(self.strReserved)
+ return r
+
+ def __repr__(self):
+ return "CUnsignedAlert(nVersion %d, nRelayUntil %d, nExpiration %d, nID %d, nCancel %d, nMinVer %d, nMaxVer %d, nPriority %d, strComment %s, strStatusBar %s, strReserved %s)" \
+ % (self.nVersion, self.nRelayUntil, self.nExpiration, self.nID,
+ self.nCancel, self.nMinVer, self.nMaxVer, self.nPriority,
+ self.strComment, self.strStatusBar, self.strReserved)
+
+
+class CAlert(object):
+ def __init__(self):
+ self.vchMsg = ""
+ self.vchSig = ""
+
+ def deserialize(self, f):
+ self.vchMsg = deser_string(f)
+ self.vchSig = deser_string(f)
+
+ def serialize(self):
+ r = ""
+ r += ser_string(self.vchMsg)
+ r += ser_string(self.vchSig)
+ return r
+
+ def __repr__(self):
+ return "CAlert(vchMsg.sz %d, vchSig.sz %d)" \
+ % (len(self.vchMsg), len(self.vchSig))
+
+
+# Objects that correspond to messages on the wire
+class msg_version(object):
+ command = "version"
+
+ def __init__(self):
+ self.nVersion = MY_VERSION
+ self.nServices = 1
+ self.nTime = time.time()
+ self.addrTo = CAddress()
+ self.addrFrom = CAddress()
+ self.nNonce = random.getrandbits(64)
+ self.strSubVer = MY_SUBVERSION
+ self.nStartingHeight = -1
+
+ def deserialize(self, f):
+ self.nVersion = struct.unpack("<i", f.read(4))[0]
+ if self.nVersion == 10300:
+ self.nVersion = 300
+ self.nServices = struct.unpack("<Q", f.read(8))[0]
+ self.nTime = struct.unpack("<q", f.read(8))[0]
+ self.addrTo = CAddress()
+ self.addrTo.deserialize(f)
+ if self.nVersion >= 106:
+ self.addrFrom = CAddress()
+ self.addrFrom.deserialize(f)
+ self.nNonce = struct.unpack("<Q", f.read(8))[0]
+ self.strSubVer = deser_string(f)
+ if self.nVersion >= 209:
+ self.nStartingHeight = struct.unpack("<i", f.read(4))[0]
+ else:
+ self.nStartingHeight = None
+ else:
+ self.addrFrom = None
+ self.nNonce = None
+ self.strSubVer = None
+ self.nStartingHeight = None
+
+ def serialize(self):
+ r = ""
+ r += struct.pack("<i", self.nVersion)
+ r += struct.pack("<Q", self.nServices)
+ r += struct.pack("<q", self.nTime)
+ r += self.addrTo.serialize()
+ r += self.addrFrom.serialize()
+ r += struct.pack("<Q", self.nNonce)
+ r += ser_string(self.strSubVer)
+ r += struct.pack("<i", self.nStartingHeight)
+ return r
+
+ def __repr__(self):
+ return 'msg_version(nVersion=%i nServices=%i nTime=%s addrTo=%s addrFrom=%s nNonce=0x%016X strSubVer=%s nStartingHeight=%i)' \
+ % (self.nVersion, self.nServices, time.ctime(self.nTime),
+ repr(self.addrTo), repr(self.addrFrom), self.nNonce,
+ self.strSubVer, self.nStartingHeight)
+
+
+class msg_verack(object):
+ command = "verack"
+
+ def __init__(self):
+ pass
+
+ def deserialize(self, f):
+ pass
+
+ def serialize(self):
+ return ""
+
+ def __repr__(self):
+ return "msg_verack()"
+
+
+class msg_addr(object):
+ command = "addr"
+
+ def __init__(self):
+ self.addrs = []
+
+ def deserialize(self, f):
+ self.addrs = deser_vector(f, CAddress)
+
+ def serialize(self):
+ return ser_vector(self.addrs)
+
+ def __repr__(self):
+ return "msg_addr(addrs=%s)" % (repr(self.addrs))
+
+
+class msg_alert(object):
+ command = "alert"
+
+ def __init__(self):
+ self.alert = CAlert()
+
+ def deserialize(self, f):
+ self.alert = CAlert()
+ self.alert.deserialize(f)
+
+ def serialize(self):
+ r = ""
+ r += self.alert.serialize()
+ return r
+
+ def __repr__(self):
+ return "msg_alert(alert=%s)" % (repr(self.alert), )
+
+
+class msg_inv(object):
+ command = "inv"
+
+ def __init__(self, inv=None):
+ if inv is None:
+ self.inv = []
+ else:
+ self.inv = inv
+
+ def deserialize(self, f):
+ self.inv = deser_vector(f, CInv)
+
+ def serialize(self):
+ return ser_vector(self.inv)
+
+ def __repr__(self):
+ return "msg_inv(inv=%s)" % (repr(self.inv))
+
+
+class msg_getdata(object):
+ command = "getdata"
+
+ def __init__(self):
+ self.inv = []
+
+ def deserialize(self, f):
+ self.inv = deser_vector(f, CInv)
+
+ def serialize(self):
+ return ser_vector(self.inv)
+
+ def __repr__(self):
+ return "msg_getdata(inv=%s)" % (repr(self.inv))
+
+
+class msg_getblocks(object):
+ command = "getblocks"
+
+ def __init__(self):
+ self.locator = CBlockLocator()
+ self.hashstop = 0L
+
+ def deserialize(self, f):
+ self.locator = CBlockLocator()
+ self.locator.deserialize(f)
+ self.hashstop = deser_uint256(f)
+
+ def serialize(self):
+ r = ""
+ r += self.locator.serialize()
+ r += ser_uint256(self.hashstop)
+ return r
+
+ def __repr__(self):
+ return "msg_getblocks(locator=%s hashstop=%064x)" \
+ % (repr(self.locator), self.hashstop)
+
+
+class msg_tx(object):
+ command = "tx"
+
+ def __init__(self, tx=CTransaction()):
+ self.tx = tx
+
+ def deserialize(self, f):
+ self.tx.deserialize(f)
+
+ def serialize(self):
+ return self.tx.serialize()
+
+ def __repr__(self):
+ return "msg_tx(tx=%s)" % (repr(self.tx))
+
+
+class msg_block(object):
+ command = "block"
+
+ def __init__(self, block=None):
+ if block is None:
+ self.block = CBlock()
+ else:
+ self.block = block
+
+ def deserialize(self, f):
+ self.block.deserialize(f)
+
+ def serialize(self):
+ return self.block.serialize()
+
+ def __repr__(self):
+ return "msg_block(block=%s)" % (repr(self.block))
+
+
+class msg_getaddr(object):
+ command = "getaddr"
+
+ def __init__(self):
+ pass
+
+ def deserialize(self, f):
+ pass
+
+ def serialize(self):
+ return ""
+
+ def __repr__(self):
+ return "msg_getaddr()"
+
+
+class msg_ping_prebip31(object):
+ command = "ping"
+
+ def __init__(self):
+ pass
+
+ def deserialize(self, f):
+ pass
+
+ def serialize(self):
+ return ""
+
+ def __repr__(self):
+ return "msg_ping() (pre-bip31)"
+
+
+class msg_ping(object):
+ command = "ping"
+
+ def __init__(self, nonce=0L):
+ self.nonce = nonce
+
+ def deserialize(self, f):
+ self.nonce = struct.unpack("<Q", f.read(8))[0]
+
+ def serialize(self):
+ r = ""
+ r += struct.pack("<Q", self.nonce)
+ return r
+
+ def __repr__(self):
+ return "msg_ping(nonce=%08x)" % self.nonce
+
+
+class msg_pong(object):
+ command = "pong"
+
+ def __init__(self, nonce=0L):
+ self.nonce = nonce
+
+ def deserialize(self, f):
+ self.nonce = struct.unpack("<Q", f.read(8))[0]
+
+ def serialize(self):
+ r = ""
+ r += struct.pack("<Q", self.nonce)
+ return r
+
+ def __repr__(self):
+ return "msg_pong(nonce=%08x)" % self.nonce
+
+
+class msg_mempool(object):
+ command = "mempool"
+
+ def __init__(self):
+ pass
+
+ def deserialize(self, f):
+ pass
+
+ def serialize(self):
+ return ""
+
+ def __repr__(self):
+ return "msg_mempool()"
+
+
+# getheaders message has
+# number of entries
+# vector of hashes
+# hash_stop (hash of last desired block header, 0 to get as many as possible)
+class msg_getheaders(object):
+ command = "getheaders"
+
+ def __init__(self):
+ self.locator = CBlockLocator()
+ self.hashstop = 0L
+
+ def deserialize(self, f):
+ self.locator = CBlockLocator()
+ self.locator.deserialize(f)
+ self.hashstop = deser_uint256(f)
+
+ def serialize(self):
+ r = ""
+ r += self.locator.serialize()
+ r += ser_uint256(self.hashstop)
+ return r
+
+ def __repr__(self):
+ return "msg_getheaders(locator=%s, stop=%064x)" \
+ % (repr(self.locator), self.hashstop)
+
+
+# headers message has
+# <count> <vector of block headers>
+class msg_headers(object):
+ command = "headers"
+
+ def __init__(self):
+ self.headers = []
+
+ def deserialize(self, f):
+ # comment in bitcoind indicates these should be deserialized as blocks
+ blocks = deser_vector(f, CBlock)
+ for x in blocks:
+ self.headers.append(CBlockHeader(x))
+
+ def serialize(self):
+ blocks = [CBlock(x) for x in self.headers]
+ return ser_vector(blocks)
+
+ def __repr__(self):
+ return "msg_headers(headers=%s)" % repr(self.headers)
+
+
+class msg_reject(object):
+ command = "reject"
+
+ def __init__(self):
+ self.message = ""
+ self.code = ""
+ self.reason = ""
+ self.data = 0L
+
+ def deserialize(self, f):
+ self.message = deser_string(f)
+ self.code = struct.unpack("<B", f.read(1))[0]
+ self.reason = deser_string(f)
+ if (self.message == "block" or self.message == "tx"):
+ self.data = deser_uint256(f)
+
+ def serialize(self):
+ r = ser_string(self.message)
+ r += struct.pack("<B", self.code)
+ r += ser_string(self.reason)
+ if (self.message == "block" or self.message == "tx"):
+ r += ser_uint256(self.data)
+ return r
+
+ def __repr__(self):
+ return "msg_reject: %s %d %s [%064x]" \
+ % (self.message, self.code, self.reason, self.data)
+
+
+# This is what a callback should look like for NodeConn
+# Reimplement the on_* functions to provide handling for events
+class NodeConnCB(object):
+ def __init__(self):
+ self.verack_received = False
+
+ # Derived classes should call this function once to set the message map
+ # which associates the derived classes' functions to incoming messages
+ def create_callback_map(self):
+ self.cbmap = {
+ "version": self.on_version,
+ "verack": self.on_verack,
+ "addr": self.on_addr,
+ "alert": self.on_alert,
+ "inv": self.on_inv,
+ "getdata": self.on_getdata,
+ "getblocks": self.on_getblocks,
+ "tx": self.on_tx,
+ "block": self.on_block,
+ "getaddr": self.on_getaddr,
+ "ping": self.on_ping,
+ "pong": self.on_pong,
+ "headers": self.on_headers,
+ "getheaders": self.on_getheaders,
+ "reject": self.on_reject,
+ "mempool": self.on_mempool
+ }
+
+ def deliver(self, conn, message):
+ with mininode_lock:
+ try:
+ self.cbmap[message.command](conn, message)
+ except:
+ print "ERROR delivering %s (%s)" % (repr(message),
+ sys.exc_info()[0])
+
+ def on_version(self, conn, message):
+ if message.nVersion >= 209:
+ conn.send_message(msg_verack())
+ conn.ver_send = min(MY_VERSION, message.nVersion)
+ if message.nVersion < 209:
+ conn.ver_recv = conn.ver_send
+
+ def on_verack(self, conn, message):
+ conn.ver_recv = conn.ver_send
+ self.verack_received = True
+
+ def on_inv(self, conn, message):
+ want = msg_getdata()
+ for i in message.inv:
+ if i.type != 0:
+ want.inv.append(i)
+ if len(want.inv):
+ conn.send_message(want)
+
+ def on_addr(self, conn, message): pass
+ def on_alert(self, conn, message): pass
+ def on_getdata(self, conn, message): pass
+ def on_getblocks(self, conn, message): pass
+ def on_tx(self, conn, message): pass
+ def on_block(self, conn, message): pass
+ def on_getaddr(self, conn, message): pass
+ def on_headers(self, conn, message): pass
+ def on_getheaders(self, conn, message): pass
+ def on_ping(self, conn, message):
+ if conn.ver_send > BIP0031_VERSION:
+ conn.send_message(msg_pong(message.nonce))
+ def on_reject(self, conn, message): pass
+ def on_close(self, conn): pass
+ def on_mempool(self, conn): pass
+ def on_pong(self, conn, message): pass
+
+
+# The actual NodeConn class
+# This class provides an interface for a p2p connection to a specified node
+class NodeConn(asyncore.dispatcher):
+ messagemap = {
+ "version": msg_version,
+ "verack": msg_verack,
+ "addr": msg_addr,
+ "alert": msg_alert,
+ "inv": msg_inv,
+ "getdata": msg_getdata,
+ "getblocks": msg_getblocks,
+ "tx": msg_tx,
+ "block": msg_block,
+ "getaddr": msg_getaddr,
+ "ping": msg_ping,
+ "pong": msg_pong,
+ "headers": msg_headers,
+ "getheaders": msg_getheaders,
+ "reject": msg_reject,
+ "mempool": msg_mempool
+ }
+ MAGIC_BYTES = {
+ "mainnet": "\xf9\xbe\xb4\xd9", # mainnet
+ "testnet3": "\x0b\x11\x09\x07", # testnet3
+ "regtest": "\xfa\xbf\xb5\xda" # regtest
+ }
+
+ def __init__(self, dstaddr, dstport, rpc, callback, net="regtest"):
+ asyncore.dispatcher.__init__(self, map=mininode_socket_map)
+ self.log = logging.getLogger("NodeConn(%s:%d)" % (dstaddr, dstport))
+ self.dstaddr = dstaddr
+ self.dstport = dstport
+ self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
+ self.sendbuf = ""
+ self.recvbuf = ""
+ self.ver_send = 209
+ self.ver_recv = 209
+ self.last_sent = 0
+ self.state = "connecting"
+ self.network = net
+ self.cb = callback
+ self.disconnect = False
+
+ # stuff version msg into sendbuf
+ vt = msg_version()
+ vt.addrTo.ip = self.dstaddr
+ vt.addrTo.port = self.dstport
+ vt.addrFrom.ip = "0.0.0.0"
+ vt.addrFrom.port = 0
+ self.send_message(vt, True)
+ print 'MiniNode: Connecting to Bitcoin Node IP # ' + dstaddr + ':' \
+ + str(dstport)
+
+ try:
+ self.connect((dstaddr, dstport))
+ except:
+ self.handle_close()
+ self.rpc = rpc
+
+ def show_debug_msg(self, msg):
+ self.log.debug(msg)
+
+ def handle_connect(self):
+ self.show_debug_msg("MiniNode: Connected & Listening: \n")
+ self.state = "connected"
+
+ def handle_close(self):
+ self.show_debug_msg("MiniNode: Closing Connection to %s:%d... "
+ % (self.dstaddr, self.dstport))
+ self.state = "closed"
+ self.recvbuf = ""
+ self.sendbuf = ""
+ try:
+ self.close()
+ except:
+ pass
+ self.cb.on_close(self)
+
+ def handle_read(self):
+ try:
+ t = self.recv(8192)
+ if len(t) > 0:
+ self.recvbuf += t
+ self.got_data()
+ except:
+ pass
+
+ def readable(self):
+ return True
+
+ def writable(self):
+ with mininode_lock:
+ length = len(self.sendbuf)
+ return (length > 0)
+
+ def handle_write(self):
+ with mininode_lock:
+ try:
+ sent = self.send(self.sendbuf)
+ except:
+ self.handle_close()
+ return
+ self.sendbuf = self.sendbuf[sent:]
+
+ def got_data(self):
+ while True:
+ if len(self.recvbuf) < 4:
+ return
+ if self.recvbuf[:4] != self.MAGIC_BYTES[self.network]:
+ raise ValueError("got garbage %s" % repr(self.recvbuf))
+ if self.ver_recv < 209:
+ if len(self.recvbuf) < 4 + 12 + 4:
+ return
+ command = self.recvbuf[4:4+12].split("\x00", 1)[0]
+ msglen = struct.unpack("<i", self.recvbuf[4+12:4+12+4])[0]
+ checksum = None
+ if len(self.recvbuf) < 4 + 12 + 4 + msglen:
+ return
+ msg = self.recvbuf[4+12+4:4+12+4+msglen]
+ self.recvbuf = self.recvbuf[4+12+4+msglen:]
+ else:
+ if len(self.recvbuf) < 4 + 12 + 4 + 4:
+ return
+ command = self.recvbuf[4:4+12].split("\x00", 1)[0]
+ msglen = struct.unpack("<i", self.recvbuf[4+12:4+12+4])[0]
+ checksum = self.recvbuf[4+12+4:4+12+4+4]
+ if len(self.recvbuf) < 4 + 12 + 4 + 4 + msglen:
+ return
+ msg = self.recvbuf[4+12+4+4:4+12+4+4+msglen]
+ th = sha256(msg)
+ h = sha256(th)
+ if checksum != h[:4]:
+ raise ValueError("got bad checksum " + repr(self.recvbuf))
+ self.recvbuf = self.recvbuf[4+12+4+4+msglen:]
+ if command in self.messagemap:
+ f = cStringIO.StringIO(msg)
+ t = self.messagemap[command]()
+ t.deserialize(f)
+ self.got_message(t)
+ else:
+ self.show_debug_msg("Unknown command: '" + command + "' " +
+ repr(msg))
+
+ def send_message(self, message, pushbuf=False):
+ if self.state != "connected" and not pushbuf:
+ return
+ self.show_debug_msg("Send %s" % repr(message))
+ command = message.command
+ data = message.serialize()
+ tmsg = self.MAGIC_BYTES[self.network]
+ tmsg += command
+ tmsg += "\x00" * (12 - len(command))
+ tmsg += struct.pack("<I", len(data))
+ if self.ver_send >= 209:
+ th = sha256(data)
+ h = sha256(th)
+ tmsg += h[:4]
+ tmsg += data
+ with mininode_lock:
+ self.sendbuf += tmsg
+ self.last_sent = time.time()
+
+ def got_message(self, message):
+ if message.command == "version":
+ if message.nVersion <= BIP0031_VERSION:
+ self.messagemap['ping'] = msg_ping_prebip31
+ if self.last_sent + 30 * 60 < time.time():
+ self.send_message(self.messagemap['ping']())
+ self.show_debug_msg("Recv %s" % repr(message))
+ self.cb.deliver(self, message)
+
+ def disconnect_node(self):
+ self.disconnect = True
+
+
+class NetworkThread(Thread):
+ def run(self):
+ while mininode_socket_map:
+ # We check for whether to disconnect outside of the asyncore
+ # loop to workaround the behavior of asyncore when using
+ # select
+ disconnected = []
+ for fd, obj in mininode_socket_map.items():
+ if obj.disconnect:
+ disconnected.append(obj)
+ [ obj.handle_close() for obj in disconnected ]
+ asyncore.loop(0.1, use_poll=True, map=mininode_socket_map, count=1)
+
+
+# An exception we can raise if we detect a potential disconnect
+# (p2p or rpc) before the test is complete
+class EarlyDisconnectError(Exception):
+ def __init__(self, value):
+ self.value = value
+
+ def __str__(self):
+ return repr(self.value)
diff --git a/qa/rpc-tests/pruning.py b/qa/rpc-tests/pruning.py
index f26cbee1e2..85fd1c982a 100755
--- a/qa/rpc-tests/pruning.py
+++ b/qa/rpc-tests/pruning.py
@@ -7,7 +7,8 @@
# Test pruning code
# ********
# WARNING:
-# This test uses 4GB of disk space and takes in excess of 30 mins to run
+# This test uses 4GB of disk space.
+# This test takes 30 mins or more (up to 2 hours)
# ********
from test_framework import BitcoinTestFramework
@@ -51,11 +52,11 @@ class PruneTest(BitcoinTestFramework):
self.is_network_split = False
# Create nodes 0 and 1 to mine
- self.nodes.append(start_node(0, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=999000", "-checkblocks=5"], timewait=300))
- self.nodes.append(start_node(1, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=999000", "-checkblocks=5"], timewait=300))
+ self.nodes.append(start_node(0, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=999000", "-checkblocks=5"], timewait=900))
+ self.nodes.append(start_node(1, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=999000", "-checkblocks=5"], timewait=900))
# Create node 2 to test pruning
- self.nodes.append(start_node(2, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-prune=550"], timewait=300))
+ self.nodes.append(start_node(2, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-prune=550"], timewait=900))
self.prunedir = self.options.tmpdir+"/node2/regtest/blocks/"
self.address[0] = self.nodes[0].getnewaddress()
@@ -108,7 +109,7 @@ class PruneTest(BitcoinTestFramework):
# Node 2 stays connected, so it hears about the stale blocks and then reorg's when node0 reconnects
# Stopping node 0 also clears its mempool, so it doesn't have node1's transactions to accidentally mine
stop_node(self.nodes[0],0)
- self.nodes[0]=start_node(0, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=999000", "-checkblocks=5"], timewait=300)
+ self.nodes[0]=start_node(0, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=999000", "-checkblocks=5"], timewait=900)
# Mine 24 blocks in node 1
self.utxo = self.nodes[1].listunspent()
for i in xrange(24):
@@ -135,7 +136,7 @@ class PruneTest(BitcoinTestFramework):
# Reboot node 1 to clear its mempool (hopefully make the invalidate faster)
# Lower the block max size so we don't keep mining all our big mempool transactions (from disconnected blocks)
stop_node(self.nodes[1],1)
- self.nodes[1]=start_node(1, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=5000", "-checkblocks=5", "-disablesafemode"], timewait=300)
+ self.nodes[1]=start_node(1, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=5000", "-checkblocks=5", "-disablesafemode"], timewait=900)
height = self.nodes[1].getblockcount()
print "Current block height:", height
@@ -158,7 +159,7 @@ class PruneTest(BitcoinTestFramework):
# Reboot node1 to clear those giant tx's from mempool
stop_node(self.nodes[1],1)
- self.nodes[1]=start_node(1, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=5000", "-checkblocks=5", "-disablesafemode"], timewait=300)
+ self.nodes[1]=start_node(1, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=5000", "-checkblocks=5", "-disablesafemode"], timewait=900)
print "Generating new longer chain of 300 more blocks"
self.nodes[1].generate(300)
@@ -223,7 +224,7 @@ class PruneTest(BitcoinTestFramework):
waitstart = time.time()
while self.nodes[2].getblockcount() < goalbestheight:
time.sleep(0.1)
- if time.time() - waitstart > 300:
+ if time.time() - waitstart > 900:
raise AssertionError("Node 2 didn't reorg to proper height")
assert(self.nodes[2].getbestblockhash() == goalbesthash)
# Verify we can now have the data for a block previously pruned
@@ -256,7 +257,7 @@ class PruneTest(BitcoinTestFramework):
def run_test(self):
- print "Warning! This test requires 4GB of disk space and takes over 30 mins"
+ print "Warning! This test requires 4GB of disk space and takes over 30 mins (up to 2 hours)"
print "Mining a big blockchain of 995 blocks"
self.create_big_chain()
# Chain diagram key:
diff --git a/qa/rpc-tests/rawtransactions.py b/qa/rpc-tests/rawtransactions.py
new file mode 100755
index 0000000000..3d80c97d74
--- /dev/null
+++ b/qa/rpc-tests/rawtransactions.py
@@ -0,0 +1,144 @@
+#!/usr/bin/env python2
+# Copyright (c) 2014 The Bitcoin Core developers
+# Distributed under the MIT software license, see the accompanying
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#
+# Test re-org scenarios with a mempool that contains transactions
+# that spend (directly or indirectly) coinbase transactions.
+#
+
+from test_framework import BitcoinTestFramework
+from util import *
+from pprint import pprint
+from time import sleep
+
+# Create one-input, one-output, no-fee transaction:
+class RawTransactionsTest(BitcoinTestFramework):
+
+ def setup_chain(self):
+ print("Initializing test directory "+self.options.tmpdir)
+ initialize_chain_clean(self.options.tmpdir, 3)
+
+ def setup_network(self, split=False):
+ self.nodes = start_nodes(3, self.options.tmpdir)
+
+ #connect to a local machine for debugging
+ #url = "http://bitcoinrpc:DP6DvqZtqXarpeNWyN3LZTFchCCyCUuHwNF7E8pX99x1@%s:%d" % ('127.0.0.1', 18332)
+ #proxy = AuthServiceProxy(url)
+ #proxy.url = url # store URL on proxy for info
+ #self.nodes.append(proxy)
+
+ connect_nodes_bi(self.nodes,0,1)
+ connect_nodes_bi(self.nodes,1,2)
+ connect_nodes_bi(self.nodes,0,2)
+
+ self.is_network_split=False
+ self.sync_all()
+
+ def run_test(self):
+
+ #prepare some coins for multiple *rawtransaction commands
+ self.nodes[2].generate(1)
+ self.nodes[0].generate(101)
+ self.sync_all()
+ self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(),1.5);
+ self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(),1.0);
+ self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(),5.0);
+ self.sync_all()
+ self.nodes[0].generate(5)
+ self.sync_all()
+
+ #########################################
+ # sendrawtransaction with missing input #
+ #########################################
+ inputs = [ {'txid' : "1d1d4e24ed99057e84c3f80fd8fbec79ed9e1acee37da269356ecea000000000", 'vout' : 1}] #won't exists
+ outputs = { self.nodes[0].getnewaddress() : 4.998 }
+ rawtx = self.nodes[2].createrawtransaction(inputs, outputs)
+ rawtx = self.nodes[2].signrawtransaction(rawtx)
+
+ errorString = ""
+ try:
+ rawtx = self.nodes[2].sendrawtransaction(rawtx['hex'])
+ except JSONRPCException,e:
+ errorString = e.error['message']
+
+ assert_equal("Missing inputs" in errorString, True);
+
+ #########################
+ # RAW TX MULTISIG TESTS #
+ #########################
+ # 2of2 test
+ addr1 = self.nodes[2].getnewaddress()
+ addr2 = self.nodes[2].getnewaddress()
+
+ addr1Obj = self.nodes[2].validateaddress(addr1)
+ addr2Obj = self.nodes[2].validateaddress(addr2)
+
+ mSigObj = self.nodes[2].addmultisigaddress(2, [addr1Obj['pubkey'], addr2Obj['pubkey']])
+ mSigObjValid = self.nodes[2].validateaddress(mSigObj)
+
+ #use balance deltas instead of absolute values
+ bal = self.nodes[2].getbalance()
+
+ # send 1.2 BTC to msig adr
+ txId = self.nodes[0].sendtoaddress(mSigObj, 1.2);
+ self.sync_all()
+ self.nodes[0].generate(1)
+ self.sync_all()
+ assert_equal(self.nodes[2].getbalance(), bal+Decimal('1.20000000')) #node2 has both keys of the 2of2 ms addr., tx should affect the balance
+
+
+
+
+ # 2of3 test from different nodes
+ bal = self.nodes[2].getbalance()
+ addr1 = self.nodes[1].getnewaddress()
+ addr2 = self.nodes[2].getnewaddress()
+ addr3 = self.nodes[2].getnewaddress()
+
+ addr1Obj = self.nodes[1].validateaddress(addr1)
+ addr2Obj = self.nodes[2].validateaddress(addr2)
+ addr3Obj = self.nodes[2].validateaddress(addr3)
+
+ mSigObj = self.nodes[2].addmultisigaddress(2, [addr1Obj['pubkey'], addr2Obj['pubkey'], addr3Obj['pubkey']])
+ mSigObjValid = self.nodes[2].validateaddress(mSigObj)
+
+ txId = self.nodes[0].sendtoaddress(mSigObj, 2.2);
+ decTx = self.nodes[0].gettransaction(txId)
+ rawTx = self.nodes[0].decoderawtransaction(decTx['hex'])
+ sPK = rawTx['vout'][0]['scriptPubKey']['hex']
+ self.sync_all()
+ self.nodes[0].generate(1)
+ self.sync_all()
+
+ #THIS IS A INCOMPLETE FEATURE
+ #NODE2 HAS TWO OF THREE KEY AND THE FUNDS SHOULD BE SPENDABLE AND COUNT AT BALANCE CALCULATION
+ assert_equal(self.nodes[2].getbalance(), bal) #for now, assume the funds of a 2of3 multisig tx are not marked as spendable
+
+ txDetails = self.nodes[0].gettransaction(txId, True)
+ rawTx = self.nodes[0].decoderawtransaction(txDetails['hex'])
+ vout = False
+ for outpoint in rawTx['vout']:
+ if outpoint['value'] == Decimal('2.20000000'):
+ vout = outpoint
+ break;
+
+ bal = self.nodes[0].getbalance()
+ inputs = [{ "txid" : txId, "vout" : vout['n'], "scriptPubKey" : vout['scriptPubKey']['hex']}]
+ outputs = { self.nodes[0].getnewaddress() : 2.19 }
+ rawTx = self.nodes[2].createrawtransaction(inputs, outputs)
+ rawTxPartialSigned = self.nodes[1].signrawtransaction(rawTx, inputs)
+ assert_equal(rawTxPartialSigned['complete'], False) #node1 only has one key, can't comp. sign the tx
+
+ rawTxSigned = self.nodes[2].signrawtransaction(rawTx, inputs)
+ assert_equal(rawTxSigned['complete'], True) #node2 can sign the tx compl., own two of three keys
+ self.nodes[2].sendrawtransaction(rawTxSigned['hex'])
+ rawTx = self.nodes[0].decoderawtransaction(rawTxSigned['hex'])
+ self.sync_all()
+ self.nodes[0].generate(1)
+ self.sync_all()
+ assert_equal(self.nodes[0].getbalance(), bal+Decimal('50.00000000')+Decimal('2.19000000')) #block reward + tx
+
+if __name__ == '__main__':
+ RawTransactionsTest().main()
diff --git a/qa/rpc-tests/rest.py b/qa/rpc-tests/rest.py
index 9b7008531c..9f0d049fe9 100755
--- a/qa/rpc-tests/rest.py
+++ b/qa/rpc-tests/rest.py
@@ -9,7 +9,10 @@
from test_framework import BitcoinTestFramework
from util import *
+from struct import *
+import binascii
import json
+import StringIO
try:
import http.client as httplib
@@ -20,45 +23,210 @@ try:
except ImportError:
import urlparse
-def http_get_call(host, port, path, response_object = 0):
+def deser_uint256(f):
+ r = 0
+ for i in range(8):
+ t = unpack(b"<I", f.read(4))[0]
+ r += t << (i * 32)
+ return r
+
+#allows simple http get calls with a request body
+def http_get_call(host, port, path, requestdata = '', response_object = 0):
conn = httplib.HTTPConnection(host, port)
- conn.request('GET', path)
+ conn.request('GET', path, requestdata)
if response_object:
return conn.getresponse()
return conn.getresponse().read()
-
class RESTTest (BitcoinTestFramework):
FORMAT_SEPARATOR = "."
+ def setup_chain(self):
+ print("Initializing test directory "+self.options.tmpdir)
+ initialize_chain_clean(self.options.tmpdir, 3)
+
+ def setup_network(self, split=False):
+ self.nodes = start_nodes(3, self.options.tmpdir)
+ connect_nodes_bi(self.nodes,0,1)
+ connect_nodes_bi(self.nodes,1,2)
+ connect_nodes_bi(self.nodes,0,2)
+ self.is_network_split=False
+ self.sync_all()
+
def run_test(self):
url = urlparse.urlparse(self.nodes[0].url)
+ print "Mining blocks..."
+
+ self.nodes[0].generate(1)
+ self.sync_all()
+ self.nodes[2].generate(100)
+ self.sync_all()
+
+ assert_equal(self.nodes[0].getbalance(), 50)
+
+ txid = self.nodes[0].sendtoaddress(self.nodes[1].getnewaddress(), 0.1)
+ self.sync_all()
+ self.nodes[2].generate(1)
+ self.sync_all()
+ bb_hash = self.nodes[0].getbestblockhash()
+
+ assert_equal(self.nodes[1].getbalance(), Decimal("0.1")) #balance now should be 0.1 on node 1
+
+ # load the latest 0.1 tx over the REST API
+ json_string = http_get_call(url.hostname, url.port, '/rest/tx/'+txid+self.FORMAT_SEPARATOR+"json")
+ json_obj = json.loads(json_string)
+ vintx = json_obj['vin'][0]['txid'] # get the vin to later check for utxo (should be spent by then)
+ # get n of 0.1 outpoint
+ n = 0
+ for vout in json_obj['vout']:
+ if vout['value'] == 0.1:
+ n = vout['n']
+
+
+ ######################################
+ # GETUTXOS: query a unspent outpoint #
+ ######################################
+ json_request = '{"checkmempool":true,"outpoints":[{"txid":"'+txid+'","n":'+str(n)+'}]}'
+ json_string = http_get_call(url.hostname, url.port, '/rest/getutxos'+self.FORMAT_SEPARATOR+'json', json_request)
+ json_obj = json.loads(json_string)
+
+ #check chainTip response
+ assert_equal(json_obj['chaintipHash'], bb_hash)
+
+ #make sure there is one utxo
+ assert_equal(len(json_obj['utxos']), 1)
+ assert_equal(json_obj['utxos'][0]['value'], 0.1)
+
+
+ ################################################
+ # GETUTXOS: now query a already spent outpoint #
+ ################################################
+ json_request = '{"checkmempool":true,"outpoints":[{"txid":"'+vintx+'","n":0}]}'
+ json_string = http_get_call(url.hostname, url.port, '/rest/getutxos'+self.FORMAT_SEPARATOR+'json', json_request)
+ json_obj = json.loads(json_string)
+
+ #check chainTip response
+ assert_equal(json_obj['chaintipHash'], bb_hash)
+
+ #make sure there is no utox in the response because this oupoint has been spent
+ assert_equal(len(json_obj['utxos']), 0)
+
+ #check bitmap
+ assert_equal(json_obj['bitmap'], "0")
+
+
+ ##################################################
+ # GETUTXOS: now check both with the same request #
+ ##################################################
+ json_request = '{"checkmempool":true,"outpoints":[{"txid":"'+txid+'","n":'+str(n)+'},{"txid":"'+vintx+'","n":0}]}'
+ json_string = http_get_call(url.hostname, url.port, '/rest/getutxos'+self.FORMAT_SEPARATOR+'json', json_request)
+ json_obj = json.loads(json_string)
+ assert_equal(len(json_obj['utxos']), 1)
+ assert_equal(json_obj['bitmap'], "10")
+
+ #test binary response
bb_hash = self.nodes[0].getbestblockhash()
+ binaryRequest = b'\x01\x02'
+ binaryRequest += binascii.unhexlify(txid)
+ binaryRequest += pack("i", n);
+ binaryRequest += binascii.unhexlify(vintx);
+ binaryRequest += pack("i", 0);
+
+ bin_response = http_get_call(url.hostname, url.port, '/rest/getutxos'+self.FORMAT_SEPARATOR+'bin', binaryRequest)
+
+ output = StringIO.StringIO()
+ output.write(bin_response)
+ output.seek(0)
+ chainHeight = unpack("i", output.read(4))[0]
+ hashFromBinResponse = hex(deser_uint256(output))[2:].zfill(65).rstrip("L")
+
+ assert_equal(bb_hash, hashFromBinResponse) #check if getutxo's chaintip during calculation was fine
+ assert_equal(chainHeight, 102) #chain height must be 102
+
+
+ ############################
+ # GETUTXOS: mempool checks #
+ ############################
+
+ # do a tx and don't sync
+ txid = self.nodes[0].sendtoaddress(self.nodes[1].getnewaddress(), 0.1)
+ json_string = http_get_call(url.hostname, url.port, '/rest/tx/'+txid+self.FORMAT_SEPARATOR+"json")
+ json_obj = json.loads(json_string)
+ vintx = json_obj['vin'][0]['txid'] # get the vin to later check for utxo (should be spent by then)
+ # get n of 0.1 outpoint
+ n = 0
+ for vout in json_obj['vout']:
+ if vout['value'] == 0.1:
+ n = vout['n']
+
+ json_request = '{"checkmempool":false,"outpoints":[{"txid":"'+txid+'","n":'+str(n)+'}]}'
+ json_string = http_get_call(url.hostname, url.port, '/rest/getutxos'+self.FORMAT_SEPARATOR+'json', json_request)
+ json_obj = json.loads(json_string)
+ assert_equal(len(json_obj['utxos']), 0) #there should be a outpoint because it has just added to the mempool
+
+ json_request = '{"checkmempool":true,"outpoints":[{"txid":"'+txid+'","n":'+str(n)+'}]}'
+ json_string = http_get_call(url.hostname, url.port, '/rest/getutxos'+self.FORMAT_SEPARATOR+'json', json_request)
+ json_obj = json.loads(json_string)
+ assert_equal(len(json_obj['utxos']), 1) #there should be a outpoint because it has just added to the mempool
+
+ #do some invalid requests
+ json_request = '{"checkmempool'
+ response = http_get_call(url.hostname, url.port, '/rest/getutxos'+self.FORMAT_SEPARATOR+'json', json_request, True)
+ assert_equal(response.status, 500) #must be a 500 because we send a invalid json request
+
+ json_request = '{"checkmempool'
+ response = http_get_call(url.hostname, url.port, '/rest/getutxos'+self.FORMAT_SEPARATOR+'bin', json_request, True)
+ assert_equal(response.status, 500) #must be a 500 because we send a invalid bin request
+
+ #test limits
+ json_request = '{"checkmempool":true,"outpoints":['
+ for x in range(0, 200):
+ json_request += '{"txid":"'+txid+'","n":'+str(n)+'},'
+ json_request = json_request.rstrip(",")
+ json_request+="]}";
+ response = http_get_call(url.hostname, url.port, '/rest/getutxos'+self.FORMAT_SEPARATOR+'json', json_request, True)
+ assert_equal(response.status, 500) #must be a 500 because we exceeding the limits
+
+ json_request = '{"checkmempool":true,"outpoints":['
+ for x in range(0, 90):
+ json_request += '{"txid":"'+txid+'","n":'+str(n)+'},'
+ json_request = json_request.rstrip(",")
+ json_request+="]}";
+ response = http_get_call(url.hostname, url.port, '/rest/getutxos'+self.FORMAT_SEPARATOR+'json', json_request, True)
+ assert_equal(response.status, 200) #must be a 500 because we exceeding the limits
+
+ self.nodes[0].generate(1) #generate block to not affect upcomming tests
+ self.sync_all()
+
+ ################
+ # /rest/block/ #
+ ################
+
# check binary format
- response = http_get_call(url.hostname, url.port, '/rest/block/'+bb_hash+self.FORMAT_SEPARATOR+"bin", True)
+ response = http_get_call(url.hostname, url.port, '/rest/block/'+bb_hash+self.FORMAT_SEPARATOR+"bin", "", True)
assert_equal(response.status, 200)
assert_greater_than(int(response.getheader('content-length')), 80)
response_str = response.read()
# compare with block header
- response_header = http_get_call(url.hostname, url.port, '/rest/headers/1/'+bb_hash+self.FORMAT_SEPARATOR+"bin", True)
+ response_header = http_get_call(url.hostname, url.port, '/rest/headers/1/'+bb_hash+self.FORMAT_SEPARATOR+"bin", "", True)
assert_equal(response_header.status, 200)
assert_equal(int(response_header.getheader('content-length')), 80)
response_header_str = response_header.read()
assert_equal(response_str[0:80], response_header_str)
# check block hex format
- response_hex = http_get_call(url.hostname, url.port, '/rest/block/'+bb_hash+self.FORMAT_SEPARATOR+"hex", True)
+ response_hex = http_get_call(url.hostname, url.port, '/rest/block/'+bb_hash+self.FORMAT_SEPARATOR+"hex", "", True)
assert_equal(response_hex.status, 200)
assert_greater_than(int(response_hex.getheader('content-length')), 160)
response_hex_str = response_hex.read()
assert_equal(response_str.encode("hex")[0:160], response_hex_str[0:160])
# compare with hex block header
- response_header_hex = http_get_call(url.hostname, url.port, '/rest/headers/1/'+bb_hash+self.FORMAT_SEPARATOR+"hex", True)
+ response_header_hex = http_get_call(url.hostname, url.port, '/rest/headers/1/'+bb_hash+self.FORMAT_SEPARATOR+"hex", "", True)
assert_equal(response_header_hex.status, 200)
assert_greater_than(int(response_header_hex.getheader('content-length')), 160)
response_header_hex_str = response_header_hex.read()
@@ -77,9 +245,11 @@ class RESTTest (BitcoinTestFramework):
assert_equal(json_obj['txid'], tx_hash)
# check hex format response
- hex_string = http_get_call(url.hostname, url.port, '/rest/tx/'+tx_hash+self.FORMAT_SEPARATOR+"hex", True)
+ hex_string = http_get_call(url.hostname, url.port, '/rest/tx/'+tx_hash+self.FORMAT_SEPARATOR+"hex", "", True)
assert_equal(hex_string.status, 200)
assert_greater_than(int(response.getheader('content-length')), 10)
+
+
# check block tx details
# let's make 3 tx and mine them on node 1
diff --git a/qa/rpc-tests/script.py b/qa/rpc-tests/script.py
new file mode 100644
index 0000000000..03695b8635
--- /dev/null
+++ b/qa/rpc-tests/script.py
@@ -0,0 +1,896 @@
+#
+# script.py
+#
+# This file is modified from python-bitcoinlib.
+#
+# Distributed under the MIT/X11 software license, see the accompanying
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
+#
+
+"""Scripts
+
+Functionality to build scripts, as well as SignatureHash().
+"""
+
+from __future__ import absolute_import, division, print_function, unicode_literals
+
+from mininode import CTransaction, CTxOut, hash256
+
+import sys
+bchr = chr
+bord = ord
+if sys.version > '3':
+ long = int
+ bchr = lambda x: bytes([x])
+ bord = lambda x: x
+
+import copy
+import struct
+
+import bignum
+
+MAX_SCRIPT_SIZE = 10000
+MAX_SCRIPT_ELEMENT_SIZE = 520
+MAX_SCRIPT_OPCODES = 201
+
+OPCODE_NAMES = {}
+
+_opcode_instances = []
+class CScriptOp(int):
+ """A single script opcode"""
+ __slots__ = []
+
+ @staticmethod
+ def encode_op_pushdata(d):
+ """Encode a PUSHDATA op, returning bytes"""
+ if len(d) < 0x4c:
+ return b'' + bchr(len(d)) + d # OP_PUSHDATA
+ elif len(d) <= 0xff:
+ return b'\x4c' + bchr(len(d)) + d # OP_PUSHDATA1
+ elif len(d) <= 0xffff:
+ return b'\x4d' + struct.pack(b'<H', len(d)) + d # OP_PUSHDATA2
+ elif len(d) <= 0xffffffff:
+ return b'\x4e' + struct.pack(b'<I', len(d)) + d # OP_PUSHDATA4
+ else:
+ raise ValueError("Data too long to encode in a PUSHDATA op")
+
+ @staticmethod
+ def encode_op_n(n):
+ """Encode a small integer op, returning an opcode"""
+ if not (0 <= n <= 16):
+ raise ValueError('Integer must be in range 0 <= n <= 16, got %d' % n)
+
+ if n == 0:
+ return OP_0
+ else:
+ return CScriptOp(OP_1 + n-1)
+
+ def decode_op_n(self):
+ """Decode a small integer opcode, returning an integer"""
+ if self == OP_0:
+ return 0
+
+ if not (self == OP_0 or OP_1 <= self <= OP_16):
+ raise ValueError('op %r is not an OP_N' % self)
+
+ return int(self - OP_1+1)
+
+ def is_small_int(self):
+ """Return true if the op pushes a small integer to the stack"""
+ if 0x51 <= self <= 0x60 or self == 0:
+ return True
+ else:
+ return False
+
+ def __str__(self):
+ return repr(self)
+
+ def __repr__(self):
+ if self in OPCODE_NAMES:
+ return OPCODE_NAMES[self]
+ else:
+ return 'CScriptOp(0x%x)' % self
+
+ def __new__(cls, n):
+ try:
+ return _opcode_instances[n]
+ except IndexError:
+ assert len(_opcode_instances) == n
+ _opcode_instances.append(super(CScriptOp, cls).__new__(cls, n))
+ return _opcode_instances[n]
+
+# Populate opcode instance table
+for n in range(0xff+1):
+ CScriptOp(n)
+
+
+# push value
+OP_0 = CScriptOp(0x00)
+OP_FALSE = OP_0
+OP_PUSHDATA1 = CScriptOp(0x4c)
+OP_PUSHDATA2 = CScriptOp(0x4d)
+OP_PUSHDATA4 = CScriptOp(0x4e)
+OP_1NEGATE = CScriptOp(0x4f)
+OP_RESERVED = CScriptOp(0x50)
+OP_1 = CScriptOp(0x51)
+OP_TRUE=OP_1
+OP_2 = CScriptOp(0x52)
+OP_3 = CScriptOp(0x53)
+OP_4 = CScriptOp(0x54)
+OP_5 = CScriptOp(0x55)
+OP_6 = CScriptOp(0x56)
+OP_7 = CScriptOp(0x57)
+OP_8 = CScriptOp(0x58)
+OP_9 = CScriptOp(0x59)
+OP_10 = CScriptOp(0x5a)
+OP_11 = CScriptOp(0x5b)
+OP_12 = CScriptOp(0x5c)
+OP_13 = CScriptOp(0x5d)
+OP_14 = CScriptOp(0x5e)
+OP_15 = CScriptOp(0x5f)
+OP_16 = CScriptOp(0x60)
+
+# control
+OP_NOP = CScriptOp(0x61)
+OP_VER = CScriptOp(0x62)
+OP_IF = CScriptOp(0x63)
+OP_NOTIF = CScriptOp(0x64)
+OP_VERIF = CScriptOp(0x65)
+OP_VERNOTIF = CScriptOp(0x66)
+OP_ELSE = CScriptOp(0x67)
+OP_ENDIF = CScriptOp(0x68)
+OP_VERIFY = CScriptOp(0x69)
+OP_RETURN = CScriptOp(0x6a)
+
+# stack ops
+OP_TOALTSTACK = CScriptOp(0x6b)
+OP_FROMALTSTACK = CScriptOp(0x6c)
+OP_2DROP = CScriptOp(0x6d)
+OP_2DUP = CScriptOp(0x6e)
+OP_3DUP = CScriptOp(0x6f)
+OP_2OVER = CScriptOp(0x70)
+OP_2ROT = CScriptOp(0x71)
+OP_2SWAP = CScriptOp(0x72)
+OP_IFDUP = CScriptOp(0x73)
+OP_DEPTH = CScriptOp(0x74)
+OP_DROP = CScriptOp(0x75)
+OP_DUP = CScriptOp(0x76)
+OP_NIP = CScriptOp(0x77)
+OP_OVER = CScriptOp(0x78)
+OP_PICK = CScriptOp(0x79)
+OP_ROLL = CScriptOp(0x7a)
+OP_ROT = CScriptOp(0x7b)
+OP_SWAP = CScriptOp(0x7c)
+OP_TUCK = CScriptOp(0x7d)
+
+# splice ops
+OP_CAT = CScriptOp(0x7e)
+OP_SUBSTR = CScriptOp(0x7f)
+OP_LEFT = CScriptOp(0x80)
+OP_RIGHT = CScriptOp(0x81)
+OP_SIZE = CScriptOp(0x82)
+
+# bit logic
+OP_INVERT = CScriptOp(0x83)
+OP_AND = CScriptOp(0x84)
+OP_OR = CScriptOp(0x85)
+OP_XOR = CScriptOp(0x86)
+OP_EQUAL = CScriptOp(0x87)
+OP_EQUALVERIFY = CScriptOp(0x88)
+OP_RESERVED1 = CScriptOp(0x89)
+OP_RESERVED2 = CScriptOp(0x8a)
+
+# numeric
+OP_1ADD = CScriptOp(0x8b)
+OP_1SUB = CScriptOp(0x8c)
+OP_2MUL = CScriptOp(0x8d)
+OP_2DIV = CScriptOp(0x8e)
+OP_NEGATE = CScriptOp(0x8f)
+OP_ABS = CScriptOp(0x90)
+OP_NOT = CScriptOp(0x91)
+OP_0NOTEQUAL = CScriptOp(0x92)
+
+OP_ADD = CScriptOp(0x93)
+OP_SUB = CScriptOp(0x94)
+OP_MUL = CScriptOp(0x95)
+OP_DIV = CScriptOp(0x96)
+OP_MOD = CScriptOp(0x97)
+OP_LSHIFT = CScriptOp(0x98)
+OP_RSHIFT = CScriptOp(0x99)
+
+OP_BOOLAND = CScriptOp(0x9a)
+OP_BOOLOR = CScriptOp(0x9b)
+OP_NUMEQUAL = CScriptOp(0x9c)
+OP_NUMEQUALVERIFY = CScriptOp(0x9d)
+OP_NUMNOTEQUAL = CScriptOp(0x9e)
+OP_LESSTHAN = CScriptOp(0x9f)
+OP_GREATERTHAN = CScriptOp(0xa0)
+OP_LESSTHANOREQUAL = CScriptOp(0xa1)
+OP_GREATERTHANOREQUAL = CScriptOp(0xa2)
+OP_MIN = CScriptOp(0xa3)
+OP_MAX = CScriptOp(0xa4)
+
+OP_WITHIN = CScriptOp(0xa5)
+
+# crypto
+OP_RIPEMD160 = CScriptOp(0xa6)
+OP_SHA1 = CScriptOp(0xa7)
+OP_SHA256 = CScriptOp(0xa8)
+OP_HASH160 = CScriptOp(0xa9)
+OP_HASH256 = CScriptOp(0xaa)
+OP_CODESEPARATOR = CScriptOp(0xab)
+OP_CHECKSIG = CScriptOp(0xac)
+OP_CHECKSIGVERIFY = CScriptOp(0xad)
+OP_CHECKMULTISIG = CScriptOp(0xae)
+OP_CHECKMULTISIGVERIFY = CScriptOp(0xaf)
+
+# expansion
+OP_NOP1 = CScriptOp(0xb0)
+OP_NOP2 = CScriptOp(0xb1)
+OP_NOP3 = CScriptOp(0xb2)
+OP_NOP4 = CScriptOp(0xb3)
+OP_NOP5 = CScriptOp(0xb4)
+OP_NOP6 = CScriptOp(0xb5)
+OP_NOP7 = CScriptOp(0xb6)
+OP_NOP8 = CScriptOp(0xb7)
+OP_NOP9 = CScriptOp(0xb8)
+OP_NOP10 = CScriptOp(0xb9)
+
+# template matching params
+OP_SMALLINTEGER = CScriptOp(0xfa)
+OP_PUBKEYS = CScriptOp(0xfb)
+OP_PUBKEYHASH = CScriptOp(0xfd)
+OP_PUBKEY = CScriptOp(0xfe)
+
+OP_INVALIDOPCODE = CScriptOp(0xff)
+
+VALID_OPCODES = {
+ OP_1NEGATE,
+ OP_RESERVED,
+ OP_1,
+ OP_2,
+ OP_3,
+ OP_4,
+ OP_5,
+ OP_6,
+ OP_7,
+ OP_8,
+ OP_9,
+ OP_10,
+ OP_11,
+ OP_12,
+ OP_13,
+ OP_14,
+ OP_15,
+ OP_16,
+
+ OP_NOP,
+ OP_VER,
+ OP_IF,
+ OP_NOTIF,
+ OP_VERIF,
+ OP_VERNOTIF,
+ OP_ELSE,
+ OP_ENDIF,
+ OP_VERIFY,
+ OP_RETURN,
+
+ OP_TOALTSTACK,
+ OP_FROMALTSTACK,
+ OP_2DROP,
+ OP_2DUP,
+ OP_3DUP,
+ OP_2OVER,
+ OP_2ROT,
+ OP_2SWAP,
+ OP_IFDUP,
+ OP_DEPTH,
+ OP_DROP,
+ OP_DUP,
+ OP_NIP,
+ OP_OVER,
+ OP_PICK,
+ OP_ROLL,
+ OP_ROT,
+ OP_SWAP,
+ OP_TUCK,
+
+ OP_CAT,
+ OP_SUBSTR,
+ OP_LEFT,
+ OP_RIGHT,
+ OP_SIZE,
+
+ OP_INVERT,
+ OP_AND,
+ OP_OR,
+ OP_XOR,
+ OP_EQUAL,
+ OP_EQUALVERIFY,
+ OP_RESERVED1,
+ OP_RESERVED2,
+
+ OP_1ADD,
+ OP_1SUB,
+ OP_2MUL,
+ OP_2DIV,
+ OP_NEGATE,
+ OP_ABS,
+ OP_NOT,
+ OP_0NOTEQUAL,
+
+ OP_ADD,
+ OP_SUB,
+ OP_MUL,
+ OP_DIV,
+ OP_MOD,
+ OP_LSHIFT,
+ OP_RSHIFT,
+
+ OP_BOOLAND,
+ OP_BOOLOR,
+ OP_NUMEQUAL,
+ OP_NUMEQUALVERIFY,
+ OP_NUMNOTEQUAL,
+ OP_LESSTHAN,
+ OP_GREATERTHAN,
+ OP_LESSTHANOREQUAL,
+ OP_GREATERTHANOREQUAL,
+ OP_MIN,
+ OP_MAX,
+
+ OP_WITHIN,
+
+ OP_RIPEMD160,
+ OP_SHA1,
+ OP_SHA256,
+ OP_HASH160,
+ OP_HASH256,
+ OP_CODESEPARATOR,
+ OP_CHECKSIG,
+ OP_CHECKSIGVERIFY,
+ OP_CHECKMULTISIG,
+ OP_CHECKMULTISIGVERIFY,
+
+ OP_NOP1,
+ OP_NOP2,
+ OP_NOP3,
+ OP_NOP4,
+ OP_NOP5,
+ OP_NOP6,
+ OP_NOP7,
+ OP_NOP8,
+ OP_NOP9,
+ OP_NOP10,
+
+ OP_SMALLINTEGER,
+ OP_PUBKEYS,
+ OP_PUBKEYHASH,
+ OP_PUBKEY,
+}
+
+OPCODE_NAMES.update({
+ OP_0 : 'OP_0',
+ OP_PUSHDATA1 : 'OP_PUSHDATA1',
+ OP_PUSHDATA2 : 'OP_PUSHDATA2',
+ OP_PUSHDATA4 : 'OP_PUSHDATA4',
+ OP_1NEGATE : 'OP_1NEGATE',
+ OP_RESERVED : 'OP_RESERVED',
+ OP_1 : 'OP_1',
+ OP_2 : 'OP_2',
+ OP_3 : 'OP_3',
+ OP_4 : 'OP_4',
+ OP_5 : 'OP_5',
+ OP_6 : 'OP_6',
+ OP_7 : 'OP_7',
+ OP_8 : 'OP_8',
+ OP_9 : 'OP_9',
+ OP_10 : 'OP_10',
+ OP_11 : 'OP_11',
+ OP_12 : 'OP_12',
+ OP_13 : 'OP_13',
+ OP_14 : 'OP_14',
+ OP_15 : 'OP_15',
+ OP_16 : 'OP_16',
+ OP_NOP : 'OP_NOP',
+ OP_VER : 'OP_VER',
+ OP_IF : 'OP_IF',
+ OP_NOTIF : 'OP_NOTIF',
+ OP_VERIF : 'OP_VERIF',
+ OP_VERNOTIF : 'OP_VERNOTIF',
+ OP_ELSE : 'OP_ELSE',
+ OP_ENDIF : 'OP_ENDIF',
+ OP_VERIFY : 'OP_VERIFY',
+ OP_RETURN : 'OP_RETURN',
+ OP_TOALTSTACK : 'OP_TOALTSTACK',
+ OP_FROMALTSTACK : 'OP_FROMALTSTACK',
+ OP_2DROP : 'OP_2DROP',
+ OP_2DUP : 'OP_2DUP',
+ OP_3DUP : 'OP_3DUP',
+ OP_2OVER : 'OP_2OVER',
+ OP_2ROT : 'OP_2ROT',
+ OP_2SWAP : 'OP_2SWAP',
+ OP_IFDUP : 'OP_IFDUP',
+ OP_DEPTH : 'OP_DEPTH',
+ OP_DROP : 'OP_DROP',
+ OP_DUP : 'OP_DUP',
+ OP_NIP : 'OP_NIP',
+ OP_OVER : 'OP_OVER',
+ OP_PICK : 'OP_PICK',
+ OP_ROLL : 'OP_ROLL',
+ OP_ROT : 'OP_ROT',
+ OP_SWAP : 'OP_SWAP',
+ OP_TUCK : 'OP_TUCK',
+ OP_CAT : 'OP_CAT',
+ OP_SUBSTR : 'OP_SUBSTR',
+ OP_LEFT : 'OP_LEFT',
+ OP_RIGHT : 'OP_RIGHT',
+ OP_SIZE : 'OP_SIZE',
+ OP_INVERT : 'OP_INVERT',
+ OP_AND : 'OP_AND',
+ OP_OR : 'OP_OR',
+ OP_XOR : 'OP_XOR',
+ OP_EQUAL : 'OP_EQUAL',
+ OP_EQUALVERIFY : 'OP_EQUALVERIFY',
+ OP_RESERVED1 : 'OP_RESERVED1',
+ OP_RESERVED2 : 'OP_RESERVED2',
+ OP_1ADD : 'OP_1ADD',
+ OP_1SUB : 'OP_1SUB',
+ OP_2MUL : 'OP_2MUL',
+ OP_2DIV : 'OP_2DIV',
+ OP_NEGATE : 'OP_NEGATE',
+ OP_ABS : 'OP_ABS',
+ OP_NOT : 'OP_NOT',
+ OP_0NOTEQUAL : 'OP_0NOTEQUAL',
+ OP_ADD : 'OP_ADD',
+ OP_SUB : 'OP_SUB',
+ OP_MUL : 'OP_MUL',
+ OP_DIV : 'OP_DIV',
+ OP_MOD : 'OP_MOD',
+ OP_LSHIFT : 'OP_LSHIFT',
+ OP_RSHIFT : 'OP_RSHIFT',
+ OP_BOOLAND : 'OP_BOOLAND',
+ OP_BOOLOR : 'OP_BOOLOR',
+ OP_NUMEQUAL : 'OP_NUMEQUAL',
+ OP_NUMEQUALVERIFY : 'OP_NUMEQUALVERIFY',
+ OP_NUMNOTEQUAL : 'OP_NUMNOTEQUAL',
+ OP_LESSTHAN : 'OP_LESSTHAN',
+ OP_GREATERTHAN : 'OP_GREATERTHAN',
+ OP_LESSTHANOREQUAL : 'OP_LESSTHANOREQUAL',
+ OP_GREATERTHANOREQUAL : 'OP_GREATERTHANOREQUAL',
+ OP_MIN : 'OP_MIN',
+ OP_MAX : 'OP_MAX',
+ OP_WITHIN : 'OP_WITHIN',
+ OP_RIPEMD160 : 'OP_RIPEMD160',
+ OP_SHA1 : 'OP_SHA1',
+ OP_SHA256 : 'OP_SHA256',
+ OP_HASH160 : 'OP_HASH160',
+ OP_HASH256 : 'OP_HASH256',
+ OP_CODESEPARATOR : 'OP_CODESEPARATOR',
+ OP_CHECKSIG : 'OP_CHECKSIG',
+ OP_CHECKSIGVERIFY : 'OP_CHECKSIGVERIFY',
+ OP_CHECKMULTISIG : 'OP_CHECKMULTISIG',
+ OP_CHECKMULTISIGVERIFY : 'OP_CHECKMULTISIGVERIFY',
+ OP_NOP1 : 'OP_NOP1',
+ OP_NOP2 : 'OP_NOP2',
+ OP_NOP3 : 'OP_NOP3',
+ OP_NOP4 : 'OP_NOP4',
+ OP_NOP5 : 'OP_NOP5',
+ OP_NOP6 : 'OP_NOP6',
+ OP_NOP7 : 'OP_NOP7',
+ OP_NOP8 : 'OP_NOP8',
+ OP_NOP9 : 'OP_NOP9',
+ OP_NOP10 : 'OP_NOP10',
+ OP_SMALLINTEGER : 'OP_SMALLINTEGER',
+ OP_PUBKEYS : 'OP_PUBKEYS',
+ OP_PUBKEYHASH : 'OP_PUBKEYHASH',
+ OP_PUBKEY : 'OP_PUBKEY',
+ OP_INVALIDOPCODE : 'OP_INVALIDOPCODE',
+})
+
+OPCODES_BY_NAME = {
+ 'OP_0' : OP_0,
+ 'OP_PUSHDATA1' : OP_PUSHDATA1,
+ 'OP_PUSHDATA2' : OP_PUSHDATA2,
+ 'OP_PUSHDATA4' : OP_PUSHDATA4,
+ 'OP_1NEGATE' : OP_1NEGATE,
+ 'OP_RESERVED' : OP_RESERVED,
+ 'OP_1' : OP_1,
+ 'OP_2' : OP_2,
+ 'OP_3' : OP_3,
+ 'OP_4' : OP_4,
+ 'OP_5' : OP_5,
+ 'OP_6' : OP_6,
+ 'OP_7' : OP_7,
+ 'OP_8' : OP_8,
+ 'OP_9' : OP_9,
+ 'OP_10' : OP_10,
+ 'OP_11' : OP_11,
+ 'OP_12' : OP_12,
+ 'OP_13' : OP_13,
+ 'OP_14' : OP_14,
+ 'OP_15' : OP_15,
+ 'OP_16' : OP_16,
+ 'OP_NOP' : OP_NOP,
+ 'OP_VER' : OP_VER,
+ 'OP_IF' : OP_IF,
+ 'OP_NOTIF' : OP_NOTIF,
+ 'OP_VERIF' : OP_VERIF,
+ 'OP_VERNOTIF' : OP_VERNOTIF,
+ 'OP_ELSE' : OP_ELSE,
+ 'OP_ENDIF' : OP_ENDIF,
+ 'OP_VERIFY' : OP_VERIFY,
+ 'OP_RETURN' : OP_RETURN,
+ 'OP_TOALTSTACK' : OP_TOALTSTACK,
+ 'OP_FROMALTSTACK' : OP_FROMALTSTACK,
+ 'OP_2DROP' : OP_2DROP,
+ 'OP_2DUP' : OP_2DUP,
+ 'OP_3DUP' : OP_3DUP,
+ 'OP_2OVER' : OP_2OVER,
+ 'OP_2ROT' : OP_2ROT,
+ 'OP_2SWAP' : OP_2SWAP,
+ 'OP_IFDUP' : OP_IFDUP,
+ 'OP_DEPTH' : OP_DEPTH,
+ 'OP_DROP' : OP_DROP,
+ 'OP_DUP' : OP_DUP,
+ 'OP_NIP' : OP_NIP,
+ 'OP_OVER' : OP_OVER,
+ 'OP_PICK' : OP_PICK,
+ 'OP_ROLL' : OP_ROLL,
+ 'OP_ROT' : OP_ROT,
+ 'OP_SWAP' : OP_SWAP,
+ 'OP_TUCK' : OP_TUCK,
+ 'OP_CAT' : OP_CAT,
+ 'OP_SUBSTR' : OP_SUBSTR,
+ 'OP_LEFT' : OP_LEFT,
+ 'OP_RIGHT' : OP_RIGHT,
+ 'OP_SIZE' : OP_SIZE,
+ 'OP_INVERT' : OP_INVERT,
+ 'OP_AND' : OP_AND,
+ 'OP_OR' : OP_OR,
+ 'OP_XOR' : OP_XOR,
+ 'OP_EQUAL' : OP_EQUAL,
+ 'OP_EQUALVERIFY' : OP_EQUALVERIFY,
+ 'OP_RESERVED1' : OP_RESERVED1,
+ 'OP_RESERVED2' : OP_RESERVED2,
+ 'OP_1ADD' : OP_1ADD,
+ 'OP_1SUB' : OP_1SUB,
+ 'OP_2MUL' : OP_2MUL,
+ 'OP_2DIV' : OP_2DIV,
+ 'OP_NEGATE' : OP_NEGATE,
+ 'OP_ABS' : OP_ABS,
+ 'OP_NOT' : OP_NOT,
+ 'OP_0NOTEQUAL' : OP_0NOTEQUAL,
+ 'OP_ADD' : OP_ADD,
+ 'OP_SUB' : OP_SUB,
+ 'OP_MUL' : OP_MUL,
+ 'OP_DIV' : OP_DIV,
+ 'OP_MOD' : OP_MOD,
+ 'OP_LSHIFT' : OP_LSHIFT,
+ 'OP_RSHIFT' : OP_RSHIFT,
+ 'OP_BOOLAND' : OP_BOOLAND,
+ 'OP_BOOLOR' : OP_BOOLOR,
+ 'OP_NUMEQUAL' : OP_NUMEQUAL,
+ 'OP_NUMEQUALVERIFY' : OP_NUMEQUALVERIFY,
+ 'OP_NUMNOTEQUAL' : OP_NUMNOTEQUAL,
+ 'OP_LESSTHAN' : OP_LESSTHAN,
+ 'OP_GREATERTHAN' : OP_GREATERTHAN,
+ 'OP_LESSTHANOREQUAL' : OP_LESSTHANOREQUAL,
+ 'OP_GREATERTHANOREQUAL' : OP_GREATERTHANOREQUAL,
+ 'OP_MIN' : OP_MIN,
+ 'OP_MAX' : OP_MAX,
+ 'OP_WITHIN' : OP_WITHIN,
+ 'OP_RIPEMD160' : OP_RIPEMD160,
+ 'OP_SHA1' : OP_SHA1,
+ 'OP_SHA256' : OP_SHA256,
+ 'OP_HASH160' : OP_HASH160,
+ 'OP_HASH256' : OP_HASH256,
+ 'OP_CODESEPARATOR' : OP_CODESEPARATOR,
+ 'OP_CHECKSIG' : OP_CHECKSIG,
+ 'OP_CHECKSIGVERIFY' : OP_CHECKSIGVERIFY,
+ 'OP_CHECKMULTISIG' : OP_CHECKMULTISIG,
+ 'OP_CHECKMULTISIGVERIFY' : OP_CHECKMULTISIGVERIFY,
+ 'OP_NOP1' : OP_NOP1,
+ 'OP_NOP2' : OP_NOP2,
+ 'OP_NOP3' : OP_NOP3,
+ 'OP_NOP4' : OP_NOP4,
+ 'OP_NOP5' : OP_NOP5,
+ 'OP_NOP6' : OP_NOP6,
+ 'OP_NOP7' : OP_NOP7,
+ 'OP_NOP8' : OP_NOP8,
+ 'OP_NOP9' : OP_NOP9,
+ 'OP_NOP10' : OP_NOP10,
+ 'OP_SMALLINTEGER' : OP_SMALLINTEGER,
+ 'OP_PUBKEYS' : OP_PUBKEYS,
+ 'OP_PUBKEYHASH' : OP_PUBKEYHASH,
+ 'OP_PUBKEY' : OP_PUBKEY,
+}
+
+class CScriptInvalidError(Exception):
+ """Base class for CScript exceptions"""
+ pass
+
+class CScriptTruncatedPushDataError(CScriptInvalidError):
+ """Invalid pushdata due to truncation"""
+ def __init__(self, msg, data):
+ self.data = data
+ super(CScriptTruncatedPushDataError, self).__init__(msg)
+
+# This is used, eg, for blockchain heights in coinbase scripts (bip34)
+class CScriptNum(object):
+ def __init__(self, d=0):
+ self.value = d
+
+ @staticmethod
+ def encode(obj):
+ r = bytearray(0)
+ if obj.value == 0:
+ return bytes(r)
+ neg = obj.value < 0
+ absvalue = -obj.value if neg else obj.value
+ while (absvalue):
+ r.append(chr(absvalue & 0xff))
+ absvalue >>= 8
+ if r[-1] & 0x80:
+ r.append(0x80 if neg else 0)
+ elif neg:
+ r[-1] |= 0x80
+ return bytes(bchr(len(r)) + r)
+
+
+class CScript(bytes):
+ """Serialized script
+
+ A bytes subclass, so you can use this directly whenever bytes are accepted.
+ Note that this means that indexing does *not* work - you'll get an index by
+ byte rather than opcode. This format was chosen for efficiency so that the
+ general case would not require creating a lot of little CScriptOP objects.
+
+ iter(script) however does iterate by opcode.
+ """
+ @classmethod
+ def __coerce_instance(cls, other):
+ # Coerce other into bytes
+ if isinstance(other, CScriptOp):
+ other = bchr(other)
+ elif isinstance(other, CScriptNum):
+ if (other.value == 0):
+ other = bchr(CScriptOp(OP_0))
+ else:
+ other = CScriptNum.encode(other)
+ elif isinstance(other, (int, long)):
+ if 0 <= other <= 16:
+ other = bytes(bchr(CScriptOp.encode_op_n(other)))
+ elif other == -1:
+ other = bytes(bchr(OP_1NEGATE))
+ else:
+ other = CScriptOp.encode_op_pushdata(bignum.bn2vch(other))
+ elif isinstance(other, (bytes, bytearray)):
+ other = CScriptOp.encode_op_pushdata(other)
+ return other
+
+ def __add__(self, other):
+ # Do the coercion outside of the try block so that errors in it are
+ # noticed.
+ other = self.__coerce_instance(other)
+
+ try:
+ # bytes.__add__ always returns bytes instances unfortunately
+ return CScript(super(CScript, self).__add__(other))
+ except TypeError:
+ raise TypeError('Can not add a %r instance to a CScript' % other.__class__)
+
+ def join(self, iterable):
+ # join makes no sense for a CScript()
+ raise NotImplementedError
+
+ def __new__(cls, value=b''):
+ if isinstance(value, bytes) or isinstance(value, bytearray):
+ return super(CScript, cls).__new__(cls, value)
+ else:
+ def coerce_iterable(iterable):
+ for instance in iterable:
+ yield cls.__coerce_instance(instance)
+ # Annoyingly on both python2 and python3 bytes.join() always
+ # returns a bytes instance even when subclassed.
+ return super(CScript, cls).__new__(cls, b''.join(coerce_iterable(value)))
+
+ def raw_iter(self):
+ """Raw iteration
+
+ Yields tuples of (opcode, data, sop_idx) so that the different possible
+ PUSHDATA encodings can be accurately distinguished, as well as
+ determining the exact opcode byte indexes. (sop_idx)
+ """
+ i = 0
+ while i < len(self):
+ sop_idx = i
+ opcode = bord(self[i])
+ i += 1
+
+ if opcode > OP_PUSHDATA4:
+ yield (opcode, None, sop_idx)
+ else:
+ datasize = None
+ pushdata_type = None
+ if opcode < OP_PUSHDATA1:
+ pushdata_type = 'PUSHDATA(%d)' % opcode
+ datasize = opcode
+
+ elif opcode == OP_PUSHDATA1:
+ pushdata_type = 'PUSHDATA1'
+ if i >= len(self):
+ raise CScriptInvalidError('PUSHDATA1: missing data length')
+ datasize = bord(self[i])
+ i += 1
+
+ elif opcode == OP_PUSHDATA2:
+ pushdata_type = 'PUSHDATA2'
+ if i + 1 >= len(self):
+ raise CScriptInvalidError('PUSHDATA2: missing data length')
+ datasize = bord(self[i]) + (bord(self[i+1]) << 8)
+ i += 2
+
+ elif opcode == OP_PUSHDATA4:
+ pushdata_type = 'PUSHDATA4'
+ if i + 3 >= len(self):
+ raise CScriptInvalidError('PUSHDATA4: missing data length')
+ datasize = bord(self[i]) + (bord(self[i+1]) << 8) + (bord(self[i+2]) << 16) + (bord(self[i+3]) << 24)
+ i += 4
+
+ else:
+ assert False # shouldn't happen
+
+
+ data = bytes(self[i:i+datasize])
+
+ # Check for truncation
+ if len(data) < datasize:
+ raise CScriptTruncatedPushDataError('%s: truncated data' % pushdata_type, data)
+
+ i += datasize
+
+ yield (opcode, data, sop_idx)
+
+ def __iter__(self):
+ """'Cooked' iteration
+
+ Returns either a CScriptOP instance, an integer, or bytes, as
+ appropriate.
+
+ See raw_iter() if you need to distinguish the different possible
+ PUSHDATA encodings.
+ """
+ for (opcode, data, sop_idx) in self.raw_iter():
+ if data is not None:
+ yield data
+ else:
+ opcode = CScriptOp(opcode)
+
+ if opcode.is_small_int():
+ yield opcode.decode_op_n()
+ else:
+ yield CScriptOp(opcode)
+
+ def __repr__(self):
+ # For Python3 compatibility add b before strings so testcases don't
+ # need to change
+ def _repr(o):
+ if isinstance(o, bytes):
+ return "x('%s')" % binascii.hexlify(o).decode('utf8')
+ else:
+ return repr(o)
+
+ ops = []
+ i = iter(self)
+ while True:
+ op = None
+ try:
+ op = _repr(next(i))
+ except CScriptTruncatedPushDataError as err:
+ op = '%s...<ERROR: %s>' % (_repr(err.data), err)
+ break
+ except CScriptInvalidError as err:
+ op = '<ERROR: %s>' % err
+ break
+ except StopIteration:
+ break
+ finally:
+ if op is not None:
+ ops.append(op)
+
+ return "CScript([%s])" % ', '.join(ops)
+
+ def GetSigOpCount(self, fAccurate):
+ """Get the SigOp count.
+
+ fAccurate - Accurately count CHECKMULTISIG, see BIP16 for details.
+
+ Note that this is consensus-critical.
+ """
+ n = 0
+ lastOpcode = OP_INVALIDOPCODE
+ for (opcode, data, sop_idx) in self.raw_iter():
+ if opcode in (OP_CHECKSIG, OP_CHECKSIGVERIFY):
+ n += 1
+ elif opcode in (OP_CHECKMULTISIG, OP_CHECKMULTISIGVERIFY):
+ if fAccurate and (OP_1 <= lastOpcode <= OP_16):
+ n += opcode.decode_op_n()
+ else:
+ n += 20
+ lastOpcode = opcode
+ return n
+
+
+SIGHASH_ALL = 1
+SIGHASH_NONE = 2
+SIGHASH_SINGLE = 3
+SIGHASH_ANYONECANPAY = 0x80
+
+def FindAndDelete(script, sig):
+ """Consensus critical, see FindAndDelete() in Satoshi codebase"""
+ r = b''
+ last_sop_idx = sop_idx = 0
+ skip = True
+ for (opcode, data, sop_idx) in script.raw_iter():
+ if not skip:
+ r += script[last_sop_idx:sop_idx]
+ last_sop_idx = sop_idx
+ if script[sop_idx:sop_idx + len(sig)] == sig:
+ skip = True
+ else:
+ skip = False
+ if not skip:
+ r += script[last_sop_idx:]
+ return CScript(r)
+
+
+def SignatureHash(script, txTo, inIdx, hashtype):
+ """Consensus-correct SignatureHash
+
+ Returns (hash, err) to precisely match the consensus-critical behavior of
+ the SIGHASH_SINGLE bug. (inIdx is *not* checked for validity)
+ """
+ HASH_ONE = b'\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+
+ if inIdx >= len(txTo.vin):
+ return (HASH_ONE, "inIdx %d out of range (%d)" % (inIdx, len(txTo.vin)))
+ txtmp = CTransaction(txTo)
+
+ for txin in txtmp.vin:
+ txin.scriptSig = b''
+ txtmp.vin[inIdx].scriptSig = FindAndDelete(script, CScript([OP_CODESEPARATOR]))
+
+ if (hashtype & 0x1f) == SIGHASH_NONE:
+ txtmp.vout = []
+
+ for i in range(len(txtmp.vin)):
+ if i != inIdx:
+ txtmp.vin[i].nSequence = 0
+
+ elif (hashtype & 0x1f) == SIGHASH_SINGLE:
+ outIdx = inIdx
+ if outIdx >= len(txtmp.vout):
+ return (HASH_ONE, "outIdx %d out of range (%d)" % (outIdx, len(txtmp.vout)))
+
+ tmp = txtmp.vout[outIdx]
+ txtmp.vout = []
+ for i in range(outIdx):
+ txtmp.vout.append(CTxOut())
+ txtmp.vout.append(tmp)
+
+ for i in range(len(txtmp.vin)):
+ if i != inIdx:
+ txtmp.vin[i].nSequence = 0
+
+ if hashtype & SIGHASH_ANYONECANPAY:
+ tmp = txtmp.vin[inIdx]
+ txtmp.vin = []
+ txtmp.vin.append(tmp)
+
+ s = txtmp.serialize()
+ s += struct.pack(b"<I", hashtype)
+
+ hash = hash256(s)
+
+ return (hash, None)
diff --git a/qa/rpc-tests/script_test.py b/qa/rpc-tests/script_test.py
new file mode 100755
index 0000000000..1ba3a478a8
--- /dev/null
+++ b/qa/rpc-tests/script_test.py
@@ -0,0 +1,253 @@
+#!/usr/bin/env python2
+#
+# Distributed under the MIT/X11 software license, see the accompanying
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
+#
+
+'''
+Test notes:
+This test uses the script_valid and script_invalid tests from the unittest
+framework to do end-to-end testing where we compare that two nodes agree on
+whether blocks containing a given test script are valid.
+
+We generally ignore the script flags associated with each test (since we lack
+the precision to test each script using those flags in this framework), but
+for tests with SCRIPT_VERIFY_P2SH, we can use a block time after the BIP16
+switchover date to try to test with that flag enabled (and for tests without
+that flag, we use a block time before the switchover date).
+
+NOTE: This test is very slow and may take more than 40 minutes to run.
+'''
+
+from test_framework import ComparisonTestFramework
+from util import *
+from comptool import TestInstance, TestManager
+from mininode import *
+from blocktools import *
+from script import *
+import logging
+import copy
+import json
+
+script_valid_file = "../../src/test/data/script_valid.json"
+script_invalid_file = "../../src/test/data/script_invalid.json"
+
+# Pass in a set of json files to open.
+class ScriptTestFile(object):
+
+ def __init__(self, files):
+ self.files = files
+ self.index = -1
+ self.data = []
+
+ def load_files(self):
+ for f in self.files:
+ self.data.extend(json.loads(open(f).read()))
+
+ # Skip over records that are not long enough to be tests
+ def get_records(self):
+ while (self.index < len(self.data)):
+ if len(self.data[self.index]) >= 3:
+ yield self.data[self.index]
+ self.index += 1
+
+
+# Helper for parsing the flags specified in the .json files
+SCRIPT_VERIFY_NONE = 0
+SCRIPT_VERIFY_P2SH = 1
+SCRIPT_VERIFY_STRICTENC = 1 << 1
+SCRIPT_VERIFY_DERSIG = 1 << 2
+SCRIPT_VERIFY_LOW_S = 1 << 3
+SCRIPT_VERIFY_NULLDUMMY = 1 << 4
+SCRIPT_VERIFY_SIGPUSHONLY = 1 << 5
+SCRIPT_VERIFY_MINIMALDATA = 1 << 6
+SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS = 1 << 7
+SCRIPT_VERIFY_CLEANSTACK = 1 << 8
+
+flag_map = {
+ "": SCRIPT_VERIFY_NONE,
+ "NONE": SCRIPT_VERIFY_NONE,
+ "P2SH": SCRIPT_VERIFY_P2SH,
+ "STRICTENC": SCRIPT_VERIFY_STRICTENC,
+ "DERSIG": SCRIPT_VERIFY_DERSIG,
+ "LOW_S": SCRIPT_VERIFY_LOW_S,
+ "NULLDUMMY": SCRIPT_VERIFY_NULLDUMMY,
+ "SIGPUSHONLY": SCRIPT_VERIFY_SIGPUSHONLY,
+ "MINIMALDATA": SCRIPT_VERIFY_MINIMALDATA,
+ "DISCOURAGE_UPGRADABLE_NOPS": SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS,
+ "CLEANSTACK": SCRIPT_VERIFY_CLEANSTACK,
+}
+
+def ParseScriptFlags(flag_string):
+ flags = 0
+ for x in flag_string.split(","):
+ if x in flag_map:
+ flags |= flag_map[x]
+ else:
+ print "Error: unrecognized script flag: ", x
+ return flags
+
+'''
+Given a string that is a scriptsig or scriptpubkey from the .json files above,
+convert it to a CScript()
+'''
+# Replicates behavior from core_read.cpp
+def ParseScript(json_script):
+ script = json_script.split(" ")
+ parsed_script = CScript()
+ for x in script:
+ if len(x) == 0:
+ # Empty string, ignore.
+ pass
+ elif x.isdigit() or (len(x) >= 1 and x[0] == "-" and x[1:].isdigit()):
+ # Number
+ n = int(x, 0)
+ if (n == -1) or (n >= 1 and n <= 16):
+ parsed_script = CScript(bytes(parsed_script) + bytes(CScript([n])))
+ else:
+ parsed_script += CScriptNum(int(x, 0))
+ elif x.startswith("0x"):
+ # Raw hex data, inserted NOT pushed onto stack:
+ for i in xrange(2, len(x), 2):
+ parsed_script = CScript(bytes(parsed_script) + bytes(chr(int(x[i:i+2],16))))
+ elif x.startswith("'") and x.endswith("'") and len(x) >= 2:
+ # Single-quoted string, pushed as data.
+ parsed_script += CScript([x[1:-1]])
+ else:
+ # opcode, e.g. OP_ADD or ADD:
+ tryopname = "OP_" + x
+ if tryopname in OPCODES_BY_NAME:
+ parsed_script += CScriptOp(OPCODES_BY_NAME["OP_" + x])
+ else:
+ print "ParseScript: error parsing '%s'" % x
+ return ""
+ return parsed_script
+
+class TestBuilder(object):
+ def create_credit_tx(self, scriptPubKey):
+ # self.tx1 is a coinbase transaction, modeled after the one created by script_tests.cpp
+ # This allows us to reuse signatures created in the unit test framework.
+ self.tx1 = create_coinbase() # this has a bip34 scriptsig,
+ self.tx1.vin[0].scriptSig = CScript([0, 0]) # but this matches the unit tests
+ self.tx1.vout[0].nValue = 0
+ self.tx1.vout[0].scriptPubKey = scriptPubKey
+ self.tx1.rehash()
+ def create_spend_tx(self, scriptSig):
+ self.tx2 = create_transaction(self.tx1, 0, CScript(), 0)
+ self.tx2.vin[0].scriptSig = scriptSig
+ self.tx2.vout[0].scriptPubKey = CScript()
+ self.tx2.rehash()
+ def rehash(self):
+ self.tx1.rehash()
+ self.tx2.rehash()
+
+# This test uses the (default) two nodes provided by ComparisonTestFramework,
+# specified on the command line with --testbinary and --refbinary.
+# See comptool.py
+class ScriptTest(ComparisonTestFramework):
+
+ def run_test(self):
+ # Set up the comparison tool TestManager
+ test = TestManager(self, self.options.tmpdir)
+ test.add_all_connections(self.nodes)
+
+ # Load scripts
+ self.scripts = ScriptTestFile([script_valid_file, script_invalid_file])
+ self.scripts.load_files()
+
+ # Some variables we re-use between test instances (to build blocks)
+ self.tip = None
+ self.block_time = None
+
+ NetworkThread().start() # Start up network handling in another thread
+ test.run()
+
+ def generate_test_instance(self, pubkeystring, scriptsigstring):
+ scriptpubkey = ParseScript(pubkeystring)
+ scriptsig = ParseScript(scriptsigstring)
+
+ test = TestInstance(sync_every_block=False)
+ test_build = TestBuilder()
+ test_build.create_credit_tx(scriptpubkey)
+ test_build.create_spend_tx(scriptsig)
+ test_build.rehash()
+
+ block = create_block(self.tip, test_build.tx1, self.block_time)
+ self.block_time += 1
+ block.solve()
+ self.tip = block.sha256
+ test.blocks_and_transactions = [[block, True]]
+
+ for i in xrange(100):
+ block = create_block(self.tip, create_coinbase(), self.block_time)
+ self.block_time += 1
+ block.solve()
+ self.tip = block.sha256
+ test.blocks_and_transactions.append([block, True])
+
+ block = create_block(self.tip, create_coinbase(), self.block_time)
+ self.block_time += 1
+ block.vtx.append(test_build.tx2)
+ block.hashMerkleRoot = block.calc_merkle_root()
+ block.rehash()
+ block.solve()
+ test.blocks_and_transactions.append([block, None])
+ return test
+
+ # This generates the tests for TestManager.
+ def get_tests(self):
+ self.tip = int ("0x" + self.nodes[0].getbestblockhash() + "L", 0)
+ self.block_time = 1333230000 # before the BIP16 switchover
+
+ '''
+ Create a new block with an anyone-can-spend coinbase
+ '''
+ block = create_block(self.tip, create_coinbase(), self.block_time)
+ self.block_time += 1
+ block.solve()
+ self.tip = block.sha256
+ yield TestInstance(objects=[[block, True]])
+
+ '''
+ Build out to 100 blocks total, maturing the coinbase.
+ '''
+ test = TestInstance(objects=[], sync_every_block=False, sync_every_tx=False)
+ for i in xrange(100):
+ b = create_block(self.tip, create_coinbase(), self.block_time)
+ b.solve()
+ test.blocks_and_transactions.append([b, True])
+ self.tip = b.sha256
+ self.block_time += 1
+ yield test
+
+ ''' Iterate through script tests. '''
+ counter = 0
+ for script_test in self.scripts.get_records():
+ ''' Reset the blockchain to genesis block + 100 blocks. '''
+ if self.nodes[0].getblockcount() > 101:
+ self.nodes[0].invalidateblock(self.nodes[0].getblockhash(102))
+ self.nodes[1].invalidateblock(self.nodes[1].getblockhash(102))
+
+ self.tip = int ("0x" + self.nodes[0].getbestblockhash() + "L", 0)
+
+ [scriptsig, scriptpubkey, flags] = script_test[0:3]
+ flags = ParseScriptFlags(flags)
+
+ # We can use block time to determine whether the nodes should be
+ # enforcing BIP16.
+ #
+ # We intentionally let the block time grow by 1 each time.
+ # This forces the block hashes to differ between tests, so that
+ # a call to invalidateblock doesn't interfere with a later test.
+ if (flags & SCRIPT_VERIFY_P2SH):
+ self.block_time = 1333238400 + counter # Advance to enforcing BIP16
+ else:
+ self.block_time = 1333230000 + counter # Before the BIP16 switchover
+
+ print "Script test: [%s]" % script_test
+
+ yield self.generate_test_instance(scriptpubkey, scriptsig)
+ counter += 1
+
+if __name__ == '__main__':
+ ScriptTest().main()
diff --git a/qa/rpc-tests/signrawtransactions.py b/qa/rpc-tests/signrawtransactions.py
new file mode 100755
index 0000000000..943634bd19
--- /dev/null
+++ b/qa/rpc-tests/signrawtransactions.py
@@ -0,0 +1,109 @@
+#!/usr/bin/env python2
+# Copyright (c) 2015 The Bitcoin Core developers
+# Distributed under the MIT software license, see the accompanying
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+from test_framework import BitcoinTestFramework
+from util import *
+
+
+class SignRawTransactionsTest(BitcoinTestFramework):
+ """Tests transaction signing via RPC command "signrawtransaction"."""
+
+ def setup_chain(self):
+ print('Initializing test directory ' + self.options.tmpdir)
+ initialize_chain_clean(self.options.tmpdir, 1)
+
+ def setup_network(self, split=False):
+ self.nodes = start_nodes(1, self.options.tmpdir)
+ self.is_network_split = False
+
+ def successful_signing_test(self):
+ """Creates and signs a valid raw transaction with one input.
+
+ Expected results:
+
+ 1) The transaction has a complete set of signatures
+ 2) No script verification error occurred"""
+ privKeys = ['cUeKHd5orzT3mz8P9pxyREHfsWtVfgsfDjiZZBcjUBAaGk1BTj7N']
+
+ inputs = [
+ # Valid pay-to-pubkey script
+ {'txid': '9b907ef1e3c26fc71fe4a4b3580bc75264112f95050014157059c736f0202e71', 'vout': 0,
+ 'scriptPubKey': '76a91460baa0f494b38ce3c940dea67f3804dc52d1fb9488ac'}
+ ]
+
+ outputs = {'mpLQjfK79b7CCV4VMJWEWAj5Mpx8Up5zxB': 0.1}
+
+ rawTx = self.nodes[0].createrawtransaction(inputs, outputs)
+ rawTxSigned = self.nodes[0].signrawtransaction(rawTx, inputs, privKeys)
+
+ # 1) The transaction has a complete set of signatures
+ assert 'complete' in rawTxSigned
+ assert_equal(rawTxSigned['complete'], True)
+
+ # 2) No script verification error occurred
+ assert 'errors' not in rawTxSigned
+
+ def script_verification_error_test(self):
+ """Creates and signs a raw transaction with valid (vin 0), invalid (vin 1) and one missing (vin 2) input script.
+
+ Expected results:
+
+ 3) The transaction has no complete set of signatures
+ 4) Two script verification errors occurred
+ 5) Script verification errors have certain properties ("txid", "vout", "scriptSig", "sequence", "error")
+ 6) The verification errors refer to the invalid (vin 1) and missing input (vin 2)"""
+ privKeys = ['cUeKHd5orzT3mz8P9pxyREHfsWtVfgsfDjiZZBcjUBAaGk1BTj7N']
+
+ inputs = [
+ # Valid pay-to-pubkey script
+ {'txid': '9b907ef1e3c26fc71fe4a4b3580bc75264112f95050014157059c736f0202e71', 'vout': 0},
+ # Invalid script
+ {'txid': '5b8673686910442c644b1f4993d8f7753c7c8fcb5c87ee40d56eaeef25204547', 'vout': 7},
+ # Missing scriptPubKey
+ {'txid': '9b907ef1e3c26fc71fe4a4b3580bc75264112f95050014157059c736f0202e71', 'vout': 1},
+ ]
+
+ scripts = [
+ # Valid pay-to-pubkey script
+ {'txid': '9b907ef1e3c26fc71fe4a4b3580bc75264112f95050014157059c736f0202e71', 'vout': 0,
+ 'scriptPubKey': '76a91460baa0f494b38ce3c940dea67f3804dc52d1fb9488ac'},
+ # Invalid script
+ {'txid': '5b8673686910442c644b1f4993d8f7753c7c8fcb5c87ee40d56eaeef25204547', 'vout': 7,
+ 'scriptPubKey': 'badbadbadbad'}
+ ]
+
+ outputs = {'mpLQjfK79b7CCV4VMJWEWAj5Mpx8Up5zxB': 0.1}
+
+ rawTx = self.nodes[0].createrawtransaction(inputs, outputs)
+ rawTxSigned = self.nodes[0].signrawtransaction(rawTx, scripts, privKeys)
+
+ # 3) The transaction has no complete set of signatures
+ assert 'complete' in rawTxSigned
+ assert_equal(rawTxSigned['complete'], False)
+
+ # 4) Two script verification errors occurred
+ assert 'errors' in rawTxSigned
+ assert_equal(len(rawTxSigned['errors']), 2)
+
+ # 5) Script verification errors have certain properties
+ assert 'txid' in rawTxSigned['errors'][0]
+ assert 'vout' in rawTxSigned['errors'][0]
+ assert 'scriptSig' in rawTxSigned['errors'][0]
+ assert 'sequence' in rawTxSigned['errors'][0]
+ assert 'error' in rawTxSigned['errors'][0]
+
+ # 6) The verification errors refer to the invalid (vin 1) and missing input (vin 2)
+ assert_equal(rawTxSigned['errors'][0]['txid'], inputs[1]['txid'])
+ assert_equal(rawTxSigned['errors'][0]['vout'], inputs[1]['vout'])
+ assert_equal(rawTxSigned['errors'][1]['txid'], inputs[2]['txid'])
+ assert_equal(rawTxSigned['errors'][1]['vout'], inputs[2]['vout'])
+
+ def run_test(self):
+ self.successful_signing_test()
+ self.script_verification_error_test()
+
+
+if __name__ == '__main__':
+ SignRawTransactionsTest().main()
diff --git a/qa/rpc-tests/smartfees.py b/qa/rpc-tests/smartfees.py
index 4eb8bb4842..69f3c22c17 100755
--- a/qa/rpc-tests/smartfees.py
+++ b/qa/rpc-tests/smartfees.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python2
-# Copyright (c) 2014 The Bitcoin Core developers
+# Copyright (c) 2014-2015 The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
@@ -11,82 +11,249 @@ from test_framework import BitcoinTestFramework
from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException
from util import *
+# Construct 2 trivial P2SH's and the ScriptSigs that spend them
+# So we can create many many transactions without needing to spend
+# time signing.
+P2SH_1 = "2MySexEGVzZpRgNQ1JdjdP5bRETznm3roQ2" # P2SH of "OP_1 OP_DROP"
+P2SH_2 = "2NBdpwq8Aoo1EEKEXPNrKvr5xQr3M9UfcZA" # P2SH of "OP_2 OP_DROP"
+# Associated ScriptSig's to spend satisfy P2SH_1 and P2SH_2
+# 4 bytes of OP_TRUE and push 2-byte redeem script of "OP_1 OP_DROP" or "OP_2 OP_DROP"
+SCRIPT_SIG = ["0451025175", "0451025275"]
+
+def satoshi_round(amount):
+ return Decimal(amount).quantize(Decimal('0.00000001'), rounding=ROUND_DOWN)
+
+def small_txpuzzle_randfee(from_node, conflist, unconflist, amount, min_fee, fee_increment):
+ '''
+ Create and send a transaction with a random fee.
+ The transaction pays to a trival P2SH script, and assumes that its inputs
+ are of the same form.
+ The function takes a list of confirmed outputs and unconfirmed outputs
+ and attempts to use the confirmed list first for its inputs.
+ It adds the newly created outputs to the unconfirmed list.
+ Returns (raw transaction, fee)
+ '''
+ # It's best to exponentially distribute our random fees
+ # because the buckets are exponentially spaced.
+ # Exponentially distributed from 1-128 * fee_increment
+ rand_fee = float(fee_increment)*(1.1892**random.randint(0,28))
+ # Total fee ranges from min_fee to min_fee + 127*fee_increment
+ fee = min_fee - fee_increment + satoshi_round(rand_fee)
+ inputs = []
+ total_in = Decimal("0.00000000")
+ while total_in <= (amount + fee) and len(conflist) > 0:
+ t = conflist.pop(0)
+ total_in += t["amount"]
+ inputs.append({ "txid" : t["txid"], "vout" : t["vout"]} )
+ if total_in <= amount + fee:
+ while total_in <= (amount + fee) and len(unconflist) > 0:
+ t = unconflist.pop(0)
+ total_in += t["amount"]
+ inputs.append({ "txid" : t["txid"], "vout" : t["vout"]} )
+ if total_in <= amount + fee:
+ raise RuntimeError("Insufficient funds: need %d, have %d"%(amount+fee, total_in))
+ outputs = {}
+ outputs[P2SH_1] = total_in - amount - fee
+ outputs[P2SH_2] = amount
+ rawtx = from_node.createrawtransaction(inputs, outputs)
+ # Createrawtransaction constructions a transaction that is ready to be signed
+ # These transactions don't need to be signed, but we still have to insert the ScriptSig
+ # that will satisfy the ScriptPubKey.
+ completetx = rawtx[0:10]
+ inputnum = 0
+ for inp in inputs:
+ completetx += rawtx[10+82*inputnum:82+82*inputnum]
+ completetx += SCRIPT_SIG[inp["vout"]]
+ completetx += rawtx[84+82*inputnum:92+82*inputnum]
+ inputnum += 1
+ completetx += rawtx[10+82*inputnum:]
+ txid = from_node.sendrawtransaction(completetx, True)
+ unconflist.append({ "txid" : txid, "vout" : 0 , "amount" : total_in - amount - fee})
+ unconflist.append({ "txid" : txid, "vout" : 1 , "amount" : amount})
+
+ return (completetx, fee)
+
+def split_inputs(from_node, txins, txouts, initial_split = False):
+ '''
+ We need to generate a lot of very small inputs so we can generate a ton of transactions
+ and they will have low priority.
+ This function takes an input from txins, and creates and sends a transaction
+ which splits the value into 2 outputs which are appended to txouts.
+ '''
+ prevtxout = txins.pop()
+ inputs = []
+ outputs = {}
+ inputs.append({ "txid" : prevtxout["txid"], "vout" : prevtxout["vout"] })
+ half_change = satoshi_round(prevtxout["amount"]/2)
+ rem_change = prevtxout["amount"] - half_change - Decimal("0.00001000")
+ outputs[P2SH_1] = half_change
+ outputs[P2SH_2] = rem_change
+ rawtx = from_node.createrawtransaction(inputs, outputs)
+ # If this is the initial split we actually need to sign the transaction
+ # Otherwise we just need to insert the property ScriptSig
+ if (initial_split) :
+ completetx = from_node.signrawtransaction(rawtx)["hex"]
+ else :
+ completetx = rawtx[0:82] + SCRIPT_SIG[prevtxout["vout"]] + rawtx[84:]
+ txid = from_node.sendrawtransaction(completetx, True)
+ txouts.append({ "txid" : txid, "vout" : 0 , "amount" : half_change})
+ txouts.append({ "txid" : txid, "vout" : 1 , "amount" : rem_change})
+
+def check_estimates(node, fees_seen, max_invalid, print_estimates = True):
+ '''
+ This function calls estimatefee and verifies that the estimates
+ meet certain invariants.
+ '''
+ all_estimates = [ node.estimatefee(i) for i in range(1,26) ]
+ if print_estimates:
+ print([str(all_estimates[e-1]) for e in [1,2,3,6,15,25]])
+ delta = 1.0e-6 # account for rounding error
+ last_e = max(fees_seen)
+ for e in filter(lambda x: x >= 0, all_estimates):
+ # Estimates should be within the bounds of what transactions fees actually were:
+ if float(e)+delta < min(fees_seen) or float(e)-delta > max(fees_seen):
+ raise AssertionError("Estimated fee (%f) out of range (%f,%f)"
+ %(float(e), min(fees_seen), max(fees_seen)))
+ # Estimates should be monotonically decreasing
+ if float(e)-delta > last_e:
+ raise AssertionError("Estimated fee (%f) larger than last fee (%f) for lower number of confirms"
+ %(float(e),float(last_e)))
+ last_e = e
+ valid_estimate = False
+ invalid_estimates = 0
+ for e in all_estimates:
+ if e >= 0:
+ valid_estimate = True
+ else:
+ invalid_estimates += 1
+ # Once we're at a high enough confirmation count that we can give an estimate
+ # We should have estimates for all higher confirmation counts
+ if valid_estimate and e < 0:
+ raise AssertionError("Invalid estimate appears at higher confirm count than valid estimate")
+ # Check on the expected number of different confirmation counts
+ # that we might not have valid estimates for
+ if invalid_estimates > max_invalid:
+ raise AssertionError("More than (%d) invalid estimates"%(max_invalid))
+ return all_estimates
+
+
class EstimateFeeTest(BitcoinTestFramework):
def setup_network(self):
+ '''
+ We'll setup the network to have 3 nodes that all mine with different parameters.
+ But first we need to use one node to create a lot of small low priority outputs
+ which we will use to generate our transactions.
+ '''
self.nodes = []
- self.nodes.append(start_node(0, self.options.tmpdir,
- ["-debug=mempool", "-debug=estimatefee", "-relaypriority=0"]))
- # Node1 mines small-but-not-tiny blocks, and allows free transactions.
+ # Use node0 to mine blocks for input splitting
+ self.nodes.append(start_node(0, self.options.tmpdir, ["-maxorphantx=1000",
+ "-relaypriority=0", "-whitelist=127.0.0.1"]))
+
+ print("This test is time consuming, please be patient")
+ print("Splitting inputs to small size so we can generate low priority tx's")
+ self.txouts = []
+ self.txouts2 = []
+ # Split a coinbase into two transaction puzzle outputs
+ split_inputs(self.nodes[0], self.nodes[0].listunspent(0), self.txouts, True)
+
+ # Mine
+ while (len(self.nodes[0].getrawmempool()) > 0):
+ self.nodes[0].generate(1)
+
+ # Repeatedly split those 2 outputs, doubling twice for each rep
+ # Use txouts to monitor the available utxo, since these won't be tracked in wallet
+ reps = 0
+ while (reps < 5):
+ #Double txouts to txouts2
+ while (len(self.txouts)>0):
+ split_inputs(self.nodes[0], self.txouts, self.txouts2)
+ while (len(self.nodes[0].getrawmempool()) > 0):
+ self.nodes[0].generate(1)
+ #Double txouts2 to txouts
+ while (len(self.txouts2)>0):
+ split_inputs(self.nodes[0], self.txouts2, self.txouts)
+ while (len(self.nodes[0].getrawmempool()) > 0):
+ self.nodes[0].generate(1)
+ reps += 1
+ print("Finished splitting")
+
+ # Now we can connect the other nodes, didn't want to connect them earlier
+ # so the estimates would not be affected by the splitting transactions
+ # Node1 mines small blocks but that are bigger than the expected transaction rate,
+ # and allows free transactions.
# NOTE: the CreateNewBlock code starts counting block size at 1,000 bytes,
- # so blockmaxsize of 2,000 is really just 1,000 bytes (room enough for
- # 6 or 7 transactions)
+ # (17k is room enough for 110 or so transactions)
self.nodes.append(start_node(1, self.options.tmpdir,
- ["-blockprioritysize=1500", "-blockmaxsize=2000",
- "-debug=mempool", "-debug=estimatefee", "-relaypriority=0"]))
+ ["-blockprioritysize=1500", "-blockmaxsize=18000",
+ "-maxorphantx=1000", "-relaypriority=0", "-debug=estimatefee"]))
connect_nodes(self.nodes[1], 0)
# Node2 is a stingy miner, that
- # produces very small blocks (room for only 3 or so transactions)
- node2args = [ "-blockprioritysize=0", "-blockmaxsize=1500",
- "-debug=mempool", "-debug=estimatefee", "-relaypriority=0"]
+ # produces too small blocks (room for only 70 or so transactions)
+ node2args = ["-blockprioritysize=0", "-blockmaxsize=12000", "-maxorphantx=1000", "-relaypriority=0"]
+
self.nodes.append(start_node(2, self.options.tmpdir, node2args))
- connect_nodes(self.nodes[2], 0)
+ connect_nodes(self.nodes[0], 2)
+ connect_nodes(self.nodes[2], 1)
self.is_network_split = False
self.sync_all()
-
+
+ def transact_and_mine(self, numblocks, mining_node):
+ min_fee = Decimal("0.00001")
+ # We will now mine numblocks blocks generating on average 100 transactions between each block
+ # We shuffle our confirmed txout set before each set of transactions
+ # small_txpuzzle_randfee will use the transactions that have inputs already in the chain when possible
+ # resorting to tx's that depend on the mempool when those run out
+ for i in range(numblocks):
+ random.shuffle(self.confutxo)
+ for j in range(random.randrange(100-50,100+50)):
+ from_index = random.randint(1,2)
+ (txhex, fee) = small_txpuzzle_randfee(self.nodes[from_index], self.confutxo,
+ self.memutxo, Decimal("0.005"), min_fee, min_fee)
+ tx_kbytes = (len(txhex)/2)/1000.0
+ self.fees_per_kb.append(float(fee)/tx_kbytes)
+ sync_mempools(self.nodes[0:3],.1)
+ mined = mining_node.getblock(mining_node.generate(1)[0],True)["tx"]
+ sync_blocks(self.nodes[0:3],.1)
+ #update which txouts are confirmed
+ newmem = []
+ for utx in self.memutxo:
+ if utx["txid"] in mined:
+ self.confutxo.append(utx)
+ else:
+ newmem.append(utx)
+ self.memutxo = newmem
def run_test(self):
- # Prime the memory pool with pairs of transactions
- # (high-priority, random fee and zero-priority, random fee)
- min_fee = Decimal("0.001")
- fees_per_kb = [];
- for i in range(12):
- (txid, txhex, fee) = random_zeropri_transaction(self.nodes, Decimal("1.1"),
- min_fee, min_fee, 20)
- tx_kbytes = (len(txhex)/2)/1000.0
- fees_per_kb.append(float(fee)/tx_kbytes)
-
- # Mine blocks with node2 until the memory pool clears:
- count_start = self.nodes[2].getblockcount()
- while len(self.nodes[2].getrawmempool()) > 0:
- self.nodes[2].generate(1)
- self.sync_all()
-
- all_estimates = [ self.nodes[0].estimatefee(i) for i in range(1,20) ]
- print("Fee estimates, super-stingy miner: "+str([str(e) for e in all_estimates]))
+ self.fees_per_kb = []
+ self.memutxo = []
+ self.confutxo = self.txouts # Start with the set of confirmed txouts after splitting
+ print("Checking estimates for 1/2/3/6/15/25 blocks")
+ print("Creating transactions and mining them with a huge block size")
+ # Create transactions and mine 20 big blocks with node 0 such that the mempool is always emptied
+ self.transact_and_mine(30, self.nodes[0])
+ check_estimates(self.nodes[1], self.fees_per_kb, 1)
- # Estimates should be within the bounds of what transactions fees actually were:
- delta = 1.0e-6 # account for rounding error
- for e in filter(lambda x: x >= 0, all_estimates):
- if float(e)+delta < min(fees_per_kb) or float(e)-delta > max(fees_per_kb):
- raise AssertionError("Estimated fee (%f) out of range (%f,%f)"%(float(e), min_fee_kb, max_fee_kb))
-
- # Generate transactions while mining 30 more blocks, this time with node1:
- for i in range(30):
- for j in range(random.randrange(6-4,6+4)):
- (txid, txhex, fee) = random_transaction(self.nodes, Decimal("1.1"),
- Decimal("0.0"), min_fee, 20)
- tx_kbytes = (len(txhex)/2)/1000.0
- fees_per_kb.append(float(fee)/tx_kbytes)
- self.nodes[1].generate(1)
- self.sync_all()
+ print("Creating transactions and mining them with a block size that can't keep up")
+ # Create transactions and mine 30 small blocks with node 2, but create txs faster than we can mine
+ self.transact_and_mine(20, self.nodes[2])
+ check_estimates(self.nodes[1], self.fees_per_kb, 3)
- all_estimates = [ self.nodes[0].estimatefee(i) for i in range(1,20) ]
- print("Fee estimates, more generous miner: "+str([ str(e) for e in all_estimates]))
- for e in filter(lambda x: x >= 0, all_estimates):
- if float(e)+delta < min(fees_per_kb) or float(e)-delta > max(fees_per_kb):
- raise AssertionError("Estimated fee (%f) out of range (%f,%f)"%(float(e), min_fee_kb, max_fee_kb))
+ print("Creating transactions and mining them at a block size that is just big enough")
+ # Generate transactions while mining 40 more blocks, this time with node1
+ # which mines blocks with capacity just above the rate that transactions are being created
+ self.transact_and_mine(40, self.nodes[1])
+ check_estimates(self.nodes[1], self.fees_per_kb, 2)
# Finish by mining a normal-sized block:
- while len(self.nodes[0].getrawmempool()) > 0:
- self.nodes[0].generate(1)
- self.sync_all()
-
- final_estimates = [ self.nodes[0].estimatefee(i) for i in range(1,20) ]
- print("Final fee estimates: "+str([ str(e) for e in final_estimates]))
+ while len(self.nodes[1].getrawmempool()) > 0:
+ self.nodes[1].generate(1)
+ sync_blocks(self.nodes[0:3],.1)
+ print("Final estimates after emptying mempools")
+ check_estimates(self.nodes[1], self.fees_per_kb, 2)
if __name__ == '__main__':
EstimateFeeTest().main()
diff --git a/qa/rpc-tests/test_framework.py b/qa/rpc-tests/test_framework.py
index 4c8a11b821..15a357a340 100755
--- a/qa/rpc-tests/test_framework.py
+++ b/qa/rpc-tests/test_framework.py
@@ -89,8 +89,10 @@ class BitcoinTestFramework(object):
parser = optparse.OptionParser(usage="%prog [options]")
parser.add_option("--nocleanup", dest="nocleanup", default=False, action="store_true",
help="Leave bitcoinds and test.* datadir on exit or error")
+ parser.add_option("--noshutdown", dest="noshutdown", default=False, action="store_true",
+ help="Don't stop bitcoinds after the test execution")
parser.add_option("--srcdir", dest="srcdir", default="../../src",
- help="Source directory containing bitcoind/bitcoin-cli (default: %default%)")
+ help="Source directory containing bitcoind/bitcoin-cli (default: %default)")
parser.add_option("--tmpdir", dest="tmpdir", default=tempfile.mkdtemp(prefix="test"),
help="Root directory for datadirs")
parser.add_option("--tracerpc", dest="trace_rpc", default=False, action="store_true",
@@ -128,10 +130,15 @@ class BitcoinTestFramework(object):
print("Unexpected exception caught during testing: "+str(e))
traceback.print_tb(sys.exc_info()[2])
- if not self.options.nocleanup:
- print("Cleaning up")
+ if not self.options.noshutdown:
+ print("Stopping nodes")
stop_nodes(self.nodes)
wait_bitcoinds()
+ else:
+ print("Note: bitcoinds were not stopped and may still be running")
+
+ if not self.options.nocleanup and not self.options.noshutdown:
+ print("Cleaning up")
shutil.rmtree(self.options.tmpdir)
if success:
@@ -140,3 +147,34 @@ class BitcoinTestFramework(object):
else:
print("Failed")
sys.exit(1)
+
+
+# Test framework for doing p2p comparison testing, which sets up some bitcoind
+# binaries:
+# 1 binary: test binary
+# 2 binaries: 1 test binary, 1 ref binary
+# n>2 binaries: 1 test binary, n-1 ref binaries
+
+class ComparisonTestFramework(BitcoinTestFramework):
+
+ # Can override the num_nodes variable to indicate how many nodes to run.
+ def __init__(self):
+ self.num_nodes = 2
+
+ def add_options(self, parser):
+ parser.add_option("--testbinary", dest="testbinary",
+ default=os.getenv("BITCOIND", "bitcoind"),
+ help="bitcoind binary to test")
+ parser.add_option("--refbinary", dest="refbinary",
+ default=os.getenv("BITCOIND", "bitcoind"),
+ help="bitcoind binary to use for reference nodes (if any)")
+
+ def setup_chain(self):
+ print "Initializing test directory "+self.options.tmpdir
+ initialize_chain_clean(self.options.tmpdir, self.num_nodes)
+
+ def setup_network(self):
+ self.nodes = start_nodes(self.num_nodes, self.options.tmpdir,
+ extra_args=[['-debug', '-whitelist=127.0.0.1']] * self.num_nodes,
+ binary=[self.options.testbinary] +
+ [self.options.refbinary]*(self.num_nodes-1))
diff --git a/qa/rpc-tests/util.py b/qa/rpc-tests/util.py
index cf789f48e2..997bbcc373 100644
--- a/qa/rpc-tests/util.py
+++ b/qa/rpc-tests/util.py
@@ -33,7 +33,7 @@ def check_json_precision():
if satoshis != 2000000000000003:
raise RuntimeError("JSON encode/decode loses precision")
-def sync_blocks(rpc_connections):
+def sync_blocks(rpc_connections, wait=1):
"""
Wait until everybody has the same block count
"""
@@ -41,9 +41,9 @@ def sync_blocks(rpc_connections):
counts = [ x.getblockcount() for x in rpc_connections ]
if counts == [ counts[0] ]*len(counts):
break
- time.sleep(1)
+ time.sleep(wait)
-def sync_mempools(rpc_connections):
+def sync_mempools(rpc_connections, wait=1):
"""
Wait until everybody has the same transactions in their memory
pools
@@ -56,7 +56,7 @@ def sync_mempools(rpc_connections):
num_match = num_match+1
if num_match == len(rpc_connections):
break
- time.sleep(1)
+ time.sleep(wait)
bitcoind_processes = {}
@@ -88,8 +88,12 @@ def initialize_chain(test_dir):
if i > 0:
args.append("-connect=127.0.0.1:"+str(p2p_port(0)))
bitcoind_processes[i] = subprocess.Popen(args)
+ if os.getenv("PYTHON_DEBUG", ""):
+ print "initialize_chain: bitcoind started, calling bitcoin-cli -rpcwait getblockcount"
subprocess.check_call([ os.getenv("BITCOINCLI", "bitcoin-cli"), "-datadir="+datadir,
"-rpcwait", "getblockcount"], stdout=devnull)
+ if os.getenv("PYTHON_DEBUG", ""):
+ print "initialize_chain: bitcoin-cli -rpcwait getblockcount completed"
devnull.close()
rpcs = []
for i in range(4):
@@ -158,18 +162,24 @@ def _rpchost_to_args(rpchost):
rv += ['-rpcport=' + rpcport]
return rv
-def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None):
+def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None, binary=None):
"""
Start a bitcoind and return RPC connection to it
"""
datadir = os.path.join(dirname, "node"+str(i))
- args = [ os.getenv("BITCOIND", "bitcoind"), "-datadir="+datadir, "-keypool=1", "-discover=0", "-rest" ]
+ if binary is None:
+ binary = os.getenv("BITCOIND", "bitcoind")
+ args = [ binary, "-datadir="+datadir, "-keypool=1", "-discover=0", "-rest" ]
if extra_args is not None: args.extend(extra_args)
bitcoind_processes[i] = subprocess.Popen(args)
devnull = open("/dev/null", "w+")
+ if os.getenv("PYTHON_DEBUG", ""):
+ print "start_node: bitcoind started, calling bitcoin-cli -rpcwait getblockcount"
subprocess.check_call([ os.getenv("BITCOINCLI", "bitcoin-cli"), "-datadir="+datadir] +
_rpchost_to_args(rpchost) +
["-rpcwait", "getblockcount"], stdout=devnull)
+ if os.getenv("PYTHON_DEBUG", ""):
+ print "start_node: calling bitcoin-cli -rpcwait getblockcount returned"
devnull.close()
url = "http://rt:rt@%s:%d" % (rpchost or '127.0.0.1', rpc_port(i))
if timewait is not None:
@@ -179,12 +189,13 @@ def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None):
proxy.url = url # store URL on proxy for info
return proxy
-def start_nodes(num_nodes, dirname, extra_args=None, rpchost=None):
+def start_nodes(num_nodes, dirname, extra_args=None, rpchost=None, binary=None):
"""
Start multiple bitcoinds, return RPC connections to them
"""
if extra_args is None: extra_args = [ None for i in range(num_nodes) ]
- return [ start_node(i, dirname, extra_args[i], rpchost) for i in range(num_nodes) ]
+ if binary is None: binary = [ None for i in range(num_nodes) ]
+ return [ start_node(i, dirname, extra_args[i], rpchost, binary=binary[i]) for i in range(num_nodes) ]
def log_filename(dirname, n_node, logname):
return os.path.join(dirname, "node"+str(n_node), "regtest", logname)
@@ -272,7 +283,7 @@ def send_zeropri_transaction(from_node, to_node, amount, fee):
Create&broadcast a zero-priority transaction.
Returns (txid, hex-encoded-txdata)
Ensures transaction is zero-priority by first creating a send-to-self,
- then using it's output
+ then using its output
"""
# Create a send-to-self with confirmed inputs:
diff --git a/qa/rpc-tests/wallet.py b/qa/rpc-tests/wallet.py
index 08032fc538..b8965b3662 100755
--- a/qa/rpc-tests/wallet.py
+++ b/qa/rpc-tests/wallet.py
@@ -62,7 +62,7 @@ class WalletTest (BitcoinTestFramework):
walletinfo = self.nodes[0].getwalletinfo()
assert_equal(walletinfo['immature_balance'], 0)
- # Have node0 mine a block, thus they will collect their own fee.
+ # Have node0 mine a block, thus it will collect its own fee.
self.nodes[0].generate(1)
self.sync_all()
diff --git a/share/certs/PrivateKeyNotes.md b/share/certs/PrivateKeyNotes.md
index da299d168f..cbd060c268 100644
--- a/share/certs/PrivateKeyNotes.md
+++ b/share/certs/PrivateKeyNotes.md
@@ -7,7 +7,7 @@ signing requests.
For OSX, the private key was generated by Keychain.app on Gavin's main work machine.
The key and certificate is in a separate, passphrase-protected keychain file that is
-unlocked to sign the Bitcoin-Qt.app bundle.
+unlocked to sign the Bitcoin-Core.app bundle.
For Windows, the private key was generated by Firefox running on Gavin's main work machine.
The key and certificate were exported into a separate, passphrase-protected PKCS#12 file, and
@@ -17,7 +17,7 @@ Threat analysis
--
Gavin is a single point of failure. He could be coerced to divulge the secret signing keys,
-allowing somebody to distribute a Bitcoin-Qt.app or bitcoin-qt-setup.exe with a valid
+allowing somebody to distribute a Bitcoin-Core.app or bitcoin-qt-setup.exe with a valid
signature but containing a malicious binary.
Or the machine Gavin uses to sign the binaries could be compromised, either remotely or
diff --git a/share/genbuild.sh b/share/genbuild.sh
index ffa89ca6e4..a15cb34e47 100755
--- a/share/genbuild.sh
+++ b/share/genbuild.sh
@@ -22,7 +22,7 @@ if [ -e "$(which git 2>/dev/null)" -a "$(git rev-parse --is-inside-work-tree 2>/
# if latest commit is tagged and not dirty, then override using the tag name
RAWDESC=$(git describe --abbrev=0 2>/dev/null)
- if [ "$(git rev-parse HEAD)" = "$(git rev-list -1 $RAWDESC)" ]; then
+ if [ "$(git rev-parse HEAD)" = "$(git rev-list -1 $RAWDESC 2>/dev/null)" ]; then
git diff-index --quiet HEAD -- && DESC=$RAWDESC
fi
diff --git a/src/Makefile.am b/src/Makefile.am
index d8858ed29b..c77a262617 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -14,7 +14,7 @@ $(LIBLEVELDB): $(LIBMEMENV)
$(LIBLEVELDB) $(LIBMEMENV):
@echo "Building LevelDB ..." && $(MAKE) -C $(@D) $(@F) CXX="$(CXX)" \
CC="$(CC)" PLATFORM=$(TARGET_OS) AR="$(AR)" $(LEVELDB_TARGET_FLAGS) \
- OPT="$(CXXFLAGS) $(CPPFLAGS)"
+ OPT="$(CXXFLAGS) $(CPPFLAGS) -D__STDC_LIMIT_MACROS"
endif
BITCOIN_CONFIG_INCLUDES=-I$(builddir)/config
@@ -77,8 +77,8 @@ BITCOIN_CORE_H = \
base58.h \
bloom.h \
chain.h \
- chainparamsbase.h \
chainparams.h \
+ chainparamsbase.h \
chainparamsseeds.h \
checkpoints.h \
checkqueue.h \
@@ -86,11 +86,13 @@ BITCOIN_CORE_H = \
coincontrol.h \
coins.h \
compat.h \
+ compat/byteswap.h \
+ compat/endian.h \
+ compat/sanity.h \
compressor.h \
consensus/consensus.h \
consensus/params.h \
core_io.h \
- wallet/db.h \
eccryptoverify.h \
ecwrapper.h \
hash.h \
@@ -100,12 +102,14 @@ BITCOIN_CORE_H = \
leveldbwrapper.h \
limitedmap.h \
main.h \
+ memusage.h \
merkleblock.h \
miner.h \
mruset.h \
- netbase.h \
net.h \
+ netbase.h \
noui.h \
+ policy/fees.h \
pow.h \
primitives/block.h \
primitives/transaction.h \
@@ -115,9 +119,10 @@ BITCOIN_CORE_H = \
rpcclient.h \
rpcprotocol.h \
rpcserver.h \
+ scheduler.h \
script/interpreter.h \
- script/script_error.h \
script/script.h \
+ script/script_error.h \
script/sigcache.h \
script/sign.h \
script/standard.h \
@@ -143,12 +148,10 @@ BITCOIN_CORE_H = \
validationinterface.h \
version.h \
wallet/crypter.h \
- wallet/walletdb.h \
+ wallet/db.h \
wallet/wallet.h \
wallet/wallet_ismine.h \
- compat/byteswap.h \
- compat/endian.h \
- compat/sanity.h
+ wallet/walletdb.h
JSON_H = \
json/json_spirit.h \
@@ -182,6 +185,7 @@ libbitcoin_server_a_SOURCES = \
miner.cpp \
net.cpp \
noui.cpp \
+ policy/fees.cpp \
pow.cpp \
rest.cpp \
rpcblockchain.cpp \
@@ -214,39 +218,37 @@ libbitcoin_wallet_a_SOURCES = \
# crypto primitives library
crypto_libbitcoin_crypto_a_CPPFLAGS = $(BITCOIN_CONFIG_INCLUDES)
crypto_libbitcoin_crypto_a_SOURCES = \
- crypto/sha1.cpp \
- crypto/sha256.cpp \
- crypto/sha512.cpp \
- crypto/hmac_sha256.cpp \
- crypto/hmac_sha512.cpp \
- crypto/ripemd160.cpp \
crypto/common.h \
- crypto/sha256.h \
- crypto/sha512.h \
+ crypto/hmac_sha256.cpp \
crypto/hmac_sha256.h \
+ crypto/hmac_sha512.cpp \
crypto/hmac_sha512.h \
+ crypto/ripemd160.cpp \
+ crypto/ripemd160.h \
+ crypto/sha1.cpp \
crypto/sha1.h \
- crypto/ripemd160.h
+ crypto/sha256.cpp \
+ crypto/sha256.h \
+ crypto/sha512.cpp \
+ crypto/sha512.h
# univalue JSON library
univalue_libbitcoin_univalue_a_SOURCES = \
univalue/univalue.cpp \
- univalue/univalue_read.cpp \
- univalue/univalue_write.cpp \
+ univalue/univalue.h \
univalue/univalue_escapes.h \
- univalue/univalue.h
+ univalue/univalue_read.cpp \
+ univalue/univalue_write.cpp
# common: shared between bitcoind, and bitcoin-qt and non-server tools
libbitcoin_common_a_CPPFLAGS = $(BITCOIN_INCLUDES)
libbitcoin_common_a_SOURCES = \
- arith_uint256.cpp \
amount.cpp \
+ arith_uint256.cpp \
base58.cpp \
chainparams.cpp \
coins.cpp \
compressor.cpp \
- primitives/block.cpp \
- primitives/transaction.cpp \
core_read.cpp \
core_write.cpp \
eccryptoverify.cpp \
@@ -255,13 +257,16 @@ libbitcoin_common_a_SOURCES = \
key.cpp \
keystore.cpp \
netbase.cpp \
+ primitives/block.cpp \
+ primitives/transaction.cpp \
protocol.cpp \
pubkey.cpp \
+ scheduler.cpp \
script/interpreter.cpp \
script/script.cpp \
+ script/script_error.cpp \
script/sign.cpp \
script/standard.cpp \
- script/script_error.cpp \
$(BITCOIN_CORE_H)
# util: shared between all executables.
diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include
index 31fe3a9f69..6b7c42285d 100644
--- a/src/Makefile.qt.include
+++ b/src/Makefile.qt.include
@@ -256,6 +256,7 @@ RES_ICONS = \
qt/res/icons/tx_input.png \
qt/res/icons/tx_output.png \
qt/res/icons/tx_mined.png \
+ qt/res/icons/warning.png \
qt/res/icons/verify.png
BITCOIN_QT_CPP = \
diff --git a/src/Makefile.test.include b/src/Makefile.test.include
index 9aec13ccef..0997148117 100644
--- a/src/Makefile.test.include
+++ b/src/Makefile.test.include
@@ -57,9 +57,11 @@ BITCOIN_TESTS =\
test/multisig_tests.cpp \
test/netbase_tests.cpp \
test/pmt_tests.cpp \
+ test/policyestimator_tests.cpp \
test/pow_tests.cpp \
test/rpc_tests.cpp \
test/sanity_tests.cpp \
+ test/scheduler_tests.cpp \
test/script_P2SH_tests.cpp \
test/script_tests.cpp \
test/scriptnum_tests.cpp \
diff --git a/src/addrman.h b/src/addrman.h
index 5badd4ef95..373b0f39f3 100644
--- a/src/addrman.h
+++ b/src/addrman.h
@@ -17,8 +17,8 @@
#include <stdint.h>
#include <vector>
-/**
- * Extended statistics about a CAddress
+/**
+ * Extended statistics about a CAddress
*/
class CAddrInfo : public CAddress
{
@@ -105,15 +105,15 @@ public:
/** Stochastic address manager
*
* Design goals:
- * * Keep the address tables in-memory, and asynchronously dump the entire to able in peers.dat.
+ * * Keep the address tables in-memory, and asynchronously dump the entire table to peers.dat.
* * Make sure no (localized) attacker can fill the entire table with his nodes/addresses.
*
* To that end:
* * Addresses are organized into buckets.
- * * Address that have not yet been tried go into 1024 "new" buckets.
- * * Based on the address range (/16 for IPv4) of source of the information, 64 buckets are selected at random
- * * The actual bucket is chosen from one of these, based on the range the address itself is located.
- * * One single address can occur in up to 8 different buckets, to increase selection chances for addresses that
+ * * Addresses that have not yet been tried go into 1024 "new" buckets.
+ * * Based on the address range (/16 for IPv4) of the source of information, 64 buckets are selected at random.
+ * * The actual bucket is chosen from one of these, based on the range in which the address itself is located.
+ * * One single address can occur in up to 8 different buckets to increase selection chances for addresses that
* are seen frequently. The chance for increasing this multiplicity decreases exponentially.
* * When adding a new address to a full bucket, a randomly chosen entry (with a bias favoring less recently seen
* ones) is removed from it first.
@@ -231,7 +231,6 @@ protected:
void Attempt_(const CService &addr, int64_t nTime);
//! Select an address to connect to.
- //! nUnkBias determines how much to favor new addresses over tried ones (min=0, max=100)
CAddrInfo Select_();
#ifdef DEBUG_ADDRMAN
@@ -532,7 +531,6 @@ public:
/**
* Choose an address to connect to.
- * nUnkBias determines how much "new" entries are favored over "tried" ones (0-100).
*/
CAddrInfo Select()
{
diff --git a/src/base58.h b/src/base58.h
index 8de90046a9..787979c827 100644
--- a/src/base58.h
+++ b/src/base58.h
@@ -6,10 +6,10 @@
/**
* Why base-58 instead of standard base-64 encoding?
* - Don't want 0OIl characters that look the same in some fonts and
- * could be used to create visually identical looking account numbers.
- * - A string with non-alphanumeric characters is not as easily accepted as an account number.
+ * could be used to create visually identical looking data.
+ * - A string with non-alphanumeric characters is not as easily accepted as input.
* - E-mail usually won't line-break if there's no punctuation to break at.
- * - Double-clicking selects the whole number as one word if it's all alphanumeric.
+ * - Double-clicking selects the whole string as one word if it's all alphanumeric.
*/
#ifndef BITCOIN_BASE58_H
#define BITCOIN_BASE58_H
diff --git a/src/bitcoin-cli.cpp b/src/bitcoin-cli.cpp
index 2fa8de6fd8..1269d7a119 100644
--- a/src/bitcoin-cli.cpp
+++ b/src/bitcoin-cli.cpp
@@ -12,8 +12,6 @@
#include <boost/filesystem/operations.hpp>
-#define _(x) std::string(x) /* Keep the _() around in case gettext or such will be used later to translate non-UI */
-
using namespace std;
using namespace json_spirit;
diff --git a/src/bitcoin-tx.cpp b/src/bitcoin-tx.cpp
index f1c1c0ff8b..c82d4f93a8 100644
--- a/src/bitcoin-tx.cpp
+++ b/src/bitcoin-tx.cpp
@@ -11,7 +11,6 @@
#include "primitives/transaction.h"
#include "script/script.h"
#include "script/sign.h"
-#include "ui_interface.h" // for _(...)
#include "univalue/univalue.h"
#include "util.h"
#include "utilmoneystr.h"
@@ -26,7 +25,6 @@ using namespace std;
static bool fCreateBlank;
static map<string,UniValue> registers;
-CClientUIInterface uiInterface;
static bool AppInitRawTx(int argc, char* argv[])
{
@@ -444,9 +442,18 @@ static void MutateTxSign(CMutableTransaction& tx, const string& flagStr)
tx = mergedTx;
}
+class Secp256k1Init
+{
+public:
+ Secp256k1Init() { ECC_Start(); }
+ ~Secp256k1Init() { ECC_Stop(); }
+};
+
static void MutateTx(CMutableTransaction& tx, const string& command,
const string& commandVal)
{
+ boost::scoped_ptr<Secp256k1Init> ecc;
+
if (command == "nversion")
MutateTxVersion(tx, commandVal);
else if (command == "locktime")
@@ -464,8 +471,10 @@ static void MutateTx(CMutableTransaction& tx, const string& command,
else if (command == "outscript")
MutateTxAddOutScript(tx, commandVal);
- else if (command == "sign")
+ else if (command == "sign") {
+ if (!ecc) { ecc.reset(new Secp256k1Init()); }
MutateTxSign(tx, commandVal);
+ }
else if (command == "load")
RegisterLoad(commandVal);
diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp
index 2172f4a21b..cce687ac98 100644
--- a/src/bitcoind.cpp
+++ b/src/bitcoind.cpp
@@ -8,7 +8,7 @@
#include "init.h"
#include "main.h"
#include "noui.h"
-#include "ui_interface.h"
+#include "scheduler.h"
#include "util.h"
#include <boost/algorithm/string/predicate.hpp>
@@ -56,6 +56,7 @@ void WaitForShutdown(boost::thread_group* threadGroup)
bool AppInit(int argc, char* argv[])
{
boost::thread_group threadGroup;
+ CScheduler scheduler;
bool fRet = false;
@@ -143,7 +144,7 @@ bool AppInit(int argc, char* argv[])
#endif
SoftSetBoolArg("-server", true);
- fRet = AppInit2(threadGroup);
+ fRet = AppInit2(threadGroup, scheduler);
}
catch (const std::exception& e) {
PrintExceptionContinue(&e, "AppInit()");
diff --git a/src/bloom.cpp b/src/bloom.cpp
index e60576f4b4..36cba491c4 100644
--- a/src/bloom.cpp
+++ b/src/bloom.cpp
@@ -21,22 +21,33 @@
using namespace std;
CBloomFilter::CBloomFilter(unsigned int nElements, double nFPRate, unsigned int nTweakIn, unsigned char nFlagsIn) :
-/**
- * The ideal size for a bloom filter with a given number of elements and false positive rate is:
- * - nElements * log(fp rate) / ln(2)^2
- * We ignore filter parameters which will create a bloom filter larger than the protocol limits
- */
-vData(min((unsigned int)(-1 / LN2SQUARED * nElements * log(nFPRate)), MAX_BLOOM_FILTER_SIZE * 8) / 8),
-/**
- * The ideal number of hash functions is filter size * ln(2) / number of elements
- * Again, we ignore filter parameters which will create a bloom filter with more hash functions than the protocol limits
- * See https://en.wikipedia.org/wiki/Bloom_filter for an explanation of these formulas
- */
-isFull(false),
-isEmpty(false),
-nHashFuncs(min((unsigned int)(vData.size() * 8 / nElements * LN2), MAX_HASH_FUNCS)),
-nTweak(nTweakIn),
-nFlags(nFlagsIn)
+ /**
+ * The ideal size for a bloom filter with a given number of elements and false positive rate is:
+ * - nElements * log(fp rate) / ln(2)^2
+ * We ignore filter parameters which will create a bloom filter larger than the protocol limits
+ */
+ vData(min((unsigned int)(-1 / LN2SQUARED * nElements * log(nFPRate)), MAX_BLOOM_FILTER_SIZE * 8) / 8),
+ /**
+ * The ideal number of hash functions is filter size * ln(2) / number of elements
+ * Again, we ignore filter parameters which will create a bloom filter with more hash functions than the protocol limits
+ * See https://en.wikipedia.org/wiki/Bloom_filter for an explanation of these formulas
+ */
+ isFull(false),
+ isEmpty(false),
+ nHashFuncs(min((unsigned int)(vData.size() * 8 / nElements * LN2), MAX_HASH_FUNCS)),
+ nTweak(nTweakIn),
+ nFlags(nFlagsIn)
+{
+}
+
+// Private constructor used by CRollingBloomFilter
+CBloomFilter::CBloomFilter(unsigned int nElements, double nFPRate, unsigned int nTweakIn) :
+ vData((unsigned int)(-1 / LN2SQUARED * nElements * log(nFPRate)) / 8),
+ isFull(false),
+ isEmpty(true),
+ nHashFuncs((unsigned int)(vData.size() * 8 / nElements * LN2)),
+ nTweak(nTweakIn),
+ nFlags(BLOOM_UPDATE_NONE)
{
}
@@ -197,3 +208,43 @@ void CBloomFilter::UpdateEmptyFull()
isFull = full;
isEmpty = empty;
}
+
+CRollingBloomFilter::CRollingBloomFilter(unsigned int nElements, double fpRate, unsigned int nTweak) :
+ b1(nElements * 2, fpRate, nTweak), b2(nElements * 2, fpRate, nTweak)
+{
+ // Implemented using two bloom filters of 2 * nElements each.
+ // We fill them up, and clear them, staggered, every nElements
+ // inserted, so at least one always contains the last nElements
+ // inserted.
+ nBloomSize = nElements * 2;
+ nInsertions = 0;
+}
+
+void CRollingBloomFilter::insert(const std::vector<unsigned char>& vKey)
+{
+ if (nInsertions == 0) {
+ b1.clear();
+ } else if (nInsertions == nBloomSize / 2) {
+ b2.clear();
+ }
+ b1.insert(vKey);
+ b2.insert(vKey);
+ if (++nInsertions == nBloomSize) {
+ nInsertions = 0;
+ }
+}
+
+bool CRollingBloomFilter::contains(const std::vector<unsigned char>& vKey) const
+{
+ if (nInsertions < nBloomSize / 2) {
+ return b2.contains(vKey);
+ }
+ return b1.contains(vKey);
+}
+
+void CRollingBloomFilter::clear()
+{
+ b1.clear();
+ b2.clear();
+ nInsertions = 0;
+}
diff --git a/src/bloom.h b/src/bloom.h
index 191ffa19b3..bb17f59c86 100644
--- a/src/bloom.h
+++ b/src/bloom.h
@@ -32,14 +32,14 @@ enum bloomflags
/**
* BloomFilter is a probabilistic filter which SPV clients provide
- * so that we can filter the transactions we sends them.
+ * so that we can filter the transactions we send them.
*
* This allows for significantly more efficient transaction and block downloads.
*
- * Because bloom filters are probabilistic, an SPV node can increase the false-
- * positive rate, making us send them transactions which aren't actually theirs,
+ * Because bloom filters are probabilistic, a SPV node can increase the false-
+ * positive rate, making us send it transactions which aren't actually its,
* allowing clients to trade more bandwidth for more privacy by obfuscating which
- * keys are owned by them.
+ * keys are controlled by them.
*/
class CBloomFilter
{
@@ -53,6 +53,10 @@ private:
unsigned int Hash(unsigned int nHashNum, const std::vector<unsigned char>& vDataToHash) const;
+ // Private constructor for CRollingBloomFilter, no restrictions on size
+ CBloomFilter(unsigned int nElements, double nFPRate, unsigned int nTweak);
+ friend class CRollingBloomFilter;
+
public:
/**
* Creates a new bloom filter which will provide the given fp rate when filled with the given number of elements
@@ -97,4 +101,28 @@ public:
void UpdateEmptyFull();
};
+/**
+ * RollingBloomFilter is a probabilistic "keep track of most recently inserted" set.
+ * Construct it with the number of items to keep track of, and a false-positive rate.
+ *
+ * contains(item) will always return true if item was one of the last N things
+ * insert()'ed ... but may also return true for items that were not inserted.
+ */
+class CRollingBloomFilter
+{
+public:
+ CRollingBloomFilter(unsigned int nElements, double nFPRate, unsigned int nTweak);
+
+ void insert(const std::vector<unsigned char>& vKey);
+ bool contains(const std::vector<unsigned char>& vKey) const;
+
+ void clear();
+
+private:
+ unsigned int nBloomSize;
+ unsigned int nInsertions;
+ CBloomFilter b1, b2;
+};
+
+
#endif // BITCOIN_BLOOM_H
diff --git a/src/chain.h b/src/chain.h
index 02f53cd2f2..01be2d6e5c 100644
--- a/src/chain.h
+++ b/src/chain.h
@@ -74,7 +74,7 @@ enum BlockStatus {
*/
BLOCK_VALID_TRANSACTIONS = 3,
- //! Outputs do not overspend inputs, no double spends, coinbase output ok, immature coinbase spends, BIP30.
+ //! Outputs do not overspend inputs, no double spends, coinbase output ok, no immature coinbase spends, BIP30.
//! Implies all parents are also at least CHAIN.
BLOCK_VALID_CHAIN = 4,
diff --git a/src/chainparams.cpp b/src/chainparams.cpp
index 589c7b5472..5f400b265c 100644
--- a/src/chainparams.cpp
+++ b/src/chainparams.cpp
@@ -5,7 +5,6 @@
#include "chainparams.h"
-#include "random.h"
#include "util.h"
#include "utilstrencodings.h"
@@ -15,35 +14,11 @@
using namespace std;
-struct SeedSpec6 {
- uint8_t addr[16];
- uint16_t port;
-};
-
#include "chainparamsseeds.h"
/**
* Main network
*/
-
-//! Convert the pnSeeds6 array into usable address objects.
-static void convertSeed6(std::vector<CAddress> &vSeedsOut, const SeedSpec6 *data, unsigned int count)
-{
- // It'll only connect to one or two seed nodes because once it connects,
- // it'll get a pile of addresses with newer timestamps.
- // Seed nodes are given a random 'last seen time' of between one and two
- // weeks ago.
- const int64_t nOneWeek = 7*24*60*60;
- for (unsigned int i = 0; i < count; i++)
- {
- struct in6_addr ip;
- memcpy(&ip, data[i].addr, sizeof(ip));
- CAddress addr(CService(ip, data[i].port));
- addr.nTime = GetTime() - GetRand(nOneWeek) - nOneWeek;
- vSeedsOut.push_back(addr);
- }
-}
-
/**
* What makes a good checkpoint block?
* + Is surrounded by blocks with reasonable timestamps
@@ -51,51 +26,6 @@ static void convertSeed6(std::vector<CAddress> &vSeedsOut, const SeedSpec6 *data
* timestamp before)
* + Contains no strange transactions
*/
-static Checkpoints::MapCheckpoints mapCheckpoints =
- boost::assign::map_list_of
- ( 11111, uint256S("0x0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d"))
- ( 33333, uint256S("0x000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6"))
- ( 74000, uint256S("0x0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20"))
- (105000, uint256S("0x00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97"))
- (134444, uint256S("0x00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe"))
- (168000, uint256S("0x000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763"))
- (193000, uint256S("0x000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317"))
- (210000, uint256S("0x000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e"))
- (216116, uint256S("0x00000000000001b4f4b433e81ee46494af945cf96014816a4e2370f11b23df4e"))
- (225430, uint256S("0x00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932"))
- (250000, uint256S("0x000000000000003887df1f29024b06fc2200b55f8af8f35453d7be294df2d214"))
- (279000, uint256S("0x0000000000000001ae8c72a0b0c301f67e3afca10e819efa9041e458e9bd7e40"))
- (295000, uint256S("0x00000000000000004d9b4ef50f0f9d686fd69db2e03af35a100370c64632a983"))
- ;
-static const Checkpoints::CCheckpointData data = {
- &mapCheckpoints,
- 1397080064, // * UNIX timestamp of last checkpoint block
- 36544669, // * total number of transactions between genesis and last checkpoint
- // (the tx=... number in the SetBestChain debug.log lines)
- 60000.0 // * estimated number of transactions per day after checkpoint
- };
-
-static Checkpoints::MapCheckpoints mapCheckpointsTestnet =
- boost::assign::map_list_of
- ( 546, uint256S("000000002a936ca763904c3c35fce2f3556c559c0214345d31b1bcebf76acb70"))
- ;
-static const Checkpoints::CCheckpointData dataTestnet = {
- &mapCheckpointsTestnet,
- 1337966069,
- 1488,
- 300
- };
-
-static Checkpoints::MapCheckpoints mapCheckpointsRegtest =
- boost::assign::map_list_of
- ( 0, uint256S("0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206"))
- ;
-static const Checkpoints::CCheckpointData dataRegtest = {
- &mapCheckpointsRegtest,
- 0,
- 0,
- 0
- };
class CMainParams : public CChainParams {
public:
@@ -112,7 +42,7 @@ public:
/**
* The message start string is designed to be unlikely to occur in normal data.
* The characters are rarely used upper ASCII, not valid as UTF-8, and produce
- * a large 4-byte int at any alignment.
+ * a large 32-bit integer with any alignment.
*/
pchMessageStart[0] = 0xf9;
pchMessageStart[1] = 0xbe;
@@ -124,9 +54,10 @@ public:
nPruneAfterHeight = 100000;
/**
- * Build the genesis block. Note that the output of the genesis coinbase cannot
- * be spent as it did not originally exist in the database.
- *
+ * Build the genesis block. Note that the output of its generation
+ * transaction cannot be spent since it did not originally exist in the
+ * database.
+ *
* CBlock(hash=000000000019d6, ver=1, hashPrevBlock=00000000000000, hashMerkleRoot=4a5e1e, nTime=1231006505, nBits=1d00ffff, nNonce=2083236893, vtx=1)
* CTransaction(hash=4a5e1e, ver=1, vin.size=1, vout.size=1, nLockTime=0)
* CTxIn(COutPoint(000000, -1), coinbase 04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73)
@@ -155,8 +86,9 @@ public:
vSeeds.push_back(CDNSSeedData("bitcoin.sipa.be", "seed.bitcoin.sipa.be")); // Pieter Wuille
vSeeds.push_back(CDNSSeedData("bluematt.me", "dnsseed.bluematt.me")); // Matt Corallo
vSeeds.push_back(CDNSSeedData("dashjr.org", "dnsseed.bitcoin.dashjr.org")); // Luke Dashjr
- vSeeds.push_back(CDNSSeedData("bitcoinstats.com", "seed.bitcoinstats.com")); // Addy Yeow
+ vSeeds.push_back(CDNSSeedData("bitcoinstats.com", "seed.bitcoinstats.com")); // Christian Decker
vSeeds.push_back(CDNSSeedData("xf2.org", "bitseed.xf2.org")); // Jeff Garzik
+ vSeeds.push_back(CDNSSeedData("bitcoin.jonasschnelli.ch", "seed.bitcoin.jonasschnelli.ch")); // Jonas Schnelli
base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,0);
base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,5);
@@ -164,7 +96,7 @@ public:
base58Prefixes[EXT_PUBLIC_KEY] = boost::assign::list_of(0x04)(0x88)(0xB2)(0x1E).convert_to_container<std::vector<unsigned char> >();
base58Prefixes[EXT_SECRET_KEY] = boost::assign::list_of(0x04)(0x88)(0xAD)(0xE4).convert_to_container<std::vector<unsigned char> >();
- convertSeed6(vFixedSeeds, pnSeed6_main, ARRAYLEN(pnSeed6_main));
+ vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_main, pnSeed6_main + ARRAYLEN(pnSeed6_main));
fRequireRPCPassword = true;
fMiningRequiresPeers = true;
@@ -172,11 +104,27 @@ public:
fRequireStandard = true;
fMineBlocksOnDemand = false;
fTestnetToBeDeprecatedFieldRPC = false;
- }
- const Checkpoints::CCheckpointData& Checkpoints() const
- {
- return data;
+ checkpointData = (Checkpoints::CCheckpointData) {
+ boost::assign::map_list_of
+ ( 11111, uint256S("0x0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d"))
+ ( 33333, uint256S("0x000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6"))
+ ( 74000, uint256S("0x0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20"))
+ (105000, uint256S("0x00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97"))
+ (134444, uint256S("0x00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe"))
+ (168000, uint256S("0x000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763"))
+ (193000, uint256S("0x000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317"))
+ (210000, uint256S("0x000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e"))
+ (216116, uint256S("0x00000000000001b4f4b433e81ee46494af945cf96014816a4e2370f11b23df4e"))
+ (225430, uint256S("0x00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932"))
+ (250000, uint256S("0x000000000000003887df1f29024b06fc2200b55f8af8f35453d7be294df2d214"))
+ (279000, uint256S("0x0000000000000001ae8c72a0b0c301f67e3afca10e819efa9041e458e9bd7e40"))
+ (295000, uint256S("0x00000000000000004d9b4ef50f0f9d686fd69db2e03af35a100370c64632a983")),
+ 1397080064, // * UNIX timestamp of last checkpoint block
+ 36544669, // * total number of transactions between genesis and last checkpoint
+ // (the tx=... number in the SetBestChain debug.log lines)
+ 60000.0 // * estimated number of transactions per day after checkpoint
+ };
}
};
static CMainParams mainParams;
@@ -220,7 +168,7 @@ public:
base58Prefixes[EXT_PUBLIC_KEY] = boost::assign::list_of(0x04)(0x35)(0x87)(0xCF).convert_to_container<std::vector<unsigned char> >();
base58Prefixes[EXT_SECRET_KEY] = boost::assign::list_of(0x04)(0x35)(0x83)(0x94).convert_to_container<std::vector<unsigned char> >();
- convertSeed6(vFixedSeeds, pnSeed6_test, ARRAYLEN(pnSeed6_test));
+ vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_test, pnSeed6_test + ARRAYLEN(pnSeed6_test));
fRequireRPCPassword = true;
fMiningRequiresPeers = true;
@@ -228,10 +176,15 @@ public:
fRequireStandard = false;
fMineBlocksOnDemand = false;
fTestnetToBeDeprecatedFieldRPC = true;
- }
- const Checkpoints::CCheckpointData& Checkpoints() const
- {
- return dataTestnet;
+
+ checkpointData = (Checkpoints::CCheckpointData) {
+ boost::assign::map_list_of
+ ( 546, uint256S("000000002a936ca763904c3c35fce2f3556c559c0214345d31b1bcebf76acb70")),
+ 1337966069,
+ 1488,
+ 300
+ };
+
}
};
static CTestNetParams testNetParams;
@@ -270,10 +223,14 @@ public:
fRequireStandard = false;
fMineBlocksOnDemand = true;
fTestnetToBeDeprecatedFieldRPC = false;
- }
- const Checkpoints::CCheckpointData& Checkpoints() const
- {
- return dataRegtest;
+
+ checkpointData = (Checkpoints::CCheckpointData){
+ boost::assign::map_list_of
+ ( 0, uint256S("0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")),
+ 0,
+ 0,
+ 0
+ };
}
};
static CRegTestParams regTestParams;
diff --git a/src/chainparams.h b/src/chainparams.h
index 5e974123dc..8044b553e1 100644
--- a/src/chainparams.h
+++ b/src/chainparams.h
@@ -19,6 +19,12 @@ struct CDNSSeedData {
CDNSSeedData(const std::string &strName, const std::string &strHost) : name(strName), host(strHost) {}
};
+struct SeedSpec6 {
+ uint8_t addr[16];
+ uint16_t port;
+};
+
+
/**
* CChainParams defines various tweakable parameters of a given instance of the
* Bitcoin system. There are three: the main network on which people trade goods
@@ -43,10 +49,6 @@ public:
const CMessageHeader::MessageStartChars& MessageStart() const { return pchMessageStart; }
const std::vector<unsigned char>& AlertKey() const { return vAlertPubKey; }
int GetDefaultPort() const { return nDefaultPort; }
- int SubsidyHalvingInterval() const { return consensus.nSubsidyHalvingInterval; }
- int EnforceBlockUpgradeMajority() const { return consensus.nMajorityEnforceBlockUpgrade; }
- int RejectBlockOutdatedMajority() const { return consensus.nMajorityRejectBlockOutdated; }
- int ToCheckBlockUpgradeMajority() const { return consensus.nMajorityWindow; }
/** Used if GenerateBitcoins is called with a negative number of threads */
int DefaultMinerThreads() const { return nMinerThreads; }
@@ -56,7 +58,7 @@ public:
bool MiningRequiresPeers() const { return fMiningRequiresPeers; }
/** Default value for -checkmempool and -checkblockindex argument */
bool DefaultConsistencyChecks() const { return fDefaultConsistencyChecks; }
- /** Make standard checks */
+ /** Policy: Filter transactions that do not match well-defined patterns */
bool RequireStandard() const { return fRequireStandard; }
int64_t PruneAfterHeight() const { return nPruneAfterHeight; }
/** Make miner stop after a block is found. In RPC, don't return until nGenProcLimit blocks are generated */
@@ -67,8 +69,8 @@ public:
std::string NetworkIDString() const { return strNetworkID; }
const std::vector<CDNSSeedData>& DNSSeeds() const { return vSeeds; }
const std::vector<unsigned char>& Base58Prefix(Base58Type type) const { return base58Prefixes[type]; }
- const std::vector<CAddress>& FixedSeeds() const { return vFixedSeeds; }
- virtual const Checkpoints::CCheckpointData& Checkpoints() const = 0;
+ const std::vector<SeedSpec6>& FixedSeeds() const { return vFixedSeeds; }
+ const Checkpoints::CCheckpointData& Checkpoints() const { return checkpointData; }
protected:
CChainParams() {}
@@ -83,18 +85,19 @@ protected:
std::vector<unsigned char> base58Prefixes[MAX_BASE58_TYPES];
std::string strNetworkID;
CBlock genesis;
- std::vector<CAddress> vFixedSeeds;
+ std::vector<SeedSpec6> vFixedSeeds;
bool fRequireRPCPassword;
bool fMiningRequiresPeers;
bool fDefaultConsistencyChecks;
bool fRequireStandard;
bool fMineBlocksOnDemand;
bool fTestnetToBeDeprecatedFieldRPC;
+ Checkpoints::CCheckpointData checkpointData;
};
/**
- * Return the currently selected parameters. This won't change after app startup
- * outside of the unit tests.
+ * Return the currently selected parameters. This won't change after app
+ * startup, except for unit tests.
*/
const CChainParams &Params();
diff --git a/src/chainparamsbase.h b/src/chainparamsbase.h
index 421a3a06ff..4369d0aef7 100644
--- a/src/chainparamsbase.h
+++ b/src/chainparamsbase.h
@@ -34,8 +34,8 @@ protected:
};
/**
- * Return the currently selected parameters. This won't change after app startup
- * outside of the unit tests.
+ * Return the currently selected parameters. This won't change after app
+ * startup, except for unit tests.
*/
const CBaseChainParams& BaseParams();
diff --git a/src/checkpoints.cpp b/src/checkpoints.cpp
index 71579bb309..2024486139 100644
--- a/src/checkpoints.cpp
+++ b/src/checkpoints.cpp
@@ -15,22 +15,18 @@
namespace Checkpoints {
/**
- * How many times we expect transactions after the last checkpoint to
- * be slower. This number is a compromise, as it can't be accurate for
- * every system. When reindexing from a fast disk with a slow CPU, it
+ * How many times slower we expect checking transactions after the last
+ * checkpoint to be (from checking signatures, which is skipped up to the
+ * last checkpoint). This number is a compromise, as it can't be accurate
+ * for every system. When reindexing from a fast disk with a slow CPU, it
* can be up to 20, while when downloading from a slow network with a
* fast multicore CPU, it won't be much higher than 1.
*/
static const double SIGCHECK_VERIFICATION_FACTOR = 5.0;
- bool fEnabled = true;
-
- bool CheckBlock(int nHeight, const uint256& hash)
+ bool CheckBlock(const CCheckpointData& data, int nHeight, const uint256& hash)
{
- if (!fEnabled)
- return true;
-
- const MapCheckpoints& checkpoints = *Params().Checkpoints().mapCheckpoints;
+ const MapCheckpoints& checkpoints = data.mapCheckpoints;
MapCheckpoints::const_iterator i = checkpoints.find(nHeight);
if (i == checkpoints.end()) return true;
@@ -38,7 +34,7 @@ namespace Checkpoints {
}
//! Guess how far we are in the verification process at the given block index
- double GuessVerificationProgress(CBlockIndex *pindex, bool fSigchecks) {
+ double GuessVerificationProgress(const CCheckpointData& data, CBlockIndex *pindex, bool fSigchecks) {
if (pindex==NULL)
return 0.0;
@@ -50,8 +46,6 @@ namespace Checkpoints {
// Work is defined as: 1.0 per transaction before the last checkpoint, and
// fSigcheckVerificationFactor per transaction after.
- const CCheckpointData &data = Params().Checkpoints();
-
if (pindex->nChainTx <= data.nTransactionsLastCheckpoint) {
double nCheapBefore = pindex->nChainTx;
double nCheapAfter = data.nTransactionsLastCheckpoint - pindex->nChainTx;
@@ -69,22 +63,19 @@ namespace Checkpoints {
return fWorkBefore / (fWorkBefore + fWorkAfter);
}
- int GetTotalBlocksEstimate()
+ int GetTotalBlocksEstimate(const CCheckpointData& data)
{
- if (!fEnabled)
- return 0;
+ const MapCheckpoints& checkpoints = data.mapCheckpoints;
- const MapCheckpoints& checkpoints = *Params().Checkpoints().mapCheckpoints;
+ if (checkpoints.empty())
+ return 0;
return checkpoints.rbegin()->first;
}
- CBlockIndex* GetLastCheckpoint()
+ CBlockIndex* GetLastCheckpoint(const CCheckpointData& data)
{
- if (!fEnabled)
- return NULL;
-
- const MapCheckpoints& checkpoints = *Params().Checkpoints().mapCheckpoints;
+ const MapCheckpoints& checkpoints = data.mapCheckpoints;
BOOST_REVERSE_FOREACH(const MapCheckpoints::value_type& i, checkpoints)
{
diff --git a/src/checkpoints.h b/src/checkpoints.h
index 29dc5f83a9..a720f096c0 100644
--- a/src/checkpoints.h
+++ b/src/checkpoints.h
@@ -11,7 +11,7 @@
class CBlockIndex;
-/**
+/**
* Block-chain checkpoints are compiled-in sanity checks.
* They are updated every release or three.
*/
@@ -20,24 +20,22 @@ namespace Checkpoints
typedef std::map<int, uint256> MapCheckpoints;
struct CCheckpointData {
- const MapCheckpoints *mapCheckpoints;
+ MapCheckpoints mapCheckpoints;
int64_t nTimeLastCheckpoint;
int64_t nTransactionsLastCheckpoint;
double fTransactionsPerDay;
};
//! Returns true if block passes checkpoint checks
-bool CheckBlock(int nHeight, const uint256& hash);
+bool CheckBlock(const CCheckpointData& data, int nHeight, const uint256& hash);
//! Return conservative estimate of total number of blocks, 0 if unknown
-int GetTotalBlocksEstimate();
+int GetTotalBlocksEstimate(const CCheckpointData& data);
//! Returns last CBlockIndex* in mapBlockIndex that is a checkpoint
-CBlockIndex* GetLastCheckpoint();
+CBlockIndex* GetLastCheckpoint(const CCheckpointData& data);
-double GuessVerificationProgress(CBlockIndex* pindex, bool fSigchecks = true);
-
-extern bool fEnabled;
+double GuessVerificationProgress(const CCheckpointData& data, CBlockIndex* pindex, bool fSigchecks = true);
} //namespace Checkpoints
diff --git a/src/checkqueue.h b/src/checkqueue.h
index 6f6b97e3a7..20ba25bb41 100644
--- a/src/checkqueue.h
+++ b/src/checkqueue.h
@@ -54,7 +54,7 @@ private:
/**
* Number of verifications that haven't completed yet.
- * This includes elements that are not anymore in queue, but still in
+ * This includes elements that are no longer queued, but still in the
* worker's own batches.
*/
unsigned int nTodo;
@@ -81,7 +81,7 @@ private:
fAllOk &= fOk;
nTodo -= nNow;
if (nTodo == 0 && !fMaster)
- // We processed the last element; inform the master he or she can exit and return the result
+ // We processed the last element; inform the master it can exit and return the result
condMaster.notify_one();
} else {
// first iteration
@@ -136,7 +136,7 @@ public:
Loop();
}
- //! Wait until execution finishes, and return whether all evaluations where successful.
+ //! Wait until execution finishes, and return whether all evaluations were successful.
bool Wait()
{
return Loop(true);
diff --git a/src/coins.cpp b/src/coins.cpp
index d79e29951b..a41d5a310d 100644
--- a/src/coins.cpp
+++ b/src/coins.cpp
@@ -4,6 +4,7 @@
#include "coins.h"
+#include "memusage.h"
#include "random.h"
#include <assert.h>
@@ -57,13 +58,17 @@ bool CCoinsViewBacked::GetStats(CCoinsStats &stats) const { return base->GetStat
CCoinsKeyHasher::CCoinsKeyHasher() : salt(GetRandHash()) {}
-CCoinsViewCache::CCoinsViewCache(CCoinsView *baseIn) : CCoinsViewBacked(baseIn), hasModifier(false) { }
+CCoinsViewCache::CCoinsViewCache(CCoinsView *baseIn) : CCoinsViewBacked(baseIn), hasModifier(false), cachedCoinsUsage(0) { }
CCoinsViewCache::~CCoinsViewCache()
{
assert(!hasModifier);
}
+size_t CCoinsViewCache::DynamicMemoryUsage() const {
+ return memusage::DynamicUsage(cacheCoins) + cachedCoinsUsage;
+}
+
CCoinsMap::const_iterator CCoinsViewCache::FetchCoins(const uint256 &txid) const {
CCoinsMap::iterator it = cacheCoins.find(txid);
if (it != cacheCoins.end())
@@ -78,6 +83,7 @@ CCoinsMap::const_iterator CCoinsViewCache::FetchCoins(const uint256 &txid) const
// version as fresh.
ret->second.flags = CCoinsCacheEntry::FRESH;
}
+ cachedCoinsUsage += memusage::DynamicUsage(ret->second.coins);
return ret;
}
@@ -93,6 +99,7 @@ bool CCoinsViewCache::GetCoins(const uint256 &txid, CCoins &coins) const {
CCoinsModifier CCoinsViewCache::ModifyCoins(const uint256 &txid) {
assert(!hasModifier);
std::pair<CCoinsMap::iterator, bool> ret = cacheCoins.insert(std::make_pair(txid, CCoinsCacheEntry()));
+ size_t cachedCoinUsage = 0;
if (ret.second) {
if (!base->GetCoins(txid, ret.first->second.coins)) {
// The parent view does not have this entry; mark it as fresh.
@@ -102,10 +109,12 @@ CCoinsModifier CCoinsViewCache::ModifyCoins(const uint256 &txid) {
// The parent view only has a pruned entry for this; mark it as fresh.
ret.first->second.flags = CCoinsCacheEntry::FRESH;
}
+ } else {
+ cachedCoinUsage = memusage::DynamicUsage(ret.first->second.coins);
}
// Assume that whenever ModifyCoins is called, the entry will be modified.
ret.first->second.flags |= CCoinsCacheEntry::DIRTY;
- return CCoinsModifier(*this, ret.first);
+ return CCoinsModifier(*this, ret.first, cachedCoinUsage);
}
const CCoins* CCoinsViewCache::AccessCoins(const uint256 &txid) const {
@@ -150,6 +159,7 @@ bool CCoinsViewCache::BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlockIn
assert(it->second.flags & CCoinsCacheEntry::FRESH);
CCoinsCacheEntry& entry = cacheCoins[it->first];
entry.coins.swap(it->second.coins);
+ cachedCoinsUsage += memusage::DynamicUsage(entry.coins);
entry.flags = CCoinsCacheEntry::DIRTY | CCoinsCacheEntry::FRESH;
}
} else {
@@ -157,10 +167,13 @@ bool CCoinsViewCache::BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlockIn
// The grandparent does not have an entry, and the child is
// modified and being pruned. This means we can just delete
// it from the parent.
+ cachedCoinsUsage -= memusage::DynamicUsage(itUs->second.coins);
cacheCoins.erase(itUs);
} else {
// A normal modification.
+ cachedCoinsUsage -= memusage::DynamicUsage(itUs->second.coins);
itUs->second.coins.swap(it->second.coins);
+ cachedCoinsUsage += memusage::DynamicUsage(itUs->second.coins);
itUs->second.flags |= CCoinsCacheEntry::DIRTY;
}
}
@@ -175,6 +188,7 @@ bool CCoinsViewCache::BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlockIn
bool CCoinsViewCache::Flush() {
bool fOk = base->BatchWrite(cacheCoins, hashBlock);
cacheCoins.clear();
+ cachedCoinsUsage = 0;
return fOk;
}
@@ -232,7 +246,7 @@ double CCoinsViewCache::GetPriority(const CTransaction &tx, int nHeight) const
return tx.ComputePriority(dResult);
}
-CCoinsModifier::CCoinsModifier(CCoinsViewCache& cache_, CCoinsMap::iterator it_) : cache(cache_), it(it_) {
+CCoinsModifier::CCoinsModifier(CCoinsViewCache& cache_, CCoinsMap::iterator it_, size_t usage) : cache(cache_), it(it_), cachedCoinUsage(usage) {
assert(!cache.hasModifier);
cache.hasModifier = true;
}
@@ -242,7 +256,11 @@ CCoinsModifier::~CCoinsModifier()
assert(cache.hasModifier);
cache.hasModifier = false;
it->second.coins.Cleanup();
+ cache.cachedCoinsUsage -= cachedCoinUsage; // Subtract the old usage
if ((it->second.flags & CCoinsCacheEntry::FRESH) && it->second.coins.IsPruned()) {
cache.cacheCoins.erase(it);
+ } else {
+ // If the coin still exists after the modification, add the new usage
+ cache.cachedCoinsUsage += memusage::DynamicUsage(it->second.coins);
}
}
diff --git a/src/coins.h b/src/coins.h
index fe2eaa08e5..a4671645df 100644
--- a/src/coins.h
+++ b/src/coins.h
@@ -7,6 +7,7 @@
#define BITCOIN_COINS_H
#include "compressor.h"
+#include "memusage.h"
#include "serialize.h"
#include "uint256.h"
@@ -252,6 +253,15 @@ public:
return false;
return true;
}
+
+ size_t DynamicMemoryUsage() const {
+ size_t ret = memusage::DynamicUsage(vout);
+ BOOST_FOREACH(const CTxOut &out, vout) {
+ const std::vector<unsigned char> *script = &out.scriptPubKey;
+ ret += memusage::DynamicUsage(*script);
+ }
+ return ret;
+ }
};
class CCoinsKeyHasher
@@ -356,7 +366,8 @@ class CCoinsModifier
private:
CCoinsViewCache& cache;
CCoinsMap::iterator it;
- CCoinsModifier(CCoinsViewCache& cache_, CCoinsMap::iterator it_);
+ size_t cachedCoinUsage; // Cached memory usage of the CCoins object before modification
+ CCoinsModifier(CCoinsViewCache& cache_, CCoinsMap::iterator it_, size_t usage);
public:
CCoins* operator->() { return &it->second.coins; }
@@ -372,6 +383,7 @@ protected:
/* Whether this cache has an active modifier. */
bool hasModifier;
+
/**
* Make mutable so that we can "fill the cache" even from Get-methods
* declared as "const".
@@ -379,6 +391,9 @@ protected:
mutable uint256 hashBlock;
mutable CCoinsMap cacheCoins;
+ /* Cached dynamic memory usage for the inner CCoins objects. */
+ mutable size_t cachedCoinsUsage;
+
public:
CCoinsViewCache(CCoinsView *baseIn);
~CCoinsViewCache();
@@ -414,6 +429,9 @@ public:
//! Calculate the size of the cache (in number of transactions)
unsigned int GetCacheSize() const;
+ //! Calculate the size of the cache (in bytes)
+ size_t DynamicMemoryUsage() const;
+
/**
* Amount of bitcoins coming in to a transaction
* Note that lightweight clients may not know anything besides the hash of previous transactions,
diff --git a/src/hash.cpp b/src/hash.cpp
index 20d5d21777..9711293e38 100644
--- a/src/hash.cpp
+++ b/src/hash.cpp
@@ -5,6 +5,7 @@
#include "hash.h"
#include "crypto/common.h"
#include "crypto/hmac_sha512.h"
+#include "pubkey.h"
inline uint32_t ROTL32(uint32_t x, int8_t r)
@@ -71,15 +72,12 @@ unsigned int MurmurHash3(unsigned int nHashSeed, const std::vector<unsigned char
return h1;
}
-void BIP32Hash(const unsigned char chainCode[32], unsigned int nChild, unsigned char header, const unsigned char data[32], unsigned char output[64])
+void BIP32Hash(const ChainCode &chainCode, unsigned int nChild, unsigned char header, const unsigned char data[32], unsigned char output[64])
{
unsigned char num[4];
num[0] = (nChild >> 24) & 0xFF;
num[1] = (nChild >> 16) & 0xFF;
num[2] = (nChild >> 8) & 0xFF;
num[3] = (nChild >> 0) & 0xFF;
- CHMAC_SHA512(chainCode, 32).Write(&header, 1)
- .Write(data, 32)
- .Write(num, 4)
- .Finalize(output);
+ CHMAC_SHA512(chainCode.begin(), chainCode.size()).Write(&header, 1).Write(data, 32).Write(num, 4).Finalize(output);
}
diff --git a/src/hash.h b/src/hash.h
index e56b784a61..0771555623 100644
--- a/src/hash.h
+++ b/src/hash.h
@@ -14,6 +14,8 @@
#include <vector>
+typedef uint256 ChainCode;
+
/** A hasher class for Bitcoin's 256-bit hash (double SHA-256). */
class CHash256 {
private:
@@ -159,6 +161,6 @@ uint256 SerializeHash(const T& obj, int nType=SER_GETHASH, int nVersion=PROTOCOL
unsigned int MurmurHash3(unsigned int nHashSeed, const std::vector<unsigned char>& vDataToHash);
-void BIP32Hash(const unsigned char chainCode[32], unsigned int nChild, unsigned char header, const unsigned char data[32], unsigned char output[64]);
+void BIP32Hash(const ChainCode &chainCode, unsigned int nChild, unsigned char header, const unsigned char data[32], unsigned char output[64]);
#endif // BITCOIN_HASH_H
diff --git a/src/init.cpp b/src/init.cpp
index b648a237bf..490ed6f54c 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -19,6 +19,7 @@
#include "net.h"
#include "rpcserver.h"
#include "script/standard.h"
+#include "scheduler.h"
#include "txdb.h"
#include "ui_interface.h"
#include "util.h"
@@ -52,7 +53,7 @@ bool fFeeEstimatesInitialized = false;
#ifdef WIN32
// Win32 LevelDB doesn't use filedescriptors, and the ones used for
-// accessing block files, don't count towards to fd_set size limit
+// accessing block files don't count towards the fd_set size limit
// anyway.
#define MIN_CORE_FILEDESCRIPTORS 0
#else
@@ -68,7 +69,7 @@ enum BindFlags {
};
static const char* FEE_ESTIMATES_FILENAME="fee_estimates.dat";
-CClientUIInterface uiInterface;
+CClientUIInterface uiInterface; // Declared but not defined in ui_interface.h
//////////////////////////////////////////////////////////////////////////////
//
@@ -194,6 +195,7 @@ void Shutdown()
delete pwalletMain;
pwalletMain = NULL;
#endif
+ ECC_Stop();
LogPrintf("%s: done\n", __func__);
}
@@ -275,12 +277,10 @@ std::string HelpMessage(HelpMessageMode mode)
#ifndef WIN32
strUsage += HelpMessageOpt("-pid=<file>", strprintf(_("Specify pid file (default: %s)"), "bitcoind.pid"));
#endif
- strUsage += HelpMessageOpt("-prune=<n>", _("Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex.") + " " +
- _("Warning: Reverting this setting requires re-downloading the entire blockchain.") + " " +
- _("(default: 0 = disable pruning blocks,") + " " +
- strprintf(_(">%u = target size in MiB to use for block files)"), MIN_DISK_SPACE_FOR_BLOCK_FILES / 1024 / 1024));
-strUsage += HelpMessageOpt("-reindex", _("Rebuild block chain index from current blk000??.dat files") + " " + _("on startup"));
-
+ strUsage += HelpMessageOpt("-prune=<n>", strprintf(_("Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex. "
+ "Warning: Reverting this setting requires re-downloading the entire blockchain. "
+ "(default: 0 = disable pruning blocks, >%u = target size in MiB to use for block files)"), MIN_DISK_SPACE_FOR_BLOCK_FILES / 1024 / 1024));
+ strUsage += HelpMessageOpt("-reindex", _("Rebuild block chain index from current blk000??.dat files on startup"));
#if !defined(WIN32)
strUsage += HelpMessageOpt("-sysperms", _("Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)"));
#endif
@@ -333,8 +333,8 @@ strUsage += HelpMessageOpt("-reindex", _("Rebuild block chain index from current
strUsage += HelpMessageOpt("-salvagewallet", _("Attempt to recover private keys from a corrupt wallet.dat") + " " + _("on startup"));
strUsage += HelpMessageOpt("-sendfreetransactions", strprintf(_("Send transactions as zero-fee transactions if possible (default: %u)"), 0));
strUsage += HelpMessageOpt("-spendzeroconfchange", strprintf(_("Spend unconfirmed change when sending transactions (default: %u)"), 1));
- strUsage += HelpMessageOpt("-txconfirmtarget=<n>", strprintf(_("If paytxfee is not set, include enough fee so transactions begin confirmation on average within n blocks (default: %u)"), 1));
- strUsage += HelpMessageOpt("-maxtxfee=<amt>", strprintf(_("Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)"),
+ strUsage += HelpMessageOpt("-txconfirmtarget=<n>", strprintf(_("If paytxfee is not set, include enough fee so transactions begin confirmation on average within n blocks (default: %u)"), DEFAULT_TX_CONFIRM_TARGET));
+ strUsage += HelpMessageOpt("-maxtxfee=<amt>", strprintf(_("Maximum total fees to use in a single wallet transaction; setting this too low may abort large transactions (default: %s)"),
FormatMoney(maxTxFee)));
strUsage += HelpMessageOpt("-upgradewallet", _("Upgrade wallet to latest format") + " " + _("on startup"));
strUsage += HelpMessageOpt("-wallet=<file>", _("Specify wallet file (within data directory)") + " " + strprintf(_("(default: %s)"), "wallet.dat"));
@@ -565,7 +565,7 @@ bool InitSanityCheck(void)
/** Initialize bitcoin.
* @pre Parameters should be parsed and config file should be read.
*/
-bool AppInit2(boost::thread_group& threadGroup)
+bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
{
// ********************************************************* Step 1: setup
#ifdef _MSC_VER
@@ -741,7 +741,7 @@ bool AppInit2(boost::thread_group& threadGroup)
// Checkmempool and checkblockindex default to true in regtest mode
mempool.setSanityCheck(GetBoolArg("-checkmempool", chainparams.DefaultConsistencyChecks()));
fCheckBlockIndex = GetBoolArg("-checkblockindex", chainparams.DefaultConsistencyChecks());
- Checkpoints::fEnabled = GetBoolArg("-checkpoints", true);
+ fCheckpointsEnabled = GetBoolArg("-checkpoints", true);
// -par=0 means autodetect, but nScriptCheckThreads==0 means no concurrency
nScriptCheckThreads = GetArg("-par", DEFAULT_SCRIPTCHECK_THREADS);
@@ -834,18 +834,21 @@ bool AppInit2(boost::thread_group& threadGroup)
mapArgs["-maxtxfee"], ::minRelayTxFee.ToString()));
}
}
- nTxConfirmTarget = GetArg("-txconfirmtarget", 1);
- bSpendZeroConfChange = GetArg("-spendzeroconfchange", true);
- fSendFreeTransactions = GetArg("-sendfreetransactions", false);
+ nTxConfirmTarget = GetArg("-txconfirmtarget", DEFAULT_TX_CONFIRM_TARGET);
+ bSpendZeroConfChange = GetBoolArg("-spendzeroconfchange", true);
+ fSendFreeTransactions = GetBoolArg("-sendfreetransactions", false);
std::string strWalletFile = GetArg("-wallet", "wallet.dat");
#endif // ENABLE_WALLET
- fIsBareMultisigStd = GetArg("-permitbaremultisig", true) != 0;
+ fIsBareMultisigStd = GetBoolArg("-permitbaremultisig", true);
nMaxDatacarrierBytes = GetArg("-datacarriersize", nMaxDatacarrierBytes);
// ********************************************************* Step 4: application initialization: dir lock, daemonize, pidfile, debug log
+ // Initialize elliptic curve code
+ ECC_Start();
+
// Sanity check
if (!InitSanityCheck())
return InitError(_("Initialization sanity check failed. Bitcoin Core is shutting down."));
@@ -888,6 +891,10 @@ bool AppInit2(boost::thread_group& threadGroup)
threadGroup.create_thread(&ThreadScriptCheck);
}
+ // Start the lightweight task scheduler thread
+ CScheduler::Function serviceLoop = boost::bind(&CScheduler::serviceQueue, &scheduler);
+ threadGroup.create_thread(boost::bind(&TraceThread<CScheduler::Function>, "scheduler", serviceLoop));
+
/* Start the RPC server already. It will be started in "warmup" mode
* and not really process calls already (but it will signify connections
* that the server is there and will be ready later). Warmup mode will
@@ -953,7 +960,7 @@ bool AppInit2(boost::thread_group& threadGroup)
proxyType addrProxy;
bool fProxy = false;
if (mapArgs.count("-proxy")) {
- addrProxy = proxyType(CService(mapArgs["-proxy"], 9050), GetArg("-proxyrandomize", true));
+ addrProxy = proxyType(CService(mapArgs["-proxy"], 9050), GetBoolArg("-proxyrandomize", true));
if (!addrProxy.IsValid())
return InitError(strprintf(_("Invalid -proxy address: '%s'"), mapArgs["-proxy"]));
@@ -970,7 +977,7 @@ bool AppInit2(boost::thread_group& threadGroup)
if (!mapArgs.count("-onion"))
addrOnion = addrProxy;
else
- addrOnion = proxyType(CService(mapArgs["-onion"], 9050), GetArg("-proxyrandomize", true));
+ addrOnion = proxyType(CService(mapArgs["-onion"], 9050), GetBoolArg("-proxyrandomize", true));
if (!addrOnion.IsValid())
return InitError(strprintf(_("Invalid -onion address: '%s'"), mapArgs["-onion"]));
SetProxy(NET_TOR, addrOnion);
@@ -1054,18 +1061,20 @@ bool AppInit2(boost::thread_group& threadGroup)
}
// cache size calculations
- size_t nTotalCache = (GetArg("-dbcache", nDefaultDbCache) << 20);
- if (nTotalCache < (nMinDbCache << 20))
- nTotalCache = (nMinDbCache << 20); // total cache cannot be less than nMinDbCache
- else if (nTotalCache > (nMaxDbCache << 20))
- nTotalCache = (nMaxDbCache << 20); // total cache cannot be greater than nMaxDbCache
- size_t nBlockTreeDBCache = nTotalCache / 8;
+ int64_t nTotalCache = (GetArg("-dbcache", nDefaultDbCache) << 20);
+ nTotalCache = std::max(nTotalCache, nMinDbCache << 20); // total cache cannot be less than nMinDbCache
+ nTotalCache = std::min(nTotalCache, nMaxDbCache << 20); // total cache cannot be greated than nMaxDbcache
+ int64_t nBlockTreeDBCache = nTotalCache / 8;
if (nBlockTreeDBCache > (1 << 21) && !GetBoolArg("-txindex", false))
nBlockTreeDBCache = (1 << 21); // block tree db cache shouldn't be larger than 2 MiB
nTotalCache -= nBlockTreeDBCache;
- size_t nCoinDBCache = nTotalCache / 2; // use half of the remaining cache for coindb cache
+ int64_t nCoinDBCache = std::min(nTotalCache / 2, (nTotalCache / 4) + (1 << 23)); // use 25%-50% of the remainder for disk cache
nTotalCache -= nCoinDBCache;
- nCoinCacheSize = nTotalCache / 300; // coins in memory require around 300 bytes
+ nCoinCacheUsage = nTotalCache; // the rest goes to in-memory cache
+ LogPrintf("Cache configuration:\n");
+ LogPrintf("* Using %.1fMiB for block index database\n", nBlockTreeDBCache * (1.0 / 1024 / 1024));
+ LogPrintf("* Using %.1fMiB for chain state database\n", nCoinDBCache * (1.0 / 1024 / 1024));
+ LogPrintf("* Using %.1fMiB for in-memory UTXO set\n", nCoinCacheUsage * (1.0 / 1024 / 1024));
bool fLoaded = false;
while (!fLoaded) {
@@ -1326,13 +1335,14 @@ bool AppInit2(boost::thread_group& threadGroup)
pwalletMain->SetBroadcastTransactions(GetBoolArg("-walletbroadcast", true));
} // (!fDisableWallet)
#else // ENABLE_WALLET
- LogPrintf("No wallet compiled in!\n");
+ LogPrintf("No wallet support compiled in!\n");
#endif // !ENABLE_WALLET
// ********************************************************* Step 9: import blocks
if (mapArgs.count("-blocknotify"))
uiInterface.NotifyBlockTip.connect(BlockNotifyCallback);
+ uiInterface.InitMessage(_("Activating best chain..."));
// scan for better chains in the block chain database, that are not yet connected in the active best chain
CValidationState state;
if (!ActivateBestChain(state))
@@ -1370,7 +1380,7 @@ bool AppInit2(boost::thread_group& threadGroup)
LogPrintf("mapAddressBook.size() = %u\n", pwalletMain ? pwalletMain->mapAddressBook.size() : 0);
#endif
- StartNode(threadGroup);
+ StartNode(threadGroup, scheduler);
#ifdef ENABLE_WALLET
// Generate coins in the background
diff --git a/src/init.h b/src/init.h
index d451f65be9..dcb2b29360 100644
--- a/src/init.h
+++ b/src/init.h
@@ -8,6 +8,7 @@
#include <string>
+class CScheduler;
class CWallet;
namespace boost
@@ -20,7 +21,7 @@ extern CWallet* pwalletMain;
void StartShutdown();
bool ShutdownRequested();
void Shutdown();
-bool AppInit2(boost::thread_group& threadGroup);
+bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler);
/** The help message mode determines what help message to show */
enum HelpMessageMode {
diff --git a/src/key.cpp b/src/key.cpp
index e146e47d0d..b772dff333 100644
--- a/src/key.cpp
+++ b/src/key.cpp
@@ -14,21 +14,7 @@
#include <secp256k1.h>
#include "ecwrapper.h"
-//! anonymous namespace
-namespace {
-
-class CSecp256k1Init {
-public:
- CSecp256k1Init() {
- secp256k1_start(SECP256K1_START_SIGN);
- }
- ~CSecp256k1Init() {
- secp256k1_stop();
- }
-};
-static CSecp256k1Init instance_of_csecp256k1;
-
-} // anon namespace
+static secp256k1_context_t* secp256k1_context = NULL;
bool CKey::Check(const unsigned char *vch) {
return eccrypto::Check(vch);
@@ -44,7 +30,7 @@ void CKey::MakeNewKey(bool fCompressedIn) {
}
bool CKey::SetPrivKey(const CPrivKey &privkey, bool fCompressedIn) {
- if (!secp256k1_ec_privkey_import((unsigned char*)begin(), &privkey[0], privkey.size()))
+ if (!secp256k1_ec_privkey_import(secp256k1_context, (unsigned char*)begin(), &privkey[0], privkey.size()))
return false;
fCompressed = fCompressedIn;
fValid = true;
@@ -57,7 +43,7 @@ CPrivKey CKey::GetPrivKey() const {
int privkeylen, ret;
privkey.resize(279);
privkeylen = 279;
- ret = secp256k1_ec_privkey_export(begin(), (unsigned char*)&privkey[0], &privkeylen, fCompressed);
+ ret = secp256k1_ec_privkey_export(secp256k1_context, begin(), (unsigned char*)&privkey[0], &privkeylen, fCompressed);
assert(ret);
privkey.resize(privkeylen);
return privkey;
@@ -67,7 +53,7 @@ CPubKey CKey::GetPubKey() const {
assert(fValid);
CPubKey result;
int clen = 65;
- int ret = secp256k1_ec_pubkey_create((unsigned char*)result.begin(), &clen, begin(), fCompressed);
+ int ret = secp256k1_ec_pubkey_create(secp256k1_context, (unsigned char*)result.begin(), &clen, begin(), fCompressed);
assert((int)result.size() == clen);
assert(ret);
assert(result.IsValid());
@@ -81,7 +67,7 @@ bool CKey::Sign(const uint256 &hash, std::vector<unsigned char>& vchSig, uint32_
int nSigLen = 72;
unsigned char extra_entropy[32] = {0};
WriteLE32(extra_entropy, test_case);
- int ret = secp256k1_ecdsa_sign(hash.begin(), (unsigned char*)&vchSig[0], &nSigLen, begin(), secp256k1_nonce_function_rfc6979, test_case ? extra_entropy : NULL);
+ int ret = secp256k1_ecdsa_sign(secp256k1_context, hash.begin(), (unsigned char*)&vchSig[0], &nSigLen, begin(), secp256k1_nonce_function_rfc6979, test_case ? extra_entropy : NULL);
assert(ret);
vchSig.resize(nSigLen);
return true;
@@ -106,7 +92,7 @@ bool CKey::SignCompact(const uint256 &hash, std::vector<unsigned char>& vchSig)
return false;
vchSig.resize(65);
int rec = -1;
- int ret = secp256k1_ecdsa_sign_compact(hash.begin(), &vchSig[1], begin(), secp256k1_nonce_function_rfc6979, NULL, &rec);
+ int ret = secp256k1_ecdsa_sign_compact(secp256k1_context, hash.begin(), &vchSig[1], begin(), secp256k1_nonce_function_rfc6979, NULL, &rec);
assert(ret);
assert(rec != -1);
vchSig[0] = 27 + rec + (fCompressed ? 4 : 0);
@@ -114,7 +100,7 @@ bool CKey::SignCompact(const uint256 &hash, std::vector<unsigned char>& vchSig)
}
bool CKey::Load(CPrivKey &privkey, CPubKey &vchPubKey, bool fSkipCheck=false) {
- if (!secp256k1_ec_privkey_import((unsigned char*)begin(), &privkey[0], privkey.size()))
+ if (!secp256k1_ec_privkey_import(secp256k1_context, (unsigned char*)begin(), &privkey[0], privkey.size()))
return false;
fCompressed = vchPubKey.IsCompressed();
fValid = true;
@@ -125,7 +111,7 @@ bool CKey::Load(CPrivKey &privkey, CPubKey &vchPubKey, bool fSkipCheck=false) {
return VerifyPubKey(vchPubKey);
}
-bool CKey::Derive(CKey& keyChild, unsigned char ccChild[32], unsigned int nChild, const unsigned char cc[32]) const {
+bool CKey::Derive(CKey& keyChild, ChainCode &ccChild, unsigned int nChild, const ChainCode& cc) const {
assert(IsValid());
assert(IsCompressed());
unsigned char out[64];
@@ -138,9 +124,9 @@ bool CKey::Derive(CKey& keyChild, unsigned char ccChild[32], unsigned int nChild
assert(begin() + 32 == end());
BIP32Hash(cc, nChild, 0, begin(), out);
}
- memcpy(ccChild, out+32, 32);
+ memcpy(ccChild.begin(), out+32, 32);
memcpy((unsigned char*)keyChild.begin(), begin(), 32);
- bool ret = secp256k1_ec_privkey_tweak_add((unsigned char*)keyChild.begin(), out);
+ bool ret = secp256k1_ec_privkey_tweak_add(secp256k1_context, (unsigned char*)keyChild.begin(), out);
UnlockObject(out);
keyChild.fCompressed = true;
keyChild.fValid = ret;
@@ -152,7 +138,7 @@ bool CExtKey::Derive(CExtKey &out, unsigned int nChild) const {
CKeyID id = key.GetPubKey().GetID();
memcpy(&out.vchFingerprint[0], &id, 4);
out.nChild = nChild;
- return key.Derive(out.key, out.vchChainCode, nChild, vchChainCode);
+ return key.Derive(out.key, out.chaincode, nChild, chaincode);
}
void CExtKey::SetMaster(const unsigned char *seed, unsigned int nSeedLen) {
@@ -161,7 +147,7 @@ void CExtKey::SetMaster(const unsigned char *seed, unsigned int nSeedLen) {
LockObject(out);
CHMAC_SHA512(hashkey, sizeof(hashkey)).Write(seed, nSeedLen).Finalize(out);
key.Set(&out[0], &out[32], true);
- memcpy(vchChainCode, &out[32], 32);
+ memcpy(chaincode.begin(), &out[32], 32);
UnlockObject(out);
nDepth = 0;
nChild = 0;
@@ -174,7 +160,7 @@ CExtPubKey CExtKey::Neuter() const {
memcpy(&ret.vchFingerprint[0], &vchFingerprint[0], 4);
ret.nChild = nChild;
ret.pubkey = key.GetPubKey();
- memcpy(&ret.vchChainCode[0], &vchChainCode[0], 32);
+ ret.chaincode = chaincode;
return ret;
}
@@ -183,7 +169,7 @@ void CExtKey::Encode(unsigned char code[74]) const {
memcpy(code+1, vchFingerprint, 4);
code[5] = (nChild >> 24) & 0xFF; code[6] = (nChild >> 16) & 0xFF;
code[7] = (nChild >> 8) & 0xFF; code[8] = (nChild >> 0) & 0xFF;
- memcpy(code+9, vchChainCode, 32);
+ memcpy(code+9, chaincode.begin(), 32);
code[41] = 0;
assert(key.size() == 32);
memcpy(code+42, key.begin(), 32);
@@ -193,7 +179,7 @@ void CExtKey::Decode(const unsigned char code[74]) {
nDepth = code[0];
memcpy(vchFingerprint, code+1, 4);
nChild = (code[5] << 24) | (code[6] << 16) | (code[7] << 8) | code[8];
- memcpy(vchChainCode, code+9, 32);
+ memcpy(chaincode.begin(), code+9, 32);
key.Set(code+42, code+74, true);
}
@@ -206,3 +192,32 @@ bool ECC_InitSanityCheck() {
CPubKey pubkey = key.GetPubKey();
return key.VerifyPubKey(pubkey);
}
+
+
+void ECC_Start() {
+ assert(secp256k1_context == NULL);
+
+ secp256k1_context_t *ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN);
+ assert(ctx != NULL);
+
+ {
+ // Pass in a random blinding seed to the secp256k1 context.
+ unsigned char seed[32];
+ LockObject(seed);
+ GetRandBytes(seed, 32);
+ bool ret = secp256k1_context_randomize(ctx, seed);
+ assert(ret);
+ UnlockObject(seed);
+ }
+
+ secp256k1_context = ctx;
+}
+
+void ECC_Stop() {
+ secp256k1_context_t *ctx = secp256k1_context;
+ secp256k1_context = NULL;
+
+ if (ctx) {
+ secp256k1_context_destroy(ctx);
+ }
+}
diff --git a/src/key.h b/src/key.h
index 104a8f5c72..021eac2a8d 100644
--- a/src/key.h
+++ b/src/key.h
@@ -6,6 +6,7 @@
#ifndef BITCOIN_KEY_H
#define BITCOIN_KEY_H
+#include "pubkey.h"
#include "serialize.h"
#include "support/allocators/secure.h"
#include "uint256.h"
@@ -13,9 +14,6 @@
#include <stdexcept>
#include <vector>
-class CPubKey;
-
-struct CExtPubKey;
/**
* secp256k1:
@@ -138,7 +136,7 @@ public:
bool SignCompact(const uint256& hash, std::vector<unsigned char>& vchSig) const;
//! Derive BIP32 child key.
- bool Derive(CKey& keyChild, unsigned char ccChild[32], unsigned int nChild, const unsigned char cc[32]) const;
+ bool Derive(CKey& keyChild, ChainCode &ccChild, unsigned int nChild, const ChainCode& cc) const;
/**
* Verify thoroughly whether a private key and a public key match.
@@ -157,13 +155,13 @@ struct CExtKey {
unsigned char nDepth;
unsigned char vchFingerprint[4];
unsigned int nChild;
- unsigned char vchChainCode[32];
+ ChainCode chaincode;
CKey key;
friend bool operator==(const CExtKey& a, const CExtKey& b)
{
return a.nDepth == b.nDepth && memcmp(&a.vchFingerprint[0], &b.vchFingerprint[0], 4) == 0 && a.nChild == b.nChild &&
- memcmp(&a.vchChainCode[0], &b.vchChainCode[0], 32) == 0 && a.key == b.key;
+ a.chaincode == b.chaincode && a.key == b.key;
}
void Encode(unsigned char code[74]) const;
@@ -173,7 +171,13 @@ struct CExtKey {
void SetMaster(const unsigned char* seed, unsigned int nSeedLen);
};
-/** Check that required EC support is available at runtime */
+/** Initialize the elliptic curve support. May not be called twice without calling ECC_Stop first. */
+void ECC_Start(void);
+
+/** Deinitialize the elliptic curve support. No-op if ECC_Start wasn't called first. */
+void ECC_Stop(void);
+
+/** Check that required EC support is available at runtime. */
bool ECC_InitSanityCheck(void);
#endif // BITCOIN_KEY_H
diff --git a/src/main.cpp b/src/main.cpp
index 2c12e08492..d3956fafda 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -56,7 +56,8 @@ bool fHavePruned = false;
bool fPruneMode = false;
bool fIsBareMultisigStd = true;
bool fCheckBlockIndex = false;
-unsigned int nCoinCacheSize = 5000;
+bool fCheckpointsEnabled = true;
+size_t nCoinCacheUsage = 5000 * 300;
uint64_t nPruneTarget = 0;
/** Fees smaller than this (in satoshi) are considered zero fee (for relaying and mining) */
@@ -74,10 +75,9 @@ void EraseOrphansFor(NodeId peer);
/**
* Returns true if there are nRequired or more blocks of minVersion or above
- * in the last Params().ToCheckBlockUpgradeMajority() blocks, starting at pstart
- * and going backwards.
+ * in the last Consensus::Params::nMajorityWindow blocks, starting at pstart and going backwards.
*/
-static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned int nRequired);
+static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned nRequired, const Consensus::Params& consensusParams);
static void CheckBlockIndex();
/** Constant stuff for coinbase transactions we create: */
@@ -142,8 +142,9 @@ namespace {
uint32_t nBlockSequenceId = 1;
/**
- * Sources of received blocks, to be able to send them reject messages or ban
- * them, if processing happens afterwards. Protected by cs_main.
+ * Sources of received blocks, saved to be able to send them reject
+ * messages or ban them when processing happens afterwards. Protected by
+ * cs_main.
*/
map<uint256, NodeId> mapBlockSource;
@@ -389,7 +390,7 @@ void FindNextBlocksToDownload(NodeId nodeid, unsigned int count, std::vector<CBl
}
// If the peer reorganized, our previous pindexLastCommonBlock may not be an ancestor
- // of their current tip anymore. Go back enough to fix that.
+ // of its current tip anymore. Go back enough to fix that.
state->pindexLastCommonBlock = LastCommonAncestor(state->pindexLastCommonBlock, state->pindexBestKnownBlock);
if (state->pindexLastCommonBlock == state->pindexBestKnownBlock)
return;
@@ -941,7 +942,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
// do all inputs exist?
// Note that this does not check for the presence of actual outputs (see the next check for that),
- // only helps filling in pfMissingInputs (to determine missing vs spent).
+ // and only helps with filling in pfMissingInputs (to determine missing vs spent).
BOOST_FOREACH(const CTxIn txin, tx.vin) {
if (!view.HaveCoins(txin.prevout.hash)) {
if (pfMissingInputs)
@@ -985,7 +986,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
CAmount nFees = nValueIn-nValueOut;
double dPriority = view.GetPriority(tx, chainActive.Height());
- CTxMemPoolEntry entry(tx, nFees, GetTime(), dPriority, chainActive.Height());
+ CTxMemPoolEntry entry(tx, nFees, GetTime(), dPriority, chainActive.Height(), mempool.HasNoInputsOf(tx));
unsigned int nSize = entry.GetTxSize();
// Don't accept it if it can't get into a block
@@ -1051,7 +1052,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
}
// Store transaction in memory
- pool.addUnchecked(hash, entry);
+ pool.addUnchecked(hash, entry, !IsInitialBlockDownload());
}
SyncWithWallets(tx, NULL);
@@ -1187,25 +1188,26 @@ bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex)
return true;
}
-CAmount GetBlockValue(int nHeight, const CAmount& nFees)
+CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
{
- CAmount nSubsidy = 50 * COIN;
- int halvings = nHeight / Params().SubsidyHalvingInterval();
-
+ int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;
// Force block reward to zero when right shift is undefined.
if (halvings >= 64)
- return nFees;
+ return 0;
+ CAmount nSubsidy = 50 * COIN;
// Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years.
nSubsidy >>= halvings;
-
- return nSubsidy + nFees;
+ return nSubsidy;
}
bool IsInitialBlockDownload()
{
+ const CChainParams& chainParams = Params();
LOCK(cs_main);
- if (fImporting || fReindex || chainActive.Height() < Checkpoints::GetTotalBlocksEstimate())
+ if (fImporting || fReindex)
+ return true;
+ if (fCheckpointsEnabled && chainActive.Height() < Checkpoints::GetTotalBlocksEstimate(chainParams.Checkpoints()))
return true;
static bool lockIBDState = false;
if (lockIBDState)
@@ -1277,8 +1279,8 @@ void CheckForkWarningConditionsOnNewFork(CBlockIndex* pindexNewForkTip)
pfork = pfork->pprev;
}
- // We define a condition which we should warn the user about as a fork of at least 7 blocks
- // who's tip is within 72 blocks (+/- 12 hours if no one mines it) of ours
+ // We define a condition where we should warn the user about as a fork of at least 7 blocks
+ // with a tip within 72 blocks (+/- 12 hours if no one mines it) of ours
// We use 7 blocks rather arbitrarily as it represents just under 10% of sustained network
// hash rate operating on the fork.
// or a chain that is entirely longer than ours and invalid (note that this should be detected by both)
@@ -1709,7 +1711,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
return true;
}
- bool fScriptChecks = pindex->nHeight >= Checkpoints::GetTotalBlocksEstimate();
+ bool fScriptChecks = (!fCheckpointsEnabled || pindex->nHeight >= Checkpoints::GetTotalBlocksEstimate(chainparams.Checkpoints()));
// Do not allow blocks that contain transactions which 'overwrite' older transactions,
// unless those are already completely spent.
@@ -1719,9 +1721,9 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
// See BIP30 and http://r6.ca/blog/20120206T005236Z.html for more information.
// This logic is not necessary for memory pool transactions, as AcceptToMemoryPool
// already refuses previously-known transaction ids entirely.
- // This rule was originally applied all blocks whose timestamp was after March 15, 2012, 0:00 UTC.
+ // This rule was originally applied to all blocks with a timestamp after March 15, 2012, 0:00 UTC.
// Now that the whole chain is irreversibly beyond that time it is applied to all blocks except the
- // two in the chain that violate it. This prevents exploiting the issue against nodes in their
+ // two in the chain that violate it. This prevents exploiting the issue against nodes during their
// initial block download.
bool fEnforceBIP30 = (!pindex->phashBlock) || // Enforce on CreateNewBlock invocations which don't have a hash.
!((pindex->nHeight==91842 && pindex->GetBlockHash() == uint256S("0x00000000000a4d0a398161ffc163c503763b1f4360639393e0e4c8e300e0caec")) ||
@@ -1742,7 +1744,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
unsigned int flags = fStrictPayToScriptHash ? SCRIPT_VERIFY_P2SH : SCRIPT_VERIFY_NONE;
// Start enforcing the DERSIG (BIP66) rules, for block.nVersion=3 blocks, when 75% of the network has upgraded:
- if (block.nVersion >= 3 && IsSuperMajority(3, pindex->pprev, Params().EnforceBlockUpgradeMajority())) {
+ if (block.nVersion >= 3 && IsSuperMajority(3, pindex->pprev, chainparams.GetConsensus().nMajorityEnforceBlockUpgrade, chainparams.GetConsensus())) {
flags |= SCRIPT_VERIFY_DERSIG;
}
@@ -1805,10 +1807,11 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
int64_t nTime1 = GetTimeMicros(); nTimeConnect += nTime1 - nTimeStart;
LogPrint("bench", " - Connect %u transactions: %.2fms (%.3fms/tx, %.3fms/txin) [%.2fs]\n", (unsigned)block.vtx.size(), 0.001 * (nTime1 - nTimeStart), 0.001 * (nTime1 - nTimeStart) / block.vtx.size(), nInputs <= 1 ? 0 : 0.001 * (nTime1 - nTimeStart) / (nInputs-1), nTimeConnect * 0.000001);
- if (block.vtx[0].GetValueOut() > GetBlockValue(pindex->nHeight, nFees))
+ CAmount blockReward = nFees + GetBlockSubsidy(pindex->nHeight, chainparams.GetConsensus());
+ if (block.vtx[0].GetValueOut() > blockReward)
return state.DoS(100,
error("ConnectBlock(): coinbase pays too much (actual=%d vs limit=%d)",
- block.vtx[0].GetValueOut(), GetBlockValue(pindex->nHeight, nFees)),
+ block.vtx[0].GetValueOut(), blockReward),
REJECT_INVALID, "bad-cb-amount");
if (!control.Wait())
@@ -1875,11 +1878,14 @@ enum FlushStateMode {
bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode) {
LOCK2(cs_main, cs_LastBlockFile);
static int64_t nLastWrite = 0;
+ static int64_t nLastFlush = 0;
+ static int64_t nLastSetChain = 0;
std::set<int> setFilesToPrune;
bool fFlushForPrune = false;
try {
if (fPruneMode && fCheckForPruning) {
FindFilesToPrune(setFilesToPrune);
+ fCheckForPruning = false;
if (!setFilesToPrune.empty()) {
fFlushForPrune = true;
if (!fHavePruned) {
@@ -1888,16 +1894,32 @@ bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode) {
}
}
}
- if ((mode == FLUSH_STATE_ALWAYS) ||
- ((mode == FLUSH_STATE_PERIODIC || mode == FLUSH_STATE_IF_NEEDED) && pcoinsTip->GetCacheSize() > nCoinCacheSize) ||
- (mode == FLUSH_STATE_PERIODIC && GetTimeMicros() > nLastWrite + DATABASE_WRITE_INTERVAL * 1000000) ||
- fFlushForPrune) {
- // Typical CCoins structures on disk are around 100 bytes in size.
- // Pushing a new one to the database can cause it to be written
- // twice (once in the log, and once in the tables). This is already
- // an overestimation, as most will delete an existing entry or
- // overwrite one. Still, use a conservative safety factor of 2.
- if (!CheckDiskSpace(100 * 2 * 2 * pcoinsTip->GetCacheSize()))
+ int64_t nNow = GetTimeMicros();
+ // Avoid writing/flushing immediately after startup.
+ if (nLastWrite == 0) {
+ nLastWrite = nNow;
+ }
+ if (nLastFlush == 0) {
+ nLastFlush = nNow;
+ }
+ if (nLastSetChain == 0) {
+ nLastSetChain = nNow;
+ }
+ size_t cacheSize = pcoinsTip->DynamicMemoryUsage();
+ // The cache is large and close to the limit, but we have time now (not in the middle of a block processing).
+ bool fCacheLarge = mode == FLUSH_STATE_PERIODIC && cacheSize * (10.0/9) > nCoinCacheUsage;
+ // The cache is over the limit, we have to write now.
+ bool fCacheCritical = mode == FLUSH_STATE_IF_NEEDED && cacheSize > nCoinCacheUsage;
+ // It's been a while since we wrote the block index to disk. Do this frequently, so we don't need to redownload after a crash.
+ bool fPeriodicWrite = mode == FLUSH_STATE_PERIODIC && nNow > nLastWrite + (int64_t)DATABASE_WRITE_INTERVAL * 1000000;
+ // It's been very long since we flushed the cache. Do this infrequently, to optimize cache usage.
+ bool fPeriodicFlush = mode == FLUSH_STATE_PERIODIC && nNow > nLastFlush + (int64_t)DATABASE_FLUSH_INTERVAL * 1000000;
+ // Combine all conditions that result in a full cache flush.
+ bool fDoFullFlush = (mode == FLUSH_STATE_ALWAYS) || fCacheLarge || fCacheCritical || fPeriodicFlush || fFlushForPrune;
+ // Write blocks and block index to disk.
+ if (fDoFullFlush || fPeriodicWrite) {
+ // Depend on nMinDiskSpace to ensure we can write block index
+ if (!CheckDiskSpace(0))
return state.Error("out of disk space");
// First make sure all block and undo data is flushed to disk.
FlushBlockFile();
@@ -1919,21 +1941,29 @@ bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode) {
return state.Abort("Files to write to block index database");
}
}
+ // Finally remove any pruned files
+ if (fFlushForPrune)
+ UnlinkPrunedFiles(setFilesToPrune);
+ nLastWrite = nNow;
+ }
+ // Flush best chain related state. This can only be done if the blocks / block index write was also done.
+ if (fDoFullFlush) {
+ // Typical CCoins structures on disk are around 128 bytes in size.
+ // Pushing a new one to the database can cause it to be written
+ // twice (once in the log, and once in the tables). This is already
+ // an overestimation, as most will delete an existing entry or
+ // overwrite one. Still, use a conservative safety factor of 2.
+ if (!CheckDiskSpace(128 * 2 * 2 * pcoinsTip->GetCacheSize()))
+ return state.Error("out of disk space");
// Flush the chainstate (which may refer to block index entries).
if (!pcoinsTip->Flush())
return state.Abort("Failed to write to coin database");
-
- // Finally remove any pruned files
- if (fFlushForPrune) {
- UnlinkPrunedFiles(setFilesToPrune);
- fCheckForPruning = false;
- }
-
+ nLastFlush = nNow;
+ }
+ if ((mode == FLUSH_STATE_ALWAYS || mode == FLUSH_STATE_PERIODIC) && nNow > nLastSetChain + (int64_t)DATABASE_WRITE_INTERVAL * 1000000) {
// Update best block in wallet (so we can detect restored wallets).
- if (mode != FLUSH_STATE_IF_NEEDED) {
- GetMainSignals().SetBestChain(chainActive.GetLocator());
- }
- nLastWrite = GetTimeMicros();
+ GetMainSignals().SetBestChain(chainActive.GetLocator());
+ nLastSetChain = nNow;
}
} catch (const std::runtime_error& e) {
return state.Abort(std::string("System error while flushing: ") + e.what());
@@ -1954,16 +1984,17 @@ void PruneAndFlush() {
/** Update chainActive and related internal data structures. */
void static UpdateTip(CBlockIndex *pindexNew) {
+ const CChainParams& chainParams = Params();
chainActive.SetTip(pindexNew);
// New best block
nTimeBestReceived = GetTime();
mempool.AddTransactionsUpdated(1);
- LogPrintf("%s: new best=%s height=%d log2_work=%.8g tx=%lu date=%s progress=%f cache=%u\n", __func__,
+ LogPrintf("%s: new best=%s height=%d log2_work=%.8g tx=%lu date=%s progress=%f cache=%.1fMiB(%utx)\n", __func__,
chainActive.Tip()->GetBlockHash().ToString(), chainActive.Height(), log(chainActive.Tip()->nChainWork.getdouble())/log(2.0), (unsigned long)chainActive.Tip()->nChainTx,
DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.Tip()->GetBlockTime()),
- Checkpoints::GuessVerificationProgress(chainActive.Tip()), (unsigned int)pcoinsTip->GetCacheSize());
+ Checkpoints::GuessVerificationProgress(chainParams.Checkpoints(), chainActive.Tip()), pcoinsTip->DynamicMemoryUsage() * (1.0 / (1<<20)), pcoinsTip->GetCacheSize());
cvBlockChange.notify_all();
@@ -1984,7 +2015,7 @@ void static UpdateTip(CBlockIndex *pindexNew) {
if (nUpgraded > 100/2)
{
// strMiscWarning is read by GetWarnings(), called by Qt and the JSON-RPC code to warn the user:
- strMiscWarning = _("Warning: This version is obsolete, upgrade required!");
+ strMiscWarning = _("Warning: This version is obsolete; upgrade required!");
CAlert::Notify(strMiscWarning, true);
fWarned = true;
}
@@ -2081,7 +2112,7 @@ bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew, CBlock *
LogPrint("bench", " - Writing chainstate: %.2fms [%.2fs]\n", (nTime5 - nTime4) * 0.001, nTimeChainState * 0.000001);
// Remove conflicting transactions from the mempool.
list<CTransaction> txConflicted;
- mempool.removeForBlock(pblock->vtx, pindexNew->nHeight, txConflicted);
+ mempool.removeForBlock(pblock->vtx, pindexNew->nHeight, txConflicted, !IsInitialBlockDownload());
mempool.check(pcoinsTip);
// Update chainActive & related variables.
UpdateTip(pindexNew);
@@ -2247,6 +2278,7 @@ static bool ActivateBestChainStep(CValidationState &state, CBlockIndex *pindexMo
bool ActivateBestChain(CValidationState &state, CBlock *pblock) {
CBlockIndex *pindexNewTip = NULL;
CBlockIndex *pindexMostWork = NULL;
+ const CChainParams& chainParams = Params();
do {
boost::this_thread::interruption_point();
@@ -2271,7 +2303,9 @@ bool ActivateBestChain(CValidationState &state, CBlock *pblock) {
if (!fInitialDownload) {
uint256 hashNewTip = pindexNewTip->GetBlockHash();
// Relay inventory, but don't relay old inventory during initial block download.
- int nBlockEstimate = Checkpoints::GetTotalBlocksEstimate();
+ int nBlockEstimate = 0;
+ if (fCheckpointsEnabled)
+ nBlockEstimate = Checkpoints::GetTotalBlocksEstimate(chainParams.Checkpoints());
// Don't relay blocks if pruning -- could cause a peer to try to download, resulting
// in a stalled download if the block file is pruned before the request.
if (nLocalServices & NODE_NETWORK) {
@@ -2315,7 +2349,7 @@ bool InvalidateBlock(CValidationState& state, CBlockIndex *pindex) {
}
// The resulting new best tip may not be in setBlockIndexCandidates anymore, so
- // add them again.
+ // add it again.
BlockMap::iterator it = mapBlockIndex.begin();
while (it != mapBlockIndex.end()) {
if (it->second->IsValid(BLOCK_VALID_TRANSACTIONS) && it->second->nChainTx && !setBlockIndexCandidates.value_comp()(it->second, chainActive.Tip())) {
@@ -2601,7 +2635,8 @@ bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW, bo
bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& state, CBlockIndex * const pindexPrev)
{
- const Consensus::Params& consensusParams = Params().GetConsensus();
+ const CChainParams& chainParams = Params();
+ const Consensus::Params& consensusParams = chainParams.GetConsensus();
uint256 hash = block.GetHash();
if (hash == consensusParams.hashGenesisBlock)
return true;
@@ -2611,7 +2646,7 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta
int nHeight = pindexPrev->nHeight+1;
// Check proof of work
- if (block.nBits != GetNextWorkRequired(pindexPrev, &block, Params().GetConsensus()))
+ if (block.nBits != GetNextWorkRequired(pindexPrev, &block, consensusParams))
return state.DoS(100, error("%s: incorrect proof of work", __func__),
REJECT_INVALID, "bad-diffbits");
@@ -2620,29 +2655,28 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta
return state.Invalid(error("%s: block's timestamp is too early", __func__),
REJECT_INVALID, "time-too-old");
- // Check that the block chain matches the known block chain up to a checkpoint
- if (!Checkpoints::CheckBlock(nHeight, hash))
- return state.DoS(100, error("%s: rejected by checkpoint lock-in at %d", __func__, nHeight),
- REJECT_CHECKPOINT, "checkpoint mismatch");
+ if(fCheckpointsEnabled)
+ {
+ // Check that the block chain matches the known block chain up to a checkpoint
+ if (!Checkpoints::CheckBlock(chainParams.Checkpoints(), nHeight, hash))
+ return state.DoS(100, error("%s: rejected by checkpoint lock-in at %d", __func__, nHeight),
+ REJECT_CHECKPOINT, "checkpoint mismatch");
- // Don't accept any forks from the main chain prior to last checkpoint
- CBlockIndex* pcheckpoint = Checkpoints::GetLastCheckpoint();
- if (pcheckpoint && nHeight < pcheckpoint->nHeight)
- return state.DoS(100, error("%s: forked chain older than last checkpoint (height %d)", __func__, nHeight));
+ // Don't accept any forks from the main chain prior to last checkpoint
+ CBlockIndex* pcheckpoint = Checkpoints::GetLastCheckpoint(chainParams.Checkpoints());
+ if (pcheckpoint && nHeight < pcheckpoint->nHeight)
+ return state.DoS(100, error("%s: forked chain older than last checkpoint (height %d)", __func__, nHeight));
+ }
// Reject block.nVersion=1 blocks when 95% (75% on testnet) of the network has upgraded:
- if (block.nVersion < 2 && IsSuperMajority(2, pindexPrev, Params().RejectBlockOutdatedMajority()))
- {
+ if (block.nVersion < 2 && IsSuperMajority(2, pindexPrev, consensusParams.nMajorityRejectBlockOutdated, consensusParams))
return state.Invalid(error("%s: rejected nVersion=1 block", __func__),
REJECT_OBSOLETE, "bad-version");
- }
// Reject block.nVersion=2 blocks when 95% (75% on testnet) of the network has upgraded:
- if (block.nVersion < 3 && IsSuperMajority(3, pindexPrev, Params().RejectBlockOutdatedMajority()))
- {
+ if (block.nVersion < 3 && IsSuperMajority(3, pindexPrev, consensusParams.nMajorityRejectBlockOutdated, consensusParams))
return state.Invalid(error("%s : rejected nVersion=2 block", __func__),
REJECT_OBSOLETE, "bad-version");
- }
return true;
}
@@ -2650,6 +2684,7 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta
bool ContextualCheckBlock(const CBlock& block, CValidationState& state, CBlockIndex * const pindexPrev)
{
const int nHeight = pindexPrev == NULL ? 0 : pindexPrev->nHeight + 1;
+ const Consensus::Params& consensusParams = Params().GetConsensus();
// Check that all transactions are finalized
BOOST_FOREACH(const CTransaction& tx, block.vtx)
@@ -2659,7 +2694,7 @@ bool ContextualCheckBlock(const CBlock& block, CValidationState& state, CBlockIn
// Enforce block.nVersion=2 rule that the coinbase starts with serialized block height
// if 750 of the last 1,000 blocks are version 2 or greater (51/100 if testnet):
- if (block.nVersion >= 2 && IsSuperMajority(2, pindexPrev, Params().EnforceBlockUpgradeMajority()))
+ if (block.nVersion >= 2 && IsSuperMajority(2, pindexPrev, consensusParams.nMajorityEnforceBlockUpgrade, consensusParams))
{
CScript expect = CScript() << nHeight;
if (block.vtx[0].vin[0].scriptSig.size() < expect.size() ||
@@ -2766,11 +2801,10 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CBlockIndex** ppindex,
return true;
}
-static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned int nRequired)
+static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned nRequired, const Consensus::Params& consensusParams)
{
- unsigned int nToCheck = Params().ToCheckBlockUpgradeMajority();
unsigned int nFound = 0;
- for (unsigned int i = 0; i < nToCheck && nFound < nRequired && pstart != NULL; i++)
+ for (int i = 0; i < consensusParams.nMajorityWindow && nFound < nRequired && pstart != NULL; i++)
{
if (pstart->nVersion >= minVersion)
++nFound;
@@ -2919,7 +2953,7 @@ void FindFilesToPrune(std::set<int>& setFilesToPrune)
return;
}
- unsigned int nLastBlockWeMustKeep = chainActive.Tip()->nHeight - MIN_BLOCKS_TO_KEEP;
+ unsigned int nLastBlockWeCanPrune = chainActive.Tip()->nHeight - MIN_BLOCKS_TO_KEEP;
uint64_t nCurrentUsage = CalculateCurrentUsage();
// We don't check to prune until after we've allocated new space for files
// So we should leave a buffer under our target to account for another allocation
@@ -2939,7 +2973,7 @@ void FindFilesToPrune(std::set<int>& setFilesToPrune)
break;
// don't prune files that could have a block within MIN_BLOCKS_TO_KEEP of the main chain's tip
- if (vinfoBlockFile[fileNumber].nHeightLast > nLastBlockWeMustKeep)
+ if (vinfoBlockFile[fileNumber].nHeightLast > nLastBlockWeCanPrune)
break;
PruneOneBlockFile(fileNumber);
@@ -2950,10 +2984,10 @@ void FindFilesToPrune(std::set<int>& setFilesToPrune)
}
}
- LogPrint("prune", "Prune: target=%dMiB actual=%dMiB diff=%dMiB min_must_keep=%d removed %d blk/rev pairs\n",
+ LogPrint("prune", "Prune: target=%dMiB actual=%dMiB diff=%dMiB max_prune_height=%d removed %d blk/rev pairs\n",
nPruneTarget/1024/1024, nCurrentUsage/1024/1024,
((int64_t)nPruneTarget - (int64_t)nCurrentUsage)/1024/1024,
- nLastBlockWeMustKeep, count);
+ nLastBlockWeCanPrune, count);
}
bool CheckDiskSpace(uint64_t nAdditionalBytes)
@@ -3025,6 +3059,7 @@ CBlockIndex * InsertBlockIndex(uint256 hash)
bool static LoadBlockIndexDB()
{
+ const CChainParams& chainparams = Params();
if (!pblocktree->LoadBlockIndexGuts())
return false;
@@ -3127,7 +3162,7 @@ bool static LoadBlockIndexDB()
LogPrintf("%s: hashBestChain=%s height=%d date=%s progress=%f\n", __func__,
chainActive.Tip()->GetBlockHash().ToString(), chainActive.Height(),
DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.Tip()->GetBlockTime()),
- Checkpoints::GuessVerificationProgress(chainActive.Tip()));
+ Checkpoints::GuessVerificationProgress(chainparams.Checkpoints(), chainActive.Tip()));
return true;
}
@@ -3183,7 +3218,7 @@ bool CVerifyDB::VerifyDB(CCoinsView *coinsview, int nCheckLevel, int nCheckDepth
}
}
// check level 3: check for inconsistencies during memory-only disconnect of tip blocks
- if (nCheckLevel >= 3 && pindex == pindexState && (coins.GetCacheSize() + pcoinsTip->GetCacheSize()) <= nCoinCacheSize) {
+ if (nCheckLevel >= 3 && pindex == pindexState && (coins.DynamicMemoryUsage() + pcoinsTip->DynamicMemoryUsage()) <= nCoinCacheUsage) {
bool fClean = true;
if (!DisconnectBlock(block, state, pindex, coins, &fClean))
return error("VerifyDB(): *** irrecoverable inconsistency in block data at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
@@ -3675,7 +3710,6 @@ bool static AlreadyHave(const CInv& inv)
return true;
}
-
void static ProcessGetData(CNode* pfrom)
{
std::deque<CInv>::iterator it = pfrom->vRecvGetData.begin();
@@ -3703,11 +3737,13 @@ void static ProcessGetData(CNode* pfrom)
if (chainActive.Contains(mi->second)) {
send = true;
} else {
+ static const int nOneMonth = 30 * 24 * 60 * 60;
// To prevent fingerprinting attacks, only send blocks outside of the active
- // chain if they are valid, and no more than a month older than the best header
- // chain we know about.
+ // chain if they are valid, and no more than a month older (both in time, and in
+ // best equivalent proof of work) than the best header chain we know about.
send = mi->second->IsValid(BLOCK_VALID_SCRIPTS) && (pindexBestHeader != NULL) &&
- (mi->second->GetBlockTime() > pindexBestHeader->GetBlockTime() - 30 * 24 * 60 * 60);
+ (pindexBestHeader->GetBlockTime() - mi->second->GetBlockTime() < nOneMonth) &&
+ (GetBlockProofEquivalentTime(*pindexBestHeader, *mi->second, *pindexBestHeader, Params().GetConsensus()) < nOneMonth);
if (!send) {
LogPrintf("%s: ignoring request from peer=%i for old block that isn't in the main chain\n", __func__, pfrom->GetId());
}
@@ -3732,7 +3768,7 @@ void static ProcessGetData(CNode* pfrom)
pfrom->PushMessage("merkleblock", merkleBlock);
// CMerkleBlock just contains hashes, so also push any transactions in the block the client did not see
// This avoids hurting performance by pointlessly requiring a round-trip
- // Note that there is currently no way for a node to request any single transactions we didnt send here -
+ // Note that there is currently no way for a node to request any single transactions we didn't send here -
// they must either disconnect and retry or request the full block.
// Thus, the protocol spec specified allows for us to provide duplicate txn here,
// however we MUST always provide at least what the remote peer needs
@@ -3745,7 +3781,7 @@ void static ProcessGetData(CNode* pfrom)
// no response
}
- // Trigger them to send a getblocks request for the next batch of inventory
+ // Trigger the peer node to send a getblocks request for the next batch of inventory
if (inv.hash == pfrom->hashContinue)
{
// Bypass PushInventory, this must send even if redundant,
@@ -3994,7 +4030,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
{
LOCK(cs_vNodes);
// Use deterministic randomness to send to the same nodes for 24 hours
- // at a time so the setAddrKnowns of the chosen nodes prevent repeats
+ // at a time so the addrKnowns of the chosen nodes prevent repeats
static uint256 hashSalt;
if (hashSalt.IsNull())
hashSalt = GetRandHash();
@@ -4059,7 +4095,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
if (inv.type == MSG_BLOCK) {
UpdateBlockAvailability(pfrom->GetId(), inv.hash);
if (!fAlreadyHave && !fImporting && !fReindex && !mapBlocksInFlight.count(inv.hash)) {
- // First request the headers preceeding the announced block. In the normal fully-synced
+ // First request the headers preceding the announced block. In the normal fully-synced
// case where a new block is announced that succeeds the current tip (no reorganization),
// there are no such headers.
// Secondly, and only when we are close to being synced, we request the announced block directly,
@@ -4141,8 +4177,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
pfrom->PushInventory(CInv(MSG_BLOCK, pindex->GetBlockHash()));
if (--nLimit <= 0)
{
- // When this block is requested, we'll send an inv that'll make them
- // getblocks the next batch of inventory.
+ // When this block is requested, we'll send an inv that'll
+ // trigger the peer to getblocks the next batch of inventory.
LogPrint("net", " getblocks stopping at limit %d %s\n", pindex->nHeight, pindex->GetBlockHash().ToString());
pfrom->hashContinue = pindex->GetBlockHash();
break;
@@ -4379,9 +4415,9 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
// This asymmetric behavior for inbound and outbound connections was introduced
// to prevent a fingerprinting attack: an attacker can send specific fake addresses
- // to users' AddrMan and later request them by sending getaddr messages.
- // Making users (which are behind NAT and can only make outgoing connections) ignore
- // getaddr message mitigates the attack.
+ // to users' AddrMan and later request them by sending getaddr messages.
+ // Making nodes which are behind NAT and can only make outgoing connections ignore
+ // the getaddr message mitigates the attack.
else if ((strCommand == "getaddr") && (pfrom->fInbound))
{
pfrom->vAddrToSend.clear();
@@ -4466,7 +4502,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
// Nonce mismatches are normal when pings are overlapping
sProblem = "Nonce mismatch";
if (nonce == 0) {
- // This is most likely a bug in another implementation somewhere, cancel this ping
+ // This is most likely a bug in another implementation somewhere; cancel this ping
bPingFinished = true;
sProblem = "Nonce zero";
}
@@ -4475,7 +4511,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
sProblem = "Unsolicited pong without ping";
}
} else {
- // This is most likely a bug in another implementation somewhere, cancel this ping
+ // This is most likely a bug in another implementation somewhere; cancel this ping
bPingFinished = true;
sProblem = "Short payload";
}
@@ -4734,7 +4770,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle)
{
const Consensus::Params& consensusParams = Params().GetConsensus();
{
- // Don't send anything until we get their version message
+ // Don't send anything until we get its version message
if (pto->nVersion == 0)
return true;
@@ -4778,9 +4814,9 @@ bool SendMessages(CNode* pto, bool fSendTrickle)
LOCK(cs_vNodes);
BOOST_FOREACH(CNode* pnode, vNodes)
{
- // Periodically clear setAddrKnown to allow refresh broadcasts
+ // Periodically clear addrKnown to allow refresh broadcasts
if (nLastRebroadcast)
- pnode->setAddrKnown.clear();
+ pnode->addrKnown.clear();
// Rebroadcast our address
AdvertizeLocal(pnode);
@@ -4798,9 +4834,9 @@ bool SendMessages(CNode* pto, bool fSendTrickle)
vAddr.reserve(pto->vAddrToSend.size());
BOOST_FOREACH(const CAddress& addr, pto->vAddrToSend)
{
- // returns true if wasn't already contained in the set
- if (pto->setAddrKnown.insert(addr).second)
+ if (!pto->addrKnown.contains(addr.GetKey()))
{
+ pto->addrKnown.insert(addr.GetKey());
vAddr.push_back(addr);
// receiver rejects addr messages larger than 1000
if (vAddr.size() >= 1000)
@@ -4918,7 +4954,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle)
// In case there is a block that has been in flight from this peer for (2 + 0.5 * N) times the block interval
// (with N the number of validated blocks that were in flight at the time it was requested), disconnect due to
// timeout. We compensate for in-flight blocks to prevent killing off peers due to our own downstream link
- // being saturated. We only count validated in-flight blocks so peers can't advertize nonexisting block hashes
+ // being saturated. We only count validated in-flight blocks so peers can't advertise non-existing block hashes
// to unreasonably increase our timeout.
if (!pto->fDisconnect && state.vBlocksInFlight.size() > 0 && state.vBlocksInFlight.front().nTime < nNow - 500000 * consensusParams.nPowTargetSpacing * (4 + state.vBlocksInFlight.front().nValidatedQueuedBefore)) {
LogPrintf("Timeout downloading block %s from peer=%d, disconnecting\n", state.vBlocksInFlight.front().hash.ToString(), pto->id);
diff --git a/src/main.h b/src/main.h
index b0aec6662d..07a709b75c 100644
--- a/src/main.h
+++ b/src/main.h
@@ -75,15 +75,17 @@ static const int MAX_BLOCKS_IN_TRANSIT_PER_PEER = 16;
/** Timeout in seconds during which a peer must stall block download progress before being disconnected. */
static const unsigned int BLOCK_STALLING_TIMEOUT = 2;
/** Number of headers sent in one getheaders result. We rely on the assumption that if a peer sends
- * less than this number, we reached their tip. Changing this value is a protocol upgrade. */
+ * less than this number, we reached its tip. Changing this value is a protocol upgrade. */
static const unsigned int MAX_HEADERS_RESULTS = 2000;
/** Size of the "block download window": how far ahead of our current height do we fetch?
* Larger windows tolerate larger download speed differences between peer, but increase the potential
* degree of disordering of blocks on disk (which make reindexing and in the future perhaps pruning
* harder). We'll probably want to make this a per-peer adaptive value at some point. */
static const unsigned int BLOCK_DOWNLOAD_WINDOW = 1024;
-/** Time to wait (in seconds) between writing blockchain state to disk. */
-static const unsigned int DATABASE_WRITE_INTERVAL = 3600;
+/** Time to wait (in seconds) between writing blocks/block index to disk. */
+static const unsigned int DATABASE_WRITE_INTERVAL = 60 * 60;
+/** Time to wait (in seconds) between flushing chainstate to disk. */
+static const unsigned int DATABASE_FLUSH_INTERVAL = 24 * 60 * 60;
/** Maximum length of reject messages. */
static const unsigned int MAX_REJECT_MESSAGE_LENGTH = 111;
@@ -118,7 +120,8 @@ extern int nScriptCheckThreads;
extern bool fTxIndex;
extern bool fIsBareMultisigStd;
extern bool fCheckBlockIndex;
-extern unsigned int nCoinCacheSize;
+extern bool fCheckpointsEnabled;
+extern size_t nCoinCacheUsage;
extern CFeeRate minRelayTxFee;
/** Best header we've seen so far (used for getheaders queries' starting points). */
@@ -199,7 +202,7 @@ std::string GetWarnings(std::string strFor);
bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock, bool fAllowSlow = false);
/** Find the best known block, and make it the tip of the block chain */
bool ActivateBestChain(CValidationState &state, CBlock *pblock = NULL);
-CAmount GetBlockValue(int nHeight, const CAmount& nFees);
+CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams);
/**
* Prune block and undo files (blk???.dat and undo???.dat) so that the disk space used is less than a user-defined target.
diff --git a/src/memusage.h b/src/memusage.h
new file mode 100644
index 0000000000..9f7de9e2e1
--- /dev/null
+++ b/src/memusage.h
@@ -0,0 +1,111 @@
+// Copyright (c) 2015 The Bitcoin developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#ifndef BITCOIN_MEMUSAGE_H
+#define BITCOIN_MEMUSAGE_H
+
+#include <stdlib.h>
+
+#include <map>
+#include <set>
+#include <vector>
+
+#include <boost/unordered_set.hpp>
+#include <boost/unordered_map.hpp>
+
+namespace memusage
+{
+
+/** Compute the total memory used by allocating alloc bytes. */
+static size_t MallocUsage(size_t alloc);
+
+/** Compute the memory used for dynamically allocated but owned data structures.
+ * For generic data types, this is *not* recursive. DynamicUsage(vector<vector<int> >)
+ * will compute the memory used for the vector<int>'s, but not for the ints inside.
+ * This is for efficiency reasons, as these functions are intended to be fast. If
+ * application data structures require more accurate inner accounting, they should
+ * do the recursion themselves, or use more efficient caching + updating on modification.
+ */
+template<typename X> static size_t DynamicUsage(const std::vector<X>& v);
+template<typename X> static size_t DynamicUsage(const std::set<X>& s);
+template<typename X, typename Y> static size_t DynamicUsage(const std::map<X, Y>& m);
+template<typename X, typename Y> static size_t DynamicUsage(const boost::unordered_set<X, Y>& s);
+template<typename X, typename Y, typename Z> static size_t DynamicUsage(const boost::unordered_map<X, Y, Z>& s);
+template<typename X> static size_t DynamicUsage(const X& x);
+
+static inline size_t MallocUsage(size_t alloc)
+{
+ // Measured on libc6 2.19 on Linux.
+ if (sizeof(void*) == 8) {
+ return ((alloc + 31) >> 4) << 4;
+ } else if (sizeof(void*) == 4) {
+ return ((alloc + 15) >> 3) << 3;
+ } else {
+ assert(0);
+ }
+}
+
+// STL data structures
+
+template<typename X>
+struct stl_tree_node
+{
+private:
+ int color;
+ void* parent;
+ void* left;
+ void* right;
+ X x;
+};
+
+template<typename X>
+static inline size_t DynamicUsage(const std::vector<X>& v)
+{
+ return MallocUsage(v.capacity() * sizeof(X));
+}
+
+template<typename X>
+static inline size_t DynamicUsage(const std::set<X>& s)
+{
+ return MallocUsage(sizeof(stl_tree_node<X>)) * s.size();
+}
+
+template<typename X, typename Y>
+static inline size_t DynamicUsage(const std::map<X, Y>& m)
+{
+ return MallocUsage(sizeof(stl_tree_node<std::pair<const X, Y> >)) * m.size();
+}
+
+// Boost data structures
+
+template<typename X>
+struct boost_unordered_node : private X
+{
+private:
+ void* ptr;
+};
+
+template<typename X, typename Y>
+static inline size_t DynamicUsage(const boost::unordered_set<X, Y>& s)
+{
+ return MallocUsage(sizeof(boost_unordered_node<X>)) * s.size() + MallocUsage(sizeof(void*) * s.bucket_count());
+}
+
+template<typename X, typename Y, typename Z>
+static inline size_t DynamicUsage(const boost::unordered_map<X, Y, Z>& m)
+{
+ return MallocUsage(sizeof(boost_unordered_node<std::pair<const X, Y> >)) * m.size() + MallocUsage(sizeof(void*) * m.bucket_count());
+}
+
+// Dispatch to class method as fallback
+
+template<typename X>
+static inline size_t DynamicUsage(const X& x)
+{
+ return x.DynamicMemoryUsage();
+}
+
+}
+
+#endif
diff --git a/src/merkleblock.cpp b/src/merkleblock.cpp
index dc87d0377a..4d90fd8cd7 100644
--- a/src/merkleblock.cpp
+++ b/src/merkleblock.cpp
@@ -119,8 +119,8 @@ uint256 CPartialMerkleTree::TraverseAndExtract(int height, unsigned int pos, uns
if (pos*2+1 < CalcTreeWidth(height-1)) {
right = TraverseAndExtract(height-1, pos*2+1, nBitsUsed, nHashUsed, vMatch);
if (right == left) {
- // If the left and right branch should never be identical as the transaction
- // hashes covered by them must be unique.
+ // The left and right branches should never be identical, as the transaction
+ // hashes covered by them must each be unique.
fBad = true;
}
} else {
diff --git a/src/merkleblock.h b/src/merkleblock.h
index d90face17c..904c22abc2 100644
--- a/src/merkleblock.h
+++ b/src/merkleblock.h
@@ -104,7 +104,7 @@ public:
}
}
- /** Construct a partial merkle tree from a list of transaction id's, and a mask that selects a subset of them */
+ /** Construct a partial merkle tree from a list of transaction ids, and a mask that selects a subset of them */
CPartialMerkleTree(const std::vector<uint256> &vTxid, const std::vector<bool> &vMatch);
CPartialMerkleTree();
diff --git a/src/miner.cpp b/src/miner.cpp
index 56a2c5828b..804a688523 100644
--- a/src/miner.cpp
+++ b/src/miner.cpp
@@ -91,6 +91,7 @@ void UpdateTime(CBlockHeader* pblock, const Consensus::Params& consensusParams,
CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn)
{
+ const CChainParams& chainparams = Params();
// Create new block
auto_ptr<CBlockTemplate> pblocktemplate(new CBlockTemplate());
if(!pblocktemplate.get())
@@ -320,7 +321,7 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn)
LogPrintf("CreateNewBlock(): total size %u\n", nBlockSize);
// Compute final coinbase transaction.
- txNew.vout[0].nValue = GetBlockValue(nHeight, nFees);
+ txNew.vout[0].nValue = nFees + GetBlockSubsidy(nHeight, chainparams.GetConsensus());
txNew.vin[0].scriptSig = CScript() << nHeight << OP_0;
pblock->vtx[0] = txNew;
pblocktemplate->vTxFees[0] = -nFees;
@@ -453,8 +454,16 @@ void static BitcoinMiner(CWallet *pwallet)
if (chainparams.MiningRequiresPeers()) {
// Busy-wait for the network to come online so we don't waste time mining
// on an obsolete chain. In regtest mode we expect to fly solo.
- while (vNodes.empty())
+ do {
+ bool fvNodesEmpty;
+ {
+ LOCK(cs_vNodes);
+ fvNodesEmpty = vNodes.empty();
+ }
+ if (!fvNodesEmpty && !IsInitialBlockDownload())
+ break;
MilliSleep(1000);
+ } while (true);
}
//
@@ -533,6 +542,11 @@ void static BitcoinMiner(CWallet *pwallet)
LogPrintf("BitcoinMiner terminated\n");
throw;
}
+ catch (const std::runtime_error &e)
+ {
+ LogPrintf("BitcoinMiner runtime error: %s\n", e.what());
+ return;
+ }
}
void GenerateBitcoins(bool fGenerate, CWallet* pwallet, int nThreads)
diff --git a/src/mruset.h b/src/mruset.h
index 1969f419cb..398aa173bf 100644
--- a/src/mruset.h
+++ b/src/mruset.h
@@ -1,12 +1,12 @@
-// Copyright (c) 2012 The Bitcoin Core developers
+// Copyright (c) 2012-2015 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_MRUSET_H
#define BITCOIN_MRUSET_H
-#include <deque>
#include <set>
+#include <vector>
#include <utility>
/** STL-like set container that only keeps the most recent N elements. */
@@ -22,11 +22,13 @@ public:
protected:
std::set<T> set;
- std::deque<T> queue;
- size_type nMaxSize;
+ std::vector<iterator> order;
+ size_type first_used;
+ size_type first_unused;
+ const size_type nMaxSize;
public:
- mruset(size_type nMaxSizeIn = 0) { nMaxSize = nMaxSizeIn; }
+ mruset(size_type nMaxSizeIn = 1) : nMaxSize(nMaxSizeIn) { clear(); }
iterator begin() const { return set.begin(); }
iterator end() const { return set.end(); }
size_type size() const { return set.size(); }
@@ -36,7 +38,9 @@ public:
void clear()
{
set.clear();
- queue.clear();
+ order.assign(nMaxSize, set.end());
+ first_used = 0;
+ first_unused = 0;
}
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; }
@@ -45,25 +49,17 @@ public:
{
std::pair<iterator, bool> ret = set.insert(x);
if (ret.second) {
- if (nMaxSize && queue.size() == nMaxSize) {
- set.erase(queue.front());
- queue.pop_front();
+ if (set.size() == nMaxSize + 1) {
+ set.erase(order[first_used]);
+ order[first_used] = set.end();
+ if (++first_used == nMaxSize) first_used = 0;
}
- queue.push_back(x);
+ order[first_unused] = ret.first;
+ if (++first_unused == nMaxSize) first_unused = 0;
}
return ret;
}
size_type max_size() const { return nMaxSize; }
- size_type max_size(size_type s)
- {
- if (s)
- while (queue.size() > s) {
- set.erase(queue.front());
- queue.pop_front();
- }
- nMaxSize = s;
- return nMaxSize;
- }
};
#endif // BITCOIN_MRUSET_H
diff --git a/src/net.cpp b/src/net.cpp
index 45a06a105f..6849d79263 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -13,6 +13,7 @@
#include "chainparams.h"
#include "clientversion.h"
#include "primitives/transaction.h"
+#include "scheduler.h"
#include "ui_interface.h"
#include "crypto/common.h"
@@ -142,6 +143,27 @@ bool GetLocal(CService& addr, const CNetAddr *paddrPeer)
return nBestScore >= 0;
}
+//! Convert the pnSeeds6 array into usable address objects.
+static std::vector<CAddress> convertSeed6(const std::vector<SeedSpec6> &vSeedsIn)
+{
+ // It'll only connect to one or two seed nodes because once it connects,
+ // it'll get a pile of addresses with newer timestamps.
+ // Seed nodes are given a random 'last seen time' of between one and two
+ // weeks ago.
+ const int64_t nOneWeek = 7*24*60*60;
+ std::vector<CAddress> vSeedsOut;
+ vSeedsOut.reserve(vSeedsIn.size());
+ for (std::vector<SeedSpec6>::const_iterator i(vSeedsIn.begin()); i != vSeedsIn.end(); ++i)
+ {
+ struct in6_addr ip;
+ memcpy(&ip, i->addr, sizeof(ip));
+ CAddress addr(CService(ip, i->port));
+ addr.nTime = GetTime() - GetRand(nOneWeek) - nOneWeek;
+ vSeedsOut.push_back(addr);
+ }
+ return vSeedsOut;
+}
+
// get best local address for a particular peer as a CAddress
// Otherwise, return the unroutable 0.0.0.0 but filled in with
// the normal parameters, since the IP may be changed to a useful
@@ -1195,7 +1217,7 @@ void ThreadOpenConnections()
static bool done = false;
if (!done) {
LogPrintf("Adding fixed seed nodes as DNS doesn't seem to be available.\n");
- addrman.Add(Params().FixedSeeds(), CNetAddr("127.0.0.1"));
+ addrman.Add(convertSeed6(Params().FixedSeeds()), CNetAddr("127.0.0.1"));
done = true;
}
}
@@ -1569,7 +1591,7 @@ void static Discover(boost::thread_group& threadGroup)
#endif
}
-void StartNode(boost::thread_group& threadGroup)
+void StartNode(boost::thread_group& threadGroup, CScheduler& scheduler)
{
uiInterface.InitMessage(_("Loading addresses..."));
// Load addresses for peers.dat
@@ -1619,7 +1641,7 @@ void StartNode(boost::thread_group& threadGroup)
threadGroup.create_thread(boost::bind(&TraceThread<void (*)()>, "msghand", &ThreadMessageHandler));
// Dump network addresses
- threadGroup.create_thread(boost::bind(&LoopForever<void (*)()>, "dumpaddr", &DumpAddresses, DUMP_ADDRESSES_INTERVAL * 1000));
+ scheduler.scheduleEvery(&DumpAddresses, DUMP_ADDRESSES_INTERVAL);
}
bool StopNode()
@@ -1884,7 +1906,10 @@ bool CAddrDB::Read(CAddrMan& addr)
unsigned int ReceiveFloodSize() { return 1000*GetArg("-maxreceivebuffer", 5*1000); }
unsigned int SendBufferSize() { return 1000*GetArg("-maxsendbuffer", 1*1000); }
-CNode::CNode(SOCKET hSocketIn, CAddress addrIn, std::string addrNameIn, bool fInboundIn) : ssSend(SER_NETWORK, INIT_PROTO_VERSION), setAddrKnown(5000)
+CNode::CNode(SOCKET hSocketIn, CAddress addrIn, std::string addrNameIn, bool fInboundIn) :
+ ssSend(SER_NETWORK, INIT_PROTO_VERSION),
+ addrKnown(5000, 0.001, insecure_rand()),
+ setInventoryKnown(SendBufferSize() / 1000)
{
nServices = 0;
hSocket = hSocketIn;
@@ -1913,7 +1938,6 @@ CNode::CNode(SOCKET hSocketIn, CAddress addrIn, std::string addrNameIn, bool fIn
nStartingHeight = -1;
fGetAddr = false;
fRelayTxes = false;
- setInventoryKnown.max_size(SendBufferSize() / 1000);
pfilter = new CBloomFilter();
nPingNonceSent = 0;
nPingUsecStart = 0;
diff --git a/src/net.h b/src/net.h
index 9fc6ce68d0..17502b97eb 100644
--- a/src/net.h
+++ b/src/net.h
@@ -32,6 +32,7 @@
class CAddrMan;
class CBlockIndex;
+class CScheduler;
class CNode;
namespace boost {
@@ -72,7 +73,7 @@ bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOu
void MapPort(bool fUseUPnP);
unsigned short GetListenPort();
bool BindListenPort(const CService &bindAddr, std::string& strError, bool fWhitelisted = false);
-void StartNode(boost::thread_group& threadGroup);
+void StartNode(boost::thread_group& threadGroup, CScheduler& scheduler);
bool StopNode();
void SocketSendData(CNode *pnode);
@@ -271,8 +272,8 @@ public:
bool fDisconnect;
// We use fRelayTxes for two purposes -
// a) it allows us to not relay tx invs before receiving the peer's version message
- // b) the peer may tell us in their version message that we should not relay tx invs
- // until they have initialized their bloom filter.
+ // b) the peer may tell us in its version message that we should not relay tx invs
+ // until it has initialized its bloom filter.
bool fRelayTxes;
CSemaphoreGrant grantOutbound;
CCriticalSection cs_filter;
@@ -300,7 +301,7 @@ public:
// flood relay
std::vector<CAddress> vAddrToSend;
- mruset<CAddress> setAddrKnown;
+ CRollingBloomFilter addrKnown;
bool fGetAddr;
std::set<uint256> setKnown;
@@ -380,7 +381,7 @@ public:
void AddAddressKnown(const CAddress& addr)
{
- setAddrKnown.insert(addr);
+ addrKnown.insert(addr.GetKey());
}
void PushAddress(const CAddress& addr)
@@ -388,7 +389,7 @@ public:
// Known checking here is only to save space from duplicates.
// SendMessages will filter it again for knowns that were added
// after addresses were pushed.
- if (addr.IsValid() && !setAddrKnown.count(addr)) {
+ if (addr.IsValid() && !addrKnown.contains(addr.GetKey())) {
if (vAddrToSend.size() >= MAX_ADDR_TO_SEND) {
vAddrToSend[insecure_rand() % vAddrToSend.size()] = addr;
} else {
diff --git a/src/netbase.cpp b/src/netbase.cpp
index 1837cfa9c3..2015d0271a 100644
--- a/src/netbase.cpp
+++ b/src/netbase.cpp
@@ -293,7 +293,7 @@ struct ProxyCredentials
};
/** Connect using SOCKS5 (as described in RFC1928) */
-bool static Socks5(string strDest, int port, const ProxyCredentials *auth, SOCKET& hSocket)
+static bool Socks5(const std::string& strDest, int port, const ProxyCredentials *auth, SOCKET& hSocket)
{
LogPrintf("SOCKS5 connecting %s\n", strDest);
if (strDest.size() > 255) {
@@ -558,7 +558,7 @@ bool IsProxy(const CNetAddr &addr) {
return false;
}
-static bool ConnectThroughProxy(const proxyType &proxy, const std::string strDest, int port, SOCKET& hSocketRet, int nTimeout, bool *outProxyConnectionFailed)
+static bool ConnectThroughProxy(const proxyType &proxy, const std::string& strDest, int port, SOCKET& hSocketRet, int nTimeout, bool *outProxyConnectionFailed)
{
SOCKET hSocket = INVALID_SOCKET;
// first connect to proxy server
diff --git a/src/policy/fees.cpp b/src/policy/fees.cpp
new file mode 100644
index 0000000000..b1491cec01
--- /dev/null
+++ b/src/policy/fees.cpp
@@ -0,0 +1,529 @@
+// Copyright (c) 2009-2010 Satoshi Nakamoto
+// Copyright (c) 2009-2015 The Bitcoin developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#include "policy/fees.h"
+
+#include "amount.h"
+#include "primitives/transaction.h"
+#include "streams.h"
+#include "txmempool.h"
+#include "util.h"
+
+void TxConfirmStats::Initialize(std::vector<double>& defaultBuckets,
+ unsigned int maxConfirms, double _decay, std::string _dataTypeString)
+{
+ decay = _decay;
+ dataTypeString = _dataTypeString;
+ for (unsigned int i = 0; i < defaultBuckets.size(); i++) {
+ buckets.push_back(defaultBuckets[i]);
+ bucketMap[defaultBuckets[i]] = i;
+ }
+ confAvg.resize(maxConfirms);
+ curBlockConf.resize(maxConfirms);
+ unconfTxs.resize(maxConfirms);
+ for (unsigned int i = 0; i < maxConfirms; i++) {
+ confAvg[i].resize(buckets.size());
+ curBlockConf[i].resize(buckets.size());
+ unconfTxs[i].resize(buckets.size());
+ }
+
+ oldUnconfTxs.resize(buckets.size());
+ curBlockTxCt.resize(buckets.size());
+ txCtAvg.resize(buckets.size());
+ curBlockVal.resize(buckets.size());
+ avg.resize(buckets.size());
+}
+
+// Zero out the data for the current block
+void TxConfirmStats::ClearCurrent(unsigned int nBlockHeight)
+{
+ for (unsigned int j = 0; j < buckets.size(); j++) {
+ oldUnconfTxs[j] += unconfTxs[nBlockHeight%unconfTxs.size()][j];
+ unconfTxs[nBlockHeight%unconfTxs.size()][j] = 0;
+ for (unsigned int i = 0; i < curBlockConf.size(); i++)
+ curBlockConf[i][j] = 0;
+ curBlockTxCt[j] = 0;
+ curBlockVal[j] = 0;
+ }
+}
+
+
+void TxConfirmStats::Record(int blocksToConfirm, double val)
+{
+ // blocksToConfirm is 1-based
+ if (blocksToConfirm < 1)
+ return;
+ unsigned int bucketindex = bucketMap.lower_bound(val)->second;
+ for (size_t i = blocksToConfirm; i <= curBlockConf.size(); i++) {
+ curBlockConf[i - 1][bucketindex]++;
+ }
+ curBlockTxCt[bucketindex]++;
+ curBlockVal[bucketindex] += val;
+}
+
+void TxConfirmStats::UpdateMovingAverages()
+{
+ for (unsigned int j = 0; j < buckets.size(); j++) {
+ for (unsigned int i = 0; i < confAvg.size(); i++)
+ confAvg[i][j] = confAvg[i][j] * decay + curBlockConf[i][j];
+ avg[j] = avg[j] * decay + curBlockVal[j];
+ txCtAvg[j] = txCtAvg[j] * decay + curBlockTxCt[j];
+ }
+}
+
+// returns -1 on error conditions
+double TxConfirmStats::EstimateMedianVal(int confTarget, double sufficientTxVal,
+ double successBreakPoint, bool requireGreater,
+ unsigned int nBlockHeight)
+{
+ // Counters for a bucket (or range of buckets)
+ double nConf = 0; // Number of tx's confirmed within the confTarget
+ double totalNum = 0; // Total number of tx's that were ever confirmed
+ int extraNum = 0; // Number of tx's still in mempool for confTarget or longer
+
+ int maxbucketindex = buckets.size() - 1;
+
+ // requireGreater means we are looking for the lowest fee/priority such that all higher
+ // values pass, so we start at maxbucketindex (highest fee) and look at succesively
+ // smaller buckets until we reach failure. Otherwise, we are looking for the highest
+ // fee/priority such that all lower values fail, and we go in the opposite direction.
+ unsigned int startbucket = requireGreater ? maxbucketindex : 0;
+ int step = requireGreater ? -1 : 1;
+
+ // We'll combine buckets until we have enough samples.
+ // The near and far variables will define the range we've combined
+ // The best variables are the last range we saw which still had a high
+ // enough confirmation rate to count as success.
+ // The cur variables are the current range we're counting.
+ unsigned int curNearBucket = startbucket;
+ unsigned int bestNearBucket = startbucket;
+ unsigned int curFarBucket = startbucket;
+ unsigned int bestFarBucket = startbucket;
+
+ bool foundAnswer = false;
+ unsigned int bins = unconfTxs.size();
+
+ // Start counting from highest(default) or lowest fee/pri transactions
+ for (int bucket = startbucket; bucket >= 0 && bucket <= maxbucketindex; bucket += step) {
+ curFarBucket = bucket;
+ nConf += confAvg[confTarget - 1][bucket];
+ totalNum += txCtAvg[bucket];
+ for (unsigned int confct = confTarget; confct < GetMaxConfirms(); confct++)
+ extraNum += unconfTxs[(nBlockHeight - confct)%bins][bucket];
+ extraNum += oldUnconfTxs[bucket];
+ // If we have enough transaction data points in this range of buckets,
+ // we can test for success
+ // (Only count the confirmed data points, so that each confirmation count
+ // will be looking at the same amount of data and same bucket breaks)
+ if (totalNum >= sufficientTxVal / (1 - decay)) {
+ double curPct = nConf / (totalNum + extraNum);
+
+ // Check to see if we are no longer getting confirmed at the success rate
+ if (requireGreater && curPct < successBreakPoint)
+ break;
+ if (!requireGreater && curPct > successBreakPoint)
+ break;
+
+ // Otherwise update the cumulative stats, and the bucket variables
+ // and reset the counters
+ else {
+ foundAnswer = true;
+ nConf = 0;
+ totalNum = 0;
+ extraNum = 0;
+ bestNearBucket = curNearBucket;
+ bestFarBucket = curFarBucket;
+ curNearBucket = bucket + step;
+ }
+ }
+ }
+
+ double median = -1;
+ double txSum = 0;
+
+ // Calculate the "average" fee of the best bucket range that met success conditions
+ // Find the bucket with the median transaction and then report the average fee from that bucket
+ // This is a compromise between finding the median which we can't since we don't save all tx's
+ // and reporting the average which is less accurate
+ unsigned int minBucket = bestNearBucket < bestFarBucket ? bestNearBucket : bestFarBucket;
+ unsigned int maxBucket = bestNearBucket > bestFarBucket ? bestNearBucket : bestFarBucket;
+ for (unsigned int j = minBucket; j <= maxBucket; j++) {
+ txSum += txCtAvg[j];
+ }
+ if (foundAnswer && txSum != 0) {
+ txSum = txSum / 2;
+ for (unsigned int j = minBucket; j <= maxBucket; j++) {
+ if (txCtAvg[j] < txSum)
+ txSum -= txCtAvg[j];
+ else { // we're in the right bucket
+ median = avg[j] / txCtAvg[j];
+ break;
+ }
+ }
+ }
+
+ LogPrint("estimatefee", "%3d: For conf success %s %4.2f need %s %s: %12.5g from buckets %8g - %8g Cur Bucket stats %6.2f%% %8.1f/(%.1f+%d mempool)\n",
+ confTarget, requireGreater ? ">" : "<", successBreakPoint, dataTypeString,
+ requireGreater ? ">" : "<", median, buckets[minBucket], buckets[maxBucket],
+ 100 * nConf / (totalNum + extraNum), nConf, totalNum, extraNum);
+
+ return median;
+}
+
+void TxConfirmStats::Write(CAutoFile& fileout)
+{
+ fileout << decay;
+ fileout << buckets;
+ fileout << avg;
+ fileout << txCtAvg;
+ fileout << confAvg;
+}
+
+void TxConfirmStats::Read(CAutoFile& filein)
+{
+ // Read data file into temporary variables and do some very basic sanity checking
+ std::vector<double> fileBuckets;
+ std::vector<double> fileAvg;
+ std::vector<std::vector<double> > fileConfAvg;
+ std::vector<double> fileTxCtAvg;
+ double fileDecay;
+ size_t maxConfirms;
+ size_t numBuckets;
+
+ filein >> fileDecay;
+ if (fileDecay <= 0 || fileDecay >= 1)
+ throw std::runtime_error("Corrupt estimates file. Decay must be between 0 and 1 (non-inclusive)");
+ filein >> fileBuckets;
+ numBuckets = fileBuckets.size();
+ if (numBuckets <= 1 || numBuckets > 1000)
+ throw std::runtime_error("Corrupt estimates file. Must have between 2 and 1000 fee/pri buckets");
+ filein >> fileAvg;
+ if (fileAvg.size() != numBuckets)
+ throw std::runtime_error("Corrupt estimates file. Mismatch in fee/pri average bucket count");
+ filein >> fileTxCtAvg;
+ if (fileTxCtAvg.size() != numBuckets)
+ throw std::runtime_error("Corrupt estimates file. Mismatch in tx count bucket count");
+ filein >> fileConfAvg;
+ maxConfirms = fileConfAvg.size();
+ if (maxConfirms <= 0 || maxConfirms > 6 * 24 * 7) // one week
+ throw std::runtime_error("Corrupt estimates file. Must maintain estimates for between 1 and 1008 (one week) confirms");
+ for (unsigned int i = 0; i < maxConfirms; i++) {
+ if (fileConfAvg[i].size() != numBuckets)
+ throw std::runtime_error("Corrupt estimates file. Mismatch in fee/pri conf average bucket count");
+ }
+ // Now that we've processed the entire fee estimate data file and not
+ // thrown any errors, we can copy it to our data structures
+ decay = fileDecay;
+ buckets = fileBuckets;
+ avg = fileAvg;
+ confAvg = fileConfAvg;
+ txCtAvg = fileTxCtAvg;
+ bucketMap.clear();
+
+ // Resize the current block variables which aren't stored in the data file
+ // to match the number of confirms and buckets
+ curBlockConf.resize(maxConfirms);
+ for (unsigned int i = 0; i < maxConfirms; i++) {
+ curBlockConf[i].resize(buckets.size());
+ }
+ curBlockTxCt.resize(buckets.size());
+ curBlockVal.resize(buckets.size());
+
+ unconfTxs.resize(maxConfirms);
+ for (unsigned int i = 0; i < maxConfirms; i++) {
+ unconfTxs[i].resize(buckets.size());
+ }
+ oldUnconfTxs.resize(buckets.size());
+
+ for (unsigned int i = 0; i < buckets.size(); i++)
+ bucketMap[buckets[i]] = i;
+
+ LogPrint("estimatefee", "Reading estimates: %u %s buckets counting confirms up to %u blocks\n",
+ numBuckets, dataTypeString, maxConfirms);
+}
+
+unsigned int TxConfirmStats::NewTx(unsigned int nBlockHeight, double val)
+{
+ unsigned int bucketindex = bucketMap.lower_bound(val)->second;
+ unsigned int blockIndex = nBlockHeight % unconfTxs.size();
+ unconfTxs[blockIndex][bucketindex]++;
+ LogPrint("estimatefee", "adding to %s\n", dataTypeString);
+ return bucketindex;
+}
+
+void TxConfirmStats::removeTx(unsigned int entryHeight, unsigned int nBestSeenHeight, unsigned int bucketindex)
+{
+ //nBestSeenHeight is not updated yet for the new block
+ int blocksAgo = nBestSeenHeight - entryHeight;
+ if (nBestSeenHeight == 0) // the BlockPolicyEstimator hasn't seen any blocks yet
+ blocksAgo = 0;
+ if (blocksAgo < 0) {
+ LogPrint("estimatefee", "Blockpolicy error, blocks ago is negative for mempool tx\n");
+ return; //This can't happen becasue we call this with our best seen height, no entries can have higher
+ }
+
+ if (blocksAgo >= (int)unconfTxs.size()) {
+ if (oldUnconfTxs[bucketindex] > 0)
+ oldUnconfTxs[bucketindex]--;
+ else
+ LogPrint("estimatefee", "Blockpolicy error, mempool tx removed from >25 blocks,bucketIndex=%u already\n",
+ bucketindex);
+ }
+ else {
+ unsigned int blockIndex = entryHeight % unconfTxs.size();
+ if (unconfTxs[blockIndex][bucketindex] > 0)
+ unconfTxs[blockIndex][bucketindex]--;
+ else
+ LogPrint("estimatefee", "Blockpolicy error, mempool tx removed from blockIndex=%u,bucketIndex=%u already\n",
+ blockIndex, bucketindex);
+ }
+}
+
+void CBlockPolicyEstimator::removeTx(uint256 hash)
+{
+ std::map<uint256, TxStatsInfo>::iterator pos = mapMemPoolTxs.find(hash);
+ if (pos == mapMemPoolTxs.end()) {
+ LogPrint("estimatefee", "Blockpolicy error mempool tx %s not found for removeTx\n",
+ hash.ToString().c_str());
+ return;
+ }
+ TxConfirmStats *stats = pos->second.stats;
+ unsigned int entryHeight = pos->second.blockHeight;
+ unsigned int bucketIndex = pos->second.bucketIndex;
+
+ if (stats != NULL)
+ stats->removeTx(entryHeight, nBestSeenHeight, bucketIndex);
+ mapMemPoolTxs.erase(hash);
+}
+
+CBlockPolicyEstimator::CBlockPolicyEstimator(const CFeeRate& _minRelayFee)
+ : nBestSeenHeight(0)
+{
+ minTrackedFee = _minRelayFee < CFeeRate(MIN_FEERATE) ? CFeeRate(MIN_FEERATE) : _minRelayFee;
+ std::vector<double> vfeelist;
+ for (double bucketBoundary = minTrackedFee.GetFeePerK(); bucketBoundary <= MAX_FEERATE; bucketBoundary *= FEE_SPACING) {
+ vfeelist.push_back(bucketBoundary);
+ }
+ vfeelist.push_back(INF_FEERATE);
+ feeStats.Initialize(vfeelist, MAX_BLOCK_CONFIRMS, DEFAULT_DECAY, "FeeRate");
+
+ minTrackedPriority = AllowFreeThreshold() < MIN_PRIORITY ? MIN_PRIORITY : AllowFreeThreshold();
+ std::vector<double> vprilist;
+ for (double bucketBoundary = minTrackedPriority; bucketBoundary <= MAX_PRIORITY; bucketBoundary *= PRI_SPACING) {
+ vprilist.push_back(bucketBoundary);
+ }
+ vprilist.push_back(INF_PRIORITY);
+ priStats.Initialize(vprilist, MAX_BLOCK_CONFIRMS, DEFAULT_DECAY, "Priority");
+
+ feeUnlikely = CFeeRate(0);
+ feeLikely = CFeeRate(INF_FEERATE);
+ priUnlikely = 0;
+ priLikely = INF_PRIORITY;
+}
+
+bool CBlockPolicyEstimator::isFeeDataPoint(const CFeeRate &fee, double pri)
+{
+ if ((pri < minTrackedPriority && fee >= minTrackedFee) ||
+ (pri < priUnlikely && fee > feeLikely)) {
+ return true;
+ }
+ return false;
+}
+
+bool CBlockPolicyEstimator::isPriDataPoint(const CFeeRate &fee, double pri)
+{
+ if ((fee < minTrackedFee && pri >= minTrackedPriority) ||
+ (fee < feeUnlikely && pri > priLikely)) {
+ return true;
+ }
+ return false;
+}
+
+void CBlockPolicyEstimator::processTransaction(const CTxMemPoolEntry& entry, bool fCurrentEstimate)
+{
+ unsigned int txHeight = entry.GetHeight();
+ uint256 hash = entry.GetTx().GetHash();
+ if (mapMemPoolTxs[hash].stats != NULL) {
+ LogPrint("estimatefee", "Blockpolicy error mempool tx %s already being tracked\n",
+ hash.ToString().c_str());
+ return;
+ }
+
+ if (txHeight < nBestSeenHeight) {
+ // Ignore side chains and re-orgs; assuming they are random they don't
+ // affect the estimate. We'll potentially double count transactions in 1-block reorgs.
+ return;
+ }
+
+ // Only want to be updating estimates when our blockchain is synced,
+ // otherwise we'll miscalculate how many blocks its taking to get included.
+ if (!fCurrentEstimate)
+ return;
+
+ if (!entry.WasClearAtEntry()) {
+ // This transaction depends on other transactions in the mempool to
+ // be included in a block before it will be able to be included, so
+ // we shouldn't include it in our calculations
+ return;
+ }
+
+ // Fees are stored and reported as BTC-per-kb:
+ CFeeRate feeRate(entry.GetFee(), entry.GetTxSize());
+
+ // Want the priority of the tx at confirmation. However we don't know
+ // what that will be and its too hard to continue updating it
+ // so use starting priority as a proxy
+ double curPri = entry.GetPriority(txHeight);
+ mapMemPoolTxs[hash].blockHeight = txHeight;
+
+ LogPrint("estimatefee", "Blockpolicy mempool tx %s ", hash.ToString().substr(0,10));
+ // Record this as a priority estimate
+ if (entry.GetFee() == 0 || isPriDataPoint(feeRate, curPri)) {
+ mapMemPoolTxs[hash].stats = &priStats;
+ mapMemPoolTxs[hash].bucketIndex = priStats.NewTx(txHeight, curPri);
+ }
+ // Record this as a fee estimate
+ else if (isFeeDataPoint(feeRate, curPri)) {
+ mapMemPoolTxs[hash].stats = &feeStats;
+ mapMemPoolTxs[hash].bucketIndex = feeStats.NewTx(txHeight, (double)feeRate.GetFeePerK());
+ }
+ else {
+ LogPrint("estimatefee", "not adding\n");
+ }
+}
+
+void CBlockPolicyEstimator::processBlockTx(unsigned int nBlockHeight, const CTxMemPoolEntry& entry)
+{
+ if (!entry.WasClearAtEntry()) {
+ // This transaction depended on other transactions in the mempool to
+ // be included in a block before it was able to be included, so
+ // we shouldn't include it in our calculations
+ return;
+ }
+
+ // How many blocks did it take for miners to include this transaction?
+ // blocksToConfirm is 1-based, so a transaction included in the earliest
+ // possible block has confirmation count of 1
+ int blocksToConfirm = nBlockHeight - entry.GetHeight();
+ if (blocksToConfirm <= 0) {
+ // This can't happen because we don't process transactions from a block with a height
+ // lower than our greatest seen height
+ LogPrint("estimatefee", "Blockpolicy error Transaction had negative blocksToConfirm\n");
+ return;
+ }
+
+ // Fees are stored and reported as BTC-per-kb:
+ CFeeRate feeRate(entry.GetFee(), entry.GetTxSize());
+
+ // Want the priority of the tx at confirmation. The priority when it
+ // entered the mempool could easily be very small and change quickly
+ double curPri = entry.GetPriority(nBlockHeight);
+
+ // Record this as a priority estimate
+ if (entry.GetFee() == 0 || isPriDataPoint(feeRate, curPri)) {
+ priStats.Record(blocksToConfirm, curPri);
+ }
+ // Record this as a fee estimate
+ else if (isFeeDataPoint(feeRate, curPri)) {
+ feeStats.Record(blocksToConfirm, (double)feeRate.GetFeePerK());
+ }
+}
+
+void CBlockPolicyEstimator::processBlock(unsigned int nBlockHeight,
+ std::vector<CTxMemPoolEntry>& entries, bool fCurrentEstimate)
+{
+ if (nBlockHeight <= nBestSeenHeight) {
+ // Ignore side chains and re-orgs; assuming they are random
+ // they don't affect the estimate.
+ // And if an attacker can re-org the chain at will, then
+ // you've got much bigger problems than "attacker can influence
+ // transaction fees."
+ return;
+ }
+ nBestSeenHeight = nBlockHeight;
+
+ // Only want to be updating estimates when our blockchain is synced,
+ // otherwise we'll miscalculate how many blocks its taking to get included.
+ if (!fCurrentEstimate)
+ return;
+
+ // Update the dynamic cutoffs
+ // a fee/priority is "likely" the reason your tx was included in a block if >85% of such tx's
+ // were confirmed in 2 blocks and is "unlikely" if <50% were confirmed in 10 blocks
+ LogPrint("estimatefee", "Blockpolicy recalculating dynamic cutoffs:\n");
+ priLikely = priStats.EstimateMedianVal(2, SUFFICIENT_PRITXS, MIN_SUCCESS_PCT, true, nBlockHeight);
+ if (priLikely == -1)
+ priLikely = INF_PRIORITY;
+
+ double feeLikelyEst = feeStats.EstimateMedianVal(2, SUFFICIENT_FEETXS, MIN_SUCCESS_PCT, true, nBlockHeight);
+ if (feeLikelyEst == -1)
+ feeLikely = CFeeRate(INF_FEERATE);
+ else
+ feeLikely = CFeeRate(feeLikelyEst);
+
+ priUnlikely = priStats.EstimateMedianVal(10, SUFFICIENT_PRITXS, UNLIKELY_PCT, false, nBlockHeight);
+ if (priUnlikely == -1)
+ priUnlikely = 0;
+
+ double feeUnlikelyEst = feeStats.EstimateMedianVal(10, SUFFICIENT_FEETXS, UNLIKELY_PCT, false, nBlockHeight);
+ if (feeUnlikelyEst == -1)
+ feeUnlikely = CFeeRate(0);
+ else
+ feeUnlikely = CFeeRate(feeUnlikelyEst);
+
+ // Clear the current block states
+ feeStats.ClearCurrent(nBlockHeight);
+ priStats.ClearCurrent(nBlockHeight);
+
+ // Repopulate the current block states
+ for (unsigned int i = 0; i < entries.size(); i++)
+ processBlockTx(nBlockHeight, entries[i]);
+
+ // Update all exponential averages with the current block states
+ feeStats.UpdateMovingAverages();
+ priStats.UpdateMovingAverages();
+
+ LogPrint("estimatefee", "Blockpolicy after updating estimates for %u confirmed entries, new mempool map size %u\n",
+ entries.size(), mapMemPoolTxs.size());
+}
+
+CFeeRate CBlockPolicyEstimator::estimateFee(int confTarget)
+{
+ // Return failure if trying to analyze a target we're not tracking
+ if (confTarget <= 0 || (unsigned int)confTarget > feeStats.GetMaxConfirms())
+ return CFeeRate(0);
+
+ double median = feeStats.EstimateMedianVal(confTarget, SUFFICIENT_FEETXS, MIN_SUCCESS_PCT, true, nBestSeenHeight);
+
+ if (median < 0)
+ return CFeeRate(0);
+
+ return CFeeRate(median);
+}
+
+double CBlockPolicyEstimator::estimatePriority(int confTarget)
+{
+ // Return failure if trying to analyze a target we're not tracking
+ if (confTarget <= 0 || (unsigned int)confTarget > priStats.GetMaxConfirms())
+ return -1;
+
+ return priStats.EstimateMedianVal(confTarget, SUFFICIENT_PRITXS, MIN_SUCCESS_PCT, true, nBestSeenHeight);
+}
+
+void CBlockPolicyEstimator::Write(CAutoFile& fileout)
+{
+ fileout << nBestSeenHeight;
+ feeStats.Write(fileout);
+ priStats.Write(fileout);
+}
+
+void CBlockPolicyEstimator::Read(CAutoFile& filein)
+{
+ int nFileBestSeenHeight;
+ filein >> nFileBestSeenHeight;
+ feeStats.Read(filein);
+ priStats.Read(filein);
+ nBestSeenHeight = nFileBestSeenHeight;
+}
diff --git a/src/policy/fees.h b/src/policy/fees.h
new file mode 100644
index 0000000000..ce4d782566
--- /dev/null
+++ b/src/policy/fees.h
@@ -0,0 +1,276 @@
+// Copyright (c) 2009-2010 Satoshi Nakamoto
+// Copyright (c) 2009-2015 The Bitcoin developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+#ifndef BITCOIN_POLICYESTIMATOR_H
+#define BITCOIN_POLICYESTIMATOR_H
+
+#include "amount.h"
+#include "uint256.h"
+
+#include <map>
+#include <string>
+#include <vector>
+
+class CAutoFile;
+class CFeeRate;
+class CTxMemPoolEntry;
+
+/** \class CBlockPolicyEstimator
+ * The BlockPolicyEstimator is used for estimating the fee or priority needed
+ * for a transaction to be included in a block within a certain number of
+ * blocks.
+ *
+ * At a high level the algorithm works by grouping transactions into buckets
+ * based on having similar priorities or fees and then tracking how long it
+ * takes transactions in the various buckets to be mined. It operates under
+ * the assumption that in general transactions of higher fee/priority will be
+ * included in blocks before transactions of lower fee/priority. So for
+ * example if you wanted to know what fee you should put on a transaction to
+ * be included in a block within the next 5 blocks, you would start by looking
+ * at the bucket with with the highest fee transactions and verifying that a
+ * sufficiently high percentage of them were confirmed within 5 blocks and
+ * then you would look at the next highest fee bucket, and so on, stopping at
+ * the last bucket to pass the test. The average fee of transactions in this
+ * bucket will give you an indication of the lowest fee you can put on a
+ * transaction and still have a sufficiently high chance of being confirmed
+ * within your desired 5 blocks.
+ *
+ * When a transaction enters the mempool or is included within a block we
+ * decide whether it can be used as a data point for fee estimation, priority
+ * estimation or neither. If the value of exactly one of those properties was
+ * below the required minimum it can be used to estimate the other. In
+ * addition, if a priori our estimation code would indicate that the
+ * transaction would be much more quickly included in a block because of one
+ * of the properties compared to the other, we can also decide to use it as
+ * an estimate for that property.
+ *
+ * Here is a brief description of the implementation for fee estimation.
+ * When a transaction that counts for fee estimation enters the mempool, we
+ * track the height of the block chain at entry. Whenever a block comes in,
+ * we count the number of transactions in each bucket and the total amount of fee
+ * paid in each bucket. Then we calculate how many blocks Y it took each
+ * transaction to be mined and we track an array of counters in each bucket
+ * for how long it to took transactions to get confirmed from 1 to a max of 25
+ * and we increment all the counters from Y up to 25. This is because for any
+ * number Z>=Y the transaction was successfully mined within Z blocks. We
+ * want to save a history of this information, so at any time we have a
+ * counter of the total number of transactions that happened in a given fee
+ * bucket and the total number that were confirmed in each number 1-25 blocks
+ * or less for any bucket. We save this history by keeping an exponentially
+ * decaying moving average of each one of these stats. Furthermore we also
+ * keep track of the number unmined (in mempool) transactions in each bucket
+ * and for how many blocks they have been outstanding and use that to increase
+ * the number of transactions we've seen in that fee bucket when calculating
+ * an estimate for any number of confirmations below the number of blocks
+ * they've been outstanding.
+ */
+
+/**
+ * We will instantiate two instances of this class, one to track transactions
+ * that were included in a block due to fee, and one for tx's included due to
+ * priority. We will lump transactions into a bucket according to their approximate
+ * fee or priority and then track how long it took for those txs to be included in a block
+ *
+ * The tracking of unconfirmed (mempool) transactions is completely independent of the
+ * historical tracking of transactions that have been confirmed in a block.
+ */
+class TxConfirmStats
+{
+private:
+ //Define the buckets we will group transactions into (both fee buckets and priority buckets)
+ std::vector<double> buckets; // The upper-bound of the range for the bucket (inclusive)
+ std::map<double, unsigned int> bucketMap; // Map of bucket upper-bound to index into all vectors by bucket
+
+ // For each bucket X:
+ // Count the total # of txs in each bucket
+ // Track the historical moving average of this total over blocks
+ std::vector<double> txCtAvg;
+ // and calcuate the total for the current block to update the moving average
+ std::vector<int> curBlockTxCt;
+
+ // Count the total # of txs confirmed within Y blocks in each bucket
+ // Track the historical moving average of theses totals over blocks
+ std::vector<std::vector<double> > confAvg; // confAvg[Y][X]
+ // and calcuate the totals for the current block to update the moving averages
+ std::vector<std::vector<int> > curBlockConf; // curBlockConf[Y][X]
+
+ // Sum the total priority/fee of all tx's in each bucket
+ // Track the historical moving average of this total over blocks
+ std::vector<double> avg;
+ // and calculate the total for the current block to update the moving average
+ std::vector<double> curBlockVal;
+
+ // Combine the conf counts with tx counts to calculate the confirmation % for each Y,X
+ // Combine the total value with the tx counts to calculate the avg fee/priority per bucket
+
+ std::string dataTypeString;
+ double decay;
+
+ // Mempool counts of outstanding transactions
+ // For each bucket X, track the number of transactions in the mempool
+ // that are unconfirmed for each possible confirmation value Y
+ std::vector<std::vector<int> > unconfTxs; //unconfTxs[Y][X]
+ // transactions still unconfirmed after MAX_CONFIRMS for each bucket
+ std::vector<int> oldUnconfTxs;
+
+public:
+ /**
+ * Initialize the data structures. This is called by BlockPolicyEstimator's
+ * constructor with default values.
+ * @param defaultBuckets contains the upper limits for the bucket boundries
+ * @param maxConfirms max number of confirms to track
+ * @param decay how much to decay the historical moving average per block
+ * @param dataTypeString for logging purposes
+ */
+ void Initialize(std::vector<double>& defaultBuckets, unsigned int maxConfirms, double decay, std::string dataTypeString);
+
+ /** Clear the state of the curBlock variables to start counting for the new block */
+ void ClearCurrent(unsigned int nBlockHeight);
+
+ /**
+ * Record a new transaction data point in the current block stats
+ * @param blocksToConfirm the number of blocks it took this transaction to confirm
+ * @param val either the fee or the priority when entered of the transaction
+ * @warning blocksToConfirm is 1-based and has to be >= 1
+ */
+ void Record(int blocksToConfirm, double val);
+
+ /** Record a new transaction entering the mempool*/
+ unsigned int NewTx(unsigned int nBlockHeight, double val);
+
+ /** Remove a transaction from mempool tracking stats*/
+ void removeTx(unsigned int entryHeight, unsigned int nBestSeenHeight,
+ unsigned int bucketIndex);
+
+ /** Update our estimates by decaying our historical moving average and updating
+ with the data gathered from the current block */
+ void UpdateMovingAverages();
+
+ /**
+ * Calculate a fee or priority estimate. Find the lowest value bucket (or range of buckets
+ * to make sure we have enough data points) whose transactions still have sufficient likelihood
+ * of being confirmed within the target number of confirmations
+ * @param confTarget target number of confirmations
+ * @param sufficientTxVal required average number of transactions per block in a bucket range
+ * @param minSuccess the success probability we require
+ * @param requireGreater return the lowest fee/pri such that all higher values pass minSuccess OR
+ * return the highest fee/pri such that all lower values fail minSuccess
+ * @param nBlockHeight the current block height
+ */
+ double EstimateMedianVal(int confTarget, double sufficientTxVal,
+ double minSuccess, bool requireGreater, unsigned int nBlockHeight);
+
+ /** Return the max number of confirms we're tracking */
+ unsigned int GetMaxConfirms() { return confAvg.size(); }
+
+ /** Write state of estimation data to a file*/
+ void Write(CAutoFile& fileout);
+
+ /**
+ * Read saved state of estimation data from a file and replace all internal data structures and
+ * variables with this state.
+ */
+ void Read(CAutoFile& filein);
+};
+
+
+
+/** Track confirm delays up to 25 blocks, can't estimate beyond that */
+static const unsigned int MAX_BLOCK_CONFIRMS = 25;
+
+/** Decay of .998 is a half-life of 346 blocks or about 2.4 days */
+static const double DEFAULT_DECAY = .998;
+
+/** Require greater than 85% of X fee transactions to be confirmed within Y blocks for X to be big enough */
+static const double MIN_SUCCESS_PCT = .85;
+static const double UNLIKELY_PCT = .5;
+
+/** Require an avg of 1 tx in the combined fee bucket per block to have stat significance */
+static const double SUFFICIENT_FEETXS = 1;
+
+/** Require only an avg of 1 tx every 5 blocks in the combined pri bucket (way less pri txs) */
+static const double SUFFICIENT_PRITXS = .2;
+
+// Minimum and Maximum values for tracking fees and priorities
+static const double MIN_FEERATE = 10;
+static const double MAX_FEERATE = 1e7;
+static const double INF_FEERATE = MAX_MONEY;
+static const double MIN_PRIORITY = 10;
+static const double MAX_PRIORITY = 1e16;
+static const double INF_PRIORITY = 1e9 * MAX_MONEY;
+
+// We have to lump transactions into buckets based on fee or priority, but we want to be able
+// to give accurate estimates over a large range of potential fees and priorities
+// Therefore it makes sense to exponentially space the buckets
+/** Spacing of FeeRate buckets */
+static const double FEE_SPACING = 1.1;
+
+/** Spacing of Priority buckets */
+static const double PRI_SPACING = 2;
+
+/**
+ * We want to be able to estimate fees or priorities that are needed on tx's to be included in
+ * a certain number of blocks. Every time a block is added to the best chain, this class records
+ * stats on the transactions included in that block
+ */
+class CBlockPolicyEstimator
+{
+public:
+ /** Create new BlockPolicyEstimator and initialize stats tracking classes with default values */
+ CBlockPolicyEstimator(const CFeeRate& minRelayFee);
+
+ /** Process all the transactions that have been included in a block */
+ void processBlock(unsigned int nBlockHeight,
+ std::vector<CTxMemPoolEntry>& entries, bool fCurrentEstimate);
+
+ /** Process a transaction confirmed in a block*/
+ void processBlockTx(unsigned int nBlockHeight, const CTxMemPoolEntry& entry);
+
+ /** Process a transaction accepted to the mempool*/
+ void processTransaction(const CTxMemPoolEntry& entry, bool fCurrentEstimate);
+
+ /** Remove a transaction from the mempool tracking stats*/
+ void removeTx(uint256 hash);
+
+ /** Is this transaction likely included in a block because of its fee?*/
+ bool isFeeDataPoint(const CFeeRate &fee, double pri);
+
+ /** Is this transaction likely included in a block because of its priority?*/
+ bool isPriDataPoint(const CFeeRate &fee, double pri);
+
+ /** Return a fee estimate */
+ CFeeRate estimateFee(int confTarget);
+
+ /** Return a priority estimate */
+ double estimatePriority(int confTarget);
+
+ /** Write estimation data to a file */
+ void Write(CAutoFile& fileout);
+
+ /** Read estimation data from a file */
+ void Read(CAutoFile& filein);
+
+private:
+ CFeeRate minTrackedFee; //! Passed to constructor to avoid dependency on main
+ double minTrackedPriority; //! Set to AllowFreeThreshold
+ unsigned int nBestSeenHeight;
+ struct TxStatsInfo
+ {
+ TxConfirmStats *stats;
+ unsigned int blockHeight;
+ unsigned int bucketIndex;
+ TxStatsInfo() : stats(NULL), blockHeight(0), bucketIndex(0) {}
+ };
+
+ // map of txids to information about that transaction
+ std::map<uint256, TxStatsInfo> mapMemPoolTxs;
+
+ /** Classes to track historical data on transaction confirmations */
+ TxConfirmStats feeStats, priStats;
+
+ /** Breakpoints to help determine whether a transaction was confirmed by priority or Fee */
+ CFeeRate feeLikely, feeUnlikely;
+ double priLikely, priUnlikely;
+};
+#endif /*BITCOIN_POLICYESTIMATOR_H */
diff --git a/src/pow.cpp b/src/pow.cpp
index fc6ed4f3d1..bb53ad204b 100644
--- a/src/pow.cpp
+++ b/src/pow.cpp
@@ -114,3 +114,20 @@ arith_uint256 GetBlockProof(const CBlockIndex& block)
// or ~bnTarget / (nTarget+1) + 1.
return (~bnTarget / (bnTarget + 1)) + 1;
}
+
+int64_t GetBlockProofEquivalentTime(const CBlockIndex& to, const CBlockIndex& from, const CBlockIndex& tip, const Consensus::Params& params)
+{
+ arith_uint256 r;
+ int sign = 1;
+ if (to.nChainWork > from.nChainWork) {
+ r = to.nChainWork - from.nChainWork;
+ } else {
+ r = from.nChainWork - to.nChainWork;
+ sign = -1;
+ }
+ r = r * arith_uint256(params.nPowTargetSpacing) / GetBlockProof(tip);
+ if (r.bits() > 63) {
+ return sign * std::numeric_limits<int64_t>::max();
+ }
+ return sign * r.GetLow64();
+}
diff --git a/src/pow.h b/src/pow.h
index a5d32db178..e864a474cc 100644
--- a/src/pow.h
+++ b/src/pow.h
@@ -22,4 +22,7 @@ unsigned int CalculateNextWorkRequired(const CBlockIndex* pindexLast, int64_t nF
bool CheckProofOfWork(uint256 hash, unsigned int nBits, const Consensus::Params&);
arith_uint256 GetBlockProof(const CBlockIndex& block);
+/** Return the time it would take to redo the work difference between from and to, assuming the current hashrate corresponds to the difficulty at tip, in seconds. */
+int64_t GetBlockProofEquivalentTime(const CBlockIndex& to, const CBlockIndex& from, const CBlockIndex& tip, const Consensus::Params&);
+
#endif // BITCOIN_POW_H
diff --git a/src/pubkey.cpp b/src/pubkey.cpp
index a4c046bff5..bdab137600 100644
--- a/src/pubkey.cpp
+++ b/src/pubkey.cpp
@@ -54,13 +54,13 @@ bool CPubKey::Decompress() {
return true;
}
-bool CPubKey::Derive(CPubKey& pubkeyChild, unsigned char ccChild[32], unsigned int nChild, const unsigned char cc[32]) const {
+bool CPubKey::Derive(CPubKey& pubkeyChild, ChainCode &ccChild, unsigned int nChild, const ChainCode& cc) const {
assert(IsValid());
assert((nChild >> 31) == 0);
assert(begin() + 33 == end());
unsigned char out[64];
BIP32Hash(cc, nChild, *begin(), begin()+1, out);
- memcpy(ccChild, out+32, 32);
+ memcpy(ccChild.begin(), out+32, 32);
CECKey key;
bool ret = key.SetPubKey(begin(), size());
ret &= key.TweakPublic(out);
@@ -75,7 +75,7 @@ void CExtPubKey::Encode(unsigned char code[74]) const {
memcpy(code+1, vchFingerprint, 4);
code[5] = (nChild >> 24) & 0xFF; code[6] = (nChild >> 16) & 0xFF;
code[7] = (nChild >> 8) & 0xFF; code[8] = (nChild >> 0) & 0xFF;
- memcpy(code+9, vchChainCode, 32);
+ memcpy(code+9, chaincode.begin(), 32);
assert(pubkey.size() == 33);
memcpy(code+41, pubkey.begin(), 33);
}
@@ -84,7 +84,7 @@ void CExtPubKey::Decode(const unsigned char code[74]) {
nDepth = code[0];
memcpy(vchFingerprint, code+1, 4);
nChild = (code[5] << 24) | (code[6] << 16) | (code[7] << 8) | code[8];
- memcpy(vchChainCode, code+9, 32);
+ memcpy(chaincode.begin(), code+9, 32);
pubkey.Set(code+41, code+74);
}
@@ -93,5 +93,5 @@ bool CExtPubKey::Derive(CExtPubKey &out, unsigned int nChild) const {
CKeyID id = pubkey.GetID();
memcpy(&out.vchFingerprint[0], &id, 4);
out.nChild = nChild;
- return pubkey.Derive(out.pubkey, out.vchChainCode, nChild, vchChainCode);
+ return pubkey.Derive(out.pubkey, out.chaincode, nChild, chaincode);
}
diff --git a/src/pubkey.h b/src/pubkey.h
index b0768d4f47..cce9c826e5 100644
--- a/src/pubkey.h
+++ b/src/pubkey.h
@@ -31,6 +31,8 @@ public:
CKeyID(const uint160& in) : uint160(in) {}
};
+typedef uint256 ChainCode;
+
/** An encapsulated public key. */
class CPubKey
{
@@ -182,20 +184,20 @@ public:
bool Decompress();
//! Derive BIP32 child pubkey.
- bool Derive(CPubKey& pubkeyChild, unsigned char ccChild[32], unsigned int nChild, const unsigned char cc[32]) const;
+ bool Derive(CPubKey& pubkeyChild, ChainCode &ccChild, unsigned int nChild, const ChainCode& cc) const;
};
struct CExtPubKey {
unsigned char nDepth;
unsigned char vchFingerprint[4];
unsigned int nChild;
- unsigned char vchChainCode[32];
+ ChainCode chaincode;
CPubKey pubkey;
- friend bool operator==(const CExtPubKey& a, const CExtPubKey& b)
+ friend bool operator==(const CExtPubKey &a, const CExtPubKey &b)
{
return a.nDepth == b.nDepth && memcmp(&a.vchFingerprint[0], &b.vchFingerprint[0], 4) == 0 && a.nChild == b.nChild &&
- memcmp(&a.vchChainCode[0], &b.vchChainCode[0], 32) == 0 && a.pubkey == b.pubkey;
+ a.chaincode == b.chaincode && a.pubkey == b.pubkey;
}
void Encode(unsigned char code[74]) const;
diff --git a/src/qt/askpassphrasedialog.cpp b/src/qt/askpassphrasedialog.cpp
index 229139e65c..441814ff07 100644
--- a/src/qt/askpassphrasedialog.cpp
+++ b/src/qt/askpassphrasedialog.cpp
@@ -62,7 +62,7 @@ AskPassphraseDialog::AskPassphraseDialog(Mode mode, QWidget *parent) :
break;
case ChangePass: // Ask old passphrase + new passphrase x2
setWindowTitle(tr("Change passphrase"));
- ui->warningLabel->setText(tr("Enter the old and new passphrase to the wallet."));
+ ui->warningLabel->setText(tr("Enter the old passphrase and new passphrase to the wallet."));
break;
}
textChanged();
diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp
index 069601ab67..8740b98b70 100644
--- a/src/qt/bitcoin.cpp
+++ b/src/qt/bitcoin.cpp
@@ -26,6 +26,7 @@
#include "init.h"
#include "main.h"
#include "rpcserver.h"
+#include "scheduler.h"
#include "ui_interface.h"
#include "util.h"
@@ -178,6 +179,7 @@ signals:
private:
boost::thread_group threadGroup;
+ CScheduler scheduler;
/// Pass fatal exception message to UI thread
void handleRunawayException(const std::exception *e);
@@ -258,7 +260,7 @@ void BitcoinCore::initialize()
try
{
qDebug() << __func__ << ": Running AppInit2 in thread";
- int rv = AppInit2(threadGroup);
+ int rv = AppInit2(threadGroup, scheduler);
if(rv)
{
/* Start a dummy RPC thread if no RPC thread is active yet
@@ -532,7 +534,7 @@ int main(int argc, char *argv[])
// Now that QSettings are accessible, initialize translations
QTranslator qtTranslatorBase, qtTranslator, translatorBase, translator;
initTranslations(qtTranslatorBase, qtTranslator, translatorBase, translator);
- uiInterface.Translate.connect(Translate);
+ translationInterface.Translate.connect(Translate);
// Show help message immediately after parsing command-line options (for "-lang") and setting locale,
// but before showing splash screen.
diff --git a/src/qt/bitcoin.qrc b/src/qt/bitcoin.qrc
index 63af146fd0..c899e95506 100644
--- a/src/qt/bitcoin.qrc
+++ b/src/qt/bitcoin.qrc
@@ -45,6 +45,7 @@
<file alias="about">res/icons/about.png</file>
<file alias="about_qt">res/icons/about_qt.png</file>
<file alias="verify">res/icons/verify.png</file>
+ <file alias="warning">res/icons/warning.png</file>
</qresource>
<qresource prefix="/movies">
<file alias="spinner-000">res/movies/spinner-000.png</file>
diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp
index 670d54c7e3..efba0f5e18 100644
--- a/src/qt/bitcoingui.cpp
+++ b/src/qt/bitcoingui.cpp
@@ -414,6 +414,7 @@ void BitcoinGUI::createToolBars()
if(walletFrame)
{
QToolBar *toolbar = addToolBar(tr("Tabs toolbar"));
+ toolbar->setMovable(false);
toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
toolbar->addAction(overviewAction);
toolbar->addAction(sendCoinsAction);
@@ -684,7 +685,7 @@ void BitcoinGUI::setNumBlocks(int count, const QDateTime& blockDate)
QDateTime currentDate = QDateTime::currentDateTime();
qint64 secs = blockDate.secsTo(currentDate);
- tooltip = tr("Processed %n blocks of transaction history.", "", count);
+ tooltip = tr("Processed %n block(s) of transaction history.", "", count);
// Set icon state: spinning if catching up, tick otherwise
if(secs < 90*60)
diff --git a/src/qt/bitcoinstrings.cpp b/src/qt/bitcoinstrings.cpp
index 7f372debad..b259d038f2 100644
--- a/src/qt/bitcoinstrings.cpp
+++ b/src/qt/bitcoinstrings.cpp
@@ -93,8 +93,8 @@ QT_TRANSLATE_NOOP("bitcoin-core", ""
"Maximum size of data in data carrier transactions we relay and mine "
"(default: %u)"),
QT_TRANSLATE_NOOP("bitcoin-core", ""
-"Maximum total fees to use in a single wallet transaction, setting too low "
-"may abort large transactions (default: %s)"),
+"Maximum total fees to use in a single wallet transaction; setting this too "
+"low may abort large transactions (default: %s)"),
QT_TRANSLATE_NOOP("bitcoin-core", ""
"Number of seconds to keep misbehaving peers from reconnecting (default: %u)"),
QT_TRANSLATE_NOOP("bitcoin-core", ""
@@ -109,7 +109,10 @@ QT_TRANSLATE_NOOP("bitcoin-core", ""
"isolation (default: %u)"),
QT_TRANSLATE_NOOP("bitcoin-core", ""
"Reduce storage requirements by pruning (deleting) old blocks. This mode "
-"disables wallet support and is incompatible with -txindex."),
+"disables wallet support and is incompatible with -txindex. Warning: "
+"Reverting this setting requires re-downloading the entire blockchain. "
+"(default: 0 = disable pruning blocks, >%u = target size in MiB to use for "
+"block files)"),
QT_TRANSLATE_NOOP("bitcoin-core", ""
"Require high priority for relaying free or low-fee transactions (default: %u)"),
QT_TRANSLATE_NOOP("bitcoin-core", ""
@@ -158,9 +161,6 @@ QT_TRANSLATE_NOOP("bitcoin-core", ""
"Warning: Please check that your computer's date and time are correct! If "
"your clock is wrong Bitcoin Core will not work properly."),
QT_TRANSLATE_NOOP("bitcoin-core", ""
-"Warning: Reverting this setting requires re-downloading the entire "
-"blockchain."),
-QT_TRANSLATE_NOOP("bitcoin-core", ""
"Warning: The network does not appear to fully agree! Some miners appear to "
"be experiencing issues."),
QT_TRANSLATE_NOOP("bitcoin-core", ""
@@ -184,14 +184,13 @@ QT_TRANSLATE_NOOP("bitcoin-core", ""
"mode. This will redownload the entire blockchain"),
QT_TRANSLATE_NOOP("bitcoin-core", "(default: %s)"),
QT_TRANSLATE_NOOP("bitcoin-core", "(default: %u)"),
-QT_TRANSLATE_NOOP("bitcoin-core", "(default: 0 = disable pruning blocks,"),
QT_TRANSLATE_NOOP("bitcoin-core", "(default: 1)"),
QT_TRANSLATE_NOOP("bitcoin-core", "<category> can be:"),
-QT_TRANSLATE_NOOP("bitcoin-core", ">%u = target size in MiB to use for block files)"),
QT_TRANSLATE_NOOP("bitcoin-core", "Accept command line and JSON-RPC commands"),
QT_TRANSLATE_NOOP("bitcoin-core", "Accept connections from outside (default: 1 if no -proxy or -connect)"),
QT_TRANSLATE_NOOP("bitcoin-core", "Accept public REST requests (default: %u)"),
QT_TRANSLATE_NOOP("bitcoin-core", "Acceptable ciphers (default: %s)"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Activating best chain..."),
QT_TRANSLATE_NOOP("bitcoin-core", "Add a node to connect to and attempt to keep the connection open"),
QT_TRANSLATE_NOOP("bitcoin-core", "Allow DNS lookups for -addnode, -seednode and -connect"),
QT_TRANSLATE_NOOP("bitcoin-core", "Allow self signed root certificates (default: 0)"),
@@ -276,7 +275,7 @@ QT_TRANSLATE_NOOP("bitcoin-core", "RPC server options:"),
QT_TRANSLATE_NOOP("bitcoin-core", "RPC support for HTTP persistent connections (default: %d)"),
QT_TRANSLATE_NOOP("bitcoin-core", "Randomly drop 1 of every <n> network messages"),
QT_TRANSLATE_NOOP("bitcoin-core", "Randomly fuzz 1 of every <n> network messages"),
-QT_TRANSLATE_NOOP("bitcoin-core", "Rebuild block chain index from current blk000??.dat files"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Rebuild block chain index from current blk000??.dat files on startup"),
QT_TRANSLATE_NOOP("bitcoin-core", "Relay and mine data carrier transactions (default: %u)"),
QT_TRANSLATE_NOOP("bitcoin-core", "Relay non-P2SH multisig (default: %u)"),
QT_TRANSLATE_NOOP("bitcoin-core", "Rescan the block chain for missing wallet transactions"),
@@ -332,7 +331,7 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Wallet %s resides outside data directory %s")
QT_TRANSLATE_NOOP("bitcoin-core", "Wallet needed to be rewritten: restart Bitcoin Core to complete"),
QT_TRANSLATE_NOOP("bitcoin-core", "Wallet options:"),
QT_TRANSLATE_NOOP("bitcoin-core", "Warning"),
-QT_TRANSLATE_NOOP("bitcoin-core", "Warning: This version is obsolete, upgrade required!"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Warning: This version is obsolete; upgrade required!"),
QT_TRANSLATE_NOOP("bitcoin-core", "Warning: Unsupported argument -benchmark ignored, use -debug=bench."),
QT_TRANSLATE_NOOP("bitcoin-core", "Warning: Unsupported argument -debugnet ignored, use -debug=net."),
QT_TRANSLATE_NOOP("bitcoin-core", "You need to rebuild the database using -reindex to change -txindex"),
diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp
index dc32f81571..8e29cdeb06 100644
--- a/src/qt/clientmodel.cpp
+++ b/src/qt/clientmodel.cpp
@@ -89,7 +89,7 @@ QDateTime ClientModel::getLastBlockDate() const
double ClientModel::getVerificationProgress() const
{
LOCK(cs_main);
- return Checkpoints::GuessVerificationProgress(chainActive.Tip());
+ return Checkpoints::GuessVerificationProgress(Params().Checkpoints(), chainActive.Tip());
}
void ClientModel::updateTimer()
diff --git a/src/qt/coincontroldialog.cpp b/src/qt/coincontroldialog.cpp
index 0a60632bfa..7531fbddcb 100644
--- a/src/qt/coincontroldialog.cpp
+++ b/src/qt/coincontroldialog.cpp
@@ -129,11 +129,11 @@ CoinControlDialog::CoinControlDialog(QWidget *parent) :
ui->treeWidget->setColumnWidth(COLUMN_DATE, 110);
ui->treeWidget->setColumnWidth(COLUMN_CONFIRMATIONS, 100);
ui->treeWidget->setColumnWidth(COLUMN_PRIORITY, 100);
- ui->treeWidget->setColumnHidden(COLUMN_TXHASH, true); // store transacton hash in this column, but dont show it
- ui->treeWidget->setColumnHidden(COLUMN_VOUT_INDEX, true); // store vout index in this column, but dont show it
- ui->treeWidget->setColumnHidden(COLUMN_AMOUNT_INT64, true); // store amount int64 in this column, but dont show it
- ui->treeWidget->setColumnHidden(COLUMN_PRIORITY_INT64, true); // store priority int64 in this column, but dont show it
- ui->treeWidget->setColumnHidden(COLUMN_DATE_INT64, true); // store date int64 in this column, but dont show it
+ ui->treeWidget->setColumnHidden(COLUMN_TXHASH, true); // store transacton hash in this column, but don't show it
+ ui->treeWidget->setColumnHidden(COLUMN_VOUT_INDEX, true); // store vout index in this column, but don't show it
+ ui->treeWidget->setColumnHidden(COLUMN_AMOUNT_INT64, true); // store amount int64 in this column, but don't show it
+ ui->treeWidget->setColumnHidden(COLUMN_PRIORITY_INT64, true); // store priority int64 in this column, but don't show it
+ ui->treeWidget->setColumnHidden(COLUMN_DATE_INT64, true); // store date int64 in this column, but don't show it
// default view is sorted by amount desc
sortView(COLUMN_AMOUNT_INT64, Qt::DescendingOrder);
@@ -408,8 +408,8 @@ void CoinControlDialog::viewItemChanged(QTreeWidgetItem* item, int column)
}
// todo: this is a temporary qt5 fix: when clicking a parent node in tree mode, the parent node
- // including all childs are partially selected. But the parent node should be fully selected
- // as well as the childs. Childs should never be partially selected in the first place.
+ // including all children are partially selected. But the parent node should be fully selected
+ // as well as the children. Children should never be partially selected in the first place.
// Please remove this ugly fix, once the bug is solved upstream.
#if QT_VERSION >= 0x050000
else if (column == COLUMN_CHECKBOX && item->childCount() > 0)
@@ -635,15 +635,15 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog)
l7->setStyleSheet((fDust) ? "color:red;" : ""); // Dust = "yes"
// tool tips
- QString toolTip1 = tr("This label turns red, if the transaction size is greater than 1000 bytes.") + "<br /><br />";
+ QString toolTip1 = tr("This label turns red if the transaction size is greater than 1000 bytes.") + "<br /><br />";
toolTip1 += tr("This means a fee of at least %1 per kB is required.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, CWallet::minTxFee.GetFeePerK())) + "<br /><br />";
toolTip1 += tr("Can vary +/- 1 byte per input.");
QString toolTip2 = tr("Transactions with higher priority are more likely to get included into a block.") + "<br /><br />";
- toolTip2 += tr("This label turns red, if the priority is smaller than \"medium\".") + "<br /><br />";
+ toolTip2 += tr("This label turns red if the priority is smaller than \"medium\".") + "<br /><br />";
toolTip2 += tr("This means a fee of at least %1 per kB is required.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, CWallet::minTxFee.GetFeePerK()));
- QString toolTip3 = tr("This label turns red, if any recipient receives an amount smaller than %1.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, ::minRelayTxFee.GetFee(546)));
+ QString toolTip3 = tr("This label turns red if any recipient receives an amount smaller than %1.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, ::minRelayTxFee.GetFee(546)));
// how many satoshis the estimated fee can vary per byte we guess wrong
double dFeeVary;
diff --git a/src/qt/forms/overviewpage.ui b/src/qt/forms/overviewpage.ui
index 53d416ef38..6d792d1475 100644
--- a/src/qt/forms/overviewpage.ui
+++ b/src/qt/forms/overviewpage.ui
@@ -59,21 +59,35 @@
</widget>
</item>
<item>
- <widget class="QLabel" name="labelWalletStatus">
- <property name="cursor">
- <cursorShape>WhatsThisCursor</cursorShape>
+ <widget class="QPushButton" name="labelWalletStatus">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>30</width>
+ <height>16777215</height>
+ </size>
</property>
<property name="toolTip">
<string>The displayed information may be out of date. Your wallet automatically synchronizes with the Bitcoin network after a connection is established, but this process has not completed yet.</string>
</property>
- <property name="styleSheet">
- <string notr="true">QLabel { color: red; }</string>
- </property>
<property name="text">
- <string notr="true">(out of sync)</string>
+ <string/>
</property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+ <property name="icon">
+ <iconset resource="../bitcoin.qrc">
+ <normaloff>:/icons/warning</normaloff>
+ <disabledoff>:/icons/warning</disabledoff>:/icons/warning</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>24</width>
+ <height>24</height>
+ </size>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
</property>
</widget>
</item>
@@ -431,21 +445,35 @@
</widget>
</item>
<item>
- <widget class="QLabel" name="labelTransactionsStatus">
- <property name="cursor">
- <cursorShape>WhatsThisCursor</cursorShape>
+ <widget class="QPushButton" name="labelTransactionsStatus">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>30</width>
+ <height>16777215</height>
+ </size>
</property>
<property name="toolTip">
<string>The displayed information may be out of date. Your wallet automatically synchronizes with the Bitcoin network after a connection is established, but this process has not completed yet.</string>
</property>
- <property name="styleSheet">
- <string notr="true">QLabel { color: red; }</string>
- </property>
<property name="text">
- <string notr="true">(out of sync)</string>
+ <string/>
</property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ <property name="icon">
+ <iconset resource="../bitcoin.qrc">
+ <normaloff>:/icons/warning</normaloff>
+ <disabledoff>:/icons/warning</disabledoff>:/icons/warning</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>24</width>
+ <height>24</height>
+ </size>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
</property>
</widget>
</item>
diff --git a/src/qt/forms/sendcoinsentry.ui b/src/qt/forms/sendcoinsentry.ui
index 48d0dd093c..df06f36833 100644
--- a/src/qt/forms/sendcoinsentry.ui
+++ b/src/qt/forms/sendcoinsentry.ui
@@ -21,15 +21,21 @@
<string>This is a normal payment.</string>
</property>
<property name="frameShape">
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Sunken</enum>
+ <enum>QFrame::NoFrame</enum>
</property>
<layout class="QGridLayout" name="gridLayout">
- <property name="spacing">
+ <property name="topMargin">
+ <number>8</number>
+ </property>
+ <property name="bottomMargin">
+ <number>4</number>
+ </property>
+ <property name="horizontalSpacing">
<number>12</number>
</property>
+ <property name="verticalSpacing">
+ <number>8</number>
+ </property>
<item row="0" column="0">
<widget class="QLabel" name="payToLabel">
<property name="text">
@@ -193,6 +199,13 @@
</property>
</widget>
</item>
+ <item row="4" column="0" colspan="2">
+ <widget class="Line" name="line">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
<widget class="QFrame" name="SendCoins_UnauthenticatedPaymentRequest">
@@ -618,10 +631,7 @@
<bool>true</bool>
</property>
<property name="frameShape">
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Sunken</enum>
+ <enum>QFrame::NoFrame</enum>
</property>
<layout class="QGridLayout" name="gridLayout_is">
<property name="spacing">
@@ -1150,10 +1160,7 @@
<bool>true</bool>
</property>
<property name="frameShape">
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Sunken</enum>
+ <enum>QFrame::NoFrame</enum>
</property>
<layout class="QGridLayout" name="gridLayout_s">
<property name="spacing">
diff --git a/src/qt/locale/bitcoin_af_ZA.ts b/src/qt/locale/bitcoin_af_ZA.ts
index e22591e8c5..5ef7d3fd37 100644
--- a/src/qt/locale/bitcoin_af_ZA.ts
+++ b/src/qt/locale/bitcoin_af_ZA.ts
@@ -68,10 +68,6 @@
<translation>Verander wagwoord</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Tik asseblief die ou en nuwe wagwoord vir die beursie in.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Bevestig beursie enkripsie.</translation>
</message>
@@ -485,8 +481,8 @@
<translation>Tipe</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adres</translation>
+ <source>Label</source>
+ <translation>Etiket</translation>
</message>
<message>
<source>Received with</source>
diff --git a/src/qt/locale/bitcoin_ar.ts b/src/qt/locale/bitcoin_ar.ts
index 116a1eea76..a2e4c376b8 100644
--- a/src/qt/locale/bitcoin_ar.ts
+++ b/src/qt/locale/bitcoin_ar.ts
@@ -152,10 +152,6 @@
<translation>تغيير كلمة المرور</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>أدخل كلمة المرور القديمة والجديدة للمحفظة.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>تأكيد تشفير المحفظة</translation>
</message>
@@ -184,10 +180,6 @@
<translation>أدخل عبارة مرور جديدة إلى المحفظة. الرجاء استخدام عبارة مرور تتكون من10 حروف عشوائية على الاقل, أو أكثر من 7 كلمات</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>بتكوين سوف يغلق الآن لإنهاء عملية التشفير. تذكر أن التشفير لا يستطيع حماية محفظتك تمامًا من السرقة من خلال البرمجيات الخبيثة التي تصيب جهازك </translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>فشل تشفير المحفظة</translation>
</message>
@@ -300,17 +292,13 @@
</message>
<message>
<source>Reindexing blocks on disk...</source>
- <translation>إعادة فهرسة الكتل على القرص</translation>
+ <translation>إعادة الفهرسة الكتل على القرص ...</translation>
</message>
<message>
<source>Send coins to a Bitcoin address</source>
<translation>ارسل عملات الى عنوان بيتكوين</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>تعديل إعدادات bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>احفظ نسخة احتياطية للمحفظة في مكان آخر</translation>
</message>
@@ -352,7 +340,7 @@
</message>
<message>
<source>Encrypt the private keys that belong to your wallet</source>
- <translation>تشفير المفتاح الخاص لمحفظتك</translation>
+ <translation>تشفير المفتاح الخاص بمحفظتك</translation>
</message>
<message>
<source>&amp;File</source>
@@ -378,18 +366,6 @@
<source>&amp;About Bitcoin Core</source>
<translation>حول bitcoin core</translation>
</message>
- <message numerus="yes">
- <source>%n hour(s)</source>
- <translation><numerusform>%n ساعة</numerusform><numerusform>%n ساعة</numerusform><numerusform>%n ساعة</numerusform><numerusform>%n ساعات</numerusform><numerusform>%n ساعات</numerusform><numerusform>%n ساعات</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n day(s)</source>
- <translation><numerusform>%n يوم</numerusform><numerusform>%n يوم</numerusform><numerusform>%n يوم</numerusform><numerusform>%n أيام</numerusform><numerusform>%n أيام</numerusform><numerusform>%n ايام</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>%n اسبوع</numerusform><numerusform>%n اسبوع</numerusform><numerusform>%n اسبوع</numerusform><numerusform>%n اسابيع</numerusform><numerusform>%n اسابيع</numerusform><numerusform>%n اسابيع</numerusform></translation>
- </message>
<message>
<source>Error</source>
<translation>خطأ</translation>
@@ -438,11 +414,11 @@
<name>CoinControlDialog</name>
<message>
<source>Quantity:</source>
- <translation>الكمية:</translation>
+ <translation>الكمية :</translation>
</message>
<message>
<source>Amount:</source>
- <translation>القيمة</translation>
+ <translation>القيمة :</translation>
</message>
<message>
<source>Priority:</source>
@@ -482,7 +458,7 @@
</message>
<message>
<source>Copy address</source>
- <translation> انسخ العنوان</translation>
+ <translation> انسخ عنوان</translation>
</message>
<message>
<source>Copy label</source>
@@ -490,15 +466,15 @@
</message>
<message>
<source>Copy amount</source>
- <translation>نسخ القيمة</translation>
+ <translation>نسخ الكمية</translation>
</message>
<message>
<source>Copy transaction ID</source>
- <translation>نسخ رقم المعاملة</translation>
+ <translation>نسخ رقم العملية</translation>
</message>
<message>
<source>Copy quantity</source>
- <translation>نسخ الكمية</translation>
+ <translation>نسخ الكمية </translation>
</message>
<message>
<source>Copy fee</source>
@@ -514,7 +490,7 @@
</message>
<message>
<source>Copy change</source>
- <translation>نسخ التغييرات</translation>
+ <translation>نسخ التعديل</translation>
</message>
<message>
<source>highest</source>
@@ -641,10 +617,6 @@
<source>Usage:</source>
<translation>المستخدم</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>خيارات UI</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -811,10 +783,6 @@
<translation>المبلغ</translation>
</message>
<message>
- <source>UNKNOWN</source>
- <translation>غير معروف</translation>
- </message>
- <message>
<source>N/A</source>
<translation>غير معروف</translation>
</message>
@@ -949,7 +917,7 @@
</message>
<message>
<source>&amp;Label:</source>
- <translation>&amp;الوصف:</translation>
+ <translation>&amp;وصف :</translation>
</message>
<message>
<source>&amp;Message:</source>
@@ -985,7 +953,7 @@
</message>
<message>
<source>Copy amount</source>
- <translation>نسخ القيمة</translation>
+ <translation>نسخ الكمية</translation>
</message>
</context>
<context>
@@ -1028,7 +996,7 @@
</message>
<message>
<source>Message</source>
- <translation>رسالة</translation>
+ <translation>رسالة </translation>
</message>
</context>
<context>
@@ -1043,7 +1011,7 @@
</message>
<message>
<source>Message</source>
- <translation>رسالة</translation>
+ <translation>رسالة </translation>
</message>
<message>
<source>Amount</source>
@@ -1134,7 +1102,7 @@
</message>
<message>
<source>Copy amount</source>
- <translation>نسخ القيمة</translation>
+ <translation>نسخ الكمية</translation>
</message>
<message>
<source>Copy fee</source>
@@ -1193,7 +1161,7 @@
</message>
<message>
<source>Paste address from clipboard</source>
- <translation>الصق العنوان من لوحة المفاتيح</translation>
+ <translation>انسخ العنوان من لوحة المفاتيح</translation>
</message>
<message>
<source>Alt+P</source>
@@ -1437,10 +1405,6 @@
<translation>النوع</translation>
</message>
<message>
- <source>Address</source>
- <translation>عنوان</translation>
- </message>
- <message>
<source>This block was not received by any other nodes and will probably not be accepted!</source>
<translation>لم يتم تلقى هذه الكتلة (Block) من قبل أي العقد الأخرى وربما لن تكون مقبولة!</translation>
</message>
@@ -1453,6 +1417,10 @@
<translation>غير متصل</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>وصف</translation>
+ </message>
+ <message>
<source>Received with</source>
<translation>استقبل مع</translation>
</message>
@@ -1489,10 +1457,6 @@
<translation>نوع المعاملات</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>عنوان وجهة المعاملة</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>المبلغ الذي أزيل أو أضيف الى الرصيد</translation>
</message>
@@ -1723,10 +1687,6 @@
<translation>تحذير</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>تحذير : هذا الاصدار قديم , يتطلب التحديث</translation>
- </message>
- <message>
<source>Upgrade wallet to latest format</source>
<translation>تحديث المحفظة للنسخة الاخيرة</translation>
</message>
diff --git a/src/qt/locale/bitcoin_be_BY.ts b/src/qt/locale/bitcoin_be_BY.ts
index a3dd430442..6db3f58061 100644
--- a/src/qt/locale/bitcoin_be_BY.ts
+++ b/src/qt/locale/bitcoin_be_BY.ts
@@ -2,6 +2,10 @@
<context>
<name>AddressBookPage</name>
<message>
+ <source>Right-click to edit address or label</source>
+ <translation>Правы клік, каб рэдагаваць адрас ці метку</translation>
+ </message>
+ <message>
<source>Create a new address</source>
<translation>Стварыць новы адрас</translation>
</message>
@@ -62,10 +66,26 @@
<translation>адрасы Прымання</translation>
</message>
<message>
+ <source>These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
+ <translation>Тут знаходзяцца Біткойн-адрасы для высылання плацяжоў. Заўсёды спраўджвайце колькасць і адрас прызначэння перад здзяйсненнем транзакцыі.</translation>
+ </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>Тут знаходзяцца Біткойн-адрасы для прымання плацяжоў. Пажадана выкарыстоўваць новы адрас для кожнай транзакцыі.</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Label</source>
+ <translation>Капіяваць Метку</translation>
+ </message>
+ <message>
<source>&amp;Edit</source>
<translation>Рэдагаваць</translation>
</message>
<message>
+ <source>Export Address List</source>
+ <translation>Экспартаваць Спіс Адрасоў</translation>
+ </message>
+ <message>
<source>Comma separated file (*.csv)</source>
<translation>Коскамі падзелены файл (*.csv)</translation>
</message>
@@ -73,7 +93,11 @@
<source>Exporting Failed</source>
<translation>Экспартаванне няўдалае</translation>
</message>
- </context>
+ <message>
+ <source>There was an error trying to save the address list to %1. Please try again.</source>
+ <translation>Адбылася памылка падчас спробы захаваць адрас у %1. Паспрабуйце зноў.</translation>
+ </message>
+</context>
<context>
<name>AddressTableModel</name>
<message>
@@ -92,6 +116,10 @@
<context>
<name>AskPassphraseDialog</name>
<message>
+ <source>Passphrase Dialog</source>
+ <translation>Дыялог сакрэтнай фразы</translation>
+ </message>
+ <message>
<source>Enter passphrase</source>
<translation>Увядзіце кодавую фразу</translation>
</message>
@@ -128,10 +156,6 @@
<translation>Змяніць пароль</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Увядзіце стары і новы пароль да гаманца.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Пацвердзіце шыфраванне гаманца</translation>
</message>
@@ -144,6 +168,14 @@
<translation>Ці ўпэўненыя вы, што жадаеце зашыфраваць свой гаманец?</translation>
</message>
<message>
+ <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+ <translation>Bitcoin Core зараз будзе зачынены, каб фіналізаваць працэс шыфравання. Памятайце, што шыфраванне вашага гаманца не гарантуе абсалютную абарону ад магчымасці крадзяжу біткойнаў шкоднымі праграмамі, якія могуць інфікаваць ваш камп'ютар.</translation>
+ </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>ВАЖНА: Усе папярэднія копіі гаманца варта замяніць новым зашыфраваным файлам. У мэтах бяспекі папярэднія копіі незашыфраванага файла-гаманца стануць неўжывальнымі, калі вы станеце карыстацца новым зашыфраваным гаманцом.</translation>
+ </message>
+ <message>
<source>Warning: The Caps Lock key is on!</source>
<translation>Увага: Caps Lock уключаны!</translation>
</message>
@@ -152,8 +184,12 @@
<translation>Гаманец зашыфраваны</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin зачыняецца дзеля завяршэння працэсса шыфравання. Памятайце, што шыфраванне гаманца цалкам абараняе вашыя сродкі ад скрадання шкоднымі праграмамі якія могуць пранікнуць у ваш камп'ютар.</translation>
+ <source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;ten or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
+ <translation>Увядзіце новы пароль для гаманца.&lt;br/&gt;Парольная фраза павинна складацца&lt;b&gt; не меньш чым з дзесяці сімвалаў&lt;/b&gt;, ці &lt;b&gt;больш чым з васьмі слоў&lt;/b&gt;.</translation>
+ </message>
+ <message>
+ <source>Enter the old passphrase and new passphrase to the wallet.</source>
+ <translation>Увядзіце стары пароль і новы пароль для гаманца.</translation>
</message>
<message>
<source>Wallet encryption failed</source>
@@ -173,7 +209,7 @@
</message>
<message>
<source>The passphrase entered for the wallet decryption was incorrect.</source>
- <translation>Уведзена пароль дзеля расшыфравання гаманца памылковы</translation>
+ <translation>Уведзены пароль для расшыфравання гаманца памылковы</translation>
</message>
<message>
<source>Wallet decryption failed</source>
@@ -239,10 +275,42 @@
<translation>Зашыфраваць Гаманец...</translation>
</message>
<message>
+ <source>&amp;Backup Wallet...</source>
+ <translation>Стварыць копію гаманца...</translation>
+ </message>
+ <message>
+ <source>&amp;Change Passphrase...</source>
+ <translation>&amp;Change Passphrase...</translation>
+ </message>
+ <message>
+ <source>&amp;Sending addresses...</source>
+ <translation>Адрасы дасылання...</translation>
+ </message>
+ <message>
+ <source>&amp;Receiving addresses...</source>
+ <translation>Адрасы прымання...</translation>
+ </message>
+ <message>
<source>Open &amp;URI...</source>
<translation>Адчыниць &amp;URI...</translation>
</message>
<message>
+ <source>Bitcoin Core client</source>
+ <translation>Bitcoin Core кліент</translation>
+ </message>
+ <message>
+ <source>Importing blocks from disk...</source>
+ <translation>Імпартуюцца блокі з дыску...</translation>
+ </message>
+ <message>
+ <source>Reindexing blocks on disk...</source>
+ <translation>Пераіндэксацыя блокаў на дыску...</translation>
+ </message>
+ <message>
+ <source>Send coins to a Bitcoin address</source>
+ <translation>Даслаць манеты на Біткойн-адрас</translation>
+ </message>
+ <message>
<source>Backup wallet to another location</source>
<translation>Зрабіце копію гаманца ў іншае месца</translation>
</message>
@@ -255,6 +323,18 @@
<translation>Вакно адладкі</translation>
</message>
<message>
+ <source>Open debugging and diagnostic console</source>
+ <translation>Адкрыць кансоль дыягностыкі і адладкі</translation>
+ </message>
+ <message>
+ <source>&amp;Verify message...</source>
+ <translation>Праверыць паведамленне...</translation>
+ </message>
+ <message>
+ <source>Bitcoin</source>
+ <translation>Біткойн</translation>
+ </message>
+ <message>
<source>Wallet</source>
<translation>Гаманец</translation>
</message>
@@ -267,6 +347,10 @@
<translation>Атрымаць</translation>
</message>
<message>
+ <source>Show information about Bitcoin Core</source>
+ <translation>Паказаць інфармацыю аб Bitcoin Core</translation>
+ </message>
+ <message>
<source>&amp;Show / Hide</source>
<translation>&amp;Паказаць / Схаваць</translation>
</message>
@@ -279,6 +363,14 @@
<translation>Зашыфраваць прыватныя ключы, якия належаць вашаму гаманцу</translation>
</message>
<message>
+ <source>Sign messages with your Bitcoin addresses to prove you own them</source>
+ <translation>Падпісаць паведамленне з дапамогай Біткойн-адраса каб даказаць, што яно належыць вам</translation>
+ </message>
+ <message>
+ <source>Verify messages to ensure they were signed with specified Bitcoin addresses</source>
+ <translation>Спраўдзіць паведамленне з дапамогай Біткойн-адраса каб даказаць, што яно належыць вам</translation>
+ </message>
+ <message>
<source>&amp;File</source>
<translation>Ф&amp;айл</translation>
</message>
@@ -290,15 +382,83 @@
<source>&amp;Help</source>
<translation>Дапамога</translation>
</message>
+ <message>
+ <source>Request payments (generates QR codes and bitcoin: URIs)</source>
+ <translation>Запатрабаваць плацёж (генеруецца QR-код для біткойн URI)</translation>
+ </message>
+ <message>
+ <source>&amp;About Bitcoin Core</source>
+ <translation>Аб Bitcoin Core</translation>
+ </message>
+ <message>
+ <source>Modify configuration options for Bitcoin Core</source>
+ <translation>Мадыфікаваць опцыі канфігурацыі Bitcoin Core</translation>
+ </message>
+ <message>
+ <source>Show the list of used sending addresses and labels</source>
+ <translation>Паказаць спіс адрасоў і метак для дасылання</translation>
+ </message>
+ <message>
+ <source>Show the list of used receiving addresses and labels</source>
+ <translation>Паказаць спіс адрасоў і метак для прымання</translation>
+ </message>
+ <message>
+ <source>&amp;Command-line options</source>
+ <translation>Опцыі каманднага радка</translation>
+ </message>
<message numerus="yes">
<source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n актыўнае злучэнне з Bitcoin-сецівам</numerusform><numerusform>%n актыўных злучэнняў з Bitcoin-сецівам</numerusform></translation>
+ <translation><numerusform>%n актыўнае злучэнне з сецівам Bitcoin</numerusform><numerusform>%n актыўных злучэнняў з сецівам Bitcoin</numerusform><numerusform>%n актыўных злучэнняў з сецівам Bitcoin</numerusform><numerusform>%n актыўных злучэнняў з сецівам Bitcoin</numerusform></translation>
+ </message>
+ <message>
+ <source>No block source available...</source>
+ <translation>Крыніца блокаў недасяжная...</translation>
+ </message>
+ <message numerus="yes">
+ <source>Processed %n block(s) of transaction history.</source>
+ <translation><numerusform>Апрацаваны %n блок гісторыі транзакцый.</numerusform><numerusform>Апрацавана %n блокі гісторыі транзакцый.</numerusform><numerusform>Апрацавана %n блокаў гісторыі транзакцый.</numerusform><numerusform>Апрацавана %n блокаў гісторыі транзакцый.</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%n hour(s)</source>
+ <translation><numerusform>%n гадзіна</numerusform><numerusform>%n гадзіны</numerusform><numerusform>%n гадзін</numerusform><numerusform>%n гадзін</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%n day(s)</source>
+ <translation><numerusform>%n дзень</numerusform><numerusform>%n дні</numerusform><numerusform>%n дзён</numerusform><numerusform>%n дзён</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%n week(s)</source>
+ <translation><numerusform>%n тыдзень</numerusform><numerusform>%n тыдні</numerusform><numerusform>%n тыдняў</numerusform><numerusform>%n тыдняў</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>%n year(s)</source>
+ <translation><numerusform>%n год</numerusform><numerusform>%n гады</numerusform><numerusform>%n гадоў</numerusform><numerusform>%n гадоў</numerusform></translation>
+ </message>
+ <message>
+ <source>%1 behind</source>
+ <translation>%1 таму</translation>
+ </message>
+ <message>
+ <source>Last received block was generated %1 ago.</source>
+ <translation>Апошні прыняты блок генераваны %1 таму.</translation>
+ </message>
+ <message>
+ <source>Transactions after this will not yet be visible.</source>
+ <translation>Транзакцыи пасля гэтай не будуць бачныя.</translation>
</message>
<message>
<source>Error</source>
<translation>Памылка</translation>
</message>
<message>
+ <source>Warning</source>
+ <translation>Увага</translation>
+ </message>
+ <message>
+ <source>Information</source>
+ <translation>Інфармацыя</translation>
+ </message>
+ <message>
<source>Up to date</source>
<translation>Сінхранізавана</translation>
</message>
@@ -307,26 +467,44 @@
<translation>Наганяем...</translation>
</message>
<message>
- <source>Sent transaction</source>
- <translation>Дасланыя транзакцыі</translation>
+ <source>Date: %1
+</source>
+ <translation>Дата: %1
+</translation>
</message>
<message>
- <source>Incoming transaction</source>
- <translation>Прынятыя транзакцыі</translation>
+ <source>Amount: %1
+</source>
+ <translation>Колькасць: %1
+</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
+ <source>Type: %1
</source>
- <translation>Дата: %1
-Колькасць: %2
-Тып: %3
-Адрас: %4
+ <translation>Тып: %1
</translation>
</message>
<message>
+ <source>Label: %1
+</source>
+ <translation>Метка: %1
+</translation>
+ </message>
+ <message>
+ <source>Address: %1
+</source>
+ <translation>Адрас: %1
+</translation>
+ </message>
+ <message>
+ <source>Sent transaction</source>
+ <translation>Дасланыя транзакцыі</translation>
+ </message>
+ <message>
+ <source>Incoming transaction</source>
+ <translation>Прынятыя транзакцыі</translation>
+ </message>
+ <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Гаманец &lt;b&gt;зашыфраваны&lt;/b&gt; і зараз &lt;b&gt;разблакаваны&lt;/b&gt;</translation>
</message>
@@ -337,14 +515,46 @@ Address: %4
</context>
<context>
<name>ClientModel</name>
- </context>
+ <message>
+ <source>Network Alert</source>
+ <translation>Трывога Сеціва</translation>
+ </message>
+</context>
<context>
<name>CoinControlDialog</name>
<message>
+ <source>Bytes:</source>
+ <translation>Байтаў:</translation>
+ </message>
+ <message>
<source>Amount:</source>
<translation>Колькасць:</translation>
</message>
<message>
+ <source>Priority:</source>
+ <translation>Прыярытэт:</translation>
+ </message>
+ <message>
+ <source>Fee:</source>
+ <translation>Камісія:</translation>
+ </message>
+ <message>
+ <source>Dust:</source>
+ <translation>Пыл:</translation>
+ </message>
+ <message>
+ <source>After Fee:</source>
+ <translation>Пасля камісіі:</translation>
+ </message>
+ <message>
+ <source>Tree mode</source>
+ <translation>Рэжым дрэва</translation>
+ </message>
+ <message>
+ <source>List mode</source>
+ <translation>Рэжым спіса</translation>
+ </message>
+ <message>
<source>Amount</source>
<translation>Колькасць</translation>
</message>
@@ -353,10 +563,18 @@ Address: %4
<translation>Дата</translation>
</message>
<message>
+ <source>Confirmations</source>
+ <translation>Пацверджанняў</translation>
+ </message>
+ <message>
<source>Confirmed</source>
<translation>Пацверджана</translation>
</message>
<message>
+ <source>Priority</source>
+ <translation>Прыярытэт</translation>
+ </message>
+ <message>
<source>Copy address</source>
<translation>Капіяваць адрас</translation>
</message>
@@ -373,6 +591,50 @@ Address: %4
<translation>Капіяваць ID транзакцыі</translation>
</message>
<message>
+ <source>highest</source>
+ <translation>найвышэйшы</translation>
+ </message>
+ <message>
+ <source>higher</source>
+ <translation>вышэйшы</translation>
+ </message>
+ <message>
+ <source>high</source>
+ <translation>высокі</translation>
+ </message>
+ <message>
+ <source>medium-high</source>
+ <translation>вышэй сярэдняга</translation>
+ </message>
+ <message>
+ <source>medium</source>
+ <translation>сярэдні</translation>
+ </message>
+ <message>
+ <source>low-medium</source>
+ <translation>ніжэй сярэдняга</translation>
+ </message>
+ <message>
+ <source>low</source>
+ <translation>нізкі</translation>
+ </message>
+ <message>
+ <source>lower</source>
+ <translation>ніжэйшы</translation>
+ </message>
+ <message>
+ <source>lowest</source>
+ <translation>найніжэйшы</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>так</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>не</translation>
+ </message>
+ <message>
<source>(no label)</source>
<translation>непазначаны</translation>
</message>
@@ -434,19 +696,47 @@ Address: %4
<translation>Аб Bitcoin Core</translation>
</message>
<message>
+ <source>Command-line options</source>
+ <translation>Опцыі каманднага радка</translation>
+ </message>
+ <message>
<source>Usage:</source>
<translation>Ужыванне:</translation>
</message>
- </context>
+ <message>
+ <source>command-line options</source>
+ <translation>опцыі каманднага радка</translation>
+ </message>
+</context>
<context>
<name>Intro</name>
<message>
+ <source>Welcome</source>
+ <translation>Вітаем</translation>
+ </message>
+ <message>
+ <source>Welcome to Bitcoin Core.</source>
+ <translation>Вітаем у Bitcoin Core.</translation>
+ </message>
+ <message>
<source>Error</source>
<translation>Памылка</translation>
</message>
- </context>
+ <message numerus="yes">
+ <source>%n GB of free space available</source>
+ <translation><numerusform>%n Гб вольнага месца даступна</numerusform><numerusform>%n Гб вольнага месца даступна</numerusform><numerusform>%n Гб вольнага месца даступна</numerusform><numerusform>%n Гб вольнага месца даступна</numerusform></translation>
+ </message>
+ <message numerus="yes">
+ <source>(of %n GB needed)</source>
+ <translation><numerusform>(з %n Гб патрэбна)</numerusform><numerusform>(з %n Гб патрэбна)</numerusform><numerusform>(з %n Гб патрэбна)</numerusform><numerusform>(з %n Гб патрэбна)</numerusform></translation>
+ </message>
+</context>
<context>
<name>OpenURIDialog</name>
+ <message>
+ <source>Open URI</source>
+ <translation>Адкрыць URI</translation>
+ </message>
</context>
<context>
<name>OptionsDialog</name>
@@ -454,6 +744,10 @@ Address: %4
<source>Options</source>
<translation>Опцыі</translation>
</message>
+ <message>
+ <source>MB</source>
+ <translation>Мб</translation>
+ </message>
</context>
<context>
<name>OverviewPage</name>
@@ -510,6 +804,10 @@ Address: %4
<source>Label</source>
<translation>Пазнака</translation>
</message>
+ <message>
+ <source>Message</source>
+ <translation>Паведамленне</translation>
+ </message>
</context>
<context>
<name>RecentRequestsTableModel</name>
@@ -522,6 +820,10 @@ Address: %4
<translation>Пазнака</translation>
</message>
<message>
+ <source>Message</source>
+ <translation>Паведамленне</translation>
+ </message>
+ <message>
<source>Amount</source>
<translation>Колькасць</translation>
</message>
@@ -537,14 +839,34 @@ Address: %4
<translation>Даслаць Манеты</translation>
</message>
<message>
+ <source>Bytes:</source>
+ <translation>Байтаў:</translation>
+ </message>
+ <message>
<source>Amount:</source>
<translation>Колькасць:</translation>
</message>
<message>
+ <source>Priority:</source>
+ <translation>Прыярытэт:</translation>
+ </message>
+ <message>
+ <source>Fee:</source>
+ <translation>Камісія:</translation>
+ </message>
+ <message>
+ <source>After Fee:</source>
+ <translation>Пасля камісіі:</translation>
+ </message>
+ <message>
<source>Send to multiple recipients at once</source>
<translation>Даслаць адразу некалькім атрымальнікам</translation>
</message>
<message>
+ <source>Dust:</source>
+ <translation>Пыл:</translation>
+ </message>
+ <message>
<source>Balance:</source>
<translation>Баланс:</translation>
</message>
@@ -599,7 +921,11 @@ Address: %4
<source>Alt+P</source>
<translation>Alt+P</translation>
</message>
- </context>
+ <message>
+ <source>Memo:</source>
+ <translation>Памятка:</translation>
+ </message>
+</context>
<context>
<name>ShutdownWindow</name>
</context>
@@ -631,10 +957,18 @@ Address: %4
</context>
<context>
<name>TrafficGraphWidget</name>
- </context>
+ <message>
+ <source>KB/s</source>
+ <translation>Кб/с</translation>
+ </message>
+</context>
<context>
<name>TransactionDesc</name>
<message>
+ <source>%1/offline</source>
+ <translation>%1/offline</translation>
+ </message>
+ <message>
<source>%1/unconfirmed</source>
<translation>%1/непацверджана</translation>
</message>
@@ -643,10 +977,22 @@ Address: %4
<translation>%1 пацверджанняў</translation>
</message>
<message>
+ <source>Status</source>
+ <translation>Статус</translation>
+ </message>
+ <message>
<source>Date</source>
<translation>Дата</translation>
</message>
<message>
+ <source>Message</source>
+ <translation>Паведамленне</translation>
+ </message>
+ <message>
+ <source>Comment</source>
+ <translation>Каментар</translation>
+ </message>
+ <message>
<source>Transaction ID</source>
<translation>ID</translation>
</message>
@@ -685,10 +1031,6 @@ Address: %4
<translation>Тып</translation>
</message>
<message>
- <source>Address</source>
- <translation>Адрас</translation>
- </message>
- <message>
<source>Confirmed (%1 confirmations)</source>
<translation>Пацверджана (%1 пацверджанняў)</translation>
</message>
@@ -701,6 +1043,10 @@ Address: %4
<translation>Згенеравана, але не прынята</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Пазнака</translation>
+ </message>
+ <message>
<source>Received with</source>
<translation>Прынята з</translation>
</message>
@@ -737,10 +1083,6 @@ Address: %4
<translation>Тып транзакцыі</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Адрас прызначэння транзакцыі.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Колькасць аднятая ці даданая да балансу.</translation>
</message>
@@ -911,14 +1253,106 @@ Address: %4
<translation>Ужываць тэставае сеціва</translation>
</message>
<message>
+ <source>Do you want to rebuild the block database now?</source>
+ <translation>Ці жадаеце вы перабудаваць зараз базу звестак блокаў?</translation>
+ </message>
+ <message>
+ <source>Error initializing block database</source>
+ <translation>Памылка ініцыялізацыі базвы звестак блокаў</translation>
+ </message>
+ <message>
+ <source>Error initializing wallet database environment %s!</source>
+ <translation>Памалка ініцыялізацыі асяроддзя базы звестак гаманца %s!</translation>
+ </message>
+ <message>
+ <source>Error loading block database</source>
+ <translation>Памылка загрузкі базвы звестак блокаў</translation>
+ </message>
+ <message>
+ <source>Error opening block database</source>
+ <translation>Памылка адчынення базы звестак блокаў</translation>
+ </message>
+ <message>
+ <source>Error: A fatal internal error occured, see debug.log for details</source>
+ <translation>Памылка: здарылася Фатальная унутраная памылка, глядзі debug.log для падрабязнасцяў</translation>
+ </message>
+ <message>
+ <source>Error: Disk space is low!</source>
+ <translation>Памылка: Замала вольнага месца на дыску!</translation>
+ </message>
+ <message>
+ <source>Importing...</source>
+ <translation>Імпартаванне...</translation>
+ </message>
+ <message>
+ <source>Not enough file descriptors available.</source>
+ <translation>Не хапае файлавых дэскрыптараў.</translation>
+ </message>
+ <message>
+ <source>Use UPnP to map the listening port (default: %u)</source>
+ <translation>Use UPnP to map the listening port (default: %u)</translation>
+ </message>
+ <message>
+ <source>Verifying blocks...</source>
+ <translation>Праверка блокаў...</translation>
+ </message>
+ <message>
+ <source>Verifying wallet...</source>
+ <translation>Праверка гаманца...</translation>
+ </message>
+ <message>
+ <source>Wallet options:</source>
+ <translation>Опцыі гаманца:</translation>
+ </message>
+ <message>
+ <source>Imports blocks from external blk000??.dat file</source>
+ <translation>Імпартаванне блокаў з вонкавага blk000??.dat файла</translation>
+ </message>
+ <message>
+ <source>Activating best chain...</source>
+ <translation>Актывацыя лепшага ланцуга...</translation>
+ </message>
+ <message>
+ <source>Information</source>
+ <translation>Інфармацыя</translation>
+ </message>
+ <message>
+ <source>RPC server options:</source>
+ <translation>Опцыі RPC сервера:</translation>
+ </message>
+ <message>
<source>Send trace/debug info to console instead of debug.log file</source>
<translation>Слаць trace/debug звесткі ў кансоль замест файла debug.log</translation>
</message>
<message>
+ <source>Signing transaction failed</source>
+ <translation>Памылка подпісу транзакцыі</translation>
+ </message>
+ <message>
+ <source>Start minimized</source>
+ <translation>Стартаваць ммінімізаванай</translation>
+ </message>
+ <message>
+ <source>This is experimental software.</source>
+ <translation>Гэта эксперыментальная праграма.</translation>
+ </message>
+ <message>
+ <source>Transaction amount too small</source>
+ <translation>Транзакцыя занадта малая</translation>
+ </message>
+ <message>
+ <source>Transaction too large</source>
+ <translation>Транзакцыя занадта вялікая</translation>
+ </message>
+ <message>
<source>Username for JSON-RPC connections</source>
<translation>Імя карыстальника для JSON-RPC злучэнняў</translation>
</message>
<message>
+ <source>Warning</source>
+ <translation>Увага</translation>
+ </message>
+ <message>
<source>Password for JSON-RPC connections</source>
<translation>Пароль для JSON-RPC злучэнняў</translation>
</message>
@@ -963,6 +1397,10 @@ Address: %4
<translation>Загружаем гаманец...</translation>
</message>
<message>
+ <source>Cannot downgrade wallet</source>
+ <translation>Немагчыма рэгрэсаваць гаманец</translation>
+ </message>
+ <message>
<source>Rescanning...</source>
<translation>Перасканаванне...</translation>
</message>
diff --git a/src/qt/locale/bitcoin_bg.ts b/src/qt/locale/bitcoin_bg.ts
index 950a5a9a50..2ef1c7160f 100644
--- a/src/qt/locale/bitcoin_bg.ts
+++ b/src/qt/locale/bitcoin_bg.ts
@@ -2,6 +2,10 @@
<context>
<name>AddressBookPage</name>
<message>
+ <source>Right-click to edit address or label</source>
+ <translation>Десен клик за промяна на адреса или името</translation>
+ </message>
+ <message>
<source>Create a new address</source>
<translation>Създаване на нов адрес</translation>
</message>
@@ -11,7 +15,7 @@
</message>
<message>
<source>Copy the currently selected address to the system clipboard</source>
- <translation>Копиране на избрания адрес</translation>
+ <translation>Копиране на избрания адрес към клипборда</translation>
</message>
<message>
<source>&amp;Copy</source>
@@ -23,7 +27,7 @@
</message>
<message>
<source>&amp;Copy Address</source>
- <translation>&amp;Копирай</translation>
+ <translation>&amp;Копирай адрес</translation>
</message>
<message>
<source>Delete the currently selected address from the list</source>
@@ -47,7 +51,7 @@
</message>
<message>
<source>Choose the address to receive coins with</source>
- <translation>Изберете адрес за получаване на монети</translation>
+ <translation>Изберете адрес, на който ще получавате монети</translation>
</message>
<message>
<source>C&amp;hoose</source>
@@ -66,6 +70,10 @@
<translation>Това са адресите на получателите на плащания. Винаги проверявайте размера на сумата и адреса на получателя, преди да изпратите монети.</translation>
</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>Това са Вашите Биткойн адреси,благодарение на които ще получавате плащания.Препоръчително е да използвате нови адреси за получаване на всяка транзакция.</translation>
+ </message>
+ <message>
<source>Copy &amp;Label</source>
<translation>Копирай &amp;име</translation>
</message>
@@ -85,7 +93,11 @@
<source>Exporting Failed</source>
<translation>Грешка при изнасянето</translation>
</message>
- </context>
+ <message>
+ <source>There was an error trying to save the address list to %1. Please try again.</source>
+ <translation>Възникна грешка при опита за запазване на списъка с адреси в %1.Моля опитайте отново.</translation>
+ </message>
+</context>
<context>
<name>AddressTableModel</name>
<message>
@@ -104,8 +116,12 @@
<context>
<name>AskPassphraseDialog</name>
<message>
+ <source>Passphrase Dialog</source>
+ <translation>Диалог за паролите</translation>
+ </message>
+ <message>
<source>Enter passphrase</source>
- <translation>Въведи парола</translation>
+ <translation>Въведете текущата парола</translation>
</message>
<message>
<source>New passphrase</source>
@@ -113,11 +129,11 @@
</message>
<message>
<source>Repeat new passphrase</source>
- <translation>Още веднъж</translation>
+ <translation>Въведете новата парола повторно</translation>
</message>
<message>
<source>Encrypt wallet</source>
- <translation>Криптиране на портфейла</translation>
+ <translation>Шифриране на портфейла</translation>
</message>
<message>
<source>This operation needs your wallet passphrase to unlock the wallet.</source>
@@ -129,35 +145,31 @@
</message>
<message>
<source>This operation needs your wallet passphrase to decrypt the wallet.</source>
- <translation>Тази операция изисква Вашата парола за декриптиране на портфейла.</translation>
+ <translation>Тази операция изисква Вашата парола за дешифриране на портфейла.</translation>
</message>
<message>
<source>Decrypt wallet</source>
- <translation>Декриптиране на портфейла</translation>
+ <translation>Дешифриране на портфейла</translation>
</message>
<message>
<source>Change passphrase</source>
<translation>Смяна на паролата</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Въведете текущата и новата парола за портфейла.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
- <translation>Потвърждаване на криптирането</translation>
+ <translation>Потвърдете на шифрирането на портфейла</translation>
</message>
<message>
<source>Warning: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!</source>
- <translation>ВНИМАНИЕ: Ако защитите вашият портфейл и изгубите ключовата дума, вие ще &lt;b&gt;ИЗГУБИТЕ ВСИЧКИТЕ СИ БИТКОЙНОВЕ&lt;/b&gt;!</translation>
+ <translation>ВНИМАНИЕ: Ако шифрирате вашият портфейл и изгубите паролата си, &lt;b&gt;ЩЕ ИЗГУБИТЕ ВСИЧКИТЕ СИ БИТКОИНИ&lt;/b&gt;!</translation>
</message>
<message>
<source>Are you sure you wish to encrypt your wallet?</source>
- <translation>Наистина ли искате да шифрирате портфейла?</translation>
+ <translation>Наистина ли желаете да шифрирате портфейла си?</translation>
</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>ВАЖНО: Всякакви стари бекъп версии, които сте направили на вашият портфейл трябва да бъдат заменени със ново-генерирания, криптиран портфейл файл. От съображения за сигурност, предишните бекъпи на некриптираните портфейли ще станат неизползваеми веднага щом започнете да използвате новият криптиран портфейл.</translation>
+ <translation>ВАЖНО: Всички стари запазвания, които сте направили на Вашият портфейл трябва да замените с запазване на новополучения, шифриран портфейл. От съображения за сигурност, предишните запазвания на нешифрирани портфейли ще станат неизползваеми веднага, щом започнете да използвате новият, шифриран портфейл.</translation>
</message>
<message>
<source>Warning: The Caps Lock key is on!</source>
@@ -165,19 +177,15 @@
</message>
<message>
<source>Wallet encrypted</source>
- <translation>Портфейлът е криптиран</translation>
- </message>
- <message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Биткоин ще се затоври сега за да завърши процеса на криптиране. Запомнете, че криптирането на вашия портефейл не може напълно да предпази вашите Бит-монети от кражба чрез зловреден софтуер, инфектирал вашия компютър</translation>
+ <translation>Портфейлът е шифриран</translation>
</message>
<message>
<source>Wallet encryption failed</source>
- <translation>Криптирането беше неуспешно</translation>
+ <translation>Шифрирането беше неуспешно</translation>
</message>
<message>
<source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
- <translation>Криптирането на портфейла беше неуспешно поради неизвестен проблем. Портфейлът не е криптиран.</translation>
+ <translation>Шифрирането на портфейла беше неуспешно, поради софтуерен проблем. Портфейлът не е шифриран.</translation>
</message>
<message>
<source>The supplied passphrases do not match.</source>
@@ -185,15 +193,15 @@
</message>
<message>
<source>Wallet unlock failed</source>
- <translation>Отключването беше неуспешно</translation>
+ <translation>Неуспешно отключване на портфейла</translation>
</message>
<message>
<source>The passphrase entered for the wallet decryption was incorrect.</source>
- <translation>Паролата въведена за декриптиране на портфейла е грешна.</translation>
+ <translation>Паролата въведена за дешифриране на портфейла е грешна.</translation>
</message>
<message>
<source>Wallet decryption failed</source>
- <translation>Декриптирането беше неуспешно</translation>
+ <translation>Дешифрирането на портфейла беше неуспешно</translation>
</message>
<message>
<source>Wallet passphrase was successfully changed.</source>
@@ -215,16 +223,20 @@
<translation>&amp;Баланс</translation>
</message>
<message>
+ <source>Node</source>
+ <translation>Сървър</translation>
+ </message>
+ <message>
<source>Show general overview of wallet</source>
<translation>Обобщена информация за портфейла</translation>
</message>
<message>
<source>&amp;Transactions</source>
- <translation>&amp;Трансакции</translation>
+ <translation>&amp;Транзакции</translation>
</message>
<message>
<source>Browse transaction history</source>
- <translation>История на трансакциите</translation>
+ <translation>История на транзакциите</translation>
</message>
<message>
<source>E&amp;xit</source>
@@ -248,7 +260,7 @@
</message>
<message>
<source>&amp;Encrypt Wallet...</source>
- <translation>&amp;Криптиране на портфейла...</translation>
+ <translation>&amp;Шифриране на портфейла...</translation>
</message>
<message>
<source>&amp;Backup Wallet...</source>
@@ -259,6 +271,14 @@
<translation>&amp;Смяна на паролата...</translation>
</message>
<message>
+ <source>&amp;Sending addresses...</source>
+ <translation>&amp;Изпращане на адресите...</translation>
+ </message>
+ <message>
+ <source>&amp;Receiving addresses...</source>
+ <translation>&amp;Получаване на адресите...</translation>
+ </message>
+ <message>
<source>Open &amp;URI...</source>
<translation>Отвори &amp;URI...</translation>
</message>
@@ -279,6 +299,14 @@
<translation>Променя паролата за портфейла</translation>
</message>
<message>
+ <source>&amp;Debug window</source>
+ <translation>&amp;Прозорец за отстраняване на грешки</translation>
+ </message>
+ <message>
+ <source>Open debugging and diagnostic console</source>
+ <translation>Отворете конзолата за диагностика и отстраняване на грешки</translation>
+ </message>
+ <message>
<source>&amp;Verify message...</source>
<translation>&amp;Проверка на съобщение...</translation>
</message>
@@ -299,14 +327,30 @@
<translation>&amp;Получаване</translation>
</message>
<message>
+ <source>Show information about Bitcoin Core</source>
+ <translation>Покажете информация за Биткойн ядрото</translation>
+ </message>
+ <message>
<source>&amp;Show / Hide</source>
- <translation>&amp;Покажи / Скрий</translation>
+ <translation>&amp;Показване / Скриване</translation>
</message>
<message>
<source>Show or hide the main Window</source>
<translation>Показване и скриване на основния прозорец</translation>
</message>
<message>
+ <source>Encrypt the private keys that belong to your wallet</source>
+ <translation>Шифроване на личните ключове,които принадлежат на портфейла Ви.</translation>
+ </message>
+ <message>
+ <source>Sign messages with your Bitcoin addresses to prove you own them</source>
+ <translation>Пишете съобщения със своя Биткойн адрес за да докажете,че е ваш.</translation>
+ </message>
+ <message>
+ <source>Verify messages to ensure they were signed with specified Bitcoin addresses</source>
+ <translation>Потвърждаване на съобщения за да се знае,че са написани с дадените Биткойн адреси.</translation>
+ </message>
+ <message>
<source>&amp;File</source>
<translation>&amp;Файл</translation>
</message>
@@ -323,32 +367,52 @@
<translation>Раздели</translation>
</message>
<message>
+ <source>Bitcoin Core</source>
+ <translation>Биткойн ядро</translation>
+ </message>
+ <message>
+ <source>Request payments (generates QR codes and bitcoin: URIs)</source>
+ <translation>Изискване на плащания(генерира QR кодове и биткойн: URIs)</translation>
+ </message>
+ <message>
<source>&amp;About Bitcoin Core</source>
<translation>&amp;Относно Bitcoin Core</translation>
</message>
- <message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n връзка към Биткоин мрежата</numerusform><numerusform>%n връзки към Биткоин мрежата</numerusform></translation>
+ <message>
+ <source>Show the list of used sending addresses and labels</source>
+ <translation>Показване на списъка с използвани адреси и имена</translation>
</message>
- <message numerus="yes">
- <source>%n hour(s)</source>
- <translation><numerusform>%n час</numerusform><numerusform>%n часа</numerusform></translation>
+ <message>
+ <source>Show the list of used receiving addresses and labels</source>
+ <translation>Покажи списък с използваните адреси и имена.</translation>
</message>
- <message numerus="yes">
- <source>%n day(s)</source>
- <translation><numerusform>%n ден</numerusform><numerusform>%n дни</numerusform></translation>
+ <message>
+ <source>Open a bitcoin: URI or payment request</source>
+ <translation>Отворете биткойн: URI или заявка за плащане</translation>
</message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>%n седмица</numerusform><numerusform>%n седмици</numerusform></translation>
+ <message>
+ <source>&amp;Command-line options</source>
+ <translation>&amp;Налични команди</translation>
+ </message>
+ <message>
+ <source>Show the Bitcoin Core help message to get a list with possible Bitcoin command-line options</source>
+ <translation>Покажи помощните съобщения на Биткойн за да видиш наличните и валидни команди</translation>
+ </message>
+ <message>
+ <source>No block source available...</source>
+ <translation>Липсва източник на блоковете...</translation>
</message>
<message>
<source>%1 and %2</source>
<translation>%1 и %2</translation>
</message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation><numerusform>%n година</numerusform><numerusform>%n години</numerusform></translation>
+ <message>
+ <source>%1 behind</source>
+ <translation>%1 зад</translation>
+ </message>
+ <message>
+ <source>Transactions after this will not yet be visible.</source>
+ <translation>Транзакции след това няма все още да бъдат видими.</translation>
</message>
<message>
<source>Error</source>
@@ -360,7 +424,7 @@
</message>
<message>
<source>Information</source>
- <translation>Данни</translation>
+ <translation>Информация</translation>
</message>
<message>
<source>Up to date</source>
@@ -372,23 +436,11 @@
</message>
<message>
<source>Sent transaction</source>
- <translation>Изходяща трансакция</translation>
+ <translation>Изходяща транзакция</translation>
</message>
<message>
<source>Incoming transaction</source>
- <translation>Входяща трансакция</translation>
- </message>
- <message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Дата: %1
-Сума: %2
-Вид: %3
-Адрес: %4
-</translation>
+ <translation>Входяща транзакция</translation>
</message>
<message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
@@ -401,10 +453,22 @@ Address: %4
</context>
<context>
<name>ClientModel</name>
- </context>
+ <message>
+ <source>Network Alert</source>
+ <translation>Мрежови проблем</translation>
+ </message>
+</context>
<context>
<name>CoinControlDialog</name>
<message>
+ <source>Coin Selection</source>
+ <translation>Избор на монета</translation>
+ </message>
+ <message>
+ <source>Quantity:</source>
+ <translation>Количество:</translation>
+ </message>
+ <message>
<source>Bytes:</source>
<translation>Байтове:</translation>
</message>
@@ -421,10 +485,42 @@ Address: %4
<translation>Такса:</translation>
</message>
<message>
+ <source>Dust:</source>
+ <translation>Прах:</translation>
+ </message>
+ <message>
+ <source>After Fee:</source>
+ <translation>След прилагане на ДДС</translation>
+ </message>
+ <message>
+ <source>Change:</source>
+ <translation>Ресто</translation>
+ </message>
+ <message>
+ <source>(un)select all</source>
+ <translation>(Пре)махни всички</translation>
+ </message>
+ <message>
+ <source>Tree mode</source>
+ <translation>Дървовиден режим</translation>
+ </message>
+ <message>
+ <source>List mode</source>
+ <translation>Списъчен режим</translation>
+ </message>
+ <message>
<source>Amount</source>
<translation>Сума</translation>
</message>
<message>
+ <source>Received with label</source>
+ <translation>Получени с име</translation>
+ </message>
+ <message>
+ <source>Received with address</source>
+ <translation>Получени с адрес</translation>
+ </message>
+ <message>
<source>Date</source>
<translation>Дата</translation>
</message>
@@ -457,6 +553,82 @@ Address: %4
<translation>Копирай транзакция с ID</translation>
</message>
<message>
+ <source>Lock unspent</source>
+ <translation>Заключване на неизхарченото</translation>
+ </message>
+ <message>
+ <source>Unlock unspent</source>
+ <translation>Отключване на неизхарченото</translation>
+ </message>
+ <message>
+ <source>Copy quantity</source>
+ <translation>Копиране на количеството</translation>
+ </message>
+ <message>
+ <source>Copy fee</source>
+ <translation>Копиране на данък добавена стойност</translation>
+ </message>
+ <message>
+ <source>Copy after fee</source>
+ <translation>Копиране след прилагане на данък добавена стойност</translation>
+ </message>
+ <message>
+ <source>Copy bytes</source>
+ <translation>Копиране на байтовете</translation>
+ </message>
+ <message>
+ <source>Copy priority</source>
+ <translation>Копиране на приоритет</translation>
+ </message>
+ <message>
+ <source>Copy dust</source>
+ <translation>Копирай прахта:</translation>
+ </message>
+ <message>
+ <source>Copy change</source>
+ <translation>Копирай рестото</translation>
+ </message>
+ <message>
+ <source>highest</source>
+ <translation>Най-висок</translation>
+ </message>
+ <message>
+ <source>higher</source>
+ <translation>По-висок</translation>
+ </message>
+ <message>
+ <source>high</source>
+ <translation>Висок</translation>
+ </message>
+ <message>
+ <source>medium-high</source>
+ <translation>Средно-висок</translation>
+ </message>
+ <message>
+ <source>medium</source>
+ <translation>Среден</translation>
+ </message>
+ <message>
+ <source>low-medium</source>
+ <translation>Ниско-среден</translation>
+ </message>
+ <message>
+ <source>low</source>
+ <translation>Нисък</translation>
+ </message>
+ <message>
+ <source>lower</source>
+ <translation>По-нисък</translation>
+ </message>
+ <message>
+ <source>lowest</source>
+ <translation>Най-нисък</translation>
+ </message>
+ <message>
+ <source>(%1 locked)</source>
+ <translation>(%1 заключен)</translation>
+ </message>
+ <message>
<source>none</source>
<translation>нищо</translation>
</message>
@@ -469,14 +641,22 @@ Address: %4
<translation>не</translation>
</message>
<message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Това наименование се оцветява в червено, ако произволен получател получи сума по-малка от %1.</translation>
+ <source>This means a fee of at least %1 per kB is required.</source>
+ <translation>Това означава че се изисква такса от поне %1 на килобайт.</translation>
+ </message>
+ <message>
+ <source>Can vary +/- 1 byte per input.</source>
+ <translation>Може да варира с +-1 байт</translation>
</message>
<message>
<source>(no label)</source>
<translation>(без име)</translation>
</message>
<message>
+ <source>change from %1 (%2)</source>
+ <translation>ресто от %1 (%2)</translation>
+ </message>
+ <message>
<source>(change)</source>
<translation>(промени)</translation>
</message>
@@ -505,11 +685,11 @@ Address: %4
</message>
<message>
<source>Edit receiving address</source>
- <translation>Редактиране на входящ адрес</translation>
+ <translation>Редактиране на адрес за получаване</translation>
</message>
<message>
<source>Edit sending address</source>
- <translation>Редактиране на изходящ адрес</translation>
+ <translation>Редактиране на адрес за изпращане</translation>
</message>
<message>
<source>The entered address "%1" is already in the address book.</source>
@@ -539,13 +719,25 @@ Address: %4
<translation>име</translation>
</message>
<message>
+ <source>Directory already exists. Add %1 if you intend to create a new directory here.</source>
+ <translation>Директорията вече съществува.Добавете %1 ако желаете да добавите нова директория тук.</translation>
+ </message>
+ <message>
<source>Path already exists, and is not a directory.</source>
<translation>Пътят вече съществува и не е папка.</translation>
</message>
- </context>
+ <message>
+ <source>Cannot create data directory here.</source>
+ <translation>Не може да се създаде директория тук.</translation>
+ </message>
+</context>
<context>
<name>HelpMessageDialog</name>
<message>
+ <source>Bitcoin Core</source>
+ <translation>Биткойн ядро</translation>
+ </message>
+ <message>
<source>version</source>
<translation>версия</translation>
</message>
@@ -555,17 +747,21 @@ Address: %4
</message>
<message>
<source>About Bitcoin Core</source>
- <translation>За Bitcoin Core</translation>
+ <translation>Относно Bitcoin Core</translation>
+ </message>
+ <message>
+ <source>Command-line options</source>
+ <translation>Списък с команди</translation>
</message>
<message>
<source>Usage:</source>
<translation>Използване:</translation>
</message>
<message>
- <source>UI options</source>
- <translation>UI Опции</translation>
+ <source>command-line options</source>
+ <translation>Списък с налични команди</translation>
</message>
- </context>
+</context>
<context>
<name>Intro</name>
<message>
@@ -573,12 +769,36 @@ Address: %4
<translation>Добре дошли</translation>
</message>
<message>
+ <source>Welcome to Bitcoin Core.</source>
+ <translation>Добре дошли в Биткойн ядрото.</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>Тъй като това е първото стартиране на програмата можете да изберете къде Биткон ядрото да запази данните си.</translation>
+ </message>
+ <message>
+ <source>Use the default data directory</source>
+ <translation>Използване на директория по подразбиране</translation>
+ </message>
+ <message>
+ <source>Use a custom data directory:</source>
+ <translation>Използване на директория ръчно</translation>
+ </message>
+ <message>
+ <source>Bitcoin Core</source>
+ <translation>Биткойн ядро</translation>
+ </message>
+ <message>
<source>Error</source>
<translation>Грешка</translation>
</message>
</context>
<context>
<name>OpenURIDialog</name>
+ <message>
+ <source>Open URI</source>
+ <translation>Отваряне на URI</translation>
+ </message>
</context>
<context>
<name>OptionsDialog</name>
@@ -591,14 +811,34 @@ Address: %4
<translation>&amp;Основни</translation>
</message>
<message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Пускане на Биткоин при вход в системата</translation>
+ <source>Size of &amp;database cache</source>
+ <translation>Размер на кеша в &amp;базата данни</translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation>Мегабайта</translation>
+ </message>
+ <message>
+ <source>Accept connections from outside</source>
+ <translation>Приемай връзки отвън</translation>
+ </message>
+ <message>
+ <source>Allow incoming connections</source>
+ <translation>Позволи входящите връзки</translation>
</message>
<message>
<source>IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1)</source>
<translation>IP адрес на прокси (напр. за IPv4: 127.0.0.1 / за IPv6: ::1)</translation>
</message>
<message>
+ <source>Third party transaction URLs</source>
+ <translation>URL адреси на трети страни</translation>
+ </message>
+ <message>
+ <source>Reset all client options to default.</source>
+ <translation>Възстановете всички настройки по подразбиране.</translation>
+ </message>
+ <message>
<source>&amp;Reset Options</source>
<translation>&amp;Нулирай настройките</translation>
</message>
@@ -615,6 +855,10 @@ Address: %4
<translation>Експерт</translation>
</message>
<message>
+ <source>&amp;Spend unconfirmed change</source>
+ <translation>&amp;Похарчете непотвърденото ресто</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>
<translation>Автоматично отваряне на входящия Bitcoin порт. Работи само с рутери поддържащи UPnP.</translation>
</message>
@@ -623,6 +867,14 @@ Address: %4
<translation>Отваряне на входящия порт чрез &amp;UPnP</translation>
</message>
<message>
+ <source>Connect to the Bitcoin network through a SOCKS5 proxy.</source>
+ <translation>Свързване с Биткойн мрежата чрез SOCKS5 прокси.</translation>
+ </message>
+ <message>
+ <source>&amp;Connect through SOCKS5 proxy (default proxy):</source>
+ <translation>&amp;Свързване чрез SOCKS5 прокси (прокси по подразбиране):</translation>
+ </message>
+ <message>
<source>Proxy &amp;IP:</source>
<translation>Прокси &amp; АйПи:</translation>
</message>
@@ -647,10 +899,6 @@ Address: %4
<translation>&amp;Минимизиране в системния трей</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>При затваряне на прозореца приложението остава минимизирано. Ако изберете тази опция, приложението може да се затвори само чрез Изход в менюто.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>М&amp;инимизиране при затваряне</translation>
</message>
@@ -663,18 +911,18 @@ Address: %4
<translation>Език:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Промяната на езика ще влезе в сила след рестартиране на Биткоин.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
- <translation>Мерни единици:</translation>
+ <translation>Мерна единица за показваните суми:</translation>
</message>
<message>
<source>Choose the default subdivision unit to show in the interface and when sending coins.</source>
<translation>Изберете единиците, показвани по подразбиране в интерфейса.</translation>
</message>
<message>
+ <source>Whether to show coin control features or not.</source>
+ <translation>Дали да покаже възможностите за контрол на монетите или не.</translation>
+ </message>
+ <message>
<source>&amp;OK</source>
<translation>ОК</translation>
</message>
@@ -691,29 +939,57 @@ Address: %4
<translation>нищо</translation>
</message>
<message>
+ <source>Confirm options reset</source>
+ <translation>Потвърдете отмяната на настройките.</translation>
+ </message>
+ <message>
+ <source>Client restart required to activate changes.</source>
+ <translation>Изисква се рестартиране на клиента за активиране на извършените промени.</translation>
+ </message>
+ <message>
+ <source>This change would require a client restart.</source>
+ <translation>Тази промяна изисква рестартиране на клиента Ви.</translation>
+ </message>
+ <message>
<source>The supplied proxy address is invalid.</source>
- <translation>Прокси адресът е невалиден.</translation>
+ <translation>Текущият прокси адрес е невалиден.</translation>
</message>
</context>
<context>
<name>OverviewPage</name>
<message>
<source>Form</source>
- <translation>Форма</translation>
+ <translation>Формуляр</translation>
</message>
<message>
<source>The displayed information may be out of date. Your wallet automatically synchronizes with the Bitcoin network after a connection is established, but this process has not completed yet.</source>
<translation>Текущата информация на екрана може да не е актуална. Вашият портфейл ще се синхронизира автоматично с мрежата на Биткоин, щом поне една връзката с нея се установи; този процес все още не е приключил.</translation>
</message>
<message>
+ <source>Watch-only:</source>
+ <translation>В наблюдателен режим:</translation>
+ </message>
+ <message>
<source>Available:</source>
<translation>Налично:</translation>
</message>
<message>
+ <source>Your current spendable balance</source>
+ <translation>Вашата текуща сметка за изразходване</translation>
+ </message>
+ <message>
<source>Pending:</source>
<translation>Изчакващо:</translation>
</message>
<message>
+ <source>Immature:</source>
+ <translation>Неразвит:</translation>
+ </message>
+ <message>
+ <source>Mined balance that has not yet matured</source>
+ <translation>Миниран баланс,който все още не се е развил</translation>
+ </message>
+ <message>
<source>Balances</source>
<translation>Баланс</translation>
</message>
@@ -726,6 +1002,14 @@ Address: %4
<translation>Текущият ви общ баланс</translation>
</message>
<message>
+ <source>Spendable:</source>
+ <translation>За харчене:</translation>
+ </message>
+ <message>
+ <source>Recent transactions</source>
+ <translation>Скорошни транзакции</translation>
+ </message>
+ <message>
<source>out of sync</source>
<translation>несинхронизиран</translation>
</message>
@@ -733,17 +1017,73 @@ Address: %4
<context>
<name>PaymentServer</name>
<message>
+ <source>URI handling</source>
+ <translation>Справяне с URI</translation>
+ </message>
+ <message>
+ <source>Invalid payment address %1</source>
+ <translation>Невалиден адрес на плащане %1</translation>
+ </message>
+ <message>
+ <source>Payment request rejected</source>
+ <translation>Заявката за плащане беше отхвърлена</translation>
+ </message>
+ <message>
+ <source>Payment request network doesn't match client network.</source>
+ <translation>Мрежата от която се извършва заявката за плащане не съвпада с мрежата на клиента.</translation>
+ </message>
+ <message>
<source>Requested payment amount of %1 is too small (considered dust).</source>
<translation>Заявената сума за плащане: %1 е твърде малка (счита се за отпадък)</translation>
</message>
<message>
+ <source>Payment request error</source>
+ <translation>Възникна грешка по време назаявката за плащане</translation>
+ </message>
+ <message>
+ <source>Cannot start bitcoin: click-to-pay handler</source>
+ <translation>Биткойн не можe да се стартира: click-to-pay handler</translation>
+ </message>
+ <message>
+ <source>Payment request file handling</source>
+ <translation>Файл за справяне със заявки</translation>
+ </message>
+ <message>
+ <source>Refund from %1</source>
+ <translation>Възстановяване на сума от %1</translation>
+ </message>
+ <message>
+ <source>Payment request DoS protection</source>
+ <translation>Дос защита на заявката за плащане</translation>
+ </message>
+ <message>
+ <source>Error communicating with %1: %2</source>
+ <translation>Грешка при комуникацията с %1: %2</translation>
+ </message>
+ <message>
+ <source>Bad response from server %1</source>
+ <translation>Възникна проблем при свързването със сървър %1</translation>
+ </message>
+ <message>
<source>Payment acknowledged</source>
- <translation>Плащането е приета</translation>
+ <translation>Плащането е прието</translation>
</message>
- </context>
+ <message>
+ <source>Network request error</source>
+ <translation>Грешка в мрежата по време на заявката</translation>
+ </message>
+</context>
<context>
<name>PeerTableModel</name>
- </context>
+ <message>
+ <source>User Agent</source>
+ <translation>Клиент на потребителя</translation>
+ </message>
+ <message>
+ <source>Ping Time</source>
+ <translation>Време за отговор</translation>
+ </message>
+</context>
<context>
<name>QObject</name>
<message>
@@ -751,10 +1091,38 @@ Address: %4
<translation>Сума</translation>
</message>
<message>
+ <source>Enter a Bitcoin address (e.g. %1)</source>
+ <translation>Въведете Биткойн адрес (например: %1)</translation>
+ </message>
+ <message>
+ <source>%1 d</source>
+ <translation>%1 ден</translation>
+ </message>
+ <message>
+ <source>%1 h</source>
+ <translation>%1 час</translation>
+ </message>
+ <message>
+ <source>%1 m</source>
+ <translation>%1 минута</translation>
+ </message>
+ <message>
+ <source>%1 s</source>
+ <translation>%1 секунда</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Неналичен</translation>
+ </message>
+ <message>
<source>N/A</source>
- <translation>N/A</translation>
+ <translation>Несъществуващ</translation>
</message>
- </context>
+ <message>
+ <source>%1 ms</source>
+ <translation>%1 милисекунда</translation>
+ </message>
+</context>
<context>
<name>QRImageWidget</name>
<message>
@@ -782,7 +1150,7 @@ Address: %4
</message>
<message>
<source>N/A</source>
- <translation>N/A</translation>
+ <translation>Несъществуващ</translation>
</message>
<message>
<source>Client version</source>
@@ -793,6 +1161,10 @@ Address: %4
<translation>Данни</translation>
</message>
<message>
+ <source>Debug window</source>
+ <translation>Прозорец с грешки</translation>
+ </message>
+ <message>
<source>General</source>
<translation>Основни</translation>
</message>
@@ -801,6 +1173,14 @@ Address: %4
<translation>Използване на OpenSSL версия</translation>
</message>
<message>
+ <source>Using BerkeleyDB version</source>
+ <translation>Използване на база данни BerkeleyDB </translation>
+ </message>
+ <message>
+ <source>Startup time</source>
+ <translation>Време за стартиране</translation>
+ </message>
+ <message>
<source>Network</source>
<translation>Мрежа</translation>
</message>
@@ -833,10 +1213,50 @@ Address: %4
<translation>Избери пиър за детайлна информация.</translation>
</message>
<message>
+ <source>Direction</source>
+ <translation>Посока</translation>
+ </message>
+ <message>
<source>Version</source>
<translation>Версия</translation>
</message>
<message>
+ <source>User Agent</source>
+ <translation>Клиент на потребителя</translation>
+ </message>
+ <message>
+ <source>Services</source>
+ <translation>Услуги</translation>
+ </message>
+ <message>
+ <source>Starting Height</source>
+ <translation>Стартова височина</translation>
+ </message>
+ <message>
+ <source>Connection Time</source>
+ <translation>Продължителност на връзката</translation>
+ </message>
+ <message>
+ <source>Last Send</source>
+ <translation>Изпратени за последно</translation>
+ </message>
+ <message>
+ <source>Last Receive</source>
+ <translation>Получени за последно</translation>
+ </message>
+ <message>
+ <source>Bytes Sent</source>
+ <translation>Изпратени байтове</translation>
+ </message>
+ <message>
+ <source>Bytes Received</source>
+ <translation>Получени байтове</translation>
+ </message>
+ <message>
+ <source>Ping Time</source>
+ <translation>Време за отговор</translation>
+ </message>
+ <message>
<source>Last block time</source>
<translation>Време на последния блок</translation>
</message>
@@ -861,8 +1281,20 @@ Address: %4
<translation>Общо:</translation>
</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>Отворете Биткой дебъг лог файла от настоящата Data папка. Може да отнеме няколко секунди при по - големи лог файлове.</translation>
+ <source>In:</source>
+ <translation>Входящи:</translation>
+ </message>
+ <message>
+ <source>Out:</source>
+ <translation>Изходящи</translation>
+ </message>
+ <message>
+ <source>Build date</source>
+ <translation>Дата на създаване</translation>
+ </message>
+ <message>
+ <source>Debug log file</source>
+ <translation>Лог файл,съдържащ грешките</translation>
</message>
<message>
<source>Clear console</source>
@@ -872,7 +1304,51 @@ Address: %4
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Използвайте стрелки надолу и нагореза разглеждане на историятаот команди и &lt;b&gt;Ctrl-L&lt;/b&gt; за изчистване на конзолата.</translation>
</message>
- </context>
+ <message>
+ <source>Type &lt;b&gt;help&lt;/b&gt; for an overview of available commands.</source>
+ <translation>Въведeте &lt;/b&gt;помощ&lt;/b&gt; за да видите наличните команди.</translation>
+ </message>
+ <message>
+ <source>%1 B</source>
+ <translation>%1 Байт</translation>
+ </message>
+ <message>
+ <source>%1 KB</source>
+ <translation>%1 Килобайт</translation>
+ </message>
+ <message>
+ <source>%1 MB</source>
+ <translation>%1 Мегабайт</translation>
+ </message>
+ <message>
+ <source>%1 GB</source>
+ <translation>%1 Гигабайт</translation>
+ </message>
+ <message>
+ <source>via %1</source>
+ <translation>посредством %1</translation>
+ </message>
+ <message>
+ <source>never</source>
+ <translation>Никога</translation>
+ </message>
+ <message>
+ <source>Inbound</source>
+ <translation>Входящи</translation>
+ </message>
+ <message>
+ <source>Outbound</source>
+ <translation>Изходящи</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <translation>Неизвестен</translation>
+ </message>
+ <message>
+ <source>Fetching...</source>
+ <translation>Прихващане...</translation>
+ </message>
+</context>
<context>
<name>ReceiveCoinsDialog</name>
<message>
@@ -884,6 +1360,10 @@ Address: %4
<translation>&amp;Име:</translation>
</message>
<message>
+ <source>&amp;Message:</source>
+ <translation>&amp;Съобщение:</translation>
+ </message>
+ <message>
<source>Use this form to request payments. All fields are &lt;b&gt;optional&lt;/b&gt;.</source>
<translation>Използвате този формуляр за заявяване на плащания. Всички полета са &lt;b&gt;незадължителни&lt;/b&gt;.</translation>
</message>
@@ -900,6 +1380,14 @@ Address: %4
<translation>Изчистване</translation>
</message>
<message>
+ <source>Requested payments history</source>
+ <translation>Изискана история на плащанията</translation>
+ </message>
+ <message>
+ <source>&amp;Request payment</source>
+ <translation>&amp;Изискване на плащане</translation>
+ </message>
+ <message>
<source>Show</source>
<translation>Показване</translation>
</message>
@@ -923,6 +1411,14 @@ Address: %4
<context>
<name>ReceiveRequestDialog</name>
<message>
+ <source>QR Code</source>
+ <translation>QR код</translation>
+ </message>
+ <message>
+ <source>Copy &amp;URI</source>
+ <translation>Копиране на &amp;URI</translation>
+ </message>
+ <message>
<source>Copy &amp;Address</source>
<translation>&amp;Копирай адрес</translation>
</message>
@@ -931,6 +1427,10 @@ Address: %4
<translation>&amp;Запиши изображение...</translation>
</message>
<message>
+ <source>Request payment to %1</source>
+ <translation>Изискване на плащане от %1</translation>
+ </message>
+ <message>
<source>Payment information</source>
<translation>Данни за плащането</translation>
</message>
@@ -978,6 +1478,10 @@ Address: %4
<translation>(без име)</translation>
</message>
<message>
+ <source>(no message)</source>
+ <translation>(без съобщение)</translation>
+ </message>
+ <message>
<source>(no amount)</source>
<translation>(липсва сума)</translation>
</message>
@@ -989,6 +1493,22 @@ Address: %4
<translation>Изпращане</translation>
</message>
<message>
+ <source>Coin Control Features</source>
+ <translation>Настройки за контрол на монетите</translation>
+ </message>
+ <message>
+ <source>automatically selected</source>
+ <translation>астоматично избран</translation>
+ </message>
+ <message>
+ <source>Insufficient funds!</source>
+ <translation>Нямате достатъчно налични пари!</translation>
+ </message>
+ <message>
+ <source>Quantity:</source>
+ <translation>Количество:</translation>
+ </message>
+ <message>
<source>Bytes:</source>
<translation>Байтове:</translation>
</message>
@@ -1005,6 +1525,54 @@ Address: %4
<translation>Такса:</translation>
</message>
<message>
+ <source>After Fee:</source>
+ <translation>След прилагане на ДДС</translation>
+ </message>
+ <message>
+ <source>Change:</source>
+ <translation>Ресто</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>Ако тази опция е активирана,но адресът на промяна е празен или невалиден,промяната ще бъде изпратена на новосъздаден адрес.</translation>
+ </message>
+ <message>
+ <source>Transaction Fee:</source>
+ <translation>Такса за транзакцията:</translation>
+ </message>
+ <message>
+ <source>Choose...</source>
+ <translation>Избери...</translation>
+ </message>
+ <message>
+ <source>per kilobyte</source>
+ <translation>за килобайт</translation>
+ </message>
+ <message>
+ <source>total at least</source>
+ <translation>Крайна сума поне</translation>
+ </message>
+ <message>
+ <source>Recommended:</source>
+ <translation>Препоръчителна:</translation>
+ </message>
+ <message>
+ <source>Custom:</source>
+ <translation>По избор:</translation>
+ </message>
+ <message>
+ <source>Confirmation time:</source>
+ <translation>Време за потвърждение:</translation>
+ </message>
+ <message>
+ <source>normal</source>
+ <translation>нормален</translation>
+ </message>
+ <message>
+ <source>fast</source>
+ <translation>бърз</translation>
+ </message>
+ <message>
<source>Send to multiple recipients at once</source>
<translation>Изпращане към повече от един получател</translation>
</message>
@@ -1017,6 +1585,10 @@ Address: %4
<translation>Изчисти всички полета от формуляра.</translation>
</message>
<message>
+ <source>Dust:</source>
+ <translation>Прах:</translation>
+ </message>
+ <message>
<source>Clear &amp;All</source>
<translation>&amp;Изчисти</translation>
</message>
@@ -1037,10 +1609,34 @@ Address: %4
<translation>Потвърждаване</translation>
</message>
<message>
+ <source>Copy quantity</source>
+ <translation>Копиране на количеството</translation>
+ </message>
+ <message>
<source>Copy amount</source>
<translation>Копирай сума</translation>
</message>
<message>
+ <source>Copy fee</source>
+ <translation>Копиране на данък добавена стойност</translation>
+ </message>
+ <message>
+ <source>Copy after fee</source>
+ <translation>Копиране след прилагане на данък добавена стойност</translation>
+ </message>
+ <message>
+ <source>Copy bytes</source>
+ <translation>Копиране на байтовете</translation>
+ </message>
+ <message>
+ <source>Copy priority</source>
+ <translation>Копиране на приоритет</translation>
+ </message>
+ <message>
+ <source>Copy change</source>
+ <translation>Копирай рестото</translation>
+ </message>
+ <message>
<source>Total Amount %1 (= %2)</source>
<translation>Пълна сума %1 (= %2)</translation>
</message>
@@ -1049,10 +1645,6 @@ Address: %4
<translation>или</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Невалиден адрес на получателя.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Сумата трябва да е по-голяма от 0.</translation>
</message>
@@ -1061,20 +1653,40 @@ Address: %4
<translation>Сумата надвишава текущия баланс</translation>
</message>
<message>
+ <source>The total exceeds your balance when the %1 transaction fee is included.</source>
+ <translation>Сумата при добавяне на данък добавена стойност по %1 транзакцията надвишава сумата по вашата сметка.</translation>
+ </message>
+ <message>
<source>Transaction creation failed!</source>
- <translation>Грешка при създаването на трансакция!</translation>
+ <translation>Грешка при създаването на транзакция!</translation>
+ </message>
+ <message>
+ <source>Pay only the minimum fee of %1</source>
+ <translation>Платете минималната такса от %1</translation>
+ </message>
+ <message>
+ <source>Warning: Invalid Bitcoin address</source>
+ <translation>Внимание: Невалиден Биткойн адрес</translation>
</message>
<message>
<source>(no label)</source>
<translation>(без име)</translation>
</message>
<message>
+ <source>Warning: Unknown change address</source>
+ <translation>Внимание:Неизвестен адрес за промяна</translation>
+ </message>
+ <message>
+ <source>Copy dust</source>
+ <translation>Копирай прахта:</translation>
+ </message>
+ <message>
<source>Are you sure you want to send?</source>
<translation>Наистина ли искате да изпратите?</translation>
</message>
<message>
<source>added as transaction fee</source>
- <translation>добавено като такса за трансакция</translation>
+ <translation>добавено като такса за транзакция</translation>
</message>
</context>
<context>
@@ -1127,10 +1739,22 @@ Address: %4
<source>Pay To:</source>
<translation>Плащане на:</translation>
</message>
- </context>
+ <message>
+ <source>Memo:</source>
+ <translation>Бележка:</translation>
+ </message>
+</context>
<context>
<name>ShutdownWindow</name>
- </context>
+ <message>
+ <source>Bitcoin Core is shutting down...</source>
+ <translation>Биткойн ядрото се изключва...</translation>
+ </message>
+ <message>
+ <source>Do not shut down the computer until this window disappears.</source>
+ <translation>Не изключвайте компютъра докато този прозорец не изчезне.</translation>
+ </message>
+</context>
<context>
<name>SignVerifyMessageDialog</name>
<message>
@@ -1142,10 +1766,6 @@ Address: %4
<translation>&amp;Подпиши</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Можете да подпишете съобщение като доказателство, че притежавате определен адрес. Бъдете внимателни и не подписвайте съобщения, които биха разкрили лична информация без вашето съгласие.</translation>
- </message>
- <message>
<source>Choose previously used address</source>
<translation>Изберете използван преди адрес</translation>
</message>
@@ -1194,6 +1814,10 @@ Address: %4
<translation>Проверете съобщение, за да сте сигурни че е подписано с определен Биткоин адрес</translation>
</message>
<message>
+ <source>Verify &amp;Message</source>
+ <translation>Потвърди &amp;съобщението</translation>
+ </message>
+ <message>
<source>Click "Sign Message" to generate signature</source>
<translation>Натиснете "Подписване на съобщение" за да създадете подпис</translation>
</message>
@@ -1215,11 +1839,11 @@ Address: %4
</message>
<message>
<source>Private key for the entered address is not available.</source>
- <translation>Не е наличен частният ключ за въведеният адрес.</translation>
+ <translation>Не е наличен частен ключ за въведеният адрес.</translation>
</message>
<message>
<source>Message signing failed.</source>
- <translation>Подписването на съобщение бе неуспешно.</translation>
+ <translation>Подписването на съобщение беше неуспешно.</translation>
</message>
<message>
<source>Message signed.</source>
@@ -1249,6 +1873,10 @@ Address: %4
<context>
<name>SplashScreen</name>
<message>
+ <source>Bitcoin Core</source>
+ <translation>Биткойн ядро</translation>
+ </message>
+ <message>
<source>The Bitcoin Core developers</source>
<translation>Разработчици на Bitcoin Core</translation>
</message>
@@ -1259,7 +1887,11 @@ Address: %4
</context>
<context>
<name>TrafficGraphWidget</name>
- </context>
+ <message>
+ <source>KB/s</source>
+ <translation>Килобайта в секунда</translation>
+ </message>
+</context>
<context>
<name>TransactionDesc</name>
<message>
@@ -1267,6 +1899,10 @@ Address: %4
<translation>Подлежи на промяна до %1</translation>
</message>
<message>
+ <source>conflicted</source>
+ <translation>припокриващ се</translation>
+ </message>
+ <message>
<source>%1/offline</source>
<translation>%1/офлайн</translation>
</message>
@@ -1328,7 +1964,7 @@ Address: %4
</message>
<message>
<source>Net amount</source>
- <translation>Сума нето</translation>
+ <translation>Нетна сума</translation>
</message>
<message>
<source>Message</source>
@@ -1347,8 +1983,12 @@ Address: %4
<translation>Търговец</translation>
</message>
<message>
+ <source>Debug information</source>
+ <translation>Информация за грешките</translation>
+ </message>
+ <message>
<source>Transaction</source>
- <translation>Трансакция</translation>
+ <translation>Транзакция</translation>
</message>
<message>
<source>Amount</source>
@@ -1375,11 +2015,11 @@ Address: %4
<name>TransactionDescDialog</name>
<message>
<source>Transaction details</source>
- <translation>Трансакция</translation>
+ <translation>Транзакция</translation>
</message>
<message>
<source>This pane shows a detailed description of the transaction</source>
- <translation>Описание на трансакцията</translation>
+ <translation>Описание на транзакцията</translation>
</message>
</context>
<context>
@@ -1393,10 +2033,6 @@ Address: %4
<translation>Тип</translation>
</message>
<message>
- <source>Address</source>
- <translation>Адрес</translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Подлежи на промяна до %1</translation>
</message>
@@ -1413,6 +2049,14 @@ Address: %4
<translation>Генерирана, но отхвърлена от мрежата</translation>
</message>
<message>
+ <source>Offline</source>
+ <translation>Извън линия</translation>
+ </message>
+ <message>
+ <source>Label</source>
+ <translation>Име</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Непотвърдено</translation>
</message>
@@ -1426,7 +2070,7 @@ Address: %4
</message>
<message>
<source>Received with</source>
- <translation>Получени с</translation>
+ <translation>Получени</translation>
</message>
<message>
<source>Received from</source>
@@ -1450,19 +2094,15 @@ Address: %4
</message>
<message>
<source>Transaction status. Hover over this field to show number of confirmations.</source>
- <translation>Състояние на трансакцията. Задръжте върху това поле за брой потвърждения.</translation>
+ <translation>Състояние на транзакцията. Задръжте върху това поле за брой потвърждения.</translation>
</message>
<message>
<source>Date and time that the transaction was received.</source>
- <translation>Дата и час на получаване.</translation>
+ <translation>Дата и час на получаване на транзакцията.</translation>
</message>
<message>
<source>Type of transaction.</source>
- <translation>Вид трансакция.</translation>
- </message>
- <message>
- <source>Destination address of transaction.</source>
- <translation>Получател на трансакцията.</translation>
+ <translation>Вид транзакция.</translation>
</message>
<message>
<source>Amount removed from or added to balance.</source>
@@ -1549,11 +2189,11 @@ Address: %4
</message>
<message>
<source>Show transaction details</source>
- <translation>Подробности за трансакцията</translation>
+ <translation>Подробности за транзакцията</translation>
</message>
<message>
<source>Export Transaction History</source>
- <translation>Изнасяне историята на трансакциите</translation>
+ <translation>Изнасяне историята на транзакциите</translation>
</message>
<message>
<source>Exporting Failed</source>
@@ -1564,6 +2204,10 @@ Address: %4
<translation>Изнасянето е успешна</translation>
</message>
<message>
+ <source>The transaction history was successfully saved to %1.</source>
+ <translation>Историята с транзакциите беше успешно запазена в %1.</translation>
+ </message>
+ <message>
<source>Comma separated file (*.csv)</source>
<translation>CSV файл (*.csv)</translation>
</message>
@@ -1632,10 +2276,22 @@ Address: %4
<translation>Запазване на портфейла</translation>
</message>
<message>
+ <source>Wallet Data (*.dat)</source>
+ <translation>Информация за портфейла (*.dat)</translation>
+ </message>
+ <message>
<source>Backup Failed</source>
<translation>Неуспешно запазване на портфейла</translation>
</message>
<message>
+ <source>There was an error trying to save the wallet data to %1.</source>
+ <translation>Възникна грешка при запазването на информацията за портфейла в %1.</translation>
+ </message>
+ <message>
+ <source>The wallet data was successfully saved to %1.</source>
+ <translation>Информацията за портфейла беше успешно запазена в %1.</translation>
+ </message>
+ <message>
<source>Backup Successful</source>
<translation>Успешно запазване на портфейла</translation>
</message>
@@ -1651,6 +2307,10 @@ Address: %4
<translation>Определете директория за данните</translation>
</message>
<message>
+ <source>Connect to a node to retrieve peer addresses, and disconnect</source>
+ <translation>Свържете се към сървър за да можете да извлечете адресите на пиърите след което се разкачете.</translation>
+ </message>
+ <message>
<source>Specify your own public address</source>
<translation>Въведете Ваш публичен адрес</translation>
</message>
@@ -1659,18 +2319,38 @@ Address: %4
<translation>Използвайте тестовата мрежа</translation>
</message>
<message>
+ <source>Accept connections from outside (default: 1 if no -proxy or -connect)</source>
+ <translation>Приемайте връзки отвън.(по подразбиране:1 в противен случай -proxy или -connect)</translation>
+ </message>
+ <message>
<source>Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction.</source>
- <translation>Внимание: -paytxfee има голяма стойност! Това е таксата за транзакциите, която ще платите ако направите транзакция.</translation>
+ <translation>Внимание: -paytxfee е с мното голяма зададена стойност! Това е транзакционната такса, която ще платите ако направите транзакция.</translation>
+ </message>
+ <message>
+ <source>Whitelist peers connecting from the given netmask or IP address. Can be specified multiple times.</source>
+ <translation>Сложете в бял списък пиъри,свързващи се от дадената интернет маска или айпи адрес.Може да бъде заложено неколкократно.</translation>
</message>
<message>
<source>(default: 1)</source>
<translation>(по подразбиране 1)</translation>
</message>
<message>
+ <source>&lt;category&gt; can be:</source>
+ <translation>&lt;category&gt; може да бъде:</translation>
+ </message>
+ <message>
<source>Connection options:</source>
<translation>Настройки на връзката:</translation>
</message>
<message>
+ <source>Do you want to rebuild the block database now?</source>
+ <translation>Желаете ли да пресъздадете базата данни с блокове сега?</translation>
+ </message>
+ <message>
+ <source>Error initializing block database</source>
+ <translation>Грешка в пускането на базата данни с блокове</translation>
+ </message>
+ <message>
<source>Error: Disk space is low!</source>
<translation>Грешка: мястото на диска е малко!</translation>
</message>
@@ -1695,8 +2375,28 @@ Address: %4
<translation>Настройки на портфейла:</translation>
</message>
<message>
+ <source>Set the number of threads for coin generation if enabled (-1 = all cores, default: %d)</source>
+ <translation>Заложете броя на нишки за генерация на монети ако е включено(-1 = всички ядра, по подразбиране: %d)</translation>
+ </message>
+ <message>
+ <source>Warning: -maxtxfee is set very high! Fees this large could be paid on a single transaction.</source>
+ <translation>Внимание: -maxtxfee има много висока стойност! Толкова високи такси могат да бъдат заплатени на една транзакция.</translation>
+ </message>
+ <message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Изберете директория при стартиране на програмата.( настройка по подразбиране:0)</translation>
+ </message>
+ <message>
+ <source>Connect through SOCKS5 proxy</source>
+ <translation>Свързване чрез SOCKS5 прокси</translation>
+ </message>
+ <message>
+ <source>Copyright (C) 2009-%i The Bitcoin Core Developers</source>
+ <translation>Всички права запазени (C) 2009-%i Доставчиците на Биткойн</translation>
+ </message>
+ <message>
<source>Information</source>
- <translation>Данни</translation>
+ <translation>Информация</translation>
</message>
<message>
<source>Invalid amount for -minrelaytxfee=&lt;amount&gt;: '%s'</source>
@@ -1711,16 +2411,28 @@ Address: %4
<translation>Изпрати локализиращата или дебъг информацията към конзолата, вместо файлът debug.log</translation>
</message>
<message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Задаване на език,например "de_DE" (по подразбиране: system locale)</translation>
+ </message>
+ <message>
+ <source>Start minimized</source>
+ <translation>Стартирай минимизирано</translation>
+ </message>
+ <message>
+ <source>This is experimental software.</source>
+ <translation>Това е експериментален софтуер.</translation>
+ </message>
+ <message>
<source>Transaction amount too small</source>
- <translation>Сумата на трансакцията е твърде малка</translation>
+ <translation>Сумата на транзакцията е твърде малка</translation>
</message>
<message>
<source>Transaction amounts must be positive</source>
- <translation>Сумите на трансакциите трябва да са положителни</translation>
+ <translation>Сумите на транзакциите трябва да са положителни</translation>
</message>
<message>
<source>Transaction too large</source>
- <translation>Трансакцията е твърде голяма</translation>
+ <translation>Транзакцията е твърде голяма</translation>
</message>
<message>
<source>Username for JSON-RPC connections</source>
@@ -1731,8 +2443,8 @@ Address: %4
<translation>Предупреждение</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Внимание: Използвате остаряла версия, необходимо е обновление!</translation>
+ <source>on startup</source>
+ <translation>по време на стартирането</translation>
</message>
<message>
<source>Password for JSON-RPC connections</source>
@@ -1744,7 +2456,7 @@ Address: %4
</message>
<message>
<source>Rescan the block chain for missing wallet transactions</source>
- <translation>Повторно сканиране на блок-връзка за липсващи портфейлни трансакции</translation>
+ <translation>Повторно сканиране на блок-връзка за липсващи портфейлни транзакции</translation>
</message>
<message>
<source>Use OpenSSL (https) for JSON-RPC connections</source>
@@ -1756,7 +2468,7 @@ Address: %4
</message>
<message>
<source>Loading addresses...</source>
- <translation>Зареждане на адресите...</translation>
+ <translation>Зареждане на адреси...</translation>
</message>
<message>
<source>Error loading wallet.dat: Wallet corrupted</source>
@@ -1771,6 +2483,18 @@ Address: %4
<translation>Невалиден -proxy address: '%s'</translation>
</message>
<message>
+ <source>Specify configuration file (default: %s)</source>
+ <translation>Назовете конфигурационен файл(по подразбиране %s)</translation>
+ </message>
+ <message>
+ <source>Specify connection timeout in milliseconds (minimum: 1, default: %d)</source>
+ <translation>Задайте време на изключване при проблеми със свързването в милисекунди(минимум:1, по подразбиране %d)</translation>
+ </message>
+ <message>
+ <source>Specify pid file (default: %s)</source>
+ <translation>Задайте pid файл(по подразбиране: %s)</translation>
+ </message>
+ <message>
<source>Invalid amount for -paytxfee=&lt;amount&gt;: '%s'</source>
<translation>Невалидна сума за -paytxfee=&lt;amount&gt;: '%s'</translation>
</message>
diff --git a/src/qt/locale/bitcoin_ca.ts b/src/qt/locale/bitcoin_ca.ts
index fb8e93ea9f..37d1dfc9eb 100644
--- a/src/qt/locale/bitcoin_ca.ts
+++ b/src/qt/locale/bitcoin_ca.ts
@@ -156,10 +156,6 @@
<translation>Canvia la contrasenya</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Introduïu tant la contrasenya antiga com la nova del moneder.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Confirma l'encriptació del moneder</translation>
</message>
@@ -188,10 +184,6 @@
<translation>Introduïu la contrasenya nova al moneder.&lt;br/&gt;Utilitzeu una contrasenya de &lt;b&gt;deu o més caràcters aleatoris&lt;/b&gt;, o &lt;b&gt;vuit o més paraules&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin es tancarà ara per acabar el procés d'encriptació. Recordeu que encriptar el moneder no protegeix completament els bitcoins de ser robats per programari maliciós instal·lat a l'ordinador.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>L'encriptació del moneder ha fallat</translation>
</message>
@@ -311,10 +303,6 @@
<translation>Envia monedes a una adreça Bitcoin</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Modifica les opcions de configuració per bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Realitza una còpia de seguretat del moneder a una altra ubicació</translation>
</message>
@@ -478,10 +466,6 @@
<source>Up to date</source>
<translation>Al dia</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>S'ha processat %n bloc de l'historial de transacció.</numerusform><numerusform>S'han processat %n blocs de l'historial de transacció.</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>S'està posant al dia ...</translation>
@@ -495,14 +479,6 @@
<translation>Transacció entrant</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Data: %1\nImport: %2\n Tipus: %3\n Adreça: %4\n</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>El moneder està &lt;b&gt;encriptat&lt;/b&gt; i actualment &lt;b&gt;desbloquejat&lt;/b&gt;</translation>
</message>
@@ -705,10 +681,6 @@ Address: %4
<translation>no</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Aquesta etiqueta es posa de color vermell si la mida de la transacció és més gran de 1000 bytes.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Això comporta una comissió d'almenys %1 per kB.</translation>
</message>
@@ -721,14 +693,6 @@ Address: %4
<translation>Les transaccions amb una major prioritat són més propenses a ser incloses en un bloc.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Aquesta etiqueta es torna vermella si la prioritat és menor que «mitjana».</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Aquesta etiqueta es torna vermella si qualsevol destinatari rep un import inferior a %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(sense etiqueta)</translation>
</message>
@@ -849,30 +813,6 @@ Address: %4
<source>command-line options</source>
<translation>Opcions de la línia d'ordres</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Opcions de IU</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Defineix un idioma, per exemple «de_DE» (per defecte: preferències locals de sistema)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Inicia minimitzat</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Defineix certificats arrel SSL per a la sol·licitud de pagament (per defecte: -sistema-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Mostra la finestra de benvinguda a l'inici (per defecte: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Tria el directori de dades a l'inici (per defecte: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -955,14 +895,6 @@ Address: %4
<translation>&amp;Principal</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Inicia automàticament el Bitcoin després de l'inici de sessió del sistema.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Inicia el Bitcoin a l'inici de sessió del sistema.</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Mida de la memòria cau de la base de &amp;dades</translation>
</message>
@@ -1075,10 +1007,6 @@ Address: %4
<translation>&amp;Minimitza a la barra d'aplicacions en comptes de la barra de tasques</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>Minimitza en comptes de sortir de la aplicació al tancar la finestra. Quan aquesta opció està activa, la aplicació només es tancarà al seleccionar Sortir al menú.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimitza en tancar</translation>
</message>
@@ -1091,10 +1019,6 @@ Address: %4
<translation>&amp;Llengua de la interfície d'usuari:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Aquí podeu definir la llengua de l'aplicació. Aquesta configuració tindrà efecte una vegada es reiniciï Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Unitats per mostrar els imports en:</translation>
</message>
@@ -1131,10 +1055,6 @@ Address: %4
<translation>Cal reiniciar el client per activar els canvis.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>S'aturarà el client, voleu procedir?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>Amb aquest canvi cal un reinici del client.</translation>
</message>
@@ -1241,10 +1161,6 @@ Address: %4
<translation>La xarxa de la sol·licitud de pagament no coincideix amb la xarxa del client.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>La sol·licitud de pagament ha caducat.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>La sol·licitud de pagament no està inicialitzada.</translation>
</message>
@@ -1320,10 +1236,6 @@ Address: %4
<translation>Agent d'usuari</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Adreça / nom de l'ordinador</translation>
- </message>
- <message>
<source>Ping Time</source>
<translation>Temps de ping</translation>
</message>
@@ -1355,14 +1267,6 @@ Address: %4
<translation>%1 s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>XARXA</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>DESCONEGUT</translation>
- </message>
- <message>
<source>None</source>
<translation>Cap</translation>
</message>
@@ -1561,18 +1465,10 @@ Address: %4
<translation>Fitxer de registre de depuració</translation>
</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>Obre el fitxer de registre de depuració de Bitcoin del directori de dades actual. Això pot trigar uns quants segons per a fitxers de registre grans.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Neteja la consola</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Us donem la benvinguda a la consola RPC de Bitcoin</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Utilitza les fletxes d'amunt i avall per navegar per l'historial, i &lt;b&gt;Ctrl-L&lt;\b&gt; per netejar la pantalla.</translation>
</message>
@@ -1861,14 +1757,6 @@ Address: %4
<translation>redueix els paràmetres de comissió</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Minimitza</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>Si la comissió personalitzada es defineix a 1000 satoshis i la transacció és de només 250 bytes, llavors «per kilobyte» només es paguen 250 satoshis en una comissió, mentre que amb la de «com a mínim» es pagarien 1000 satoshis. Per a transaccions superiors al kilobyte, en tots dos casos es paga per kilobyte.</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>per kilobyte</translation>
</message>
@@ -1997,10 +1885,6 @@ Address: %4
<translation>o</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>L'adreça de destinatari no és vàlida, si us plau comprovi-la.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>L'import a pagar ha de ser major que 0.</translation>
</message>
@@ -2013,10 +1897,6 @@ Address: %4
<translation>El total excedeix el teu balanç quan s'afegeix la comissió a la transacció %1.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>S'ha trobat una adreça duplicada, tan sols es pot enviar a cada adreça un cop per ordre de enviament.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Ha fallat la creació de la transacció!</translation>
</message>
@@ -2025,18 +1905,10 @@ Address: %4
<translation>S'ha rebutjat la transacció! Això pot passar si alguna de les monedes del vostre moneder ja s'han gastat; per exemple, si heu fet servir una còpia de seguretat del fitxer wallet.dat i s'haguessin gastat monedes de la còpia però sense marcar-les-hi com a gastades.</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
- <translation>Una comissió superior a %1 es considera una comissió excessiva.</translation>
- </message>
- <message>
<source>Pay only the minimum fee of %1</source>
<translation>Paga només la comissió mínima de %1</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>Estimat per a començar la confirmació en %1 bloc(s).</translation>
- </message>
- <message>
<source>Warning: Invalid Bitcoin address</source>
<translation>Avís: adreça Bitcoin no vàlida</translation>
</message>
@@ -2112,10 +1984,6 @@ Address: %4
<translation>Missatge:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Aquesta és una sol·licitud de pagament verificada.</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>Introduïu una etiqueta per a aquesta adreça per afegir-la a la llista d'adreces utilitzades</translation>
</message>
@@ -2124,10 +1992,6 @@ Address: %4
<translation>Un missatge que s'ha adjuntat al bitcoin: URI que s'emmagatzemarà amb la transacció per a la vostra referència. Nota: el missatge no s'enviarà a través de la xarxa Bitcoin.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Aquesta és una sol·licitud de pagament no verificada.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Paga a:</translation>
</message>
@@ -2158,10 +2022,6 @@ Address: %4
<translation>&amp;Signa el missatge</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Podeu signar missatges amb la vostra adreça per provar que són vostres. Aneu amb compte no signar qualsevol cosa, ja que els atacs de pesca electrònica (phishing) poden provar de confondre-us perquè els signeu amb la vostra identitat. Només signeu als documents completament detallats amb què hi esteu d'acord.</translation>
- </message>
- <message>
<source>The Bitcoin address to sign the message with</source>
<translation>L'adreça Bitcoin amb què signar el missatge</translation>
</message>
@@ -2214,10 +2074,6 @@ Address: %4
<translation>&amp;Verifica el missatge</translation>
</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>Introdueixi l'adreça signant, missatge (assegura't que copies salts de línia, espais, tabuladors, etc excactament tot el text) i la signatura a sota per verificar el missatge. Per evitar ser enganyat per un atac home-entre-mig, vés amb compte de no llegir més en la signatura del que hi ha al missatge signat mateix.</translation>
- </message>
- <message>
<source>The Bitcoin address the message was signed with</source>
<translation>L'adreça Bitcoin amb què va ser signat el missatge</translation>
</message>
@@ -2481,10 +2337,6 @@ Address: %4
<translation>Tipus</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adreça</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Immadur (%1 confirmacions, serà disponible després de %2)</translation>
</message>
@@ -2513,6 +2365,10 @@ Address: %4
<translation>Fora de línia</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Etiqueta</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Sense confirmar</translation>
</message>
@@ -2569,10 +2425,6 @@ Address: %4
<translation>Si està implicada o no una adreça només de lectura en la transacció.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Adreça del destinatari de la transacció.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Import extret o afegit del balanç.</translation>
</message>
@@ -2903,10 +2755,6 @@ Address: %4
<translation>Opcions de depuració/proves:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Descobreix la pròpia adreça IP (per defecte: 1 quan escoltant i no -externalip)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>No carreguis el moneder i inhabilita les crides RPC del moneder</translation>
</message>
@@ -2967,10 +2815,6 @@ Address: %4
<translation>Només connecta als nodes de la xarxa &lt;net&gt; (ipv4, ipv6 o onion)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Reconstrueix l'índex de la cadena de blocs dels fitxers actuals blk000??.dat</translation>
- </message>
- <message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation>Defineix la mida de la memòria cau de la base de dades en megabytes (%d a %d, per defecte: %d)</translation>
</message>
@@ -3031,10 +2875,6 @@ Address: %4
<translation>No es pot obtenir un bloqueig del directori de dades %s. El Bitcoin Core probablement ja s'estigui executant.</translation>
</message>
<message>
- <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</source>
- <translation>Limita contínuament la freqüència de les transaccions gratuïtes a &lt;n&gt;*1000 bytes per minut (per defecte: %u)</translation>
- </message>
- <message>
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
<translation>Crea fitxers nous amb els permisos per defecte del sistema, en comptes de l'umask 077 (només efectiu amb la funcionalitat de moneder inhabilitada)</translation>
</message>
@@ -3071,18 +2911,10 @@ Address: %4
<translation>Mida màxima de les dades en les transaccions de l'operador en què confiem i en les meves (per defecte: %u)</translation>
</message>
<message>
- <source>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</source>
- <translation>Comissions totals màximes que s'utilitzaran en una transacció d'un únic moneder. Si es defineix un valor massa baix les transaccions més grans poden interrompre's (per defecte: %s)</translation>
- </message>
- <message>
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
<translation>Consulta a adreces d'iguals a través de DNS, si es troba baix en adreces (per defecte: 1 a menys que -connect)</translation>
</message>
<message>
- <source>Require high priority for relaying free or low-fee transactions (default:%u)</source>
- <translation>Es requereix una prioritat alta per retransmetre transaccions gratuïtes o de baixa comissió (per defecte:%u)</translation>
- </message>
- <message>
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
<translation>Defineix la mida màxima de transaccions d'alta prioritat / baixa comissió en bytes (per defecte: %d)</translation>
</message>
@@ -3138,6 +2970,10 @@ per exemple: alertnotify=echo %%s | mail -s "Avís de Bitcoin" admin@foo.com</tr
<translation>No es pot resoldre l'adreça -whitebind: «%s»</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Tria el directori de dades a l'inici (per defecte: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Connecta a través del proxy SOCKS5</translation>
</message>
@@ -3234,10 +3070,22 @@ per exemple: alertnotify=echo %%s | mail -s "Avís de Bitcoin" admin@foo.com</tr
<translation>Envia les transaccions com a transaccions de comissió zero sempre que sigui possible (per defecte: %u) </translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Defineix certificats arrel SSL per a la sol·licitud de pagament (per defecte: -sistema-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Defineix un idioma, per exemple «de_DE» (per defecte: preferències locals de sistema)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Mostra totes les opcions de depuració (ús: --help --help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Mostra la finestra de benvinguda a l'inici (per defecte: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Redueix el fitxer debug.log durant l'inici del client (per defecte: 1 quan no -debug)</translation>
</message>
@@ -3246,6 +3094,10 @@ per exemple: alertnotify=echo %%s | mail -s "Avís de Bitcoin" admin@foo.com</tr
<translation>Ha fallat la signatura de la transacció</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Inicia minimitzat</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Això és programari experimental.</translation>
</message>
@@ -3286,10 +3138,6 @@ per exemple: alertnotify=echo %%s | mail -s "Avís de Bitcoin" admin@foo.com</tr
<translation>Avís</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Avís: aquesta versió està obsoleta. És necessari actualitzar-la!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>Avís: s'ha ignorat l'argument no acceptat de -benchmark. Feu servir -debug=bench.</translation>
</message>
diff --git a/src/qt/locale/bitcoin_ca@valencia.ts b/src/qt/locale/bitcoin_ca@valencia.ts
index 349fc6b42e..0a52b1bc9a 100644
--- a/src/qt/locale/bitcoin_ca@valencia.ts
+++ b/src/qt/locale/bitcoin_ca@valencia.ts
@@ -83,7 +83,7 @@
</message>
<message>
<source>Comma separated file (*.csv)</source>
- <translation>Fitxer de separació amb comes (*.csv)</translation>
+ <translation>Fitxer separat per comes (*.csv)</translation>
</message>
<message>
<source>Exporting Failed</source>
@@ -152,10 +152,6 @@
<translation>Canvia la contrasenya</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Introduïu tant la contrasenya antiga com la nova del moneder.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Confirma l'encriptació del moneder</translation>
</message>
@@ -184,10 +180,6 @@
<translation>Introduïu la contrasenya nova al moneder.&lt;br/&gt;Utilitzeu una contrasenya de &lt;b&gt;deu o més caràcters aleatoris&lt;/b&gt;, o &lt;b&gt;vuit o més paraules&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin es tancarà ara per acabar el procés d'encriptació. Recordeu que encriptar el moneder no protegeix completament els bitcoins de ser robats per programari maliciós instal·lat a l'ordinador.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>L'encriptació del moneder ha fallat</translation>
</message>
@@ -307,10 +299,6 @@
<translation>Envia monedes a una adreça Bitcoin</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Modifica les opcions de configuració per bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Realitza una còpia de seguretat del moneder a una altra ubicació</translation>
</message>
@@ -448,7 +436,7 @@
</message>
<message>
<source>Information</source>
- <translation>Informació</translation>
+ <translation>&amp;Informació</translation>
</message>
<message>
<source>Up to date</source>
@@ -467,14 +455,6 @@
<translation>Transacció entrant</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Data: %1\nImport: %2\n Tipus: %3\n Adreça: %4\n</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>El moneder està &lt;b&gt;encriptat&lt;/b&gt; i actualment &lt;b&gt;desbloquejat&lt;/b&gt;</translation>
</message>
@@ -510,7 +490,7 @@ Address: %4
</message>
<message>
<source>Fee:</source>
- <translation>Quota:</translation>
+ <translation>Comissió:</translation>
</message>
<message>
<source>Dust:</source>
@@ -558,11 +538,11 @@ Address: %4
</message>
<message>
<source>Copy address</source>
- <translation>Copiar adreça </translation>
+ <translation>Copia l'adreça</translation>
</message>
<message>
<source>Copy label</source>
- <translation>Copiar etiqueta</translation>
+ <translation>Copia l'etiqueta</translation>
</message>
<message>
<source>Copy amount</source>
@@ -586,7 +566,7 @@ Address: %4
</message>
<message>
<source>Copy fee</source>
- <translation>Copia la comissió</translation>
+ <translation>Copia la comissi</translation>
</message>
<message>
<source>Copy after fee</source>
@@ -665,10 +645,6 @@ Address: %4
<translation>no</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Esta etiqueta es posa de color roig si la mida de la transacció és més gran de 1000 bytes.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Això comporta una comissi d'almenys %1 per kB.</translation>
</message>
@@ -681,14 +657,6 @@ Address: %4
<translation>Les transaccions amb una major prioritat són més propenses a ser incloses en un bloc.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Esta etiqueta es torna roja si la prioritat és menor que «mitjana».</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Esta etiqueta es torna roja si qualsevol destinatari rep un import inferior a %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(sense etiqueta)</translation>
</message>
@@ -809,30 +777,6 @@ Address: %4
<source>command-line options</source>
<translation>Opcions de la línia d'ordes</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Opcions d'IU</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Defineix un idioma, per exemple "de_DE" (per defecte: preferències locals de sistema)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Inicia minimitzat</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Defineix certificats arrel SSL per a la sol·licitud de pagament (per defecte: -sistema-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Mostra la finestra de benvinguda a l'inici (per defecte: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Tria el directori de dades a l'inici (per defecte: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -907,14 +851,6 @@ Address: %4
<translation>&amp;Principal</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Inicia automàticament el Bitcoin després de l'inici de sessió del sistema.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Inicia el Bitcoin a l'inici de sessió del sistema.</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Mida de la memòria cau de la base de &amp;dades</translation>
</message>
@@ -1019,10 +955,6 @@ Address: %4
<translation>&amp;Minimitza a la barra d'aplicacions en comptes de la barra de tasques</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>Minimitza en comptes d'eixir de la aplicació al tancar la finestra. Quan esta opció està activa, la aplicació només es tancarà al seleccionar Eixir al menú.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimitza en tancar</translation>
</message>
@@ -1035,10 +967,6 @@ Address: %4
<translation>&amp;Llengua de la interfície d'usuari:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Ací podeu definir la llengua de l'aplicació. Esta configuració tindrà efecte una vegada es reinicie Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Unitats per mostrar els imports en:</translation>
</message>
@@ -1075,10 +1003,6 @@ Address: %4
<translation>Cal reiniciar el client per activar els canvis.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>Es pararà el client, voleu procedir?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>Amb este canvi cal un reinici del client.</translation>
</message>
@@ -1173,10 +1097,6 @@ Address: %4
<translation>La xarxa de la sol·licitud de pagament no coincideix amb la xarxa del client.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>La sol·licitud de pagament ha caducat.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>La sol·licitud de pagament no està inicialitzada.</translation>
</message>
@@ -1244,10 +1164,6 @@ Address: %4
<translation>Agent d'usuari</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Adreça / nom de l'ordinador</translation>
- </message>
- <message>
<source>Ping Time</source>
<translation>Temps de ping</translation>
</message>
@@ -1279,14 +1195,6 @@ Address: %4
<translation>%1 s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>XARXA</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>DESCONEGUT</translation>
- </message>
- <message>
<source>None</source>
<translation>Cap</translation>
</message>
@@ -1485,18 +1393,10 @@ Address: %4
<translation>Fitxer de registre de depuració</translation>
</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>Obri el fitxer de registre de depuració de Bitcoin del directori de dades actual. Això pot trigar uns quants segons per a fitxers de registre grans.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Neteja la consola</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Vos donem la benvinguda a la consola RPC de Bitcoin</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Utilitza les fletxes d'amunt i avall per navegar per l'historial, i &lt;b&gt;Ctrl-L&lt;\b&gt; per netejar la pantalla.</translation>
</message>
@@ -1664,7 +1564,7 @@ Address: %4
</message>
<message>
<source>Amount</source>
- <translation>Import</translation>
+ <translation>Quantitat</translation>
</message>
<message>
<source>Label</source>
@@ -1699,7 +1599,7 @@ Address: %4
</message>
<message>
<source>Amount</source>
- <translation>Import</translation>
+ <translation>Quantitat</translation>
</message>
<message>
<source>(no label)</source>
@@ -1782,7 +1682,7 @@ Address: %4
</message>
<message>
<source>Clear all fields of the form.</source>
- <translation>Netejar tots els camps del formulari.</translation>
+ <translation>Esborra tots els camps del formuari.</translation>
</message>
<message>
<source>Dust:</source>
@@ -1849,10 +1749,6 @@ Address: %4
<translation>o</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>L'adreça de destinatari no és vàlida, per favor comprovi-la.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>L'import a pagar ha de ser major que 0.</translation>
</message>
@@ -1865,10 +1761,6 @@ Address: %4
<translation>El total excedeix el teu balanç quan s'afig la comisió a la transacció %1.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>S'ha trobat una adreça duplicada, tan sols es pot enviar a cada adreça un cop per orde d'enviament.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Ha fallat la creació de la transacció!</translation>
</message>
@@ -1952,10 +1844,6 @@ Address: %4
<translation>Missatge:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Esta és una sol·licitud de pagament verificada.</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>Introduïu una etiqueta per a esta adreça per afegir-la a la llista d'adreces utilitzades</translation>
</message>
@@ -1964,10 +1852,6 @@ Address: %4
<translation>Un missatge que s'ha adjuntat al bitcoin: URI que s'emmagatzemarà amb la transacció per a la vostra referència. Nota: el missatge no s'enviarà a través de la xarxa Bitcoin.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Esta és una sol·licitud de pagament no verificada.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Paga a:</translation>
</message>
@@ -1998,24 +1882,20 @@ Address: %4
<translation>&amp;Signa el missatge</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Podeu signar missatges amb la vostra adreça per provar que són vostres. Aneu amb compte no signar qualsevol cosa, ja que els atacs de pesca electrònica (phishing) poden provar de confondre-vos perquè els signeu amb la vostra identitat. Només signeu als documents completament detallats amb què hi esteu d'acord.</translation>
- </message>
- <message>
<source>The Bitcoin address to sign the message with</source>
<translation>L'adreça Bitcoin amb què signar el missatge</translation>
</message>
<message>
<source>Choose previously used address</source>
- <translation>Tria les adreces fetes servir amb anterioritat</translation>
+ <translation>Trieu una adreça feta servir anteriorment</translation>
</message>
<message>
<source>Alt+A</source>
- <translation>Alt+A</translation>
+ <translation>Alta+A</translation>
</message>
<message>
<source>Paste address from clipboard</source>
- <translation>Apega l'adreça del porta-retalls</translation>
+ <translation>Apegar adreça del porta-retalls</translation>
</message>
<message>
<source>Alt+P</source>
@@ -2054,10 +1934,6 @@ Address: %4
<translation>&amp;Verifica el missatge</translation>
</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>Introduïsca l'adreça signant, missatge (assegura't que copies salts de línia, espais, tabuladors, etc excactament tot el text) i la signatura a sota per verificar el missatge. Per evitar ser enganyat per un atac home-entre-mig, vés amb compte de no llegir més en la signatura del que hi ha al missatge signat mateix.</translation>
- </message>
- <message>
<source>The Bitcoin address the message was signed with</source>
<translation>L'adreça Bitcoin amb què va ser signat el missatge</translation>
</message>
@@ -2130,7 +2006,7 @@ Address: %4
<name>SplashScreen</name>
<message>
<source>Bitcoin Core</source>
- <translation>Bitcoin Core</translation>
+ <translation>Nucli de Bitcoin</translation>
</message>
<message>
<source>The Bitcoin Core developers</source>
@@ -2309,10 +2185,6 @@ Address: %4
<translation>Tipus</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adreça</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Immadur (%1 confirmacions, serà disponible després de %2)</translation>
</message>
@@ -2337,6 +2209,10 @@ Address: %4
<translation>Fora de línia</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Etiqueta</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Sense confirmar</translation>
</message>
@@ -2389,10 +2265,6 @@ Address: %4
<translation>Tipus de transacció.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Adreça del destinatari de la transacció.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Import extret o afegit del balanç.</translation>
</message>
@@ -2461,7 +2333,7 @@ Address: %4
</message>
<message>
<source>Copy label</source>
- <translation>Copiar etiqueta</translation>
+ <translation>Copia l'etiqueta</translation>
</message>
<message>
<source>Copy amount</source>
@@ -2711,10 +2583,6 @@ Address: %4
<translation>Opcions de depuració/proves:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Descobreix la pròpia adreça IP (per defecte: 1 quan escoltant i no -externalip)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>No carreguis el moneder i inhabilita les crides RPC del moneder</translation>
</message>
@@ -2767,10 +2635,6 @@ Address: %4
<translation>No hi ha suficient descriptors de fitxers disponibles.</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Reconstrueix l'índex de la cadena de blocs dels fitxers actuals blk000??.dat</translation>
- </message>
- <message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation>Defineix la mida de la memòria cau de la base de dades en megabytes (%d a %d, per defecte: %d)</translation>
</message>
@@ -2875,6 +2739,10 @@ Address: %4
<translation>No es pot resoldre l'adreça -whitebind: «%s»</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Tria el directori de dades a l'inici (per defecte: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Connecta a través del proxy SOCKS5</translation>
</message>
@@ -2951,10 +2819,22 @@ Address: %4
<translation>Envia informació de traça/depuració a la consola en comptes del fitxer debug.log</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Defineix certificats arrel SSL per a la sol·licitud de pagament (per defecte: -sistema-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Defineix un idioma, per exemple "de_DE" (per defecte: preferències locals de sistema)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Mostra totes les opcions de depuració (ús: --help --help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Mostra la finestra de benvinguda a l'inici (per defecte: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Redueix el fitxer debug.log durant l'inici del client (per defecte: 1 quan no -debug)</translation>
</message>
@@ -2963,6 +2843,10 @@ Address: %4
<translation>Ha fallat la signatura de la transacció</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Inicia minimitzat</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Això és programari experimental.</translation>
</message>
@@ -2999,10 +2883,6 @@ Address: %4
<translation>Avís</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Avís: esta versió està obsoleta. És necessari actualitzar-la!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>Avís: s'ha ignorat l'argument no acceptat de -benchmark. Feu servir -debug=bench.</translation>
</message>
diff --git a/src/qt/locale/bitcoin_ca_ES.ts b/src/qt/locale/bitcoin_ca_ES.ts
index 52d93d59f5..3baa6e00cd 100644
--- a/src/qt/locale/bitcoin_ca_ES.ts
+++ b/src/qt/locale/bitcoin_ca_ES.ts
@@ -156,10 +156,6 @@
<translation>Canvia la contrasenya</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Introduïu tant la contrasenya antiga com la nova del moneder.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Confirma l'encriptació del moneder</translation>
</message>
@@ -188,10 +184,6 @@
<translation>Introduïu la contrasenya nova al moneder.&lt;br/&gt;Utilitzeu una contrasenya de &lt;b&gt;deu o més caràcters aleatoris&lt;/b&gt;, o &lt;b&gt;vuit o més paraules&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin es tancarà ara per acabar el procés d'encriptació. Recordeu que encriptar el moneder no protegeix completament els bitcoins de ser robats per programari maliciós instal·lat a l'ordinador.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>L'encriptació del moneder ha fallat</translation>
</message>
@@ -311,10 +303,6 @@
<translation>Envia monedes a una adreça Bitcoin</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Modifica les opcions de configuració per bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Realitza una còpia de seguretat del moneder a una altra ubicació</translation>
</message>
@@ -478,10 +466,6 @@
<source>Up to date</source>
<translation>Al dia</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>S'ha processat %n bloc de l'historial de transacció.</numerusform><numerusform>S'han processat %n blocs de l'historial de transacció.</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>S'està posant al dia ...</translation>
@@ -495,14 +479,6 @@
<translation>Transacció entrant</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Data: %1\nImport: %2\n Tipus: %3\n Adreça: %4\n</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>El moneder està &lt;b&gt;encriptat&lt;/b&gt; i actualment &lt;b&gt;desbloquejat&lt;/b&gt;</translation>
</message>
@@ -705,10 +681,6 @@ Address: %4
<translation>no</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Aquesta etiqueta es posa de color vermell si la mida de la transacció és més gran de 1000 bytes.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Això comporta una comissió d'almenys %1 per kB.</translation>
</message>
@@ -721,14 +693,6 @@ Address: %4
<translation>Les transaccions amb una major prioritat són més propenses a ser incloses en un bloc.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Aquesta etiqueta es torna vermella si la prioritat és menor que «mitjana».</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Aquesta etiqueta es torna vermella si qualsevol destinatari rep un import inferior a %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(sense etiqueta)</translation>
</message>
@@ -849,30 +813,6 @@ Address: %4
<source>command-line options</source>
<translation>Opcions de la línia d'ordres</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Opcions de IU</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Defineix un idioma, per exemple «de_DE» (per defecte: preferències locals de sistema)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Inicia minimitzat</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Defineix certificats arrel SSL per a la sol·licitud de pagament (per defecte: -sistema-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Mostra la finestra de benvinguda a l'inici (per defecte: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Tria el directori de dades a l'inici (per defecte: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -955,14 +895,6 @@ Address: %4
<translation>&amp;Principal</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Inicia automàticament el Bitcoin després de l'inici de sessió del sistema.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Inicia el Bitcoin a l'inici de sessió del sistema.</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Mida de la memòria cau de la base de &amp;dades</translation>
</message>
@@ -1075,10 +1007,6 @@ Address: %4
<translation>&amp;Minimitza a la barra d'aplicacions en comptes de la barra de tasques</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>Minimitza en comptes de sortir de la aplicació al tancar la finestra. Quan aquesta opció està activa, la aplicació només es tancarà al seleccionar Sortir al menú.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimitza en tancar</translation>
</message>
@@ -1091,10 +1019,6 @@ Address: %4
<translation>&amp;Llengua de la interfície d'usuari:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Aquí podeu definir la llengua de l'aplicació. Aquesta configuració tindrà efecte una vegada es reiniciï Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Unitats per mostrar els imports en:</translation>
</message>
@@ -1131,10 +1055,6 @@ Address: %4
<translation>Cal reiniciar el client per activar els canvis.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>S'aturarà el client, voleu procedir?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>Amb aquest canvi cal un reinici del client.</translation>
</message>
@@ -1241,10 +1161,6 @@ Address: %4
<translation>La xarxa de la sol·licitud de pagament no coincideix amb la xarxa del client.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>La sol·licitud de pagament ha caducat.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>La sol·licitud de pagament no està inicialitzada.</translation>
</message>
@@ -1320,10 +1236,6 @@ Address: %4
<translation>Agent d'usuari</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Adreça / nom de l'ordinador</translation>
- </message>
- <message>
<source>Ping Time</source>
<translation>Temps de ping</translation>
</message>
@@ -1355,14 +1267,6 @@ Address: %4
<translation>%1 s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>XARXA</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>DESCONEGUT</translation>
- </message>
- <message>
<source>None</source>
<translation>Cap</translation>
</message>
@@ -1561,18 +1465,10 @@ Address: %4
<translation>Fitxer de registre de depuració</translation>
</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>Obre el fitxer de registre de depuració de Bitcoin del directori de dades actual. Això pot trigar uns quants segons per a fitxers de registre grans.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Neteja la consola</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Us donem la benvinguda a la consola RPC de Bitcoin</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Utilitza les fletxes d'amunt i avall per navegar per l'historial, i &lt;b&gt;Ctrl-L&lt;\b&gt; per netejar la pantalla.</translation>
</message>
@@ -1861,14 +1757,6 @@ Address: %4
<translation>redueix els paràmetres de comissió</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Minimitza</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>Si la comissió personalitzada es defineix a 1000 satoshis i la transacció és de només 250 bytes, llavors «per kilobyte» només es paguen 250 satoshis en una comissió, mentre que amb la de «com a mínim» es pagarien 1000 satoshis. Per a transaccions superiors al kilobyte, en tots dos casos es paga per kilobyte.</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>per kilobyte</translation>
</message>
@@ -1997,10 +1885,6 @@ Address: %4
<translation>o</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>L'adreça de destinatari no és vàlida, si us plau comprovi-la.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>L'import a pagar ha de ser major que 0.</translation>
</message>
@@ -2013,10 +1897,6 @@ Address: %4
<translation>El total excedeix el teu balanç quan s'afegeix la comissió a la transacció %1.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>S'ha trobat una adreça duplicada, tan sols es pot enviar a cada adreça un cop per ordre de enviament.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Ha fallat la creació de la transacció!</translation>
</message>
@@ -2025,18 +1905,10 @@ Address: %4
<translation>S'ha rebutjat la transacció! Això pot passar si alguna de les monedes del vostre moneder ja s'han gastat; per exemple, si heu fet servir una còpia de seguretat del fitxer wallet.dat i s'haguessin gastat monedes de la còpia però sense marcar-les-hi com a gastades.</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
- <translation>Una comissió superior a %1 es considera una comissió excessiva.</translation>
- </message>
- <message>
<source>Pay only the minimum fee of %1</source>
<translation>Paga només la comissió mínima de %1</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>Estimat per a començar la confirmació en %1 bloc(s).</translation>
- </message>
- <message>
<source>Warning: Invalid Bitcoin address</source>
<translation>Avís: adreça Bitcoin no vàlida</translation>
</message>
@@ -2112,10 +1984,6 @@ Address: %4
<translation>Missatge:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Aquesta és una sol·licitud de pagament verificada.</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>Introduïu una etiqueta per a aquesta adreça per afegir-la a la llista d'adreces utilitzades</translation>
</message>
@@ -2124,10 +1992,6 @@ Address: %4
<translation>Un missatge que s'ha adjuntat al bitcoin: URI que s'emmagatzemarà amb la transacció per a la vostra referència. Nota: el missatge no s'enviarà a través de la xarxa Bitcoin.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Aquesta és una sol·licitud de pagament no verificada.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Paga a:</translation>
</message>
@@ -2158,10 +2022,6 @@ Address: %4
<translation>&amp;Signa el missatge</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Podeu signar missatges amb la vostra adreça per provar que són vostres. Aneu amb compte no signar qualsevol cosa, ja que els atacs de pesca electrònica (phishing) poden provar de confondre-us perquè els signeu amb la vostra identitat. Només signeu als documents completament detallats amb què hi esteu d'acord.</translation>
- </message>
- <message>
<source>The Bitcoin address to sign the message with</source>
<translation>L'adreça Bitcoin amb què signar el missatge</translation>
</message>
@@ -2214,10 +2074,6 @@ Address: %4
<translation>&amp;Verifica el missatge</translation>
</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>Introdueixi l'adreça signant, missatge (assegura't que copies salts de línia, espais, tabuladors, etc excactament tot el text) i la signatura a sota per verificar el missatge. Per evitar ser enganyat per un atac home-entre-mig, vés amb compte de no llegir més en la signatura del que hi ha al missatge signat mateix.</translation>
- </message>
- <message>
<source>The Bitcoin address the message was signed with</source>
<translation>L'adreça Bitcoin amb què va ser signat el missatge</translation>
</message>
@@ -2481,10 +2337,6 @@ Address: %4
<translation>Tipus</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adreça</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Immadur (%1 confirmacions, serà disponible després de %2)</translation>
</message>
@@ -2513,6 +2365,10 @@ Address: %4
<translation>Fora de línia</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Etiqueta</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Sense confirmar</translation>
</message>
@@ -2569,10 +2425,6 @@ Address: %4
<translation>Si està implicada o no una adreça només de lectura en la transacció.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Adreça del destinatari de la transacció.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Import extret o afegit del balanç.</translation>
</message>
@@ -2903,10 +2755,6 @@ Address: %4
<translation>Opcions de depuració/proves:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Descobreix la pròpia adreça IP (per defecte: 1 quan escoltant i no -externalip)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>No carreguis el moneder i inhabilita les crides RPC del moneder</translation>
</message>
@@ -2967,10 +2815,6 @@ Address: %4
<translation>Només connecta als nodes de la xarxa &lt;net&gt; (ipv4, ipv6 o onion)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Reconstrueix l'índex de la cadena de blocs dels fitxers actuals blk000??.dat</translation>
- </message>
- <message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation>Defineix la mida de la memòria cau de la base de dades en megabytes (%d a %d, per defecte: %d)</translation>
</message>
@@ -3031,10 +2875,6 @@ Address: %4
<translation>No es pot obtenir un bloqueig del directori de dades %s. El Bitcoin Core probablement ja s'estigui executant.</translation>
</message>
<message>
- <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</source>
- <translation>Limita contínuament la freqüència de les transaccions gratuïtes a &lt;n&gt;*1000 bytes per minut (per defecte: %u)</translation>
- </message>
- <message>
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
<translation>Crea fitxers nous amb els permisos per defecte del sistema, en comptes de l'umask 077 (només efectiu amb la funcionalitat de moneder inhabilitada)</translation>
</message>
@@ -3071,18 +2911,10 @@ Address: %4
<translation>Mida màxima de les dades en les transaccions de l'operador en què confiem i en les meves (per defecte: %u)</translation>
</message>
<message>
- <source>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</source>
- <translation>Comissions totals màximes que s'utilitzaran en una transacció d'un únic moneder. Si es defineix un valor massa baix les transaccions més grans poden interrompre's (per defecte: %s)</translation>
- </message>
- <message>
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
<translation>Consulta a adreces d'iguals a través de DNS, si es troba baix en adreces (per defecte: 1 a menys que -connect)</translation>
</message>
<message>
- <source>Require high priority for relaying free or low-fee transactions (default:%u)</source>
- <translation>Es requereix una prioritat alta per retransmetre transaccions gratuïtes o de baixa comissió (per defecte:%u)</translation>
- </message>
- <message>
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
<translation>Defineix la mida màxima de transaccions d'alta prioritat / baixa comissió en bytes (per defecte: %d)</translation>
</message>
@@ -3138,6 +2970,10 @@ per exemple: alertnotify=echo %%s | mail -s "Avís de Bitcoin" admin@foo.com</tr
<translation>No es pot resoldre l'adreça -whitebind: «%s»</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Tria el directori de dades a l'inici (per defecte: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Connecta a través del proxy SOCKS5</translation>
</message>
@@ -3234,10 +3070,22 @@ per exemple: alertnotify=echo %%s | mail -s "Avís de Bitcoin" admin@foo.com</tr
<translation>Envia les transaccions com a transaccions de comissió zero sempre que sigui possible (per defecte: %u) </translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Defineix certificats arrel SSL per a la sol·licitud de pagament (per defecte: -sistema-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Defineix un idioma, per exemple «de_DE» (per defecte: preferències locals de sistema)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Mostra totes les opcions de depuració (ús: --help --help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Mostra la finestra de benvinguda a l'inici (per defecte: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Redueix el fitxer debug.log durant l'inici del client (per defecte: 1 quan no -debug)</translation>
</message>
@@ -3246,6 +3094,10 @@ per exemple: alertnotify=echo %%s | mail -s "Avís de Bitcoin" admin@foo.com</tr
<translation>Ha fallat la signatura de la transacció</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Inicia minimitzat</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Això és programari experimental.</translation>
</message>
@@ -3286,10 +3138,6 @@ per exemple: alertnotify=echo %%s | mail -s "Avís de Bitcoin" admin@foo.com</tr
<translation>Avís</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Avís: aquesta versió està obsoleta. És necessari actualitzar-la!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>Avís: s'ha ignorat l'argument no acceptat de -benchmark. Feu servir -debug=bench.</translation>
</message>
diff --git a/src/qt/locale/bitcoin_cs.ts b/src/qt/locale/bitcoin_cs.ts
index 04cd96f425..b4d9ca146d 100644
--- a/src/qt/locale/bitcoin_cs.ts
+++ b/src/qt/locale/bitcoin_cs.ts
@@ -156,10 +156,6 @@
<translation>Změň heslo</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Zadej staré a nové heslo k peněžence.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Potvrď zašifrování peněženky</translation>
</message>
@@ -188,10 +184,6 @@
<translation>Zadej nové heslo k peněžence.&lt;br/&gt;Použij &lt;b&gt;alespoň deset náhodných znaků&lt;/b&gt; nebo &lt;b&gt;alespoň osm slov&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin se teď ukončí, aby dokončil zašifrování. Pamatuj však, že pouhé zašifrování peněženky úplně nezabraňuje krádeži tvých bitcoinů malwarem, kterým se může počítač nakazit.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Zašifrování peněženky selhalo</translation>
</message>
@@ -311,10 +303,6 @@
<translation>Pošli mince na Bitcoinovou adresu</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Uprav nastavení Bitcoinu</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Zazálohuj peněženku na jiné místo</translation>
</message>
@@ -478,10 +466,6 @@
<source>Up to date</source>
<translation>Aktuální</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>Zpracován %n blok transakční historie.</numerusform><numerusform>Zpracovány %n bloky transakční historie.</numerusform><numerusform>Zpracováno %n bloků transakční historie.</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>Stahuji...</translation>
@@ -495,18 +479,6 @@
<translation>Příchozí transakce</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Datum: %1
-Částka: %2
-Typ: %3
-Adresa: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Peněženka je &lt;b&gt;zašifrovaná&lt;/b&gt; a momentálně &lt;b&gt;odemčená&lt;/b&gt;</translation>
</message>
@@ -709,10 +681,6 @@ Adresa: %4
<translation>ne</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Popisek zčervená, pokud je velikost transakce větší než 1000 bajtů.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>To znamená, že je vyžadován poplatek alespoň %1 za kB.</translation>
</message>
@@ -725,14 +693,6 @@ Adresa: %4
<translation>Transakce s vyšší prioritou mají větší šanci na zařazení do bloku.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Popisek zčervená, pokud je priorita menší než „střední“.</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Popisek zčervená, pokud má některý příjemce obdržet částku menší než %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(bez označení)</translation>
</message>
@@ -853,30 +813,6 @@ Adresa: %4
<source>command-line options</source>
<translation>možnosti příkazové řádky</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Možnosti UI</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Nastavit jazyk, například "de_DE" (výchozí: systémové nastavení)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Nastartovat minimalizovaně</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Nastavit kořenové SSL certifikáty pro platební požadavky (výchozí: -system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Zobrazit startovací obrazovku (výchozí: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Zvolit adresář pro data při startu (výchozí: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -959,14 +895,6 @@ Adresa: %4
<translation>&amp;Hlavní</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Automaticky spustí Bitcoin po přihlášení do systému.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>S&amp;pustit Bitcoin po přihlášení do systému</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Velikost &amp;databázové cache</translation>
</message>
@@ -1079,10 +1007,6 @@ Adresa: %4
<translation>&amp;Minimalizovávat do ikony v panelu</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>Zavřením se aplikace minimalizuje. Pokud je tato volba zaškrtnuta, tak se aplikace ukončí pouze zvolením Konec v menu.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>Za&amp;vřením minimalizovat</translation>
</message>
@@ -1095,10 +1019,6 @@ Adresa: %4
<translation>&amp;Jazyk uživatelského rozhraní:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Tady lze nastavit jazyk uživatelského rozhraní. Nastavení se projeví až po restartování Bitcoinu.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>J&amp;ednotka pro částky:</translation>
</message>
@@ -1135,10 +1055,6 @@ Adresa: %4
<translation>K aktivaci změn je potřeba restartovat klienta.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>Klient se vypne, chceš pokračovat?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>Tahle změna bude chtít restartovat klienta.</translation>
</message>
@@ -1245,10 +1161,6 @@ Adresa: %4
<translation>Síť platebního požadavku neodpovídá síti klienta.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>Platební požadavek vypršel.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>Platební požadavek není zahájený.</translation>
</message>
@@ -1324,10 +1236,6 @@ Adresa: %4
<translation>Typ klienta</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Adresa/Název hostitele</translation>
- </message>
- <message>
<source>Ping Time</source>
<translation>Odezva</translation>
</message>
@@ -1359,14 +1267,6 @@ Adresa: %4
<translation>%1 s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>SÍŤ</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>NEZNÁMÁ</translation>
- </message>
- <message>
<source>None</source>
<translation>Žádné</translation>
</message>
@@ -1565,18 +1465,10 @@ Adresa: %4
<translation>Soubor s ladicími záznamy</translation>
</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>Otevři soubor s ladicími záznamy Bitcoinu z aktuálního datového adresáře. U velkých logů to může pár vteřin zabrat.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Vyčistit konzoli</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Vítej v Bitcoinové RPC konzoli.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>V historii se pohybuješ šipkami nahoru a dolů a pomocí &lt;b&gt;Ctrl-L&lt;/b&gt; čistíš obrazovku.</translation>
</message>
@@ -1865,14 +1757,6 @@ Adresa: %4
<translation>sbal nastavení poplatků</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Skryj</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>Pokud je vlastní poplatek nastavený na 1000 satoshi a transakce má pouze 250 bajtů, tak „za kilobajt“ zaplatí poplatek jen 250 satoshi, zatímco „přinejmenším“ zaplatí 1000 satoshi. Pro transakce větší než kilobajt obě možnosti platí za kilobajt.</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>za kilobajt</translation>
</message>
@@ -2001,10 +1885,6 @@ Adresa: %4
<translation>nebo</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Adresa příjemce je neplatná, překontroluj ji prosím.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Odesílaná částka musí být větší než 0.</translation>
</message>
@@ -2017,10 +1897,6 @@ Adresa: %4
<translation>Celková částka při připočítání poplatku %1 překročí stav účtu.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Zaznamenána duplikovaná adresa; každá adresa může být v odesílané platbě pouze jednou.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Vytvoření transakce selhalo!</translation>
</message>
@@ -2029,18 +1905,10 @@ Adresa: %4
<translation>Transakce byla odmítnuta! Tohle může nastat, pokud nějaké mince z tvé peněženky už jednou byly utraceny, například pokud používáš kopii souboru wallet.dat a mince byly utraceny v druhé kopii, ale nebyly označeny jako utracené v této.</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
- <translation>Poplatek vyšší než %1 je považován za absurdně vysoký.</translation>
- </message>
- <message>
<source>Pay only the minimum fee of %1</source>
<translation>Zaplatit pouze minimální poplatek %1</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>Potvrzování by podle odhadu mělo začít během %1 bloků.</translation>
- </message>
- <message>
<source>Warning: Invalid Bitcoin address</source>
<translation>Upozornění: Neplatná Bitcoinová adresa</translation>
</message>
@@ -2116,10 +1984,6 @@ Adresa: %4
<translation>Zpráva:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Tohle je ověřený platební požadavek.</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>Zadej označení této adresy; obojí se ti pak uloží do adresáře</translation>
</message>
@@ -2128,10 +1992,6 @@ Adresa: %4
<translation>Zpráva, která byla připojena k bitcoin: URI a která se ti pro přehled uloží k transakci. Poznámka: Tahle zpráva se neposílá s platbou po Bitcoinové síti.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Tohle je neověřený platební požadavek.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Komu:</translation>
</message>
@@ -2162,10 +2022,6 @@ Adresa: %4
<translation>&amp;Podepiš zprávu</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Podepsáním zprávy svými adresami můžeš prokázat, že je skutečně vlastníš. Buď opatrný a nepodepisuj nic vágního; například při phishingových útocích můžeš být lákán, abys něco takového podepsal. Podepisuj pouze zcela úplná a detailní prohlášení, se kterými souhlasíš.</translation>
- </message>
- <message>
<source>The Bitcoin address to sign the message with</source>
<translation>Bitcoinová adresa, kterou se zpráva podepíše</translation>
</message>
@@ -2218,10 +2074,6 @@ Adresa: %4
<translation>&amp;Ověř zprávu</translation>
</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>K ověření podpisu zprávy zadej podepisující adresu, zprávu (ověř si, že správně kopíruješ zalomení řádků, mezery, tabulátory apod.) a podpis. Dávej pozor na to, abys nezkopíroval do podpisu víc, než co je v samotné podepsané zprávě, abys nebyl napálen man-in-the-middle útokem.</translation>
- </message>
- <message>
<source>The Bitcoin address the message was signed with</source>
<translation>Bitcoinová adresa, kterou je zpráva podepsána</translation>
</message>
@@ -2485,10 +2337,6 @@ Adresa: %4
<translation>Typ</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adresa</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Nedozráno (%1 potvrzení, bude k dispozici za %2)</translation>
</message>
@@ -2517,6 +2365,10 @@ Adresa: %4
<translation>Offline</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Označení</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Nepotvrzeno</translation>
</message>
@@ -2573,10 +2425,6 @@ Adresa: %4
<translation>Zda tato transakce zahrnuje i některou sledovanou adresu.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Cílová adresa transakce.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Částka odečtená z nebo přičtená k účtu.</translation>
</message>
@@ -2907,10 +2755,6 @@ Adresa: %4
<translation>Možnosti ladění/testování:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Zjistit vlastní IP adresu (výchozí: 1, pokud naslouchá a není zadáno -externalip)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>Nenačítat peněženku a vypnout její RPC volání</translation>
</message>
@@ -2971,10 +2815,6 @@ Adresa: %4
<translation>Připojovat se pouze k uzlům v &lt;net&gt; síti (ipv4, ipv6 nebo onion)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Znovu vytvořit index řetězce bloků z aktuálních blk000??.dat souborů</translation>
- </message>
- <message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation>Nastavit velikost databázové vyrovnávací paměti v megabajtech (%d až %d, výchozí: %d)</translation>
</message>
@@ -3039,10 +2879,6 @@ Adresa: %4
<translation>Nedaří se mi získat zámek na datový adresář %s. Bitcoin Core pravděpodobně už jednou běží.</translation>
</message>
<message>
- <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</source>
- <translation>Kontinuálně omezovat bezpoplatkové transakce na &lt;n&gt;*1000 bajtů za minutu (výchozí: %u)</translation>
- </message>
- <message>
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
<translation>Vytvářet nové soubory s výchozími systémovými právy namísto umask 077 (uplatní se, pouze pokud je vypnutá funkce peněženky)</translation>
</message>
@@ -3103,6 +2939,10 @@ Adresa: %4
<translation>Nemohu přeložit -whitebind adresu: '%s'</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Zvolit adresář pro data při startu (výchozí: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Připojit se přes SOCKS5 proxy</translation>
</message>
@@ -3191,10 +3031,22 @@ Adresa: %4
<translation>Posílat transakce pokud možno bez poplatků (výchozí: %u)</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Nastavit kořenové SSL certifikáty pro platební požadavky (výchozí: -system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Nastavit jazyk, například "de_DE" (výchozí: systémové nastavení)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Zobrazit všechny možnosti ladění (užití: --help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Zobrazit startovací obrazovku (výchozí: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Při spuštění klienta zmenšit soubor debug.log (výchozí: 1, pokud není zadáno -debug)</translation>
</message>
@@ -3203,6 +3055,10 @@ Adresa: %4
<translation>Nepodařilo se podepsat transakci</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Nastartovat minimalizovaně</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Tohle je experimentální program.</translation>
</message>
@@ -3243,10 +3099,6 @@ Adresa: %4
<translation>Upozornění</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Upozornění: tahle verze je zastaralá, měl bys ji aktualizovat!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>Upozornění: Nepodporovaný argument -benchmark se ignoruje, použij -debug=bench.</translation>
</message>
diff --git a/src/qt/locale/bitcoin_cy.ts b/src/qt/locale/bitcoin_cy.ts
index c9c4379248..9867375fb2 100644
--- a/src/qt/locale/bitcoin_cy.ts
+++ b/src/qt/locale/bitcoin_cy.ts
@@ -68,10 +68,6 @@
<translation>Newid cyfrinymadrodd</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Teipiwch yr hen cyfrinymadrodd a chyfrinymadrodd newydd i mewn i'r waled.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Cadarnau amgryptiad y waled</translation>
</message>
@@ -441,13 +437,13 @@
<translation>Math</translation>
</message>
<message>
- <source>Address</source>
- <translation>Cyfeiriad</translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Agor tan %1</translation>
</message>
+ <message>
+ <source>Label</source>
+ <translation>Label</translation>
+ </message>
</context>
<context>
<name>TransactionView</name>
diff --git a/src/qt/locale/bitcoin_da.ts b/src/qt/locale/bitcoin_da.ts
index a5113d4a55..6979124615 100644
--- a/src/qt/locale/bitcoin_da.ts
+++ b/src/qt/locale/bitcoin_da.ts
@@ -156,10 +156,6 @@
<translation>Skift adgangskode</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Indtast den gamle og den nye adgangskode til tegnebogen.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Bekræft tegnebogskryptering</translation>
</message>
@@ -172,6 +168,10 @@
<translation>Er du sikker på, at du ønsker at kryptere din tegnebog?</translation>
</message>
<message>
+ <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+ <translation>Bitcoin Core vil nu lukke for at færdiggøre krypteringsprocessen. Husk at kryptering af din tegnebog kan ikke beskytte dine bitcoin fuldt ud mod at blive stjålet af eventuel malware, der måtte have inficeret din computer.</translation>
+ </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 ubrugelige i det øjeblik, du starter med at anvende den nye, krypterede tegnebog.</translation>
</message>
@@ -188,8 +188,8 @@
<translation>Indtast det nye kodeord til tegnebogen.&lt;br/&gt;Brug venligst et kodeord på &lt;b&gt;ti eller flere tilfældige tegn&lt;/b&gt; eller &lt;b&gt;otte eller flere ord&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin vil nu lukke for at gennemføre krypteringsprocessen. Husk på, at kryptering af din tegnebog vil ikke beskytte dine bitcoins fuldt ud mod at blive stjålet af malware på din computer.</translation>
+ <source>Enter the old passphrase and new passphrase to the wallet.</source>
+ <translation>Indtast den gamle adgangskode og en ny adgangskode til tegnebogen.</translation>
</message>
<message>
<source>Wallet encryption failed</source>
@@ -311,10 +311,6 @@
<translation>Send bitcoins til en Bitcoin-adresse</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Redigér konfigurationsindstillinger for Bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Lav sikkerhedskopi af tegnebogen til et andet sted</translation>
</message>
@@ -403,6 +399,10 @@
<translation>&amp;Om Bitcoin Core</translation>
</message>
<message>
+ <source>Modify configuration options for Bitcoin Core</source>
+ <translation>Ændr opsætning af Bitcoin Core</translation>
+ </message>
+ <message>
<source>Show the list of used sending addresses and labels</source>
<translation>Vis listen over brugte afsendelsesadresser og -mærkater</translation>
</message>
@@ -431,6 +431,10 @@
<translation>Ingen blokkilde tilgængelig …</translation>
</message>
<message numerus="yes">
+ <source>Processed %n block(s) of transaction history.</source>
+ <translation><numerusform>Bearbejdede %n blok med transaktionshistorik.</numerusform><numerusform>Bearbejdede %n blokke med transaktionshistorik.</numerusform></translation>
+ </message>
+ <message numerus="yes">
<source>%n hour(s)</source>
<translation><numerusform>%n time</numerusform><numerusform>%n timer</numerusform></translation>
</message>
@@ -478,35 +482,49 @@
<source>Up to date</source>
<translation>Opdateret</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>%n blok af transaktionshistorikken er blevet behandlet.</numerusform><numerusform>%n blokke af transaktionshistorikken er blevet behandlet.</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>Indhenter …</translation>
</message>
<message>
- <source>Sent transaction</source>
- <translation>Afsendt transaktion</translation>
+ <source>Date: %1
+</source>
+ <translation>Dato: %1
+</translation>
</message>
<message>
- <source>Incoming transaction</source>
- <translation>Indgående transaktion</translation>
+ <source>Amount: %1
+</source>
+ <translation>Beløb: %1
+</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
+ <source>Type: %1
</source>
- <translation>Dato: %1
-Beløb: %2
-Type: %3
-Adresse: %4
+ <translation>Type: %1
+</translation>
+ </message>
+ <message>
+ <source>Label: %1
+</source>
+ <translation>Mærkat: %1
+</translation>
+ </message>
+ <message>
+ <source>Address: %1
+</source>
+ <translation>Adresse: %1
</translation>
</message>
<message>
+ <source>Sent transaction</source>
+ <translation>Afsendt transaktion</translation>
+ </message>
+ <message>
+ <source>Incoming transaction</source>
+ <translation>Indgående transaktion</translation>
+ </message>
+ <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Tegnebog er &lt;b&gt;krypteret&lt;/b&gt; og i øjeblikket &lt;b&gt;ulåst&lt;/b&gt;</translation>
</message>
@@ -697,6 +715,18 @@ Adresse: %4
<translation>ingen</translation>
</message>
<message>
+ <source>This label turns red if the transaction size is greater than 1000 bytes.</source>
+ <translation>Denne mærkat bliver rød, hvis transaktionsstørrelsen er større end 1000 byte.</translation>
+ </message>
+ <message>
+ <source>This label turns red if the priority is smaller than "medium".</source>
+ <translation>Denne mærkat bliver rød, 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>Denne mærkat bliver rød, hvis en eller flere modtagere modtager et beløb, der er mindre end %1.</translation>
+ </message>
+ <message>
<source>Can vary +/- %1 satoshi(s) per input.</source>
<translation>Kan variere med +/- %1 satoshi per input.</translation>
</message>
@@ -709,10 +739,6 @@ Adresse: %4
<translation>nej</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <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>Dette betyder, at et gebyr på mindst %1 pr. kB er nødvendigt.</translation>
</message>
@@ -725,14 +751,6 @@ Adresse: %4
<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>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>Dette mærkat bliver rødt, hvis mindst én modtager et beløb mindre end %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(ingen mærkat)</translation>
</message>
@@ -853,30 +871,6 @@ Adresse: %4
<source>command-line options</source>
<translation>kommandolinjetilvalg</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Brugergrænsefladeindstillinger</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Angiv sprog, fx "da_DK" (standard: systemlokalitet)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Start minimeret</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Sæt SSL-rodcertifikater for betalingsanmodning (standard: -system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Vis opstartsbillede ved opstart (standard: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Vælg datamappe ved opstart (standard: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -955,14 +949,6 @@ Adresse: %4
<translation>&amp;Generelt</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Start Bitcoin automatisk, når der logges ind på systemet.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Start Bitcoin ved systemlogin</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Størrelsen på &amp;databasens cache</translation>
</message>
@@ -987,6 +973,14 @@ Adresse: %4
<translation>IP-adresse for proxyen (fx IPv4: 127.0.0.1 / IPv6: ::1)</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 Exit in the menu.</source>
+ <translation>Minimér i stedet for at lukke applikationen, når vinduet lukkes. Når denne indstilling er slået til, vil applikationen først blive lukket, når Afslut vælges i menuen.</translation>
+ </message>
+ <message>
+ <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin Core.</source>
+ <translation>Sproget for brugerfladen kan vælges her. Denne indstilling vil træde i kraft efter genstart af Bitcoin Core.</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>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>
@@ -1011,6 +1005,14 @@ Adresse: %4
<translation>&amp;Netværk</translation>
</message>
<message>
+ <source>Automatically start Bitcoin Core after logging in to the system.</source>
+ <translation>Start Bitcoin Core automatisk efter der logges ind på systemet.</translation>
+ </message>
+ <message>
+ <source>&amp;Start Bitcoin Core on system login</source>
+ <translation>&amp;Start Bitcoin Core ved system-login</translation>
+ </message>
+ <message>
<source>(0 = auto, &lt;0 = leave that many cores free)</source>
<translation>(0 = auto, &lt;0 = efterlad så mange kerner fri)</translation>
</message>
@@ -1075,10 +1077,6 @@ Adresse: %4
<translation>&amp;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>Minimér i stedet for at afslutte programmet, når vinduet lukkes. Når denne indstilling er valgt, vil programmet kun blive lukket, når du har valgt Afslut i menuen.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimér ved lukning</translation>
</message>
@@ -1091,10 +1089,6 @@ Adresse: %4
<translation>&amp;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>Sproget for brugergrænsefladen kan angives her. Denne indstilling træder først i kraft, når Bitcoin genstartes.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Enhed at vise beløb i:</translation>
</message>
@@ -1131,8 +1125,8 @@ Adresse: %4
<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>Klienten vil blive lukket ned; vil du fortsætte?</translation>
+ <source>Client will be shut down. Do you want to proceed?</source>
+ <translation>Klienten vil lukke ned. Vil du fortsætte?</translation>
</message>
<message>
<source>This change would require a client restart.</source>
@@ -1241,10 +1235,6 @@ Adresse: %4
<translation>Netværk for betalingsanmodning stemmer ikke overens med klientens netværk.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>Betalingsanmodning er udløbet.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>Betalingsanmodning er ikke klargjort.</translation>
</message>
@@ -1277,10 +1267,18 @@ Adresse: %4
<translation>Fil for betalingsanmodning kan ikke læses! Dette kan skyldes en ugyldig fil for betalingsanmodning.</translation>
</message>
<message>
+ <source>Payment request expired.</source>
+ <translation>Betalingsanmodning er udløbet.</translation>
+ </message>
+ <message>
<source>Unverified payment requests to custom payment scripts are unsupported.</source>
<translation>Ikke-verificerede betalingsanmodninger for tilpassede betalings-scripts understøttes ikke.</translation>
</message>
<message>
+ <source>Invalid payment request.</source>
+ <translation>Ugyldig betalingsanmodning.</translation>
+ </message>
+ <message>
<source>Refund from %1</source>
<translation>Tilbagebetaling fra %1</translation>
</message>
@@ -1320,8 +1318,8 @@ Adresse: %4
<translation>Brugeragent</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Adresse/værtsnavn</translation>
+ <source>Node/Service</source>
+ <translation>Knude/tjeneste</translation>
</message>
<message>
<source>Ping Time</source>
@@ -1355,14 +1353,6 @@ Adresse: %4
<translation>%1 s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>NETVÆRK</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>UKENDT</translation>
- </message>
- <message>
<source>None</source>
<translation>Ingen</translation>
</message>
@@ -1453,6 +1443,10 @@ Adresse: %4
<translation>Nuværende antal blokke</translation>
</message>
<message>
+ <source>Open the Bitcoin Core debug log file from the current data directory. This can take a few seconds for large log files.</source>
+ <translation>Åbn Bitcoin Cores fejlsøgningslogfil fra den aktuelle datamappe. Dette kan tage nogle få sekunder for store logfiler.</translation>
+ </message>
+ <message>
<source>Received</source>
<translation>Modtaget</translation>
</message>
@@ -1521,6 +1515,10 @@ Adresse: %4
<translation>Ping-tid</translation>
</message>
<message>
+ <source>Time Offset</source>
+ <translation>Tidsforskydning</translation>
+ </message>
+ <message>
<source>Last block time</source>
<translation>Tidsstempel for seneste blok</translation>
</message>
@@ -1561,16 +1559,12 @@ Adresse: %4
<translation>Fejlsøgningslogfil</translation>
</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 den nuværende datamappe. Dette kan tage nogle få sekunder for store logfiler.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Ryd konsol</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Velkommen til Bitcoin RPC-konsollen.</translation>
+ <source>Welcome to the Bitcoin Core RPC console.</source>
+ <translation>Velkommen til Bitcoin Cores RPC-konsol.</translation>
</message>
<message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
@@ -1861,14 +1855,6 @@ Adresse: %4
<translation>sammenfold gebyropsætning</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Minimér</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>Hvis det brugertilpassede gebyr er sat til 1000 satoshis, og transaktionen kun fylder 250 byte, betaler "pr. kilobyte" kun 250 satoshis i gebyr, mens "mindst" betaler 1000 satoshis. For transaktioner større end en kilobyte betaler begge pr. kilobyte.</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>pr. kilobyte</translation>
</message>
@@ -1877,6 +1863,10 @@ Adresse: %4
<translation>Hvis det brugertilpassede gebyr er sat til 1000 satoshis, og transaktionen kun fylder 250 byte, betaler "pr. kilobyte" kun 250 satoshis i gebyr, mens "total mindst" betaler 1000 satoshis. For transaktioner større end en kilobyte betaler begge pr. kilobyte.</translation>
</message>
<message>
+ <source>Hide</source>
+ <translation>Skjul</translation>
+ </message>
+ <message>
<source>total at least</source>
<translation>total mindst</translation>
</message>
@@ -1997,10 +1987,6 @@ Adresse: %4
<translation>eller</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Modtagerens adresse er ikke gyldig. Tjek venligst adressen igen.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Beløbet til betaling skal være større end 0.</translation>
</message>
@@ -2013,10 +1999,6 @@ Adresse: %4
<translation>Totalen overstiger din saldo, når transaktionsgebyret på %1 er inkluderet.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Duplikeret adresse fundet. Du kan kun sende til hver adresse én gang pr. afsendelse.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Oprettelse af transaktion mislykkedes!</translation>
</message>
@@ -2025,16 +2007,28 @@ Adresse: %4
<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>A fee higher than %1 is considered an insanely high fee.</source>
- <translation>Et gebyr højere end %1 anses som et vanvittigt højt gebyr.</translation>
+ <source>A fee higher than %1 is considered an absurdly high fee.</source>
+ <translation>Et gebyr højere end %1 opfattes som et absurd højt gebyr.</translation>
+ </message>
+ <message>
+ <source>Payment request expired.</source>
+ <translation>Betalingsanmodning er udløbet.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Estimated to begin confirmation within %n block(s).</source>
+ <translation><numerusform>Bekræftelse estimeres til at begynde inden for %n blok.</numerusform><numerusform>Bekræftelse estimeres til at begynde inden for %n blokke.</numerusform></translation>
</message>
<message>
<source>Pay only the minimum fee of %1</source>
<translation>Betal kun det minimale gebyr på %1</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>Bekræftelse vurderes at begynde inden for %1 blok(ke).</translation>
+ <source>The recipient address is not valid. Please recheck.</source>
+ <translation>Modtageradressen er ikke gyldig. Tjek venligst igen.</translation>
+ </message>
+ <message>
+ <source>Duplicate address found: addresses should only be used once each.</source>
+ <translation>Adressegenganger fundet. Adresser bør kun bruges én gang hver.</translation>
</message>
<message>
<source>Warning: Invalid Bitcoin address</source>
@@ -2108,12 +2102,24 @@ Adresse: %4
<translation>Fjern denne indgang</translation>
</message>
<message>
+ <source>The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
+ <translation>Gebyret vil blive trukket fra det sendte beløb. Modtageren vil modtage færre bitcoin, end du indtaster i beløbfeltet. Hvis flere modtagere vælges, vil gebyret deles ligeligt.</translation>
+ </message>
+ <message>
+ <source>S&amp;ubtract fee from amount</source>
+ <translation>&amp;Træk gebyr fra beløb</translation>
+ </message>
+ <message>
<source>Message:</source>
<translation>Besked:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Dette er en verificeret betalingsanmodning.</translation>
+ <source>This is an unauthenticated payment request.</source>
+ <translation>Dette er en uautentificeret betalingsanmodning.</translation>
+ </message>
+ <message>
+ <source>This is an authenticated payment request.</source>
+ <translation>Dette er en autentificeret betalingsanmodning.</translation>
</message>
<message>
<source>Enter a label for this address to add it to the list of used addresses</source>
@@ -2124,10 +2130,6 @@ Adresse: %4
<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>Dette er en ikke-verificeret betalingsanmodning.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Betal til:</translation>
</message>
@@ -2158,8 +2160,8 @@ Adresse: %4
<translation>&amp;Underskriv besked</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Du kan underskrive beskeder med dine Bitcoin-adresser for at bevise, at de tilhører dig. Pas på ikke at underskrive noget vagt, da phisingangreb kan narre dig til at overdrage din identitet. Underskriv kun fuldt detaljerede udsagn, du er enig i.</translation>
+ <source>You can sign messages/agreements with your addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
+ <translation>Du kan signere beskeder/aftaler med dine adresser for at bevise, at du kan modtage bitcoin, der bliver sendt til adresserne. Vær forsigtig med ikke at signere noget vagt eller tilfældigt, da eventuelle phishing-angreb kan snyde dig til at overlade din identitet til dem. Signér kun fuldt ud detaljerede udsagn, som du er enig i.</translation>
</message>
<message>
<source>The Bitcoin address to sign the message with</source>
@@ -2214,8 +2216,8 @@ Adresse: %4
<translation>&amp;Verificér besked</translation>
</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 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>
+ <source>Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction!</source>
+ <translation>Indtast modtagerens adresse, besked (vær sikker på at kopiere linjeskift, mellemrum, tabuleringer, etc. præcist) og signatur herunder for at verificere beskeden. Vær forsigtig med ikke at læse noget ud fra signaturen, som ikke står i selve beskeden, for at undgå at blive snydt af et eventuelt man-in-the-middle-angreb. Bemærk, at dette kun beviser, at den signerende person kan modtage med adressen; det kan ikke bevise hvem der har sendt en given transaktion!</translation>
</message>
<message>
<source>The Bitcoin address the message was signed with</source>
@@ -2420,7 +2422,7 @@ Adresse: %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>Minede 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>
+ <translation>Minede bitcoins skal modne %1 blokke, før de kan bruges. Da du genererede denne blok, blev den transmitteret 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>
@@ -2481,10 +2483,6 @@ Adresse: %4
<translation>Type</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adresse</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Umoden (%1 bekræftelser; vil være tilgængelig efter %2)</translation>
</message>
@@ -2513,6 +2511,10 @@ Adresse: %4
<translation>Offline</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Mærkat</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Ubekræftet</translation>
</message>
@@ -2569,8 +2571,8 @@ Adresse: %4
<translation>Afgør hvorvidt en kigge-adresse er involveret i denne transaktion.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Destinationsadresse for transaktion.</translation>
+ <source>User-defined intent/purpose of the transaction.</source>
+ <translation>Brugerdefineret hensigt/formål med transaktionen.</translation>
</message>
<message>
<source>Amount removed from or added to balance.</source>
@@ -2815,6 +2817,10 @@ Adresse: %4
<translation>Tildel til den givne adresse og lyt altid på den. Brug [vært]:port-notation for IPv6</translation>
</message>
<message>
+ <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default: %u)</source>
+ <translation>Begræns hyppigheden af gratis transaktioner løbende til &lt;n&gt;*1000 byte pr. minut (standard: %u)</translation>
+ </message>
+ <message>
<source>Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup</source>
<translation>Slet alle transaktioner i tegnebogen og genskab kun disse dele af blokkæden gennem -rescan under opstart</translation>
</message>
@@ -2835,6 +2841,14 @@ Adresse: %4
<translation>I denne tilstand styrer -genproclimit hvor mange blokke, der genereres med det samme.</translation>
</message>
<message>
+ <source>Maximum total fees to use in a single wallet transaction; setting this too low may abort large transactions (default: %s)</source>
+ <translation>Maksimalt totalt gebyr der kan bruges i en enkelt tegnebogstransaktion. For lav en værdi kan afbryde store transaktioner (standard: %s)</translation>
+ </message>
+ <message>
+ <source>Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, &gt;%u = target size in MiB to use for block files)</source>
+ <translation>Reducér pladskravene ved at beskære (slette, "prune") gamle blokke. Denne tilstand slår understøttelse af tegnebogen fra og er ikke kompatibel med -txindex. Advarsel: Fortrydelse af denne indstilling kræver download af hele blokkæden igen. (standard: 0 = slå beskæring af blokke fra, &gt;%u = målstørrelse i MiB der skal bruges til blokfiler)</translation>
+ </message>
+ <message>
<source>Set the number of script verification threads (%u to %d, 0 = auto, &lt;0 = leave that many cores free, default: %d)</source>
<translation>Sæt antallet af scriptverificeringstråde (%u til %d, 0 = auto, &lt;0 = efterlad det antal kernet fri, standard: %d)</translation>
</message>
@@ -2903,10 +2917,6 @@ Adresse: %4
<translation>Tilvalg for fejlfinding/test:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Find egen IP-adresse (standard: 1 når lytter og ingen -externalip)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>Indlæs ikke tegnebogen og slå tegnebogs-RPC-kald fra</translation>
</message>
@@ -2967,8 +2977,12 @@ Adresse: %4
<translation>Tilslut kun til knuder i netværk &lt;net&gt; (IPv4, IPv6 eller Onion)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Genbyg blokkædeindeks fra nuværende blk000??.dat filer</translation>
+ <source>Prune cannot be configured with a negative value.</source>
+ <translation>Beskæring kan ikke opsættes med en negativ værdi.</translation>
+ </message>
+ <message>
+ <source>Prune mode is incompatible with -txindex.</source>
+ <translation>Beskæringstilstand er ikke kompatibel med -txindex.</translation>
</message>
<message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
@@ -3007,6 +3021,10 @@ Adresse: %4
<translation>Tilvalg for tegnebog:</translation>
</message>
<message>
+ <source>Warning: This version is obsolete; upgrade required!</source>
+ <translation>Advarsel: Denne version er forældet; opgradering påkrævet!</translation>
+ </message>
+ <message>
<source>You need to rebuild the database using -reindex to change -txindex</source>
<translation>Du er nødt til at genopbygge databasen ved hjælp af -reindex for at ændre -txindex</translation>
</message>
@@ -3035,14 +3053,14 @@ Adresse: %4
<translation>Kan ikke opnå en lås på datamappe %s. Bitcoin Core kører sansynligvis allerede.</translation>
</message>
<message>
- <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</source>
- <translation>Rate-begræns kontinuerligt gratis transaktioner til &lt;n&gt;*1000 byte i minuttet (standard: %u)</translation>
- </message>
- <message>
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
<translation>Opret nye filer med systemstandard for rettigheder i stedet for umask 077 (kun virksomt med tegnebogsfunktionalitet slået fra)</translation>
</message>
<message>
+ <source>Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)</source>
+ <translation>Opdag egne IP-adresser (standard: 1 under lytning og ingen -externalip eller -proxy)</translation>
+ </message>
+ <message>
<source>Error: Listening for incoming connections failed (listen returned error %s)</source>
<translation>Fejl: Lytning efter indkommende forbindelser mislykkedes (lytning resultarede i fejl %s)</translation>
</message>
@@ -3075,16 +3093,20 @@ Adresse: %4
<translation>Maksimal størrelse på data i transaktioner til dataoverførsel, som vi videresender og miner (standard: %u)</translation>
</message>
<message>
- <source>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</source>
- <translation>Maksimalt totalgebyr der bruges på en enkelt tegnebogstransaktion. Sættes det for lavt kan store transaktioner afbrydes (standard: %s)</translation>
+ <source>Prune configured below the minimum of %d MB. Please use a higher number.</source>
+ <translation>Beskæring opsat under minimumsværdien %d MB. Brug venligst en højere værdi.</translation>
</message>
<message>
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
<translation>Forespørgsel</translation>
</message>
<message>
- <source>Require high priority for relaying free or low-fee transactions (default:%u)</source>
- <translation>Kræv høj prioritet for at videresende transaktioner med intet eller lavt gebyr (standard: %u)</translation>
+ <source>Randomize credentials for every proxy connection. This enables Tor stream isolation (default: %u)</source>
+ <translation>Brug tilfældige akkreditiver for hver proxy-forbindelse. Dette tillader strømisolation med Tor (standard: %u)</translation>
+ </message>
+ <message>
+ <source>Require high priority for relaying free or low-fee transactions (default: %u)</source>
+ <translation>Kræv høj prioritet for at videresende transaktioner uden eller med lavt gebyr (standard: %u)</translation>
</message>
<message>
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
@@ -3095,6 +3117,10 @@ Adresse: %4
<translation>Sæt antaller af tråde for coin-generering, hvis aktiveret (-1 = alle kerner, standard: %d)</translation>
</message>
<message>
+ <source>The transaction amount is too small to send after the fee has been deducted</source>
+ <translation>Transaktionsbeløbet er for lille til at sende, når gebyret er trukket fra</translation>
+ </message>
+ <message>
<source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit &lt;https://www.openssl.org/&gt; and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source>
<translation>Dette produkt indeholder software, der er udviklet af OpenSSL-projektet for brug i OpenSSL-værktøjskassen &lt;https://www.openssl.org/&gt;, samt kryptografisk software, der er skrevet af Eric Young, samt UPnP-software, der er skrevet af Thomas Bernard.</translation>
</message>
@@ -3135,14 +3161,38 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Andre knuder på hvidliste kan ikke DoS-bandlyses, og deres transaktioner videresendes altid, selv hvis de allerede er i mempool'en. Brugbart til fx et adgangspunkt</translation>
</message>
<message>
+ <source>You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain</source>
+ <translation>Du er nødt til at genbygge databasen ved hjælp af -reindex for at gå tilbage til ikke-beskåret tilstand. Dette vil downloade hele blokkæden igen</translation>
+ </message>
+ <message>
+ <source>(default: %u)</source>
+ <translation>(standard: %u)</translation>
+ </message>
+ <message>
<source>Accept public REST requests (default: %u)</source>
<translation>Acceptér offentlige REST-anmodninger (standard: %u)</translation>
</message>
<message>
+ <source>Activating best chain...</source>
+ <translation>Aktiverer bedste kæde …</translation>
+ </message>
+ <message>
+ <source>Allow self signed root certificates (default: 0)</source>
+ <translation>Tillad selvsignerede rodcertifikater (standard: 0)</translation>
+ </message>
+ <message>
+ <source>Can't run with a wallet in prune mode.</source>
+ <translation>Kan ikke køre med en tegnebog i beskåret tilstand.</translation>
+ </message>
+ <message>
<source>Cannot resolve -whitebind address: '%s'</source>
<translation>Kan ikke løse -whitebind adresse: "%s"</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Vælg datamappe ved opstart (standard: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Forbind gennem SOCKS5-proxy</translation>
</message>
@@ -3239,10 +3289,22 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Send transaktioner som nul-gebyr-transaktioner hvis muligt (standard: %u)</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Sæt SSL-rodcertifikater for betalingsanmodning (standard: -system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Angiv sprog, fx "da_DK" (standard: systemlokalitet)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Vis alle tilvalg for fejlsøgning (brug: --help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Vis opstartsbillede ved opstart (standard: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Formindsk debug.log filen ved klientopstart (standard: 1 hvis ikke -debug)</translation>
</message>
@@ -3251,6 +3313,14 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Underskrift af transaktion mislykkedes</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Start minimeret</translation>
+ </message>
+ <message>
+ <source>The transaction amount is too small to pay the fee</source>
+ <translation>Transaktionsbeløbet er for lille til at betale gebyret</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Dette er eksperimentelt software.</translation>
</message>
@@ -3271,6 +3341,10 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Transaktionen er for stor</translation>
</message>
<message>
+ <source>UI Options:</source>
+ <translation>Indstillinger for brugerflade:</translation>
+ </message>
+ <message>
<source>Unable to bind to %s on this computer (bind returned error %s)</source>
<translation>Ikke i stand til at tildele til %s på denne computer (bind returnerede fejl %s)</translation>
</message>
@@ -3291,10 +3365,6 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Advarsel</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Advarsel: Denne version er forældet, opgradering påkrævet!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>Advarsel: Ikke understøttet argument -benchmark ignoreret, brug -debug=bench.</translation>
</message>
@@ -3439,6 +3509,10 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Oprethold højest &lt;n&gt; forbindelser til andre knuder (standard: %u)</translation>
</message>
<message>
+ <source>Make the wallet broadcast transactions</source>
+ <translation>Få tegnebogen til at transmittere transaktioner</translation>
+ </message>
+ <message>
<source>Maximum per-connection receive buffer, &lt;n&gt;*1000 bytes (default: %u)</source>
<translation>Maksimum for modtagelsesbuffer pr. forbindelse, &lt;n&gt;*1000 byte (standard: %u)</translation>
</message>
diff --git a/src/qt/locale/bitcoin_de.ts b/src/qt/locale/bitcoin_de.ts
index fc18a235eb..263852fad2 100644
--- a/src/qt/locale/bitcoin_de.ts
+++ b/src/qt/locale/bitcoin_de.ts
@@ -156,10 +156,6 @@
<translation>Passphrase ändern</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Geben Sie die alte und neue Wallet-Passphrase ein.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Wallet-Verschlüsselung bestätigen</translation>
</message>
@@ -172,6 +168,10 @@
<translation>Sind Sie sich sicher, dass Sie Ihre Wallet verschlüsseln möchten?</translation>
</message>
<message>
+ <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+ <translation>Bitcoin Core wird jetzt beendet, um den Verschlüsselungsprozess abzuschließen. Vergessen Sie nicht, dass eine Wallet-Verschlüsselung nicht vollständig vor Diebstahl Ihrer Bitcoins durch Schadsoftware schützen kann, die Ihren Computer infiziert.</translation>
+ </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>WICHTIG: Alle vorherigen Wallet-Sicherungen sollten durch die neu erzeugte, verschlüsselte Wallet ersetzt werden. Aus Sicherheitsgründen werden vorherige Sicherungen der unverschlüsselten Wallet nutzlos, sobald Sie die neue, verschlüsselte Wallet verwenden.</translation>
</message>
@@ -188,8 +188,8 @@
<translation>Geben Sie die neue Passphrase für die Wallet ein.&lt;br&gt;Bitte benutzen Sie eine Passphrase bestehend aus &lt;b&gt;zehn oder mehr zufälligen Zeichen&lt;/b&gt; oder &lt;b&gt;acht oder mehr Wörtern&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin wird jetzt beendet, um den Verschlüsselungsprozess abzuschließen. Bitte beachten Sie, dass die Wallet-Verschlüsselung nicht vollständig vor Diebstahl Ihrer Bitcoins durch Schadprogramme schützt, die Ihren Computer befällt.</translation>
+ <source>Enter the old passphrase and new passphrase to the wallet.</source>
+ <translation>Geben Sie die alte und neue Wallet-Passphrase ein.</translation>
</message>
<message>
<source>Wallet encryption failed</source>
@@ -311,10 +311,6 @@
<translation>Bitcoins an eine Bitcoin-Adresse überweisen</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Die Konfiguration des Clients bearbeiten</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Eine Wallet-Sicherungskopie erstellen und abspeichern</translation>
</message>
@@ -403,6 +399,10 @@
<translation>&amp;Über Bitcoin Core</translation>
</message>
<message>
+ <source>Modify configuration options for Bitcoin Core</source>
+ <translation>Konfiguration von Bitcoin Core bearbeiten</translation>
+ </message>
+ <message>
<source>Show the list of used sending addresses and labels</source>
<translation>Liste verwendeter Zahlungsadressen und Bezeichnungen anzeigen</translation>
</message>
@@ -431,6 +431,10 @@
<translation>Keine Blockquelle verfügbar...</translation>
</message>
<message numerus="yes">
+ <source>Processed %n block(s) of transaction history.</source>
+ <translation><numerusform>%n Block des Transaktionsverlaufs verarbeitet.</numerusform><numerusform>%n Blöcke des Transaktionsverlaufs verarbeitet.</numerusform></translation>
+ </message>
+ <message numerus="yes">
<source>%n hour(s)</source>
<translation><numerusform>%n Stunde</numerusform><numerusform>%n Stunden</numerusform></translation>
</message>
@@ -478,15 +482,41 @@
<source>Up to date</source>
<translation>Auf aktuellem Stand</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>%n Block des Transaktionsverlaufs verarbeitet.</numerusform><numerusform>%n Blöcke des Transaktionsverlaufs verarbeitet.</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>Hole auf...</translation>
</message>
<message>
+ <source>Date: %1
+</source>
+ <translation>Datum: %1
+</translation>
+ </message>
+ <message>
+ <source>Amount: %1
+</source>
+ <translation>Betrag: %1
+</translation>
+ </message>
+ <message>
+ <source>Type: %1
+</source>
+ <translation>Typ: %1
+</translation>
+ </message>
+ <message>
+ <source>Label: %1
+</source>
+ <translation>Bezeichnung: %1
+</translation>
+ </message>
+ <message>
+ <source>Address: %1
+</source>
+ <translation>Adresse: %1
+</translation>
+ </message>
+ <message>
<source>Sent transaction</source>
<translation>Gesendete Transaktion</translation>
</message>
@@ -495,17 +525,6 @@
<translation>Eingehende Transaktion</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Datum: %1
-Betrag: %2
-Typ: %3
-Adresse: %4</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Wallet ist &lt;b&gt;verschlüsselt&lt;/b&gt; und aktuell &lt;b&gt;entsperrt&lt;/b&gt;</translation>
</message>
@@ -696,6 +715,18 @@ Adresse: %4</translation>
<translation>keine</translation>
</message>
<message>
+ <source>This label turns red if the transaction size is greater than 1000 bytes.</source>
+ <translation>Diese Bezeichnung wird rot, wenn die Transaktion größer als 1000 Byte ist.</translation>
+ </message>
+ <message>
+ <source>This label turns red if the priority is smaller than "medium".</source>
+ <translation>Diese Bezeichnung wird rot, wenn die Priorität niedriger als "mittel" ist.</translation>
+ </message>
+ <message>
+ <source>This label turns red if any recipient receives an amount smaller than %1.</source>
+ <translation>Diese Bezeichnung wird rot, wenn irgendein Empfänger einen Betrag kleiner als %1 erhält.</translation>
+ </message>
+ <message>
<source>Can vary +/- %1 satoshi(s) per input.</source>
<translation>Kann pro Eingabe um +/- %1 Satoshi(s) abweichen.</translation>
</message>
@@ -708,10 +739,6 @@ Adresse: %4</translation>
<translation>nein</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Diese Bezeichnung wird rot, wenn die Transaktion größer als 1000 Byte ist.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Das bedeutet, dass eine Gebühr von mindestens %1 pro kB erforderlich ist.</translation>
</message>
@@ -724,14 +751,6 @@ Adresse: %4</translation>
<translation>Transaktionen mit höherer Priorität haben eine größere Chance in einen Block aufgenommen zu werden.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Diese Bezeichnung wird rot, wenn die Priorität niedriger als "mittel" ist.</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Diese Bezeichnung wird rot, wenn irgendein Empfänger einen Betrag kleiner als %1 erhält.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(keine Bezeichnung)</translation>
</message>
@@ -852,30 +871,6 @@ Adresse: %4</translation>
<source>command-line options</source>
<translation>Kommandozeilenoptionen</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>UI-Optionen</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Sprache festlegen, z.B. "de_DE" (Standard: Systemstandard)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Minimiert starten</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>SSL-Wurzelzertifikate für Zahlungsanforderungen festlegen (Standard: -system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Startbildschirm beim Starten anzeigen (Standard: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Datenverzeichnis beim Starten auswählen (Standard: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -958,14 +953,6 @@ Adresse: %4</translation>
<translation>&amp;Allgemein</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Bitcoin nach der Anmeldung am System automatisch ausführen.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Starte Bitcoin nach Systemanmeldung</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Größe des &amp;Datenbankcaches</translation>
</message>
@@ -990,6 +977,14 @@ Adresse: %4</translation>
<translation>IP-Adresse des Proxies (z.B. IPv4: 127.0.0.1 / IPv6: ::1)</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 Exit in the menu.</source>
+ <translation>Minimiert die Anwendung anstatt sie zu beenden wenn das Fenster geschlossen wird. Wenn dies aktiviert ist, müssen Sie die Anwendung über "Beenden" im Menü schließen.</translation>
+ </message>
+ <message>
+ <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin Core.</source>
+ <translation>Legt die Sprache der Benutzeroberfläche fest. Diese Einstellung wird erst nach einem Neustart von Bitcoin Core aktiv.</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>Externe URLs (z.B. ein Block-Explorer), die im Kontextmenü des Transaktionsverlaufs eingefügt werden. In der URL wird %s durch den Transaktionshash ersetzt. Bei Angabe mehrerer URLs müssen diese durch "|" voneinander getrennt werden.</translation>
</message>
@@ -1014,6 +1009,14 @@ Adresse: %4</translation>
<translation>&amp;Netzwerk</translation>
</message>
<message>
+ <source>Automatically start Bitcoin Core after logging in to the system.</source>
+ <translation>Bitcoin Core nach der Anmeldung am System automatisch starten.</translation>
+ </message>
+ <message>
+ <source>&amp;Start Bitcoin Core on system login</source>
+ <translation>&amp;Bitcoin Core nach Systemanmeldung starten</translation>
+ </message>
+ <message>
<source>(0 = auto, &lt;0 = leave that many cores free)</source>
<translation>(0 = automatisch, &lt;0 = so viele Kerne frei lassen)</translation>
</message>
@@ -1078,10 +1081,6 @@ Adresse: %4</translation>
<translation>In den Infobereich anstatt in die Taskleiste &amp;minimieren</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>Minimiert die Anwendung anstatt sie zu beenden wenn das Fenster geschlossen wird. Wenn dies aktiviert ist, müssen Sie das Programm über "Beenden" im Menü schließen.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>Beim Schließen m&amp;inimieren</translation>
</message>
@@ -1094,10 +1093,6 @@ Adresse: %4</translation>
<translation>&amp;Sprache der Benutzeroberfläche:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Legt die Sprache der Benutzeroberfläche fest. Diese Einstellung wird erst nach einem Neustart von Bitcoin aktiv.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Einheit der Beträge:</translation>
</message>
@@ -1134,8 +1129,8 @@ Adresse: %4</translation>
<translation>Clientneustart nötig, um die Änderungen zu aktivieren.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>Client wird beendet, wollen Sie fortfahren?</translation>
+ <source>Client will be shut down. Do you want to proceed?</source>
+ <translation>Client wird beendet. Möchten Sie den Vorgang fortsetzen?</translation>
</message>
<message>
<source>This change would require a client restart.</source>
@@ -1244,10 +1239,6 @@ Adresse: %4</translation>
<translation>Netzwerk der Zahlungsanforderung stimmt nicht mit dem Client-Netzwerk überein.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>Zahlungsanforderung ist abgelaufen.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>Zahlungsanforderung ist nicht initialisiert.</translation>
</message>
@@ -1280,10 +1271,18 @@ Adresse: %4</translation>
<translation>Zahlungsanforderungsdatei kann nicht gelesen werden! Dies kann durch eine ungültige Zahlungsanforderungsdatei verursacht werden.</translation>
</message>
<message>
+ <source>Payment request expired.</source>
+ <translation>Zahlungsanforderung abgelaufen.</translation>
+ </message>
+ <message>
<source>Unverified payment requests to custom payment scripts are unsupported.</source>
<translation>Unverifizierte Zahlungsanforderungen an benutzerdefinierte Zahlungsskripte werden nicht unterstützt.</translation>
</message>
<message>
+ <source>Invalid payment request.</source>
+ <translation>Ungültige Zahlungsanforderung.</translation>
+ </message>
+ <message>
<source>Refund from %1</source>
<translation>Rücküberweisung von %1</translation>
</message>
@@ -1323,8 +1322,8 @@ Adresse: %4</translation>
<translation>User-Agent</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Adresse/Hostname</translation>
+ <source>Node/Service</source>
+ <translation>Knoten/Dienst</translation>
</message>
<message>
<source>Ping Time</source>
@@ -1358,14 +1357,6 @@ Adresse: %4</translation>
<translation>%1 s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>NETZWERK</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>UNBEKANNT</translation>
- </message>
- <message>
<source>None</source>
<translation>Keine</translation>
</message>
@@ -1456,6 +1447,10 @@ Adresse: %4</translation>
<translation>Aktuelle Anzahl Blöcke</translation>
</message>
<message>
+ <source>Open the Bitcoin Core debug log file from the current data directory. This can take a few seconds for large log files.</source>
+ <translation>Öffnet die "Bitcoin Core"-Debugprotokolldatei aus dem aktuellen Datenverzeichnis. Dies kann bei großen Protokolldateien einige Sekunden dauern.</translation>
+ </message>
+ <message>
<source>Received</source>
<translation>Empfangen</translation>
</message>
@@ -1524,6 +1519,10 @@ Adresse: %4</translation>
<translation>Pingzeit</translation>
</message>
<message>
+ <source>Time Offset</source>
+ <translation>Zeitversatz</translation>
+ </message>
+ <message>
<source>Last block time</source>
<translation>Letzte Blockzeit</translation>
</message>
@@ -1564,16 +1563,12 @@ Adresse: %4</translation>
<translation>Debugprotokolldatei</translation>
</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>Öffnet die Bitcoin-Debugprotokolldatei aus dem aktuellen Datenverzeichnis. Dies kann bei großen Protokolldateien einige Sekunden dauern.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Konsole zurücksetzen</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Willkommen in der Bitcoin-RPC-Konsole.</translation>
+ <source>Welcome to the Bitcoin Core RPC console.</source>
+ <translation>Willkommen in der "Bitcoin Core"-RPC-Konsole.</translation>
</message>
<message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
@@ -1864,14 +1859,6 @@ Adresse: %4</translation>
<translation>Transaktionsgebühreneinstellungen ausblenden</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Minimieren</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>Wenn die benutzerdefinierte Gebühr 1000 Satoshis beträgt und die Transaktion nur 250 Byte groß ist, wird bei Auswahl von "pro Kilobyte" eine Gebühr in Höhe von 250 Satoshis, bei Auswahl von "Mindestbetrag" eine Gebühr in Höhe von 1000 Satoshis bezahlt. Bei Transaktionen die Größer als ein Kilobyte sind, werden bei beiden Optionen die Gebühren pro Kilobyte bezahlt.</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>pro Kilobyte</translation>
</message>
@@ -1880,6 +1867,10 @@ Adresse: %4</translation>
<translation>Wenn die benutzerdefinierte Gebühr 1000 Satoshis beträgt und die Transaktion nur 250 Byte groß ist, wird bei Auswahl von "pro Kilobyte" eine Gebühr in Höhe von 250 Satoshis, bei Auswahl von "Mindestbetrag" eine Gebühr in Höhe von 1000 Satoshis bezahlt. Bei Transaktionen die Größer als ein Kilobyte sind, werden bei beiden Optionen die Gebühren pro Kilobyte bezahlt.</translation>
</message>
<message>
+ <source>Hide</source>
+ <translation>Ausblenden</translation>
+ </message>
+ <message>
<source>total at least</source>
<translation>Mindestbetrag</translation>
</message>
@@ -2000,10 +1991,6 @@ Adresse: %4</translation>
<translation>oder</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Die Zahlungsadresse ist ungültig, bitte nochmals überprüfen.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Der zu zahlende Betrag muss größer als 0 sein.</translation>
</message>
@@ -2016,10 +2003,6 @@ Adresse: %4</translation>
<translation>Der angegebene Betrag übersteigt aufgrund der Transaktionsgebühr in Höhe von %1 Ihren Kontostand.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Doppelte Zahlungsadresse gefunden, pro Überweisung kann an jede Adresse nur einmalig etwas überwiesen werden.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Transaktionserstellung fehlgeschlagen!</translation>
</message>
@@ -2028,16 +2011,28 @@ Adresse: %4</translation>
<translation>Die Transaktion wurde abgelehnt! Dies kann passieren, wenn einige Bitcoins aus Ihrer Wallet bereits ausgegeben wurden. Beispielsweise weil Sie eine Kopie Ihrer wallet.dat genutzt, die Bitcoins dort ausgegeben haben und dies daher in der derzeit aktiven Wallet nicht vermerkt ist.</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
+ <source>A fee higher than %1 is considered an absurdly high fee.</source>
<translation>Eine höhere Gebühr als %1 wird als unsinnig hohe Gebühr angesehen.</translation>
</message>
<message>
+ <source>Payment request expired.</source>
+ <translation>Zahlungsanforderung abgelaufen.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Estimated to begin confirmation within %n block(s).</source>
+ <translation><numerusform>Voraussichtlicher Beginn der Bestätigung innerhalb von %n Block.</numerusform><numerusform>Voraussichtlicher Beginn der Bestätigung innerhalb von %n Blöcken.</numerusform></translation>
+ </message>
+ <message>
<source>Pay only the minimum fee of %1</source>
<translation>Nur die minimale Gebühr in Höhe von %1 zahlen</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>Voraussichtlicher Beginn der Bestätigung innerhalb von %1 Blöcken.</translation>
+ <source>The recipient address is not valid. Please recheck.</source>
+ <translation>Die Zahlungsadresse ist ungültig, bitte nochmals überprüfen.</translation>
+ </message>
+ <message>
+ <source>Duplicate address found: addresses should only be used once each.</source>
+ <translation>Doppelte Adresse entdeckt: Adressen dürfen jeweils nur einmal vorkommen.</translation>
</message>
<message>
<source>Warning: Invalid Bitcoin address</source>
@@ -2111,12 +2106,24 @@ Adresse: %4</translation>
<translation>Diesen Eintrag entfernen</translation>
</message>
<message>
+ <source>The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
+ <translation>Die Gebühr wird vom zu überweisenden Betrag abgezogen. Der Empfänger wird also weniger Bitcoins erhalten, als Sie im Betrags-Feld eingegeben haben. Falls mehrere Empfänger ausgewählt wurden, wird die Gebühr gleichmäßig verteilt.</translation>
+ </message>
+ <message>
+ <source>S&amp;ubtract fee from amount</source>
+ <translation>Gebühr vom Betrag ab&amp;ziehen</translation>
+ </message>
+ <message>
<source>Message:</source>
<translation>Nachricht:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Dies is eine verifizierte Zahlungsanforderung.</translation>
+ <source>This is an unauthenticated payment request.</source>
+ <translation>Dies ist keine beglaubigte Zahlungsanforderung.</translation>
+ </message>
+ <message>
+ <source>This is an authenticated payment request.</source>
+ <translation>Dies ist eine beglaubigte Zahlungsanforderung.</translation>
</message>
<message>
<source>Enter a label for this address to add it to the list of used addresses</source>
@@ -2127,10 +2134,6 @@ Adresse: %4</translation>
<translation>Eine an die "bitcoin:"-URI angefügte Nachricht, die zusammen mit der Transaktion gespeichert wird. Hinweis: Diese Nachricht wird nicht über das Bitcoin-Netzwerk gesendet.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Dies is eine unverifizierte Zahlungsanforderung.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Empfänger:</translation>
</message>
@@ -2161,10 +2164,6 @@ Adresse: %4</translation>
<translation>Nachricht &amp;signieren</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Sie können Nachrichten mit Ihren Adressen signieren, um den Besitz dieser Adressen zu beweisen. Bitte nutzen Sie diese Funktion mit Vorsicht und nehmen Sie sich vor Phishingangriffen in Acht. Signieren Sie nur Nachrichten, mit denen Sie vollständig einverstanden sind.</translation>
- </message>
- <message>
<source>The Bitcoin address to sign the message with</source>
<translation>Die Bitcoin-Adresse mit der die Nachricht signiert wird</translation>
</message>
@@ -2217,10 +2216,6 @@ Adresse: %4</translation>
<translation>Nachricht &amp;verifizieren</translation>
</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>Geben Sie die signierende Adresse, Nachricht (achten Sie darauf Zeilenumbrüche, Leerzeichen, Tabulatoren usw. exakt zu kopieren) und Signatur unten ein, um die Nachricht zu verifizieren. Vorsicht, interpretieren Sie nicht mehr in die Signatur hinein, als in der signierten Nachricht selber enthalten ist, um nicht von einem Man-in-the-middle-Angriff hinters Licht geführt zu werden.</translation>
- </message>
- <message>
<source>The Bitcoin address the message was signed with</source>
<translation>Die Bitcoin-Adresse mit der die Nachricht signiert wurde</translation>
</message>
@@ -2484,10 +2479,6 @@ Adresse: %4</translation>
<translation>Typ</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adresse</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Unreif (%1 Bestätigungen, wird verfügbar sein nach %2)</translation>
</message>
@@ -2516,6 +2507,10 @@ Adresse: %4</translation>
<translation>Offline</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Bezeichnung</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Unbestätigt</translation>
</message>
@@ -2572,8 +2567,8 @@ Adresse: %4</translation>
<translation>Zeigt an, ob eine beobachtete Adresse in diese Transaktion involviert ist.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Zieladresse der Transaktion.</translation>
+ <source>User-defined intent/purpose of the transaction.</source>
+ <translation>Benutzerdefinierte Absicht bzw. Verwendungszweck der Transaktion</translation>
</message>
<message>
<source>Amount removed from or added to balance.</source>
@@ -2818,6 +2813,10 @@ Adresse: %4</translation>
<translation>An die angegebene Adresse binden und immer abhören. Für IPv6 "[Host]:Port"-Notation verwenden</translation>
</message>
<message>
+ <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default: %u)</source>
+ <translation>Durchgehend die Anzahl freier Transaktionen auf &lt;n&gt; * 1000 Byte pro Minute begrenzen (Standard: %u)</translation>
+ </message>
+ <message>
<source>Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup</source>
<translation>Alle Wallet-Transaktionen löschen und nur diese Teilbereiche der Blockkette durch -rescan beim Starten wiederherstellen</translation>
</message>
@@ -2838,6 +2837,10 @@ Adresse: %4</translation>
<translation>In diesem Modus legt -genproclimit fest, wie viele Blöcke sofort erzeugt werden.</translation>
</message>
<message>
+ <source>Maximum total fees to use in a single wallet transaction; setting this too low may abort large transactions (default: %s)</source>
+ <translation>Maximale Gesamtgebühren je Wallet-Transaktion, ein zu niedriger Wert kann große Transaktionen abbrechen (Standard: %s)</translation>
+ </message>
+ <message>
<source>Set the number of script verification threads (%u to %d, 0 = auto, &lt;0 = leave that many cores free, default: %d)</source>
<translation>Maximale Anzahl an Skript-Verifizierungs-Threads festlegen (%u bis %d, 0 = automatisch, &lt;0 = so viele Kerne frei lassen, Standard: %d)</translation>
</message>
@@ -2906,10 +2909,6 @@ Adresse: %4</translation>
<translation>Debugging-/Testoptionen:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Eigene IP-Adresse erkennen (Standard: 1, wenn abgehört wird und nicht -externalip)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>Die Wallet nicht laden und Wallet-RPC-Aufrufe deaktivieren</translation>
</message>
@@ -2970,10 +2969,6 @@ Adresse: %4</translation>
<translation>Nur zu Knoten des Netzwerktyps &lt;net&gt; verbinden (ipv4, ipv6 oder onion)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Blockkettenindex aus aktuellen Dateien blk000??.dat wiederaufbauen</translation>
- </message>
- <message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation>Größe des Datenbankcaches in Megabyte festlegen (%d bis %d, Standard: %d)</translation>
</message>
@@ -3010,6 +3005,10 @@ Adresse: %4</translation>
<translation>Wallet-Optionen:</translation>
</message>
<message>
+ <source>Warning: This version is obsolete; upgrade required!</source>
+ <translation>Warnung: Diese Version is veraltet, Aktualisierung erforderlich!</translation>
+ </message>
+ <message>
<source>You need to rebuild the database using -reindex to change -txindex</source>
<translation>Sie müssen die Datenbank mit Hilfe von -reindex neu aufbauen, um -txindex zu verändern</translation>
</message>
@@ -3038,14 +3037,14 @@ Adresse: %4</translation>
<translation>Datenverzeichnis %s kann nicht gesperrt werden, da Bitcoin Core wahrscheinlich bereits gestartet wurde.</translation>
</message>
<message>
- <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</source>
- <translation>Anzahl der freien Transaktionen auf &lt;n&gt; * 1000 Byte pro Minute begrenzen (Standard: %u)</translation>
- </message>
- <message>
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
<translation>Neue Dateien mit Standard-Systemrechten erzeugen, anstatt mit umask 077 (nur mit deaktivierter Walletfunktion nutzbar)</translation>
</message>
<message>
+ <source>Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)</source>
+ <translation>Eigene IP-Adressen ermitteln (Standard: 1, wenn abgehört wird und nicht -externalip oder -proxy)</translation>
+ </message>
+ <message>
<source>Error: Listening for incoming connections failed (listen returned error %s)</source>
<translation>Fehler: Abhören nach eingehenden Verbindungen fehlgeschlagen (listen meldete Fehler %s)</translation>
</message>
@@ -3078,16 +3077,16 @@ Adresse: %4</translation>
<translation>Maximale Datengröße in "Data Carrier"-Transaktionen die weitergeleitet und erarbeitet werden (Standard: %u)</translation>
</message>
<message>
- <source>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</source>
- <translation>Maximale Gesamtgebühren je Wallet-Transaktion, ein zu niedriger Wert kann große Transaktionen abbrechen (Standard: %s)</translation>
- </message>
- <message>
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
<translation>Adressen von Gegenstellen via DNS-Namensauflösung finden, falls zu wenige Adressen verfügbar sind (Standard: 1, außer bei -connect)</translation>
</message>
<message>
- <source>Require high priority for relaying free or low-fee transactions (default:%u)</source>
- <translation>Zum Weiterleiten von freien Transaktionen oder Transaktionen mit niedrigen Gebühren eine hohe Priorität voraussetzen (Standard: %u)</translation>
+ <source>Randomize credentials for every proxy connection. This enables Tor stream isolation (default: %u)</source>
+ <translation>Zufällige Anmeldedaten für jede Proxyverbindung verwenden. Dies aktiviert Tor-Datenflussisolation (Standard: %u)</translation>
+ </message>
+ <message>
+ <source>Require high priority for relaying free or low-fee transactions (default: %u)</source>
+ <translation>Hohe Priorität zum Weiterleiten von freien bzw. Transaktionen mit niedrigen Gebühren voraussetzen (Standard: %u)</translation>
</message>
<message>
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
@@ -3098,6 +3097,10 @@ Adresse: %4</translation>
<translation>Maximale Anzahl an Threads zur Bitcoinerzeugung, wenn aktiviert, festlegen (-1 = alle Kerne, Standard: %d)</translation>
</message>
<message>
+ <source>The transaction amount is too small to send after the fee has been deducted</source>
+ <translation>Der Transaktionsbetrag ist zum senden zu niedrig, nachdem die Gebühr abgezogen wurde.</translation>
+ </message>
+ <message>
<source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit &lt;https://www.openssl.org/&gt; and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source>
<translation>Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im OpenSSL-Toolkit &lt;https://www.openssl.org/&gt; entwickelt wird, sowie von Eric Young geschriebene kryptographische Software und von Thomas Bernard geschriebene UPnP-Software.</translation>
</message>
@@ -3138,14 +3141,30 @@ Beispiel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Erlaubte Gegenstellen werden nicht für DoS-Attacken gesperrt und ihre Transkationen werden immer weitergeleitet, auch wenn sie sich bereits im Speicherpool befinden, was z.B. für Gateways sinnvoll ist.</translation>
</message>
<message>
+ <source>(default: %u)</source>
+ <translation>(Standard: %u)</translation>
+ </message>
+ <message>
<source>Accept public REST requests (default: %u)</source>
<translation>Öffentliche REST-Anfragen annehmen (Standard: %u)</translation>
</message>
<message>
+ <source>Activating best chain...</source>
+ <translation>Aktiviere beste Blockkette...</translation>
+ </message>
+ <message>
+ <source>Allow self signed root certificates (default: 0)</source>
+ <translation>Selbstunterschriebene Stammzertifikate erlauben (Standard: 0)</translation>
+ </message>
+ <message>
<source>Cannot resolve -whitebind address: '%s'</source>
<translation>Kann Adresse in -whitebind nicht auflösen: '%s'</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Datenverzeichnis beim Starten auswählen (Standard: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Über einen SOCKS5-Proxy &amp;verbinden</translation>
</message>
@@ -3242,10 +3261,22 @@ Beispiel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Transaktionen, wenn möglich, als gebührenfreie Transaktion senden (Standard: %u)</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>SSL-Wurzelzertifikate für Zahlungsanforderungen festlegen (Standard: -system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Sprache festlegen, z.B. "de_DE" (Standard: Systemstandard)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Zeige alle Debuggingoptionen (Benutzung: --help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Startbildschirm beim Starten anzeigen (Standard: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Protokolldatei debug.log beim Starten des Clients kürzen (Standard: 1, wenn kein -debug)</translation>
</message>
@@ -3254,6 +3285,14 @@ Beispiel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Signierung der Transaktion fehlgeschlagen</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Minimiert starten</translation>
+ </message>
+ <message>
+ <source>The transaction amount is too small to pay the fee</source>
+ <translation>Der Transaktionsbetrag ist zu niedrig, um die Gebühr zu bezahlen.</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Dies ist experimentelle Software.</translation>
</message>
@@ -3274,6 +3313,10 @@ Beispiel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Transaktion zu groß</translation>
</message>
<message>
+ <source>UI Options:</source>
+ <translation>Benutzeroberflächenoptionen:</translation>
+ </message>
+ <message>
<source>Unable to bind to %s on this computer (bind returned error %s)</source>
<translation>Kann auf diesem Computer nicht an %s binden (bind meldete Fehler %s)</translation>
</message>
@@ -3294,10 +3337,6 @@ Beispiel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Warnung</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Warnung: Diese Version is veraltet, Aktualisierung erforderlich!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>Warnung: Nicht unterstütztes Argument -benchmark wurde ignoriert, bitte -debug=bench verwenden.</translation>
</message>
@@ -3438,6 +3477,10 @@ Beispiel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Maximal &lt;n&gt; Verbindungen zu Gegenstellen aufrechterhalten (Standard: %u)</translation>
</message>
<message>
+ <source>Make the wallet broadcast transactions</source>
+ <translation>Die Wallet soll Transaktionen übertragen/broadcasten</translation>
+ </message>
+ <message>
<source>Maximum per-connection receive buffer, &lt;n&gt;*1000 bytes (default: %u)</source>
<translation>Maximale Größe des Empfangspuffers pro Verbindung, &lt;n&gt; * 1000 Byte (Standard: %u)</translation>
</message>
diff --git a/src/qt/locale/bitcoin_el_GR.ts b/src/qt/locale/bitcoin_el_GR.ts
index 084c9fa753..5cabe43032 100644
--- a/src/qt/locale/bitcoin_el_GR.ts
+++ b/src/qt/locale/bitcoin_el_GR.ts
@@ -7,7 +7,7 @@
</message>
<message>
<source>&amp;New</source>
- <translation>&amp;Νέα</translation>
+ <translation>&amp;Νέo</translation>
</message>
<message>
<source>Copy the currently selected address to the system clipboard</source>
@@ -87,7 +87,7 @@
</message>
<message>
<source>Exporting Failed</source>
- <translation>Η εξαγωγή απέτυχε</translation>
+ <translation>Η Εξαγωγή Απέτυχε</translation>
</message>
<message>
<source>There was an error trying to save the address list to %1. Please try again.</source>
@@ -98,7 +98,7 @@
<name>AddressTableModel</name>
<message>
<source>Label</source>
- <translation>Ετικέτα</translation>
+ <translation>Επιγραφή</translation>
</message>
<message>
<source>Address</source>
@@ -152,10 +152,6 @@
<translation>Άλλαξε κωδικο πρόσβασης</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Εισάγετε τον παλιό και τον νεο κωδικο στο πορτοφολι.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Επιβεβαίωσε την κρυπτογραφηση του πορτοφολιού</translation>
</message>
@@ -185,10 +181,6 @@
<translation>Εισάγετε τον νέο κωδικό πρόσβασης στον πορτοφόλι &lt;br/&gt; Παρακαλώ χρησιμοποιείστε ένα κωδικό με &lt;b&gt; 10 ή περισσότερους τυχαίους χαρακτήρες&lt;/b&gt; ή &lt;b&gt; οχτώ ή παραπάνω λέξεις&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Το Bitcoin θα κλεισει τώρα για να τελειώσει την διαδικασία κρυπτογραφησης. Θυμησου ότι κρυπτογραφώντας το πορτοφολι σου δεν μπορείς να προστατέψεις πλήρως τα bitcoins σου από κλοπή στην περίπτωση όπου μολυνθεί ο υπολογιστής σου με κακόβουλο λογισμικό.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Η κρυπτογραφηση του πορτοφολιού απέτυχε</translation>
</message>
@@ -308,10 +300,6 @@
<translation>Στείλε νομίσματα σε μια διεύθυνση bitcoin</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Επεργασία ρυθμισεων επιλογών για το Bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Δημιουργία αντιγράφου ασφαλείας πορτοφολιού σε άλλη τοποθεσία</translation>
</message>
@@ -419,34 +407,14 @@
<source>Show the Bitcoin Core help message to get a list with possible Bitcoin command-line options</source>
<translation>Εμφανιση του Bitcoin-Qt μήνυματος βοήθειας για να πάρετε μια λίστα με τις πιθανές επιλογές Bitcoin γραμμής εντολών.</translation>
</message>
- <message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n ενεργή σύνδεση στο δίκτυο Bitcoin</numerusform><numerusform>%n ενεργές συνδέσεις στο δίκτυο Βitcoin</numerusform></translation>
- </message>
<message>
<source>No block source available...</source>
<translation>Η πηγή του μπλοκ δεν ειναι διαθέσιμη... </translation>
</message>
- <message numerus="yes">
- <source>%n hour(s)</source>
- <translation><numerusform>%n ώρες </numerusform><numerusform>%n ώρες </numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n day(s)</source>
- <translation><numerusform>%n ημέρες </numerusform><numerusform>%n ημέρες </numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>%n εβδομαδες</numerusform><numerusform>%n εβδομαδες</numerusform></translation>
- </message>
<message>
<source>%1 and %2</source>
<translation>%1 και %2</translation>
</message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation><numerusform>%n έτος</numerusform><numerusform>%n έτη</numerusform></translation>
- </message>
<message>
<source>%1 behind</source>
<translation>%1 πίσω</translation>
@@ -488,18 +456,6 @@
<translation>Εισερχόμενη συναλλαγή</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Ημερομηνία: %1
-Ποσό: %2
-Τύπος: %3
-Διεύθυνση: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Το πορτοφόλι είναι &lt;b&gt;κρυπτογραφημένο&lt;/b&gt; και &lt;b&gt;ξεκλείδωτο&lt;/b&gt;</translation>
</message>
@@ -627,7 +583,7 @@ Address: %4
</message>
<message>
<source>Copy after fee</source>
- <translation>Αντιγραφή ταρίφας</translation>
+ <translation>Αντιγραφή μετα-ταρίφας</translation>
</message>
<message>
<source>Copy bytes</source>
@@ -698,10 +654,6 @@ Address: %4
<translation>όχι</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Η ετικετα γινετε κοκκινη , αν το μεγεθος της συναλαγης ειναι μεγαλητερο απο 1000 bytes.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Ελάχιστο χρεώσιμο ποσό τουλάχιστο %1 ανα kB</translation>
</message>
@@ -710,14 +662,6 @@ Address: %4
<translation>Συναλλαγές με υψηλότερη προτεραιότητα είναι πιο πιθανό να περιλαμβάνονται σε ένα μπλοκ.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Η ετικέτα γίνεται κόκκινη , αν το μέγεθος της συναλαγής είναι μεγαλύτερο απο το ",μεσαίο",</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Η ετικέτα γίνεται κόκκινη , αν ο παραλήπτης παραλάβει ένα ποσό μικρότερο απο %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(χωρίς ετικέτα)</translation>
</message>
@@ -839,30 +783,6 @@ Address: %4
<source>command-line options</source>
<translation>επιλογής γραμμής εντολών</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>επιλογές UI</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Όρισε γλώσσα, για παράδειγμα "de_DE"(προεπιλογή:τοπικές ρυθμίσεις)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Έναρξη ελαχιστοποιημένο</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Ορίστε SSL root certificates για αίτηση πληρωμής (default: -system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Εμφάνισε την οθόνη εκκίνησης κατά την εκκίνηση(προεπιλογή:1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Επιλογή καταλόγου</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -937,14 +857,6 @@ Address: %4
<translation>&amp;Κύριο</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Αυτόματη εκκίνηση του Bitcoin μετά την εισαγωγή στο σύστημα</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Έναρξη του Βιtcoin κατά την εκκίνηση του συστήματος</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Μέγεθος κρυφής μνήμης βάσης δεδομένων.</translation>
</message>
@@ -1037,10 +949,6 @@ Address: %4
<translation>&amp;Ελαχιστοποίηση στην περιοχή ειδοποιήσεων αντί της γραμμής εργασιών</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>Ελαχιστοποίηση αντί για έξοδο κατά το κλείσιμο του παραθύρου</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>Ε&amp;λαχιστοποίηση κατά το κλείσιμο</translation>
</message>
@@ -1053,10 +961,6 @@ Address: %4
<translation>Γλώσσα περιβάλλοντος εργασίας: </translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Εδώ μπορεί να ρυθμιστεί η γλώσσα διεπαφής χρήστη. Αυτή η ρύθμιση θα ισχύσει μετά την επανεκκίνηση του Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Μονάδα μέτρησης:</translation>
</message>
@@ -1066,7 +970,8 @@ Address: %4
</message>
<message>
<source>Whether to show coin control features or not.</source>
- <translation>Επιλογή κατα πόσο να αναδείχνονται οι δυνατότητες ελέγχου κερμάτων.</translation>
+ <translation>Επιλογή κατα πόσο να αναδείχνονται οι δυνατότητες ελέγχου κερμάτων.
+</translation>
</message>
<message>
<source>&amp;OK</source>
@@ -1093,10 +998,6 @@ Address: %4
<translation>Χρειάζεται επανεκκίνηση του προγράμματος για να ενεργοποιηθούν οι αλλαγές.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>Η εφαρμογή θα τερματιστεί. Θέλετε να προχωρήσετε;</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>Η αλλαγή αυτή θα χρειαστεί επανεκκίνηση του προγράμματος</translation>
</message>
@@ -1183,10 +1084,6 @@ Address: %4
<translation>Η αίτηση πληρωμής έχει αρνηθεί.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>Η αίτηση πληρωμής έχει λήξει.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>Η αίτηση πληρωμής δεν έχει αρχίζει ακόμα.</translation>
</message>
@@ -1222,10 +1119,6 @@ Address: %4
<context>
<name>PeerTableModel</name>
<message>
- <source>Address/Hostname</source>
- <translation>Διεύθυθνση/Όνομα υπολογιστή</translation>
- </message>
- <message>
<source>Ping Time</source>
<translation>Χρόνος καθυστέρησης</translation>
</message>
@@ -1257,14 +1150,6 @@ Address: %4
<translation>%1 s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>Δίκτυο</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>Άγνωστο(α)</translation>
- </message>
- <message>
<source>None</source>
<translation>Κανένα</translation>
</message>
@@ -1407,18 +1292,10 @@ Address: %4
<translation>Αρχείο καταγραφής εντοπισμού σφαλμάτων </translation>
</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>Ανοίξτε το αρχείο καταγραφής εντοπισμού σφαλμάτων από τον τρέχοντα κατάλογο δεδομένων. Αυτό μπορεί να πάρει μερικά δευτερόλεπτα για τα μεγάλα αρχεία καταγραφής. </translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Καθαρισμός κονσόλας</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Καλώς ήρθατε στην Bitcoin RPC κονσόλα.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Χρησιμοποιήστε το πάνω και κάτω βέλος για να περιηγηθείτε στο ιστορικο, και &lt;b&gt;Ctrl-L&lt;/b&gt; για εκκαθαριση οθονης.</translation>
</message>
@@ -1542,7 +1419,7 @@ Address: %4
</message>
<message>
<source>Label</source>
- <translation>Ετικέτα</translation>
+ <translation>Επιγραφή</translation>
</message>
<message>
<source>Message</source>
@@ -1565,7 +1442,7 @@ Address: %4
</message>
<message>
<source>Label</source>
- <translation>Ετικέτα</translation>
+ <translation>Επιγραφή</translation>
</message>
<message>
<source>Message</source>
@@ -1643,10 +1520,6 @@ Address: %4
<translation>Επιλογή...</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Ελαχιστοποίηση</translation>
- </message>
- <message>
<source>fast</source>
<translation>Γρήγορο</translation>
</message>
@@ -1727,10 +1600,6 @@ Address: %4
<translation>ή</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Η διεύθυνση του αποδέκτη δεν είναι σωστή. Παρακαλώ ελέγξτε ξανά.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Το ποσό πληρωμής πρέπει να είναι μεγαλύτερο από 0.</translation>
</message>
@@ -1743,10 +1612,6 @@ Address: %4
<translation>Το σύνολο υπερβαίνει το υπόλοιπό σας όταν συμπεριληφθεί και η αμοιβή %1</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Βρέθηκε η ίδια διεύθυνση δύο φορές. Επιτρέπεται μία μόνο εγγραφή για κάθε διεύθυνση, σε κάθε διαδικασία αποστολής.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Η δημιουργία της συναλλαγής απέτυχε!</translation>
</message>
@@ -1799,7 +1664,7 @@ Address: %4
</message>
<message>
<source>Paste address from clipboard</source>
- <translation>Επικόλληση διεύθυνσης από το πρόχειρο</translation>
+ <translation>Επικόλληση διεύθυνσης από το βιβλίο διευθύνσεων</translation>
</message>
<message>
<source>Alt+P</source>
@@ -1844,10 +1709,6 @@ Address: %4
<translation>&amp;Υπογραφή Μηνύματος</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Μπορείτε να υπογράφετε μηνύματα με τις διευθύνσεις σας, ώστε ν' αποδεικνύετε πως αυτές σας ανήκουν. Αποφεύγετε να υπογράφετε κάτι αόριστο καθώς ενδέχεται να εξαπατηθείτε. Υπογράφετε μόνο πλήρης δηλώσεις με τις οποίες συμφωνείτε.</translation>
- </message>
- <message>
<source>The Bitcoin address to sign the message with</source>
<translation>Διεύθυνση Bitcoin που θα σταλεί το μήνυμα</translation>
</message>
@@ -1900,10 +1761,6 @@ Address: %4
<translation>&amp;Επιβεβαίωση μηνύματος</translation>
</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>Πληκτρολογήστε την υπογραφή διεύθυνσης, μήνυμα (βεβαιωθείτε ότι έχετε αντιγράψει τις αλλαγές γραμμής, κενά, tabs, κ.λπ. ακριβώς) και την υπογραφή παρακάτω, για να ελέγξει το μήνυμα. Να είστε προσεκτικοί για να μην διαβάσετε περισσότερα στην υπογραφή ό, τι είναι στην υπογραφή ίδιο το μήνυμα , για να μην εξαπατηθούν από έναν άνθρωπο -in - the-middle επίθεση.</translation>
- </message>
- <message>
<source>The Bitcoin address the message was signed with</source>
<translation>Διεύθυνση Bitcoin η οποία το μήνυμα έχει υπογραφεί</translation>
</message>
@@ -2020,10 +1877,6 @@ Address: %4
<source>Status</source>
<translation>Κατάσταση</translation>
</message>
- <message numerus="yes">
- <source>, broadcast through %n node(s)</source>
- <translation><numerusform>, έχει μεταδοθεί μέσω %n κόμβων</numerusform><numerusform>, έχει μεταδοθεί μέσω %n κόμβων</numerusform></translation>
- </message>
<message>
<source>Date</source>
<translation>Ημερομηνία</translation>
@@ -2060,10 +1913,6 @@ Address: %4
<source>Credit</source>
<translation>Πίστωση </translation>
</message>
- <message numerus="yes">
- <source>matures in %n more block(s)</source>
- <translation><numerusform>ωρίμανση σε %n επιπλέον μπλοκ</numerusform><numerusform>ωρίμανση σε %n επιπλέον μπλοκ</numerusform></translation>
- </message>
<message>
<source>not accepted</source>
<translation>μη αποδεκτό</translation>
@@ -2136,10 +1985,6 @@ Address: %4
<source>, has not been successfully broadcast yet</source>
<translation>, δεν έχει ακόμα μεταδοθεί μ' επιτυχία</translation>
</message>
- <message numerus="yes">
- <source>Open for %n more block(s)</source>
- <translation><numerusform>Ανοιχτό για %n μπλοκ</numerusform><numerusform>Ανοιχτό για %n μπλοκ</numerusform></translation>
- </message>
<message>
<source>unknown</source>
<translation>άγνωστο</translation>
@@ -2167,14 +2012,6 @@ Address: %4
<translation>Τύπος</translation>
</message>
<message>
- <source>Address</source>
- <translation>Διεύθυνση</translation>
- </message>
- <message numerus="yes">
- <source>Open for %n more block(s)</source>
- <translation><numerusform>Ανοιχτό για %n μπλοκ</numerusform><numerusform>Ανοιχτό για %n μπλοκ</numerusform></translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Ανοιχτό μέχρι %1</translation>
</message>
@@ -2195,6 +2032,10 @@ Address: %4
<translation>Offline</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Επιγραφή</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Ανεπιβεβαίωτες</translation>
</message>
@@ -2204,7 +2045,7 @@ Address: %4
</message>
<message>
<source>Received with</source>
- <translation>Παραλαβή με</translation>
+ <translation>Ελήφθη με</translation>
</message>
<message>
<source>Received from</source>
@@ -2212,7 +2053,7 @@ Address: %4
</message>
<message>
<source>Sent to</source>
- <translation>Αποστολή προς</translation>
+ <translation>Απεστάλη προς</translation>
</message>
<message>
<source>Payment to yourself</source>
@@ -2243,10 +2084,6 @@ Address: %4
<translation>Είδος συναλλαγής.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Διεύθυνση αποστολής της συναλλαγής.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Ποσό που αφαιρέθηκε ή προστέθηκε στο υπόλοιπο.</translation>
</message>
@@ -2521,10 +2358,6 @@ Address: %4
<translation>Εντοπισθηκε διεφθαρμενη βαση δεδομενων των μπλοκ</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Ανακαλύψτε την δικη σας IP διεύθυνση (προεπιλογή: 1 όταν ακούει και δεν - externalip) </translation>
- </message>
- <message>
<source>Do you want to rebuild the block database now?</source>
<translation>Θελετε να δημιουργηθει τωρα η βαση δεδομενων του μπλοκ? </translation>
</message>
@@ -2569,10 +2402,6 @@ Address: %4
<translation>Δεν ειναι αρκετες περιγραφες αρχείων διαθέσιμες.</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Εισαγωγή μπλοκ από εξωτερικό αρχείο blk000?.dat</translation>
- </message>
- <message>
<source>Specify wallet file (within data directory)</source>
<translation>Επιλέξτε αρχείο πορτοφολιού (μέσα απο κατάλογο δεδομένων)</translation>
</message>
@@ -2597,6 +2426,10 @@ Address: %4
<translation>Αδυναμία κλειδώματος του φακέλου δεδομένων %s. Πιθανώς το Bitcoin να είναι ήδη ενεργό.</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Επιλογή φακέλου δεδομένων στην εκκίνηση (προεπιλεγμένο: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Σύνδεση μέσω διαμεσολαβητή SOCKS5</translation>
</message>
@@ -2633,6 +2466,18 @@ Address: %4
<translation>Αποστολή πληροφοριών εντοπισμού σφαλμάτων στην κονσόλα αντί του αρχείου debug.log</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Ορίστε SSL root certificates για αίτηση πληρωμής (default: -system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Όρισε γλώσσα, για παράδειγμα "de_DE"(προεπιλογή:τοπικές ρυθμίσεις)</translation>
+ </message>
+ <message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Εμφάνισε την οθόνη εκκίνησης κατά την εκκίνηση(προεπιλογή:1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Συρρίκνωση του αρχείο debug.log κατα την εκκίνηση του πελάτη (προεπιλογή: 1 όταν δεν-debug)</translation>
</message>
@@ -2641,6 +2486,10 @@ Address: %4
<translation>Η υπογραφή συναλλαγής απέτυχε </translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Έναρξη ελαχιστοποιημένο</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Η εφαρμογή είναι σε πειραματικό στάδιο.</translation>
</message>
@@ -2669,10 +2518,6 @@ Address: %4
<translation>Προειδοποίηση</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Προειδοποίηση: Αυτή η έκδοση είναι ξεπερασμένη, απαιτείται αναβάθμιση </translation>
- </message>
- <message>
<source>Zapping all transactions from wallet...</source>
<translation>Μεταφορά όλων των συναλλαγών απο το πορτοφόλι</translation>
</message>
diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts
index 2555cdbb62..90a13feaca 100644
--- a/src/qt/locale/bitcoin_en.ts
+++ b/src/qt/locale/bitcoin_en.ts
@@ -195,12 +195,7 @@
<translation>Change passphrase</translation>
</message>
<message>
- <location line="+1"/>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Enter the old and new passphrase to the wallet.</translation>
- </message>
- <message>
- <location line="+45"/>
+ <location line="+46"/>
<source>Confirm wallet encryption</source>
<translation>Confirm wallet encryption</translation>
</message>
@@ -242,7 +237,12 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+93"/>
+ <location line="+23"/>
+ <source>Enter the old passphrase and new passphrase to the wallet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+70"/>
<location line="+7"/>
<location line="+42"/>
<location line="+6"/>
@@ -549,7 +549,15 @@
<translation>No block source available...</translation>
</message>
<message numerus="yes">
- <location line="+35"/>
+ <location line="+9"/>
+ <source>Processed %n block(s) of transaction history.</source>
+ <translation>
+ <numerusform>Processed %n block of transaction history.</numerusform>
+ <numerusform>Processed %n blocks of transaction history.</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location line="+26"/>
<source>%n hour(s)</source>
<translation>
<numerusform>%n hour</numerusform>
@@ -621,16 +629,8 @@
<source>Up to date</source>
<translation>Up to date</translation>
</message>
- <message numerus="yes">
- <location line="-5"/>
- <source>Processed %n blocks of transaction history.</source>
- <translation type="unfinished">
- <numerusform></numerusform>
- <numerusform></numerusform>
- </translation>
- </message>
<message>
- <location line="+49"/>
+ <location line="+44"/>
<source>Catching up...</source>
<translation>Catching up...</translation>
</message>
@@ -912,7 +912,22 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+177"/>
+ <location line="+161"/>
+ <source>This label turns red if the transaction size is greater than 1000 bytes.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>This label turns red if the priority is smaller than &quot;medium&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>This label turns red if any recipient receives an amount smaller than %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+8"/>
<source>Can vary +/- %1 satoshi(s) per input.</source>
<translation type="unfinished"></translation>
</message>
@@ -927,12 +942,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+16"/>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+1"/>
+ <location line="+17"/>
<location line="+5"/>
<source>This means a fee of at least %1 per kB is required.</source>
<translation type="unfinished"></translation>
@@ -948,17 +958,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+1"/>
- <source>This label turns red, if the priority is smaller than &quot;medium&quot;.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+3"/>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+55"/>
+ <location line="+59"/>
<location line="+61"/>
<source>(no label)</source>
<translation type="unfinished">(no label)</translation>
@@ -1437,7 +1437,7 @@
</message>
<message>
<location line="-29"/>
- <source>Client will be shutdown, do you want to proceed?</source>
+ <source>Client will be shut down. Do you want to proceed?</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1459,13 +1459,13 @@
<translation>Form</translation>
</message>
<message>
- <location line="+53"/>
- <location line="+372"/>
+ <location line="+59"/>
+ <location line="+386"/>
<source>The displayed information may be out of date. Your wallet automatically synchronizes with the Bitcoin network after a connection is established, but this process has not completed yet.</source>
<translation>The displayed information may be out of date. Your wallet automatically synchronizes with the Bitcoin network after a connection is established, but this process has not completed yet.</translation>
</message>
<message>
- <location line="-133"/>
+ <location line="-139"/>
<source>Watch-only:</source>
<translation type="unfinished"></translation>
</message>
@@ -1500,12 +1500,12 @@
<translation>Mined balance that has not yet matured</translation>
</message>
<message>
- <location line="-163"/>
+ <location line="-177"/>
<source>Balances</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+147"/>
+ <location line="+161"/>
<source>Total:</source>
<translation>Total:</translation>
</message>
@@ -1544,12 +1544,6 @@
<source>Current total balance in watch-only addresses</source>
<translation type="unfinished"></translation>
</message>
- <message>
- <location filename="../overviewpage.cpp" line="+133"/>
- <location line="+1"/>
- <source>out of sync</source>
- <translation>out of sync</translation>
- </message>
</context>
<context>
<name>PaymentServer</name>
@@ -2557,12 +2551,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+193"/>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>The recipient address is not valid, please recheck.</translation>
- </message>
- <message>
- <location line="+3"/>
+ <location line="+196"/>
<source>The amount to pay must be larger than 0.</source>
<translation>The amount to pay must be larger than 0.</translation>
</message>
@@ -2577,12 +2566,7 @@
<translation>The total exceeds your balance when the %1 transaction fee is included.</translation>
</message>
<message>
- <location line="+3"/>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Duplicate address found, can only send to each address once per send operation.</translation>
- </message>
- <message>
- <location line="+3"/>
+ <location line="+6"/>
<source>Transaction creation failed!</source>
<translation type="unfinished"></translation>
</message>
@@ -2605,8 +2589,8 @@
<location line="+110"/>
<source>Estimated to begin confirmation within %n block(s).</source>
<translation type="unfinished">
- <numerusform></numerusform>
- <numerusform></numerusform>
+ <numerusform>Estimated to begin confirmation within %n block.</numerusform>
+ <numerusform>Estimated to begin confirmation within %n blocks.</numerusform>
</translation>
</message>
<message>
@@ -2615,7 +2599,17 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+129"/>
+ <location line="-114"/>
+ <source>The recipient address is not valid. Please recheck.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>Duplicate address found: addresses should only be used once each.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+231"/>
<source>Warning: Invalid Bitcoin address</source>
<translation type="unfinished"></translation>
</message>
@@ -2648,14 +2642,14 @@
<context>
<name>SendCoinsEntry</name>
<message>
- <location filename="../forms/sendcoinsentry.ui" line="+149"/>
- <location line="+535"/>
- <location line="+536"/>
+ <location filename="../forms/sendcoinsentry.ui" line="+155"/>
+ <location line="+539"/>
+ <location line="+533"/>
<source>A&amp;mount:</source>
<translation>A&amp;mount:</translation>
</message>
<message>
- <location line="-1184"/>
+ <location line="-1185"/>
<source>Pay &amp;To:</source>
<translation>Pay &amp;To:</translation>
</message>
@@ -2675,12 +2669,12 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-40"/>
+ <location line="-46"/>
<source>This is a normal payment.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+33"/>
+ <location line="+39"/>
<source>The Bitcoin address to send the payment to</source>
<translation type="unfinished"></translation>
</message>
@@ -2701,13 +2695,13 @@
</message>
<message>
<location line="+7"/>
- <location line="+544"/>
- <location line="+536"/>
+ <location line="+548"/>
+ <location line="+533"/>
<source>Remove this entry</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-1020"/>
+ <location line="-1021"/>
<source>The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
<translation type="unfinished"></translation>
</message>
@@ -2722,17 +2716,17 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+436"/>
+ <location line="+443"/>
<source>This is an unauthenticated payment request.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+532"/>
+ <location line="+529"/>
<source>This is an authenticated payment request.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-1005"/>
+ <location line="-1009"/>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation type="unfinished"></translation>
</message>
@@ -2742,14 +2736,14 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+444"/>
- <location line="+532"/>
+ <location line="+448"/>
+ <location line="+529"/>
<source>Pay To:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-498"/>
- <location line="+536"/>
+ <location line="-495"/>
+ <location line="+533"/>
<source>Memo:</source>
<translation type="unfinished"></translation>
</message>
@@ -2978,7 +2972,7 @@
<context>
<name>TransactionDesc</name>
<message>
- <location filename="../transactiondesc.cpp" line="+35"/>
+ <location filename="../transactiondesc.cpp" line="+34"/>
<source>Open until %1</source>
<translation>Open until %1</translation>
</message>
@@ -3584,7 +3578,7 @@
<context>
<name>bitcoin-core</name>
<message>
- <location filename="../bitcoinstrings.cpp" line="+269"/>
+ <location filename="../bitcoinstrings.cpp" line="+268"/>
<source>Options:</source>
<translation>Options:</translation>
</message>
@@ -3604,12 +3598,12 @@
<translation>Specify your own public address</translation>
</message>
<message>
- <location line="-116"/>
+ <location line="-117"/>
<source>Accept command line and JSON-RPC commands</source>
<translation>Accept command line and JSON-RPC commands</translation>
</message>
<message>
- <location line="+94"/>
+ <location line="+95"/>
<source>Run in the background as a daemon and accept commands</source>
<translation>Run in the background as a daemon and accept commands</translation>
</message>
@@ -3619,12 +3613,12 @@
<translation>Use the test network</translation>
</message>
<message>
- <location line="-135"/>
+ <location line="-136"/>
<source>Accept connections from outside (default: 1 if no -proxy or -connect)</source>
<translation>Accept connections from outside (default: 1 if no -proxy or -connect)</translation>
</message>
<message>
- <location line="-170"/>
+ <location line="-168"/>
<source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
<translation>Bind to given address and always listen on it. Use [host]:port notation for IPv6</translation>
</message>
@@ -3659,7 +3653,17 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+36"/>
+ <location line="+14"/>
+ <source>Maximum total fees to use in a single wallet transaction; setting this too low may abort large transactions (default: %s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+15"/>
+ <source>Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, &gt;%u = target size in MiB to use for block files)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+10"/>
<source>Set the number of script verification threads (%u to %d, 0 = auto, &lt;0 = leave that many cores free, default: %d)</source>
<translation type="unfinished"></translation>
</message>
@@ -3679,7 +3683,7 @@
<translation>Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction.</translation>
</message>
<message>
- <location line="+9"/>
+ <location line="+6"/>
<source>Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues.</source>
<translation>Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues.</translation>
</message>
@@ -3704,7 +3708,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+12"/>
+ <location line="+11"/>
<source>(default: 1)</source>
<translation type="unfinished"></translation>
</message>
@@ -3829,12 +3833,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+6"/>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Rebuild block chain index from current blk000??.dat files</translation>
- </message>
- <message>
- <location line="+12"/>
+ <location line="+18"/>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation type="unfinished"></translation>
</message>
@@ -3879,7 +3878,12 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+5"/>
+ <location line="+2"/>
+ <source>Warning: This version is obsolete; upgrade required!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
<source>You need to rebuild the database using -reindex to change -txindex</source>
<translation>You need to rebuild the database using -reindex to change -txindex</translation>
</message>
@@ -3889,7 +3893,7 @@
<translation>Imports blocks from external blk000??.dat file</translation>
</message>
<message>
- <location line="-224"/>
+ <location line="-223"/>
<source>Allow JSON-RPC connections from specified source. Valid for &lt;ip&gt; are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This option can be specified multiple times</source>
<translation type="unfinished"></translation>
</message>
@@ -3964,12 +3968,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+7"/>
+ <location line="+10"/>
<source>Prune configured below the minimum of %d MB. Please use a higher number.</source>
<translation type="unfinished"></translation>
</message>
@@ -3984,12 +3983,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+3"/>
+ <location line="+9"/>
<source>Require high priority for relaying free or low-fee transactions (default: %u)</source>
<translation type="unfinished"></translation>
</message>
@@ -4039,11 +4033,6 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Warning: Reverting this setting requires re-downloading the entire blockchain.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location line="+19"/>
<source>Whitelisted peers cannot be DoS banned and their transactions are always relayed, even if they are already in the mempool, useful e.g. for a gateway</source>
<translation type="unfinished"></translation>
@@ -4059,22 +4048,17 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+1"/>
- <source>(default: 0 = disable pruning blocks,</source>
+ <location line="+5"/>
+ <source>Accept public REST requests (default: %u)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>&gt;%u = target size in MiB to use for block files)</source>
+ <location line="+2"/>
+ <source>Activating best chain...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>Accept public REST requests (default: %u)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+4"/>
<source>Allow self signed root certificates (default: 0)</source>
<translation type="unfinished"></translation>
</message>
@@ -4204,7 +4188,12 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+8"/>
+ <location line="+1"/>
+ <source>Rebuild block chain index from current blk000??.dat files on startup</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+7"/>
<source>Send trace/debug info to console instead of debug.log file</source>
<translation>Send trace/debug info to console instead of debug.log file</translation>
</message>
@@ -4309,12 +4298,7 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
<translation>Warning</translation>
</message>
<message>
- <location line="+1"/>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Warning: This version is obsolete, upgrade required!</translation>
- </message>
- <message>
- <location line="+1"/>
+ <location line="+2"/>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation type="unfinished"></translation>
</message>
@@ -4344,12 +4328,12 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
<translation>Password for JSON-RPC connections</translation>
</message>
<message>
- <location line="-206"/>
+ <location line="-205"/>
<source>Execute command when the best block changes (%s in cmd is replaced by block hash)</source>
<translation>Execute command when the best block changes (%s in cmd is replaced by block hash)</translation>
</message>
<message>
- <location line="+259"/>
+ <location line="+258"/>
<source>Upgrade wallet to latest format</source>
<translation>Upgrade wallet to latest format</translation>
</message>
@@ -4384,7 +4368,7 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
<translation>Error loading wallet.dat: Wallet corrupted</translation>
</message>
<message>
- <location line="-212"/>
+ <location line="-211"/>
<source>(1 = keep tx meta data e.g. account owner and payment request information, 2 = drop tx meta data)</source>
<translation type="unfinished"></translation>
</message>
@@ -4419,22 +4403,22 @@ for example: alertnotify=echo %%s | mail -s &quot;Bitcoin Alert&quot; admin@foo.
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+48"/>
+ <location line="+51"/>
<source>Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: %s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+37"/>
+ <location line="+34"/>
<source>(default: %s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+9"/>
+ <location line="+7"/>
<source>Acceptable ciphers (default: %s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+4"/>
+ <location line="+5"/>
<source>Always query for peer addresses via DNS lookup (default: %u)</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src/qt/locale/bitcoin_eo.ts b/src/qt/locale/bitcoin_eo.ts
index e84dac6b1e..fbfac8fc10 100644
--- a/src/qt/locale/bitcoin_eo.ts
+++ b/src/qt/locale/bitcoin_eo.ts
@@ -31,7 +31,7 @@
</message>
<message>
<source>Export the data in the current tab to a file</source>
- <translation>Eksporti al dosiero la datumojn el la aktuala langeto</translation>
+ <translation>Eksporti la datumojn el la aktuala langeto al dosiero</translation>
</message>
<message>
<source>&amp;Export</source>
@@ -148,10 +148,6 @@
<translation>Ŝanĝi la pasfrazon</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Tajpu la malnovan kaj novan monujajn pasfrazojn.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Konfirmo de ĉifrado de la monujo</translation>
</message>
@@ -176,10 +172,6 @@
<translation>La monujo estas ĉifrita</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitmono nun fermiĝos por fini la ĉifradon. Memoru, ke eĉ ĉifrado ne protektas kontraŭ ĉiu atako, ekz. se viruso infektus vian komputilon.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Ĉifrado de la monujo fiaskis</translation>
</message>
@@ -299,10 +291,6 @@
<translation>Sendi monon al Bitmon-adreso</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Modifi agordaĵojn por Bitmono</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Krei alilokan sekurkopion de monujo</translation>
</message>
@@ -402,34 +390,14 @@
<source>&amp;Command-line options</source>
<translation>&amp;Komandliniaj agordaĵoj</translation>
</message>
- <message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n aktiva konekto al la bitmona reto</numerusform><numerusform>%n aktivaj konektoj al la bitmona reto</numerusform></translation>
- </message>
<message>
<source>No block source available...</source>
<translation>Neniu fonto de blokoj trovebla...</translation>
</message>
- <message numerus="yes">
- <source>%n hour(s)</source>
- <translation><numerusform>%n horo</numerusform><numerusform>%n horoj</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n day(s)</source>
- <translation><numerusform>%n tago</numerusform><numerusform>%n tagoj</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>%n semajno</numerusform><numerusform>%n semajnoj</numerusform></translation>
- </message>
<message>
<source>%1 and %2</source>
<translation>%1 kaj %2</translation>
</message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation><numerusform>%n jaro</numerusform><numerusform>%n jaroj</numerusform></translation>
- </message>
<message>
<source>%1 behind</source>
<translation>mankas %1</translation>
@@ -471,18 +439,6 @@
<translation>Envenanta transakcio</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Dato: %1
-Sumo: %2
-Tipo: %3
-Adreso: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Monujo estas &lt;b&gt;ĉifrita&lt;/b&gt; kaj aktuale &lt;b&gt;malŝlosita&lt;/b&gt;</translation>
</message>
@@ -661,10 +617,6 @@ Adreso: %4
<translation>ne</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Tiu ĉi etikedo ruĝiĝas se la grando de la transakcio estas pli ol 1000 bajtoj.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Tio signifas, ke krompago de almenaŭ po %1 por ĉiu kB estas deviga.</translation>
</message>
@@ -677,10 +629,6 @@ Adreso: %4
<translation>Transakcioj kun pli alta prioritato havas pli altan ŝancon inkluziviĝi en bloko.</translation>
</message>
<message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Tiu ĉi etikedo ruĝiĝas se iu ajn ricevonto ricevos sumon malpli ol %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(neniu etikedo)</translation>
</message>
@@ -797,26 +745,6 @@ Adreso: %4
<source>command-line options</source>
<translation>komandliniaj agordaĵoj</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>UI-agordaĵoj</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Agordi lingvon, ekzemple "de_DE" (defaŭlte: tiu de la sistemo)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Lanĉiĝi plejete</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Montri salutŝildon dum lanĉo (defaŭlte: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Elekti dosierujon por datumoj dum lanĉo (defaŭlte: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -887,14 +815,6 @@ Adreso: %4
<translation>Ĉ&amp;efa</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Aŭtomate lanĉi Bitmonon post ensaluto al la sistemo.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Lanĉi Bitmonon tuj post ensaluto al la sistemo</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Dosiergrando de &amp;datumbasa kaŝmemoro</translation>
</message>
@@ -947,10 +867,6 @@ Adreso: %4
<translation>&amp;Minimumigi al la sistempleto anstataŭ al la taskopleto</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>Minimumigi la aplikaĵon anstataŭ eliri kaj ĉesi kiam la fenestro estas fermita. Se tiu ĉi estas agordita, la aplikaĵo ĉesas nur kiam oni elektas "Eliri" el la menuo.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimumigi je fermo</translation>
</message>
@@ -963,10 +879,6 @@ Adreso: %4
<translation>&amp;Lingvo de la fasado:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Vi povas elekti la lingvon uzata en la aplikaĵo ĉi tie. Tiu ekefikos nur post relanĉo de Bitmono.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Unuo por vidigi sumojn:</translation>
</message>
@@ -1221,18 +1133,10 @@ Adreso: %4
<translation>Sencimiga protokoldosiero</translation>
</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>Malfermi la sencimiga protokoldosiero de Bitmono el la aktuala dosierujo por datumoj. Tio eble daŭros plurajn sekundojn por granda protokoldosiero.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Malplenigi konzolon</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Bonvenon al la RPC-konzolo de Bitmono.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Uzu la sagojn supran kaj malsupran por esplori la historion, kaj &lt;b&gt;stir-L&lt;/b&gt; por malplenigi la ekranon.</translation>
</message>
@@ -1398,7 +1302,7 @@ Adreso: %4
<name>SendCoinsDialog</name>
<message>
<source>Send Coins</source>
- <translation>Sendi Monon</translation>
+ <translation>Sendi Bitmonon</translation>
</message>
<message>
<source>Coin Control Features</source>
@@ -1454,7 +1358,7 @@ Adreso: %4
</message>
<message>
<source>Clear &amp;All</source>
- <translation>&amp;Forigi ĉion</translation>
+ <translation>&amp;Forigi Ĉion</translation>
</message>
<message>
<source>Balance:</source>
@@ -1513,10 +1417,6 @@ Adreso: %4
<translation>aŭ</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>La adreso de la ricevonto ne validas. Bonvolu kontroli.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>La pagenda sumo devas esti pli ol 0.</translation>
</message>
@@ -1529,10 +1429,6 @@ Adreso: %4
<translation>La sumo kun la %1 krompago estas pli granda ol via saldo.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Iu adreso estas ripetita. Vi povas sendi al ĉiu adreso po unufoje en iu send-operacio.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Kreo de transakcio fiaskis!</translation>
</message>
@@ -1585,7 +1481,7 @@ Adreso: %4
</message>
<message>
<source>Paste address from clipboard</source>
- <translation>Alglui adreson el tondejo</translation>
+ <translation>Alglui adreson de tondejo</translation>
</message>
<message>
<source>Alt+P</source>
@@ -1630,10 +1526,6 @@ Adreso: %4
<translation>&amp;Subskribi Mesaĝon</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Vi povas subskribi mesaĝon per viaj adresoj, por pravigi ke vi estas la posedanto de tiuj adresoj. Atentu, ke vi ne subskriu ion neprecizan, ĉar trompisto povus ruzi kontraŭ vi kaj ŝteli vian identecon. Subskribu nur plene detaligitaj deklaroj pri kiuj vi konsentas.</translation>
- </message>
- <message>
<source>Choose previously used address</source>
<translation>Elektu la jam uzitan adreson</translation>
</message>
@@ -1682,10 +1574,6 @@ Adreso: %4
<translation>&amp;Kontroli Mesaĝon</translation>
</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>Enmeti la subskriban adreson, la mesaĝon (kune kun ĉiu linisalto, spaceto, taboj, ktp. precize) kaj la subskribon ĉi sube por kontroli la mesaĝon. Atentu, ke vi ne komprenu per la subskribo pli ol la enhavo de la mesaĝo mem, por eviti homo-en-la-mezo-atakon.</translation>
- </message>
- <message>
<source>Verify the message to ensure it was signed with the specified Bitcoin address</source>
<translation>Kontroli la mesaĝon por pravigi, ke ĝi ja estas subskribita per la specifa Bitmon-adreso</translation>
</message>
@@ -1794,10 +1682,6 @@ Adreso: %4
<source>Status</source>
<translation>Stato</translation>
</message>
- <message numerus="yes">
- <source>, broadcast through %n node(s)</source>
- <translation><numerusform>, elsendita(j) tra %n nodo</numerusform><numerusform>, elsendita(j) tra %n nodoj</numerusform></translation>
- </message>
<message>
<source>Date</source>
<translation>Dato</translation>
@@ -1830,10 +1714,6 @@ Adreso: %4
<source>Credit</source>
<translation>Kredito</translation>
</message>
- <message numerus="yes">
- <source>matures in %n more block(s)</source>
- <translation><numerusform>maturiĝos post %n bloko</numerusform><numerusform>maturiĝos post %n blokoj</numerusform></translation>
- </message>
<message>
<source>not accepted</source>
<translation>ne akceptita</translation>
@@ -1898,10 +1778,6 @@ Adreso: %4
<source>, has not been successfully broadcast yet</source>
<translation>, ankoraŭ ne elsendita sukcese</translation>
</message>
- <message numerus="yes">
- <source>Open for %n more block(s)</source>
- <translation><numerusform>Malferma dum ankoraŭ %n bloko</numerusform><numerusform>Malferma dum ankoraŭ %n blokoj</numerusform></translation>
- </message>
<message>
<source>unknown</source>
<translation>nekonata</translation>
@@ -1929,14 +1805,6 @@ Adreso: %4
<translation>Tipo</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adreso</translation>
- </message>
- <message numerus="yes">
- <source>Open for %n more block(s)</source>
- <translation><numerusform>Malferma dum ankoraŭ %n bloko</numerusform><numerusform>Malferma dum ankoraŭ %n blokoj</numerusform></translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Malferma ĝis %1</translation>
</message>
@@ -1957,6 +1825,10 @@ Adreso: %4
<translation>Senkonekte</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Etikedo</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Nekonfirmita</translation>
</message>
@@ -1997,10 +1869,6 @@ Adreso: %4
<translation>Tipo de transakcio.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Celadreso de la transakcio.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Sumo elprenita de aŭ aldonita al la saldo.</translation>
</message>
@@ -2255,10 +2123,6 @@ Adreso: %4
<translation>Difektita blokdatumbazo trovita</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Malkovri la propran IP-adreson (defaŭlte: 1 dum aŭskultado sen -externalip)</translation>
- </message>
- <message>
<source>Do you want to rebuild the block database now?</source>
<translation>Ĉu vi volas rekonstrui la blokdatumbazon nun?</translation>
</message>
@@ -2299,10 +2163,6 @@ Adreso: %4
<translation>Nesufiĉa nombro de dosierpriskribiloj disponeblas.</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Rekontrui blokĉenan indekson el la aktualaj blk000??.dat dosieroj</translation>
- </message>
- <message>
<source>Specify wallet file (within data directory)</source>
<translation>Specifi monujan dosieron (ene de dosierujo por datumoj)</translation>
</message>
@@ -2335,6 +2195,10 @@ Adreso: %4
<translation>Plenumi komandon kiam rilata alerto riceviĝas, aŭ kiam ni vidas tre longan forkon (%s en cms anstataŭiĝas per mesaĝo)</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Elekti dosierujon por datumoj dum lanĉo (defaŭlte: 0)</translation>
+ </message>
+ <message>
<source>Information</source>
<translation>Informoj</translation>
</message>
@@ -2351,6 +2215,14 @@ Adreso: %4
<translation>Sendi spurajn/sencimigajn informojn al la konzolo anstataŭ al dosiero debug.log</translation>
</message>
<message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Agordi lingvon, ekzemple "de_DE" (defaŭlte: tiu de la sistemo)</translation>
+ </message>
+ <message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Montri salutŝildon dum lanĉo (defaŭlte: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Malpligrandigi la sencimigan protokol-dosieron kiam kliento lanĉiĝas (defaŭlte: 1 kiam mankas -debug)</translation>
</message>
@@ -2359,6 +2231,10 @@ Adreso: %4
<translation>Subskriba transakcio fiaskis</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Lanĉiĝi plejete</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>ĝi estas eksperimenta programo</translation>
</message>
@@ -2387,10 +2263,6 @@ Adreso: %4
<translation>Averto</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Averto: tiu ĉi versio estas eksdata. Vi bezonas ĝisdatigon!</translation>
- </message>
- <message>
<source>wallet.dat corrupt, salvage failed</source>
<translation>wallet.dat estas difektita, riparo malsukcesis</translation>
</message>
diff --git a/src/qt/locale/bitcoin_es.ts b/src/qt/locale/bitcoin_es.ts
index e52bf88a87..2e1b7dd278 100644
--- a/src/qt/locale/bitcoin_es.ts
+++ b/src/qt/locale/bitcoin_es.ts
@@ -31,7 +31,7 @@
</message>
<message>
<source>Delete the currently selected address from the list</source>
- <translation>Borrar de la lista la dirección seleccionada</translation>
+ <translation>Eliminar la dirección seleccionada de la lista</translation>
</message>
<message>
<source>Export the data in the current tab to a file</source>
@@ -152,10 +152,6 @@
<translation>Cambiar contraseña</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Introduce la antigua y la nueva contraseña a el monedero.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Confirmar cifrado del monedero</translation>
</message>
@@ -168,6 +164,10 @@
<translation>¿Estás seguro que deseas cifrar tu monedero ?</translation>
</message>
<message>
+ <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+ <translation>Bitcoin Core se cerrará ahora para completar el procedo de encriptación. Recuerda que encriptar tu cartera no te protegerá completamente de la pérdida de bitcoins por infección de malware en tu computadora.</translation>
+ </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>IMPORTANTE: Cualquier copia de seguridad que haya realizado previamente de su archivo de monedero debe reemplazarse con el nuevo archivo de monedero cifrado. Por razones de seguridad, las copias de seguridad previas del archivo de monedero no cifradas serán inservibles en cuanto comience a usar el nuevo monedero cifrado.</translation>
</message>
@@ -184,8 +184,8 @@
<translation>Introduzca la nueva contraseña para el monedero.&lt;br/&gt;Utilice por favor una contraseña con &lt;b&gt;diez o más caracteres aleatorios&lt;/b&gt; o con &lt;b&gt;ocho o más palabras&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin se cerrará para finalizar el proceso de cifrado. Recuerde que el cifrado de su monedero no puede proteger totalmente sus bitcoins de robo por malware que infecte su sistema.</translation>
+ <source>Enter the old passphrase and new passphrase to the wallet.</source>
+ <translation>Introduce la antigua y la nueva contraseña de la cartera.</translation>
</message>
<message>
<source>Wallet encryption failed</source>
@@ -307,10 +307,6 @@
<translation>Enviar bitcoins a una dirección Bitcoin</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Modificar las opciones de configuración de Bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Copia de seguridad del monedero en otra ubicación</translation>
</message>
@@ -320,7 +316,7 @@
</message>
<message>
<source>&amp;Debug window</source>
- <translation>Ventana de &amp;depuración</translation>
+ <translation>&amp;Ventana de depuración</translation>
</message>
<message>
<source>Open debugging and diagnostic console</source>
@@ -474,35 +470,37 @@
<source>Up to date</source>
<translation>Actualizado</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>%n bloques procesados del historial de transacciones</numerusform><numerusform>Procesados %n bloques del historial de transacciones</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>Actualizando...</translation>
</message>
<message>
- <source>Sent transaction</source>
- <translation>Transacción enviada</translation>
+ <source>Date: %1
+</source>
+ <translation>Fecha: %1
+</translation>
</message>
<message>
- <source>Incoming transaction</source>
- <translation>Transacción entrante</translation>
+ <source>Label: %1
+</source>
+ <translation>Etiqueta: %1
+</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
+ <source>Address: %1
</source>
- <translation>Fecha: %1
-Cantidad: %2
-Tipo: %3
-Dirección: %4
+ <translation>Dirección: %1
</translation>
</message>
<message>
+ <source>Sent transaction</source>
+ <translation>Transacción enviada</translation>
+ </message>
+ <message>
+ <source>Incoming transaction</source>
+ <translation>Transacción entrante</translation>
+ </message>
+ <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>El monedero está &lt;b&gt;cifrado&lt;/b&gt; y actualmente &lt;b&gt;desbloqueado&lt;/b&gt;</translation>
</message>
@@ -693,6 +691,14 @@ Dirección: %4
<translation>ninguna</translation>
</message>
<message>
+ <source>This label turns red if the transaction size is greater than 1000 bytes.</source>
+ <translation>Esta etiqueta se mostrará en rojo si el tamaño de la transacción es mayor de 1000 bytes.</translation>
+ </message>
+ <message>
+ <source>This label turns red if the priority is smaller than "medium".</source>
+ <translation>Esta etiqueta se mostrará en rojo si la prioridad es menor a "media"</translation>
+ </message>
+ <message>
<source>Can vary +/- %1 satoshi(s) per input.</source>
<translation>Puede variar en +/- %1 satoshi(s) por entrada.</translation>
</message>
@@ -705,10 +711,6 @@ Dirección: %4
<translation>no</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Esta etiqueta se torna roja si el tamaño de la transacción es mayor de 1000 bytes.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Esto implica que se requiere una comisión de al menos %1 por kB</translation>
</message>
@@ -721,14 +723,6 @@ Dirección: %4
<translation>Las transacciones con mayor prioridad tienen mayor probabilidad de ser incluidas en un bloque.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Esta etiqueta se torna roja si la prioridad es menor que "media".</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Esta etiqueta se torna roja si cualquier destinatario recibe una cantidad menor de %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(sin etiqueta)</translation>
</message>
@@ -849,30 +843,6 @@ Dirección: %4
<source>command-line options</source>
<translation>opciones de la consola de comandos</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Opciones de interfaz de usuario</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Establecer el idioma, por ejemplo, "es_ES" (predeterminado: configuración regional del sistema)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Arrancar minimizado</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Establecer los certificados raíz SSL para solicitudes de pago (predeterminado: -system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Mostrar pantalla de bienvenida en el inicio (predeterminado: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Elegir directorio de datos al iniciar (predeterminado: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -955,14 +925,6 @@ Dirección: %4
<translation>&amp;Principal</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Iniciar Bitcoin automáticamente al encender el sistema.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Iniciar Bitcoin al iniciar el sistema</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Tamaño de cache de la &amp;base de datos</translation>
</message>
@@ -1011,6 +973,14 @@ Dirección: %4
<translation>&amp;Red</translation>
</message>
<message>
+ <source>Automatically start Bitcoin Core after logging in to the system.</source>
+ <translation>Iniciar automáticamente Bitcoin Core al iniciar el sistema.</translation>
+ </message>
+ <message>
+ <source>&amp;Start Bitcoin Core on system login</source>
+ <translation>&amp;Iniciar Bitcoin Core al inicio del sistema</translation>
+ </message>
+ <message>
<source>(0 = auto, &lt;0 = leave that many cores free)</source>
<translation>(0 = automático, &lt;0 = dejar libres ese número de núcleos)</translation>
</message>
@@ -1075,10 +1045,6 @@ Dirección: %4
<translation>&amp;Minimizar a la bandeja en vez de a la barra de tareas</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>Minimizar en lugar de salir de la aplicación al cerrar la ventana. Cuando esta opción está activa, la aplicación solo se puede cerrar seleccionando Salir desde el menú.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimizar al cerrar</translation>
</message>
@@ -1091,10 +1057,6 @@ Dirección: %4
<translation>I&amp;dioma de la interfaz de usuario</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>El idioma de la interfaz de usuario puede establecerse aquí. Este ajuste se aplicará cuando se reinicie Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>Mostrar las cantidades en la &amp;unidad:</translation>
</message>
@@ -1131,10 +1093,6 @@ Dirección: %4
<translation>Se necesita reiniciar el cliente para activar los cambios.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>El cliente se cerrará. ¿Desea continuar?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>Este cambio exige el reinicio del cliente.</translation>
</message>
@@ -1241,10 +1199,6 @@ Dirección: %4
<translation>La red de solicitud de pago no coincide con la red cliente</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>La solicitud de pago ha cadiucado</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>La solicitud de pago no está inicializada</translation>
</message>
@@ -1277,10 +1231,18 @@ Dirección: %4
<translation>¡No puede leerse el archivo de solicitud de pago! Esto puede deberse a un archivo inválido de solicitud de pago.</translation>
</message>
<message>
+ <source>Payment request expired.</source>
+ <translation>Solicitud de pago caducada.</translation>
+ </message>
+ <message>
<source>Unverified payment requests to custom payment scripts are unsupported.</source>
<translation>No están soportadas las peticiones inseguras a scripts de pago personalizados</translation>
</message>
<message>
+ <source>Invalid payment request.</source>
+ <translation>Petición de pago no válida.</translation>
+ </message>
+ <message>
<source>Refund from %1</source>
<translation>Devolución desde %1</translation>
</message>
@@ -1320,8 +1282,8 @@ Dirección: %4
<translation>User Agent</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>DIrección/Nombre de host</translation>
+ <source>Node/Service</source>
+ <translation>Nodo/Servicio</translation>
</message>
<message>
<source>Ping Time</source>
@@ -1355,14 +1317,6 @@ Dirección: %4
<translation>%1 s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>RED</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>DESCONOCIDO</translation>
- </message>
- <message>
<source>None</source>
<translation>Ninguno</translation>
</message>
@@ -1561,16 +1515,12 @@ Dirección: %4
<translation>Archivo de registro de depuración</translation>
</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>Abrir el archivo de registro de depuración en el directorio actual de datos. Esto puede llevar varios segundos para archivos de registro grandes.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Borrar consola</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Bienvenido a la consola RPC de Bitcoin</translation>
+ <source>Welcome to the Bitcoin Core RPC console.</source>
+ <translation>Bienvenido a la consola RPC de Bitcoin Core.</translation>
</message>
<message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
@@ -1861,14 +1811,6 @@ Dirección: %4
<translation>Colapsar ajustes de cuota</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Minimizar</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>Si la tarifa de aduana se establece en 1000 satoshis y la transacción está a disponible a solo 250 bytes, entonces "por kilobyte" sólo paga 250 satoshis de cuota, mientras que "por lo menos" paga 1.000 satoshis. Para las transacciones más grandes que un kilobyte ambos pagan por kilobyte.</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>por kilobyte</translation>
</message>
@@ -1877,6 +1819,10 @@ Dirección: %4
<translation>Si la tarifa de aduana se establece en 1000 satoshis y la transacción está a sólo 250 bytes, entonces "por kilobyte" sólo paga 250 satoshis de cuota, mientras que "el mínimo total" pagaría 1.000 satoshis. Para las transacciones más grandes que un kilobyte ambos pagan por kilobyte</translation>
</message>
<message>
+ <source>Hide</source>
+ <translation>Ocultar</translation>
+ </message>
+ <message>
<source>total at least</source>
<translation>total por lo menos</translation>
</message>
@@ -1997,10 +1943,6 @@ Dirección: %4
<translation>o</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>La dirección de recepción no es válida, compruébela de nuevo.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>La cantidad por pagar tiene que ser mayor de 0.</translation>
</message>
@@ -2013,10 +1955,6 @@ Dirección: %4
<translation>El total sobrepasa su saldo cuando se incluye la tasa de envío de %1</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Se ha encontrado una dirección duplicada. Solo se puede enviar a cada dirección una vez por operación de envío.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>¡Ha fallado la creación de la transacción!</translation>
</message>
@@ -2025,12 +1963,12 @@ Dirección: %4
<translation>¡La transacción fue rechazada! Esto puede haber ocurrido si alguno de los bitcoins de su monedero ya estaba gastado o si ha usado una copia de wallet.dat y los bitcoins estaban gastados en la copia pero no se habían marcado como gastados aqui.</translation>
</message>
<message>
- <source>Pay only the minimum fee of %1</source>
- <translation>Paga sólo la cuota mínima de %1</translation>
+ <source>Payment request expired.</source>
+ <translation>Solicitud de pago caducada.</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>Estimado para comenzar confirmación dentro de %1 bloque(s)</translation>
+ <source>Pay only the minimum fee of %1</source>
+ <translation>Paga sólo la cuota mínima de %1</translation>
</message>
<message>
<source>Warning: Invalid Bitcoin address</source>
@@ -2104,12 +2042,20 @@ Dirección: %4
<translation>Eliminar esta transacción</translation>
</message>
<message>
+ <source>S&amp;ubtract fee from amount</source>
+ <translation>Restar comisiones a la cantidad</translation>
+ </message>
+ <message>
<source>Message:</source>
<translation>Mensaje:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Esto es una petición de pago verificado.</translation>
+ <source>This is an unauthenticated payment request.</source>
+ <translation>Esta es una petición de pago no autentificada.</translation>
+ </message>
+ <message>
+ <source>This is an authenticated payment request.</source>
+ <translation>Esta es una petición de pago autentificada.</translation>
</message>
<message>
<source>Enter a label for this address to add it to the list of used addresses</source>
@@ -2120,10 +2066,6 @@ Dirección: %4
<translation>Un mensaje que se adjuntó a la bitcoin: URL que será almacenada con la transacción para su referencia. Nota: Este mensaje no se envía a través de la red Bitcoin.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Esto es una petición de pago no verificado.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Paga a:</translation>
</message>
@@ -2154,10 +2096,6 @@ Dirección: %4
<translation>&amp;Firmar mensaje</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Puede firmar mensajes con sus direcciones para demostrar que las posee. Tenga cuidado de no firmar cualquier cosa vaga, ya que los ataques de phishing pueden tratar de engañarle para suplantar su identidad. Firme solo declaraciones totalmente detalladas con las que usted esté de acuerdo.</translation>
- </message>
- <message>
<source>The Bitcoin address to sign the message with</source>
<translation>Dirección Bitcoin con la que firmar el mensaje</translation>
</message>
@@ -2210,10 +2148,6 @@ Dirección: %4
<translation>&amp;Verificar mensaje</translation>
</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>Introduzca la dirección para la firma, el mensaje (asegurándose de copiar tal cual los saltos de línea, espacios, tabulaciones, etc.) y la firma a continuación para verificar el mensaje. Tenga cuidado de no asumir más información de lo que dice el propio mensaje firmado para evitar fraudes basados en ataques de tipo man-in-the-middle.</translation>
- </message>
- <message>
<source>The Bitcoin address the message was signed with</source>
<translation>La dirección Bitcoin con la que se firmó el mensaje</translation>
</message>
@@ -2477,10 +2411,6 @@ Dirección: %4
<translation>Tipo</translation>
</message>
<message>
- <source>Address</source>
- <translation>Dirección</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>No vencidos (%1 confirmaciones. Estarán disponibles al cabo de %2)</translation>
</message>
@@ -2509,6 +2439,10 @@ Dirección: %4
<translation>Sin conexión</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Etiqueta</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Sin confirmar</translation>
</message>
@@ -2565,10 +2499,6 @@ Dirección: %4
<translation>Sea o no una dirección sólo está involucrada en esta transacción.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Dirección de destino de la transacción.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Cantidad retirada o añadida al saldo.</translation>
</message>
@@ -2903,10 +2833,6 @@ Dirección: %4
<translation>Opciones de depuración/pruebas:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Descubrir dirección IP propia (predeterminado: 1 al escuchar sin -externalip)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>No cargar el monedero y desactivar las llamadas RPC del monedero</translation>
</message>
@@ -2967,10 +2893,6 @@ Dirección: %4
<translation>Sólo conectar a nodos en redes &lt;net&gt; (ipv4, ipv6 o onion)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Reconstruir el índice de la cadena de bloques a partir de los archivos blk000??.dat actuales</translation>
- </message>
- <message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation>Asignar tamaño de cache en megabytes (entre %d y %d; predeterminado: %d)</translation>
</message>
@@ -3007,6 +2929,10 @@ Dirección: %4
<translation>Opciones de monedero:</translation>
</message>
<message>
+ <source>Warning: This version is obsolete; upgrade required!</source>
+ <translation>Peligro: Esta versión es obsoleta; actualización requerida!</translation>
+ </message>
+ <message>
<source>You need to rebuild the database using -reindex to change -txindex</source>
<translation>Usted necesita reconstruir la base de datos utilizando -reindex para cambiar -txindex</translation>
</message>
@@ -3035,10 +2961,6 @@ Dirección: %4
<translation>No se ha podido bloquear el directorio de datos %s. Probablemente ya se está ejecutando Bitcoin Core.</translation>
</message>
<message>
- <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</source>
- <translation>Limitar continuamente las transacciones gratuitas a &lt;n&gt;*1000 bytes por minuto (predeterminado:%u)</translation>
- </message>
- <message>
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
<translation>Crear nuevos archivos con permisos por defecto del sistema, en lugar de umask 077 (sólo efectivo con la funcionalidad de monedero desactivada)</translation>
</message>
@@ -3075,10 +2997,6 @@ Dirección: %4
<translation>Consulta de direcciones pares mediante búsqueda de DNS, si bajo en direcciones (por defecto: 1 a menos que - conectar)</translation>
</message>
<message>
- <source>Require high priority for relaying free or low-fee transactions (default:%u)</source>
- <translation>Se requiere alta prioridad para retransmitir transacciones gratis o de baja comisión (por defecto:%u)</translation>
- </message>
- <message>
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
<translation>Establecer tamaño máximo de las transacciones de alta prioridad/baja comisión en bytes (predeterminado: %d)</translation>
</message>
@@ -3135,6 +3053,10 @@ por ejemplo: alertnotify=echo %% s | correo -s "Alerta Bitcoin" admin@foo.com
<translation>No se puede resolver -whitebind address: '%s'</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Elegir directorio de datos al iniciar (predeterminado: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Conectar usando SOCKS5 proxy</translation>
</message>
@@ -3231,10 +3153,22 @@ por ejemplo: alertnotify=echo %% s | correo -s "Alerta Bitcoin" admin@foo.com
<translation>Mandar transacciones como comisión-cero si es posible (por defecto: %u)</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Establecer los certificados raíz SSL para solicitudes de pago (predeterminado: -system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Establecer el idioma, por ejemplo, "es_ES" (predeterminado: configuración regional del sistema)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Muestra todas las opciones de depuración (uso: --help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Mostrar pantalla de bienvenida en el inicio (predeterminado: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Reducir el archivo debug.log al iniciar el cliente (predeterminado: 1 sin -debug)</translation>
</message>
@@ -3243,6 +3177,10 @@ por ejemplo: alertnotify=echo %% s | correo -s "Alerta Bitcoin" admin@foo.com
<translation>Transacción falló</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Arrancar minimizado</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Este software es experimental.</translation>
</message>
@@ -3284,10 +3222,6 @@ por ejemplo: alertnotify=echo %% s | correo -s "Alerta Bitcoin" admin@foo.com
<translation>Aviso</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Aviso: Esta versión es obsoleta, actualización necesaria!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>Advertencia: Argumento no soportado -benchmark ignored, use -debug=bench.</translation>
</message>
diff --git a/src/qt/locale/bitcoin_es_CL.ts b/src/qt/locale/bitcoin_es_CL.ts
index 4495d9bd50..c3690480d8 100644
--- a/src/qt/locale/bitcoin_es_CL.ts
+++ b/src/qt/locale/bitcoin_es_CL.ts
@@ -112,10 +112,6 @@
<translation>Cambia contraseña</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Introduce la contraseña anterior y la nueva de cartera</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Confirma la codificación de cartera</translation>
</message>
@@ -140,10 +136,6 @@
<translation>Billetera codificada</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin se cerrará para finalizar el proceso de encriptación. Recuerde que encriptar su billetera no protegera completatamente sus bitcoins de ser robados por malware que infecte su computador</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Falló la codificación de la billetera</translation>
</message>
@@ -247,10 +239,6 @@
<translation>Enviar monedas a una dirección bitcoin</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Modifica las opciones de configuración de bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Respaldar billetera en otra ubicación</translation>
</message>
@@ -310,22 +298,6 @@
<source>Bitcoin Core</source>
<translation>bitcoin core</translation>
</message>
- <message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n conexión activa hacia la red Bitcoin</numerusform><numerusform>%n conexiones activas hacia la red Bitcoin</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n hour(s)</source>
- <translation><numerusform>%n hora</numerusform><numerusform>%n horas</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n day(s)</source>
- <translation><numerusform>%n día</numerusform><numerusform>%n días</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>%n semana</numerusform><numerusform>%n semanas</numerusform></translation>
- </message>
<message>
<source>Error</source>
<translation>Error</translation>
@@ -355,17 +327,6 @@
<translation>Transacción entrante</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Fecha: %1
-Cantidad: %2
-Tipo: %3
-Dirección: %4</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>La billetera esta &lt;b&gt;codificada&lt;/b&gt; y actualmente &lt;b&gt;desbloqueda&lt;/b&gt;</translation>
</message>
@@ -500,15 +461,6 @@ Dirección: %4</translation>
<source>Usage:</source>
<translation>Uso:</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>UI opciones</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Arranca minimizado
-</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -543,14 +495,6 @@ Dirección: %4</translation>
<translation>&amp;Principal</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Inicia Bitcoin automáticamente despues de encender el computador</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Inicia Bitcoin al iniciar el sistema</translation>
- </message>
- <message>
<source>Reset all client options to default.</source>
<translation>Reestablece todas las opciones.</translation>
</message>
@@ -596,10 +540,6 @@ Dirección: %4</translation>
<translation>&amp;Minimiza a la bandeja en vez de la barra de tareas</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>Minimiza la ventana en lugar de salir del programa cuando la ventana se cierra. Cuando esta opción esta activa el programa solo se puede cerrar seleccionando Salir desde el menu.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimiza a la bandeja al cerrar</translation>
</message>
@@ -664,10 +604,6 @@ Dirección: %4</translation>
<translation>Cantidad</translation>
</message>
<message>
- <source>UNKNOWN</source>
- <translation>DESCONOCIDO</translation>
- </message>
- <message>
<source>N/A</source>
<translation>N/A</translation>
</message>
@@ -863,10 +799,6 @@ Dirección: %4</translation>
<translation>Copiar Cantidad</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>La dirección de destinatarion no es valida, comprueba otra vez.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>La cantidad por pagar tiene que ser mayor 0.</translation>
</message>
@@ -879,10 +811,6 @@ Dirección: %4</translation>
<translation>El total sobrepasa tu saldo cuando se incluyen %1 como tasa de envio.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Tienes una dirección duplicada, solo puedes enviar a direcciónes individuales de una sola vez.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(sin etiqueta)</translation>
</message>
@@ -1104,10 +1032,6 @@ Dirección: %4</translation>
<source>, has not been successfully broadcast yet</source>
<translation>, no ha sido emitido satisfactoriamente todavía</translation>
</message>
- <message numerus="yes">
- <source>Open for %n more block(s)</source>
- <translation><numerusform>Abierto para %n bloque más</numerusform><numerusform>Abierto para %n bloques más</numerusform></translation>
- </message>
<message>
<source>unknown</source>
<translation>desconocido</translation>
@@ -1135,10 +1059,6 @@ Dirección: %4</translation>
<translation>Tipo</translation>
</message>
<message>
- <source>Address</source>
- <translation>Dirección</translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Abierto hasta %1</translation>
</message>
@@ -1155,6 +1075,10 @@ Dirección: %4</translation>
<translation>Generado pero no acceptado</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Etiqueta</translation>
+ </message>
+ <message>
<source>Received with</source>
<translation>Recibido con</translation>
</message>
@@ -1191,10 +1115,6 @@ Dirección: %4</translation>
<translation>Tipo de transacción.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Dirección de destino para la transacción</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Cantidad restada o añadida al balance</translation>
</message>
@@ -1407,6 +1327,11 @@ Dirección: %4</translation>
<translation>Enviar informacion de seguimiento a la consola en vez del archivo debug.log</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Arranca minimizado
+</translation>
+ </message>
+ <message>
<source>Use UPnP to map the listening port (default: 1 when listening)</source>
<translation>Intenta usar UPnP para mapear el puerto de escucha (default: 1 when listening)</translation>
</message>
@@ -1420,10 +1345,6 @@ Dirección: %4</translation>
<translation>Atención</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Advertencia: Esta versión está obsoleta, se necesita actualizar!</translation>
- </message>
- <message>
<source>wallet.dat corrupt, salvage failed</source>
<translation>wallet.dat corrompió, guardado fallido</translation>
</message>
diff --git a/src/qt/locale/bitcoin_es_DO.ts b/src/qt/locale/bitcoin_es_DO.ts
index 1c881fcf64..c5b1e41886 100644
--- a/src/qt/locale/bitcoin_es_DO.ts
+++ b/src/qt/locale/bitcoin_es_DO.ts
@@ -148,10 +148,6 @@
<translation>Cambiar contraseña</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Introduzca la contraseña anterior de la cartera y la nueva. </translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Confirmar cifrado de la cartera</translation>
</message>
@@ -176,10 +172,6 @@
<translation>Monedero cifrado</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin se cerrará para finalizar el proceso de cifrado. Recuerde que el cifrado de su monedero no puede proteger totalmente sus bitcoins de robo por malware que infecte su sistema.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Ha fallado el cifrado del monedero</translation>
</message>
@@ -295,10 +287,6 @@
<translation>Enviar monedas a una dirección Bitcoin</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Modificar las opciones de configuración de Bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Copia de seguridad del monedero en otra ubicación</translation>
</message>
@@ -443,18 +431,6 @@
<translation>Transacción entrante</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Fecha: %1
-Cantidad: %2
-Tipo: %3
-Dirección: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>El monedero está &lt;b&gt;cifrado&lt;/b&gt; y actualmente &lt;b&gt;desbloqueado&lt;/b&gt;</translation>
</message>
@@ -633,10 +609,6 @@ Dirección: %4
<translation>no</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Esta etiqueta se torna roja si el tamaño de la transación es mayor a 1000 bytes.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Esto implica que se requiere una tarifa de al menos %1 por kB</translation>
</message>
@@ -649,14 +621,6 @@ Dirección: %4
<translation>Las transacciones con alta prioridad son más propensas a ser incluidas dentro de un bloque.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Esta etiqueta se convierte en rojo, si la prioridad es menor que "medio".</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Esta etiqueta se torna roja si cualquier destinatario recibe una cantidad menor a %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(sin etiqueta)</translation>
</message>
@@ -773,26 +737,6 @@ Dirección: %4
<source>command-line options</source>
<translation>opciones de la línea de órdenes</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Opciones GUI</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Establecer el idioma, por ejemplo, "es_ES" (predeterminado: configuración regional del sistema)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Arrancar minimizado</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Mostrar pantalla de bienvenida en el inicio (predeterminado: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Elegir directorio de datos al iniciar (predeterminado: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -863,14 +807,6 @@ Dirección: %4
<translation>&amp;Principal</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Iniciar Bitcoin automáticamente al encender el sistema.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Iniciar Bitcoin al iniciar el sistema</translation>
- </message>
- <message>
<source>MB</source>
<translation>MB</translation>
</message>
@@ -927,10 +863,6 @@ Dirección: %4
<translation>&amp;Minimizar a la bandeja en vez de a la barra de tareas</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>Minimizar en lugar de salir de la aplicación al cerrar la ventana. Cuando esta opción está activa, la aplicación solo se puede cerrar seleccionando Salir desde el menú.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimizar al cerrar</translation>
</message>
@@ -943,10 +875,6 @@ Dirección: %4
<translation>I&amp;dioma de la interfaz de usuario</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>El idioma de la interfaz de usuario puede establecerse aquí. Este ajuste se aplicará cuando se reinicie Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>Mostrar las cantidades en la &amp;unidad:</translation>
</message>
@@ -1213,18 +1141,10 @@ Dirección: %4
<translation>Archivo de registro de depuración</translation>
</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>Abrir el archivo de registro de depuración en el directorio actual de datos. Esto puede llevar varios segundos para archivos de registro grandes.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Borrar consola</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Bienvenido a la consola RPC de Bitcoin</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Use las flechas arriba y abajo para navegar por el historial y &lt;b&gt;Control+L&lt;/b&gt; para limpiar la pantalla.</translation>
</message>
@@ -1521,10 +1441,6 @@ Dirección: %4
<translation>o</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>La dirección de recepción no es válida, compruébela de nuevo.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>La cantidad por pagar tiene que ser mayor de 0.</translation>
</message>
@@ -1537,10 +1453,6 @@ Dirección: %4
<translation>El total sobrepasa su saldo cuando se incluye la tasa de envío de %1</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Se ha encontrado una dirección duplicada. Solo se puede enviar a cada dirección una vez por operación de envío.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>¡Ha fallado la creación de la transacción!</translation>
</message>
@@ -1612,18 +1524,10 @@ Dirección: %4
<translation>Eliminar esta transacción</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Esto es una petición de pago verificado.</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>Introduce una etiqueta para esta dirección para añadirla a la lista de direcciones utilizadas</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Esto es una petición de pago no verificado.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Paga a:</translation>
</message>
@@ -1646,10 +1550,6 @@ Dirección: %4
<translation>&amp;Firmar mensaje</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Puede firmar mensajes con sus direcciones para demostrar que las posee. Tenga cuidado de no firmar cualquier cosa vaga, ya que los ataques de phishing pueden tratar de engañarle para suplantar su identidad. Firme solo declaraciones totalmente detalladas con las que usted esté de acuerdo.</translation>
- </message>
- <message>
<source>Choose previously used address</source>
<translation>Escoger dirección previamente usada</translation>
</message>
@@ -1698,10 +1598,6 @@ Dirección: %4
<translation>&amp;Verificar mensaje</translation>
</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>Introduzca la dirección para la firma, el mensaje (asegurándose de copiar tal cual los saltos de línea, espacios, tabulaciones, etc.) y la firma a continuación para verificar el mensaje. Tenga cuidado de no asumir más información de lo que dice el propio mensaje firmado para evitar fraudes basados en ataques de tipo man-in-the-middle.</translation>
- </message>
- <message>
<source>Verify the message to ensure it was signed with the specified Bitcoin address</source>
<translation>Verificar el mensaje para comprobar que fue firmado con la dirección Bitcoin indicada</translation>
</message>
@@ -1933,10 +1829,6 @@ Dirección: %4
<translation>Tipo</translation>
</message>
<message>
- <source>Address</source>
- <translation>Dirección</translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Abierto hasta %1</translation>
</message>
@@ -1953,6 +1845,10 @@ Dirección: %4
<translation>Generado pero no aceptado</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Etiqueta</translation>
+ </message>
+ <message>
<source>Received with</source>
<translation>Recibido con</translation>
</message>
@@ -1989,10 +1885,6 @@ Dirección: %4
<translation>Tipo de transacción.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Dirección de destino de la transacción.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Cantidad retirada o añadida al saldo.</translation>
</message>
@@ -2279,10 +2171,6 @@ Dirección: %4
<translation>Corrupción de base de datos de bloques detectada.</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Descubrir dirección IP propia (predeterminado: 1 al escuchar sin -externalip)</translation>
- </message>
- <message>
<source>Do you want to rebuild the block database now?</source>
<translation>¿Quieres reconstruir la base de datos de bloques ahora?</translation>
</message>
@@ -2327,10 +2215,6 @@ Dirección: %4
<translation>No hay suficientes descriptores de archivo disponibles. </translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Reconstruir el índice de la cadena de bloques a partir de los archivos blk000??.dat actuales</translation>
- </message>
- <message>
<source>Set maximum block size in bytes (default: %d)</source>
<translation>Establecer tamaño máximo de bloque en bytes (por defecto: %d)</translation>
</message>
@@ -2367,6 +2251,10 @@ Dirección: %4
<translation>Establecer tamaño máximo de las transacciones de alta prioridad/comisión baja en bytes (por defecto: %d)</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Elegir directorio de datos al iniciar (predeterminado: 0)</translation>
+ </message>
+ <message>
<source>Information</source>
<translation>Información</translation>
</message>
@@ -2395,10 +2283,18 @@ Dirección: %4
<translation>Enviar información de trazas/depuración a la consola en lugar de al archivo debug.log</translation>
</message>
<message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Establecer el idioma, por ejemplo, "es_ES" (predeterminado: configuración regional del sistema)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Mostrar todas las opciones de depuración (uso: --help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Mostrar pantalla de bienvenida en el inicio (predeterminado: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Reducir el archivo debug.log al iniciar el cliente (predeterminado: 1 sin -debug)</translation>
</message>
@@ -2407,6 +2303,10 @@ Dirección: %4
<translation>Transacción falló</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Arrancar minimizado</translation>
+ </message>
+ <message>
<source>Transaction amount too small</source>
<translation>Monto de la transacción muy pequeño</translation>
</message>
@@ -2432,10 +2332,6 @@ Dirección: %4
<translation>Aviso</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Aviso: Esta versión es obsoleta, actualización necesaria!</translation>
- </message>
- <message>
<source>on startup</source>
<translation>al iniciar</translation>
</message>
diff --git a/src/qt/locale/bitcoin_es_MX.ts b/src/qt/locale/bitcoin_es_MX.ts
index 4341bc821f..4238330105 100644
--- a/src/qt/locale/bitcoin_es_MX.ts
+++ b/src/qt/locale/bitcoin_es_MX.ts
@@ -83,11 +83,11 @@
</message>
<message>
<source>Comma separated file (*.csv)</source>
- <translation>Archivo separado por comas (*.CSV)</translation>
+ <translation>Arhchivo separado por comas (*.CSV)</translation>
</message>
<message>
<source>Exporting Failed</source>
- <translation>Fallo en la exportación</translation>
+ <translation>Exportación fallida</translation>
</message>
</context>
<context>
@@ -121,7 +121,7 @@
</message>
<message>
<source>Encrypt wallet</source>
- <translation>Cartera encriptada.</translation>
+ <translation>Encriptar cartera.</translation>
</message>
<message>
<source>This operation needs your wallet passphrase to unlock the wallet.</source>
@@ -137,17 +137,13 @@
</message>
<message>
<source>Decrypt wallet</source>
- <translation>Desencriptar la cartera</translation>
+ <translation>Desencriptar cartera</translation>
</message>
<message>
<source>Change passphrase</source>
<translation>Cambiar contraseña</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Ingrese la antugüa y nueva contraseña de la cartera</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Confirmar la encriptación de cartera</translation>
</message>
@@ -168,12 +164,8 @@
<translation>Cartera encriptada</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin se cerrará para finalizar el proceso de encriptación. Recuerda que encriptar tu cartera no protege completamente a tus bitcoins de ser robadas por malware infectando tu computadora.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
- <translation>La encriptación de la cartera falló</translation>
+ <translation>Encriptación de la cartera fallida</translation>
</message>
<message>
<source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
@@ -185,11 +177,11 @@
</message>
<message>
<source>Wallet unlock failed</source>
- <translation>El desbloqueo de la cartera Fallo</translation>
+ <translation>El desbloqueo de la cartera falló</translation>
</message>
<message>
<source>The passphrase entered for the wallet decryption was incorrect.</source>
- <translation>La contraseña ingresada para la des encriptación de la cartera es incorrecto</translation>
+ <translation>La contraseña ingresada para la desencriptación de la cartera es incorrecto</translation>
</message>
<message>
<source>Wallet decryption failed</source>
@@ -287,10 +279,6 @@
<translation>Enviar monedas a una dirección Bitcoin</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Modificar las opciones de configuración de Bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Respaldar cartera en otra ubicación</translation>
</message>
@@ -338,10 +326,6 @@
<source>Show the Bitcoin Core help message to get a list with possible Bitcoin command-line options</source>
<translation>Mostrar mensaje de ayuda del nucleo de Bitcoin para optener una lista con los posibles comandos de Bitcoin</translation>
</message>
- <message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n Activar conexión a la red de Bitcoin</numerusform><numerusform>%n Activar conexiones a la red de Bitcoin</numerusform></translation>
- </message>
<message>
<source>Up to date</source>
<translation>Actualizado al dia </translation>
@@ -513,26 +497,6 @@
<source>command-line options</source>
<translation>Opciones de comando de lineas</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Opciones de interfaz</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Definir idioma, por ejemplo "de_DE" (por defecto: Sistema local)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Iniciar minimizado</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Mostrar pantalla de arraque al iniciar (por defecto: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Escojer el directorio de información al iniciar (por defecto : 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -784,14 +748,6 @@
<translation>Mensaje:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Esta es una verificación de solicituda de pago.</translation>
- </message>
- <message>
- <source>This is an unverified payment request.</source>
- <translation>Esta es una solicitud de pago no verificada.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Pago para:</translation>
</message>
@@ -830,7 +786,7 @@
</message>
<message>
<source>The Bitcoin Core developers</source>
- <translation>El nucleo de Bitcoin de desarrolladores</translation>
+ <translation>Los desarrolladores de Bitcoin Core</translation>
</message>
</context>
<context>
@@ -893,10 +849,6 @@
<translation>Tipo</translation>
</message>
<message>
- <source>Address</source>
- <translation>Domicilio</translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Abrir hasta %1</translation>
</message>
@@ -913,6 +865,10 @@
<translation>Generado pero no aprovado</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Etiqueta</translation>
+ </message>
+ <message>
<source>Received with</source>
<translation>Recivido con</translation>
</message>
@@ -926,7 +882,7 @@
</message>
<message>
<source>Mined</source>
- <translation>Minado</translation>
+ <translation>Minado </translation>
</message>
<message>
<source>(n/a)</source>
@@ -941,10 +897,6 @@
<translation>Escriba una transacción</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Direccion del destinatario de la transacción</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Cantidad removida del saldo o agregada </translation>
</message>
@@ -1025,7 +977,7 @@
</message>
<message>
<source>Exporting Failed</source>
- <translation>Fallo en la exportación</translation>
+ <translation>Exportación fallida</translation>
</message>
<message>
<source>There was an error trying to save the transaction history to %1.</source>
@@ -1111,6 +1063,22 @@
<translation>Opciones de cartera:</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Escojer el directorio de información al iniciar (por defecto : 0)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Definir idioma, por ejemplo "de_DE" (por defecto: Sistema local)</translation>
+ </message>
+ <message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Mostrar pantalla de arraque al iniciar (por defecto: 1)</translation>
+ </message>
+ <message>
+ <source>Start minimized</source>
+ <translation>Iniciar minimizado</translation>
+ </message>
+ <message>
<source>Loading addresses...</source>
<translation>Cargando direcciones...</translation>
</message>
diff --git a/src/qt/locale/bitcoin_es_UY.ts b/src/qt/locale/bitcoin_es_UY.ts
index 13f33220a7..48a6f35f92 100644
--- a/src/qt/locale/bitcoin_es_UY.ts
+++ b/src/qt/locale/bitcoin_es_UY.ts
@@ -72,10 +72,6 @@
<translation>Cambiar contraseña</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Ingrese la contraseña anterior y la nueva de acceso a el monedero</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Confirme el cifrado del monedero</translation>
</message>
@@ -158,10 +154,6 @@
<source>Tabs toolbar</source>
<translation>Barra de herramientas</translation>
</message>
- <message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n conexión activa a la red Bitcoin </numerusform><numerusform>%n conexiones activas a la red Bitcoin</numerusform></translation>
- </message>
<message>
<source>Up to date</source>
<translation>A la fecha</translation>
@@ -429,13 +421,13 @@
<translation>Fecha</translation>
</message>
<message>
- <source>Address</source>
- <translation>Direccion </translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Abrir hasta %1</translation>
</message>
+ <message>
+ <source>Label</source>
+ <translation>Etiqueta</translation>
+ </message>
</context>
<context>
<name>TransactionView</name>
diff --git a/src/qt/locale/bitcoin_et.ts b/src/qt/locale/bitcoin_et.ts
index f1e5c2715c..4a502f1a54 100644
--- a/src/qt/locale/bitcoin_et.ts
+++ b/src/qt/locale/bitcoin_et.ts
@@ -6,6 +6,10 @@
<translation>Loo uus aadress</translation>
</message>
<message>
+ <source>&amp;New</source>
+ <translation>&amp;Uus</translation>
+ </message>
+ <message>
<source>Copy the currently selected address to the system clipboard</source>
<translation>Kopeeri märgistatud aadress vahemällu</translation>
</message>
@@ -14,8 +18,12 @@
<translation>&amp;Kopeeri</translation>
</message>
<message>
+ <source>C&amp;lose</source>
+ <translation>S&amp;ulge</translation>
+ </message>
+ <message>
<source>&amp;Copy Address</source>
- <translation>&amp;Aadressi kopeerimine</translation>
+ <translation>&amp;Kopeeri Aadress</translation>
</message>
<message>
<source>Delete the currently selected address from the list</source>
@@ -26,10 +34,18 @@
<translation>Ekspordi kuvatava vahelehe sisu faili</translation>
</message>
<message>
+ <source>&amp;Export</source>
+ <translation>&amp;Ekspordi</translation>
+ </message>
+ <message>
<source>&amp;Delete</source>
<translation>&amp;Kustuta</translation>
</message>
<message>
+ <source>C&amp;hoose</source>
+ <translation>V&amp;ali</translation>
+ </message>
+ <message>
<source>These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
<translation>Need on sinu Bitcoini aadressid maksete saatmiseks. Müntide saatmisel kontrolli alati summat ning saaja aadressi.</translation>
</message>
@@ -45,6 +61,10 @@
<source>Comma separated file (*.csv)</source>
<translation>Komaeraldatud fail (*.csv)</translation>
</message>
+ <message>
+ <source>Exporting Failed</source>
+ <translation>Eksportimine Ebaõnnestus</translation>
+ </message>
</context>
<context>
<name>AddressTableModel</name>
@@ -104,10 +124,6 @@
<translation>Muuda salafraasi</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Sisesta rahakoti vana ning uus salafraas.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Kinnita rahakoti krüpteering</translation>
</message>
@@ -132,10 +148,6 @@
<translation>Rahakott krüpteeritud</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin sulgub krüpteeringu lõpetamiseks. Pea meeles, et rahakoti krüpteerimine ei välista bitcoinide vargust, kui sinu arvuti on nakatunud pahavaraga.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Tõrge rahakoti krüpteerimisel</translation>
</message>
@@ -223,6 +235,10 @@
<translation>&amp;Salafraasi muutmine</translation>
</message>
<message>
+ <source>Open &amp;URI...</source>
+ <translation>Ava &amp;URI...</translation>
+ </message>
+ <message>
<source>Importing blocks from disk...</source>
<translation>Impordi blokid kettalt...</translation>
</message>
@@ -235,10 +251,6 @@
<translation>Saada münte Bitcoini aadressile</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Muuda Bitcoini seadeid</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Varunda rahakott teise asukohta</translation>
</message>
@@ -315,10 +327,6 @@
<translation>Bitcoini tuumik</translation>
</message>
<message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n aktiivne ühendus Bitcoini võrku</numerusform><numerusform>%n aktiivset ühendust Bitcoini võrku</numerusform></translation>
- </message>
- <message numerus="yes">
<source>%n hour(s)</source>
<translation><numerusform>%n tund</numerusform><numerusform>%n tundi</numerusform></translation>
</message>
@@ -331,6 +339,14 @@
<translation><numerusform>%n nädal</numerusform><numerusform>%n nädalat</numerusform></translation>
</message>
<message>
+ <source>%1 and %2</source>
+ <translation>%1 ja %2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%n year(s)</source>
+ <translation><numerusform>%n aasta</numerusform><numerusform>%n aastat</numerusform></translation>
+ </message>
+ <message>
<source>%1 behind</source>
<translation>%1 maas</translation>
</message>
@@ -363,6 +379,36 @@
<translation>Jõuan...</translation>
</message>
<message>
+ <source>Date: %1
+</source>
+ <translation>Kuupäev: %1
+</translation>
+ </message>
+ <message>
+ <source>Amount: %1
+</source>
+ <translation>Summa: %1
+</translation>
+ </message>
+ <message>
+ <source>Type: %1
+</source>
+ <translation>Tüüp: %1
+</translation>
+ </message>
+ <message>
+ <source>Label: %1
+</source>
+ <translation>&amp;Märgis: %1
+</translation>
+ </message>
+ <message>
+ <source>Address: %1
+</source>
+ <translation>Aadress: %1
+</translation>
+ </message>
+ <message>
<source>Sent transaction</source>
<translation>Saadetud tehing</translation>
</message>
@@ -371,17 +417,6 @@
<translation>Sisenev tehing</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Kuupäev: %1⏎
-Summa: %2⏎
-Tüüp: %3⏎
-Aadress: %4⏎</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Rahakott on &lt;b&gt;krüpteeritud&lt;/b&gt; ning hetkel &lt;b&gt;avatud&lt;/b&gt;</translation>
</message>
@@ -400,10 +435,18 @@ Aadress: %4⏎</translation>
<context>
<name>CoinControlDialog</name>
<message>
+ <source>Quantity:</source>
+ <translation>Kogus:</translation>
+ </message>
+ <message>
<source>Amount:</source>
<translation>Summa:</translation>
</message>
<message>
+ <source>Fee:</source>
+ <translation>Tasu:</translation>
+ </message>
+ <message>
<source>Amount</source>
<translation>Kogus</translation>
</message>
@@ -432,6 +475,50 @@ Aadress: %4⏎</translation>
<translation>Kopeeri tehingu ID</translation>
</message>
<message>
+ <source>Copy fee</source>
+ <translation>Kopeeri tasu</translation>
+ </message>
+ <message>
+ <source>highest</source>
+ <translation>kõrgeim</translation>
+ </message>
+ <message>
+ <source>higher</source>
+ <translation>kõrgem</translation>
+ </message>
+ <message>
+ <source>high</source>
+ <translation>kõrge</translation>
+ </message>
+ <message>
+ <source>medium</source>
+ <translation>keskmine</translation>
+ </message>
+ <message>
+ <source>low</source>
+ <translation>madal</translation>
+ </message>
+ <message>
+ <source>lower</source>
+ <translation>madalam</translation>
+ </message>
+ <message>
+ <source>lowest</source>
+ <translation>madalaim</translation>
+ </message>
+ <message>
+ <source>(%1 locked)</source>
+ <translation>(%1 lukustatud)</translation>
+ </message>
+ <message>
+ <source>yes</source>
+ <translation>jah</translation>
+ </message>
+ <message>
+ <source>no</source>
+ <translation>ei</translation>
+ </message>
+ <message>
<source>(no label)</source>
<translation>(silti pole)</translation>
</message>
@@ -485,6 +572,10 @@ Aadress: %4⏎</translation>
</context>
<context>
<name>FreespaceChecker</name>
+ <message>
+ <source>name</source>
+ <translation>nimi</translation>
+ </message>
</context>
<context>
<name>HelpMessageDialog</name>
@@ -512,26 +603,14 @@ Aadress: %4⏎</translation>
<source>command-line options</source>
<translation>käsurea valikud</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>UI valikud</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Keele valik, nt "ee_ET" (vaikeväärtus: system locale)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Käivitu tegumiribale</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Käivitamisel teabeakna kuvamine (vaikeväärtus: 1)</translation>
- </message>
- </context>
+</context>
<context>
<name>Intro</name>
<message>
+ <source>Welcome</source>
+ <translation>Teretulemast</translation>
+ </message>
+ <message>
<source>Bitcoin Core</source>
<translation>Bitcoini tuumik</translation>
</message>
@@ -542,6 +621,14 @@ Aadress: %4⏎</translation>
</context>
<context>
<name>OpenURIDialog</name>
+ <message>
+ <source>Open URI</source>
+ <translation>Ava URI</translation>
+ </message>
+ <message>
+ <source>URI:</source>
+ <translation>URI:</translation>
+ </message>
</context>
<context>
<name>OptionsDialog</name>
@@ -550,12 +637,8 @@ Aadress: %4⏎</translation>
<translation>Valikud</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Käivita Bitcoin süsteemi logimisel.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Start Bitcoin sisselogimisel</translation>
+ <source>MB</source>
+ <translation>MB</translation>
</message>
<message>
<source>Reset all client options to default.</source>
@@ -570,6 +653,14 @@ Aadress: %4⏎</translation>
<translation>&amp;Võrk</translation>
</message>
<message>
+ <source>W&amp;allet</source>
+ <translation>R&amp;ahakott</translation>
+ </message>
+ <message>
+ <source>Expert</source>
+ <translation>Ekspert</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>
<translation>Bitcoini kliendi pordi automaatne avamine ruuteris. Toimib, kui sinu ruuter aktsepteerib UPnP ühendust.</translation>
</message>
@@ -602,10 +693,6 @@ Aadress: %4⏎</translation>
<translation>&amp;Minimeeri systray alale</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>Sulgemise asemel minimeeri aken. Selle valiku tegemisel suletakse programm Menüüst "Välju" käsuga.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimeeri sulgemisel</translation>
</message>
@@ -618,10 +705,6 @@ Aadress: %4⏎</translation>
<translation>Kasutajaliidese &amp;keel:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Kasutajaliidese keele valimise koht. Valik rakendub Bitcoini käivitamisel.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>Summade kuvamise &amp;Unit:</translation>
</message>
@@ -669,6 +752,10 @@ Aadress: %4⏎</translation>
<translation>Mitte aegunud mine'itud jääk</translation>
</message>
<message>
+ <source>Recent transactions</source>
+ <translation>Hiljutised tehingud</translation>
+ </message>
+ <message>
<source>out of sync</source>
<translation>sünkimata</translation>
</message>
@@ -724,6 +811,10 @@ Aadress: %4⏎</translation>
<translation>&amp;Informatsioon</translation>
</message>
<message>
+ <source>General</source>
+ <translation>Üldine</translation>
+ </message>
+ <message>
<source>Using OpenSSL version</source>
<translation>Kasutan OpenSSL versiooni</translation>
</message>
@@ -736,6 +827,10 @@ Aadress: %4⏎</translation>
<translation>Võrgustik</translation>
</message>
<message>
+ <source>Name</source>
+ <translation>Nimi</translation>
+ </message>
+ <message>
<source>Number of connections</source>
<translation>Ühenduste arv</translation>
</message>
@@ -748,6 +843,26 @@ Aadress: %4⏎</translation>
<translation>Plokkide hetkearv</translation>
</message>
<message>
+ <source>Received</source>
+ <translation>Vastuvõetud</translation>
+ </message>
+ <message>
+ <source>Sent</source>
+ <translation>Saadetud</translation>
+ </message>
+ <message>
+ <source>Direction</source>
+ <translation>Suund</translation>
+ </message>
+ <message>
+ <source>Version</source>
+ <translation>Versioon</translation>
+ </message>
+ <message>
+ <source>Services</source>
+ <translation>Teenused</translation>
+ </message>
+ <message>
<source>Last block time</source>
<translation>Viimane ploki aeg</translation>
</message>
@@ -768,18 +883,10 @@ Aadress: %4⏎</translation>
<translation>Debugimise logifail</translation>
</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>Ava Bitcoini logifail praegusest andmekaustast. Toiminguks võib kuluda kuni mõni sekund.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Puhasta konsool</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Teretulemast Bitcoini RPC konsooli.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Ajaloo sirvimiseks kasuta üles ja alla nooli, ekraani puhastamiseks &lt;b&gt;Ctrl-L&lt;/b&gt;.</translation>
</message>
@@ -787,18 +894,54 @@ Aadress: %4⏎</translation>
<source>Type &lt;b&gt;help&lt;/b&gt; for an overview of available commands.</source>
<translation>Ülevaateks võimalikest käsklustest trüki &lt;b&gt;help&lt;/b&gt;.</translation>
</message>
+ <message>
+ <source>%1 B</source>
+ <translation>%1 B</translation>
+ </message>
+ <message>
+ <source>%1 KB</source>
+ <translation>%1 B</translation>
+ </message>
+ <message>
+ <source>%1 MB</source>
+ <translation>%1 MB</translation>
+ </message>
+ <message>
+ <source>%1 GB</source>
+ <translation>%1 GB</translation>
+ </message>
</context>
<context>
<name>ReceiveCoinsDialog</name>
<message>
+ <source>&amp;Amount:</source>
+ <translation>&amp;Summa:</translation>
+ </message>
+ <message>
<source>&amp;Label:</source>
<translation>&amp;Märgis</translation>
</message>
<message>
+ <source>&amp;Message:</source>
+ <translation>&amp;Sõnum:</translation>
+ </message>
+ <message>
+ <source>Show</source>
+ <translation>Näita</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Eemalda</translation>
+ </message>
+ <message>
<source>Copy label</source>
<translation>Märgise kopeerimine</translation>
</message>
<message>
+ <source>Copy message</source>
+ <translation>Kopeeri sõnum</translation>
+ </message>
+ <message>
<source>Copy amount</source>
<translation>Kopeeri summa</translation>
</message>
@@ -852,7 +995,15 @@ Aadress: %4⏎</translation>
<source>(no label)</source>
<translation>(silti pole)</translation>
</message>
- </context>
+ <message>
+ <source>(no message)</source>
+ <translation>(sõnum puudub)</translation>
+ </message>
+ <message>
+ <source>(no amount)</source>
+ <translation>(summa puudub)</translation>
+ </message>
+</context>
<context>
<name>SendCoinsDialog</name>
<message>
@@ -860,10 +1011,38 @@ Aadress: %4⏎</translation>
<translation>Müntide saatmine</translation>
</message>
<message>
+ <source>Quantity:</source>
+ <translation>Kogus:</translation>
+ </message>
+ <message>
<source>Amount:</source>
<translation>Summa:</translation>
</message>
<message>
+ <source>Fee:</source>
+ <translation>Tasu:</translation>
+ </message>
+ <message>
+ <source>Choose...</source>
+ <translation>Vali...</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>Peida</translation>
+ </message>
+ <message>
+ <source>Recommended:</source>
+ <translation>Soovitatud:</translation>
+ </message>
+ <message>
+ <source>normal</source>
+ <translation>normaalne</translation>
+ </message>
+ <message>
+ <source>fast</source>
+ <translation>kiire</translation>
+ </message>
+ <message>
<source>Send to multiple recipients at once</source>
<translation>Saatmine mitmele korraga</translation>
</message>
@@ -896,8 +1075,12 @@ Aadress: %4⏎</translation>
<translation>Kopeeri summa</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Saaja aadress ei ole kehtiv, palun kontrolli.</translation>
+ <source>Copy fee</source>
+ <translation>Kopeeri tasu</translation>
+ </message>
+ <message>
+ <source>or</source>
+ <translation>või</translation>
</message>
<message>
<source>The amount to pay must be larger than 0.</source>
@@ -912,10 +1095,6 @@ Aadress: %4⏎</translation>
<translation>Summa koos tehingu tasuga %1 ületab sinu jääki.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Ühe saatmisega topelt-adressaati olla ei tohi.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(silti pole)</translation>
</message>
@@ -969,10 +1148,6 @@ Aadress: %4⏎</translation>
<translation>&amp;Allkirjastamise teade</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Omandiõigsuse tõestamiseks saad sõnumeid allkirjastada oma aadressiga. Ettevaatust petturitega, kes üritavad saada sinu allkirja endale saada. Allkirjasta ainult korralikult täidetud avaldusi, millega nõustud.</translation>
- </message>
- <message>
<source>Alt+A</source>
<translation>Alt+A</translation>
</message>
@@ -1017,10 +1192,6 @@ Aadress: %4⏎</translation>
<translation>&amp;Kinnita Sõnum</translation>
</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>Kinnitamiseks sisesta allkirjastamise aadress, sõnum (kindlasti kopeeri täpselt ka reavahetused, tühikud, tabulaatorid jms) ning allolev signatuur.</translation>
- </message>
- <message>
<source>Verify the message to ensure it was signed with the specified Bitcoin address</source>
<translation>Kinnita sõnum tõestamaks selle allkirjastatust määratud Bitcoini aadressiga.</translation>
</message>
@@ -1102,7 +1273,11 @@ Aadress: %4⏎</translation>
</context>
<context>
<name>TrafficGraphWidget</name>
- </context>
+ <message>
+ <source>KB/s</source>
+ <translation>KB/s</translation>
+ </message>
+</context>
<context>
<name>TransactionDesc</name>
<message>
@@ -1121,10 +1296,6 @@ Aadress: %4⏎</translation>
<source>Status</source>
<translation>Staatus</translation>
</message>
- <message numerus="yes">
- <source>, broadcast through %n node(s)</source>
- <translation><numerusform>, levita läbi %n node'i</numerusform><numerusform>, levita läbi %n node'i</numerusform></translation>
- </message>
<message>
<source>Date</source>
<translation>Kuupäev</translation>
@@ -1157,10 +1328,6 @@ Aadress: %4⏎</translation>
<source>Credit</source>
<translation>Krediit</translation>
</message>
- <message numerus="yes">
- <source>matures in %n more block(s)</source>
- <translation><numerusform>aegub %n bloki pärast</numerusform><numerusform>aegub %n bloki pärast</numerusform></translation>
- </message>
<message>
<source>not accepted</source>
<translation>mitte aktsepteeritud</translation>
@@ -1217,10 +1384,6 @@ Aadress: %4⏎</translation>
<source>, has not been successfully broadcast yet</source>
<translation>, veel esitlemata</translation>
</message>
- <message numerus="yes">
- <source>Open for %n more block(s)</source>
- <translation><numerusform>Avaneb %n bloki pärast</numerusform><numerusform>Avaneb %n bloki pärast</numerusform></translation>
- </message>
<message>
<source>unknown</source>
<translation>tundmatu</translation>
@@ -1248,14 +1411,6 @@ Aadress: %4⏎</translation>
<translation>Tüüp</translation>
</message>
<message>
- <source>Address</source>
- <translation>Aadress</translation>
- </message>
- <message numerus="yes">
- <source>Open for %n more block(s)</source>
- <translation><numerusform>Avaneb %n bloki pärast</numerusform><numerusform>Avaneb %n bloki pärast</numerusform></translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Avatud kuni %1</translation>
</message>
@@ -1272,6 +1427,10 @@ Aadress: %4⏎</translation>
<translation>Loodud, kuid aktsepteerimata</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Silt</translation>
+ </message>
+ <message>
<source>Received with</source>
<translation>Saadud koos</translation>
</message>
@@ -1308,10 +1467,6 @@ Aadress: %4⏎</translation>
<translation>Tehingu tüüp.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Tehingu saaja aadress.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Jäägile lisatud või eemaldatud summa.</translation>
</message>
@@ -1399,6 +1554,10 @@ Aadress: %4⏎</translation>
<translation>Kuva tehingu detailid</translation>
</message>
<message>
+ <source>Exporting Failed</source>
+ <translation>Eksportimine Ebaõnnestus</translation>
+ </message>
+ <message>
<source>Comma separated file (*.csv)</source>
<translation>Komaeraldatud fail (*.csv)</translation>
</message>
@@ -1451,6 +1610,10 @@ Aadress: %4⏎</translation>
<context>
<name>WalletView</name>
<message>
+ <source>&amp;Export</source>
+ <translation>&amp;Ekspordi</translation>
+ </message>
+ <message>
<source>Export the data in the current tab to a file</source>
<translation>Ekspordi kuvatava vahelehe sisu faili</translation>
</message>
@@ -1546,10 +1709,6 @@ Aadress: %4⏎</translation>
<translation>Tuvastati vigane bloki andmebaas</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Leia oma IP aadress (vaikeväärtus: 1, kui kuulatakse ning puudub -externalip)</translation>
- </message>
- <message>
<source>Do you want to rebuild the block database now?</source>
<translation>Kas soovid bloki andmebaasi taastada?</translation>
</message>
@@ -1578,10 +1737,6 @@ Aadress: %4⏎</translation>
<translation>Pordi kuulamine nurjus. Soovikorral kasuta -listen=0.</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Taasta bloki jada indeks blk000??.dat failist</translation>
- </message>
- <message>
<source>Verifying blocks...</source>
<translation>Kontrollin blokke...</translation>
</message>
@@ -1590,6 +1745,10 @@ Aadress: %4⏎</translation>
<translation>Kontrollin rahakotti...</translation>
</message>
<message>
+ <source>Wallet options:</source>
+ <translation>Rahakoti valikud:</translation>
+ </message>
+ <message>
<source>Imports blocks from external blk000??.dat file</source>
<translation>Impordi blokid välisest blk000??.dat failist</translation>
</message>
@@ -1598,14 +1757,50 @@ Aadress: %4⏎</translation>
<translation>Informatsioon</translation>
</message>
<message>
+ <source>RPC server options:</source>
+ <translation>RPC serveri valikud:</translation>
+ </message>
+ <message>
<source>Send trace/debug info to console instead of debug.log file</source>
<translation>Saada jälitus/debug, debug.log faili asemel, konsooli</translation>
</message>
<message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Keele valik, nt "ee_ET" (vaikeväärtus: system locale)</translation>
+ </message>
+ <message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Käivitamisel teabeakna kuvamine (vaikeväärtus: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Kahanda programmi käivitamisel debug.log faili (vaikeväärtus: 1, kui ei ole -debug)</translation>
</message>
<message>
+ <source>Signing transaction failed</source>
+ <translation>Tehingu allkirjastamine ebaõnnestus</translation>
+ </message>
+ <message>
+ <source>Start minimized</source>
+ <translation>Käivitu tegumiribale</translation>
+ </message>
+ <message>
+ <source>The transaction amount is too small to pay the fee</source>
+ <translation>Tehingu summa on tasu maksmiseks liiga väikene</translation>
+ </message>
+ <message>
+ <source>Transaction amount too small</source>
+ <translation>Tehingu summa liiga väikene</translation>
+ </message>
+ <message>
+ <source>Transaction too large</source>
+ <translation>Tehing liiga suur</translation>
+ </message>
+ <message>
+ <source>UI Options:</source>
+ <translation>UI Valikud:</translation>
+ </message>
+ <message>
<source>Use UPnP to map the listening port (default: 1 when listening)</source>
<translation>Kasuta kuulatava pordi määramiseks UPnP ühendust (vaikeväärtus: 1, kui kuulatakse)</translation>
</message>
@@ -1618,8 +1813,8 @@ Aadress: %4⏎</translation>
<translation>Hoiatus</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Hoiatus: versioon on aegunud, uuendus on nõutav!</translation>
+ <source>on startup</source>
+ <translation>käivitamisel</translation>
</message>
<message>
<source>wallet.dat corrupt, salvage failed</source>
@@ -1662,6 +1857,10 @@ Aadress: %4⏎</translation>
<translation>Viga wallet.dat käivitamisel. Vigane rahakkott</translation>
</message>
<message>
+ <source>(default: %s)</source>
+ <translation>(vaikimisi: %s)</translation>
+ </message>
+ <message>
<source>Error loading wallet.dat</source>
<translation>Viga wallet.dat käivitamisel</translation>
</message>
diff --git a/src/qt/locale/bitcoin_eu_ES.ts b/src/qt/locale/bitcoin_eu_ES.ts
index 34c34c4431..d68411d382 100644
--- a/src/qt/locale/bitcoin_eu_ES.ts
+++ b/src/qt/locale/bitcoin_eu_ES.ts
@@ -72,10 +72,6 @@
<translation>Aldatu pasahitza</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Sartu zorroaren pasahitz zaharra eta berria.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Berretsi zorroaren enkriptazioa</translation>
</message>
@@ -509,10 +505,6 @@
<translation>Mota</translation>
</message>
<message>
- <source>Address</source>
- <translation>Helbidea</translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Zabalik %1 arte</translation>
</message>
@@ -529,6 +521,10 @@
<translation>Sortua, baina ez onartua</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Etiketa</translation>
+ </message>
+ <message>
<source>Received with</source>
<translation>Jasota honekin: </translation>
</message>
@@ -561,10 +557,6 @@
<translation>Transakzio mota.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Transakzioaren xede-helbidea.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Saldoan kendu edo gehitutako kopurua.</translation>
</message>
diff --git a/src/qt/locale/bitcoin_fa.ts b/src/qt/locale/bitcoin_fa.ts
index 2f9a1c7345..25d437668f 100644
--- a/src/qt/locale/bitcoin_fa.ts
+++ b/src/qt/locale/bitcoin_fa.ts
@@ -2,6 +2,10 @@
<context>
<name>AddressBookPage</name>
<message>
+ <source>Right-click to edit address or label</source>
+ <translation>برای تغییر آدرس و یا برچسب کلیک راست کنید.</translation>
+ </message>
+ <message>
<source>Create a new address</source>
<translation>ایجاد نشانی جدید</translation>
</message>
@@ -42,6 +46,22 @@
<translation>&amp;حذف</translation>
</message>
<message>
+ <source>Choose the address to send coins to</source>
+ <translation>آدرس مورد نظر برای ارسال کوین ها را انتخاب کنید</translation>
+ </message>
+ <message>
+ <source>Choose the address to receive coins with</source>
+ <translation>آدرس موردنظر برای دریافت کوین ها را انتخاب کنید.</translation>
+ </message>
+ <message>
+ <source>Sending addresses</source>
+ <translation>آدرس های ارسال کننده</translation>
+ </message>
+ <message>
+ <source>Receiving addresses</source>
+ <translation>آدرس های دریافت کننده</translation>
+ </message>
+ <message>
<source>These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
<translation>این‌ها نشانی‌های بیت‌کوین شما برای ارسال وجود هستند. همیشه قبل از ارسال سکه‌ها، نشانی دریافت‌کننده و مقدار ارسالی را بررسی کنید.</translation>
</message>
@@ -124,10 +144,6 @@
<translation>تغییر گذرواژه</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>گذرواژهٔ قدیمی و جدید کیف پول را وارد کنید.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>تأیید رمزنگاری کیف پول</translation>
</message>
@@ -152,10 +168,6 @@
<translation>کیف پول رمزنگاری شد</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>بیت‌کوین هم اکنون بسته می‌شود تا فرایند رمزگذاری را تمام کند. به خاطر داشته باشید که رمزگذاری کردن کیف پول‌تان نمی‌تواند به طور کامل بیت‌کوین‌های شما را در برابر دزدیده شدن توسط بدافزارهایی که احتمالاً رایانهٔ شما را آلوده می‌کنند، محافظت نماید.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>رمزنگاری کیف پول با شکست مواجه شد</translation>
</message>
@@ -255,10 +267,6 @@
<translation>ارسال وجه به نشانی بیت‌کوین</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>تغییر و اصلاح تنظیمات پیکربندی بیت‌کوین</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>تهیهٔ پشتیبان از کیف پول در یک مکان دیگر</translation>
</message>
@@ -334,6 +342,10 @@
<source>Bitcoin Core</source>
<translation> هسته Bitcoin </translation>
</message>
+ <message>
+ <source>&amp;About Bitcoin Core</source>
+ <translation>درباره هسته ی بیت کوین</translation>
+ </message>
<message numerus="yes">
<source>%n active connection(s) to Bitcoin network</source>
<translation><numerusform>%n ارتباط فعال با شبکهٔ بیت‌کوین</numerusform></translation>
@@ -395,18 +407,6 @@
<translation>تراکنش دریافت شد</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>تاریخ: %1
-مبلغ: %2
-نوع: %3
-نشانی: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>کیف پول &lt;b&gt;رمزنگاری شده&lt;/b&gt; است و هم‌اکنون &lt;b&gt;باز&lt;/b&gt; است</translation>
</message>
@@ -425,10 +425,38 @@ Address: %4
<context>
<name>CoinControlDialog</name>
<message>
+ <source>Coin Selection</source>
+ <translation>انتخاب سکه</translation>
+ </message>
+ <message>
+ <source>Quantity:</source>
+ <translation>تعداد:</translation>
+ </message>
+ <message>
+ <source>Bytes:</source>
+ <translation>بایت ها:</translation>
+ </message>
+ <message>
<source>Amount:</source>
<translation>مبلغ:</translation>
</message>
<message>
+ <source>Priority:</source>
+ <translation>اولویت:</translation>
+ </message>
+ <message>
+ <source>Fee:</source>
+ <translation>هزینه:</translation>
+ </message>
+ <message>
+ <source>After Fee:</source>
+ <translation>هزینه ی پسین:</translation>
+ </message>
+ <message>
+ <source>Change:</source>
+ <translation>پول خورد:</translation>
+ </message>
+ <message>
<source>Amount</source>
<translation>مبلغ</translation>
</message>
@@ -561,26 +589,6 @@ Address: %4
<source>command-line options</source>
<translation>گزینه‌های خط فرمان</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>گزینه‌های رابط کاربری</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>زبان را تنظیم کنید؛ برای مثال «de_DE» (زبان پیش‌فرض محلی)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>اجرای برنامه به صورت کوچک‌شده</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>نمایش پنجرهٔ خوشامدگویی در ابتدای اجرای برنامه (پیش‌فرض: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>انتخاب مسیر داده‌ها در ابتدای اجرای برنامه (پیش‌فرض: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -619,14 +627,6 @@ Address: %4
<translation>&amp;عمومی</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>اجرای خودکار بیت‌کوین در زمان ورود به سیستم.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;اجرای بیت‌کوین با ورود به سیستم</translation>
- </message>
- <message>
<source>Reset all client options to default.</source>
<translation>بازنشانی تمام تنظیمات به پیش‌فرض.</translation>
</message>
@@ -675,10 +675,6 @@ Address: %4
<translation>&amp;کوچک کردن به سینی به‌جای نوار وظیفه</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>مخفی کردن در نوار کناری به‌جای خروج هنگام بستن پنجره. زمانی که این گزینه فعال است، برنامه فقط با استفاده از گزینهٔ خروج در منو قابل بسته شدن است.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>کوچک کردن &amp;در زمان بسته شدن</translation>
</message>
@@ -691,10 +687,6 @@ Address: %4
<translation>زبان &amp;رابط کاربری:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>زبان رابط کاربر می‌تواند در این‌جا تنظیم شود. تنظیمات بعد از ظروع مجدد بیت‌کوین اعمال خواهد شد.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;واحد نمایش مبالغ:</translation>
</message>
@@ -873,18 +865,10 @@ Address: %4
<translation>فایلِ لاگِ اشکال زدایی</translation>
</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>فایلِ لاگِ اشکال زدایی Bitcoin را از دایرکتوری جاری داده ها باز کنید. این عملیات ممکن است برای فایلهای لاگِ حجیم طولانی شود.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>پاکسازی کنسول</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>به کنسور RPC بیت‌کوین خوش آمدید.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>دکمه‌های بالا و پایین برای پیمایش تاریخچه و &lt;b&gt;Ctrl-L&lt;/b&gt; برای پاک کردن صفحه.</translation>
</message>
@@ -973,10 +957,34 @@ Address: %4
<translation>ارسال سکه</translation>
</message>
<message>
+ <source>Quantity:</source>
+ <translation>تعداد:</translation>
+ </message>
+ <message>
+ <source>Bytes:</source>
+ <translation>بایت ها:</translation>
+ </message>
+ <message>
<source>Amount:</source>
<translation>مبلغ:</translation>
</message>
<message>
+ <source>Priority:</source>
+ <translation>اولویت:</translation>
+ </message>
+ <message>
+ <source>Fee:</source>
+ <translation>هزینه:</translation>
+ </message>
+ <message>
+ <source>After Fee:</source>
+ <translation>هزینه ی پسین:</translation>
+ </message>
+ <message>
+ <source>Change:</source>
+ <translation>پول خورد:</translation>
+ </message>
+ <message>
<source>Send to multiple recipients at once</source>
<translation>ارسال به چند دریافت‌کنندهٔ به‌طور همزمان</translation>
</message>
@@ -1013,10 +1021,6 @@ Address: %4
<translation>یا</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>نشانی گیرنده معتبر نیست؛ لطفا دوباره بررسی کنید.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>مبلغ پرداخت باید بیشتر از ۰ باشد.</translation>
</message>
@@ -1029,10 +1033,6 @@ Address: %4
<translation>با احتساب هزینهٔ %1 برای هر تراکنش، مجموع میزان پرداختی از مبلغ تراز شما بیشتر می‌شود.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>یک نشانی تکراری پیدا شد. در هر عملیات ارسال، به هر نشانی فقط مبلغ می‌توان ارسال کرد.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(بدون برچسب)</translation>
</message>
@@ -1086,10 +1086,6 @@ Address: %4
<translation>ا&amp;مضای پیام</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>برای احراز اینکه پیام‌ها از جانب شما هستند، می‌توانید آن‌ها را با نشانی خودتان امضا کنید. مراقب باشید چیزی که بدان اطمینان ندارید را امضا نکنید زیرا حملات فیشینگ ممکن است بخواهند از.پیامی با امضای شما سوءاستفاده کنند. تنها مواردی را که حاوی اطلاعات دقیق و قابل قبول برای شما هستند امضا کنید.</translation>
- </message>
- <message>
<source>Alt+A</source>
<translation>Alt+A</translation>
</message>
@@ -1134,10 +1130,6 @@ Address: %4
<translation>&amp;شناسایی پیام</translation>
</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>برای شناسایی پیام، نشانیِ امضا کننده و متن پیام را وارد کنید. (مطمئن شوید که فاصله‌ها، تب‌ها و خطوط را عیناً کپی می‌کنید.) مراقب باشید در امضا چیزی بیشتر از آنچه در پیام می‌بینید وجود نداشته باشد تا فریب دزدان اینترنتی و حملات از نوع MITM را نخورید.</translation>
- </message>
- <message>
<source>Verify the message to ensure it was signed with the specified Bitcoin address</source>
<translation>برای حصول اطمینان از اینکه پیام با نشانی بیت‌کوین مشخص شده امضا است یا خیر، پیام را شناسایی کنید</translation>
</message>
@@ -1364,10 +1356,6 @@ Address: %4
<source>Type</source>
<translation>نوع</translation>
</message>
- <message>
- <source>Address</source>
- <translation>نشانی</translation>
- </message>
<message numerus="yes">
<source>Open for %n more block(s)</source>
<translation><numerusform>باز برای %n بلوک دیگر</numerusform></translation>
@@ -1389,6 +1377,10 @@ Address: %4
<translation>تولید شده ولی قبول نشده</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>برچسب</translation>
+ </message>
+ <message>
<source>Received with</source>
<translation>دریافت‌شده با</translation>
</message>
@@ -1425,10 +1417,6 @@ Address: %4
<translation>نوع تراکنش.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>نشانی مقصد تراکنش.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>مبلغ کسر شده و یا اضافه شده به تراز.</translation>
</message>
@@ -1659,10 +1647,6 @@ Address: %4
<translation>یک پایگاه داده ی بلوک خراب یافت شد</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>آدرس آی.پی. خود را شناسایی کنید (پیش فرض:1 در زمان when listening وno -externalip)</translation>
- </message>
- <message>
<source>Do you want to rebuild the block database now?</source>
<translation>آیا مایلید که اکنون پایگاه داده ی بلوک را بازسازی کنید؟</translation>
</message>
@@ -1691,6 +1675,10 @@ Address: %4
<translation>در حال بازبینی کیف پول...</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>انتخاب مسیر داده‌ها در ابتدای اجرای برنامه (پیش‌فرض: 0)</translation>
+ </message>
+ <message>
<source>Information</source>
<translation>اطلاعات</translation>
</message>
@@ -1699,10 +1687,22 @@ Address: %4
<translation>اطلاعات ردگیری/اشکال‌زدایی را به جای فایل لاگ اشکال‌زدایی به کنسول بفرستید</translation>
</message>
<message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>زبان را تنظیم کنید؛ برای مثال «de_DE» (زبان پیش‌فرض محلی)</translation>
+ </message>
+ <message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>نمایش پنجرهٔ خوشامدگویی در ابتدای اجرای برنامه (پیش‌فرض: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>فایل debug.log را در startup مشتری کوچک کن (پیش فرض:1 اگر اشکال زدایی روی نداد)</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>اجرای برنامه به صورت کوچک‌شده</translation>
+ </message>
+ <message>
<source>Use UPnP to map the listening port (default: 1 when listening)</source>
<translation>از UPnP برای شناسایی درگاه شنیداری استفاده کنید (پیش فرض:1 در زمان شنیدن)</translation>
</message>
@@ -1715,10 +1715,6 @@ Address: %4
<translation>هشدار</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>هشدار: این نسخه قدیمی است، روزآمدسازی مورد نیاز است</translation>
- </message>
- <message>
<source>Password for JSON-RPC connections</source>
<translation>JSON-RPC عبارت عبور برای ارتباطات</translation>
</message>
diff --git a/src/qt/locale/bitcoin_fa_IR.ts b/src/qt/locale/bitcoin_fa_IR.ts
index 0a3071a6c7..2dde67d3d5 100644
--- a/src/qt/locale/bitcoin_fa_IR.ts
+++ b/src/qt/locale/bitcoin_fa_IR.ts
@@ -92,10 +92,6 @@
<translation>تغییر رمز/پَس فرِیز</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>رمز/پَس فرِیزِ قدیم و جدید را در wallet وارد کنید</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>رمزگذاری wallet را تایید کنید</translation>
</message>
@@ -104,10 +100,6 @@
<translation>تایید رمزگذاری</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin برای اتمام فرایند رمزگذاری بسته خواهد شد. به خاطر داشته باشید که رمزگذاری WALLET شما، کامپیوتر شما را از آلودگی به بدافزارها مصون نمی دارد.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>رمزگذاری تایید نشد</translation>
</message>
@@ -191,10 +183,6 @@
<translation>تغییر رمز/پَس فرِیز</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>اصلاح انتخابها برای پیکربندی Bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>گرفتن نسخه پیشتیبان در آدرسی دیگر</translation>
</message>
@@ -255,15 +243,6 @@
<translation>تراکنش دریافتی</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>تاریخ: %1⏎ میزان وجه : %2⏎ نوع: %3⏎ آدرس: %4⏎
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>wallet رمزگذاری شد و در حال حاضر از حالت قفل در آمده است</translation>
</message>
@@ -458,10 +437,6 @@ Address: %4
<source>Current number of blocks</source>
<translation>تعداد زنجیره های حاضر</translation>
</message>
- <message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>به کنسول آر.پی.سی. BITCOIN خوش آمدید</translation>
- </message>
</context>
<context>
<name>ReceiveCoinsDialog</name>
@@ -707,10 +682,6 @@ Address: %4
<translation>گونه</translation>
</message>
<message>
- <source>Address</source>
- <translation>حساب</translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>باز کن تا %1</translation>
</message>
@@ -727,6 +698,10 @@ Address: %4
<translation>تولید شده اما قبول نشده است</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>برچسب</translation>
+ </message>
+ <message>
<source>Received with</source>
<translation>دریافت با</translation>
</message>
@@ -763,10 +738,6 @@ Address: %4
<translation>نوع تراکنش</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>آدرس مقصد در تراکنش</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>میزان وجه کم شده یا اضافه شده به حساب</translation>
</message>
diff --git a/src/qt/locale/bitcoin_fi.ts b/src/qt/locale/bitcoin_fi.ts
index c16e0e1776..0ca66e8b26 100644
--- a/src/qt/locale/bitcoin_fi.ts
+++ b/src/qt/locale/bitcoin_fi.ts
@@ -156,10 +156,6 @@
<translation>Vaihda tunnuslause</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Anna vanha ja uusi tunnuslause.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Vahvista lompakon salaus</translation>
</message>
@@ -188,10 +184,6 @@
<translation>Anna salauslause lompakkoon. &lt;br/&gt;Ole hyvä ja käytä lausetta jossa on &lt;b&gt;kymmenen tai enemmän satunnaista merkkiä&lt;/b&gt; tai &lt;b&gt;kahdeksan tai useampi sanaa&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin sulkeutuu lopettaakseen salausprosessin. Muista, että salattukaan lompakko ei täysin suojaa sitä haittaohjelmien aiheuttamilta varkauksilta.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Lompakon salaus epäonnistui</translation>
</message>
@@ -311,10 +303,6 @@
<translation>Lähetä kolikoita Bitcoin-osoitteeseen</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Muuta Bitcoinin konfiguraatioasetuksia</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Varmuuskopioi lompakko toiseen sijaintiin</translation>
</message>
@@ -478,10 +466,6 @@
<source>Up to date</source>
<translation>Rahansiirtohistoria on ajan tasalla</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>Käsitelty %n lohko rahansiirtohistoriasta.</numerusform><numerusform>Käsitelty %n lohkoa rahansiirtohistoriasta.</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>Saavutetaan verkkoa...</translation>
@@ -495,17 +479,6 @@
<translation>Saapuva rahansiirto</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Päivä: %1
-Määrä: %2
-Tyyppi: %3
-Osoite: %4</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Lompakko on &lt;b&gt;salattu&lt;/b&gt; ja tällä hetkellä &lt;b&gt;avoinna&lt;/b&gt;</translation>
</message>
@@ -708,10 +681,6 @@ Osoite: %4</translation>
<translation>ei</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Tämä nimi muuttuu punaiseksi jos rahansiirron koko on suurempi kuin 1000 tavua</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Tämä tarkoittaa että vähintään %1 per kB palkkio on pakollinen.</translation>
</message>
@@ -724,14 +693,6 @@ Osoite: %4</translation>
<translation>Rahansiirrot korkeammalla prioriteetilla sisällytetään varmemmin lohkoon.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Tämä nimi muuttuu punaiseksi jos prioriteetti on pienempi kuin "keskisuuri".</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Tämä nimi muuttuu punaiseksi jos vastaanottaja saa pienemmän määrän kuin %1</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(ei nimeä)</translation>
</message>
@@ -852,30 +813,6 @@ Osoite: %4</translation>
<source>command-line options</source>
<translation>komentorivi parametrit</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Käyttöliittymäasetukset</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Set language, for example "de_DE" (default: system locale)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Käynnistä pienennettynä</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Aseta SSL root varmenne maksupyynnöille (oletus: -system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Näytä aloitusruutu käynnistettäessä (oletus: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Valitse data-hakemisto käynnistyksessä (oletus: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -958,14 +895,6 @@ Osoite: %4</translation>
<translation>&amp;Yleiset</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Käynnistä Bitcoin kirjautumisen yhteydessä.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Käynnistä Bitcoin kirjautumisen yhteydessä</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>&amp;Tietokannan välimuistin koko</translation>
</message>
@@ -1078,10 +1007,6 @@ Osoite: %4</translation>
<translation>&amp;Pienennä ilmaisinalueelle työkalurivin sijasta</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>Ikkunaa suljettaessa vain pienentää Bitcoin-ohjelman ikkunan lopettamatta itse ohjelmaa. Kun tämä asetus on valittuna, ohjelman voi sulkea vain valitsemalla Lopeta ohjelman valikosta.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>P&amp;ienennä suljettaessa</translation>
</message>
@@ -1094,10 +1019,6 @@ Osoite: %4</translation>
<translation>&amp;Käyttöliittymän kieli</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Tässä voit määritellä käyttöliittymän kielen. Muutokset astuvat voimaan seuraavan kerran, kun Bitcoin käynnistetään.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>Yksikkö jona bitcoin-määrät näytetään</translation>
</message>
@@ -1134,10 +1055,6 @@ Osoite: %4</translation>
<translation>Ohjelman uudelleenkäynnistys aktivoi muutokset.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>Ohjelma lopetetaan. Haluatko jatkaa?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>Tämä muutos vaatii ohjelman uudelleenkäynnistyksen.</translation>
</message>
@@ -1244,10 +1161,6 @@ Osoite: %4</translation>
<translation>Maksypyyntö verkossa ei täsmää asiakasohjelman verkkoon.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>Maksupyyntö on vanhentunut.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>Maksupyyntöä ei ole alustettu.</translation>
</message>
@@ -1311,10 +1224,6 @@ Osoite: %4</translation>
<translation>Käyttöliittymä</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Osoite/Isäntänimi</translation>
- </message>
- <message>
<source>Ping Time</source>
<translation>Vasteaika</translation>
</message>
@@ -1346,14 +1255,6 @@ Osoite: %4</translation>
<translation>%1 s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>VERKKO</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>TUNNISTAMATON</translation>
- </message>
- <message>
<source>None</source>
<translation>Ei yhtään</translation>
</message>
@@ -1552,18 +1453,10 @@ Osoite: %4</translation>
<translation>Debug lokitiedosto</translation>
</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>Avaa lokitiedosto nykyisestä data-kansiosta. Tämä voi viedä useamman sekunnin, jos lokitiedosto on iso.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Tyhjennä konsoli</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Tervetuloa Bitcoin RPC konsoliin.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Ylös- ja alas-nuolet selaavat historiaa ja &lt;b&gt;Ctrl-L&lt;/b&gt; tyhjentää ruudun.</translation>
</message>
@@ -1852,10 +1745,6 @@ Osoite: %4</translation>
<translation>pudota kulujen asetukset</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Pienennä</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>per kilotavu</translation>
</message>
@@ -1972,10 +1861,6 @@ Osoite: %4</translation>
<translation>tai</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Vastaanottajan osoite on virheellinen. Tarkista osoite.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Maksettavan summan tulee olla suurempi kuin 0 Bitcoinia.</translation>
</message>
@@ -1988,10 +1873,6 @@ Osoite: %4</translation>
<translation>Kokonaismäärä ylittää saldosi kun %1 maksukulu lisätään summaan.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Sama osoite toistuu useamman kerran. Samaan osoitteeseen voi lähettää vain kerran per maksu.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Rahansiirron luonti epäonnistui!</translation>
</message>
@@ -2079,10 +1960,6 @@ Osoite: %4</translation>
<translation>Viesti:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Tämä on varmistettu maksupyyntö.</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>Aseta nimi tälle osoitteelle lisätäksesi sen käytettyjen osoitteiden listalle.</translation>
</message>
@@ -2091,10 +1968,6 @@ Osoite: %4</translation>
<translation>Viesti joka liitettiin bitcoin: URI:iin tallennetaan rahansiirtoon viitteeksi. Tätä viestiä ei lähetetä Bitcoin-verkkoon.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Tämä on varmistamaton maksupyyntö</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Saaja:</translation>
</message>
@@ -2125,10 +1998,6 @@ Osoite: %4</translation>
<translation>&amp;Allekirjoita viesti</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Voit allekirjoittaa viestit omalla osoitteellasi todistaaksesi että omistat ne. Ole huolellinen, että et allekirjoita mitään epämääräistä, phishing-hyökkääjät voivat huijata sinua allekirjoittamaan luovuttamalla henkilöllisyytesi. Allekirjoita selvitys täysin yksityiskohtaisesti mihin olet sitoutunut.</translation>
- </message>
- <message>
<source>The Bitcoin address to sign the message with</source>
<translation>Bitcoin-osoite jolla viesti allekirjoitetaan</translation>
</message>
@@ -2181,10 +2050,6 @@ Osoite: %4</translation>
<translation>&amp;Varmista viesti</translation>
</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>Syötä allekirjoittava osoite, viesti ja allekirjoitus alla oleviin kenttiin varmistaaksesi allekirjoituksen aitouden. Varmista että kopioit kaikki kentät täsmälleen oikein, myös rivinvaihdot, välilyönnit, tabulaattorit, jne.</translation>
- </message>
- <message>
<source>The Bitcoin address the message was signed with</source>
<translation>Bitcoin-osoite jolla viesti on allekirjoitettu</translation>
</message>
@@ -2448,10 +2313,6 @@ Osoite: %4</translation>
<translation>Laatu</translation>
</message>
<message>
- <source>Address</source>
- <translation>Osoite</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Epäkypsä (%1 varmistusta, saatavilla %2 jälkeen)</translation>
</message>
@@ -2480,6 +2341,10 @@ Osoite: %4</translation>
<translation>Offline</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Nimi</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Varmistamaton</translation>
</message>
@@ -2532,10 +2397,6 @@ Osoite: %4</translation>
<translation>Rahansiirron laatu.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Rahansiirron kohteen Bitcoin-osoite</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Saldoon lisätty tai siitä vähennetty määrä.</translation>
</message>
@@ -2854,10 +2715,6 @@ Osoite: %4</translation>
<translation>Debuggaus/Testauksen valinnat:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Hae oma IP osoite (vakioasetus: 1 kun kuuntelemassa ja ei -externalip)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>Älä lataa lompakkoa ja poista lompakon RPC kutsut</translation>
</message>
@@ -2910,10 +2767,6 @@ Osoite: %4</translation>
<translation>Ei tarpeeksi tiedostomerkintöjä vapaana.</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Uudelleenrakenna lohkoketjuindeksi nykyisistä blk000??.dat tiedostoista</translation>
- </message>
- <message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation>Aseta tietokannan välimuistin koko megatavuissa (%d - %d, oletus: %d</translation>
</message>
@@ -2974,6 +2827,10 @@ Osoite: %4</translation>
<translation>Aseta kolikoiden luomiseen tarkoitettujen säikeiden lukumäärä (-1 = kaikki ytimet, oletus: %d)</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Valitse data-hakemisto käynnistyksessä (oletus: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Yhdistä SOCKS5 proxin kautta</translation>
</message>
@@ -3022,10 +2879,22 @@ Osoite: %4</translation>
<translation>Lähetä jäljitys/debug-tieto konsoliin, debug.log-tiedoston sijaan</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Aseta SSL root varmenne maksupyynnöille (oletus: -system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Set language, for example "de_DE" (default: system locale)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Näytä kaikki debuggaus valinnat: (käyttö: --help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Näytä aloitusruutu käynnistettäessä (oletus: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Pienennä debug.log tiedosto käynnistyksen yhteydessä (vakioasetus: 1 kun ei -debug)</translation>
</message>
@@ -3034,6 +2903,10 @@ Osoite: %4</translation>
<translation>Siirron vahvistus epäonnistui</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Käynnistä pienennettynä</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Tämä on ohjelmistoa kokeelliseen käyttöön.</translation>
</message>
@@ -3066,10 +2939,6 @@ Osoite: %4</translation>
<translation>Varoitus</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Varoitus: Tämä versio on vanhentunut, päivitys tarpeen!</translation>
- </message>
- <message>
<source>Zapping all transactions from wallet...</source>
<translation>Tyhjennetään kaikki rahansiirrot lompakosta....</translation>
</message>
diff --git a/src/qt/locale/bitcoin_fr.ts b/src/qt/locale/bitcoin_fr.ts
index df0c507a44..fe4288467b 100644
--- a/src/qt/locale/bitcoin_fr.ts
+++ b/src/qt/locale/bitcoin_fr.ts
@@ -156,10 +156,6 @@
<translation>Changer la phrase de passe</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Saisir l’ancienne phrase de passe pour le portefeuille ainsi que la nouvelle.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Confirmer le chiffrement du portefeuille</translation>
</message>
@@ -172,6 +168,10 @@
<translation>Êtes-vous sûr de vouloir chiffrer votre portefeuille ?</translation>
</message>
<message>
+ <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+ <translation>Bitcoin Core va maintenant se fermer pour terminer le processus de chiffrement. Souvenez-vous que le chiffrement de votre portefeuille ne peut pas vous protéger complètement contre le vol de vos bitcoins par des programmes malveillants infectant votre ordinateur.</translation>
+ </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>IMPORTANT : Toute sauvegarde précédente de votre fichier de portefeuille devrait être remplacée par le nouveau fichier de portefeuille chiffré. Pour des raisons de sécurité, les sauvegardes précédentes de votre fichier de portefeuille non chiffré deviendront inutilisables dès que vous commencerez à utiliser le nouveau portefeuille chiffré.</translation>
</message>
@@ -188,8 +188,8 @@
<translation>Saisissez une nouvelle phrase de passe pour le portefeuille.&lt;br/&gt;Veuillez utiliser une phrase composée de &lt;b&gt;dix caractères aléatoires ou plus&lt;/b&gt;, ou bien de &lt;b&gt;huit mots ou plus&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin va à présent se fermer pour terminer le chiffrement. N'oubliez pas que le chiffrement de votre portefeuille n'est pas une protection totale contre le vol par des logiciels malveillants qui infecteraient votre ordinateur.</translation>
+ <source>Enter the old passphrase and new passphrase to the wallet.</source>
+ <translation>Saisir l'ancienne phrase de passe puis la nouvelle phrase de passe du portefeuille.</translation>
</message>
<message>
<source>Wallet encryption failed</source>
@@ -311,10 +311,6 @@
<translation>Envoyer des pièces à une adresse Bitcoin</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Modifier les options de configuration de Bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Sauvegarder le portefeuille vers un autre emplacement</translation>
</message>
@@ -403,6 +399,10 @@
<translation>À &amp;propos de Bitcoin Core</translation>
</message>
<message>
+ <source>Modify configuration options for Bitcoin Core</source>
+ <translation>Modifier les options de configuration de Bitcoin Core</translation>
+ </message>
+ <message>
<source>Show the list of used sending addresses and labels</source>
<translation>Afficher la liste d'adresses d'envoi et d'étiquettes utilisées</translation>
</message>
@@ -431,6 +431,10 @@
<translation>Aucune source de blocs disponible...</translation>
</message>
<message numerus="yes">
+ <source>Processed %n block(s) of transaction history.</source>
+ <translation><numerusform>%n bloc d'historique transactionnel a été traité</numerusform><numerusform>%n blocs d'historique transactionnel ont été traités</numerusform></translation>
+ </message>
+ <message numerus="yes">
<source>%n hour(s)</source>
<translation><numerusform>%n heure</numerusform><numerusform>%n heures</numerusform></translation>
</message>
@@ -478,35 +482,49 @@
<source>Up to date</source>
<translation>À jour</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>%n bloc de l'historique transactionnel a été traité</numerusform><numerusform>%n blocs de l'historique transactionnel ont été traités</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>Rattrapage en cours…</translation>
</message>
<message>
- <source>Sent transaction</source>
- <translation>Transaction envoyée</translation>
+ <source>Date: %1
+</source>
+ <translation>Date : %1
+</translation>
</message>
<message>
- <source>Incoming transaction</source>
- <translation>Transaction entrante</translation>
+ <source>Amount: %1
+</source>
+ <translation>Montant : %1
+</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
+ <source>Type: %1
+</source>
+ <translation>Type : %1
+</translation>
+ </message>
+ <message>
+ <source>Label: %1
+</source>
+ <translation>Étiquette : %1
+</translation>
+ </message>
+ <message>
+ <source>Address: %1
</source>
- <translation>Date : %1
-Montant : %2
-Type : %3
-Adresse : %4
+ <translation>Adresse : %1
</translation>
</message>
<message>
+ <source>Sent transaction</source>
+ <translation>Transaction envoyée</translation>
+ </message>
+ <message>
+ <source>Incoming transaction</source>
+ <translation>Transaction entrante</translation>
+ </message>
+ <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Le portefeuille est &lt;b&gt;chiffré&lt;/b&gt; et est actuellement &lt;b&gt;déverrouillé&lt;/b&gt;</translation>
</message>
@@ -697,6 +715,14 @@ Adresse : %4
<translation>aucun</translation>
</message>
<message>
+ <source>This label turns red if the transaction size is greater than 1000 bytes.</source>
+ <translation>Cette étiquette devient rouge si la taille de la transaction est plus grande que 1 000 octets.</translation>
+ </message>
+ <message>
+ <source>This label turns red if the priority is smaller than "medium".</source>
+ <translation>Cette étiquette devient rouge si la priorité est plus basse que « moyenne ».</translation>
+ </message>
+ <message>
<source>Can vary +/- %1 satoshi(s) per input.</source>
<translation>Peut varier +/- %1 satoshi(s) par entrée.</translation>
</message>
@@ -709,10 +735,6 @@ Adresse : %4
<translation>non</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Cette étiquette devient rouge si la taille de la transaction est plus grande que 1 000 octets.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Ceci signifie que des frais d'au moins %1 par ko sont exigés.</translation>
</message>
@@ -725,10 +747,6 @@ Adresse : %4
<translation>Les transactions à priorité plus haute sont plus à même d'être incluses dans un bloc.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Cette étiquette devient rouge si la priorité est plus basse que « moyenne »</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(aucune étiquette)</translation>
</message>
@@ -849,30 +867,6 @@ Adresse : %4
<source>command-line options</source>
<translation>options de ligne de commande</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Options de l'interface utilisateur</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Définir la langue, par exemple « fr_CA » (par défaut : la langue du système)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Démarrer minimisé</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Définir les certificats SSL racine pour les requêtes de paiement (par défaut : -système-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Afficher l'écran d'accueil au démarrage (par défaut : 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Choisir un répertoire de données au démarrage (par défaut : 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -951,14 +945,6 @@ Adresse : %4
<translation>Réglages &amp;principaux</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Démarrer Bitcoin automatiquement après avoir ouvert une session sur l'ordinateur.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Démarrer Bitcoin lors de l'ouverture d'une session</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Taille du cache de la base de &amp;données</translation>
</message>
@@ -983,6 +969,14 @@ Adresse : %4
<translation>Adresse IP du mandataire (par ex. IPv4 : 127.0.0.1 / IPv6 : ::1)</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 Exit in the menu.</source>
+ <translation>Minimiser au lieu de quitter l'application lorsque la fenêtre est fermée. Si cette option est activée, l'application ne sera fermée qu'en sélectionnant Quitter dans le menu.</translation>
+ </message>
+ <message>
+ <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin Core.</source>
+ <translation>La langue de l'interface utilisateur peut être définie ici. Ce réglage sera pris en compte après redémarrage de Bitcoin.</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>URL de tiers (par ex. un explorateur de blocs) apparaissant dans l'onglet des transactions comme éléments du menu contextuel. %s dans l'URL est remplacé par le hachage de la transaction. Les URL multiples sont séparées par une barre verticale |.</translation>
</message>
@@ -1007,6 +1001,14 @@ Adresse : %4
<translation>&amp;Réseau</translation>
</message>
<message>
+ <source>Automatically start Bitcoin Core after logging in to the system.</source>
+ <translation>Démarrer Bitcoin Core automatiquement après avoir ouvert une session sur le système.</translation>
+ </message>
+ <message>
+ <source>&amp;Start Bitcoin Core on system login</source>
+ <translation>&amp;Démarrer Bitcoin Core lors de l'ouverture d'une session</translation>
+ </message>
+ <message>
<source>(0 = auto, &lt;0 = leave that many cores free)</source>
<translation>(0 = auto, &lt; 0 = laisser ce nombre de cœurs inutilisés)</translation>
</message>
@@ -1071,10 +1073,6 @@ Adresse : %4
<translation>&amp;Minimiser dans la barre système au lieu de la barre des tâches</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>Minimiser au lieu de quitter l'application lorsque la fenêtre est fermée. Si cette option est activée, l'application ne pourra être fermée qu'en sélectionnant Quitter dans le menu.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimiser lors de la fermeture</translation>
</message>
@@ -1087,10 +1085,6 @@ Adresse : %4
<translation>&amp;Langue de l'interface utilisateur :</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>La langue de l'interface utilisateur peut être définie ici. Ce réglage sera pris en compte après redémarrage de Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Unité d'affichage des montants :</translation>
</message>
@@ -1127,8 +1121,8 @@ Adresse : %4
<translation>Le redémarrage du client est nécessaire pour activer les changements.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>Le client sera arrêté, voulez-vous continuer?</translation>
+ <source>Client will be shut down. Do you want to proceed?</source>
+ <translation>Le client sera arrêté. Voulez-vous continuer ?</translation>
</message>
<message>
<source>This change would require a client restart.</source>
@@ -1237,10 +1231,6 @@ Adresse : %4
<translation>Le réseau de la demande de paiement ne correspond pas au réseau du client.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>La demande de paiement est expirée.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>La demande de paiement n'est pas initialisée.</translation>
</message>
@@ -1273,10 +1263,18 @@ Adresse : %4
<translation>Le fichier de demande de paiement ne peut pas être lu ! Ceci peut être causé par un fichier de demande de paiement invalide.</translation>
</message>
<message>
+ <source>Payment request expired.</source>
+ <translation>Demande de paiement expirée.</translation>
+ </message>
+ <message>
<source>Unverified payment requests to custom payment scripts are unsupported.</source>
<translation>Les demandes de paiements non vérifiées à des scripts de paiement personnalisés ne sont pas prises en charge.</translation>
</message>
<message>
+ <source>Invalid payment request.</source>
+ <translation>Demande de paiement invalide.</translation>
+ </message>
+ <message>
<source>Refund from %1</source>
<translation>Remboursement de %1</translation>
</message>
@@ -1316,8 +1314,8 @@ Adresse : %4
<translation>Agent utilisateur</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Adresse/nom d'hôte</translation>
+ <source>Node/Service</source>
+ <translation>Nœud/service</translation>
</message>
<message>
<source>Ping Time</source>
@@ -1351,14 +1349,6 @@ Adresse : %4
<translation>%1 s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>RÉSEAU</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>INCONNU</translation>
- </message>
- <message>
<source>None</source>
<translation>Aucun</translation>
</message>
@@ -1449,6 +1439,10 @@ Adresse : %4
<translation>Nombre actuel de blocs</translation>
</message>
<message>
+ <source>Open the Bitcoin Core debug log file from the current data directory. This can take a few seconds for large log files.</source>
+ <translation>Ouvrir le journal de débogage du répertoire de données actuel. Ceci pourrait prendre quelques secondes pour les gros fichiers de journalisation.</translation>
+ </message>
+ <message>
<source>Received</source>
<translation>Reçu</translation>
</message>
@@ -1517,6 +1511,10 @@ Adresse : %4
<translation>Temps de ping</translation>
</message>
<message>
+ <source>Time Offset</source>
+ <translation>Décalage temporel</translation>
+ </message>
+ <message>
<source>Last block time</source>
<translation>Horodatage du dernier bloc</translation>
</message>
@@ -1557,16 +1555,12 @@ Adresse : %4
<translation>Journal de débogage</translation>
</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>Ouvrir le journal de débogage de Bitcoin depuis le répertoire de données actuel. Ceci peut prendre quelques secondes pour les journaux de grande taille.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Nettoyer la console</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Bienvenue sur la console RPC de Bitcoin.</translation>
+ <source>Welcome to the Bitcoin Core RPC console.</source>
+ <translation>Bienvenue dans le console RPC de Bitcoin Core.</translation>
</message>
<message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
@@ -1857,14 +1851,6 @@ Adresse : %4
<translation>réduire les paramètres des frais</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Minimiser</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>Si les frais personnalisés sont définis à 1 000 satoshis et que la transaction est seulement de 250 octets, donc le « par kilo-octet » ne paiera que 250 satoshis de frais, alors que le « au moins » paiera 1 000 satoshis. Pour des transactions supérieures à un kilo-octet, les deux paieront par kilo-octets.</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>par kilo-octet</translation>
</message>
@@ -1873,6 +1859,10 @@ Adresse : %4
<translation>Si les frais personnalisés sont définis à 1 000 satoshis et que la transaction est seulement de 250 octets, donc le « par kilo-octet » ne paiera que 250 satoshis de frais, alors que le « total au moins » paiera 1 000 satoshis. Pour des transactions supérieures à un kilo-octet, les deux paieront par kilo-octets.</translation>
</message>
<message>
+ <source>Hide</source>
+ <translation>Cacher</translation>
+ </message>
+ <message>
<source>total at least</source>
<translation>total au moins</translation>
</message>
@@ -1993,10 +1983,6 @@ Adresse : %4
<translation>ou</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>L'adresse du destinataire n’est pas valide, veuillez la vérifier.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Le montant à payer doit être supérieur à 0.</translation>
</message>
@@ -2009,10 +1995,6 @@ Adresse : %4
<translation>Le montant dépasse votre solde lorsque les frais de transaction de %1 sont inclus.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Adresse indentique trouvée, il n'est possible d'envoyer qu'une fois à chaque adresse par opération d'envoi.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>La création de la transaction a échoué !</translation>
</message>
@@ -2021,16 +2003,28 @@ Adresse : %4
<translation>La transaction a été rejetée ! Ceci peut arriver si certaines pièces de votre portefeuille étaient déjà dépensées, par exemple si vous avez utilisé une copie de wallet.dat et que des pièces ont été dépensées dans la copie sans être marquées comme telles ici.</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
- <translation>Des frais supérieurs à %1 sont considérés comme follement élevés.</translation>
+ <source>A fee higher than %1 is considered an absurdly high fee.</source>
+ <translation>Des frais supérieurs à %1 sont considérés comme ridiculement élevés.</translation>
+ </message>
+ <message>
+ <source>Payment request expired.</source>
+ <translation>Demande de paiement expirée.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Estimated to begin confirmation within %n block(s).</source>
+ <translation><numerusform>Il est estimé que la confirmation commencera dans %n bloc.</numerusform><numerusform>Il est estimé que la confirmation commencera dans %n blocs.</numerusform></translation>
</message>
<message>
<source>Pay only the minimum fee of %1</source>
<translation>Payer seulement les frais minimum de %1</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>Début de confirmation estimé à %1 bloc(s).</translation>
+ <source>The recipient address is not valid. Please recheck.</source>
+ <translation>L'adresse du destinataire est invalide. Veuillez la vérifier.</translation>
+ </message>
+ <message>
+ <source>Duplicate address found: addresses should only be used once each.</source>
+ <translation>Adresse identique trouvée : chaque adresse ne devrait être utilisée qu'une fois.</translation>
</message>
<message>
<source>Warning: Invalid Bitcoin address</source>
@@ -2104,12 +2098,24 @@ Adresse : %4
<translation>Enlever cette entrée</translation>
</message>
<message>
+ <source>The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
+ <translation>Les frais seront déduits du montant envoyé. Le destinataire recevra moins de bitcoins que le montant saisi dans le champ de montant. Si plusieurs destinataires sont sélectionnés, les frais seront partagés également..</translation>
+ </message>
+ <message>
+ <source>S&amp;ubtract fee from amount</source>
+ <translation>S&amp;oustraire les frais du montant</translation>
+ </message>
+ <message>
<source>Message:</source>
<translation>Message :</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Ceci est une demande de paiement vérifiée.</translation>
+ <source>This is an unauthenticated payment request.</source>
+ <translation>Cette demande de paiement n'est pas authentifiée.</translation>
+ </message>
+ <message>
+ <source>This is an authenticated payment request.</source>
+ <translation>Cette demande de paiement est authentifiée.</translation>
</message>
<message>
<source>Enter a label for this address to add it to the list of used addresses</source>
@@ -2120,10 +2126,6 @@ Adresse : %4
<translation>Un message qui était joint à l'URI Bitcoin et qui sera stocké avec la transaction pour référence. Note : ce message ne sera pas envoyé par le réseau Bitcoin.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Ceci est une demande de paiement non vérifiée.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Payer à :</translation>
</message>
@@ -2154,8 +2156,8 @@ Adresse : %4
<translation>&amp;Signer un message</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Vous pouvez signer des messages avec vos adresses pour prouver que vous les détenez. Faites attention de ne pas signer de vague car des attaques d'hameçonnage peuvent essayer d'usurper votre identité par votre signature. Ne signez que des déclarations entièrement détaillées et avec lesquelles vous serez d'accord.</translation>
+ <source>You can sign messages/agreements with your addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
+ <translation>Vous pouvez signer des messages/accords avec vos adresses pour prouver que vous pouvez recevoir des bitcoins à ces dernières. Faites attention de ne rien signer de vague ou au hasard, car des attaques d'hameçonnage pourraient essayer de vous faire signer avec votre identité afin de l'usurper. Ne signez que des déclarations entièrement détaillées et avec lesquelles vous êtes d'accord.</translation>
</message>
<message>
<source>The Bitcoin address to sign the message with</source>
@@ -2210,8 +2212,8 @@ Adresse : %4
<translation>&amp;Vérifier un message</translation>
</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>Saisir ci-dessous l'adresse de signature, le message (assurez-vous d'avoir copié exactement les retours à la ligne, les espaces, tabulations etc.) et la signature pour vérifier le message. Faire attention à ne pas déduire davantage de la signature que ce qui est contenu dans le message signé lui-même pour éviter d'être trompé par une attaque d'homme du milieu.</translation>
+ <source>Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction!</source>
+ <translation>Saisissez ci-dessous l'adresse de destinataire, le message (assurez-vous de copier exactement les retours à la ligne, les espaces, les tabulations, etc.) et la signature pour vérifier le message. Faites attention à ne pas déduire davantage de la signature que ce qui est contenu dans le message signé même, pour éviter d'être trompé par une attaque d'homme du milieu. Notez que ceci ne fait que prouver que le signataire reçoit l'adresse et ne peut pas prouver la provenance d'une transaction.</translation>
</message>
<message>
<source>The Bitcoin address the message was signed with</source>
@@ -2477,10 +2479,6 @@ Adresse : %4
<translation>Type</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adresse</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Immature (%1 confirmations, sera disponible après %2)</translation>
</message>
@@ -2509,6 +2507,10 @@ Adresse : %4
<translation>Hors ligne</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Étiquette</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Non confirmé</translation>
</message>
@@ -2565,8 +2567,8 @@ Adresse : %4
<translation>Une adresse juste-regarder est-elle impliquée dans cette transaction.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>L’adresse de destination de la transaction.</translation>
+ <source>User-defined intent/purpose of the transaction.</source>
+ <translation>Intention/but de la transaction défini par l'utilisateur.</translation>
</message>
<message>
<source>Amount removed from or added to balance.</source>
@@ -2811,6 +2813,10 @@ Adresse : %4
<translation>Se lier à l'adresse donnée et toujours l'écouter. Utilisez la notation [host]:port pour l'IPv6</translation>
</message>
<message>
+ <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default: %u)</source>
+ <translation>Limiter continuellement les transactions gratuites à &lt;n&gt;*1000 octets par minute (par défaut : %u)</translation>
+ </message>
+ <message>
<source>Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup</source>
<translation>Supprimer toutes les transactions du portefeuille et ne récupérer que ces parties de la chaîne de bloc avec -rescan au démarrage</translation>
</message>
@@ -2831,6 +2837,14 @@ Adresse : %4
<translation>Dans ce mode -genproclimit contrôle combien de blocs sont générés immédiatement.</translation>
</message>
<message>
+ <source>Maximum total fees to use in a single wallet transaction; setting this too low may abort large transactions (default: %s)</source>
+ <translation>Total maximal des frais à utiliser en une seule transaction de portefeuille. Le définir trop bas pourrait interrompre les grosses transactions (par défaut : %s)</translation>
+ </message>
+ <message>
+ <source>Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, &gt;%u = target size in MiB to use for block files)</source>
+ <translation>Réduire les exigences de stockage en élaguant (supprimant) les anciens blocs. Ce mode désactive la prise en charge de portefeuilles et n'est pas compatible avec -txindex. Avertissement : configurer ce paramètre à sa valeur antérieure retéléchargera complètement la chaîne de blocs (par défaut : 0 = désactiver l'élagage des blocs, &gt;%u = taille cible en Mo à utiliser pour les fichiers de blocs).</translation>
+ </message>
+ <message>
<source>Set the number of script verification threads (%u to %d, 0 = auto, &lt;0 = leave that many cores free, default: %d)</source>
<translation>Définir le nombre d'exétrons de vérification des scripts (%u à %d, 0 = auto, &lt; 0 = laisser ce nombre de cœurs inutilisés, par défaut : %d)</translation>
</message>
@@ -2899,10 +2913,6 @@ Adresse : %4
<translation>Options de test/de débogage :</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Découvrir sa propre adresse IP (par défaut : 1 lors de l'écoute et si aucun -externalip)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>Ne pas charger le portefeuille et désactiver les appels RPC</translation>
</message>
@@ -2963,8 +2973,12 @@ Adresse : %4
<translation>Seulement se connecter aux nœuds du réseau &lt;net&gt; (IPv4, IPv6 ou oignon)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Reconstruire l'index de la chaîne de blocs à partir des fichiers blk000??.dat courants</translation>
+ <source>Prune cannot be configured with a negative value.</source>
+ <translation>L'élagage ne peut pas être configuré avec une valeur négative.</translation>
+ </message>
+ <message>
+ <source>Prune mode is incompatible with -txindex.</source>
+ <translation>Le mode élagage n'est pas compatible avec -txindex.</translation>
</message>
<message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
@@ -3003,6 +3017,10 @@ Adresse : %4
<translation>Options du portefeuille :</translation>
</message>
<message>
+ <source>Warning: This version is obsolete; upgrade required!</source>
+ <translation>Avertissement : cette version est obsolète. Une mise à niveau est exigée !</translation>
+ </message>
+ <message>
<source>You need to rebuild the database using -reindex to change -txindex</source>
<translation>Vous devez reconstruire la base de données en utilisant -reindex afin de modifier -txindex</translation>
</message>
@@ -3031,14 +3049,14 @@ Adresse : %4
<translation>Impossible d’obtenir un verrou sur le répertoire de données %s. Bitcoin Core fonctionne probablement déjà.</translation>
</message>
<message>
- <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</source>
- <translation>Limiter continuellement les transactions gratuites à &lt;n&gt;*1000 octets par minute (par défaut : %u)</translation>
- </message>
- <message>
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
<translation>Créer de nouveaux fichiers avec les permissions système par défaut, au lieu de umask 077 (effectif seulement avec la fonction du portefeuille désactivée)</translation>
</message>
<message>
+ <source>Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)</source>
+ <translation>Découvrir ses propres adresses (par défaut : 1 en écoute et sans externalip ou -proxy)</translation>
+ </message>
+ <message>
<source>Error: Listening for incoming connections failed (listen returned error %s)</source>
<translation>Erreur : l'écoute des connexions entrantes a échoué (l'écoute a retourné l'erreur %s)</translation>
</message>
@@ -3071,14 +3089,18 @@ Adresse : %4
<translation>Quantité maximale de données dans les transactions du porteur de données que nous relayons et minons (par défaut : %u)</translation>
</message>
<message>
- <source>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</source>
- <translation>Total maximal des frais à utiliser en une seule transaction de portefeuille. Le définir trop bas pourrait empêcher les grosses transactions (par défaut : %s)</translation>
+ <source>Prune configured below the minimum of %d MB. Please use a higher number.</source>
+ <translation>L'élagage est configuré au-dessous du minimum de %d Mo. Veuillez utiliser un nombre plus élevé.</translation>
</message>
<message>
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
<translation>Demander les adresses des pairs par recherche DNS si l'on manque d'adresses (par défaut : 1 sauf si -connect)</translation>
</message>
<message>
+ <source>Randomize credentials for every proxy connection. This enables Tor stream isolation (default: %u)</source>
+ <translation>Aléer les authentifiants pour chaque connexion mandataire. Ceci active l'isolement de flux de Tor (par défaut : %u) </translation>
+ </message>
+ <message>
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
<translation>Définir la taille maximale en octets des transactions prioritaires/à frais modiques (par défaut : %d)</translation>
</message>
@@ -3087,6 +3109,10 @@ Adresse : %4
<translation>Définir le nombre de fils de génération de pièces, si elle est activée (-1 = tous les cœurs, par défaut : %d)</translation>
</message>
<message>
+ <source>The transaction amount is too small to send after the fee has been deducted</source>
+ <translation>Le montant de la transaction est trop bas pour être envoyé une fois que les frais ont été déduits</translation>
+ </message>
+ <message>
<source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit &lt;https://www.openssl.org/&gt; and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source>
<translation>Ce produit comprend des logiciels développés par le projet OpenSSL pour être utilisés dans la boîte à outils OpenSSL &lt;https://www.openssl.org/&gt; et un logiciel cryptographique écrit par Eric Young, ainsi qu'un logiciel UPnP écrit par Thomas Bernard.</translation>
</message>
@@ -3127,14 +3153,38 @@ par exemple : alertnotify=echo %%s | mail -s "Alerte Bitcoin" admin@foo.com
<translation>Les pairs de la liste blanche ne peuvent pas être bannis DoS et leurs transactions sont toujours relayées, même si elles sont déjà dans le mempool, utile p. ex. pour une passerelle</translation>
</message>
<message>
+ <source>You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain</source>
+ <translation>Vous devez reconstruire la base de données en utilisant -reindex afin de revenir au mode sans élagage. Ceci retéléchargera complètement la chaîne de blocs.</translation>
+ </message>
+ <message>
+ <source>(default: %u)</source>
+ <translation>(par défaut : %u)</translation>
+ </message>
+ <message>
<source>Accept public REST requests (default: %u)</source>
<translation>Accepter les demandes REST publiques (par défaut : %u)</translation>
</message>
<message>
+ <source>Activating best chain...</source>
+ <translation>Activation de la meilleure chaîne...</translation>
+ </message>
+ <message>
+ <source>Allow self signed root certificates (default: 0)</source>
+ <translation>Permettre les certificats racine autosignés (par défaut : 0)</translation>
+ </message>
+ <message>
+ <source>Can't run with a wallet in prune mode.</source>
+ <translation>L'exécution est impossible quand le portefeuille est en mode élagage.</translation>
+ </message>
+ <message>
<source>Cannot resolve -whitebind address: '%s'</source>
<translation>Impossible de résoudre l'adresse -whitebind : « %s »</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Choisir un répertoire de données au démarrage (par défaut : 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Se connecter par un mandataire SOCKS5</translation>
</message>
@@ -3231,10 +3281,22 @@ par exemple : alertnotify=echo %%s | mail -s "Alerte Bitcoin" admin@foo.com
<translation>Envoyer si possible les transactions comme étant sans frais (par défaut : %u)</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Définir les certificats racine SSL pour les demandes de paiement (par défaut : -système-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Définir la langue, par exemple « fr_CA » (par défaut : la langue du système)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Montrer toutes les options de débogage (utilisation : --help --help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Afficher la page de garde au démarrage (par défaut : 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Réduire le fichier debug.log lors du démarrage du client (par défaut : 1 lorsque -debug n'est pas présent)</translation>
</message>
@@ -3243,6 +3305,14 @@ par exemple : alertnotify=echo %%s | mail -s "Alerte Bitcoin" admin@foo.com
<translation>La signature de la transaction a échoué</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Démarrer minimisé</translation>
+ </message>
+ <message>
+ <source>The transaction amount is too small to pay the fee</source>
+ <translation>Le montant de la transaction est trop bas pour que les frais soient payés</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Ceci est un logiciel expérimental.</translation>
</message>
@@ -3263,6 +3333,10 @@ par exemple : alertnotify=echo %%s | mail -s "Alerte Bitcoin" admin@foo.com
<translation>Transaction trop volumineuse</translation>
</message>
<message>
+ <source>UI Options:</source>
+ <translation>Options de l'IU :</translation>
+ </message>
+ <message>
<source>Unable to bind to %s on this computer (bind returned error %s)</source>
<translation>Impossible de se lier à %s sur cet ordinateur (bind a retourné l'erreur %s)</translation>
</message>
@@ -3283,10 +3357,6 @@ par exemple : alertnotify=echo %%s | mail -s "Alerte Bitcoin" admin@foo.com
<translation>Avertissement</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Avertissement : cette version est obsolète, une mise à niveau est nécessaire !</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>Avertissement : l'argument -benchmark non pris en charge a été ignoré, utiliser -debug=bench.</translation>
</message>
@@ -3431,6 +3501,10 @@ par exemple : alertnotify=echo %%s | mail -s "Alerte Bitcoin" admin@foo.com
<translation>Garder au plus &lt;n&gt; connexions avec les pairs (par défaut : %u)</translation>
</message>
<message>
+ <source>Make the wallet broadcast transactions</source>
+ <translation>Obliger le portefeuille à diffuser les transactions</translation>
+ </message>
+ <message>
<source>Maximum per-connection receive buffer, &lt;n&gt;*1000 bytes (default: %u)</source>
<translation>Tampon maximal de réception par connexion, &lt;n&gt;*1000 octets (par défaut : %u)</translation>
</message>
diff --git a/src/qt/locale/bitcoin_fr_CA.ts b/src/qt/locale/bitcoin_fr_CA.ts
index f314f3d1c1..186985d493 100644
--- a/src/qt/locale/bitcoin_fr_CA.ts
+++ b/src/qt/locale/bitcoin_fr_CA.ts
@@ -169,8 +169,8 @@
<context>
<name>TransactionTableModel</name>
<message>
- <source>Address</source>
- <translation>Addresse</translation>
+ <source>Label</source>
+ <translation>Record</translation>
</message>
</context>
<context>
diff --git a/src/qt/locale/bitcoin_gl.ts b/src/qt/locale/bitcoin_gl.ts
index ac2d7087a4..93ece390d1 100644
--- a/src/qt/locale/bitcoin_gl.ts
+++ b/src/qt/locale/bitcoin_gl.ts
@@ -148,10 +148,6 @@
<translation>Cambiar contrasinal</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Introduce o vello e novo contrasinais no moedeiro.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Confirmar encriptación de moedeiro</translation>
</message>
@@ -176,10 +172,6 @@
<translation>Moedeiro encriptado</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin se pechará agora para rematar o proceso de encriptación. Lembra que encriptar o teu moedeiro non protexe totalmente os teus bitcoins de ser robados por malware que infecte o teu ordenador.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Encriptación de moedeiro fallida</translation>
</message>
@@ -279,10 +271,6 @@
<translation>Enviar moedas a unha dirección Bitcoin</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Modificar opcións de configuración para Bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Facer copia de seguridade do moedeiro noutra localización</translation>
</message>
@@ -378,26 +366,10 @@
<source>Open a bitcoin: URI or payment request</source>
<translation>Abrir un bitcoin: URI ou solicitude de pago</translation>
</message>
- <message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n conexión activa coa rede Bitcoin</numerusform><numerusform>%n conexións activas coa rede Bitcoin</numerusform></translation>
- </message>
<message>
<source>No block source available...</source>
<translation>Non hai orixe de bloques dispoñible...</translation>
</message>
- <message numerus="yes">
- <source>%n hour(s)</source>
- <translation><numerusform>%n hora</numerusform><numerusform>%n horas</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n day(s)</source>
- <translation><numerusform>%n día</numerusform><numerusform>%n días</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>%n semana</numerusform><numerusform>%n semanas</numerusform></translation>
- </message>
<message>
<source>%1 behind</source>
<translation>%1 detrás</translation>
@@ -439,18 +411,6 @@
<translation>Transacción entrante</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Data: %1
-Cantidade: %2
-Tipo: %3
-Dirección: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>O moedeiro está &lt;b&gt;encriptado&lt;/b&gt; e actualmente &lt;b&gt;desbloqueado&lt;/b&gt;</translation>
</message>
@@ -733,26 +693,6 @@ Dirección: %4
<source>command-line options</source>
<translation>opcións da liña de comandos</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>opcións de UI</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Fixar idioma, por exemplo "de_DE" (por defecto: locale del sistema)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Comezar minimizado</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Amosar pantalla splash no arranque (por defecto: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Escolle directorio de datos ao arrancar (por defecto: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -811,14 +751,6 @@ Dirección: %4
<translation>&amp;Principal</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Comezar Bitcoin automáticamente despois de loguearse no sistema.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Comezar Bitcoin ao facer login no sistema</translation>
- </message>
- <message>
<source>Reset all client options to default.</source>
<translation>Restaurar todas as opcións de cliente ás por defecto</translation>
</message>
@@ -863,10 +795,6 @@ Dirección: %4
<translation>&amp;Minimizar á bandexa en lugar de á barra de tarefas.</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>Minimizar en lugar de saír da aplicación cando se pecha a xanela. Cando se habilita esta opción, a aplicación so se pechará tras seleccionar Saír no menú.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimizar ao pechar</translation>
</message>
@@ -879,10 +807,6 @@ Dirección: %4
<translation>&amp;Linguaxe de interface de usuario:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>A linguaxe de interface de usuario pode fixarse aquí. Esta configuración terá efecto tras reiniciar Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Unidade na que amosar as cantidades:</translation>
</message>
@@ -1109,18 +1033,10 @@ Dirección: %4
<translation>Arquivo de log de depuración</translation>
</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>Abrir o arquivo de log de depuración de Bitcoin dende o directorio actual de datos. Esto pode levar uns cantos segundos para grandes arquivos de log.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Limpar consola</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Benvido á consola RPC de Bitcoin</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Emprega as flechas arriba e abaixo para navegar polo historial, e &lt;b&gt;Ctrl-L&lt;/b&gt; para limpar a pantalla.</translation>
</message>
@@ -1169,7 +1085,7 @@ Dirección: %4
</message>
<message>
<source>Clear all fields of the form.</source>
- <translation>Limpar todos os campos do formulario</translation>
+ <translation>Limpar tódolos campos do formulario</translation>
</message>
<message>
<source>Clear</source>
@@ -1361,10 +1277,6 @@ Dirección: %4
<translation>Copiar cambio</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>A dirección de recepción non é válida, por favor compróbea.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>A cantidade a pagar debe ser maior que 0.</translation>
</message>
@@ -1377,10 +1289,6 @@ Dirección: %4
<translation>O total sobrepasa o teu balance cando se inclúe a tarifa de transacción %1.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Atopouse dirección duplicada, so se pode enviar a cada dirección unha vez por operación.</translation>
- </message>
- <message>
<source>Warning: Invalid Bitcoin address</source>
<translation>Atención: Enderezo Bitcoin non válido</translation>
</message>
@@ -1444,18 +1352,10 @@ Dirección: %4
<translation>Eliminar esta entrada</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Esta é unha solicitude de pago verificada</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>Introduce unha etiqueta para esta dirección para engadila á listaxe de direccións empregadas</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Esta é unha solicitude de pago non verificada</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Pagar A:</translation>
</message>
@@ -1478,10 +1378,6 @@ Dirección: %4
<translation>&amp;Asinar Mensaxe</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Podes asinar mensaxes coas túas direccións para probar que ti as posees. Ten conta de non asinar nada vago, xa que hai ataques de phishing que tentarán que asines coa túa identidade por riba deles. Asina únicamente declaracións totalmente detalladas coas que esteas de acordo.</translation>
- </message>
- <message>
<source>Choose previously used address</source>
<translation>Escoller dirección previamente empregada</translation>
</message>
@@ -1530,10 +1426,6 @@ Dirección: %4
<translation>&amp;Verificar Mensaxe</translation>
</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>Introduce a dirección coa que asinar, a mensaxe (asegúrate de copiar exactamente os saltos de liña, espacios, tabulacións, etc.) e a sinatura debaixo para verificar a mensaxe. Ten coidado de non ler máis na sinatura do que hai no mensaxe asinado mesmo, a fin de evitar ser cazado nun ataque de home no medio.</translation>
- </message>
- <message>
<source>Verify the message to ensure it was signed with the specified Bitcoin address</source>
<translation>Verificar a mensaxe para asegurar que foi asinada coa dirección Bitcoin especificada</translation>
</message>
@@ -1765,14 +1657,6 @@ Dirección: %4
<translation>Tipo</translation>
</message>
<message>
- <source>Address</source>
- <translation>Dirección</translation>
- </message>
- <message numerus="yes">
- <source>Open for %n more block(s)</source>
- <translation><numerusform>Abrir para %n bloque máis</numerusform><numerusform>Abrir para %n bloques máis</numerusform></translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Aberto ata %1</translation>
</message>
@@ -1789,6 +1673,10 @@ Dirección: %4
<translation>Xerado pero non aceptado</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Etiqueta</translation>
+ </message>
+ <message>
<source>Received with</source>
<translation>Recibido con</translation>
</message>
@@ -1825,10 +1713,6 @@ Dirección: %4
<translation>Tipo de transacción.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Dirección de destino da transacción.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Cantidade borrada ou engadida no balance.</translation>
</message>
@@ -2111,10 +1995,6 @@ Dirección: %4
<translation>Detectada base de datos de bloques corrupta.</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Descobrir dirección IP propia (por defecto: 1 se á escoita e non -externalip)</translation>
- </message>
- <message>
<source>Do you want to rebuild the block database now?</source>
<translation>Queres reconstruír a base de datos de bloques agora?</translation>
</message>
@@ -2155,10 +2035,6 @@ Dirección: %4
<translation>Non hai suficientes descritores de arquivo dispoñibles.</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Reconstruír índice de cadea de bloque dende os ficheiros actuais blk000??.dat</translation>
- </message>
- <message>
<source>Specify wallet file (within data directory)</source>
<translation>Especificar arquivo do moedeiro (dentro do directorio de datos)</translation>
</message>
@@ -2187,6 +2063,10 @@ Dirección: %4
<translation>Executar comando cando se recibe unha alerta relevante ou vemos un fork realmente longo (%s no cmd é substituído pola mensaxe)</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Escolle directorio de datos ao arrancar (por defecto: 0)</translation>
+ </message>
+ <message>
<source>Information</source>
<translation>Información</translation>
</message>
@@ -2203,6 +2083,14 @@ Dirección: %4
<translation>Enviar traza/información de depuración á consola en lugar de ao arquivo debug.log</translation>
</message>
<message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Fixar idioma, por exemplo "de_DE" (por defecto: locale del sistema)</translation>
+ </message>
+ <message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Amosar pantalla splash no arranque (por defecto: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Recortar o arquivo debug.log ao arrancar o cliente (por defecto: 1 cando no-debug)</translation>
</message>
@@ -2211,6 +2099,10 @@ Dirección: %4
<translation>Fallou a sinatura da transacción</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Comezar minimizado</translation>
+ </message>
+ <message>
<source>Transaction amount too small</source>
<translation>A cantidade da transacción é demasiado pequena</translation>
</message>
@@ -2235,10 +2127,6 @@ Dirección: %4
<translation>Precaución</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Precaución: Esta versión é obsoleta, precísase unha actualización!</translation>
- </message>
- <message>
<source>wallet.dat corrupt, salvage failed</source>
<translation>wallet.dat corrupto, fallou o gardado</translation>
</message>
diff --git a/src/qt/locale/bitcoin_he.ts b/src/qt/locale/bitcoin_he.ts
index 45a664d6e0..0a4b2f7847 100644
--- a/src/qt/locale/bitcoin_he.ts
+++ b/src/qt/locale/bitcoin_he.ts
@@ -106,7 +106,7 @@
</message>
<message>
<source>(no label)</source>
- <translation>(ללא תווית)</translation>
+ <translation>(אין תווית)</translation>
</message>
</context>
<context>
@@ -152,10 +152,6 @@
<translation>שינוי מילת צופן</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>נא להכניס את מילות הצופן הישנה והחדשה לארנק.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>אישור הצפנת הארנק</translation>
</message>
@@ -184,10 +180,6 @@
<translation>נא להזין את מילת הצופן החדשה לארנק.&lt;br/&gt;כדאי להשתמש במילת צופן המורכבת מ&lt;b&gt;עשרה תווים אקראיים ומעלה&lt;/b&gt;, או &lt;b&gt;שמונה מילים ומעלה&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>ביטקוין ייסגר כעת כדי להשלים את תהליך ההצפנה. עליך לזכור שהצפנת הארנק שלך אינה מגנה באופן מלא על הביטקוינים שלך מתכניות זדוניות המושתלות על המחשב.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>הצפנת הארנק נכשלה</translation>
</message>
@@ -307,10 +299,6 @@
<translation>שליחת מטבעות לכתובת ביטקוין</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>שינוי התצורה של ביטקוין</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>גיבוי הארנק למיקום אחר</translation>
</message>
@@ -422,18 +410,6 @@
<source>No block source available...</source>
<translation>אין מקור מקטעים זמין…</translation>
</message>
- <message numerus="yes">
- <source>%n hour(s)</source>
- <translation><numerusform>%n שעה</numerusform><numerusform>%n שעות</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n day(s)</source>
- <translation><numerusform>%n יום</numerusform><numerusform>%n ימים</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>%n שבוע</numerusform><numerusform>%n שבועות</numerusform></translation>
- </message>
<message>
<source>%1 and %2</source>
<translation>%1 ו%2</translation>
@@ -475,17 +451,6 @@
<translation>העברת קבלה</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>תאריך: %1
-כמות: %2
-סוג: %3
-כתובת: %4</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>הארנק &lt;b&gt;מוצפן&lt;/b&gt; ו&lt;b&gt;פתוח&lt;/b&gt; כרגע</translation>
</message>
@@ -513,7 +478,7 @@ Address: %4
</message>
<message>
<source>Amount:</source>
- <translation>כמות:</translation>
+ <translation>סכום:</translation>
</message>
<message>
<source>Priority:</source>
@@ -521,7 +486,7 @@ Address: %4
</message>
<message>
<source>Fee:</source>
- <translation>תשלום:</translation>
+ <translation>עמלה:</translation>
</message>
<message>
<source>Dust:</source>
@@ -533,7 +498,7 @@ Address: %4
</message>
<message>
<source>Change:</source>
- <translation>שינוי:</translation>
+ <translation>עודף:</translation>
</message>
<message>
<source>(un)select all</source>
@@ -597,7 +562,7 @@ Address: %4
</message>
<message>
<source>Copy fee</source>
- <translation>העתקת מחיר</translation>
+ <translation>העתקת עמלה</translation>
</message>
<message>
<source>Copy after fee</source>
@@ -672,10 +637,6 @@ Address: %4
<translation>לא</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>תווית זו מאדימה אם גודל ההעברה עולה על 1000 בתים.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>זאת אומרת שנחוצה עמלה של לא פחות מ־%1 לכל קילו בית.</translation>
</message>
@@ -688,10 +649,6 @@ Address: %4
<translation>העברות עם עדיפות גבוהה, יותר סיכוי שיכנסו לתוך המקטע.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>תווית זו מאדימה אם העדיפות היא פחות מ„בינוני“</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(אין תווית)</translation>
</message>
@@ -812,30 +769,6 @@ Address: %4
<source>command-line options</source>
<translation>אפשרויות שורת פקודה</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>אפשרויות מנשק</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>הגדרת שפה, למשל „he_il“ (בררת מחדל: שפת המערכת)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>התחלה במצב ממוזער</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>הגדרות אישורי בסיס של SSL לבקשות תשלום (בררת המחדל: -מערכת-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>הצגת מסך פתיחה בעת הפעלה (בררת מחדל: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>בחירת תיקיית נתונים עם ההפעלה (בררת מחדל: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -910,14 +843,6 @@ Address: %4
<translation>&amp;ראשי</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>הפעלת ביטקוין אוטומטית לאחר כניסה למערכת.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>ה&amp;פעלת ביטקוין בעת הכניסה למערכת</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>גודל מ&amp;טמון מסד הנתונים</translation>
</message>
@@ -1022,10 +947,6 @@ Address: %4
<translation>מ&amp;זעור למגש במקום לשורת המשימות</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>מזעור התכנית במקום לצאת ממנה כשהחלון נסגר. כשאפשרות זו פעילה, התכנית תיסגר רק לאחר בחירת יציאה מהתפריט.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>מ&amp;זעור עם סגירה</translation>
</message>
@@ -1038,10 +959,6 @@ Address: %4
<translation>&amp;שפת מנשק המשתמש:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>להלן ניתן לקבוע את שפת מנשק המשתמש. הגדרה זו תיכנס לתוקף לאחר הפעלה מחדש של ביטקוין.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>י&amp;חידת מידה להצגת כמויות:</translation>
</message>
@@ -1078,10 +995,6 @@ Address: %4
<translation>נדרשת הפעלה מחדש של הלקוח כדי להפעיל את השינויים.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>הלקוח יכבה, האם להמשיך?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>שינוי זה ידרוש הפעלה מחדש של תכנית הלקוח.</translation>
</message>
@@ -1184,10 +1097,6 @@ Address: %4
<translation>רשת בקשת התשלום אינה תואמת לרשת הלקוח.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>בקשת התשלום פגה.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>בקשת התשלום לא החלה.</translation>
</message>
@@ -1255,10 +1164,6 @@ Address: %4
<translation>סוכן משתמש</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>כתובת/שם מארח</translation>
- </message>
- <message>
<source>Ping Time</source>
<translation>זמן המענה</translation>
</message>
@@ -1290,14 +1195,6 @@ Address: %4
<translation>%1 שניות</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>רשת</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>לא ידוע</translation>
- </message>
- <message>
<source>None</source>
<translation>ללא</translation>
</message>
@@ -1496,18 +1393,10 @@ Address: %4
<translation>קובץ יומן ניפוי</translation>
</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>פתיחת קובץ יומן הניפוי מתיקיית הנתונים הנוכחית. פעולה זו עשויה להימשך מספר שניות עבור קובצי יומן גדולים.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>ניקוי מסוף הבקרה</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>ברוכים הבאים למסוף ה־RPC של ביטקוין.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>יש להשתמש בחצים למעלה ולמטה כדי לנווט בהיסטוריה, וב־&lt;b&gt;Ctrl-L&lt;/b&gt; כדי לנקות את המסך.</translation>
</message>
@@ -1596,7 +1485,7 @@ Address: %4
</message>
<message>
<source>Clear all fields of the form.</source>
- <translation>ניקוי כל השדות של הטופס.</translation>
+ <translation>ניקוי של כל השדות בטופס.</translation>
</message>
<message>
<source>Clear</source>
@@ -1801,7 +1690,7 @@ Address: %4
</message>
<message>
<source>Clear &amp;All</source>
- <translation>ניקוי ה&amp;כול</translation>
+ <translation>&amp;ניקוי הכול</translation>
</message>
<message>
<source>Balance:</source>
@@ -1829,7 +1718,7 @@ Address: %4
</message>
<message>
<source>Copy amount</source>
- <translation>העתקת סכום</translation>
+ <translation>העתקת כמות</translation>
</message>
<message>
<source>Copy fee</source>
@@ -1860,10 +1749,6 @@ Address: %4
<translation>או</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>כתובת המוטב אינה תקינה, נא לבדוק שוב.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>הכמות לתשלום חייבת להיות גדולה מ־0.</translation>
</message>
@@ -1876,10 +1761,6 @@ Address: %4
<translation>הכמות הכוללת, ובכללה עמלת העברה בסך %1, עולה על המאזן שלך.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>כתובת כפולה נמצאה, ניתן לשלוח לכל כתובת רק פעם אחת בכל פעולת שליחה.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>יצירת ההעברה נכשלה!</translation>
</message>
@@ -1963,10 +1844,6 @@ Address: %4
<translation>הודעה:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>זוהי בקשה מאומתת לתשלום.</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>יש להזין תווית עבור כתובת זו כדי להוסיף אותה לרשימת הכתובות בשימוש</translation>
</message>
@@ -1975,10 +1852,6 @@ Address: %4
<translation>הודעה שצורפה לביטקוין: כתובת שתאוחסן בהעברה לצורך מעקב מצדך. לתשומת לבך: הודעה זו לא תישלח ברשת הביטקוין.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>זוהי בקשת תשלום בלתי־מאומתת.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>תשלום לטובת:</translation>
</message>
@@ -2009,10 +1882,6 @@ Address: %4
<translation>חתימה על הו&amp;דעה</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>ניתן לחתום על הודעות עם הכתובות שלך כדי להוכיח שהן בבעלותך. מומלץ להיזהר לא לחתום על משהו מפוקפק, שכן התקפות דיוג עשויות לגרום לך בעורמה למסור את זהותך. רצוי לחתום רק על הצהרות מפורטות לחלוטין שהסכמת עמן.</translation>
- </message>
- <message>
<source>The Bitcoin address to sign the message with</source>
<translation>כתובת הביטקוין אתה לחתום אתה את ההודעה</translation>
</message>
@@ -2065,10 +1934,6 @@ Address: %4
<translation>&amp;אימות הודעה</translation>
</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>הכנס למטה את הכתובת החותמת, ההודעה (ודא שאתה מעתיק מעברי שורה, רווחים, טאבים וכו' באופן מדויק) והחתימה כדי לאמת את ההודעה. היזהר לא לפרש את החתימה כיותר ממה שמופיע בהודעה החתומה בעצמה, כדי להימנע מליפול קורבן למתקפת איש-באמצע.</translation>
- </message>
- <message>
<source>The Bitcoin address the message was signed with</source>
<translation>כתובת הביטקוין שאתה נחתמה ההודעה</translation>
</message>
@@ -2293,10 +2158,6 @@ Address: %4
<source>, has not been successfully broadcast yet</source>
<translation>, טרם שודר בהצלחה</translation>
</message>
- <message numerus="yes">
- <source>Open for %n more block(s)</source>
- <translation><numerusform>פתיחה למשך מקטע %n נוסף</numerusform><numerusform>פתיחה למשך %n מקטעים נוספים</numerusform></translation>
- </message>
<message>
<source>unknown</source>
<translation>לא ידוע</translation>
@@ -2324,17 +2185,9 @@ Address: %4
<translation>סוג</translation>
</message>
<message>
- <source>Address</source>
- <translation>כתובת</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>לא בשל (%1 אישורים, יהיו זמינים לאחר %2)</translation>
</message>
- <message numerus="yes">
- <source>Open for %n more block(s)</source>
- <translation><numerusform>פתח למשך בלוק %n יותר</numerusform><numerusform>פתיחה למשך %n מקטעים נוספים</numerusform></translation>
- </message>
<message>
<source>Open until %1</source>
<translation>פתוחה עד %1</translation>
@@ -2356,6 +2209,10 @@ Address: %4
<translation>מנותק</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>תווית</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>ללא אישור</translation>
</message>
@@ -2412,10 +2269,6 @@ Address: %4
<translation>האם כתובות לצפייה בלבד מעורבות בהעברה זאת או שלא.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>כתובת היעד של ההעברה.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>הכמות שהתווספה או הוסרה מהיתרה.</translation>
</message>
@@ -2730,10 +2583,6 @@ Address: %4
<translation>אפשרויות ניפוי/בדיקה:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>לגלות את כתובת ה־IP העצמית (בררת מחדל: 1 בעת האזנה וללא ‎-externalip)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>לא לטעון את הארנק ולנטרל קריאות RPC</translation>
</message>
@@ -2790,10 +2639,6 @@ Address: %4
<translation>תמיד להתחבר למפרקים ברשת &lt;net&gt;‏ (ipv4,‏ ipv6 או onion)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>בנייה מחדש של מפתח שרשרת המקטעים מקובצי ה־blk000??.dat הנוכחיים.</translation>
- </message>
- <message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation>הגדרת גודל מטמון מסדי הנתונים במגה בתים (%d עד %d, בררת מחדל: %d)</translation>
</message>
@@ -2850,6 +2695,10 @@ Address: %4
<translation>לא ניתן לפתור את הכתובת ‎-whitebind:‏ '%s'</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>בחירת תיקיית נתונים עם ההפעלה (בררת מחדל: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>התחברות דרך מתווך SOCKS5</translation>
</message>
@@ -2922,10 +2771,22 @@ Address: %4
<translation>שלח מידע דיבאג ועקבה לקונסולה במקום לקובץ debug.log</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>הגדרות אישורי בסיס של SSL לבקשות תשלום (בררת המחדל: -מערכת-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>הגדרת שפה, למשל „he_il“ (בררת מחדל: שפת המערכת)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>הצגת כל אפשרויות הניפוי (שימוש: ‎--help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>הצגת מסך פתיחה בעת הפעלה (בררת מחדל: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>כיווץ הקובץ debug.log בהפעלת הלקוח (בררת מחדל: 1 ללא ‎-debug)</translation>
</message>
@@ -2934,6 +2795,10 @@ Address: %4
<translation>החתימה על ההעברה נכשלה</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>התחלה במצב ממוזער</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>זוהי תכנית נסיונית.</translation>
</message>
@@ -2970,10 +2835,6 @@ Address: %4
<translation>אזהרה</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>אזהרה: הגרסה הזאת מיושנת, יש צורך בשדרוג!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>אזהרה: הארגומנט שאינו נתמך עוד ‎-benchmark לא הופעל, נא להשתמש ב־‎-debug=bench.</translation>
</message>
diff --git a/src/qt/locale/bitcoin_hi_IN.ts b/src/qt/locale/bitcoin_hi_IN.ts
index 208d1e0369..5fe8635dc0 100644
--- a/src/qt/locale/bitcoin_hi_IN.ts
+++ b/src/qt/locale/bitcoin_hi_IN.ts
@@ -84,10 +84,6 @@
<translation>पहचान शब्द/अक्षर बदलिये !</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>कृपा करके पुराना एवं नया पहचान शब्द/अक्षर वॉलेट में डालिए !</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>वॉलेट एनक्रिपशन को प्रमाणित कीजिए !</translation>
</message>
@@ -187,22 +183,6 @@
<source>Tabs toolbar</source>
<translation>टैबस टूलबार</translation>
</message>
- <message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n सक्रिया संपर्क बीटकोइन नेटवर्क से</numerusform><numerusform>%n सक्रिया संपर्क बीटकोइन नेटवर्क से</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n hour(s)</source>
- <translation><numerusform>%n घंटा</numerusform><numerusform>%n घंटे</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n day(s)</source>
- <translation><numerusform>%n दिन</numerusform><numerusform>%n दिनो</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>%n हफ़्ता</numerusform><numerusform>%n हफ्ते</numerusform></translation>
- </message>
<message>
<source>%1 behind</source>
<translation>%1 पीछे</translation>
@@ -232,17 +212,6 @@
<translation>प्राप्त हुई ट्रांजक्शन</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>तारीख: %1\n
-राशि: %2\n
-टाइप: %3\n
-पता:%4\n</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>वॉलेट एन्क्रिप्टेड है तथा अभी लॉक्ड नहीं है</translation>
</message>
@@ -627,10 +596,6 @@ Address: %4
<translation>टाइप</translation>
</message>
<message>
- <source>Address</source>
- <translation>पता</translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>खुला है जबतक %1</translation>
</message>
@@ -647,8 +612,12 @@ Address: %4
<translation>जेनरेट किया गया किंतु स्वीकारा नही गया !</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>लेबल</translation>
+ </message>
+ <message>
<source>Received with</source>
- <translation>स्वीकारा गया</translation>
+ <translation>स्वीकार करना</translation>
</message>
<message>
<source>Received from</source>
@@ -683,10 +652,6 @@ Address: %4
<translation>ट्रांसेक्शन का प्रकार|</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>ट्रांसेक्शन की मंजिल का पता|</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>अमाउंट बैलेंस से निकला या जमा किया गया |</translation>
</message>
diff --git a/src/qt/locale/bitcoin_hr.ts b/src/qt/locale/bitcoin_hr.ts
index c4dc0ded97..62bfe6a11f 100644
--- a/src/qt/locale/bitcoin_hr.ts
+++ b/src/qt/locale/bitcoin_hr.ts
@@ -83,7 +83,7 @@
</message>
<message>
<source>Comma separated file (*.csv)</source>
- <translation>Datoteka vrijednosti odvojenih zarezom (*. csv)</translation>
+ <translation>Datoteka podataka odvojenih zarezima (*.csv)</translation>
</message>
<message>
<source>Exporting Failed</source>
@@ -152,10 +152,6 @@
<translation>Promjena lozinke</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Unesite staru i novu lozinku za novčanik.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Potvrdi šifriranje novčanika</translation>
</message>
@@ -184,10 +180,6 @@
<translation>Unesite novu lozinku za novčanik. &lt;br/&gt;Molimo Vas da koristite zaporku od &lt;b&gt;deset ili više slučajnih znakova&lt;/b&gt;, ili &lt;b&gt;osam ili više riječi.&lt;/b&gt;</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin će se sada zatvoriti kako bi dovršio postupak šifriranja. Zapamtite da šifriranje vašeg novčanika ne može u potpunosti zaštititi vaše bitcoine od krađe preko zloćudnog softvera koji bi bio na vašem računalu.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Šifriranje novčanika nije uspjelo</translation>
</message>
@@ -307,10 +299,6 @@
<translation>Slanje novca na bitcoin adresu</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Promijeni postavke konfiguracije za bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Napravite sigurnosnu kopiju novčanika na drugoj lokaciji</translation>
</message>
@@ -406,10 +394,6 @@
<source>Show the list of used receiving addresses and labels</source>
<translation>Prikaži popis korištenih adresa i oznaka za primanje isplate</translation>
</message>
- <message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n aktivna veza na Bitcoin mrežu</numerusform><numerusform>%n aktivne veze na Bitcoin mrežu</numerusform><numerusform>%n aktivnih veza na Bitcoin mrežu</numerusform></translation>
- </message>
<message>
<source>Error</source>
<translation>Greška</translation>
@@ -439,18 +423,6 @@
<translation>Dolazna transakcija</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Datum:%1
-Iznos:%2
-Tip:%3
-Adresa:%4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Novčanik je &lt;b&gt;šifriran&lt;/b&gt; i trenutno &lt;b&gt;otključan&lt;/b&gt;</translation>
</message>
@@ -563,20 +535,12 @@ Adresa:%4
</message>
<message>
<source>About Bitcoin Core</source>
- <translation>O Bitcoin Jezrgu</translation>
+ <translation>O Bitcoinovoj jezgri</translation>
</message>
<message>
<source>Usage:</source>
<translation>Upotreba:</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>UI postavke</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Pokreni minimiziran</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -590,7 +554,7 @@ Adresa:%4
</message>
<message>
<source>Error</source>
- <translation>Pogreška</translation>
+ <translation>Greška</translation>
</message>
</context>
<context>
@@ -607,14 +571,6 @@ Adresa:%4
<translation>&amp;Glavno</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Automatski pokreni Bitcoin kad se uključi računalo</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Pokreni Bitcoin kod pokretanja sustava</translation>
- </message>
- <message>
<source>&amp;Network</source>
<translation>&amp;Mreža</translation>
</message>
@@ -647,10 +603,6 @@ Adresa:%4
<translation>&amp;Minimiziraj u sistemsku traku umjesto u traku programa</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>Minimizirati umjesto izaći iz aplikacije kada je prozor zatvoren. Kada je ova opcija omogućena, aplikacija će biti zatvorena tek nakon odabira Izlaz u izborniku.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimiziraj kod zatvaranja</translation>
</message>
@@ -789,10 +741,6 @@ Adresa:%4
<translation>Očisti konzolu</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Dobrodošli u Bitcoin RPC konzolu.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Kako bi navigirali kroz povijest koristite strelice gore i dolje. &lt;b&gt;Ctrl-L&lt;/b&gt; kako bi očistili ekran.</translation>
</message>
@@ -913,10 +861,6 @@ Adresa:%4
<translation>ili</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Adresa primatelja je nevaljala, molimo provjerite je ponovo.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Iznos mora biti veći od 0.</translation>
</message>
@@ -929,10 +873,6 @@ Adresa:%4
<translation>Iznos je veći od stanja računa kad se doda naknada za transakcije od %1.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Pronašli smo adresu koja se ponavlja. U svakom plaćanju program može svaku adresu koristiti samo jedanput.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(bez oznake)</translation>
</message>
@@ -986,10 +926,6 @@ Adresa:%4
<translation>&amp;Potpišite poruku</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Možete potpisati poruke sa svojom adresom kako bi dokazali da ih posjedujete. Budite oprezni da ne potpisujete ništa mutno, jer bi vas phishing napadi mogli na prevaru natjerati da prepišete svoj identitet njima. Potpisujte samo detaljno objašnjene izjave sa kojima se slažete.</translation>
- </message>
- <message>
<source>Alt+A</source>
<translation>Alt+A</translation>
</message>
@@ -1165,10 +1101,6 @@ Adresa:%4
<translation>Tip</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adresa</translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Otvoren do %1</translation>
</message>
@@ -1185,6 +1117,10 @@ Adresa:%4
<translation>Generirano, ali nije prihvaćeno</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Oznaka</translation>
+ </message>
+ <message>
<source>Received with</source>
<translation>Primljeno s</translation>
</message>
@@ -1221,10 +1157,6 @@ Adresa:%4
<translation>Vrsta transakcije.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Odredište transakcije</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Iznos odbijen od ili dodan k saldu.</translation>
</message>
@@ -1439,6 +1371,10 @@ Adresa:%4
<translation>Šalji trace/debug informacije na konzolu umjesto u debug.log datoteku</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Pokreni minimiziran</translation>
+ </message>
+ <message>
<source>Use UPnP to map the listening port (default: 1 when listening)</source>
<translation>Pokušaj koristiti UPnP da otvoriš port za uslugu (default: 1 when listening)</translation>
</message>
diff --git a/src/qt/locale/bitcoin_hu.ts b/src/qt/locale/bitcoin_hu.ts
index a95f9412c3..0d9a57d3b4 100644
--- a/src/qt/locale/bitcoin_hu.ts
+++ b/src/qt/locale/bitcoin_hu.ts
@@ -87,7 +87,7 @@
</message>
<message>
<source>Comma separated file (*.csv)</source>
- <translation>Vesszővel elválasztott fájl (*. csv)</translation>
+ <translation>Vesszővel elválasztott fájl (*.csv)</translation>
</message>
<message>
<source>Exporting Failed</source>
@@ -156,10 +156,6 @@
<translation>Jelszó megváltoztatása</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Írd be a tárca régi és új jelszavát.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Biztosan titkosítani akarod a tárcát?</translation>
</message>
@@ -188,10 +184,6 @@
<translation>Add meg a tárca új jelszavát.&lt;br/&gt;Olyan jelszót válassz, ami &lt;b&gt;legalább tíz véletlenszerű karakterből&lt;/b&gt; vagy &lt;b&gt;legalább 8 véletlenszerű szóból&lt;/b&gt; áll.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>A Bitcoin Core most bezár, hogy befejezze a titkosítást. Ne feledd: a tárca titkosítása nem nyújt teljes védelmet azzal szemben, hogy adathalász programok megfertőzzék a számítógéped és ellopják a bitcoinjaid.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>A tárca titkosítása sikertelen.</translation>
</message>
@@ -311,10 +303,6 @@
<translation>Bitcoin küldése megadott címre</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Bitcoin konfigurációs opciók</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Biztonsági másolat készítése a tárcáról egy másik helyre</translation>
</message>
@@ -422,34 +410,14 @@
<source>Show the Bitcoin Core help message to get a list with possible Bitcoin command-line options</source>
<translation>A Bitcoin Core súgóüzenet megjelenítése a Bitcoin lehetséges parancssori kapcsolóival.</translation>
</message>
- <message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n aktív kapcsolat a Bitcoin-hálózattal</numerusform><numerusform>%n aktív kapcsolat a Bitcoin-hálózattal</numerusform></translation>
- </message>
<message>
<source>No block source available...</source>
<translation>Blokk forrása ismeretlen...</translation>
</message>
- <message numerus="yes">
- <source>%n hour(s)</source>
- <translation><numerusform>%n óra</numerusform><numerusform>%n óra</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n day(s)</source>
- <translation><numerusform>%n nap</numerusform><numerusform>%n nap</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>%n hét</numerusform><numerusform>%n hét</numerusform></translation>
- </message>
<message>
<source>%1 and %2</source>
<translation>%1 és %2</translation>
</message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation><numerusform>%n év</numerusform><numerusform>%n év</numerusform></translation>
- </message>
<message>
<source>%1 behind</source>
<translation>%1 lemaradás</translation>
@@ -491,18 +459,6 @@
<translation>Beérkező tranzakció</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Dátum: %1
-Összeg: %2
-Típus: %3
-Cím: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>A tárca &lt;b&gt;titkosítva&lt;/b&gt; és jelenleg &lt;b&gt;nyitva&lt;/b&gt;.</translation>
</message>
@@ -630,7 +586,7 @@ Cím: %4
</message>
<message>
<source>Copy dust</source>
- <translation>Por-határ másolása</translation>
+ <translation>Visszajáró másolása</translation>
</message>
<message>
<source>Copy change</source>
@@ -693,10 +649,6 @@ Cím: %4
<translation>nem</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Ez a címke piros lesz, ha tranzakció mérete nagyobb 1000 byte-nál.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Legalább %1 díj szüksége kB-onként.</translation>
</message>
@@ -709,14 +661,6 @@ Cím: %4
<translation>Nagyobb prioritású tranzakciók nagyobb valószínűséggel kerülnek be egy blokkba.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Ez a címke piros lesz, ha a prioritás közepesnél alacsonyabb.</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Ez a címke piros lesz, ha valamelyik elfogadó kevesebbet kap mint %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(nincs címke)</translation>
</message>
@@ -833,31 +777,6 @@ Cím: %4
<source>command-line options</source>
<translation>parancssoros opciók</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>UI opciók</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Nyelvbeállítás, például "de_DE" (alapértelmezett: rendszer nyelve)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Indítás lekicsinyítve
-</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>SLL gyökér-igazolások megadása fizetési kérelmekhez (alapértelmezett: -system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Indítóképernyő mutatása induláskor (alapértelmezett: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Adatkönyvtár kiválasztása induláskor (alapbeállítás: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -924,14 +843,6 @@ Cím: %4
<translation>&amp;Fő</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Induljon el a Bitcoin a számítógép bekapcsolásakor</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Induljon el a számítógép bekapcsolásakor</translation>
- </message>
- <message>
<source>MB</source>
<translation>MB</translation>
</message>
@@ -992,10 +903,6 @@ Cím: %4
<translation>&amp;Kicsinyítés a tálcára az eszköztár helyett</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>Az alkalmazásból való kilépés helyett az eszköztárba kicsinyíti az alkalmazást az ablak bezárásakor. Ez esetben az alkalmazás csak a Kilépés menüponttal zárható be.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>K&amp;icsinyítés záráskor</translation>
</message>
@@ -1008,10 +915,6 @@ Cím: %4
<translation>Felhasználófelület nye&amp;lve:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Itt beállíthatod a felhasználófelület nyelvét. Ez a beállítás a Bitcoin ujraindítása után lép érvénybe.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Mértékegység:</translation>
</message>
@@ -1144,10 +1047,6 @@ Cím: %4
<translation>%1 mp</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>HÁLÓZAT</translation>
- </message>
- <message>
<source>N/A</source>
<translation>Nem elérhető</translation>
</message>
@@ -1290,10 +1189,6 @@ Cím: %4
<translation>Konzol törlése</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Üdv a Bitcoin RPC konzoljában!</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Navigálhat a fel és le nyilakkal, és &lt;b&gt;Ctrl-L&lt;/b&gt; -vel törölheti a képernyőt.</translation>
</message>
@@ -1526,10 +1421,6 @@ Cím: %4
<translation>vagy</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>A címzett címe érvénytelen, kérlek, ellenőrizd.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>A fizetendő összegnek nagyobbnak kell lennie 0-nál.</translation>
</message>
@@ -1542,10 +1433,6 @@ Cím: %4
<translation>A küldeni kívánt összeg és a %1 tranzakciós díj együtt meghaladja az egyenlegeden rendelkezésedre álló összeget.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Többször szerepel ugyanaz a cím. Egy küldési műveletben egy címre csak egyszer lehet küldeni.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(nincs címke)</translation>
</message>
@@ -1612,10 +1499,6 @@ Cím: %4
<translation>Üzenet aláírása...</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Aláírhat a címeivel üzeneteket, amivel bizonyíthatja, hogy a címek az önéi. Vigyázzon, hogy ne írjon alá semmi félreérthetőt, mivel a phising támadásokkal megpróbálhatják becsapni, hogy az azonosságát átírja másokra. Csak olyan részletes állításokat írjon alá, amivel egyetért.</translation>
- </message>
- <message>
<source>Alt+A</source>
<translation>Alt+A</translation>
</message>
@@ -1656,10 +1539,6 @@ Cím: %4
<translation>Üzenet ellenőrzése</translation>
</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>Írja be az aláírás címét, az üzenetet (ügyelve arra, hogy az új-sor, szóköz, tab, stb. karaktereket is pontosan) és az aláírást az üzenet ellenőrzéséhez. Ügyeljen arra, ne gondoljon többet az aláírásról, mint amennyi az aláírt szövegben ténylegesen áll, hogy elkerülje a köztes-ember (man-in-the-middle) támadást.</translation>
- </message>
- <message>
<source>The entered address is invalid.</source>
<translation>A megadott cím nem érvényes.</translation>
</message>
@@ -1704,7 +1583,7 @@ Cím: %4
</message>
<message>
<source>The Bitcoin Core developers</source>
- <translation>A Bitcoin fejlesztői</translation>
+ <translation>A Bitcoin Core fejlesztői</translation>
</message>
<message>
<source>[testnet]</source>
@@ -1722,7 +1601,7 @@ Cím: %4
<name>TransactionDesc</name>
<message>
<source>Open until %1</source>
- <translation>Megnyitva %1-ig</translation>
+ <translation>%1-ig megnyitva</translation>
</message>
<message>
<source>%1/unconfirmed</source>
@@ -1768,10 +1647,6 @@ Cím: %4
<source>Credit</source>
<translation>Jóváírás</translation>
</message>
- <message numerus="yes">
- <source>matures in %n more block(s)</source>
- <translation><numerusform>beérik %n blokk múlva</numerusform><numerusform>beérik %n blokk múlva</numerusform></translation>
- </message>
<message>
<source>not accepted</source>
<translation>elutasítva</translation>
@@ -1828,10 +1703,6 @@ Cím: %4
<source>, has not been successfully broadcast yet</source>
<translation>, még nem sikerült elküldeni.</translation>
</message>
- <message numerus="yes">
- <source>Open for %n more block(s)</source>
- <translation><numerusform>%n további blokkra megnyitva</numerusform><numerusform>%n további blokkra megnyitva</numerusform></translation>
- </message>
<message>
<source>unknown</source>
<translation>ismeretlen</translation>
@@ -1859,14 +1730,6 @@ Cím: %4
<translation>Típus</translation>
</message>
<message>
- <source>Address</source>
- <translation>Cím</translation>
- </message>
- <message numerus="yes">
- <source>Open for %n more block(s)</source>
- <translation><numerusform>%n további blokkra megnyitva</numerusform><numerusform>%n további blokkra megnyitva</numerusform></translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>%1-ig megnyitva</translation>
</message>
@@ -1887,6 +1750,10 @@ Cím: %4
<translation>Offline</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Címke</translation>
+ </message>
+ <message>
<source>Received with</source>
<translation>Erre a címre</translation>
</message>
@@ -1923,10 +1790,6 @@ Cím: %4
<translation>Tranzakció típusa.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>A tranzakció címzettjének címe.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Az egyenleghez jóváírt vagy ráterhelt összeg.</translation>
</message>
@@ -2071,7 +1934,7 @@ Cím: %4
<name>WalletView</name>
<message>
<source>&amp;Export</source>
- <translation>&amp;Exportálás...</translation>
+ <translation>&amp;Exportálás</translation>
</message>
<message>
<source>Export the data in the current tab to a file</source>
@@ -2150,10 +2013,6 @@ Cím: %4
<translation>Sérült blokk-adatbázis észlelve</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Saját IP-cím felfedezése (alapértelmezett: 1, amikor figyel és nem használt a -externalip)</translation>
- </message>
- <message>
<source>Do you want to rebuild the block database now?</source>
<translation>Újra akarod építeni a blokk adatbázist most?</translation>
</message>
@@ -2194,10 +2053,6 @@ Cím: %4
<translation>Nincs elég fájlleíró. </translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Blokklánc index újraalkotása az alábbi blk000??.dat fájlokból</translation>
- </message>
- <message>
<source>Verifying blocks...</source>
<translation>Blokkok ellenőrzése...</translation>
</message>
@@ -2210,6 +2065,10 @@ Cím: %4
<translation>Az adatbázist újra kell építeni -reindex használatával (módosítás -tindex).</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Adatkönyvtár kiválasztása induláskor (alapbeállítás: 0)</translation>
+ </message>
+ <message>
<source>Information</source>
<translation>Információ</translation>
</message>
@@ -2226,10 +2085,27 @@ Cím: %4
<translation>trace/debug információ küldése a konzolra a debog.log fájl helyett</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>SLL gyökér-igazolások megadása fizetési kérelmekhez (alapértelmezett: -system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Nyelvbeállítás, például "de_DE" (alapértelmezett: rendszer nyelve)</translation>
+ </message>
+ <message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Indítóképernyő mutatása induláskor (alapértelmezett: 1)</translation>
+ </message>
+ <message>
<source>Signing transaction failed</source>
<translation>Tranzakció aláírása sikertelen</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Indítás lekicsinyítve
+</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Ez egy kísérleti szoftver.</translation>
</message>
diff --git a/src/qt/locale/bitcoin_id_ID.ts b/src/qt/locale/bitcoin_id_ID.ts
index bdc67a55d1..7bc7ed4607 100644
--- a/src/qt/locale/bitcoin_id_ID.ts
+++ b/src/qt/locale/bitcoin_id_ID.ts
@@ -148,10 +148,6 @@
<translation>Ubah kata kunci</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Masukkan kata kunci lama dan baru ke dompet ini.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Konfirmasi enkripsi dompet</translation>
</message>
@@ -172,10 +168,6 @@
<translation>Dompet terenkripsi</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin akan menutup untuk menyelesaikan proses enkripsi. Ingat bahwa dengan mengenkripsi dompet Anda tidak sepenuhnya melindungi bitcoin Anda dari perangkat lunak berbahaya yang menginfeksi komputer Anda.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Enkripsi dompet gagal</translation>
</message>
@@ -291,10 +283,6 @@
<translation>Kirim koin ke alamat Bitcoin</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Ubah pilihan konfigurasi untuk Bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Cadangkan dompet ke lokasi lain</translation>
</message>
@@ -471,18 +459,6 @@
<translation>Transaksi diterima</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Tanggal: %1
-Nilai: %2
-Jenis: %3
-Alamat: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Dompet saat ini &lt;b&gt;terenkripsi&lt;/b&gt; dan &lt;b&gt;terbuka&lt;/b&gt;</translation>
</message>
@@ -661,10 +637,6 @@ Alamat: %4
<translation>tidak</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Label ini akan berubah merah, jika ukuran transaksi lebih besar dari 1000 byte.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Berarti perlu biaya lebih dari %1 untuk setiap kB.</translation>
</message>
@@ -677,14 +649,6 @@ Alamat: %4
<translation>Makin penting transaksinya, makin kemungkinan akan termasuk dalam blok.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Label ini akan berubah merah, jika prioritas lebih kecil dari "medium".</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Label ini akan berubah merah, jika setiap penerima menerima nilai lebih kecil dari %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(tidak ada label)</translation>
</message>
@@ -797,23 +761,7 @@ Alamat: %4
<source>command-line options</source>
<translation>pilihan perintah-baris</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>pilihan UI</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Atur bahasa, sebagai contoh "id_ID" (standar: system locale)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Memulai terminimalisi</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Tampilkan layar pembuka saat nyala (standar: 1)</translation>
- </message>
- </context>
+</context>
<context>
<name>Intro</name>
<message>
@@ -879,14 +827,6 @@ Alamat: %4
<translation>&amp;Utama</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Menyalakan Bitcoin secara otomatis setelah masuk ke dalam sistem.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Menyalakan Bitcoin pada login sistem</translation>
- </message>
- <message>
<source>MB</source>
<translation>MB</translation>
</message>
@@ -967,10 +907,6 @@ Alamat: %4
<translation>&amp;Meminilisasi ke tray daripada taskbar</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>Meminimalkan tanpa keluar dari aplikasi saat jendela ditutup. Apabila pilihan ini diaktifkan, aplikasi hanya bisa ditutup dengan memilih Keluar di menu Berkas.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;eminilisasi saat tutup</translation>
</message>
@@ -983,10 +919,6 @@ Alamat: %4
<translation>&amp;Bahasa Antarmuka Pengguna:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Tampilan bahasa pengguna dapat diatur disini. Pengaturan ini akan berpengaruh setelah memulai kembali aplikasi Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Unit untuk menunjukkan nilai:</translation>
</message>
@@ -1023,10 +955,6 @@ Alamat: %4
<translation>Restart klien diperlukan untuk mengaktifkan perubahan.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>Klien akan dimatikan, apakah anda hendak melanjutkan?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>Perubahan ini akan memerlukan restart klien</translation>
</message>
@@ -1257,18 +1185,10 @@ Alamat: %4
<translation>Berkas catatan debug</translation>
</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>Buka berkas catatan debug Bitcoin dari direktori data sekarang. Hal ini dapat memakan waktu beberapa detik untuk berkas catatan yang besar.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Bersihkan konsol</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Selamat datang ke konsol RPC Bitcoin.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Gunakan panah keatas dan kebawah untuk menampilkan sejarah, dan &lt;b&gt;Ctrl-L&lt;/b&gt; untuk bersihkan layar.</translation>
</message>
@@ -1581,10 +1501,6 @@ Alamat: %4
<translation>atau</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Alamat penerima tidak sah, silakan periksa sekali lagi.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Nilai yang dibayar harus lebih besar dari 0.</translation>
</message>
@@ -1597,10 +1513,6 @@ Alamat: %4
<translation>Jumlah melebihi saldo Anda ketika biaya transaksi %1 ditambahkan.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Ditemukan alamat ganda, hanya dapat mengirim ke tiap alamat sekali per operasi pengiriman.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Gagal membuat transaksi!</translation>
</message>
@@ -1672,18 +1584,10 @@ Alamat: %4
<translation>Pesan:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Permintaan pembayaran terverifikasi.</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>Masukkan label untuk alamat ini untuk dimasukan dalam daftar alamat yang pernah digunakan</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Permintaan pembayaran tidak terverifikasi.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Kirim Ke:</translation>
</message>
@@ -1997,10 +1901,6 @@ Alamat: %4
<translation>Jenis</translation>
</message>
<message>
- <source>Address</source>
- <translation>Alamat</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Terlalu muda (cuma %1 konfirmasi, akan siap sesudah %2) </translation>
</message>
@@ -2029,6 +1929,10 @@ Alamat: %4
<translation>Tidak terhubung</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Label</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Belum dikonfirmasi</translation>
</message>
@@ -2077,10 +1981,6 @@ Alamat: %4
<translation>Jenis transaksi.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Alamat tujuan dari transaksi.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Nilai dihapus dari atau ditambahkan ke saldo.</translation>
</message>
@@ -2351,10 +2251,6 @@ Alamat: %4
<translation>Menemukan database blok yang rusak </translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Cari alamat IP Anda sendiri (biasanya: 1 saat mendengarkan dan -externalip tidak terpilih)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>Jangan memuat dompet dan menonaktifkan panggilan dompet RPC</translation>
</message>
@@ -2455,6 +2351,14 @@ Alamat: %4
<translation>Kirim info jejak/debug ke konsol bukan berkas debug.log</translation>
</message>
<message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Atur bahasa, sebagai contoh "id_ID" (standar: system locale)</translation>
+ </message>
+ <message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Tampilkan layar pembuka saat nyala (standar: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Mengecilkan berkas debug.log saat klien berjalan (Standar: 1 jika tidak -debug)</translation>
</message>
@@ -2463,6 +2367,10 @@ Alamat: %4
<translation>Tandatangani transaksi tergagal</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Memulai terminimalisi</translation>
+ </message>
+ <message>
<source>Transaction amount too small</source>
<translation>Nilai transaksi terlalu kecil</translation>
</message>
@@ -2483,10 +2391,6 @@ Alamat: %4
<translation>Peringatan</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Perhatian: Versi ini sudah lama, perlu ditingkatkan!</translation>
- </message>
- <message>
<source>Zapping all transactions from wallet...</source>
<translation>Setiap transaksi dalam dompet sedang di-'Zap'...</translation>
</message>
diff --git a/src/qt/locale/bitcoin_it.ts b/src/qt/locale/bitcoin_it.ts
index 23eec1bf3e..6b52362b8a 100644
--- a/src/qt/locale/bitcoin_it.ts
+++ b/src/qt/locale/bitcoin_it.ts
@@ -156,10 +156,6 @@
<translation>Cambia la passphrase</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Inserisci la vecchia e la nuova passphrase per il portamonete.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Conferma la cifratura del portamonete</translation>
</message>
@@ -172,6 +168,10 @@
<translation>Si è sicuri di voler cifrare il portamonete?</translation>
</message>
<message>
+ <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+ <translation>Bitcoin Core si chiuderà per portare a termine il processo di cifratura. Si ricorda che la cifratura del portamonete non garantisce protezione totale contro i furti causati da infezioni malware.</translation>
+ </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>IMPORTANTE: qualsiasi backup del file portamonete effettuato in precedenza dovrà essere sostituito con il file del portamonete cifrato appena generato. Per ragioni di sicurezza, i precedenti backup del file del portamonete non cifrato diventeranno inservibili non appena si inizierà ad utilizzare il nuovo portamonete cifrato.</translation>
</message>
@@ -188,8 +188,8 @@
<translation>Inserisci la nuova passphrase per il portamonete.&lt;br/&gt;Si consiglia di utilizzare &lt;b&gt;almeno dieci caratteri casuali&lt;/b&gt; oppure &lt;b&gt;otto o più parole&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin si chiuderà per portare a termine il processo di cifratura. Ricorda che cifrare il tuo portamonete non può fornire una protezione totale contro i furti causati da infezioni malware.</translation>
+ <source>Enter the old passphrase and new passphrase to the wallet.</source>
+ <translation>Inserisci la vecchia e la nuova passphrase per il portamonete.</translation>
</message>
<message>
<source>Wallet encryption failed</source>
@@ -311,10 +311,6 @@
<translation>Invia fondi ad un indirizzo Bitcoin</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Modifica opzioni di configurazione per Bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Effettua il backup del portamonete</translation>
</message>
@@ -403,6 +399,10 @@
<translation>&amp;Informazioni su Bitcoin Core</translation>
</message>
<message>
+ <source>Modify configuration options for Bitcoin Core</source>
+ <translation>Modifica opzioni di configurazione per Bitcoin Core</translation>
+ </message>
+ <message>
<source>Show the list of used sending addresses and labels</source>
<translation>Mostra la lista degli indirizzi di invio utilizzati</translation>
</message>
@@ -431,6 +431,10 @@
<translation>Nessuna fonte di blocchi disponibile...</translation>
</message>
<message numerus="yes">
+ <source>Processed %n block(s) of transaction history.</source>
+ <translation><numerusform>Elaborato %n blocco dello storico transazioni.</numerusform><numerusform>Elaborati %n blocchi dello storico transazioni.</numerusform></translation>
+ </message>
+ <message numerus="yes">
<source>%n hour(s)</source>
<translation><numerusform>%n ora</numerusform><numerusform>%n ore</numerusform></translation>
</message>
@@ -478,36 +482,49 @@
<source>Up to date</source>
<translation>Aggiornato</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>Processati %n blocchi dello storico transazioni.</numerusform><numerusform>Processati %n blocchi dello storico delle transazioni.</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>In aggiornamento...</translation>
</message>
<message>
- <source>Sent transaction</source>
- <translation>Transazione inviata</translation>
+ <source>Date: %1
+</source>
+ <translation>Data: %1
+</translation>
</message>
<message>
- <source>Incoming transaction</source>
- <translation>Transazione ricevuta</translation>
+ <source>Amount: %1
+</source>
+ <translation>Quantità: %1
+</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
+ <source>Type: %1
</source>
- <translation>Data: %1
-Quantità: %2
-Tipo: %3
-Indirizzo: %4
-
+ <translation>Tipo: %1
</translation>
</message>
<message>
+ <source>Label: %1
+</source>
+ <translation>Etichetta: %1
+</translation>
+ </message>
+ <message>
+ <source>Address: %1
+</source>
+ <translation>Indirizzo: %1
+</translation>
+ </message>
+ <message>
+ <source>Sent transaction</source>
+ <translation>Transazione inviata</translation>
+ </message>
+ <message>
+ <source>Incoming transaction</source>
+ <translation>Transazione ricevuta</translation>
+ </message>
+ <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Il portamonete è &lt;b&gt;cifrato&lt;/b&gt; ed attualmente &lt;b&gt;sbloccato&lt;/b&gt;</translation>
</message>
@@ -698,6 +715,18 @@ Indirizzo: %4
<translation>nessuno</translation>
</message>
<message>
+ <source>This label turns red if the transaction size is greater than 1000 bytes.</source>
+ <translation>Questa etichetta diventerà rossa se la dimensione della transazione supererà i 1000 byte.</translation>
+ </message>
+ <message>
+ <source>This label turns red if the priority is smaller than "medium".</source>
+ <translation>Questa etichetta diventerà rossa se la priorità sarà inferiore a "media".</translation>
+ </message>
+ <message>
+ <source>This label turns red if any recipient receives an amount smaller than %1.</source>
+ <translation>Questa etichetta diventerà rossa se uno qualsiasi dei destinatari riceverà un importo inferiore a %1.</translation>
+ </message>
+ <message>
<source>Can vary +/- %1 satoshi(s) per input.</source>
<translation>Può variare di +/- %1 satoshi per input.</translation>
</message>
@@ -710,10 +739,6 @@ Indirizzo: %4
<translation>no</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Questa etichetta diventerà rossa se la dimensione della transazione supererà i 1000 byte.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>In tal caso sarà necessaria una commissione di almeno %1 per ogni kB.</translation>
</message>
@@ -726,14 +751,6 @@ Indirizzo: %4
<translation>Le transazioni con priorità più alta hanno più probabilità di essere incluse in un blocco.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Questa etichetta diventerà rossa se la priorità sarà inferiore a "media".</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Questa etichetta diventerà rossa se uno qualsiasi dei destinatari riceverà un ammontare inferiore a %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(nessuna etichetta)</translation>
</message>
@@ -854,30 +871,6 @@ Indirizzo: %4
<source>command-line options</source>
<translation>opzioni della riga di comando</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Opzioni UI</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Imposta lingua, ad esempio "it_IT" (predefinito: lingua di sistema)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Avvia ridotto a icona</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Imposta i certificati radice SSL per le richieste di pagamento (predefinito: -system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Mostra finestra di presentazione all'avvio (predefinito: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Seleziona la cartella dati all'avvio (predefinito: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -952,14 +945,6 @@ Indirizzo: %4
<translation>&amp;Principale</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Avvia automaticamente Bitcoin una volta effettuato l'accesso al sistema.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Avvia Bitcoin all'accesso al sistema</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Dimensione della cache del &amp;database.</translation>
</message>
@@ -984,6 +969,14 @@ Indirizzo: %4
<translation>Indirizzo IP del proxy (ad es. IPv4: 127.0.0.1 / IPv6: ::1)</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 Exit in the menu.</source>
+ <translation>Riduci ad icona invece di uscire dall'applicazione quando la finestra viene chiusa. Attivando questa opzione l'applicazione terminerà solo dopo aver selezionato Esci dal menu File.</translation>
+ </message>
+ <message>
+ <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin Core.</source>
+ <translation>La lingua dell'interfaccia utente può essere impostata qui. L'applicazione delle modifiche avrà effetto dopo il riavvio di Bitcoin Core.</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>URL di terze parti (ad es. un block explorer) che appaiono nella tabella delle transazioni come voci nel menu contestuale. "%s" nell'URL è sostituito dall'hash della transazione.
Per specificare più URL separarli con una barra verticale "|".</translation>
@@ -1009,6 +1002,14 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>Rete</translation>
</message>
<message>
+ <source>Automatically start Bitcoin Core after logging in to the system.</source>
+ <translation>Avvia automaticamente Bitcoin Core una volta effettuato l'accesso al sistema.</translation>
+ </message>
+ <message>
+ <source>&amp;Start Bitcoin Core on system login</source>
+ <translation>&amp;Avvia Bitcoin Core all'accesso al sistema</translation>
+ </message>
+ <message>
<source>(0 = auto, &lt;0 = leave that many cores free)</source>
<translation>(0 = automatico, &lt;0 = lascia questo numero di core liberi)</translation>
</message>
@@ -1073,10 +1074,6 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>&amp;Minimizza nella tray bar invece che sulla barra delle applicazioni</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>Riduci ad icona invece di uscire dall'applicazione quando la finestra viene chiusa. Se l'opzione è attiva, l'applicazione terminerà solo dopo aver selezionato Esci dal menu File.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimizza alla chiusura</translation>
</message>
@@ -1089,10 +1086,6 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>&amp;Lingua Interfaccia Utente:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>La lingua dell'interfaccia utente può essere impostata qui. L'impostazione avrà effetto dopo il riavvio di Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Unità di misura con cui visualizzare gli importi:</translation>
</message>
@@ -1129,8 +1122,8 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>È necessario un riavvio del client per applicare le modifiche.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>Il client sarà arrestato, vuoi procedere?</translation>
+ <source>Client will be shut down. Do you want to proceed?</source>
+ <translation>Il client sarà arrestato. Si desidera procedere?</translation>
</message>
<message>
<source>This change would require a client restart.</source>
@@ -1239,10 +1232,6 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>La rete della richiesta di pagamento non corrisponde alla rete del client.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>Richiesta di pagamento scaduta.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>La richiesta di pagamento non è stata inizializzata.</translation>
</message>
@@ -1275,10 +1264,18 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>Impossibile leggere il file della richiesta di pagamento! Il file della richiesta di pagamento potrebbe non essere valido.</translation>
</message>
<message>
+ <source>Payment request expired.</source>
+ <translation>Richiesta di pagamento scaduta.</translation>
+ </message>
+ <message>
<source>Unverified payment requests to custom payment scripts are unsupported.</source>
<translation>Le richieste di pagamento non verificate verso script di pagamento personalizzati non sono supportate.</translation>
</message>
<message>
+ <source>Invalid payment request.</source>
+ <translation>Richiesta di pagamento non valida.</translation>
+ </message>
+ <message>
<source>Refund from %1</source>
<translation>Rimborso da %1</translation>
</message>
@@ -1318,8 +1315,8 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>User Agent</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Indirizzo/Nome host</translation>
+ <source>Node/Service</source>
+ <translation>Nodo/Servizio</translation>
</message>
<message>
<source>Ping Time</source>
@@ -1353,14 +1350,6 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>%1 s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>RETE</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>SCONOSCIUTO</translation>
- </message>
- <message>
<source>None</source>
<translation>Nessuno</translation>
</message>
@@ -1451,6 +1440,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>Numero attuale di blocchi</translation>
</message>
<message>
+ <source>Open the Bitcoin Core debug log file from the current data directory. This can take a few seconds for large log files.</source>
+ <translation>Apre il file log di debug di Bitcoin Core dalla cartella dati attuale. Questa azione può richiedere alcuni secondi per file log di grandi dimensioni.</translation>
+ </message>
+ <message>
<source>Received</source>
<translation>Ricevuto</translation>
</message>
@@ -1519,6 +1512,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>Tempo di Ping</translation>
</message>
<message>
+ <source>Time Offset</source>
+ <translation>Scarto Temporale</translation>
+ </message>
+ <message>
<source>Last block time</source>
<translation>Ora del blocco più recente</translation>
</message>
@@ -1559,16 +1556,12 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>File log del Debug</translation>
</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>Apri il file log del debug di Bitcoin dalla cartella dati attuale. Può richiedere alcuni secondi per file di log di grandi dimensioni.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Cancella console</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Benvenuto nella console RPC di Bitcoin.</translation>
+ <source>Welcome to the Bitcoin Core RPC console.</source>
+ <translation>Benvenuto nella console RPC di Bitcoin Core.</translation>
</message>
<message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
@@ -1859,14 +1852,6 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>minimizza le impostazioni di commissione</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Minimizza</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>Se la commissione personalizzata è impostata su 1000 satoshi e la transazione è di soli 250 byte, allora "per kilobyte" paga solo 250 satoshi di commissione, mentre "somma almeno" paga 1000 satoshi. Per transazioni più grandi di un kilobyte, entrambe le opzioni pagano al kilobyte.</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>per kilobyte</translation>
</message>
@@ -1875,6 +1860,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>Se la commissione personalizzata è impostata su 1000 satoshi e la transazione è di soli 250 byte, allora "per kilobyte" paga solo 250 satoshi di commissione, mentre "somma almeno" paga 1000 satoshi. Per transazioni più grandi di un kilobyte, entrambe le opzioni pagano al kilobyte.</translation>
</message>
<message>
+ <source>Hide</source>
+ <translation>Nascondi</translation>
+ </message>
+ <message>
<source>total at least</source>
<translation>somma almeno</translation>
</message>
@@ -1995,10 +1984,6 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>o</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>L'indirizzo del beneficiario non è valido, si prega di ricontrollare.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>L'importo da pagare deve essere maggiore di 0.</translation>
</message>
@@ -2011,10 +1996,6 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>Il totale è superiore al tuo saldo attuale includendo la commissione di %1.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Rilevato un indirizzo duplicato. È possibile inviare bitcoin una sola volta a ciascun indirizzo durante un'operazione di invio.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Creazione transazione fallita!</translation>
</message>
@@ -2023,16 +2004,24 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>La transazione è stata respinta! Questo può accadere se alcuni bitcoin nel tuo portamonete sono già stati spesi, come nel caso in cui tu avessi utilizzato una copia del file wallet.dat per spendere bitcoin e questi non fossero stati considerati come spesi dal portamonete corrente.</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
+ <source>A fee higher than %1 is considered an absurdly high fee.</source>
<translation>Una commissione maggiore di %1 è considerata irragionevolmente elevata.</translation>
</message>
<message>
+ <source>Payment request expired.</source>
+ <translation>Richiesta di pagamento scaduta.</translation>
+ </message>
+ <message>
<source>Pay only the minimum fee of %1</source>
<translation>Paga solamente la commissione minima di %1</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>Inizio delle conferme stimato entro %1 blocchi.</translation>
+ <source>The recipient address is not valid. Please recheck.</source>
+ <translation>L'indirizzo del beneficiario non è valido. Si prega di ricontrollare.</translation>
+ </message>
+ <message>
+ <source>Duplicate address found: addresses should only be used once each.</source>
+ <translation>Rilevato un indirizzo duplicato Ciascun indirizzo dovrebbe essere utilizzato una sola volta.</translation>
</message>
<message>
<source>Warning: Invalid Bitcoin address</source>
@@ -2106,12 +2095,24 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>Rimuovi questa voce</translation>
</message>
<message>
+ <source>The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
+ <translation>La commissione sarà sottratta dall'importo che si sta inviando. Il beneficiario riceverà un totale di bitcoin inferiore al valore digitato. Nel caso in cui siano stati selezionati più beneficiari la commissione sarà suddivisa in parti uguali.</translation>
+ </message>
+ <message>
+ <source>S&amp;ubtract fee from amount</source>
+ <translation>S&amp;ottrae la commissione dall'importo</translation>
+ </message>
+ <message>
<source>Message:</source>
<translation>Messaggio:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Questa è una richiesta di pagamento verificata.</translation>
+ <source>This is an unauthenticated payment request.</source>
+ <translation>Questa è una richiesta di pagamento non autenticata.</translation>
+ </message>
+ <message>
+ <source>This is an authenticated payment request.</source>
+ <translation>Questa è una richiesta di pagamento autenticata.</translation>
</message>
<message>
<source>Enter a label for this address to add it to the list of used addresses</source>
@@ -2122,10 +2123,6 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>Messaggio incluso nel bitcoin URI e che sarà memorizzato con la transazione per vostro riferimento. Nota: Questo messaggio non sarà inviato attraverso la rete Bitcoin.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Questa è una richiesta di pagamento non verificata.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Pagare a:</translation>
</message>
@@ -2156,8 +2153,8 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>&amp;Firma Messaggio</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Puoi firmare messaggi con i tuoi indirizzi in modo da dimostrarne il possesso. Presta attenzione a non firmare dichiarazioni vaghe, attacchi di phishing potrebbero cercare di spingerti ad apporre la tua firma su di esse. Firma solo dichiarazioni completamente dettagliate e delle quali condividi in pieno il contenuto.</translation>
+ <source>You can sign messages/agreements with your addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
+ <translation>È possibile firmare messaggi/accordi con i propri indirizzi in modo da dimostrare di poter ricevere bitcoin attraverso di essi. Si consiglia di prestare attenzione a non firmare dichiarazioni vaghe o casuali, attacchi di phishing potrebbero cercare di indurre ad apporre la firma su di esse. Si raccomanda di firmare esclusivamente dichiarazioni completamente dettagliate e delle quali si condivide in pieno il contenuto.</translation>
</message>
<message>
<source>The Bitcoin address to sign the message with</source>
@@ -2212,8 +2209,8 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>&amp;Verifica Messaggio</translation>
</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>Inserisci l'indirizzo del firmatario, il messaggio (assicurandoti di copiare esattamente anche i ritorni a capo, gli spazi, le tabulazioni, etc..) e la firma qui sotto, per verificare il messaggio. Presta attenzione a non vedere nella sola firma più di quanto non sia riportato nel messaggio stesso, in modo da evitare di cadere vittima di attacchi di tipo man-in-the-middle.</translation>
+ <source>Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction!</source>
+ <translation>Per verificare il messaggio inserire l'indirizzo del firmatario, il messaggio e la firma nei campi sottostanti, assicurandosi di copiare esattamente anche ritorni a capo, spazi, tabulazioni, etc.. Si raccomanda di non lasciarsi fuorviare dalla firma a leggere più di quanto non sia riportato nel testo del messaggio stesso, in modo da evitare di cadere vittima di attacchi di tipo man-in-the-middle. Si ricorda che la verifica della firma dimostra soltanto che il firmatario può ricevere pagamenti con l'indirizzo corrispondente, non prova l'invio di alcuna transazione.</translation>
</message>
<message>
<source>The Bitcoin address the message was signed with</source>
@@ -2479,10 +2476,6 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>Tipo</translation>
</message>
<message>
- <source>Address</source>
- <translation>Indirizzo</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Immaturo (%1 conferme, sarà disponibile fra %2)</translation>
</message>
@@ -2511,6 +2504,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>Offline</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Etichetta</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Non confermata</translation>
</message>
@@ -2567,8 +2564,8 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>Indica se un indirizzo di sola lettura sia o meno coinvolto in questa transazione.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Indirizzo di destinazione della transazione.</translation>
+ <source>User-defined intent/purpose of the transaction.</source>
+ <translation>Intento/scopo della transazione definito dall'utente.</translation>
</message>
<message>
<source>Amount removed from or added to balance.</source>
@@ -2813,6 +2810,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>Associa all'indirizzo indicato e resta permanentemente in ascolto su di esso. Usa la notazione [host]:porta per l'IPv6</translation>
</message>
<message>
+ <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default: %u)</source>
+ <translation>Limita la quantità di transazioni gratuite ad &lt;n&gt;*1000 byte al minuto (predefinito: %u)</translation>
+ </message>
+ <message>
<source>Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup</source>
<translation>Elimina tutte le transazioni dal portamonete e recupera solo quelle che fanno parte della blockchain attraverso il comando -rescan all'avvio.</translation>
</message>
@@ -2833,6 +2834,14 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>In questa modalità -genproclimit determina quanti blocchi saranno generati immediatamente.</translation>
</message>
<message>
+ <source>Maximum total fees to use in a single wallet transaction; setting this too low may abort large transactions (default: %s)</source>
+ <translation>Commissioni massime totali da includere in una singola transazione dal portamonete. Un'impostazione troppo bassa potrebbe provocare l'annullamento di transazioni di grosse dimensioni (predefinito: %s)</translation>
+ </message>
+ <message>
+ <source>Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, &gt;%u = target size in MiB to use for block files)</source>
+ <translation>Riduce i requisiti di spazio di archiviazione attraverso la rimozione dei vecchi blocchi (pruning). Questa modalità disabilita le funzionalità di portamonete ed è incompatibile con l'opzione -txindex. Attenzione: il ripristinando questa opzione l'intera blockchain dovrà essere riscaricata. (predefinito: 0 = disabilita il pruning, &gt;%u = dimensione desiderata in MiB per i file dei blocchi)</translation>
+ </message>
+ <message>
<source>Set the number of script verification threads (%u to %d, 0 = auto, &lt;0 = leave that many cores free, default: %d)</source>
<translation>Imposta il numero di thread per la verifica degli script (da %u a %d, 0 = automatico, &lt;0 = lascia questo numero di core liberi, predefinito: %d)</translation>
</message>
@@ -2901,10 +2910,6 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>Opzioni di Debug/Test:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Scopre il proprio indirizzo IP (predefinito: 1 se in ascolto ed -externalip non è specificato)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>Disabilita il portamonete e le relative chiamate RPC</translation>
</message>
@@ -2965,8 +2970,12 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>Connessione ai soli nodi appartenenti alla rete &lt;net&gt; (ipv4, ipv6 o Tor)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Ricostruzione dell'indice della block chain dai file blk000??.dat correnti</translation>
+ <source>Prune cannot be configured with a negative value.</source>
+ <translation>La modalità prune non può essere configurata con un valore negativo.</translation>
+ </message>
+ <message>
+ <source>Prune mode is incompatible with -txindex.</source>
+ <translation>La modalità prune è incompatibile con l'opzione -txindex.</translation>
</message>
<message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
@@ -3005,6 +3014,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>Opzioni portamonete:</translation>
</message>
<message>
+ <source>Warning: This version is obsolete; upgrade required!</source>
+ <translation>Attenzione: questa versione è obsoleta. Aggiornamento necessario!</translation>
+ </message>
+ <message>
<source>You need to rebuild the database using -reindex to change -txindex</source>
<translation>È necessario ricostruire il database usando -reindex per cambiare -txindex</translation>
</message>
@@ -3029,14 +3042,14 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>Non è possibile ottenere un lock sulla cartella %s. Probabilmente Bitcoin Core è già in esecuzione.</translation>
</message>
<message>
- <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</source>
- <translation>Limita la quantità di transazioni gratuite ad &lt;n&gt;*1000 byte al minuto (predefinito: %u)</translation>
- </message>
- <message>
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
<translation>Crea nuovi file con i permessi di default del sistema, invece che con umask 077 (ha effetto solo con funzionalità di portamonete disabilitate)</translation>
</message>
<message>
+ <source>Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)</source>
+ <translation>Scopre i propri indirizzi IP (predefinito: 1 se in ascolto ed -externalip o -proxy non sono specificati)</translation>
+ </message>
+ <message>
<source>Error: Listening for incoming connections failed (listen returned error %s)</source>
<translation>Errore: attesa per connessioni in arrivo fallita (errore riportato %s)</translation>
</message>
@@ -3069,16 +3082,20 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>Dimensione massima dei dati in transazioni di trasporto dati che saranno trasmesse ed incluse nei blocchi (predefinito: %u)</translation>
</message>
<message>
- <source>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</source>
- <translation>Commissioni massime totali da includere in una singola transazione dal portamonete. Un'impostazione troppo bassa potrebbe provocare il fallimento di transazioni di grosse dimensioni (predefinito: %s)</translation>
+ <source>Prune configured below the minimum of %d MB. Please use a higher number.</source>
+ <translation>La modalità prune è configurata al di sotto del minimo di %d MB. Si prega di utilizzare un valore più elevato.</translation>
</message>
<message>
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
<translation>Ottiene gli indirizzi dei peer attraverso interrogazioni DNS, in caso di scarsa disponibilità (predefinito: 1 a meno che -connect non sia specificato)</translation>
</message>
<message>
- <source>Require high priority for relaying free or low-fee transactions (default:%u)</source>
- <translation>Richiedi alta priorità per la trasmissione di transazioni a zero o basse commissioni (predefinito:%u )</translation>
+ <source>Randomize credentials for every proxy connection. This enables Tor stream isolation (default: %u)</source>
+ <translation>Randomizza le credenziali per ogni connessione proxy. Permette la Tor stream isolation (predefinito: %u)</translation>
+ </message>
+ <message>
+ <source>Require high priority for relaying free or low-fee transactions (default: %u)</source>
+ <translation>Richiedi alta priorità per la trasmissione di transazioni a zero o basse commissioni (predefinito: %u)</translation>
</message>
<message>
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
@@ -3089,6 +3106,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<translation>Specifica il numero di thread per la generazione di bitcoin, se abilitata (-1 = tutti i core, predefinito: %d)</translation>
</message>
<message>
+ <source>The transaction amount is too small to send after the fee has been deducted</source>
+ <translation>L'importo della transazione risulta troppo basso per l'invio una volta dedotte le commissioni.</translation>
+ </message>
+ <message>
<source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit &lt;https://www.openssl.org/&gt; and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source>
<translation>Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso del Toolkit OpenSSL &lt;https://www.openssl.org/&gt;, software crittografico scritto da Eric Young e software UPnP scritto da Thomas Bernard.</translation>
</message>
@@ -3128,14 +3149,38 @@ Si raccomanda inoltre di configurare alertnotify in modo da ricevere notifiche d
<translation>I peer inclusi in whitelist non possono subire ban per DoS e le loro transazioni saranno sempre trasmesse, anche nel caso in cui si trovino già nel mempool. Ciò è utile ad es. per i gateway</translation>
</message>
<message>
+ <source>You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain</source>
+ <translation>Per ritornare alla modalità unpruned sarà necessario ricostruire il database utilizzando l'opzione -reindex. L'intera blockchain sarà riscaricata.</translation>
+ </message>
+ <message>
+ <source>(default: %u)</source>
+ <translation>(default: %u)</translation>
+ </message>
+ <message>
<source>Accept public REST requests (default: %u)</source>
<translation>Accetta richieste REST pubbliche (predefinito: %u)</translation>
</message>
<message>
+ <source>Activating best chain...</source>
+ <translation>Attivazione della blockchain migliore...</translation>
+ </message>
+ <message>
+ <source>Allow self signed root certificates (default: 0)</source>
+ <translation>Permette certificati radice auto-firmati (predefinito: 0)</translation>
+ </message>
+ <message>
+ <source>Can't run with a wallet in prune mode.</source>
+ <translation>Impossibile operare con un portamonete in modalità prune.</translation>
+ </message>
+ <message>
<source>Cannot resolve -whitebind address: '%s'</source>
<translation>Impossibile risolvere indirizzo -whitebind: '%s'</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Seleziona la cartella dati all'avvio (predefinito: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Connessione attraverso un proxy SOCKS5</translation>
</message>
@@ -3232,10 +3277,22 @@ Si raccomanda inoltre di configurare alertnotify in modo da ricevere notifiche d
<translation>Invia transazioni a zero commissioni se possibile (predefinito: %u)</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Imposta i certificati radice SSL per le richieste di pagamento (predefinito: -system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Imposta lingua, ad esempio "it_IT" (predefinito: lingua di sistema)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Mostra tutte le opzioni di debug (utilizzo: --help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Mostra finestra di presentazione all'avvio (predefinito: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Riduce il file debug.log all'avvio del client (predefinito: 1 se -debug non è impostato)</translation>
</message>
@@ -3244,6 +3301,14 @@ Si raccomanda inoltre di configurare alertnotify in modo da ricevere notifiche d
<translation>Firma transazione fallita</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Avvia ridotto a icona</translation>
+ </message>
+ <message>
+ <source>The transaction amount is too small to pay the fee</source>
+ <translation>L'importo della transazione è troppo basso per pagare la commissione</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Questo è un software sperimentale.</translation>
</message>
@@ -3264,6 +3329,10 @@ Si raccomanda inoltre di configurare alertnotify in modo da ricevere notifiche d
<translation>Transazione troppo grande</translation>
</message>
<message>
+ <source>UI Options:</source>
+ <translation>Opzioni Interfaccia Utente:</translation>
+ </message>
+ <message>
<source>Unable to bind to %s on this computer (bind returned error %s)</source>
<translation>Impossibile associarsi a %s su questo computer (l'associazione ha restituito l'errore %s)</translation>
</message>
@@ -3284,10 +3353,6 @@ Si raccomanda inoltre di configurare alertnotify in modo da ricevere notifiche d
<translation>Attenzione</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Attenzione: questa versione è obsoleta, aggiornamento necessario!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>Attenzione: Argomento -benchmark ignorato in quanto non supportato, usare -debug=bench.</translation>
</message>
@@ -3432,6 +3497,10 @@ Si raccomanda inoltre di configurare alertnotify in modo da ricevere notifiche d
<translation>Mantiene al massimo &lt;n&gt; connessioni verso i peer (predefinito: %u)</translation>
</message>
<message>
+ <source>Make the wallet broadcast transactions</source>
+ <translation>Configura il portamonete per la trasmissione di transazioni</translation>
+ </message>
+ <message>
<source>Maximum per-connection receive buffer, &lt;n&gt;*1000 bytes (default: %u)</source>
<translation>Buffer di ricezione massimo per connessione, &lt;n&gt;*1000 byte (predefinito: %u)</translation>
</message>
diff --git a/src/qt/locale/bitcoin_ja.ts b/src/qt/locale/bitcoin_ja.ts
index 99164abab4..d46d748ef2 100644
--- a/src/qt/locale/bitcoin_ja.ts
+++ b/src/qt/locale/bitcoin_ja.ts
@@ -156,10 +156,6 @@
<translation>パスフレーズの変更</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>新旧両方のパスフレーズを入力してください。</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>ウォレットの暗号化を確認する</translation>
</message>
@@ -172,6 +168,10 @@
<translation>本当にウォレットを暗号化しますか?</translation>
</message>
<message>
+ <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+ <translation>暗号化処理を完了させるため Bitcoin Core をいますぐ終了します。ウォレットの暗号化では、コンピュータに感染したマルウェアなどによるビットコインの盗難から完全に守ることはできないことにご注意ください。</translation>
+ </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>重要: 過去のウォレット ファイルのバックアップは、暗号化された新しいウォレット ファイルに取り替える必要があります。セキュリティ上の理由により、暗号化された新しいウォレットを使い始めると、暗号化されていないウォレット ファイルのバックアップはすぐに使えなくなります。</translation>
</message>
@@ -188,8 +188,8 @@
<translation>ウォレットの新しいパスフレーズを入力してください。&lt;br/&gt;&lt;b&gt;10文字以上のランダムな文字&lt;/b&gt;で構成されたものか、&lt;b&gt;8単語以上の単語&lt;/b&gt;で構成されたパスフレーズを使用してください。</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin は暗号化プロセスを終了するために今すぐ終了します。あなたのコンピュータがマルウェアに感染してコインを盗まれることもあるので、暗号化してもあなたのウォレットを完全に保護できないことを覚えていてください。</translation>
+ <source>Enter the old passphrase and new passphrase to the wallet.</source>
+ <translation>ウォレットの古いパスフレーズおよび新しいパスフレーズを入力してください。</translation>
</message>
<message>
<source>Wallet encryption failed</source>
@@ -311,10 +311,6 @@
<translation>Bitcoin アドレスにコインを送る</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Bitcoin の設定を変更する</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>ウォレットを他の場所にバックアップ</translation>
</message>
@@ -403,6 +399,10 @@
<translation>ビットコインコアについて (&amp;A)</translation>
</message>
<message>
+ <source>Modify configuration options for Bitcoin Core</source>
+ <translation>Bitcoin Core の設定を編集する</translation>
+ </message>
+ <message>
<source>Show the list of used sending addresses and labels</source>
<translation>使用済みの送金用アドレスとラベルの一覧を表示する</translation>
</message>
@@ -431,6 +431,10 @@
<translation>利用可能なブロックがありません...</translation>
</message>
<message numerus="yes">
+ <source>Processed %n block(s) of transaction history.</source>
+ <translation><numerusform>トランザクション履歴の %n ブロックを処理しました。</numerusform></translation>
+ </message>
+ <message numerus="yes">
<source>%n hour(s)</source>
<translation><numerusform>%n 時間</numerusform></translation>
</message>
@@ -478,15 +482,41 @@
<source>Up to date</source>
<translation>バージョンは最新です</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>トランザクション履歴の %n ブロックを処理しました。</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>追跡中...</translation>
</message>
<message>
+ <source>Date: %1
+</source>
+ <translation>日付: %1
+</translation>
+ </message>
+ <message>
+ <source>Amount: %1
+</source>
+ <translation>総額: %1
+</translation>
+ </message>
+ <message>
+ <source>Type: %1
+</source>
+ <translation>タイプ: %1
+</translation>
+ </message>
+ <message>
+ <source>Label: %1
+</source>
+ <translation>ラベル: %1
+</translation>
+ </message>
+ <message>
+ <source>Address: %1
+</source>
+ <translation>アドレス: %1
+</translation>
+ </message>
+ <message>
<source>Sent transaction</source>
<translation>送金取引</translation>
</message>
@@ -495,17 +525,6 @@
<translation>着金取引</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>日付: %1
-総額: %2
-種類: %3
-アドレス: %4</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>ウォレットは&lt;b&gt;暗号化されて、アンロックされています&lt;/b&gt;</translation>
</message>
@@ -696,6 +715,18 @@ Address: %4
<translation>なし</translation>
</message>
<message>
+ <source>This label turns red if the transaction size is greater than 1000 bytes.</source>
+ <translation>トランザクションのサイズが1000バイトを超える場合にはこのラベルは赤色になります。</translation>
+ </message>
+ <message>
+ <source>This label turns red if the priority is smaller than "medium".</source>
+ <translation>優先度が「中」未満の場合、このラベルは赤色になります。</translation>
+ </message>
+ <message>
+ <source>This label turns red if any recipient receives an amount smaller than %1.</source>
+ <translation>受取人のうち誰かの受取額が %1 未満の場合にこのラベルは赤色になります。</translation>
+ </message>
+ <message>
<source>Can vary +/- %1 satoshi(s) per input.</source>
<translation>ひとつの入力につき %1 satoshi 前後ずれることがあります。</translation>
</message>
@@ -708,10 +739,6 @@ Address: %4
<translation>いいえ</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>トランザクションサイズが1000バイトを超える場合にはこのラベルは赤くなります。</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>これは少なくとも1kBあたり %1 の手数料が必要であることを意味します。</translation>
</message>
@@ -724,14 +751,6 @@ Address: %4
<translation>より高い優先度を持つトランザクションの方がブロックに取り込まれやすくなります。</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>優先度が「中」未満の場合には、このラベルは赤くなります。</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>少なくともひとつの受取額が %1 を下回る場合にはこのラベルは赤くなります。</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(ラベル無し)</translation>
</message>
@@ -852,30 +871,6 @@ Address: %4
<source>command-line options</source>
<translation>コマンドライン オプション</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>UI オプション</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>言語設定 例: "de_DE" (初期値: システムの言語)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>最小化された状態で起動する</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>支払いリクエスト用にSSLルート証明書を設定する(デフォルト:-system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>起動時にスプラッシュ画面を表示する (初期値: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>起動時にデータ ディレクトリを選ぶ (初期値: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -958,14 +953,6 @@ Address: %4
<translation>メイン (&amp;M)</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>システムにログインした時に自動的に Bitcoin を起動します。</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>システムにログインした時に Bitcoin を起動 (&amp;S)</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>データベースキャッシュのサイズ (&amp;D)</translation>
</message>
@@ -990,6 +977,14 @@ Address: %4
<translation>プロキシのIPアドレス (例えば IPv4: 127.0.0.1 / IPv6: ::1)</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 Exit in the menu.</source>
+ <translation>ウィンドウを閉じる際にアプリケーションを終了するのではなく、最小化します。このオプションが有効化された場合、メニューから終了を選択した場合にのみアプリケーションは閉じられます。</translation>
+ </message>
+ <message>
+ <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin Core.</source>
+ <translation>ユーザ・インタフェイス言語はここで設定できます。この設定はBitcoin Coreの再起動後に有効となります。</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>トランザクションタブのコンテキストメニュー項目に表示する、サードパーティURL (例えばブロックエクスプローラ)。URL中の%sはトランザクションのハッシュ値に置き換えられます。垂直バー | で区切ることで、複数のURLを指定できます。</translation>
</message>
@@ -1014,6 +1009,14 @@ Address: %4
<translation>ネットワーク (&amp;N)</translation>
</message>
<message>
+ <source>Automatically start Bitcoin Core after logging in to the system.</source>
+ <translation>システムにログインした際、自動的にBitcoin Coreを起動する。</translation>
+ </message>
+ <message>
+ <source>&amp;Start Bitcoin Core on system login</source>
+ <translation>システムへログインした際にBitcoin Coreを起動する (&amp;S)</translation>
+ </message>
+ <message>
<source>(0 = auto, &lt;0 = leave that many cores free)</source>
<translation>(0 = 自動、0以上 = 指定した数のコアをフリーにする)</translation>
</message>
@@ -1078,10 +1081,6 @@ Address: %4
<translation>タスクバーの代わりにトレイに最小化 (&amp;M)</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>ウインドウが閉じられる時アプリケーションを終了せずに最小化します。このオプションが有効な時にアプリケーションを終了するにはメニューから終了を選択します。</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>閉じる時に最小化 (&amp;i)</translation>
</message>
@@ -1094,10 +1093,6 @@ Address: %4
<translation>ユーザインターフェースの言語 (&amp;l) :</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>ここでユーザインターフェースの言語を設定できます。設定を反映するには Bitcoin を再起動します。</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>額を表示する単位 (&amp;U) :</translation>
</message>
@@ -1134,8 +1129,8 @@ Address: %4
<translation>変更を有効化するにはクライアントを再起動する必要があります。</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>クライアントは停止されます。続行しますか?</translation>
+ <source>Client will be shut down. Do you want to proceed?</source>
+ <translation>クライアントを終了します。続行してもよろしいですか?</translation>
</message>
<message>
<source>This change would require a client restart.</source>
@@ -1244,10 +1239,6 @@ Address: %4
<translation>支払いリクエストのネットワークは現在のクライアントのネットワークに一致しません。</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>支払いのリクエストは期限切れです</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>支払いリクエストは開始されていません。</translation>
</message>
@@ -1280,10 +1271,18 @@ Address: %4
<translation>支払いリクエストファイルを読み込めませんでした!無効な支払いリクエストファイルにより引き起こされた可能性があります。</translation>
</message>
<message>
+ <source>Payment request expired.</source>
+ <translation>支払いリクエストの期限が切れました。</translation>
+ </message>
+ <message>
<source>Unverified payment requests to custom payment scripts are unsupported.</source>
<translation>カスタム支払いスクリプトに対する、検証されていない支払いリクエストはサポートされていません。</translation>
</message>
<message>
+ <source>Invalid payment request.</source>
+ <translation>無効な支払いリクエスト。</translation>
+ </message>
+ <message>
<source>Refund from %1</source>
<translation>%1 からの返金</translation>
</message>
@@ -1323,8 +1322,8 @@ Address: %4
<translation>ユーザエージェント</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>アドレス/ホスト名</translation>
+ <source>Node/Service</source>
+ <translation>ノード・サービス</translation>
</message>
<message>
<source>Ping Time</source>
@@ -1358,14 +1357,6 @@ Address: %4
<translation>%1秒</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>ネットワーク</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>未知</translation>
- </message>
- <message>
<source>None</source>
<translation>なし</translation>
</message>
@@ -1456,6 +1447,10 @@ Address: %4
<translation>現在のブロック数</translation>
</message>
<message>
+ <source>Open the Bitcoin Core debug log file from the current data directory. This can take a few seconds for large log files.</source>
+ <translation>現在のデータディレクトリからBitcoin Coreのデバッグ用ログファイルを開きます。ログファイルが巨大な場合、数秒かかることがあります。</translation>
+ </message>
+ <message>
<source>Received</source>
<translation>受取</translation>
</message>
@@ -1524,6 +1519,10 @@ Address: %4
<translation>Ping時間</translation>
</message>
<message>
+ <source>Time Offset</source>
+ <translation>時間オフセット</translation>
+ </message>
+ <message>
<source>Last block time</source>
<translation>最終ブロックの日時</translation>
</message>
@@ -1564,16 +1563,12 @@ Address: %4
<translation>デバッグ用ログファイル</translation>
</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>現在のデータ ディレクトリから Bitcoin のデバッグ用ログファイルを開きます。ログファイルが大規模な場合には数秒かかることがあります。</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>コンソールをクリア</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Bitcoin RPC コンソールへようこそ。</translation>
+ <source>Welcome to the Bitcoin Core RPC console.</source>
+ <translation>Bitcoin CoreのRPCコンソールへようこそ。</translation>
</message>
<message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
@@ -1864,14 +1859,6 @@ Address: %4
<translation>手数料設定を折りたたむ</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>最小化</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>カスタム手数料が1000satoshiに設定されている場合、トランザクションサイズが250バイトとすると、「1キロバイトあたり手数料」では250satoshiの手数料のみを支払いますが、「最小手数料」では1000satoshiを支払います。1キロバイトを超えるトランザクションの場合には、どちらの方法を選択したとしても1キロバイトあたりで支払われます。</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>1キロバイトあたり手数料</translation>
</message>
@@ -1880,6 +1867,10 @@ Address: %4
<translation>カスタム手数料が1000satoshiに設定されている場合、トランザクションサイズが250バイトとすると、「1キロバイトあたり手数料」では250satoshiの手数料のみを支払いますが、「最小手数料」では1000satoshiを支払います。1キロバイトを超えるトランザクションの場合には、どちらの方法を選択したとしても1キロバイトあたりで支払われます。</translation>
</message>
<message>
+ <source>Hide</source>
+ <translation>隠す</translation>
+ </message>
+ <message>
<source>total at least</source>
<translation>最小手数料</translation>
</message>
@@ -2000,10 +1991,6 @@ Address: %4
<translation>または</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>受取人のアドレスが不正です。再確認してください。</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>支払額は0より大きくないといけません。</translation>
</message>
@@ -2016,10 +2003,6 @@ Address: %4
<translation>%1 の取引手数料を含めると額が残高を超えています。</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>重複しているアドレスが見つかりました。1回の送信で同じアドレスに送ることは出来ません。</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>トラザクションの作成に失敗しました!</translation>
</message>
@@ -2028,16 +2011,28 @@ Address: %4
<translation>トランザクションは拒否されました。wallet.dat のコピーを使い、そしてコピーしたウォレットからコインを使用したことがマークされなかったときなど、ウォレットのいくつかのコインがすでに使用されている場合に、このエラーは起こるかもしれません。</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
- <translation>%1 よりも高い手数料は、異常に高い手数料だと考えられます。</translation>
+ <source>A fee higher than %1 is considered an absurdly high fee.</source>
+ <translation>%1 よりも高い手数料の場合、手数料が高すぎると判断されます。</translation>
+ </message>
+ <message>
+ <source>Payment request expired.</source>
+ <translation>支払いリクエストの期限が切れました。</translation>
+ </message>
+ <message numerus="yes">
+ <source>Estimated to begin confirmation within %n block(s).</source>
+ <translation><numerusform>%n ブロック以内に検証が開始されると予想されます。</numerusform></translation>
</message>
<message>
<source>Pay only the minimum fee of %1</source>
<translation>最小手数料 %1 のみを支払う</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>%1 ブロック以内に検証が終わると予想されます。</translation>
+ <source>The recipient address is not valid. Please recheck.</source>
+ <translation>受取アドレスが不正です。再チェックしてください。</translation>
+ </message>
+ <message>
+ <source>Duplicate address found: addresses should only be used once each.</source>
+ <translation>重複したアドレスが見つかりました: アドレスはそれぞれ一度のみ使用することができます。</translation>
</message>
<message>
<source>Warning: Invalid Bitcoin address</source>
@@ -2111,12 +2106,24 @@ Address: %4
<translation>この項目を削除する</translation>
</message>
<message>
+ <source>The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
+ <translation>送金する金額から手数料が差し引かれます。受取人は数量フィールドで指定した量よりも少ないビットコインを受け取ります。受取人が複数いる場合には、手数料は均等割されます。</translation>
+ </message>
+ <message>
+ <source>S&amp;ubtract fee from amount</source>
+ <translation>送金額から手数料を差し引く (&amp;U)</translation>
+ </message>
+ <message>
<source>Message:</source>
<translation>メッセージ:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>これは検証済みの支払リクエストです。</translation>
+ <source>This is an unauthenticated payment request.</source>
+ <translation>これは未認証の支払いリクエストです。</translation>
+ </message>
+ <message>
+ <source>This is an authenticated payment request.</source>
+ <translation>これは認証済みの支払いリクエストです。</translation>
</message>
<message>
<source>Enter a label for this address to add it to the list of used addresses</source>
@@ -2127,10 +2134,6 @@ Address: %4
<translation>bitcoin: URIに添付されていたメッセージです。これは参照用としてトランザクションとともに保存されます。注意:このメッセージはBitcoinネットワークを通して送信されるわけではありません。</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>これは未検証の支払リクエストです。</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>支払先:</translation>
</message>
@@ -2161,8 +2164,8 @@ Address: %4
<translation>メッセージの署名 (&amp;S)</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>あなた自身を立証するためにあなたのアドレスでメッセージに署名することができます。フィッシング攻撃によってあなたを騙して署名を譲渡させようとするかもしれないので、不明確なものは絶対に署名しないように注意してください。あなたが同意する完全に詳細な声明にだけ署名してください。</translation>
+ <source>You can sign messages/agreements with your addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
+ <translation>あなたの所有しているアドレスによりメッセージや合意書に署名をすることで、それらアドレスに対して送られたビットコインを受け取ることができることを証明できます。フィッシング攻撃により不正にあなたの識別情報を署名させられてしまうことを防ぐために、不明確なものやランダムなものに対して署名しないよう注意してください。合意することが可能な、よく詳細の記された文言にのみ署名するようにしてください。</translation>
</message>
<message>
<source>The Bitcoin address to sign the message with</source>
@@ -2217,8 +2220,8 @@ Address: %4
<translation>メッセージの検証 (&amp;V)</translation>
</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>メッセージを検証するために、署名するアドレスとメッセージ(改行、スペース、タブなどを正確にコピーしてください)、そして署名を入力します。中間者攻撃によってだまされることを避けるために、署名されたメッセージそのものよりも、署名を読み取られないように注意してください。</translation>
+ <source>Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction!</source>
+ <translation>受取人のアドレスとメッセージ(改行やスペース、タブなども完全に一致するよう注意してください)および署名を以下に入力し、メッセージの署名を検証してください。中間者攻撃により騙されるのを防ぐため、署名対象のメッセージに書かれていること以上の意味を署名から読み取ろうとしないよう注意してください。これは署名作成者がこのアドレスで受け取ったことを証明するだけであり、トランザクションの送信権限を証明するものではないことに注意してください!</translation>
</message>
<message>
<source>The Bitcoin address the message was signed with</source>
@@ -2484,10 +2487,6 @@ Address: %4
<translation>タイプ</translation>
</message>
<message>
- <source>Address</source>
- <translation>Helbidea</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>未成熟(%1検証。%2検証完了後に使用可能となります)</translation>
</message>
@@ -2516,6 +2515,10 @@ Address: %4
<translation>オフライン</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>ラベル</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>未検証</translation>
</message>
@@ -2572,8 +2575,8 @@ Address: %4
<translation>監視限定アドレスがこのトランザクションに含まれているかどうか</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>取引の宛先アドレス。</translation>
+ <source>User-defined intent/purpose of the transaction.</source>
+ <translation>ユーザ定義のトランザクションの意図や目的。</translation>
</message>
<message>
<source>Amount removed from or added to balance.</source>
@@ -2818,6 +2821,10 @@ Address: %4
<translation>指定のアドレスへバインドし、その上で常にリスンします。IPv6 は [ホスト名]:ポート番号 と表記します</translation>
</message>
<message>
+ <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default: %u)</source>
+ <translation>継続的に無料トランザクションのレートを一分間に&lt;n&gt;*1000バイトに制限する (規定値: %u)</translation>
+ </message>
+ <message>
<source>Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup</source>
<translation>ウォレットの全トランザクションを削除し、これらを-rescanオプションを用いることで起動時にブロックチェインのデータのみからリカバリします。</translation>
</message>
@@ -2838,6 +2845,14 @@ Address: %4
<translation>このモードでは -genproclimit は何個のブロックをただちに生成するのか制御します。</translation>
</message>
<message>
+ <source>Maximum total fees to use in a single wallet transaction; setting this too low may abort large transactions (default: %s)</source>
+ <translation>ひとつのウォレットトランザクションで使用する合計手数料の最大値。低すぎる値を指定すると巨大なトランザクションの作成ができなくなります (規定値: %s)</translation>
+ </message>
+ <message>
+ <source>Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, &gt;%u = target size in MiB to use for block files)</source>
+ <translation>古いブロックを剪定する(削除する)ことで記憶容量の必要量を削減する。このモードを有効にするとウォレット機能のサポートは無効になり、-txindexとも互換性がなくなります。警告: この設定の再有効化には全ブロックチェインの再ダウンロードが必要となります。(規定値: 0 = ブロックの剪定無効、&gt;%u = ブロックファイルに使用するMiB単位の目標サイズ)</translation>
+ </message>
+ <message>
<source>Set the number of script verification threads (%u to %d, 0 = auto, &lt;0 = leave that many cores free, default: %d)</source>
<translation>スクリプト検証スレッドを設定 (%uから%dの間, 0 = 自動, &lt;0 = たくさんのコアを自由にしておく, 初期値: %d)</translation>
</message>
@@ -2907,10 +2922,6 @@ Address: %4
<translation>デバッグ/テスト用オプション:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>自分の IP アドレスを発見 (初期値: リスン中と -externalip を使用していない場合は1)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>ウォレットは読み込まず、ウォレットRPCコールを無効化する</translation>
</message>
@@ -2971,8 +2982,12 @@ Address: %4
<translation>&lt;net&gt; (ipv4, ipv6 または onion) ネットワーク内のノードだけに接続する</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>現在の blk000??.dat ファイルからブロック チェーンのインデックスを再構築</translation>
+ <source>Prune cannot be configured with a negative value.</source>
+ <translation>剪定値は負の値に設定できません。</translation>
+ </message>
+ <message>
+ <source>Prune mode is incompatible with -txindex.</source>
+ <translation>剪定モードは-txindexと互換性がありません。</translation>
</message>
<message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
@@ -3011,6 +3026,10 @@ Address: %4
<translation>ウォレットオプション:</translation>
</message>
<message>
+ <source>Warning: This version is obsolete; upgrade required!</source>
+ <translation>警告: このバージョンはサポートされません。アップグレードが必要です!</translation>
+ </message>
+ <message>
<source>You need to rebuild the database using -reindex to change -txindex</source>
<translation>-txindex を変更するには -reindex を使用してデータベースを再構築する必要があります</translation>
</message>
@@ -3039,14 +3058,14 @@ Address: %4
<translation>データ ディレクトリ %s のロックを取得することができません。おそらく Bitcoin Core は実行中です。</translation>
</message>
<message>
- <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</source>
- <translation>手数料ゼロのトランザクションのリレー速度を一分間あたり &lt;n&gt;*1000 バイトに常に制限する (初期値: %u)</translation>
- </message>
- <message>
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
<translation>umask 077 ではなく、システムのデフォルトパーミッションで新規ファイルを作成する (ウォレット機能が無効化されていた場合にのみ有効)</translation>
</message>
<message>
+ <source>Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)</source>
+ <translation>自分のIPアドレスを解決する (規定値: リッスンをしており、-externalipまたは-proxyオプションが指定されていない場合は1)</translation>
+ </message>
+ <message>
<source>Error: Listening for incoming connections failed (listen returned error %s)</source>
<translation>エラー: 内向きの接続をリッスンするのに失敗しました (エラー %s が返却されました)</translation>
</message>
@@ -3079,16 +3098,20 @@ Address: %4
<translation>中継および採掘を行う際の、データ運送トランザクションの中のデータの最大サイズ (初期値: %u)</translation>
</message>
<message>
- <source>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</source>
- <translation>ひとつのウォレットトランザクションで使用する合計手数料の最大値。低く設定し過ぎると大きなトランザクションの生成に失敗することがあります (初期値: %s)</translation>
+ <source>Prune configured below the minimum of %d MB. Please use a higher number.</source>
+ <translation>剪定が最小値の %d MB以下に設定されています。もっと大きな値を使用してください。</translation>
</message>
<message>
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
<translation>保有するピアアドレスが少ない場合、DNS ルックアップによりピアアドレスを問い合わせる (-connect を使っていない場合の初期値: 1)</translation>
</message>
<message>
- <source>Require high priority for relaying free or low-fee transactions (default:%u)</source>
- <translation>手数料なし、または低手数料のトランザクションのリレー時に高い優先度を要求する (初期値: %u)</translation>
+ <source>Randomize credentials for every proxy connection. This enables Tor stream isolation (default: %u)</source>
+ <translation>認証情報をプロキシー接続ごとにランダム化する。これによりTorストリーム分離をすることができます (規定値: %u)</translation>
+ </message>
+ <message>
+ <source>Require high priority for relaying free or low-fee transactions (default: %u)</source>
+ <translation>無料や低い手数料のトランザクションのリレーに際し、高い優先度を要求する (規定値: %u)</translation>
</message>
<message>
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
@@ -3099,6 +3122,10 @@ Address: %4
<translation>コイン生成が有効になっていた場合の利用スレッド数を設定する (-1 = すべてのコア, 初期値: %d)</translation>
</message>
<message>
+ <source>The transaction amount is too small to send after the fee has been deducted</source>
+ <translation>手数料差引後のトランザクションの金額が小さすぎるため、送金できません。</translation>
+ </message>
+ <message>
<source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit &lt;https://www.openssl.org/&gt; and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source>
<translation>この製品はOpenSSLプロジェクトにより開発されたソフトウェアをOpenSSLツールキットとして利用しています &lt;https://www.openssl.org/&gt;。また、Eric Young氏により開発された暗号ソフトウェア、Thomas Bernard氏により書かれたUPnPソフトウェアを用いています。</translation>
</message>
@@ -3139,14 +3166,38 @@ rpcpassword=%s
<translation>ホワイトリストのピアはDoSによるアクセス禁止処理が無効化され、トランザクションは例えmempool内に既に存在していたとしても常にリレーされます。これは例えばゲートウェイに対して有用です</translation>
</message>
<message>
+ <source>You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain</source>
+ <translation>非剪定モードに戻るためには-reindexオプションを使用してデータベースを再構築する必要があります。これによりブロックチェイン全体の再ダウンロードが行われます。</translation>
+ </message>
+ <message>
+ <source>(default: %u)</source>
+ <translation>(規定値: %u)</translation>
+ </message>
+ <message>
<source>Accept public REST requests (default: %u)</source>
<translation>公開 REST リクエストを許可する (初期値: %u)</translation>
</message>
<message>
+ <source>Activating best chain...</source>
+ <translation>最優良のチェインを有効化しています...</translation>
+ </message>
+ <message>
+ <source>Allow self signed root certificates (default: 0)</source>
+ <translation>自己署名ルート証明書を許可する (規定値: 0)</translation>
+ </message>
+ <message>
+ <source>Can't run with a wallet in prune mode.</source>
+ <translation>剪定モードではウォレット機能付きで起動できません。</translation>
+ </message>
+ <message>
<source>Cannot resolve -whitebind address: '%s'</source>
<translation>-whitebind アドレス '%s' を解決できません</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>起動時にデータ ディレクトリを選ぶ (初期値: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>SOCKS5 プロキシ経由で接続する</translation>
</message>
@@ -3243,10 +3294,22 @@ rpcpassword=%s
<translation>可能な場合には手数料ゼロのトランザクションとしてトランザクションを送信する (初期値: %u)</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>支払いリクエスト用にSSLルート証明書を設定する(デフォルト:-system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>言語設定 例: "de_DE" (初期値: システムの言語)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>すべてのデバッグオプションを表示する (使い方: --help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>起動時にスプラッシュ画面を表示する (初期値: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>クライアント起動時に debug.log ファイルを縮小 (初期値: -debug オプションを指定しない場合は1)</translation>
</message>
@@ -3255,6 +3318,14 @@ rpcpassword=%s
<translation>取引の署名に失敗しました</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>最小化された状態で起動する</translation>
+ </message>
+ <message>
+ <source>The transaction amount is too small to pay the fee</source>
+ <translation>トランザクションの金額が小さすぎて手数料を支払えません</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>これは実験的なソフトウェアです。</translation>
</message>
@@ -3275,6 +3346,10 @@ rpcpassword=%s
<translation>取引が大き過ぎます</translation>
</message>
<message>
+ <source>UI Options:</source>
+ <translation>UIオプション:</translation>
+ </message>
+ <message>
<source>Unable to bind to %s on this computer (bind returned error %s)</source>
<translation>このコンピュータの %s にバインドすることができません (バインドが返したエラーは %s)</translation>
</message>
@@ -3295,10 +3370,6 @@ rpcpassword=%s
<translation>警告</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>警告: このバージョンは古いのでアップグレードが必要です!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>警告: サポートされていない引数 -benchmark は無視されました。-debug=bench を使用してください。</translation>
</message>
@@ -3443,6 +3514,10 @@ rpcpassword=%s
<translation>ピアの接続数を最大でも &lt;n&gt; 個に維持する (初期値: %u)</translation>
</message>
<message>
+ <source>Make the wallet broadcast transactions</source>
+ <translation>ウォレットのトランザクションをブロードキャストする</translation>
+ </message>
+ <message>
<source>Maximum per-connection receive buffer, &lt;n&gt;*1000 bytes (default: %u)</source>
<translation>接続毎の最大受信バッファ &lt;n&gt;*1000 バイト (初期値: %u)</translation>
</message>
diff --git a/src/qt/locale/bitcoin_ka.ts b/src/qt/locale/bitcoin_ka.ts
index 732081efda..0b96a18d18 100644
--- a/src/qt/locale/bitcoin_ka.ts
+++ b/src/qt/locale/bitcoin_ka.ts
@@ -148,10 +148,6 @@
<translation>ფრაზა-პაროლის შეცვლა</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>შეიყვანეთ საფულის ძველი და ახალი ფრაზა-პაროლი.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>დაადასტურეთ საფულის დაშიფრვა</translation>
</message>
@@ -176,10 +172,6 @@
<translation>საფულე დაშიფრულია</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>ახლა Bitcoin დაიხურება დაშიფრვის პროცესის დასასრულებლად. გაითვალისწინეთ, რომ დაშიფრვა სრულად ვერ დაიცავს თქვენს ბითქოინებს თქვენს კომპიუტერში შემოპარული მავნე პროგრამების საშუალებით დატაცებისაგან.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>ვერ მოხერხდა საფულის დაშიფრვა</translation>
</message>
@@ -295,10 +287,6 @@
<translation>მონეტების გაგზავნა Bitcoin-მისამართზე</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Bitcoin-ის საკონფიგურაციო პარამეტრების ცვლილება</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>საფულის არქივირება სხვა ადგილზე</translation>
</message>
@@ -451,18 +439,6 @@
<translation>მიღებული ტრანსაქციები</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>თარიღი: %1
-თანხა: %2
-ტიპი: %3
-მისამართი: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>საფულე &lt;b&gt;დაშიფრულია&lt;/b&gt; და ამჟამად &lt;b&gt;განბლოკილია&lt;/b&gt;</translation>
</message>
@@ -641,10 +617,6 @@ Address: %4
<translation>არა</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>ნიშნული წითლდება, როცა ტრანსაქციის ზომა 1000 ბაიტზე მეტია.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>ეს ნიშნავს, რომ კილობაიტზე საკომისიო იქნება მინიმუმ %1</translation>
</message>
@@ -657,14 +629,6 @@ Address: %4
<translation>მეტი პრიორიტეტის ტრანსაქციებს მეტი შანსი აქვს მოხვდეს ბლოკში.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>ნიშნული წითლდება, როცა პრიორიტეტი "საშუალო"-ზე დაბალია.</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>ნიშნული წითლდება, როცა რომელიმე რეციპიენტი მიიღებს %1-ზე ნაკლებს.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(არ არის ნიშნული)</translation>
</message>
@@ -781,26 +745,6 @@ Address: %4
<source>command-line options</source>
<translation>კომანდების ზოლის ოპციები</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>ინტერფეისის პარამეტრები</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>აირჩიეთ ენა, მაგალითად "de_DE" (ნაგულისხმევია სისტემური ლოკალი)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>გაშვება მინიმიზებული ეკრანით</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>მისალმების ეკრანის ჩვენება გაშვებისას (ნაგულისხმევი:1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>მონაცემთა კატალოგის მითითება ყოველი გაშვებისას (ნაგულისხმევი: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -867,14 +811,6 @@ Address: %4
<translation>&amp;მთავარი</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>სისტემაში შესვლის შემდეგ Bitcoin-ის ავტომატური გაშვება.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;სისტემაში შესვლისას გაშვება</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>მონაცემთა ბაზის კეშის სი&amp;დიდე</translation>
</message>
@@ -947,10 +883,6 @@ Address: %4
<translation>&amp;მინიმიზება სისტემურ ზონაში პროგრამების პანელის ნაცვლად</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>პროგრამის მინიმიზება ფანჯრის დახურვისას. ოპციის ჩართვის შემდეგ პროგრამის დახურვა შესაძლებელი იქნება მხოლოდ მენიუდან - პუნქტი "გასვლა".</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>მ&amp;ინიმიზება დახურვისას</translation>
</message>
@@ -963,10 +895,6 @@ Address: %4
<translation>სამომხმარებ&amp;ლო ენა:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>აქ შეგიძლიათ აირჩიოთ სამომხმარებლო ენა. ძალაში შევა Bitcoin-ის რესტარტის შემდეგ.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>ერთეუ&amp;ლი:</translation>
</message>
@@ -1003,10 +931,6 @@ Address: %4
<translation>ცვლილებები ძალაში შევა კლიენტის ხელახალი გაშვების შემდეგ.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>კლიენტი დაიხურება, გავაგრძელოთ?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>ამ ცვლილებების ძალაში შესასვლელად საჭიროა კლიენტის დახურვა და ხელახალი გაშვება.</translation>
</message>
@@ -1253,18 +1177,10 @@ Address: %4
<translation>დახვეწის ლოგ-ფაილი</translation>
</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>გახსენით Bitcoin-ის დახვეწის ლოგ-ფაილი მიმდინარე კატალოგიდან. დიდი ლოგ-ფაილის შემთხვევაში ამას შეიძლება რამდენიმე წამი მოუნდეს.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>კონსოლის გასუფთავება</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>მოგესალმებათ Bitcoin-ის RPC კონსოლი.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>კლავიშები "ზევით" და "ქვევით" - ისტორიაში მოძრაობა, &lt;b&gt;Ctrl-L&lt;/b&gt; - ეკრანის გასუფთავება.</translation>
</message>
@@ -1589,10 +1505,6 @@ Address: %4
<translation>ან</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>მიმღების მისამართი არასწორია, შეამოწმეთ.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>გადახდის მოცულობა 0-ზე მეტი უნდა იყოს</translation>
</message>
@@ -1601,10 +1513,6 @@ Address: %4
<translation>თანხა აღემატება თქვენს ბალანსს</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>მისამართები დუბლირებულია, დაშვებულია ერთ ჯერზე თითო მისამართზე ერთხელ გაგზავნა.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>შეცდომა ტრანსაქციის შექმნისას!</translation>
</message>
@@ -1680,10 +1588,6 @@ Address: %4
<translation>მესიჯი:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>ეს არის ვერიფიცირებული გადახდის მოთხოვნა.</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>შეიყვანეთ ამ მისამართის ნიშნული გამოყენებული მისამართების სიაში დასამატებლად</translation>
</message>
@@ -1692,10 +1596,6 @@ Address: %4
<translation>მესიჯი, რომელიც თან ერთვის მონეტებს: URI, რომელიც შეინახება ტრანსაქციასთან ერთად თქვენთვის. შენიშვნა: მესიჯი არ გაყვება გადახდას ბითქოინის ქსელში.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>ეს არის არავერიფიცირებული გადახდის მოთხოვნა.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>ადრესატი:</translation>
</message>
@@ -1726,10 +1626,6 @@ Address: %4
<translation>მე&amp;სიჯის ხელმოწერა</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>ხელმოწერით თქვენ ადასტურებთ, რომ მესიჯი თქვენია. ფრთხილად - არ მოაწეროთ ხელი რაიმე საეჭვოს: ფიშინგური ხრიკებით შეიძლება ის თქვენს მესიჯად გაასაღონ. მოაწერეთ ხელი მხოლოდ იმას, რასაც ყველა წვრილმანში ეთანხმებით.</translation>
- </message>
- <message>
<source>Choose previously used address</source>
<translation>აირჩიეთ ადრე გამოყენებული მისამართი</translation>
</message>
@@ -1778,10 +1674,6 @@ Address: %4
<translation>მესიჯის &amp;ვერიფიკაცია</translation>
</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>შეიყვანეთ ხელმოწერის მისამართი, მესიჯი (დაუკვირდით, რომ ზუსტად იყოს კოპირებული სტრიქონის გადატანები, ჰარები, ტაბულაციები და სხვ) და ხელმოწერა მესიჯის ვერიფიკაციისათვის. მიაქციეთ ყურადღება, რომ რაიმე ზედმეტი არ გაგყვეთ კოპირებისას, რათა არ გახდეთ "man-in-the-middle" შეტევის ობიექტი.</translation>
- </message>
- <message>
<source>Verify the message to ensure it was signed with the specified Bitcoin address</source>
<translation>შეამოწმეთ, რომ მესიჯი ხელმოწერილია მითითებული Bitcoin-მისამართით</translation>
</message>
@@ -2017,10 +1909,6 @@ Address: %4
<translation>ტიპი</translation>
</message>
<message>
- <source>Address</source>
- <translation>მისამართი</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>არ არის მომწიფებული (%1 დასტური, საჭიროა სულ %2)</translation>
</message>
@@ -2045,6 +1933,10 @@ Address: %4
<translation>ოფლაინშია</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>ნიშნული</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>დაუდასტურებელია</translation>
</message>
@@ -2093,10 +1985,6 @@ Address: %4
<translation>ტრანსაქციის ტიპი.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>ტრანსაქიის დანიშნულების მისამართი.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>ბალანსიდან მოხსნილი ან დამატებული თანხა.</translation>
</message>
@@ -2383,10 +2271,6 @@ Address: %4
<translation>შენიშნულია ბლოკთა ბაზის დაზიანება</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>საკუთარი IP-მისამართის განსაზღვრა (ნაგულისხმევი: 1 თუ ჩართულია მიყურადება და არ გამოიყენება -externalip)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>არ ჩაიტვირთოს საფულე და აიკრძალოს საფულისადმი RPC-მიმართვები</translation>
</message>
@@ -2435,10 +2319,6 @@ Address: %4
<translation>არ არის საკმარისი ფაილ-დესკრიპტორები.</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>ბლოკთა ჯაჭვის ინდექსის ხელახლა აგება blk000??.dat ფაილიდან</translation>
- </message>
- <message>
<source>Set maximum block size in bytes (default: %d)</source>
<translation>ბლოკის მაქსიმალური ზომის განსაზღვრა ბაიტებში (ნადულისხმევი: %d)</translation>
</message>
@@ -2483,6 +2363,10 @@ Address: %4
<translation>მაღალპრიორიტეტული/დაბალსაკომისიოიანი ტრანსაქციების მაქსიმალური ზომა ბაიტებში (ნაგულისხმევი: %d)</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>მონაცემთა კატალოგის მითითება ყოველი გაშვებისას (ნაგულისხმევი: 0)</translation>
+ </message>
+ <message>
<source>Information</source>
<translation>ინფორმაცია</translation>
</message>
@@ -2499,6 +2383,14 @@ Address: %4
<translation>ტრასირების/დახვეწის ინფოს გაგზავნა კონსოლზე debug.log ფაილის ნაცვლად</translation>
</message>
<message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>აირჩიეთ ენა, მაგალითად "de_DE" (ნაგულისხმევია სისტემური ლოკალი)</translation>
+ </message>
+ <message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>მისალმების ეკრანის ჩვენება გაშვებისას (ნაგულისხმევი:1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>debug.log ფაილის შეკუმშვა გაშვებისას (ნაგულისხმევია: 1 როცა არ აყენია -debug)</translation>
</message>
@@ -2507,6 +2399,10 @@ Address: %4
<translation>ტრანსაქციების ხელმოწერა ვერ მოხერხდა</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>გაშვება მინიმიზებული ეკრანით</translation>
+ </message>
+ <message>
<source>Transaction amount too small</source>
<translation>ტრანსაქციების რაოდენობა ძალიან ცოტაა</translation>
</message>
@@ -2531,10 +2427,6 @@ Address: %4
<translation>გაფრთხილება</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>ყურადღება: ვერსია მოძველებულია, საჭიროა განახლება!</translation>
- </message>
- <message>
<source>Zapping all transactions from wallet...</source>
<translation>ტრანსაქციების ჩახსნა საფულიდან...</translation>
</message>
diff --git a/src/qt/locale/bitcoin_kk_KZ.ts b/src/qt/locale/bitcoin_kk_KZ.ts
index 5e827caa44..4cc709fdb2 100644
--- a/src/qt/locale/bitcoin_kk_KZ.ts
+++ b/src/qt/locale/bitcoin_kk_KZ.ts
@@ -373,8 +373,8 @@
<translation>Күні</translation>
</message>
<message>
- <source>Address</source>
- <translation>Адрес</translation>
+ <source>Label</source>
+ <translation>таңба</translation>
</message>
</context>
<context>
diff --git a/src/qt/locale/bitcoin_ko_KR.ts b/src/qt/locale/bitcoin_ko_KR.ts
index 211f850c18..d9ce8ea1be 100644
--- a/src/qt/locale/bitcoin_ko_KR.ts
+++ b/src/qt/locale/bitcoin_ko_KR.ts
@@ -148,10 +148,6 @@
<translation>암호 변경</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>지갑의 예전 암호와 새로운 암호를 입력</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>지갑의 암호화를 확정</translation>
</message>
@@ -176,10 +172,6 @@
<translation>지갑 암호화 완료</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>암호화 처리 과정을 끝내기 위해 비트코인을 종료합니다. 지갑 암호화는 컴퓨터로의 멀웨어 감염으로 인한 비트코인 도난을 완전히 방지할 수 없음을 기억하세요.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>지갑 암호화 실패</translation>
</message>
@@ -299,10 +291,6 @@
<translation>비트코인 주소로 코인 전송</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>비트코인 설정 옵션 수정</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>지갑을 다른장소에 백업</translation>
</message>
@@ -471,18 +459,6 @@
<translation>들어오고 있는 거래</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>날짜: %1
-거래액: %2
-형식: %3
-주소: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>지갑이 암호화 되었고 현재 차단해제 되었습니다</translation>
</message>
@@ -661,10 +637,6 @@ Address: %4
<translation>아니요</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>만약 거래 양이 1000bytes 보다 크면 제목이 빨간색으로 변합니다</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>이 의미는 수수료가 최소한 %1 per 키로바이트 필요합니다</translation>
</message>
@@ -673,10 +645,6 @@ Address: %4
<translation>우선 순위가 높은 거래의 경우 블럭에 포함될 가능성이 더 많습니다.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>우선권이 중간보다 작으면 제목이 빨간색으로 변합니다. </translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(표 없음)</translation>
</message>
@@ -789,30 +757,6 @@ Address: %4
<source>command-line options</source>
<translation>명령줄 옵션</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>UI 옵션</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>"de_DE"와 같이 언어를 설정하십시오 (기본값: 시스템 로캘)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>최소화 상태에서 시작</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>지불 요청을 위해 SSL 최상위 인증을 설정합니다. (기본값: -system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>시작시 시작 화면 표시 (기본값: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>파일목록을 선택하여 시작하시오(기본값: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -883,14 +827,6 @@ Address: %4
<translation>메인(&amp;M)</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>시스템 로그인후에 비트코인을 자동으로 시작합니다.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>시스템 로그인시 비트코인 시작(&amp;S)</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>데이터베이스 캐시 크기</translation>
</message>
@@ -983,10 +919,6 @@ Address: %4
<translation>작업 표시줄 대신 트레이로 최소화(&amp;M)</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>창을 닫으면 프로그램에서 나가지 않고 최소화합니다. 이 옵션을 활성화하면, 프로그램은 메뉴에서 나가기를 선택한 후에만 닫힙니다.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>닫을때 최소화(&amp;I)</translation>
</message>
@@ -999,10 +931,6 @@ Address: %4
<translation>사용자 인터페이스 언어(&amp;L):</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>사용자 인터페이스 언어를 여기서 설정할 수 있습니다. 이 설정은 비트코인을 다시 시작할때 적용됩니다.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>거래액을 표시할 단위(&amp;U):</translation>
</message>
@@ -1039,10 +967,6 @@ Address: %4
<translation>변경 사항을 적용하기 위해서는 프로그램이 종료 후 재시작되어야 합니다.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>클라이언트가 종료됩니다, 계속 진행하시겠습니까?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>이 변경 사항 적용을 위해 프로그램 재시작이 필요합니다. </translation>
</message>
@@ -1289,18 +1213,10 @@ Address: %4
<translation>로그 파일 디버그</translation>
</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>비트코인 디버그 로그파일을 현재 데이터 폴더에서 여십시요. 용량이 큰 로그 파일들은 몇 초가 걸릴 수 있습니다.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>콘솔 초기화</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>비트코인 RPC 콘솔에 오신걸 환영합니다</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>기록을 찾아보려면 위 아래 화살표 키를, 화면을 지우려면 &lt;b&gt;Ctrl-L&lt;/b&gt;키를 사용하십시오.</translation>
</message>
@@ -1597,10 +1513,6 @@ Address: %4
<translation>또는</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>수령인 주소가 정확하지 않습니다. 재확인 바랍니다</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>지불하는 금액은 0 보다 커야 합니다.</translation>
</message>
@@ -1613,10 +1525,6 @@ Address: %4
<translation>%1 의 거래수수료를 포함하면 잔고를 초과합니다.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>두개 이상의 주소입니다. 한번에 하나의 주소에만 작업할 수 있습니다.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>거래를 생성하는 것을 실패하였습니다</translation>
</message>
@@ -1692,10 +1600,6 @@ Address: %4
<translation>메시지:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>지급 확인요청입니다.</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>사용된 주소 목록에 새 주소를 추가하기 위해 제목을 입력합니다. </translation>
</message>
@@ -1704,10 +1608,6 @@ Address: %4
<translation>비트코인에 첨부된 메시지: 참고용으로 거래와 함께 저장될 URI. 메모: 이 메시지는 비트코인 네트워크로 전송되지 않습니다.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>지급요청 미확인입니다</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>송금할 대상 : </translation>
</message>
@@ -1738,10 +1638,6 @@ Address: %4
<translation>메시지 서명(&amp;S)</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>여러분 자신을 증명하기 위해 주소를 첨가하고 섬여할 수 있습니다. 피싱 공격으로 말미암아 여러분의 서명을 통해 속아 넘어가게 할 수 있으므로, 서명하지 않은 어떤 모호한 요소든 주의하십시오. 동의하는 완전 무결한 조항에만 서명하십시오.</translation>
- </message>
- <message>
<source>Choose previously used address</source>
<translation>이전에 사용한 주소를 선택하십시오</translation>
</message>
@@ -1790,10 +1686,6 @@ Address: %4
<translation>메시지 검증(&amp;V)</translation>
</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>메시지를 검증하기 위해 아래 칸에 각각 지갑 주소와 메시지, 전자서명을 입력하세요. (메시지 원본의 띄어쓰기, 들여쓰기, 행 나눔 등이 정확하게 입력되어야 하므로 원본을 복사해서 입력하세요) 이 기능은 메시지 검증이 주 목적이며, 네트워크 침입자에 의해 변조되지 않도록 전자서명 해독에 불필요한 시간을 소모하지 마세요. </translation>
- </message>
- <message>
<source>Verify the message to ensure it was signed with the specified Bitcoin address</source>
<translation>정확한 비트코인주소가 입력됬는지 메시지를 확인하시오</translation>
</message>
@@ -2029,10 +1921,6 @@ Address: %4
<translation>종류</translation>
</message>
<message>
- <source>Address</source>
- <translation>주소</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>충분히 숙성되지 않은 상태 (%1 승인, %2 후에 사용 가능합니다)</translation>
</message>
@@ -2057,6 +1945,10 @@ Address: %4
<translation>오프라인</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>표</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>미확인</translation>
</message>
@@ -2105,10 +1997,6 @@ Address: %4
<translation>거래의 종류.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>거래가 도달할 주소</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>변경된 잔고.</translation>
</message>
@@ -2399,10 +2287,6 @@ Address: %4
<translation>디버그 및 테스트 설정</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>자신의 아이피 주소를 발견합니다 (기본값: 1 반응이 없거나 외부 아이피가 없을 때)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>지갑 불러오기를 하지마시오 또한 지갑 RPC 연결을 차단하십시오</translation>
</message>
@@ -2451,10 +2335,6 @@ Address: %4
<translation>사용 가능한 파일 디스크립터-File Descriptor-가 부족합니다. </translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>현재의 blk000??.dat 파일들로부터 블록체인 색인을 재구성합니다.</translation>
- </message>
- <message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation>데이터베이스 케시 크기를 메가바이트로 설정(%d 부터 %d, 기본값: %d)</translation>
</message>
@@ -2503,6 +2383,10 @@ Address: %4
<translation>최대 크기를 최우선으로 설정 / 바이트당 최소 수수료로 거래(기본값: %d)</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>파일목록을 선택하여 시작하시오(기본값: 0)</translation>
+ </message>
+ <message>
<source>Information</source>
<translation>정보</translation>
</message>
@@ -2531,10 +2415,22 @@ Address: %4
<translation>추적오류 정보를 degug.log 자료로 보내는 대신 콘솔로 보내기</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>지불 요청을 위해 SSL 최상위 인증을 설정합니다. (기본값: -system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>"de_DE"와 같이 언어를 설정하십시오 (기본값: 시스템 로캘)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>모든 디버그 설정 보기(설정: --help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>시작시 시작 화면 표시 (기본값: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>클라이언트 시작시 debug.log 파일 비우기(기본값: 디버그 안할때 1)</translation>
</message>
@@ -2543,6 +2439,10 @@ Address: %4
<translation>거래를 서명하는것을 실패하였습니다.</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>최소화 상태에서 시작</translation>
+ </message>
+ <message>
<source>Transaction amount too small</source>
<translation>거래량이 너무 적습니다</translation>
</message>
@@ -2567,10 +2467,6 @@ Address: %4
<translation>경고</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>경고: 이 버전이 오래되어 업그레이드가 필요합니다!</translation>
- </message>
- <message>
<source>Zapping all transactions from wallet...</source>
<translation>지갑의 모든거래내역 건너뛰기...</translation>
</message>
diff --git a/src/qt/locale/bitcoin_ky.ts b/src/qt/locale/bitcoin_ky.ts
index 58ef2e89e2..7d4511b57d 100644
--- a/src/qt/locale/bitcoin_ky.ts
+++ b/src/qt/locale/bitcoin_ky.ts
@@ -292,10 +292,6 @@
<source>Date</source>
<translation>Дата</translation>
</message>
- <message>
- <source>Address</source>
- <translation>Дарек</translation>
- </message>
</context>
<context>
<name>TransactionView</name>
diff --git a/src/qt/locale/bitcoin_la.ts b/src/qt/locale/bitcoin_la.ts
index b0011f87af..8f03a20cf6 100644
--- a/src/qt/locale/bitcoin_la.ts
+++ b/src/qt/locale/bitcoin_la.ts
@@ -104,10 +104,6 @@
<translation>Muta tesseram</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Insero veterem novamque tesseram cassidili.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Confirma cifrationem cassidilis</translation>
</message>
@@ -132,10 +128,6 @@
<translation>Cassidile cifratum</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin iam desinet ut finiat actionem cifrandi. Memento cassidile cifrare non posse cuncte curare ne tui nummi clepantur ab malis programatibus in tuo computatro.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Cassidile cifrare abortum est</translation>
</message>
@@ -235,10 +227,6 @@
<translation>Mitte nummos ad inscriptionem Bitcoin</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Muta configurationis optiones pro Bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Conserva cassidile in locum alium</translation>
</message>
@@ -314,26 +302,10 @@
<source>Bitcoin Core</source>
<translation>Bitcoin Nucleus</translation>
</message>
- <message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n activa conexio ad rete Bitcoin</numerusform><numerusform>%n activae conexiones ad rete Bitcoin</numerusform></translation>
- </message>
<message>
<source>No block source available...</source>
<translation>Nulla fons frustorum absens...</translation>
</message>
- <message numerus="yes">
- <source>%n hour(s)</source>
- <translation><numerusform>%n hora</numerusform><numerusform>%n horae</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n day(s)</source>
- <translation><numerusform>%n dies</numerusform><numerusform>%n dies</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>%n hebdomas</numerusform><numerusform>%n hebdomades</numerusform></translation>
- </message>
<message>
<source>%1 behind</source>
<translation>%1 post</translation>
@@ -375,18 +347,6 @@
<translation>Transactio incipiens</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Dies: %1
-Quantitas: %2
-Typus: %3
-Inscriptio: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Cassidile &lt;b&gt;cifratum&lt;/b&gt; est et iam nunc &lt;b&gt;reseratum&lt;/b&gt;</translation>
</message>
@@ -513,23 +473,7 @@ Inscriptio: %4
<source>command-line options</source>
<translation>Optiones mandati intiantis</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>UI optiones</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Constitue linguam, exempli gratia "de_DE" (praedefinitum: lingua systematis)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Incipe minifactum ut icon</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Monstra principem imaginem ad initium (praedefinitum: 1)</translation>
- </message>
- </context>
+</context>
<context>
<name>Intro</name>
<message>
@@ -555,14 +499,6 @@ Inscriptio: %4
<translation>&amp;Princeps</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Pelle Bitcoin per se postquam in systema inire.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Pelle Bitcoin cum inire systema</translation>
- </message>
- <message>
<source>Reset all client options to default.</source>
<translation>Reconstitue omnes optiones clientis ad praedefinita.</translation>
</message>
@@ -607,10 +543,6 @@ Inscriptio: %4
<translation>&amp;Minifac in tabellam systematis potius quam applicationum</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>Minifac potius quam exire applicatione quando fenestra clausa sit. Si haec optio activa est, applicatio clausa erit tantum postquam selegeris Exi in menu.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inifac ad claudendum</translation>
</message>
@@ -623,10 +555,6 @@ Inscriptio: %4
<translation>&amp;Lingua monstranda utenti:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Lingua monstranda utenti hic constitui potest. Haec configuratio effectiva erit postquam Bitcoin iterum initiatum erit.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Unita qua quantitates monstrare:</translation>
</message>
@@ -773,18 +701,10 @@ Inscriptio: %4
<translation>Debug catalogi plica</translation>
</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>Aperi plicam catalogi de Bitcoin debug ex activo indice datorum. Hoc possit pauca secunda pro plicis magnis catalogi.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Vacuefac terminale</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Bene ventio in terminale RPC de Bitcoin.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Utere sagittis sursum deorsumque ut per historiam naviges, et &lt;b&gt;Ctrl+L&lt;/b&gt; ut scrinium vacuefacias.</translation>
</message>
@@ -901,10 +821,6 @@ Inscriptio: %4
<translation>Copia quantitatem</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Inscriptio accipientis non est valida, sodes reproba.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Oportet quantitatem ad pensandum maiorem quam 0 esse.</translation>
</message>
@@ -917,10 +833,6 @@ Inscriptio: %4
<translation>Quantitas est ultra quod habes cum merces transactionis %1 includitur.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Geminata inscriptio inventa, tantum posse mittere ad quamque inscriptionem semel singulare operatione.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(nullus titulus)</translation>
</message>
@@ -949,7 +861,7 @@ Inscriptio: %4
</message>
<message>
<source>Paste address from clipboard</source>
- <translation>Conglutina inscriptionem ex latibulo</translation>
+ <translation>Glutina inscriptionem ex latibulo</translation>
</message>
<message>
<source>Alt+P</source>
@@ -974,10 +886,6 @@ Inscriptio: %4
<translation>&amp;Signa Nuntium</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Potes nuntios signare inscriptionibus tuis ut demonstres te eas possidere. Cautus es non amibiguum signare, quia impetus phiscatorum conentur te fallere ut signes identitatem tuam ad eos. Solas signa sententias cuncte descriptas quibus convenis.</translation>
- </message>
- <message>
<source>Alt+A</source>
<translation>Alt+A</translation>
</message>
@@ -1022,10 +930,6 @@ Inscriptio: %4
<translation>&amp;Verifica Nuntium</translation>
</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>Insere inscriptionem signantem, nuntium (cura ut copias intermissiones linearum, spatia, tabs, et cetera exacte) et signationem infra ut nuntium verifices. Cautus esto ne magis legas in signationem quam in nuntio signato ipso est, ut vites falli ab impetu homo-in-medio.</translation>
- </message>
- <message>
<source>Verify the message to ensure it was signed with the specified Bitcoin address</source>
<translation>Verifica nuntium ut cures signatum esse cum specifica inscriptione Bitcoin</translation>
</message>
@@ -1126,10 +1030,6 @@ Inscriptio: %4
<source>Status</source>
<translation>Status</translation>
</message>
- <message numerus="yes">
- <source>, broadcast through %n node(s)</source>
- <translation><numerusform>, disseminatum per %n nodo</numerusform><numerusform>, disseminata per %n nodis</numerusform></translation>
- </message>
<message>
<source>Date</source>
<translation>Dies</translation>
@@ -1162,10 +1062,6 @@ Inscriptio: %4
<source>Credit</source>
<translation>Creditum</translation>
</message>
- <message numerus="yes">
- <source>matures in %n more block(s)</source>
- <translation><numerusform>maturum erit in %n plure frusto</numerusform><numerusform>maturum erit in %n pluribus frustis</numerusform></translation>
- </message>
<message>
<source>not accepted</source>
<translation>non acceptum</translation>
@@ -1249,14 +1145,6 @@ Inscriptio: %4
<translation>Typus</translation>
</message>
<message>
- <source>Address</source>
- <translation>Inscriptio</translation>
- </message>
- <message numerus="yes">
- <source>Open for %n more block(s)</source>
- <translation><numerusform>Aperi pro %n plure frusto</numerusform><numerusform>Aperi pro %n pluribus frustis</numerusform></translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Apertum donec %1</translation>
</message>
@@ -1273,6 +1161,10 @@ Inscriptio: %4
<translation>Generatum sed non acceptum</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Titulus</translation>
+ </message>
+ <message>
<source>Received with</source>
<translation>Acceptum cum</translation>
</message>
@@ -1309,10 +1201,6 @@ Inscriptio: %4
<translation>Typus transactionis.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Inscriptio destinationis transactionis.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Quantitas remota ex pendendo aut addita ei.</translation>
</message>
@@ -1551,10 +1439,6 @@ Inscriptio: %4
<translation>Corruptum databasum frustorum invenitur</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Discooperi propriam inscriptionem IP (praedefinitum: 1 quando auscultans et nullum -externalip)</translation>
- </message>
- <message>
<source>Do you want to rebuild the block database now?</source>
<translation>Visne reficere databasum frustorum iam?</translation>
</message>
@@ -1587,10 +1471,6 @@ Inscriptio: %4
<translation>Inopia descriptorum plicarum.</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Restituere indicem catenae frustorum ex activis plicis blk000??.dat</translation>
- </message>
- <message>
<source>Verifying blocks...</source>
<translation>Verificante frusta...</translation>
</message>
@@ -1619,6 +1499,14 @@ Inscriptio: %4
<translation>Mitte informationem vestigii/debug ad terminale potius quam plicam debug.log</translation>
</message>
<message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Constitue linguam, exempli gratia "de_DE" (praedefinitum: lingua systematis)</translation>
+ </message>
+ <message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Monstra principem imaginem ad initium (praedefinitum: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Diminue plicam debug.log ad initium clientis (praedefinitum: 1 nisi -debug)</translation>
</message>
@@ -1627,6 +1515,10 @@ Inscriptio: %4
<translation>Signandum transactionis abortum est</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Incipe minifactum ut icon</translation>
+ </message>
+ <message>
<source>Transaction amount too small</source>
<translation>Magnitudo transactionis nimis parva</translation>
</message>
@@ -1651,10 +1543,6 @@ Inscriptio: %4
<translation>Monitio</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Monitio: Haec versio obsoleta est, progressio postulata!</translation>
- </message>
- <message>
<source>wallet.dat corrupt, salvage failed</source>
<translation>wallet.dat corrupta, salvare abortum est</translation>
</message>
diff --git a/src/qt/locale/bitcoin_lt.ts b/src/qt/locale/bitcoin_lt.ts
index a77ee9b529..b96afbbcc9 100644
--- a/src/qt/locale/bitcoin_lt.ts
+++ b/src/qt/locale/bitcoin_lt.ts
@@ -59,7 +59,7 @@
</message>
<message>
<source>Comma separated file (*.csv)</source>
- <translation>Kableliais išskirtas failas (*.csv)</translation>
+ <translation>Kableliais atskirtų duomenų failas (*.csv)</translation>
</message>
<message>
<source>Exporting Failed</source>
@@ -128,10 +128,6 @@
<translation>Pakeisti slaptafrazę</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Įveskite seną ir naują piniginės slaptafrazes.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Patvirtinkite piniginės užšifravimą</translation>
</message>
@@ -152,10 +148,6 @@
<translation>Piniginė užšifruota</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin dabar užsidarys šifravimo proceso pabaigai. Atminkite, kad piniginės šifravimas negali pilnai apsaugoti bitcoinų vagysčių kai tinkle esančios kenkėjiškos programos patenka į jūsų kompiuterį.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Nepavyko užšifruoti piniginę</translation>
</message>
@@ -271,10 +263,6 @@
<translation>Siųsti monetas Bitcoin adresui</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Keisti bitcoin konfigūracijos galimybes</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Daryti piniginės atsarginę kopiją</translation>
</message>
@@ -350,26 +338,6 @@
<source>&amp;About Bitcoin Core</source>
<translation>&amp;Apie Bitcoin Core</translation>
</message>
- <message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n Bitcoin tinklo aktyvus ryšys</numerusform><numerusform>%n Bitcoin tinklo aktyvūs ryšiai</numerusform><numerusform>%n Bitcoin tinklo aktyvūs ryšiai</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n hour(s)</source>
- <translation><numerusform>%n valanda</numerusform><numerusform>%n valandos</numerusform><numerusform>%n valandų</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n day(s)</source>
- <translation><numerusform>%n diena</numerusform><numerusform>%n dienos</numerusform><numerusform>%n dienų</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>%n savaitė</numerusform><numerusform>%n savaitės</numerusform><numerusform>%n savaičių</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation><numerusform>%n metas</numerusform><numerusform>%n metai</numerusform><numerusform>%n metų</numerusform></translation>
- </message>
<message>
<source>Error</source>
<translation>Klaida</translation>
@@ -399,17 +367,6 @@
<translation>Ateinantis sandoris</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Data: %1
-Suma: %2
-Tipas: %3
-Adresas: %4</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Piniginė &lt;b&gt;užšifruota&lt;/b&gt; ir šiuo metu &lt;b&gt;atrakinta&lt;/b&gt;</translation>
</message>
@@ -652,19 +609,7 @@ Adresas: %4</translation>
<source>command-line options</source>
<translation>komandinės eilutės parametrai</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Naudotoji sąsajos parametrai</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Nustatyti kalbą, pavyzdžiui "lt_LT" (numatyta: sistemos kalba)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Paleisti sumažintą</translation>
- </message>
- </context>
+</context>
<context>
<name>Intro</name>
<message>
@@ -698,14 +643,6 @@ Adresas: %4</translation>
<translation>&amp;Pagrindinės</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Automatiškai paleisti Bitkoin programą įjungus sistemą.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Paleisti Bitcoin programą su window sistemos paleidimu</translation>
- </message>
- <message>
<source>&amp;Network</source>
<translation>&amp;Tinklas</translation>
</message>
@@ -742,10 +679,6 @@ Adresas: %4</translation>
<translation>&amp;M sumažinti langą bet ne užduočių juostą</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>Uždarant langą neuždaryti programos. Kai ši parinktis įjungta, programa bus uždaryta tik pasirinkus meniu komandą Baigti.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>&amp;Sumažinti uždarant</translation>
</message>
@@ -758,10 +691,6 @@ Adresas: %4</translation>
<translation>Naudotojo sąsajos &amp;kalba:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Čia gali būti nustatyta naudotojo sąsajos kalba. Šis nustatymas įsigalios iš naujo paleidus Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Vienetai, kuriais rodyti sumas:</translation>
</message>
@@ -924,10 +853,6 @@ Adresas: %4</translation>
<translation>Išvalyti konsolę</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Sveiki atvykę į Bitcoin RPC konsolę.</translation>
- </message>
- <message>
<source>%1 B</source>
<translation>%1 B</translation>
</message>
@@ -1100,10 +1025,6 @@ Adresas: %4</translation>
<translation>Kopijuoti pirmumą</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Negaliojantis gavėjo adresas. Patikrinkite.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Apmokėjimo suma turi būti didesnė nei 0.</translation>
</message>
@@ -1116,10 +1037,6 @@ Adresas: %4</translation>
<translation>Jei pridedame sandorio mokestį %1 bendra suma viršija jūsų balansą.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Rastas adreso dublikatas.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(nėra žymės)</translation>
</message>
@@ -1400,10 +1317,6 @@ Adresas: %4</translation>
<translation>Tipas</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adresas</translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Atidaryta iki %1</translation>
</message>
@@ -1420,6 +1333,10 @@ Adresas: %4</translation>
<translation>Išgauta bet nepriimta</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Žymė</translation>
+ </message>
+ <message>
<source>Received with</source>
<translation>Gauta su</translation>
</message>
@@ -1429,7 +1346,7 @@ Adresas: %4</translation>
</message>
<message>
<source>Sent to</source>
- <translation>Siųsta </translation>
+ <translation>Išsiųsta</translation>
</message>
<message>
<source>Payment to yourself</source>
@@ -1456,10 +1373,6 @@ Adresas: %4</translation>
<translation>Sandorio tipas.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Sandorio paskirties adresas</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Suma pridėta ar išskaičiuota iš balanso</translation>
</message>
@@ -1674,6 +1587,14 @@ Adresas: %4</translation>
<translation>Siųsti atsekimo/derinimo info į konsolę vietoj debug.log failo</translation>
</message>
<message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Nustatyti kalbą, pavyzdžiui "lt_LT" (numatyta: sistemos kalba)</translation>
+ </message>
+ <message>
+ <source>Start minimized</source>
+ <translation>Paleisti sumažintą</translation>
+ </message>
+ <message>
<source>Use UPnP to map the listening port (default: 1 when listening)</source>
<translation>Bandymas naudoti UPnP struktūra klausymosi prievadui (default: 1 when listening)</translation>
</message>
diff --git a/src/qt/locale/bitcoin_lv_LV.ts b/src/qt/locale/bitcoin_lv_LV.ts
index bd25749ad9..a46ab83c6b 100644
--- a/src/qt/locale/bitcoin_lv_LV.ts
+++ b/src/qt/locale/bitcoin_lv_LV.ts
@@ -140,10 +140,6 @@
<translation>Mainīt paroli</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Ierakstiet maciņa veco un jauno paroli.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Apstiprināt maciņa šifrēšanu</translation>
</message>
@@ -164,10 +160,6 @@
<translation>Maciņš nošifrēts</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin aizvērsies, lai pabeigtu šifrēšanu. Atcerieties, ka maciņa šifrēšana nevar pilnībā novērst bitkoinu zādzību, ko veic datorā ieviesušās kaitīgas programmas.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Maciņa šifrēšana neizdevās</translation>
</message>
@@ -287,10 +279,6 @@
<translation>Nosūtīt bitkoinus uz Bitcoin adresi</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Mainīt Bitcoin konfigurācijas uzstādījumus</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Izveidot maciņa rezerves kopiju citur</translation>
</message>
@@ -386,34 +374,14 @@
<source>&amp;Command-line options</source>
<translation>&amp;Komandrindas iespējas</translation>
</message>
- <message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n aktīvu savienojumu ar Bitcoin tīklu</numerusform><numerusform>%n aktīvs savienojums ar Bitcoin tīklu</numerusform><numerusform>%n aktīvu savienojumu as Bitcoin tīklu</numerusform></translation>
- </message>
<message>
<source>No block source available...</source>
<translation>Nav pieejams neviens bloku avots...</translation>
</message>
- <message numerus="yes">
- <source>%n hour(s)</source>
- <translation><numerusform>%n stundas</numerusform><numerusform>%n stunda</numerusform><numerusform>%n stundas</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n day(s)</source>
- <translation><numerusform>%n dienas</numerusform><numerusform>%n diena</numerusform><numerusform>%n dienas</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>%n nedēļas</numerusform><numerusform>%n nedēļa</numerusform><numerusform>%n nedēļas</numerusform></translation>
- </message>
<message>
<source>%1 and %2</source>
<translation>%1 un %2</translation>
</message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation><numerusform>%n gadi</numerusform><numerusform>%n gads</numerusform><numerusform>%n gadi</numerusform></translation>
- </message>
<message>
<source>%1 behind</source>
<translation>%1 aizmugurē</translation>
@@ -451,18 +419,6 @@
<translation>Ienākoša transakcija</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Datums: %1
-Daudzums: %2
-Tips: %3
-Adrese: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Maciņš ir &lt;b&gt;šifrēts&lt;/b&gt; un pašlaik &lt;b&gt;atslēgts&lt;/b&gt;</translation>
</message>
@@ -630,7 +586,7 @@ Adrese: %4
</message>
<message>
<source>none</source>
- <translation>neviens</translation>
+ <translation>neviena</translation>
</message>
<message>
<source>yes</source>
@@ -745,23 +701,7 @@ Adrese: %4
<source>command-line options</source>
<translation>komandrindas izvēles</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Lietotāja interfeisa izvēlnes</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Uzstādiet valodu, piemēram "de_DE" (pēc noklusēšanas: sistēmas lokāle)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Sākt minimizētu</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Uzsākot, parādīt programmas informācijas logu (pēc noklusēšanas: 1)</translation>
- </message>
- </context>
+</context>
<context>
<name>Intro</name>
<message>
@@ -823,14 +763,6 @@ Adrese: %4
<translation>&amp;Galvenais</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Automātiski sākt Bitcoin pēc pieteikšanās sistēmā.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Sākt Bitcoin reizē ar sistēmu</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>&amp;Datubāzes kešatmiņas izmērs</translation>
</message>
@@ -915,10 +847,6 @@ Adrese: %4
<translation>&amp;Minimizēt uz sistēmas tekni, nevis rīkjoslu</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>Logu aizverot, minimizēt, nevis beigt darbu. Kad šī izvēlne iespējota, programma aizvērsies tikai pēc Beigt komandas izvēlnē.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimizēt aizverot</translation>
</message>
@@ -931,10 +859,6 @@ Adrese: %4
<translation>Lietotāja interfeiss un &amp;valoda:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Šeit var iestatīt lietotāja valodu. Iestatījums aktivizēsies pēc Bitcoin pārstartēšanas.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Vienības, kurās attēlot daudzumus:</translation>
</message>
@@ -967,10 +891,6 @@ Adrese: %4
<translation>Apstiprināt iestatījumu atiestatīšanu</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>Klients tiks izslēgts, vai vēlaties turpināt?</translation>
- </message>
- <message>
<source>The supplied proxy address is invalid.</source>
<translation>Norādītā starpniekservera adrese nav derīga.</translation>
</message>
@@ -1189,10 +1109,6 @@ Adrese: %4
<translation>Notīrīt konsoli</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Laipni lūgti Bitcoin RPC konsolē.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Izmantojiet bultiņas uz augšu un leju, lai pārvietotos pa vēsturi, un &lt;b&gt;Ctrl-L&lt;/b&gt; ekrāna notīrīšanai.</translation>
</message>
@@ -1370,7 +1286,7 @@ Adrese: %4
<name>SendCoinsDialog</name>
<message>
<source>Send Coins</source>
- <translation>Sūtīt bitkoinus</translation>
+ <translation>Sūtīt Bitkoinus</translation>
</message>
<message>
<source>Coin Control Features</source>
@@ -1493,10 +1409,6 @@ Adrese: %4
<translation>vai</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Saņēmēja adrese ir nepareiza, lūdzu pārbaudi.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Nosūtāmajai summai jābūt lielākai par 0.</translation>
</message>
@@ -1509,10 +1421,6 @@ Adrese: %4
<translation>Kopsumma pārsniedz pieejamo, ja pieskaitīta %1 transakcijas maksa.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Atrastas divas vienādas adreses, vienā nosūtīšanas reizē uz katru adresi var sūtīt tikai vienreiz.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Transakcijas izveidošana neizdevās!</translation>
</message>
@@ -1580,14 +1488,6 @@ Adrese: %4
<translation>Ziņojums:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Šis ir pārbaudīts maksājuma pieprasījums.</translation>
- </message>
- <message>
- <source>This is an unverified payment request.</source>
- <translation>Šis ir nepārbaudīts maksājuma pieprasījums.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Maksāt:</translation>
</message>
@@ -1866,10 +1766,6 @@ Adrese: %4
<source>, has not been successfully broadcast yet</source>
<translation>, vēl nav veiksmīgi izziņots</translation>
</message>
- <message numerus="yes">
- <source>Open for %n more block(s)</source>
- <translation><numerusform>Atvērts vel %n blokus</numerusform><numerusform>Atvērts vel %n bloku</numerusform><numerusform>Atvērts vel %n blokus</numerusform></translation>
- </message>
<message>
<source>unknown</source>
<translation>nav zināms</translation>
@@ -1897,14 +1793,6 @@ Adrese: %4
<translation>Tips</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adrese</translation>
- </message>
- <message numerus="yes">
- <source>Open for %n more block(s)</source>
- <translation><numerusform>Atvērts vel %n blokus</numerusform><numerusform>Atvērts vel %n bloku</numerusform><numerusform>Atvērts vel %n blokus</numerusform></translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Atvērts līdz %1</translation>
</message>
@@ -1925,6 +1813,10 @@ Adrese: %4
<translation>Bezsaitē</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Nosaukums</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Neapstiprināts</translation>
</message>
@@ -1969,10 +1861,6 @@ Adrese: %4
<translation>Transakcijas tips.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Transakcijas mērķa adrese.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Bilancei pievienotais vai atņemtais daudzums.</translation>
</message>
@@ -2267,10 +2155,22 @@ Adrese: %4
<translation>Debug/trace informāciju izvadīt konsolē, nevis debug.log failā</translation>
</message>
<message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Uzstādiet valodu, piemēram "de_DE" (pēc noklusēšanas: sistēmas lokāle)</translation>
+ </message>
+ <message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Uzsākot, parādīt programmas informācijas logu (pēc noklusēšanas: 1)</translation>
+ </message>
+ <message>
<source>Signing transaction failed</source>
<translation>Transakcijas parakstīšana neizdevās</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Sākt minimizētu</translation>
+ </message>
+ <message>
<source>Transaction amount too small</source>
<translation>Transakcijas summa ir pārāk maza</translation>
</message>
@@ -2291,10 +2191,6 @@ Adrese: %4
<translation>Brīdinājums</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Brīdinājums: Šī versija ir novecojusi, nepieciešams atjauninājums!</translation>
- </message>
- <message>
<source>on startup</source>
<translation>startēšanas laikā</translation>
</message>
diff --git a/src/qt/locale/bitcoin_mn.ts b/src/qt/locale/bitcoin_mn.ts
index 26dbc741cc..a1a07af8d5 100644
--- a/src/qt/locale/bitcoin_mn.ts
+++ b/src/qt/locale/bitcoin_mn.ts
@@ -42,7 +42,7 @@
</message>
<message>
<source>(no label)</source>
- <translation>(шошго алга)</translation>
+ <translation>(шошгогүй)</translation>
</message>
</context>
<context>
@@ -84,10 +84,6 @@
<translation>Нууц үгийг солих</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Түрүйвчийн хуучин болоод шинэ нууц үгсийг оруулна уу</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Түрүйвчийн цоожийг баталгаажуулах</translation>
</message>
@@ -96,10 +92,6 @@
<translation>Түрүйвч цоожлогдлоо</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Цоожлолтын процесыг дуусгахын тулд Биткойн одоо хаагдана. Ѳѳрийн түрүйвчийг цоожлох нь таны биткойнуудыг компьютерийн вирус хулгайлахаас бүрэн сэргийлж чадахгүй гэдгийг санаарай.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Түрүйвчийн цоожлол амжилттай болсонгүй</translation>
</message>
@@ -214,18 +206,6 @@
<source>&amp;Help</source>
<translation>&amp;Тусламж</translation>
</message>
- <message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>Биткойны сүлжээрүү %n идэвхитэй холболт байна </numerusform><numerusform>Биткойны сүлжээрүү %n идэвхитэй холболтууд байна </numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n hour(s)</source>
- <translation><numerusform>%n цаг</numerusform><numerusform>%n цаг</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n day(s)</source>
- <translation><numerusform>%n ѳдѳр</numerusform><numerusform>%n ѳдрүүд</numerusform></translation>
- </message>
<message>
<source>Error</source>
<translation>Алдаа</translation>
@@ -243,21 +223,6 @@
<translation>Дотогшоо гүйлгээ</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Огноо: %1
-
-Хэмжээ: %2
-
-Тѳрѳл: %3
-
-Хаяг: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Түрүйвч &lt;b&gt;цоожтой&lt;/b&gt; ба одоогоор цоож &lt;b&gt;онгорхой&lt;/b&gt; байна</translation>
</message>
@@ -402,10 +367,6 @@ Address: %4
<translation>Ѳѳрчлѳлтүүдийг идэвхижүүлхийн тулд клиентийг ахин эхлүүлэх шаардлагтай</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>Клиент унтрах гэж байна, яг унтраах уу?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>Энэ ѳѳрчлѳлтийг оруулахын тулд кли1нт програмыг ахин эхлүүлэх шаардлагтай</translation>
</message>
@@ -570,7 +531,7 @@ Address: %4
</message>
<message>
<source>(no label)</source>
- <translation>(шошго алга)</translation>
+ <translation>(шошгогүй)</translation>
</message>
<message>
<source>(no message)</source>
@@ -800,10 +761,6 @@ Address: %4
<translation>Тѳрѳл</translation>
</message>
<message>
- <source>Address</source>
- <translation>Хаяг</translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>%1 хүртэл нээлттэй</translation>
</message>
@@ -820,6 +777,10 @@ Address: %4
<translation>Үүсгэгдсэн гэхдээ хүлээн авагдаагүй</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Шошго</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Баталгаажаагүй</translation>
</message>
@@ -864,10 +825,6 @@ Address: %4
<translation>Гүйлгээний тѳрѳл</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Гүйлгээг хүлээн авах хаяг</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Балансаас авагдсан болон нэмэгдсэн хэмжээ.</translation>
</message>
diff --git a/src/qt/locale/bitcoin_ms_MY.ts b/src/qt/locale/bitcoin_ms_MY.ts
index e7a5a64f46..999961beb8 100644
--- a/src/qt/locale/bitcoin_ms_MY.ts
+++ b/src/qt/locale/bitcoin_ms_MY.ts
@@ -156,10 +156,6 @@
</context>
<context>
<name>TransactionTableModel</name>
- <message>
- <source>Address</source>
- <translation>Alamat</translation>
- </message>
</context>
<context>
<name>TransactionView</name>
diff --git a/src/qt/locale/bitcoin_nb.ts b/src/qt/locale/bitcoin_nb.ts
index eaaf8d7805..eddc61e56a 100644
--- a/src/qt/locale/bitcoin_nb.ts
+++ b/src/qt/locale/bitcoin_nb.ts
@@ -156,10 +156,6 @@
<translation>Endre adgangsfrase</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Skriv inn gammel og ny adgangsfrase for lommeboken.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Bekreft kryptering av lommebok</translation>
</message>
@@ -172,6 +168,10 @@
<translation>Er du sikker på at du vil kryptere lommeboken?</translation>
</message>
<message>
+ <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+ <translation>Bitcoin Core vil nå avslutte for å fullføre krypteringsprosessen. Husk at kryptering av lommeboken ikke kan beskytte fullstendig mot tyveri av dine bitcoins hvis datamaskinen din er infisert av skadevare.</translation>
+ </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>VIKTIG: Tidligere sikkerhetskopier av din lommebokfil bør erstattes med den nylig genererte og krypterte filen, da de blir ugyldiggjort av sikkerhetshensyn så snart du begynner å bruke den nye krypterte lommeboken.</translation>
</message>
@@ -188,8 +188,8 @@
<translation>Oppgi adgangsfrasen til lommeboken.&lt;br/&gt;Vennligst bruk en adgangsfrase med &lt;b&gt;ti eller flere tilfeldige tegn&lt;/b&gt;, eller &lt;b&gt;åtte eller flere ord&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin vil nå lukkes for å fullføre krypteringsprosessen. Husk at kryptering av lommeboken ikke fullt ut kan beskytte dine bitcoins fra å bli stjålet om skadevare infiserer datamaskinen.</translation>
+ <source>Enter the old passphrase and new passphrase to the wallet.</source>
+ <translation>Oppgi gammel og ny adgangsfrase til lommeboken.</translation>
</message>
<message>
<source>Wallet encryption failed</source>
@@ -311,10 +311,6 @@
<translation>Send til en Bitcoin-adresse</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Endre oppsett for Bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Sikkerhetskopier lommebok til annet sted</translation>
</message>
@@ -403,6 +399,10 @@
<translation>&amp;Om Bitcoin Core</translation>
</message>
<message>
+ <source>Modify configuration options for Bitcoin Core</source>
+ <translation>Endre konfigurasjonsvalg for Bitcoin Core</translation>
+ </message>
+ <message>
<source>Show the list of used sending addresses and labels</source>
<translation>Vis listen av brukte utsendingsadresser og merkelapper</translation>
</message>
@@ -431,6 +431,10 @@
<translation>Ingen kilde for blokker tilgjengelig...</translation>
</message>
<message numerus="yes">
+ <source>Processed %n block(s) of transaction history.</source>
+ <translation><numerusform>Lastet %n blokk med transaksjonshistorikk.</numerusform><numerusform>Lastet %n blokker med transaksjonshistorikk.</numerusform></translation>
+ </message>
+ <message numerus="yes">
<source>%n hour(s)</source>
<translation><numerusform>%n time</numerusform><numerusform>%n timer</numerusform></translation>
</message>
@@ -478,35 +482,49 @@
<source>Up to date</source>
<translation>Oppdatert</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>Lastet %n blokk med transaksjonshistorikk.</numerusform><numerusform>Lastet %n blokker med transaksjonshistorikk.</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>Laster ned...</translation>
</message>
<message>
- <source>Sent transaction</source>
- <translation>Sendt transaksjon</translation>
+ <source>Date: %1
+</source>
+ <translation>Dato: %1
+</translation>
</message>
<message>
- <source>Incoming transaction</source>
- <translation>Innkommende transaksjon</translation>
+ <source>Amount: %1
+</source>
+ <translation>Beløp: %1:
+</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
+ <source>Type: %1
</source>
- <translation>Dato: %1
-Beløp: %2
-Type: %3
-Adresse: %4
+ <translation>Type: %1
</translation>
</message>
<message>
+ <source>Label: %1
+</source>
+ <translation>Merkelapp: %1
+</translation>
+ </message>
+ <message>
+ <source>Address: %1
+</source>
+ <translation>Adresse: %1
+</translation>
+ </message>
+ <message>
+ <source>Sent transaction</source>
+ <translation>Sendt transaksjon</translation>
+ </message>
+ <message>
+ <source>Incoming transaction</source>
+ <translation>Innkommende transaksjon</translation>
+ </message>
+ <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Lommeboken er &lt;b&gt;kryptert&lt;/b&gt; og for tiden &lt;b&gt;låst opp&lt;/b&gt;</translation>
</message>
@@ -697,6 +715,18 @@ Adresse: %4
<translation>ingen</translation>
</message>
<message>
+ <source>This label turns red if the transaction size is greater than 1000 bytes.</source>
+ <translation>Denne teksten blir rød hvis transaksjonsstørrelsen er større enn 1000 bytes.</translation>
+ </message>
+ <message>
+ <source>This label turns red if the priority is smaller than "medium".</source>
+ <translation>Denne teksten blir rød hvis prioriteten er lavere enn "medium".</translation>
+ </message>
+ <message>
+ <source>This label turns red if any recipient receives an amount smaller than %1.</source>
+ <translation>Denne teksten blir rød dersom en mottaker mottar et beløp mindre enn %1.</translation>
+ </message>
+ <message>
<source>Can vary +/- %1 satoshi(s) per input.</source>
<translation>Kan variere +/- %1 satoshi(er) per input.</translation>
</message>
@@ -709,10 +739,6 @@ Adresse: %4
<translation>nei</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Denne merkelappen blir rød, hvis transaksjonsstørrelsen er større enn 1000 bytes.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Dette betyr at et gebyr på minst %1 per KB er påkrevd.</translation>
</message>
@@ -725,14 +751,6 @@ Adresse: %4
<translation>Transaksjoner med høyere prioritet har mer sannsynlighet for å bli inkludert i en blokk.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Denne merkelappen blir rød, hvis prioriteten er mindre enn "medium".</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Denne merkelappen blir rød, hvis en mottaker mottar en mengde på mindre enn %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(ingen merkelapp)</translation>
</message>
@@ -853,30 +871,6 @@ Adresse: %4
<source>command-line options</source>
<translation>kommandolinjevalg</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>valg i brukergrensesnitt</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Sett språk, for eksempel "nb_NO" (standardverdi: fra operativsystem)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Start minimert</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Sett SSL-rotsertifikat for betalingsetterspørring (standard: -system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Vis splashskjerm ved oppstart (standardverdi: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Velg datamappe ved oppstart (standard: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -959,14 +953,6 @@ Adresse: %4
<translation>&amp;Hoved</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Start Bitcoin automatisk etter innlogging.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Start Bitcoin ved systeminnlogging</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Størrelse på &amp;database hurtigbuffer</translation>
</message>
@@ -991,6 +977,14 @@ Adresse: %4
<translation>IP-adressen til proxyen (f.eks. IPv4: 127.0.0.1 / IPv6: ::1)</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 Exit in the menu.</source>
+ <translation>Minimer i stedet for å avslutte applikasjonen når vinduet lukkes. Når dette er valgt, vil applikasjonen avsluttes kun etter at Avslutte er valgt i menyen.</translation>
+ </message>
+ <message>
+ <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin Core.</source>
+ <translation>Språk for brukergrensesnittet kan velges her. Denne innstillingen trer i kraft etter omstart av Bitcoin Core.</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>Tredjepart URLer (f. eks. en blokkutforsker) som dukker opp i transaksjonsfanen som kontekst meny elementer. %s i URLen er erstattet med transaksjonen sin hash. Flere URLer er separert av en vertikal linje |.</translation>
</message>
@@ -1015,6 +1009,14 @@ Adresse: %4
<translation>&amp;Nettverk</translation>
</message>
<message>
+ <source>Automatically start Bitcoin Core after logging in to the system.</source>
+ <translation>Start Bitcoin Core automatisk ved oppstart av datamaskinen.</translation>
+ </message>
+ <message>
+ <source>&amp;Start Bitcoin Core on system login</source>
+ <translation>&amp;Start Bitcoin Core ved oppstart av datamaskinen</translation>
+ </message>
+ <message>
<source>(0 = auto, &lt;0 = leave that many cores free)</source>
<translation>(0 = automatisk, &lt;0 = la så mange kjerner være ledig)</translation>
</message>
@@ -1079,10 +1081,6 @@ Adresse: %4
<translation>&amp;Minimer til systemkurv istedenfor oppgavelinjen</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>Minimerer vinduet istedenfor å avslutte applikasjonen når vinduet lukkes. Når dette er slått på avsluttes applikasjonen kun ved å velge avslutt i menyen.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimer ved lukking</translation>
</message>
@@ -1095,10 +1093,6 @@ Adresse: %4
<translation>&amp;Språk for brukergrensesnitt</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Språket for brukergrensesnittet kan settes her. Innstillingen trer i kraft ved omstart av Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Enhet for visning av beløper:</translation>
</message>
@@ -1135,8 +1129,8 @@ Adresse: %4
<translation>Omstart av klienten er nødvendig for å aktivere endringene.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>Klienten vil bli lukket, vil du fortsette?</translation>
+ <source>Client will be shut down. Do you want to proceed?</source>
+ <translation>Klienten vil bli lukket. Ønsker du å gå videre?</translation>
</message>
<message>
<source>This change would require a client restart.</source>
@@ -1245,10 +1239,6 @@ Adresse: %4
<translation>Nettverk for betalingsetterspørring er ikke i overensstemmelse med klientnettverket.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>Betalingsetterspørringen har utløpt.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>Betalingsetterspørringen er ikke initialisert.</translation>
</message>
@@ -1281,10 +1271,18 @@ Adresse: %4
<translation>Betalingsetterspørringsfil kan ikke leses! Dette kan være forårsaket av en ugyldig betalingsetterspørringsfil.</translation>
</message>
<message>
+ <source>Payment request expired.</source>
+ <translation>Betalingsetterspørringen har utløpt.</translation>
+ </message>
+ <message>
<source>Unverified payment requests to custom payment scripts are unsupported.</source>
<translation>Uverifiserte betalingsforespørsler til egentilpassede betalingscript er ikke støttet.</translation>
</message>
<message>
+ <source>Invalid payment request.</source>
+ <translation>Ugyldig betalingsetterspørring.</translation>
+ </message>
+ <message>
<source>Refund from %1</source>
<translation>Refundering fra %1</translation>
</message>
@@ -1324,8 +1322,8 @@ Adresse: %4
<translation>Brukeragent</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Adresse/Vertsnavn</translation>
+ <source>Node/Service</source>
+ <translation>Node/Tjeneste</translation>
</message>
<message>
<source>Ping Time</source>
@@ -1359,14 +1357,6 @@ Adresse: %4
<translation>%1 s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>NETTVERK</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>UKJENT</translation>
- </message>
- <message>
<source>None</source>
<translation>Ingen</translation>
</message>
@@ -1457,6 +1447,10 @@ Adresse: %4
<translation>Nåværende antall blokker</translation>
</message>
<message>
+ <source>Open the Bitcoin Core debug log file from the current data directory. This can take a few seconds for large log files.</source>
+ <translation>Åpne Bitcoin Core sin loggfil for feilsøk fra gjeldende datamappe. Dette kan ta noen sekunder for store loggfiler.</translation>
+ </message>
+ <message>
<source>Received</source>
<translation>Mottatt</translation>
</message>
@@ -1525,6 +1519,10 @@ Adresse: %4
<translation>Ping-tid</translation>
</message>
<message>
+ <source>Time Offset</source>
+ <translation>Tidsforskyvning</translation>
+ </message>
+ <message>
<source>Last block time</source>
<translation>Tidspunkt for siste blokk</translation>
</message>
@@ -1565,16 +1563,12 @@ Adresse: %4
<translation>Loggfil for feilsøk</translation>
</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>Åpne Bitcoin sin loggfil for feilsøk fra den gjeldende datamappen. Dette kan ta noen sekunder for store loggfiler.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Tøm konsoll</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Velkommen til Bitcoin sin RPC-konsoll.</translation>
+ <source>Welcome to the Bitcoin Core RPC console.</source>
+ <translation>Velkommen til Bitcoin Core sin RPC-konsoll.</translation>
</message>
<message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
@@ -1865,14 +1859,6 @@ Adresse: %4
<translation>Legg ned gebyrinnstillinger</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Minimer</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>Hvis den egendefinerte avgiften er satt til 1000 satoshis og transaksjonen bare er 250 bytes, da vil "per kilobyte" bare betale 250 satoshis i gebyr, mens "minst" betaler 1000 satoshis. For transaksjoner større enn en kilobyte vil begge betale for antall kilobyte.</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>per kilobyte</translation>
</message>
@@ -1881,6 +1867,10 @@ Adresse: %4
<translation>Hvis den egendefinerte avgiften er satt til 1000 satoshis og transaksjonen bare er 250 bytes, da vil "per kilobyte" bare betale 250 satoshis i gebyr, mens "minstebeløp" betaler 1000 satoshis. For transaksjoner større enn en kilobyte vil begge betale for antall kilobyte.</translation>
</message>
<message>
+ <source>Hide</source>
+ <translation>Skjul</translation>
+ </message>
+ <message>
<source>total at least</source>
<translation>minstebeløp</translation>
</message>
@@ -2001,10 +1991,6 @@ Adresse: %4
<translation>eller</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Adresse for mottaker er ugyldig.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Beløpet som skal betales må være over 0.</translation>
</message>
@@ -2017,10 +2003,6 @@ Adresse: %4
<translation>Totalbeløpet overstiger saldo etter at %1 transaksjonsgebyr er lagt til.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Doble antall adresser funnet. Kan bare sende en gang til hver adresse per operasjon.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Opprettelse av transaksjon feilet!</translation>
</message>
@@ -2029,16 +2011,28 @@ Adresse: %4
<translation>Transaksjonen ble avvist! Dette kan skje hvis noen av myntene i lommeboken allerede er brukt, som hvis du kopierte wallet.dat og mynter ble brukt i kopien uten å bli markert som brukt her.</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
- <translation>Et gebyr høyere enn %1 er ansett som et sinnsykt høyt gebyr.</translation>
+ <source>A fee higher than %1 is considered an absurdly high fee.</source>
+ <translation>Et gebyr høyere enn %1 er ansett som et absurd høyt gebyr.</translation>
+ </message>
+ <message>
+ <source>Payment request expired.</source>
+ <translation>Betalingsetterspørringen har utløpt.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Estimated to begin confirmation within %n block(s).</source>
+ <translation><numerusform>Anslått til å begynne bekreftelse innen %n blokk.</numerusform><numerusform>Anslått til å begynne bekreftelse innen %n blokker.</numerusform></translation>
</message>
<message>
<source>Pay only the minimum fee of %1</source>
<translation>Betal kun minimumsgebyret på %1</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>Beregner å begynne bekreftelse innen %1 blokk(er).</translation>
+ <source>The recipient address is not valid. Please recheck.</source>
+ <translation>Mottakeradressen er ikke gyldig. Vennligst kontroller på nytt.</translation>
+ </message>
+ <message>
+ <source>Duplicate address found: addresses should only be used once each.</source>
+ <translation>Gjenbruk av adresse funnet: adresser skal bare brukes en gang hver.</translation>
</message>
<message>
<source>Warning: Invalid Bitcoin address</source>
@@ -2112,12 +2106,24 @@ Adresse: %4
<translation>Fjern denne oppføringen</translation>
</message>
<message>
+ <source>The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
+ <translation>Gebyret vil bli trukket fra beløpet som blir sendt. Mottakeren vil motta mindre bitcoins enn det du skriver inn i beløpsfeltet. Hvis det er valgt flere mottakere, deles gebyret likt.</translation>
+ </message>
+ <message>
+ <source>S&amp;ubtract fee from amount</source>
+ <translation>T&amp;rekk fra gebyr fra beløp</translation>
+ </message>
+ <message>
<source>Message:</source>
<translation>Melding:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Dette er en verifisert betalingsetterspørring</translation>
+ <source>This is an unauthenticated payment request.</source>
+ <translation>Dette er en uautorisert betalingsetterspørring.</translation>
+ </message>
+ <message>
+ <source>This is an authenticated payment request.</source>
+ <translation>Dette er en autorisert betalingsetterspørring.</translation>
</message>
<message>
<source>Enter a label for this address to add it to the list of used addresses</source>
@@ -2128,10 +2134,6 @@ Adresse: %4
<translation>En melding som var tilknyttet bitcoinen: URI vil bli lagret med transaksjonen for din oversikt. Denne meldingen vil ikke bli sendt over Bitcoin-nettverket.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Dette er en uverifisert betalingsetterspørring</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Betal Til:</translation>
</message>
@@ -2162,8 +2164,8 @@ Adresse: %4
<translation>&amp;Signer Melding</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Du kan signere meldinger med dine adresser for å bevise at du eier dem. Ikke signer vage meldinger da phishing-angrep kan prøve å lure deg til å signere din identitet over til andre. Signer kun fullt detaljerte utsagn som du er enig i.</translation>
+ <source>You can sign messages/agreements with your addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
+ <translation>Du kan signere meldinger/avtaler med adresser for å bevise at du kan motta bitcoins sendt til dem. Vær forsiktig med å signere noe vagt eller tilfeldig, siden phishing-angrep kan prøve å lure deg til å signere din identitet over til dem. Bare signer fullt detaljerte utsagn som du er enig i.</translation>
</message>
<message>
<source>The Bitcoin address to sign the message with</source>
@@ -2218,8 +2220,8 @@ Adresse: %4
<translation>&amp;Verifiser Melding</translation>
</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>Angi adresse for signering, melding (vær sikker på at du kopierer linjeskift, mellomrom, tab, etc. helt nøyaktig) og signatur under for å verifisere meldingen. Vær forsiktig med at du ikke gir signaturen mer betydning enn det som faktisk står i meldingen, for å unngå å bli lurt av såkalte "man-in-the-middle" angrep.</translation>
+ <source>Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction!</source>
+ <translation>Skriv inn mottakerens adresse, melding (forsikre deg om at du kopier linjeskift, mellomrom, faner osv. nøyaktig) og underskrift nedenfor for å bekrefte meldingen. Vær forsiktig så du ikke leser mer ut av signaturen enn hva som er i den signerte meldingen i seg selv, for å unngå å bli lurt av et man-in-the-middle-angrep. Merk at dette bare beviser at den som signerer kan motta med adressen, dette beviser ikke hvem som har sendt transaksjoner!</translation>
</message>
<message>
<source>The Bitcoin address the message was signed with</source>
@@ -2485,10 +2487,6 @@ Adresse: %4
<translation>Type</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adresse</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Umoden (%1 bekreftelser, vil være tilgjengelig etter %2)</translation>
</message>
@@ -2517,6 +2515,10 @@ Adresse: %4
<translation>Frakoblet</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Merkelapp</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Ubekreftet</translation>
</message>
@@ -2573,8 +2575,8 @@ Adresse: %4
<translation>Hvorvidt en kun observerbar adresse er involvert i denne transaksjonen.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Mottaksadresse for transaksjonen.</translation>
+ <source>User-defined intent/purpose of the transaction.</source>
+ <translation>Brukerdefinert intensjon/hensikt med transaksjonen.</translation>
</message>
<message>
<source>Amount removed from or added to balance.</source>
@@ -2819,6 +2821,10 @@ Adresse: %4
<translation>Bind til angitt adresse. Bruk [vertsmaskin]:port notasjon for IPv6</translation>
</message>
<message>
+ <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default: %u)</source>
+ <translation>Ratebegrens gratistransaksjoner kontinuerlig til &lt;n&gt;*1000 bytes per minutt (standardverdi: %u)</translation>
+ </message>
+ <message>
<source>Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup</source>
<translation>Slett alle transaksjoner i lommeboken og gjenopprett kun de delene av blokkjeden gjennom -rescan ved oppstart</translation>
</message>
@@ -2839,6 +2845,14 @@ Adresse: %4
<translation>I denne modusen kontrollerer -genproclimit hvor mange blokker som genereres øyeblikkelig.</translation>
</message>
<message>
+ <source>Maximum total fees to use in a single wallet transaction; setting this too low may abort large transactions (default: %s)</source>
+ <translation>Maksimalt samlede gebyrer til å bruke i en enkelt lommeboktransaksjon; settes dette for lavt kan store transaksjoner kanskje avbrytes (standardverdi: %s)</translation>
+ </message>
+ <message>
+ <source>Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, &gt;%u = target size in MiB to use for block files)</source>
+ <translation>Reduser lagringsbehovet ved beskjæring (slette) gamle blokker. Denne modusen deaktiverer støtte for lommebok og er ikke kompatibel med -txindex. Advarsel: Tilbakestilling av denne innstillingen krever at hele blokkjeden må lastes ned på nytt. (Standardverdi: 0 = deaktiver beskjæringsblokker, &gt;%u = mål for størrelse i MiB å bruke for blokkfiler)</translation>
+ </message>
+ <message>
<source>Set the number of script verification threads (%u to %d, 0 = auto, &lt;0 = leave that many cores free, default: %d)</source>
<translation>Angi antall tråder for skriptverifisering (%u til %d, 0 = auto, &lt;0 = la det antallet kjerner være ledig, standard: %d)</translation>
</message>
@@ -2907,10 +2921,6 @@ Adresse: %4
<translation>Valg for feilsøking/testing:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Oppdag egen IP-adresse (standardverdi: 1 ved lytting og uten -externalip)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>Ikke last inn lommeboken og deaktiver RPC-kall</translation>
</message>
@@ -2971,8 +2981,12 @@ Adresse: %4
<translation>Bare koble til noder i nettverket &lt;net&gt; (IPv4, IPv6 eller onion)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Gjenopprett blokkjedeindeks fra blk000??.dat filer</translation>
+ <source>Prune cannot be configured with a negative value.</source>
+ <translation>Beskjæringsmodus kan ikke konfigureres med en negativ verdi.</translation>
+ </message>
+ <message>
+ <source>Prune mode is incompatible with -txindex.</source>
+ <translation>Beskjæringsmodus er ikke kompatibel med -txindex.</translation>
</message>
<message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
@@ -3011,6 +3025,10 @@ Adresse: %4
<translation>Valg for lommebok:</translation>
</message>
<message>
+ <source>Warning: This version is obsolete; upgrade required!</source>
+ <translation>Advarsel: Denne versjonen er utdatert; oppgradering er påkrevd!</translation>
+ </message>
+ <message>
<source>You need to rebuild the database using -reindex to change -txindex</source>
<translation>Du må gjenoppbygge databasen med å bruke -reindex for å endre -txindex</translation>
</message>
@@ -3039,14 +3057,14 @@ Adresse: %4
<translation>Ute av stand til å låse datamappen %s. Bitcoin Core kjører sannsynligvis allerede.</translation>
</message>
<message>
- <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</source>
- <translation>Ratebegrens gratistransaksjoner kontinuerlig til &lt;n&gt;*1000 bytes per minutt (standardverdi: %u)</translation>
- </message>
- <message>
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
<translation>Opprett nye filer med standardtillatelser i systemet, i stedet for umask 077 (kun virksom med lommebokfunksjonalitet slått av)</translation>
</message>
<message>
+ <source>Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)</source>
+ <translation>Oppdag egne IP-adresser (standardverdi: 1 ved lytting og ingen -externalip eller -proxy)</translation>
+ </message>
+ <message>
<source>Error: Listening for incoming connections failed (listen returned error %s)</source>
<translation>Feil: Lytting etter innkommende tilkoblinger feilet (lytting returnerte feil %s)</translation>
</message>
@@ -3079,16 +3097,20 @@ Adresse: %4
<translation>Maksimal størrelse på data i databærende transaksjoner vi videresender og ufører graving på (standardverdi: %u)</translation>
</message>
<message>
- <source>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</source>
- <translation>Maksimal sum av gebyrer som kan brukes i en enkelt lommebokstransaksjon, settes den for lavt kan store transaksjoner bli avbrutt (standardverdi: %s)</translation>
+ <source>Prune configured below the minimum of %d MB. Please use a higher number.</source>
+ <translation>Beskjæringsmodus er konfigurert under minimum på %d MB. Vennligst bruk et høyere nummer.</translation>
</message>
<message>
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
<translation>Søk etter nodeadresser via DNS-oppslag, hvis vi har få adresser å koble til (standard: 1 med mindre -connect)</translation>
</message>
<message>
- <source>Require high priority for relaying free or low-fee transactions (default:%u)</source>
- <translation>Krev høy prioritet for å videreformidle transaksjoner som er gratis eller har lavt gebyr (standardverdi: %u)</translation>
+ <source>Randomize credentials for every proxy connection. This enables Tor stream isolation (default: %u)</source>
+ <translation>Bruk tilfeldig identitet for hver proxytilkobling. Dette muliggjør TOR stream isolasjon (standardverdi: %u)</translation>
+ </message>
+ <message>
+ <source>Require high priority for relaying free or low-fee transactions (default: %u)</source>
+ <translation>Krev høy prioritet for videresending av gratistransaksjoner eller transaksjoner med lavt gebyr (standardverdi: %u)</translation>
</message>
<message>
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
@@ -3099,6 +3121,10 @@ Adresse: %4
<translation>Angi antall tråder for mynt generering hvis aktivert (-1 = alle kjerner, standardverdi: %d)</translation>
</message>
<message>
+ <source>The transaction amount is too small to send after the fee has been deducted</source>
+ <translation>Transaksjonsbeløpet er for lite til å sendes etter at gebyret er fratrukket</translation>
+ </message>
+ <message>
<source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit &lt;https://www.openssl.org/&gt; and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source>
<translation>Dette produktet inneholder programvare utviklet av OpenSSL Project for bruk i OpenSSL Toolkit &lt;https://www.openssl.org/&gt; og kryptografisk programvare skrevet av Eric Young og UPnP-programvare skrevet av Thomas Bernard.</translation>
</message>
@@ -3139,14 +3165,38 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Hvitlistede noder kan ikke DoS-blokkeres, og deres transaksjoner videresendes alltid, selv om de allerede er i minnelageret. Nyttig f.eks. for en gateway.</translation>
</message>
<message>
+ <source>You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain</source>
+ <translation>Du må gjenoppbygge databasen ved hjelp av -reindex for å gå tilbake til ubeskåret modus. Dette vil laste ned hele blokkjeden på nytt.</translation>
+ </message>
+ <message>
+ <source>(default: %u)</source>
+ <translation>(standardverdi: %u)</translation>
+ </message>
+ <message>
<source>Accept public REST requests (default: %u)</source>
<translation>Godta offentlige REST forespørsler (standardverdi: %u)</translation>
</message>
<message>
+ <source>Activating best chain...</source>
+ <translation>Aktiverer beste kjede...</translation>
+ </message>
+ <message>
+ <source>Allow self signed root certificates (default: 0)</source>
+ <translation>Tillat selvsignerte rotsertifikater (standardverdi: 0)</translation>
+ </message>
+ <message>
+ <source>Can't run with a wallet in prune mode.</source>
+ <translation>Kan ikke kjøre med en lommebok i beskjæringsmodus.</translation>
+ </message>
+ <message>
<source>Cannot resolve -whitebind address: '%s'</source>
<translation>Kan ikke løse -whitebind-adresse: '%s'</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Velg datamappe ved oppstart (standard: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Koble til via SOCKS5-proxy</translation>
</message>
@@ -3243,10 +3293,22 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Send transaksjoner uten transaksjonsgebyr hvis mulig (standardverdi: %u)</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Sett SSL-rotsertifikat for betalingsetterspørring (standard: -system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Sett språk, for eksempel "nb_NO" (standardverdi: fra operativsystem)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Vis alle feilsøkingsvalg (bruk: --help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Vis splashskjerm ved oppstart (standardverdi: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Krymp filen debug.log når klienten starter (standardverdi: 1 hvis uten -debug)</translation>
</message>
@@ -3255,6 +3317,14 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Signering av transaksjon feilet</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Start minimert</translation>
+ </message>
+ <message>
+ <source>The transaction amount is too small to pay the fee</source>
+ <translation>Transaksjonsbeløpet er for lite til å betale gebyr</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Dette er eksperimentell programvare.</translation>
</message>
@@ -3275,6 +3345,10 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Transaksjonen er for stor</translation>
</message>
<message>
+ <source>UI Options:</source>
+ <translation>Innstillinger for Brukergrensesnitt:</translation>
+ </message>
+ <message>
<source>Unable to bind to %s on this computer (bind returned error %s)</source>
<translation>Kan ikke binde til %s på denne datamaskinen (binding returnerte feilen %s)</translation>
</message>
@@ -3295,10 +3369,6 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Advarsel</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Advarsel: Denne versjonen er foreldet, oppgradering kreves!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>Advarsel: Argumentet -benchmark er ikke støttet og ble ignorert, bruk -debug=bench.</translation>
</message>
@@ -3443,6 +3513,10 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Hold maks &lt;n&gt; koblinger åpne til andre noder (standardverdi: %u)</translation>
</message>
<message>
+ <source>Make the wallet broadcast transactions</source>
+ <translation>Få lommeboken til å kringkaste transaksjoner</translation>
+ </message>
+ <message>
<source>Maximum per-connection receive buffer, &lt;n&gt;*1000 bytes (default: %u)</source>
<translation>Maks mottaksbuffer per forbindelse, &lt;n&gt;*1000 bytes (standardverdi: %u)</translation>
</message>
diff --git a/src/qt/locale/bitcoin_nl.ts b/src/qt/locale/bitcoin_nl.ts
index 998f8f3590..c953c35404 100644
--- a/src/qt/locale/bitcoin_nl.ts
+++ b/src/qt/locale/bitcoin_nl.ts
@@ -156,10 +156,6 @@
<translation>Wijzig wachtwoord</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Vul uw oude en nieuwe portemonneewachtwoord in.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Bevestig versleuteling van de portemonnee</translation>
</message>
@@ -172,6 +168,10 @@
<translation>Weet u zeker dat u uw portemonnee wilt versleutelen?</translation>
</message>
<message>
+ <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+ <translation>Bitcoin Core zal nu afsluiten om het versleutelingsproces te voltooien. Hou er rekening mee dat versleuteling van je portemonnee je niet volledig beschermt tegen diefstal van jouw bitcoins door malware op je computer.</translation>
+ </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>BELANGRIJK: Elke eerder gemaakte backup van uw portemonneebestand dient u te vervangen door het nieuw gegenereerde, versleutelde portemonneebestand. Om veiligheidsredenen zullen eerdere backups van het niet-versleutelde portemonneebestand onbruikbaar worden zodra u uw nieuwe, versleutelde, portemonnee begint te gebruiken.</translation>
</message>
@@ -185,11 +185,11 @@
</message>
<message>
<source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;ten or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
- <translation>Voer een nieuw wachtwoord in voor uw portomonee.&lt;br/&gt;Gebruik een wachtwoord van &lt;b&gt;tien of meer willekeurige karakters&lt;/b&gt;, of &lt;b&gt;acht of meer woorden&lt;/b&gt;.</translation>
+ <translation>Voer een nieuw wachtwoord in voor uw portemonnee.&lt;br/&gt;Gebruik een wachtwoord van &lt;b&gt;tien of meer willekeurige karakters&lt;/b&gt;, of &lt;b&gt;acht of meer woorden&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin zal nu afsluiten om het versleutelingsproces te voltooien. Onthoudt dat het versleutelen van uw portemonnee u niet volledig kan beschermen: Malware kan uw computer infecteren en uw bitcoins stelen.</translation>
+ <source>Enter the old passphrase and new passphrase to the wallet.</source>
+ <translation>Voer het oude en nieuwe wachtwoord in voor uw portemonnee.</translation>
</message>
<message>
<source>Wallet encryption failed</source>
@@ -311,10 +311,6 @@
<translation>Verstuur munten naar een Bitcoinadres</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Wijzig instellingen van Bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Backup portemonnee naar een andere locatie</translation>
</message>
@@ -431,6 +427,10 @@
<translation>Geen bron voor blokken beschikbaar...</translation>
</message>
<message numerus="yes">
+ <source>Processed %n block(s) of transaction history.</source>
+ <translation><numerusform>%n blok aan transactie geschiedenis verwerkt.</numerusform><numerusform>%n blokken aan transactie geschiedenis verwerkt.</numerusform></translation>
+ </message>
+ <message numerus="yes">
<source>%n hour(s)</source>
<translation><numerusform>%n uur</numerusform><numerusform>%n uur</numerusform></translation>
</message>
@@ -478,35 +478,49 @@
<source>Up to date</source>
<translation>Bijgewerkt</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>%n Blok transactie geschiedenis verwerkt.</numerusform><numerusform>%n Blokken transactie geschiedenis verwerkt.</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>Aan het bijwerken...</translation>
</message>
<message>
- <source>Sent transaction</source>
- <translation>Verzonden transactie</translation>
+ <source>Date: %1
+</source>
+ <translation>Datum: %1
+</translation>
</message>
<message>
- <source>Incoming transaction</source>
- <translation>Binnenkomende transactie</translation>
+ <source>Amount: %1
+</source>
+ <translation>Aantal: %1
+</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
+ <source>Type: %1
</source>
- <translation>Datum: %1
-Bedrag: %2
-Type: %3
-Adres: %4
+ <translation>Type: %1
+</translation>
+ </message>
+ <message>
+ <source>Label: %1
+</source>
+ <translation>Label: %1
</translation>
</message>
<message>
+ <source>Address: %1
+</source>
+ <translation>Adres: %1
+</translation>
+ </message>
+ <message>
+ <source>Sent transaction</source>
+ <translation>Verzonden transactie</translation>
+ </message>
+ <message>
+ <source>Incoming transaction</source>
+ <translation>Binnenkomende transactie</translation>
+ </message>
+ <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Portemonnee is &lt;b&gt;versleuteld&lt;/b&gt; en momenteel &lt;b&gt;geopend&lt;/b&gt;</translation>
</message>
@@ -697,6 +711,18 @@ Adres: %4
<translation>geen</translation>
</message>
<message>
+ <source>This label turns red if the transaction size is greater than 1000 bytes.</source>
+ <translation>Dit label wordt rood als de transactie groter is dan 1000 bytes.</translation>
+ </message>
+ <message>
+ <source>This label turns red if the priority is smaller than "medium".</source>
+ <translation>Dit label wordt rood als de prioriteit lager is dan "gemiddeld".</translation>
+ </message>
+ <message>
+ <source>This label turns red if any recipient receives an amount smaller than %1.</source>
+ <translation>Dit label wordt rood wanneer een ontvanger minder dan %1 krijgt.</translation>
+ </message>
+ <message>
<source>Can vary +/- %1 satoshi(s) per input.</source>
<translation>Kan per input +/- %1 satoshi(s) variëren.</translation>
</message>
@@ -709,10 +735,6 @@ Adres: %4
<translation>nee</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Dit label wordt rood, als de transactie grootte meer dan 1000 bytes is.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Dit betekent dat een vergoeding van minimaal %1 per kB nodig is.</translation>
</message>
@@ -725,14 +747,6 @@ Adres: %4
<translation>Transacties met een hogere prioriteit zullen eerder in een block gezet worden.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Als dit label rood is, is de prioriteit minder dan "medium".</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Dit label wordt rood, als een ontvanger een bedrag van minder dan %1 gekregen heeft.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(geen label)</translation>
</message>
@@ -853,30 +867,6 @@ Adres: %4
<source>command-line options</source>
<translation>commandoregel-opties</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>gebruikersinterfaceopties</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Stel taal in, bijvoorbeeld ''de_DE" (standaard: systeeminstellingen)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Geminimaliseerd starten</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Zet SSL root certificaten voor betalingsverzoek (standaard: -sytem-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Laat laadscherm zien bij het opstarten. (standaard: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Kies de gegevensmap tijdens het opstarten (standaard: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -959,14 +949,6 @@ Adres: %4
<translation>&amp;Algemeen</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Start Bitcoin automatisch na inloggen in het systeem</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>Start &amp;Bitcoin bij het inloggen in het systeem</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Grootte van de &amp;database cache</translation>
</message>
@@ -991,6 +973,10 @@ Adres: %4
<translation>IP-adres van de proxy (bijv. IPv4: 127.0.0.1 / IPv6: ::1)</translation>
</message>
<message>
+ <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin Core.</source>
+ <translation>Stel hier de taal van de applicatie in. Deze instelling zal van kracht worden na het herstarten van de applicatie.</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>Derde partijen URL's (bijvoorbeeld block explorer) dat in de transacties tab verschijnen als contextmenu elementen. %s in de URL is vervangen door transactie hash. Verscheidene URL's zijn gescheiden door een verticale streep |. </translation>
</message>
@@ -1015,6 +1001,14 @@ Adres: %4
<translation>&amp;Netwerk</translation>
</message>
<message>
+ <source>Automatically start Bitcoin Core after logging in to the system.</source>
+ <translation>Bitcoin Kern automatisch starten bij inloggen.</translation>
+ </message>
+ <message>
+ <source>&amp;Start Bitcoin Core on system login</source>
+ <translation>&amp;Start Bitcoin Kern tijdens login.</translation>
+ </message>
+ <message>
<source>(0 = auto, &lt;0 = leave that many cores free)</source>
<translation>(0 = auto, &lt;0 = laat dit aantal kernen vrij)</translation>
</message>
@@ -1079,10 +1073,6 @@ Adres: %4
<translation>&amp;Minimaliseer naar het systeemvak in plaats van de taakbalk</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>Minimaliseer het venster in de plaats van de applicatie af te sluiten als het venster gesloten wordt. Wanneer deze optie aan staan, kan de applicatie alleen worden afgesloten door Afsluiten te kiezen in het menu.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>Minimaliseer bij sluiten van het &amp;venster</translation>
</message>
@@ -1095,10 +1085,6 @@ Adres: %4
<translation>Taal &amp;Gebruikersinterface:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>De taal van de gebruikersinterface kan hier ingesteld worden. Deze instelling zal pas van kracht worden nadat Bitcoin herstart wordt.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Eenheid om bedrag in te tonen:</translation>
</message>
@@ -1135,8 +1121,8 @@ Adres: %4
<translation>Herstart van de client is vereist om veranderingen door te voeren.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>De client zal worden afgesloten, wilt u doorgaan?</translation>
+ <source>Client will be shut down. Do you want to proceed?</source>
+ <translation>Applicatie zal worden afgesloten. Wilt u doorgaan?</translation>
</message>
<message>
<source>This change would require a client restart.</source>
@@ -1245,10 +1231,6 @@ Adres: %4
<translation>Betalingsaanvraagnetwerk komt niet overeen met klantennetwerk.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>Betalingsverzoek is verlopen.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>Betalingsaanvraag is niet geïnitialiseerd.</translation>
</message>
@@ -1324,10 +1306,6 @@ Adres: %4
<translation>User Agent</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Adres/Hostnaam</translation>
- </message>
- <message>
<source>Ping Time</source>
<translation>Ping tijd</translation>
</message>
@@ -1359,14 +1337,6 @@ Adres: %4
<translation>%1s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>Netwerk</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>ONBEKEND</translation>
- </message>
- <message>
<source>None</source>
<translation>Geen</translation>
</message>
@@ -1565,18 +1535,10 @@ Adres: %4
<translation>Debug-logbestand</translation>
</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>Open het Bitcoindebug-logbestand van de huidige datamap. Dit kan een aantal seconden duren voor grote logbestanden.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Maak console leeg</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Welkom bij de Bitcoin RPC-console.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Gebruik de pijltjestoetsen om door de geschiedenis te navigeren, en &lt;b&gt;Ctrl-L&lt;/b&gt; om het scherm leeg te maken.</translation>
</message>
@@ -1865,14 +1827,6 @@ Adres: %4
<translation>Transactiekosteninstellingen verbergen</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Minimaliseer</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>Als de aangepaste toeslag is ingesteld op 1000 satoshis en de transactie is maar 250 bytes, dan wordt bij "per kilobyte" 250 satoshis aan toeslag berekend, terwijl er bij "tenminste" 1000 satoshis worden berekend. Voor transacties die groter zijn dan een kilobyte, wordt in beide gevallen per kilobyte de toeslag berekend.</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>per kilobyte</translation>
</message>
@@ -2001,10 +1955,6 @@ Adres: %4
<translation>of</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Het ontvangstadres is niet geldig, controleer uw invoer.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Het ingevoerde bedrag moet groter zijn dan 0.</translation>
</message>
@@ -2017,10 +1967,6 @@ Adres: %4
<translation>Totaal overschrijdt uw huidige saldo wanneer de %1 transactiekosten worden meegerekend</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Dubbel adres gevonden, u kunt slechts eenmaal naar een bepaald adres verzenden per verstuurtransactie</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Transactie creatie niet gelukt!</translation>
</message>
@@ -2029,18 +1975,10 @@ Adres: %4
<translation>De transactie was afgewezen. Dit kan gebeuren als u eerder uitgegeven munten opnieuw wilt versturen, zoals wanneer u een kopie van uw wallet.dat heeft gebruikt en in de kopie deze munten zijn gemarkeerd als uitgegeven, maar in de huidige nog niet.</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
- <translation>Transactiekosten hoger dan %1 worden gezien als waanzinnig hoog.</translation>
- </message>
- <message>
<source>Pay only the minimum fee of %1</source>
<translation>Betaal alleen de minimale transactiekosten van %1</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>Beginnen van bevesting geschat binnen %1 blok(ken).</translation>
- </message>
- <message>
<source>Warning: Invalid Bitcoin address</source>
<translation>Waarschuwing: Ongeldig Bitcoin adres</translation>
</message>
@@ -2116,10 +2054,6 @@ Adres: %4
<translation>Bericht:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Dit is een geverifieerd betalingsverzoek.</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>Vul een label voor dit adres in om het aan de lijst met gebruikte adressen toe te voegen</translation>
</message>
@@ -2128,10 +2062,6 @@ Adres: %4
<translation>Een bericht dat werd toegevoegd aan de bitcoin: URI dewelke wordt opgeslagen met de transactie ter referentie. Opmerking: Dit bericht zal niet worden verzonden over het Bitcoin netwerk.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Dit is een ongeverifieerd betalingsverzoek.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Betaal Aan:</translation>
</message>
@@ -2162,10 +2092,6 @@ Adres: %4
<translation>O&amp;nderteken Bericht</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>U kunt berichten ondertekenen met een van uw adressen om te bewijzen dat u dit adres bezit. Pas op dat u geen onduidelijke dingen ondertekent, want phishingaanvallen zouden u kunnen misleiden om zo uw identiteit te stelen. Onderteken alleen berichten waarmee u het volledig eens bent.</translation>
- </message>
- <message>
<source>The Bitcoin address to sign the message with</source>
<translation>Het Bitcoin adres om bericht mee te ondertekenen</translation>
</message>
@@ -2218,10 +2144,6 @@ Adres: %4
<translation>&amp;Verifiëer Bericht</translation>
</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>Voer het ondertekenende adres, bericht en handtekening hieronder in (let erop dat u nieuwe regels, spaties en tabs juist overneemt) om de handtekening te verifiëren. Let erop dat u niet meer uit het bericht interpreteert dan er daadwerkelijk staat, om te voorkomen dat u wordt misleid in een man-in-the-middle-aanval.</translation>
- </message>
- <message>
<source>The Bitcoin address the message was signed with</source>
<translation>Het Bitcoin adres waarmee het bericht ondertekend is</translation>
</message>
@@ -2485,10 +2407,6 @@ Adres: %4
<translation>Type</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adres</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>immatuur (%1 bevestigingen, zal beschikbaar zijn na %2)</translation>
</message>
@@ -2517,6 +2435,10 @@ Adres: %4
<translation>Niet verbonden</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Label</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Onbevestigd</translation>
</message>
@@ -2573,10 +2495,6 @@ Adres: %4
<translation>Of er een alleen-bekijken adres is betrokken bij deze transactie.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Ontvangend adres van transactie.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Bedrag verwijderd van of toegevoegd aan saldo</translation>
</message>
@@ -2907,10 +2825,6 @@ Adres: %4
<translation>Foutopsporing/Testopties:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Ontdek eigen IP-adres (standaard: 1 als er wordt geluisterd en geen -externalip is opgegeven)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>Laad de wallet niet en schakel wallet RPC oproepen uit</translation>
</message>
@@ -2971,10 +2885,6 @@ Adres: %4
<translation>Verbind alleen met nodes in netwerk &lt;net&gt; (ipv4, ipv6 of onion)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Blokketen opnieuw opbouwen met behulp van huidige blk000??.dat-bestanden</translation>
- </message>
- <message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation>Zet database cache grootte in megabytes (%d tot %d, standaard: %d)</translation>
</message>
@@ -3039,10 +2949,6 @@ Adres: %4
<translation>Kan geen lock verkrijgen op gegevensmap %s. Bitcoin Core draait waarschijnlijk al.</translation>
</message>
<message>
- <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</source>
- <translation>Doorlopend tarief-limiet op gratis transacties toepassen tot &lt;n&gt;*1000 bytes per minuut (standaard: %u)</translation>
- </message>
- <message>
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
<translation>Creër nieuwe bestanden met standaard systeem bestandsrechten in plaats van umask 077 (alleen effectief met uitgeschakelde portemonnee functionaliteit)</translation>
</message>
@@ -3080,18 +2986,10 @@ Adres: %4
(default: %u)</translation>
</message>
<message>
- <source>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</source>
- <translation>Maximale totale kosten om te gebruiken in een enkele portemonnee transactie , vaststellen van een te laag kan grote transacties af te breken (default: %s)</translation>
- </message>
- <message>
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
<translation>Query voor peer- adressen via DNS- lookup , als laag op adressen (default: 1 unless -connect)</translation>
</message>
<message>
- <source>Require high priority for relaying free or low-fee transactions (default:%u)</source>
- <translation>Vereisen een hoge prioriteit voor het doorgeven van gratis of tegen lage vergoeding transacties (default:%u)</translation>
- </message>
- <message>
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
<translation>Stel maximumgrootte in bytes in voor hoge-prioriteits-/lage-transactiekosten-transacties (standaard: %d)</translation>
</message>
@@ -3124,6 +3022,10 @@ Adres: %4
<translation>Kan -whitebind adres niet herleiden: '%s'</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Kies de gegevensmap tijdens het opstarten (standaard: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Verbind door SOCKS5 proxy</translation>
</message>
@@ -3220,10 +3122,22 @@ Adres: %4
<translation>Verstuur transacties zonder verzendkosten indien mogelijk (standaard: %u)</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Zet SSL root certificaten voor betalingsverzoek (standaard: -sytem-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Stel taal in, bijvoorbeeld ''de_DE" (standaard: systeeminstellingen)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Toon alle foutopsporingsopties (gebruik: --help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Laat laadscherm zien bij het opstarten. (standaard: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Verklein debug.log-bestand bij het opstarten van de client (standaard: 1 als geen -debug)</translation>
</message>
@@ -3232,6 +3146,10 @@ Adres: %4
<translation>Ondertekenen van transactie mislukt</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Geminimaliseerd starten</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Dit is experimentele software.</translation>
</message>
@@ -3272,10 +3190,6 @@ Adres: %4
<translation>Waarschuwing</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Waarschuwing: Deze versie is verouderd, een upgrade is vereist!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>Waarschuwing: Niet ondersteund argument -benchmark genegeerd, gebruik -debug=bench.</translation>
</message>
diff --git a/src/qt/locale/bitcoin_pam.ts b/src/qt/locale/bitcoin_pam.ts
index 355d167271..503528f4a7 100644
--- a/src/qt/locale/bitcoin_pam.ts
+++ b/src/qt/locale/bitcoin_pam.ts
@@ -47,7 +47,7 @@
</message>
<message>
<source>Sending addresses</source>
- <translation>Address king pamag-Padala</translation>
+ <translation>Address king pamag-Send</translation>
</message>
<message>
<source>Receiving addresses</source>
@@ -132,10 +132,6 @@
<translation>Alilan ya ing passphrase</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Palub ye ing luma ampo ing bayung passphrase king wallet.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Kumpirman ya ing wallet encryption</translation>
</message>
@@ -160,10 +156,6 @@
<translation>Me-encrypt ne ing wallet</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Ing Bitcoin ngeni magsara ya ban ayari ing proseso ning pamag-encrypt. Tandanan yu king pamag-encrypt wallet, ali nala aprotektan king kabuuan reng bitcoins yu kareng malware a kasalunsungan atiu kareng computer yu.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Memali ya ing pamag-encrypt king wallet </translation>
</message>
@@ -255,10 +247,6 @@
<translation>Magpadalang barya king Bitcoin address</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Alilan ing pipamilian konpigurasion para keng Bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>I-backup ing wallet king aliwang lugal</translation>
</message>
@@ -351,18 +339,6 @@
<translation>Paparatang a transaksion</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Aldo: %1
-Alaga: %2
-Type: %3
-Address: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Maka-&lt;b&gt;encrypt&lt;/b&gt; ya ing wallet at kasalukuyan yang maka-&lt;b&gt;unlocked&lt;/b&gt;</translation>
</message>
@@ -481,23 +457,7 @@ Address: %4
<source>command-line options</source>
<translation>pipamilian command-line</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Pipamilian ning UI</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Mamiling Amanu, alimbawa "de_DE"(default: system locale)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Umpisan ing pamaglati</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Ipalto ing splash screen keng umpisa (default: 1)</translation>
- </message>
- </context>
+</context>
<context>
<name>Intro</name>
<message>
@@ -527,14 +487,6 @@ Address: %4
<translation>&amp;Pun</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Umpisan yang antimu ing Bitcoin kaibat mekapag-log in king sistema.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Umpisan ya ing Bitcoin king pamag-log-in na ning sistema.</translation>
- </message>
- <message>
<source>&amp;Network</source>
<translation>&amp;Network</translation>
</message>
@@ -571,10 +523,6 @@ Address: %4
<translation>&amp;Latian ya ing tray kesa king taskbar</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>Palatian namu kesa king iluwal ya ing aplikasion istung makasara ya ing awang. Istung ing pipamilian a ini atiu king "magsilbi", ing aplikasion misara yamu kaibat meng pinili ing "Tuknangan" king menu.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>P&amp;alatian istung isara</translation>
</message>
@@ -587,10 +535,6 @@ Address: %4
<translation>Amanu na ning user interface:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Ing amanu na ning user interface maliari yang i-ayus o ilage keni. Ing ayus a ini magsilbi yamu istung pesibayuan meng pasibayu ing Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>Ing &amp;Unit a ipakit king alaga ning:</translation>
</message>
@@ -741,18 +685,10 @@ Address: %4
<translation>Debug log file</translation>
</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>Ibuklat ing Bitcoin debug log file menibat king kasalungsungan data directory. Magluat ya ining pilan segundu para kareng mamaragul a log files.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>I-Clear ing console</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Malaus kayu king Bitcoin RPC console.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Gamitan me ing patas at pababang arrow para alibut me ing kasalesayan, at &lt;b&gt;Ctrl-L&lt;/b&gt; ban I-clear ya ing screen.</translation>
</message>
@@ -857,10 +793,6 @@ Address: %4
<translation>Kopyan ing alaga</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Ing address na ning tumanggap ali ya katanggap-tanggap, maliari pung pakilaue pasibayu.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Ing alaga na ning bayaran dapat mung mas matas ya king 0.</translation>
</message>
@@ -873,10 +805,6 @@ Address: %4
<translation>Ing kabuuan mipasobra ya king kekang balanse istung inabe ya ing %1 a bayad king transaksion </translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Atin meakit a milupang address, maliari kamung magpadalang misan king metung a address king misan a pamagpadalang transaksion.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(alang label)</translation>
</message>
@@ -926,10 +854,6 @@ Address: %4
<translation>&amp;Pirman ing Mensayi</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Maliari kang mamirmang mensayi king kekang address bilang patune na keka ya ini. Mimingat mu king pamag-pirmang e malino uling mapalyari kang mabiktimang phishing attack a manloku keka na pirman me ing sarili mu para king karela. Only sign fully-detailed statements you agree to.</translation>
- </message>
- <message>
<source>Alt+A</source>
<translation>Alt+A</translation>
</message>
@@ -1185,10 +1109,6 @@ Address: %4
<translation>Klase</translation>
</message>
<message>
- <source>Address</source>
- <translation>Address</translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Makabuklat anggang %1</translation>
</message>
@@ -1205,6 +1125,10 @@ Address: %4
<translation>Me-generate ya oneng ali ya metanggap</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Label</translation>
+ </message>
+ <message>
<source>Received with</source>
<translation>Atanggap kayabe ning</translation>
</message>
@@ -1241,10 +1165,6 @@ Address: %4
<translation>Klase ning transaksion</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Kepuntalan a address ning transaksion</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Alagang milako o miragdag king balanse.</translation>
</message>
@@ -1431,10 +1351,6 @@ Address: %4
<translation>Mekapansin lang me-corrupt a block database</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>I-discover ing sariling IP address (default: 1 istung makiramdam at -externalip)</translation>
- </message>
- <message>
<source>Do you want to rebuild the block database now?</source>
<translation>Buri meng buuan pasibayu ing block database ngene?</translation>
</message>
@@ -1463,6 +1379,18 @@ Address: %4
<translation>Magpadalang trace/debug info okeng console kesa keng debug.log file</translation>
</message>
<message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Mamiling Amanu, alimbawa "de_DE"(default: system locale)</translation>
+ </message>
+ <message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Ipalto ing splash screen keng umpisa (default: 1)</translation>
+ </message>
+ <message>
+ <source>Start minimized</source>
+ <translation>Umpisan ing pamaglati</translation>
+ </message>
+ <message>
<source>Transaction too large</source>
<translation>Maragul yang masiadu ing transaksion</translation>
</message>
@@ -1475,10 +1403,6 @@ Address: %4
<translation>Kapabaluan</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Kapabaluan: Ing bersioin a ini laus ne, kailangan nang mag-upgrade!</translation>
- </message>
- <message>
<source>Password for JSON-RPC connections</source>
<translation>Password para king JSON-RPC koneksion</translation>
</message>
diff --git a/src/qt/locale/bitcoin_pl.ts b/src/qt/locale/bitcoin_pl.ts
index d139f9560e..aece2bfa1e 100644
--- a/src/qt/locale/bitcoin_pl.ts
+++ b/src/qt/locale/bitcoin_pl.ts
@@ -3,7 +3,7 @@
<name>AddressBookPage</name>
<message>
<source>Right-click to edit address or label</source>
- <translation>Prawy klik żeby edytować adres lub etykietę</translation>
+ <translation>Kliknij prawy przycisk aby edytować adres lub etykietę</translation>
</message>
<message>
<source>Create a new address</source>
@@ -87,7 +87,7 @@
</message>
<message>
<source>Comma separated file (*.csv)</source>
- <translation>Plik *.CSV (rozdzielany przecinkami)</translation>
+ <translation>CSV (rozdzielany przecinkami)</translation>
</message>
<message>
<source>Exporting Failed</source>
@@ -156,10 +156,6 @@
<translation>Zmień hasło</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Podaj stare i nowe hasło do portfela.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Potwierdź szyfrowanie portfela</translation>
</message>
@@ -188,10 +184,6 @@
<translation>Wprowadź nowe hasło do portfela.&lt;br/&gt;Proszę używać hasła złożonego z &lt;b&gt;10 lub więcej losowych znaków&lt;/b&gt; lub &lt;b&gt;ośmiu lub więcej słów.&lt;/b&gt;</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Program Bitcoin zamknie się aby dokończyć proces szyfrowania. Pamiętaj, że szyfrowanie portfela nie zabezpiecza w pełni Twoich bitcoinów przed kradzieżą przez wirusy lub trojany mogące zainfekować Twój komputer.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Szyfrowanie portfela nie powiodło się</translation>
</message>
@@ -311,10 +303,6 @@
<translation>Wyślij monety na adres Bitcoin</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Zmienia opcje konfiguracji bitcoina</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Zapasowy portfel w innej lokalizacji</translation>
</message>
@@ -422,34 +410,14 @@
<source>Show the Bitcoin Core help message to get a list with possible Bitcoin command-line options</source>
<translation>Pokaż pomoc Rdzenia Bitcoin, aby zobaczyć listę wszystkich opcji linii poleceń</translation>
</message>
- <message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n aktywne połączenie do sieci Bitcoin</numerusform><numerusform>%n aktywne połączenia do sieci Bitcoin</numerusform><numerusform>%n aktywnych połączeń do sieci Bitcoin</numerusform></translation>
- </message>
<message>
<source>No block source available...</source>
<translation>Brak dostępnych źródeł bloków...</translation>
</message>
- <message numerus="yes">
- <source>%n hour(s)</source>
- <translation><numerusform>%n godzina</numerusform><numerusform>%n godzin</numerusform><numerusform>%n godzin</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n day(s)</source>
- <translation><numerusform>%n dzień</numerusform><numerusform>%n dni</numerusform><numerusform>%n dni</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>%n tydzień</numerusform><numerusform>%n tygodni</numerusform><numerusform>%n tygodni</numerusform></translation>
- </message>
<message>
<source>%1 and %2</source>
<translation>%1 i %2</translation>
</message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation><numerusform>%n rok</numerusform><numerusform>%n lata</numerusform><numerusform>%n lat</numerusform></translation>
- </message>
<message>
<source>%1 behind</source>
<translation>%1 wstecz</translation>
@@ -478,10 +446,6 @@
<source>Up to date</source>
<translation>Aktualny</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>Przetworzono %n blok historii transakcji.</numerusform><numerusform>Przetworzono %n bloki historii transakcji.</numerusform><numerusform>Przetworzono %n bloków historii transakcji.</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>Synchronizuję się...</translation>
@@ -495,18 +459,6 @@
<translation>Transakcja przychodząca</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Data: %1
-Kwota: %2
-Typ: %3
-Adres: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Portfel jest &lt;b&gt;zaszyfrowany&lt;/b&gt; i obecnie &lt;b&gt;odblokowany&lt;/b&gt;</translation>
</message>
@@ -646,7 +598,7 @@ Adres: %4
</message>
<message>
<source>Copy dust</source>
- <translation>Kopiuj pył</translation>
+ <translation>Kopiuj kurz</translation>
</message>
<message>
<source>Copy change</source>
@@ -709,10 +661,6 @@ Adres: %4
<translation>nie</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Ta etykieta staje się czerwona, kiedy transakcja jest większa niż 1000 bajtów.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Oznacza to wymaganą opłatę minimum %1 na kB.</translation>
</message>
@@ -725,14 +673,6 @@ Adres: %4
<translation>Transakcje o wyższym priorytecie zwykle szybciej zostają dołączone do bloku.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Ta etykieta jest czerwona, jeżeli priorytet jest mniejszy niż "średni"</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Etykieta staje się czerwona kiedy którykolwiek odbiorca otrzymuje kwotę mniejszą niż %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(brak etykiety)</translation>
</message>
@@ -853,30 +793,6 @@ Adres: %4
<source>command-line options</source>
<translation>opcje konsoli</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Opcje UI</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Ustaw Język, na przykład "pl_PL" (domyślnie: systemowy)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Uruchom zminimalizowany</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Ustaw certyfikaty główne SSL dla żądań płatności (domyślnie: -system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Pokazuj okno powitalne przy starcie (domyślnie: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Wybierz folder danych przy starcie (domyślnie: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -916,15 +832,7 @@ Adres: %4
<source>Error</source>
<translation>Błąd</translation>
</message>
- <message numerus="yes">
- <source>%n GB of free space available</source>
- <translation><numerusform>%n GB dostępnego wolnego miejsca</numerusform><numerusform>%n GB dostępnego wolnego miejsca</numerusform><numerusform>%n GB dostępnego wolnego miejsca</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>(of %n GB needed)</source>
- <translation><numerusform>(z %n GB potrzebnego)</numerusform><numerusform>(z %n GB potrzebnych)</numerusform><numerusform>(z %n GB potrzebnych)</numerusform></translation>
- </message>
-</context>
+ </context>
<context>
<name>OpenURIDialog</name>
<message>
@@ -959,14 +867,6 @@ Adres: %4
<translation>Główne</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Automatycznie uruchamia Bitcoin po zalogowaniu do systemu.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>Uruchamiaj Bitcoin wraz z zalogowaniem do &amp;systemu</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Wielkość bufora bazy &amp;danych</translation>
</message>
@@ -1067,10 +967,6 @@ Adres: %4
<translation>&amp;Minimalizuj do paska przy zegarku zamiast do paska zadań</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>Minimalizuje zamiast zakończyć działanie programu przy zamykaniu okna. Kiedy ta opcja jest włączona, program zakończy działanie po wybieraniu Zamknij w menu.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimalizuj przy zamknięciu</translation>
</message>
@@ -1083,10 +979,6 @@ Adres: %4
<translation>Język &amp;Użytkownika:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Można tu ustawić język interfejsu uzytkownika. Żeby ustawienie przyniosło skutek trzeba uruchomić ponownie Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Jednostka pokazywana przy kwocie:</translation>
</message>
@@ -1123,10 +1015,6 @@ Adres: %4
<translation>Wymagany restart programu, aby uaktywnić zmiany.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>Program zostanie wyłączony. Czy chcesz kontynuować?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>Ta zmiana może wymagać ponownego uruchomienia klienta.</translation>
</message>
@@ -1233,10 +1121,6 @@ Adres: %4
<translation>Sieć żądania płatności nie odpowiada sieci klienta.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>Zażądanie płatności się przedawniło.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>Żądanie płatności nie jest zainicjowane.</translation>
</message>
@@ -1280,10 +1164,6 @@ Adres: %4
<context>
<name>PeerTableModel</name>
<message>
- <source>Address/Hostname</source>
- <translation>Adres/Nazwa hosta</translation>
- </message>
- <message>
<source>Ping Time</source>
<translation>Czas odpowiedzi</translation>
</message>
@@ -1315,14 +1195,6 @@ Adres: %4
<translation>%1 s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>SIEĆ</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>NIEZNANY</translation>
- </message>
- <message>
<source>None</source>
<translation>Żaden</translation>
</message>
@@ -1497,18 +1369,10 @@ Adres: %4
<translation>Plik logowania debugowania</translation>
</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>Otwórz plik logowania debugowania Bitcoin z obecnego katalogu z danymi. Może to potrwać kilka sekund przy większych plikach.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Wyczyść konsolę</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Witam w konsoli Bitcoin RPC.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Użyj strzałek do przewijania historii i &lt;b&gt;Ctrl-L&lt;/b&gt; aby wyczyścić ekran</translation>
</message>
@@ -1589,7 +1453,7 @@ Adres: %4
</message>
<message>
<source>Clear all fields of the form.</source>
- <translation>Wyczyść pola formularza.</translation>
+ <translation>Wyczyść wszystkie pola formularza.</translation>
</message>
<message>
<source>Clear</source>
@@ -1707,7 +1571,7 @@ Adres: %4
</message>
<message>
<source>(no label)</source>
- <translation>(bez etykiety)</translation>
+ <translation>(brak etykiety)</translation>
</message>
<message>
<source>(no message)</source>
@@ -1722,7 +1586,7 @@ Adres: %4
<name>SendCoinsDialog</name>
<message>
<source>Send Coins</source>
- <translation>Wyślij Monety</translation>
+ <translation>Wyślij monety</translation>
</message>
<message>
<source>Coin Control Features</source>
@@ -1789,10 +1653,6 @@ Adres: %4
<translation>zwiń opcje opłaty</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Minimalizuj</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>za kilobajt</translation>
</message>
@@ -1905,10 +1765,6 @@ Adres: %4
<translation>lub</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Adres odbiorcy jest nieprawidłowy, proszę poprawić.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Kwota do zapłacenia musi być większa od 0.</translation>
</message>
@@ -1921,10 +1777,6 @@ Adres: %4
<translation>Suma przekracza twoje saldo, gdy doliczymy %1 prowizji transakcyjnej.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Znaleziono powtórzony adres, można wysłać tylko raz na każdy adres podczas jednej operacji wysyłania.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Utworzenie transakcji nie powiodło się!</translation>
</message>
@@ -1933,10 +1785,6 @@ Adres: %4
<translation>Transakcja została odrzucona! Może się to zdarzyć jeśli część monet z portfela została już wydana używając kopii pliku wallet.dat i nie zostało to tutaj uwzględnione.</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
- <translation>Opłata wyższa niż %1 jest uważana za szalenie wysoką.</translation>
- </message>
- <message>
<source>Pay only the minimum fee of %1</source>
<translation>Płac tylko minimalna opłatę %1</translation>
</message>
@@ -1946,7 +1794,7 @@ Adres: %4
</message>
<message>
<source>(no label)</source>
- <translation>(bez etykiety)</translation>
+ <translation>(brak etykiety)</translation>
</message>
<message>
<source>Warning: Unknown change address</source>
@@ -1985,7 +1833,7 @@ Adres: %4
</message>
<message>
<source>Choose previously used address</source>
- <translation>Wybierz wcześniej użyty adres </translation>
+ <translation>Wybierz wcześniej użyty adres</translation>
</message>
<message>
<source>This is a normal payment.</source>
@@ -2012,18 +1860,10 @@ Adres: %4
<translation>Wiadomość:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>To żądanie zapłaty jest zweryfikowane.</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>Wprowadź etykietę dla tego adresu by dodać go do listy użytych adresów</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>To żądanie zapłaty nie zostało zweryfikowane.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Wpłać do:</translation>
</message>
@@ -2054,10 +1894,6 @@ Adres: %4
<translation>Podpi&amp;sz Wiadomość</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Możesz podpisywać wiadomości swoimi adresami aby udowodnić, że jesteś ich właścicielem. Uważaj, aby nie podpisywać niczego co wzbudza Twoje podejrzenia, ponieważ ktoś może stosować phishing próbując nakłonić Cię do ich podpisania. Akceptuj i podpisuj tylko w pełni zrozumiałe komunikaty i wiadomości.</translation>
- </message>
- <message>
<source>Choose previously used address</source>
<translation>Wybierz wcześniej użyty adres</translation>
</message>
@@ -2106,10 +1942,6 @@ Adres: %4
<translation>&amp;Zweryfikuj wiadomość</translation>
</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>Wpisz adres podpisu, wiadomość (upewnij się, że dokładnie skopiujesz wszystkie zakończenia linii, spacje, tabulacje itp.) oraz podpis poniżej by sprawdzić wiadomość. Uważaj by nie dodać więcej do podpisu niż do samej podpisywanej wiadomości by uniknąć ataku man-in-the-middle (człowiek pośrodku)</translation>
- </message>
- <message>
<source>Verify the message to ensure it was signed with the specified Bitcoin address</source>
<translation>Zweryfikuj wiadomość, aby upewnić się, że została podpisana odpowiednim adresem Bitcoin.</translation>
</message>
@@ -2222,10 +2054,6 @@ Adres: %4
<source>Status</source>
<translation>Status</translation>
</message>
- <message numerus="yes">
- <source>, broadcast through %n node(s)</source>
- <translation><numerusform>, przekazywany przez %n węzeł</numerusform><numerusform>, przekazywany przez %n węzły</numerusform><numerusform>, przekazywany przez %n węzłów</numerusform></translation>
- </message>
<message>
<source>Date</source>
<translation>Data</translation>
@@ -2258,10 +2086,6 @@ Adres: %4
<source>Credit</source>
<translation>Przypisy</translation>
</message>
- <message numerus="yes">
- <source>matures in %n more block(s)</source>
- <translation><numerusform>potwierdzona przy %n bloku więcej</numerusform><numerusform>potwierdzona przy %n blokach więcej</numerusform><numerusform>potwierdzona przy %n blokach więcej</numerusform></translation>
- </message>
<message>
<source>not accepted</source>
<translation>niezaakceptowane</translation>
@@ -2326,10 +2150,6 @@ Adres: %4
<source>, has not been successfully broadcast yet</source>
<translation>, nie został jeszcze pomyślnie rozesłany</translation>
</message>
- <message numerus="yes">
- <source>Open for %n more block(s)</source>
- <translation><numerusform>Otwórz dla %n bloku</numerusform><numerusform>Otwórz dla %n następnych bloków</numerusform><numerusform>Otwórz dla %n następnych bloków</numerusform></translation>
- </message>
<message>
<source>unknown</source>
<translation>nieznany</translation>
@@ -2357,10 +2177,6 @@ Adres: %4
<translation>Typ</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adres</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Niedojrzała (%1 potwierdzeń, będzie dostępna po %2)</translation>
</message>
@@ -2385,6 +2201,10 @@ Adres: %4
<translation>Offline</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Etykieta</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Niepotwierdzone:</translation>
</message>
@@ -2433,10 +2253,6 @@ Adres: %4
<translation>Rodzaj transakcji.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Adres docelowy transakcji.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Kwota usunięta z lub dodana do konta.</translation>
</message>
@@ -2743,10 +2559,6 @@ Adres: %4
<translation>Opcje debugowania/testowania:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Wykryj własny adres IP (domyślnie: 1 kiedy w trybie nasłuchu i brak -externalip )</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>Nie ładuj portfela i wyłącz wywołania RPC portfela</translation>
</message>
@@ -2803,10 +2615,6 @@ Adres: %4
<translation>Łącz z węzłami tylko w sieci &lt;net&gt; (ipv4, piv6 lub onion)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Odbuduj indeks łańcucha bloków z obecnych plików blk000??.dat</translation>
- </message>
- <message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation>Ustaw wielkość pamięci podręcznej w megabajtach (%d do %d, domyślnie: %d)</translation>
</message>
@@ -2883,10 +2691,6 @@ Adres: %4
<translation>Wyszukaj adresy węzłów wykorzystując zapytanie DNS, jeżeli masz mało adresów (domyślnie: 1 jeśli nie użyto -connect)</translation>
</message>
<message>
- <source>Require high priority for relaying free or low-fee transactions (default:%u)</source>
- <translation>Wymagaj wysokiego priorytetu dla przekazywania transakcji darmowych lub o niskiej opłacie (domyślnie:%u)</translation>
- </message>
- <message>
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
<translation>Ustaw maksymalny rozmiar transakcji o wysokim priorytecie/niskiej prowizji w bajtach (domyślnie: %d)</translation>
</message>
@@ -2903,6 +2707,10 @@ Adres: %4
<translation>Ostrzeżenie: -matxfee jest ustawione bardzo wysokie! Tak wysokie opłaty mogą być zapłacone w jednej transakcji.</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Wybierz folder danych przy starcie (domyślnie: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Połącz przez SOCKS5 proxy</translation>
</message>
@@ -2979,10 +2787,22 @@ Adres: %4
<translation>Wyślij bez opłaty jeżeli to możliwe (domyślnie: %u)</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Ustaw certyfikaty główne SSL dla żądań płatności (domyślnie: -system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Ustaw Język, na przykład "pl_PL" (domyślnie: systemowy)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Pokaż wszystkie opcje odpluskwiania (użycie: --help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Pokazuj okno powitalne przy starcie (domyślnie: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Zmniejsz plik debug.log przy starcie programu (domyślnie: 1 jeśli nie użyto -debug)</translation>
</message>
@@ -2991,6 +2811,10 @@ Adres: %4
<translation>Podpisywanie transakcji nie powiodło się</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Uruchom zminimalizowany</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>To oprogramowanie eksperymentalne.</translation>
</message>
@@ -3031,10 +2855,6 @@ Adres: %4
<translation>Ostrzeżenie</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Uwaga: Ta wersja jest przestarzała, wymagana jest aktualizacja!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>Uwaga: Zignorowano nieprawidłowy argument -benchmark, użyj -debug=bench.</translation>
</message>
diff --git a/src/qt/locale/bitcoin_pt_BR.ts b/src/qt/locale/bitcoin_pt_BR.ts
index bc85f1f316..89467bae43 100644
--- a/src/qt/locale/bitcoin_pt_BR.ts
+++ b/src/qt/locale/bitcoin_pt_BR.ts
@@ -59,11 +59,11 @@
</message>
<message>
<source>Sending addresses</source>
- <translation>Enviando endereços</translation>
+ <translation>Endereços para envios</translation>
</message>
<message>
<source>Receiving addresses</source>
- <translation>Recebendo endereços</translation>
+ <translation>Endereços para receber</translation>
</message>
<message>
<source>These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
@@ -156,22 +156,22 @@
<translation>Alterar frase de segurança</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Digite a frase de segurança antiga e nova para a carteira.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Confirmar criptografia da carteira</translation>
</message>
<message>
<source>Warning: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!</source>
- <translation>Atenção: Se você criptografar sua carteira e perder sua senha, você vai &lt;b&gt;perder todos os seus BITCOINS!&lt;/b&gt;</translation>
+ <translation>Atenção: Se você criptografar sua carteira e perder sua frase, você vai &lt;b&gt;perder todos os seus BITCOINS!&lt;/b&gt;</translation>
</message>
<message>
<source>Are you sure you wish to encrypt your wallet?</source>
<translation>Tem certeza de que deseja criptografar sua carteira?</translation>
</message>
<message>
+ <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+ <translation>O Bitcoin irá fechar agora para terminar o processo de criptografia. Lembre-se que criptografando sua carteira não te protege totalmente de ter seus bitcoins roubados por um malware que infectar seu computador.</translation>
+ </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>IMPORTANTE: Qualquer backup prévio que você tenha feito do seu arquivo wallet deve ser substituído pelo novo e encriptado arquivo wallet gerado. Por razões de segurança, qualquer backup do arquivo wallet não criptografado se tornará inútil assim que você começar a usar uma nova carteira criptografada.</translation>
</message>
@@ -185,11 +185,11 @@
</message>
<message>
<source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;ten or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
- <translation>Digite a nova senha da carteira. &lt;br/&gt;Por favor utilize uma senha com &lt;b&gt;dez ou mais caracteres aleartórios&lt;/b&gt;, ou &lt;b&gt;oito ou mais palavras&lt;/b&gt;.</translation>
+ <translation>Digite a nova frase da carteira. &lt;br/&gt;Por favor utilize uma senha com &lt;b&gt;dez ou mais caracteres aleartórios&lt;/b&gt;, ou &lt;b&gt;oito ou mais palavras&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>O Bitcoin irá fechar agora para finalizar o processo de encriptação. Lembre-se de que encriptar sua carteira não protege totalmente suas bitcoins de serem roubadas por malwares que tenham infectado o seu computador.</translation>
+ <source>Enter the old passphrase and new passphrase to the wallet.</source>
+ <translation>Insira a frase antiga e a nova da carteira.</translation>
</message>
<message>
<source>Wallet encryption failed</source>
@@ -311,10 +311,6 @@
<translation>Enviar moedas para um endereço bitcoin</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Modificar opções de configuração para bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Fazer cópia de segurança da carteira para uma outra localização</translation>
</message>
@@ -403,6 +399,10 @@
<translation>&amp;Sobre Bitcoin</translation>
</message>
<message>
+ <source>Modify configuration options for Bitcoin Core</source>
+ <translation>Modificar opções de configuração do Bitcoin</translation>
+ </message>
+ <message>
<source>Show the list of used sending addresses and labels</source>
<translation>Mostrar a lista de endereços de envio e rótulos usados</translation>
</message>
@@ -483,6 +483,36 @@
<translation>Recuperando o atraso ...</translation>
</message>
<message>
+ <source>Date: %1
+</source>
+ <translation>Data: %1
+</translation>
+ </message>
+ <message>
+ <source>Amount: %1
+</source>
+ <translation>Quantidade: %1
+</translation>
+ </message>
+ <message>
+ <source>Type: %1
+</source>
+ <translation>Tipo: %1
+</translation>
+ </message>
+ <message>
+ <source>Label: %1
+</source>
+ <translation>Rótulo: %1
+</translation>
+ </message>
+ <message>
+ <source>Address: %1
+</source>
+ <translation>Endereço: %1
+</translation>
+ </message>
+ <message>
<source>Sent transaction</source>
<translation>Transação enviada</translation>
</message>
@@ -491,17 +521,6 @@
<translation>Transação recebida</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Data: %1
-Quantidade: %2
-Tipo: %3
-Endereço: %4</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Carteira está &lt;b&gt;criptografada&lt;/b&gt; e atualmente &lt;b&gt;desbloqueada&lt;/b&gt;</translation>
</message>
@@ -692,6 +711,18 @@ Endereço: %4</translation>
<translation>nenhum</translation>
</message>
<message>
+ <source>This label turns red if the transaction size is greater than 1000 bytes.</source>
+ <translation>Este texto fica vermelho se o tamanho da transação for maior que 1000 bytes.</translation>
+ </message>
+ <message>
+ <source>This label turns red if the priority is smaller than "medium".</source>
+ <translation>Este texto fica vermelho se a prioridade é menor que "medio".</translation>
+ </message>
+ <message>
+ <source>This label turns red if any recipient receives an amount smaller than %1.</source>
+ <translation>Este texto fica vermelho se qualquer destinatário receber uma quantidade menor que %1.</translation>
+ </message>
+ <message>
<source>Can vary +/- %1 satoshi(s) per input.</source>
<translation>Pode variar +/- %1 satoshi(s) por entrada.</translation>
</message>
@@ -704,10 +735,6 @@ Endereço: %4</translation>
<translation>não</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Esse marcador fica vermelho se a transação ultrapassar 1000 bytes.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Isso significa que uma taxa de pelo menos %1 por kB é necessária.</translation>
</message>
@@ -720,14 +747,6 @@ Endereço: %4</translation>
<translation>Transações de alta prioridade são mais propensas a serem incluídas em um bloco.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Esse marcador fica vermelho se a prioridade for menor que "média".</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Esse marcador fica vermelho se qualquer destinatário receber uma quantia menor que %1</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(Sem rótulo)</translation>
</message>
@@ -848,30 +867,6 @@ Endereço: %4</translation>
<source>command-line options</source>
<translation>opções da linha de comando</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>opções da UI</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Escolher língua, por exemplo "de_DE" (padrão: localização do sistema)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Inicializar minimizado</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Define certificados SSL root para requisição de pagamento (padrão: -system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Mostrar tela inicial ao ligar (padrão: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Escolha o diretório de dados na inicialização (padrão: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -954,14 +949,6 @@ Endereço: %4</translation>
<translation>Principal</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Iniciar Bitcoin automaticamente após se logar no sistema.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>Iniciar Bitcoin no login do sistema</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Tamanho do banco de &amp;dados do cache</translation>
</message>
@@ -986,6 +973,14 @@ Endereço: %4</translation>
<translation>Endereço de IP do proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1)</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 Exit in the menu.</source>
+ <translation>Minimizar em vez de fechar o programa quando a janela for fechada. Quando essa opção estiver ativa, o programa só será fechado somente pela opção Sair no menu Arquivo.</translation>
+ </message>
+ <message>
+ <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin Core.</source>
+ <translation>A linguagem da interface do usuário pode ser alterada aqui. A mudança ocorrerá após o reinício do Bitcoin Core.</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>URLs de terceiros (exemplo: explorador de blocos) que aparecem na aba de transações como itens do menu de contexto. %s na URL é substituido pela hash da transação. Múltiplas URLs são separadas pela barra vertical |.</translation>
</message>
@@ -1010,6 +1005,14 @@ Endereço: %4</translation>
<translation>Rede</translation>
</message>
<message>
+ <source>Automatically start Bitcoin Core after logging in to the system.</source>
+ <translation>Inicar automaticamente o Bitcoin ao logar no sistema.</translation>
+ </message>
+ <message>
+ <source>&amp;Start Bitcoin Core on system login</source>
+ <translation>&amp;Iniciar Bitcoin no login do sistema</translation>
+ </message>
+ <message>
<source>(0 = auto, &lt;0 = leave that many cores free)</source>
<translation>(0 = automático, &lt;0 = número de cores deixados livres)</translation>
</message>
@@ -1074,10 +1077,6 @@ Endereço: %4</translation>
<translation>&amp;Minimizar para a bandeja em vez da barra de tarefas.</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>Minimizar em vez de sair do aplicativo quando a janela for fechada. Quando esta opção é escolhida, o aplicativo só será fechado selecionando Sair no menu Arquivo.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimizar ao sair</translation>
</message>
@@ -1090,10 +1089,6 @@ Endereço: %4</translation>
<translation>&amp;Linguagem da interface:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>A língua da interface com usuário pode ser escolhida aqui. Esta configuração só surtirá efeito após reiniciar o Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Unidade usada para mostrar quantidades:</translation>
</message>
@@ -1130,8 +1125,8 @@ Endereço: %4</translation>
<translation>Reinicialização do aplicativo necessária para efetivar alterações.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>O aplicativo vai desligar, deseja continuar?</translation>
+ <source>Client will be shut down. Do you want to proceed?</source>
+ <translation>O programa será encerrado. Deseja continuar?</translation>
</message>
<message>
<source>This change would require a client restart.</source>
@@ -1236,10 +1231,6 @@ Endereço: %4</translation>
<translation>Solicitação de pagamento rejeitada</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>Solicitação de pagamento expirou.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>Pedido de pagamento não é inicializado.</translation>
</message>
@@ -1264,14 +1255,26 @@ Endereço: %4</translation>
<translation>Manipulação de arquivo de cobrança</translation>
</message>
<message>
+ <source>Payment request expired.</source>
+ <translation>Pedido de pagamento expirado.</translation>
+ </message>
+ <message>
<source>Unverified payment requests to custom payment scripts are unsupported.</source>
<translation>Cobrança não verificada para scripts de pagamento personalizados não é suportado.</translation>
</message>
<message>
+ <source>Invalid payment request.</source>
+ <translation>Pedido de pagamento inválido.</translation>
+ </message>
+ <message>
<source>Refund from %1</source>
<translation>Reembolso de %1</translation>
</message>
<message>
+ <source>Payment request %1 is too large (%2 bytes, allowed %3 bytes).</source>
+ <translation>Pedido de pagamento %1 é muito grande (%2 bytes, permitido %3 bytes).</translation>
+ </message>
+ <message>
<source>Payment request DoS protection</source>
<translation>Pagamento requer proteção DoS</translation>
</message>
@@ -1303,8 +1306,8 @@ Endereço: %4</translation>
<translation>User Agent</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Endereço/Hostname</translation>
+ <source>Node/Service</source>
+ <translation>Nó/Serviço</translation>
</message>
<message>
<source>Ping Time</source>
@@ -1338,14 +1341,6 @@ Endereço: %4</translation>
<translation>%1 s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>REDE</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>DESCONHECIDO</translation>
- </message>
- <message>
<source>None</source>
<translation>Nenhum</translation>
</message>
@@ -1436,6 +1431,10 @@ Endereço: %4</translation>
<translation>Quantidade atual de blocos</translation>
</message>
<message>
+ <source>Open the Bitcoin Core debug log file from the current data directory. This can take a few seconds for large log files.</source>
+ <translation>Abrir o arquivo de log de depuração do Bitcoin na pasta de dados atual. Isso pode demorar para arquivos grandes.</translation>
+ </message>
+ <message>
<source>Received</source>
<translation>Recebido</translation>
</message>
@@ -1544,16 +1543,12 @@ Endereço: %4</translation>
<translation>Arquivo de log de Depuração</translation>
</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>Abrir o arquivo de log de depuração do Bitcoin do diretório atual de dados. Isso pode levar alguns segundos para arquivos de log grandes.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Limpar console</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Bem-vindo ao console Bitcoin RPC.</translation>
+ <source>Welcome to the Bitcoin Core RPC console.</source>
+ <translation>Bem vindo ao console de RPC do Bitcoin.</translation>
</message>
<message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
@@ -1837,15 +1832,7 @@ Endereço: %4</translation>
</message>
<message>
<source>Choose...</source>
- <translation>Escolha:</translation>
- </message>
- <message>
- <source>Minimize</source>
- <translation>Minimizar</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>Se a taxa personalizada for definida em 1000 satoshis e a transação tiver somente 250 bytes, então "por kilobyte" somente paga 250 satoshis de taxa, enquanto "pelo menos" paga 1000 satoshis. Se a transação for maior que 1 kilobyte, ambos pagam por kilobyte.</translation>
+ <translation>Escolher</translation>
</message>
<message>
<source>per kilobyte</source>
@@ -1856,6 +1843,10 @@ Endereço: %4</translation>
<translation>Se a taxa personalizada for definida em 1000 satoshis e a transação tiver somente 250 bytes, então "por kilobyte" somente paga 250 satoshis de taxa, enquanto "pelo menos" paga 1000 satoshis. Se a transação for maior que 1 kilobyte, ambos pagam por kilobyte.</translation>
</message>
<message>
+ <source>Hide</source>
+ <translation>Ocultar</translation>
+ </message>
+ <message>
<source>total at least</source>
<translation>pelo menos</translation>
</message>
@@ -1976,10 +1967,6 @@ Endereço: %4</translation>
<translation>ou</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>O endereço do destinatário não é válido, favor verificar.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>A quantidade a ser paga precisa ser maior que 0.</translation>
</message>
@@ -1992,10 +1979,6 @@ Endereço: %4</translation>
<translation>O total excede seu saldo quando uma taxa de transação de %1 é incluída.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Endereço duplicado: pode-se enviar para cada endereço apenas uma vez por transação.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>A criação de transação falhou!</translation>
</message>
@@ -2004,16 +1987,28 @@ Endereço: %4</translation>
<translation>A transação foi rejeitada! Isso pode acontecer se alguns bitcoins na sua carteira já foram gastos em outro local, por exemplo se você tiver uma cópia do wallet.dat e os bitcoins tiverem sido gastos na cópia mas não marcados como gastos aqui ainda.</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
- <translation>Uma taxa acima de %1 é considerada uma taxa insanamente alta.</translation>
+ <source>A fee higher than %1 is considered an absurdly high fee.</source>
+ <translation>Uma taxa maior que %1 é considerada uma taxa absurdamente alto.</translation>
+ </message>
+ <message>
+ <source>Payment request expired.</source>
+ <translation>Pedido de pagamento expirado.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Estimated to begin confirmation within %n block(s).</source>
+ <translation><numerusform>Confirmação estimada em %n bloco.</numerusform><numerusform>Confirmação estimada em %n blocos.</numerusform></translation>
</message>
<message>
<source>Pay only the minimum fee of %1</source>
<translation>Pagar somente a taxa mínima de %1</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>Confirmação estimada em %1 bloco(s)</translation>
+ <source>The recipient address is not valid. Please recheck.</source>
+ <translation>O endereço do destinatário é inválido. Favor confirmar.</translation>
+ </message>
+ <message>
+ <source>Duplicate address found: addresses should only be used once each.</source>
+ <translation>Endereço duplicado encontrado: Endereços devem ser usados somente uma vez cada.</translation>
</message>
<message>
<source>Warning: Invalid Bitcoin address</source>
@@ -2087,12 +2082,12 @@ Endereço: %4</translation>
<translation>Remover esta entrada</translation>
</message>
<message>
- <source>Message:</source>
- <translation>Mensagem:</translation>
+ <source>S&amp;ubtract fee from amount</source>
+ <translation>&amp;Retirar taxa da quantia</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Essa é cobrança verificada.</translation>
+ <source>Message:</source>
+ <translation>Mensagem:</translation>
</message>
<message>
<source>Enter a label for this address to add it to the list of used addresses</source>
@@ -2103,10 +2098,6 @@ Endereço: %4</translation>
<translation>A mensagem que foi anexada ao bitcoin: URI na qual será gravada na transação para sua referência. Nota: Essa mensagem não será gravada publicamente na rede Bitcoin.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Essa é uma cobrança não verificada.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Pague Para:</translation>
</message>
@@ -2137,10 +2128,6 @@ Endereço: %4</translation>
<translation>&amp;Assinar Mensagem</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Você pode assinar mensagens com seus endereços para provar que você é o dono delas. Seja cuidadoso para não assinar algo vago, pois ataques de phishing podem tentar te enganar para dar sua assinatura de identidade para eles. Apenas assine afirmações completamente detalhadas com as quais você concorda.</translation>
- </message>
- <message>
<source>The Bitcoin address to sign the message with</source>
<translation>O enderesso Bitcoin que assinará a mensagem</translation>
</message>
@@ -2193,10 +2180,6 @@ Endereço: %4</translation>
<translation>&amp;Verificar Mensagem</translation>
</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>Forneça o endereço da assinatura, a mensagem (se assegure que você copiou quebras de linha, espaços, tabs, etc. exatamente) e a assinatura abaixo para verificar a mensagem. Cuidado para não ler mais na assinatura do que está escrito na mensagem propriamente, para evitar ser vítima de uma ataque do tipo "man-in-the-middle".</translation>
- </message>
- <message>
<source>The Bitcoin address the message was signed with</source>
<translation>O enderesso Bitcoin que assionou a mesnagem</translation>
</message>
@@ -2460,10 +2443,6 @@ Endereço: %4</translation>
<translation>Tipo</translation>
</message>
<message>
- <source>Address</source>
- <translation>Endereço</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Recém-criado (%1 confirmações, disponível somente após %2)</translation>
</message>
@@ -2492,6 +2471,10 @@ Endereço: %4</translation>
<translation>Offline</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Rótulo</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Não confirmado</translation>
</message>
@@ -2544,10 +2527,6 @@ Endereço: %4</translation>
<translation>Tipo de transação.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Endereço de destino da transação.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Quantidade debitada ou creditada ao saldo.</translation>
</message>
@@ -2874,10 +2853,6 @@ Endereço: %4</translation>
<translation>Opções de Debug/Teste:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Descobrir os próprios endereços IP (padrão: 1 quando no modo listening e opção -externalip não estiver presente)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>Não carrega a carteira e desabilita as chamadas RPC para a carteira</translation>
</message>
@@ -2938,10 +2913,6 @@ Endereço: %4</translation>
<translation>Somente conectar a clientes na rede &lt;net&gt; (ipv4, ipv6 ou onion)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Reconstruir índice de blockchain a partir dos arquivos atuais blk000??.dat</translation>
- </message>
- <message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation>Define o tamanho do cache do banco de dados em megabytes (%d para %d, padrão: %d)</translation>
</message>
@@ -2978,6 +2949,10 @@ Endereço: %4</translation>
<translation>Opções da carteira:</translation>
</message>
<message>
+ <source>Warning: This version is obsolete; upgrade required!</source>
+ <translation>Atenção: Essa versão está obsoleta, atualização necessária!</translation>
+ </message>
+ <message>
<source>You need to rebuild the database using -reindex to change -txindex</source>
<translation>Você precisa reconstruir o banco de dados utilizando -reindex</translation>
</message>
@@ -3042,10 +3017,18 @@ por exemplo: alertnotify=echo %%s | mail -s "Alerta do Bitcoin" admin@foo.com.br
</translation>
</message>
<message>
+ <source>(default: %u)</source>
+ <translation>(padrão: %u)</translation>
+ </message>
+ <message>
<source>Cannot resolve -whitebind address: '%s'</source>
<translation>Impossível resolver endereço -whitebind: '%s'</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Escolha o diretório de dados na inicialização (padrão: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Connecte-se através de um proxy SOCKS5</translation>
</message>
@@ -3126,10 +3109,22 @@ por exemplo: alertnotify=echo %%s | mail -s "Alerta do Bitcoin" admin@foo.com.br
<translation>Enviar transação sem taxa, se possível (padrão: %u)</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Define certificados SSL root para requisição de pagamento (padrão: -system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Escolher língua, por exemplo "de_DE" (padrão: localização do sistema)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Exibir todas opções de debug (uso: --help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Mostrar tela inicial ao ligar (padrão: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Encolher arquivo debug.log ao iniciar o cliente (padrão 1 se opção -debug não estiver presente)</translation>
</message>
@@ -3138,6 +3133,10 @@ por exemplo: alertnotify=echo %%s | mail -s "Alerta do Bitcoin" admin@foo.com.br
<translation>Assinatura de transação falhou</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Inicializar minimizado</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Este é um software experimental.</translation>
</message>
@@ -3158,6 +3157,10 @@ por exemplo: alertnotify=echo %%s | mail -s "Alerta do Bitcoin" admin@foo.com.br
<translation>Transação muito larga</translation>
</message>
<message>
+ <source>UI Options:</source>
+ <translation>Opções da interface:</translation>
+ </message>
+ <message>
<source>Unable to bind to %s on this computer (bind returned error %s)</source>
<translation>Impossível se ligar a %s neste computador (bind retornou erro %s)</translation>
</message>
@@ -3178,10 +3181,6 @@ por exemplo: alertnotify=echo %%s | mail -s "Alerta do Bitcoin" admin@foo.com.br
<translation>Atenção</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Atenção: Esta versão está obsoleta, atualização necessária!</translation>
- </message>
- <message>
<source>Zapping all transactions from wallet...</source>
<translation>Aniquilando todas as transações da carteira...</translation>
</message>
diff --git a/src/qt/locale/bitcoin_pt_PT.ts b/src/qt/locale/bitcoin_pt_PT.ts
index 1c1f62df44..30ac9fdf31 100644
--- a/src/qt/locale/bitcoin_pt_PT.ts
+++ b/src/qt/locale/bitcoin_pt_PT.ts
@@ -156,10 +156,6 @@
<translation>Alterar frase de segurança</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Escreva a antiga frase de segurança da carteira, seguida da nova.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Confirmar encriptação da carteira</translation>
</message>
@@ -188,10 +184,6 @@
<translation>Escreva a nova frase de seguraça da sua carteira. &lt;br/&gt; Por favor, use uma frase de &lt;b&gt;10 ou mais caracteres aleatórios,&lt;/b&gt; ou &lt;b&gt;oito ou mais palavras&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>O cliente Bitcoin irá agora ser fechado para terminar o processo de encriptação. Recorde que a encriptação da sua carteira não protegerá totalmente os seus bitcoins de serem roubados por programas maliciosos que infectem o seu computador.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>A encriptação da carteira falhou</translation>
</message>
@@ -311,10 +303,6 @@
<translation>Enviar moedas para um endereço bitcoin</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Modificar opções de configuração para bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Faça uma cópia de segurança da carteira para outra localização</translation>
</message>
@@ -491,17 +479,6 @@
<translation>Transação recebida</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Data: %1
-Quantia: %2
-Tipo: %3
-Endereço: %4</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>A carteira está &lt;b&gt;encriptada&lt;/b&gt; e atualmente &lt;b&gt;desbloqueada&lt;/b&gt;</translation>
</message>
@@ -704,10 +681,6 @@ Endereço: %4</translation>
<translation>não</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Este rótulo fica vermelha se o tamanho da transacção exceder os 1000 bytes.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Isto significa que uma taxa de pelo menos %1 por kB é necessária.</translation>
</message>
@@ -720,14 +693,6 @@ Endereço: %4</translation>
<translation>Transacções com uma prioridade mais alta têm uma maior probabilidade de serem incluídas num bloco.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Esta legenda fica vermelha, se a prioridade for menor que "média".</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Este rótulo fica vermelho se algum recipiente receber uma quantia menor que %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(sem rótulo)</translation>
</message>
@@ -848,30 +813,6 @@ Endereço: %4</translation>
<source>command-line options</source>
<translation>opções da linha de comandos</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Opções de Interface</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Definir linguagem, por exemplo "pt_PT" (por defeito: linguagem do sistema)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Iniciar minimizado</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Configurar certificados SSL root para pedido de pagamento (default: -system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Mostrar imagem ao iniciar (por defeito: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Escolha a pasta de dados ao iniciar (por defeito: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -954,14 +895,6 @@ Endereço: %4</translation>
<translation>&amp;Principal</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Começar o Bitcoin automaticamente ao iniciar sessão no sistema.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Começar o Bitcoin ao iniciar o sistema</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Tamanho da cache da base de &amp;dados</translation>
</message>
@@ -1075,10 +1008,6 @@ Endereço: %4</translation>
<translation>&amp;Minimizar para a bandeja de sistema e não para a barra de ferramentas</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>Minimize ao invés de sair da aplicação quando a janela é fechada. Com esta opção selecionada, a aplicação apenas será encerrada só quando escolher Sair da aplicação no menu.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimizar ao fechar</translation>
</message>
@@ -1091,10 +1020,6 @@ Endereço: %4</translation>
<translation>&amp;Linguagem da interface de utilizador:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>A linguagem da interface do utilizador pode ser definida aqui. Esta definição entrará em efeito após reiniciar o Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Unidade para mostrar quantias:</translation>
</message>
@@ -1131,10 +1056,6 @@ Endereço: %4</translation>
<translation>É necessário reiniciar o cliente para ativar as alterações.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>O cliente será desligado, deseja continuar?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>Esta alteração requer um reinício do cliente.</translation>
</message>
@@ -1241,10 +1162,6 @@ Endereço: %4</translation>
<translation>Rede de requisição de pagamento não corresponde com a rede do cliente.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>Pedido de pagamento expirado.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>Requisição de pagamento não iniciou.</translation>
</message>
@@ -1320,10 +1237,6 @@ Endereço: %4</translation>
<translation>Agente Usuário</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Endereço/Nome da Rede</translation>
- </message>
- <message>
<source>Ping Time</source>
<translation>Tempo de Latência</translation>
</message>
@@ -1355,14 +1268,6 @@ Endereço: %4</translation>
<translation>%1 s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>REDE</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>DESCONHECIDO</translation>
- </message>
- <message>
<source>None</source>
<translation>Nenhum</translation>
</message>
@@ -1561,18 +1466,10 @@ Endereço: %4</translation>
<translation>Ficheiro de registo de depuração</translation>
</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>Abrir o ficheiro de registo de depuração da pasta de dados actual. Isto pode demorar alguns segundos para ficheiros de registo maiores.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Limpar consola</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Bem-vindo à consola RPC Bitcoin.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Use as setas para cima e para baixo para navegar no histórico e &lt;b&gt;Ctrl-L&lt;/b&gt; para limpar o ecrã.</translation>
</message>
@@ -1861,14 +1758,6 @@ Endereço: %4</translation>
<translation>fechar definições-de custos</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Minimizar</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>Se a taxa fixa for 1000 satoshis e a transação for somente 250 bytes, pagará somente 250 satoshis "por kilobyte" em custos se trasacionar "pelo menos" 1000 satoshis. Transações superiores a um kilobyte são cobradas por kilobyte.</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>por kilobyte</translation>
</message>
@@ -1997,10 +1886,6 @@ Endereço: %4</translation>
<translation>ou</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>O endereço de destino não é válido, por favor verifique.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>A quantia a pagar deverá ser maior que 0.</translation>
</message>
@@ -2013,10 +1898,6 @@ Endereço: %4</translation>
<translation>O total excede o seu saldo quando a taxa de transação de %1 for incluída.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Endereço duplicado encontrado, apenas poderá enviar uma vez para cada endereço por cada operação de envio.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Erro: A criação da transação falhou! </translation>
</message>
@@ -2025,18 +1906,10 @@ Endereço: %4</translation>
<translation>A transação foi rejeitada! Isto poderá acontecer se algumas das moedas na sua carteira já tiverem sido gastas, se por exemplo tiver usado uma cópia do ficheiro wallet.dat e as moedas tiverem sido gastas na cópia mas não tiverem sido marcadas como gastas aqui.</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
- <translation>Uma taxa superior a %1 é considerada muito alta.</translation>
- </message>
- <message>
<source>Pay only the minimum fee of %1</source>
<translation>Pagar somente a taxa minima de %1</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>Confirmação deverá começar dentro de %1 bloco(s).</translation>
- </message>
- <message>
<source>Warning: Invalid Bitcoin address</source>
<translation>Aviso: Endereço Bitcoin inválido</translation>
</message>
@@ -2112,10 +1985,6 @@ Endereço: %4</translation>
<translation>Mensagem:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Este é um pedido de pagamento verificado.</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>Introduza um rótulo para este endereço para o adicionar à sua lista de endereços usados</translation>
</message>
@@ -2124,10 +1993,6 @@ Endereço: %4</translation>
<translation>Uma mensagem que estava anexada ao URI bitcoin: que será armazenada com a transação para sua referência. Nota: Esta mensagem não será enviada através da rede Bitcoin.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Este é um pedido de pagamento não-verificado.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Pagar a:</translation>
</message>
@@ -2158,10 +2023,6 @@ Endereço: %4</translation>
<translation>&amp;Assinar Mensagem</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Pode assinar mensagens com os seus endereços para provar que são seus. Tenha atenção ao assinar mensagens ambíguas, pois ataques de phishing podem tentar enganá-lo de modo a assinar a sua identidade para os atacantes. Apenas assine declarações detalhadas com as quais concorde.</translation>
- </message>
- <message>
<source>The Bitcoin address to sign the message with</source>
<translation>O endereço Bitcoin para designar a mensagem</translation>
</message>
@@ -2214,10 +2075,6 @@ Endereço: %4</translation>
<translation>&amp;Verificar Mensagem</translation>
</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>Introduza o endereço de assinatura, mensagem (assegure-se que copia quebras de linha, espaços, tabulações, etc. exactamente) e assinatura abaixo para verificar a mensagem. Tenha atenção para não ler mais na assinatura do que o que estiver na mensagem assinada, para evitar ser enganado por um atacante que se encontre entre si e quem assinou a mensagem.</translation>
- </message>
- <message>
<source>The Bitcoin address the message was signed with</source>
<translation>O endereço Bitcoin com que a mensagem foi designada</translation>
</message>
@@ -2481,10 +2338,6 @@ Endereço: %4</translation>
<translation>Tipo</translation>
</message>
<message>
- <source>Address</source>
- <translation>Endereço</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Imaturo (%1 confirmações, estará disponível após %2)</translation>
</message>
@@ -2513,6 +2366,10 @@ Endereço: %4</translation>
<translation>Offline</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Rótulo</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Não confirmado:</translation>
</message>
@@ -2569,10 +2426,6 @@ Endereço: %4</translation>
<translation>Desde que um endereço de modo-verificação faça parte ou não desta transação</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Endereço de destino da transação.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Quantia retirada ou adicionada ao saldo.</translation>
</message>
@@ -2903,10 +2756,6 @@ Endereço: %4</translation>
<translation>Depuração/Opções teste:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Descobrir endereço IP próprio (padrão: 1 ao escutar sem -externalip)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>Não carregar a carteira e desativar chamadas RPC de carteira.</translation>
</message>
@@ -2967,10 +2816,6 @@ Endereço: %4</translation>
<translation>Somente conectar aos nodes na rede &lt;net&gt; (ipv4, ipv6 ou onion)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Reconstruir a cadeia de blocos a partir dos ficheiros blk000??.dat atuais</translation>
- </message>
- <message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation>Definir o tamanho da cache de base de dados em megabytes (%d a %d, padrão: %d)</translation>
</message>
@@ -3039,6 +2884,10 @@ Endereço: %4</translation>
<translation>Definir tamanho máximo de transações com alta-prioridade/baixa-taxa em bytes (por defeito: %d)</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Escolha a pasta de dados ao iniciar (por defeito: 0)</translation>
+ </message>
+ <message>
<source>Information</source>
<translation>Informação</translation>
</message>
@@ -3055,6 +2904,18 @@ Endereço: %4</translation>
<translation>Enviar informação de rastreio/depuração para a consola e não para o ficheiro debug.log</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Configurar certificados SSL root para pedido de pagamento (default: -system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Definir linguagem, por exemplo "pt_PT" (por defeito: linguagem do sistema)</translation>
+ </message>
+ <message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Mostrar imagem ao iniciar (por defeito: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Encolher ficheiro debug.log ao iniciar o cliente (por defeito: 1 sem -debug definido)</translation>
</message>
@@ -3063,6 +2924,10 @@ Endereço: %4</translation>
<translation>Falhou assinatura da transação</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Iniciar minimizado</translation>
+ </message>
+ <message>
<source>Transaction amount too small</source>
<translation>Quantia da transação é muito baixa</translation>
</message>
@@ -3087,10 +2952,6 @@ Endereço: %4</translation>
<translation>Aviso</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Atenção: Esta versão está obsoleta, é necessário actualizar!</translation>
- </message>
- <message>
<source>Zapping all transactions from wallet...</source>
<translation>A limpar todas as transações da carteira...</translation>
</message>
diff --git a/src/qt/locale/bitcoin_ro_RO.ts b/src/qt/locale/bitcoin_ro_RO.ts
index ab36ff5321..8b029eeca1 100644
--- a/src/qt/locale/bitcoin_ro_RO.ts
+++ b/src/qt/locale/bitcoin_ro_RO.ts
@@ -156,10 +156,6 @@
<translation>Schimbare frază de acces</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Introduceţi vechea şi noua parolă pentru portofel.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Confirmaţi criptarea portofelului</translation>
</message>
@@ -188,10 +184,6 @@
<translation>Introduceţi noua parolă a portofelului electronic.&lt;br/&gt;Vă rugăm să folosiţi o parolă de&lt;b&gt;minimum 10 caractere aleatoare&lt;/b&gt;, sau &lt;b&gt;minimum 8 cuvinte&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin se va închide acum pentru a termina procesul de criptare. Ţineţi minte că criptarea portofelului nu vă poate proteja în totalitate de furtul monedelor de către programe dăunătoare care vă infectează calculatorul.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Criptarea portofelului nu a reuşit</translation>
</message>
@@ -311,10 +303,6 @@
<translation>Trimite monede către o adresă Bitcoin</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Modifică opţiunile de configurare pentru Bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Creează o copie de rezervă a portofelului într-o locaţie diferită</translation>
</message>
@@ -478,10 +466,6 @@
<source>Up to date</source>
<translation>Actualizat</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>S-a procesat %n bloc din istoricul tranzacţiilor.</numerusform><numerusform>S-au procesat %n blocuri din istoricul tranzacţiilor.</numerusform><numerusform>S-au procesat %n de blocuri din istoricul tranzacţiilor.</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>Se actualizează...</translation>
@@ -495,18 +479,6 @@
<translation>Tranzacţie recepţionată</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Data: %1
-Suma: %2
-Tipul: %3
-Adresa: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Portofelul este &lt;b&gt;criptat&lt;/b&gt; iar în momentul de faţă este &lt;b&gt;deblocat&lt;/b&gt;</translation>
</message>
@@ -705,10 +677,6 @@ Adresa: %4
<translation>nu</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Această etichetă devine roşie, în cazul în care dimensiunea tranzacţiei este mai mare de 1000 de octeţi.</translation>
- </message>
- <message>
<source>Can vary +/- 1 byte per input.</source>
<translation>Poate varia +/- 1 octet pentru fiecare intrare.</translation>
</message>
@@ -717,10 +685,6 @@ Adresa: %4
<translation>Tranzacţiile cu prioritate mai mare sînt mai susceptibile de fi incluse într-un bloc.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Această etichetă devine roşie dacă prioritatea e mai mică decît "medie".</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(fără etichetă)</translation>
</message>
@@ -841,30 +805,6 @@ Adresa: %4
<source>command-line options</source>
<translation>Opţiuni linie de comandă</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Opţiuni UI</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Setează limba, de exemplu: "de_DE" (implicit: sistem local)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Începe minimizat</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Setare rădăcină certificat SSL pentru cerere de plată (implicit: -sistem- )</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Afişează pe ecran splash la pornire (implicit: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Alege dosarul de date la pornire (implicit: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -943,14 +883,6 @@ Adresa: %4
<translation>Principal</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Porneşte automat Bitcoin după pornirea calculatorului.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>Porneşte Bitcoin la pornirea sistemului</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Mărimea bazei de &amp;date cache</translation>
</message>
@@ -1063,10 +995,6 @@ Adresa: %4
<translation>&amp;Minimizare în tray în loc de taskbar</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>Ascunde fereastra în locul părăsirii programului în momentul închiderii ferestrei. Cînd acestă opţiune e activă, aplicaţia se va opri doar în momentul selectării comenzii 'Închide aplicaţia' din menu.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimizare fereastră în locul închiderii programului</translation>
</message>
@@ -1079,10 +1007,6 @@ Adresa: %4
<translation>&amp;Limbă interfaţă utilizator</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Limba interfeţei utilizatorului poate fi setată aici. Această setare va avea efect după repornirea Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Unitatea de măsură pentru afişarea sumelor:</translation>
</message>
@@ -1119,10 +1043,6 @@ Adresa: %4
<translation>Este necesară repornirea clientului pentru a activa schimbările.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>Clientul va fi închis, doriţi să continuaţi?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>Această schimbare necesită o repornire a clientului.</translation>
</message>
@@ -1229,10 +1149,6 @@ Adresa: %4
<translation>Cererea de plată din reţea nu se potriveşte cu clientul din reţea</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>Cererea de plată a expirat.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>Cererea de plată nu este iniţializată.</translation>
</message>
@@ -1304,10 +1220,6 @@ Adresa: %4
<translation>Agent utilizator</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Adresă/Nume gazdă</translation>
- </message>
- <message>
<source>Ping Time</source>
<translation>Timp ping</translation>
</message>
@@ -1339,14 +1251,6 @@ Adresa: %4
<translation>%1 s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>REŢEA</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>NECUNOSCUT</translation>
- </message>
- <message>
<source>None</source>
<translation>Niciuna</translation>
</message>
@@ -1533,18 +1437,10 @@ Adresa: %4
<translation>Fişier jurnal depanare</translation>
</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>Deschide fişierul jurnal depanare din directorul curent. Aceasta poate dura cîteva secunde pentru fişierele mai mari.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Curăţă consola</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Bun venit la consola bitcoin RPC.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Folosiţi săgetile sus şi jos pentru a naviga în istoric şi &lt;b&gt;Ctrl-L&lt;/b&gt; pentru a curăţa.</translation>
</message>
@@ -1829,10 +1725,6 @@ Adresa: %4
<translation>Alegeţi...</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Minimizare</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>per kilooctet</translation>
</message>
@@ -1945,10 +1837,6 @@ Adresa: %4
<translation>sau</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Adresa destinatarului nu este validă, vă rugăm să o verificaţi.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Suma de plată trebuie să fie mai mare decît 0.</translation>
</message>
@@ -1961,10 +1849,6 @@ Adresa: %4
<translation>Totalul depăşeşte soldul contului dacă se include şi plata taxei de %1.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>S-a descoperit o adresă duplicat.Se poate trimite către fiecare adresă doar o singură dată per operaţiune.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Creare tranzacţie nereuşită!</translation>
</message>
@@ -2052,10 +1936,6 @@ Adresa: %4
<translation>Mesaj:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Aceasta este o cerere de plată verificată.</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>Introduceţi eticheta pentru ca această adresa să fie introdusă în lista de adrese folosite</translation>
</message>
@@ -2064,10 +1944,6 @@ Adresa: %4
<translation>un mesaj a fost ataşat la bitcoin: URI care va fi stocat cu tranzacţia pentru referinţa dvs. Notă: Acest mesaj nu va fi trimis către reţeaua bitcoin.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Aceasta este o cerere de plata neverificată.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Plăteşte către:</translation>
</message>
@@ -2098,10 +1974,6 @@ Adresa: %4
<translation>&amp;Semnează mesaj</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Puteţi semna mesaje cu adresa dvs. pentru a demostra ca sînteti proprietarul lor. Aveţi grijă să nu semnaţi nimic vag, deoarece atacurile de tip phishing vă pot păcăli să le transferaţi identitatea. Semnaţi numai declaraţiile detaliate cu care sînteti de acord.</translation>
- </message>
- <message>
<source>The Bitcoin address to sign the message with</source>
<translation>Adresa cu care semnaţi mesajul</translation>
</message>
@@ -2154,10 +2026,6 @@ Adresa: %4
<translation>&amp;Verifică mesaj</translation>
</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>Introduceţi adresa de semnatură, mesajul (asiguraţi-vă că aţi copiat spaţiile, taburile etc. exact) şi semnatura dedesubt pentru a verifica mesajul. Aveţi grijă să nu citiţi mai mult în semnatură decît mesajul în sine, pentru a evita să fiţi păcăliţi de un atac de tip man-in-the-middle.</translation>
- </message>
- <message>
<source>The Bitcoin address the message was signed with</source>
<translation>Introduceţi o adresă Bitcoin</translation>
</message>
@@ -2417,10 +2285,6 @@ Adresa: %4
<translation>Tip</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adresă</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Imatur (%1 confirmări, va fi disponibil după %2)</translation>
</message>
@@ -2445,6 +2309,10 @@ Adresa: %4
<translation>Deconectat</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Etichetă</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Neconfirmat</translation>
</message>
@@ -2501,10 +2369,6 @@ Adresa: %4
<translation>Indiferent dacă sau nu o adresă doar-suăpraveghere este implicată în această tranzacţie.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Adresa de destinaţie a tranzacţiei.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Suma extrasă sau adăugată la sold.</translation>
</message>
@@ -2827,10 +2691,6 @@ Adresa: %4
<translation>Opţiuni Depanare/Test:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Descoperă propria adresă IP (inţial: 1)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>Nu încarcă portofelul şi dezactivează solicitările portofel RPC</translation>
</message>
@@ -2887,10 +2747,6 @@ Adresa: %4
<translation>Se conectează doar la noduri în reţeaua &lt;net&gt; (ipv4, ipv6 sau onion)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Reconstruirea indexului lanţului de bloc din fişierele actuale blk000???.dat</translation>
- </message>
- <message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation>Setează mărimea bazei de date cache în megaocteţi (%d la %d, implicit: %d)</translation>
</message>
@@ -2963,6 +2819,10 @@ Adresa: %4
<translation>Acceptă cererile publice REST (implicit: %u)</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Alege dosarul de date la pornire (implicit: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Conectare prin proxy SOCKS5</translation>
</message>
@@ -3043,10 +2903,22 @@ Adresa: %4
<translation>Trimitere tranzacţii ca tranzacţii taxă-zero dacă este posibil (implicit: %u)</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Setare rădăcină certificat SSL pentru cerere de plată (implicit: -sistem- )</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Setează limba, de exemplu: "de_DE" (implicit: sistem local)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Arată toate opţiunile de depanare (uz: --help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Afişează pe ecran splash la pornire (implicit: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Micşorează fişierul debug.log la pornirea clientului (implicit: 1 cînd nu se foloseşte -debug)</translation>
</message>
@@ -3055,6 +2927,10 @@ Adresa: %4
<translation>Nu s-a reuşit semnarea tranzacţiei</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Începe minimizat</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Acesta este un program experimental.</translation>
</message>
@@ -3095,10 +2971,6 @@ Adresa: %4
<translation>Avertisment</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Atenţie: această versiune este depăşită, este necesară actualizarea!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>Avertisment: Argument nesuportat -benchmark ignorat, folosiţi -debug=bench.</translation>
</message>
diff --git a/src/qt/locale/bitcoin_ru.ts b/src/qt/locale/bitcoin_ru.ts
index ab4a23cb9a..30d44b090f 100644
--- a/src/qt/locale/bitcoin_ru.ts
+++ b/src/qt/locale/bitcoin_ru.ts
@@ -152,10 +152,6 @@
<translation>Сменить пароль</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Введите старый и новый пароль для бумажника.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Подтвердите шифрование бумажника</translation>
</message>
@@ -184,10 +180,6 @@
<translation>Введите новый пароль бумажника.&lt;br/&gt;Используйте пароль, состоящий из &lt;b&gt;десяти или более случайных символов&lt;/b&gt;, или &lt;b&gt;восьми или более слов&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Сейчас программа закроется для завершения процесса шифрования. Помните, что шифрование вашего бумажника не может полностью защитить ваши биткойны от кражи с помощью инфицирования вашего компьютера вредоносным ПО.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Не удалось зашифровать бумажник</translation>
</message>
@@ -307,10 +299,6 @@
<translation>Отправить монеты на указанный адрес Bitcoin</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Изменить параметры конфигурации Bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Сделать резервную копию бумажника в другом месте</translation>
</message>
@@ -418,34 +406,14 @@
<source>Show the Bitcoin Core help message to get a list with possible Bitcoin command-line options</source>
<translation>Показать помощь по Bitcoin Core и получить список доступных параметров командной строки.</translation>
</message>
- <message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n активное соединение с сетью</numerusform><numerusform>%n активных соединений с сетью</numerusform><numerusform>%n активных соединений с сетью Bitcoin</numerusform></translation>
- </message>
<message>
<source>No block source available...</source>
<translation>Источник блоков недоступен...</translation>
</message>
- <message numerus="yes">
- <source>%n hour(s)</source>
- <translation><numerusform>%n час</numerusform><numerusform>%n часа</numerusform><numerusform>%n часов</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n day(s)</source>
- <translation><numerusform>%n день</numerusform><numerusform>%n дня</numerusform><numerusform>%n дней</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>%n неделя</numerusform><numerusform>%n недели</numerusform><numerusform>%n недель</numerusform></translation>
- </message>
<message>
<source>%1 and %2</source>
<translation>%1 и %2</translation>
</message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation><numerusform>%n год</numerusform><numerusform>%n лет</numerusform><numerusform>%n года</numerusform></translation>
- </message>
<message>
<source>%1 behind</source>
<translation>%1 позади</translation>
@@ -474,10 +442,6 @@
<source>Up to date</source>
<translation>Синхронизировано</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>Обработан %n блок истории транзакций.</numerusform><numerusform>Обработано %n блока истории транзакций.</numerusform><numerusform>Обработано %n блоков истории транзакций.</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>Синхронизируется...</translation>
@@ -491,18 +455,6 @@
<translation>Входящая транзакция</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Дата: %1
-Сумма: %2
-Тип: %3
-Адрес: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Бумажник &lt;b&gt;зашифрован&lt;/b&gt; и в настоящее время &lt;b&gt;разблокирован&lt;/b&gt;</translation>
</message>
@@ -705,10 +657,6 @@ Address: %4
<translation>нет</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Эта пометка становится красной, если размер транзакции больше 1000 байт.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Это значит, что требуется комиссия как минимум %1 на КБ.</translation>
</message>
@@ -721,14 +669,6 @@ Address: %4
<translation>Транзакции с более высоким приоритетом будут вероятнее других включены в блок.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Эта пометка становится красной, если приоритет ниже, чем "средний".</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Эта пометка становится красной, если какой-либо из адресатов получает сумму менее %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>[нет метки]</translation>
</message>
@@ -849,30 +789,6 @@ Address: %4
<source>command-line options</source>
<translation>параметры командной строки</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Настройки интерфейса</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Выберите язык, например "de_DE" (по умолчанию: как в системе)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Запускать свёрнутым</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Указать корневые SSL-сертификаты для запроса платежа (по умолчанию: -system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Показывать сплэш при запуске (по умолчанию: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Выбрать каталог данных при запуске (по умолчанию: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -912,15 +828,7 @@ Address: %4
<source>Error</source>
<translation>Ошибка</translation>
</message>
- <message numerus="yes">
- <source>%n GB of free space available</source>
- <translation><numerusform>%nГБ свободного места доступно</numerusform><numerusform>%nГБ свободного места доступно</numerusform><numerusform>%nГБ свободного места доступно</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>(of %n GB needed)</source>
- <translation><numerusform>(из необходимых %nГБ)</numerusform><numerusform>(из необходимых %nГБ)</numerusform><numerusform>(из необходимых %nГБ)</numerusform></translation>
- </message>
-</context>
+ </context>
<context>
<name>OpenURIDialog</name>
<message>
@@ -955,14 +863,6 @@ Address: %4
<translation>&amp;Главная</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Автоматически запускать Bitcoin после входа в систему</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Запускать Bitcoin при входе в систему</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Размер кэша &amp;БД</translation>
</message>
@@ -1075,10 +975,6 @@ Address: %4
<translation>&amp;Cворачивать в системный лоток вместо панели задач</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>Сворачивать вместо закрытия. Если данная опция будет выбрана — приложение закроется только после выбора соответствующего пункта в меню.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>С&amp;ворачивать при закрытии</translation>
</message>
@@ -1091,10 +987,6 @@ Address: %4
<translation>&amp;Язык интерфейса:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Здесь можно выбрать язык интерфейса. Настройки вступят в силу после перезапуска Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Отображать суммы в единицах: </translation>
</message>
@@ -1131,10 +1023,6 @@ Address: %4
<translation>Для применения изменений требуется перезапуск клиента.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>Клиент будет выключен, желаете продолжить?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>Это изменение потребует перезапуска клиента.</translation>
</message>
@@ -1241,10 +1129,6 @@ Address: %4
<translation>Сеть запроса платежа не совпадает с сетью клиента.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>Запрос платежа просрочен.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>Запрос платежа не инициализирован.</translation>
</message>
@@ -1320,10 +1204,6 @@ Address: %4
<translation>Юзер-агент</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Адрес/имя хоста</translation>
- </message>
- <message>
<source>Ping Time</source>
<translation>Время задержки</translation>
</message>
@@ -1355,14 +1235,6 @@ Address: %4
<translation>%1 с</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>СЕТЬ</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>НЕИЗВЕСТНЫЙ</translation>
- </message>
- <message>
<source>None</source>
<translation>Ничего</translation>
</message>
@@ -1561,18 +1433,10 @@ Address: %4
<translation>Отладочный лог-файл</translation>
</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>Открыть отладочный лог-файл Bitcoin из текущего каталога данных. Это может занять несколько секунд для больших лог-файлов.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Очистить консоль</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Добро пожаловать в RPC-консоль Bitcoin.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Используйте стрелки вверх и вниз для просмотра истории и &lt;b&gt;Ctrl-L&lt;/b&gt; для очистки экрана.</translation>
</message>
@@ -1861,14 +1725,6 @@ Address: %4
<translation>Свернуть настройки комиссии</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Сворачивать</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>Если комиссия установлена в 1000 сатоши, а транзакция составляет лишь 250 байт, тогда комиссия "на килобайт" составит 250 сатоши, а "как минимум" — 1000 сатоши. Для транзакций крупнее килобайта в обоих случаях будет использоваться платёж "на килобайт".</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>за килобайт</translation>
</message>
@@ -1997,10 +1853,6 @@ Address: %4
<translation>или</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Адрес получателя неверный, пожалуйста, перепроверьте.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Сумма для отправки должно быть больше 0.</translation>
</message>
@@ -2013,10 +1865,6 @@ Address: %4
<translation>Сумма превысит Ваш баланс, если комиссия в размере %1 будет добавлена к транзакции</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Обнаружен дублирующийся адрес. Отправка на один и тот же адрес возможна только один раз за одну операцию отправки</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Не удалось создать транзакцию!</translation>
</message>
@@ -2025,14 +1873,10 @@ Address: %4
<translation>Транзакция была отклонена! Такое может произойти, если некоторые монеты уже были потрачены, например, если Вы используете одну копию бумажника (wallet.dat), а монеты были потрачены из другой копии, но не были отмечены как потраченные в этой.</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
+ <source>A fee higher than %1 is considered an absurdly high fee.</source>
<translation>Комиссия больше, чем %1, считается невероятно большой.</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>Начало подтверждения ожидается через %1 блок(ов).</translation>
- </message>
- <message>
<source>Warning: Invalid Bitcoin address</source>
<translation>Внимание: неверный адрес Bitcoin</translation>
</message>
@@ -2108,10 +1952,6 @@ Address: %4
<translation>Сообщение:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Это проверенный запрос платежа.</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>Введите метку для этого адреса, чтобы добавить его в список использованных</translation>
</message>
@@ -2120,10 +1960,6 @@ Address: %4
<translation>К bitcoin: URI было прикреплено сообщение, которое будет сохранено вместе с транзакцией для вашего сведения. Заметьте: сообщение не будет отправлено через сеть Bitcoin.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Это непроверенный запрос платежа.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Получатель:</translation>
</message>
@@ -2154,10 +1990,6 @@ Address: %4
<translation>&amp;Подписать сообщение</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Вы можете подписывать сообщения своими адресами, чтобы доказать владение ими. Будьте осторожны, не подписывайте что-то неопределённое, так как фишинговые атаки могут обманным путём заставить вас подписать нежелательные сообщения. Подписывайте только те сообщения, с которыми вы согласны вплоть до мелочей.</translation>
- </message>
- <message>
<source>The Bitcoin address to sign the message with</source>
<translation>Адрес Bitcoin, которым подписать сообщение</translation>
</message>
@@ -2210,10 +2042,6 @@ Address: %4
<translation>&amp;Проверить сообщение</translation>
</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>Введите ниже адрес для подписи, сообщение (убедитесь, что переводы строк, пробелы, табы и т.п. в точности скопированы) и подпись, чтобы проверить сообщение. Убедитесь, что не скопировали лишнего в подпись, по сравнению с самим подписываемым сообщением, чтобы не стать жертвой атаки "man-in-the-middle".</translation>
- </message>
- <message>
<source>The Bitcoin address the message was signed with</source>
<translation>Адрес Bitcoin, которым было подписано сообщение</translation>
</message>
@@ -2330,10 +2158,6 @@ Address: %4
<source>Status</source>
<translation>Статус</translation>
</message>
- <message numerus="yes">
- <source>, broadcast through %n node(s)</source>
- <translation><numerusform>, разослано через %n узел</numerusform><numerusform>, разослано через %n узла</numerusform><numerusform>, разослано через %n узлов</numerusform></translation>
- </message>
<message>
<source>Date</source>
<translation>Дата</translation>
@@ -2370,10 +2194,6 @@ Address: %4
<source>Credit</source>
<translation>Кредит</translation>
</message>
- <message numerus="yes">
- <source>matures in %n more block(s)</source>
- <translation><numerusform>будет доступно через %n блок</numerusform><numerusform>будет доступно через %n блока</numerusform><numerusform>будет доступно через %n блоков</numerusform></translation>
- </message>
<message>
<source>not accepted</source>
<translation>не принято</translation>
@@ -2446,10 +2266,6 @@ Address: %4
<source>, has not been successfully broadcast yet</source>
<translation>, ещё не было успешно разослано</translation>
</message>
- <message numerus="yes">
- <source>Open for %n more block(s)</source>
- <translation><numerusform>Открыто для ещё %n блока</numerusform><numerusform>Открыто для ещё %n блоков</numerusform><numerusform>Открыто для ещё %n блоков</numerusform></translation>
- </message>
<message>
<source>unknown</source>
<translation>неизвестно</translation>
@@ -2477,17 +2293,9 @@ Address: %4
<translation>Тип</translation>
</message>
<message>
- <source>Address</source>
- <translation>Адрес</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Незрелый (%1 подтверждений, будет доступен после %2)</translation>
</message>
- <message numerus="yes">
- <source>Open for %n more block(s)</source>
- <translation><numerusform>Открыто для ещё %n блока</numerusform><numerusform>Открыто для ещё %n блоков</numerusform><numerusform>Открыто для ещё %n блоков</numerusform></translation>
- </message>
<message>
<source>Open until %1</source>
<translation>Открыто до %1</translation>
@@ -2509,6 +2317,10 @@ Address: %4
<translation>Нет активных соединений с сетью</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Метка</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Неподтверждено</translation>
</message>
@@ -2561,10 +2373,6 @@ Address: %4
<translation>Использовался ли в транзакции адрес для наблюдения.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Адрес назначения транзакции.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Сумма, добавленная, или снятая с баланса.</translation>
</message>
@@ -2895,10 +2703,6 @@ Address: %4
<translation>Параметры отладки/тестирования:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Определить свой IP (по умолчанию: 1 при прослушивании и если не используется -externalip)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>Не загружать бумажник и запретить обращения к нему через RPC</translation>
</message>
@@ -2959,10 +2763,6 @@ Address: %4
<translation>Соединяться только по сети &lt;net&gt; (ipv4, ipv6 или onion)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Перестроить индекс цепи блоков из текущих файлов blk000??.dat</translation>
- </message>
- <message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation>Установить размер кэша БД в мегабайтах(от %d до %d, по умолчанию: %d)</translation>
</message>
@@ -3027,10 +2827,6 @@ Address: %4
<translation>Не удалось установить блокировку на каталог данных %s. Возможно, Bitcoin Core уже запущен.</translation>
</message>
<message>
- <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</source>
- <translation>Ограничить скорость передачи бесплатных транзакций до &lt;n&gt;*1000 байт в минуту (по умолчанию: %u)</translation>
- </message>
- <message>
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
<translation>Создавать новые файлы с системными правами по умолчанию вместо umask 077 (эффективно только при отключенном бумажнике)</translation>
</message>
@@ -3067,18 +2863,10 @@ Address: %4
<translation>Наибольший размер данных в носителе данных транзакций, которые мы передаем и генерируем (по умолчанию: %u)</translation>
</message>
<message>
- <source>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</source>
- <translation>Максимальная сумма комиссий для одной транзакции в бумажнике, слишком низкое значение может вызвать прерывание больших транзакций (по умолчанию: %s)</translation>
- </message>
- <message>
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
<translation>Запрашивать адреса участников с помощью DNS, если адресов мало (по умолчанию: 1, если не указан -connect)</translation>
</message>
<message>
- <source>Require high priority for relaying free or low-fee transactions (default:%u)</source>
- <translation>Требовать высокий приоритет для пересылки бесплатных или низкокомиссионных транзакций (по умолчанию: %u)</translation>
- </message>
- <message>
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
<translation>Задать максимальный размер высокоприоритетных/низкокомиссионных транзакций в байтах (по умолчанию: %d)</translation>
</message>
@@ -3135,6 +2923,10 @@ rpcpassword=%s
<translation>Не удаётся разрешить адрес в параметре -whitebind: '%s'</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Выбрать каталог данных при запуске (по умолчанию: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Подключаться через SOCKS5 прокси</translation>
</message>
@@ -3231,10 +3023,22 @@ rpcpassword=%s
<translation>Осуществить транзакцию бесплатно, если возможно (по умолчанию: %u)</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Указать корневые SSL-сертификаты для запроса платежа (по умолчанию: -system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Выберите язык, например "de_DE" (по умолчанию: как в системе)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Показать все отладочные параметры (использование: --help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Показывать сплэш при запуске (по умолчанию: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Сжимать файл debug.log при запуске клиента (по умолчанию: 1, если нет -debug)</translation>
</message>
@@ -3243,6 +3047,10 @@ rpcpassword=%s
<translation>Не удалось подписать транзакцию</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Запускать свёрнутым</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Это экспериментальное ПО.</translation>
</message>
@@ -3283,10 +3091,6 @@ rpcpassword=%s
<translation>Внимание</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Внимание: эта версия устарела, требуется обновление!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>Внимание: неподдерживаемый аргумент -benchmark проигнорирован, используйте -debug=bench.</translation>
</message>
diff --git a/src/qt/locale/bitcoin_sk.ts b/src/qt/locale/bitcoin_sk.ts
index a017c489b6..294eca4127 100644
--- a/src/qt/locale/bitcoin_sk.ts
+++ b/src/qt/locale/bitcoin_sk.ts
@@ -156,10 +156,6 @@
<translation>Zmena hesla</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Zadajte staré a nové heslo k peňaženke.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Potvrďte šifrovanie peňaženky</translation>
</message>
@@ -188,10 +184,6 @@
<translation>Zadajte nové heslo k peňaženke.&lt;br/&gt;Prosím použite heslo s dĺžkou aspoň &lt;b&gt;10 alebo viac náhodných znakov&lt;/b&gt;, alebo &lt;b&gt;8 alebo viac slov&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin sa teraz ukončí pre dokončenie procesu šifrovania. Pamätaj že šifrovanie peňaženky Ťa nemôže úplne ochrániť pred kráďežou bitcoinov pomocou škodlivého software.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Šifrovanie peňaženky zlyhalo</translation>
</message>
@@ -311,10 +303,6 @@
<translation>Poslať bitcoins na adresu</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Upraviť možnosti nastavenia pre bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Zálohovať peňaženku na iné miesto</translation>
</message>
@@ -422,34 +410,14 @@
<source>Show the Bitcoin Core help message to get a list with possible Bitcoin command-line options</source>
<translation>Zobraziť pomocnú správu od Bitcoin Jadra pre získanie zoznamu dostupných možností príkazového riadku</translation>
</message>
- <message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n aktívne pripojenie do siete Bitcoin</numerusform><numerusform>%n aktívne pripojenia do siete Bitcoin</numerusform><numerusform>%n aktívnych pripojení do siete Bitcoin</numerusform></translation>
- </message>
<message>
<source>No block source available...</source>
<translation>Nedostupný zdroj blokov...</translation>
</message>
- <message numerus="yes">
- <source>%n hour(s)</source>
- <translation><numerusform>%n hodina</numerusform><numerusform>%n hodiny</numerusform><numerusform>%n hodín</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n day(s)</source>
- <translation><numerusform>%n deň</numerusform><numerusform>%n dni</numerusform><numerusform>%n dní</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>%n týždňom</numerusform><numerusform>%n týždňami</numerusform><numerusform>%n týždňami</numerusform></translation>
- </message>
<message>
<source>%1 and %2</source>
<translation> %1 a %2</translation>
</message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation><numerusform>%n rok</numerusform><numerusform>%n roky</numerusform><numerusform>%n rokov</numerusform></translation>
- </message>
<message>
<source>%1 behind</source>
<translation>%1 pozadu</translation>
@@ -478,10 +446,6 @@
<source>Up to date</source>
<translation>Aktualizovaný</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>Spracovaný %n blok transakčnej histórie.</numerusform><numerusform>Spracované %n bloky transakčnej histórie.</numerusform><numerusform>Spracovaných %n blokov transakčnej histórie.</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>Sťahujem...</translation>
@@ -495,17 +459,6 @@
<translation>Prijaté transakcie</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Dátum: %1
-Suma: %2
-Typ: %3
-Adresa: %4</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Peňaženka je &lt;b&gt;zašifrovaná&lt;/b&gt; a momentálne &lt;b&gt;odomknutá&lt;/b&gt;</translation>
</message>
@@ -708,10 +661,6 @@ Adresa: %4</translation>
<translation>nie</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Tento popis zčervená ak veľkosť transakcie presiahne 1000 bytov.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>To znamená že požadovaný poplatok je aspoň %1 za kB.</translation>
</message>
@@ -724,14 +673,6 @@ Adresa: %4</translation>
<translation>Transakcie s vysokou prioritou sa pravdepodobnejsie dostanú do bloku.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Tento popis zčervenie ak je priorita nižčia ako "medium".</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Tento popis zčervenie ak ktorýkoľvek príjemca dostane sumu menšiu ako %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(bez popisu)</translation>
</message>
@@ -852,30 +793,6 @@ Adresa: %4</translation>
<source>command-line options</source>
<translation>voľby príkazového riadku</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>UI možnosti</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Nastaviť jazyk, napríklad "sk_SK" (predvolené: systémový)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Spustiť minimalizované</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Nastaviť koreňový certifikát pre výzvy na platbu (prednastavené: -system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Zobraziť splash screen pri spustení (predvolené: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Zvoľte dátový priečinok pri štarte (prednastavené: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -911,15 +828,7 @@ Adresa: %4</translation>
<source>Error</source>
<translation>Chyba</translation>
</message>
- <message numerus="yes">
- <source>%n GB of free space available</source>
- <translation><numerusform>%n GB voľného miesta</numerusform><numerusform>%n GB voľného miesta</numerusform><numerusform>%n GB voľného miesta</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>(of %n GB needed)</source>
- <translation><numerusform>(z %n GB potrebného)</numerusform><numerusform>(z %n GB potrebných)</numerusform><numerusform>(z %n GB potrebných)</numerusform></translation>
- </message>
-</context>
+ </context>
<context>
<name>OpenURIDialog</name>
<message>
@@ -954,14 +863,6 @@ Adresa: %4</translation>
<translation>&amp;Hlavné</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Automaticky spustiť Bitcoin po zapnutí počítača</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Spustiť Bitcoin pri spustení systému správy okien</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Veľkosť vyrovnávacej pamäti &amp;databázy</translation>
</message>
@@ -1074,10 +975,6 @@ Adresa: %4</translation>
<translation>Zobraziť len ikonu na lište po minimalizovaní okna.</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>Minimalizovat namiesto ukončenia aplikácie keď sa okno zavrie. Keď je zvolená táto možnosť, aplikácia sa zavrie len po zvolení Ukončiť v menu.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimalizovať pri zavretí</translation>
</message>
@@ -1090,10 +987,6 @@ Adresa: %4</translation>
<translation>Jazyk užívateľského rozhrania:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Tu sa dá nastaviť jazyk užívateľského rozhrania. Toto nastavenie bude účinné po reštartovaní Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Zobrazovať hodnoty v jednotkách:</translation>
</message>
@@ -1130,10 +1023,6 @@ Adresa: %4</translation>
<translation>Reštart klienta potrebný pre aktivovanie zmien.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>Klient bude vypnutý, chcete pokračovať?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>Táto zmena by vyžadovala reštart klienta.</translation>
</message>
@@ -1259,10 +1148,6 @@ Adresa: %4</translation>
<translation>Aplikácia</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Adresa/Názov počítača</translation>
- </message>
- <message>
<source>Ping Time</source>
<translation>Čas odozvy</translation>
</message>
@@ -1460,18 +1345,10 @@ Adresa: %4</translation>
<translation>Súbor záznamu ladenia</translation>
</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>Otvoriť Bitcoin log súbor pre ladenie z aktuálneho dátového adresára. Toto môže trvať niekoľko sekúnd pre veľké súbory.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Vymazať konzolu</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Vitajte v Bitcoin RPC konzole.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Použi šípky hore a dolu pre navigáciu históriou a &lt;b&gt;Ctrl-L&lt;/b&gt; pre vyčistenie obrazovky.</translation>
</message>
@@ -1744,14 +1621,6 @@ Adresa: %4</translation>
<translation>zbaliť nastavenia poplatkov</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Minimalizovať</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>Ak je poplatok nastavený na 1000 satoshi a transakcia je veľká len 250 bajtov, potom "za kilobajt" zaplatí poplatok 250 satoshi, ale "aspoň" zaplatí 1000 satoshi. Pre transakcie väčšie ako kilobajt platia oba spôsoby za každý kilobajt.</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>za kilobajt</translation>
</message>
@@ -1880,10 +1749,6 @@ Adresa: %4</translation>
<translation>alebo</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Adresa príjemcu je neplatná, prosím, overte ju.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Suma na úhradu musí byť väčšia ako 0.</translation>
</message>
@@ -1896,10 +1761,6 @@ Adresa: %4</translation>
<translation>Suma celkom prevyšuje Váš zostatok ak sú započítané %1 transakčné poplatky.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Duplikát adresy objavený, je možné poslať na každú adresu len raz v jednej odchádzajúcej transakcii.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Vytvorenie transakcie zlyhalo!</translation>
</message>
@@ -1908,10 +1769,6 @@ Adresa: %4</translation>
<translation>Transakcia bola zamietnutá! Toto sa môže stať ak niektoré coins vo vašej peňaženke už boli minuté, ako keď použijete kópiu wallet.dat a coins boli minuté z kópie ale neoznačené ako minuté tu.</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
- <translation>Poplatok vyšší ako %1 je považovaný za šialene vysoký.</translation>
- </message>
- <message>
<source>Pay only the minimum fee of %1</source>
<translation>Zaplatiť minimálny poplatok %1</translation>
</message>
@@ -1987,10 +1844,6 @@ Adresa: %4</translation>
<translation>Správa:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Toto je overená výzva k platbe.</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>Vložte popis pre túto adresu aby sa uložila do zoznamu použitých adries</translation>
</message>
@@ -1999,10 +1852,6 @@ Adresa: %4</translation>
<translation>Správa ktorá bola pripojená k bitcoin: URI a ktorá bude uložená s transakcou pre Vaše potreby. Poznámka: Táto správa nebude poslaná cez sieť Bitcoin.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Toto je neoverená výzva k platbe.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Platba pre:</translation>
</message>
@@ -2033,10 +1882,6 @@ Adresa: %4</translation>
<translation>&amp;Podpísať Správu</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Môžete podpísať správy svojou adresou a dokázať, že ju vlastníte. Buďte opatrní a podpíšte len prehlásenia s ktorými plne súhlasíte, nakoľko útoky typu "phishing" Vás môžu lákať k ich podpísaniu.</translation>
- </message>
- <message>
<source>Choose previously used address</source>
<translation>Vybrať predtým použitú adresu</translation>
</message>
@@ -2085,10 +1930,6 @@ Adresa: %4</translation>
<translation>Overiť správu...</translation>
</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>Vložte podpisovaciu adresu, správu (uistite sa, že kopírujete ukončenia riadkov, medzery, odrážky, atď. presne) a podpis pod to na overenie adresy. Buďte opatrní a nečítajte ako podpísané viac než je v samotnej podpísanej správe a môžete sa tak vyhnúť podvodu mitm útokom.</translation>
- </message>
- <message>
<source>Verify the message to ensure it was signed with the specified Bitcoin address</source>
<translation>Overím správy sa uistiť že bola podpísaná označenou Bitcoin adresou</translation>
</message>
@@ -2324,10 +2165,6 @@ Adresa: %4</translation>
<translation>Typ</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adresa</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Nezrelé (%1 potvrdení, bude k dispozícii po %2)</translation>
</message>
@@ -2352,6 +2189,10 @@ Adresa: %4</translation>
<translation>Offline</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Popis</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Nepotvrdené</translation>
</message>
@@ -2400,10 +2241,6 @@ Adresa: %4</translation>
<translation>Typ transakcie.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Cieľová adresa transakcie.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Suma pridaná alebo odobraná k zostatku.</translation>
</message>
@@ -2716,10 +2553,6 @@ The network does not appear to fully agree! Some miners appear to be experiencin
<translation>Možnosti ladenia/testovania:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Zisti vlastnú IP adresu (predvolené: 1 pri počúvaní/listening a žiadnej -externalip)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>Nenahrat peňaženku a zablokovať volania RPC.</translation>
</message>
@@ -2772,10 +2605,6 @@ The network does not appear to fully agree! Some miners appear to be experiencin
<translation>Nedostatok kľúčových slov súboru.</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Znovu vytvoriť zoznam blokov zo súčasných blk000??.dat súborov</translation>
- </message>
- <message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation>Nastaviť veľkosť pomocnej pamäti databázy v megabajtoch (%d do %d, prednastavené: %d)</translation>
</message>
@@ -2836,18 +2665,14 @@ The network does not appear to fully agree! Some miners appear to be experiencin
<translation>Poplatky (v BTC/Kb) nižšie ako toľkoto sa považujú za nulové pri vytváraní transakcií (predvolené: %s)</translation>
</message>
<message>
- <source>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</source>
- <translation>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</translation>
- </message>
- <message>
- <source>Require high priority for relaying free or low-fee transactions (default:%u)</source>
- <translation>Vyžadovať vysokú prioritu pre postúpenie transakcií s nízkymi poplatkami (predvolené:%u)</translation>
- </message>
- <message>
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
<translation>Nastaviť najväčšiu veľkosť vysoká-dôležitosť/nízke-poplatky transakcií v bajtoch (prednastavené: %d)</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Zvoľte dátový priečinok pri štarte (prednastavené: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Pripojiť cez proxy server SOCKS5</translation>
</message>
@@ -2896,10 +2721,22 @@ The network does not appear to fully agree! Some miners appear to be experiencin
<translation>Poslať ako transakcie bez poplatku, ak je to možné (predvolené: %u)</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Nastaviť koreňový certifikát pre výzvy na platbu (prednastavené: -system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Nastaviť jazyk, napríklad "sk_SK" (predvolené: systémový)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Zobraziť všetky možnosti ladenia (použitie: --help --help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Zobraziť splash screen pri spustení (predvolené: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Zmenšiť debug.log pri spustení klienta (predvolené: 1 ak bez -debug)</translation>
</message>
@@ -2908,6 +2745,10 @@ The network does not appear to fully agree! Some miners appear to be experiencin
<translation>Podpísanie správy zlyhalo</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Spustiť minimalizované</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Toto je experimentálny softvér.</translation>
</message>
@@ -2940,10 +2781,6 @@ The network does not appear to fully agree! Some miners appear to be experiencin
<translation>Upozornenie</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Upozornenie: Táto verzia je zastaraná, vyžaduje sa aktualizácia!</translation>
- </message>
- <message>
<source>Zapping all transactions from wallet...</source>
<translation>Zmazať všetky transakcie z peňaženky...</translation>
</message>
diff --git a/src/qt/locale/bitcoin_sl_SI.ts b/src/qt/locale/bitcoin_sl_SI.ts
index 3a65c10604..7a283bcca1 100644
--- a/src/qt/locale/bitcoin_sl_SI.ts
+++ b/src/qt/locale/bitcoin_sl_SI.ts
@@ -148,10 +148,6 @@
<translation>Zamenjaj geslo</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Vnesite staro in novo geslo denarnice.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Potrdi šifriranje denarnice</translation>
</message>
@@ -172,10 +168,6 @@
<translation>Denarnica šifrirana</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin se bo zaprl, da bi dokončal proces šifriranja. Zapomnite si, da šifriranje vaše denarnice ne more popolnoma zaščititi pred krajami zlonamernih programov, ki bi lahko bili nameščeni na vašem računalniku.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Šifriranje denarnice spodletelo</translation>
</message>
@@ -291,10 +283,6 @@
<translation>Pošlji kovance na Bitcoin naslov</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Spremeni konfiguracijo nastavitev za Bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Napravi varnostno kopijo denarnice na drugo lokacijo</translation>
</message>
@@ -382,30 +370,10 @@
<source>Open a bitcoin: URI or payment request</source>
<translation>Odpri Bitcoin: URI ali zahteva o plačilu</translation>
</message>
- <message numerus="yes">
- <source>%n active connection(s) to Bitcoin network</source>
- <translation><numerusform>%n aktivna povezava v bitcoin omrežje</numerusform><numerusform>%n aktivni povezavi v bitcoin omrežje</numerusform><numerusform>%n aktivnih povezav v bitcoin omrežje</numerusform><numerusform>%n aktivnih povezav v bitcoin omrežje</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n hour(s)</source>
- <translation><numerusform>%n ura</numerusform><numerusform>%n uri</numerusform><numerusform>%n ure</numerusform><numerusform>%n ura</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n day(s)</source>
- <translation><numerusform>%n dan</numerusform><numerusform>%n dneva</numerusform><numerusform>%n dnevi</numerusform><numerusform>%n dni</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>%n teden</numerusform><numerusform>%n tedna</numerusform><numerusform>%n tedni</numerusform><numerusform>%n tednov</numerusform></translation>
- </message>
<message>
<source>%1 and %2</source>
<translation>%1 in %2</translation>
</message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation><numerusform>%n leto</numerusform><numerusform>%n leti</numerusform><numerusform>%n leta</numerusform><numerusform>%n let</numerusform></translation>
- </message>
<message>
<source>%1 behind</source>
<translation>%1 odzadaj</translation>
@@ -443,18 +411,6 @@
<translation>Prilivi</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Datum: %1
-Količina: %2
-Vrsta: %3
-Naslov: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Denarnica je &lt;b&gt;šifrirana&lt;/b&gt; in trenutno &lt;b&gt;odklenjena&lt;/b&gt;</translation>
</message>
@@ -482,7 +438,7 @@ Naslov: %4
</message>
<message>
<source>Amount:</source>
- <translation>Količina:</translation>
+ <translation>Znesek:</translation>
</message>
<message>
<source>Priority:</source>
@@ -637,10 +593,6 @@ Naslov: %4
<translation>ne</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>V primeru, da je velikost transakcije večja od 1000 bitov, se ta oznaka se obarva rdeče.</translation>
- </message>
- <message>
<source>Can vary +/- 1 byte per input.</source>
<translation>Se lahko razlikuje +/- 1 byte na vnos.</translation>
</message>
@@ -649,10 +601,6 @@ Naslov: %4
<translation>Transakcije z višjo prioriteto imajo boljše možnosti za vključitev v blok.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Oznaka se obarva rdeče, kadar je prioriteta manjša od "srednje".</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(ni oznake)</translation>
</message>
@@ -769,30 +717,6 @@ Naslov: %4
<source>command-line options</source>
<translation>možnosti ukazne vrstice</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>možnosti uporabniškega vmesnika</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Nastavi jezik, npr. "sl_SI" (privzeto: jezikovna oznaka sistema)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Zaženi pomanjšano</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Nastavi korenske SSL certifikate za plačilni zahtevek (privzeto: -system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Ob zagonu prikaži uvodni zaslon (privzeto: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Ob zagonu izberi mapo za shranjevanje podatkov (privzeto: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -867,14 +791,6 @@ Naslov: %4
<translation>&amp;Glavno</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Po prijavi v sistem samodejno zaženite Bitcoin.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Zaženi Bitcoin ob prijavi v sistem</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Velikost lokalne zbirke &amp;podatkovne baze</translation>
</message>
@@ -947,10 +863,6 @@ Naslov: %4
<translation>&amp;Minimiraj na pladenj namesto na opravilno vrstico</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>Minimiziraj namesto izhoda iz programa, ko je okno zaprto. Ko je ta opcija omogočena se bo aplikacija zaprla z izbiro opcije Zapri iz menija. </translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>&amp;Minimiziraj na ukaz zapri</translation>
</message>
@@ -963,10 +875,6 @@ Naslov: %4
<translation>Vmesnik uporabnika &amp;jezik:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Tukaj je mogoče nastaviti uporabniški vmesnik za jezike. Ta nastavitev bo prikazana šele, ko boste znova zagnali Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;</translation>
</message>
@@ -1087,7 +995,7 @@ Naslov: %4
<name>QRImageWidget</name>
<message>
<source>&amp;Save Image...</source>
- <translation>&amp;Shrani sliko...</translation>
+ <translation>&amp;Shrani sliko..</translation>
</message>
<message>
<source>&amp;Copy Image</source>
@@ -1205,10 +1113,6 @@ Naslov: %4
<translation>Počisti konzolo</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Dobrodošli na Bitcoin RPC konzoli.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Uporabi puščice za gor in dol za navigacijo po zgodovini in &lt;b&gt;Ctrl-L&lt;/b&gt; za izbris izpisa na ekranu.</translation>
</message>
@@ -1434,7 +1338,7 @@ Naslov: %4
</message>
<message>
<source>Clear &amp;All</source>
- <translation>Počisti &amp;vse</translation>
+ <translation>Počisti &amp;vse </translation>
</message>
<message>
<source>Balance:</source>
@@ -1489,10 +1393,6 @@ Naslov: %4
<translation>Količina presega vaše dobroimetje</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Najdena kopija naslova, možnost pošiljanja na vsakega izmed naslov le enkrat ob pošiljanju.</translation>
- </message>
- <message>
<source>Warning: Invalid Bitcoin address</source>
<translation>Opozorilo: Neveljaven Bitcoin naslov</translation>
</message>
@@ -1801,10 +1701,6 @@ Naslov: %4
<translation>Vrsta</translation>
</message>
<message>
- <source>Address</source>
- <translation>Naslov</translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Odpri enoto %1</translation>
</message>
@@ -1821,6 +1717,10 @@ Naslov: %4
<translation>Generirano, toda ne sprejeto</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Oznaka</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Nepotrjeno</translation>
</message>
@@ -1861,10 +1761,6 @@ Naslov: %4
<translation>Vrsta transakcije.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Naslov prejemnika transakcije.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Količina odlita ali prilita dobroimetju.</translation>
</message>
@@ -2111,6 +2007,10 @@ Naslov: %4
<translation>Uvažam...</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Ob zagonu izberi mapo za shranjevanje podatkov (privzeto: 0)</translation>
+ </message>
+ <message>
<source>Information</source>
<translation>Informacije</translation>
</message>
@@ -2119,10 +2019,26 @@ Naslov: %4
<translation>Pošlji sledilne/razhroščevalne informacije v konzolo namesto jih shraniti v debug.log datoteko</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Nastavi korenske SSL certifikate za plačilni zahtevek (privzeto: -system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Nastavi jezik, npr. "sl_SI" (privzeto: jezikovna oznaka sistema)</translation>
+ </message>
+ <message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Ob zagonu prikaži uvodni zaslon (privzeto: 1)</translation>
+ </message>
+ <message>
<source>Signing transaction failed</source>
<translation>Podpisovanje transakcije spodletelo</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Zaženi pomanjšano</translation>
+ </message>
+ <message>
<source>Transaction amount too small</source>
<translation>Količina transakcije je pramajhna</translation>
</message>
@@ -2143,10 +2059,6 @@ Naslov: %4
<translation>Opozorilo</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Opozorilo: ta različica je zastarela, potrebna je nadgradnja!</translation>
- </message>
- <message>
<source>wallet.dat corrupt, salvage failed</source>
<translation>wallet.dat poškodovana, neuspešna obnova</translation>
</message>
diff --git a/src/qt/locale/bitcoin_sq.ts b/src/qt/locale/bitcoin_sq.ts
index 82c0a61701..2e345e85cb 100644
--- a/src/qt/locale/bitcoin_sq.ts
+++ b/src/qt/locale/bitcoin_sq.ts
@@ -108,10 +108,6 @@
<translation>Ndrysho frazkalimin</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Futni frazkalimin e vjetër dhe të ri në portofol. </translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Konfirmoni enkriptimin e portofolit</translation>
</message>
@@ -226,26 +222,10 @@
<source>&amp;About Bitcoin Core</source>
<translation>Rreth Berthames Bitkoin</translation>
</message>
- <message numerus="yes">
- <source>%n hour(s)</source>
- <translation><numerusform>%n ore</numerusform><numerusform>%n ore</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n day(s)</source>
- <translation><numerusform>%n dite</numerusform><numerusform>%n dite</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>%n week(s)</source>
- <translation><numerusform>%n jave</numerusform><numerusform>%n jave</numerusform></translation>
- </message>
<message>
<source>%1 and %2</source>
<translation>%1 dhe %2</translation>
</message>
- <message numerus="yes">
- <source>%n year(s)</source>
- <translation><numerusform>%n vit</numerusform><numerusform>%n vite</numerusform></translation>
- </message>
<message>
<source>%1 behind</source>
<translation>%1 Pas</translation>
@@ -649,10 +629,6 @@
<translation>Lloji</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adresë</translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Hapur deri më %1</translation>
</message>
@@ -669,6 +645,10 @@
<translation>I krijuar por i papranuar</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Etiketë</translation>
+ </message>
+ <message>
<source>Received with</source>
<translation>Marrë me</translation>
</message>
diff --git a/src/qt/locale/bitcoin_sr.ts b/src/qt/locale/bitcoin_sr.ts
index 842b3f90ab..83e6e2f29e 100644
--- a/src/qt/locale/bitcoin_sr.ts
+++ b/src/qt/locale/bitcoin_sr.ts
@@ -88,10 +88,6 @@
<translation>Промена лозинке</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Унесите стару и нову лозинку за шифровање новчаника.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Одобрите шифровање новчаника</translation>
</message>
@@ -108,10 +104,6 @@
<translation>Новчаник је шифрован</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin će se sad zatvoriti da bi završio proces enkripcije. Zapamti da enkripcija tvog novčanika ne može u potpunosti da zaštiti tvoje bitcoine da ne budu ukradeni od malawarea koji bi inficirao tvoj kompjuter.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Неуспело шифровање новчаника</translation>
</message>
@@ -199,10 +191,6 @@
<translation>Пошаљите новац на bitcoin адресу</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Изаберите могућности bitcoin-а</translation>
- </message>
- <message>
<source>Change the passphrase used for wallet encryption</source>
<translation>Мењање лозинке којом се шифрује новчаник</translation>
</message>
@@ -247,14 +235,6 @@
<translation>Придошла трансакција</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Datum: %1⏎ Iznos: %2⏎ Tip: %3⏎ Adresa: %4⏎</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Новчаник јс &lt;b&gt;шифрован&lt;/b&gt; и тренутно &lt;b&gt;откључан&lt;/b&gt;</translation>
</message>
@@ -565,10 +545,6 @@ Address: %4
<translation>tip</translation>
</message>
<message>
- <source>Address</source>
- <translation>Адреса</translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>Otvoreno do %1</translation>
</message>
@@ -585,6 +561,10 @@ Address: %4
<translation>Generisan ali nije prihvaćen</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Етикета</translation>
+ </message>
+ <message>
<source>Received with</source>
<translation>Primljen sa</translation>
</message>
@@ -621,10 +601,6 @@ Address: %4
<translation>Tip transakcije</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Destinacija i adresa transakcije</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Iznos odbijen ili dodat balansu.</translation>
</message>
diff --git a/src/qt/locale/bitcoin_sv.ts b/src/qt/locale/bitcoin_sv.ts
index 0ed914fdcf..8a46ae8470 100644
--- a/src/qt/locale/bitcoin_sv.ts
+++ b/src/qt/locale/bitcoin_sv.ts
@@ -79,7 +79,7 @@
</message>
<message>
<source>&amp;Edit</source>
- <translation>&amp;Editera</translation>
+ <translation>&amp;Ändra</translation>
</message>
<message>
<source>Export Address List</source>
@@ -157,10 +157,6 @@ Var vänlig och försök igen.</translation>
<translation>Ändra lösenord</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Ange plånbokens gamla och nya lösenord.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Bekräfta kryptering av plånbok</translation>
</message>
@@ -173,6 +169,10 @@ Var vänlig och försök igen.</translation>
<translation>Är du säker på att du vill kryptera din plånbok?</translation>
</message>
<message>
+ <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+ <translation>Bitcoin Core kommer att stängas för att slutföra krypteringsprocessen. Kom ihåg att plånbokskryptering inte garanterar fullt skydd mot skadlig kod på din dator.</translation>
+ </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>VIKTIGT: Alla tidigare säkerhetskopior du har gjort av plånbokens fil ska ersättas med den nya genererade, krypterade plånboks filen. Av säkerhetsskäl kommer tidigare säkerhetskopior av den okrypterade plånboks filen blir oanvändbara när du börjar använda en ny, krypterad plånbok.</translation>
</message>
@@ -189,8 +189,8 @@ Var vänlig och försök igen.</translation>
<translation>Ange plånbokens nya lösenord. &lt;br/&gt; Använd ett lösenord på &lt;b&gt;tio eller fler slumpmässiga tecken,&lt;/b&gt; eller &lt;b&gt;åtta eller fler ord.&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Programmet kommer nu att stänga ner för att färdigställa krypteringen. Tänk på att en krypterad plånbok inte skyddar mot stöld om din dator är infekterad med en keylogger.</translation>
+ <source>Enter the old passphrase and new passphrase to the wallet.</source>
+ <translation>Ge det gamla lösenordet och det nya lösenordet för plånboken.</translation>
</message>
<message>
<source>Wallet encryption failed</source>
@@ -312,10 +312,6 @@ Var vänlig och försök igen.</translation>
<translation>Skicka bitcoins till en Bitcoin-adress</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Ändra konfigurationsalternativ för Bitcoin</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Säkerhetskopiera plånboken till en annan plats</translation>
</message>
@@ -404,6 +400,10 @@ Var vänlig och försök igen.</translation>
<translation>&amp;Om Bitcoin Core</translation>
</message>
<message>
+ <source>Modify configuration options for Bitcoin Core</source>
+ <translation>Ändra konfigurationsalternativ för Bitcoin Core</translation>
+ </message>
+ <message>
<source>Show the list of used sending addresses and labels</source>
<translation>Visa listan av använda avsändaradresser och etiketter</translation>
</message>
@@ -432,6 +432,10 @@ Var vänlig och försök igen.</translation>
<translation>Ingen block-källa tillgänglig...</translation>
</message>
<message numerus="yes">
+ <source>Processed %n block(s) of transaction history.</source>
+ <translation><numerusform>Bearbetade %n block av transaktionshistoriken.</numerusform><numerusform>Bearbetade %n block av transaktionshistoriken.</numerusform></translation>
+ </message>
+ <message numerus="yes">
<source>%n hour(s)</source>
<translation><numerusform>%n timme</numerusform><numerusform>%n timmar</numerusform></translation>
</message>
@@ -479,35 +483,49 @@ Var vänlig och försök igen.</translation>
<source>Up to date</source>
<translation>Uppdaterad</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>Bearbetat %n block av transaktionshistoriken.</numerusform><numerusform>Bearbetat %n block av transaktionshistoriken.</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>Hämtar senaste...</translation>
</message>
<message>
- <source>Sent transaction</source>
- <translation>Transaktion skickad</translation>
+ <source>Date: %1
+</source>
+ <translation>Datum: %1
+</translation>
</message>
<message>
- <source>Incoming transaction</source>
- <translation>Inkommande transaktion</translation>
+ <source>Amount: %1
+</source>
+ <translation>Belopp: %1
+</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
+ <source>Type: %1
</source>
- <translation>Datum: %1
-Belopp: %2
-Typ: %3
-Adress: %4
+ <translation>Typ: %1
</translation>
</message>
<message>
+ <source>Label: %1
+</source>
+ <translation>Etikett: %1
+</translation>
+ </message>
+ <message>
+ <source>Address: %1
+</source>
+ <translation>Adress: %1
+</translation>
+ </message>
+ <message>
+ <source>Sent transaction</source>
+ <translation>Transaktion skickad</translation>
+ </message>
+ <message>
+ <source>Incoming transaction</source>
+ <translation>Inkommande transaktion</translation>
+ </message>
+ <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Denna plånbok är &lt;b&gt;krypterad&lt;/b&gt; och för närvarande &lt;b&gt;olåst&lt;/b&gt;</translation>
</message>
@@ -698,6 +716,18 @@ Adress: %4
<translation>ingen</translation>
</message>
<message>
+ <source>This label turns red if the transaction size is greater than 1000 bytes.</source>
+ <translation>Denna etikett blir röd om transaktionens storlek är större än 1000 bytes.</translation>
+ </message>
+ <message>
+ <source>This label turns red if the priority is smaller than "medium".</source>
+ <translation>Denna etikett blir röd om prioriteten är lägre än "medium".</translation>
+ </message>
+ <message>
+ <source>This label turns red if any recipient receives an amount smaller than %1.</source>
+ <translation>Denna etikett blir röd om någon mottagare får ett belopp mindre än %1.</translation>
+ </message>
+ <message>
<source>yes</source>
<translation>ja</translation>
</message>
@@ -706,10 +736,6 @@ Adress: %4
<translation>nej</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Denna etikett blir röd om transaktionen överstiger 1000 byte.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Detta betyder att en avgift på minst %1 per kB behövs.</translation>
</message>
@@ -722,14 +748,6 @@ Adress: %4
<translation>Transaktioner med högre prioritet har större sannolikhet att inkluderas i ett block.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Denna etikett blir röd om prioriteten är mindre än "medium".</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Denna etikett blir röd om någon mottagare får en betalning som är mindre än %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(Ingen etikett)</translation>
</message>
@@ -850,30 +868,6 @@ Adress: %4
<source>command-line options</source>
<translation>kommandoradsalternativ</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>UI alternativ</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Ändra språk, till exempel "de_DE" (förvalt: systemets språk)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Starta som minimerad</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Sätt SSL root-certifikat för betalningsbegäran (förvalt: -system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Visa startbilden vid uppstart (förvalt: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Välj datakatalog vid uppstart (förvalt: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -956,14 +950,6 @@ Adress: %4
<translation>&amp;Allmänt</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Starta Bitcoin automatiskt efter inloggning.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Starta Bitcoin vid systemstart</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Storleken på &amp;databascache</translation>
</message>
@@ -988,6 +974,14 @@ Adress: %4
<translation>Proxyns IP-adress (t.ex. IPv4: 127.0.0.1 / IPv6: ::1)</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 Exit in the menu.</source>
+ <translation>Minimera istället för att stänga programmet när fönstret stängs. När detta alternativ är aktiverat stängs programmet endast genom att välja Stäng i menyn.</translation>
+ </message>
+ <message>
+ <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin Core.</source>
+ <translation>Gränssnittets språk kan väljas här. Denna inställning träder i kraft efter omstart av Bitcoin Core.</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>Tredjeparts URL:er (t.ex. en block utforskare) som finns i transaktionstabben som ett menyval i sammanhanget. %s i URL:en ersätts med tansaktionshashen. Flera URL:er är separerade med vertikala streck |.</translation>
</message>
@@ -1012,6 +1006,14 @@ Adress: %4
<translation>&amp;Nätverk</translation>
</message>
<message>
+ <source>Automatically start Bitcoin Core after logging in to the system.</source>
+ <translation>Kör Bitcoin Core automatiskt vid systeminloggning.</translation>
+ </message>
+ <message>
+ <source>&amp;Start Bitcoin Core on system login</source>
+ <translation>&amp;Kör Bitcoin Core vid systeminloggning</translation>
+ </message>
+ <message>
<source>(0 = auto, &lt;0 = leave that many cores free)</source>
<translation>(0 = auto, &lt;0 = lämna så många kärnor lediga)</translation>
</message>
@@ -1076,10 +1078,6 @@ Adress: %4
<translation>&amp;Minimera till systemfältet istället för aktivitetsfältet</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>Minimera applikationen istället för att stänga ner den när fönstret stängs. Detta innebär att programmet fotrsätter att köras tills du väljer Avsluta i menyn.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>M&amp;inimera vid stängning</translation>
</message>
@@ -1092,10 +1090,6 @@ Adress: %4
<translation>Användargränssnittets &amp;språk: </translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Användargränssnittets språk kan ställas in här. Denna inställning träder i kraft efter en omstart av Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>&amp;Måttenhet att visa belopp i: </translation>
</message>
@@ -1132,8 +1126,8 @@ Adress: %4
<translation>Klientomstart är nödvändig för att aktivera ändringarna.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>Klienten skall stängas av, vill du fortsätta?</translation>
+ <source>Client will be shut down. Do you want to proceed?</source>
+ <translation>Programmet kommer att stängas. Vill du fortsätta?</translation>
</message>
<message>
<source>This change would require a client restart.</source>
@@ -1242,10 +1236,6 @@ Adress: %4
<translation>Betalningsbegärans nätverk matchar inte klientens nätverk.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>Tiden för betalningsbegäran gick ut</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>Betalningsbegäran är inte initierad.</translation>
</message>
@@ -1278,10 +1268,18 @@ Adress: %4
<translation>Betalningsbegäransfilen kan inte läsas! Detta kan orsakas av en felaktig betalningsbegäransfil.</translation>
</message>
<message>
+ <source>Payment request expired.</source>
+ <translation>Betalningsbegäran löpte ut.</translation>
+ </message>
+ <message>
<source>Unverified payment requests to custom payment scripts are unsupported.</source>
<translation>Overifierade betalningsbegärningar till specialbetalningsskript stöds inte.</translation>
</message>
<message>
+ <source>Invalid payment request.</source>
+ <translation>Ogiltig betalningsbegäran.</translation>
+ </message>
+ <message>
<source>Refund from %1</source>
<translation>Återbetalning från %1</translation>
</message>
@@ -1321,8 +1319,8 @@ Adress: %4
<translation>Användaragent</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Adress/Värdnamn</translation>
+ <source>Node/Service</source>
+ <translation>Nod/Tjänst</translation>
</message>
<message>
<source>Ping Time</source>
@@ -1356,14 +1354,6 @@ Adress: %4
<translation>%1 s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>NÄTVERK</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>OKÄND</translation>
- </message>
- <message>
<source>None</source>
<translation>Ingen</translation>
</message>
@@ -1454,6 +1444,10 @@ Adress: %4
<translation>Aktuellt antal block</translation>
</message>
<message>
+ <source>Open the Bitcoin Core debug log file from the current data directory. This can take a few seconds for large log files.</source>
+ <translation>Öppna felsökningsloggfilen för Bitcoin Core från den nuvarande datakatalogen. Detta kan ta några sekunder om loggfilen är stor.</translation>
+ </message>
+ <message>
<source>Received</source>
<translation>Mottagen</translation>
</message>
@@ -1522,6 +1516,10 @@ Adress: %4
<translation>Pingtid</translation>
</message>
<message>
+ <source>Time Offset</source>
+ <translation>Tidsförskjutning</translation>
+ </message>
+ <message>
<source>Last block time</source>
<translation>Sista blocktid</translation>
</message>
@@ -1562,16 +1560,12 @@ Adress: %4
<translation>Debugloggfil</translation>
</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>Öppna Bitcoin debug-loggfilen som finns i datakatalogen. Detta kan ta några sekunder för stora loggfiler.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Rensa konsollen</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Välkommen till Bitcoin RPC-konsollen.</translation>
+ <source>Welcome to the Bitcoin Core RPC console.</source>
+ <translation>Välkommen till RPC-konsolen för Bitcoin Core.</translation>
</message>
<message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
@@ -1858,14 +1852,6 @@ Adress: %4
<translation>Fäll ihop avgiftsinställningarna</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Minimera</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>Om den anpassad avgiften är satt till 1000 satoshi och transaktionen bara är 250 byte, betalar "per kilobyte" bara 250 satoshi i avgift, medans "minst" betalar 1000 satoshi. För transaktioner större än en kilobyte betalar både per kilobyte.</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>per kilobyte</translation>
</message>
@@ -1874,6 +1860,10 @@ Adress: %4
<translation>Om den anpassad avgiften är satt till 1000 satoshi och transaktionen bara är 250 byte, betalar "per kilobyte" bara 250 satoshi i avgift, medans "totalt minst" betalar 1000 satoshi. För transaktioner större än en kilobyte betalar både per kilobyte.</translation>
</message>
<message>
+ <source>Hide</source>
+ <translation>Göm</translation>
+ </message>
+ <message>
<source>total at least</source>
<translation>totalt minst</translation>
</message>
@@ -1994,10 +1984,6 @@ Adress: %4
<translation>eller</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Mottagarens adress är inte giltig, vänligen kontrollera igen.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Det betalade beloppet måste vara större än 0.</translation>
</message>
@@ -2010,10 +1996,6 @@ Adress: %4
<translation>Totalvärdet överstiger ditt saldo när transaktionsavgiften %1 är pålagd.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Dubblett av adress funnen, kan bara skicka till varje adress en gång per sändning.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Transaktionen gick inte att skapa!</translation>
</message>
@@ -2022,16 +2004,28 @@ Adress: %4
<translation>Transaktionen avslogs! Detta kan hända om några av mynten i plånboken redan spenderats, t.ex om du använt en kopia av wallet.dat och mynt spenderades i kopian men inte markerats som spenderade här.</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
- <translation>En avgift högre än %1 anses som en onormalt hög avgift.</translation>
+ <source>A fee higher than %1 is considered an absurdly high fee.</source>
+ <translation>En avgift som är högre än %1 anses vara en orimligt hög avgift.</translation>
+ </message>
+ <message>
+ <source>Payment request expired.</source>
+ <translation>Betalningsbegäran löpte ut.</translation>
+ </message>
+ <message numerus="yes">
+ <source>Estimated to begin confirmation within %n block(s).</source>
+ <translation><numerusform>Uppskattas till att påbörja bekräftelse inom %n block.</numerusform><numerusform>Uppskattas till att påbörja bekräftelse inom %n block.</numerusform></translation>
</message>
<message>
<source>Pay only the minimum fee of %1</source>
<translation>Betala endast den minimala avgiften på %1</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>Bekräftelsen beräknas börja inom %1 block.</translation>
+ <source>The recipient address is not valid. Please recheck.</source>
+ <translation>Mottagarens adress är ogiltig. Kontrollera igen.</translation>
+ </message>
+ <message>
+ <source>Duplicate address found: addresses should only be used once each.</source>
+ <translation>Duplicerad adress upptäckt: adresser skall endast användas en gång var.</translation>
</message>
<message>
<source>Warning: Invalid Bitcoin address</source>
@@ -2105,12 +2099,20 @@ Adress: %4
<translation>Radera denna post</translation>
</message>
<message>
+ <source>The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
+ <translation>Avgiften dras från beloppet som skickas. Mottagaren kommer att få mindre bitcoins än du angivit i belopp-fältet. Om flera mottagare valts kommer avgiften delas jämt.</translation>
+ </message>
+ <message>
<source>Message:</source>
<translation>Meddelande:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Detta är en verifierad betalningsbegäran.</translation>
+ <source>This is an unauthenticated payment request.</source>
+ <translation>Detta är en oautentiserad betalningsbegäran.</translation>
+ </message>
+ <message>
+ <source>This is an authenticated payment request.</source>
+ <translation>Detta är en autentiserad betalningsbegäran.</translation>
</message>
<message>
<source>Enter a label for this address to add it to the list of used addresses</source>
@@ -2121,10 +2123,6 @@ Adress: %4
<translation>Ett meddelande som bifogades bitcoin-URI, vilket lagras med transaktionen som referens. NB: Meddelandet kommer inte att sändas över Bitcoinnätverket.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Detta är en overifierad betalningsbegäran.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Betala Till:</translation>
</message>
@@ -2155,8 +2153,8 @@ Adress: %4
<translation>&amp;Signera Meddelande</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Du kan signera meddelanden med dina adresser för att bevisa att du äger dem. Var försiktig med vad du signerar eftersom phising-attacker kan försöka få dig att skriva över din identitet till någon annan. Signera bara väldetaljerade påståenden du kan gå i god för.</translation>
+ <source>You can sign messages/agreements with your addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
+ <translation>Du kan underteckna meddelanden/avtal med dina adresser för att bevisa att du kan ta emot bitcoins som skickats till dem. Var försiktig så du inte undertecknar något oklart eller konstigt, eftersom phishing-angrepp kan försöka få dig att underteckna din identitet till dem. Underteckna endast väldetaljerade meddelanden som du godkänner.</translation>
</message>
<message>
<source>The Bitcoin address to sign the message with</source>
@@ -2211,8 +2209,8 @@ Adress: %4
<translation>&amp;Verifiera Meddelande</translation>
</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>Skriv in din adress, meddelande (se till att du kopierar radbrytningar, mellanslag, tabbar, osv. exakt) och signatur nedan för att verifiera meddelandet. Var noga med att inte läsa in mer i signaturen än vad som finns i det signerade meddelandet, för att undvika att luras av en man-in-the-middle attack.</translation>
+ <source>Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction!</source>
+ <translation>Ange mottagarens adress, meddelande (kopiera radbrytningar, mellanrum, flikar, etc. exakt) och signatur nedan för att verifiera meddelandet. Undvik att läsa in mera information i signaturen än vad som stod i själva undertecknade meddelandet, för att undvika ett man-in-the-middle-angrepp. Notera att detta endast bevisar att undertecknad tar emot med adressen, det bevisar inte vem som skickat transaktionen!</translation>
</message>
<message>
<source>The Bitcoin address the message was signed with</source>
@@ -2478,10 +2476,6 @@ Adress: %4
<translation>Typ</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adress</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Omogen (%1 konfirmeringar, blir tillgänglig efter %2)</translation>
</message>
@@ -2510,6 +2504,10 @@ Adress: %4
<translation>Nerkopplad</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Etikett</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Okonfirmerade</translation>
</message>
@@ -2566,8 +2564,8 @@ Adress: %4
<translation>Anger om granska-bara--adresser är involverade i denna transaktion.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Transaktionens destinationsadress.</translation>
+ <source>User-defined intent/purpose of the transaction.</source>
+ <translation>Användardefinierat syfte/ändamål för transaktionen.</translation>
</message>
<message>
<source>Amount removed from or added to balance.</source>
@@ -2812,6 +2810,10 @@ Adress: %4
<translation>Bind till given adress och lyssna alltid på den. Använd [värd]:port notation för IPv6</translation>
</message>
<message>
+ <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default: %u)</source>
+ <translation>Hastighetsbegränsa avgiftsfria transaktionerna till &lt;n&gt;*1000 bytes per minut (förvalt: %u)</translation>
+ </message>
+ <message>
<source>Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup</source>
<translation>Ta bort alla plånbokstransaktioner och återskapa bara dom som är en del av blockkedjan genom att ange -rescan vid uppstart</translation>
</message>
@@ -2832,6 +2834,14 @@ Adress: %4
<translation>I denna mode kontrollerar -genproclimit hur många block som genereras på en gång.</translation>
</message>
<message>
+ <source>Maximum total fees to use in a single wallet transaction; setting this too low may abort large transactions (default: %s)</source>
+ <translation>Maximal total avgift att använda i en plånbokstransaktion. Sätts denna för lågt kommer stora transaktioner att avbrytas (förvalt: %s)</translation>
+ </message>
+ <message>
+ <source>Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, &gt;%u = target size in MiB to use for block files)</source>
+ <translation>Reducera lagringsbehovet genom att beskära (ta bort) gamla block. Detta läge avaktiverar plånbokssupport och är inkompatibel med -txindex. Varning: Ändras denna inställning måste hela blockkedjan laddas ner igen. 0 = avaktivera beskärning av blocks, &gt;%u = målstorlek i MiB att använda för blockfiler)</translation>
+ </message>
+ <message>
<source>Set the number of script verification threads (%u to %d, 0 = auto, &lt;0 = leave that many cores free, default: %d)</source>
<translation>Ange antalet skriptkontrolltrådar (%u till %d, 0 = auto, &lt;0 = lämna så många kärnor lediga, förval: %d)</translation>
</message>
@@ -2900,10 +2910,6 @@ Adress: %4
<translation>Avlusnings/Testnings optioner:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Hitta egen IP-adress (förvalt: 1 under lyssning och utan -externalip)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>Ladda inte plånboken och stäng av RPC-anrop till plånboken</translation>
</message>
@@ -2964,8 +2970,12 @@ Adress: %4
<translation>Anslut enbart till noder i nätverket &lt;net&gt; (IPv4, IPv6 eller onion)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Återskapa blockkedjans index från nuvarande blk000??.dat filer</translation>
+ <source>Prune cannot be configured with a negative value.</source>
+ <translation>Beskärning kan inte konfigureras med ett negativt värde.</translation>
+ </message>
+ <message>
+ <source>Prune mode is incompatible with -txindex.</source>
+ <translation>Beskärningsläge är inkompatibel med -txindex.</translation>
</message>
<message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
@@ -3004,6 +3014,10 @@ Adress: %4
<translation>Plånboksinställningar:</translation>
</message>
<message>
+ <source>Warning: This version is obsolete; upgrade required!</source>
+ <translation>Varning: Denna version är föråldrad; uppgradering krävs!</translation>
+ </message>
+ <message>
<source>You need to rebuild the database using -reindex to change -txindex</source>
<translation>Du måste återskapa databasen med -reindex för att ändra -txindex</translation>
</message>
@@ -3032,14 +3046,14 @@ Adress: %4
<translation>Kan inte låsa data-mappen %s. Bitcoin Core körs förmodligen redan.</translation>
</message>
<message>
- <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</source>
- <translation>Antalsbegränsa kontinuerligt fria transaktioner till &lt;n&gt;*1000 bytes per minut (förvalt:%u)</translation>
- </message>
- <message>
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
<translation>Skapa nya filer med systemets förvalda rättigheter, istället för umask 077 (bara effektivt med avaktiverad plånboks funktionalitet)</translation>
</message>
<message>
+ <source>Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)</source>
+ <translation>Upptäck egna IP adresser (standard: 1 vid lyssning ingen -externalip eller -proxy)</translation>
+ </message>
+ <message>
<source>Error: Listening for incoming connections failed (listen returned error %s)</source>
<translation>Fel: Avlyssning av inkommande anslutningar misslyckades (Avlyssningen returnerade felkod %s)</translation>
</message>
@@ -3072,23 +3086,30 @@ Adress: %4
<translation>Maximal storlek på data i databärartransaktioner som vi reläar och bryter (förvalt: %u) </translation>
</message>
<message>
- <source>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</source>
- <translation>Maximum total avgift att använda i en plånbok transaktion, sätts den för lågt kan stora transaktioner avbrytas (förvalt: %s)</translation>
+ <source>Prune configured below the minimum of %d MB. Please use a higher number.</source>
+ <translation>Beskärning konfigurerad under miniminivån %d MB. Var vänlig använd ett högre värde.</translation>
</message>
<message>
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
<translation>Sök efter klientadresser med DNS sökningen, om det finns otillräckligt med adresser (förvalt: 1 om inte -connect)</translation>
</message>
<message>
- <source>Require high priority for relaying free or low-fee transactions (default:%u)</source>
- <translation>Begär hög-prioritet för relätrafik eller lågavgifts transaktioner
-(förvalt: %u)</translation>
+ <source>Randomize credentials for every proxy connection. This enables Tor stream isolation (default: %u)</source>
+ <translation>Slumpa autentiseringen för varje proxyanslutning. Detta möjliggör Tor ström-isolering (förvalt: %u)</translation>
+ </message>
+ <message>
+ <source>Require high priority for relaying free or low-fee transactions (default: %u)</source>
+ <translation>Begär hög prioritet för att vidarebefodra lågavgiftstransaktioner (förvalt: %u)</translation>
</message>
<message>
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
<translation>Sätt den maximala storleken av hög-prioriterade/låg-avgifts transaktioner i byte (förvalt: %d)</translation>
</message>
<message>
+ <source>The transaction amount is too small to send after the fee has been deducted</source>
+ <translation>Transaktionen är för liten att skicka efter det att avgiften har dragits</translation>
+ </message>
+ <message>
<source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit &lt;https://www.openssl.org/&gt; and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source>
<translation>Denna produkten innehåller mjukvara utvecklad av OpenSSL Project för användning i OpenSSL Toolkit &lt;https://www.openssl.org/&gt; och kryptografisk mjukvara utvecklad av Eric Young samt UPnP-mjukvara skriven av Thomas Bernard.</translation>
</message>
@@ -3129,14 +3150,38 @@ till exempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Vitlistade klienter kan inte bli DoS bannade och deras transaktioner reläas alltid, även om dom redan är i mempoolen, användbart för t.ex en gateway </translation>
</message>
<message>
+ <source>You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain</source>
+ <translation>Du måste bygga om databasen genom att använda -reindex för att återgå till obeskärt läge. Detta kommer att ladda ner hela blockkedjan.</translation>
+ </message>
+ <message>
+ <source>(default: %u)</source>
+ <translation>(förvalt: %u)</translation>
+ </message>
+ <message>
<source>Accept public REST requests (default: %u)</source>
<translation>Acceptera publika REST förfrågningar (förvalt: %u)</translation>
</message>
<message>
+ <source>Activating best chain...</source>
+ <translation>Aktiverar bästa kedjan...</translation>
+ </message>
+ <message>
+ <source>Allow self signed root certificates (default: 0)</source>
+ <translation>Tillåt självsignerade root-certifikat (förvalt: 0)</translation>
+ </message>
+ <message>
+ <source>Can't run with a wallet in prune mode.</source>
+ <translation>Kan inte köra med en plånbok i beskärningsläge.</translation>
+ </message>
+ <message>
<source>Cannot resolve -whitebind address: '%s'</source>
<translation>Kan inte matcha -whitebind adress: '%s'</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Välj datakatalog vid uppstart (förvalt: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Anslut genom SOCKS5 proxy</translation>
</message>
@@ -3233,10 +3278,22 @@ till exempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Sänd transaktioner som nollavgiftstransaktioner om möjligt (förvalt: %u)</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Sätt SSL root-certifikat för betalningsbegäran (förvalt: -system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Ändra språk, till exempel "de_DE" (förvalt: systemets språk)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Visa alla avlusningsoptioner (använd: --help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Visa startbilden vid uppstart (förvalt: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Krymp debug.log filen vid klient start (förvalt: 1 vid ingen -debug)</translation>
</message>
@@ -3245,6 +3302,14 @@ till exempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Signering av transaktion misslyckades</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Starta som minimerad</translation>
+ </message>
+ <message>
+ <source>The transaction amount is too small to pay the fee</source>
+ <translation>Transaktionen är för liten för att betala avgiften</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Detta är experimentmjukvara.</translation>
</message>
@@ -3265,6 +3330,10 @@ till exempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Transaktionen är för stor</translation>
</message>
<message>
+ <source>UI Options:</source>
+ <translation>UI Alternativ:</translation>
+ </message>
+ <message>
<source>Unable to bind to %s on this computer (bind returned error %s)</source>
<translation>Det går inte att binda till %s på den här datorn (bind returnerade felmeddelande %s)</translation>
</message>
@@ -3285,10 +3354,6 @@ till exempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Varning</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Varning: denna version är föråldrad, uppgradering krävs!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>Varning: Argument -benchmark stöds inte och ignoreras, använd -debug=bench.</translation>
</message>
@@ -3433,6 +3498,10 @@ till exempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Ha som mest &lt;n&gt; anslutningar till andra klienter (förvalt: %u)</translation>
</message>
<message>
+ <source>Make the wallet broadcast transactions</source>
+ <translation>Gör så att plånboken sänder ut transaktionerna</translation>
+ </message>
+ <message>
<source>Maximum per-connection receive buffer, &lt;n&gt;*1000 bytes (default: %u)</source>
<translation>Maximal mottagningsbuffert per anslutning, &lt;n&gt;*1000 byte (förvalt: %u)</translation>
</message>
diff --git a/src/qt/locale/bitcoin_th_TH.ts b/src/qt/locale/bitcoin_th_TH.ts
index 9535ac6a01..7b5d1ae01c 100644
--- a/src/qt/locale/bitcoin_th_TH.ts
+++ b/src/qt/locale/bitcoin_th_TH.ts
@@ -72,10 +72,6 @@
<translation>เปลี่ยนรหัสผ่าน</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>กรอกรหัสผ่านเก่าและรหัสผ่านใหม่สำหรับกระเป๋าสตางค์</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>ยืนยันการเข้ารหัสกระเป๋าสตางค์</translation>
</message>
@@ -345,8 +341,8 @@
<context>
<name>TransactionTableModel</name>
<message>
- <source>Address</source>
- <translation>ที่อยู่</translation>
+ <source>Label</source>
+ <translation>ชื่อ</translation>
</message>
</context>
<context>
diff --git a/src/qt/locale/bitcoin_tr.ts b/src/qt/locale/bitcoin_tr.ts
index dc5762bc05..ff398c5d2a 100644
--- a/src/qt/locale/bitcoin_tr.ts
+++ b/src/qt/locale/bitcoin_tr.ts
@@ -156,10 +156,6 @@
<translation>Parolayı değiştir</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Cüzdan için eski ve yeni parolaları giriniz.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Cüzdan şifrelenmesini teyit eder</translation>
</message>
@@ -172,6 +168,10 @@
<translation>Cüzdanınızı şifrelemek istediğinizden emin misiniz?</translation>
</message>
<message>
+ <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+ <translation>Şifreleme işlemini tamamlamak için Bitcoin Çekirdeği şimdi kapanacaktır. Cüzdanınızı şifrelemenin, Bitcoinlerinizin bilgisayara bulaşan kötücül bir yazılım tarafından çalınmaya karşı tamamen koruyamayacağını unutmayınız.</translation>
+ </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>ÖNEMLİ: Önceden yapmış olduğunuz cüzdan dosyası yedeklemelerinin yeni oluşturulan şifrelenmiş cüzdan dosyası ile değiştirilmeleri gerekir. Güvenlik nedenleriyle yeni, şifrelenmiş cüzdanı kullanmaya başladığınızda eski şifrelenmemiş cüzdan dosyaları işe yaramaz hale gelecektir.</translation>
</message>
@@ -188,8 +188,8 @@
<translation>Cüzdan için yeni parolayı giriniz.&lt;br/&gt;Lütfen &lt;b&gt;on ya da daha fazla rastgele karakter&lt;/b&gt; veya &lt;b&gt;sekiz ya da daha fazla kelime&lt;/b&gt; içeren bir parola kullanınız.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Şifreleme işlemini tamamlamak için Bitcoin şimdi kapanacaktır. Cüzdanınızı şifrelemenin, Bitcoinlerinizin bilgisayara bulaşan kötücül bir yazılım tarafından çalınmaya karşı tamamen koruyamayacağını unutmayınız.</translation>
+ <source>Enter the old passphrase and new passphrase to the wallet.</source>
+ <translation>Cüzdan için eski parolayı ve yeni parolayı giriniz.</translation>
</message>
<message>
<source>Wallet encryption failed</source>
@@ -311,10 +311,6 @@
<translation>Bir Bitcoin adresine Bitcoin yolla</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Bitcoin seçeneklerinin yapılandırmasını değiştir</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Cüzdanı diğer bir konumda yedekle</translation>
</message>
@@ -403,6 +399,10 @@
<translation>Bitcoin Çekirdeği &amp;hakkında</translation>
</message>
<message>
+ <source>Modify configuration options for Bitcoin Core</source>
+ <translation>Bitcoin Çekirdeği yapılandırma seçeneklerini değiştir</translation>
+ </message>
+ <message>
<source>Show the list of used sending addresses and labels</source>
<translation>Kullanılmış gönderme adresleri ve etiketlerin listesini göster</translation>
</message>
@@ -431,6 +431,10 @@
<translation>Hiçbir blok kaynağı mevcut değil...</translation>
</message>
<message numerus="yes">
+ <source>Processed %n block(s) of transaction history.</source>
+ <translation><numerusform>Muamele tarihçesinden %n blok işlendi.</numerusform><numerusform>Muamele tarihçesinden %n blok işlendi</numerusform></translation>
+ </message>
+ <message numerus="yes">
<source>%n hour(s)</source>
<translation><numerusform>%n saat</numerusform><numerusform>%n saat</numerusform></translation>
</message>
@@ -478,35 +482,49 @@
<source>Up to date</source>
<translation>Güncel</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>Muamele tarihçesinden %n blok işlendi</numerusform><numerusform>Muamele tarihçesinden %n blok işlendi</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>Aralık kapatılıyor...</translation>
</message>
<message>
- <source>Sent transaction</source>
- <translation>Muamele yollandı</translation>
+ <source>Date: %1
+</source>
+ <translation>Tarih: %1
+</translation>
</message>
<message>
- <source>Incoming transaction</source>
- <translation>Gelen muamele</translation>
+ <source>Amount: %1
+</source>
+ <translation>Meblağ: %1
+</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
+ <source>Type: %1
</source>
- <translation>Tarih: %1
-Meblağ: %2
-Tür: %3
-Adres: %4
+ <translation>Tür: %1
</translation>
</message>
<message>
+ <source>Label: %1
+</source>
+ <translation>Etiket: %1
+</translation>
+ </message>
+ <message>
+ <source>Address: %1
+</source>
+ <translation>Adres: %1
+</translation>
+ </message>
+ <message>
+ <source>Sent transaction</source>
+ <translation>Muamele yollandı</translation>
+ </message>
+ <message>
+ <source>Incoming transaction</source>
+ <translation>Gelen muamele</translation>
+ </message>
+ <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Cüzdan &lt;b&gt;şifrelenmiştir&lt;/b&gt; ve şu anda &lt;b&gt;kilidi açıktır&lt;/b&gt;</translation>
</message>
@@ -697,6 +715,18 @@ Adres: %4
<translation>boş</translation>
</message>
<message>
+ <source>This label turns red if the transaction size is greater than 1000 bytes.</source>
+ <translation>Eğer muamele boyutu 1000 bayttan yüksek ise bu etiket kırmızı hale gelir.</translation>
+ </message>
+ <message>
+ <source>This label turns red if the priority is smaller than "medium".</source>
+ <translation>Eğer öncelik "ortadan" düşükse bu etiket kırmızı olur.</translation>
+ </message>
+ <message>
+ <source>This label turns red if any recipient receives an amount smaller than %1.</source>
+ <translation>Eğer herhangi bir alıcı %1'den düşük bir meblağ alırsa bu etiket kırmızı olur.</translation>
+ </message>
+ <message>
<source>Can vary +/- %1 satoshi(s) per input.</source>
<translation>Giriş başına +/- %1 satoshi olarak değişebilir.</translation>
</message>
@@ -709,10 +739,6 @@ Adres: %4
<translation>hayır</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Eğer muamele boyutu 1000 bayttan büyükse bu etkiket kırmızı olur.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Bu, kB başına en az %1 ücret gerektiği anlamnına gelir.</translation>
</message>
@@ -725,14 +751,6 @@ Adres: %4
<translation>Yüksek öncelikli muamelelerin bir bloğa dahil olmaları daha olasıdır.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Eğer öncelik "ortadan" düşükse bu etiket kırmızı olur.</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Eğer herhangi bir alıcı %1'den düşük bir meblağ alırsa bu etiket kırmızı olur.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(boş etiket)</translation>
</message>
@@ -853,30 +871,6 @@ Adres: %4
<source>command-line options</source>
<translation>komut satırı seçenekleri</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Kullanıcı arayüzü seçenekleri</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Lisan belirt, mesela "de_De" (varsayılan: sistem dili)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Küçültülmüş olarak başlat</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Ödeme talebi için SSL kök sertifikalarını belirle (varsayılan: -system-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Başlatıldığında başlangıç ekranını göster (varsayılan: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Başlangıçta veri klasörü seç (varsayılan: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -959,14 +953,6 @@ Adres: %4
<translation>&amp;Esas ayarlar</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Sistemde oturum açıldığında Bitcoin'i otomatik olarak başlat.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>Bitcoin'i sistem oturumuyla &amp;başlat</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>&amp;Veritabanı tamponunun boyutu</translation>
</message>
@@ -991,6 +977,14 @@ Adres: %4
<translation>Vekil sunucusunun IP adresi (mesela IPv4: 127.0.0.1 / IPv6: ::1)</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 Exit in the menu.</source>
+ <translation>Pencere kapatıldığında uygulamadan çıkmak yerine uygulamayı küçültür. Bu seçenek etkinleştirildiğinde, uygulama sadece menüden çıkış seçildiğinde kapanacaktır.</translation>
+ </message>
+ <message>
+ <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin Core.</source>
+ <translation>Kullanıcı arayüzünün dili burada belirtilebilir. Bu ayar Bitcoin Çekirdeği tekrar başlatıldığında etkinleşecektir.</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>Muameleler sekmesinde bağlam menüsü unsurları olarak görünen üçüncü taraf bağlantıları (mesela bir blok tarayıcısı). URL'deki %s, muamele hash değeri ile değiştirilecektir. Birden çok bağlantılar düşey çubuklar | ile ayrılacaktır.</translation>
</message>
@@ -1015,6 +1009,14 @@ Adres: %4
<translation>&amp;Şebeke</translation>
</message>
<message>
+ <source>Automatically start Bitcoin Core after logging in to the system.</source>
+ <translation>Sistemde oturum açıldığında Bitcoin Çekirdeğini otomatik olarak başlat.</translation>
+ </message>
+ <message>
+ <source>&amp;Start Bitcoin Core on system login</source>
+ <translation>Bitcoin Çekirdeğini sistem oturumuyla &amp;başlat</translation>
+ </message>
+ <message>
<source>(0 = auto, &lt;0 = leave that many cores free)</source>
<translation>(0 = otomatik, &lt;0 = bu kadar çekirdeği kullanma)</translation>
</message>
@@ -1079,10 +1081,6 @@ Adres: %4
<translation>İşlem çubuğu yerine sistem çekmecesine &amp;küçült</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>Pencere kapatıldığında uygulamadan çıkmak yerine uygulamayı küçültür. Bu seçenek etkinleştirildiğinde, uygulama sadece menüden çıkış seçildiğinde kapanacaktır.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>Kapatma sırasında k&amp;üçült</translation>
</message>
@@ -1095,10 +1093,6 @@ Adres: %4
<translation>Kullanıcı arayüzü &amp;lisanı:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Kullanıcı arayüzünün dili burada belirtilebilir. Bu ayar Bitcoin tekrar başlatıldığında etkinleşecektir.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>Meblağları göstermek için &amp;birim:</translation>
</message>
@@ -1135,8 +1129,8 @@ Adres: %4
<translation>Değişikliklerin uygulanması için istemcinin yeniden başlatılması lazımdır.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>İstemci kapanacaktır, devam etmek istiyor musunuz?</translation>
+ <source>Client will be shut down. Do you want to proceed?</source>
+ <translation>İstemci kapanacaktır. Devam etmek istiyor musunuz?</translation>
</message>
<message>
<source>This change would require a client restart.</source>
@@ -1245,10 +1239,6 @@ Adres: %4
<translation>Ödeme talebi şebekesi istemci şebekesine denk gelmiyor.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>Ödeme talebinin ömrü doldu.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>Ödeme talebi başlatılmamış.</translation>
</message>
@@ -1281,14 +1271,26 @@ Adres: %4
<translation>Ödeme talebi okunamaz ya da işlenemez! Bunun sebebi geçersiz bir ödeme talebi dosyası olabilir.</translation>
</message>
<message>
+ <source>Payment request expired.</source>
+ <translation>Ödeme talebinin ömrü doldu.</translation>
+ </message>
+ <message>
<source>Unverified payment requests to custom payment scripts are unsupported.</source>
<translation>Özel ödeme betiklerine teyit edilmemiş ödeme talepleri desteklenmez.</translation>
</message>
<message>
+ <source>Invalid payment request.</source>
+ <translation>Geçersiz ödeme talebi.</translation>
+ </message>
+ <message>
<source>Refund from %1</source>
<translation>%1 öğesinden iade</translation>
</message>
<message>
+ <source>Payment request %1 is too large (%2 bytes, allowed %3 bytes).</source>
+ <translation>%1 ödeme talebi çok büyük (%2 bayt, müsaade edilen %3 bayt).</translation>
+ </message>
+ <message>
<source>Payment request DoS protection</source>
<translation>Ödeme talebi DoS koruması</translation>
</message>
@@ -1320,8 +1322,8 @@ Adres: %4
<translation>Kullanıcı Yazılımı</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Adres/Makine ismi</translation>
+ <source>Node/Service</source>
+ <translation>Düğüm/Servis</translation>
</message>
<message>
<source>Ping Time</source>
@@ -1355,14 +1357,6 @@ Adres: %4
<translation>%1 s</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>ŞEBEKE</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>BİLİNMİYOR</translation>
- </message>
- <message>
<source>None</source>
<translation>Boş</translation>
</message>
@@ -1453,6 +1447,10 @@ Adres: %4
<translation>Güncel blok sayısı</translation>
</message>
<message>
+ <source>Open the Bitcoin Core debug log file from the current data directory. This can take a few seconds for large log files.</source>
+ <translation>Güncel veri klasöründen Bitcoin Çekirdeği hata ayıklama kütük dosyasını açar. Büyük kütük dosyaları için bu birkaç saniye alabilir.</translation>
+ </message>
+ <message>
<source>Received</source>
<translation>Alınan</translation>
</message>
@@ -1521,6 +1519,10 @@ Adres: %4
<translation>Ping Zamanı</translation>
</message>
<message>
+ <source>Time Offset</source>
+ <translation>Saat Farkı</translation>
+ </message>
+ <message>
<source>Last block time</source>
<translation>Son blok zamanı</translation>
</message>
@@ -1561,16 +1563,12 @@ Adres: %4
<translation>Hata ayıklama kütük dosyası</translation>
</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>Güncel veri klasöründen Bitcoin hata ayıklama kütük dosyasını açar. Büyük kütük dosyaları için bu birkaç saniye alabilir.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Konsolu temizle</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Bitcoin RPC konsoluna hoş geldiniz.</translation>
+ <source>Welcome to the Bitcoin Core RPC console.</source>
+ <translation>Bitcoin Çekirdeği RPC konsoluna hoş geldiniz.</translation>
</message>
<message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
@@ -1861,14 +1859,6 @@ Adres: %4
<translation>ücret-ayarlarını-küçült</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Küçült</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>Eğer özel ücret 1000 satoşi olarak ayarlandıysa ve muamele sadece 250 baytsa, "kilobayt başı" ücret olarak sadece 250 satoşi öder ve "asgari" 1000 satoşi öder. Bir kilobayttan yüksek muameleler için ikisi de kilobayt başı ödeme yapar.</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>kilobayt başı</translation>
</message>
@@ -1877,6 +1867,10 @@ Adres: %4
<translation>Eğer özel ücret 1000 satoşi olarak ayarlandıysa ve muamele sadece 250 baytsa, "kilobayt başı" ücret olarak sadece 250 satoşi öder ve "toplam asgari" 1000 satoşi öder. Bir kilobayttan yüksek muameleler için ikisi de kilobayt başı ödeme yapar.</translation>
</message>
<message>
+ <source>Hide</source>
+ <translation>Sakla</translation>
+ </message>
+ <message>
<source>total at least</source>
<translation>toplam asgari</translation>
</message>
@@ -1997,10 +1991,6 @@ Adres: %4
<translation>veya</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Alıcı adresi geçerli değildir, lütfen denetleyiniz.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Ödeyeceğiniz tutarın sıfırdan yüksek olması gerekir.</translation>
</message>
@@ -2013,10 +2003,6 @@ Adres: %4
<translation>Toplam, %1 muamele ücreti ilâve edildiğinde bakiyenizi geçmektedir.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Çift adres bulundu, belli bir gönderi sırasında her adrese sadece tek bir gönderide bulunulabilir.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Muamelenin oluşturulması başarısız oldu!</translation>
</message>
@@ -2025,16 +2011,24 @@ Adres: %4
<translation>Muamele reddedildi! Cüzdanınızdaki madenî paraların bazıları zaten harcanmış olduğunda bu meydana gelebilir. Örneğin wallet.dat dosyasının bir kopyasını kullandıysanız ve kopyada para harcandığında ancak burada harcandığı işaretlenmediğinde.</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
- <translation>%1 tutarından yüksek ücret delicesine aşırı yüksek bir ücret olarak kabul edilir.</translation>
+ <source>A fee higher than %1 is considered an absurdly high fee.</source>
+ <translation>%1 tutarından yüksek ücret saçma derecede yüksek bir ücret olarak kabul edilir.</translation>
+ </message>
+ <message>
+ <source>Payment request expired.</source>
+ <translation>Ödeme talebinin ömrü doldu.</translation>
</message>
<message>
<source>Pay only the minimum fee of %1</source>
<translation>Sadece asgari ücret olan %1 tutarını öde</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>Tahmini olarak %1 blok içinde teyide başlanacaktır.</translation>
+ <source>The recipient address is not valid. Please recheck.</source>
+ <translation>Alıcı adresi geçerli değildir. Lütfen denetleyiniz.</translation>
+ </message>
+ <message>
+ <source>Duplicate address found: addresses should only be used once each.</source>
+ <translation>Çift adres bulundu: adresler herbiri için sadece bir kez kullanılmalıdır.</translation>
</message>
<message>
<source>Warning: Invalid Bitcoin address</source>
@@ -2108,12 +2102,24 @@ Adres: %4
<translation>Bu unsuru kaldır</translation>
</message>
<message>
+ <source>The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
+ <translation>Ücret yollanan meblağdan alınacaktır. Alıcı meblağ alanında girdiğinizden daha az bitcoin alacaktır. Eğer birden çok alıcı seçiliyse ücret eşit olarak bölünecektir.</translation>
+ </message>
+ <message>
+ <source>S&amp;ubtract fee from amount</source>
+ <translation>Ücreti meblağdan düş</translation>
+ </message>
+ <message>
<source>Message:</source>
<translation>Mesaj:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Bu, teyit edilmiş bir ödeme talebidir.</translation>
+ <source>This is an unauthenticated payment request.</source>
+ <translation>Bu, kimliği doğrulanmamış bir ödeme talebidir.</translation>
+ </message>
+ <message>
+ <source>This is an authenticated payment request.</source>
+ <translation>Bu, kimliği doğrulanmış bir ödeme talebidir.</translation>
</message>
<message>
<source>Enter a label for this address to add it to the list of used addresses</source>
@@ -2124,10 +2130,6 @@ Adres: %4
<translation>Bitcoin: URI'siyle ilişkili ve bilginiz için muameleyle saklanacak bir mesaj. Not: Bu mesaj Bitcoin şebekesi üzerinden gönderilmeyecektir.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Bu, teyit edilmemiş bir ödeme talebidir.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Şu adrese öde:</translation>
</message>
@@ -2158,8 +2160,8 @@ Adres: %4
<translation>Mesaj &amp;imzala</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Bir adresin sizin olduğunu ispatlamak için adresinizle mesaj imzalayabilirsiniz. Oltalama saldırılarının kimliğinizi imzanızla elde etmeyi deneyebilecekleri için belirsiz hiçbir şey imzalamamaya dikkat ediniz. Sadece ayrıntılı açıklaması olan ve tümüne katıldığınız ifadeleri imzalayınız.</translation>
+ <source>You can sign messages/agreements with your addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
+ <translation>Adreslerinize yollanan bitcoinleri alabileceğiniz ispatlamak için adreslerinizle mesaj/anlaşma imzalayabilirsiniz. Oltalama saldırılarının kimliğinizi imzanızla elde etmeyi deneyebilecekleri için belirsiz ya da rastgele hiçbir şey imzalamamaya dikkat ediniz. Sadece ayrıntılı açıklaması olan ve tümüne katıldığınız ifadeleri imzalayınız.</translation>
</message>
<message>
<source>The Bitcoin address to sign the message with</source>
@@ -2214,8 +2216,8 @@ Adres: %4
<translation>Mesaj &amp;kontrol et</translation>
</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>İmza için kullanılan adresi, mesajı (satır sonları, boşluklar, sekmeler vs. karakterleri tam olarak kopyaladığınızdan emin olunuz) ve imzayı aşağıda giriniz. Bir ortadaki adam saldırısı tarafından kandırılmaya mâni olmak için imzadan, imzalı mesajın içeriğini aşan bir anlam çıkarmamaya dikkat ediniz.</translation>
+ <source>Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction!</source>
+ <translation>Alıcının adresini, mesajı (satır sonları, boşluklar, sekmeler vs. karakterleri tam olarak kopyaladığınızdan emin olunuz) ve imzayı aşağıda giriniz. Bir ortadaki adam saldırısı tarafından kandırılmaya mâni olmak için imzadan, imzalı mesajın içeriğini aşan bir anlam çıkarmamaya dikkat ediniz. Bunun sadece imzalayan tarafın adres ile alım yapabildiğini ispatladığını ve herhangi bir muamelenin gönderi tarafını kanıtlayamayacağını unutmayınız!</translation>
</message>
<message>
<source>The Bitcoin address the message was signed with</source>
@@ -2481,10 +2483,6 @@ Adres: %4
<translation>Tür</translation>
</message>
<message>
- <source>Address</source>
- <translation>Adres</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Olgunlaşmamış (%1 teyit, %2 teyit ardından kullanılabilir olacaktır)</translation>
</message>
@@ -2513,6 +2511,10 @@ Adres: %4
<translation>Çevrim dışı</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Etiket</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Teyit edilmemiş</translation>
</message>
@@ -2569,8 +2571,8 @@ Adres: %4
<translation>Bu muamelede sadece izlenen bir adresin bulunup bulunmadığı.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Muamelenin alıcı adresi.</translation>
+ <source>User-defined intent/purpose of the transaction.</source>
+ <translation>Muamelenin kullanıcı tanımlı niyeti/amacı.</translation>
</message>
<message>
<source>Amount removed from or added to balance.</source>
@@ -2815,6 +2817,10 @@ Adres: %4
<translation>Belirtilen adrese bağlan ve daima ondan dinle. IPv6 için [makine]:port yazımını kullanınız</translation>
</message>
<message>
+ <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default: %u)</source>
+ <translation>Devamlı olarak ücretsiz muameleleri dakikada &lt;n&gt;*1000 bayt olarak sınırla (varsayılan: %u)</translation>
+ </message>
+ <message>
<source>Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup</source>
<translation>Tüm cüzdan muamelelerini sil ve başlangıçta -rescan ile sadece blok zincirinin parçası olanları geri getir</translation>
</message>
@@ -2835,6 +2841,14 @@ Adres: %4
<translation>Bu kipte -genproclimit kaç sayıda bloğun anında oluşturulduğunu kontrol eder.</translation>
</message>
<message>
+ <source>Maximum total fees to use in a single wallet transaction; setting this too low may abort large transactions (default: %s)</source>
+ <translation>Tek cüzdan muamelesinde kullanılacak azami toplam ücret; bunu çok düşük olarak ayarlamak büyük muameleleri iptal edebilir (varsayılan: %s)</translation>
+ </message>
+ <message>
+ <source>Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, &gt;%u = target size in MiB to use for block files)</source>
+ <translation>Depolama gerekliliğini eski blokları silerek düşür. Bu kip cüzdan desteğini devre dışı bırakır ve -txindex ile uyumsuzdur. İkaz: Bu ayarı geri almak tüm blok zincirini yeniden indirmeyi gerektirir. (varsayılan: 0 = blokları silmeyi devre dışı bırak, &gt;%u = MB olarak blok dosyaları için kullanılacak hedef boyut)</translation>
+ </message>
+ <message>
<source>Set the number of script verification threads (%u to %d, 0 = auto, &lt;0 = leave that many cores free, default: %d)</source>
<translation>Betik kontrolü iş parçacıklarının sayısını belirler (%u ilâ %d, 0 = otomatik, &lt;0 = bu sayıda çekirdeği kullanma, varsayılan: %d)</translation>
</message>
@@ -2903,10 +2917,6 @@ Adres: %4
<translation>Hata ayıklama/deneme seçenekleri:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Kendi IP adresini keşfet (varsayılan: dinlenildiğinde ve -externalip yoksa 1)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>Cüzdanı yükleme ve cüzdan RPC çağrılarını devre dışı bırak</translation>
</message>
@@ -2967,8 +2977,12 @@ Adres: %4
<translation>Sadece &lt;net&gt; şebekesindeki düğümlere bağlan (ipv4, ipv6 veya onion)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Blok zinciri indeksini güncel blk000??.dat dosyalarından tekrar inşa et</translation>
+ <source>Prune cannot be configured with a negative value.</source>
+ <translation>Prune negatif bir değerle yapılandırılamaz.</translation>
+ </message>
+ <message>
+ <source>Prune mode is incompatible with -txindex.</source>
+ <translation>Prune kipi -txindex ile uyumsuzdur.</translation>
</message>
<message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
@@ -3007,6 +3021,10 @@ Adres: %4
<translation>Cüzdan seçenekleri:</translation>
</message>
<message>
+ <source>Warning: This version is obsolete; upgrade required!</source>
+ <translation>Uyarı: Bu sürüm çok eskidir; güncellemeniz gerekir!</translation>
+ </message>
+ <message>
<source>You need to rebuild the database using -reindex to change -txindex</source>
<translation>-txindex'i değiştirmek için veritabanını -reindex kullanarak tekrar inşa etmeniz gerekmektedir</translation>
</message>
@@ -3035,14 +3053,14 @@ Adres: %4
<translation>%s veri dizininde kilit elde edilemedi. Bitcoin Çekirdeği muhtemelen hâlihazırda çalışmaktadır.</translation>
</message>
<message>
- <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</source>
- <translation>Devamlı olarak ücretsiz muameleleri dakikada &lt;n&gt;*1000 bayt olarak sınırla (varsayılan: %u)</translation>
- </message>
- <message>
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
<translation>Yeni dosyaları umask 077 yerine varsayılan izinlerle oluştur (sadece devre dışı cüzdan işlevselliği ile etkilidir)</translation>
</message>
<message>
+ <source>Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)</source>
+ <translation>Kendi IP adreslerini keşfet (varsayılan: dinlenildiğinde ve -externalip ya da -proxy yoksa 1)</translation>
+ </message>
+ <message>
<source>Error: Listening for incoming connections failed (listen returned error %s)</source>
<translation>Hata: İçeri gelen bağlantıların dinlenmesi başarısız oldu (dinleme %s hatasını verdi)</translation>
</message>
@@ -3075,14 +3093,18 @@ Adres: %4
<translation>Aktardığımız ve oluşturduğumuz veri taşıyıcı muamelelerindeki azami veri boyutu (varsayılan: %u)</translation>
</message>
<message>
- <source>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</source>
- <translation>Tek cüzdan muamelesinde kullanılacak azami toplam ücret, çok düşük ayarlamak büyük muameleleri iptal edebilir (varsayılan: %s)</translation>
+ <source>Prune configured below the minimum of %d MB. Please use a higher number.</source>
+ <translation>Prune, asgari değer olan %d MB'den düşük olarak ayarlanmıştır. Lütfen daha yüksek bir sayı kullanınız.</translation>
</message>
<message>
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
<translation>Adres sayısı azaldıysa DNS sorgulamasıyla eş adresleri ara (varsayılan: 1 -connect kullanılmadıysa)</translation>
</message>
<message>
+ <source>Require high priority for relaying free or low-fee transactions (default: %u)</source>
+ <translation>Ücretsiz ya da düşük ücretli muamelelerin geçişi için yüksek öncelik iste (varsayılan: %u)</translation>
+ </message>
+ <message>
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
<translation>Yüksek öncelikli/düşük ücretli muamelelerin azami boyutunu bayt olarak ayarla (varsayılan: %d)</translation>
</message>
@@ -3091,6 +3113,10 @@ Adres: %4
<translation>Etkinse bitcoin oluşuturulmasına atanan iş parçacığı sayısını ayarla (-1 = tüm çekirdekler, varsayılan: %d)</translation>
</message>
<message>
+ <source>The transaction amount is too small to send after the fee has been deducted</source>
+ <translation>Bu muamele, ücret düşüldükten sonra göndermek için çok düşük</translation>
+ </message>
+ <message>
<source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit &lt;https://www.openssl.org/&gt; and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source>
<translation>Bu ürün OpenSSL projesi tarafından OpenSSL araç takımı (http://www.openssl.org/) için geliştirilen yazılımlar, Eric Young (eay@cryptsoft.com) tarafından hazırlanmış şifreleme yazılımları ve Thomas Bernard tarafından programlanmış UPnP yazılımı içerir.</translation>
</message>
@@ -3131,14 +3157,38 @@ mesela: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Beyaz listeye alınan eşler DoS yasaklamasına uğramazlar ve muameleleri zaten mempool'da olsalar da daima aktarılır, bu mesela bir geçit için kullanışlıdır</translation>
</message>
<message>
+ <source>You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain</source>
+ <translation>Prune olmayan kipe dönmek için veritabanını -reindex ile tekrar derlemeniz gerekir. Bu, tüm blok zincirini tekrar indirecektir</translation>
+ </message>
+ <message>
+ <source>(default: %u)</source>
+ <translation>(varsayılan: %u)</translation>
+ </message>
+ <message>
<source>Accept public REST requests (default: %u)</source>
<translation>Herkese açık REST taleplerini kabul et (varsayılan: %u)</translation>
</message>
<message>
+ <source>Activating best chain...</source>
+ <translation>En iyi zincir etkinleştiriliyor...</translation>
+ </message>
+ <message>
+ <source>Allow self signed root certificates (default: 0)</source>
+ <translation>Kendinden imzalı kök sertifikalara müsaade et (varsayılan: 0)</translation>
+ </message>
+ <message>
+ <source>Can't run with a wallet in prune mode.</source>
+ <translation>Prune kipindeki bir cüzdan ile çalışamaz.</translation>
+ </message>
+ <message>
<source>Cannot resolve -whitebind address: '%s'</source>
<translation>-whitebind adresi çözümlenemedi: '%s'</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Başlangıçta veri klasörü seç (varsayılan: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>SOCKS5 vekil sunucusu vasıtasıyla bağlan</translation>
</message>
@@ -3155,6 +3205,10 @@ mesela: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>wallet.dat dosyasının yüklenmesinde hata: Cüzdan Bitcoin Çekirdeğinin daha yeni bir sürümünü gerektirmektedir</translation>
</message>
<message>
+ <source>Error reading from database, shutting down.</source>
+ <translation>Veritabanından okumada hata, kapatılıyor.</translation>
+ </message>
+ <message>
<source>Error: Unsupported argument -tor found, use -onion.</source>
<translation>Hata: Deskteklenmeyen -tor argümanı bulundu, -onion kullanınız.</translation>
</message>
@@ -3211,6 +3265,10 @@ mesela: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>RPC sunucu seçenekleri:</translation>
</message>
<message>
+ <source>RPC support for HTTP persistent connections (default: %d)</source>
+ <translation>Kalıcı HTTP bağlantıları için RPC desteği (varsayılan: %d)</translation>
+ </message>
+ <message>
<source>Randomly drop 1 of every &lt;n&gt; network messages</source>
<translation>Her &lt;n&gt; şebeke mesajından rastgele 1 mesajı görmezden gel</translation>
</message>
@@ -3227,10 +3285,22 @@ mesela: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Muameleleri mümkünse ücretsiz olarak gönder (varsayılan: %u)</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Ödeme talebi için SSL kök sertifikalarını belirle (varsayılan: -system-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Lisan belirt, mesela "de_De" (varsayılan: sistem dili)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Tüm hata ayıklama seçeneklerini göster (kullanımı: --help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Başlatıldığında başlangıç ekranını göster (varsayılan: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>İstemci başlatıldığında debug.log dosyasını küçült (varsayılan: -debug bulunmadığında 1)</translation>
</message>
@@ -3239,6 +3309,14 @@ mesela: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Muamelenin imzalanması başarısız oldu</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Küçültülmüş olarak başlat</translation>
+ </message>
+ <message>
+ <source>The transaction amount is too small to pay the fee</source>
+ <translation>Muamele meblağı ücreti ödemek için çok düşük</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Bu, deneysel bir yazılımdır.</translation>
</message>
@@ -3259,6 +3337,10 @@ mesela: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Muamele çok büyük</translation>
</message>
<message>
+ <source>UI Options:</source>
+ <translation>Arayüz Seçenkleri:</translation>
+ </message>
+ <message>
<source>Unable to bind to %s on this computer (bind returned error %s)</source>
<translation>Bu bilgisayarda %s unsuruna bağlanılamadı (bağlanma %s hatasını verdi)</translation>
</message>
@@ -3279,10 +3361,6 @@ mesela: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Uyarı</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Uyarı: Bu sürüm çok eskidir, güncellemeniz gerekir!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>Uyarı: Deskteklenmeyen -benchmark argümanı görmezden gelindi, -debug=bench kullanınız.</translation>
</message>
@@ -3427,6 +3505,10 @@ mesela: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<translation>Eşler ile en çok &lt;n&gt; adet bağlantı kur (varsayılan: %u)</translation>
</message>
<message>
+ <source>Make the wallet broadcast transactions</source>
+ <translation>Cüzdanın muameleleri yayınlamasını sağla</translation>
+ </message>
+ <message>
<source>Maximum per-connection receive buffer, &lt;n&gt;*1000 bytes (default: %u)</source>
<translation>Her bağlantı için azami alım tamponu, &lt;n&gt;*1000 bayt (varsayılan: %u)</translation>
</message>
diff --git a/src/qt/locale/bitcoin_uk.ts b/src/qt/locale/bitcoin_uk.ts
index 809f8e2d24..b2e67e296e 100644
--- a/src/qt/locale/bitcoin_uk.ts
+++ b/src/qt/locale/bitcoin_uk.ts
@@ -156,10 +156,6 @@
<translation>Змінити пароль</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Ввести старий та новий паролі для гаманця.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Підтвердити шифрування гаманця</translation>
</message>
@@ -188,10 +184,6 @@
<translation>Введіть нову кодову фразу для гаманця.&lt;br/&gt;Будь ласка, використовуйте кодові фрази що містять &lt;b&gt; як мінімум десять випадкових символів &lt;/b&gt; або &lt;b&gt; як мінімум вісім слів &lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Біткоін-клієнт буде закрито для завершення процесу шифрування. Пам'ятайте, що шифрування гаманця не може повністю захистити ваші біткоіни від крадіжки, у випадку якщо ваш комп'ютер буде інфіковано шкідливими програмами.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Не вдалося зашифрувати гаманець</translation>
</message>
@@ -311,10 +303,6 @@
<translation>Відправити монети на вказану адресу</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Редагувати параметри</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Резервне копіювання гаманця в інше місце</translation>
</message>
@@ -478,10 +466,6 @@
<source>Up to date</source>
<translation>Синхронізовано</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>Оброблено %n блок історії транзакцій.</numerusform><numerusform>Оброблено %n блоки історії транзакцій.</numerusform><numerusform>Оброблено %n блоків історії транзакцій.</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>Синхронізується...</translation>
@@ -495,18 +479,6 @@
<translation>Отримані транзакції</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Дата: %1
-Кількість: %2
-Тип: %3
-Адреса: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>&lt;b&gt;Зашифрований&lt;/b&gt; гаманець &lt;b&gt;розблоковано&lt;/b&gt;</translation>
</message>
@@ -709,10 +681,6 @@ Address: %4
<translation>ні</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Ця позначка буде червоною, якщо розмір транзакції вищий за 1000 байт.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Це означає, що необхідно внести комісію (щонайменше %1 за КБ).</translation>
</message>
@@ -725,14 +693,6 @@ Address: %4
<translation>Транзакції з вищим пріоритетом мають більше шансів бути включеними до блоку.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Ця позначка буде червоною, якщо пріоритет транзакції нижчий за «середній».</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Ця позначка буде червоною, якщо будь хто з отримувачів отримає менше ніж %1.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(немає назви)</translation>
</message>
@@ -853,30 +813,6 @@ Address: %4
<source>command-line options</source>
<translation>параметри командного рядка</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>Параметри інтерфейсу</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>Встановлення мови, наприклад "de_DE" (типово: системна)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Запускати згорнутим</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Вказати кореневі SSL-сертифікати для запиту платежу (типово: -системні-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>Показувати заставку під час запуску (типово: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Обрати каталог даних під час запуску (типово: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -959,14 +895,6 @@ Address: %4
<translation>&amp;Головні</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Автоматично запускати гаманець при вході до системи.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>&amp;Запускати гаманець при вході в систему</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>Розмір &amp;кешу бази даних</translation>
</message>
@@ -1079,10 +1007,6 @@ Address: %4
<translation>Мінімізувати &amp;у трей</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>Згортати замість закриття. Якщо ця опція включена, програма закриється лише після вибору відповідного пункту в меню.</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>Згортати замість закритт&amp;я</translation>
</message>
@@ -1095,10 +1019,6 @@ Address: %4
<translation>Мов&amp;а інтерфейсу користувача:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Встановлює мову інтерфейсу. Зміни набудуть чинності після перезапуску Bitcoin.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>В&amp;имірювати монети в:</translation>
</message>
@@ -1135,10 +1055,6 @@ Address: %4
<translation>Для застосування змін необхідно перезапустити клієнта.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>Клієнт вимкнеться, продовжувати?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>Ця зміна вступить в силу після перезапуску клієнта</translation>
</message>
@@ -1245,10 +1161,6 @@ Address: %4
<translation>Мережа запиту платежу не є мережею клієнта.</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>Запит платежу прострочено.</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>Запит платежу не ініціалізовано.</translation>
</message>
@@ -1320,10 +1232,6 @@ Address: %4
<translation>Клієнт користувача</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>Адреса/Ім'я хоста</translation>
- </message>
- <message>
<source>Ping Time</source>
<translation>Затримка</translation>
</message>
@@ -1355,14 +1263,6 @@ Address: %4
<translation>%1 с</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>МЕРЕЖА</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>НЕВІДОМО</translation>
- </message>
- <message>
<source>None</source>
<translation>Відсутні</translation>
</message>
@@ -1561,18 +1461,10 @@ Address: %4
<translation>Файл звіту зневадження</translation>
</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>Відкрийте файл журналу налагодження Bitcoin з поточного каталогу даних. Це може зайняти кілька секунд для великих файлів журналів.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Очистити консоль</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Вітаємо у консолі Bitcoin RPC.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Використовуйте стрілки вгору вниз для навігації по історії, і &lt;b&gt;Ctrl-L&lt;/b&gt; для очищення екрана.</translation>
</message>
@@ -1861,14 +1753,6 @@ Address: %4
<translation>згорнути налаштування оплат</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>Мінімізувати</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>Якщо оплата користувача встановлюється в 1000 Satoshi і розмір передачі всього 250 байт, то "за кілобайт" платить тільки 250 Satoshi, в той час як "щонайменше" платить 1000 satoshis. Для передач більших, ніж кілобайт обоє платять за кілобайт.</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>за кілобайт</translation>
</message>
@@ -1997,10 +1881,6 @@ Address: %4
<translation>або</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>Адреса отримувача невірна, будь ласка перепровірте.</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>Кількість монет для відправлення повинна бути більше 0.</translation>
</message>
@@ -2013,10 +1893,6 @@ Address: %4
<translation>Сума перевищить ваш баланс, якщо комісія %1 буде додана до вашої транзакції.</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>Знайдено адресу що дублюється. Відправлення на кожну адресу дозволяється лише один раз на кожну операцію переказу.</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>Не вдалося створити транзакцію!</translation>
</message>
@@ -2025,7 +1901,7 @@ Address: %4
<translation>Транзакцію відхилено! Це може статись, якщо декілька монет з вашого гаманця вже використані, наприклад, якщо ви використовуєте одну копію гаманця (wallet.dat), а монети були використані з іншої копії, але не позначені як використані в цій.</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
+ <source>A fee higher than %1 is considered an absurdly high fee.</source>
<translation>Плата вища, ніж %1 вважається шалено високою.</translation>
</message>
<message>
@@ -2033,10 +1909,6 @@ Address: %4
<translation>Платити тільки мінімальний збір у розмірі %1</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>Розрахунковий початок підтвердження протягом %1 блоку(ів).</translation>
- </message>
- <message>
<source>Warning: Invalid Bitcoin address</source>
<translation>Увага: Неправильна Bitcoin-адреса</translation>
</message>
@@ -2112,10 +1984,6 @@ Address: %4
<translation>Повідомлення:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>Це перевірений запит платежу.</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>Введіть мітку для цієї адреси для додавання її в список використаних адрес</translation>
</message>
@@ -2124,10 +1992,6 @@ Address: %4
<translation>Повідомлення, що було додане до bitcoin:URI та буде збережено разом з транзакцією для довідки. Примітка: Це повідомлення не буде відправлено в мережу Bitcoin.</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>Це неперевірений запит платежу.</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>Отримувач:</translation>
</message>
@@ -2158,10 +2022,6 @@ Address: %4
<translation>&amp;Підписати повідомлення</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Ви можете підписувати повідомлення зі своїми адресами, щоб довести, що ви є їх власником. Остерігайтеся підписувати будь-що незрозуміле, так як за допомогою фішинг-атаки вас можуть спробувати обдурити для отримання вашого підпису під чужими словами. Підписуйте тільки ті повідомлення, з якими ви повністю згодні.</translation>
- </message>
- <message>
<source>The Bitcoin address to sign the message with</source>
<translation>Адреса Bitcoin для підпису цього повідомлення</translation>
</message>
@@ -2214,10 +2074,6 @@ Address: %4
<translation>Перевірити повідомлення</translation>
</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>Введіть нижче адресу підпису, повідомлення (впевніться, що ви точно скопіювали символи завершення рядку, табуляцію, пробіли тощо) та підпис для перевірки повідомлення. Впевніться, що в підпис не було додано зайвих символів: це допоможе уникнути атак типу «людина посередині».</translation>
- </message>
- <message>
<source>The Bitcoin address the message was signed with</source>
<translation>Адреса Bitcoin, якою було підписано це повідомлення</translation>
</message>
@@ -2481,10 +2337,6 @@ Address: %4
<translation>Тип</translation>
</message>
<message>
- <source>Address</source>
- <translation>Адреса</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>Незрілі (%1 підтверджень, будуть доступні після %2)</translation>
</message>
@@ -2513,6 +2365,10 @@ Address: %4
<translation>Поза мережею</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Назва</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>Не підтверджено</translation>
</message>
@@ -2569,10 +2425,6 @@ Address: %4
<translation>Показує, чи було залучено адресу для спостереження в цій транзакції.</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Адреса отримувача транзакції.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Сума, додана чи знята з балансу.</translation>
</message>
@@ -2903,10 +2755,6 @@ Address: %4
<translation>Параметри тестування/налагодження:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>Визначити власну IP-адресу (типово: 1 при прослуховуванні та за відсутності -externalip)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>Не завантажувати гаманець та вимкнути звернення до нього через RPC</translation>
</message>
@@ -2967,10 +2815,6 @@ Address: %4
<translation>Підключити тільки до вузлів в мережі &lt;net&gt; (ipv4, ipv6 або onion)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>Перебудувати індекс ланцюжка блоків з поточних файлів blk000??.dat</translation>
- </message>
- <message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation>Встановити розмір кешу бази даних в мегабайтах (від %d до %d, типово: %d)</translation>
</message>
@@ -3035,10 +2879,6 @@ Address: %4
<translation>Не вдалося встановити блокування на каталог даних %s. Bitcoin Core, ймовірно, вже запущений.</translation>
</message>
<message>
- <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</source>
- <translation>Обмежити швидкість передачі безкоштовних транзакцій до &lt;n&gt;*1000 байтів за хвилину (типово: %u)</translation>
- </message>
- <message>
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
<translation>Створювати нові файли з типовими для системи атрибутами доступу замість маски 077 (діє тільки при вимкненому гаманці)</translation>
</message>
@@ -3071,10 +2911,6 @@ Address: %4
<translation>Максимальний розмір даних в транзакціях носіїв даних, що ми передаємо і добуваємо (за замовчуванням: %u)</translation>
</message>
<message>
- <source>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</source>
- <translation>Максимальна загальна плата для використання в одній транзакції, установка занадто низької може перервати великі транзакції(стандартно: %s)</translation>
- </message>
- <message>
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
<translation>Дізнаватися адреси учасників через DNS при замалій кількості відомих адрес (типово: 1 за відсутності -connect)</translation>
</message>
@@ -3135,6 +2971,10 @@ rpcpassword=%s
<translation>Не вдалося розпізнати адресу для -whitebind: «%s»</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Обрати каталог даних під час запуску (типово: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>Підключитись через SOCKS5-проксі</translation>
</message>
@@ -3223,10 +3063,22 @@ rpcpassword=%s
<translation>Не сплачувати комісію за надсилання транзакцій, якщо це можливо (типово: %u)</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Вказати кореневі SSL-сертифікати для запиту платежу (типово: -системні-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>Встановлення мови, наприклад "de_DE" (типово: системна)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>Показати всі налагоджувальні параметри (використання: --help -help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>Показувати заставку під час запуску (типово: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>Стискати файл debug.log під час старту клієнта (типово: 1 коли відсутній параметр -debug)</translation>
</message>
@@ -3235,6 +3087,10 @@ rpcpassword=%s
<translation>Підписання транзакції не вдалося</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>Запускати згорнутим</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>Це програмне забезпечення є експериментальним.</translation>
</message>
@@ -3275,10 +3131,6 @@ rpcpassword=%s
<translation>Попередження</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>Увага: Поточна версія застаріла, необхідне оновлення!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>Увага: Параметр -benchmark не підтримується та буде проігнорований, використовуйте -debug=bench.</translation>
</message>
diff --git a/src/qt/locale/bitcoin_ur_PK.ts b/src/qt/locale/bitcoin_ur_PK.ts
index edf0190f57..9148626f57 100644
--- a/src/qt/locale/bitcoin_ur_PK.ts
+++ b/src/qt/locale/bitcoin_ur_PK.ts
@@ -237,8 +237,8 @@
<translation>ٹائپ</translation>
</message>
<message>
- <source>Address</source>
- <translation> پتہ</translation>
+ <source>Label</source>
+ <translation>چٹ</translation>
</message>
<message>
<source>Sent to</source>
diff --git a/src/qt/locale/bitcoin_uz@Cyrl.ts b/src/qt/locale/bitcoin_uz@Cyrl.ts
index 54592fe902..b8807afb13 100644
--- a/src/qt/locale/bitcoin_uz@Cyrl.ts
+++ b/src/qt/locale/bitcoin_uz@Cyrl.ts
@@ -152,10 +152,6 @@
<translation>Махфий сузни узгартириш</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>Ҳамёнга эски ва янги паролларингизни киритинг.</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>Ҳамённи кодлашни тасдиқлаш</translation>
</message>
@@ -184,10 +180,6 @@
<translation>Ҳамёнга янги махфий сўз киритинг.&lt;br/&gt;Илтимос, &lt;b&gt;ўнта ёки тасодифий белгили&lt;/b&gt; махфий сўздан фойдаланинг ёки &lt;b&gt;саккизта ёки кўпроқ сўзлар&lt;/b&gt;дан фойдаланинг.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>Bitcoin кодлаш жараёнини тугатиш учун ёпилади. Ёдда сақланг: ҳамёнингизни кодлаш компьютерингизни зарарлаган зарарли дастурлар томонидан bitcoin тангаларингизни ўғирланишидан тўлиқ ҳимоя қила олмайди.</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>Ҳамённи кодлаш амалга ошмади</translation>
</message>
@@ -307,10 +299,6 @@
<translation>Тангаларни Bitcoin манзилига жўнатиш</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>Bitcoin учун мослаш танловларини ўзгартириш</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>Ҳамённи бошқа манзилга заҳиралаш</translation>
</message>
@@ -487,18 +475,6 @@
<translation>Кирувчи операция</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Санаси: %1
-Миқдори: %2
-Тури: %3
-Манзили: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Ҳамён &lt;b&gt;кодланган&lt;/b&gt; ва вақтинча &lt;b&gt;қулфдан чиқарилган&lt;/b&gt;</translation>
</message>
@@ -689,10 +665,6 @@ Address: %4
<translation>йўқ</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>Агар ўтказманинг ҳажми 1000 байтдан ошса, ёрлиқ қизаради.</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Бу дегани солиқ ҳар кб учун камида %1 талаб қилинади.</translation>
</message>
@@ -705,14 +677,6 @@ Address: %4
<translation>Юқори муҳимликка эга бўлган ўтказмалар тезда блокнинг ичига қўшимча олади.</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>Агар муҳимлиги "ўртача"дан паст бўлса, ушбу ёрлиқ қизил бўлиб ёнади.</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>Агар қабул қилувчи %1дан кичик миқдорни қабул қилса, ушбу ёрлиқ қизил бўлиб ёнади.</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(Ёрлик мавжуд эмас)</translation>
</message>
@@ -829,22 +793,6 @@ Address: %4
<source>command-line options</source>
<translation>буйруқлар қатори орқали мослаш</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>UI мосламалари</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>Йиғилганларни бошлаш</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>Тўлов сўровлари учун SSL асос сертификатларини ўрнатиш (стандарт: -system-)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>Ишга тушиш вақтида маълумотлар директориясини танлаш (стандарт: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -919,14 +867,6 @@ Address: %4
<translation>&amp;Асосий</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>Тизимга киргандан сўнг Bitcoin дастури автоматик ишга туширилсин.</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>Тизимга кирганда Bitcoin &amp;ишга туширилсин</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>&amp;Маълумотлар базаси кеши</translation>
</message>
@@ -991,10 +931,6 @@ Address: %4
<translation>Фойдаланувчи интерфейси &amp;тили:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>Фойдаланувчи тили интерфесини шу ерда ўрнатиш мумкин. TУшбу созлама Bitcoin қайта ишга туширилганда кучга киради.</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>Миқдорларни кўрсатиш учун &amp;қисм:</translation>
</message>
@@ -1023,10 +959,6 @@ Address: %4
<translation>Ўзгаришлар амалга ошиши учун мижозни қайта ишга тушириш талаб қилинади.</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>Мижоз ўчирилади. Давом эттиришни хоҳлайсизми?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>Ушбу ўзгариш мижозни қайтадан ишга туширишни талаб қилади.</translation>
</message>
@@ -1123,14 +1055,6 @@ Address: %4
<translation>%1 с</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>ТАРМОҚ</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>НОМАЪЛУМ</translation>
- </message>
- <message>
<source>None</source>
<translation>Йўқ</translation>
</message>
@@ -1293,18 +1217,10 @@ Address: %4
<translation>Тузатиш журнали файли</translation>
</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>Жорий махлумотлар директориясидан Bitcoin тузатиш журнали файлини очинг. Бу катта журнал файллари учун бир неча сонияни олиши мумкин.</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>Терминални тозалаш</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>Bitcoin RPC терминлга хуш келибсиз.</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>Тарихни кўриш учун тепага ва пастга кўрсаткичларидан фойдаланинг, экранни тозалаш учун &lt;b&gt;Ctrl-L&lt;/b&gt; тугмалар бирикмасидан фойдаланинг.</translation>
</message>
@@ -1709,10 +1625,6 @@ Address: %4
<translation>Тури</translation>
</message>
<message>
- <source>Address</source>
- <translation>Манзил</translation>
- </message>
- <message>
<source>Open until %1</source>
<translation>%1 гача очиш</translation>
</message>
@@ -1729,6 +1641,10 @@ Address: %4
<translation>Яратилди, аммо қабул қилинмади</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>Ёрлиқ</translation>
+ </message>
+ <message>
<source>Received with</source>
<translation>Ёрдамида қабул қилиш</translation>
</message>
@@ -1761,10 +1677,6 @@ Address: %4
<translation>Пул ўтказмаси тури</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>Ўтказиладиган жараён манзили.</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>Миқдор ўчирилган ёки балансга қўшилган.</translation>
</message>
@@ -1935,10 +1847,22 @@ Address: %4
<translation>Синов тармоғидан фойдаланинг</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>Ишга тушиш вақтида маълумотлар директориясини танлаш (стандарт: 0)</translation>
+ </message>
+ <message>
<source>Information</source>
<translation>Маълумот</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>Тўлов сўровлари учун SSL асос сертификатларини ўрнатиш (стандарт: -system-)</translation>
+ </message>
+ <message>
+ <source>Start minimized</source>
+ <translation>Йиғилганларни бошлаш</translation>
+ </message>
+ <message>
<source>Username for JSON-RPC connections</source>
<translation>JSON-RPC уланишлари учун фойдаланувчи номи</translation>
</message>
diff --git a/src/qt/locale/bitcoin_vi.ts b/src/qt/locale/bitcoin_vi.ts
index 56962bc5ad..38ebd77b71 100644
--- a/src/qt/locale/bitcoin_vi.ts
+++ b/src/qt/locale/bitcoin_vi.ts
@@ -161,8 +161,8 @@
<context>
<name>TransactionTableModel</name>
<message>
- <source>Address</source>
- <translation>Địa chỉ</translation>
+ <source>Label</source>
+ <translation>Nhãn dữ liệu</translation>
</message>
</context>
<context>
diff --git a/src/qt/locale/bitcoin_vi_VN.ts b/src/qt/locale/bitcoin_vi_VN.ts
index 0c4476b4fc..18d1a252e7 100644
--- a/src/qt/locale/bitcoin_vi_VN.ts
+++ b/src/qt/locale/bitcoin_vi_VN.ts
@@ -258,18 +258,6 @@
<source>Incoming transaction</source>
<translation>Giao dịch đang tới</translation>
</message>
- <message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>Ngày: %1
-Lượng: %2
-Loại: %3
-Địa chỉ: %4
-</translation>
- </message>
</context>
<context>
<name>ClientModel</name>
@@ -470,10 +458,6 @@ Loại: %3
<source>Amount</source>
<translation>Lượng</translation>
</message>
- <message>
- <source>NETWORK</source>
- <translation>NETWORK</translation>
- </message>
</context>
<context>
<name>QRImageWidget</name>
@@ -621,8 +605,8 @@ Loại: %3
<translation>Ngày tháng</translation>
</message>
<message>
- <source>Address</source>
- <translation>Địa chỉ</translation>
+ <source>Label</source>
+ <translation>Nhãn</translation>
</message>
</context>
<context>
diff --git a/src/qt/locale/bitcoin_zh_CN.ts b/src/qt/locale/bitcoin_zh_CN.ts
index ddc8168ad9..4c9f287e95 100644
--- a/src/qt/locale/bitcoin_zh_CN.ts
+++ b/src/qt/locale/bitcoin_zh_CN.ts
@@ -156,10 +156,6 @@
<translation>更改密码</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>请输入该钱包的旧密码与新密码。</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>确认加密钱包</translation>
</message>
@@ -172,6 +168,10 @@
<translation>您确定需要为钱包加密吗?</translation>
</message>
<message>
+ <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+ <translation>比特币核心现在将关闭以完成加密过程。请记住,在您的计算机被恶意软件感染的情况下,加密不能完全保护您的比特币免于被盗。</translation>
+ </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>重要提示:您以前备份的钱包文件应该替换成最新生成的加密钱包文件(重新备份)。从安全性上考虑,您以前备份的未加密的钱包文件,在您使用新的加密钱包后将无效,请重新备份。</translation>
</message>
@@ -188,8 +188,8 @@
<translation>请输入新的钱包密码. &lt;br/&gt;密码须包含&lt;b&gt;10个以上字符&lt;/b&gt;,或&lt;b&gt;8个以上单词&lt;/b&gt;.</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>比特币客户端将关闭软件以完成加密过程。请您谨记:钱包加密并不是万能的,电脑中毒等原因仍可能导致您的比特币意外丢失。</translation>
+ <source>Enter the old passphrase and new passphrase to the wallet.</source>
+ <translation>请输入钱包的旧密码与新密码。</translation>
</message>
<message>
<source>Wallet encryption failed</source>
@@ -311,10 +311,6 @@
<translation>向一个比特币地址发送比特币</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>设置选项</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>备份钱包到其他文件夹</translation>
</message>
@@ -403,6 +399,10 @@
<translation>关于比特币核心(&amp;A)</translation>
</message>
<message>
+ <source>Modify configuration options for Bitcoin Core</source>
+ <translation>修改比特币核心的配置选项</translation>
+ </message>
+ <message>
<source>Show the list of used sending addresses and labels</source>
<translation>显示用过的发送地址和标签的列表</translation>
</message>
@@ -431,6 +431,10 @@
<translation>沒有可用的区块来源...</translation>
</message>
<message numerus="yes">
+ <source>Processed %n block(s) of transaction history.</source>
+ <translation><numerusform>已处理 %n 个交易历史数据块。</numerusform></translation>
+ </message>
+ <message numerus="yes">
<source>%n hour(s)</source>
<translation><numerusform>%n 小时</numerusform></translation>
</message>
@@ -478,35 +482,49 @@
<source>Up to date</source>
<translation>已是最新</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>已处理 %n 个交易历史数据块。</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>更新中...</translation>
</message>
<message>
- <source>Sent transaction</source>
- <translation>发送交易</translation>
+ <source>Date: %1
+</source>
+ <translation>日期: %1
+</translation>
</message>
<message>
- <source>Incoming transaction</source>
- <translation>流入交易</translation>
+ <source>Amount: %1
+</source>
+ <translation>金额: %1
+</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
+ <source>Type: %1
</source>
- <translation>日期: %1
-金额: %2
-类别: %3
-地址: %4
+ <translation>类型: %1
</translation>
</message>
<message>
+ <source>Label: %1
+</source>
+ <translation>标签: %1
+</translation>
+ </message>
+ <message>
+ <source>Address: %1
+</source>
+ <translation>地址: %1
+</translation>
+ </message>
+ <message>
+ <source>Sent transaction</source>
+ <translation>发送交易</translation>
+ </message>
+ <message>
+ <source>Incoming transaction</source>
+ <translation>流入交易</translation>
+ </message>
+ <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>钱包已被&lt;b&gt;加密&lt;/b&gt;,当前为&lt;b&gt;解锁&lt;/b&gt;状态</translation>
</message>
@@ -697,6 +715,18 @@ Address: %4
<translation>无</translation>
</message>
<message>
+ <source>This label turns red if the transaction size is greater than 1000 bytes.</source>
+ <translation>如果交易规模大于 1000 字节,此标签将变为红色。</translation>
+ </message>
+ <message>
+ <source>This label turns red if the priority is smaller than "medium".</source>
+ <translation>如果优先级小于“中等”,此标签将变为红色。</translation>
+ </message>
+ <message>
+ <source>This label turns red if any recipient receives an amount smaller than %1.</source>
+ <translation>如果任何接收人收到的金额小于 %1,此标签将变为红色。</translation>
+ </message>
+ <message>
<source>Can vary +/- %1 satoshi(s) per input.</source>
<translation>可能会有 正负 %1 聪(satoshi)的偏差 </translation>
</message>
@@ -709,10 +739,6 @@ Address: %4
<translation>否</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>如果这笔交易大于1000字节,标签会变成红色。</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>这意味着将对交易收取 %1/千字节 的交易费。</translation>
</message>
@@ -725,14 +751,6 @@ Address: %4
<translation>交易的优先级越高,被矿工收入数据块的速度也越快。</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>如果优先级小于"中位数" ,标签将变成红色。</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>如果收款地址收到小于%1的比特币,标签将变成红色。</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(没有标签)</translation>
</message>
@@ -853,31 +871,6 @@ Address: %4
<source>command-line options</source>
<translation>命令行选项</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>UI选项</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>设置语言, 例如“zh-TW”(默认为系统语言)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>启动时最小化
-</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>设置SSL根证书的付款请求(默认:-系统-)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>启动时显示版权页 (缺省: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>在启动时选择数据目录(默认:0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -960,14 +953,6 @@ Address: %4
<translation>主要(&amp;M)</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>登录系统后自动开启比特币客户端</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>系统启动时运行(&amp;S)</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>数据库缓存大小(&amp;D)</translation>
</message>
@@ -992,6 +977,14 @@ Address: %4
<translation>代理的 IP 地址 (例如 IPv4: 127.0.0.1 / IPv6: ::1)</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 Exit in the menu.</source>
+ <translation>窗口被关闭时最小化而不是退出应用程序。当此选项启用时,应用程序只会在菜单中选择退出时退出。</translation>
+ </message>
+ <message>
+ <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin Core.</source>
+ <translation>可以在这里设置用户界面语言。此设置将在重新启动比特币核心后生效。</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>出现在交易的选项卡的上下文菜单项的第三方网址 (例如:区块链接查询) 。 %s的URL被替换为交易哈希。多个的URL需要竖线 | 分隔。</translation>
</message>
@@ -1016,6 +1009,14 @@ Address: %4
<translation>网络(&amp;N)</translation>
</message>
<message>
+ <source>Automatically start Bitcoin Core after logging in to the system.</source>
+ <translation>登录到系统后自动启动比特币核心。</translation>
+ </message>
+ <message>
+ <source>&amp;Start Bitcoin Core on system login</source>
+ <translation>系统登录时启动比特币核心(&amp;S)</translation>
+ </message>
+ <message>
<source>(0 = auto, &lt;0 = leave that many cores free)</source>
<translation>(0 = 自动, &lt;0 = 离开很多免费的核心)</translation>
</message>
@@ -1080,10 +1081,6 @@ Address: %4
<translation>最小化到托盘(&amp;M)</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>当窗口关闭时程序最小化而不是退出。当使用该选项时,程序只能通过在菜单中选择退出来关闭</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>单击关闭按钮最小化(&amp;I)</translation>
</message>
@@ -1096,10 +1093,6 @@ Address: %4
<translation>用户界面语言(&amp;L):</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>在这里设置用户界面的语言。设置将在客户端重启后生效。</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>比特币金额单位(&amp;U):</translation>
</message>
@@ -1136,8 +1129,8 @@ Address: %4
<translation>更改生效需要重启客户端。</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>客户端即将关闭,确定继续吗?</translation>
+ <source>Client will be shut down. Do you want to proceed?</source>
+ <translation>客户端即将关闭,您想继续吗?</translation>
</message>
<message>
<source>This change would require a client restart.</source>
@@ -1246,10 +1239,6 @@ Address: %4
<translation>付款请求所在的网络与当前客户端所在的网络不匹配。</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>支付请求已超时</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>支付请求未成形。</translation>
</message>
@@ -1282,10 +1271,18 @@ Address: %4
<translation>付款请求文件无法读取!可能是付款请求文件不合格。</translation>
</message>
<message>
+ <source>Payment request expired.</source>
+ <translation>支付请求已过期。</translation>
+ </message>
+ <message>
<source>Unverified payment requests to custom payment scripts are unsupported.</source>
<translation>不支持到自定义付款脚本的未验证付款请求。</translation>
</message>
<message>
+ <source>Invalid payment request.</source>
+ <translation>无效的支付请求。</translation>
+ </message>
+ <message>
<source>Refund from %1</source>
<translation>退款来自 %1</translation>
</message>
@@ -1325,8 +1322,8 @@ Address: %4
<translation>用户代理</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>地址/主机名</translation>
+ <source>Node/Service</source>
+ <translation>节点/服务</translation>
</message>
<message>
<source>Ping Time</source>
@@ -1360,14 +1357,6 @@ Address: %4
<translation>%1 秒</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>网络</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>未知</translation>
- </message>
- <message>
<source>None</source>
<translation>无</translation>
</message>
@@ -1458,6 +1447,10 @@ Address: %4
<translation>当前数据块数量</translation>
</message>
<message>
+ <source>Open the Bitcoin Core debug log file from the current data directory. This can take a few seconds for large log files.</source>
+ <translation>从当前的数据目录打开比特币核心调试日志文件。对于较大的日志文件,这可能需要几秒钟。</translation>
+ </message>
+ <message>
<source>Received</source>
<translation>收到</translation>
</message>
@@ -1526,6 +1519,10 @@ Address: %4
<translation>Ping 时间</translation>
</message>
<message>
+ <source>Time Offset</source>
+ <translation>时间偏移</translation>
+ </message>
+ <message>
<source>Last block time</source>
<translation>上一数据块时间</translation>
</message>
@@ -1566,16 +1563,12 @@ Address: %4
<translation>调试日志文件</translation>
</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>打开当前目录中的调试日志文件。日志文件大的话可能要等上几秒钟。</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>清空控制台</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>欢迎来到 RPC 控制台。</translation>
+ <source>Welcome to the Bitcoin Core RPC console.</source>
+ <translation>欢迎使用 比特币核心 RPC 控制台。</translation>
</message>
<message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
@@ -1866,14 +1859,6 @@ Address: %4
<translation>收起 费用设置 </translation>
</message>
<message>
- <source>Minimize</source>
- <translation>最小化</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>如果自定义交易费设置为 1000聪而交易大小只有250字节,则“每千字节" 模式只支付250聪交易费, 而"最少"模式则支付1000聪。 大于1000字节的交易按每千字节付费。</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>每kb</translation>
</message>
@@ -1882,6 +1867,10 @@ Address: %4
<translation>如果自定义交易费设置为 1000聪而交易大小只有250字节,则“每千字节" 模式只支付250聪交易费, 而"最少"模式则支付1000聪。 大于1000字节的交易按每千字节付费。</translation>
</message>
<message>
+ <source>Hide</source>
+ <translation>隐藏</translation>
+ </message>
+ <message>
<source>total at least</source>
<translation>最小额 </translation>
</message>
@@ -2002,10 +1991,6 @@ Address: %4
<translation>或</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>收款人地址不合法,请检查。</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>支付金额必须大于0。</translation>
</message>
@@ -2018,10 +2003,6 @@ Address: %4
<translation>计入 %1 交易费后的金额超出您的账上余额。</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>发现重复的地址, 每次只能对同一地址发送一次。</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>交易创建失败!</translation>
</message>
@@ -2030,16 +2011,24 @@ Address: %4
<translation>错误:该交易被拒绝!发生这种错误的原因可能是:钱包中的比特币已经被用掉,有可能您复制了wallet.dat钱包文件,然后用复制的钱包文件支付了比特币,但是这个钱包文件中没有记录。</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
- <translation>高于 %1的交易费 将视为 过高的交易费。</translation>
+ <source>A fee higher than %1 is considered an absurdly high fee.</source>
+ <translation>超过 %1 的交易费被认为是荒谬的高费率。</translation>
+ </message>
+ <message>
+ <source>Payment request expired.</source>
+ <translation>支付请求已过期。</translation>
</message>
<message>
<source>Pay only the minimum fee of %1</source>
<translation>只支付最小费用 %1</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>预计%1 个数据块后确认。</translation>
+ <source>The recipient address is not valid. Please recheck.</source>
+ <translation>接收人地址无效。请重新检查。</translation>
+ </message>
+ <message>
+ <source>Duplicate address found: addresses should only be used once each.</source>
+ <translation>发现重复地址:每个地址应该只使用一次。</translation>
</message>
<message>
<source>Warning: Invalid Bitcoin address</source>
@@ -2113,12 +2102,20 @@ Address: %4
<translation>移除此项</translation>
</message>
<message>
+ <source>S&amp;ubtract fee from amount</source>
+ <translation>从金额中减去交易费(&amp;U)</translation>
+ </message>
+ <message>
<source>Message:</source>
<translation>消息:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>这是个有效的支付请求。</translation>
+ <source>This is an unauthenticated payment request.</source>
+ <translation>这是一个未经验证的支付请求。</translation>
+ </message>
+ <message>
+ <source>This is an authenticated payment request.</source>
+ <translation>这是一个已经验证的支付请求。</translation>
</message>
<message>
<source>Enter a label for this address to add it to the list of used addresses</source>
@@ -2129,10 +2126,6 @@ Address: %4
<translation>bitcoin:URI 附带的备注信息,将会和交易一起存储,备查。 注意:该消息不会通过比特币网络传输。</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>这是个非有效的支付请求。</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>支付给:</translation>
</message>
@@ -2163,10 +2156,6 @@ Address: %4
<translation>签名消息(&amp;S)</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>您可以用你的地址对消息进行签名,以证明您是该地址的所有人。注意不要对模棱两可的消息签名,以免遭受钓鱼式攻击。请确保消息内容准确的表达了您的真实意愿。</translation>
- </message>
- <message>
<source>The Bitcoin address to sign the message with</source>
<translation>用来对消息签名的地址 </translation>
</message>
@@ -2219,10 +2208,6 @@ Address: %4
<translation>验证消息(&amp;V)</translation>
</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>在下面输入签名地址,消息(请确保换行符、空格符、制表符等等一个不漏)和签名以验证消息。请确保签名信息准确,提防中间人攻击。</translation>
- </message>
- <message>
<source>The Bitcoin address the message was signed with</source>
<translation>消息使用的签名地址</translation>
</message>
@@ -2486,10 +2471,6 @@ Address: %4
<translation>类别</translation>
</message>
<message>
- <source>Address</source>
- <translation>地址</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>未成熟 (%1 个确认,将在 %2 个后可用)</translation>
</message>
@@ -2518,6 +2499,10 @@ Address: %4
<translation>掉线</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>标签</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>未确认的 </translation>
</message>
@@ -2574,8 +2559,8 @@ Address: %4
<translation>该交易中是否涉及 观察地址(watch-only address)。</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>交易目的地址。</translation>
+ <source>User-defined intent/purpose of the transaction.</source>
+ <translation>用户定义的该交易的意图/目的。</translation>
</message>
<message>
<source>Amount removed from or added to balance.</source>
@@ -2846,6 +2831,14 @@ Address: %4
<translation>在-genproclimit这种模式下控制产出多少区块</translation>
</message>
<message>
+ <source>Maximum total fees to use in a single wallet transaction; setting this too low may abort large transactions (default: %s)</source>
+ <translation>单次交易最多使用交易费;设置太低可能导致大宗交易中止 (默认: %s)</translation>
+ </message>
+ <message>
+ <source>Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, &gt;%u = target size in MiB to use for block files)</source>
+ <translation>通过修剪(删除)旧数据块减少存储需求。此模式将禁用钱包支持,并与 -txindex 不兼容。警告:还原此设置需要重新下载整个数据链。(默认: 0 = 禁用修剪数据块, &gt;%u = 数据块文件目标大小,单位 MiB)</translation>
+ </message>
+ <message>
<source>Set the number of script verification threads (%u to %d, 0 = auto, &lt;0 = leave that many cores free, default: %d)</source>
<translation>设置脚本验证的程序 (%u 到 %d, 0 = 自动, &lt;0 = 保留自由的核心, 默认值: %d)</translation>
</message>
@@ -2914,10 +2907,6 @@ Address: %4
<translation>调试/测试选项:</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>发现自己的IP地址(缺省:不带 -externalip 参数监听时设置为1)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>不要加载钱包和禁用钱包的 RPC 调用</translation>
</message>
@@ -2978,8 +2967,12 @@ Address: %4
<translation>只连接 &lt;net&gt;网络中的节点 (ipv4, ipv6 或 onion) </translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>重新为当前的blk000??.dat文件建立索引</translation>
+ <source>Prune cannot be configured with a negative value.</source>
+ <translation>修剪不能配置一个负数。</translation>
+ </message>
+ <message>
+ <source>Prune mode is incompatible with -txindex.</source>
+ <translation>修剪模式与 -txindex 不兼容。</translation>
</message>
<message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
@@ -3018,6 +3011,10 @@ Address: %4
<translation>钱包选项:</translation>
</message>
<message>
+ <source>Warning: This version is obsolete; upgrade required!</source>
+ <translation>警告:此版本已过时,必须升级!</translation>
+ </message>
+ <message>
<source>You need to rebuild the database using -reindex to change -txindex</source>
<translation>您需要将 -reindex 改为 -txindex 以重建数据库</translation>
</message>
@@ -3046,14 +3043,14 @@ Address: %4
<translation>无法获取数据目录的 %s. 比特币核心钱包可能已经在运行.</translation>
</message>
<message>
- <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</source>
- <translation>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</translation>
- </message>
- <message>
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
<translation>创建系统默认权限的文件,而不是 umask 077 (只在关闭钱包功能时有效) </translation>
</message>
<message>
+ <source>Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)</source>
+ <translation>发现自己的 IP 地址(默认: 监听并且无 -externalip 或 -proxy 时为 1)</translation>
+ </message>
+ <message>
<source>Error: Listening for incoming connections failed (listen returned error %s)</source>
<translation>错误:监听外部连接失败 (监听返回错误 %s) </translation>
</message>
@@ -3086,16 +3083,20 @@ Address: %4
<translation>Maximum size of data in data carrier transactions we relay and mine (default: %u)</translation>
</message>
<message>
- <source>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</source>
- <translation>单笔钱包交易中最多使用的交易费,设置过低可能中止大笔交易 (默认: %s)</translation>
+ <source>Prune configured below the minimum of %d MB. Please use a higher number.</source>
+ <translation>修剪被配置为比最小值 %d MB 更低。请使用更大的数字。</translation>
</message>
<message>
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
<translation>通过DNS查询每个地址,如果短地址 (默认值: 1 除非 -连接)</translation>
</message>
<message>
- <source>Require high priority for relaying free or low-fee transactions (default:%u)</source>
- <translation>对交易免费或低交易费请求高优先级 (默认:%u)</translation>
+ <source>Randomize credentials for every proxy connection. This enables Tor stream isolation (default: %u)</source>
+ <translation>为每个代理连接随机化凭据。这将启用 Tor 流隔离 (默认: %u)</translation>
+ </message>
+ <message>
+ <source>Require high priority for relaying free or low-fee transactions (default: %u)</source>
+ <translation>免费中继和低费率交易需要高优先级 (默认: %u)</translation>
</message>
<message>
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
@@ -3106,6 +3107,10 @@ Address: %4
<translation>设置比特币生成线程数 ( -1=所有核, 默认: %d) </translation>
</message>
<message>
+ <source>The transaction amount is too small to send after the fee has been deducted</source>
+ <translation>在交易费被扣除后发送的交易金额太小</translation>
+ </message>
+ <message>
<source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit &lt;https://www.openssl.org/&gt; and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source>
<translation>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit &lt;https://www.openssl.org/&gt; and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</translation>
</message>
@@ -3146,14 +3151,38 @@ rpcpassword=%s
<translation>白名单节点不能被DoS banned ,且转发所有来自他们的交易(即便这些交易已经存在于mempool中),常用于网关 </translation>
</message>
<message>
+ <source>You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain</source>
+ <translation>您需要使用 -reindex 重新构建数据库以返回未修剪的模式。这将重新下载整个区块链</translation>
+ </message>
+ <message>
+ <source>(default: %u)</source>
+ <translation>(默认: %u)</translation>
+ </message>
+ <message>
<source>Accept public REST requests (default: %u)</source>
<translation>接受公共 REST 请求 (默认: %u)</translation>
</message>
<message>
+ <source>Activating best chain...</source>
+ <translation>正在激活最佳数据链...</translation>
+ </message>
+ <message>
+ <source>Allow self signed root certificates (default: 0)</source>
+ <translation>允许自签名根证书 (默认: 0)</translation>
+ </message>
+ <message>
+ <source>Can't run with a wallet in prune mode.</source>
+ <translation>不能在修剪模式下运行一个钱包。</translation>
+ </message>
+ <message>
<source>Cannot resolve -whitebind address: '%s'</source>
<translation>无法解析 -whitebind 地址: '%s'</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>在启动时选择数据目录(默认:0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>通过 SOCKS5 代理连接</translation>
</message>
@@ -3246,10 +3275,22 @@ rpcpassword=%s
<translation>发送时尽可能 不支付交易费用 (默认: %u) </translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>设置SSL根证书的付款请求(默认:-系统-)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>设置语言, 例如“zh-TW”(默认为系统语言)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>显示所有调试选项 (用法: --帮助 -帮助调试)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>启动时显示版权页 (缺省: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>客户端启动时压缩debug.log文件(缺省:no-debug模式时为1)</translation>
</message>
@@ -3258,6 +3299,15 @@ rpcpassword=%s
<translation>签署交易失败</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>启动时最小化
+</translation>
+ </message>
+ <message>
+ <source>The transaction amount is too small to pay the fee</source>
+ <translation>交易金额太小,不足以支付交易费</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>这是实验性的软件。</translation>
</message>
@@ -3278,6 +3328,10 @@ rpcpassword=%s
<translation>交易太大</translation>
</message>
<message>
+ <source>UI Options:</source>
+ <translation>界面选项:</translation>
+ </message>
+ <message>
<source>Unable to bind to %s on this computer (bind returned error %s)</source>
<translation>无法在此计算机上绑定 %s (绑定返回错误 %s)</translation>
</message>
@@ -3298,10 +3352,6 @@ rpcpassword=%s
<translation>警告</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>警告:该软件版本已过时,请升级!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>警告:不支持的参数 -benchmark 已忽略,请使用 -debug=bench。</translation>
</message>
@@ -3444,6 +3494,10 @@ rpcpassword=%s
<translation>保留最多 &lt;n&gt; 条节点连接 (默认: %u) </translation>
</message>
<message>
+ <source>Make the wallet broadcast transactions</source>
+ <translation>钱包广播事务处理</translation>
+ </message>
+ <message>
<source>Maximum per-connection receive buffer, &lt;n&gt;*1000 bytes (default: %u)</source>
<translation>每个连接的最大接收缓存,&lt;n&gt;*1000 字节 (默认: %u)</translation>
</message>
diff --git a/src/qt/locale/bitcoin_zh_TW.ts b/src/qt/locale/bitcoin_zh_TW.ts
index 606eded663..254b33d5a4 100644
--- a/src/qt/locale/bitcoin_zh_TW.ts
+++ b/src/qt/locale/bitcoin_zh_TW.ts
@@ -156,10 +156,6 @@
<translation>改變密碼</translation>
</message>
<message>
- <source>Enter the old and new passphrase to the wallet.</source>
- <translation>請輸入錢包的舊密碼及新密碼。</translation>
- </message>
- <message>
<source>Confirm wallet encryption</source>
<translation>確認錢包加密</translation>
</message>
@@ -188,10 +184,6 @@
<translation>輸入錢包的新密碼。&lt;br/&gt;密碼請用&lt;b&gt;10 個以上的字元&lt;/b&gt;,或是&lt;b&gt;8 個以上的字詞&lt;/b&gt;。</translation>
</message>
<message>
- <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
- <translation>位元幣軟體現在要關閉,好完成加密程序。請注意,加密錢包不能完全防止入侵你的電腦的惡意程式偷取位元幣。</translation>
- </message>
- <message>
<source>Wallet encryption failed</source>
<translation>錢包加密失敗</translation>
</message>
@@ -311,10 +303,6 @@
<translation>付錢給一個位元幣位址</translation>
</message>
<message>
- <source>Modify configuration options for Bitcoin</source>
- <translation>修改位元幣軟體的設定選項</translation>
- </message>
- <message>
<source>Backup wallet to another location</source>
<translation>把錢包備份到其它地方</translation>
</message>
@@ -478,10 +466,6 @@
<source>Up to date</source>
<translation>最新狀態</translation>
</message>
- <message numerus="yes">
- <source>Processed %n blocks of transaction history.</source>
- <translation><numerusform>已經處理了 %n 個區塊的交易紀錄。</numerusform></translation>
- </message>
<message>
<source>Catching up...</source>
<translation>正在趕進度...</translation>
@@ -495,18 +479,6 @@
<translation>收款交易</translation>
</message>
<message>
- <source>Date: %1
-Amount: %2
-Type: %3
-Address: %4
-</source>
- <translation>日期: %1
-金額: %2
-種類: %3
-位址: %4
-</translation>
- </message>
- <message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>錢包&lt;b&gt;已加密&lt;/b&gt;並且&lt;b&gt;解鎖中&lt;/b&gt;</translation>
</message>
@@ -709,10 +681,6 @@ Address: %4
<translation>否</translation>
</message>
<message>
- <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
- <translation>當交易大小大於 1000 位元組時,文字會變紅色。</translation>
- </message>
- <message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>表示每一千位元組(kB)需要至少 %1 的手續費。</translation>
</message>
@@ -725,14 +693,6 @@ Address: %4
<translation>優先度較高的交易比較有可能被接受放進區塊中。</translation>
</message>
<message>
- <source>This label turns red, if the priority is smaller than "medium".</source>
- <translation>當優先度低於「中等」時,文字會變紅色。</translation>
- </message>
- <message>
- <source>This label turns red, if any recipient receives an amount smaller than %1.</source>
- <translation>當任何一個收款金額小於 %1 時,文字會變紅色。</translation>
- </message>
- <message>
<source>(no label)</source>
<translation>(無標記)</translation>
</message>
@@ -853,30 +813,6 @@ Address: %4
<source>command-line options</source>
<translation>命令列選項</translation>
</message>
- <message>
- <source>UI options</source>
- <translation>使用界面選項</translation>
- </message>
- <message>
- <source>Set language, for example "de_DE" (default: system locale)</source>
- <translation>設定語言,比如說 de_DE (預設值: 系統語系)</translation>
- </message>
- <message>
- <source>Start minimized</source>
- <translation>啓動時縮到最小</translation>
- </message>
- <message>
- <source>Set SSL root certificates for payment request (default: -system-)</source>
- <translation>設定付款請求時所使用的 SSL 根憑證 (預設值: 系統憑證庫)</translation>
- </message>
- <message>
- <source>Show splash screen on startup (default: 1)</source>
- <translation>顯示啓動畫面(預設值: 1)</translation>
- </message>
- <message>
- <source>Choose data directory on startup (default: 0)</source>
- <translation>啓動時選擇資料目錄(預設值: 0)</translation>
- </message>
</context>
<context>
<name>Intro</name>
@@ -959,14 +895,6 @@ Address: %4
<translation>主要</translation>
</message>
<message>
- <source>Automatically start Bitcoin after logging in to the system.</source>
- <translation>在登入系統後自動啓動位元幣軟體。</translation>
- </message>
- <message>
- <source>&amp;Start Bitcoin on system login</source>
- <translation>系統登入時啟動位元幣</translation>
- </message>
- <message>
<source>Size of &amp;database cache</source>
<translation>資料庫快取大小</translation>
</message>
@@ -1079,10 +1007,6 @@ Address: %4
<translation>縮到最小到通知區域而不是工作列</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>當視窗關閉時,把應用程式縮到最小,而不是結束。當勾選這個選項時,只能夠用選單中的結束來關掉應用程式。</translation>
- </message>
- <message>
<source>M&amp;inimize on close</source>
<translation>關閉時縮到最小</translation>
</message>
@@ -1095,10 +1019,6 @@ Address: %4
<translation>使用界面語言:</translation>
</message>
<message>
- <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin.</source>
- <translation>可以在這裡設定使用者介面的語言。這個設定在重啓位元幣軟體後才會生效。</translation>
- </message>
- <message>
<source>&amp;Unit to show amounts in:</source>
<translation>金額顯示單位:</translation>
</message>
@@ -1135,10 +1055,6 @@ Address: %4
<translation>需要重新啟動客戶端軟體來讓改變生效。</translation>
</message>
<message>
- <source>Client will be shutdown, do you want to proceed?</source>
- <translation>客戶端軟體就要關掉了,繼續做下去嗎?</translation>
- </message>
- <message>
<source>This change would require a client restart.</source>
<translation>這項改變需要重新啟動客戶端軟體。</translation>
</message>
@@ -1245,10 +1161,6 @@ Address: %4
<translation>付款要求的網路類型跟客戶端不符。</translation>
</message>
<message>
- <source>Payment request has expired.</source>
- <translation>付款的要求已經過期了。</translation>
- </message>
- <message>
<source>Payment request is not initialized.</source>
<translation>付款的要求沒有完成初始化。</translation>
</message>
@@ -1324,10 +1236,6 @@ Address: %4
<translation>使用者代理</translation>
</message>
<message>
- <source>Address/Hostname</source>
- <translation>位址/主機名稱</translation>
- </message>
- <message>
<source>Ping Time</source>
<translation>Ping 時間</translation>
</message>
@@ -1359,14 +1267,6 @@ Address: %4
<translation>%1 秒</translation>
</message>
<message>
- <source>NETWORK</source>
- <translation>網路</translation>
- </message>
- <message>
- <source>UNKNOWN</source>
- <translation>不明</translation>
- </message>
- <message>
<source>None</source>
<translation>無</translation>
</message>
@@ -1565,18 +1465,10 @@ Address: %4
<translation>除錯紀錄檔</translation>
</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>從目前的資料目錄下開啓位元幣軟體的除錯紀錄檔。當紀錄檔很大時,可能會花好幾秒的時間。</translation>
- </message>
- <message>
<source>Clear console</source>
<translation>清主控台</translation>
</message>
<message>
- <source>Welcome to the Bitcoin RPC console.</source>
- <translation>歡迎使用位元幣 RPC 主控台。</translation>
- </message>
- <message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>請用上下游標鍵來瀏覽先前指令的紀錄,並用 &lt;b&gt;Ctrl-L&lt;/b&gt; 來清畫面。</translation>
</message>
@@ -1865,14 +1757,6 @@ Address: %4
<translation>展開手續費設定</translation>
</message>
<message>
- <source>Minimize</source>
- <translation>縮小</translation>
- </message>
- <message>
- <source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
- <translation>如果自訂手續費設定為 1000 satoshi, 而交易資料大小只有 250 個位元組的話,那麽選擇「每千位元組」就只會付 250 satoshi 的手續費,換做選「總共至少」就會付 1000 satoshi. 但是如果交易資料大小超過一千個位元組,那麽兩者都是每千位元組的費用。</translation>
- </message>
- <message>
<source>per kilobyte</source>
<translation>每千位元組</translation>
</message>
@@ -2001,10 +1885,6 @@ Address: %4
<translation>或</translation>
</message>
<message>
- <source>The recipient address is not valid, please recheck.</source>
- <translation>收款位址無效,請再檢查看看。</translation>
- </message>
- <message>
<source>The amount to pay must be larger than 0.</source>
<translation>付款金額必須大於零。</translation>
</message>
@@ -2017,10 +1897,6 @@ Address: %4
<translation>包含 %1 的交易手續費後,總金額超過你的餘額了。</translation>
</message>
<message>
- <source>Duplicate address found, can only send to each address once per send operation.</source>
- <translation>發現有重複的位址。每個付款動作中,只能付給個別的位址一次。</translation>
- </message>
- <message>
<source>Transaction creation failed!</source>
<translation>製造交易失敗了!</translation>
</message>
@@ -2029,18 +1905,10 @@ Address: %4
<translation>交易被拒絕了!有時候會發生這種錯誤,是因為你錢包中的一些錢已經被花掉了。比如說你複製了錢包檔 wallet.dat, 然後用複製的錢包花掉了錢,你現在所用的原來的錢包中,卻沒有那筆錢已經花掉的紀錄。</translation>
</message>
<message>
- <source>A fee higher than %1 is considered an insanely high fee.</source>
- <translation>高於 %1 的手續費會被認為是不正常。</translation>
- </message>
- <message>
<source>Pay only the minimum fee of %1</source>
<translation>只付最低手續費 %1</translation>
</message>
<message>
- <source>Estimated to begin confirmation within %1 block(s).</source>
- <translation>預計可在 %1 個區塊內開始確認。</translation>
- </message>
- <message>
<source>Warning: Invalid Bitcoin address</source>
<translation>警告: 位元幣位址無效</translation>
</message>
@@ -2116,10 +1984,6 @@ Address: %4
<translation>訊息:</translation>
</message>
<message>
- <source>This is a verified payment request.</source>
- <translation>這是個已驗證的付款要求。</translation>
- </message>
- <message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation>請輸入這個位址的標記,來把它加進去已使用過位址的清單。</translation>
</message>
@@ -2128,10 +1992,6 @@ Address: %4
<translation>附加在位元幣付款協議 URI 中的訊息,會和交易內容一起存起來,給你自己做參考。注意: 這個訊息不會送到位元幣網路上。</translation>
</message>
<message>
- <source>This is an unverified payment request.</source>
- <translation>這是個沒驗證過的付款要求。</translation>
- </message>
- <message>
<source>Pay To:</source>
<translation>付給:</translation>
</message>
@@ -2162,10 +2022,6 @@ Address: %4
<translation>簽署訊息</translation>
</message>
<message>
- <source>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>你可以用自己的位址簽署訊息,來證明你對位址的所有權。但是請小心,不要簽署語意含糊不清的內容,因為釣魚式詐騙可能會用騙你簽署的手法來冒充是你。只有在語句中的細節你都同意時才簽署。</translation>
- </message>
- <message>
<source>The Bitcoin address to sign the message with</source>
<translation>用來簽署訊息的位元幣位址</translation>
</message>
@@ -2218,10 +2074,6 @@ Address: %4
<translation>驗證訊息</translation>
</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>請在下面輸入簽署的位址,訊息(請確定完整複製了所包含的換行,空格,跳位符號等等),以及簽章,來驗證這個訊息。請小心,除了訊息內容以外,不要對簽章本身過度解讀,以避免被用「中間人攻擊法」詐騙。</translation>
- </message>
- <message>
<source>The Bitcoin address the message was signed with</source>
<translation>簽署這個訊息的位元幣位址</translation>
</message>
@@ -2485,10 +2337,6 @@ Address: %4
<translation>種類</translation>
</message>
<message>
- <source>Address</source>
- <translation>位址</translation>
- </message>
- <message>
<source>Immature (%1 confirmations, will be available after %2)</source>
<translation>未成熟(確認 %1 次,會在 %2 次後可用)</translation>
</message>
@@ -2517,6 +2365,10 @@ Address: %4
<translation>離線中</translation>
</message>
<message>
+ <source>Label</source>
+ <translation>標記</translation>
+ </message>
+ <message>
<source>Unconfirmed</source>
<translation>未確認</translation>
</message>
@@ -2573,10 +2425,6 @@ Address: %4
<translation>不論如何有一個只能觀看的地只有參與這次的交易</translation>
</message>
<message>
- <source>Destination address of transaction.</source>
- <translation>交易的目的地位址。</translation>
- </message>
- <message>
<source>Amount removed from or added to balance.</source>
<translation>要減掉或加進餘額的金額。</translation>
</message>
@@ -2908,10 +2756,6 @@ Address: %4
<translation>除錯與測試選項</translation>
</message>
<message>
- <source>Discover own IP address (default: 1 when listening and no -externalip)</source>
- <translation>找出自己的網際網路位址(預設值: 當有聽候連線且沒有 -externalip 時為 1)</translation>
- </message>
- <message>
<source>Do not load the wallet and disable wallet RPC calls</source>
<translation>不要載入錢包,並且拿掉錢包相關的 RPC 功能請求。</translation>
</message>
@@ -2972,10 +2816,6 @@ Address: %4
<translation>只有連接到網絡節點 &lt;net&gt; (IPv4,IPv6或onion)</translation>
</message>
<message>
- <source>Rebuild block chain index from current blk000??.dat files</source>
- <translation>從目前的區塊檔 blk000??.dat 重建區塊鏈的索引</translation>
- </message>
- <message>
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
<translation>設定資料庫快取大小是多少百萬位元組(MB,範圍: %d 到 %d,預設值: %d)</translation>
</message>
@@ -3036,10 +2876,6 @@ Address: %4
<translation>沒辦法鎖定資料目錄 %s。位元幣核心可能已經在執行了。</translation>
</message>
<message>
- <source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</source>
- <translation>對沒付手續費的交易持續限制每分鐘內最多只能有 &lt;n&gt;*1000 個位元組(預設值: %u)</translation>
- </message>
- <message>
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
<translation>用系統預設權限來造出新的檔案,而不是用使用者權限罩遮(umask)值 077 (只有在關掉錢包功能時才有作用)。</translation>
</message>
@@ -3076,18 +2912,10 @@ Address: %4
<translation>轉發和開採時,對只帶資料的交易的大小上限(預設值: %u)</translation>
</message>
<message>
- <source>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</source>
- <translation>一次錢包交易允許付出最高的總手續費,設定太低的話,可能會無法進行資料量大的交易(預設值: %s)</translation>
- </message>
- <message>
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
<translation>是否允許在節點位址數目不足時,使用域名查詢來搜尋節點 (預設值: 當沒用 -connect 時為 1)</translation>
</message>
<message>
- <source>Require high priority for relaying free or low-fee transactions (default:%u)</source>
- <translation>沒有手續費或手續費比較低的交易是否必須要是高優先權才會轉發(預設值: %u)</translation>
- </message>
- <message>
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
<translation>設定高優先度或低手續費的交易資料大小上限成多少位元組(預設值: %d)</translation>
</message>
@@ -3144,6 +2972,10 @@ rpcpassword=%s
<translation>沒辦法解析 -whitebind 指定的位址: '%s'</translation>
</message>
<message>
+ <source>Choose data directory on startup (default: 0)</source>
+ <translation>啓動時選擇資料目錄(預設值: 0)</translation>
+ </message>
+ <message>
<source>Connect through SOCKS5 proxy</source>
<translation>透過 SOCKS5 代理伺服器連線</translation>
</message>
@@ -3240,10 +3072,22 @@ rpcpassword=%s
<translation>盡可能送出不用付手續費的交易(預設值: %u)</translation>
</message>
<message>
+ <source>Set SSL root certificates for payment request (default: -system-)</source>
+ <translation>設定付款請求時所使用的 SSL 根憑證 (預設值: 系統憑證庫)</translation>
+ </message>
+ <message>
+ <source>Set language, for example "de_DE" (default: system locale)</source>
+ <translation>設定語言,比如說 de_DE (預設值: 系統語系)</translation>
+ </message>
+ <message>
<source>Show all debugging options (usage: --help -help-debug)</source>
<translation>顯示所有的除錯選項 (用法: --help --help-debug)</translation>
</message>
<message>
+ <source>Show splash screen on startup (default: 1)</source>
+ <translation>顯示啓動畫面(預設值: 1)</translation>
+ </message>
+ <message>
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
<translation>客戶端軟體啓動時把 debug.log 檔縮小(預設值: 當沒有 -debug 時為 1)</translation>
</message>
@@ -3252,6 +3096,10 @@ rpcpassword=%s
<translation>簽署交易失敗</translation>
</message>
<message>
+ <source>Start minimized</source>
+ <translation>啓動時縮到最小</translation>
+ </message>
+ <message>
<source>This is experimental software.</source>
<translation>這套軟體屬於實驗性質。</translation>
</message>
@@ -3292,10 +3140,6 @@ rpcpassword=%s
<translation>警告</translation>
</message>
<message>
- <source>Warning: This version is obsolete, upgrade required!</source>
- <translation>警告: 這個版本已經被淘汰了,必須要升級!</translation>
- </message>
- <message>
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
<translation>警告: 忽略了不再支援的 -benchmark 參數,請改用 -debug=bench.</translation>
</message>
diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp
index a9e4b339e4..efb2bf4158 100644
--- a/src/qt/optionsdialog.cpp
+++ b/src/qt/optionsdialog.cpp
@@ -208,7 +208,7 @@ void OptionsDialog::on_resetButton_clicked()
{
// confirmation dialog
QMessageBox::StandardButton btnRetVal = QMessageBox::question(this, tr("Confirm options reset"),
- tr("Client restart required to activate changes.") + "<br><br>" + tr("Client will be shutdown, do you want to proceed?"),
+ tr("Client restart required to activate changes.") + "<br><br>" + tr("Client will be shut down. Do you want to proceed?"),
QMessageBox::Yes | QMessageBox::Cancel, QMessageBox::Cancel);
if(btnRetVal == QMessageBox::Cancel)
diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp
index 4fa15db9c6..2e33b9adf8 100644
--- a/src/qt/overviewpage.cpp
+++ b/src/qt/overviewpage.cpp
@@ -18,8 +18,8 @@
#include <QAbstractItemDelegate>
#include <QPainter>
-#define DECORATION_SIZE 64
-#define NUM_ITEMS 3
+#define DECORATION_SIZE 54
+#define NUM_ITEMS 5
class TxViewDelegate : public QAbstractItemDelegate
{
@@ -121,6 +121,12 @@ OverviewPage::OverviewPage(QWidget *parent) :
{
ui->setupUi(this);
+ // use a SingleColorIcon for the "out of sync warning" icon
+ QIcon icon = SingleColorIcon(":/icons/warning");
+ icon.addPixmap(icon.pixmap(QSize(64,64), QIcon::Normal), QIcon::Disabled); // also set the disabled icon because we are using a disabled QPushButton to work around missing HiDPI support of QLabel (https://bugreports.qt.io/browse/QTBUG-42503)
+ ui->labelTransactionsStatus->setIcon(icon);
+ ui->labelWalletStatus->setIcon(icon);
+
// Recent transactions
ui->listTransactions->setItemDelegate(txdelegate);
ui->listTransactions->setIconSize(QSize(DECORATION_SIZE, DECORATION_SIZE));
@@ -129,10 +135,6 @@ OverviewPage::OverviewPage(QWidget *parent) :
connect(ui->listTransactions, SIGNAL(clicked(QModelIndex)), this, SLOT(handleTransactionClicked(QModelIndex)));
- // init "out of sync" warning labels
- ui->labelWalletStatus->setText("(" + tr("out of sync") + ")");
- ui->labelTransactionsStatus->setText("(" + tr("out of sync") + ")");
-
// start with displaying the "out of sync" warnings
showOutOfSyncWarning(true);
}
diff --git a/src/qt/res/icons/warning.png b/src/qt/res/icons/warning.png
new file mode 100644
index 0000000000..723a30a658
--- /dev/null
+++ b/src/qt/res/icons/warning.png
Binary files differ
diff --git a/src/qt/scicon.cpp b/src/qt/scicon.cpp
index a0ffcd82a9..c493b5569e 100644
--- a/src/qt/scicon.cpp
+++ b/src/qt/scicon.cpp
@@ -11,7 +11,9 @@
#include <QPalette>
#include <QPixmap>
-static void MakeSingleColorImage(QImage& img, const QColor& colorbase)
+namespace {
+
+void MakeSingleColorImage(QImage& img, const QColor& colorbase)
{
img = img.convertToFormat(QImage::Format_ARGB32);
for (int x = img.width(); x--; )
@@ -24,15 +26,22 @@ static void MakeSingleColorImage(QImage& img, const QColor& colorbase)
}
}
+}
+
QImage SingleColorImage(const QString& filename, const QColor& colorbase)
{
QImage img(filename);
+#if !defined(WIN32) && !defined(MAC_OSX)
MakeSingleColorImage(img, colorbase);
+#endif
return img;
}
QIcon SingleColorIcon(const QIcon& ico, const QColor& colorbase)
{
+#if defined(WIN32) || defined(MAC_OSX)
+ return ico;
+#else
QIcon new_ico;
QSize sz;
Q_FOREACH(sz, ico.availableSizes())
@@ -42,6 +51,7 @@ QIcon SingleColorIcon(const QIcon& ico, const QColor& colorbase)
new_ico.addPixmap(QPixmap::fromImage(img));
}
return new_ico;
+#endif
}
QIcon SingleColorIcon(const QString& filename, const QColor& colorbase)
@@ -51,6 +61,9 @@ QIcon SingleColorIcon(const QString& filename, const QColor& colorbase)
QColor SingleColor()
{
+#if defined(WIN32) || defined(MAC_OSX)
+ return QColor(0,0,0);
+#else
const QColor colorHighlightBg(QApplication::palette().color(QPalette::Highlight));
const QColor colorHighlightFg(QApplication::palette().color(QPalette::HighlightedText));
const QColor colorText(QApplication::palette().color(QPalette::WindowText));
@@ -61,6 +74,7 @@ QColor SingleColor()
else
colorbase = colorHighlightFg;
return colorbase;
+#endif
}
QIcon SingleColorIcon(const QString& filename)
diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp
index 0360f160d8..3d57711568 100644
--- a/src/qt/sendcoinsdialog.cpp
+++ b/src/qt/sendcoinsdialog.cpp
@@ -505,7 +505,7 @@ void SendCoinsDialog::processSendCoinsReturn(const WalletModel::SendCoinsReturn
switch(sendCoinsReturn.status)
{
case WalletModel::InvalidAddress:
- msgParams.first = tr("The recipient address is not valid, please recheck.");
+ msgParams.first = tr("The recipient address is not valid. Please recheck.");
break;
case WalletModel::InvalidAmount:
msgParams.first = tr("The amount to pay must be larger than 0.");
@@ -517,7 +517,7 @@ void SendCoinsDialog::processSendCoinsReturn(const WalletModel::SendCoinsReturn
msgParams.first = tr("The total exceeds your balance when the %1 transaction fee is included.").arg(msgArg);
break;
case WalletModel::DuplicateAddress:
- msgParams.first = tr("Duplicate address found, can only send to each address once per send operation.");
+ msgParams.first = tr("Duplicate address found: addresses should only be used once each.");
break;
case WalletModel::TransactionCreationFailed:
msgParams.first = tr("Transaction creation failed!");
@@ -590,12 +590,12 @@ void SendCoinsDialog::updateGlobalFeeVariables()
{
if (ui->radioSmartFee->isChecked())
{
- nTxConfirmTarget = (int)25 - (int)std::max(0, std::min(24, ui->sliderSmartFee->value()));
+ nTxConfirmTarget = defaultConfirmTarget - ui->sliderSmartFee->value();
payTxFee = CFeeRate(0);
}
else
{
- nTxConfirmTarget = 25;
+ nTxConfirmTarget = defaultConfirmTarget;
payTxFee = CFeeRate(ui->customFee->value());
fPayAtLeastCustomFee = ui->radioCustomAtLeast->isChecked();
}
@@ -629,7 +629,7 @@ void SendCoinsDialog::updateSmartFeeLabel()
if(!model || !model->getOptionsModel())
return;
- int nBlocksToConfirm = (int)25 - (int)std::max(0, std::min(24, ui->sliderSmartFee->value()));
+ int nBlocksToConfirm = defaultConfirmTarget - ui->sliderSmartFee->value();
CFeeRate feeRate = mempool.estimateFee(nBlocksToConfirm);
if (feeRate <= CFeeRate(0)) // not enough data => minfee
{
diff --git a/src/qt/sendcoinsdialog.h b/src/qt/sendcoinsdialog.h
index 14adb02573..fc513bf2ba 100644
--- a/src/qt/sendcoinsdialog.h
+++ b/src/qt/sendcoinsdialog.h
@@ -23,6 +23,8 @@ QT_BEGIN_NAMESPACE
class QUrl;
QT_END_NAMESPACE
+const int defaultConfirmTarget = 25;
+
/** Dialog for sending bitcoins */
class SendCoinsDialog : public QDialog
{
diff --git a/src/qt/sendcoinsentry.cpp b/src/qt/sendcoinsentry.cpp
index ea35ed1d53..6eec33ffd4 100644
--- a/src/qt/sendcoinsentry.cpp
+++ b/src/qt/sendcoinsentry.cpp
@@ -216,7 +216,7 @@ void SendCoinsEntry::setValue(const SendCoinsRecipient &value)
ui->addAsLabel->clear();
ui->payTo->setText(recipient.address); // this may set a label from addressbook
- if (!recipient.label.isEmpty()) // if a label had been set from the addressbook, dont overwrite with an empty label
+ if (!recipient.label.isEmpty()) // if a label had been set from the addressbook, don't overwrite with an empty label
ui->addAsLabel->setText(recipient.label);
ui->payAmount->setValue(recipient.amount);
}
diff --git a/src/qt/transactiondesc.cpp b/src/qt/transactiondesc.cpp
index 7214249435..4fffd03adf 100644
--- a/src/qt/transactiondesc.cpp
+++ b/src/qt/transactiondesc.cpp
@@ -14,7 +14,6 @@
#include "main.h"
#include "script/script.h"
#include "timedata.h"
-#include "ui_interface.h"
#include "util.h"
#include "wallet/db.h"
#include "wallet/wallet.h"
diff --git a/src/rest.cpp b/src/rest.cpp
index adc2d56284..1b7954bbf6 100644
--- a/src/rest.cpp
+++ b/src/rest.cpp
@@ -9,14 +9,18 @@
#include "rpcserver.h"
#include "streams.h"
#include "sync.h"
+#include "txmempool.h"
#include "utilstrencodings.h"
#include "version.h"
#include <boost/algorithm/string.hpp>
+#include <boost/dynamic_bitset.hpp>
using namespace std;
using namespace json_spirit;
+static const int MAX_GETUTXOS_OUTPOINTS = 100; //allow a max of 100 outpoints to be queried at once
+
enum RetFormat {
RF_UNDEF,
RF_BINARY,
@@ -34,6 +38,22 @@ static const struct {
{RF_JSON, "json"},
};
+struct CCoin {
+ uint32_t nTxVer; // Don't call this nVersion, that name has a special meaning inside IMPLEMENT_SERIALIZE
+ uint32_t nHeight;
+ CTxOut out;
+
+ ADD_SERIALIZE_METHODS;
+
+ template <typename Stream, typename Operation>
+ inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion)
+ {
+ READWRITE(nTxVer);
+ READWRITE(nHeight);
+ READWRITE(out);
+ }
+};
+
class RestErr
{
public:
@@ -43,6 +63,7 @@ public:
extern void TxToJSON(const CTransaction& tx, const uint256 hashBlock, Object& entry);
extern Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool txDetails = false);
+extern void ScriptPubKeyToJSON(const CScript& scriptPubKey, Object& out, bool fIncludeHex);
static RestErr RESTERR(enum HTTPStatusCode status, string message)
{
@@ -90,12 +111,13 @@ static bool ParseHashStr(const string& strReq, uint256& v)
}
static bool rest_headers(AcceptedConnection* conn,
- const std::string& strReq,
+ const std::string& strURIPart,
+ const std::string& strRequest,
const std::map<std::string, std::string>& mapHeaders,
bool fRun)
{
vector<string> params;
- const RetFormat rf = ParseDataFormat(params, strReq);
+ const RetFormat rf = ParseDataFormat(params, strURIPart);
vector<string> path;
boost::split(path, params[0], boost::is_any_of("/"));
@@ -153,13 +175,14 @@ static bool rest_headers(AcceptedConnection* conn,
}
static bool rest_block(AcceptedConnection* conn,
- const std::string& strReq,
+ const std::string& strURIPart,
+ const std::string& strRequest,
const std::map<std::string, std::string>& mapHeaders,
bool fRun,
bool showTxDetails)
{
vector<string> params;
- const RetFormat rf = ParseDataFormat(params, strReq);
+ const RetFormat rf = ParseDataFormat(params, strURIPart);
string hashStr = params[0];
uint256 hash;
@@ -174,6 +197,9 @@ static bool rest_block(AcceptedConnection* conn,
throw RESTERR(HTTP_NOT_FOUND, hashStr + " not found");
pblockindex = mapBlockIndex[hash];
+ if (fHavePruned && !(pblockindex->nStatus & BLOCK_HAVE_DATA) && pblockindex->nTx > 0)
+ throw RESTERR(HTTP_NOT_FOUND, hashStr + " not available (pruned data)");
+
if (!ReadBlockFromDisk(block, pblockindex))
throw RESTERR(HTTP_NOT_FOUND, hashStr + " not found");
}
@@ -211,28 +237,31 @@ static bool rest_block(AcceptedConnection* conn,
}
static bool rest_block_extended(AcceptedConnection* conn,
- const std::string& strReq,
+ const std::string& strURIPart,
+ const std::string& strRequest,
const std::map<std::string, std::string>& mapHeaders,
bool fRun)
{
- return rest_block(conn, strReq, mapHeaders, fRun, true);
+ return rest_block(conn, strURIPart, strRequest, mapHeaders, fRun, true);
}
static bool rest_block_notxdetails(AcceptedConnection* conn,
- const std::string& strReq,
+ const std::string& strURIPart,
+ const std::string& strRequest,
const std::map<std::string, std::string>& mapHeaders,
bool fRun)
{
- return rest_block(conn, strReq, mapHeaders, fRun, false);
+ return rest_block(conn, strURIPart, strRequest, mapHeaders, fRun, false);
}
static bool rest_chaininfo(AcceptedConnection* conn,
- const std::string& strReq,
- const std::map<std::string, std::string>& mapHeaders,
- bool fRun)
+ const std::string& strURIPart,
+ const std::string& strRequest,
+ const std::map<std::string, std::string>& mapHeaders,
+ bool fRun)
{
vector<string> params;
- const RetFormat rf = ParseDataFormat(params, strReq);
+ const RetFormat rf = ParseDataFormat(params, strURIPart);
switch (rf) {
case RF_JSON: {
@@ -253,12 +282,13 @@ static bool rest_chaininfo(AcceptedConnection* conn,
}
static bool rest_tx(AcceptedConnection* conn,
- const std::string& strReq,
+ const std::string& strURIPart,
+ const std::string& strRequest,
const std::map<std::string, std::string>& mapHeaders,
bool fRun)
{
vector<string> params;
- const RetFormat rf = ParseDataFormat(params, strReq);
+ const RetFormat rf = ParseDataFormat(params, strURIPart);
string hashStr = params[0];
uint256 hash;
@@ -303,10 +333,191 @@ static bool rest_tx(AcceptedConnection* conn,
return true; // continue to process further HTTP reqs on this cxn
}
+static bool rest_getutxos(AcceptedConnection* conn,
+ const std::string& strURIPart,
+ const std::string& strRequest,
+ const std::map<std::string, std::string>& mapHeaders,
+ bool fRun)
+{
+ vector<string> params;
+ enum RetFormat rf = ParseDataFormat(params, strURIPart);
+
+ // throw exception in case of a empty request
+ if (strRequest.length() == 0)
+ throw RESTERR(HTTP_INTERNAL_SERVER_ERROR, "Error: empty request");
+
+ bool fCheckMemPool = false;
+ vector<COutPoint> vOutPoints;
+
+ // parse/deserialize input
+ // input-format = output-format, rest/getutxos/bin requires binary input, gives binary output, ...
+
+ string strRequestMutable = strRequest; //convert const string to string for allowing hex to bin converting
+
+ switch (rf) {
+ case RF_HEX: {
+ // convert hex to bin, continue then with bin part
+ std::vector<unsigned char> strRequestV = ParseHex(strRequest);
+ strRequestMutable.assign(strRequestV.begin(), strRequestV.end());
+ }
+
+ case RF_BINARY: {
+ try {
+ //deserialize
+ CDataStream oss(SER_NETWORK, PROTOCOL_VERSION);
+ oss << strRequestMutable;
+ oss >> fCheckMemPool;
+ oss >> vOutPoints;
+ } catch (const std::ios_base::failure& e) {
+ // abort in case of unreadable binary data
+ throw RESTERR(HTTP_INTERNAL_SERVER_ERROR, "Parse error");
+ }
+ break;
+ }
+
+ case RF_JSON: {
+ try {
+ // parse json request
+ Value valRequest;
+ if (!read_string(strRequest, valRequest))
+ throw RESTERR(HTTP_INTERNAL_SERVER_ERROR, "Parse error");
+
+ Object jsonObject = valRequest.get_obj();
+ const Value& checkMempoolValue = find_value(jsonObject, "checkmempool");
+
+ if (!checkMempoolValue.is_null()) {
+ fCheckMemPool = checkMempoolValue.get_bool();
+ }
+ const Value& outpointsValue = find_value(jsonObject, "outpoints");
+ if (!outpointsValue.is_null()) {
+ Array outPoints = outpointsValue.get_array();
+ BOOST_FOREACH (const Value& outPoint, outPoints) {
+ Object outpointObject = outPoint.get_obj();
+ uint256 txid = ParseHashO(outpointObject, "txid");
+ Value nValue = find_value(outpointObject, "n");
+ int nOutput = nValue.get_int();
+ vOutPoints.push_back(COutPoint(txid, nOutput));
+ }
+ }
+ } catch (...) {
+ // return HTTP 500 if there was a json parsing error
+ throw RESTERR(HTTP_INTERNAL_SERVER_ERROR, "Parse error");
+ }
+ break;
+ }
+ default: {
+ throw RESTERR(HTTP_NOT_FOUND, "output format not found (available: " + AvailableDataFormatsString() + ")");
+ }
+ }
+
+ // limit max outpoints
+ if (vOutPoints.size() > MAX_GETUTXOS_OUTPOINTS)
+ throw RESTERR(HTTP_INTERNAL_SERVER_ERROR, strprintf("Error: max outpoints exceeded (max: %d, tried: %d)", MAX_GETUTXOS_OUTPOINTS, vOutPoints.size()));
+
+ // check spentness and form a bitmap (as well as a JSON capable human-readble string representation)
+ vector<unsigned char> bitmap;
+ vector<CCoin> outs;
+ std::string bitmapStringRepresentation;
+ boost::dynamic_bitset<unsigned char> hits(vOutPoints.size());
+ {
+ LOCK2(cs_main, mempool.cs);
+
+ CCoinsView viewDummy;
+ CCoinsViewCache view(&viewDummy);
+
+ CCoinsViewCache& viewChain = *pcoinsTip;
+ CCoinsViewMemPool viewMempool(&viewChain, mempool);
+
+ if (fCheckMemPool)
+ view.SetBackend(viewMempool); // switch cache backend to db+mempool in case user likes to query mempool
+
+ for (size_t i = 0; i < vOutPoints.size(); i++) {
+ CCoins coins;
+ uint256 hash = vOutPoints[i].hash;
+ if (view.GetCoins(hash, coins)) {
+ mempool.pruneSpent(hash, coins);
+ if (coins.IsAvailable(vOutPoints[i].n)) {
+ hits[i] = true;
+ // Safe to index into vout here because IsAvailable checked if it's off the end of the array, or if
+ // n is valid but points to an already spent output (IsNull).
+ CCoin coin;
+ coin.nTxVer = coins.nVersion;
+ coin.nHeight = coins.nHeight;
+ coin.out = coins.vout.at(vOutPoints[i].n);
+ assert(!coin.out.IsNull());
+ outs.push_back(coin);
+ }
+ }
+
+ bitmapStringRepresentation.append(hits[i] ? "1" : "0"); // form a binary string representation (human-readable for json output)
+ }
+ }
+ boost::to_block_range(hits, std::back_inserter(bitmap));
+
+ switch (rf) {
+ case RF_BINARY: {
+ // serialize data
+ // use exact same output as mentioned in Bip64
+ CDataStream ssGetUTXOResponse(SER_NETWORK, PROTOCOL_VERSION);
+ ssGetUTXOResponse << chainActive.Height() << chainActive.Tip()->GetBlockHash() << bitmap << outs;
+ string ssGetUTXOResponseString = ssGetUTXOResponse.str();
+
+ conn->stream() << HTTPReplyHeader(HTTP_OK, fRun, ssGetUTXOResponseString.size(), "application/octet-stream") << ssGetUTXOResponseString << std::flush;
+ return true;
+ }
+
+ case RF_HEX: {
+ CDataStream ssGetUTXOResponse(SER_NETWORK, PROTOCOL_VERSION);
+ ssGetUTXOResponse << chainActive.Height() << chainActive.Tip()->GetBlockHash() << bitmap << outs;
+ string strHex = HexStr(ssGetUTXOResponse.begin(), ssGetUTXOResponse.end()) + "\n";
+
+ conn->stream() << HTTPReply(HTTP_OK, strHex, fRun, false, "text/plain") << std::flush;
+ return true;
+ }
+
+ case RF_JSON: {
+ Object objGetUTXOResponse;
+
+ // pack in some essentials
+ // use more or less the same output as mentioned in Bip64
+ objGetUTXOResponse.push_back(Pair("chainHeight", chainActive.Height()));
+ objGetUTXOResponse.push_back(Pair("chaintipHash", chainActive.Tip()->GetBlockHash().GetHex()));
+ objGetUTXOResponse.push_back(Pair("bitmap", bitmapStringRepresentation));
+
+ Array utxos;
+ BOOST_FOREACH (const CCoin& coin, outs) {
+ Object utxo;
+ utxo.push_back(Pair("txvers", (int32_t)coin.nTxVer));
+ utxo.push_back(Pair("height", (int32_t)coin.nHeight));
+ utxo.push_back(Pair("value", ValueFromAmount(coin.out.nValue)));
+
+ // include the script in a json output
+ Object o;
+ ScriptPubKeyToJSON(coin.out.scriptPubKey, o, true);
+ utxo.push_back(Pair("scriptPubKey", o));
+ utxos.push_back(utxo);
+ }
+ objGetUTXOResponse.push_back(Pair("utxos", utxos));
+
+ // return json string
+ string strJSON = write_string(Value(objGetUTXOResponse), false) + "\n";
+ conn->stream() << HTTPReply(HTTP_OK, strJSON, fRun) << std::flush;
+ return true;
+ }
+ default: {
+ throw RESTERR(HTTP_NOT_FOUND, "output format not found (available: " + AvailableDataFormatsString() + ")");
+ }
+ }
+
+ // not reached
+ return true; // continue to process further HTTP reqs on this cxn
+}
+
static const struct {
const char* prefix;
bool (*handler)(AcceptedConnection* conn,
- const std::string& strURI,
+ const std::string& strURIPart,
+ const std::string& strRequest,
const std::map<std::string, std::string>& mapHeaders,
bool fRun);
} uri_prefixes[] = {
@@ -315,10 +526,12 @@ static const struct {
{"/rest/block/", rest_block_extended},
{"/rest/chaininfo", rest_chaininfo},
{"/rest/headers/", rest_headers},
+ {"/rest/getutxos", rest_getutxos},
};
bool HTTPReq_REST(AcceptedConnection* conn,
const std::string& strURI,
+ const string& strRequest,
const std::map<std::string, std::string>& mapHeaders,
bool fRun)
{
@@ -330,8 +543,8 @@ bool HTTPReq_REST(AcceptedConnection* conn,
for (unsigned int i = 0; i < ARRAYLEN(uri_prefixes); i++) {
unsigned int plen = strlen(uri_prefixes[i].prefix);
if (strURI.substr(0, plen) == uri_prefixes[i].prefix) {
- string strReq = strURI.substr(plen);
- return uri_prefixes[i].handler(conn, strReq, mapHeaders, fRun);
+ string strURIPart = strURI.substr(plen);
+ return uri_prefixes[i].handler(conn, strURIPart, strRequest, mapHeaders, fRun);
}
}
} catch (const RestErr& re) {
diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp
index 293d6d5619..4315c5ec18 100644
--- a/src/rpcblockchain.cpp
+++ b/src/rpcblockchain.cpp
@@ -170,7 +170,7 @@ Value getrawmempool(const Array& params, bool fHelp)
" \"transactionid\", (string) parent transaction id\n"
" ... ]\n"
" }, ...\n"
- "]\n"
+ "}\n"
"\nExamples\n"
+ HelpExampleCli("getrawmempool", "true")
+ HelpExampleRpc("getrawmempool", "true")
@@ -299,6 +299,9 @@ Value getblock(const Array& params, bool fHelp)
CBlock block;
CBlockIndex* pblockindex = mapBlockIndex[hash];
+ if (fHavePruned && !(pblockindex->nStatus & BLOCK_HAVE_DATA) && pblockindex->nTx > 0)
+ throw JSONRPCError(RPC_INTERNAL_ERROR, "Block not available (pruned data)");
+
if(!ReadBlockFromDisk(block, pblockindex))
throw JSONRPCError(RPC_INTERNAL_ERROR, "Can't read block from disk");
@@ -490,8 +493,17 @@ Value getblockchaininfo(const Array& params, bool fHelp)
obj.push_back(Pair("headers", pindexBestHeader ? pindexBestHeader->nHeight : -1));
obj.push_back(Pair("bestblockhash", chainActive.Tip()->GetBlockHash().GetHex()));
obj.push_back(Pair("difficulty", (double)GetDifficulty()));
- obj.push_back(Pair("verificationprogress", Checkpoints::GuessVerificationProgress(chainActive.Tip())));
+ obj.push_back(Pair("verificationprogress", Checkpoints::GuessVerificationProgress(Params().Checkpoints(), chainActive.Tip())));
obj.push_back(Pair("chainwork", chainActive.Tip()->nChainWork.GetHex()));
+ obj.push_back(Pair("pruned", fPruneMode));
+ if (fPruneMode)
+ {
+ CBlockIndex *block = chainActive.Tip();
+ while (block && block->pprev && (block->pprev->nStatus & BLOCK_HAVE_DATA))
+ block = block->pprev;
+
+ obj.push_back(Pair("pruneheight", block->nHeight));
+ }
return obj;
}
diff --git a/src/rpcclient.cpp b/src/rpcclient.cpp
index ad676f9edc..4b576b3707 100644
--- a/src/rpcclient.cpp
+++ b/src/rpcclient.cpp
@@ -7,7 +7,6 @@
#include "rpcprotocol.h"
#include "util.h"
-#include "ui_interface.h"
#include <set>
#include <stdint.h>
diff --git a/src/rpcmining.cpp b/src/rpcmining.cpp
index 24b865150a..a6a8b9422f 100644
--- a/src/rpcmining.cpp
+++ b/src/rpcmining.cpp
@@ -16,7 +16,6 @@
#include "util.h"
#include "validationinterface.h"
#ifdef ENABLE_WALLET
-#include "wallet/db.h"
#include "wallet/wallet.h"
#endif
diff --git a/src/rpcrawtransaction.cpp b/src/rpcrawtransaction.cpp
index 1e13f5dbba..e84d2693a2 100644
--- a/src/rpcrawtransaction.cpp
+++ b/src/rpcrawtransaction.cpp
@@ -1,5 +1,5 @@
// Copyright (c) 2010 Satoshi Nakamoto
-// Copyright (c) 2009-2014 The Bitcoin Core developers
+// Copyright (c) 2009-2015 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
@@ -13,6 +13,7 @@
#include "net.h"
#include "rpcserver.h"
#include "script/script.h"
+#include "script/script_error.h"
#include "script/sign.h"
#include "script/standard.h"
#include "uint256.h"
@@ -491,6 +492,18 @@ Value decodescript(const Array& params, bool fHelp)
return r;
}
+/** Pushes a JSON object for script verification or signing errors to vErrorsRet. */
+static void TxInErrorToJSON(const CTxIn& txin, Array& vErrorsRet, const std::string& strMessage)
+{
+ Object entry;
+ entry.push_back(Pair("txid", txin.prevout.hash.ToString()));
+ entry.push_back(Pair("vout", (uint64_t)txin.prevout.n));
+ entry.push_back(Pair("scriptSig", HexStr(txin.scriptSig.begin(), txin.scriptSig.end())));
+ entry.push_back(Pair("sequence", (uint64_t)txin.nSequence));
+ entry.push_back(Pair("error", strMessage));
+ vErrorsRet.push_back(entry);
+}
+
Value signrawtransaction(const Array& params, bool fHelp)
{
if (fHelp || params.size() < 1 || params.size() > 4)
@@ -532,8 +545,18 @@ Value signrawtransaction(const Array& params, bool fHelp)
"\nResult:\n"
"{\n"
- " \"hex\": \"value\", (string) The raw transaction with signature(s) (hex-encoded string)\n"
- " \"complete\": true|false (boolean) if transaction has a complete set of signature\n"
+ " \"hex\" : \"value\", (string) The hex-encoded raw transaction with signature(s)\n"
+ " \"complete\" : true|false, (boolean) If the transaction has a complete set of signatures\n"
+ " \"errors\" : [ (json array of objects) Script verification errors (if there are any)\n"
+ " {\n"
+ " \"txid\" : \"hash\", (string) The hash of the referenced, previous transaction\n"
+ " \"vout\" : n, (numeric) The index of the output to spent and used as input\n"
+ " \"scriptSig\" : \"hex\", (string) The hex-encoded signature script\n"
+ " \"sequence\" : n, (numeric) Script sequence number\n"
+ " \"error\" : \"text\" (string) Verification or signing error related to the input\n"
+ " }\n"
+ " ,...\n"
+ " ]\n"
"}\n"
"\nExamples:\n"
@@ -568,7 +591,6 @@ Value signrawtransaction(const Array& params, bool fHelp)
// mergedTx will end up with all the signatures; it
// starts as a clone of the rawtx:
CMutableTransaction mergedTx(txVariants[0]);
- bool fComplete = true;
// Fetch previous transactions (inputs):
CCoinsView viewDummy;
@@ -683,12 +705,15 @@ Value signrawtransaction(const Array& params, bool fHelp)
bool fHashSingle = ((nHashType & ~SIGHASH_ANYONECANPAY) == SIGHASH_SINGLE);
+ // Script verification errors
+ Array vErrors;
+
// Sign what we can:
for (unsigned int i = 0; i < mergedTx.vin.size(); i++) {
CTxIn& txin = mergedTx.vin[i];
const CCoins* coins = view.AccessCoins(txin.prevout.hash);
if (coins == NULL || !coins->IsAvailable(txin.prevout.n)) {
- fComplete = false;
+ TxInErrorToJSON(txin, vErrors, "Input not found or already spent");
continue;
}
const CScript& prevPubKey = coins->vout[txin.prevout.n].scriptPubKey;
@@ -702,13 +727,19 @@ Value signrawtransaction(const Array& params, bool fHelp)
BOOST_FOREACH(const CMutableTransaction& txv, txVariants) {
txin.scriptSig = CombineSignatures(prevPubKey, mergedTx, i, txin.scriptSig, txv.vin[i].scriptSig);
}
- if (!VerifyScript(txin.scriptSig, prevPubKey, STANDARD_SCRIPT_VERIFY_FLAGS, MutableTransactionSignatureChecker(&mergedTx, i)))
- fComplete = false;
+ ScriptError serror = SCRIPT_ERR_OK;
+ if (!VerifyScript(txin.scriptSig, prevPubKey, STANDARD_SCRIPT_VERIFY_FLAGS, MutableTransactionSignatureChecker(&mergedTx, i), &serror)) {
+ TxInErrorToJSON(txin, vErrors, ScriptErrorString(serror));
+ }
}
+ bool fComplete = vErrors.empty();
Object result;
result.push_back(Pair("hex", EncodeHexTx(mergedTx)));
result.push_back(Pair("complete", fComplete));
+ if (!vErrors.empty()) {
+ result.push_back(Pair("errors", vErrors));
+ }
return result;
}
@@ -756,11 +787,16 @@ Value sendrawtransaction(const Array& params, bool fHelp)
if (!fHaveMempool && !fHaveChain) {
// push to local node and sync with wallets
CValidationState state;
- if (!AcceptToMemoryPool(mempool, state, tx, false, NULL, !fOverrideFees)) {
- if(state.IsInvalid())
+ bool fMissingInputs;
+ if (!AcceptToMemoryPool(mempool, state, tx, false, &fMissingInputs, !fOverrideFees)) {
+ if (state.IsInvalid()) {
throw JSONRPCError(RPC_TRANSACTION_REJECTED, strprintf("%i: %s", state.GetRejectCode(), state.GetRejectReason()));
- else
+ } else {
+ if (fMissingInputs) {
+ throw JSONRPCError(RPC_TRANSACTION_ERROR, "Missing inputs");
+ }
throw JSONRPCError(RPC_TRANSACTION_ERROR, state.GetRejectReason());
+ }
}
} else if (fHaveChain) {
throw JSONRPCError(RPC_TRANSACTION_ALREADY_IN_CHAIN, "transaction already in block chain");
diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp
index 61dda9125b..3f74517a67 100644
--- a/src/rpcserver.cpp
+++ b/src/rpcserver.cpp
@@ -912,8 +912,8 @@ static bool HTTPReq_JSONRPC(AcceptedConnection *conn,
{
LogPrintf("ThreadRPCServer incorrect password attempt from %s\n", conn->peer_address_to_string());
/* Deter brute-forcing
- If this results in a DoS the user really
- shouldn't have their RPC port exposed. */
+ We don't support exposing the RPC port, so this shouldn't result
+ in a DoS. */
MilliSleep(250);
conn->stream() << HTTPError(HTTP_UNAUTHORIZED, false) << std::flush;
@@ -994,7 +994,7 @@ void ServiceConnection(AcceptedConnection *conn)
// Process via HTTP REST API
} else if (strURI.substr(0, 6) == "/rest/" && GetBoolArg("-rest", false)) {
- if (!HTTPReq_REST(conn, strURI, mapHeaders, fRun))
+ if (!HTTPReq_REST(conn, strURI, strRequest, mapHeaders, fRun))
break;
} else {
diff --git a/src/rpcserver.h b/src/rpcserver.h
index 790104f8c9..30a5b28db7 100644
--- a/src/rpcserver.h
+++ b/src/rpcserver.h
@@ -239,6 +239,7 @@ extern json_spirit::Value reconsiderblock(const json_spirit::Array& params, bool
// in rest.cpp
extern bool HTTPReq_REST(AcceptedConnection *conn,
const std::string& strURI,
+ const std::string& strRequest,
const std::map<std::string, std::string>& mapHeaders,
bool fRun);
diff --git a/src/scheduler.cpp b/src/scheduler.cpp
new file mode 100644
index 0000000000..c42eb7244d
--- /dev/null
+++ b/src/scheduler.cpp
@@ -0,0 +1,126 @@
+// Copyright (c) 2015 The Bitcoin Core developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#include "scheduler.h"
+
+#include <assert.h>
+#include <boost/bind.hpp>
+#include <utility>
+
+CScheduler::CScheduler() : nThreadsServicingQueue(0), stopRequested(false), stopWhenEmpty(false)
+{
+}
+
+CScheduler::~CScheduler()
+{
+ assert(nThreadsServicingQueue == 0);
+}
+
+
+#if BOOST_VERSION < 105000
+static boost::system_time toPosixTime(const boost::chrono::system_clock::time_point& t)
+{
+ return boost::posix_time::from_time_t(boost::chrono::system_clock::to_time_t(t));
+}
+#endif
+
+void CScheduler::serviceQueue()
+{
+ boost::unique_lock<boost::mutex> lock(newTaskMutex);
+ ++nThreadsServicingQueue;
+
+ // newTaskMutex is locked throughout this loop EXCEPT
+ // when the thread is waiting or when the user's function
+ // is called.
+ while (!shouldStop()) {
+ try {
+ while (!shouldStop() && taskQueue.empty()) {
+ // Wait until there is something to do.
+ newTaskScheduled.wait(lock);
+ }
+
+ // Wait until either there is a new task, or until
+ // the time of the first item on the queue:
+
+// wait_until needs boost 1.50 or later; older versions have timed_wait:
+#if BOOST_VERSION < 105000
+ while (!shouldStop() && !taskQueue.empty() &&
+ newTaskScheduled.timed_wait(lock, toPosixTime(taskQueue.begin()->first))) {
+ // Keep waiting until timeout
+ }
+#else
+ while (!shouldStop() && !taskQueue.empty() &&
+ newTaskScheduled.wait_until(lock, taskQueue.begin()->first) != boost::cv_status::timeout) {
+ // Keep waiting until timeout
+ }
+#endif
+ // If there are multiple threads, the queue can empty while we're waiting (another
+ // thread may service the task we were waiting on).
+ if (shouldStop() || taskQueue.empty())
+ continue;
+
+ Function f = taskQueue.begin()->second;
+ taskQueue.erase(taskQueue.begin());
+
+ // Unlock before calling f, so it can reschedule itself or another task
+ // without deadlocking:
+ lock.unlock();
+ f();
+ lock.lock();
+ } catch (...) {
+ --nThreadsServicingQueue;
+ throw;
+ }
+ }
+ --nThreadsServicingQueue;
+}
+
+void CScheduler::stop(bool drain)
+{
+ {
+ boost::unique_lock<boost::mutex> lock(newTaskMutex);
+ if (drain)
+ stopWhenEmpty = true;
+ else
+ stopRequested = true;
+ }
+ newTaskScheduled.notify_all();
+}
+
+void CScheduler::schedule(CScheduler::Function f, boost::chrono::system_clock::time_point t)
+{
+ {
+ boost::unique_lock<boost::mutex> lock(newTaskMutex);
+ taskQueue.insert(std::make_pair(t, f));
+ }
+ newTaskScheduled.notify_one();
+}
+
+void CScheduler::scheduleFromNow(CScheduler::Function f, int64_t deltaSeconds)
+{
+ schedule(f, boost::chrono::system_clock::now() + boost::chrono::seconds(deltaSeconds));
+}
+
+static void Repeat(CScheduler* s, CScheduler::Function f, int64_t deltaSeconds)
+{
+ f();
+ s->scheduleFromNow(boost::bind(&Repeat, s, f, deltaSeconds), deltaSeconds);
+}
+
+void CScheduler::scheduleEvery(CScheduler::Function f, int64_t deltaSeconds)
+{
+ scheduleFromNow(boost::bind(&Repeat, this, f, deltaSeconds), deltaSeconds);
+}
+
+size_t CScheduler::getQueueInfo(boost::chrono::system_clock::time_point &first,
+ boost::chrono::system_clock::time_point &last) const
+{
+ boost::unique_lock<boost::mutex> lock(newTaskMutex);
+ size_t result = taskQueue.size();
+ if (!taskQueue.empty()) {
+ first = taskQueue.begin()->first;
+ last = taskQueue.rbegin()->first;
+ }
+ return result;
+}
diff --git a/src/scheduler.h b/src/scheduler.h
new file mode 100644
index 0000000000..436659e58b
--- /dev/null
+++ b/src/scheduler.h
@@ -0,0 +1,83 @@
+// Copyright (c) 2015 The Bitcoin Core developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#ifndef BITCOIN_SCHEDULER_H
+#define BITCOIN_SCHEDULER_H
+
+//
+// NOTE:
+// boost::thread / boost::function / boost::chrono should be ported to
+// std::thread / std::function / std::chrono when we support C++11.
+//
+#include <boost/function.hpp>
+#include <boost/chrono/chrono.hpp>
+#include <boost/thread.hpp>
+#include <map>
+
+//
+// Simple class for background tasks that should be run
+// periodically or once "after a while"
+//
+// Usage:
+//
+// CScheduler* s = new CScheduler();
+// s->scheduleFromNow(doSomething, 11); // Assuming a: void doSomething() { }
+// s->scheduleFromNow(boost::bind(Class::func, this, argument), 3);
+// boost::thread* t = new boost::thread(boost::bind(CScheduler::serviceQueue, s));
+//
+// ... then at program shutdown, clean up the thread running serviceQueue:
+// t->interrupt();
+// t->join();
+// delete t;
+// delete s; // Must be done after thread is interrupted/joined.
+//
+
+class CScheduler
+{
+public:
+ CScheduler();
+ ~CScheduler();
+
+ typedef boost::function<void(void)> Function;
+
+ // Call func at/after time t
+ void schedule(Function f, boost::chrono::system_clock::time_point t);
+
+ // Convenience method: call f once deltaSeconds from now
+ void scheduleFromNow(Function f, int64_t deltaSeconds);
+
+ // Another convenience method: call f approximately
+ // every deltaSeconds forever, starting deltaSeconds from now.
+ // To be more precise: every time f is finished, it
+ // is rescheduled to run deltaSeconds later. If you
+ // need more accurate scheduling, don't use this method.
+ void scheduleEvery(Function f, int64_t deltaSeconds);
+
+ // To keep things as simple as possible, there is no unschedule.
+
+ // Services the queue 'forever'. Should be run in a thread,
+ // and interrupted using boost::interrupt_thread
+ void serviceQueue();
+
+ // Tell any threads running serviceQueue to stop as soon as they're
+ // done servicing whatever task they're currently servicing (drain=false)
+ // or when there is no work left to be done (drain=true)
+ void stop(bool drain=false);
+
+ // Returns number of tasks waiting to be serviced,
+ // and first and last task times
+ size_t getQueueInfo(boost::chrono::system_clock::time_point &first,
+ boost::chrono::system_clock::time_point &last) const;
+
+private:
+ std::multimap<boost::chrono::system_clock::time_point, Function> taskQueue;
+ boost::condition_variable newTaskScheduled;
+ mutable boost::mutex newTaskMutex;
+ int nThreadsServicingQueue;
+ bool stopRequested;
+ bool stopWhenEmpty;
+ bool shouldStop() { return stopRequested || (stopWhenEmpty && taskQueue.empty()); }
+};
+
+#endif
diff --git a/src/script/script.h b/src/script/script.h
index ed456f5c5a..d5045005be 100644
--- a/src/script/script.h
+++ b/src/script/script.h
@@ -6,6 +6,8 @@
#ifndef BITCOIN_SCRIPT_SCRIPT_H
#define BITCOIN_SCRIPT_SCRIPT_H
+#include "crypto/common.h"
+
#include <assert.h>
#include <climits>
#include <limits>
@@ -14,7 +16,6 @@
#include <string.h>
#include <string>
#include <vector>
-#include "crypto/common.h"
static const unsigned int MAX_SCRIPT_ELEMENT_SIZE = 520; // bytes
diff --git a/src/secp256k1/.gitignore b/src/secp256k1/.gitignore
index b9f7d243ec..076ff1295f 100644
--- a/src/secp256k1/.gitignore
+++ b/src/secp256k1/.gitignore
@@ -2,6 +2,7 @@ bench_inv
bench_sign
bench_verify
bench_recover
+bench_internal
tests
*.exe
*.so
diff --git a/src/secp256k1/.travis.yml b/src/secp256k1/.travis.yml
index 40f8dae23f..0d8089cfe4 100644
--- a/src/secp256k1/.travis.yml
+++ b/src/secp256k1/.travis.yml
@@ -1,14 +1,14 @@
language: c
+sudo: false
+addons:
+ apt:
+ packages: libgmp-dev
compiler:
- clang
- gcc
-install:
- - sudo apt-get install -qq libssl-dev
- - if [ "$BIGNUM" = "gmp" -o "$BIGNUM" = "auto" ]; then sudo apt-get install --no-install-recommends --no-upgrade -qq libgmp-dev; fi
- - if [ -n "$EXTRAPACKAGES" ]; then sudo apt-get update && sudo apt-get install --no-install-recommends --no-upgrade $EXTRAPACKAGES; fi
env:
global:
- - FIELD=auto BIGNUM=auto SCALAR=auto ENDOMORPHISM=no ASM=no BUILD=check EXTRAFLAGS= HOST= EXTRAPACKAGES=
+ - FIELD=auto BIGNUM=auto SCALAR=auto ENDOMORPHISM=no ASM=no BUILD=check EXTRAFLAGS= HOST=
matrix:
- SCALAR=32bit
- SCALAR=64bit
@@ -22,8 +22,35 @@ env:
- BIGNUM=no ENDOMORPHISM=yes
- BUILD=distcheck
- EXTRAFLAGS=CFLAGS=-DDETERMINISTIC
- - HOST=i686-linux-gnu EXTRAPACKAGES="gcc-multilib"
- - HOST=i686-linux-gnu EXTRAPACKAGES="gcc-multilib" ENDOMORPHISM=yes
+matrix:
+ fast_finish: true
+ include:
+ - compiler: clang
+ env: HOST=i686-linux-gnu ENDOMORPHISM=yes
+ addons:
+ apt:
+ packages:
+ - gcc-multilib
+ - libgmp-dev:i386
+ - compiler: clang
+ env: HOST=i686-linux-gnu
+ addons:
+ apt:
+ packages:
+ - gcc-multilib
+ - compiler: gcc
+ env: HOST=i686-linux-gnu ENDOMORPHISM=yes
+ addons:
+ apt:
+ packages:
+ - gcc-multilib
+ - compiler: gcc
+ env: HOST=i686-linux-gnu
+ addons:
+ apt:
+ packages:
+ - gcc-multilib
+ - libgmp-dev:i386
before_script: ./autogen.sh
script:
- if [ -n "$HOST" ]; then export USE_HOST="--host=$HOST"; fi
diff --git a/src/secp256k1/include/secp256k1.h b/src/secp256k1/include/secp256k1.h
index a6e39d13db..06afd4c65b 100644
--- a/src/secp256k1/include/secp256k1.h
+++ b/src/secp256k1/include/secp256k1.h
@@ -40,42 +40,60 @@ extern "C" {
# define SECP256K1_ARG_NONNULL(_x)
# endif
+/** Opaque data structure that holds context information (precomputed tables etc.).
+ * Only functions that take a pointer to a non-const context require exclusive
+ * access to it. Multiple functions that take a pointer to a const context may
+ * run simultaneously.
+ */
+typedef struct secp256k1_context_struct secp256k1_context_t;
+
+/** Flags to pass to secp256k1_context_create. */
+# define SECP256K1_CONTEXT_VERIFY (1 << 0)
+# define SECP256K1_CONTEXT_SIGN (1 << 1)
-/** Flags to pass to secp256k1_start. */
-# define SECP256K1_START_VERIFY (1 << 0)
-# define SECP256K1_START_SIGN (1 << 1)
+/** Create a secp256k1 context object.
+ * Returns: a newly created context object.
+ * In: flags: which parts of the context to initialize.
+ */
+secp256k1_context_t* secp256k1_context_create(
+ int flags
+) SECP256K1_WARN_UNUSED_RESULT;
-/** Initialize the library. This may take some time (10-100 ms).
- * You need to call this before calling any other function.
- * It cannot run in parallel with any other functions, but once
- * secp256k1_start() returns, all other functions are thread-safe.
+/** Copies a secp256k1 context object.
+ * Returns: a newly created context object.
+ * In: ctx: an existing context to copy
*/
-void secp256k1_start(unsigned int flags);
+secp256k1_context_t* secp256k1_context_clone(
+ const secp256k1_context_t* ctx
+) SECP256K1_WARN_UNUSED_RESULT;
-/** Free all memory associated with this library. After this, no
- * functions can be called anymore, except secp256k1_start()
+/** Destroy a secp256k1 context object.
+ * The context pointer may not be used afterwards.
*/
-void secp256k1_stop(void);
+void secp256k1_context_destroy(
+ secp256k1_context_t* ctx
+) SECP256K1_ARG_NONNULL(1);
/** Verify an ECDSA signature.
* Returns: 1: correct signature
* 0: incorrect signature
* -1: invalid public key
* -2: invalid signature
- * In: msg32: the 32-byte message hash being verified (cannot be NULL)
+ * In: ctx: a secp256k1 context object, initialized for verification.
+ * msg32: the 32-byte message hash being verified (cannot be NULL)
* sig: the signature being verified (cannot be NULL)
* siglen: the length of the signature
* pubkey: the public key to verify with (cannot be NULL)
* pubkeylen: the length of pubkey
- * Requires starting using SECP256K1_START_VERIFY.
*/
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdsa_verify(
+ const secp256k1_context_t* ctx,
const unsigned char *msg32,
const unsigned char *sig,
int siglen,
const unsigned char *pubkey,
int pubkeylen
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(4);
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(5);
/** A pointer to a function to deterministically generate a nonce.
* Returns: 1 if a nonce was successfully generated. 0 will cause signing to fail.
@@ -111,15 +129,14 @@ extern const secp256k1_nonce_function_t secp256k1_nonce_function_default;
* Returns: 1: signature created
* 0: the nonce generation function failed, the private key was invalid, or there is not
* enough space in the signature (as indicated by siglen).
- * In: msg32: the 32-byte message hash being signed (cannot be NULL)
+ * In: ctx: pointer to a context object, initialized for signing (cannot be NULL)
+ * msg32: the 32-byte message hash being signed (cannot be NULL)
* seckey: pointer to a 32-byte secret key (cannot be NULL)
* noncefp:pointer to a nonce generation function. If NULL, secp256k1_nonce_function_default is used
* ndata: pointer to arbitrary data used by the nonce generation function (can be NULL)
* Out: sig: pointer to an array where the signature will be placed (cannot be NULL)
* In/Out: siglen: pointer to an int with the length of sig, which will be updated
- * to contain the actual signature length (<=72). If 0 is returned, this will be
- * set to zero.
- * Requires starting using SECP256K1_START_SIGN.
+ * to contain the actual signature length (<=72).
*
* The sig always has an s value in the lower half of the range (From 0x1
* to 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,
@@ -148,145 +165,180 @@ extern const secp256k1_nonce_function_t secp256k1_nonce_function_default;
* be taken when this property is required for an application.
*/
int secp256k1_ecdsa_sign(
+ const secp256k1_context_t* ctx,
const unsigned char *msg32,
unsigned char *sig,
int *siglen,
const unsigned char *seckey,
secp256k1_nonce_function_t noncefp,
const void *ndata
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4) SECP256K1_ARG_NONNULL(5);
/** Create a compact ECDSA signature (64 byte + recovery id).
* Returns: 1: signature created
* 0: the nonce generation function failed, or the secret key was invalid.
- * In: msg32: the 32-byte message hash being signed (cannot be NULL)
+ * In: ctx: pointer to a context object, initialized for signing (cannot be NULL)
+ * msg32: the 32-byte message hash being signed (cannot be NULL)
* seckey: pointer to a 32-byte secret key (cannot be NULL)
* noncefp:pointer to a nonce generation function. If NULL, secp256k1_nonce_function_default is used
* ndata: pointer to arbitrary data used by the nonce generation function (can be NULL)
* Out: sig: pointer to a 64-byte array where the signature will be placed (cannot be NULL)
* In case 0 is returned, the returned signature length will be zero.
* recid: pointer to an int, which will be updated to contain the recovery id (can be NULL)
- * Requires starting using SECP256K1_START_SIGN.
*/
int secp256k1_ecdsa_sign_compact(
+ const secp256k1_context_t* ctx,
const unsigned char *msg32,
unsigned char *sig64,
const unsigned char *seckey,
secp256k1_nonce_function_t noncefp,
const void *ndata,
int *recid
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
/** Recover an ECDSA public key from a compact signature.
* Returns: 1: public key successfully recovered (which guarantees a correct signature).
* 0: otherwise.
- * In: msg32: the 32-byte message hash assumed to be signed (cannot be NULL)
+ * In: ctx: pointer to a context object, initialized for verification (cannot be NULL)
+ * msg32: the 32-byte message hash assumed to be signed (cannot be NULL)
* sig64: signature as 64 byte array (cannot be NULL)
* compressed: whether to recover a compressed or uncompressed pubkey
* recid: the recovery id (0-3, as returned by ecdsa_sign_compact)
* Out: pubkey: pointer to a 33 or 65 byte array to put the pubkey (cannot be NULL)
* pubkeylen: pointer to an int that will contain the pubkey length (cannot be NULL)
- * Requires starting using SECP256K1_START_VERIFY.
*/
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdsa_recover_compact(
+ const secp256k1_context_t* ctx,
const unsigned char *msg32,
const unsigned char *sig64,
unsigned char *pubkey,
int *pubkeylen,
int compressed,
int recid
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4) SECP256K1_ARG_NONNULL(5);
/** Verify an ECDSA secret key.
* Returns: 1: secret key is valid
* 0: secret key is invalid
- * In: seckey: pointer to a 32-byte secret key (cannot be NULL)
+ * In: ctx: pointer to a context object (cannot be NULL)
+ * seckey: pointer to a 32-byte secret key (cannot be NULL)
*/
-SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_seckey_verify(const unsigned char *seckey) SECP256K1_ARG_NONNULL(1);
+SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_seckey_verify(
+ const secp256k1_context_t* ctx,
+ const unsigned char *seckey
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2);
/** Just validate a public key.
- * Returns: 1: valid public key
- * 0: invalid public key
- * In: pubkey: pointer to a 33-byte or 65-byte public key (cannot be NULL).
+ * Returns: 1: public key is valid
+ * 0: public key is invalid
+ * In: ctx: pointer to a context object (cannot be NULL)
+ * pubkey: pointer to a 33-byte or 65-byte public key (cannot be NULL).
* pubkeylen: length of pubkey
*/
-SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_verify(const unsigned char *pubkey, int pubkeylen) SECP256K1_ARG_NONNULL(1);
+SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_verify(
+ const secp256k1_context_t* ctx,
+ const unsigned char *pubkey,
+ int pubkeylen
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2);
/** Compute the public key for a secret key.
- * In: compressed: whether the computed public key should be compressed
+ * In: ctx: pointer to a context object, initialized for signing (cannot be NULL)
+ * compressed: whether the computed public key should be compressed
* seckey: pointer to a 32-byte private key (cannot be NULL)
* Out: pubkey: pointer to a 33-byte (if compressed) or 65-byte (if uncompressed)
* area to store the public key (cannot be NULL)
* pubkeylen: pointer to int that will be updated to contains the pubkey's
* length (cannot be NULL)
* Returns: 1: secret was valid, public key stores
- * 0: secret was invalid, try again.
- * Requires starting using SECP256K1_START_SIGN.
+ * 0: secret was invalid, try again
*/
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_create(
+ const secp256k1_context_t* ctx,
unsigned char *pubkey,
int *pubkeylen,
const unsigned char *seckey,
int compressed
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
/** Decompress a public key.
+ * In: ctx: pointer to a context object (cannot be NULL)
* In/Out: pubkey: pointer to a 65-byte array to put the decompressed public key.
- It must contain a 33-byte or 65-byte public key already (cannot be NULL)
+ * It must contain a 33-byte or 65-byte public key already (cannot be NULL)
* pubkeylen: pointer to the size of the public key pointed to by pubkey (cannot be NULL)
- It will be updated to reflect the new size.
- * Returns: 0 if the passed public key was invalid, 1 otherwise. If 1 is returned, the
- pubkey is replaced with its decompressed version.
+ * It will be updated to reflect the new size.
+ * Returns: 0: pubkey was invalid
+ * 1: pubkey was valid, and was replaced with its decompressed version
*/
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_decompress(
+ const secp256k1_context_t* ctx,
unsigned char *pubkey,
int *pubkeylen
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2);
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-/** Export a private key in DER format. */
+/** Export a private key in DER format.
+ * In: ctx: pointer to a context object, initialized for signing (cannot be NULL)
+ */
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_export(
+ const secp256k1_context_t* ctx,
const unsigned char *seckey,
unsigned char *privkey,
int *privkeylen,
int compressed
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
/** Import a private key in DER format. */
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_import(
+ const secp256k1_context_t* ctx,
unsigned char *seckey,
const unsigned char *privkey,
int privkeylen
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2);
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
/** Tweak a private key by adding tweak to it. */
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_add(
+ const secp256k1_context_t* ctx,
unsigned char *seckey,
const unsigned char *tweak
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2);
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
/** Tweak a public key by adding tweak times the generator to it.
- * Requires starting with SECP256K1_START_VERIFY.
+ * In: ctx: pointer to a context object, initialized for verification (cannot be NULL)
*/
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_add(
+ const secp256k1_context_t* ctx,
unsigned char *pubkey,
int pubkeylen,
const unsigned char *tweak
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(3);
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(4);
/** Tweak a private key by multiplying it with tweak. */
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_mul(
+ const secp256k1_context_t* ctx,
unsigned char *seckey,
const unsigned char *tweak
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2);
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
/** Tweak a public key by multiplying it with tweak.
- * Requires starting with SECP256K1_START_VERIFY.
+ * In: ctx: pointer to a context object, initialized for verification (cannot be NULL)
*/
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_mul(
+ const secp256k1_context_t* ctx,
unsigned char *pubkey,
int pubkeylen,
const unsigned char *tweak
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(3);
+) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(4);
+
+/** Updates the context randomization.
+ * Returns: 1: randomization successfully updated
+ * 0: error
+ * In: ctx: pointer to a context object (cannot be NULL)
+ * seed32: pointer to a 32-byte random seed (NULL resets to initial state)
+ */
+SECP256K1_WARN_UNUSED_RESULT int secp256k1_context_randomize(
+ secp256k1_context_t* ctx,
+ const unsigned char *seed32
+) SECP256K1_ARG_NONNULL(1);
+
# ifdef __cplusplus
}
diff --git a/src/secp256k1/src/bench.h b/src/secp256k1/src/bench.h
index 0559b3e853..db5f68cee1 100644
--- a/src/secp256k1/src/bench.h
+++ b/src/secp256k1/src/bench.h
@@ -48,7 +48,7 @@ void run_benchmark(char *name, void (*benchmark)(void*), void (*setup)(void*), v
print_number(min * 1000000.0 / iter);
printf("us / avg ");
print_number((sum / count) * 1000000.0 / iter);
- printf("us / avg ");
+ printf("us / max ");
print_number(max * 1000000.0 / iter);
printf("us\n");
}
diff --git a/src/secp256k1/src/bench_recover.c b/src/secp256k1/src/bench_recover.c
index 6991cc9d6c..56faed11a0 100644
--- a/src/secp256k1/src/bench_recover.c
+++ b/src/secp256k1/src/bench_recover.c
@@ -9,6 +9,7 @@
#include "bench.h"
typedef struct {
+ secp256k1_context_t *ctx;
unsigned char msg[32];
unsigned char sig[64];
} bench_recover_t;
@@ -21,7 +22,7 @@ void bench_recover(void* arg) {
for (i = 0; i < 20000; i++) {
int j;
int pubkeylen = 33;
- CHECK(secp256k1_ecdsa_recover_compact(data->msg, data->sig, pubkey, &pubkeylen, 1, i % 2));
+ CHECK(secp256k1_ecdsa_recover_compact(data->ctx, data->msg, data->sig, pubkey, &pubkeylen, 1, i % 2));
for (j = 0; j < 32; j++) {
data->sig[j + 32] = data->msg[j]; /* Move former message to S. */
data->msg[j] = data->sig[j]; /* Move former R to message. */
@@ -40,10 +41,11 @@ void bench_recover_setup(void* arg) {
int main(void) {
bench_recover_t data;
- secp256k1_start(SECP256K1_START_VERIFY);
+
+ data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_VERIFY);
run_benchmark("ecdsa_recover", bench_recover, bench_recover_setup, NULL, &data, 10, 20000);
- secp256k1_stop();
+ secp256k1_context_destroy(data.ctx);
return 0;
}
diff --git a/src/secp256k1/src/bench_sign.c b/src/secp256k1/src/bench_sign.c
index c5b6829a84..072a37af51 100644
--- a/src/secp256k1/src/bench_sign.c
+++ b/src/secp256k1/src/bench_sign.c
@@ -9,6 +9,7 @@
#include "bench.h"
typedef struct {
+ secp256k1_context_t* ctx;
unsigned char msg[32];
unsigned char key[32];
} bench_sign_t;
@@ -29,7 +30,7 @@ static void bench_sign(void* arg) {
for (i = 0; i < 20000; i++) {
int j;
int recid = 0;
- CHECK(secp256k1_ecdsa_sign_compact(data->msg, sig, data->key, NULL, NULL, &recid));
+ CHECK(secp256k1_ecdsa_sign_compact(data->ctx, data->msg, sig, data->key, NULL, NULL, &recid));
for (j = 0; j < 32; j++) {
data->msg[j] = sig[j]; /* Move former R to message. */
data->key[j] = sig[j + 32]; /* Move former S to key. */
@@ -39,10 +40,11 @@ static void bench_sign(void* arg) {
int main(void) {
bench_sign_t data;
- secp256k1_start(SECP256K1_START_SIGN);
+
+ data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN);
run_benchmark("ecdsa_sign", bench_sign, bench_sign_setup, NULL, &data, 10, 20000);
- secp256k1_stop();
+ secp256k1_context_destroy(data.ctx);
return 0;
}
diff --git a/src/secp256k1/src/bench_verify.c b/src/secp256k1/src/bench_verify.c
index c279305a0d..c8c82752ce 100644
--- a/src/secp256k1/src/bench_verify.c
+++ b/src/secp256k1/src/bench_verify.c
@@ -12,6 +12,7 @@
#include "bench.h"
typedef struct {
+ secp256k1_context_t *ctx;
unsigned char msg[32];
unsigned char key[32];
unsigned char sig[72];
@@ -28,7 +29,7 @@ static void benchmark_verify(void* arg) {
data->sig[data->siglen - 1] ^= (i & 0xFF);
data->sig[data->siglen - 2] ^= ((i >> 8) & 0xFF);
data->sig[data->siglen - 3] ^= ((i >> 16) & 0xFF);
- CHECK(secp256k1_ecdsa_verify(data->msg, data->sig, data->siglen, data->pubkey, data->pubkeylen) == (i == 0));
+ CHECK(secp256k1_ecdsa_verify(data->ctx, data->msg, data->sig, data->siglen, data->pubkey, data->pubkeylen) == (i == 0));
data->sig[data->siglen - 1] ^= (i & 0xFF);
data->sig[data->siglen - 2] ^= ((i >> 8) & 0xFF);
data->sig[data->siglen - 3] ^= ((i >> 16) & 0xFF);
@@ -39,17 +40,17 @@ int main(void) {
int i;
benchmark_verify_t data;
- secp256k1_start(SECP256K1_START_VERIFY | SECP256K1_START_SIGN);
+ data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
for (i = 0; i < 32; i++) data.msg[i] = 1 + i;
for (i = 0; i < 32; i++) data.key[i] = 33 + i;
data.siglen = 72;
- secp256k1_ecdsa_sign(data.msg, data.sig, &data.siglen, data.key, NULL, NULL);
+ secp256k1_ecdsa_sign(data.ctx, data.msg, data.sig, &data.siglen, data.key, NULL, NULL);
data.pubkeylen = 33;
- CHECK(secp256k1_ec_pubkey_create(data.pubkey, &data.pubkeylen, data.key, 1));
+ CHECK(secp256k1_ec_pubkey_create(data.ctx, data.pubkey, &data.pubkeylen, data.key, 1));
run_benchmark("ecdsa_verify", benchmark_verify, NULL, NULL, &data, 10, 20000);
- secp256k1_stop();
+ secp256k1_context_destroy(data.ctx);
return 0;
}
diff --git a/src/secp256k1/src/ecdsa.h b/src/secp256k1/src/ecdsa.h
index c195e7afcb..4ef78e8afb 100644
--- a/src/secp256k1/src/ecdsa.h
+++ b/src/secp256k1/src/ecdsa.h
@@ -9,6 +9,7 @@
#include "scalar.h"
#include "group.h"
+#include "ecmult.h"
typedef struct {
secp256k1_scalar_t r, s;
@@ -16,8 +17,8 @@ typedef struct {
static int secp256k1_ecdsa_sig_parse(secp256k1_ecdsa_sig_t *r, const unsigned char *sig, int size);
static int secp256k1_ecdsa_sig_serialize(unsigned char *sig, int *size, const secp256k1_ecdsa_sig_t *a);
-static int secp256k1_ecdsa_sig_verify(const secp256k1_ecdsa_sig_t *sig, const secp256k1_ge_t *pubkey, const secp256k1_scalar_t *message);
-static int secp256k1_ecdsa_sig_sign(secp256k1_ecdsa_sig_t *sig, const secp256k1_scalar_t *seckey, const secp256k1_scalar_t *message, const secp256k1_scalar_t *nonce, int *recid);
-static int secp256k1_ecdsa_sig_recover(const secp256k1_ecdsa_sig_t *sig, secp256k1_ge_t *pubkey, const secp256k1_scalar_t *message, int recid);
+static int secp256k1_ecdsa_sig_verify(const secp256k1_ecmult_context_t *ctx, const secp256k1_ecdsa_sig_t *sig, const secp256k1_ge_t *pubkey, const secp256k1_scalar_t *message);
+static int secp256k1_ecdsa_sig_sign(const secp256k1_ecmult_gen_context_t *ctx, secp256k1_ecdsa_sig_t *sig, const secp256k1_scalar_t *seckey, const secp256k1_scalar_t *message, const secp256k1_scalar_t *nonce, int *recid);
+static int secp256k1_ecdsa_sig_recover(const secp256k1_ecmult_context_t *ctx, const secp256k1_ecdsa_sig_t *sig, secp256k1_ge_t *pubkey, const secp256k1_scalar_t *message, int recid);
#endif
diff --git a/src/secp256k1/src/ecdsa_impl.h b/src/secp256k1/src/ecdsa_impl.h
index 1a77649390..ed1d228189 100644
--- a/src/secp256k1/src/ecdsa_impl.h
+++ b/src/secp256k1/src/ecdsa_impl.h
@@ -53,35 +53,59 @@ static int secp256k1_ecdsa_sig_parse(secp256k1_ecdsa_sig_t *r, const unsigned ch
int lenr;
int lens;
int overflow;
- if (sig[0] != 0x30) return 0;
+ if (sig[0] != 0x30) {
+ return 0;
+ }
lenr = sig[3];
- if (5+lenr >= size) return 0;
+ if (5+lenr >= size) {
+ return 0;
+ }
lens = sig[lenr+5];
- if (sig[1] != lenr+lens+4) return 0;
- if (lenr+lens+6 > size) return 0;
- if (sig[2] != 0x02) return 0;
- if (lenr == 0) return 0;
- if (sig[lenr+4] != 0x02) return 0;
- if (lens == 0) return 0;
+ if (sig[1] != lenr+lens+4) {
+ return 0;
+ }
+ if (lenr+lens+6 > size) {
+ return 0;
+ }
+ if (sig[2] != 0x02) {
+ return 0;
+ }
+ if (lenr == 0) {
+ return 0;
+ }
+ if (sig[lenr+4] != 0x02) {
+ return 0;
+ }
+ if (lens == 0) {
+ return 0;
+ }
sp = sig + 6 + lenr;
while (lens > 0 && sp[0] == 0) {
lens--;
sp++;
}
- if (lens > 32) return 0;
+ if (lens > 32) {
+ return 0;
+ }
rp = sig + 4;
while (lenr > 0 && rp[0] == 0) {
lenr--;
rp++;
}
- if (lenr > 32) return 0;
+ if (lenr > 32) {
+ return 0;
+ }
memcpy(ra + 32 - lenr, rp, lenr);
memcpy(sa + 32 - lens, sp, lens);
overflow = 0;
secp256k1_scalar_set_b32(&r->r, ra, &overflow);
- if (overflow) return 0;
+ if (overflow) {
+ return 0;
+ }
secp256k1_scalar_set_b32(&r->s, sa, &overflow);
- if (overflow) return 0;
+ if (overflow) {
+ return 0;
+ }
return 1;
}
@@ -93,8 +117,9 @@ static int secp256k1_ecdsa_sig_serialize(unsigned char *sig, int *size, const se
secp256k1_scalar_get_b32(&s[1], &a->s);
while (lenR > 1 && rp[0] == 0 && rp[1] < 0x80) { lenR--; rp++; }
while (lenS > 1 && sp[0] == 0 && sp[1] < 0x80) { lenS--; sp++; }
- if (*size < 6+lenS+lenR)
+ if (*size < 6+lenS+lenR) {
return 0;
+ }
*size = 6 + lenS + lenR;
sig[0] = 0x30;
sig[1] = 4 + lenS + lenR;
@@ -107,21 +132,22 @@ static int secp256k1_ecdsa_sig_serialize(unsigned char *sig, int *size, const se
return 1;
}
-static int secp256k1_ecdsa_sig_verify(const secp256k1_ecdsa_sig_t *sig, const secp256k1_ge_t *pubkey, const secp256k1_scalar_t *message) {
+static int secp256k1_ecdsa_sig_verify(const secp256k1_ecmult_context_t *ctx, const secp256k1_ecdsa_sig_t *sig, const secp256k1_ge_t *pubkey, const secp256k1_scalar_t *message) {
unsigned char c[32];
secp256k1_scalar_t sn, u1, u2;
secp256k1_fe_t xr;
secp256k1_gej_t pubkeyj;
secp256k1_gej_t pr;
- if (secp256k1_scalar_is_zero(&sig->r) || secp256k1_scalar_is_zero(&sig->s))
+ if (secp256k1_scalar_is_zero(&sig->r) || secp256k1_scalar_is_zero(&sig->s)) {
return 0;
+ }
secp256k1_scalar_inverse_var(&sn, &sig->s);
secp256k1_scalar_mul(&u1, &sn, message);
secp256k1_scalar_mul(&u2, &sn, &sig->r);
secp256k1_gej_set_ge(&pubkeyj, pubkey);
- secp256k1_ecmult(&pr, &pubkeyj, &u2, &u1);
+ secp256k1_ecmult(ctx, &pr, &pubkeyj, &u2, &u1);
if (secp256k1_gej_is_infinity(&pr)) {
return 0;
}
@@ -160,7 +186,7 @@ static int secp256k1_ecdsa_sig_verify(const secp256k1_ecdsa_sig_t *sig, const se
return 0;
}
-static int secp256k1_ecdsa_sig_recover(const secp256k1_ecdsa_sig_t *sig, secp256k1_ge_t *pubkey, const secp256k1_scalar_t *message, int recid) {
+static int secp256k1_ecdsa_sig_recover(const secp256k1_ecmult_context_t *ctx, const secp256k1_ecdsa_sig_t *sig, secp256k1_ge_t *pubkey, const secp256k1_scalar_t *message, int recid) {
unsigned char brx[32];
secp256k1_fe_t fx;
secp256k1_ge_t x;
@@ -168,36 +194,39 @@ static int secp256k1_ecdsa_sig_recover(const secp256k1_ecdsa_sig_t *sig, secp256
secp256k1_scalar_t rn, u1, u2;
secp256k1_gej_t qj;
- if (secp256k1_scalar_is_zero(&sig->r) || secp256k1_scalar_is_zero(&sig->s))
+ if (secp256k1_scalar_is_zero(&sig->r) || secp256k1_scalar_is_zero(&sig->s)) {
return 0;
+ }
secp256k1_scalar_get_b32(brx, &sig->r);
VERIFY_CHECK(secp256k1_fe_set_b32(&fx, brx)); /* brx comes from a scalar, so is less than the order; certainly less than p */
if (recid & 2) {
- if (secp256k1_fe_cmp_var(&fx, &secp256k1_ecdsa_const_p_minus_order) >= 0)
+ if (secp256k1_fe_cmp_var(&fx, &secp256k1_ecdsa_const_p_minus_order) >= 0) {
return 0;
+ }
secp256k1_fe_add(&fx, &secp256k1_ecdsa_const_order_as_fe);
}
- if (!secp256k1_ge_set_xo_var(&x, &fx, recid & 1))
+ if (!secp256k1_ge_set_xo_var(&x, &fx, recid & 1)) {
return 0;
+ }
secp256k1_gej_set_ge(&xj, &x);
secp256k1_scalar_inverse_var(&rn, &sig->r);
secp256k1_scalar_mul(&u1, &rn, message);
secp256k1_scalar_negate(&u1, &u1);
secp256k1_scalar_mul(&u2, &rn, &sig->s);
- secp256k1_ecmult(&qj, &xj, &u2, &u1);
+ secp256k1_ecmult(ctx, &qj, &xj, &u2, &u1);
secp256k1_ge_set_gej_var(pubkey, &qj);
return !secp256k1_gej_is_infinity(&qj);
}
-static int secp256k1_ecdsa_sig_sign(secp256k1_ecdsa_sig_t *sig, const secp256k1_scalar_t *seckey, const secp256k1_scalar_t *message, const secp256k1_scalar_t *nonce, int *recid) {
+static int secp256k1_ecdsa_sig_sign(const secp256k1_ecmult_gen_context_t *ctx, secp256k1_ecdsa_sig_t *sig, const secp256k1_scalar_t *seckey, const secp256k1_scalar_t *message, const secp256k1_scalar_t *nonce, int *recid) {
unsigned char b[32];
secp256k1_gej_t rp;
secp256k1_ge_t r;
secp256k1_scalar_t n;
int overflow = 0;
- secp256k1_ecmult_gen(&rp, nonce);
+ secp256k1_ecmult_gen(ctx, &rp, nonce);
secp256k1_ge_set_gej(&r, &rp);
secp256k1_fe_normalize(&r.x);
secp256k1_fe_normalize(&r.y);
@@ -209,8 +238,9 @@ static int secp256k1_ecdsa_sig_sign(secp256k1_ecdsa_sig_t *sig, const secp256k1_
secp256k1_ge_clear(&r);
return 0;
}
- if (recid)
+ if (recid) {
*recid = (overflow ? 2 : 0) | (secp256k1_fe_is_odd(&r.y) ? 1 : 0);
+ }
secp256k1_scalar_mul(&n, &sig->r, seckey);
secp256k1_scalar_add(&n, &n, message);
secp256k1_scalar_inverse(&sig->s, nonce);
@@ -218,12 +248,14 @@ static int secp256k1_ecdsa_sig_sign(secp256k1_ecdsa_sig_t *sig, const secp256k1_
secp256k1_scalar_clear(&n);
secp256k1_gej_clear(&rp);
secp256k1_ge_clear(&r);
- if (secp256k1_scalar_is_zero(&sig->s))
+ if (secp256k1_scalar_is_zero(&sig->s)) {
return 0;
+ }
if (secp256k1_scalar_is_high(&sig->s)) {
secp256k1_scalar_negate(&sig->s, &sig->s);
- if (recid)
+ if (recid) {
*recid ^= 1;
+ }
}
return 1;
}
diff --git a/src/secp256k1/src/eckey.h b/src/secp256k1/src/eckey.h
index 6de5dc0a59..53b818485e 100644
--- a/src/secp256k1/src/eckey.h
+++ b/src/secp256k1/src/eckey.h
@@ -9,16 +9,18 @@
#include "group.h"
#include "scalar.h"
+#include "ecmult.h"
+#include "ecmult_gen.h"
static int secp256k1_eckey_pubkey_parse(secp256k1_ge_t *elem, const unsigned char *pub, int size);
static int secp256k1_eckey_pubkey_serialize(secp256k1_ge_t *elem, unsigned char *pub, int *size, int compressed);
static int secp256k1_eckey_privkey_parse(secp256k1_scalar_t *key, const unsigned char *privkey, int privkeylen);
-static int secp256k1_eckey_privkey_serialize(unsigned char *privkey, int *privkeylen, const secp256k1_scalar_t *key, int compressed);
+static int secp256k1_eckey_privkey_serialize(const secp256k1_ecmult_gen_context_t *ctx, unsigned char *privkey, int *privkeylen, const secp256k1_scalar_t *key, int compressed);
static int secp256k1_eckey_privkey_tweak_add(secp256k1_scalar_t *key, const secp256k1_scalar_t *tweak);
-static int secp256k1_eckey_pubkey_tweak_add(secp256k1_ge_t *key, const secp256k1_scalar_t *tweak);
+static int secp256k1_eckey_pubkey_tweak_add(const secp256k1_ecmult_context_t *ctx, secp256k1_ge_t *key, const secp256k1_scalar_t *tweak);
static int secp256k1_eckey_privkey_tweak_mul(secp256k1_scalar_t *key, const secp256k1_scalar_t *tweak);
-static int secp256k1_eckey_pubkey_tweak_mul(secp256k1_ge_t *key, const secp256k1_scalar_t *tweak);
+static int secp256k1_eckey_pubkey_tweak_mul(const secp256k1_ecmult_context_t *ctx, secp256k1_ge_t *key, const secp256k1_scalar_t *tweak);
#endif
diff --git a/src/secp256k1/src/eckey_impl.h b/src/secp256k1/src/eckey_impl.h
index 3e06d05b47..a332bd34ec 100644
--- a/src/secp256k1/src/eckey_impl.h
+++ b/src/secp256k1/src/eckey_impl.h
@@ -24,8 +24,9 @@ static int secp256k1_eckey_pubkey_parse(secp256k1_ge_t *elem, const unsigned cha
return 0;
}
secp256k1_ge_set_xy(elem, &x, &y);
- if ((pub[0] == 0x06 || pub[0] == 0x07) && secp256k1_fe_is_odd(&y) != (pub[0] == 0x07))
+ if ((pub[0] == 0x06 || pub[0] == 0x07) && secp256k1_fe_is_odd(&y) != (pub[0] == 0x07)) {
return 0;
+ }
return secp256k1_ge_is_valid_var(elem);
} else {
return 0;
@@ -57,40 +58,47 @@ static int secp256k1_eckey_privkey_parse(secp256k1_scalar_t *key, const unsigned
int len = 0;
int overflow = 0;
/* sequence header */
- if (end < privkey+1 || *privkey != 0x30)
+ if (end < privkey+1 || *privkey != 0x30) {
return 0;
+ }
privkey++;
/* sequence length constructor */
- if (end < privkey+1 || !(*privkey & 0x80))
+ if (end < privkey+1 || !(*privkey & 0x80)) {
return 0;
+ }
lenb = *privkey & ~0x80; privkey++;
- if (lenb < 1 || lenb > 2)
+ if (lenb < 1 || lenb > 2) {
return 0;
- if (end < privkey+lenb)
+ }
+ if (end < privkey+lenb) {
return 0;
+ }
/* sequence length */
len = privkey[lenb-1] | (lenb > 1 ? privkey[lenb-2] << 8 : 0);
privkey += lenb;
- if (end < privkey+len)
+ if (end < privkey+len) {
return 0;
+ }
/* sequence element 0: version number (=1) */
- if (end < privkey+3 || privkey[0] != 0x02 || privkey[1] != 0x01 || privkey[2] != 0x01)
+ if (end < privkey+3 || privkey[0] != 0x02 || privkey[1] != 0x01 || privkey[2] != 0x01) {
return 0;
+ }
privkey += 3;
/* sequence element 1: octet string, up to 32 bytes */
- if (end < privkey+2 || privkey[0] != 0x04 || privkey[1] > 0x20 || end < privkey+2+privkey[1])
+ if (end < privkey+2 || privkey[0] != 0x04 || privkey[1] > 0x20 || end < privkey+2+privkey[1]) {
return 0;
+ }
memcpy(c + 32 - privkey[1], privkey + 2, privkey[1]);
secp256k1_scalar_set_b32(key, c, &overflow);
memset(c, 0, 32);
return !overflow;
}
-static int secp256k1_eckey_privkey_serialize(unsigned char *privkey, int *privkeylen, const secp256k1_scalar_t *key, int compressed) {
+static int secp256k1_eckey_privkey_serialize(const secp256k1_ecmult_gen_context_t *ctx, unsigned char *privkey, int *privkeylen, const secp256k1_scalar_t *key, int compressed) {
secp256k1_gej_t rp;
secp256k1_ge_t r;
int pubkeylen = 0;
- secp256k1_ecmult_gen(&rp, key);
+ secp256k1_ecmult_gen(ctx, &rp, key);
secp256k1_ge_set_gej(&r, &rp);
if (compressed) {
static const unsigned char begin[] = {
@@ -148,41 +156,45 @@ static int secp256k1_eckey_privkey_serialize(unsigned char *privkey, int *privke
static int secp256k1_eckey_privkey_tweak_add(secp256k1_scalar_t *key, const secp256k1_scalar_t *tweak) {
secp256k1_scalar_add(key, key, tweak);
- if (secp256k1_scalar_is_zero(key))
+ if (secp256k1_scalar_is_zero(key)) {
return 0;
+ }
return 1;
}
-static int secp256k1_eckey_pubkey_tweak_add(secp256k1_ge_t *key, const secp256k1_scalar_t *tweak) {
+static int secp256k1_eckey_pubkey_tweak_add(const secp256k1_ecmult_context_t *ctx, secp256k1_ge_t *key, const secp256k1_scalar_t *tweak) {
secp256k1_gej_t pt;
secp256k1_scalar_t one;
secp256k1_gej_set_ge(&pt, key);
secp256k1_scalar_set_int(&one, 1);
- secp256k1_ecmult(&pt, &pt, &one, tweak);
+ secp256k1_ecmult(ctx, &pt, &pt, &one, tweak);
- if (secp256k1_gej_is_infinity(&pt))
+ if (secp256k1_gej_is_infinity(&pt)) {
return 0;
+ }
secp256k1_ge_set_gej(key, &pt);
return 1;
}
static int secp256k1_eckey_privkey_tweak_mul(secp256k1_scalar_t *key, const secp256k1_scalar_t *tweak) {
- if (secp256k1_scalar_is_zero(tweak))
+ if (secp256k1_scalar_is_zero(tweak)) {
return 0;
+ }
secp256k1_scalar_mul(key, key, tweak);
return 1;
}
-static int secp256k1_eckey_pubkey_tweak_mul(secp256k1_ge_t *key, const secp256k1_scalar_t *tweak) {
+static int secp256k1_eckey_pubkey_tweak_mul(const secp256k1_ecmult_context_t *ctx, secp256k1_ge_t *key, const secp256k1_scalar_t *tweak) {
secp256k1_scalar_t zero;
secp256k1_gej_t pt;
- if (secp256k1_scalar_is_zero(tweak))
+ if (secp256k1_scalar_is_zero(tweak)) {
return 0;
+ }
secp256k1_scalar_set_int(&zero, 0);
secp256k1_gej_set_ge(&pt, key);
- secp256k1_ecmult(&pt, &pt, tweak, &zero);
+ secp256k1_ecmult(ctx, &pt, &pt, tweak, &zero);
secp256k1_ge_set_gej(key, &pt);
return 1;
}
diff --git a/src/secp256k1/src/ecmult.h b/src/secp256k1/src/ecmult.h
index 15a7100a4a..bab9e4ef52 100644
--- a/src/secp256k1/src/ecmult.h
+++ b/src/secp256k1/src/ecmult.h
@@ -10,10 +10,22 @@
#include "num.h"
#include "group.h"
-static void secp256k1_ecmult_start(void);
-static void secp256k1_ecmult_stop(void);
+typedef struct {
+ /* For accelerating the computation of a*P + b*G: */
+ secp256k1_ge_storage_t (*pre_g)[]; /* odd multiples of the generator */
+#ifdef USE_ENDOMORPHISM
+ secp256k1_ge_storage_t (*pre_g_128)[]; /* odd multiples of 2^128*generator */
+#endif
+} secp256k1_ecmult_context_t;
+
+static void secp256k1_ecmult_context_init(secp256k1_ecmult_context_t *ctx);
+static void secp256k1_ecmult_context_build(secp256k1_ecmult_context_t *ctx);
+static void secp256k1_ecmult_context_clone(secp256k1_ecmult_context_t *dst,
+ const secp256k1_ecmult_context_t *src);
+static void secp256k1_ecmult_context_clear(secp256k1_ecmult_context_t *ctx);
+static int secp256k1_ecmult_context_is_built(const secp256k1_ecmult_context_t *ctx);
/** Double multiply: R = na*A + ng*G */
-static void secp256k1_ecmult(secp256k1_gej_t *r, const secp256k1_gej_t *a, const secp256k1_scalar_t *na, const secp256k1_scalar_t *ng);
+static void secp256k1_ecmult(const secp256k1_ecmult_context_t *ctx, secp256k1_gej_t *r, const secp256k1_gej_t *a, const secp256k1_scalar_t *na, const secp256k1_scalar_t *ng);
#endif
diff --git a/src/secp256k1/src/ecmult_gen.h b/src/secp256k1/src/ecmult_gen.h
index 42f822f9ce..3745633c47 100644
--- a/src/secp256k1/src/ecmult_gen.h
+++ b/src/secp256k1/src/ecmult_gen.h
@@ -10,10 +10,34 @@
#include "scalar.h"
#include "group.h"
-static void secp256k1_ecmult_gen_start(void);
-static void secp256k1_ecmult_gen_stop(void);
+typedef struct {
+ /* For accelerating the computation of a*G:
+ * To harden against timing attacks, use the following mechanism:
+ * * Break up the multiplicand into groups of 4 bits, called n_0, n_1, n_2, ..., n_63.
+ * * Compute sum(n_i * 16^i * G + U_i, i=0..63), where:
+ * * U_i = U * 2^i (for i=0..62)
+ * * U_i = U * (1-2^63) (for i=63)
+ * where U is a point with no known corresponding scalar. Note that sum(U_i, i=0..63) = 0.
+ * For each i, and each of the 16 possible values of n_i, (n_i * 16^i * G + U_i) is
+ * precomputed (call it prec(i, n_i)). The formula now becomes sum(prec(i, n_i), i=0..63).
+ * None of the resulting prec group elements have a known scalar, and neither do any of
+ * the intermediate sums while computing a*G.
+ */
+ secp256k1_ge_storage_t (*prec)[64][16]; /* prec[j][i] = 16^j * i * G + U_i */
+ secp256k1_scalar_t blind;
+ secp256k1_gej_t initial;
+} secp256k1_ecmult_gen_context_t;
+
+static void secp256k1_ecmult_gen_context_init(secp256k1_ecmult_gen_context_t* ctx);
+static void secp256k1_ecmult_gen_context_build(secp256k1_ecmult_gen_context_t* ctx);
+static void secp256k1_ecmult_gen_context_clone(secp256k1_ecmult_gen_context_t *dst,
+ const secp256k1_ecmult_gen_context_t* src);
+static void secp256k1_ecmult_gen_context_clear(secp256k1_ecmult_gen_context_t* ctx);
+static int secp256k1_ecmult_gen_context_is_built(const secp256k1_ecmult_gen_context_t* ctx);
/** Multiply with the generator: R = a*G */
-static void secp256k1_ecmult_gen(secp256k1_gej_t *r, const secp256k1_scalar_t *a);
+static void secp256k1_ecmult_gen(const secp256k1_ecmult_gen_context_t* ctx, secp256k1_gej_t *r, const secp256k1_scalar_t *a);
+
+static void secp256k1_ecmult_gen_blind(secp256k1_ecmult_gen_context_t *ctx, const unsigned char *seed32);
#endif
diff --git a/src/secp256k1/src/ecmult_gen_impl.h b/src/secp256k1/src/ecmult_gen_impl.h
index 849452c7a1..4697753ac8 100644
--- a/src/secp256k1/src/ecmult_gen_impl.h
+++ b/src/secp256k1/src/ecmult_gen_impl.h
@@ -1,5 +1,5 @@
/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Copyright (c) 2013, 2014, 2015 Pieter Wuille, Gregory Maxwell *
* Distributed under the MIT software license, see the accompanying *
* file COPYING or http://www.opensource.org/licenses/mit-license.php.*
**********************************************************************/
@@ -10,36 +10,23 @@
#include "scalar.h"
#include "group.h"
#include "ecmult_gen.h"
+#include "hash_impl.h"
-typedef struct {
- /* For accelerating the computation of a*G:
- * To harden against timing attacks, use the following mechanism:
- * * Break up the multiplicand into groups of 4 bits, called n_0, n_1, n_2, ..., n_63.
- * * Compute sum(n_i * 16^i * G + U_i, i=0..63), where:
- * * U_i = U * 2^i (for i=0..62)
- * * U_i = U * (1-2^63) (for i=63)
- * where U is a point with no known corresponding scalar. Note that sum(U_i, i=0..63) = 0.
- * For each i, and each of the 16 possible values of n_i, (n_i * 16^i * G + U_i) is
- * precomputed (call it prec(i, n_i)). The formula now becomes sum(prec(i, n_i), i=0..63).
- * None of the resulting prec group elements have a known scalar, and neither do any of
- * the intermediate sums while computing a*G.
- */
- secp256k1_ge_storage_t prec[64][16]; /* prec[j][i] = 16^j * i * G + U_i */
-} secp256k1_ecmult_gen_consts_t;
-
-static const secp256k1_ecmult_gen_consts_t *secp256k1_ecmult_gen_consts = NULL;
+static void secp256k1_ecmult_gen_context_init(secp256k1_ecmult_gen_context_t *ctx) {
+ ctx->prec = NULL;
+}
-static void secp256k1_ecmult_gen_start(void) {
+static void secp256k1_ecmult_gen_context_build(secp256k1_ecmult_gen_context_t *ctx) {
secp256k1_ge_t prec[1024];
secp256k1_gej_t gj;
secp256k1_gej_t nums_gej;
- secp256k1_ecmult_gen_consts_t *ret;
int i, j;
- if (secp256k1_ecmult_gen_consts != NULL)
+
+ if (ctx->prec != NULL) {
return;
+ }
- /* Allocate the precomputation table. */
- ret = (secp256k1_ecmult_gen_consts_t*)checked_malloc(sizeof(secp256k1_ecmult_gen_consts_t));
+ ctx->prec = (secp256k1_ge_storage_t (*)[64][16])checked_malloc(sizeof(*ctx->prec));
/* get the generator */
secp256k1_gej_set_ge(&gj, &secp256k1_ge_const_g);
@@ -85,42 +72,113 @@ static void secp256k1_ecmult_gen_start(void) {
}
for (j = 0; j < 64; j++) {
for (i = 0; i < 16; i++) {
- secp256k1_ge_to_storage(&ret->prec[j][i], &prec[j*16 + i]);
+ secp256k1_ge_to_storage(&(*ctx->prec)[j][i], &prec[j*16 + i]);
}
}
+ secp256k1_ecmult_gen_blind(ctx, NULL);
+}
- /* Set the global pointer to the precomputation table. */
- secp256k1_ecmult_gen_consts = ret;
+static int secp256k1_ecmult_gen_context_is_built(const secp256k1_ecmult_gen_context_t* ctx) {
+ return ctx->prec != NULL;
}
-static void secp256k1_ecmult_gen_stop(void) {
- secp256k1_ecmult_gen_consts_t *c;
- if (secp256k1_ecmult_gen_consts == NULL)
- return;
+static void secp256k1_ecmult_gen_context_clone(secp256k1_ecmult_gen_context_t *dst,
+ const secp256k1_ecmult_gen_context_t *src) {
+ if (src->prec == NULL) {
+ dst->prec = NULL;
+ } else {
+ dst->prec = (secp256k1_ge_storage_t (*)[64][16])checked_malloc(sizeof(*dst->prec));
+ memcpy(dst->prec, src->prec, sizeof(*dst->prec));
+ dst->initial = src->initial;
+ dst->blind = src->blind;
+ }
+}
- c = (secp256k1_ecmult_gen_consts_t*)secp256k1_ecmult_gen_consts;
- secp256k1_ecmult_gen_consts = NULL;
- free(c);
+static void secp256k1_ecmult_gen_context_clear(secp256k1_ecmult_gen_context_t *ctx) {
+ free(ctx->prec);
+ secp256k1_scalar_clear(&ctx->blind);
+ secp256k1_gej_clear(&ctx->initial);
+ ctx->prec = NULL;
}
-static void secp256k1_ecmult_gen(secp256k1_gej_t *r, const secp256k1_scalar_t *gn) {
- const secp256k1_ecmult_gen_consts_t *c = secp256k1_ecmult_gen_consts;
+static void secp256k1_ecmult_gen(const secp256k1_ecmult_gen_context_t *ctx, secp256k1_gej_t *r, const secp256k1_scalar_t *gn) {
secp256k1_ge_t add;
secp256k1_ge_storage_t adds;
+ secp256k1_scalar_t gnb;
int bits;
int i, j;
- secp256k1_gej_set_infinity(r);
+ memset(&adds, 0, sizeof(adds));
+ *r = ctx->initial;
+ /* Blind scalar/point multiplication by computing (n-b)G + bG instead of nG. */
+ secp256k1_scalar_add(&gnb, gn, &ctx->blind);
add.infinity = 0;
for (j = 0; j < 64; j++) {
- bits = secp256k1_scalar_get_bits(gn, j * 4, 4);
+ bits = secp256k1_scalar_get_bits(&gnb, j * 4, 4);
for (i = 0; i < 16; i++) {
- secp256k1_ge_storage_cmov(&adds, &c->prec[j][i], i == bits);
+ /** This uses a conditional move to avoid any secret data in array indexes.
+ * _Any_ use of secret indexes has been demonstrated to result in timing
+ * sidechannels, even when the cache-line access patterns are uniform.
+ * See also:
+ * "A word of warning", CHES 2013 Rump Session, by Daniel J. Bernstein and Peter Schwabe
+ * (https://cryptojedi.org/peter/data/chesrump-20130822.pdf) and
+ * "Cache Attacks and Countermeasures: the Case of AES", RSA 2006,
+ * by Dag Arne Osvik, Adi Shamir, and Eran Tromer
+ * (http://www.tau.ac.il/~tromer/papers/cache.pdf)
+ */
+ secp256k1_ge_storage_cmov(&adds, &(*ctx->prec)[j][i], i == bits);
}
secp256k1_ge_from_storage(&add, &adds);
secp256k1_gej_add_ge(r, r, &add);
}
bits = 0;
secp256k1_ge_clear(&add);
+ secp256k1_scalar_clear(&gnb);
+}
+
+/* Setup blinding values for secp256k1_ecmult_gen. */
+static void secp256k1_ecmult_gen_blind(secp256k1_ecmult_gen_context_t *ctx, const unsigned char *seed32) {
+ secp256k1_scalar_t b;
+ secp256k1_gej_t gb;
+ secp256k1_fe_t s;
+ unsigned char nonce32[32];
+ secp256k1_rfc6979_hmac_sha256_t rng;
+ int retry;
+ if (!seed32) {
+ /* When seed is NULL, reset the initial point and blinding value. */
+ secp256k1_gej_set_ge(&ctx->initial, &secp256k1_ge_const_g);
+ secp256k1_gej_neg(&ctx->initial, &ctx->initial);
+ secp256k1_scalar_set_int(&ctx->blind, 1);
+ }
+ /* The prior blinding value (if not reset) is chained forward by including it in the hash. */
+ secp256k1_scalar_get_b32(nonce32, &ctx->blind);
+ /** Using a CSPRNG allows a failure free interface, avoids needing large amounts of random data,
+ * and guards against weak or adversarial seeds. This is a simpler and safer interface than
+ * asking the caller for blinding values directly and expecting them to retry on failure.
+ */
+ secp256k1_rfc6979_hmac_sha256_initialize(&rng, seed32 ? seed32 : nonce32, 32, nonce32, 32, NULL, 0);
+ /* Retry for out of range results to achieve uniformity. */
+ do {
+ secp256k1_rfc6979_hmac_sha256_generate(&rng, nonce32, 32);
+ retry = !secp256k1_fe_set_b32(&s, nonce32);
+ retry |= secp256k1_fe_is_zero(&s);
+ } while (retry);
+ /* Randomize the projection to defend against multiplier sidechannels. */
+ secp256k1_gej_rescale(&ctx->initial, &s);
+ secp256k1_fe_clear(&s);
+ do {
+ secp256k1_rfc6979_hmac_sha256_generate(&rng, nonce32, 32);
+ secp256k1_scalar_set_b32(&b, nonce32, &retry);
+ /* A blinding value of 0 works, but would undermine the projection hardening. */
+ retry |= secp256k1_scalar_is_zero(&b);
+ } while (retry);
+ secp256k1_rfc6979_hmac_sha256_finalize(&rng);
+ memset(nonce32, 0, 32);
+ secp256k1_ecmult_gen(ctx, &gb, &b);
+ secp256k1_scalar_negate(&b, &b);
+ ctx->blind = b;
+ ctx->initial = gb;
+ secp256k1_scalar_clear(&b);
+ secp256k1_gej_clear(&gb);
}
#endif
diff --git a/src/secp256k1/src/ecmult_impl.h b/src/secp256k1/src/ecmult_impl.h
index ece0b0a459..1b2856f83d 100644
--- a/src/secp256k1/src/ecmult_impl.h
+++ b/src/secp256k1/src/ecmult_impl.h
@@ -41,16 +41,17 @@ static void secp256k1_ecmult_table_precomp_gej_var(secp256k1_gej_t *pre, const s
int i;
pre[0] = *a;
secp256k1_gej_double_var(&d, &pre[0]);
- for (i = 1; i < (1 << (w-2)); i++)
+ for (i = 1; i < (1 << (w-2)); i++) {
secp256k1_gej_add_var(&pre[i], &d, &pre[i-1]);
+ }
}
static void secp256k1_ecmult_table_precomp_ge_storage_var(secp256k1_ge_storage_t *pre, const secp256k1_gej_t *a, int w) {
secp256k1_gej_t d;
int i;
const int table_size = 1 << (w-2);
- secp256k1_gej_t *prej = checked_malloc(sizeof(secp256k1_gej_t) * table_size);
- secp256k1_ge_t *prea = checked_malloc(sizeof(secp256k1_ge_t) * table_size);
+ secp256k1_gej_t *prej = (secp256k1_gej_t *)checked_malloc(sizeof(secp256k1_gej_t) * table_size);
+ secp256k1_ge_t *prea = (secp256k1_ge_t *)checked_malloc(sizeof(secp256k1_ge_t) * table_size);
prej[0] = *a;
secp256k1_gej_double_var(&d, a);
for (i = 1; i < table_size; i++) {
@@ -73,73 +74,93 @@ static void secp256k1_ecmult_table_precomp_ge_storage_var(secp256k1_ge_storage_t
VERIFY_CHECK(((n) & 1) == 1); \
VERIFY_CHECK((n) >= -((1 << ((w)-1)) - 1)); \
VERIFY_CHECK((n) <= ((1 << ((w)-1)) - 1)); \
- if ((n) > 0) \
+ if ((n) > 0) { \
*(r) = (pre)[((n)-1)/2]; \
- else \
+ } else { \
secp256k1_gej_neg((r), &(pre)[(-(n)-1)/2]); \
+ } \
} while(0)
#define ECMULT_TABLE_GET_GE_STORAGE(r,pre,n,w) do { \
VERIFY_CHECK(((n) & 1) == 1); \
VERIFY_CHECK((n) >= -((1 << ((w)-1)) - 1)); \
VERIFY_CHECK((n) <= ((1 << ((w)-1)) - 1)); \
- if ((n) > 0) \
+ if ((n) > 0) { \
secp256k1_ge_from_storage((r), &(pre)[((n)-1)/2]); \
- else {\
+ } else { \
secp256k1_ge_from_storage((r), &(pre)[(-(n)-1)/2]); \
secp256k1_ge_neg((r), (r)); \
} \
} while(0)
-typedef struct {
- /* For accelerating the computation of a*P + b*G: */
- secp256k1_ge_storage_t pre_g[ECMULT_TABLE_SIZE(WINDOW_G)]; /* odd multiples of the generator */
+static void secp256k1_ecmult_context_init(secp256k1_ecmult_context_t *ctx) {
+ ctx->pre_g = NULL;
#ifdef USE_ENDOMORPHISM
- secp256k1_ge_storage_t pre_g_128[ECMULT_TABLE_SIZE(WINDOW_G)]; /* odd multiples of 2^128*generator */
+ ctx->pre_g_128 = NULL;
#endif
-} secp256k1_ecmult_consts_t;
-
-static const secp256k1_ecmult_consts_t *secp256k1_ecmult_consts = NULL;
+}
-static void secp256k1_ecmult_start(void) {
+static void secp256k1_ecmult_context_build(secp256k1_ecmult_context_t *ctx) {
secp256k1_gej_t gj;
- secp256k1_ecmult_consts_t *ret;
- if (secp256k1_ecmult_consts != NULL)
- return;
- /* Allocate the precomputation table. */
- ret = (secp256k1_ecmult_consts_t*)checked_malloc(sizeof(secp256k1_ecmult_consts_t));
+ if (ctx->pre_g != NULL) {
+ return;
+ }
/* get the generator */
secp256k1_gej_set_ge(&gj, &secp256k1_ge_const_g);
+ ctx->pre_g = (secp256k1_ge_storage_t (*)[])checked_malloc(sizeof((*ctx->pre_g)[0]) * ECMULT_TABLE_SIZE(WINDOW_G));
/* precompute the tables with odd multiples */
- secp256k1_ecmult_table_precomp_ge_storage_var(ret->pre_g, &gj, WINDOW_G);
+ secp256k1_ecmult_table_precomp_ge_storage_var(*ctx->pre_g, &gj, WINDOW_G);
#ifdef USE_ENDOMORPHISM
{
secp256k1_gej_t g_128j;
int i;
+
+ ctx->pre_g_128 = (secp256k1_ge_storage_t (*)[])checked_malloc(sizeof((*ctx->pre_g_128)[0]) * ECMULT_TABLE_SIZE(WINDOW_G));
+
/* calculate 2^128*generator */
g_128j = gj;
- for (i = 0; i < 128; i++)
+ for (i = 0; i < 128; i++) {
secp256k1_gej_double_var(&g_128j, &g_128j);
- secp256k1_ecmult_table_precomp_ge_storage_var(ret->pre_g_128, &g_128j, WINDOW_G);
+ }
+ secp256k1_ecmult_table_precomp_ge_storage_var(*ctx->pre_g_128, &g_128j, WINDOW_G);
}
#endif
+}
- /* Set the global pointer to the precomputation table. */
- secp256k1_ecmult_consts = ret;
+static void secp256k1_ecmult_context_clone(secp256k1_ecmult_context_t *dst,
+ const secp256k1_ecmult_context_t *src) {
+ if (src->pre_g == NULL) {
+ dst->pre_g = NULL;
+ } else {
+ size_t size = sizeof((*dst->pre_g)[0]) * ECMULT_TABLE_SIZE(WINDOW_G);
+ dst->pre_g = (secp256k1_ge_storage_t (*)[])checked_malloc(size);
+ memcpy(dst->pre_g, src->pre_g, size);
+ }
+#ifdef USE_ENDOMORPHISM
+ if (src->pre_g_128 == NULL) {
+ dst->pre_g_128 = NULL;
+ } else {
+ size_t size = sizeof((*dst->pre_g_128)[0]) * ECMULT_TABLE_SIZE(WINDOW_G);
+ dst->pre_g_128 = (secp256k1_ge_storage_t (*)[])checked_malloc(size);
+ memcpy(dst->pre_g_128, src->pre_g_128, size);
+ }
+#endif
}
-static void secp256k1_ecmult_stop(void) {
- secp256k1_ecmult_consts_t *c;
- if (secp256k1_ecmult_consts == NULL)
- return;
+static int secp256k1_ecmult_context_is_built(const secp256k1_ecmult_context_t *ctx) {
+ return ctx->pre_g != NULL;
+}
- c = (secp256k1_ecmult_consts_t*)secp256k1_ecmult_consts;
- secp256k1_ecmult_consts = NULL;
- free(c);
+static void secp256k1_ecmult_context_clear(secp256k1_ecmult_context_t *ctx) {
+ free(ctx->pre_g);
+#ifdef USE_ENDOMORPHISM
+ free(ctx->pre_g_128);
+#endif
+ secp256k1_ecmult_context_init(ctx);
}
/** Convert a number to WNAF notation. The number becomes represented by sum(2^i * wnaf[i], i=0..bits),
@@ -186,11 +207,10 @@ static int secp256k1_ecmult_wnaf(int *wnaf, const secp256k1_scalar_t *a, int w)
return set_bits;
}
-static void secp256k1_ecmult(secp256k1_gej_t *r, const secp256k1_gej_t *a, const secp256k1_scalar_t *na, const secp256k1_scalar_t *ng) {
+static void secp256k1_ecmult(const secp256k1_ecmult_context_t *ctx, secp256k1_gej_t *r, const secp256k1_gej_t *a, const secp256k1_scalar_t *na, const secp256k1_scalar_t *ng) {
secp256k1_gej_t tmpj;
secp256k1_gej_t pre_a[ECMULT_TABLE_SIZE(WINDOW_A)];
secp256k1_ge_t tmpa;
- const secp256k1_ecmult_consts_t *c = secp256k1_ecmult_consts;
#ifdef USE_ENDOMORPHISM
secp256k1_gej_t pre_a_lam[ECMULT_TABLE_SIZE(WINDOW_A)];
secp256k1_scalar_t na_1, na_lam;
@@ -223,7 +243,9 @@ static void secp256k1_ecmult(secp256k1_gej_t *r, const secp256k1_gej_t *a, const
VERIFY_CHECK(bits_na_1 <= 130);
VERIFY_CHECK(bits_na_lam <= 130);
bits = bits_na_1;
- if (bits_na_lam > bits) bits = bits_na_lam;
+ if (bits_na_lam > bits) {
+ bits = bits_na_lam;
+ }
#else
/* build wnaf representation for na. */
bits_na = secp256k1_ecmult_wnaf(wnaf_na, na, WINDOW_A);
@@ -234,8 +256,9 @@ static void secp256k1_ecmult(secp256k1_gej_t *r, const secp256k1_gej_t *a, const
secp256k1_ecmult_table_precomp_gej_var(pre_a, a, WINDOW_A);
#ifdef USE_ENDOMORPHISM
- for (i = 0; i < ECMULT_TABLE_SIZE(WINDOW_A); i++)
+ for (i = 0; i < ECMULT_TABLE_SIZE(WINDOW_A); i++) {
secp256k1_gej_mul_lambda(&pre_a_lam[i], &pre_a[i]);
+ }
/* split ng into ng_1 and ng_128 (where gn = gn_1 + gn_128*2^128, and gn_1 and gn_128 are ~128 bit) */
secp256k1_scalar_split_128(&ng_1, &ng_128, ng);
@@ -243,11 +266,17 @@ static void secp256k1_ecmult(secp256k1_gej_t *r, const secp256k1_gej_t *a, const
/* Build wnaf representation for ng_1 and ng_128 */
bits_ng_1 = secp256k1_ecmult_wnaf(wnaf_ng_1, &ng_1, WINDOW_G);
bits_ng_128 = secp256k1_ecmult_wnaf(wnaf_ng_128, &ng_128, WINDOW_G);
- if (bits_ng_1 > bits) bits = bits_ng_1;
- if (bits_ng_128 > bits) bits = bits_ng_128;
+ if (bits_ng_1 > bits) {
+ bits = bits_ng_1;
+ }
+ if (bits_ng_128 > bits) {
+ bits = bits_ng_128;
+ }
#else
bits_ng = secp256k1_ecmult_wnaf(wnaf_ng, ng, WINDOW_G);
- if (bits_ng > bits) bits = bits_ng;
+ if (bits_ng > bits) {
+ bits = bits_ng;
+ }
#endif
secp256k1_gej_set_infinity(r);
@@ -265,11 +294,11 @@ static void secp256k1_ecmult(secp256k1_gej_t *r, const secp256k1_gej_t *a, const
secp256k1_gej_add_var(r, r, &tmpj);
}
if (i < bits_ng_1 && (n = wnaf_ng_1[i])) {
- ECMULT_TABLE_GET_GE_STORAGE(&tmpa, c->pre_g, n, WINDOW_G);
+ ECMULT_TABLE_GET_GE_STORAGE(&tmpa, *ctx->pre_g, n, WINDOW_G);
secp256k1_gej_add_ge_var(r, r, &tmpa);
}
if (i < bits_ng_128 && (n = wnaf_ng_128[i])) {
- ECMULT_TABLE_GET_GE_STORAGE(&tmpa, c->pre_g_128, n, WINDOW_G);
+ ECMULT_TABLE_GET_GE_STORAGE(&tmpa, *ctx->pre_g_128, n, WINDOW_G);
secp256k1_gej_add_ge_var(r, r, &tmpa);
}
#else
@@ -278,7 +307,7 @@ static void secp256k1_ecmult(secp256k1_gej_t *r, const secp256k1_gej_t *a, const
secp256k1_gej_add_var(r, r, &tmpj);
}
if (i < bits_ng && (n = wnaf_ng[i])) {
- ECMULT_TABLE_GET_GE_STORAGE(&tmpa, c->pre_g, n, WINDOW_G);
+ ECMULT_TABLE_GET_GE_STORAGE(&tmpa, *ctx->pre_g, n, WINDOW_G);
secp256k1_gej_add_ge_var(r, r, &tmpa);
}
#endif
diff --git a/src/secp256k1/src/field.h b/src/secp256k1/src/field.h
index 9e6d7d3c04..41b280892d 100644
--- a/src/secp256k1/src/field.h
+++ b/src/secp256k1/src/field.h
@@ -113,4 +113,7 @@ static void secp256k1_fe_from_storage(secp256k1_fe_t *r, const secp256k1_fe_stor
/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time. */
static void secp256k1_fe_storage_cmov(secp256k1_fe_storage_t *r, const secp256k1_fe_storage_t *a, int flag);
+/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time. */
+static void secp256k1_fe_cmov(secp256k1_fe_t *r, const secp256k1_fe_t *a, int flag);
+
#endif
diff --git a/src/secp256k1/src/field_10x26_impl.h b/src/secp256k1/src/field_10x26_impl.h
index 0afbb18a4a..871b91f912 100644
--- a/src/secp256k1/src/field_10x26_impl.h
+++ b/src/secp256k1/src/field_10x26_impl.h
@@ -236,8 +236,9 @@ static int secp256k1_fe_normalizes_to_zero_var(secp256k1_fe_t *r) {
z1 = z0 ^ 0x3D0UL;
/* Fast return path should catch the majority of cases */
- if ((z0 != 0UL) & (z1 != 0x3FFFFFFUL))
+ if ((z0 != 0UL) & (z1 != 0x3FFFFFFUL)) {
return 0;
+ }
t1 = r->n[1];
t2 = r->n[2];
@@ -315,8 +316,12 @@ static int secp256k1_fe_cmp_var(const secp256k1_fe_t *a, const secp256k1_fe_t *b
secp256k1_fe_verify(b);
#endif
for (i = 9; i >= 0; i--) {
- if (a->n[i] > b->n[i]) return 1;
- if (a->n[i] < b->n[i]) return -1;
+ if (a->n[i] > b->n[i]) {
+ return 1;
+ }
+ if (a->n[i] < b->n[i]) {
+ return -1;
+ }
}
return 0;
}
@@ -1063,6 +1068,26 @@ static void secp256k1_fe_sqr(secp256k1_fe_t *r, const secp256k1_fe_t *a) {
#endif
}
+static SECP256K1_INLINE void secp256k1_fe_cmov(secp256k1_fe_t *r, const secp256k1_fe_t *a, int flag) {
+ uint32_t mask0, mask1;
+ mask0 = flag + ~((uint32_t)0);
+ mask1 = ~mask0;
+ r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1);
+ r->n[1] = (r->n[1] & mask0) | (a->n[1] & mask1);
+ r->n[2] = (r->n[2] & mask0) | (a->n[2] & mask1);
+ r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1);
+ r->n[4] = (r->n[4] & mask0) | (a->n[4] & mask1);
+ r->n[5] = (r->n[5] & mask0) | (a->n[5] & mask1);
+ r->n[6] = (r->n[6] & mask0) | (a->n[6] & mask1);
+ r->n[7] = (r->n[7] & mask0) | (a->n[7] & mask1);
+ r->n[8] = (r->n[8] & mask0) | (a->n[8] & mask1);
+ r->n[9] = (r->n[9] & mask0) | (a->n[9] & mask1);
+#ifdef VERIFY
+ r->magnitude = (r->magnitude & mask0) | (a->magnitude & mask1);
+ r->normalized = (r->normalized & mask0) | (a->normalized & mask1);
+#endif
+}
+
static SECP256K1_INLINE void secp256k1_fe_storage_cmov(secp256k1_fe_storage_t *r, const secp256k1_fe_storage_t *a, int flag) {
uint32_t mask0, mask1;
mask0 = flag + ~((uint32_t)0);
diff --git a/src/secp256k1/src/field_5x52_impl.h b/src/secp256k1/src/field_5x52_impl.h
index 2f9c8704a8..bda4c3dfc2 100644
--- a/src/secp256k1/src/field_5x52_impl.h
+++ b/src/secp256k1/src/field_5x52_impl.h
@@ -209,8 +209,9 @@ static int secp256k1_fe_normalizes_to_zero_var(secp256k1_fe_t *r) {
z1 = z0 ^ 0x1000003D0ULL;
/* Fast return path should catch the majority of cases */
- if ((z0 != 0ULL) & (z1 != 0xFFFFFFFFFFFFFULL))
+ if ((z0 != 0ULL) & (z1 != 0xFFFFFFFFFFFFFULL)) {
return 0;
+ }
t1 = r->n[1];
t2 = r->n[2];
@@ -277,8 +278,12 @@ static int secp256k1_fe_cmp_var(const secp256k1_fe_t *a, const secp256k1_fe_t *b
secp256k1_fe_verify(b);
#endif
for (i = 4; i >= 0; i--) {
- if (a->n[i] > b->n[i]) return 1;
- if (a->n[i] < b->n[i]) return -1;
+ if (a->n[i] > b->n[i]) {
+ return 1;
+ }
+ if (a->n[i] < b->n[i]) {
+ return -1;
+ }
}
return 0;
}
@@ -399,6 +404,21 @@ static void secp256k1_fe_sqr(secp256k1_fe_t *r, const secp256k1_fe_t *a) {
#endif
}
+static SECP256K1_INLINE void secp256k1_fe_cmov(secp256k1_fe_t *r, const secp256k1_fe_t *a, int flag) {
+ uint64_t mask0, mask1;
+ mask0 = flag + ~((uint64_t)0);
+ mask1 = ~mask0;
+ r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1);
+ r->n[1] = (r->n[1] & mask0) | (a->n[1] & mask1);
+ r->n[2] = (r->n[2] & mask0) | (a->n[2] & mask1);
+ r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1);
+ r->n[4] = (r->n[4] & mask0) | (a->n[4] & mask1);
+#ifdef VERIFY
+ r->magnitude = (r->magnitude & mask0) | (a->magnitude & mask1);
+ r->normalized = (r->normalized & mask0) | (a->normalized & mask1);
+#endif
+}
+
static SECP256K1_INLINE void secp256k1_fe_storage_cmov(secp256k1_fe_storage_t *r, const secp256k1_fe_storage_t *a, int flag) {
uint64_t mask0, mask1;
mask0 = flag + ~((uint64_t)0);
diff --git a/src/secp256k1/src/field_impl.h b/src/secp256k1/src/field_impl.h
index 047914cf28..e6ec11e8f2 100644
--- a/src/secp256k1/src/field_impl.h
+++ b/src/secp256k1/src/field_impl.h
@@ -44,47 +44,69 @@ static int secp256k1_fe_sqrt_var(secp256k1_fe_t *r, const secp256k1_fe_t *a) {
secp256k1_fe_mul(&x3, &x3, a);
x6 = x3;
- for (j=0; j<3; j++) secp256k1_fe_sqr(&x6, &x6);
+ for (j=0; j<3; j++) {
+ secp256k1_fe_sqr(&x6, &x6);
+ }
secp256k1_fe_mul(&x6, &x6, &x3);
x9 = x6;
- for (j=0; j<3; j++) secp256k1_fe_sqr(&x9, &x9);
+ for (j=0; j<3; j++) {
+ secp256k1_fe_sqr(&x9, &x9);
+ }
secp256k1_fe_mul(&x9, &x9, &x3);
x11 = x9;
- for (j=0; j<2; j++) secp256k1_fe_sqr(&x11, &x11);
+ for (j=0; j<2; j++) {
+ secp256k1_fe_sqr(&x11, &x11);
+ }
secp256k1_fe_mul(&x11, &x11, &x2);
x22 = x11;
- for (j=0; j<11; j++) secp256k1_fe_sqr(&x22, &x22);
+ for (j=0; j<11; j++) {
+ secp256k1_fe_sqr(&x22, &x22);
+ }
secp256k1_fe_mul(&x22, &x22, &x11);
x44 = x22;
- for (j=0; j<22; j++) secp256k1_fe_sqr(&x44, &x44);
+ for (j=0; j<22; j++) {
+ secp256k1_fe_sqr(&x44, &x44);
+ }
secp256k1_fe_mul(&x44, &x44, &x22);
x88 = x44;
- for (j=0; j<44; j++) secp256k1_fe_sqr(&x88, &x88);
+ for (j=0; j<44; j++) {
+ secp256k1_fe_sqr(&x88, &x88);
+ }
secp256k1_fe_mul(&x88, &x88, &x44);
x176 = x88;
- for (j=0; j<88; j++) secp256k1_fe_sqr(&x176, &x176);
+ for (j=0; j<88; j++) {
+ secp256k1_fe_sqr(&x176, &x176);
+ }
secp256k1_fe_mul(&x176, &x176, &x88);
x220 = x176;
- for (j=0; j<44; j++) secp256k1_fe_sqr(&x220, &x220);
+ for (j=0; j<44; j++) {
+ secp256k1_fe_sqr(&x220, &x220);
+ }
secp256k1_fe_mul(&x220, &x220, &x44);
x223 = x220;
- for (j=0; j<3; j++) secp256k1_fe_sqr(&x223, &x223);
+ for (j=0; j<3; j++) {
+ secp256k1_fe_sqr(&x223, &x223);
+ }
secp256k1_fe_mul(&x223, &x223, &x3);
/* The final result is then assembled using a sliding window over the blocks. */
t1 = x223;
- for (j=0; j<23; j++) secp256k1_fe_sqr(&t1, &t1);
+ for (j=0; j<23; j++) {
+ secp256k1_fe_sqr(&t1, &t1);
+ }
secp256k1_fe_mul(&t1, &t1, &x22);
- for (j=0; j<6; j++) secp256k1_fe_sqr(&t1, &t1);
+ for (j=0; j<6; j++) {
+ secp256k1_fe_sqr(&t1, &t1);
+ }
secp256k1_fe_mul(&t1, &t1, &x2);
secp256k1_fe_sqr(&t1, &t1);
secp256k1_fe_sqr(r, &t1);
@@ -111,51 +133,77 @@ static void secp256k1_fe_inv(secp256k1_fe_t *r, const secp256k1_fe_t *a) {
secp256k1_fe_mul(&x3, &x3, a);
x6 = x3;
- for (j=0; j<3; j++) secp256k1_fe_sqr(&x6, &x6);
+ for (j=0; j<3; j++) {
+ secp256k1_fe_sqr(&x6, &x6);
+ }
secp256k1_fe_mul(&x6, &x6, &x3);
x9 = x6;
- for (j=0; j<3; j++) secp256k1_fe_sqr(&x9, &x9);
+ for (j=0; j<3; j++) {
+ secp256k1_fe_sqr(&x9, &x9);
+ }
secp256k1_fe_mul(&x9, &x9, &x3);
x11 = x9;
- for (j=0; j<2; j++) secp256k1_fe_sqr(&x11, &x11);
+ for (j=0; j<2; j++) {
+ secp256k1_fe_sqr(&x11, &x11);
+ }
secp256k1_fe_mul(&x11, &x11, &x2);
x22 = x11;
- for (j=0; j<11; j++) secp256k1_fe_sqr(&x22, &x22);
+ for (j=0; j<11; j++) {
+ secp256k1_fe_sqr(&x22, &x22);
+ }
secp256k1_fe_mul(&x22, &x22, &x11);
x44 = x22;
- for (j=0; j<22; j++) secp256k1_fe_sqr(&x44, &x44);
+ for (j=0; j<22; j++) {
+ secp256k1_fe_sqr(&x44, &x44);
+ }
secp256k1_fe_mul(&x44, &x44, &x22);
x88 = x44;
- for (j=0; j<44; j++) secp256k1_fe_sqr(&x88, &x88);
+ for (j=0; j<44; j++) {
+ secp256k1_fe_sqr(&x88, &x88);
+ }
secp256k1_fe_mul(&x88, &x88, &x44);
x176 = x88;
- for (j=0; j<88; j++) secp256k1_fe_sqr(&x176, &x176);
+ for (j=0; j<88; j++) {
+ secp256k1_fe_sqr(&x176, &x176);
+ }
secp256k1_fe_mul(&x176, &x176, &x88);
x220 = x176;
- for (j=0; j<44; j++) secp256k1_fe_sqr(&x220, &x220);
+ for (j=0; j<44; j++) {
+ secp256k1_fe_sqr(&x220, &x220);
+ }
secp256k1_fe_mul(&x220, &x220, &x44);
x223 = x220;
- for (j=0; j<3; j++) secp256k1_fe_sqr(&x223, &x223);
+ for (j=0; j<3; j++) {
+ secp256k1_fe_sqr(&x223, &x223);
+ }
secp256k1_fe_mul(&x223, &x223, &x3);
/* The final result is then assembled using a sliding window over the blocks. */
t1 = x223;
- for (j=0; j<23; j++) secp256k1_fe_sqr(&t1, &t1);
+ for (j=0; j<23; j++) {
+ secp256k1_fe_sqr(&t1, &t1);
+ }
secp256k1_fe_mul(&t1, &t1, &x22);
- for (j=0; j<5; j++) secp256k1_fe_sqr(&t1, &t1);
+ for (j=0; j<5; j++) {
+ secp256k1_fe_sqr(&t1, &t1);
+ }
secp256k1_fe_mul(&t1, &t1, a);
- for (j=0; j<3; j++) secp256k1_fe_sqr(&t1, &t1);
+ for (j=0; j<3; j++) {
+ secp256k1_fe_sqr(&t1, &t1);
+ }
secp256k1_fe_mul(&t1, &t1, &x2);
- for (j=0; j<2; j++) secp256k1_fe_sqr(&t1, &t1);
+ for (j=0; j<2; j++) {
+ secp256k1_fe_sqr(&t1, &t1);
+ }
secp256k1_fe_mul(r, a, &t1);
}
@@ -188,8 +236,9 @@ static void secp256k1_fe_inv_var(secp256k1_fe_t *r, const secp256k1_fe_t *a) {
static void secp256k1_fe_inv_all_var(size_t len, secp256k1_fe_t *r, const secp256k1_fe_t *a) {
secp256k1_fe_t u;
size_t i;
- if (len < 1)
+ if (len < 1) {
return;
+ }
VERIFY_CHECK((r + len <= a) || (a + len <= r));
diff --git a/src/secp256k1/src/group.h b/src/secp256k1/src/group.h
index d1e5834909..0b08b3b991 100644
--- a/src/secp256k1/src/group.h
+++ b/src/secp256k1/src/group.h
@@ -115,4 +115,7 @@ static void secp256k1_ge_from_storage(secp256k1_ge_t *r, const secp256k1_ge_stor
/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time. */
static void secp256k1_ge_storage_cmov(secp256k1_ge_storage_t *r, const secp256k1_ge_storage_t *a, int flag);
+/** Rescale a jacobian point by b which must be non-zero. Constant-time. */
+static void secp256k1_gej_rescale(secp256k1_gej_t *r, const secp256k1_fe_t *b);
+
#endif
diff --git a/src/secp256k1/src/group_impl.h b/src/secp256k1/src/group_impl.h
index 8d8c359c5a..0f64576fbb 100644
--- a/src/secp256k1/src/group_impl.h
+++ b/src/secp256k1/src/group_impl.h
@@ -77,14 +77,14 @@ static void secp256k1_ge_set_all_gej_var(size_t len, secp256k1_ge_t *r, const se
secp256k1_fe_t *azi;
size_t i;
size_t count = 0;
- az = checked_malloc(sizeof(secp256k1_fe_t) * len);
+ az = (secp256k1_fe_t *)checked_malloc(sizeof(secp256k1_fe_t) * len);
for (i = 0; i < len; i++) {
if (!a[i].infinity) {
az[count++] = a[i].z;
}
}
- azi = checked_malloc(sizeof(secp256k1_fe_t) * count);
+ azi = (secp256k1_fe_t *)checked_malloc(sizeof(secp256k1_fe_t) * count);
secp256k1_fe_inv_all_var(count, azi, az);
free(az);
@@ -138,11 +138,13 @@ static int secp256k1_ge_set_xo_var(secp256k1_ge_t *r, const secp256k1_fe_t *x, i
r->infinity = 0;
secp256k1_fe_set_int(&c, 7);
secp256k1_fe_add(&c, &x3);
- if (!secp256k1_fe_sqrt_var(&r->y, &c))
+ if (!secp256k1_fe_sqrt_var(&r->y, &c)) {
return 0;
+ }
secp256k1_fe_normalize_var(&r->y);
- if (secp256k1_fe_is_odd(&r->y) != odd)
+ if (secp256k1_fe_is_odd(&r->y) != odd) {
secp256k1_fe_negate(&r->y, &r->y, 1);
+ }
return 1;
}
@@ -176,8 +178,9 @@ static int secp256k1_gej_is_infinity(const secp256k1_gej_t *a) {
static int secp256k1_gej_is_valid_var(const secp256k1_gej_t *a) {
secp256k1_fe_t y2, x3, z2, z6;
- if (a->infinity)
+ if (a->infinity) {
return 0;
+ }
/** y^2 = x^3 + 7
* (Y/Z^3)^2 = (X/Z^2)^3 + 7
* Y^2 / Z^6 = X^3 / Z^6 + 7
@@ -195,8 +198,9 @@ static int secp256k1_gej_is_valid_var(const secp256k1_gej_t *a) {
static int secp256k1_ge_is_valid_var(const secp256k1_ge_t *a) {
secp256k1_fe_t y2, x3, c;
- if (a->infinity)
+ if (a->infinity) {
return 0;
+ }
/* y^2 = x^3 + 7 */
secp256k1_fe_sqr(&y2, &a->y);
secp256k1_fe_sqr(&x3, &a->x); secp256k1_fe_mul(&x3, &x3, &a->x);
@@ -321,7 +325,8 @@ static void secp256k1_gej_add_ge_var(secp256k1_gej_t *r, const secp256k1_gej_t *
}
static void secp256k1_gej_add_ge(secp256k1_gej_t *r, const secp256k1_gej_t *a, const secp256k1_ge_t *b) {
- /* Operations: 7 mul, 5 sqr, 5 normalize, 19 mul_int/add/negate */
+ /* Operations: 7 mul, 5 sqr, 5 normalize, 17 mul_int/add/negate/cmov */
+ static const secp256k1_fe_t fe_1 = SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 1);
secp256k1_fe_t zz, u1, u2, s1, s2, z, t, m, n, q, rr;
int infinity;
VERIFY_CHECK(!b->infinity);
@@ -383,17 +388,25 @@ static void secp256k1_gej_add_ge(secp256k1_gej_t *r, const secp256k1_gej_t *a, c
secp256k1_fe_mul_int(&r->y, 4 * (1 - a->infinity)); /* r->y = Y3 = 4*R*(3*Q-2*R^2)-4*M^4 (4) */
/** In case a->infinity == 1, the above code results in r->x, r->y, and r->z all equal to 0.
- * Add b->x to x, b->y to y, and 1 to z in that case.
+ * Replace r with b->x, b->y, 1 in that case.
*/
- t = b->x; secp256k1_fe_mul_int(&t, a->infinity);
- secp256k1_fe_add(&r->x, &t);
- t = b->y; secp256k1_fe_mul_int(&t, a->infinity);
- secp256k1_fe_add(&r->y, &t);
- secp256k1_fe_set_int(&t, a->infinity);
- secp256k1_fe_add(&r->z, &t);
+ secp256k1_fe_cmov(&r->x, &b->x, a->infinity);
+ secp256k1_fe_cmov(&r->y, &b->y, a->infinity);
+ secp256k1_fe_cmov(&r->z, &fe_1, a->infinity);
r->infinity = infinity;
}
+static void secp256k1_gej_rescale(secp256k1_gej_t *r, const secp256k1_fe_t *s) {
+ /* Operations: 4 mul, 1 sqr */
+ secp256k1_fe_t zz;
+ VERIFY_CHECK(!secp256k1_fe_is_zero(s));
+ secp256k1_fe_sqr(&zz, s);
+ secp256k1_fe_mul(&r->x, &r->x, &zz); /* r->x *= s^2 */
+ secp256k1_fe_mul(&r->y, &r->y, &zz);
+ secp256k1_fe_mul(&r->y, &r->y, s); /* r->y *= s^3 */
+ secp256k1_fe_mul(&r->z, &r->z, s); /* r->z *= s */
+}
+
static void secp256k1_ge_to_storage(secp256k1_ge_storage_t *r, const secp256k1_ge_t *a) {
secp256k1_fe_t x, y;
VERIFY_CHECK(!a->infinity);
diff --git a/src/secp256k1/src/hash_impl.h b/src/secp256k1/src/hash_impl.h
index 60fdbf7718..9828827bcd 100644
--- a/src/secp256k1/src/hash_impl.h
+++ b/src/secp256k1/src/hash_impl.h
@@ -176,13 +176,15 @@ static void secp256k1_hmac_sha256_initialize(secp256k1_hmac_sha256_t *hash, cons
}
secp256k1_sha256_initialize(&hash->outer);
- for (n = 0; n < 64; n++)
+ for (n = 0; n < 64; n++) {
rkey[n] ^= 0x5c;
+ }
secp256k1_sha256_write(&hash->outer, rkey, 64);
secp256k1_sha256_initialize(&hash->inner);
- for (n = 0; n < 64; n++)
+ for (n = 0; n < 64; n++) {
rkey[n] ^= 0x5c ^ 0x36;
+ }
secp256k1_sha256_write(&hash->inner, rkey, 64);
memset(rkey, 0, 64);
}
@@ -205,15 +207,17 @@ static void secp256k1_rfc6979_hmac_sha256_initialize(secp256k1_rfc6979_hmac_sha2
static const unsigned char zero[1] = {0x00};
static const unsigned char one[1] = {0x01};
- memset(rng->v, 0x01, 32);
- memset(rng->k, 0x00, 32);
+ memset(rng->v, 0x01, 32); /* RFC6979 3.2.b. */
+ memset(rng->k, 0x00, 32); /* RFC6979 3.2.c. */
+ /* RFC6979 3.2.d. */
secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
secp256k1_hmac_sha256_write(&hmac, zero, 1);
secp256k1_hmac_sha256_write(&hmac, key, keylen);
secp256k1_hmac_sha256_write(&hmac, msg, msglen);
if (rnd && rndlen) {
+ /* RFC6979 3.6 "Additional data". */
secp256k1_hmac_sha256_write(&hmac, rnd, rndlen);
}
secp256k1_hmac_sha256_finalize(&hmac, rng->k);
@@ -221,12 +225,14 @@ static void secp256k1_rfc6979_hmac_sha256_initialize(secp256k1_rfc6979_hmac_sha2
secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
secp256k1_hmac_sha256_finalize(&hmac, rng->v);
+ /* RFC6979 3.2.f. */
secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
secp256k1_hmac_sha256_write(&hmac, one, 1);
secp256k1_hmac_sha256_write(&hmac, key, keylen);
secp256k1_hmac_sha256_write(&hmac, msg, msglen);
if (rnd && rndlen) {
+ /* RFC6979 3.6 "Additional data". */
secp256k1_hmac_sha256_write(&hmac, rnd, rndlen);
}
secp256k1_hmac_sha256_finalize(&hmac, rng->k);
@@ -237,6 +243,7 @@ static void secp256k1_rfc6979_hmac_sha256_initialize(secp256k1_rfc6979_hmac_sha2
}
static void secp256k1_rfc6979_hmac_sha256_generate(secp256k1_rfc6979_hmac_sha256_t *rng, unsigned char *out, size_t outlen) {
+ /* RFC6979 3.2.h. */
static const unsigned char zero[1] = {0x00};
if (rng->retry) {
secp256k1_hmac_sha256_t hmac;
diff --git a/src/secp256k1/src/num_gmp_impl.h b/src/secp256k1/src/num_gmp_impl.h
index 3e4b92d329..dbbc458d5d 100644
--- a/src/secp256k1/src/num_gmp_impl.h
+++ b/src/secp256k1/src/num_gmp_impl.h
@@ -54,7 +54,9 @@ static void secp256k1_num_set_bin(secp256k1_num_t *r, const unsigned char *a, un
VERIFY_CHECK(len <= NUM_LIMBS*2);
r->limbs = len;
r->neg = 0;
- while (r->limbs > 1 && r->data[r->limbs-1]==0) r->limbs--;
+ while (r->limbs > 1 && r->data[r->limbs-1]==0) {
+ r->limbs--;
+ }
}
static void secp256k1_num_add_abs(secp256k1_num_t *r, const secp256k1_num_t *a, const secp256k1_num_t *b) {
@@ -70,7 +72,9 @@ static void secp256k1_num_sub_abs(secp256k1_num_t *r, const secp256k1_num_t *a,
mp_limb_t c = mpn_sub(r->data, a->data, a->limbs, b->data, b->limbs);
VERIFY_CHECK(c == 0);
r->limbs = a->limbs;
- while (r->limbs > 1 && r->data[r->limbs-1]==0) r->limbs--;
+ while (r->limbs > 1 && r->data[r->limbs-1]==0) {
+ r->limbs--;
+ }
}
static void secp256k1_num_mod(secp256k1_num_t *r, const secp256k1_num_t *m) {
@@ -82,7 +86,9 @@ static void secp256k1_num_mod(secp256k1_num_t *r, const secp256k1_num_t *m) {
mpn_tdiv_qr(t, r->data, 0, r->data, r->limbs, m->data, m->limbs);
memset(t, 0, sizeof(t));
r->limbs = m->limbs;
- while (r->limbs > 1 && r->data[r->limbs-1]==0) r->limbs--;
+ while (r->limbs > 1 && r->data[r->limbs-1]==0) {
+ r->limbs--;
+ }
}
if (r->neg && (r->limbs > 1 || r->data[0] != 0)) {
@@ -125,7 +131,9 @@ static void secp256k1_num_mod_inverse(secp256k1_num_t *r, const secp256k1_num_t
if (sn < 0) {
mpn_sub(r->data, m->data, m->limbs, r->data, -sn);
r->limbs = m->limbs;
- while (r->limbs > 1 && r->data[r->limbs-1]==0) r->limbs--;
+ while (r->limbs > 1 && r->data[r->limbs-1]==0) {
+ r->limbs--;
+ }
} else {
r->limbs = sn;
}
@@ -143,15 +151,25 @@ static int secp256k1_num_is_neg(const secp256k1_num_t *a) {
}
static int secp256k1_num_cmp(const secp256k1_num_t *a, const secp256k1_num_t *b) {
- if (a->limbs > b->limbs) return 1;
- if (a->limbs < b->limbs) return -1;
+ if (a->limbs > b->limbs) {
+ return 1;
+ }
+ if (a->limbs < b->limbs) {
+ return -1;
+ }
return mpn_cmp(a->data, b->data, a->limbs);
}
static int secp256k1_num_eq(const secp256k1_num_t *a, const secp256k1_num_t *b) {
- if (a->limbs > b->limbs) return 0;
- if (a->limbs < b->limbs) return 0;
- if ((a->neg && !secp256k1_num_is_zero(a)) != (b->neg && !secp256k1_num_is_zero(b))) return 0;
+ if (a->limbs > b->limbs) {
+ return 0;
+ }
+ if (a->limbs < b->limbs) {
+ return 0;
+ }
+ if ((a->neg && !secp256k1_num_is_zero(a)) != (b->neg && !secp256k1_num_is_zero(b))) {
+ return 0;
+ }
return mpn_cmp(a->data, b->data, a->limbs) == 0;
}
@@ -198,12 +216,15 @@ static void secp256k1_num_mul(secp256k1_num_t *r, const secp256k1_num_t *a, cons
r->data[0] = 0;
return;
}
- if (a->limbs >= b->limbs)
+ if (a->limbs >= b->limbs) {
mpn_mul(tmp, a->data, a->limbs, b->data, b->limbs);
- else
+ } else {
mpn_mul(tmp, b->data, b->limbs, a->data, a->limbs);
+ }
r->limbs = a->limbs + b->limbs;
- if (r->limbs > 1 && tmp[r->limbs - 1]==0) r->limbs--;
+ if (r->limbs > 1 && tmp[r->limbs - 1]==0) {
+ r->limbs--;
+ }
VERIFY_CHECK(r->limbs <= 2*NUM_LIMBS);
mpn_copyi(r->data, tmp, r->limbs);
r->neg = a->neg ^ b->neg;
@@ -227,7 +248,9 @@ static void secp256k1_num_shift(secp256k1_num_t *r, int bits) {
}
}
}
- while (r->limbs>1 && r->data[r->limbs-1]==0) r->limbs--;
+ while (r->limbs>1 && r->data[r->limbs-1]==0) {
+ r->limbs--;
+ }
}
static void secp256k1_num_negate(secp256k1_num_t *r) {
diff --git a/src/secp256k1/src/scalar_impl.h b/src/secp256k1/src/scalar_impl.h
index 3acbe264ae..33824983e4 100644
--- a/src/secp256k1/src/scalar_impl.h
+++ b/src/secp256k1/src/scalar_impl.h
@@ -69,130 +69,168 @@ static void secp256k1_scalar_inverse(secp256k1_scalar_t *r, const secp256k1_scal
secp256k1_scalar_mul(&x8, &x8, x);
secp256k1_scalar_sqr(&x15, &x8);
- for (i = 0; i < 6; i++)
+ for (i = 0; i < 6; i++) {
secp256k1_scalar_sqr(&x15, &x15);
+ }
secp256k1_scalar_mul(&x15, &x15, &x7);
secp256k1_scalar_sqr(&x30, &x15);
- for (i = 0; i < 14; i++)
+ for (i = 0; i < 14; i++) {
secp256k1_scalar_sqr(&x30, &x30);
+ }
secp256k1_scalar_mul(&x30, &x30, &x15);
secp256k1_scalar_sqr(&x60, &x30);
- for (i = 0; i < 29; i++)
+ for (i = 0; i < 29; i++) {
secp256k1_scalar_sqr(&x60, &x60);
+ }
secp256k1_scalar_mul(&x60, &x60, &x30);
secp256k1_scalar_sqr(&x120, &x60);
- for (i = 0; i < 59; i++)
+ for (i = 0; i < 59; i++) {
secp256k1_scalar_sqr(&x120, &x120);
+ }
secp256k1_scalar_mul(&x120, &x120, &x60);
secp256k1_scalar_sqr(&x127, &x120);
- for (i = 0; i < 6; i++)
+ for (i = 0; i < 6; i++) {
secp256k1_scalar_sqr(&x127, &x127);
+ }
secp256k1_scalar_mul(&x127, &x127, &x7);
/* Then accumulate the final result (t starts at x127). */
t = &x127;
- for (i = 0; i < 2; i++) /* 0 */
+ for (i = 0; i < 2; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 4; i++) /* 0 */
+ for (i = 0; i < 4; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, &x3); /* 111 */
- for (i = 0; i < 2; i++) /* 0 */
+ for (i = 0; i < 2; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 2; i++) /* 0 */
+ for (i = 0; i < 2; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 2; i++) /* 0 */
+ for (i = 0; i < 2; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 4; i++) /* 0 */
+ for (i = 0; i < 4; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, &x3); /* 111 */
- for (i = 0; i < 3; i++) /* 0 */
+ for (i = 0; i < 3; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, &x2); /* 11 */
- for (i = 0; i < 4; i++) /* 0 */
+ for (i = 0; i < 4; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, &x3); /* 111 */
- for (i = 0; i < 5; i++) /* 00 */
+ for (i = 0; i < 5; i++) { /* 00 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, &x3); /* 111 */
- for (i = 0; i < 4; i++) /* 00 */
+ for (i = 0; i < 4; i++) { /* 00 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, &x2); /* 11 */
- for (i = 0; i < 2; i++) /* 0 */
+ for (i = 0; i < 2; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 2; i++) /* 0 */
+ for (i = 0; i < 2; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 5; i++) /* 0 */
+ for (i = 0; i < 5; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, &x4); /* 1111 */
- for (i = 0; i < 2; i++) /* 0 */
+ for (i = 0; i < 2; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 3; i++) /* 00 */
+ for (i = 0; i < 3; i++) { /* 00 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 4; i++) /* 000 */
+ for (i = 0; i < 4; i++) { /* 000 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 2; i++) /* 0 */
+ for (i = 0; i < 2; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 10; i++) /* 0000000 */
+ for (i = 0; i < 10; i++) { /* 0000000 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, &x3); /* 111 */
- for (i = 0; i < 4; i++) /* 0 */
+ for (i = 0; i < 4; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, &x3); /* 111 */
- for (i = 0; i < 9; i++) /* 0 */
+ for (i = 0; i < 9; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, &x8); /* 11111111 */
- for (i = 0; i < 2; i++) /* 0 */
+ for (i = 0; i < 2; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 3; i++) /* 00 */
+ for (i = 0; i < 3; i++) { /* 00 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 3; i++) /* 00 */
+ for (i = 0; i < 3; i++) { /* 00 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 5; i++) /* 0 */
+ for (i = 0; i < 5; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, &x4); /* 1111 */
- for (i = 0; i < 2; i++) /* 0 */
+ for (i = 0; i < 2; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 5; i++) /* 000 */
+ for (i = 0; i < 5; i++) { /* 000 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, &x2); /* 11 */
- for (i = 0; i < 4; i++) /* 00 */
+ for (i = 0; i < 4; i++) { /* 00 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, &x2); /* 11 */
- for (i = 0; i < 2; i++) /* 0 */
+ for (i = 0; i < 2; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 8; i++) /* 000000 */
+ for (i = 0; i < 8; i++) { /* 000000 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, &x2); /* 11 */
- for (i = 0; i < 3; i++) /* 0 */
+ for (i = 0; i < 3; i++) { /* 0 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, &x2); /* 11 */
- for (i = 0; i < 3; i++) /* 00 */
+ for (i = 0; i < 3; i++) { /* 00 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 6; i++) /* 00000 */
+ for (i = 0; i < 6; i++) { /* 00000 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 8; i++) /* 00 */
+ for (i = 0; i < 8; i++) { /* 00 */
secp256k1_scalar_sqr(t, t);
+ }
secp256k1_scalar_mul(r, t, &x6); /* 111111 */
}
diff --git a/src/secp256k1/src/secp256k1.c b/src/secp256k1/src/secp256k1.c
index 8c4eca4b62..d6192dc4ed 100644
--- a/src/secp256k1/src/secp256k1.c
+++ b/src/secp256k1/src/secp256k1.c
@@ -1,5 +1,5 @@
/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Copyright (c) 2013-2015 Pieter Wuille *
* Distributed under the MIT software license, see the accompanying *
* file COPYING or http://www.opensource.org/licenses/mit-license.php.*
**********************************************************************/
@@ -19,26 +19,48 @@
#include "eckey_impl.h"
#include "hash_impl.h"
-void secp256k1_start(unsigned int flags) {
- if (flags & SECP256K1_START_SIGN) {
- secp256k1_ecmult_gen_start();
+struct secp256k1_context_struct {
+ secp256k1_ecmult_context_t ecmult_ctx;
+ secp256k1_ecmult_gen_context_t ecmult_gen_ctx;
+};
+
+secp256k1_context_t* secp256k1_context_create(int flags) {
+ secp256k1_context_t* ret = (secp256k1_context_t*)checked_malloc(sizeof(secp256k1_context_t));
+
+ secp256k1_ecmult_context_init(&ret->ecmult_ctx);
+ secp256k1_ecmult_gen_context_init(&ret->ecmult_gen_ctx);
+
+ if (flags & SECP256K1_CONTEXT_SIGN) {
+ secp256k1_ecmult_gen_context_build(&ret->ecmult_gen_ctx);
}
- if (flags & SECP256K1_START_VERIFY) {
- secp256k1_ecmult_start();
+ if (flags & SECP256K1_CONTEXT_VERIFY) {
+ secp256k1_ecmult_context_build(&ret->ecmult_ctx);
}
+
+ return ret;
}
-void secp256k1_stop(void) {
- secp256k1_ecmult_stop();
- secp256k1_ecmult_gen_stop();
+secp256k1_context_t* secp256k1_context_clone(const secp256k1_context_t* ctx) {
+ secp256k1_context_t* ret = (secp256k1_context_t*)checked_malloc(sizeof(secp256k1_context_t));
+ secp256k1_ecmult_context_clone(&ret->ecmult_ctx, &ctx->ecmult_ctx);
+ secp256k1_ecmult_gen_context_clone(&ret->ecmult_gen_ctx, &ctx->ecmult_gen_ctx);
+ return ret;
}
-int secp256k1_ecdsa_verify(const unsigned char *msg32, const unsigned char *sig, int siglen, const unsigned char *pubkey, int pubkeylen) {
+void secp256k1_context_destroy(secp256k1_context_t* ctx) {
+ secp256k1_ecmult_context_clear(&ctx->ecmult_ctx);
+ secp256k1_ecmult_gen_context_clear(&ctx->ecmult_gen_ctx);
+
+ free(ctx);
+}
+
+int secp256k1_ecdsa_verify(const secp256k1_context_t* ctx, const unsigned char *msg32, const unsigned char *sig, int siglen, const unsigned char *pubkey, int pubkeylen) {
secp256k1_ge_t q;
secp256k1_ecdsa_sig_t s;
secp256k1_scalar_t m;
int ret = -3;
- DEBUG_CHECK(secp256k1_ecmult_consts != NULL);
+ DEBUG_CHECK(ctx != NULL);
+ DEBUG_CHECK(secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx));
DEBUG_CHECK(msg32 != NULL);
DEBUG_CHECK(sig != NULL);
DEBUG_CHECK(pubkey != NULL);
@@ -47,7 +69,7 @@ int secp256k1_ecdsa_verify(const unsigned char *msg32, const unsigned char *sig,
if (secp256k1_eckey_pubkey_parse(&q, pubkey, pubkeylen)) {
if (secp256k1_ecdsa_sig_parse(&s, sig, siglen)) {
- if (secp256k1_ecdsa_sig_verify(&s, &q, &m)) {
+ if (secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &s, &q, &m)) {
/* success is 1, all other values are fail */
ret = 1;
} else {
@@ -66,7 +88,7 @@ int secp256k1_ecdsa_verify(const unsigned char *msg32, const unsigned char *sig,
static int nonce_function_rfc6979(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, unsigned int counter, const void *data) {
secp256k1_rfc6979_hmac_sha256_t rng;
unsigned int i;
- secp256k1_rfc6979_hmac_sha256_initialize(&rng, key32, 32, msg32, 32, data, data != NULL ? 32 : 0);
+ secp256k1_rfc6979_hmac_sha256_initialize(&rng, key32, 32, msg32, 32, (const unsigned char*)data, data != NULL ? 32 : 0);
for (i = 0; i <= counter; i++) {
secp256k1_rfc6979_hmac_sha256_generate(&rng, nonce32, 32);
}
@@ -77,13 +99,14 @@ static int nonce_function_rfc6979(unsigned char *nonce32, const unsigned char *m
const secp256k1_nonce_function_t secp256k1_nonce_function_rfc6979 = nonce_function_rfc6979;
const secp256k1_nonce_function_t secp256k1_nonce_function_default = nonce_function_rfc6979;
-int secp256k1_ecdsa_sign(const unsigned char *msg32, unsigned char *signature, int *signaturelen, const unsigned char *seckey, secp256k1_nonce_function_t noncefp, const void* noncedata) {
+int secp256k1_ecdsa_sign(const secp256k1_context_t* ctx, const unsigned char *msg32, unsigned char *signature, int *signaturelen, const unsigned char *seckey, secp256k1_nonce_function_t noncefp, const void* noncedata) {
secp256k1_ecdsa_sig_t sig;
secp256k1_scalar_t sec, non, msg;
int ret = 0;
int overflow = 0;
unsigned int count = 0;
- DEBUG_CHECK(secp256k1_ecmult_gen_consts != NULL);
+ DEBUG_CHECK(ctx != NULL);
+ DEBUG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx));
DEBUG_CHECK(msg32 != NULL);
DEBUG_CHECK(signature != NULL);
DEBUG_CHECK(signaturelen != NULL);
@@ -105,7 +128,7 @@ int secp256k1_ecdsa_sign(const unsigned char *msg32, unsigned char *signature, i
secp256k1_scalar_set_b32(&non, nonce32, &overflow);
memset(nonce32, 0, 32);
if (!secp256k1_scalar_is_zero(&non) && !overflow) {
- if (secp256k1_ecdsa_sig_sign(&sig, &sec, &msg, &non, NULL)) {
+ if (secp256k1_ecdsa_sig_sign(&ctx->ecmult_gen_ctx, &sig, &sec, &msg, &non, NULL)) {
break;
}
}
@@ -124,13 +147,14 @@ int secp256k1_ecdsa_sign(const unsigned char *msg32, unsigned char *signature, i
return ret;
}
-int secp256k1_ecdsa_sign_compact(const unsigned char *msg32, unsigned char *sig64, const unsigned char *seckey, secp256k1_nonce_function_t noncefp, const void* noncedata, int *recid) {
+int secp256k1_ecdsa_sign_compact(const secp256k1_context_t* ctx, const unsigned char *msg32, unsigned char *sig64, const unsigned char *seckey, secp256k1_nonce_function_t noncefp, const void* noncedata, int *recid) {
secp256k1_ecdsa_sig_t sig;
secp256k1_scalar_t sec, non, msg;
int ret = 0;
int overflow = 0;
unsigned int count = 0;
- DEBUG_CHECK(secp256k1_ecmult_gen_consts != NULL);
+ DEBUG_CHECK(ctx != NULL);
+ DEBUG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx));
DEBUG_CHECK(msg32 != NULL);
DEBUG_CHECK(sig64 != NULL);
DEBUG_CHECK(seckey != NULL);
@@ -151,7 +175,7 @@ int secp256k1_ecdsa_sign_compact(const unsigned char *msg32, unsigned char *sig6
secp256k1_scalar_set_b32(&non, nonce32, &overflow);
memset(nonce32, 0, 32);
if (!secp256k1_scalar_is_zero(&non) && !overflow) {
- if (secp256k1_ecdsa_sig_sign(&sig, &sec, &msg, &non, recid)) {
+ if (secp256k1_ecdsa_sig_sign(&ctx->ecmult_gen_ctx, &sig, &sec, &msg, &non, recid)) {
break;
}
}
@@ -171,13 +195,14 @@ int secp256k1_ecdsa_sign_compact(const unsigned char *msg32, unsigned char *sig6
return ret;
}
-int secp256k1_ecdsa_recover_compact(const unsigned char *msg32, const unsigned char *sig64, unsigned char *pubkey, int *pubkeylen, int compressed, int recid) {
+int secp256k1_ecdsa_recover_compact(const secp256k1_context_t* ctx, const unsigned char *msg32, const unsigned char *sig64, unsigned char *pubkey, int *pubkeylen, int compressed, int recid) {
secp256k1_ge_t q;
secp256k1_ecdsa_sig_t sig;
secp256k1_scalar_t m;
int ret = 0;
int overflow = 0;
- DEBUG_CHECK(secp256k1_ecmult_consts != NULL);
+ DEBUG_CHECK(ctx != NULL);
+ DEBUG_CHECK(secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx));
DEBUG_CHECK(msg32 != NULL);
DEBUG_CHECK(sig64 != NULL);
DEBUG_CHECK(pubkey != NULL);
@@ -190,7 +215,7 @@ int secp256k1_ecdsa_recover_compact(const unsigned char *msg32, const unsigned c
if (!overflow) {
secp256k1_scalar_set_b32(&m, msg32, NULL);
- if (secp256k1_ecdsa_sig_recover(&sig, &q, &m, recid)) {
+ if (secp256k1_ecdsa_sig_recover(&ctx->ecmult_ctx, &sig, &q, &m, recid)) {
ret = secp256k1_eckey_pubkey_serialize(&q, pubkey, pubkeylen, compressed);
}
}
@@ -198,11 +223,13 @@ int secp256k1_ecdsa_recover_compact(const unsigned char *msg32, const unsigned c
return ret;
}
-int secp256k1_ec_seckey_verify(const unsigned char *seckey) {
+int secp256k1_ec_seckey_verify(const secp256k1_context_t* ctx, const unsigned char *seckey) {
secp256k1_scalar_t sec;
int ret;
int overflow;
+ DEBUG_CHECK(ctx != NULL);
DEBUG_CHECK(seckey != NULL);
+ (void)ctx;
secp256k1_scalar_set_b32(&sec, seckey, &overflow);
ret = !secp256k1_scalar_is_zero(&sec) && !overflow;
@@ -210,27 +237,30 @@ int secp256k1_ec_seckey_verify(const unsigned char *seckey) {
return ret;
}
-int secp256k1_ec_pubkey_verify(const unsigned char *pubkey, int pubkeylen) {
+int secp256k1_ec_pubkey_verify(const secp256k1_context_t* ctx, const unsigned char *pubkey, int pubkeylen) {
secp256k1_ge_t q;
+ DEBUG_CHECK(ctx != NULL);
DEBUG_CHECK(pubkey != NULL);
+ (void)ctx;
return secp256k1_eckey_pubkey_parse(&q, pubkey, pubkeylen);
}
-int secp256k1_ec_pubkey_create(unsigned char *pubkey, int *pubkeylen, const unsigned char *seckey, int compressed) {
+int secp256k1_ec_pubkey_create(const secp256k1_context_t* ctx, unsigned char *pubkey, int *pubkeylen, const unsigned char *seckey, int compressed) {
secp256k1_gej_t pj;
secp256k1_ge_t p;
secp256k1_scalar_t sec;
int overflow;
int ret = 0;
- DEBUG_CHECK(secp256k1_ecmult_gen_consts != NULL);
+ DEBUG_CHECK(ctx != NULL);
+ DEBUG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx));
DEBUG_CHECK(pubkey != NULL);
DEBUG_CHECK(pubkeylen != NULL);
DEBUG_CHECK(seckey != NULL);
secp256k1_scalar_set_b32(&sec, seckey, &overflow);
if (!overflow) {
- secp256k1_ecmult_gen(&pj, &sec);
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pj, &sec);
secp256k1_scalar_clear(&sec);
secp256k1_ge_set_gej(&p, &pj);
ret = secp256k1_eckey_pubkey_serialize(&p, pubkey, pubkeylen, compressed);
@@ -241,11 +271,12 @@ int secp256k1_ec_pubkey_create(unsigned char *pubkey, int *pubkeylen, const unsi
return ret;
}
-int secp256k1_ec_pubkey_decompress(unsigned char *pubkey, int *pubkeylen) {
+int secp256k1_ec_pubkey_decompress(const secp256k1_context_t* ctx, unsigned char *pubkey, int *pubkeylen) {
secp256k1_ge_t p;
int ret = 0;
DEBUG_CHECK(pubkey != NULL);
DEBUG_CHECK(pubkeylen != NULL);
+ (void)ctx;
if (secp256k1_eckey_pubkey_parse(&p, pubkey, *pubkeylen)) {
ret = secp256k1_eckey_pubkey_serialize(&p, pubkey, pubkeylen, 0);
@@ -253,13 +284,15 @@ int secp256k1_ec_pubkey_decompress(unsigned char *pubkey, int *pubkeylen) {
return ret;
}
-int secp256k1_ec_privkey_tweak_add(unsigned char *seckey, const unsigned char *tweak) {
+int secp256k1_ec_privkey_tweak_add(const secp256k1_context_t* ctx, unsigned char *seckey, const unsigned char *tweak) {
secp256k1_scalar_t term;
secp256k1_scalar_t sec;
int ret = 0;
int overflow = 0;
+ DEBUG_CHECK(ctx != NULL);
DEBUG_CHECK(seckey != NULL);
DEBUG_CHECK(tweak != NULL);
+ (void)ctx;
secp256k1_scalar_set_b32(&term, tweak, &overflow);
secp256k1_scalar_set_b32(&sec, seckey, NULL);
@@ -274,12 +307,13 @@ int secp256k1_ec_privkey_tweak_add(unsigned char *seckey, const unsigned char *t
return ret;
}
-int secp256k1_ec_pubkey_tweak_add(unsigned char *pubkey, int pubkeylen, const unsigned char *tweak) {
+int secp256k1_ec_pubkey_tweak_add(const secp256k1_context_t* ctx, unsigned char *pubkey, int pubkeylen, const unsigned char *tweak) {
secp256k1_ge_t p;
secp256k1_scalar_t term;
int ret = 0;
int overflow = 0;
- DEBUG_CHECK(secp256k1_ecmult_consts != NULL);
+ DEBUG_CHECK(ctx != NULL);
+ DEBUG_CHECK(secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx));
DEBUG_CHECK(pubkey != NULL);
DEBUG_CHECK(tweak != NULL);
@@ -287,7 +321,7 @@ int secp256k1_ec_pubkey_tweak_add(unsigned char *pubkey, int pubkeylen, const un
if (!overflow) {
ret = secp256k1_eckey_pubkey_parse(&p, pubkey, pubkeylen);
if (ret) {
- ret = secp256k1_eckey_pubkey_tweak_add(&p, &term);
+ ret = secp256k1_eckey_pubkey_tweak_add(&ctx->ecmult_ctx, &p, &term);
}
if (ret) {
int oldlen = pubkeylen;
@@ -299,13 +333,15 @@ int secp256k1_ec_pubkey_tweak_add(unsigned char *pubkey, int pubkeylen, const un
return ret;
}
-int secp256k1_ec_privkey_tweak_mul(unsigned char *seckey, const unsigned char *tweak) {
+int secp256k1_ec_privkey_tweak_mul(const secp256k1_context_t* ctx, unsigned char *seckey, const unsigned char *tweak) {
secp256k1_scalar_t factor;
secp256k1_scalar_t sec;
int ret = 0;
int overflow = 0;
+ DEBUG_CHECK(ctx != NULL);
DEBUG_CHECK(seckey != NULL);
DEBUG_CHECK(tweak != NULL);
+ (void)ctx;
secp256k1_scalar_set_b32(&factor, tweak, &overflow);
secp256k1_scalar_set_b32(&sec, seckey, NULL);
@@ -319,12 +355,13 @@ int secp256k1_ec_privkey_tweak_mul(unsigned char *seckey, const unsigned char *t
return ret;
}
-int secp256k1_ec_pubkey_tweak_mul(unsigned char *pubkey, int pubkeylen, const unsigned char *tweak) {
+int secp256k1_ec_pubkey_tweak_mul(const secp256k1_context_t* ctx, unsigned char *pubkey, int pubkeylen, const unsigned char *tweak) {
secp256k1_ge_t p;
secp256k1_scalar_t factor;
int ret = 0;
int overflow = 0;
- DEBUG_CHECK(secp256k1_ecmult_consts != NULL);
+ DEBUG_CHECK(ctx != NULL);
+ DEBUG_CHECK(secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx));
DEBUG_CHECK(pubkey != NULL);
DEBUG_CHECK(tweak != NULL);
@@ -332,7 +369,7 @@ int secp256k1_ec_pubkey_tweak_mul(unsigned char *pubkey, int pubkeylen, const un
if (!overflow) {
ret = secp256k1_eckey_pubkey_parse(&p, pubkey, pubkeylen);
if (ret) {
- ret = secp256k1_eckey_pubkey_tweak_mul(&p, &factor);
+ ret = secp256k1_eckey_pubkey_tweak_mul(&ctx->ecmult_ctx, &p, &factor);
}
if (ret) {
int oldlen = pubkeylen;
@@ -344,24 +381,27 @@ int secp256k1_ec_pubkey_tweak_mul(unsigned char *pubkey, int pubkeylen, const un
return ret;
}
-int secp256k1_ec_privkey_export(const unsigned char *seckey, unsigned char *privkey, int *privkeylen, int compressed) {
+int secp256k1_ec_privkey_export(const secp256k1_context_t* ctx, const unsigned char *seckey, unsigned char *privkey, int *privkeylen, int compressed) {
secp256k1_scalar_t key;
int ret = 0;
DEBUG_CHECK(seckey != NULL);
DEBUG_CHECK(privkey != NULL);
DEBUG_CHECK(privkeylen != NULL);
+ DEBUG_CHECK(ctx != NULL);
+ DEBUG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx));
secp256k1_scalar_set_b32(&key, seckey, NULL);
- ret = secp256k1_eckey_privkey_serialize(privkey, privkeylen, &key, compressed);
+ ret = secp256k1_eckey_privkey_serialize(&ctx->ecmult_gen_ctx, privkey, privkeylen, &key, compressed);
secp256k1_scalar_clear(&key);
return ret;
}
-int secp256k1_ec_privkey_import(unsigned char *seckey, const unsigned char *privkey, int privkeylen) {
+int secp256k1_ec_privkey_import(const secp256k1_context_t* ctx, unsigned char *seckey, const unsigned char *privkey, int privkeylen) {
secp256k1_scalar_t key;
int ret = 0;
DEBUG_CHECK(seckey != NULL);
DEBUG_CHECK(privkey != NULL);
+ (void)ctx;
ret = secp256k1_eckey_privkey_parse(&key, privkey, privkeylen);
if (ret) {
@@ -370,3 +410,10 @@ int secp256k1_ec_privkey_import(unsigned char *seckey, const unsigned char *priv
secp256k1_scalar_clear(&key);
return ret;
}
+
+int secp256k1_context_randomize(secp256k1_context_t* ctx, const unsigned char *seed32) {
+ DEBUG_CHECK(ctx != NULL);
+ DEBUG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx));
+ secp256k1_ecmult_gen_blind(&ctx->ecmult_gen_ctx, seed32);
+ return 1;
+}
diff --git a/src/secp256k1/src/tests.c b/src/secp256k1/src/tests.c
index f7f1acac64..d0e05057f2 100644
--- a/src/secp256k1/src/tests.c
+++ b/src/secp256k1/src/tests.c
@@ -1,5 +1,5 @@
/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Copyright (c) 2013, 2014, 2015 Pieter Wuille, Gregory Maxwell *
* Distributed under the MIT software license, see the accompanying *
* file COPYING or http://www.opensource.org/licenses/mit-license.php.*
**********************************************************************/
@@ -24,6 +24,7 @@
#endif
static int count = 64;
+static secp256k1_context_t *ctx = NULL;
void random_field_element_test(secp256k1_fe_t *fe) {
do {
@@ -55,8 +56,9 @@ void random_group_element_test(secp256k1_ge_t *ge) {
secp256k1_fe_t fe;
do {
random_field_element_test(&fe);
- if (secp256k1_ge_set_xo_var(ge, &fe, secp256k1_rand32() & 1))
+ if (secp256k1_ge_set_xo_var(ge, &fe, secp256k1_rand32() & 1)) {
break;
+ }
} while(1);
}
@@ -81,8 +83,9 @@ void random_scalar_order_test(secp256k1_scalar_t *num) {
int overflow = 0;
secp256k1_rand256_test(b32);
secp256k1_scalar_set_b32(num, b32, &overflow);
- if (overflow || secp256k1_scalar_is_zero(num))
+ if (overflow || secp256k1_scalar_is_zero(num)) {
continue;
+ }
break;
} while(1);
}
@@ -93,12 +96,60 @@ void random_scalar_order(secp256k1_scalar_t *num) {
int overflow = 0;
secp256k1_rand256(b32);
secp256k1_scalar_set_b32(num, b32, &overflow);
- if (overflow || secp256k1_scalar_is_zero(num))
+ if (overflow || secp256k1_scalar_is_zero(num)) {
continue;
+ }
break;
} while(1);
}
+void run_context_tests(void) {
+ secp256k1_context_t *none = secp256k1_context_create(0);
+ secp256k1_context_t *sign = secp256k1_context_create(SECP256K1_CONTEXT_SIGN);
+ secp256k1_context_t *vrfy = secp256k1_context_create(SECP256K1_CONTEXT_VERIFY);
+ secp256k1_context_t *both = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
+
+ secp256k1_gej_t pubj;
+ secp256k1_ge_t pub;
+ secp256k1_scalar_t msg, key, nonce;
+ secp256k1_ecdsa_sig_t sig;
+
+ /*** clone and destroy all of them to make sure cloning was complete ***/
+ {
+ secp256k1_context_t *ctx_tmp;
+
+ ctx_tmp = none; none = secp256k1_context_clone(none); secp256k1_context_destroy(ctx_tmp);
+ ctx_tmp = sign; sign = secp256k1_context_clone(sign); secp256k1_context_destroy(ctx_tmp);
+ ctx_tmp = vrfy; vrfy = secp256k1_context_clone(vrfy); secp256k1_context_destroy(ctx_tmp);
+ ctx_tmp = both; both = secp256k1_context_clone(both); secp256k1_context_destroy(ctx_tmp);
+ }
+
+ /*** attempt to use them ***/
+ random_scalar_order_test(&msg);
+ random_scalar_order_test(&key);
+ secp256k1_ecmult_gen(&both->ecmult_gen_ctx, &pubj, &key);
+ secp256k1_ge_set_gej(&pub, &pubj);
+
+ /* obtain a working nonce */
+ do {
+ random_scalar_order_test(&nonce);
+ } while(!secp256k1_ecdsa_sig_sign(&both->ecmult_gen_ctx, &sig, &key, &msg, &nonce, NULL));
+
+ /* try signing */
+ CHECK(secp256k1_ecdsa_sig_sign(&sign->ecmult_gen_ctx, &sig, &key, &msg, &nonce, NULL));
+ CHECK(secp256k1_ecdsa_sig_sign(&both->ecmult_gen_ctx, &sig, &key, &msg, &nonce, NULL));
+
+ /* try verifying */
+ CHECK(secp256k1_ecdsa_sig_verify(&vrfy->ecmult_ctx, &sig, &pub, &msg));
+ CHECK(secp256k1_ecdsa_sig_verify(&both->ecmult_ctx, &sig, &pub, &msg));
+
+ /* cleanup */
+ secp256k1_context_destroy(none);
+ secp256k1_context_destroy(sign);
+ secp256k1_context_destroy(vrfy);
+ secp256k1_context_destroy(both);
+}
+
/***** HASH TESTS *****/
void run_sha256_tests(void) {
@@ -229,8 +280,9 @@ void run_rfc6979_hmac_sha256_tests(void) {
#ifndef USE_NUM_NONE
void random_num_negate(secp256k1_num_t *num) {
- if (secp256k1_rand32() & 1)
+ if (secp256k1_rand32() & 1) {
secp256k1_num_negate(num);
+ }
}
void random_num_order_test(secp256k1_num_t *num) {
@@ -624,8 +676,9 @@ void random_fe_non_zero(secp256k1_fe_t *nz) {
while (--tries >= 0) {
random_fe(nz);
secp256k1_fe_normalize(nz);
- if (!secp256k1_fe_is_zero(nz))
+ if (!secp256k1_fe_is_zero(nz)) {
break;
+ }
}
/* Infinitesimal probability of spurious failure here */
CHECK(tries >= 0);
@@ -700,12 +753,22 @@ void run_field_misc(void) {
CHECK(secp256k1_fe_equal_var(&x, &x));
z = x;
secp256k1_fe_add(&z,&y);
- secp256k1_fe_normalize(&z);
+ /* Test fe conditional move; z is not normalized here. */
+ q = x;
+ secp256k1_fe_cmov(&x, &z, 0);
+ secp256k1_fe_cmov(&x, &x, 1);
+ CHECK(memcmp(&x, &z, sizeof(x)) != 0);
+ CHECK(memcmp(&x, &q, sizeof(x)) == 0);
+ secp256k1_fe_cmov(&q, &z, 1);
+ CHECK(memcmp(&q, &z, sizeof(q)) == 0);
/* Test storage conversion and conditional moves. */
+ secp256k1_fe_normalize(&z);
+ CHECK(!secp256k1_fe_equal_var(&x, &z));
secp256k1_fe_to_storage(&xs, &x);
secp256k1_fe_to_storage(&ys, &y);
secp256k1_fe_to_storage(&zs, &z);
secp256k1_fe_storage_cmov(&zs, &xs, 0);
+ secp256k1_fe_storage_cmov(&zs, &zs, 1);
CHECK(memcmp(&xs, &zs, sizeof(xs)) != 0);
secp256k1_fe_storage_cmov(&ys, &xs, 1);
CHECK(memcmp(&xs, &ys, sizeof(xs)) == 0);
@@ -765,14 +828,17 @@ void run_field_inv_all_var(void) {
for (i = 0; i < count; i++) {
size_t j;
size_t len = (secp256k1_rand32() & 15) + 1;
- for (j = 0; j < len; j++)
+ for (j = 0; j < len; j++) {
random_fe_non_zero(&x[j]);
+ }
secp256k1_fe_inv_all_var(len, xi, x);
- for (j = 0; j < len; j++)
+ for (j = 0; j < len; j++) {
CHECK(check_fe_inverse(&x[j], &xi[j]));
+ }
secp256k1_fe_inv_all_var(len, xii, xi);
- for (j = 0; j < len; j++)
+ for (j = 0; j < len; j++) {
CHECK(check_fe_equal(&x[j], &xii[j]));
+ }
}
}
@@ -844,18 +910,42 @@ void run_sqrt(void) {
void ge_equals_ge(const secp256k1_ge_t *a, const secp256k1_ge_t *b) {
CHECK(a->infinity == b->infinity);
- if (a->infinity)
+ if (a->infinity) {
return;
+ }
CHECK(secp256k1_fe_equal_var(&a->x, &b->x));
CHECK(secp256k1_fe_equal_var(&b->y, &b->y));
}
+/* This compares jacobian points including their Z, not just their geometric meaning. */
+int gej_xyz_equals_gej(const secp256k1_gej_t *a, const secp256k1_gej_t *b) {
+ secp256k1_gej_t a2;
+ secp256k1_gej_t b2;
+ int ret = 1;
+ ret &= a->infinity == b->infinity;
+ if (ret && !a->infinity) {
+ a2 = *a;
+ b2 = *b;
+ secp256k1_fe_normalize(&a2.x);
+ secp256k1_fe_normalize(&a2.y);
+ secp256k1_fe_normalize(&a2.z);
+ secp256k1_fe_normalize(&b2.x);
+ secp256k1_fe_normalize(&b2.y);
+ secp256k1_fe_normalize(&b2.z);
+ ret &= secp256k1_fe_cmp_var(&a2.x, &b2.x) == 0;
+ ret &= secp256k1_fe_cmp_var(&a2.y, &b2.y) == 0;
+ ret &= secp256k1_fe_cmp_var(&a2.z, &b2.z) == 0;
+ }
+ return ret;
+}
+
void ge_equals_gej(const secp256k1_ge_t *a, const secp256k1_gej_t *b) {
secp256k1_fe_t z2s;
secp256k1_fe_t u1, u2, s1, s2;
CHECK(a->infinity == b->infinity);
- if (a->infinity)
+ if (a->infinity) {
return;
+ }
/* Check a.x * b.z^2 == b.x && a.y * b.z^3 == b.y, to avoid inverses. */
secp256k1_fe_sqr(&z2s, &b->z);
secp256k1_fe_mul(&u1, &a->x, &z2s);
@@ -874,8 +964,8 @@ void test_ge(void) {
* All magnitudes are randomized.
* All 17*17 combinations of points are added to eachother, using all applicable methods.
*/
- secp256k1_ge_t *ge = malloc(sizeof(secp256k1_ge_t) * (1 + 4 * runs));
- secp256k1_gej_t *gej = malloc(sizeof(secp256k1_gej_t) * (1 + 4 * runs));
+ secp256k1_ge_t *ge = (secp256k1_ge_t *)malloc(sizeof(secp256k1_ge_t) * (1 + 4 * runs));
+ secp256k1_gej_t *gej = (secp256k1_gej_t *)malloc(sizeof(secp256k1_gej_t) * (1 + 4 * runs));
secp256k1_gej_set_infinity(&gej[0]);
secp256k1_ge_clear(&ge[0]);
secp256k1_ge_set_gej_var(&ge[0], &gej[0]);
@@ -951,7 +1041,7 @@ void test_ge(void) {
/* Test adding all points together in random order equals infinity. */
{
secp256k1_gej_t sum = SECP256K1_GEJ_CONST_INFINITY;
- secp256k1_gej_t *gej_shuffled = malloc((4 * runs + 1) * sizeof(secp256k1_gej_t));
+ secp256k1_gej_t *gej_shuffled = (secp256k1_gej_t *)malloc((4 * runs + 1) * sizeof(secp256k1_gej_t));
for (i = 0; i < 4 * runs + 1; i++) {
gej_shuffled[i] = gej[i];
}
@@ -972,9 +1062,12 @@ void test_ge(void) {
/* Test batch gej -> ge conversion. */
{
- secp256k1_ge_t *ge_set_all = malloc((4 * runs + 1) * sizeof(secp256k1_ge_t));
+ secp256k1_ge_t *ge_set_all = (secp256k1_ge_t *)malloc((4 * runs + 1) * sizeof(secp256k1_ge_t));
secp256k1_ge_set_all_gej_var(4 * runs + 1, ge_set_all, gej);
for (i = 0; i < 4 * runs + 1; i++) {
+ secp256k1_fe_t s;
+ random_fe_non_zero(&s);
+ secp256k1_gej_rescale(&gej[i], &s);
ge_equals_gej(&ge_set_all[i], &gej[i]);
}
free(ge_set_all);
@@ -1025,7 +1118,7 @@ void run_ecmult_chain(void) {
x = a;
for (i = 0; i < 200*count; i++) {
/* in each iteration, compute X = xn*X + gn*G; */
- secp256k1_ecmult(&x, &x, &xn, &gn);
+ secp256k1_ecmult(&ctx->ecmult_ctx, &x, &x, &xn, &gn);
/* also compute ae and ge: the actual accumulated factors for A and G */
/* if X was (ae*A+ge*G), xn*X + gn*G results in (xn*ae*A + (xn*ge+gn)*G) */
secp256k1_scalar_mul(&ae, &ae, &xn);
@@ -1051,7 +1144,7 @@ void run_ecmult_chain(void) {
}
}
/* redo the computation, but directly with the resulting ae and ge coefficients: */
- secp256k1_ecmult(&x2, &a, &ae, &ge);
+ secp256k1_ecmult(&ctx->ecmult_ctx, &x2, &a, &ae, &ge);
secp256k1_gej_neg(&x2, &x2);
secp256k1_gej_add_var(&x2, &x2, &x);
CHECK(secp256k1_gej_is_infinity(&x2));
@@ -1067,8 +1160,8 @@ void test_point_times_order(const secp256k1_gej_t *point) {
int psize = 65;
random_scalar_order_test(&x);
secp256k1_scalar_negate(&nx, &x);
- secp256k1_ecmult(&res1, point, &x, &x); /* calc res1 = x * point + x * G; */
- secp256k1_ecmult(&res2, point, &nx, &nx); /* calc res2 = (order - x) * point + (order - x) * G; */
+ secp256k1_ecmult(&ctx->ecmult_ctx, &res1, point, &x, &x); /* calc res1 = x * point + x * G; */
+ secp256k1_ecmult(&ctx->ecmult_ctx, &res2, point, &nx, &nx); /* calc res2 = (order - x) * point + (order - x) * G; */
secp256k1_gej_add_var(&res1, &res1, &res2);
CHECK(secp256k1_gej_is_infinity(&res1));
CHECK(secp256k1_gej_is_valid_var(&res1) == 0);
@@ -1141,17 +1234,96 @@ void run_wnaf(void) {
secp256k1_scalar_t n;
for (i = 0; i < count; i++) {
random_scalar_order(&n);
- if (i % 1)
- secp256k1_scalar_negate(&n, &n);
test_wnaf(&n, 4+(i%10));
}
}
+void test_ecmult_constants(void) {
+ /* Test ecmult_gen() for [0..36) and [order-36..0). */
+ secp256k1_scalar_t x;
+ secp256k1_gej_t r;
+ secp256k1_ge_t ng;
+ int i;
+ int j;
+ secp256k1_ge_neg(&ng, &secp256k1_ge_const_g);
+ for (i = 0; i < 36; i++ ) {
+ secp256k1_scalar_set_int(&x, i);
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &r, &x);
+ for (j = 0; j < i; j++) {
+ if (j == i - 1) {
+ ge_equals_gej(&secp256k1_ge_const_g, &r);
+ }
+ secp256k1_gej_add_ge(&r, &r, &ng);
+ }
+ CHECK(secp256k1_gej_is_infinity(&r));
+ }
+ for (i = 1; i <= 36; i++ ) {
+ secp256k1_scalar_set_int(&x, i);
+ secp256k1_scalar_negate(&x, &x);
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &r, &x);
+ for (j = 0; j < i; j++) {
+ if (j == i - 1) {
+ ge_equals_gej(&ng, &r);
+ }
+ secp256k1_gej_add_ge(&r, &r, &secp256k1_ge_const_g);
+ }
+ CHECK(secp256k1_gej_is_infinity(&r));
+ }
+}
+
+void run_ecmult_constants(void) {
+ test_ecmult_constants();
+}
+
+void test_ecmult_gen_blind(void) {
+ /* Test ecmult_gen() blinding and confirm that the blinding changes, the affline points match, and the z's don't match. */
+ secp256k1_scalar_t key;
+ secp256k1_scalar_t b;
+ unsigned char seed32[32];
+ secp256k1_gej_t pgej;
+ secp256k1_gej_t pgej2;
+ secp256k1_gej_t i;
+ secp256k1_ge_t pge;
+ random_scalar_order_test(&key);
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pgej, &key);
+ secp256k1_rand256(seed32);
+ b = ctx->ecmult_gen_ctx.blind;
+ i = ctx->ecmult_gen_ctx.initial;
+ secp256k1_ecmult_gen_blind(&ctx->ecmult_gen_ctx, seed32);
+ CHECK(!secp256k1_scalar_eq(&b, &ctx->ecmult_gen_ctx.blind));
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pgej2, &key);
+ CHECK(!gej_xyz_equals_gej(&pgej, &pgej2));
+ CHECK(!gej_xyz_equals_gej(&i, &ctx->ecmult_gen_ctx.initial));
+ secp256k1_ge_set_gej(&pge, &pgej);
+ ge_equals_gej(&pge, &pgej2);
+}
+
+void test_ecmult_gen_blind_reset(void) {
+ /* Test ecmult_gen() blinding reset and confirm that the blinding is consistent. */
+ secp256k1_scalar_t b;
+ secp256k1_gej_t initial;
+ secp256k1_ecmult_gen_blind(&ctx->ecmult_gen_ctx, 0);
+ b = ctx->ecmult_gen_ctx.blind;
+ initial = ctx->ecmult_gen_ctx.initial;
+ secp256k1_ecmult_gen_blind(&ctx->ecmult_gen_ctx, 0);
+ CHECK(secp256k1_scalar_eq(&b, &ctx->ecmult_gen_ctx.blind));
+ CHECK(gej_xyz_equals_gej(&initial, &ctx->ecmult_gen_ctx.initial));
+}
+
+void run_ecmult_gen_blind(void) {
+ int i;
+ test_ecmult_gen_blind_reset();
+ for (i = 0; i < 10; i++) {
+ test_ecmult_gen_blind();
+ }
+}
+
+
void random_sign(secp256k1_ecdsa_sig_t *sig, const secp256k1_scalar_t *key, const secp256k1_scalar_t *msg, int *recid) {
secp256k1_scalar_t nonce;
do {
random_scalar_order_test(&nonce);
- } while(!secp256k1_ecdsa_sig_sign(sig, key, msg, &nonce, recid));
+ } while(!secp256k1_ecdsa_sig_sign(&ctx->ecmult_gen_ctx, sig, key, msg, &nonce, recid));
}
void test_ecdsa_sign_verify(void) {
@@ -1164,15 +1336,17 @@ void test_ecdsa_sign_verify(void) {
int getrec;
random_scalar_order_test(&msg);
random_scalar_order_test(&key);
- secp256k1_ecmult_gen(&pubj, &key);
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pubj, &key);
secp256k1_ge_set_gej(&pub, &pubj);
getrec = secp256k1_rand32()&1;
random_sign(&sig, &key, &msg, getrec?&recid:NULL);
- if (getrec) CHECK(recid >= 0 && recid < 4);
- CHECK(secp256k1_ecdsa_sig_verify(&sig, &pub, &msg));
+ if (getrec) {
+ CHECK(recid >= 0 && recid < 4);
+ }
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sig, &pub, &msg));
secp256k1_scalar_set_int(&one, 1);
secp256k1_scalar_add(&msg, &msg, &one);
- CHECK(!secp256k1_ecdsa_sig_verify(&sig, &pub, &msg));
+ CHECK(!secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sig, &pub, &msg));
}
void run_ecdsa_sign_verify(void) {
@@ -1192,7 +1366,9 @@ static int precomputed_nonce_function(unsigned char *nonce32, const unsigned cha
static int nonce_function_test_fail(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, unsigned int counter, const void *data) {
/* Dummy nonce generator that has a fatal error on the first counter value. */
- if (counter == 0) return 0;
+ if (counter == 0) {
+ return 0;
+ }
return nonce_function_rfc6979(nonce32, msg32, key32, counter - 1, data);
}
@@ -1200,7 +1376,9 @@ static int nonce_function_test_retry(unsigned char *nonce32, const unsigned char
/* Dummy nonce generator that produces unacceptable nonces for the first several counter values. */
if (counter < 3) {
memset(nonce32, counter==0 ? 0 : 255, 32);
- if (counter == 2) nonce32[31]--;
+ if (counter == 2) {
+ nonce32[31]--;
+ }
return 1;
}
if (counter < 5) {
@@ -1211,12 +1389,16 @@ static int nonce_function_test_retry(unsigned char *nonce32, const unsigned char
0xBF,0xD2,0x5E,0x8C,0xD0,0x36,0x41,0x41
};
memcpy(nonce32, order, 32);
- if (counter == 4) nonce32[31]++;
+ if (counter == 4) {
+ nonce32[31]++;
+ }
return 1;
}
/* Retry rate of 6979 is negligible esp. as we only call this in determinstic tests. */
/* If someone does fine a case where it retries for secp256k1, we'd like to know. */
- if (counter > 5) return 0;
+ if (counter > 5) {
+ return 0;
+ }
return nonce_function_rfc6979(nonce32, msg32, key32, counter - 5, data);
}
@@ -1257,16 +1439,16 @@ void test_ecdsa_end_to_end(void) {
}
/* Construct and verify corresponding public key. */
- CHECK(secp256k1_ec_seckey_verify(privkey) == 1);
- CHECK(secp256k1_ec_pubkey_create(pubkey, &pubkeylen, privkey, (secp256k1_rand32() & 3) != 0) == 1);
+ CHECK(secp256k1_ec_seckey_verify(ctx, privkey) == 1);
+ CHECK(secp256k1_ec_pubkey_create(ctx, pubkey, &pubkeylen, privkey, (secp256k1_rand32() & 3) != 0) == 1);
if (secp256k1_rand32() & 1) {
- CHECK(secp256k1_ec_pubkey_decompress(pubkey, &pubkeylen));
+ CHECK(secp256k1_ec_pubkey_decompress(ctx, pubkey, &pubkeylen));
}
- CHECK(secp256k1_ec_pubkey_verify(pubkey, pubkeylen));
+ CHECK(secp256k1_ec_pubkey_verify(ctx, pubkey, pubkeylen));
/* Verify private key import and export. */
- CHECK(secp256k1_ec_privkey_export(privkey, seckey, &seckeylen, secp256k1_rand32() % 2) == 1);
- CHECK(secp256k1_ec_privkey_import(privkey2, seckey, seckeylen) == 1);
+ CHECK(secp256k1_ec_privkey_export(ctx, privkey, seckey, &seckeylen, secp256k1_rand32() % 2) == 1);
+ CHECK(secp256k1_ec_privkey_import(ctx, privkey2, seckey, seckeylen) == 1);
CHECK(memcmp(privkey, privkey2, 32) == 0);
/* Optionally tweak the keys using addition. */
@@ -1277,11 +1459,13 @@ void test_ecdsa_end_to_end(void) {
unsigned char pubkey2[65];
int pubkeylen2 = 65;
secp256k1_rand256_test(rnd);
- ret1 = secp256k1_ec_privkey_tweak_add(privkey, rnd);
- ret2 = secp256k1_ec_pubkey_tweak_add(pubkey, pubkeylen, rnd);
+ ret1 = secp256k1_ec_privkey_tweak_add(ctx, privkey, rnd);
+ ret2 = secp256k1_ec_pubkey_tweak_add(ctx, pubkey, pubkeylen, rnd);
CHECK(ret1 == ret2);
- if (ret1 == 0) return;
- CHECK(secp256k1_ec_pubkey_create(pubkey2, &pubkeylen2, privkey, pubkeylen == 33) == 1);
+ if (ret1 == 0) {
+ return;
+ }
+ CHECK(secp256k1_ec_pubkey_create(ctx, pubkey2, &pubkeylen2, privkey, pubkeylen == 33) == 1);
CHECK(memcmp(pubkey, pubkey2, pubkeylen) == 0);
}
@@ -1293,25 +1477,27 @@ void test_ecdsa_end_to_end(void) {
unsigned char pubkey2[65];
int pubkeylen2 = 65;
secp256k1_rand256_test(rnd);
- ret1 = secp256k1_ec_privkey_tweak_mul(privkey, rnd);
- ret2 = secp256k1_ec_pubkey_tweak_mul(pubkey, pubkeylen, rnd);
+ ret1 = secp256k1_ec_privkey_tweak_mul(ctx, privkey, rnd);
+ ret2 = secp256k1_ec_pubkey_tweak_mul(ctx, pubkey, pubkeylen, rnd);
CHECK(ret1 == ret2);
- if (ret1 == 0) return;
- CHECK(secp256k1_ec_pubkey_create(pubkey2, &pubkeylen2, privkey, pubkeylen == 33) == 1);
+ if (ret1 == 0) {
+ return;
+ }
+ CHECK(secp256k1_ec_pubkey_create(ctx, pubkey2, &pubkeylen2, privkey, pubkeylen == 33) == 1);
CHECK(memcmp(pubkey, pubkey2, pubkeylen) == 0);
}
/* Sign. */
- CHECK(secp256k1_ecdsa_sign(message, signature, &signaturelen, privkey, NULL, NULL) == 1);
+ CHECK(secp256k1_ecdsa_sign(ctx, message, signature, &signaturelen, privkey, NULL, NULL) == 1);
CHECK(signaturelen > 0);
- CHECK(secp256k1_ecdsa_sign(message, signature2, &signaturelen2, privkey, NULL, extra) == 1);
+ CHECK(secp256k1_ecdsa_sign(ctx, message, signature2, &signaturelen2, privkey, NULL, extra) == 1);
CHECK(signaturelen2 > 0);
extra[31] = 1;
- CHECK(secp256k1_ecdsa_sign(message, signature3, &signaturelen3, privkey, NULL, extra) == 1);
+ CHECK(secp256k1_ecdsa_sign(ctx, message, signature3, &signaturelen3, privkey, NULL, extra) == 1);
CHECK(signaturelen3 > 0);
extra[31] = 0;
extra[0] = 1;
- CHECK(secp256k1_ecdsa_sign(message, signature4, &signaturelen4, privkey, NULL, extra) == 1);
+ CHECK(secp256k1_ecdsa_sign(ctx, message, signature4, &signaturelen4, privkey, NULL, extra) == 1);
CHECK(signaturelen3 > 0);
CHECK((signaturelen != signaturelen2) || (memcmp(signature, signature2, signaturelen) != 0));
CHECK((signaturelen != signaturelen3) || (memcmp(signature, signature3, signaturelen) != 0));
@@ -1320,24 +1506,24 @@ void test_ecdsa_end_to_end(void) {
CHECK((signaturelen4 != signaturelen2) || (memcmp(signature4, signature2, signaturelen4) != 0));
CHECK((signaturelen4 != signaturelen) || (memcmp(signature4, signature, signaturelen4) != 0));
/* Verify. */
- CHECK(secp256k1_ecdsa_verify(message, signature, signaturelen, pubkey, pubkeylen) == 1);
- CHECK(secp256k1_ecdsa_verify(message, signature2, signaturelen2, pubkey, pubkeylen) == 1);
- CHECK(secp256k1_ecdsa_verify(message, signature3, signaturelen3, pubkey, pubkeylen) == 1);
- CHECK(secp256k1_ecdsa_verify(message, signature4, signaturelen4, pubkey, pubkeylen) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, message, signature, signaturelen, pubkey, pubkeylen) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, message, signature2, signaturelen2, pubkey, pubkeylen) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, message, signature3, signaturelen3, pubkey, pubkeylen) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, message, signature4, signaturelen4, pubkey, pubkeylen) == 1);
/* Destroy signature and verify again. */
signature[signaturelen - 1 - secp256k1_rand32() % 20] += 1 + (secp256k1_rand32() % 255);
- CHECK(secp256k1_ecdsa_verify(message, signature, signaturelen, pubkey, pubkeylen) != 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, message, signature, signaturelen, pubkey, pubkeylen) != 1);
/* Compact sign. */
- CHECK(secp256k1_ecdsa_sign_compact(message, csignature, privkey, NULL, NULL, &recid) == 1);
+ CHECK(secp256k1_ecdsa_sign_compact(ctx, message, csignature, privkey, NULL, NULL, &recid) == 1);
CHECK(!is_empty_compact_signature(csignature));
/* Recover. */
- CHECK(secp256k1_ecdsa_recover_compact(message, csignature, recpubkey, &recpubkeylen, pubkeylen == 33, recid) == 1);
+ CHECK(secp256k1_ecdsa_recover_compact(ctx, message, csignature, recpubkey, &recpubkeylen, pubkeylen == 33, recid) == 1);
CHECK(recpubkeylen == pubkeylen);
CHECK(memcmp(pubkey, recpubkey, pubkeylen) == 0);
/* Destroy signature and verify again. */
csignature[secp256k1_rand32() % 64] += 1 + (secp256k1_rand32() % 255);
- CHECK(secp256k1_ecdsa_recover_compact(message, csignature, recpubkey, &recpubkeylen, pubkeylen == 33, recid) != 1 ||
+ CHECK(secp256k1_ecdsa_recover_compact(ctx, message, csignature, recpubkey, &recpubkeylen, pubkeylen == 33, recid) != 1 ||
memcmp(pubkey, recpubkey, pubkeylen) != 0);
CHECK(recpubkeylen == pubkeylen);
@@ -1351,7 +1537,9 @@ void test_random_pubkeys(void) {
uint32_t r = secp256k1_rand32();
int len = (r & 3) == 0 ? 65 : 33;
r>>=2;
- if ((r & 3) == 0) len = (r & 252) >> 3;
+ if ((r & 3) == 0) {
+ len = (r & 252) >> 3;
+ }
r>>=8;
if (len == 65) {
in[0] = (r & 2) ? 4 : (r & 1? 6 : 7);
@@ -1359,10 +1547,16 @@ void test_random_pubkeys(void) {
in[0] = (r & 1) ? 2 : 3;
}
r>>=2;
- if ((r & 7) == 0) in[0] = (r & 2040) >> 3;
+ if ((r & 7) == 0) {
+ in[0] = (r & 2040) >> 3;
+ }
r>>=11;
- if (len > 1) secp256k1_rand256(&in[1]);
- if (len > 33) secp256k1_rand256(&in[33]);
+ if (len > 1) {
+ secp256k1_rand256(&in[1]);
+ }
+ if (len > 33) {
+ secp256k1_rand256(&in[33]);
+ }
if (secp256k1_eckey_pubkey_parse(&elem, in, len)) {
unsigned char out[65];
unsigned char firstb;
@@ -1374,7 +1568,9 @@ void test_random_pubkeys(void) {
CHECK(size == len);
CHECK(memcmp(&in[1], &out[1], len-1) == 0);
/* ... except for the type of hybrid inputs. */
- if ((in[0] != 6) && (in[0] != 7)) CHECK(in[0] == out[0]);
+ if ((in[0] != 6) && (in[0] != 7)) {
+ CHECK(in[0] == out[0]);
+ }
size = 65;
CHECK(secp256k1_eckey_pubkey_serialize(&elem, in, &size, 0));
CHECK(size == 65);
@@ -1384,8 +1580,11 @@ void test_random_pubkeys(void) {
in[0] = (r & 1) ? 6 : 7;
res = secp256k1_eckey_pubkey_parse(&elem2, in, size);
if (firstb == 2 || firstb == 3) {
- if (in[0] == firstb + 4) CHECK(res);
- else CHECK(!res);
+ if (in[0] == firstb + 4) {
+ CHECK(res);
+ } else {
+ CHECK(!res);
+ }
}
if (res) {
ge_equals_ge(&elem,&elem2);
@@ -1447,10 +1646,10 @@ void test_ecdsa_edge_cases(void) {
int pubkeyblen = 33;
int recid;
- CHECK(!secp256k1_ecdsa_recover_compact(msg32, sig64, pubkey, &pubkeylen, 0, 0));
- CHECK(secp256k1_ecdsa_recover_compact(msg32, sig64, pubkey, &pubkeylen, 0, 1));
- CHECK(!secp256k1_ecdsa_recover_compact(msg32, sig64, pubkey, &pubkeylen, 0, 2));
- CHECK(!secp256k1_ecdsa_recover_compact(msg32, sig64, pubkey, &pubkeylen, 0, 3));
+ CHECK(!secp256k1_ecdsa_recover_compact(ctx, msg32, sig64, pubkey, &pubkeylen, 0, 0));
+ CHECK(secp256k1_ecdsa_recover_compact(ctx, msg32, sig64, pubkey, &pubkeylen, 0, 1));
+ CHECK(!secp256k1_ecdsa_recover_compact(ctx, msg32, sig64, pubkey, &pubkeylen, 0, 2));
+ CHECK(!secp256k1_ecdsa_recover_compact(ctx, msg32, sig64, pubkey, &pubkeylen, 0, 3));
for (recid = 0; recid < 4; recid++) {
int i;
@@ -1495,42 +1694,44 @@ void test_ecdsa_edge_cases(void) {
0xE6, 0xAF, 0x48, 0xA0, 0x3B, 0xBF, 0xD2, 0x5E,
0x8C, 0xD0, 0x36, 0x41, 0x45, 0x02, 0x01, 0x04
};
- CHECK(secp256k1_ecdsa_recover_compact(msg32, sigb64, pubkeyb, &pubkeyblen, 1, recid));
- CHECK(secp256k1_ecdsa_verify(msg32, sigbder, sizeof(sigbder), pubkeyb, pubkeyblen) == 1);
+ CHECK(secp256k1_ecdsa_recover_compact(ctx, msg32, sigb64, pubkeyb, &pubkeyblen, 1, recid));
+ CHECK(secp256k1_ecdsa_verify(ctx, msg32, sigbder, sizeof(sigbder), pubkeyb, pubkeyblen) == 1);
for (recid2 = 0; recid2 < 4; recid2++) {
unsigned char pubkey2b[33];
int pubkey2blen = 33;
- CHECK(secp256k1_ecdsa_recover_compact(msg32, sigb64, pubkey2b, &pubkey2blen, 1, recid2));
+ CHECK(secp256k1_ecdsa_recover_compact(ctx, msg32, sigb64, pubkey2b, &pubkey2blen, 1, recid2));
/* Verifying with (order + r,4) should always fail. */
- CHECK(secp256k1_ecdsa_verify(msg32, sigbderlong, sizeof(sigbderlong), pubkey2b, pubkey2blen) != 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, msg32, sigbderlong, sizeof(sigbderlong), pubkey2b, pubkey2blen) != 1);
}
/* DER parsing tests. */
/* Zero length r/s. */
- CHECK(secp256k1_ecdsa_verify(msg32, sigcder_zr, sizeof(sigcder_zr), pubkeyb, pubkeyblen) == -2);
- CHECK(secp256k1_ecdsa_verify(msg32, sigcder_zs, sizeof(sigcder_zs), pubkeyb, pubkeyblen) == -2);
+ CHECK(secp256k1_ecdsa_verify(ctx, msg32, sigcder_zr, sizeof(sigcder_zr), pubkeyb, pubkeyblen) == -2);
+ CHECK(secp256k1_ecdsa_verify(ctx, msg32, sigcder_zs, sizeof(sigcder_zs), pubkeyb, pubkeyblen) == -2);
/* Leading zeros. */
- CHECK(secp256k1_ecdsa_verify(msg32, sigbderalt1, sizeof(sigbderalt1), pubkeyb, pubkeyblen) == 1);
- CHECK(secp256k1_ecdsa_verify(msg32, sigbderalt2, sizeof(sigbderalt2), pubkeyb, pubkeyblen) == 1);
- CHECK(secp256k1_ecdsa_verify(msg32, sigbderalt3, sizeof(sigbderalt3), pubkeyb, pubkeyblen) == 1);
- CHECK(secp256k1_ecdsa_verify(msg32, sigbderalt4, sizeof(sigbderalt4), pubkeyb, pubkeyblen) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, msg32, sigbderalt1, sizeof(sigbderalt1), pubkeyb, pubkeyblen) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, msg32, sigbderalt2, sizeof(sigbderalt2), pubkeyb, pubkeyblen) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, msg32, sigbderalt3, sizeof(sigbderalt3), pubkeyb, pubkeyblen) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, msg32, sigbderalt4, sizeof(sigbderalt4), pubkeyb, pubkeyblen) == 1);
sigbderalt3[4] = 1;
- CHECK(secp256k1_ecdsa_verify(msg32, sigbderalt3, sizeof(sigbderalt3), pubkeyb, pubkeyblen) == -2);
+ CHECK(secp256k1_ecdsa_verify(ctx, msg32, sigbderalt3, sizeof(sigbderalt3), pubkeyb, pubkeyblen) == -2);
sigbderalt4[7] = 1;
- CHECK(secp256k1_ecdsa_verify(msg32, sigbderalt4, sizeof(sigbderalt4), pubkeyb, pubkeyblen) == -2);
+ CHECK(secp256k1_ecdsa_verify(ctx, msg32, sigbderalt4, sizeof(sigbderalt4), pubkeyb, pubkeyblen) == -2);
/* Damage signature. */
sigbder[7]++;
- CHECK(secp256k1_ecdsa_verify(msg32, sigbder, sizeof(sigbder), pubkeyb, pubkeyblen) == 0);
+ CHECK(secp256k1_ecdsa_verify(ctx, msg32, sigbder, sizeof(sigbder), pubkeyb, pubkeyblen) == 0);
sigbder[7]--;
- CHECK(secp256k1_ecdsa_verify(msg32, sigbder, 6, pubkeyb, pubkeyblen) == -2);
- CHECK(secp256k1_ecdsa_verify(msg32, sigbder, sizeof(sigbder)-1, pubkeyb, pubkeyblen) == -2);
+ CHECK(secp256k1_ecdsa_verify(ctx, msg32, sigbder, 6, pubkeyb, pubkeyblen) == -2);
+ CHECK(secp256k1_ecdsa_verify(ctx, msg32, sigbder, sizeof(sigbder)-1, pubkeyb, pubkeyblen) == -2);
for(i = 0; i < 8; i++) {
int c;
unsigned char orig = sigbder[i];
/*Try every single-byte change.*/
for (c = 0; c < 256; c++) {
- if (c == orig ) continue;
+ if (c == orig ) {
+ continue;
+ }
sigbder[i] = c;
- CHECK(secp256k1_ecdsa_verify(msg32, sigbder, sizeof(sigbder), pubkeyb, pubkeyblen) ==
+ CHECK(secp256k1_ecdsa_verify(ctx, msg32, sigbder, sizeof(sigbder), pubkeyb, pubkeyblen) ==
(i==4 || i==7) ? 0 : -2 );
}
sigbder[i] = orig;
@@ -1547,10 +1748,10 @@ void test_ecdsa_edge_cases(void) {
secp256k1_scalar_negate(&sig.s, &sig.s);
secp256k1_scalar_inverse(&sig.s, &sig.s);
secp256k1_scalar_set_int(&sig.r, 1);
- secp256k1_ecmult_gen(&keyj, &sig.r);
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &keyj, &sig.r);
secp256k1_ge_set_gej(&key, &keyj);
msg = sig.s;
- CHECK(secp256k1_ecdsa_sig_verify(&sig, &key, &msg) == 0);
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sig, &key, &msg) == 0);
}
/* Test r/s equal to zero */
@@ -1569,18 +1770,18 @@ void test_ecdsa_edge_cases(void) {
};
unsigned char pubkeyc[65];
int pubkeyclen = 65;
- CHECK(secp256k1_ecdsa_recover_compact(msg32, sigc64, pubkeyc, &pubkeyclen, 0, 0) == 1);
- CHECK(secp256k1_ecdsa_verify(msg32, sigcder, sizeof(sigcder), pubkeyc, pubkeyclen) == 1);
+ CHECK(secp256k1_ecdsa_recover_compact(ctx, msg32, sigc64, pubkeyc, &pubkeyclen, 0, 0) == 1);
+ CHECK(secp256k1_ecdsa_verify(ctx, msg32, sigcder, sizeof(sigcder), pubkeyc, pubkeyclen) == 1);
sigcder[4] = 0;
sigc64[31] = 0;
- CHECK(secp256k1_ecdsa_recover_compact(msg32, sigc64, pubkeyb, &pubkeyblen, 1, 0) == 0);
- CHECK(secp256k1_ecdsa_verify(msg32, sigcder, sizeof(sigcder), pubkeyc, pubkeyclen) == 0);
+ CHECK(secp256k1_ecdsa_recover_compact(ctx, msg32, sigc64, pubkeyb, &pubkeyblen, 1, 0) == 0);
+ CHECK(secp256k1_ecdsa_verify(ctx, msg32, sigcder, sizeof(sigcder), pubkeyc, pubkeyclen) == 0);
sigcder[4] = 1;
sigcder[7] = 0;
sigc64[31] = 1;
sigc64[63] = 0;
- CHECK(secp256k1_ecdsa_recover_compact(msg32, sigc64, pubkeyb, &pubkeyblen, 1, 0) == 0);
- CHECK(secp256k1_ecdsa_verify(msg32, sigcder, sizeof(sigcder), pubkeyc, pubkeyclen) == 0);
+ CHECK(secp256k1_ecdsa_recover_compact(ctx, msg32, sigc64, pubkeyb, &pubkeyblen, 1, 0) == 0);
+ CHECK(secp256k1_ecdsa_verify(ctx, msg32, sigcder, sizeof(sigcder), pubkeyc, pubkeyclen) == 0);
}
/*Signature where s would be zero.*/
@@ -1611,18 +1812,18 @@ void test_ecdsa_edge_cases(void) {
};
unsigned char sig[72];
int siglen = 72;
- CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, precomputed_nonce_function, nonce) == 0);
+ CHECK(secp256k1_ecdsa_sign(ctx, msg, sig, &siglen, key, precomputed_nonce_function, nonce) == 0);
CHECK(siglen == 0);
- CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, precomputed_nonce_function, nonce2) == 0);
+ CHECK(secp256k1_ecdsa_sign(ctx, msg, sig, &siglen, key, precomputed_nonce_function, nonce2) == 0);
CHECK(siglen == 0);
msg[31] = 0xaa;
siglen = 72;
- CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, precomputed_nonce_function, nonce) == 1);
+ CHECK(secp256k1_ecdsa_sign(ctx, msg, sig, &siglen, key, precomputed_nonce_function, nonce) == 1);
CHECK(siglen > 0);
- CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, precomputed_nonce_function, nonce2) == 1);
+ CHECK(secp256k1_ecdsa_sign(ctx, msg, sig, &siglen, key, precomputed_nonce_function, nonce2) == 1);
CHECK(siglen > 0);
siglen = 10;
- CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, precomputed_nonce_function, nonce) != 1);
+ CHECK(secp256k1_ecdsa_sign(ctx, msg, sig, &siglen, key, precomputed_nonce_function, nonce) != 1);
CHECK(siglen == 0);
}
@@ -1644,41 +1845,41 @@ void test_ecdsa_edge_cases(void) {
msg[31] = 1;
/* High key results in signature failure. */
memset(key, 0xFF, 32);
- CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, NULL, extra) == 0);
+ CHECK(secp256k1_ecdsa_sign(ctx, msg, sig, &siglen, key, NULL, extra) == 0);
CHECK(siglen == 0);
/* Zero key results in signature failure. */
memset(key, 0, 32);
- CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, NULL, extra) == 0);
+ CHECK(secp256k1_ecdsa_sign(ctx, msg, sig, &siglen, key, NULL, extra) == 0);
CHECK(siglen == 0);
/* Nonce function failure results in signature failure. */
key[31] = 1;
- CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, nonce_function_test_fail, extra) == 0);
+ CHECK(secp256k1_ecdsa_sign(ctx, msg, sig, &siglen, key, nonce_function_test_fail, extra) == 0);
CHECK(siglen == 0);
- CHECK(secp256k1_ecdsa_sign_compact(msg, sig, key, nonce_function_test_fail, extra, &recid) == 0);
+ CHECK(secp256k1_ecdsa_sign_compact(ctx, msg, sig, key, nonce_function_test_fail, extra, &recid) == 0);
CHECK(is_empty_compact_signature(sig));
/* The retry loop successfully makes its way to the first good value. */
siglen = 72;
- CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, nonce_function_test_retry, extra) == 1);
+ CHECK(secp256k1_ecdsa_sign(ctx, msg, sig, &siglen, key, nonce_function_test_retry, extra) == 1);
CHECK(siglen > 0);
- CHECK(secp256k1_ecdsa_sign(msg, sig2, &siglen2, key, nonce_function_rfc6979, extra) == 1);
+ CHECK(secp256k1_ecdsa_sign(ctx, msg, sig2, &siglen2, key, nonce_function_rfc6979, extra) == 1);
CHECK(siglen > 0);
CHECK((siglen == siglen2) && (memcmp(sig, sig2, siglen) == 0));
- CHECK(secp256k1_ecdsa_sign_compact(msg, sig, key, nonce_function_test_retry, extra, &recid) == 1);
+ CHECK(secp256k1_ecdsa_sign_compact(ctx, msg, sig, key, nonce_function_test_retry, extra, &recid) == 1);
CHECK(!is_empty_compact_signature(sig));
- CHECK(secp256k1_ecdsa_sign_compact(msg, sig2, key, nonce_function_rfc6979, extra, &recid2) == 1);
+ CHECK(secp256k1_ecdsa_sign_compact(ctx, msg, sig2, key, nonce_function_rfc6979, extra, &recid2) == 1);
CHECK(!is_empty_compact_signature(sig2));
CHECK((recid == recid2) && (memcmp(sig, sig2, 64) == 0));
/* The default nonce function is determinstic. */
siglen = 72;
siglen2 = 72;
- CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, NULL, extra) == 1);
+ CHECK(secp256k1_ecdsa_sign(ctx, msg, sig, &siglen, key, NULL, extra) == 1);
CHECK(siglen > 0);
- CHECK(secp256k1_ecdsa_sign(msg, sig2, &siglen2, key, NULL, extra) == 1);
+ CHECK(secp256k1_ecdsa_sign(ctx, msg, sig2, &siglen2, key, NULL, extra) == 1);
CHECK(siglen2 > 0);
CHECK((siglen == siglen2) && (memcmp(sig, sig2, siglen) == 0));
- CHECK(secp256k1_ecdsa_sign_compact(msg, sig, key, NULL, extra, &recid) == 1);
+ CHECK(secp256k1_ecdsa_sign_compact(ctx, msg, sig, key, NULL, extra, &recid) == 1);
CHECK(!is_empty_compact_signature(sig));
- CHECK(secp256k1_ecdsa_sign_compact(msg, sig2, key, NULL, extra, &recid2) == 1);
+ CHECK(secp256k1_ecdsa_sign_compact(ctx, msg, sig2, key, NULL, extra, &recid2) == 1);
CHECK(!is_empty_compact_signature(sig));
CHECK((recid == recid2) && (memcmp(sig, sig2, 64) == 0));
/* The default nonce function changes output with different messages. */
@@ -1686,7 +1887,7 @@ void test_ecdsa_edge_cases(void) {
int j;
siglen2 = 72;
msg[0] = i;
- CHECK(secp256k1_ecdsa_sign(msg, sig2, &siglen2, key, NULL, extra) == 1);
+ CHECK(secp256k1_ecdsa_sign(ctx, msg, sig2, &siglen2, key, NULL, extra) == 1);
CHECK(!is_empty_compact_signature(sig));
CHECK(secp256k1_ecdsa_sig_parse(&s[i], sig2, siglen2));
for (j = 0; j < i; j++) {
@@ -1700,7 +1901,7 @@ void test_ecdsa_edge_cases(void) {
int j;
siglen2 = 72;
key[0] = i - 256;
- CHECK(secp256k1_ecdsa_sign(msg, sig2, &siglen2, key, NULL, extra) == 1);
+ CHECK(secp256k1_ecdsa_sign(ctx, msg, sig2, &siglen2, key, NULL, extra) == 1);
CHECK(secp256k1_ecdsa_sig_parse(&s[i], sig2, siglen2));
for (j = 0; j < i; j++) {
CHECK(!secp256k1_scalar_eq(&s[i].r, &s[j].r));
@@ -1719,8 +1920,8 @@ void test_ecdsa_edge_cases(void) {
0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41,
};
int outlen = 300;
- CHECK(!secp256k1_ec_privkey_export(seckey, privkey, &outlen, 0));
- CHECK(!secp256k1_ec_privkey_export(seckey, privkey, &outlen, 1));
+ CHECK(!secp256k1_ec_privkey_export(ctx, seckey, privkey, &outlen, 0));
+ CHECK(!secp256k1_ec_privkey_export(ctx, seckey, privkey, &outlen, 1));
}
}
@@ -1735,7 +1936,7 @@ EC_KEY *get_openssl_key(const secp256k1_scalar_t *key) {
const unsigned char* pbegin = privkey;
int compr = secp256k1_rand32() & 1;
EC_KEY *ec_key = EC_KEY_new_by_curve_name(NID_secp256k1);
- CHECK(secp256k1_eckey_privkey_serialize(privkey, &privkeylen, key, compr));
+ CHECK(secp256k1_eckey_privkey_serialize(&ctx->ecmult_gen_ctx, privkey, &privkeylen, key, compr));
CHECK(d2i_ECPrivateKey(&ec_key, &pbegin, privkeylen));
CHECK(EC_KEY_check_key(ec_key));
return ec_key;
@@ -1756,16 +1957,16 @@ void test_ecdsa_openssl(void) {
secp256k1_rand256_test(message);
secp256k1_scalar_set_b32(&msg, message, NULL);
random_scalar_order_test(&key);
- secp256k1_ecmult_gen(&qj, &key);
+ secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &qj, &key);
secp256k1_ge_set_gej(&q, &qj);
ec_key = get_openssl_key(&key);
CHECK(ec_key);
CHECK(ECDSA_sign(0, message, sizeof(message), signature, &sigsize, ec_key));
CHECK(secp256k1_ecdsa_sig_parse(&sig, signature, sigsize));
- CHECK(secp256k1_ecdsa_sig_verify(&sig, &q, &msg));
+ CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sig, &q, &msg));
secp256k1_scalar_set_int(&one, 1);
secp256k1_scalar_add(&msg2, &msg, &one);
- CHECK(!secp256k1_ecdsa_sig_verify(&sig, &q, &msg2));
+ CHECK(!secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sig, &q, &msg2));
random_sign(&sig, &key, &msg, NULL);
CHECK(secp256k1_ecdsa_sig_serialize(signature, &secp_sigsize, &sig));
@@ -1825,10 +2026,13 @@ int main(int argc, char **argv) {
printf("random seed = %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n", seed16[0], seed16[1], seed16[2], seed16[3], seed16[4], seed16[5], seed16[6], seed16[7], seed16[8], seed16[9], seed16[10], seed16[11], seed16[12], seed16[13], seed16[14], seed16[15]);
/* initialize */
- secp256k1_start(SECP256K1_START_SIGN | SECP256K1_START_VERIFY);
+ run_context_tests();
+ ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
- /* initializing a second time shouldn't cause any harm or memory leaks. */
- secp256k1_start(SECP256K1_START_SIGN | SECP256K1_START_VERIFY);
+ if (secp256k1_rand32() & 1) {
+ secp256k1_rand256(run32);
+ CHECK(secp256k1_context_randomize(ctx, secp256k1_rand32() & 1 ? run32 : NULL));
+ }
run_sha256_tests();
run_hmac_sha256_tests();
@@ -1858,6 +2062,8 @@ int main(int argc, char **argv) {
run_wnaf();
run_point_times_order();
run_ecmult_chain();
+ run_ecmult_constants();
+ run_ecmult_gen_blind();
/* ecdsa tests */
run_random_pubkeys();
@@ -1872,9 +2078,6 @@ int main(int argc, char **argv) {
printf("random run = %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n", run32[0], run32[1], run32[2], run32[3], run32[4], run32[5], run32[6], run32[7], run32[8], run32[9], run32[10], run32[11], run32[12], run32[13], run32[14], run32[15]);
/* shutdown */
- secp256k1_stop();
-
- /* shutting down twice shouldn't cause any double frees. */
- secp256k1_stop();
+ secp256k1_context_destroy(ctx);
return 0;
}
diff --git a/src/serialize.h b/src/serialize.h
index 741f78f8b4..53d8af142f 100644
--- a/src/serialize.h
+++ b/src/serialize.h
@@ -6,6 +6,8 @@
#ifndef BITCOIN_SERIALIZE_H
#define BITCOIN_SERIALIZE_H
+#include "compat/endian.h"
+
#include <algorithm>
#include <assert.h>
#include <ios>
@@ -18,8 +20,6 @@
#include <utility>
#include <vector>
-#include "compat/endian.h"
-
class CScript;
static const unsigned int MAX_SIZE = 0x02000000;
diff --git a/src/support/pagelocker.h b/src/support/pagelocker.h
index 3fd793072f..88b95cce73 100644
--- a/src/support/pagelocker.h
+++ b/src/support/pagelocker.h
@@ -37,7 +37,6 @@ public:
~LockedPageManagerBase()
{
- assert(this->GetLockedPageCount() == 0);
}
diff --git a/src/test/Checkpoints_tests.cpp b/src/test/Checkpoints_tests.cpp
index c3125d76dc..642ce13bcd 100644
--- a/src/test/Checkpoints_tests.cpp
+++ b/src/test/Checkpoints_tests.cpp
@@ -10,6 +10,7 @@
#include "uint256.h"
#include "test/test_bitcoin.h"
+#include "chainparams.h"
#include <boost/test/unit_test.hpp>
@@ -19,21 +20,22 @@ BOOST_FIXTURE_TEST_SUITE(Checkpoints_tests, BasicTestingSetup)
BOOST_AUTO_TEST_CASE(sanity)
{
+ const Checkpoints::CCheckpointData& checkpoints = Params(CBaseChainParams::MAIN).Checkpoints();
uint256 p11111 = uint256S("0x0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d");
uint256 p134444 = uint256S("0x00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe");
- BOOST_CHECK(Checkpoints::CheckBlock(11111, p11111));
- BOOST_CHECK(Checkpoints::CheckBlock(134444, p134444));
+ BOOST_CHECK(Checkpoints::CheckBlock(checkpoints, 11111, p11111));
+ BOOST_CHECK(Checkpoints::CheckBlock(checkpoints, 134444, p134444));
// Wrong hashes at checkpoints should fail:
- BOOST_CHECK(!Checkpoints::CheckBlock(11111, p134444));
- BOOST_CHECK(!Checkpoints::CheckBlock(134444, p11111));
+ BOOST_CHECK(!Checkpoints::CheckBlock(checkpoints, 11111, p134444));
+ BOOST_CHECK(!Checkpoints::CheckBlock(checkpoints, 134444, p11111));
// ... but any hash not at a checkpoint should succeed:
- BOOST_CHECK(Checkpoints::CheckBlock(11111+1, p134444));
- BOOST_CHECK(Checkpoints::CheckBlock(134444+1, p11111));
+ BOOST_CHECK(Checkpoints::CheckBlock(checkpoints, 11111+1, p134444));
+ BOOST_CHECK(Checkpoints::CheckBlock(checkpoints, 134444+1, p11111));
- BOOST_CHECK(Checkpoints::GetTotalBlocksEstimate() >= 134444);
+ BOOST_CHECK(Checkpoints::GetTotalBlocksEstimate(checkpoints) >= 134444);
}
BOOST_AUTO_TEST_SUITE_END()
diff --git a/src/test/bloom_tests.cpp b/src/test/bloom_tests.cpp
index 73a146f05c..1bda8a7ea1 100644
--- a/src/test/bloom_tests.cpp
+++ b/src/test/bloom_tests.cpp
@@ -8,6 +8,7 @@
#include "clientversion.h"
#include "key.h"
#include "merkleblock.h"
+#include "random.h"
#include "serialize.h"
#include "streams.h"
#include "uint256.h"
@@ -459,4 +460,81 @@ BOOST_AUTO_TEST_CASE(merkle_block_4_test_update_none)
BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df5bc041"), 0)));
}
+static std::vector<unsigned char> RandomData()
+{
+ uint256 r = GetRandHash();
+ return std::vector<unsigned char>(r.begin(), r.end());
+}
+
+BOOST_AUTO_TEST_CASE(rolling_bloom)
+{
+ // last-100-entry, 1% false positive:
+ CRollingBloomFilter rb1(100, 0.01, 0);
+
+ // Overfill:
+ static const int DATASIZE=399;
+ std::vector<unsigned char> data[DATASIZE];
+ for (int i = 0; i < DATASIZE; i++) {
+ data[i] = RandomData();
+ rb1.insert(data[i]);
+ }
+ // Last 100 guaranteed to be remembered:
+ for (int i = 299; i < DATASIZE; i++) {
+ BOOST_CHECK(rb1.contains(data[i]));
+ }
+
+ // false positive rate is 1%, so we should get about 100 hits if
+ // testing 10,000 random keys. We get worst-case false positive
+ // behavior when the filter is as full as possible, which is
+ // when we've inserted one minus an integer multiple of nElement*2.
+ unsigned int nHits = 0;
+ for (int i = 0; i < 10000; i++) {
+ if (rb1.contains(RandomData()))
+ ++nHits;
+ }
+ // Run test_bitcoin with --log_level=message to see BOOST_TEST_MESSAGEs:
+ BOOST_TEST_MESSAGE("RollingBloomFilter got " << nHits << " false positives (~100 expected)");
+
+ // Insanely unlikely to get a fp count outside this range:
+ BOOST_CHECK(nHits > 25);
+ BOOST_CHECK(nHits < 175);
+
+ BOOST_CHECK(rb1.contains(data[DATASIZE-1]));
+ rb1.clear();
+ BOOST_CHECK(!rb1.contains(data[DATASIZE-1]));
+
+ // Now roll through data, make sure last 100 entries
+ // are always remembered:
+ for (int i = 0; i < DATASIZE; i++) {
+ if (i >= 100)
+ BOOST_CHECK(rb1.contains(data[i-100]));
+ rb1.insert(data[i]);
+ }
+
+ // Insert 999 more random entries:
+ for (int i = 0; i < 999; i++) {
+ rb1.insert(RandomData());
+ }
+ // Sanity check to make sure the filter isn't just filling up:
+ nHits = 0;
+ for (int i = 0; i < DATASIZE; i++) {
+ if (rb1.contains(data[i]))
+ ++nHits;
+ }
+ // Expect about 5 false positives, more than 100 means
+ // something is definitely broken.
+ BOOST_TEST_MESSAGE("RollingBloomFilter got " << nHits << " false positives (~5 expected)");
+ BOOST_CHECK(nHits < 100);
+
+ // last-1000-entry, 0.01% false positive:
+ CRollingBloomFilter rb2(1000, 0.001, 0);
+ for (int i = 0; i < DATASIZE; i++) {
+ rb2.insert(data[i]);
+ }
+ // ... room for all of them:
+ for (int i = 0; i < DATASIZE; i++) {
+ BOOST_CHECK(rb2.contains(data[i]));
+ }
+}
+
BOOST_AUTO_TEST_SUITE_END()
diff --git a/src/test/coins_tests.cpp b/src/test/coins_tests.cpp
index 2e2cc2214b..34b311b804 100644
--- a/src/test/coins_tests.cpp
+++ b/src/test/coins_tests.cpp
@@ -59,6 +59,24 @@ public:
bool GetStats(CCoinsStats& stats) const { return false; }
};
+
+class CCoinsViewCacheTest : public CCoinsViewCache
+{
+public:
+ CCoinsViewCacheTest(CCoinsView* base) : CCoinsViewCache(base) {}
+
+ void SelfTest() const
+ {
+ // Manually recompute the dynamic usage of the whole data, and compare it.
+ size_t ret = memusage::DynamicUsage(cacheCoins);
+ for (CCoinsMap::iterator it = cacheCoins.begin(); it != cacheCoins.end(); it++) {
+ ret += memusage::DynamicUsage(it->second.coins);
+ }
+ BOOST_CHECK_EQUAL(memusage::DynamicUsage(*this), ret);
+ }
+
+};
+
}
BOOST_FIXTURE_TEST_SUITE(coins_tests, BasicTestingSetup)
@@ -90,8 +108,8 @@ BOOST_AUTO_TEST_CASE(coins_cache_simulation_test)
// The cache stack.
CCoinsViewTest base; // A CCoinsViewTest at the bottom.
- std::vector<CCoinsViewCache*> stack; // A stack of CCoinsViewCaches on top.
- stack.push_back(new CCoinsViewCache(&base)); // Start with one cache.
+ std::vector<CCoinsViewCacheTest*> stack; // A stack of CCoinsViewCaches on top.
+ stack.push_back(new CCoinsViewCacheTest(&base)); // Start with one cache.
// Use a limited set of random transaction ids, so we do test overwriting entries.
std::vector<uint256> txids;
@@ -136,6 +154,9 @@ BOOST_AUTO_TEST_CASE(coins_cache_simulation_test)
missed_an_entry = true;
}
}
+ BOOST_FOREACH(const CCoinsViewCacheTest *test, stack) {
+ test->SelfTest();
+ }
}
if (insecure_rand() % 100 == 0) {
@@ -152,7 +173,7 @@ BOOST_AUTO_TEST_CASE(coins_cache_simulation_test)
} else {
removed_all_caches = true;
}
- stack.push_back(new CCoinsViewCache(tip));
+ stack.push_back(new CCoinsViewCacheTest(tip));
if (stack.size() == 4) {
reached_4_caches = true;
}
diff --git a/src/test/data/script_invalid.json b/src/test/data/script_invalid.json
index 271bc70f73..7afa2abf49 100644
--- a/src/test/data/script_invalid.json
+++ b/src/test/data/script_invalid.json
@@ -141,6 +141,8 @@
["2 2 0 IF LSHIFT ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "LSHIFT disabled"],
["2 2 0 IF RSHIFT ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "RSHIFT disabled"],
+["", "EQUAL NOT", "P2SH,STRICTENC", "EQUAL must error when there are no stack items"],
+["0", "EQUAL NOT", "P2SH,STRICTENC", "EQUAL must error when there are not 2 stack items"],
["0 1","EQUAL", "P2SH,STRICTENC"],
["1 1 ADD", "0 EQUAL", "P2SH,STRICTENC"],
["11 1 ADD 12 SUB", "11 EQUAL", "P2SH,STRICTENC"],
@@ -368,6 +370,16 @@
["NOP", "HASH160 1", "P2SH,STRICTENC"],
["NOP", "HASH256 1", "P2SH,STRICTENC"],
+["Increase CHECKSIG and CHECKMULTISIG negative test coverage"],
+["", "CHECKSIG NOT", "STRICTENC", "CHECKSIG must error when there are no stack items"],
+["0", "CHECKSIG NOT", "STRICTENC", "CHECKSIG must error when there are not 2 stack items"],
+["", "CHECKMULTISIG NOT", "STRICTENC", "CHECKMULTISIG must error when there are no stack items"],
+["", "-1 CHECKMULTISIG NOT", "STRICTENC", "CHECKMULTISIG must error when the specified number of pubkeys is negative"],
+["", "1 CHECKMULTISIG NOT", "STRICTENC", "CHECKMULTISIG must error when there are not enough pubkeys on the stack"],
+["", "-1 0 CHECKMULTISIG NOT", "STRICTENC", "CHECKMULTISIG must error when the specified number of signatures is negative"],
+["", "1 'pk1' 1 CHECKMULTISIG NOT", "STRICTENC", "CHECKMULTISIG must error when there are not enough signatures on the stack"],
+["", "'dummy' 'sig1' 1 'pk1' 1 CHECKMULTISIG IF 1 ENDIF", "", "CHECKMULTISIG must push false to stack when signature is invalid when NOT in strict enc mode"],
+
["",
"0 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG",
"P2SH,STRICTENC",
@@ -426,7 +438,7 @@
["0x4d 0xFF00 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "MINIMALDATA",
"PUSHDATA2 of 255 bytes minimally represented by PUSHDATA1"],
-["0x4f 0x00100000 0x11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "MINIMALDATA",
+["0x4e 0x00010000 0x11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "MINIMALDATA",
"PUSHDATA4 of 256 bytes minimally represented by PUSHDATA2"],
@@ -780,6 +792,12 @@
"P2SH(P2PK) with non-push scriptSig"
],
[
+ "0 0x47 0x304402205451ce65ad844dbb978b8bdedf5082e33b43cae8279c30f2c74d9e9ee49a94f802203fe95a7ccf74da7a232ee523ef4a53cb4d14bdd16289680cdb97a63819b8f42f01 0x46 0x304402205451ce65ad844dbb978b8bdedf5082e33b43cae8279c30f2c74d9e9ee49a94f802203fe95a7ccf74da7a232ee523ef4a53cb4d14bdd16289680cdb97a63819b8f42f",
+ "2 0x21 0x02a673638cb9587cb68ea08dbef685c6f2d2a751a8b3c6f2a7e9a4999e6e4bfaf5 0x21 0x02a673638cb9587cb68ea08dbef685c6f2d2a751a8b3c6f2a7e9a4999e6e4bfaf5 0x21 0x02a673638cb9587cb68ea08dbef685c6f2d2a751a8b3c6f2a7e9a4999e6e4bfaf5 3 CHECKMULTISIG",
+ "P2SH,STRICTENC",
+ "2-of-3 with one valid and one invalid signature due to parse error, nSigs > validSigs"
+],
+[
"11 0x47 0x304402200a5c6163f07b8d3b013c4d1d6dba25e780b39658d79ba37af7057a3b7f15ffa102201fd9b4eaa9943f734928b99a83592c2e7bf342ea2680f6a2bb705167966b742001",
"0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG",
"CLEANSTACK,P2SH",
diff --git a/src/test/data/script_valid.json b/src/test/data/script_valid.json
index 064dde8464..a4e15faeaf 100644
--- a/src/test/data/script_valid.json
+++ b/src/test/data/script_valid.json
@@ -74,12 +74,14 @@
["1 1", "VERIFY", "P2SH,STRICTENC"],
["1 0x05 0x01 0x00 0x00 0x00 0x00", "VERIFY", "P2SH,STRICTENC", "values >4 bytes can be cast to boolean"],
+["1 0x01 0x80", "IF 0 ENDIF", "P2SH,STRICTENC", "negative 0 is false"],
["10 0 11 TOALTSTACK DROP FROMALTSTACK", "ADD 21 EQUAL", "P2SH,STRICTENC"],
["'gavin_was_here' TOALTSTACK 11 FROMALTSTACK", "'gavin_was_here' EQUALVERIFY 11 EQUAL", "P2SH,STRICTENC"],
["0 IFDUP", "DEPTH 1 EQUALVERIFY 0 EQUAL", "P2SH,STRICTENC"],
["1 IFDUP", "DEPTH 2 EQUALVERIFY 1 EQUALVERIFY 1 EQUAL", "P2SH,STRICTENC"],
+["0x05 0x0100000000 IFDUP", "DEPTH 2 EQUALVERIFY 0x05 0x0100000000 EQUAL", "P2SH,STRICTENC", "IFDUP dups non ints"],
["0 DROP", "DEPTH 0 EQUAL", "P2SH,STRICTENC"],
["0", "DUP 1 ADD 1 EQUALVERIFY 0 EQUAL", "P2SH,STRICTENC"],
["0 1", "NIP", "P2SH,STRICTENC"],
@@ -408,6 +410,7 @@
["0 0", "EQUAL", "P2SH,STRICTENC"],
["0 0", "EQUALVERIFY 1", "P2SH,STRICTENC"],
+["0 0 1", "EQUAL EQUAL", "P2SH,STRICTENC", "OP_0 and bools must have identical byte representations"],
["0", "1ADD", "P2SH,STRICTENC"],
["2", "1SUB", "P2SH,STRICTENC"],
diff --git a/src/test/data/tx_invalid.json b/src/test/data/tx_invalid.json
index 456e0d2f7b..31d33c63fb 100644
--- a/src/test/data/tx_invalid.json
+++ b/src/test/data/tx_invalid.json
@@ -19,6 +19,12 @@
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "DUP HASH160 0x14 0x5b6462475454710f3c22f5fdf0b40704c92f25c3 EQUALVERIFY CHECKSIGVERIFY 1 0x4c 0x47 0x3044022067288ea50aa799543a536ff9306f8e1cba05b9c6b10951175b924f96732555ed022026d7b5265f38d21541519e4a1e55044d5b9e17e15cdbaf29ae3792e99e883e7a01"]],
"01000000010001000000000000000000000000000000000000000000000000000000000000000000006b4c473044022067288ea50aa799543a536ff9306f8e1cba05b9c6b10951175b924f96732555ed022026d7b5265f38d21541519e4a1e55044d5b9e17e15cdbaf29ae3792e99e883e7a012103ba8c8b86dea131c22ab967e6dd99bdae8eff7a1f75a2c35f1f944109e3fe5e22ffffffff010000000000000000015100000000", "P2SH"],
+["This is the nearly-standard transaction with CHECKSIGVERIFY 1 instead of CHECKSIG from tx_valid.json"],
+["but with the signature duplicated in the scriptPubKey with a different hashtype suffix"],
+["See FindAndDelete, which will only remove if the signature, including the hash type, matches"],
+[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "DUP HASH160 0x14 0x5b6462475454710f3c22f5fdf0b40704c92f25c3 EQUALVERIFY CHECKSIGVERIFY 1 0x47 0x3044022067288ea50aa799543a536ff9306f8e1cba05b9c6b10951175b924f96732555ed022026d7b5265f38d21541519e4a1e55044d5b9e17e15cdbaf29ae3792e99e883e7a81"]],
+"01000000010001000000000000000000000000000000000000000000000000000000000000000000006a473044022067288ea50aa799543a536ff9306f8e1cba05b9c6b10951175b924f96732555ed022026d7b5265f38d21541519e4a1e55044d5b9e17e15cdbaf29ae3792e99e883e7a012103ba8c8b86dea131c22ab967e6dd99bdae8eff7a1f75a2c35f1f944109e3fe5e22ffffffff010000000000000000015100000000", "P2SH"],
+
["An invalid P2SH Transaction"],
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "HASH160 0x14 0x7a052c840ba73af26755de42cf01cc9e0a49fef0 EQUAL"]],
"010000000100010000000000000000000000000000000000000000000000000000000000000000000009085768617420697320ffffffff010000000000000000015100000000", "P2SH"],
diff --git a/src/test/main_tests.cpp b/src/test/main_tests.cpp
index 9ec533bcca..21ae46d6e9 100644
--- a/src/test/main_tests.cpp
+++ b/src/test/main_tests.cpp
@@ -2,25 +2,58 @@
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
-#include "primitives/transaction.h"
+#include "chainparams.h"
#include "main.h"
#include "test/test_bitcoin.h"
+#include <boost/signals2/signal.hpp>
#include <boost/test/unit_test.hpp>
BOOST_FIXTURE_TEST_SUITE(main_tests, TestingSetup)
+static void TestBlockSubsidyHalvings(const Consensus::Params& consensusParams)
+{
+ int maxHalvings = 64;
+ CAmount nInitialSubsidy = 50 * COIN;
+
+ CAmount nPreviousSubsidy = nInitialSubsidy * 2; // for height == 0
+ BOOST_CHECK_EQUAL(nPreviousSubsidy, nInitialSubsidy * 2);
+ for (int nHalvings = 0; nHalvings < maxHalvings; nHalvings++) {
+ int nHeight = nHalvings * consensusParams.nSubsidyHalvingInterval;
+ CAmount nSubsidy = GetBlockSubsidy(nHeight, consensusParams);
+ BOOST_CHECK(nSubsidy <= nInitialSubsidy);
+ BOOST_CHECK_EQUAL(nSubsidy, nPreviousSubsidy / 2);
+ nPreviousSubsidy = nSubsidy;
+ }
+ BOOST_CHECK_EQUAL(GetBlockSubsidy(maxHalvings * consensusParams.nSubsidyHalvingInterval, consensusParams), 0);
+}
+
+static void TestBlockSubsidyHalvings(int nSubsidyHalvingInterval)
+{
+ Consensus::Params consensusParams;
+ consensusParams.nSubsidyHalvingInterval = nSubsidyHalvingInterval;
+ TestBlockSubsidyHalvings(consensusParams);
+}
+
+BOOST_AUTO_TEST_CASE(block_subsidy_test)
+{
+ TestBlockSubsidyHalvings(Params(CBaseChainParams::MAIN).GetConsensus()); // As in main
+ TestBlockSubsidyHalvings(150); // As in regtest
+ TestBlockSubsidyHalvings(1000); // Just another interval
+}
+
BOOST_AUTO_TEST_CASE(subsidy_limit_test)
{
+ const Consensus::Params& consensusParams = Params(CBaseChainParams::MAIN).GetConsensus();
CAmount nSum = 0;
for (int nHeight = 0; nHeight < 14000000; nHeight += 1000) {
- CAmount nSubsidy = GetBlockValue(nHeight, 0);
+ CAmount nSubsidy = GetBlockSubsidy(nHeight, consensusParams);
BOOST_CHECK(nSubsidy <= 50 * COIN);
nSum += nSubsidy * 1000;
BOOST_CHECK(MoneyRange(nSum));
}
- BOOST_CHECK(nSum == 2099999997690000ULL);
+ BOOST_CHECK_EQUAL(nSum, 2099999997690000ULL);
}
bool ReturnFalse() { return false; }
diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp
index 6ab9cb8a44..d7ea91607c 100644
--- a/src/test/miner_tests.cpp
+++ b/src/test/miner_tests.cpp
@@ -59,7 +59,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
uint256 hash;
LOCK(cs_main);
- Checkpoints::fEnabled = false;
+ fCheckpointsEnabled = false;
// Simple block creation, nothing special yet:
BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey));
@@ -262,7 +262,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
BOOST_FOREACH(CTransaction *tx, txFirst)
delete tx;
- Checkpoints::fEnabled = true;
+ fCheckpointsEnabled = true;
}
BOOST_AUTO_TEST_SUITE_END()
diff --git a/src/test/mruset_tests.cpp b/src/test/mruset_tests.cpp
index bd4e9c1d38..2b68f8899e 100644
--- a/src/test/mruset_tests.cpp
+++ b/src/test/mruset_tests.cpp
@@ -17,83 +17,65 @@
using namespace std;
-class mrutester
-{
-private:
- mruset<int> mru;
- std::set<int> set;
-
-public:
- mrutester() { mru.max_size(MAX_SIZE); }
- int size() const { return set.size(); }
-
- void insert(int n)
- {
- mru.insert(n);
- set.insert(n);
- BOOST_CHECK(mru == set);
- }
-};
-
BOOST_FIXTURE_TEST_SUITE(mruset_tests, BasicTestingSetup)
-// Test that an mruset behaves like a set, as long as no more than MAX_SIZE elements are in it
-BOOST_AUTO_TEST_CASE(mruset_like_set)
-{
-
- for (int nTest=0; nTest<NUM_TESTS; nTest++)
- {
- mrutester tester;
- while (tester.size() < MAX_SIZE)
- tester.insert(GetRandInt(2 * MAX_SIZE));
- }
-
-}
-
-// Test that an mruset's size never exceeds its max_size
-BOOST_AUTO_TEST_CASE(mruset_limited_size)
+BOOST_AUTO_TEST_CASE(mruset_test)
{
- for (int nTest=0; nTest<NUM_TESTS; nTest++)
- {
- mruset<int> mru(MAX_SIZE);
- for (int nAction=0; nAction<3*MAX_SIZE; nAction++)
- {
- int n = GetRandInt(2 * MAX_SIZE);
- mru.insert(n);
- BOOST_CHECK(mru.size() <= MAX_SIZE);
+ // The mruset being tested.
+ mruset<int> mru(5000);
+
+ // Run the test 10 times.
+ for (int test = 0; test < 10; test++) {
+ // Reset mru.
+ mru.clear();
+
+ // A deque + set to simulate the mruset.
+ std::deque<int> rep;
+ std::set<int> all;
+
+ // Insert 10000 random integers below 15000.
+ for (int j=0; j<10000; j++) {
+ int add = GetRandInt(15000);
+ mru.insert(add);
+
+ // Add the number to rep/all as well.
+ if (all.count(add) == 0) {
+ all.insert(add);
+ rep.push_back(add);
+ if (all.size() == 5001) {
+ all.erase(rep.front());
+ rep.pop_front();
+ }
+ }
+
+ // Do a full comparison between mru and the simulated mru every 1000 and every 5001 elements.
+ if (j % 1000 == 0 || j % 5001 == 0) {
+ mruset<int> mru2 = mru; // Also try making a copy
+
+ // Check that all elements that should be in there, are in there.
+ BOOST_FOREACH(int x, rep) {
+ BOOST_CHECK(mru.count(x));
+ BOOST_CHECK(mru2.count(x));
+ }
+
+ // Check that all elements that are in there, should be in there.
+ BOOST_FOREACH(int x, mru) {
+ BOOST_CHECK(all.count(x));
+ }
+
+ // Check that all elements that are in there, should be in there.
+ BOOST_FOREACH(int x, mru2) {
+ BOOST_CHECK(all.count(x));
+ }
+
+ for (int t = 0; t < 10; t++) {
+ int r = GetRandInt(15000);
+ BOOST_CHECK(all.count(r) == mru.count(r));
+ BOOST_CHECK(all.count(r) == mru2.count(r));
+ }
+ }
}
}
}
-// 16-bit permutation function
-int static permute(int n)
-{
- // hexadecimals of pi; verified to be linearly independent
- static const int table[16] = {0x243F, 0x6A88, 0x85A3, 0x08D3, 0x1319, 0x8A2E, 0x0370, 0x7344,
- 0xA409, 0x3822, 0x299F, 0x31D0, 0x082E, 0xFA98, 0xEC4E, 0x6C89};
-
- int ret = 0;
- for (int bit=0; bit<16; bit++)
- if (n & (1<<bit))
- ret ^= table[bit];
-
- return ret;
-}
-
-// Test that an mruset acts like a moving window, if no duplicate elements are added
-BOOST_AUTO_TEST_CASE(mruset_window)
-{
- mruset<int> mru(MAX_SIZE);
- for (int n=0; n<10*MAX_SIZE; n++)
- {
- mru.insert(permute(n));
-
- set<int> tester;
- for (int m=max(0,n-MAX_SIZE+1); m<=n; m++)
- tester.insert(permute(m));
-
- BOOST_CHECK(mru == tester);
- }
-}
-
BOOST_AUTO_TEST_SUITE_END()
diff --git a/src/test/policyestimator_tests.cpp b/src/test/policyestimator_tests.cpp
new file mode 100644
index 0000000000..cb64ee7c69
--- /dev/null
+++ b/src/test/policyestimator_tests.cpp
@@ -0,0 +1,186 @@
+// Copyright (c) 2011-2015 The Bitcoin Core developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#include "policy/fees.h"
+#include "txmempool.h"
+#include "uint256.h"
+#include "util.h"
+
+#include "test/test_bitcoin.h"
+
+#include <boost/test/unit_test.hpp>
+
+BOOST_FIXTURE_TEST_SUITE(policyestimator_tests, BasicTestingSetup)
+
+BOOST_AUTO_TEST_CASE(BlockPolicyEstimates)
+{
+ CTxMemPool mpool(CFeeRate(1000));
+ CAmount basefee(2000);
+ double basepri = 1e6;
+ CAmount deltaFee(100);
+ double deltaPri=5e5;
+ std::vector<CAmount> feeV[2];
+ std::vector<double> priV[2];
+
+ // Populate vectors of increasing fees or priorities
+ for (int j = 0; j < 10; j++) {
+ //V[0] is for fee transactions
+ feeV[0].push_back(basefee * (j+1));
+ priV[0].push_back(0);
+ //V[1] is for priority transactions
+ feeV[1].push_back(CAmount(0));
+ priV[1].push_back(basepri * pow(10, j+1));
+ }
+
+ // Store the hashes of transactions that have been
+ // added to the mempool by their associate fee/pri
+ // txHashes[j] is populated with transactions either of
+ // fee = basefee * (j+1) OR pri = 10^6 * 10^(j+1)
+ std::vector<uint256> txHashes[10];
+
+ // Create a transaction template
+ CScript garbage;
+ for (unsigned int i = 0; i < 128; i++)
+ garbage.push_back('X');
+ CMutableTransaction tx;
+ std::list<CTransaction> dummyConflicted;
+ tx.vin.resize(1);
+ tx.vin[0].scriptSig = garbage;
+ tx.vout.resize(1);
+ tx.vout[0].nValue=0LL;
+ CFeeRate baseRate(basefee, ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION));
+
+ // Create a fake block
+ std::vector<CTransaction> block;
+ int blocknum = 0;
+
+ // Loop through 200 blocks
+ // At a decay .998 and 4 fee transactions per block
+ // This makes the tx count about 1.33 per bucket, above the 1 threshold
+ while (blocknum < 200) {
+ for (int j = 0; j < 10; j++) { // For each fee/pri multiple
+ for (int k = 0; k < 5; k++) { // add 4 fee txs for every priority tx
+ tx.vin[0].prevout.n = 10000*blocknum+100*j+k; // make transaction unique
+ uint256 hash = tx.GetHash();
+ mpool.addUnchecked(hash, CTxMemPoolEntry(tx, feeV[k/4][j], GetTime(), priV[k/4][j], blocknum, mpool.HasNoInputsOf(tx)));
+ txHashes[j].push_back(hash);
+ }
+ }
+ //Create blocks where higher fee/pri txs are included more often
+ for (int h = 0; h <= blocknum%10; h++) {
+ // 10/10 blocks add highest fee/pri transactions
+ // 9/10 blocks add 2nd highest and so on until ...
+ // 1/10 blocks add lowest fee/pri transactions
+ while (txHashes[9-h].size()) {
+ CTransaction btx;
+ if (mpool.lookup(txHashes[9-h].back(), btx))
+ block.push_back(btx);
+ txHashes[9-h].pop_back();
+ }
+ }
+ mpool.removeForBlock(block, ++blocknum, dummyConflicted);
+ block.clear();
+ if (blocknum == 30) {
+ // At this point we should need to combine 5 buckets to get enough data points
+ // So estimateFee(1) should fail and estimateFee(2) should return somewhere around
+ // 8*baserate
+ BOOST_CHECK(mpool.estimateFee(1) == CFeeRate(0));
+ BOOST_CHECK(mpool.estimateFee(2).GetFeePerK() < 8*baseRate.GetFeePerK() + deltaFee);
+ BOOST_CHECK(mpool.estimateFee(2).GetFeePerK() > 8*baseRate.GetFeePerK() - deltaFee);
+ }
+ }
+
+ std::vector<CAmount> origFeeEst;
+ std::vector<double> origPriEst;
+ // Highest feerate is 10*baseRate and gets in all blocks,
+ // second highest feerate is 9*baseRate and gets in 9/10 blocks = 90%,
+ // third highest feerate is 8*base rate, and gets in 8/10 blocks = 80%,
+ // so estimateFee(1) should return 9*baseRate.
+ // Third highest feerate has 90% chance of being included by 2 blocks,
+ // so estimateFee(2) should return 8*baseRate etc...
+ for (int i = 1; i < 10;i++) {
+ origFeeEst.push_back(mpool.estimateFee(i).GetFeePerK());
+ origPriEst.push_back(mpool.estimatePriority(i));
+ if (i > 1) { // Fee estimates should be monotonically decreasing
+ BOOST_CHECK(origFeeEst[i-1] <= origFeeEst[i-2]);
+ BOOST_CHECK(origPriEst[i-1] <= origPriEst[i-2]);
+ }
+ BOOST_CHECK(origFeeEst[i-1] < (10-i)*baseRate.GetFeePerK() + deltaFee);
+ BOOST_CHECK(origFeeEst[i-1] > (10-i)*baseRate.GetFeePerK() - deltaFee);
+ BOOST_CHECK(origPriEst[i-1] < pow(10,10-i) * basepri + deltaPri);
+ BOOST_CHECK(origPriEst[i-1] > pow(10,10-i) * basepri - deltaPri);
+ }
+
+ // Mine 50 more blocks with no transactions happening, estimates shouldn't change
+ // We haven't decayed the moving average enough so we still have enough data points in every bucket
+ while (blocknum < 250)
+ mpool.removeForBlock(block, ++blocknum, dummyConflicted);
+
+ for (int i = 1; i < 10;i++) {
+ BOOST_CHECK(mpool.estimateFee(i).GetFeePerK() < origFeeEst[i-1] + deltaFee);
+ BOOST_CHECK(mpool.estimateFee(i).GetFeePerK() > origFeeEst[i-1] - deltaFee);
+ BOOST_CHECK(mpool.estimatePriority(i) < origPriEst[i-1] + deltaPri);
+ BOOST_CHECK(mpool.estimatePriority(i) > origPriEst[i-1] - deltaPri);
+ }
+
+
+ // Mine 15 more blocks with lots of transactions happening and not getting mined
+ // Estimates should go up
+ while (blocknum < 265) {
+ for (int j = 0; j < 10; j++) { // For each fee/pri multiple
+ for (int k = 0; k < 5; k++) { // add 4 fee txs for every priority tx
+ tx.vin[0].prevout.n = 10000*blocknum+100*j+k;
+ uint256 hash = tx.GetHash();
+ mpool.addUnchecked(hash, CTxMemPoolEntry(tx, feeV[k/4][j], GetTime(), priV[k/4][j], blocknum, mpool.HasNoInputsOf(tx)));
+ txHashes[j].push_back(hash);
+ }
+ }
+ mpool.removeForBlock(block, ++blocknum, dummyConflicted);
+ }
+
+ for (int i = 1; i < 10;i++) {
+ BOOST_CHECK(mpool.estimateFee(i).GetFeePerK() > origFeeEst[i-1] - deltaFee);
+ BOOST_CHECK(mpool.estimatePriority(i) > origPriEst[i-1] - deltaPri);
+ }
+
+ // Mine all those transactions
+ // Estimates should still not be below original
+ for (int j = 0; j < 10; j++) {
+ while(txHashes[j].size()) {
+ CTransaction btx;
+ if (mpool.lookup(txHashes[j].back(), btx))
+ block.push_back(btx);
+ txHashes[j].pop_back();
+ }
+ }
+ mpool.removeForBlock(block, 265, dummyConflicted);
+ block.clear();
+ for (int i = 1; i < 10;i++) {
+ BOOST_CHECK(mpool.estimateFee(i).GetFeePerK() > origFeeEst[i-1] - deltaFee);
+ BOOST_CHECK(mpool.estimatePriority(i) > origPriEst[i-1] - deltaPri);
+ }
+
+ // Mine 100 more blocks where everything is mined every block
+ // Estimates should be below original estimates (not possible for last estimate)
+ while (blocknum < 365) {
+ for (int j = 0; j < 10; j++) { // For each fee/pri multiple
+ for (int k = 0; k < 5; k++) { // add 4 fee txs for every priority tx
+ tx.vin[0].prevout.n = 10000*blocknum+100*j+k;
+ uint256 hash = tx.GetHash();
+ mpool.addUnchecked(hash, CTxMemPoolEntry(tx, feeV[k/4][j], GetTime(), priV[k/4][j], blocknum, mpool.HasNoInputsOf(tx)));
+ CTransaction btx;
+ if (mpool.lookup(hash, btx))
+ block.push_back(btx);
+ }
+ }
+ mpool.removeForBlock(block, ++blocknum, dummyConflicted);
+ block.clear();
+ }
+ for (int i = 1; i < 9; i++) {
+ BOOST_CHECK(mpool.estimateFee(i).GetFeePerK() < origFeeEst[i-1] - deltaFee);
+ BOOST_CHECK(mpool.estimatePriority(i) < origPriEst[i-1] - deltaPri);
+ }
+}
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/src/test/pow_tests.cpp b/src/test/pow_tests.cpp
index 4ce1591c35..a436749287 100644
--- a/src/test/pow_tests.cpp
+++ b/src/test/pow_tests.cpp
@@ -69,4 +69,28 @@ BOOST_AUTO_TEST_CASE(get_next_work_upper_limit_actual)
BOOST_CHECK_EQUAL(CalculateNextWorkRequired(&pindexLast, nLastRetargetTime, params), 0x1d00e1fd);
}
+BOOST_AUTO_TEST_CASE(GetBlockProofEquivalentTime_test)
+{
+ SelectParams(CBaseChainParams::MAIN);
+ const Consensus::Params& params = Params().GetConsensus();
+
+ std::vector<CBlockIndex> blocks(10000);
+ for (int i = 0; i < 10000; i++) {
+ blocks[i].pprev = i ? &blocks[i - 1] : NULL;
+ blocks[i].nHeight = i;
+ blocks[i].nTime = 1269211443 + i * params.nPowTargetSpacing;
+ blocks[i].nBits = 0x207fffff; /* target 0x7fffff000... */
+ blocks[i].nChainWork = i ? blocks[i - 1].nChainWork + GetBlockProof(blocks[i - 1]) : arith_uint256(0);
+ }
+
+ for (int j = 0; j < 1000; j++) {
+ CBlockIndex *p1 = &blocks[GetRand(10000)];
+ CBlockIndex *p2 = &blocks[GetRand(10000)];
+ CBlockIndex *p3 = &blocks[GetRand(10000)];
+
+ int64_t tdiff = GetBlockProofEquivalentTime(*p1, *p2, *p3, params);
+ BOOST_CHECK_EQUAL(tdiff, p1->GetBlockTime() - p2->GetBlockTime());
+ }
+}
+
BOOST_AUTO_TEST_SUITE_END()
diff --git a/src/test/scheduler_tests.cpp b/src/test/scheduler_tests.cpp
new file mode 100644
index 0000000000..cb1a427db0
--- /dev/null
+++ b/src/test/scheduler_tests.cpp
@@ -0,0 +1,119 @@
+// Copyright (c) 2012-2013 The Bitcoin Core developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#include "random.h"
+#include "scheduler.h"
+
+#include "test/test_bitcoin.h"
+
+#include <boost/bind.hpp>
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/uniform_int_distribution.hpp>
+#include <boost/thread.hpp>
+#include <boost/test/unit_test.hpp>
+
+BOOST_AUTO_TEST_SUITE(scheduler_tests)
+
+static void microTask(CScheduler& s, boost::mutex& mutex, int& counter, int delta, boost::chrono::system_clock::time_point rescheduleTime)
+{
+ {
+ boost::unique_lock<boost::mutex> lock(mutex);
+ counter += delta;
+ }
+ boost::chrono::system_clock::time_point noTime = boost::chrono::system_clock::time_point::min();
+ if (rescheduleTime != noTime) {
+ CScheduler::Function f = boost::bind(&microTask, boost::ref(s), boost::ref(mutex), boost::ref(counter), -delta + 1, noTime);
+ s.schedule(f, rescheduleTime);
+ }
+}
+
+static void MicroSleep(uint64_t n)
+{
+#if defined(HAVE_WORKING_BOOST_SLEEP_FOR)
+ boost::this_thread::sleep_for(boost::chrono::microseconds(n));
+#elif defined(HAVE_WORKING_BOOST_SLEEP)
+ boost::this_thread::sleep(boost::posix_time::microseconds(n));
+#else
+ //should never get here
+ #error missing boost sleep implementation
+#endif
+}
+
+BOOST_AUTO_TEST_CASE(manythreads)
+{
+ seed_insecure_rand(false);
+
+ // Stress test: hundreds of microsecond-scheduled tasks,
+ // serviced by 10 threads.
+ //
+ // So... ten shared counters, which if all the tasks execute
+ // properly will sum to the number of tasks done.
+ // Each task adds or subtracts from one of the counters a
+ // random amount, and then schedules another task 0-1000
+ // microseconds in the future to subtract or add from
+ // the counter -random_amount+1, so in the end the shared
+ // counters should sum to the number of initial tasks performed.
+ CScheduler microTasks;
+
+ boost::mutex counterMutex[10];
+ int counter[10] = { 0 };
+ boost::random::mt19937 rng(insecure_rand());
+ boost::random::uniform_int_distribution<> zeroToNine(0, 9);
+ boost::random::uniform_int_distribution<> randomMsec(-11, 1000);
+ boost::random::uniform_int_distribution<> randomDelta(-1000, 1000);
+
+ boost::chrono::system_clock::time_point start = boost::chrono::system_clock::now();
+ boost::chrono::system_clock::time_point now = start;
+ boost::chrono::system_clock::time_point first, last;
+ size_t nTasks = microTasks.getQueueInfo(first, last);
+ BOOST_CHECK(nTasks == 0);
+
+ for (int i = 0; i < 100; i++) {
+ boost::chrono::system_clock::time_point t = now + boost::chrono::microseconds(randomMsec(rng));
+ boost::chrono::system_clock::time_point tReschedule = now + boost::chrono::microseconds(500 + randomMsec(rng));
+ int whichCounter = zeroToNine(rng);
+ CScheduler::Function f = boost::bind(&microTask, boost::ref(microTasks),
+ boost::ref(counterMutex[whichCounter]), boost::ref(counter[whichCounter]),
+ randomDelta(rng), tReschedule);
+ microTasks.schedule(f, t);
+ }
+ nTasks = microTasks.getQueueInfo(first, last);
+ BOOST_CHECK(nTasks == 100);
+ BOOST_CHECK(first < last);
+ BOOST_CHECK(last > now);
+
+ // As soon as these are created they will start running and servicing the queue
+ boost::thread_group microThreads;
+ for (int i = 0; i < 5; i++)
+ microThreads.create_thread(boost::bind(&CScheduler::serviceQueue, &microTasks));
+
+ MicroSleep(600);
+ now = boost::chrono::system_clock::now();
+
+ // More threads and more tasks:
+ for (int i = 0; i < 5; i++)
+ microThreads.create_thread(boost::bind(&CScheduler::serviceQueue, &microTasks));
+ for (int i = 0; i < 100; i++) {
+ boost::chrono::system_clock::time_point t = now + boost::chrono::microseconds(randomMsec(rng));
+ boost::chrono::system_clock::time_point tReschedule = now + boost::chrono::microseconds(500 + randomMsec(rng));
+ int whichCounter = zeroToNine(rng);
+ CScheduler::Function f = boost::bind(&microTask, boost::ref(microTasks),
+ boost::ref(counterMutex[whichCounter]), boost::ref(counter[whichCounter]),
+ randomDelta(rng), tReschedule);
+ microTasks.schedule(f, t);
+ }
+
+ // Drain the task queue then exit threads
+ microTasks.stop(true);
+ microThreads.join_all(); // ... wait until all the threads are done
+
+ int counterSum = 0;
+ for (int i = 0; i < 10; i++) {
+ BOOST_CHECK(counter[i] != 0);
+ counterSum += counter[i];
+ }
+ BOOST_CHECK_EQUAL(counterSum, 200);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/src/test/test_bitcoin.cpp b/src/test/test_bitcoin.cpp
index a2cb78c989..c727303ea1 100644
--- a/src/test/test_bitcoin.cpp
+++ b/src/test/test_bitcoin.cpp
@@ -6,6 +6,7 @@
#include "test_bitcoin.h"
+#include "key.h"
#include "main.h"
#include "random.h"
#include "txdb.h"
@@ -20,7 +21,7 @@
#include <boost/test/unit_test.hpp>
#include <boost/thread.hpp>
-CClientUIInterface uiInterface;
+CClientUIInterface uiInterface; // Declared but not defined in ui_interface.h
CWallet* pwalletMain;
extern bool fPrintToConsole;
@@ -28,6 +29,7 @@ extern void noui_connect();
BasicTestingSetup::BasicTestingSetup()
{
+ ECC_Start();
SetupEnvironment();
fPrintToDebugLog = false; // don't want to write to debug.log file
fCheckBlockIndex = true;
@@ -35,6 +37,7 @@ BasicTestingSetup::BasicTestingSetup()
}
BasicTestingSetup::~BasicTestingSetup()
{
+ ECC_Stop();
}
TestingSetup::TestingSetup()
diff --git a/src/txdb.h b/src/txdb.h
index 86e1c5d831..bef5dc9fd1 100644
--- a/src/txdb.h
+++ b/src/txdb.h
@@ -22,7 +22,7 @@ class uint256;
//! -dbcache default (MiB)
static const int64_t nDefaultDbCache = 100;
//! max. -dbcache in (MiB)
-static const int64_t nMaxDbCache = sizeof(void*) > 4 ? 4096 : 1024;
+static const int64_t nMaxDbCache = sizeof(void*) > 4 ? 16384 : 1024;
//! min. -dbcache in (MiB)
static const int64_t nMinDbCache = 4;
diff --git a/src/txmempool.cpp b/src/txmempool.cpp
index d05e3c6eec..071fa9d52c 100644
--- a/src/txmempool.cpp
+++ b/src/txmempool.cpp
@@ -8,28 +8,27 @@
#include "clientversion.h"
#include "consensus/consensus.h"
#include "main.h"
+#include "policy/fees.h"
#include "streams.h"
#include "util.h"
#include "utilmoneystr.h"
#include "version.h"
-#include <boost/circular_buffer.hpp>
-
using namespace std;
CTxMemPoolEntry::CTxMemPoolEntry():
- nFee(0), nTxSize(0), nModSize(0), nTime(0), dPriority(0.0)
+ nFee(0), nTxSize(0), nModSize(0), nTime(0), dPriority(0.0), hadNoDependencies(false)
{
nHeight = MEMPOOL_HEIGHT;
}
CTxMemPoolEntry::CTxMemPoolEntry(const CTransaction& _tx, const CAmount& _nFee,
int64_t _nTime, double _dPriority,
- unsigned int _nHeight):
- tx(_tx), nFee(_nFee), nTime(_nTime), dPriority(_dPriority), nHeight(_nHeight)
+ unsigned int _nHeight, bool poolHasNoInputsOf):
+ tx(_tx), nFee(_nFee), nTime(_nTime), dPriority(_dPriority), nHeight(_nHeight),
+ hadNoDependencies(poolHasNoInputsOf)
{
nTxSize = ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION);
-
nModSize = tx.CalculateModifiedSize(nTxSize);
}
@@ -47,346 +46,15 @@ CTxMemPoolEntry::GetPriority(unsigned int currentHeight) const
return dResult;
}
-/**
- * Keep track of fee/priority for transactions confirmed within N blocks
- */
-class CBlockAverage
-{
-private:
- boost::circular_buffer<CFeeRate> feeSamples;
- boost::circular_buffer<double> prioritySamples;
-
- template<typename T> std::vector<T> buf2vec(boost::circular_buffer<T> buf) const
- {
- std::vector<T> vec(buf.begin(), buf.end());
- return vec;
- }
-
-public:
- CBlockAverage() : feeSamples(100), prioritySamples(100) { }
-
- void RecordFee(const CFeeRate& feeRate) {
- feeSamples.push_back(feeRate);
- }
-
- void RecordPriority(double priority) {
- prioritySamples.push_back(priority);
- }
-
- size_t FeeSamples() const { return feeSamples.size(); }
- size_t GetFeeSamples(std::vector<CFeeRate>& insertInto) const
- {
- BOOST_FOREACH(const CFeeRate& f, feeSamples)
- insertInto.push_back(f);
- return feeSamples.size();
- }
- size_t PrioritySamples() const { return prioritySamples.size(); }
- size_t GetPrioritySamples(std::vector<double>& insertInto) const
- {
- BOOST_FOREACH(double d, prioritySamples)
- insertInto.push_back(d);
- return prioritySamples.size();
- }
-
- /**
- * Used as belt-and-suspenders check when reading to detect
- * file corruption
- */
- static bool AreSane(const CFeeRate fee, const CFeeRate& minRelayFee)
- {
- if (fee < CFeeRate(0))
- return false;
- if (fee.GetFeePerK() > minRelayFee.GetFeePerK() * 10000)
- return false;
- return true;
- }
- static bool AreSane(const std::vector<CFeeRate>& vecFee, const CFeeRate& minRelayFee)
- {
- BOOST_FOREACH(CFeeRate fee, vecFee)
- {
- if (!AreSane(fee, minRelayFee))
- return false;
- }
- return true;
- }
- static bool AreSane(const double priority)
- {
- return priority >= 0;
- }
- static bool AreSane(const std::vector<double> vecPriority)
- {
- BOOST_FOREACH(double priority, vecPriority)
- {
- if (!AreSane(priority))
- return false;
- }
- return true;
- }
-
- void Write(CAutoFile& fileout) const
- {
- std::vector<CFeeRate> vecFee = buf2vec(feeSamples);
- fileout << vecFee;
- std::vector<double> vecPriority = buf2vec(prioritySamples);
- fileout << vecPriority;
- }
-
- void Read(CAutoFile& filein, const CFeeRate& minRelayFee) {
- std::vector<CFeeRate> vecFee;
- filein >> vecFee;
- if (AreSane(vecFee, minRelayFee))
- feeSamples.insert(feeSamples.end(), vecFee.begin(), vecFee.end());
- else
- throw runtime_error("Corrupt fee value in estimates file.");
- std::vector<double> vecPriority;
- filein >> vecPriority;
- if (AreSane(vecPriority))
- prioritySamples.insert(prioritySamples.end(), vecPriority.begin(), vecPriority.end());
- else
- throw runtime_error("Corrupt priority value in estimates file.");
- if (feeSamples.size() + prioritySamples.size() > 0)
- LogPrint("estimatefee", "Read %d fee samples and %d priority samples\n",
- feeSamples.size(), prioritySamples.size());
- }
-};
-
-class CMinerPolicyEstimator
-{
-private:
- /**
- * Records observed averages transactions that confirmed within one block, two blocks,
- * three blocks etc.
- */
- std::vector<CBlockAverage> history;
- std::vector<CFeeRate> sortedFeeSamples;
- std::vector<double> sortedPrioritySamples;
-
- int nBestSeenHeight;
-
- /**
- * nBlocksAgo is 0 based, i.e. transactions that confirmed in the highest seen block are
- * nBlocksAgo == 0, transactions in the block before that are nBlocksAgo == 1 etc.
- */
- void seenTxConfirm(const CFeeRate& feeRate, const CFeeRate& minRelayFee, double dPriority, int nBlocksAgo)
- {
- // Last entry records "everything else".
- int nBlocksTruncated = min(nBlocksAgo, (int) history.size() - 1);
- assert(nBlocksTruncated >= 0);
-
- // We need to guess why the transaction was included in a block-- either
- // because it is high-priority or because it has sufficient fees.
- bool sufficientFee = (feeRate > minRelayFee);
- bool sufficientPriority = AllowFree(dPriority);
- const char* assignedTo = "unassigned";
- if (sufficientFee && !sufficientPriority && CBlockAverage::AreSane(feeRate, minRelayFee))
- {
- history[nBlocksTruncated].RecordFee(feeRate);
- assignedTo = "fee";
- }
- else if (sufficientPriority && !sufficientFee && CBlockAverage::AreSane(dPriority))
- {
- history[nBlocksTruncated].RecordPriority(dPriority);
- assignedTo = "priority";
- }
- else
- {
- // Neither or both fee and priority sufficient to get confirmed:
- // don't know why they got confirmed.
- }
- LogPrint("estimatefee", "Seen TX confirm: %s: %s fee/%g priority, took %d blocks\n",
- assignedTo, feeRate.ToString(), dPriority, nBlocksAgo);
- }
-
-public:
- CMinerPolicyEstimator(int nEntries) : nBestSeenHeight(0)
- {
- history.resize(nEntries);
- }
-
- void seenBlock(const std::vector<CTxMemPoolEntry>& entries, int nBlockHeight, const CFeeRate minRelayFee)
- {
- if (nBlockHeight <= nBestSeenHeight)
- {
- // Ignore side chains and re-orgs; assuming they are random
- // they don't affect the estimate.
- // And if an attacker can re-org the chain at will, then
- // you've got much bigger problems than "attacker can influence
- // transaction fees."
- return;
- }
- nBestSeenHeight = nBlockHeight;
-
- // Fill up the history buckets based on how long transactions took
- // to confirm.
- std::vector<std::vector<const CTxMemPoolEntry*> > entriesByConfirmations;
- entriesByConfirmations.resize(history.size());
- BOOST_FOREACH(const CTxMemPoolEntry& entry, entries)
- {
- // How many blocks did it take for miners to include this transaction?
- int delta = nBlockHeight - entry.GetHeight();
- if (delta <= 0)
- {
- // Re-org made us lose height, this should only happen if we happen
- // to re-org on a difficulty transition point: very rare!
- continue;
- }
- if ((delta-1) >= (int)history.size())
- delta = history.size(); // Last bucket is catch-all
- entriesByConfirmations.at(delta-1).push_back(&entry);
- }
- for (size_t i = 0; i < entriesByConfirmations.size(); i++)
- {
- std::vector<const CTxMemPoolEntry*> &e = entriesByConfirmations.at(i);
- // Insert at most 10 random entries per bucket, otherwise a single block
- // can dominate an estimate:
- if (e.size() > 10) {
- std::random_shuffle(e.begin(), e.end());
- e.resize(10);
- }
- BOOST_FOREACH(const CTxMemPoolEntry* entry, e)
- {
- // Fees are stored and reported as BTC-per-kb:
- CFeeRate feeRate(entry->GetFee(), entry->GetTxSize());
- double dPriority = entry->GetPriority(entry->GetHeight()); // Want priority when it went IN
- seenTxConfirm(feeRate, minRelayFee, dPriority, i);
- }
- }
-
- // After new samples are added, we have to clear the sorted lists,
- // so they'll be resorted the next time someone asks for an estimate
- sortedFeeSamples.clear();
- sortedPrioritySamples.clear();
-
- for (size_t i = 0; i < history.size(); i++) {
- if (history[i].FeeSamples() + history[i].PrioritySamples() > 0)
- LogPrint("estimatefee", "estimates: for confirming within %d blocks based on %d/%d samples, fee=%s, prio=%g\n",
- i,
- history[i].FeeSamples(), history[i].PrioritySamples(),
- estimateFee(i+1).ToString(), estimatePriority(i+1));
- }
- }
-
- /**
- * Can return CFeeRate(0) if we don't have any data for that many blocks back. nBlocksToConfirm is 1 based.
- */
- CFeeRate estimateFee(int nBlocksToConfirm)
- {
- nBlocksToConfirm--;
-
- if (nBlocksToConfirm < 0 || nBlocksToConfirm >= (int)history.size())
- return CFeeRate(0);
-
- if (sortedFeeSamples.size() == 0)
- {
- for (size_t i = 0; i < history.size(); i++)
- history.at(i).GetFeeSamples(sortedFeeSamples);
- std::sort(sortedFeeSamples.begin(), sortedFeeSamples.end(),
- std::greater<CFeeRate>());
- }
- if (sortedFeeSamples.size() < 11)
- {
- // Eleven is Gavin's Favorite Number
- // ... but we also take a maximum of 10 samples per block so eleven means
- // we're getting samples from at least two different blocks
- return CFeeRate(0);
- }
-
- int nBucketSize = history.at(nBlocksToConfirm).FeeSamples();
-
- // Estimates should not increase as number of confirmations goes up,
- // but the estimates are noisy because confirmations happen discretely
- // in blocks. To smooth out the estimates, use all samples in the history
- // and use the nth highest where n is (number of samples in previous bucket +
- // half the samples in nBlocksToConfirm bucket):
- size_t nPrevSize = 0;
- for (int i = 0; i < nBlocksToConfirm; i++)
- nPrevSize += history.at(i).FeeSamples();
- size_t index = min(nPrevSize + nBucketSize/2, sortedFeeSamples.size()-1);
- return sortedFeeSamples[index];
- }
- double estimatePriority(int nBlocksToConfirm)
- {
- nBlocksToConfirm--;
-
- if (nBlocksToConfirm < 0 || nBlocksToConfirm >= (int)history.size())
- return -1;
-
- if (sortedPrioritySamples.size() == 0)
- {
- for (size_t i = 0; i < history.size(); i++)
- history.at(i).GetPrioritySamples(sortedPrioritySamples);
- std::sort(sortedPrioritySamples.begin(), sortedPrioritySamples.end(),
- std::greater<double>());
- }
- if (sortedPrioritySamples.size() < 11)
- return -1.0;
-
- int nBucketSize = history.at(nBlocksToConfirm).PrioritySamples();
-
- // Estimates should not increase as number of confirmations needed goes up,
- // but the estimates are noisy because confirmations happen discretely
- // in blocks. To smooth out the estimates, use all samples in the history
- // and use the nth highest where n is (number of samples in previous buckets +
- // half the samples in nBlocksToConfirm bucket).
- size_t nPrevSize = 0;
- for (int i = 0; i < nBlocksToConfirm; i++)
- nPrevSize += history.at(i).PrioritySamples();
- size_t index = min(nPrevSize + nBucketSize/2, sortedPrioritySamples.size()-1);
- return sortedPrioritySamples[index];
- }
-
- void Write(CAutoFile& fileout) const
- {
- fileout << nBestSeenHeight;
- fileout << (uint32_t)history.size();
- BOOST_FOREACH(const CBlockAverage& entry, history)
- {
- entry.Write(fileout);
- }
- }
-
- void Read(CAutoFile& filein, const CFeeRate& minRelayFee)
- {
- int nFileBestSeenHeight;
- filein >> nFileBestSeenHeight;
- uint32_t numEntries;
- filein >> numEntries;
- if (numEntries <= 0 || numEntries > 10000)
- throw runtime_error("Corrupt estimates file. Must have between 1 and 10k entries.");
-
- std::vector<CBlockAverage> fileHistory;
-
- for (size_t i = 0; i < numEntries; i++)
- {
- CBlockAverage entry;
- entry.Read(filein, minRelayFee);
- fileHistory.push_back(entry);
- }
-
- // Now that we've processed the entire fee estimate data file and not
- // thrown any errors, we can copy it to our history
- nBestSeenHeight = nFileBestSeenHeight;
- history = fileHistory;
- assert(history.size() > 0);
- }
-};
-
-
CTxMemPool::CTxMemPool(const CFeeRate& _minRelayFee) :
- nTransactionsUpdated(0),
- minRelayFee(_minRelayFee)
+ nTransactionsUpdated(0)
{
// Sanity checks off by default for performance, because otherwise
// accepting transactions becomes O(N^2) where N is the number
// of transactions in the pool
fSanityCheck = false;
- // 25 blocks is a compromise between using a lot of disk/memory and
- // trying to give accurate estimates to people who might be willing
- // to wait a day or two to save a fraction of a penny in fees.
- // Confirmation times for very-low-fee transactions that take more
- // than an hour or three to confirm are highly variable.
- minerPolicyEstimator = new CMinerPolicyEstimator(25);
+ minerPolicyEstimator = new CBlockPolicyEstimator(_minRelayFee);
}
CTxMemPool::~CTxMemPool()
@@ -420,20 +88,20 @@ void CTxMemPool::AddTransactionsUpdated(unsigned int n)
}
-bool CTxMemPool::addUnchecked(const uint256& hash, const CTxMemPoolEntry &entry)
+bool CTxMemPool::addUnchecked(const uint256& hash, const CTxMemPoolEntry &entry, bool fCurrentEstimate)
{
// Add to memory pool without checking anything.
// Used by main.cpp AcceptToMemoryPool(), which DOES do
// all the appropriate checks.
LOCK(cs);
- {
- mapTx[hash] = entry;
- const CTransaction& tx = mapTx[hash].GetTx();
- for (unsigned int i = 0; i < tx.vin.size(); i++)
- mapNextTx[tx.vin[i].prevout] = CInPoint(&tx, i);
- nTransactionsUpdated++;
- totalTxSize += entry.GetTxSize();
- }
+ mapTx[hash] = entry;
+ const CTransaction& tx = mapTx[hash].GetTx();
+ for (unsigned int i = 0; i < tx.vin.size(); i++)
+ mapNextTx[tx.vin[i].prevout] = CInPoint(&tx, i);
+ nTransactionsUpdated++;
+ totalTxSize += entry.GetTxSize();
+ minerPolicyEstimator->processTransaction(entry, fCurrentEstimate);
+
return true;
}
@@ -479,6 +147,7 @@ void CTxMemPool::remove(const CTransaction &origTx, std::list<CTransaction>& rem
totalTxSize -= mapTx[hash].GetTxSize();
mapTx.erase(hash);
nTransactionsUpdated++;
+ minerPolicyEstimator->removeTx(hash);
}
}
}
@@ -529,7 +198,7 @@ void CTxMemPool::removeConflicts(const CTransaction &tx, std::list<CTransaction>
* Called when a block is connected. Removes from mempool and updates the miner fee estimator.
*/
void CTxMemPool::removeForBlock(const std::vector<CTransaction>& vtx, unsigned int nBlockHeight,
- std::list<CTransaction>& conflicts)
+ std::list<CTransaction>& conflicts, bool fCurrentEstimate)
{
LOCK(cs);
std::vector<CTxMemPoolEntry> entries;
@@ -539,7 +208,6 @@ void CTxMemPool::removeForBlock(const std::vector<CTransaction>& vtx, unsigned i
if (mapTx.count(hash))
entries.push_back(mapTx[hash]);
}
- minerPolicyEstimator->seenBlock(entries, nBlockHeight, minRelayFee);
BOOST_FOREACH(const CTransaction& tx, vtx)
{
std::list<CTransaction> dummy;
@@ -547,9 +215,10 @@ void CTxMemPool::removeForBlock(const std::vector<CTransaction>& vtx, unsigned i
removeConflicts(tx, conflicts);
ClearPrioritisation(tx.GetHash());
}
+ // After the txs in the new block have been removed from the mempool, update policy estimates
+ minerPolicyEstimator->processBlock(nBlockHeight, entries, fCurrentEstimate);
}
-
void CTxMemPool::clear()
{
LOCK(cs);
@@ -666,7 +335,7 @@ CTxMemPool::WriteFeeEstimates(CAutoFile& fileout) const
{
try {
LOCK(cs);
- fileout << 99900; // version required to read: 0.9.99 or later
+ fileout << 109900; // version required to read: 0.10.99 or later
fileout << CLIENT_VERSION; // version that wrote the file
minerPolicyEstimator->Write(fileout);
}
@@ -687,7 +356,7 @@ CTxMemPool::ReadFeeEstimates(CAutoFile& filein)
return error("CTxMemPool::ReadFeeEstimates(): up-version (%d) fee estimate file", nVersionRequired);
LOCK(cs);
- minerPolicyEstimator->Read(filein, minRelayFee);
+ minerPolicyEstimator->Read(filein);
}
catch (const std::exception&) {
LogPrintf("CTxMemPool::ReadFeeEstimates(): unable to read policy estimator data (non-fatal)");
@@ -724,6 +393,13 @@ void CTxMemPool::ClearPrioritisation(const uint256 hash)
mapDeltas.erase(hash);
}
+bool CTxMemPool::HasNoInputsOf(const CTransaction &tx) const
+{
+ for (unsigned int i = 0; i < tx.vin.size(); i++)
+ if (exists(tx.vin[i].prevout.hash))
+ return false;
+ return true;
+}
CCoinsViewMemPool::CCoinsViewMemPool(CCoinsView *baseIn, CTxMemPool &mempoolIn) : CCoinsViewBacked(baseIn), mempool(mempoolIn) { }
diff --git a/src/txmempool.h b/src/txmempool.h
index 0732af67e6..7271a5f603 100644
--- a/src/txmempool.h
+++ b/src/txmempool.h
@@ -43,10 +43,11 @@ private:
int64_t nTime; //! Local time when entering the mempool
double dPriority; //! Priority when entering the mempool
unsigned int nHeight; //! Chain height when entering the mempool
+ bool hadNoDependencies; //! Not dependent on any other txs when it entered the mempool
public:
CTxMemPoolEntry(const CTransaction& _tx, const CAmount& _nFee,
- int64_t _nTime, double _dPriority, unsigned int _nHeight);
+ int64_t _nTime, double _dPriority, unsigned int _nHeight, bool poolHasNoInputsOf = false);
CTxMemPoolEntry();
CTxMemPoolEntry(const CTxMemPoolEntry& other);
@@ -56,9 +57,10 @@ public:
size_t GetTxSize() const { return nTxSize; }
int64_t GetTime() const { return nTime; }
unsigned int GetHeight() const { return nHeight; }
+ bool WasClearAtEntry() const { return hadNoDependencies; }
};
-class CMinerPolicyEstimator;
+class CBlockPolicyEstimator;
/** An inpoint - a combination of a transaction and an index n into its vin */
class CInPoint
@@ -88,9 +90,8 @@ class CTxMemPool
private:
bool fSanityCheck; //! Normally false, true if -checkmempool or -regtest
unsigned int nTransactionsUpdated;
- CMinerPolicyEstimator* minerPolicyEstimator;
+ CBlockPolicyEstimator* minerPolicyEstimator;
- CFeeRate minRelayFee; //! Passed to constructor to avoid dependency on main
uint64_t totalTxSize; //! sum of all mempool tx' byte sizes
public:
@@ -111,17 +112,22 @@ public:
void check(const CCoinsViewCache *pcoins) const;
void setSanityCheck(bool _fSanityCheck) { fSanityCheck = _fSanityCheck; }
- bool addUnchecked(const uint256& hash, const CTxMemPoolEntry &entry);
+ bool addUnchecked(const uint256& hash, const CTxMemPoolEntry &entry, bool fCurrentEstimate = true);
void remove(const CTransaction &tx, std::list<CTransaction>& removed, bool fRecursive = false);
void removeCoinbaseSpends(const CCoinsViewCache *pcoins, unsigned int nMemPoolHeight);
void removeConflicts(const CTransaction &tx, std::list<CTransaction>& removed);
void removeForBlock(const std::vector<CTransaction>& vtx, unsigned int nBlockHeight,
- std::list<CTransaction>& conflicts);
+ std::list<CTransaction>& conflicts, bool fCurrentEstimate = true);
void clear();
void queryHashes(std::vector<uint256>& vtxid);
void pruneSpent(const uint256& hash, CCoins &coins);
unsigned int GetTransactionsUpdated() const;
void AddTransactionsUpdated(unsigned int n);
+ /**
+ * Check that none of this transactions inputs are in the mempool, and thus
+ * the tx is not dependent on other mempool transactions to be included in a block.
+ */
+ bool HasNoInputsOf(const CTransaction& tx) const;
/** Affect CreateNewBlock prioritisation of transactions */
void PrioritiseTransaction(const uint256 hash, const std::string strHash, double dPriorityDelta, const CAmount& nFeeDelta);
@@ -139,7 +145,7 @@ public:
return totalTxSize;
}
- bool exists(uint256 hash)
+ bool exists(uint256 hash) const
{
LOCK(cs);
return (mapTx.count(hash) != 0);
diff --git a/src/ui_interface.h b/src/ui_interface.h
index 3f11a1ddab..32a92a4b81 100644
--- a/src/ui_interface.h
+++ b/src/ui_interface.h
@@ -78,9 +78,6 @@ public:
/** Progress message during initialization. */
boost::signals2::signal<void (const std::string &message)> InitMessage;
- /** Translate a message to the native language of the user. */
- boost::signals2::signal<std::string (const char* psz)> Translate;
-
/** Number of network connections changed. */
boost::signals2::signal<void (int newNumConnections)> NotifyNumConnectionsChanged;
@@ -102,14 +99,4 @@ public:
extern CClientUIInterface uiInterface;
-/**
- * Translation function: Call Translate signal on UI interface, which returns a boost::optional result.
- * If no translation slot is registered, nothing is returned, and simply return the input.
- */
-inline std::string _(const char* psz)
-{
- boost::optional<std::string> rv = uiInterface.Translate(psz);
- return rv ? (*rv) : psz;
-}
-
#endif // BITCOIN_UI_INTERFACE_H
diff --git a/src/util.cpp b/src/util.cpp
index 1bb7df7085..bfb95c9044 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -7,11 +7,6 @@
#include "config/bitcoin-config.h"
#endif
-#if (defined(__FreeBSD__) || defined(__OpenBSD__))
-#include <pthread.h>
-#include <pthread_np.h>
-#endif
-
#include "util.h"
#include "chainparamsbase.h"
@@ -23,6 +18,11 @@
#include <stdarg.h>
+#if (defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__))
+#include <pthread.h>
+#include <pthread_np.h>
+#endif
+
#ifndef WIN32
// for posix_fallocate
#ifdef __linux__
@@ -109,6 +109,7 @@ string strMiscWarning;
bool fLogTimestamps = false;
bool fLogIPs = false;
volatile bool fReopenDebugLog = false;
+CTranslationInterface translationInterface;
/** Init OpenSSL library multithreading support */
static CCriticalSection** ppmutexOpenSSL;
@@ -712,7 +713,7 @@ void RenameThread(const char* name)
#if defined(PR_SET_NAME)
// Only the first 15 characters are used (16 - NUL terminator)
::prctl(PR_SET_NAME, name, 0, 0, 0);
-#elif (defined(__FreeBSD__) || defined(__OpenBSD__))
+#elif (defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__))
pthread_set_name_np(pthread_self(), name);
#elif defined(MAC_OSX)
@@ -725,18 +726,20 @@ void RenameThread(const char* name)
void SetupEnvironment()
{
- std::locale loc("C");
// On most POSIX systems (e.g. Linux, but not BSD) the environment's locale
// may be invalid, in which case the "C" locale is used as fallback.
#if !defined(WIN32) && !defined(MAC_OSX) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
try {
- loc = std::locale(""); // Raises a runtime error if current locale is invalid
+ std::locale(""); // Raises a runtime error if current locale is invalid
} catch (const std::runtime_error&) {
setenv("LC_ALL", "C", 1);
}
#endif
- // The path locale is lazy initialized and to avoid deinitialization errors
+ // The path locale is lazy initialized and to avoid deinitialization errors
// in multithreading environments, it is set explicitly by the main thread.
+ // A dummy locale is used to extract the internal default locale, used by
+ // boost::filesystem::path, which is then used to explicitly imbue the path.
+ std::locale loc = boost::filesystem::path::imbue(std::locale::classic());
boost::filesystem::path::imbue(loc);
}
diff --git a/src/util.h b/src/util.h
index 9b5a4153dd..4cc0faf4d7 100644
--- a/src/util.h
+++ b/src/util.h
@@ -25,8 +25,17 @@
#include <vector>
#include <boost/filesystem/path.hpp>
+#include <boost/signals2/signal.hpp>
#include <boost/thread/exceptions.hpp>
+/** Signals for translation. */
+class CTranslationInterface
+{
+public:
+ /** Translate a message to the native language of the user. */
+ boost::signals2::signal<std::string (const char* psz)> Translate;
+};
+
extern std::map<std::string, std::string> mapArgs;
extern std::map<std::string, std::vector<std::string> > mapMultiArgs;
extern bool fDebug;
@@ -37,6 +46,17 @@ extern std::string strMiscWarning;
extern bool fLogTimestamps;
extern bool fLogIPs;
extern volatile bool fReopenDebugLog;
+extern CTranslationInterface translationInterface;
+
+/**
+ * Translation function: Call Translate signal on UI interface, which returns a boost::optional result.
+ * If no translation slot is registered, nothing is returned, and simply return the input.
+ */
+inline std::string _(const char* psz)
+{
+ boost::optional<std::string> rv = translationInterface.Translate(psz);
+ return rv ? (*rv) : psz;
+}
void SetupEnvironment();
@@ -183,43 +203,6 @@ void SetThreadPriority(int nPriority);
void RenameThread(const char* name);
/**
- * Standard wrapper for do-something-forever thread functions.
- * "Forever" really means until the thread is interrupted.
- * Use it like:
- * new boost::thread(boost::bind(&LoopForever<void (*)()>, "dumpaddr", &DumpAddresses, 900000));
- * or maybe:
- * boost::function<void()> f = boost::bind(&FunctionWithArg, argument);
- * threadGroup.create_thread(boost::bind(&LoopForever<boost::function<void()> >, "nothing", f, milliseconds));
- */
-template <typename Callable> void LoopForever(const char* name, Callable func, int64_t msecs)
-{
- std::string s = strprintf("bitcoin-%s", name);
- RenameThread(s.c_str());
- LogPrintf("%s thread start\n", name);
- try
- {
- while (1)
- {
- MilliSleep(msecs);
- func();
- }
- }
- catch (const boost::thread_interrupted&)
- {
- LogPrintf("%s thread stop\n", name);
- throw;
- }
- catch (const std::exception& e) {
- PrintExceptionContinue(&e, name);
- throw;
- }
- catch (...) {
- PrintExceptionContinue(NULL, name);
- throw;
- }
-}
-
-/**
* .. and a wrapper that just calls func once
*/
template <typename Callable> void TraceThread(const char* name, Callable func)
diff --git a/src/utiltime.cpp b/src/utiltime.cpp
index 8f0dcae29d..d316288999 100644
--- a/src/utiltime.cpp
+++ b/src/utiltime.cpp
@@ -30,13 +30,13 @@ void SetMockTime(int64_t nMockTimeIn)
int64_t GetTimeMillis()
{
- return (boost::posix_time::ptime(boost::posix_time::microsec_clock::universal_time()) -
+ return (boost::posix_time::microsec_clock::universal_time() -
boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_milliseconds();
}
int64_t GetTimeMicros()
{
- return (boost::posix_time::ptime(boost::posix_time::microsec_clock::universal_time()) -
+ return (boost::posix_time::microsec_clock::universal_time() -
boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_microseconds();
}
diff --git a/src/validationinterface.h b/src/validationinterface.h
index b4c93d72ca..2a4c7ecceb 100644
--- a/src/validationinterface.h
+++ b/src/validationinterface.h
@@ -28,13 +28,13 @@ void SyncWithWallets(const CTransaction& tx, const CBlock* pblock = NULL);
class CValidationInterface {
protected:
- virtual void SyncTransaction(const CTransaction &tx, const CBlock *pblock) {};
- virtual void EraseFromWallet(const uint256 &hash) {};
- virtual void SetBestChain(const CBlockLocator &locator) {};
- virtual void UpdatedTransaction(const uint256 &hash) {};
- virtual void Inventory(const uint256 &hash) {};
- virtual void ResendWalletTransactions(int64_t nBestBlockTime) {};
- virtual void BlockChecked(const CBlock&, const CValidationState&) {};
+ virtual void SyncTransaction(const CTransaction &tx, const CBlock *pblock) {}
+ virtual void EraseFromWallet(const uint256 &hash) {}
+ virtual void SetBestChain(const CBlockLocator &locator) {}
+ virtual void UpdatedTransaction(const uint256 &hash) {}
+ virtual void Inventory(const uint256 &hash) {}
+ virtual void ResendWalletTransactions(int64_t nBestBlockTime) {}
+ virtual void BlockChecked(const CBlock&, const CValidationState&) {}
friend void ::RegisterValidationInterface(CValidationInterface*);
friend void ::UnregisterValidationInterface(CValidationInterface*);
friend void ::UnregisterAllValidationInterfaces();
diff --git a/src/wallet/db.h b/src/wallet/db.h
index 9596723b21..2df6f6e5a9 100644
--- a/src/wallet/db.h
+++ b/src/wallet/db.h
@@ -20,9 +20,6 @@
#include <db_cxx.h>
-class CDiskBlockIndex;
-class COutPoint;
-
extern unsigned int nWalletDBUpdated;
class CDBEnv
diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp
index c31c09d922..dd5240e3c0 100644
--- a/src/wallet/rpcwallet.cpp
+++ b/src/wallet/rpcwallet.cpp
@@ -2330,7 +2330,7 @@ Value listunspent(const Array& params, bool fHelp)
if (pk.IsPayToScriptHash()) {
CTxDestination address;
if (ExtractDestination(pk, address)) {
- const CScriptID& hash = boost::get<const CScriptID&>(address);
+ const CScriptID& hash = boost::get<CScriptID>(address);
CScript redeemScript;
if (pwalletMain->GetCScript(hash, redeemScript))
entry.push_back(Pair("redeemScript", HexStr(redeemScript.begin(), redeemScript.end())));
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
index 81a9932f36..3396a3a188 100644
--- a/src/wallet/wallet.cpp
+++ b/src/wallet/wallet.cpp
@@ -30,13 +30,13 @@ using namespace std;
*/
CFeeRate payTxFee(DEFAULT_TRANSACTION_FEE);
CAmount maxTxFee = DEFAULT_TRANSACTION_MAXFEE;
-unsigned int nTxConfirmTarget = 1;
+unsigned int nTxConfirmTarget = DEFAULT_TX_CONFIRM_TARGET;
bool bSpendZeroConfChange = true;
bool fSendFreeTransactions = false;
bool fPayAtLeastCustomFee = true;
-/**
- * Fees smaller than this (in satoshi) are considered zero fee (for transaction creation)
+/**
+ * Fees smaller than this (in satoshi) are considered zero fee (for transaction creation)
* Override with -mintxfee
*/
CFeeRate CWallet::minTxFee = CFeeRate(1000);
@@ -529,7 +529,7 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
delete pwalletdbEncryption;
}
// We now probably have half of our keys encrypted in memory, and half not...
- // die and let the user reload their unencrypted wallet.
+ // die and let the user reload the unencrypted wallet.
assert(false);
}
@@ -541,7 +541,7 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
if (!pwalletdbEncryption->TxnCommit()) {
delete pwalletdbEncryption;
// We now have keys encrypted in memory, but not on disk...
- // die to avoid confusion and let the user reload their unencrypted wallet.
+ // die to avoid confusion and let the user reload the unencrypted wallet.
assert(false);
}
@@ -1059,6 +1059,7 @@ int CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate)
{
int ret = 0;
int64_t nNow = GetTime();
+ const CChainParams& chainParams = Params();
CBlockIndex* pindex = pindexStart;
{
@@ -1070,12 +1071,12 @@ int CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate)
pindex = chainActive.Next(pindex);
ShowProgress(_("Rescanning..."), 0); // show rescan progress in GUI as dialog or on splashscreen, if -rescan on startup
- double dProgressStart = Checkpoints::GuessVerificationProgress(pindex, false);
- double dProgressTip = Checkpoints::GuessVerificationProgress(chainActive.Tip(), false);
+ double dProgressStart = Checkpoints::GuessVerificationProgress(chainParams.Checkpoints(), pindex, false);
+ double dProgressTip = Checkpoints::GuessVerificationProgress(chainParams.Checkpoints(), chainActive.Tip(), false);
while (pindex)
{
if (pindex->nHeight % 100 == 0 && dProgressTip - dProgressStart > 0.0)
- ShowProgress(_("Rescanning..."), std::max(1, std::min(99, (int)((Checkpoints::GuessVerificationProgress(pindex, false) - dProgressStart) / (dProgressTip - dProgressStart) * 100))));
+ ShowProgress(_("Rescanning..."), std::max(1, std::min(99, (int)((Checkpoints::GuessVerificationProgress(chainParams.Checkpoints(), pindex, false) - dProgressStart) / (dProgressTip - dProgressStart) * 100))));
CBlock block;
ReadBlockFromDisk(block, pindex);
@@ -1087,7 +1088,7 @@ int CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate)
pindex = chainActive.Next(pindex);
if (GetTime() >= nNow + 60) {
nNow = GetTime();
- LogPrintf("Still rescanning. At block %d. Progress=%f\n", pindex->nHeight, Checkpoints::GuessVerificationProgress(pindex));
+ LogPrintf("Still rescanning. At block %d. Progress=%f\n", pindex->nHeight, Checkpoints::GuessVerificationProgress(chainParams.Checkpoints(), pindex));
}
}
ShowProgress(_("Rescanning..."), 100); // hide progress dialog in GUI
@@ -1097,10 +1098,13 @@ int CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate)
void CWallet::ReacceptWalletTransactions()
{
- // If transcations aren't broadcasted, don't let them into local mempool either
+ // If transactions aren't being broadcasted, don't let them into local mempool either
if (!fBroadcastTransactions)
return;
LOCK2(cs_main, cs_wallet);
+ std::map<int64_t, CWalletTx*> mapSorted;
+
+ // Sort pending wallet transactions based on their initial wallet insertion order
BOOST_FOREACH(PAIRTYPE(const uint256, CWalletTx)& item, mapWallet)
{
const uint256& wtxid = item.first;
@@ -1109,13 +1113,19 @@ void CWallet::ReacceptWalletTransactions()
int nDepth = wtx.GetDepthInMainChain();
- if (!wtx.IsCoinBase() && nDepth < 0)
- {
- // Try to add to memory pool
- LOCK(mempool.cs);
- wtx.AcceptToMemoryPool(false);
+ if (!wtx.IsCoinBase() && nDepth < 0) {
+ mapSorted.insert(std::make_pair(wtx.nOrderPos, &wtx));
}
}
+
+ // Try to add wallet transactions to memory pool
+ BOOST_FOREACH(PAIRTYPE(const int64_t, CWalletTx*)& item, mapSorted)
+ {
+ CWalletTx& wtx = *(item.second);
+
+ LOCK(mempool.cs);
+ wtx.AcceptToMemoryPool(false);
+ }
}
bool CWalletTx::RelayWalletTransaction()
diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h
index 1c900b0315..b0da92cfd1 100644
--- a/src/wallet/wallet.h
+++ b/src/wallet/wallet.h
@@ -44,6 +44,8 @@ static const CAmount DEFAULT_TRANSACTION_FEE = 0;
static const CAmount nHighTransactionFeeWarning = 0.01 * COIN;
//! -maxtxfee default
static const CAmount DEFAULT_TRANSACTION_MAXFEE = 0.1 * COIN;
+//! -txconfirmtarget default
+static const unsigned int DEFAULT_TX_CONFIRM_TARGET = 2;
//! -maxtxfee will warn if called with a higher fee than this amount (in satoshis)
static const CAmount nHighTransactionMaxFeeWarning = 100 * nHighTransactionFeeWarning;
//! Largest (in bytes) free transaction we're willing to create
diff --git a/src/wallet/walletdb.cpp b/src/wallet/walletdb.cpp
index de56a2d1af..13eaf95aa6 100644
--- a/src/wallet/walletdb.cpp
+++ b/src/wallet/walletdb.cpp
@@ -915,7 +915,7 @@ bool CWalletDB::Recover(CDBEnv& dbenv, const std::string& filename, bool fOnlyKe
}
std::vector<CDBEnv::KeyValPair> salvagedData;
- bool allOK = dbenv.Salvage(newFilename, true, salvagedData);
+ bool fSuccess = dbenv.Salvage(newFilename, true, salvagedData);
if (salvagedData.empty())
{
LogPrintf("Salvage(aggressive) found no records in %s.\n", newFilename);
@@ -923,7 +923,6 @@ bool CWalletDB::Recover(CDBEnv& dbenv, const std::string& filename, bool fOnlyKe
}
LogPrintf("Salvage(aggressive) found %u records\n", salvagedData.size());
- bool fSuccess = allOK;
boost::scoped_ptr<Db> pdbCopy(new Db(dbenv.dbenv, 0));
int ret = pdbCopy->open(NULL, // Txn pointer
filename.c_str(), // Filename