Add pending effective amount to rpc methods #232
221 changed files with 10199 additions and 8818 deletions
|
@ -17,6 +17,7 @@ env:
|
||||||
- BASE_OUTDIR=$TRAVIS_BUILD_DIR/out
|
- BASE_OUTDIR=$TRAVIS_BUILD_DIR/out
|
||||||
- SDK_URL=https://bitcoincore.org/depends-sources/sdks
|
- SDK_URL=https://bitcoincore.org/depends-sources/sdks
|
||||||
- PYTHON_DEBUG=1
|
- PYTHON_DEBUG=1
|
||||||
|
- WINEDEBUG=fixme-all
|
||||||
cache:
|
cache:
|
||||||
apt: true
|
apt: true
|
||||||
directories:
|
directories:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
[main]
|
[main]
|
||||||
host = https://www.transifex.com
|
host = https://www.transifex.com
|
||||||
|
|
||||||
[bitcoin.qt-translation-010x]
|
[bitcoin.qt-translation-011x]
|
||||||
file_filter = src/qt/locale/bitcoin_<lang>.ts
|
file_filter = src/qt/locale/bitcoin_<lang>.ts
|
||||||
source_file = src/qt/locale/bitcoin_en.ts
|
source_file = src/qt/locale/bitcoin_en.ts
|
||||||
source_lang = en
|
source_lang = en
|
||||||
|
|
2
COPYING
2
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
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
|
@ -59,8 +59,9 @@ $(BITCOIN_WIN_INSTALLER): all-recursive
|
||||||
STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIND_BIN) $(top_builddir)/release
|
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_QT_BIN) $(top_builddir)/release
|
||||||
STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIN_CLI_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 error: could not build $@
|
||||||
|
@echo built $@
|
||||||
|
|
||||||
$(if $(findstring src/,$(MAKECMDGOALS)),$(MAKECMDGOALS), none): FORCE
|
$(if $(findstring src/,$(MAKECMDGOALS)),$(MAKECMDGOALS), none): FORCE
|
||||||
$(MAKE) -C src $(patsubst src/%,%,$@)
|
$(MAKE) -C src $(patsubst src/%,%,$@)
|
||||||
|
|
11
configure.ac
11
configure.ac
|
@ -6,7 +6,7 @@ define(_CLIENT_VERSION_REVISION, 99)
|
||||||
define(_CLIENT_VERSION_BUILD, 0)
|
define(_CLIENT_VERSION_BUILD, 0)
|
||||||
define(_CLIENT_VERSION_IS_RELEASE, false)
|
define(_CLIENT_VERSION_IS_RELEASE, false)
|
||||||
define(_COPYRIGHT_YEAR, 2015)
|
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_SRCDIR([src/main.cpp])
|
||||||
AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
|
AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
|
||||||
AC_CONFIG_AUX_DIR([build-aux])
|
AC_CONFIG_AUX_DIR([build-aux])
|
||||||
|
@ -590,17 +590,15 @@ fi
|
||||||
|
|
||||||
if test x$use_boost = xyes; then
|
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 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 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 a working version is available, else fall back to sleep. sleep was removed
|
||||||
dnl after 1.56.
|
dnl after 1.56.
|
||||||
dnl If neither is available, abort.
|
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"
|
TEMP_LIBS="$LIBS"
|
||||||
LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB $LIBS"
|
LIBS="$BOOST_LIBS $LIBS"
|
||||||
TEMP_CPPFLAGS="$CPPFLAGS"
|
TEMP_CPPFLAGS="$CPPFLAGS"
|
||||||
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
|
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
||||||
|
@ -613,12 +611,11 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
||||||
choke me
|
choke me
|
||||||
#endif
|
#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])],
|
AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
|
||||||
[boost_sleep=no])
|
[boost_sleep=no])
|
||||||
LIBS="$TEMP_LIBS"
|
LIBS="$TEMP_LIBS"
|
||||||
CPPFLAGS="$TEMP_CPPFLAGS"
|
CPPFLAGS="$TEMP_CPPFLAGS"
|
||||||
fi
|
|
||||||
|
|
||||||
if test x$boost_sleep != xyes; then
|
if test x$boost_sleep != xyes; then
|
||||||
TEMP_LIBS="$LIBS"
|
TEMP_LIBS="$LIBS"
|
||||||
|
|
|
@ -19,7 +19,7 @@ BITCOIND_NICE=${BITCOIND_NICE:-${NICELEVEL:-0}}
|
||||||
BITCOIND_OPTS="${BITCOIND_OPTS:-${BITCOIN_OPTS}}"
|
BITCOIND_OPTS="${BITCOIND_OPTS:-${BITCOIN_OPTS}}"
|
||||||
|
|
||||||
name="Bitcoin Core Daemon"
|
name="Bitcoin Core Daemon"
|
||||||
description="Bitcoin crypto-currency p2p network daemon"
|
description="Bitcoin cryptocurrency P2P network daemon"
|
||||||
|
|
||||||
command="/usr/bin/bitcoind"
|
command="/usr/bin/bitcoind"
|
||||||
command_args="-pid=\"${BITCOIND_PIDFILE}\" \
|
command_args="-pid=\"${BITCOIND_PIDFILE}\" \
|
||||||
|
|
|
@ -91,12 +91,12 @@ include funcs.mk
|
||||||
toolchain_path=$($($(host_arch)_$(host_os)_native_toolchain)_prefixbin)
|
toolchain_path=$($($(host_arch)_$(host_os)_native_toolchain)_prefixbin)
|
||||||
final_build_id_long+=$(shell $(build_SHA256SUM) config.site.in)
|
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))
|
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)rm -rf $(@D)
|
||||||
$(AT)mkdir -p $(@D)
|
$(AT)mkdir -p $(@D)
|
||||||
$(AT)echo copying packages: $|
|
$(AT)echo copying packages: $^
|
||||||
$(AT)echo to: $(@D)
|
$(AT)echo to: $(@D)
|
||||||
$(AT)cd $(@D); $(foreach package,$|, tar xf $($(package)_cached); )
|
$(AT)cd $(@D); $(foreach package,$^, tar xf $($(package)_cached); )
|
||||||
$(AT)touch $@
|
$(AT)touch $@
|
||||||
|
|
||||||
$(host_prefix)/share/config.site : config.site.in $(host_prefix)/.stamp_$(final_build_id)
|
$(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 $@
|
$(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:
|
download-osx:
|
||||||
@$(MAKE) -s HOST=x86_64-apple-darwin11 download-one
|
@$(MAKE) -s HOST=x86_64-apple-darwin11 download-one
|
||||||
download-linux:
|
download-linux:
|
||||||
|
@ -130,4 +157,5 @@ download-linux:
|
||||||
download-win:
|
download-win:
|
||||||
@$(MAKE) -s HOST=x86_64-w64-mingw32 download-one
|
@$(MAKE) -s HOST=x86_64-w64-mingw32 download-one
|
||||||
download: download-osx download-linux download-win
|
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
|
||||||
|
|
56
depends/README.md
Normal file
56
depends/README.md
Normal file
|
@ -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
|
||||||
|
|
|
@ -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
|
|
|
@ -1,9 +1,7 @@
|
||||||
This is a system of building and caching dependencies necessary for building
|
This is a system of building and caching dependencies necessary for building Bitcoin.
|
||||||
Bitcoin.
|
|
||||||
|
|
||||||
There are several features that make it different from most similar systems:
|
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
|
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
|
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
|
on new hosts. For now, a build architecture of x86_64 is assumed, either on
|
||||||
Linux or OSX.
|
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
|
File presence is used to determine what needs to be built. This makes the
|
||||||
results distributable and easily digestable by automated builders.
|
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
|
For each build, the sysroot is wiped and the (recursive) dependencies are
|
||||||
installed. This makes each build deterministic, since there will never be any
|
installed. This makes each build deterministic, since there will never be any
|
||||||
unknown files available to cause side-effects.
|
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
|
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,
|
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
|
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.
|
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
|
Each package is configured and patched so that it will yield the same
|
||||||
build-results with each consequent build, within a reasonable set of
|
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
|
capable of deterministic results. When revisions are properly bumped, a cached
|
||||||
build should represent an exact single payload.
|
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
|
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
|
if the fetched source does not match. Sources may be pre-seeded and/or cached
|
||||||
as desired.
|
as desired.
|
||||||
|
|
||||||
- Self-cleaning
|
### Self-cleaning
|
||||||
|
|
||||||
Build and staging dirs are wiped after use, and any previous version of a
|
Build and staging dirs are wiped after use, and any previous version of a
|
||||||
cached result is removed following a successful build. Automated builders
|
cached result is removed following a successful build. Automated builders
|
|
@ -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)_extract_dir:=$(base_build_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id)
|
||||||
$(1)_download_dir:=$(base_download_dir)/$(1)-$($(1)_version)
|
$(1)_download_dir:=$(base_download_dir)/$(1)-$($(1)_version)
|
||||||
$(1)_build_dir:=$$($(1)_extract_dir)/$$($(1)_build_subdir)
|
$(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)_patch_dir:=$(base_build_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id)/.patches-$($(1)_build_id)
|
||||||
$(1)_prefixbin:=$($($(1)_type)_prefix)/bin/
|
$(1)_prefixbin:=$($($(1)_type)_prefix)/bin/
|
||||||
$(1)_cached:=$(BASE_CACHE)/$(host)/$(1)/$(1)-$($(1)_version)-$($(1)_build_id).tar.gz
|
$(1)_cached:=$(BASE_CACHE)/$(host)/$(1)/$(1)-$($(1)_version)-$($(1)_build_id).tar.gz
|
||||||
|
$(1)_all_sources=$($(1)_file_name) $($(1)_extra_sources)
|
||||||
|
|
||||||
#stamps
|
#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)_extracted=$$($(1)_extract_dir)/.stamp_extracted
|
||||||
$(1)_preprocessed=$$($(1)_extract_dir)/.stamp_preprocessed
|
$(1)_preprocessed=$$($(1)_extract_dir)/.stamp_preprocessed
|
||||||
$(1)_cleaned=$$($(1)_extract_dir)/.stamp_cleaned
|
$(1)_cleaned=$$($(1)_extract_dir)/.stamp_cleaned
|
||||||
|
@ -154,7 +156,10 @@ endef
|
||||||
define int_add_cmds
|
define int_add_cmds
|
||||||
$($(1)_fetched):
|
$($(1)_fetched):
|
||||||
$(AT)mkdir -p $$(@D) $(SOURCES_PATH)
|
$(AT)mkdir -p $$(@D) $(SOURCES_PATH)
|
||||||
|
$(AT)rm -f $$@
|
||||||
|
$(AT)touch $$@
|
||||||
$(AT)cd $$(@D); $(call $(1)_fetch_cmds,$(1))
|
$(AT)cd $$(@D); $(call $(1)_fetch_cmds,$(1))
|
||||||
|
$(AT)cd $($(1)_source_dir); $(foreach source,$($(1)_all_sources),$(build_SHA256SUM) $(source) >> $$(@);)
|
||||||
$(AT)touch $$@
|
$(AT)touch $$@
|
||||||
$($(1)_extracted): | $($(1)_fetched)
|
$($(1)_extracted): | $($(1)_fetched)
|
||||||
$(AT)echo Extracting $(1)...
|
$(AT)echo Extracting $(1)...
|
||||||
|
@ -195,10 +200,12 @@ $($(1)_cached): | $($(1)_dependencies) $($(1)_postprocessed)
|
||||||
$(AT)rm -rf $$(@D) && mkdir -p $$(@D)
|
$(AT)rm -rf $$(@D) && mkdir -p $$(@D)
|
||||||
$(AT)mv $$($(1)_staging_dir)/$$(@F) $$(@)
|
$(AT)mv $$($(1)_staging_dir)/$$(@F) $$(@)
|
||||||
$(AT)rm -rf $($(1)_staging_dir)
|
$(AT)rm -rf $($(1)_staging_dir)
|
||||||
|
$($(1)_cached_checksum): $($(1)_cached)
|
||||||
|
$(AT)cd $$(@D); $(build_SHA256SUM) $$(<F) > $$(@)
|
||||||
|
|
||||||
.PHONY: $(1)
|
.PHONY: $(1)
|
||||||
$(1): | $($(1)_cached)
|
$(1): | $($(1)_cached_checksum)
|
||||||
.SECONDARY: $($(1)_postprocessed) $($(1)_staged) $($(1)_built) $($(1)_configured) $($(1)_preprocessed) $($(1)_extracted) $($(1)_fetched)
|
.SECONDARY: $($(1)_cached) $($(1)_postprocessed) $($(1)_staged) $($(1)_built) $($(1)_configured) $($(1)_preprocessed) $($(1)_extracted) $($(1)_fetched)
|
||||||
|
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|
|
@ -4,35 +4,47 @@ variables, and defining build commands.
|
||||||
The package "mylib" will be used here as an example
|
The package "mylib" will be used here as an example
|
||||||
|
|
||||||
General tips:
|
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:
|
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
|
Version of the upstream library or program. If there is no version, a
|
||||||
placeholder such as 1.0 can be used.
|
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
|
Location of the upstream source, without the file-name. Usually http or
|
||||||
ftp.
|
ftp.
|
||||||
|
|
||||||
$(package)_file_name:
|
$(package)_file_name:
|
||||||
The upstream source filename available at the download path.
|
The upstream source filename available at the download path.
|
||||||
|
|
||||||
$(package)_sha256_hash:
|
$(package)_sha256_hash:
|
||||||
The sha256 hash of the upstream file
|
The sha256 hash of the upstream file
|
||||||
|
|
||||||
These variables are optional:
|
These variables are optional:
|
||||||
|
|
||||||
$(package)_build_subdir:
|
$(package)_build_subdir:
|
||||||
cd to this dir before running configure/build/stage commands.
|
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
|
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
|
stored locally. This can be used to avoid storing file-names with strange
|
||||||
characters.
|
characters.
|
||||||
|
|
||||||
$(package)_dependencies:
|
$(package)_dependencies:
|
||||||
Names of any other packages that this one depends on.
|
Names of any other packages that this one depends on.
|
||||||
|
|
||||||
$(package)_patches:
|
$(package)_patches:
|
||||||
Filenames of any patches needed to build the package
|
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
|
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
|
before running the build commands. They should be added to a function called
|
||||||
$(package)_set_vars. For example:
|
$(package)_set_vars. For example:
|
||||||
|
@ -50,6 +62,7 @@ the modifications specific to that case. For example:
|
||||||
x86_64 linux only: $(package)_x86_64_linux_cc = gcc
|
x86_64 linux only: $(package)_x86_64_linux_cc = gcc
|
||||||
|
|
||||||
These variables may be set to override or append their default values.
|
These variables may be set to override or append their default values.
|
||||||
|
|
||||||
$(package)_cc
|
$(package)_cc
|
||||||
$(package)_cxx
|
$(package)_cxx
|
||||||
$(package)_objc
|
$(package)_objc
|
||||||
|
@ -73,20 +86,19 @@ commands.
|
||||||
|
|
||||||
Many variables respect a debug/release suffix as well, in order to use them for
|
Many variables respect a debug/release suffix as well, in order to use them for
|
||||||
only the appropriate build config. For example:
|
only the appropriate build config. For example:
|
||||||
|
|
||||||
$(package)_cflags_release = -O3
|
$(package)_cflags_release = -O3
|
||||||
$(package)_cflags_i686_debug = -g
|
$(package)_cflags_i686_debug = -g
|
||||||
$(package)_config_opts_release = --disable-debug
|
$(package)_config_opts_release = --disable-debug
|
||||||
|
|
||||||
These will be used in addition to the options that do not specify
|
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
|
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,
|
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:
|
The following build commands are available for each recipe:
|
||||||
|
|
||||||
|
@ -94,24 +106,30 @@ Build commands:
|
||||||
Runs from: build dir
|
Runs from: build dir
|
||||||
Fetch the source file. If undefined, it will be fetched and verified
|
Fetch the source file. If undefined, it will be fetched and verified
|
||||||
against its hash.
|
against its hash.
|
||||||
|
|
||||||
$(package)_extract_cmds:
|
$(package)_extract_cmds:
|
||||||
Runs from: build dir
|
Runs from: build dir
|
||||||
Verify the source file against its hash and extract it. If undefined, the
|
Verify the source file against its hash and extract it. If undefined, the
|
||||||
source is assumed to be a tarball.
|
source is assumed to be a tarball.
|
||||||
|
|
||||||
$(package)_preprocess_cmds:
|
$(package)_preprocess_cmds:
|
||||||
Runs from: build dir/$(package)_build_subdir
|
Runs from: build dir/$(package)_build_subdir
|
||||||
Preprocess the source as necessary. If undefined, does nothing.
|
Preprocess the source as necessary. If undefined, does nothing.
|
||||||
|
|
||||||
$(package)_config_cmds:
|
$(package)_config_cmds:
|
||||||
Runs from: build dir/$(package)_build_subdir
|
Runs from: build dir/$(package)_build_subdir
|
||||||
Configure the source. If undefined, does nothing.
|
Configure the source. If undefined, does nothing.
|
||||||
|
|
||||||
$(package)_build_cmds:
|
$(package)_build_cmds:
|
||||||
Runs from: build dir/$(package)_build_subdir
|
Runs from: build dir/$(package)_build_subdir
|
||||||
Build the source. If undefined, does nothing.
|
Build the source. If undefined, does nothing.
|
||||||
|
|
||||||
$(package)_stage_cmds:
|
$(package)_stage_cmds:
|
||||||
Runs from: build dir/$(package)_build_subdir
|
Runs from: build dir/$(package)_build_subdir
|
||||||
Stage the build results. If undefined, does nothing.
|
Stage the build results. If undefined, does nothing.
|
||||||
|
|
||||||
The following variables are available for each recipe:
|
The following variables are available for each recipe:
|
||||||
|
|
||||||
$(1)_staging_dir: package's destination sysroot path
|
$(1)_staging_dir: package's destination sysroot path
|
||||||
$(1)_staging_prefix_dir: prefix path inside of the package's staging dir
|
$(1)_staging_prefix_dir: prefix path inside of the package's staging dir
|
||||||
$(1)_extract_dir: path to the package's extracted sources
|
$(1)_extract_dir: path to the package's extracted sources
|
||||||
|
@ -125,4 +143,5 @@ configure step to (usually) correctly configure automatically. Any
|
||||||
$($(package)_config_opts) will be appended.
|
$($(package)_config_opts) will be appended.
|
||||||
|
|
||||||
Most autotools projects can be properly staged using:
|
Most autotools projects can be properly staged using:
|
||||||
|
|
||||||
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
$(MAKE) DESTDIR=$($(package)_staging_dir) install
|
|
@ -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_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_file_name=clang-llvm-$($(package)_clang_version)-amd64-Ubuntu-12.04.2.tar.gz
|
||||||
$(package)_clang_sha256_hash=60d8f69f032d62ef61bf527857ebb933741ec3352d4d328c5516aa520662dab7
|
$(package)_clang_sha256_hash=60d8f69f032d62ef61bf527857ebb933741ec3352d4d328c5516aa520662dab7
|
||||||
|
$(package)_extra_sources=$($(package)_clang_file_name)
|
||||||
|
|
||||||
define $(package)_fetch_cmds
|
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)_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))
|
$(call fetch_file,$(package),$($(package)_clang_download_path),$($(package)_clang_download_file),$($(package)_clang_file_name),$($(package)_clang_sha256_hash))
|
||||||
|
|
|
@ -43,6 +43,7 @@ The following are developer notes on how to build Bitcoin on your native platfor
|
||||||
|
|
||||||
- [OSX Build Notes](build-osx.md)
|
- [OSX Build Notes](build-osx.md)
|
||||||
- [Unix Build Notes](build-unix.md)
|
- [Unix Build Notes](build-unix.md)
|
||||||
|
- [Gitian Building Guide](gitian-building.md)
|
||||||
|
|
||||||
Development
|
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/)
|
- [Source Code Documentation (External Link)](https://dev.visucore.com/bitcoin/doxygen/)
|
||||||
- [Translation Process](translation_process.md)
|
- [Translation Process](translation_process.md)
|
||||||
- [Unit Tests](unit-tests.md)
|
- [Unit Tests](unit-tests.md)
|
||||||
|
- [Unauthenticated REST Interface](REST-interface.md)
|
||||||
|
- [BIPS](bips.md)
|
||||||
|
- [Dnsseed Policy](dnsseed-policy.md)
|
||||||
|
|
||||||
### Resources
|
### Resources
|
||||||
* Discuss on the [BitcoinTalk](https://bitcointalk.org/) forums, in the [Development & Technical Discussion board](https://bitcointalk.org/index.php?board=6.0).
|
* Discuss on the [BitcoinTalk](https://bitcointalk.org/) forums, in the [Development & Technical Discussion board](https://bitcointalk.org/index.php?board=6.0).
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Deterministic OSX Dmg Notes.
|
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.
|
the Apple's binutils (ld, ar, etc), and DMG authoring tools.
|
||||||
|
|
||||||
Apple uses clang extensively for development and has upstreamed the necessary
|
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
|
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 .
|
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.
|
functionality is broken. Only the compression feature is currently used.
|
||||||
Ideally, the creation could be fixed and genisoimage would no longer be necessary.
|
Ideally, the creation could be fixed and genisoimage would no longer be necessary.
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ Supported API
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
####Transactions
|
####Transactions
|
||||||
`GET /rest/tx/TX-HASH.{bin|hex|json}`
|
`GET /rest/tx/<TX-HASH>.<bin|hex|json>`
|
||||||
|
|
||||||
Given a transaction hash,
|
Given a transaction hash,
|
||||||
Returns a transaction, in binary, hex-encoded binary or JSON formats.
|
Returns a transaction, in binary, hex-encoded binary or JSON formats.
|
||||||
|
@ -15,8 +15,8 @@ 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.
|
For full TX query capability, one must enable the transaction index via "txindex=1" command line / configuration option.
|
||||||
|
|
||||||
####Blocks
|
####Blocks
|
||||||
`GET /rest/block/BLOCK-HASH.{bin|hex|json}`
|
`GET /rest/block/<BLOCK-HASH>.<bin|hex|json>`
|
||||||
`GET /rest/block/notxdetails/BLOCK-HASH.{bin|hex|json}`
|
`GET /rest/block/notxdetails/<BLOCK-HASH>.<bin|hex|json>`
|
||||||
|
|
||||||
Given a block hash,
|
Given a block hash,
|
||||||
Returns a block, in binary, hex-encoded binary or JSON formats.
|
Returns a block, in binary, hex-encoded binary or JSON formats.
|
||||||
|
@ -46,6 +46,39 @@ Only supports JSON as output format.
|
||||||
* verificationprogress : (numeric) estimate of verification progress [0..1]
|
* verificationprogress : (numeric) estimate of verification progress [0..1]
|
||||||
* chainwork : (string) total amount of work in active chain, in hexadecimal
|
* 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
|
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.
|
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.
|
||||||
|
|
|
@ -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/receive.png, src/qt/res/icons/remove.png,
|
||||||
src/qt/res/icons/send.png, src/qt/res/icons/synced.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/transaction*.png, src/qt/res/icons/tx_output.png,
|
||||||
|
src/qt/res/icons/warning.png
|
||||||
|
|
||||||
Jonas Schnelli
|
Jonas Schnelli
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
|
@ -195,12 +195,12 @@ Hardening enables the following features:
|
||||||
|
|
||||||
* Position Independent Executable
|
* Position Independent Executable
|
||||||
Build position independent code to take advantage of Address Space Layout Randomization
|
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
|
offered by some kernels. Attackers who can cause execution of code at an arbitrary memory
|
||||||
memory location is thwarted if he or she doesn't know where anything useful is located.
|
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
|
The stack and heap are randomly located by default but this allows the code section to be
|
||||||
randomly located as well.
|
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;"
|
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:
|
To test that you have built PIE executable, install scanelf, part of paxutils, and use:
|
||||||
|
|
|
@ -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.
|
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
|
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:
|
To describe a class use the same construct above the class definition:
|
||||||
```c++
|
```c++
|
||||||
|
@ -175,7 +175,7 @@ Threads
|
||||||
Pull Request Terminology
|
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.
|
utACK (untested ACK) - Reviewed and agree with the code changes but haven't actually tested them.
|
||||||
|
|
||||||
|
|
|
@ -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
|
seeds and may be more exposed. In light of this exposure, this
|
||||||
document establishes some basic expectations for operating dnsseeds.
|
document establishes some basic expectations for operating dnsseeds.
|
||||||
|
|
||||||
0. A DNS seed operating organization or person is expected
|
0. A DNS seed operating organization or person is expected to follow good
|
||||||
to follow good host security practices and maintain control of
|
host security practices, maintain control of applicable infrastructure,
|
||||||
their serving infrastructure and not sell or transfer control of their
|
and not sell or transfer control of the DNS seed. Any hosting services
|
||||||
DNS seed. Any hosting services contracted by the operator are
|
contracted by the operator are equally expected to uphold these expectations.
|
||||||
equally expected to uphold these expectations.
|
|
||||||
|
|
||||||
1. The DNS seed results must consist exclusively of fairly selected and
|
1. The DNS seed results must consist exclusively of fairly selected and
|
||||||
functioning Bitcoin nodes from the public network to the best of the
|
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
|
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
|
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
|
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
|
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.
|
to any third party.
|
||||||
|
|
||||||
5. Information gathered as a result of the operators node-spidering
|
5. Information gathered as a result of the operators node-spidering
|
||||||
|
|
|
@ -87,7 +87,7 @@ After creating the VM, we need to configure it.
|
||||||
|
|
||||||
![](gitian-building/network_settings.png)
|
![](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.
|
- Create a new rule by clicking the plus icon.
|
||||||
|
|
||||||
![](gitian-building/port_forwarding_rules.png)
|
![](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.
|
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)
|
![](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)
|
![](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)
|
- 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)
|
![](gitian-building/debian_install_10_configure_clock.png)
|
||||||
|
@ -371,7 +371,7 @@ COMMIT=2014_03_windows_unicode_path
|
||||||
Signing externally
|
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.
|
and follow the steps in the build process as normal.
|
||||||
|
|
||||||
gpg: skipped "laanwj": secret key not available
|
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
|
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
|
[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.
|
||||||
|
|
|
@ -63,7 +63,7 @@ can then be controlled by group membership.
|
||||||
|
|
||||||
4a) systemd
|
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
|
/usr/lib/systemd/system directory, followed by the command
|
||||||
"systemctl daemon-reload" in order to update running systemd configuration.
|
"systemctl daemon-reload" in order to update running systemd configuration.
|
||||||
|
|
||||||
|
|
143
doc/release-notes/release-notes-0.10.1.md
Normal file
143
doc/release-notes/release-notes-0.10.1.md
Normal file
|
@ -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/).
|
86
doc/release-notes/release-notes-0.10.2.md
Normal file
86
doc/release-notes/release-notes-0.10.2.md
Normal file
|
@ -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/).
|
95
doc/release-notes/release-notes-0.9.4.md
Normal file
95
doc/release-notes/release-notes-0.9.4.md
Normal file
|
@ -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/).
|
|
@ -22,6 +22,7 @@ testScripts=(
|
||||||
'txn_doublespend.py'
|
'txn_doublespend.py'
|
||||||
'txn_doublespend.py --mineblock'
|
'txn_doublespend.py --mineblock'
|
||||||
'getchaintips.py'
|
'getchaintips.py'
|
||||||
|
'rawtransactions.py'
|
||||||
'rest.py'
|
'rest.py'
|
||||||
'mempool_spendcoinbase.py'
|
'mempool_spendcoinbase.py'
|
||||||
'mempool_coinbase_spends.py'
|
'mempool_coinbase_spends.py'
|
||||||
|
@ -29,9 +30,11 @@ testScripts=(
|
||||||
'zapwallettxes.py'
|
'zapwallettxes.py'
|
||||||
'proxy_test.py'
|
'proxy_test.py'
|
||||||
'merkle_blocks.py'
|
'merkle_blocks.py'
|
||||||
# 'forknotify.py'
|
'signrawtransactions.py'
|
||||||
'maxblocksinflight.py'
|
'maxblocksinflight.py'
|
||||||
'invalidblockrequest.py'
|
'invalidblockrequest.py'
|
||||||
|
'rawtransactions.py'
|
||||||
|
# 'forknotify.py'
|
||||||
);
|
);
|
||||||
if [ "x${ENABLE_BITCOIND}${ENABLE_UTILS}${ENABLE_WALLET}" = "x111" ]; then
|
if [ "x${ENABLE_BITCOIND}${ENABLE_UTILS}${ENABLE_WALLET}" = "x111" ]; then
|
||||||
for (( i = 0; i < ${#testScripts[@]}; i++ ))
|
for (( i = 0; i < ${#testScripts[@]}; i++ ))
|
||||||
|
|
|
@ -28,7 +28,7 @@ Notes
|
||||||
A 200-block -regtest blockchain and wallets for four nodes
|
A 200-block -regtest blockchain and wallets for four nodes
|
||||||
is created the first time a regression test is run and
|
is created the first time a regression test is run and
|
||||||
is stored in the cache/ directory. Each node has 25 mature
|
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
|
After the first run, the cache/ blockchain and wallets are
|
||||||
copied into a temporary directory and used as the initial
|
copied into a temporary directory and used as the initial
|
||||||
|
|
|
@ -25,6 +25,8 @@ generator that returns TestInstance objects. See below for definition.
|
||||||
# on_getheaders: provide headers via BlockStore
|
# on_getheaders: provide headers via BlockStore
|
||||||
# on_getdata: provide blocks via BlockStore
|
# on_getdata: provide blocks via BlockStore
|
||||||
|
|
||||||
|
global mininode_lock
|
||||||
|
|
||||||
class TestNode(NodeConnCB):
|
class TestNode(NodeConnCB):
|
||||||
|
|
||||||
def __init__(self, block_store, tx_store):
|
def __init__(self, block_store, tx_store):
|
||||||
|
@ -148,6 +150,7 @@ class TestManager(object):
|
||||||
max_tries = 10 / sleep_time # Wait at most 10 seconds
|
max_tries = 10 / sleep_time # Wait at most 10 seconds
|
||||||
while max_tries > 0:
|
while max_tries > 0:
|
||||||
done = True
|
done = True
|
||||||
|
with mininode_lock:
|
||||||
for c in self.connections:
|
for c in self.connections:
|
||||||
if c.cb.verack_received is False:
|
if c.cb.verack_received is False:
|
||||||
done = False
|
done = False
|
||||||
|
@ -161,6 +164,7 @@ class TestManager(object):
|
||||||
while received_pongs is not True:
|
while received_pongs is not True:
|
||||||
time.sleep(0.05)
|
time.sleep(0.05)
|
||||||
received_pongs = True
|
received_pongs = True
|
||||||
|
with mininode_lock:
|
||||||
for c in self.connections:
|
for c in self.connections:
|
||||||
if c.cb.received_ping_response(counter) is not True:
|
if c.cb.received_ping_response(counter) is not True:
|
||||||
received_pongs = False
|
received_pongs = False
|
||||||
|
@ -173,6 +177,7 @@ class TestManager(object):
|
||||||
# Wait for nodes to request block (50ms sleep * 20 tries * num_blocks)
|
# Wait for nodes to request block (50ms sleep * 20 tries * num_blocks)
|
||||||
max_tries = 20*num_blocks
|
max_tries = 20*num_blocks
|
||||||
while max_tries > 0:
|
while max_tries > 0:
|
||||||
|
with mininode_lock:
|
||||||
results = [ blockhash in c.cb.block_request_map and
|
results = [ blockhash in c.cb.block_request_map and
|
||||||
c.cb.block_request_map[blockhash] for c in self.connections ]
|
c.cb.block_request_map[blockhash] for c in self.connections ]
|
||||||
if False not in results:
|
if False not in results:
|
||||||
|
@ -199,6 +204,7 @@ class TestManager(object):
|
||||||
# Wait for nodes to request transaction (50ms sleep * 20 tries * num_events)
|
# Wait for nodes to request transaction (50ms sleep * 20 tries * num_events)
|
||||||
max_tries = 20*num_events
|
max_tries = 20*num_events
|
||||||
while max_tries > 0:
|
while max_tries > 0:
|
||||||
|
with mininode_lock:
|
||||||
results = [ txhash in c.cb.tx_request_map and
|
results = [ txhash in c.cb.tx_request_map and
|
||||||
c.cb.tx_request_map[txhash] for c in self.connections ]
|
c.cb.tx_request_map[txhash] for c in self.connections ]
|
||||||
if False not in results:
|
if False not in results:
|
||||||
|
@ -221,11 +227,13 @@ class TestManager(object):
|
||||||
self.ping_counter += 1
|
self.ping_counter += 1
|
||||||
|
|
||||||
# Sort inv responses from each node
|
# Sort inv responses from each node
|
||||||
|
with mininode_lock:
|
||||||
[ c.cb.lastInv.sort() for c in self.connections ]
|
[ c.cb.lastInv.sort() for c in self.connections ]
|
||||||
|
|
||||||
# Verify that the tip of each connection all agree with each other, and
|
# Verify that the tip of each connection all agree with each other, and
|
||||||
# with the expected outcome (if given)
|
# with the expected outcome (if given)
|
||||||
def check_results(self, blockhash, outcome):
|
def check_results(self, blockhash, outcome):
|
||||||
|
with mininode_lock:
|
||||||
for c in self.connections:
|
for c in self.connections:
|
||||||
if outcome is None:
|
if outcome is None:
|
||||||
if c.cb.bestblockhash != self.connections[0].cb.bestblockhash:
|
if c.cb.bestblockhash != self.connections[0].cb.bestblockhash:
|
||||||
|
@ -242,6 +250,7 @@ class TestManager(object):
|
||||||
# perhaps it would be useful to add the ability to check explicitly that
|
# 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.
|
# a particular tx's existence in the mempool is the same across all nodes.
|
||||||
def check_mempool(self, txhash, outcome):
|
def check_mempool(self, txhash, outcome):
|
||||||
|
with mininode_lock:
|
||||||
for c in self.connections:
|
for c in self.connections:
|
||||||
if outcome is None:
|
if outcome is None:
|
||||||
# Make sure the mempools agree with each other
|
# Make sure the mempools agree with each other
|
||||||
|
@ -272,6 +281,7 @@ class TestManager(object):
|
||||||
block = b_or_t
|
block = b_or_t
|
||||||
block_outcome = outcome
|
block_outcome = outcome
|
||||||
# Add to shared block_store, set as current block
|
# Add to shared block_store, set as current block
|
||||||
|
with mininode_lock:
|
||||||
self.block_store.add_block(block)
|
self.block_store.add_block(block)
|
||||||
for c in self.connections:
|
for c in self.connections:
|
||||||
c.cb.block_request_map[block.sha256] = False
|
c.cb.block_request_map[block.sha256] = False
|
||||||
|
@ -288,7 +298,8 @@ class TestManager(object):
|
||||||
assert(isinstance(b_or_t, CTransaction))
|
assert(isinstance(b_or_t, CTransaction))
|
||||||
tx = b_or_t
|
tx = b_or_t
|
||||||
tx_outcome = outcome
|
tx_outcome = outcome
|
||||||
# Add to shared tx store
|
# Add to shared tx store and clear map entry
|
||||||
|
with mininode_lock:
|
||||||
self.tx_store.add_transaction(tx)
|
self.tx_store.add_transaction(tx)
|
||||||
for c in self.connections:
|
for c in self.connections:
|
||||||
c.cb.tx_request_map[tx.sha256] = False
|
c.cb.tx_request_map[tx.sha256] = False
|
||||||
|
@ -302,7 +313,7 @@ class TestManager(object):
|
||||||
invqueue.append(CInv(1, tx.sha256))
|
invqueue.append(CInv(1, tx.sha256))
|
||||||
# Ensure we're not overflowing the inv queue
|
# Ensure we're not overflowing the inv queue
|
||||||
if len(invqueue) == MAX_INV_SZ:
|
if len(invqueue) == MAX_INV_SZ:
|
||||||
[ c.sb.send_message(msg_inv(invqueue)) for c in self.connections ]
|
[ c.send_message(msg_inv(invqueue)) for c in self.connections ]
|
||||||
invqueue = []
|
invqueue = []
|
||||||
|
|
||||||
# Do final sync if we weren't syncing on every block or every tx.
|
# Do final sync if we weren't syncing on every block or every tx.
|
||||||
|
|
|
@ -49,7 +49,7 @@ B2ARGS="-datadir=$D2 -debug=mempool"
|
||||||
$BITCOIND $B2ARGS &
|
$BITCOIND $B2ARGS &
|
||||||
B2PID=$!
|
B2PID=$!
|
||||||
|
|
||||||
# Wait until all four nodes are at the same block number
|
# Wait until both nodes are at the same block number
|
||||||
function WaitBlocks {
|
function WaitBlocks {
|
||||||
while :
|
while :
|
||||||
do
|
do
|
||||||
|
|
|
@ -61,6 +61,7 @@ class TestManager(NodeConnCB):
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
|
|
||||||
total_requests = 0
|
total_requests = 0
|
||||||
|
with mininode_lock:
|
||||||
for key in self.blockReqCounts:
|
for key in self.blockReqCounts:
|
||||||
total_requests += self.blockReqCounts[key]
|
total_requests += self.blockReqCounts[key]
|
||||||
if self.blockReqCounts[key] > 1:
|
if self.blockReqCounts[key] > 1:
|
||||||
|
|
|
@ -26,7 +26,7 @@ import sys
|
||||||
import random
|
import random
|
||||||
import cStringIO
|
import cStringIO
|
||||||
import hashlib
|
import hashlib
|
||||||
from threading import Lock
|
from threading import RLock
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
import logging
|
import logging
|
||||||
import copy
|
import copy
|
||||||
|
@ -37,6 +37,19 @@ MY_SUBVERSION = "/python-mininode-tester:0.0.1/"
|
||||||
|
|
||||||
MAX_INV_SZ = 50000
|
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
|
# Serialization/deserialization tools
|
||||||
def sha256(s):
|
def sha256(s):
|
||||||
return hashlib.new('sha256', s).digest()
|
return hashlib.new('sha256', s).digest()
|
||||||
|
@ -975,10 +988,6 @@ class msg_reject(object):
|
||||||
# Reimplement the on_* functions to provide handling for events
|
# Reimplement the on_* functions to provide handling for events
|
||||||
class NodeConnCB(object):
|
class NodeConnCB(object):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
# Acquire on all callbacks -- overkill for now since asyncore is
|
|
||||||
# single-threaded, but may be useful for synchronizing access to
|
|
||||||
# member variables in derived classes.
|
|
||||||
self.cbLock = Lock()
|
|
||||||
self.verack_received = False
|
self.verack_received = False
|
||||||
|
|
||||||
# Derived classes should call this function once to set the message map
|
# Derived classes should call this function once to set the message map
|
||||||
|
@ -1004,7 +1013,7 @@ class NodeConnCB(object):
|
||||||
}
|
}
|
||||||
|
|
||||||
def deliver(self, conn, message):
|
def deliver(self, conn, message):
|
||||||
with self.cbLock:
|
with mininode_lock:
|
||||||
try:
|
try:
|
||||||
self.cbmap[message.command](conn, message)
|
self.cbmap[message.command](conn, message)
|
||||||
except:
|
except:
|
||||||
|
@ -1076,7 +1085,7 @@ class NodeConn(asyncore.dispatcher):
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, dstaddr, dstport, rpc, callback, net="regtest"):
|
def __init__(self, dstaddr, dstport, rpc, callback, net="regtest"):
|
||||||
asyncore.dispatcher.__init__(self)
|
asyncore.dispatcher.__init__(self, map=mininode_socket_map)
|
||||||
self.log = logging.getLogger("NodeConn(%s:%d)" % (dstaddr, dstport))
|
self.log = logging.getLogger("NodeConn(%s:%d)" % (dstaddr, dstport))
|
||||||
self.dstaddr = dstaddr
|
self.dstaddr = dstaddr
|
||||||
self.dstport = dstport
|
self.dstport = dstport
|
||||||
|
@ -1089,7 +1098,6 @@ class NodeConn(asyncore.dispatcher):
|
||||||
self.state = "connecting"
|
self.state = "connecting"
|
||||||
self.network = net
|
self.network = net
|
||||||
self.cb = callback
|
self.cb = callback
|
||||||
self.sendbufLock = Lock() # for protecting the sendbuffer
|
|
||||||
self.disconnect = False
|
self.disconnect = False
|
||||||
|
|
||||||
# stuff version msg into sendbuf
|
# stuff version msg into sendbuf
|
||||||
|
@ -1140,24 +1148,18 @@ class NodeConn(asyncore.dispatcher):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def writable(self):
|
def writable(self):
|
||||||
if self.disconnect:
|
with mininode_lock:
|
||||||
self.handle_close()
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
self.sendbufLock.acquire()
|
|
||||||
length = len(self.sendbuf)
|
length = len(self.sendbuf)
|
||||||
self.sendbufLock.release()
|
|
||||||
return (length > 0)
|
return (length > 0)
|
||||||
|
|
||||||
def handle_write(self):
|
def handle_write(self):
|
||||||
self.sendbufLock.acquire()
|
with mininode_lock:
|
||||||
try:
|
try:
|
||||||
sent = self.send(self.sendbuf)
|
sent = self.send(self.sendbuf)
|
||||||
except:
|
except:
|
||||||
self.handle_close()
|
self.handle_close()
|
||||||
return
|
return
|
||||||
self.sendbuf = self.sendbuf[sent:]
|
self.sendbuf = self.sendbuf[sent:]
|
||||||
self.sendbufLock.release()
|
|
||||||
|
|
||||||
def got_data(self):
|
def got_data(self):
|
||||||
while True:
|
while True:
|
||||||
|
@ -1201,7 +1203,6 @@ class NodeConn(asyncore.dispatcher):
|
||||||
def send_message(self, message, pushbuf=False):
|
def send_message(self, message, pushbuf=False):
|
||||||
if self.state != "connected" and not pushbuf:
|
if self.state != "connected" and not pushbuf:
|
||||||
return
|
return
|
||||||
self.sendbufLock.acquire()
|
|
||||||
self.show_debug_msg("Send %s" % repr(message))
|
self.show_debug_msg("Send %s" % repr(message))
|
||||||
command = message.command
|
command = message.command
|
||||||
data = message.serialize()
|
data = message.serialize()
|
||||||
|
@ -1214,9 +1215,9 @@ class NodeConn(asyncore.dispatcher):
|
||||||
h = sha256(th)
|
h = sha256(th)
|
||||||
tmsg += h[:4]
|
tmsg += h[:4]
|
||||||
tmsg += data
|
tmsg += data
|
||||||
|
with mininode_lock:
|
||||||
self.sendbuf += tmsg
|
self.sendbuf += tmsg
|
||||||
self.last_sent = time.time()
|
self.last_sent = time.time()
|
||||||
self.sendbufLock.release()
|
|
||||||
|
|
||||||
def got_message(self, message):
|
def got_message(self, message):
|
||||||
if message.command == "version":
|
if message.command == "version":
|
||||||
|
@ -1229,12 +1230,20 @@ class NodeConn(asyncore.dispatcher):
|
||||||
|
|
||||||
def disconnect_node(self):
|
def disconnect_node(self):
|
||||||
self.disconnect = True
|
self.disconnect = True
|
||||||
self.send_message(self.messagemap['ping']())
|
|
||||||
|
|
||||||
|
|
||||||
class NetworkThread(Thread):
|
class NetworkThread(Thread):
|
||||||
def run(self):
|
def run(self):
|
||||||
asyncore.loop(0.1, True)
|
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
|
# An exception we can raise if we detect a potential disconnect
|
||||||
|
|
|
@ -7,7 +7,8 @@
|
||||||
# Test pruning code
|
# Test pruning code
|
||||||
# ********
|
# ********
|
||||||
# WARNING:
|
# 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
|
from test_framework import BitcoinTestFramework
|
||||||
|
@ -51,11 +52,11 @@ class PruneTest(BitcoinTestFramework):
|
||||||
self.is_network_split = False
|
self.is_network_split = False
|
||||||
|
|
||||||
# Create nodes 0 and 1 to mine
|
# 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(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=300))
|
self.nodes.append(start_node(1, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=999000", "-checkblocks=5"], timewait=900))
|
||||||
|
|
||||||
# Create node 2 to test pruning
|
# 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.prunedir = self.options.tmpdir+"/node2/regtest/blocks/"
|
||||||
|
|
||||||
self.address[0] = self.nodes[0].getnewaddress()
|
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
|
# 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
|
# Stopping node 0 also clears its mempool, so it doesn't have node1's transactions to accidentally mine
|
||||||
stop_node(self.nodes[0],0)
|
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
|
# Mine 24 blocks in node 1
|
||||||
self.utxo = self.nodes[1].listunspent()
|
self.utxo = self.nodes[1].listunspent()
|
||||||
for i in xrange(24):
|
for i in xrange(24):
|
||||||
|
@ -135,7 +136,7 @@ class PruneTest(BitcoinTestFramework):
|
||||||
# Reboot node 1 to clear its mempool (hopefully make the invalidate faster)
|
# 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)
|
# 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)
|
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()
|
height = self.nodes[1].getblockcount()
|
||||||
print "Current block height:", height
|
print "Current block height:", height
|
||||||
|
@ -158,7 +159,7 @@ class PruneTest(BitcoinTestFramework):
|
||||||
|
|
||||||
# Reboot node1 to clear those giant tx's from mempool
|
# Reboot node1 to clear those giant tx's from mempool
|
||||||
stop_node(self.nodes[1],1)
|
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"
|
print "Generating new longer chain of 300 more blocks"
|
||||||
self.nodes[1].generate(300)
|
self.nodes[1].generate(300)
|
||||||
|
@ -223,7 +224,7 @@ class PruneTest(BitcoinTestFramework):
|
||||||
waitstart = time.time()
|
waitstart = time.time()
|
||||||
while self.nodes[2].getblockcount() < goalbestheight:
|
while self.nodes[2].getblockcount() < goalbestheight:
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
if time.time() - waitstart > 300:
|
if time.time() - waitstart > 900:
|
||||||
raise AssertionError("Node 2 didn't reorg to proper height")
|
raise AssertionError("Node 2 didn't reorg to proper height")
|
||||||
assert(self.nodes[2].getbestblockhash() == goalbesthash)
|
assert(self.nodes[2].getbestblockhash() == goalbesthash)
|
||||||
# Verify we can now have the data for a block previously pruned
|
# Verify we can now have the data for a block previously pruned
|
||||||
|
@ -256,7 +257,7 @@ class PruneTest(BitcoinTestFramework):
|
||||||
|
|
||||||
|
|
||||||
def run_test(self):
|
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"
|
print "Mining a big blockchain of 995 blocks"
|
||||||
self.create_big_chain()
|
self.create_big_chain()
|
||||||
# Chain diagram key:
|
# Chain diagram key:
|
||||||
|
|
144
qa/rpc-tests/rawtransactions.py
Executable file
144
qa/rpc-tests/rawtransactions.py
Executable file
|
@ -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()
|
|
@ -9,7 +9,10 @@
|
||||||
|
|
||||||
from test_framework import BitcoinTestFramework
|
from test_framework import BitcoinTestFramework
|
||||||
from util import *
|
from util import *
|
||||||
|
from struct import *
|
||||||
|
import binascii
|
||||||
import json
|
import json
|
||||||
|
import StringIO
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import http.client as httplib
|
import http.client as httplib
|
||||||
|
@ -20,45 +23,210 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
import urlparse
|
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 = httplib.HTTPConnection(host, port)
|
||||||
conn.request('GET', path)
|
conn.request('GET', path, requestdata)
|
||||||
|
|
||||||
if response_object:
|
if response_object:
|
||||||
return conn.getresponse()
|
return conn.getresponse()
|
||||||
|
|
||||||
return conn.getresponse().read()
|
return conn.getresponse().read()
|
||||||
|
|
||||||
|
|
||||||
class RESTTest (BitcoinTestFramework):
|
class RESTTest (BitcoinTestFramework):
|
||||||
FORMAT_SEPARATOR = "."
|
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):
|
def run_test(self):
|
||||||
url = urlparse.urlparse(self.nodes[0].url)
|
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()
|
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
|
# 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_equal(response.status, 200)
|
||||||
assert_greater_than(int(response.getheader('content-length')), 80)
|
assert_greater_than(int(response.getheader('content-length')), 80)
|
||||||
response_str = response.read()
|
response_str = response.read()
|
||||||
|
|
||||||
# compare with block header
|
# 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(response_header.status, 200)
|
||||||
assert_equal(int(response_header.getheader('content-length')), 80)
|
assert_equal(int(response_header.getheader('content-length')), 80)
|
||||||
response_header_str = response_header.read()
|
response_header_str = response_header.read()
|
||||||
assert_equal(response_str[0:80], response_header_str)
|
assert_equal(response_str[0:80], response_header_str)
|
||||||
|
|
||||||
# check block hex format
|
# 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_equal(response_hex.status, 200)
|
||||||
assert_greater_than(int(response_hex.getheader('content-length')), 160)
|
assert_greater_than(int(response_hex.getheader('content-length')), 160)
|
||||||
response_hex_str = response_hex.read()
|
response_hex_str = response_hex.read()
|
||||||
assert_equal(response_str.encode("hex")[0:160], response_hex_str[0:160])
|
assert_equal(response_str.encode("hex")[0:160], response_hex_str[0:160])
|
||||||
|
|
||||||
# compare with hex block header
|
# 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_equal(response_header_hex.status, 200)
|
||||||
assert_greater_than(int(response_header_hex.getheader('content-length')), 160)
|
assert_greater_than(int(response_header_hex.getheader('content-length')), 160)
|
||||||
response_header_hex_str = response_header_hex.read()
|
response_header_hex_str = response_header_hex.read()
|
||||||
|
@ -77,10 +245,12 @@ class RESTTest (BitcoinTestFramework):
|
||||||
assert_equal(json_obj['txid'], tx_hash)
|
assert_equal(json_obj['txid'], tx_hash)
|
||||||
|
|
||||||
# check hex format response
|
# 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_equal(hex_string.status, 200)
|
||||||
assert_greater_than(int(response.getheader('content-length')), 10)
|
assert_greater_than(int(response.getheader('content-length')), 10)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# check block tx details
|
# check block tx details
|
||||||
# let's make 3 tx and mine them on node 1
|
# let's make 3 tx and mine them on node 1
|
||||||
txs = []
|
txs = []
|
||||||
|
|
109
qa/rpc-tests/signrawtransactions.py
Executable file
109
qa/rpc-tests/signrawtransactions.py
Executable file
|
@ -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()
|
|
@ -1,5 +1,5 @@
|
||||||
#!/usr/bin/env python2
|
#!/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
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
# 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 bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException
|
||||||
from util import *
|
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):
|
class EstimateFeeTest(BitcoinTestFramework):
|
||||||
|
|
||||||
def setup_network(self):
|
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 = []
|
||||||
self.nodes.append(start_node(0, self.options.tmpdir,
|
# Use node0 to mine blocks for input splitting
|
||||||
["-debug=mempool", "-debug=estimatefee", "-relaypriority=0"]))
|
self.nodes.append(start_node(0, self.options.tmpdir, ["-maxorphantx=1000",
|
||||||
# Node1 mines small-but-not-tiny blocks, and allows free transactions.
|
"-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,
|
# 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
|
# (17k is room enough for 110 or so transactions)
|
||||||
# 6 or 7 transactions)
|
|
||||||
self.nodes.append(start_node(1, self.options.tmpdir,
|
self.nodes.append(start_node(1, self.options.tmpdir,
|
||||||
["-blockprioritysize=1500", "-blockmaxsize=2000",
|
["-blockprioritysize=1500", "-blockmaxsize=18000",
|
||||||
"-debug=mempool", "-debug=estimatefee", "-relaypriority=0"]))
|
"-maxorphantx=1000", "-relaypriority=0", "-debug=estimatefee"]))
|
||||||
connect_nodes(self.nodes[1], 0)
|
connect_nodes(self.nodes[1], 0)
|
||||||
|
|
||||||
# Node2 is a stingy miner, that
|
# Node2 is a stingy miner, that
|
||||||
# produces very small blocks (room for only 3 or so transactions)
|
# produces too small blocks (room for only 70 or so transactions)
|
||||||
node2args = [ "-blockprioritysize=0", "-blockmaxsize=1500",
|
node2args = ["-blockprioritysize=0", "-blockmaxsize=12000", "-maxorphantx=1000", "-relaypriority=0"]
|
||||||
"-debug=mempool", "-debug=estimatefee", "-relaypriority=0"]
|
|
||||||
self.nodes.append(start_node(2, self.options.tmpdir, node2args))
|
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.is_network_split = False
|
||||||
self.sync_all()
|
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):
|
def run_test(self):
|
||||||
# Prime the memory pool with pairs of transactions
|
self.fees_per_kb = []
|
||||||
# (high-priority, random fee and zero-priority, random fee)
|
self.memutxo = []
|
||||||
min_fee = Decimal("0.001")
|
self.confutxo = self.txouts # Start with the set of confirmed txouts after splitting
|
||||||
fees_per_kb = [];
|
print("Checking estimates for 1/2/3/6/15/25 blocks")
|
||||||
for i in range(12):
|
print("Creating transactions and mining them with a huge block size")
|
||||||
(txid, txhex, fee) = random_zeropri_transaction(self.nodes, Decimal("1.1"),
|
# Create transactions and mine 20 big blocks with node 0 such that the mempool is always emptied
|
||||||
min_fee, min_fee, 20)
|
self.transact_and_mine(30, self.nodes[0])
|
||||||
tx_kbytes = (len(txhex)/2)/1000.0
|
check_estimates(self.nodes[1], self.fees_per_kb, 1)
|
||||||
fees_per_kb.append(float(fee)/tx_kbytes)
|
|
||||||
|
|
||||||
# Mine blocks with node2 until the memory pool clears:
|
print("Creating transactions and mining them with a block size that can't keep up")
|
||||||
count_start = self.nodes[2].getblockcount()
|
# Create transactions and mine 30 small blocks with node 2, but create txs faster than we can mine
|
||||||
while len(self.nodes[2].getrawmempool()) > 0:
|
self.transact_and_mine(20, self.nodes[2])
|
||||||
self.nodes[2].generate(1)
|
check_estimates(self.nodes[1], self.fees_per_kb, 3)
|
||||||
self.sync_all()
|
|
||||||
|
|
||||||
all_estimates = [ self.nodes[0].estimatefee(i) for i in range(1,20) ]
|
print("Creating transactions and mining them at a block size that is just big enough")
|
||||||
print("Fee estimates, super-stingy miner: "+str([str(e) for e in all_estimates]))
|
# 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
|
||||||
# Estimates should be within the bounds of what transactions fees actually were:
|
self.transact_and_mine(40, self.nodes[1])
|
||||||
delta = 1.0e-6 # account for rounding error
|
check_estimates(self.nodes[1], self.fees_per_kb, 2)
|
||||||
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()
|
|
||||||
|
|
||||||
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))
|
|
||||||
|
|
||||||
# Finish by mining a normal-sized block:
|
# Finish by mining a normal-sized block:
|
||||||
while len(self.nodes[0].getrawmempool()) > 0:
|
while len(self.nodes[1].getrawmempool()) > 0:
|
||||||
self.nodes[0].generate(1)
|
self.nodes[1].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]))
|
|
||||||
|
|
||||||
|
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__':
|
if __name__ == '__main__':
|
||||||
EstimateFeeTest().main()
|
EstimateFeeTest().main()
|
||||||
|
|
|
@ -33,7 +33,7 @@ def check_json_precision():
|
||||||
if satoshis != 2000000000000003:
|
if satoshis != 2000000000000003:
|
||||||
raise RuntimeError("JSON encode/decode loses precision")
|
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
|
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 ]
|
counts = [ x.getblockcount() for x in rpc_connections ]
|
||||||
if counts == [ counts[0] ]*len(counts):
|
if counts == [ counts[0] ]*len(counts):
|
||||||
break
|
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
|
Wait until everybody has the same transactions in their memory
|
||||||
pools
|
pools
|
||||||
|
@ -56,7 +56,7 @@ def sync_mempools(rpc_connections):
|
||||||
num_match = num_match+1
|
num_match = num_match+1
|
||||||
if num_match == len(rpc_connections):
|
if num_match == len(rpc_connections):
|
||||||
break
|
break
|
||||||
time.sleep(1)
|
time.sleep(wait)
|
||||||
|
|
||||||
bitcoind_processes = {}
|
bitcoind_processes = {}
|
||||||
|
|
||||||
|
@ -283,7 +283,7 @@ def send_zeropri_transaction(from_node, to_node, amount, fee):
|
||||||
Create&broadcast a zero-priority transaction.
|
Create&broadcast a zero-priority transaction.
|
||||||
Returns (txid, hex-encoded-txdata)
|
Returns (txid, hex-encoded-txdata)
|
||||||
Ensures transaction is zero-priority by first creating a send-to-self,
|
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:
|
# Create a send-to-self with confirmed inputs:
|
||||||
|
|
|
@ -62,7 +62,7 @@ class WalletTest (BitcoinTestFramework):
|
||||||
walletinfo = self.nodes[0].getwalletinfo()
|
walletinfo = self.nodes[0].getwalletinfo()
|
||||||
assert_equal(walletinfo['immature_balance'], 0)
|
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.nodes[0].generate(1)
|
||||||
self.sync_all()
|
self.sync_all()
|
||||||
|
|
||||||
|
|
|
@ -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
|
# if latest commit is tagged and not dirty, then override using the tag name
|
||||||
RAWDESC=$(git describe --abbrev=0 2>/dev/null)
|
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
|
git diff-index --quiet HEAD -- && DESC=$RAWDESC
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ $(LIBLEVELDB): $(LIBMEMENV)
|
||||||
$(LIBLEVELDB) $(LIBMEMENV):
|
$(LIBLEVELDB) $(LIBMEMENV):
|
||||||
@echo "Building LevelDB ..." && $(MAKE) -C $(@D) $(@F) CXX="$(CXX)" \
|
@echo "Building LevelDB ..." && $(MAKE) -C $(@D) $(@F) CXX="$(CXX)" \
|
||||||
CC="$(CC)" PLATFORM=$(TARGET_OS) AR="$(AR)" $(LEVELDB_TARGET_FLAGS) \
|
CC="$(CC)" PLATFORM=$(TARGET_OS) AR="$(AR)" $(LEVELDB_TARGET_FLAGS) \
|
||||||
OPT="$(CXXFLAGS) $(CPPFLAGS)"
|
OPT="$(CXXFLAGS) $(CPPFLAGS) -D__STDC_LIMIT_MACROS"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
BITCOIN_CONFIG_INCLUDES=-I$(builddir)/config
|
BITCOIN_CONFIG_INCLUDES=-I$(builddir)/config
|
||||||
|
@ -77,8 +77,8 @@ BITCOIN_CORE_H = \
|
||||||
base58.h \
|
base58.h \
|
||||||
bloom.h \
|
bloom.h \
|
||||||
chain.h \
|
chain.h \
|
||||||
chainparamsbase.h \
|
|
||||||
chainparams.h \
|
chainparams.h \
|
||||||
|
chainparamsbase.h \
|
||||||
chainparamsseeds.h \
|
chainparamsseeds.h \
|
||||||
checkpoints.h \
|
checkpoints.h \
|
||||||
checkqueue.h \
|
checkqueue.h \
|
||||||
|
@ -86,11 +86,13 @@ BITCOIN_CORE_H = \
|
||||||
coincontrol.h \
|
coincontrol.h \
|
||||||
coins.h \
|
coins.h \
|
||||||
compat.h \
|
compat.h \
|
||||||
|
compat/byteswap.h \
|
||||||
|
compat/endian.h \
|
||||||
|
compat/sanity.h \
|
||||||
compressor.h \
|
compressor.h \
|
||||||
consensus/consensus.h \
|
consensus/consensus.h \
|
||||||
consensus/params.h \
|
consensus/params.h \
|
||||||
core_io.h \
|
core_io.h \
|
||||||
wallet/db.h \
|
|
||||||
eccryptoverify.h \
|
eccryptoverify.h \
|
||||||
ecwrapper.h \
|
ecwrapper.h \
|
||||||
hash.h \
|
hash.h \
|
||||||
|
@ -100,14 +102,16 @@ BITCOIN_CORE_H = \
|
||||||
leveldbwrapper.h \
|
leveldbwrapper.h \
|
||||||
limitedmap.h \
|
limitedmap.h \
|
||||||
main.h \
|
main.h \
|
||||||
|
memusage.h \
|
||||||
merkleblock.h \
|
merkleblock.h \
|
||||||
miner.h \
|
miner.h \
|
||||||
mruset.h \
|
mruset.h \
|
||||||
ncc.h \
|
ncc.h \
|
||||||
ncctrie.h \
|
ncctrie.h \
|
||||||
netbase.h \
|
|
||||||
net.h \
|
net.h \
|
||||||
|
netbase.h \
|
||||||
noui.h \
|
noui.h \
|
||||||
|
policy/fees.h \
|
||||||
pow.h \
|
pow.h \
|
||||||
primitives/block.h \
|
primitives/block.h \
|
||||||
primitives/transaction.h \
|
primitives/transaction.h \
|
||||||
|
@ -117,9 +121,10 @@ BITCOIN_CORE_H = \
|
||||||
rpcclient.h \
|
rpcclient.h \
|
||||||
rpcprotocol.h \
|
rpcprotocol.h \
|
||||||
rpcserver.h \
|
rpcserver.h \
|
||||||
|
scheduler.h \
|
||||||
script/interpreter.h \
|
script/interpreter.h \
|
||||||
script/script_error.h \
|
|
||||||
script/script.h \
|
script/script.h \
|
||||||
|
script/script_error.h \
|
||||||
script/sigcache.h \
|
script/sigcache.h \
|
||||||
script/sign.h \
|
script/sign.h \
|
||||||
script/standard.h \
|
script/standard.h \
|
||||||
|
@ -145,12 +150,10 @@ BITCOIN_CORE_H = \
|
||||||
validationinterface.h \
|
validationinterface.h \
|
||||||
version.h \
|
version.h \
|
||||||
wallet/crypter.h \
|
wallet/crypter.h \
|
||||||
wallet/walletdb.h \
|
wallet/db.h \
|
||||||
wallet/wallet.h \
|
wallet/wallet.h \
|
||||||
wallet/wallet_ismine.h \
|
wallet/wallet_ismine.h \
|
||||||
compat/byteswap.h \
|
wallet/walletdb.h
|
||||||
compat/endian.h \
|
|
||||||
compat/sanity.h
|
|
||||||
|
|
||||||
JSON_H = \
|
JSON_H = \
|
||||||
json/json_spirit.h \
|
json/json_spirit.h \
|
||||||
|
@ -185,6 +188,7 @@ libbitcoin_server_a_SOURCES = \
|
||||||
ncctrie.cpp \
|
ncctrie.cpp \
|
||||||
net.cpp \
|
net.cpp \
|
||||||
noui.cpp \
|
noui.cpp \
|
||||||
|
policy/fees.cpp \
|
||||||
pow.cpp \
|
pow.cpp \
|
||||||
rest.cpp \
|
rest.cpp \
|
||||||
rpcblockchain.cpp \
|
rpcblockchain.cpp \
|
||||||
|
@ -218,39 +222,37 @@ libbitcoin_wallet_a_SOURCES = \
|
||||||
# crypto primitives library
|
# crypto primitives library
|
||||||
crypto_libbitcoin_crypto_a_CPPFLAGS = $(BITCOIN_CONFIG_INCLUDES)
|
crypto_libbitcoin_crypto_a_CPPFLAGS = $(BITCOIN_CONFIG_INCLUDES)
|
||||||
crypto_libbitcoin_crypto_a_SOURCES = \
|
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/common.h \
|
||||||
crypto/sha256.h \
|
crypto/hmac_sha256.cpp \
|
||||||
crypto/sha512.h \
|
|
||||||
crypto/hmac_sha256.h \
|
crypto/hmac_sha256.h \
|
||||||
|
crypto/hmac_sha512.cpp \
|
||||||
crypto/hmac_sha512.h \
|
crypto/hmac_sha512.h \
|
||||||
|
crypto/ripemd160.cpp \
|
||||||
|
crypto/ripemd160.h \
|
||||||
|
crypto/sha1.cpp \
|
||||||
crypto/sha1.h \
|
crypto/sha1.h \
|
||||||
crypto/ripemd160.h
|
crypto/sha256.cpp \
|
||||||
|
crypto/sha256.h \
|
||||||
|
crypto/sha512.cpp \
|
||||||
|
crypto/sha512.h
|
||||||
|
|
||||||
# univalue JSON library
|
# univalue JSON library
|
||||||
univalue_libbitcoin_univalue_a_SOURCES = \
|
univalue_libbitcoin_univalue_a_SOURCES = \
|
||||||
univalue/univalue.cpp \
|
univalue/univalue.cpp \
|
||||||
univalue/univalue_read.cpp \
|
univalue/univalue.h \
|
||||||
univalue/univalue_write.cpp \
|
|
||||||
univalue/univalue_escapes.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
|
# common: shared between bitcoind, and bitcoin-qt and non-server tools
|
||||||
libbitcoin_common_a_CPPFLAGS = $(BITCOIN_INCLUDES)
|
libbitcoin_common_a_CPPFLAGS = $(BITCOIN_INCLUDES)
|
||||||
libbitcoin_common_a_SOURCES = \
|
libbitcoin_common_a_SOURCES = \
|
||||||
arith_uint256.cpp \
|
|
||||||
amount.cpp \
|
amount.cpp \
|
||||||
|
arith_uint256.cpp \
|
||||||
base58.cpp \
|
base58.cpp \
|
||||||
chainparams.cpp \
|
chainparams.cpp \
|
||||||
coins.cpp \
|
coins.cpp \
|
||||||
compressor.cpp \
|
compressor.cpp \
|
||||||
primitives/block.cpp \
|
|
||||||
primitives/transaction.cpp \
|
|
||||||
core_read.cpp \
|
core_read.cpp \
|
||||||
core_write.cpp \
|
core_write.cpp \
|
||||||
eccryptoverify.cpp \
|
eccryptoverify.cpp \
|
||||||
|
@ -260,13 +262,16 @@ libbitcoin_common_a_SOURCES = \
|
||||||
keystore.cpp \
|
keystore.cpp \
|
||||||
ncc.cpp \
|
ncc.cpp \
|
||||||
netbase.cpp \
|
netbase.cpp \
|
||||||
|
primitives/block.cpp \
|
||||||
|
primitives/transaction.cpp \
|
||||||
protocol.cpp \
|
protocol.cpp \
|
||||||
pubkey.cpp \
|
pubkey.cpp \
|
||||||
|
scheduler.cpp \
|
||||||
script/interpreter.cpp \
|
script/interpreter.cpp \
|
||||||
script/script.cpp \
|
script/script.cpp \
|
||||||
|
script/script_error.cpp \
|
||||||
script/sign.cpp \
|
script/sign.cpp \
|
||||||
script/standard.cpp \
|
script/standard.cpp \
|
||||||
script/script_error.cpp \
|
|
||||||
$(BITCOIN_CORE_H)
|
$(BITCOIN_CORE_H)
|
||||||
|
|
||||||
# util: shared between all executables.
|
# util: shared between all executables.
|
||||||
|
|
|
@ -256,6 +256,7 @@ RES_ICONS = \
|
||||||
qt/res/icons/tx_input.png \
|
qt/res/icons/tx_input.png \
|
||||||
qt/res/icons/tx_output.png \
|
qt/res/icons/tx_output.png \
|
||||||
qt/res/icons/tx_mined.png \
|
qt/res/icons/tx_mined.png \
|
||||||
|
qt/res/icons/warning.png \
|
||||||
qt/res/icons/verify.png
|
qt/res/icons/verify.png
|
||||||
|
|
||||||
BITCOIN_QT_CPP = \
|
BITCOIN_QT_CPP = \
|
||||||
|
|
|
@ -58,9 +58,11 @@ BITCOIN_TESTS =\
|
||||||
test/ncctrie_tests.cpp \
|
test/ncctrie_tests.cpp \
|
||||||
test/netbase_tests.cpp \
|
test/netbase_tests.cpp \
|
||||||
test/pmt_tests.cpp \
|
test/pmt_tests.cpp \
|
||||||
|
test/policyestimator_tests.cpp \
|
||||||
test/pow_tests.cpp \
|
test/pow_tests.cpp \
|
||||||
test/rpc_tests.cpp \
|
test/rpc_tests.cpp \
|
||||||
test/sanity_tests.cpp \
|
test/sanity_tests.cpp \
|
||||||
|
test/scheduler_tests.cpp \
|
||||||
test/script_P2SH_tests.cpp \
|
test/script_P2SH_tests.cpp \
|
||||||
test/script_tests.cpp \
|
test/script_tests.cpp \
|
||||||
test/scriptnum_tests.cpp \
|
test/scriptnum_tests.cpp \
|
||||||
|
|
|
@ -105,15 +105,15 @@ public:
|
||||||
/** Stochastic address manager
|
/** Stochastic address manager
|
||||||
*
|
*
|
||||||
* Design goals:
|
* 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.
|
* * Make sure no (localized) attacker can fill the entire table with his nodes/addresses.
|
||||||
*
|
*
|
||||||
* To that end:
|
* To that end:
|
||||||
* * Addresses are organized into buckets.
|
* * Addresses are organized into buckets.
|
||||||
* * Address that have not yet been tried go into 1024 "new" buckets.
|
* * Addresses 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
|
* * 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 the address itself is located.
|
* * 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
|
* * 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.
|
* 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
|
* * 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.
|
* ones) is removed from it first.
|
||||||
|
@ -231,7 +231,6 @@ protected:
|
||||||
void Attempt_(const CService &addr, int64_t nTime);
|
void Attempt_(const CService &addr, int64_t nTime);
|
||||||
|
|
||||||
//! Select an address to connect to.
|
//! Select an address to connect to.
|
||||||
//! nUnkBias determines how much to favor new addresses over tried ones (min=0, max=100)
|
|
||||||
CAddrInfo Select_();
|
CAddrInfo Select_();
|
||||||
|
|
||||||
#ifdef DEBUG_ADDRMAN
|
#ifdef DEBUG_ADDRMAN
|
||||||
|
@ -532,7 +531,6 @@ public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Choose an address to connect to.
|
* Choose an address to connect to.
|
||||||
* nUnkBias determines how much "new" entries are favored over "tried" ones (0-100).
|
|
||||||
*/
|
*/
|
||||||
CAddrInfo Select()
|
CAddrInfo Select()
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,10 +6,10 @@
|
||||||
/**
|
/**
|
||||||
* Why base-58 instead of standard base-64 encoding?
|
* Why base-58 instead of standard base-64 encoding?
|
||||||
* - Don't want 0OIl characters that look the same in some fonts and
|
* - Don't want 0OIl characters that look the same in some fonts and
|
||||||
* could be used to create visually identical looking account numbers.
|
* could be used to create visually identical looking data.
|
||||||
* - A string with non-alphanumeric characters is not as easily accepted as an account number.
|
* - 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.
|
* - 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
|
#ifndef BITCOIN_BASE58_H
|
||||||
#define BITCOIN_BASE58_H
|
#define BITCOIN_BASE58_H
|
||||||
|
|
|
@ -442,9 +442,18 @@ static void MutateTxSign(CMutableTransaction& tx, const string& flagStr)
|
||||||
tx = mergedTx;
|
tx = mergedTx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Secp256k1Init
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Secp256k1Init() { ECC_Start(); }
|
||||||
|
~Secp256k1Init() { ECC_Stop(); }
|
||||||
|
};
|
||||||
|
|
||||||
static void MutateTx(CMutableTransaction& tx, const string& command,
|
static void MutateTx(CMutableTransaction& tx, const string& command,
|
||||||
const string& commandVal)
|
const string& commandVal)
|
||||||
{
|
{
|
||||||
|
boost::scoped_ptr<Secp256k1Init> ecc;
|
||||||
|
|
||||||
if (command == "nversion")
|
if (command == "nversion")
|
||||||
MutateTxVersion(tx, commandVal);
|
MutateTxVersion(tx, commandVal);
|
||||||
else if (command == "locktime")
|
else if (command == "locktime")
|
||||||
|
@ -462,8 +471,10 @@ static void MutateTx(CMutableTransaction& tx, const string& command,
|
||||||
else if (command == "outscript")
|
else if (command == "outscript")
|
||||||
MutateTxAddOutScript(tx, commandVal);
|
MutateTxAddOutScript(tx, commandVal);
|
||||||
|
|
||||||
else if (command == "sign")
|
else if (command == "sign") {
|
||||||
|
if (!ecc) { ecc.reset(new Secp256k1Init()); }
|
||||||
MutateTxSign(tx, commandVal);
|
MutateTxSign(tx, commandVal);
|
||||||
|
}
|
||||||
|
|
||||||
else if (command == "load")
|
else if (command == "load")
|
||||||
RegisterLoad(commandVal);
|
RegisterLoad(commandVal);
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "noui.h"
|
#include "noui.h"
|
||||||
|
#include "scheduler.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
#include <boost/algorithm/string/predicate.hpp>
|
#include <boost/algorithm/string/predicate.hpp>
|
||||||
|
@ -55,6 +56,7 @@ void WaitForShutdown(boost::thread_group* threadGroup)
|
||||||
bool AppInit(int argc, char* argv[])
|
bool AppInit(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
boost::thread_group threadGroup;
|
boost::thread_group threadGroup;
|
||||||
|
CScheduler scheduler;
|
||||||
|
|
||||||
bool fRet = false;
|
bool fRet = false;
|
||||||
|
|
||||||
|
@ -142,7 +144,7 @@ bool AppInit(int argc, char* argv[])
|
||||||
#endif
|
#endif
|
||||||
SoftSetBoolArg("-server", true);
|
SoftSetBoolArg("-server", true);
|
||||||
|
|
||||||
fRet = AppInit2(threadGroup);
|
fRet = AppInit2(threadGroup, scheduler);
|
||||||
}
|
}
|
||||||
catch (const std::exception& e) {
|
catch (const std::exception& e) {
|
||||||
PrintExceptionContinue(&e, "AppInit()");
|
PrintExceptionContinue(&e, "AppInit()");
|
||||||
|
|
|
@ -40,6 +40,17 @@ 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)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
inline unsigned int CBloomFilter::Hash(unsigned int nHashNum, const std::vector<unsigned char>& vDataToHash) const
|
inline unsigned int CBloomFilter::Hash(unsigned int nHashNum, const std::vector<unsigned char>& vDataToHash) const
|
||||||
{
|
{
|
||||||
// 0xFBA4C795 chosen as it guarantees a reasonable bit difference between nHashNum values.
|
// 0xFBA4C795 chosen as it guarantees a reasonable bit difference between nHashNum values.
|
||||||
|
@ -197,3 +208,43 @@ void CBloomFilter::UpdateEmptyFull()
|
||||||
isFull = full;
|
isFull = full;
|
||||||
isEmpty = empty;
|
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;
|
||||||
|
}
|
||||||
|
|
36
src/bloom.h
36
src/bloom.h
|
@ -32,14 +32,14 @@ enum bloomflags
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BloomFilter is a probabilistic filter which SPV clients provide
|
* 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.
|
* This allows for significantly more efficient transaction and block downloads.
|
||||||
*
|
*
|
||||||
* Because bloom filters are probabilistic, an SPV node can increase the false-
|
* Because bloom filters are probabilistic, a SPV node can increase the false-
|
||||||
* positive rate, making us send them transactions which aren't actually theirs,
|
* positive rate, making us send it transactions which aren't actually its,
|
||||||
* allowing clients to trade more bandwidth for more privacy by obfuscating which
|
* allowing clients to trade more bandwidth for more privacy by obfuscating which
|
||||||
* keys are owned by them.
|
* keys are controlled by them.
|
||||||
*/
|
*/
|
||||||
class CBloomFilter
|
class CBloomFilter
|
||||||
{
|
{
|
||||||
|
@ -53,6 +53,10 @@ private:
|
||||||
|
|
||||||
unsigned int Hash(unsigned int nHashNum, const std::vector<unsigned char>& vDataToHash) const;
|
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:
|
public:
|
||||||
/**
|
/**
|
||||||
* Creates a new bloom filter which will provide the given fp rate when filled with the given number of elements
|
* 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();
|
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
|
#endif // BITCOIN_BLOOM_H
|
||||||
|
|
|
@ -74,7 +74,7 @@ enum BlockStatus {
|
||||||
*/
|
*/
|
||||||
BLOCK_VALID_TRANSACTIONS = 3,
|
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.
|
//! Implies all parents are also at least CHAIN.
|
||||||
BLOCK_VALID_CHAIN = 4,
|
BLOCK_VALID_CHAIN = 4,
|
||||||
|
|
||||||
|
|
|
@ -28,55 +28,6 @@ using namespace std;
|
||||||
* + Contains no strange transactions
|
* + Contains no strange transactions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static Checkpoints::MapCheckpoints mapCheckpoints =
|
|
||||||
boost::assign::map_list_of
|
|
||||||
( 0, uint256S("0x0000343f59c49eb433ba3a37ee4b3493ff014ee9b266f610bb3cd1b36927787a"));
|
|
||||||
/*static Checkpoints::MapCheckpoints mapCheckpoints =
|
|
||||||
boost::assign::map_list_of
|
|
||||||
( 11111, uint256("0x0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d"))
|
|
||||||
( 33333, uint256("0x000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6"))
|
|
||||||
( 74000, uint256("0x0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20"))
|
|
||||||
(105000, uint256("0x00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97"))
|
|
||||||
(134444, uint256("0x00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe"))
|
|
||||||
(168000, uint256("0x000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763"))
|
|
||||||
(193000, uint256("0x000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317"))
|
|
||||||
(210000, uint256("0x000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e"))
|
|
||||||
(216116, uint256("0x00000000000001b4f4b433e81ee46494af945cf96014816a4e2370f11b23df4e"))
|
|
||||||
(225430, uint256("0x00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932"))
|
|
||||||
(250000, uint256("0x000000000000003887df1f29024b06fc2200b55f8af8f35453d7be294df2d214"))
|
|
||||||
(279000, uint256("0x0000000000000001ae8c72a0b0c301f67e3afca10e819efa9041e458e9bd7e40"))
|
|
||||||
(295000, uint256("0x00000000000000004d9b4ef50f0f9d686fd69db2e03af35a100370c64632a983"))
|
|
||||||
;*/
|
|
||||||
static const Checkpoints::CCheckpointData data = {
|
|
||||||
&mapCheckpoints,
|
|
||||||
0, // * UNIX timestamp of last checkpoint block
|
|
||||||
0, // * total number of transactions between genesis and last checkpoint
|
|
||||||
// (the tx=... number in the SetBestChain debug.log lines)
|
|
||||||
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 {
|
class CMainParams : public CChainParams {
|
||||||
public:
|
public:
|
||||||
CMainParams() {
|
CMainParams() {
|
||||||
|
@ -92,7 +43,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* The message start string is designed to be unlikely to occur in normal data.
|
* 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
|
* 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[0] = 0xf9;
|
||||||
pchMessageStart[1] = 0xbe;
|
pchMessageStart[1] = 0xbe;
|
||||||
|
@ -104,8 +55,9 @@ public:
|
||||||
nPruneAfterHeight = 100000;
|
nPruneAfterHeight = 100000;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build the genesis block. Note that the output of the genesis coinbase cannot
|
* Build the genesis block. Note that the output of its generation
|
||||||
* be spent as it did not originally exist in the database.
|
* 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)
|
* 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)
|
* CTransaction(hash=4a5e1e, ver=1, vin.size=1, vout.size=1, nLockTime=0)
|
||||||
|
@ -129,7 +81,7 @@ public:
|
||||||
genesis.hashNCCTrie = uint256S("0x0000000000000000000000000000000000000000000000000000000000000001");
|
genesis.hashNCCTrie = uint256S("0x0000000000000000000000000000000000000000000000000000000000000001");
|
||||||
genesis.nVersion = 1;
|
genesis.nVersion = 1;
|
||||||
genesis.nTime = 1417453734;
|
genesis.nTime = 1417453734;
|
||||||
genesis.nBits = 0x1f00ffff;//0x207fffff;//0x1d00ffff;
|
genesis.nBits = 0x1f00ffff;
|
||||||
genesis.nNonce = 7885;
|
genesis.nNonce = 7885;
|
||||||
|
|
||||||
/*bool found = false;
|
/*bool found = false;
|
||||||
|
@ -155,12 +107,6 @@ public:
|
||||||
//assert(genesis.hashMerkleRoot == uint256S("0xa7d51d407092059a2beeffab22e65d6176cfb3c33b93515109480aa7c81c9141"));
|
//assert(genesis.hashMerkleRoot == uint256S("0xa7d51d407092059a2beeffab22e65d6176cfb3c33b93515109480aa7c81c9141"));
|
||||||
assert(genesis.hashMerkleRoot == uint256S("0x93621531f4de4b27d4ffdf785ef12855f2b18687e2141466ff50e2848d83f551"));
|
assert(genesis.hashMerkleRoot == uint256S("0x93621531f4de4b27d4ffdf785ef12855f2b18687e2141466ff50e2848d83f551"));
|
||||||
|
|
||||||
//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("xf2.org", "bitseed.xf2.org")); // Jeff Garzik
|
|
||||||
|
|
||||||
vSeeds.clear();
|
vSeeds.clear();
|
||||||
vFixedSeeds.clear();
|
vFixedSeeds.clear();
|
||||||
|
|
||||||
|
@ -178,11 +124,15 @@ public:
|
||||||
fRequireStandard = true;
|
fRequireStandard = true;
|
||||||
fMineBlocksOnDemand = false;
|
fMineBlocksOnDemand = false;
|
||||||
fTestnetToBeDeprecatedFieldRPC = false;
|
fTestnetToBeDeprecatedFieldRPC = false;
|
||||||
}
|
|
||||||
|
|
||||||
const Checkpoints::CCheckpointData& Checkpoints() const
|
checkpointData = (Checkpoints::CCheckpointData) {
|
||||||
{
|
boost::assign::map_list_of
|
||||||
return data;
|
( 0, uint256S("0x0000343f59c49eb433ba3a37ee4b3493ff014ee9b266f610bb3cd1b36927787a")),
|
||||||
|
1417453734, // * UNIX timestamp of last checkpoint block
|
||||||
|
1, // * total number of transactions between genesis and last checkpoint
|
||||||
|
// (the tx=... number in the SetBestChain debug.log lines)
|
||||||
|
0.0 // * estimated number of transactions per day after checkpoint
|
||||||
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
static CMainParams mainParams;
|
static CMainParams mainParams;
|
||||||
|
@ -234,10 +184,15 @@ public:
|
||||||
fRequireStandard = false;
|
fRequireStandard = false;
|
||||||
fMineBlocksOnDemand = false;
|
fMineBlocksOnDemand = false;
|
||||||
fTestnetToBeDeprecatedFieldRPC = true;
|
fTestnetToBeDeprecatedFieldRPC = true;
|
||||||
}
|
|
||||||
const Checkpoints::CCheckpointData& Checkpoints() const
|
checkpointData = (Checkpoints::CCheckpointData) {
|
||||||
{
|
boost::assign::map_list_of
|
||||||
return dataTestnet;
|
( 546, uint256S("000000002a936ca763904c3c35fce2f3556c559c0214345d31b1bcebf76acb70")),
|
||||||
|
1337966069,
|
||||||
|
1488,
|
||||||
|
300
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
static CTestNetParams testNetParams;
|
static CTestNetParams testNetParams;
|
||||||
|
@ -276,10 +231,14 @@ public:
|
||||||
fRequireStandard = false;
|
fRequireStandard = false;
|
||||||
fMineBlocksOnDemand = true;
|
fMineBlocksOnDemand = true;
|
||||||
fTestnetToBeDeprecatedFieldRPC = false;
|
fTestnetToBeDeprecatedFieldRPC = false;
|
||||||
}
|
|
||||||
const Checkpoints::CCheckpointData& Checkpoints() const
|
checkpointData = (Checkpoints::CCheckpointData){
|
||||||
{
|
boost::assign::map_list_of
|
||||||
return dataRegtest;
|
( 0, uint256S("0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")),
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
static CRegTestParams regTestParams;
|
static CRegTestParams regTestParams;
|
||||||
|
|
|
@ -49,10 +49,6 @@ public:
|
||||||
const CMessageHeader::MessageStartChars& MessageStart() const { return pchMessageStart; }
|
const CMessageHeader::MessageStartChars& MessageStart() const { return pchMessageStart; }
|
||||||
const std::vector<unsigned char>& AlertKey() const { return vAlertPubKey; }
|
const std::vector<unsigned char>& AlertKey() const { return vAlertPubKey; }
|
||||||
int GetDefaultPort() const { return nDefaultPort; }
|
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 */
|
/** Used if GenerateBitcoins is called with a negative number of threads */
|
||||||
int DefaultMinerThreads() const { return nMinerThreads; }
|
int DefaultMinerThreads() const { return nMinerThreads; }
|
||||||
|
@ -62,7 +58,7 @@ public:
|
||||||
bool MiningRequiresPeers() const { return fMiningRequiresPeers; }
|
bool MiningRequiresPeers() const { return fMiningRequiresPeers; }
|
||||||
/** Default value for -checkmempool and -checkblockindex argument */
|
/** Default value for -checkmempool and -checkblockindex argument */
|
||||||
bool DefaultConsistencyChecks() const { return fDefaultConsistencyChecks; }
|
bool DefaultConsistencyChecks() const { return fDefaultConsistencyChecks; }
|
||||||
/** Make standard checks */
|
/** Policy: Filter transactions that do not match well-defined patterns */
|
||||||
bool RequireStandard() const { return fRequireStandard; }
|
bool RequireStandard() const { return fRequireStandard; }
|
||||||
int64_t PruneAfterHeight() const { return nPruneAfterHeight; }
|
int64_t PruneAfterHeight() const { return nPruneAfterHeight; }
|
||||||
/** Make miner stop after a block is found. In RPC, don't return until nGenProcLimit blocks are generated */
|
/** Make miner stop after a block is found. In RPC, don't return until nGenProcLimit blocks are generated */
|
||||||
|
@ -74,7 +70,7 @@ public:
|
||||||
const std::vector<CDNSSeedData>& DNSSeeds() const { return vSeeds; }
|
const std::vector<CDNSSeedData>& DNSSeeds() const { return vSeeds; }
|
||||||
const std::vector<unsigned char>& Base58Prefix(Base58Type type) const { return base58Prefixes[type]; }
|
const std::vector<unsigned char>& Base58Prefix(Base58Type type) const { return base58Prefixes[type]; }
|
||||||
const std::vector<SeedSpec6>& FixedSeeds() const { return vFixedSeeds; }
|
const std::vector<SeedSpec6>& FixedSeeds() const { return vFixedSeeds; }
|
||||||
virtual const Checkpoints::CCheckpointData& Checkpoints() const = 0;
|
const Checkpoints::CCheckpointData& Checkpoints() const { return checkpointData; }
|
||||||
protected:
|
protected:
|
||||||
CChainParams() {}
|
CChainParams() {}
|
||||||
|
|
||||||
|
@ -96,11 +92,12 @@ protected:
|
||||||
bool fRequireStandard;
|
bool fRequireStandard;
|
||||||
bool fMineBlocksOnDemand;
|
bool fMineBlocksOnDemand;
|
||||||
bool fTestnetToBeDeprecatedFieldRPC;
|
bool fTestnetToBeDeprecatedFieldRPC;
|
||||||
|
Checkpoints::CCheckpointData checkpointData;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the currently selected parameters. This won't change after app startup
|
* Return the currently selected parameters. This won't change after app
|
||||||
* outside of the unit tests.
|
* startup, except for unit tests.
|
||||||
*/
|
*/
|
||||||
const CChainParams &Params();
|
const CChainParams &Params();
|
||||||
|
|
||||||
|
|
|
@ -34,8 +34,8 @@ protected:
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the currently selected parameters. This won't change after app startup
|
* Return the currently selected parameters. This won't change after app
|
||||||
* outside of the unit tests.
|
* startup, except for unit tests.
|
||||||
*/
|
*/
|
||||||
const CBaseChainParams& BaseParams();
|
const CBaseChainParams& BaseParams();
|
||||||
|
|
||||||
|
|
|
@ -15,22 +15,18 @@
|
||||||
namespace Checkpoints {
|
namespace Checkpoints {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* How many times we expect transactions after the last checkpoint to
|
* How many times slower we expect checking transactions after the last
|
||||||
* be slower. This number is a compromise, as it can't be accurate for
|
* checkpoint to be (from checking signatures, which is skipped up to the
|
||||||
* every system. When reindexing from a fast disk with a slow CPU, it
|
* 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
|
* 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.
|
* fast multicore CPU, it won't be much higher than 1.
|
||||||
*/
|
*/
|
||||||
static const double SIGCHECK_VERIFICATION_FACTOR = 5.0;
|
static const double SIGCHECK_VERIFICATION_FACTOR = 5.0;
|
||||||
|
|
||||||
bool fEnabled = true;
|
bool CheckBlock(const CCheckpointData& data, int nHeight, const uint256& hash)
|
||||||
|
|
||||||
bool CheckBlock(int nHeight, const uint256& hash)
|
|
||||||
{
|
{
|
||||||
if (!fEnabled)
|
const MapCheckpoints& checkpoints = data.mapCheckpoints;
|
||||||
return true;
|
|
||||||
|
|
||||||
const MapCheckpoints& checkpoints = *Params().Checkpoints().mapCheckpoints;
|
|
||||||
|
|
||||||
MapCheckpoints::const_iterator i = checkpoints.find(nHeight);
|
MapCheckpoints::const_iterator i = checkpoints.find(nHeight);
|
||||||
if (i == checkpoints.end()) return true;
|
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
|
//! 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)
|
if (pindex==NULL)
|
||||||
return 0.0;
|
return 0.0;
|
||||||
|
|
||||||
|
@ -50,8 +46,6 @@ namespace Checkpoints {
|
||||||
// Work is defined as: 1.0 per transaction before the last checkpoint, and
|
// Work is defined as: 1.0 per transaction before the last checkpoint, and
|
||||||
// fSigcheckVerificationFactor per transaction after.
|
// fSigcheckVerificationFactor per transaction after.
|
||||||
|
|
||||||
const CCheckpointData &data = Params().Checkpoints();
|
|
||||||
|
|
||||||
if (pindex->nChainTx <= data.nTransactionsLastCheckpoint) {
|
if (pindex->nChainTx <= data.nTransactionsLastCheckpoint) {
|
||||||
double nCheapBefore = pindex->nChainTx;
|
double nCheapBefore = pindex->nChainTx;
|
||||||
double nCheapAfter = data.nTransactionsLastCheckpoint - pindex->nChainTx;
|
double nCheapAfter = data.nTransactionsLastCheckpoint - pindex->nChainTx;
|
||||||
|
@ -69,22 +63,19 @@ namespace Checkpoints {
|
||||||
return fWorkBefore / (fWorkBefore + fWorkAfter);
|
return fWorkBefore / (fWorkBefore + fWorkAfter);
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetTotalBlocksEstimate()
|
int GetTotalBlocksEstimate(const CCheckpointData& data)
|
||||||
{
|
{
|
||||||
if (!fEnabled)
|
const MapCheckpoints& checkpoints = data.mapCheckpoints;
|
||||||
return 0;
|
|
||||||
|
|
||||||
const MapCheckpoints& checkpoints = *Params().Checkpoints().mapCheckpoints;
|
if (checkpoints.empty())
|
||||||
|
return 0;
|
||||||
|
|
||||||
return checkpoints.rbegin()->first;
|
return checkpoints.rbegin()->first;
|
||||||
}
|
}
|
||||||
|
|
||||||
CBlockIndex* GetLastCheckpoint()
|
CBlockIndex* GetLastCheckpoint(const CCheckpointData& data)
|
||||||
{
|
{
|
||||||
if (!fEnabled)
|
const MapCheckpoints& checkpoints = data.mapCheckpoints;
|
||||||
return NULL;
|
|
||||||
|
|
||||||
const MapCheckpoints& checkpoints = *Params().Checkpoints().mapCheckpoints;
|
|
||||||
|
|
||||||
BOOST_REVERSE_FOREACH(const MapCheckpoints::value_type& i, checkpoints)
|
BOOST_REVERSE_FOREACH(const MapCheckpoints::value_type& i, checkpoints)
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,24 +20,22 @@ namespace Checkpoints
|
||||||
typedef std::map<int, uint256> MapCheckpoints;
|
typedef std::map<int, uint256> MapCheckpoints;
|
||||||
|
|
||||||
struct CCheckpointData {
|
struct CCheckpointData {
|
||||||
const MapCheckpoints *mapCheckpoints;
|
MapCheckpoints mapCheckpoints;
|
||||||
int64_t nTimeLastCheckpoint;
|
int64_t nTimeLastCheckpoint;
|
||||||
int64_t nTransactionsLastCheckpoint;
|
int64_t nTransactionsLastCheckpoint;
|
||||||
double fTransactionsPerDay;
|
double fTransactionsPerDay;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Returns true if block passes checkpoint checks
|
//! 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
|
//! 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
|
//! Returns last CBlockIndex* in mapBlockIndex that is a checkpoint
|
||||||
CBlockIndex* GetLastCheckpoint();
|
CBlockIndex* GetLastCheckpoint(const CCheckpointData& data);
|
||||||
|
|
||||||
double GuessVerificationProgress(CBlockIndex* pindex, bool fSigchecks = true);
|
double GuessVerificationProgress(const CCheckpointData& data, CBlockIndex* pindex, bool fSigchecks = true);
|
||||||
|
|
||||||
extern bool fEnabled;
|
|
||||||
|
|
||||||
} //namespace Checkpoints
|
} //namespace Checkpoints
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ private:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Number of verifications that haven't completed yet.
|
* 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.
|
* worker's own batches.
|
||||||
*/
|
*/
|
||||||
unsigned int nTodo;
|
unsigned int nTodo;
|
||||||
|
@ -81,7 +81,7 @@ private:
|
||||||
fAllOk &= fOk;
|
fAllOk &= fOk;
|
||||||
nTodo -= nNow;
|
nTodo -= nNow;
|
||||||
if (nTodo == 0 && !fMaster)
|
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();
|
condMaster.notify_one();
|
||||||
} else {
|
} else {
|
||||||
// first iteration
|
// first iteration
|
||||||
|
@ -136,7 +136,7 @@ public:
|
||||||
Loop();
|
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()
|
bool Wait()
|
||||||
{
|
{
|
||||||
return Loop(true);
|
return Loop(true);
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "coins.h"
|
#include "coins.h"
|
||||||
|
|
||||||
|
#include "memusage.h"
|
||||||
#include "random.h"
|
#include "random.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
@ -57,13 +58,17 @@ bool CCoinsViewBacked::GetStats(CCoinsStats &stats) const { return base->GetStat
|
||||||
|
|
||||||
CCoinsKeyHasher::CCoinsKeyHasher() : salt(GetRandHash()) {}
|
CCoinsKeyHasher::CCoinsKeyHasher() : salt(GetRandHash()) {}
|
||||||
|
|
||||||
CCoinsViewCache::CCoinsViewCache(CCoinsView *baseIn) : CCoinsViewBacked(baseIn), hasModifier(false) { }
|
CCoinsViewCache::CCoinsViewCache(CCoinsView *baseIn) : CCoinsViewBacked(baseIn), hasModifier(false), cachedCoinsUsage(0) { }
|
||||||
|
|
||||||
CCoinsViewCache::~CCoinsViewCache()
|
CCoinsViewCache::~CCoinsViewCache()
|
||||||
{
|
{
|
||||||
assert(!hasModifier);
|
assert(!hasModifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t CCoinsViewCache::DynamicMemoryUsage() const {
|
||||||
|
return memusage::DynamicUsage(cacheCoins) + cachedCoinsUsage;
|
||||||
|
}
|
||||||
|
|
||||||
CCoinsMap::const_iterator CCoinsViewCache::FetchCoins(const uint256 &txid) const {
|
CCoinsMap::const_iterator CCoinsViewCache::FetchCoins(const uint256 &txid) const {
|
||||||
CCoinsMap::iterator it = cacheCoins.find(txid);
|
CCoinsMap::iterator it = cacheCoins.find(txid);
|
||||||
if (it != cacheCoins.end())
|
if (it != cacheCoins.end())
|
||||||
|
@ -78,6 +83,7 @@ CCoinsMap::const_iterator CCoinsViewCache::FetchCoins(const uint256 &txid) const
|
||||||
// version as fresh.
|
// version as fresh.
|
||||||
ret->second.flags = CCoinsCacheEntry::FRESH;
|
ret->second.flags = CCoinsCacheEntry::FRESH;
|
||||||
}
|
}
|
||||||
|
cachedCoinsUsage += memusage::DynamicUsage(ret->second.coins);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,6 +99,7 @@ bool CCoinsViewCache::GetCoins(const uint256 &txid, CCoins &coins) const {
|
||||||
CCoinsModifier CCoinsViewCache::ModifyCoins(const uint256 &txid) {
|
CCoinsModifier CCoinsViewCache::ModifyCoins(const uint256 &txid) {
|
||||||
assert(!hasModifier);
|
assert(!hasModifier);
|
||||||
std::pair<CCoinsMap::iterator, bool> ret = cacheCoins.insert(std::make_pair(txid, CCoinsCacheEntry()));
|
std::pair<CCoinsMap::iterator, bool> ret = cacheCoins.insert(std::make_pair(txid, CCoinsCacheEntry()));
|
||||||
|
size_t cachedCoinUsage = 0;
|
||||||
if (ret.second) {
|
if (ret.second) {
|
||||||
if (!base->GetCoins(txid, ret.first->second.coins)) {
|
if (!base->GetCoins(txid, ret.first->second.coins)) {
|
||||||
// The parent view does not have this entry; mark it as fresh.
|
// 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.
|
// The parent view only has a pruned entry for this; mark it as fresh.
|
||||||
ret.first->second.flags = CCoinsCacheEntry::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.
|
// Assume that whenever ModifyCoins is called, the entry will be modified.
|
||||||
ret.first->second.flags |= CCoinsCacheEntry::DIRTY;
|
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 {
|
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);
|
assert(it->second.flags & CCoinsCacheEntry::FRESH);
|
||||||
CCoinsCacheEntry& entry = cacheCoins[it->first];
|
CCoinsCacheEntry& entry = cacheCoins[it->first];
|
||||||
entry.coins.swap(it->second.coins);
|
entry.coins.swap(it->second.coins);
|
||||||
|
cachedCoinsUsage += memusage::DynamicUsage(entry.coins);
|
||||||
entry.flags = CCoinsCacheEntry::DIRTY | CCoinsCacheEntry::FRESH;
|
entry.flags = CCoinsCacheEntry::DIRTY | CCoinsCacheEntry::FRESH;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -157,10 +167,13 @@ bool CCoinsViewCache::BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlockIn
|
||||||
// The grandparent does not have an entry, and the child is
|
// The grandparent does not have an entry, and the child is
|
||||||
// modified and being pruned. This means we can just delete
|
// modified and being pruned. This means we can just delete
|
||||||
// it from the parent.
|
// it from the parent.
|
||||||
|
cachedCoinsUsage -= memusage::DynamicUsage(itUs->second.coins);
|
||||||
cacheCoins.erase(itUs);
|
cacheCoins.erase(itUs);
|
||||||
} else {
|
} else {
|
||||||
// A normal modification.
|
// A normal modification.
|
||||||
|
cachedCoinsUsage -= memusage::DynamicUsage(itUs->second.coins);
|
||||||
itUs->second.coins.swap(it->second.coins);
|
itUs->second.coins.swap(it->second.coins);
|
||||||
|
cachedCoinsUsage += memusage::DynamicUsage(itUs->second.coins);
|
||||||
itUs->second.flags |= CCoinsCacheEntry::DIRTY;
|
itUs->second.flags |= CCoinsCacheEntry::DIRTY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -175,6 +188,7 @@ bool CCoinsViewCache::BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlockIn
|
||||||
bool CCoinsViewCache::Flush() {
|
bool CCoinsViewCache::Flush() {
|
||||||
bool fOk = base->BatchWrite(cacheCoins, hashBlock);
|
bool fOk = base->BatchWrite(cacheCoins, hashBlock);
|
||||||
cacheCoins.clear();
|
cacheCoins.clear();
|
||||||
|
cachedCoinsUsage = 0;
|
||||||
return fOk;
|
return fOk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,7 +246,7 @@ double CCoinsViewCache::GetPriority(const CTransaction &tx, int nHeight) const
|
||||||
return tx.ComputePriority(dResult);
|
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);
|
assert(!cache.hasModifier);
|
||||||
cache.hasModifier = true;
|
cache.hasModifier = true;
|
||||||
}
|
}
|
||||||
|
@ -242,7 +256,11 @@ CCoinsModifier::~CCoinsModifier()
|
||||||
assert(cache.hasModifier);
|
assert(cache.hasModifier);
|
||||||
cache.hasModifier = false;
|
cache.hasModifier = false;
|
||||||
it->second.coins.Cleanup();
|
it->second.coins.Cleanup();
|
||||||
|
cache.cachedCoinsUsage -= cachedCoinUsage; // Subtract the old usage
|
||||||
if ((it->second.flags & CCoinsCacheEntry::FRESH) && it->second.coins.IsPruned()) {
|
if ((it->second.flags & CCoinsCacheEntry::FRESH) && it->second.coins.IsPruned()) {
|
||||||
cache.cacheCoins.erase(it);
|
cache.cacheCoins.erase(it);
|
||||||
|
} else {
|
||||||
|
// If the coin still exists after the modification, add the new usage
|
||||||
|
cache.cachedCoinsUsage += memusage::DynamicUsage(it->second.coins);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
20
src/coins.h
20
src/coins.h
|
@ -7,6 +7,7 @@
|
||||||
#define BITCOIN_COINS_H
|
#define BITCOIN_COINS_H
|
||||||
|
|
||||||
#include "compressor.h"
|
#include "compressor.h"
|
||||||
|
#include "memusage.h"
|
||||||
#include "serialize.h"
|
#include "serialize.h"
|
||||||
#include "uint256.h"
|
#include "uint256.h"
|
||||||
|
|
||||||
|
@ -252,6 +253,15 @@ public:
|
||||||
return false;
|
return false;
|
||||||
return true;
|
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
|
class CCoinsKeyHasher
|
||||||
|
@ -356,7 +366,8 @@ class CCoinsModifier
|
||||||
private:
|
private:
|
||||||
CCoinsViewCache& cache;
|
CCoinsViewCache& cache;
|
||||||
CCoinsMap::iterator it;
|
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:
|
public:
|
||||||
CCoins* operator->() { return &it->second.coins; }
|
CCoins* operator->() { return &it->second.coins; }
|
||||||
|
@ -372,6 +383,7 @@ protected:
|
||||||
/* Whether this cache has an active modifier. */
|
/* Whether this cache has an active modifier. */
|
||||||
bool hasModifier;
|
bool hasModifier;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Make mutable so that we can "fill the cache" even from Get-methods
|
* Make mutable so that we can "fill the cache" even from Get-methods
|
||||||
* declared as "const".
|
* declared as "const".
|
||||||
|
@ -379,6 +391,9 @@ protected:
|
||||||
mutable uint256 hashBlock;
|
mutable uint256 hashBlock;
|
||||||
mutable CCoinsMap cacheCoins;
|
mutable CCoinsMap cacheCoins;
|
||||||
|
|
||||||
|
/* Cached dynamic memory usage for the inner CCoins objects. */
|
||||||
|
mutable size_t cachedCoinsUsage;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CCoinsViewCache(CCoinsView *baseIn);
|
CCoinsViewCache(CCoinsView *baseIn);
|
||||||
~CCoinsViewCache();
|
~CCoinsViewCache();
|
||||||
|
@ -414,6 +429,9 @@ public:
|
||||||
//! Calculate the size of the cache (in number of transactions)
|
//! Calculate the size of the cache (in number of transactions)
|
||||||
unsigned int GetCacheSize() const;
|
unsigned int GetCacheSize() const;
|
||||||
|
|
||||||
|
//! Calculate the size of the cache (in bytes)
|
||||||
|
size_t DynamicMemoryUsage() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Amount of bitcoins coming in to a transaction
|
* Amount of bitcoins coming in to a transaction
|
||||||
* Note that lightweight clients may not know anything besides the hash of previous transactions,
|
* Note that lightweight clients may not know anything besides the hash of previous transactions,
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
#include "crypto/common.h"
|
#include "crypto/common.h"
|
||||||
#include "crypto/hmac_sha512.h"
|
#include "crypto/hmac_sha512.h"
|
||||||
|
#include "pubkey.h"
|
||||||
|
|
||||||
|
|
||||||
inline uint32_t ROTL32(uint32_t x, int8_t r)
|
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;
|
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];
|
unsigned char num[4];
|
||||||
num[0] = (nChild >> 24) & 0xFF;
|
num[0] = (nChild >> 24) & 0xFF;
|
||||||
num[1] = (nChild >> 16) & 0xFF;
|
num[1] = (nChild >> 16) & 0xFF;
|
||||||
num[2] = (nChild >> 8) & 0xFF;
|
num[2] = (nChild >> 8) & 0xFF;
|
||||||
num[3] = (nChild >> 0) & 0xFF;
|
num[3] = (nChild >> 0) & 0xFF;
|
||||||
CHMAC_SHA512(chainCode, 32).Write(&header, 1)
|
CHMAC_SHA512(chainCode.begin(), chainCode.size()).Write(&header, 1).Write(data, 32).Write(num, 4).Finalize(output);
|
||||||
.Write(data, 32)
|
|
||||||
.Write(num, 4)
|
|
||||||
.Finalize(output);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
typedef uint256 ChainCode;
|
||||||
|
|
||||||
/** A hasher class for Bitcoin's 256-bit hash (double SHA-256). */
|
/** A hasher class for Bitcoin's 256-bit hash (double SHA-256). */
|
||||||
class CHash256 {
|
class CHash256 {
|
||||||
private:
|
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);
|
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
|
#endif // BITCOIN_HASH_H
|
||||||
|
|
64
src/init.cpp
64
src/init.cpp
|
@ -19,6 +19,7 @@
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
#include "rpcserver.h"
|
#include "rpcserver.h"
|
||||||
#include "script/standard.h"
|
#include "script/standard.h"
|
||||||
|
#include "scheduler.h"
|
||||||
#include "txdb.h"
|
#include "txdb.h"
|
||||||
#include "ui_interface.h"
|
#include "ui_interface.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
@ -52,7 +53,7 @@ bool fFeeEstimatesInitialized = false;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
// Win32 LevelDB doesn't use filedescriptors, and the ones used for
|
// 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.
|
// anyway.
|
||||||
#define MIN_CORE_FILEDESCRIPTORS 0
|
#define MIN_CORE_FILEDESCRIPTORS 0
|
||||||
#else
|
#else
|
||||||
|
@ -196,6 +197,7 @@ void Shutdown()
|
||||||
delete pwalletMain;
|
delete pwalletMain;
|
||||||
pwalletMain = NULL;
|
pwalletMain = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
ECC_Stop();
|
||||||
LogPrintf("%s: done\n", __func__);
|
LogPrintf("%s: done\n", __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -277,12 +279,10 @@ std::string HelpMessage(HelpMessageMode mode)
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
strUsage += HelpMessageOpt("-pid=<file>", strprintf(_("Specify pid file (default: %s)"), "bitcoind.pid"));
|
strUsage += HelpMessageOpt("-pid=<file>", strprintf(_("Specify pid file (default: %s)"), "bitcoind.pid"));
|
||||||
#endif
|
#endif
|
||||||
strUsage += HelpMessageOpt("-prune=<n>", _("Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex.") + " " +
|
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.") + " " +
|
"Warning: Reverting this setting requires re-downloading the entire blockchain. "
|
||||||
_("(default: 0 = disable pruning blocks,") + " " +
|
"(default: 0 = disable pruning blocks, >%u = target size in MiB to use for block files)"), MIN_DISK_SPACE_FOR_BLOCK_FILES / 1024 / 1024));
|
||||||
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("-reindex", _("Rebuild block chain index from current blk000??.dat files") + " " + _("on startup"));
|
|
||||||
|
|
||||||
#if !defined(WIN32)
|
#if !defined(WIN32)
|
||||||
strUsage += HelpMessageOpt("-sysperms", _("Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)"));
|
strUsage += HelpMessageOpt("-sysperms", _("Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)"));
|
||||||
#endif
|
#endif
|
||||||
|
@ -335,8 +335,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("-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("-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("-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("-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 too low may abort large transactions (default: %s)"),
|
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)));
|
FormatMoney(maxTxFee)));
|
||||||
strUsage += HelpMessageOpt("-upgradewallet", _("Upgrade wallet to latest format") + " " + _("on startup"));
|
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"));
|
strUsage += HelpMessageOpt("-wallet=<file>", _("Specify wallet file (within data directory)") + " " + strprintf(_("(default: %s)"), "wallet.dat"));
|
||||||
|
@ -567,7 +567,7 @@ bool InitSanityCheck(void)
|
||||||
/** Initialize bitcoin.
|
/** Initialize bitcoin.
|
||||||
* @pre Parameters should be parsed and config file should be read.
|
* @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
|
// ********************************************************* Step 1: setup
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
|
@ -743,7 +743,7 @@ bool AppInit2(boost::thread_group& threadGroup)
|
||||||
// Checkmempool and checkblockindex default to true in regtest mode
|
// Checkmempool and checkblockindex default to true in regtest mode
|
||||||
mempool.setSanityCheck(GetBoolArg("-checkmempool", chainparams.DefaultConsistencyChecks()));
|
mempool.setSanityCheck(GetBoolArg("-checkmempool", chainparams.DefaultConsistencyChecks()));
|
||||||
fCheckBlockIndex = GetBoolArg("-checkblockindex", 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
|
// -par=0 means autodetect, but nScriptCheckThreads==0 means no concurrency
|
||||||
nScriptCheckThreads = GetArg("-par", DEFAULT_SCRIPTCHECK_THREADS);
|
nScriptCheckThreads = GetArg("-par", DEFAULT_SCRIPTCHECK_THREADS);
|
||||||
|
@ -836,18 +836,21 @@ bool AppInit2(boost::thread_group& threadGroup)
|
||||||
mapArgs["-maxtxfee"], ::minRelayTxFee.ToString()));
|
mapArgs["-maxtxfee"], ::minRelayTxFee.ToString()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
nTxConfirmTarget = GetArg("-txconfirmtarget", 1);
|
nTxConfirmTarget = GetArg("-txconfirmtarget", DEFAULT_TX_CONFIRM_TARGET);
|
||||||
bSpendZeroConfChange = GetArg("-spendzeroconfchange", true);
|
bSpendZeroConfChange = GetBoolArg("-spendzeroconfchange", true);
|
||||||
fSendFreeTransactions = GetArg("-sendfreetransactions", false);
|
fSendFreeTransactions = GetBoolArg("-sendfreetransactions", false);
|
||||||
|
|
||||||
std::string strWalletFile = GetArg("-wallet", "wallet.dat");
|
std::string strWalletFile = GetArg("-wallet", "wallet.dat");
|
||||||
#endif // ENABLE_WALLET
|
#endif // ENABLE_WALLET
|
||||||
|
|
||||||
fIsBareMultisigStd = GetArg("-permitbaremultisig", true) != 0;
|
fIsBareMultisigStd = GetBoolArg("-permitbaremultisig", true);
|
||||||
nMaxDatacarrierBytes = GetArg("-datacarriersize", nMaxDatacarrierBytes);
|
nMaxDatacarrierBytes = GetArg("-datacarriersize", nMaxDatacarrierBytes);
|
||||||
|
|
||||||
// ********************************************************* Step 4: application initialization: dir lock, daemonize, pidfile, debug log
|
// ********************************************************* Step 4: application initialization: dir lock, daemonize, pidfile, debug log
|
||||||
|
|
||||||
|
// Initialize elliptic curve code
|
||||||
|
ECC_Start();
|
||||||
|
|
||||||
// Sanity check
|
// Sanity check
|
||||||
if (!InitSanityCheck())
|
if (!InitSanityCheck())
|
||||||
return InitError(_("Initialization sanity check failed. Bitcoin Core is shutting down."));
|
return InitError(_("Initialization sanity check failed. Bitcoin Core is shutting down."));
|
||||||
|
@ -890,6 +893,10 @@ bool AppInit2(boost::thread_group& threadGroup)
|
||||||
threadGroup.create_thread(&ThreadScriptCheck);
|
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
|
/* Start the RPC server already. It will be started in "warmup" mode
|
||||||
* and not really process calls already (but it will signify connections
|
* and not really process calls already (but it will signify connections
|
||||||
* that the server is there and will be ready later). Warmup mode will
|
* that the server is there and will be ready later). Warmup mode will
|
||||||
|
@ -955,7 +962,7 @@ bool AppInit2(boost::thread_group& threadGroup)
|
||||||
proxyType addrProxy;
|
proxyType addrProxy;
|
||||||
bool fProxy = false;
|
bool fProxy = false;
|
||||||
if (mapArgs.count("-proxy")) {
|
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())
|
if (!addrProxy.IsValid())
|
||||||
return InitError(strprintf(_("Invalid -proxy address: '%s'"), mapArgs["-proxy"]));
|
return InitError(strprintf(_("Invalid -proxy address: '%s'"), mapArgs["-proxy"]));
|
||||||
|
|
||||||
|
@ -972,7 +979,7 @@ bool AppInit2(boost::thread_group& threadGroup)
|
||||||
if (!mapArgs.count("-onion"))
|
if (!mapArgs.count("-onion"))
|
||||||
addrOnion = addrProxy;
|
addrOnion = addrProxy;
|
||||||
else
|
else
|
||||||
addrOnion = proxyType(CService(mapArgs["-onion"], 9050), GetArg("-proxyrandomize", true));
|
addrOnion = proxyType(CService(mapArgs["-onion"], 9050), GetBoolArg("-proxyrandomize", true));
|
||||||
if (!addrOnion.IsValid())
|
if (!addrOnion.IsValid())
|
||||||
return InitError(strprintf(_("Invalid -onion address: '%s'"), mapArgs["-onion"]));
|
return InitError(strprintf(_("Invalid -onion address: '%s'"), mapArgs["-onion"]));
|
||||||
SetProxy(NET_TOR, addrOnion);
|
SetProxy(NET_TOR, addrOnion);
|
||||||
|
@ -1056,18 +1063,20 @@ bool AppInit2(boost::thread_group& threadGroup)
|
||||||
}
|
}
|
||||||
|
|
||||||
// cache size calculations
|
// cache size calculations
|
||||||
size_t nTotalCache = (GetArg("-dbcache", nDefaultDbCache) << 20);
|
int64_t nTotalCache = (GetArg("-dbcache", nDefaultDbCache) << 20);
|
||||||
if (nTotalCache < (nMinDbCache << 20))
|
nTotalCache = std::max(nTotalCache, nMinDbCache << 20); // total cache cannot be less than nMinDbCache
|
||||||
nTotalCache = (nMinDbCache << 20); // total cache cannot be less than nMinDbCache
|
nTotalCache = std::min(nTotalCache, nMaxDbCache << 20); // total cache cannot be greated than nMaxDbcache
|
||||||
else if (nTotalCache > (nMaxDbCache << 20))
|
int64_t nBlockTreeDBCache = nTotalCache / 8;
|
||||||
nTotalCache = (nMaxDbCache << 20); // total cache cannot be greater than nMaxDbCache
|
|
||||||
size_t nBlockTreeDBCache = nTotalCache / 8;
|
|
||||||
if (nBlockTreeDBCache > (1 << 21) && !GetBoolArg("-txindex", false))
|
if (nBlockTreeDBCache > (1 << 21) && !GetBoolArg("-txindex", false))
|
||||||
nBlockTreeDBCache = (1 << 21); // block tree db cache shouldn't be larger than 2 MiB
|
nBlockTreeDBCache = (1 << 21); // block tree db cache shouldn't be larger than 2 MiB
|
||||||
nTotalCache -= nBlockTreeDBCache;
|
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;
|
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;
|
bool fLoaded = false;
|
||||||
while (!fLoaded) {
|
while (!fLoaded) {
|
||||||
|
@ -1336,13 +1345,14 @@ bool AppInit2(boost::thread_group& threadGroup)
|
||||||
pwalletMain->SetBroadcastTransactions(GetBoolArg("-walletbroadcast", true));
|
pwalletMain->SetBroadcastTransactions(GetBoolArg("-walletbroadcast", true));
|
||||||
} // (!fDisableWallet)
|
} // (!fDisableWallet)
|
||||||
#else // ENABLE_WALLET
|
#else // ENABLE_WALLET
|
||||||
LogPrintf("No wallet compiled in!\n");
|
LogPrintf("No wallet support compiled in!\n");
|
||||||
#endif // !ENABLE_WALLET
|
#endif // !ENABLE_WALLET
|
||||||
// ********************************************************* Step 9: import blocks
|
// ********************************************************* Step 9: import blocks
|
||||||
|
|
||||||
if (mapArgs.count("-blocknotify"))
|
if (mapArgs.count("-blocknotify"))
|
||||||
uiInterface.NotifyBlockTip.connect(BlockNotifyCallback);
|
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
|
// scan for better chains in the block chain database, that are not yet connected in the active best chain
|
||||||
CValidationState state;
|
CValidationState state;
|
||||||
if (!ActivateBestChain(state))
|
if (!ActivateBestChain(state))
|
||||||
|
@ -1380,7 +1390,7 @@ bool AppInit2(boost::thread_group& threadGroup)
|
||||||
LogPrintf("mapAddressBook.size() = %u\n", pwalletMain ? pwalletMain->mapAddressBook.size() : 0);
|
LogPrintf("mapAddressBook.size() = %u\n", pwalletMain ? pwalletMain->mapAddressBook.size() : 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
StartNode(threadGroup);
|
StartNode(threadGroup, scheduler);
|
||||||
|
|
||||||
#ifdef ENABLE_WALLET
|
#ifdef ENABLE_WALLET
|
||||||
// Generate coins in the background
|
// Generate coins in the background
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
class CScheduler;
|
||||||
class CWallet;
|
class CWallet;
|
||||||
|
|
||||||
namespace boost
|
namespace boost
|
||||||
|
@ -20,7 +21,7 @@ extern CWallet* pwalletMain;
|
||||||
void StartShutdown();
|
void StartShutdown();
|
||||||
bool ShutdownRequested();
|
bool ShutdownRequested();
|
||||||
void Shutdown();
|
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 */
|
/** The help message mode determines what help message to show */
|
||||||
enum HelpMessageMode {
|
enum HelpMessageMode {
|
||||||
|
|
73
src/key.cpp
73
src/key.cpp
|
@ -14,21 +14,7 @@
|
||||||
#include <secp256k1.h>
|
#include <secp256k1.h>
|
||||||
#include "ecwrapper.h"
|
#include "ecwrapper.h"
|
||||||
|
|
||||||
//! anonymous namespace
|
static secp256k1_context_t* secp256k1_context = NULL;
|
||||||
namespace {
|
|
||||||
|
|
||||||
class CSecp256k1Init {
|
|
||||||
public:
|
|
||||||
CSecp256k1Init() {
|
|
||||||
secp256k1_start(SECP256K1_START_SIGN);
|
|
||||||
}
|
|
||||||
~CSecp256k1Init() {
|
|
||||||
secp256k1_stop();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
static CSecp256k1Init instance_of_csecp256k1;
|
|
||||||
|
|
||||||
} // anon namespace
|
|
||||||
|
|
||||||
bool CKey::Check(const unsigned char *vch) {
|
bool CKey::Check(const unsigned char *vch) {
|
||||||
return eccrypto::Check(vch);
|
return eccrypto::Check(vch);
|
||||||
|
@ -44,7 +30,7 @@ void CKey::MakeNewKey(bool fCompressedIn) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CKey::SetPrivKey(const CPrivKey &privkey, 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;
|
return false;
|
||||||
fCompressed = fCompressedIn;
|
fCompressed = fCompressedIn;
|
||||||
fValid = true;
|
fValid = true;
|
||||||
|
@ -57,7 +43,7 @@ CPrivKey CKey::GetPrivKey() const {
|
||||||
int privkeylen, ret;
|
int privkeylen, ret;
|
||||||
privkey.resize(279);
|
privkey.resize(279);
|
||||||
privkeylen = 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);
|
assert(ret);
|
||||||
privkey.resize(privkeylen);
|
privkey.resize(privkeylen);
|
||||||
return privkey;
|
return privkey;
|
||||||
|
@ -67,7 +53,7 @@ CPubKey CKey::GetPubKey() const {
|
||||||
assert(fValid);
|
assert(fValid);
|
||||||
CPubKey result;
|
CPubKey result;
|
||||||
int clen = 65;
|
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((int)result.size() == clen);
|
||||||
assert(ret);
|
assert(ret);
|
||||||
assert(result.IsValid());
|
assert(result.IsValid());
|
||||||
|
@ -81,7 +67,7 @@ bool CKey::Sign(const uint256 &hash, std::vector<unsigned char>& vchSig, uint32_
|
||||||
int nSigLen = 72;
|
int nSigLen = 72;
|
||||||
unsigned char extra_entropy[32] = {0};
|
unsigned char extra_entropy[32] = {0};
|
||||||
WriteLE32(extra_entropy, test_case);
|
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);
|
assert(ret);
|
||||||
vchSig.resize(nSigLen);
|
vchSig.resize(nSigLen);
|
||||||
return true;
|
return true;
|
||||||
|
@ -106,7 +92,7 @@ bool CKey::SignCompact(const uint256 &hash, std::vector<unsigned char>& vchSig)
|
||||||
return false;
|
return false;
|
||||||
vchSig.resize(65);
|
vchSig.resize(65);
|
||||||
int rec = -1;
|
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(ret);
|
||||||
assert(rec != -1);
|
assert(rec != -1);
|
||||||
vchSig[0] = 27 + rec + (fCompressed ? 4 : 0);
|
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) {
|
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;
|
return false;
|
||||||
fCompressed = vchPubKey.IsCompressed();
|
fCompressed = vchPubKey.IsCompressed();
|
||||||
fValid = true;
|
fValid = true;
|
||||||
|
@ -125,7 +111,7 @@ bool CKey::Load(CPrivKey &privkey, CPubKey &vchPubKey, bool fSkipCheck=false) {
|
||||||
return VerifyPubKey(vchPubKey);
|
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(IsValid());
|
||||||
assert(IsCompressed());
|
assert(IsCompressed());
|
||||||
unsigned char out[64];
|
unsigned char out[64];
|
||||||
|
@ -138,9 +124,9 @@ bool CKey::Derive(CKey& keyChild, unsigned char ccChild[32], unsigned int nChild
|
||||||
assert(begin() + 32 == end());
|
assert(begin() + 32 == end());
|
||||||
BIP32Hash(cc, nChild, 0, begin(), out);
|
BIP32Hash(cc, nChild, 0, begin(), out);
|
||||||
}
|
}
|
||||||
memcpy(ccChild, out+32, 32);
|
memcpy(ccChild.begin(), out+32, 32);
|
||||||
memcpy((unsigned char*)keyChild.begin(), begin(), 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);
|
UnlockObject(out);
|
||||||
keyChild.fCompressed = true;
|
keyChild.fCompressed = true;
|
||||||
keyChild.fValid = ret;
|
keyChild.fValid = ret;
|
||||||
|
@ -152,7 +138,7 @@ bool CExtKey::Derive(CExtKey &out, unsigned int nChild) const {
|
||||||
CKeyID id = key.GetPubKey().GetID();
|
CKeyID id = key.GetPubKey().GetID();
|
||||||
memcpy(&out.vchFingerprint[0], &id, 4);
|
memcpy(&out.vchFingerprint[0], &id, 4);
|
||||||
out.nChild = nChild;
|
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) {
|
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);
|
LockObject(out);
|
||||||
CHMAC_SHA512(hashkey, sizeof(hashkey)).Write(seed, nSeedLen).Finalize(out);
|
CHMAC_SHA512(hashkey, sizeof(hashkey)).Write(seed, nSeedLen).Finalize(out);
|
||||||
key.Set(&out[0], &out[32], true);
|
key.Set(&out[0], &out[32], true);
|
||||||
memcpy(vchChainCode, &out[32], 32);
|
memcpy(chaincode.begin(), &out[32], 32);
|
||||||
UnlockObject(out);
|
UnlockObject(out);
|
||||||
nDepth = 0;
|
nDepth = 0;
|
||||||
nChild = 0;
|
nChild = 0;
|
||||||
|
@ -174,7 +160,7 @@ CExtPubKey CExtKey::Neuter() const {
|
||||||
memcpy(&ret.vchFingerprint[0], &vchFingerprint[0], 4);
|
memcpy(&ret.vchFingerprint[0], &vchFingerprint[0], 4);
|
||||||
ret.nChild = nChild;
|
ret.nChild = nChild;
|
||||||
ret.pubkey = key.GetPubKey();
|
ret.pubkey = key.GetPubKey();
|
||||||
memcpy(&ret.vchChainCode[0], &vchChainCode[0], 32);
|
ret.chaincode = chaincode;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,7 +169,7 @@ void CExtKey::Encode(unsigned char code[74]) const {
|
||||||
memcpy(code+1, vchFingerprint, 4);
|
memcpy(code+1, vchFingerprint, 4);
|
||||||
code[5] = (nChild >> 24) & 0xFF; code[6] = (nChild >> 16) & 0xFF;
|
code[5] = (nChild >> 24) & 0xFF; code[6] = (nChild >> 16) & 0xFF;
|
||||||
code[7] = (nChild >> 8) & 0xFF; code[8] = (nChild >> 0) & 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;
|
code[41] = 0;
|
||||||
assert(key.size() == 32);
|
assert(key.size() == 32);
|
||||||
memcpy(code+42, key.begin(), 32);
|
memcpy(code+42, key.begin(), 32);
|
||||||
|
@ -193,7 +179,7 @@ void CExtKey::Decode(const unsigned char code[74]) {
|
||||||
nDepth = code[0];
|
nDepth = code[0];
|
||||||
memcpy(vchFingerprint, code+1, 4);
|
memcpy(vchFingerprint, code+1, 4);
|
||||||
nChild = (code[5] << 24) | (code[6] << 16) | (code[7] << 8) | code[8];
|
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);
|
key.Set(code+42, code+74, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,3 +192,32 @@ bool ECC_InitSanityCheck() {
|
||||||
CPubKey pubkey = key.GetPubKey();
|
CPubKey pubkey = key.GetPubKey();
|
||||||
return key.VerifyPubKey(pubkey);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
18
src/key.h
18
src/key.h
|
@ -6,6 +6,7 @@
|
||||||
#ifndef BITCOIN_KEY_H
|
#ifndef BITCOIN_KEY_H
|
||||||
#define BITCOIN_KEY_H
|
#define BITCOIN_KEY_H
|
||||||
|
|
||||||
|
#include "pubkey.h"
|
||||||
#include "serialize.h"
|
#include "serialize.h"
|
||||||
#include "support/allocators/secure.h"
|
#include "support/allocators/secure.h"
|
||||||
#include "uint256.h"
|
#include "uint256.h"
|
||||||
|
@ -13,9 +14,6 @@
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
class CPubKey;
|
|
||||||
|
|
||||||
struct CExtPubKey;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* secp256k1:
|
* secp256k1:
|
||||||
|
@ -138,7 +136,7 @@ public:
|
||||||
bool SignCompact(const uint256& hash, std::vector<unsigned char>& vchSig) const;
|
bool SignCompact(const uint256& hash, std::vector<unsigned char>& vchSig) const;
|
||||||
|
|
||||||
//! Derive BIP32 child key.
|
//! 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.
|
* Verify thoroughly whether a private key and a public key match.
|
||||||
|
@ -157,13 +155,13 @@ struct CExtKey {
|
||||||
unsigned char nDepth;
|
unsigned char nDepth;
|
||||||
unsigned char vchFingerprint[4];
|
unsigned char vchFingerprint[4];
|
||||||
unsigned int nChild;
|
unsigned int nChild;
|
||||||
unsigned char vchChainCode[32];
|
ChainCode chaincode;
|
||||||
CKey key;
|
CKey key;
|
||||||
|
|
||||||
friend bool operator==(const CExtKey& a, const CExtKey& b)
|
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 &&
|
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;
|
void Encode(unsigned char code[74]) const;
|
||||||
|
@ -173,7 +171,13 @@ struct CExtKey {
|
||||||
void SetMaster(const unsigned char* seed, unsigned int nSeedLen);
|
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);
|
bool ECC_InitSanityCheck(void);
|
||||||
|
|
||||||
#endif // BITCOIN_KEY_H
|
#endif // BITCOIN_KEY_H
|
||||||
|
|
213
src/main.cpp
213
src/main.cpp
|
@ -58,7 +58,8 @@ bool fHavePruned = false;
|
||||||
bool fPruneMode = false;
|
bool fPruneMode = false;
|
||||||
bool fIsBareMultisigStd = true;
|
bool fIsBareMultisigStd = true;
|
||||||
bool fCheckBlockIndex = false;
|
bool fCheckBlockIndex = false;
|
||||||
unsigned int nCoinCacheSize = 5000;
|
bool fCheckpointsEnabled = true;
|
||||||
|
size_t nCoinCacheUsage = 5000 * 300;
|
||||||
uint64_t nPruneTarget = 0;
|
uint64_t nPruneTarget = 0;
|
||||||
|
|
||||||
/** Fees smaller than this (in satoshi) are considered zero fee (for relaying and mining) */
|
/** Fees smaller than this (in satoshi) are considered zero fee (for relaying and mining) */
|
||||||
|
@ -76,10 +77,9 @@ void EraseOrphansFor(NodeId peer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if there are nRequired or more blocks of minVersion or above
|
* Returns true if there are nRequired or more blocks of minVersion or above
|
||||||
* in the last Params().ToCheckBlockUpgradeMajority() blocks, starting at pstart
|
* in the last Consensus::Params::nMajorityWindow blocks, starting at pstart and going backwards.
|
||||||
* 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();
|
static void CheckBlockIndex();
|
||||||
|
|
||||||
/** Constant stuff for coinbase transactions we create: */
|
/** Constant stuff for coinbase transactions we create: */
|
||||||
|
@ -144,8 +144,9 @@ namespace {
|
||||||
uint32_t nBlockSequenceId = 1;
|
uint32_t nBlockSequenceId = 1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sources of received blocks, to be able to send them reject messages or ban
|
* Sources of received blocks, saved to be able to send them reject
|
||||||
* them, if processing happens afterwards. Protected by cs_main.
|
* messages or ban them when processing happens afterwards. Protected by
|
||||||
|
* cs_main.
|
||||||
*/
|
*/
|
||||||
map<uint256, NodeId> mapBlockSource;
|
map<uint256, NodeId> mapBlockSource;
|
||||||
|
|
||||||
|
@ -391,7 +392,7 @@ void FindNextBlocksToDownload(NodeId nodeid, unsigned int count, std::vector<CBl
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the peer reorganized, our previous pindexLastCommonBlock may not be an ancestor
|
// 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);
|
state->pindexLastCommonBlock = LastCommonAncestor(state->pindexLastCommonBlock, state->pindexBestKnownBlock);
|
||||||
if (state->pindexLastCommonBlock == state->pindexBestKnownBlock)
|
if (state->pindexLastCommonBlock == state->pindexBestKnownBlock)
|
||||||
return;
|
return;
|
||||||
|
@ -945,7 +946,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
|
||||||
|
|
||||||
// do all inputs exist?
|
// do all inputs exist?
|
||||||
// Note that this does not check for the presence of actual outputs (see the next check for that),
|
// 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) {
|
BOOST_FOREACH(const CTxIn txin, tx.vin) {
|
||||||
if (!view.HaveCoins(txin.prevout.hash)) {
|
if (!view.HaveCoins(txin.prevout.hash)) {
|
||||||
if (pfMissingInputs)
|
if (pfMissingInputs)
|
||||||
|
@ -989,7 +990,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
|
||||||
CAmount nFees = nValueIn-nValueOut;
|
CAmount nFees = nValueIn-nValueOut;
|
||||||
double dPriority = view.GetPriority(tx, chainActive.Height());
|
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();
|
unsigned int nSize = entry.GetTxSize();
|
||||||
|
|
||||||
// Don't accept it if it can't get into a block
|
// Don't accept it if it can't get into a block
|
||||||
|
@ -1055,7 +1056,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store transaction in memory
|
// Store transaction in memory
|
||||||
pool.addUnchecked(hash, entry);
|
pool.addUnchecked(hash, entry, !IsInitialBlockDownload());
|
||||||
}
|
}
|
||||||
|
|
||||||
SyncWithWallets(tx, NULL);
|
SyncWithWallets(tx, NULL);
|
||||||
|
@ -1191,31 +1192,32 @@ bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
CAmount GetBlockValue(int nHeight, const CAmount& nFees)
|
CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
|
||||||
{
|
{
|
||||||
CAmount nSubsidy = 50 * COIN;
|
int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;
|
||||||
int halvings = nHeight / Params().SubsidyHalvingInterval();
|
|
||||||
|
|
||||||
// Force block reward to zero when right shift is undefined.
|
// Force block reward to zero when right shift is undefined.
|
||||||
if (halvings >= 64)
|
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.
|
// Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years.
|
||||||
nSubsidy >>= halvings;
|
nSubsidy >>= halvings;
|
||||||
|
return nSubsidy;
|
||||||
return nSubsidy + nFees;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsInitialBlockDownload()
|
bool IsInitialBlockDownload()
|
||||||
{
|
{
|
||||||
|
const CChainParams& chainParams = Params();
|
||||||
LOCK(cs_main);
|
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;
|
return true;
|
||||||
static bool lockIBDState = false;
|
static bool lockIBDState = false;
|
||||||
if (lockIBDState)
|
if (lockIBDState)
|
||||||
return false;
|
return false;
|
||||||
bool state = (chainActive.Height() < pindexBestHeader->nHeight - 24 * 6 ||
|
bool state = (chainActive.Height() < pindexBestHeader->nHeight - 24 * 6);// ||
|
||||||
pindexBestHeader->GetBlockTime() < GetTime() - 24 * 60 * 60);
|
//pindexBestHeader->GetBlockTime() < GetTime() - 24 * 60 * 60);
|
||||||
if (!state)
|
if (!state)
|
||||||
lockIBDState = true;
|
lockIBDState = true;
|
||||||
return state;
|
return state;
|
||||||
|
@ -1281,8 +1283,8 @@ void CheckForkWarningConditionsOnNewFork(CBlockIndex* pindexNewForkTip)
|
||||||
pfork = pfork->pprev;
|
pfork = pfork->pprev;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We define a condition which we should warn the user about as a fork of at least 7 blocks
|
// We define a condition where 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
|
// 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
|
// We use 7 blocks rather arbitrarily as it represents just under 10% of sustained network
|
||||||
// hash rate operating on the fork.
|
// 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)
|
// or a chain that is entirely longer than ours and invalid (note that this should be detected by both)
|
||||||
|
@ -1757,7 +1759,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
|
||||||
//return true;
|
//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,
|
// Do not allow blocks that contain transactions which 'overwrite' older transactions,
|
||||||
// unless those are already completely spent.
|
// unless those are already completely spent.
|
||||||
|
@ -1767,9 +1769,9 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
|
||||||
// See BIP30 and http://r6.ca/blog/20120206T005236Z.html for more information.
|
// See BIP30 and http://r6.ca/blog/20120206T005236Z.html for more information.
|
||||||
// This logic is not necessary for memory pool transactions, as AcceptToMemoryPool
|
// This logic is not necessary for memory pool transactions, as AcceptToMemoryPool
|
||||||
// already refuses previously-known transaction ids entirely.
|
// 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
|
// 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.
|
// initial block download.
|
||||||
bool fEnforceBIP30 = (!pindex->phashBlock) || // Enforce on CreateNewBlock invocations which don't have a hash.
|
bool fEnforceBIP30 = (!pindex->phashBlock) || // Enforce on CreateNewBlock invocations which don't have a hash.
|
||||||
!((pindex->nHeight==91842 && pindex->GetBlockHash() == uint256S("0x00000000000a4d0a398161ffc163c503763b1f4360639393e0e4c8e300e0caec")) ||
|
!((pindex->nHeight==91842 && pindex->GetBlockHash() == uint256S("0x00000000000a4d0a398161ffc163c503763b1f4360639393e0e4c8e300e0caec")) ||
|
||||||
|
@ -1790,7 +1792,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
|
||||||
unsigned int flags = fStrictPayToScriptHash ? SCRIPT_VERIFY_P2SH : SCRIPT_VERIFY_NONE;
|
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:
|
// 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;
|
flags |= SCRIPT_VERIFY_DERSIG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1943,10 +1945,11 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
|
||||||
int64_t nTime1 = GetTimeMicros(); nTimeConnect += nTime1 - nTimeStart;
|
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);
|
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,
|
return state.DoS(100,
|
||||||
error("ConnectBlock(): coinbase pays too much (actual=%d vs limit=%d)",
|
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");
|
REJECT_INVALID, "bad-cb-amount");
|
||||||
|
|
||||||
if (!control.Wait())
|
if (!control.Wait())
|
||||||
|
@ -2014,11 +2017,14 @@ enum FlushStateMode {
|
||||||
bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode) {
|
bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode) {
|
||||||
LOCK2(cs_main, cs_LastBlockFile);
|
LOCK2(cs_main, cs_LastBlockFile);
|
||||||
static int64_t nLastWrite = 0;
|
static int64_t nLastWrite = 0;
|
||||||
|
static int64_t nLastFlush = 0;
|
||||||
|
static int64_t nLastSetChain = 0;
|
||||||
std::set<int> setFilesToPrune;
|
std::set<int> setFilesToPrune;
|
||||||
bool fFlushForPrune = false;
|
bool fFlushForPrune = false;
|
||||||
try {
|
try {
|
||||||
if (fPruneMode && fCheckForPruning) {
|
if (fPruneMode && fCheckForPruning) {
|
||||||
FindFilesToPrune(setFilesToPrune);
|
FindFilesToPrune(setFilesToPrune);
|
||||||
|
fCheckForPruning = false;
|
||||||
if (!setFilesToPrune.empty()) {
|
if (!setFilesToPrune.empty()) {
|
||||||
fFlushForPrune = true;
|
fFlushForPrune = true;
|
||||||
if (!fHavePruned) {
|
if (!fHavePruned) {
|
||||||
|
@ -2027,16 +2033,32 @@ bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((mode == FLUSH_STATE_ALWAYS) ||
|
int64_t nNow = GetTimeMicros();
|
||||||
((mode == FLUSH_STATE_PERIODIC || mode == FLUSH_STATE_IF_NEEDED) && pcoinsTip->GetCacheSize() > nCoinCacheSize) ||
|
// Avoid writing/flushing immediately after startup.
|
||||||
(mode == FLUSH_STATE_PERIODIC && GetTimeMicros() > nLastWrite + DATABASE_WRITE_INTERVAL * 1000000) ||
|
if (nLastWrite == 0) {
|
||||||
fFlushForPrune) {
|
nLastWrite = nNow;
|
||||||
// Typical CCoins structures on disk are around 100 bytes in size.
|
}
|
||||||
// Pushing a new one to the database can cause it to be written
|
if (nLastFlush == 0) {
|
||||||
// twice (once in the log, and once in the tables). This is already
|
nLastFlush = nNow;
|
||||||
// an overestimation, as most will delete an existing entry or
|
}
|
||||||
// overwrite one. Still, use a conservative safety factor of 2.
|
if (nLastSetChain == 0) {
|
||||||
if (!CheckDiskSpace(100 * 2 * 2 * pcoinsTip->GetCacheSize()))
|
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");
|
return state.Error("out of disk space");
|
||||||
// First make sure all block and undo data is flushed to disk.
|
// First make sure all block and undo data is flushed to disk.
|
||||||
FlushBlockFile();
|
FlushBlockFile();
|
||||||
|
@ -2058,23 +2080,31 @@ bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode) {
|
||||||
return state.Abort("Files to write to block index database");
|
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).
|
// Flush the chainstate (which may refer to block index entries).
|
||||||
if (!pnccTrie->WriteToDisk())
|
if (!pnccTrie->WriteToDisk())
|
||||||
return state.Abort("Failed to write to ncc trie database");
|
return state.Abort("Failed to write to ncc trie database");
|
||||||
if (!pcoinsTip->Flush())
|
if (!pcoinsTip->Flush())
|
||||||
return state.Abort("Failed to write to coin database");
|
return state.Abort("Failed to write to coin database");
|
||||||
|
nLastFlush = nNow;
|
||||||
// Finally remove any pruned files
|
|
||||||
if (fFlushForPrune) {
|
|
||||||
UnlinkPrunedFiles(setFilesToPrune);
|
|
||||||
fCheckForPruning = false;
|
|
||||||
}
|
}
|
||||||
|
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).
|
// Update best block in wallet (so we can detect restored wallets).
|
||||||
if (mode != FLUSH_STATE_IF_NEEDED) {
|
|
||||||
GetMainSignals().SetBestChain(chainActive.GetLocator());
|
GetMainSignals().SetBestChain(chainActive.GetLocator());
|
||||||
}
|
nLastSetChain = nNow;
|
||||||
nLastWrite = GetTimeMicros();
|
|
||||||
}
|
}
|
||||||
} catch (const std::runtime_error& e) {
|
} catch (const std::runtime_error& e) {
|
||||||
return state.Abort(std::string("System error while flushing: ") + e.what());
|
return state.Abort(std::string("System error while flushing: ") + e.what());
|
||||||
|
@ -2095,16 +2125,17 @@ void PruneAndFlush() {
|
||||||
|
|
||||||
/** Update chainActive and related internal data structures. */
|
/** Update chainActive and related internal data structures. */
|
||||||
void static UpdateTip(CBlockIndex *pindexNew) {
|
void static UpdateTip(CBlockIndex *pindexNew) {
|
||||||
|
const CChainParams& chainParams = Params();
|
||||||
chainActive.SetTip(pindexNew);
|
chainActive.SetTip(pindexNew);
|
||||||
|
|
||||||
// New best block
|
// New best block
|
||||||
nTimeBestReceived = GetTime();
|
nTimeBestReceived = GetTime();
|
||||||
mempool.AddTransactionsUpdated(1);
|
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,
|
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()),
|
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();
|
cvBlockChange.notify_all();
|
||||||
|
|
||||||
|
@ -2125,7 +2156,7 @@ void static UpdateTip(CBlockIndex *pindexNew) {
|
||||||
if (nUpgraded > 100/2)
|
if (nUpgraded > 100/2)
|
||||||
{
|
{
|
||||||
// strMiscWarning is read by GetWarnings(), called by Qt and the JSON-RPC code to warn the user:
|
// 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);
|
CAlert::Notify(strMiscWarning, true);
|
||||||
fWarned = true;
|
fWarned = true;
|
||||||
}
|
}
|
||||||
|
@ -2227,7 +2258,7 @@ bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew, CBlock *
|
||||||
LogPrint("bench", " - Writing chainstate: %.2fms [%.2fs]\n", (nTime5 - nTime4) * 0.001, nTimeChainState * 0.000001);
|
LogPrint("bench", " - Writing chainstate: %.2fms [%.2fs]\n", (nTime5 - nTime4) * 0.001, nTimeChainState * 0.000001);
|
||||||
// Remove conflicting transactions from the mempool.
|
// Remove conflicting transactions from the mempool.
|
||||||
list<CTransaction> txConflicted;
|
list<CTransaction> txConflicted;
|
||||||
mempool.removeForBlock(pblock->vtx, pindexNew->nHeight, txConflicted);
|
mempool.removeForBlock(pblock->vtx, pindexNew->nHeight, txConflicted, !IsInitialBlockDownload());
|
||||||
mempool.check(pcoinsTip);
|
mempool.check(pcoinsTip);
|
||||||
// Update chainActive & related variables.
|
// Update chainActive & related variables.
|
||||||
UpdateTip(pindexNew);
|
UpdateTip(pindexNew);
|
||||||
|
@ -2393,6 +2424,7 @@ static bool ActivateBestChainStep(CValidationState &state, CBlockIndex *pindexMo
|
||||||
bool ActivateBestChain(CValidationState &state, CBlock *pblock) {
|
bool ActivateBestChain(CValidationState &state, CBlock *pblock) {
|
||||||
CBlockIndex *pindexNewTip = NULL;
|
CBlockIndex *pindexNewTip = NULL;
|
||||||
CBlockIndex *pindexMostWork = NULL;
|
CBlockIndex *pindexMostWork = NULL;
|
||||||
|
const CChainParams& chainParams = Params();
|
||||||
do {
|
do {
|
||||||
boost::this_thread::interruption_point();
|
boost::this_thread::interruption_point();
|
||||||
|
|
||||||
|
@ -2417,7 +2449,9 @@ bool ActivateBestChain(CValidationState &state, CBlock *pblock) {
|
||||||
if (!fInitialDownload) {
|
if (!fInitialDownload) {
|
||||||
uint256 hashNewTip = pindexNewTip->GetBlockHash();
|
uint256 hashNewTip = pindexNewTip->GetBlockHash();
|
||||||
// Relay inventory, but don't relay old inventory during initial block download.
|
// 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
|
// 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.
|
// in a stalled download if the block file is pruned before the request.
|
||||||
if (nLocalServices & NODE_NETWORK) {
|
if (nLocalServices & NODE_NETWORK) {
|
||||||
|
@ -2461,7 +2495,7 @@ bool InvalidateBlock(CValidationState& state, CBlockIndex *pindex) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// The resulting new best tip may not be in setBlockIndexCandidates anymore, so
|
// The resulting new best tip may not be in setBlockIndexCandidates anymore, so
|
||||||
// add them again.
|
// add it again.
|
||||||
BlockMap::iterator it = mapBlockIndex.begin();
|
BlockMap::iterator it = mapBlockIndex.begin();
|
||||||
while (it != mapBlockIndex.end()) {
|
while (it != mapBlockIndex.end()) {
|
||||||
if (it->second->IsValid(BLOCK_VALID_TRANSACTIONS) && it->second->nChainTx && !setBlockIndexCandidates.value_comp()(it->second, chainActive.Tip())) {
|
if (it->second->IsValid(BLOCK_VALID_TRANSACTIONS) && it->second->nChainTx && !setBlockIndexCandidates.value_comp()(it->second, chainActive.Tip())) {
|
||||||
|
@ -2747,7 +2781,8 @@ bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW, bo
|
||||||
|
|
||||||
bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& state, CBlockIndex * const pindexPrev)
|
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();
|
uint256 hash = block.GetHash();
|
||||||
if (hash == consensusParams.hashGenesisBlock)
|
if (hash == consensusParams.hashGenesisBlock)
|
||||||
return true;
|
return true;
|
||||||
|
@ -2757,7 +2792,7 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta
|
||||||
int nHeight = pindexPrev->nHeight+1;
|
int nHeight = pindexPrev->nHeight+1;
|
||||||
|
|
||||||
// Check proof of work
|
// 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__),
|
return state.DoS(100, error("%s: incorrect proof of work", __func__),
|
||||||
REJECT_INVALID, "bad-diffbits");
|
REJECT_INVALID, "bad-diffbits");
|
||||||
|
|
||||||
|
@ -2766,29 +2801,28 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta
|
||||||
return state.Invalid(error("%s: block's timestamp is too early", __func__),
|
return state.Invalid(error("%s: block's timestamp is too early", __func__),
|
||||||
REJECT_INVALID, "time-too-old");
|
REJECT_INVALID, "time-too-old");
|
||||||
|
|
||||||
|
if(fCheckpointsEnabled)
|
||||||
|
{
|
||||||
// Check that the block chain matches the known block chain up to a checkpoint
|
// Check that the block chain matches the known block chain up to a checkpoint
|
||||||
if (!Checkpoints::CheckBlock(nHeight, hash))
|
if (!Checkpoints::CheckBlock(chainParams.Checkpoints(), nHeight, hash))
|
||||||
return state.DoS(100, error("%s: rejected by checkpoint lock-in at %d", __func__, nHeight),
|
return state.DoS(100, error("%s: rejected by checkpoint lock-in at %d", __func__, nHeight),
|
||||||
REJECT_CHECKPOINT, "checkpoint mismatch");
|
REJECT_CHECKPOINT, "checkpoint mismatch");
|
||||||
|
|
||||||
// Don't accept any forks from the main chain prior to last checkpoint
|
// Don't accept any forks from the main chain prior to last checkpoint
|
||||||
CBlockIndex* pcheckpoint = Checkpoints::GetLastCheckpoint();
|
CBlockIndex* pcheckpoint = Checkpoints::GetLastCheckpoint(chainParams.Checkpoints());
|
||||||
if (pcheckpoint && nHeight < pcheckpoint->nHeight)
|
if (pcheckpoint && nHeight < pcheckpoint->nHeight)
|
||||||
return state.DoS(100, error("%s: forked chain older than last checkpoint (height %d)", __func__, 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:
|
// 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__),
|
return state.Invalid(error("%s: rejected nVersion=1 block", __func__),
|
||||||
REJECT_OBSOLETE, "bad-version");
|
REJECT_OBSOLETE, "bad-version");
|
||||||
}
|
|
||||||
|
|
||||||
// Reject block.nVersion=2 blocks when 95% (75% on testnet) of the network has upgraded:
|
// 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__),
|
return state.Invalid(error("%s : rejected nVersion=2 block", __func__),
|
||||||
REJECT_OBSOLETE, "bad-version");
|
REJECT_OBSOLETE, "bad-version");
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -2796,6 +2830,7 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta
|
||||||
bool ContextualCheckBlock(const CBlock& block, CValidationState& state, CBlockIndex * const pindexPrev)
|
bool ContextualCheckBlock(const CBlock& block, CValidationState& state, CBlockIndex * const pindexPrev)
|
||||||
{
|
{
|
||||||
const int nHeight = pindexPrev == NULL ? 0 : pindexPrev->nHeight + 1;
|
const int nHeight = pindexPrev == NULL ? 0 : pindexPrev->nHeight + 1;
|
||||||
|
const Consensus::Params& consensusParams = Params().GetConsensus();
|
||||||
|
|
||||||
// Check that all transactions are finalized
|
// Check that all transactions are finalized
|
||||||
BOOST_FOREACH(const CTransaction& tx, block.vtx)
|
BOOST_FOREACH(const CTransaction& tx, block.vtx)
|
||||||
|
@ -2805,7 +2840,7 @@ bool ContextualCheckBlock(const CBlock& block, CValidationState& state, CBlockIn
|
||||||
|
|
||||||
// Enforce block.nVersion=2 rule that the coinbase starts with serialized block height
|
// 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 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;
|
CScript expect = CScript() << nHeight;
|
||||||
if (block.vtx[0].vin[0].scriptSig.size() < expect.size() ||
|
if (block.vtx[0].vin[0].scriptSig.size() < expect.size() ||
|
||||||
|
@ -2912,11 +2947,10 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CBlockIndex** ppindex,
|
||||||
return true;
|
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;
|
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)
|
if (pstart->nVersion >= minVersion)
|
||||||
++nFound;
|
++nFound;
|
||||||
|
@ -3066,7 +3100,7 @@ void FindFilesToPrune(std::set<int>& setFilesToPrune)
|
||||||
return;
|
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();
|
uint64_t nCurrentUsage = CalculateCurrentUsage();
|
||||||
// We don't check to prune until after we've allocated new space for files
|
// 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
|
// So we should leave a buffer under our target to account for another allocation
|
||||||
|
@ -3086,7 +3120,7 @@ void FindFilesToPrune(std::set<int>& setFilesToPrune)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// don't prune files that could have a block within MIN_BLOCKS_TO_KEEP of the main chain's tip
|
// 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;
|
break;
|
||||||
|
|
||||||
PruneOneBlockFile(fileNumber);
|
PruneOneBlockFile(fileNumber);
|
||||||
|
@ -3097,10 +3131,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,
|
nPruneTarget/1024/1024, nCurrentUsage/1024/1024,
|
||||||
((int64_t)nPruneTarget - (int64_t)nCurrentUsage)/1024/1024,
|
((int64_t)nPruneTarget - (int64_t)nCurrentUsage)/1024/1024,
|
||||||
nLastBlockWeMustKeep, count);
|
nLastBlockWeCanPrune, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CheckDiskSpace(uint64_t nAdditionalBytes)
|
bool CheckDiskSpace(uint64_t nAdditionalBytes)
|
||||||
|
@ -3172,6 +3206,7 @@ CBlockIndex * InsertBlockIndex(uint256 hash)
|
||||||
|
|
||||||
bool static LoadBlockIndexDB()
|
bool static LoadBlockIndexDB()
|
||||||
{
|
{
|
||||||
|
const CChainParams& chainparams = Params();
|
||||||
if (!pblocktree->LoadBlockIndexGuts())
|
if (!pblocktree->LoadBlockIndexGuts())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -3274,7 +3309,7 @@ bool static LoadBlockIndexDB()
|
||||||
LogPrintf("%s: hashBestChain=%s height=%d date=%s progress=%f\n", __func__,
|
LogPrintf("%s: hashBestChain=%s height=%d date=%s progress=%f\n", __func__,
|
||||||
chainActive.Tip()->GetBlockHash().ToString(), chainActive.Height(),
|
chainActive.Tip()->GetBlockHash().ToString(), chainActive.Height(),
|
||||||
DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.Tip()->GetBlockTime()),
|
DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.Tip()->GetBlockTime()),
|
||||||
Checkpoints::GuessVerificationProgress(chainActive.Tip()));
|
Checkpoints::GuessVerificationProgress(chainparams.Checkpoints(), chainActive.Tip()));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -3331,7 +3366,7 @@ bool CVerifyDB::VerifyDB(CCoinsView *coinsview, int nCheckLevel, int nCheckDepth
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// check level 3: check for inconsistencies during memory-only disconnect of tip blocks
|
// 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;
|
bool fClean = true;
|
||||||
if (!DisconnectBlock(block, state, pindex, coins, trieCache, &fClean))
|
if (!DisconnectBlock(block, state, pindex, coins, trieCache, &fClean))
|
||||||
return error("VerifyDB(): *** irrecoverable inconsistency in block data at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
|
return error("VerifyDB(): *** irrecoverable inconsistency in block data at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
|
||||||
|
@ -3881,7 +3916,7 @@ void static ProcessGetData(CNode* pfrom)
|
||||||
pfrom->PushMessage("merkleblock", merkleBlock);
|
pfrom->PushMessage("merkleblock", merkleBlock);
|
||||||
// CMerkleBlock just contains hashes, so also push any transactions in the block the client did not see
|
// 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
|
// 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.
|
// they must either disconnect and retry or request the full block.
|
||||||
// Thus, the protocol spec specified allows for us to provide duplicate txn here,
|
// 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
|
// however we MUST always provide at least what the remote peer needs
|
||||||
|
@ -3894,7 +3929,7 @@ void static ProcessGetData(CNode* pfrom)
|
||||||
// no response
|
// 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)
|
if (inv.hash == pfrom->hashContinue)
|
||||||
{
|
{
|
||||||
// Bypass PushInventory, this must send even if redundant,
|
// Bypass PushInventory, this must send even if redundant,
|
||||||
|
@ -4143,7 +4178,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
||||||
{
|
{
|
||||||
LOCK(cs_vNodes);
|
LOCK(cs_vNodes);
|
||||||
// Use deterministic randomness to send to the same nodes for 24 hours
|
// 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;
|
static uint256 hashSalt;
|
||||||
if (hashSalt.IsNull())
|
if (hashSalt.IsNull())
|
||||||
hashSalt = GetRandHash();
|
hashSalt = GetRandHash();
|
||||||
|
@ -4208,7 +4243,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
||||||
if (inv.type == MSG_BLOCK) {
|
if (inv.type == MSG_BLOCK) {
|
||||||
UpdateBlockAvailability(pfrom->GetId(), inv.hash);
|
UpdateBlockAvailability(pfrom->GetId(), inv.hash);
|
||||||
if (!fAlreadyHave && !fImporting && !fReindex && !mapBlocksInFlight.count(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),
|
// case where a new block is announced that succeeds the current tip (no reorganization),
|
||||||
// there are no such headers.
|
// there are no such headers.
|
||||||
// Secondly, and only when we are close to being synced, we request the announced block directly,
|
// Secondly, and only when we are close to being synced, we request the announced block directly,
|
||||||
|
@ -4290,8 +4325,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
||||||
pfrom->PushInventory(CInv(MSG_BLOCK, pindex->GetBlockHash()));
|
pfrom->PushInventory(CInv(MSG_BLOCK, pindex->GetBlockHash()));
|
||||||
if (--nLimit <= 0)
|
if (--nLimit <= 0)
|
||||||
{
|
{
|
||||||
// When this block is requested, we'll send an inv that'll make them
|
// When this block is requested, we'll send an inv that'll
|
||||||
// getblocks the next batch of inventory.
|
// trigger the peer to getblocks the next batch of inventory.
|
||||||
LogPrint("net", " getblocks stopping at limit %d %s\n", pindex->nHeight, pindex->GetBlockHash().ToString());
|
LogPrint("net", " getblocks stopping at limit %d %s\n", pindex->nHeight, pindex->GetBlockHash().ToString());
|
||||||
pfrom->hashContinue = pindex->GetBlockHash();
|
pfrom->hashContinue = pindex->GetBlockHash();
|
||||||
break;
|
break;
|
||||||
|
@ -4529,8 +4564,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
||||||
// This asymmetric behavior for inbound and outbound connections was introduced
|
// This asymmetric behavior for inbound and outbound connections was introduced
|
||||||
// to prevent a fingerprinting attack: an attacker can send specific fake addresses
|
// to prevent a fingerprinting attack: an attacker can send specific fake addresses
|
||||||
// to users' AddrMan and later request them by sending getaddr messages.
|
// to users' AddrMan and later request them by sending getaddr messages.
|
||||||
// Making users (which are behind NAT and can only make outgoing connections) ignore
|
// Making nodes which are behind NAT and can only make outgoing connections ignore
|
||||||
// getaddr message mitigates the attack.
|
// the getaddr message mitigates the attack.
|
||||||
else if ((strCommand == "getaddr") && (pfrom->fInbound))
|
else if ((strCommand == "getaddr") && (pfrom->fInbound))
|
||||||
{
|
{
|
||||||
pfrom->vAddrToSend.clear();
|
pfrom->vAddrToSend.clear();
|
||||||
|
@ -4615,7 +4650,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
||||||
// Nonce mismatches are normal when pings are overlapping
|
// Nonce mismatches are normal when pings are overlapping
|
||||||
sProblem = "Nonce mismatch";
|
sProblem = "Nonce mismatch";
|
||||||
if (nonce == 0) {
|
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;
|
bPingFinished = true;
|
||||||
sProblem = "Nonce zero";
|
sProblem = "Nonce zero";
|
||||||
}
|
}
|
||||||
|
@ -4624,7 +4659,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
||||||
sProblem = "Unsolicited pong without ping";
|
sProblem = "Unsolicited pong without ping";
|
||||||
}
|
}
|
||||||
} else {
|
} 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;
|
bPingFinished = true;
|
||||||
sProblem = "Short payload";
|
sProblem = "Short payload";
|
||||||
}
|
}
|
||||||
|
@ -4883,7 +4918,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle)
|
||||||
{
|
{
|
||||||
const Consensus::Params& consensusParams = Params().GetConsensus();
|
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)
|
if (pto->nVersion == 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -4927,9 +4962,9 @@ bool SendMessages(CNode* pto, bool fSendTrickle)
|
||||||
LOCK(cs_vNodes);
|
LOCK(cs_vNodes);
|
||||||
BOOST_FOREACH(CNode* pnode, vNodes)
|
BOOST_FOREACH(CNode* pnode, vNodes)
|
||||||
{
|
{
|
||||||
// Periodically clear setAddrKnown to allow refresh broadcasts
|
// Periodically clear addrKnown to allow refresh broadcasts
|
||||||
if (nLastRebroadcast)
|
if (nLastRebroadcast)
|
||||||
pnode->setAddrKnown.clear();
|
pnode->addrKnown.clear();
|
||||||
|
|
||||||
// Rebroadcast our address
|
// Rebroadcast our address
|
||||||
AdvertizeLocal(pnode);
|
AdvertizeLocal(pnode);
|
||||||
|
@ -4947,9 +4982,9 @@ bool SendMessages(CNode* pto, bool fSendTrickle)
|
||||||
vAddr.reserve(pto->vAddrToSend.size());
|
vAddr.reserve(pto->vAddrToSend.size());
|
||||||
BOOST_FOREACH(const CAddress& addr, pto->vAddrToSend)
|
BOOST_FOREACH(const CAddress& addr, pto->vAddrToSend)
|
||||||
{
|
{
|
||||||
// returns true if wasn't already contained in the set
|
if (!pto->addrKnown.contains(addr.GetKey()))
|
||||||
if (pto->setAddrKnown.insert(addr).second)
|
|
||||||
{
|
{
|
||||||
|
pto->addrKnown.insert(addr.GetKey());
|
||||||
vAddr.push_back(addr);
|
vAddr.push_back(addr);
|
||||||
// receiver rejects addr messages larger than 1000
|
// receiver rejects addr messages larger than 1000
|
||||||
if (vAddr.size() >= 1000)
|
if (vAddr.size() >= 1000)
|
||||||
|
@ -5067,7 +5102,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
|
// 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
|
// (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
|
// 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.
|
// 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)) {
|
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);
|
LogPrintf("Timeout downloading block %s from peer=%d, disconnecting\n", state.vBlocksInFlight.front().hash.ToString(), pto->id);
|
||||||
|
|
13
src/main.h
13
src/main.h
|
@ -76,15 +76,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. */
|
/** Timeout in seconds during which a peer must stall block download progress before being disconnected. */
|
||||||
static const unsigned int BLOCK_STALLING_TIMEOUT = 2;
|
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
|
/** 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;
|
static const unsigned int MAX_HEADERS_RESULTS = 2000;
|
||||||
/** Size of the "block download window": how far ahead of our current height do we fetch?
|
/** 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
|
* 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
|
* 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. */
|
* harder). We'll probably want to make this a per-peer adaptive value at some point. */
|
||||||
static const unsigned int BLOCK_DOWNLOAD_WINDOW = 1024;
|
static const unsigned int BLOCK_DOWNLOAD_WINDOW = 1024;
|
||||||
/** Time to wait (in seconds) between writing blockchain state to disk. */
|
/** Time to wait (in seconds) between writing blocks/block index to disk. */
|
||||||
static const unsigned int DATABASE_WRITE_INTERVAL = 3600;
|
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. */
|
/** Maximum length of reject messages. */
|
||||||
static const unsigned int MAX_REJECT_MESSAGE_LENGTH = 111;
|
static const unsigned int MAX_REJECT_MESSAGE_LENGTH = 111;
|
||||||
|
|
||||||
|
@ -119,7 +121,8 @@ extern int nScriptCheckThreads;
|
||||||
extern bool fTxIndex;
|
extern bool fTxIndex;
|
||||||
extern bool fIsBareMultisigStd;
|
extern bool fIsBareMultisigStd;
|
||||||
extern bool fCheckBlockIndex;
|
extern bool fCheckBlockIndex;
|
||||||
extern unsigned int nCoinCacheSize;
|
extern bool fCheckpointsEnabled;
|
||||||
|
extern size_t nCoinCacheUsage;
|
||||||
extern CFeeRate minRelayTxFee;
|
extern CFeeRate minRelayTxFee;
|
||||||
|
|
||||||
/** Best header we've seen so far (used for getheaders queries' starting points). */
|
/** Best header we've seen so far (used for getheaders queries' starting points). */
|
||||||
|
@ -200,7 +203,7 @@ std::string GetWarnings(std::string strFor);
|
||||||
bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock, bool fAllowSlow = false);
|
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 */
|
/** Find the best known block, and make it the tip of the block chain */
|
||||||
bool ActivateBestChain(CValidationState &state, CBlock *pblock = NULL);
|
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.
|
* Prune block and undo files (blk???.dat and undo???.dat) so that the disk space used is less than a user-defined target.
|
||||||
|
|
111
src/memusage.h
Normal file
111
src/memusage.h
Normal file
|
@ -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
|
|
@ -119,8 +119,8 @@ uint256 CPartialMerkleTree::TraverseAndExtract(int height, unsigned int pos, uns
|
||||||
if (pos*2+1 < CalcTreeWidth(height-1)) {
|
if (pos*2+1 < CalcTreeWidth(height-1)) {
|
||||||
right = TraverseAndExtract(height-1, pos*2+1, nBitsUsed, nHashUsed, vMatch);
|
right = TraverseAndExtract(height-1, pos*2+1, nBitsUsed, nHashUsed, vMatch);
|
||||||
if (right == left) {
|
if (right == left) {
|
||||||
// If the left and right branch should never be identical as the transaction
|
// The left and right branches should never be identical, as the transaction
|
||||||
// hashes covered by them must be unique.
|
// hashes covered by them must each be unique.
|
||||||
fBad = true;
|
fBad = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -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(const std::vector<uint256> &vTxid, const std::vector<bool> &vMatch);
|
||||||
|
|
||||||
CPartialMerkleTree();
|
CPartialMerkleTree();
|
||||||
|
|
|
@ -93,6 +93,7 @@ void UpdateTime(CBlockHeader* pblock, const Consensus::Params& consensusParams,
|
||||||
|
|
||||||
CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn)
|
CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn)
|
||||||
{
|
{
|
||||||
|
const CChainParams& chainparams = Params();
|
||||||
// Create new block
|
// Create new block
|
||||||
auto_ptr<CBlockTemplate> pblocktemplate(new CBlockTemplate());
|
auto_ptr<CBlockTemplate> pblocktemplate(new CBlockTemplate());
|
||||||
if(!pblocktemplate.get())
|
if(!pblocktemplate.get())
|
||||||
|
@ -382,7 +383,7 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn)
|
||||||
LogPrintf("CreateNewBlock(): total size %u\n", nBlockSize);
|
LogPrintf("CreateNewBlock(): total size %u\n", nBlockSize);
|
||||||
|
|
||||||
// Compute final coinbase transaction.
|
// 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;
|
txNew.vin[0].scriptSig = CScript() << nHeight << OP_0;
|
||||||
pblock->vtx[0] = txNew;
|
pblock->vtx[0] = txNew;
|
||||||
pblocktemplate->vTxFees[0] = -nFees;
|
pblocktemplate->vTxFees[0] = -nFees;
|
||||||
|
@ -518,8 +519,16 @@ void static BitcoinMiner(CWallet *pwallet)
|
||||||
if (chainparams.MiningRequiresPeers()) {
|
if (chainparams.MiningRequiresPeers()) {
|
||||||
// Busy-wait for the network to come online so we don't waste time mining
|
// 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.
|
// 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);
|
MilliSleep(1000);
|
||||||
|
} while (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -598,6 +607,11 @@ void static BitcoinMiner(CWallet *pwallet)
|
||||||
LogPrintf("BitcoinMiner terminated\n");
|
LogPrintf("BitcoinMiner terminated\n");
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
catch (const std::runtime_error &e)
|
||||||
|
{
|
||||||
|
LogPrintf("BitcoinMiner runtime error: %s\n", e.what());
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GenerateBitcoins(bool fGenerate, CWallet* pwallet, int nThreads)
|
void GenerateBitcoins(bool fGenerate, CWallet* pwallet, int nThreads)
|
||||||
|
|
36
src/mruset.h
36
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
|
// Distributed under the MIT software license, see the accompanying
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
#ifndef BITCOIN_MRUSET_H
|
#ifndef BITCOIN_MRUSET_H
|
||||||
#define BITCOIN_MRUSET_H
|
#define BITCOIN_MRUSET_H
|
||||||
|
|
||||||
#include <deque>
|
|
||||||
#include <set>
|
#include <set>
|
||||||
|
#include <vector>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
/** STL-like set container that only keeps the most recent N elements. */
|
/** STL-like set container that only keeps the most recent N elements. */
|
||||||
|
@ -22,11 +22,13 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::set<T> set;
|
std::set<T> set;
|
||||||
std::deque<T> queue;
|
std::vector<iterator> order;
|
||||||
size_type nMaxSize;
|
size_type first_used;
|
||||||
|
size_type first_unused;
|
||||||
|
const size_type nMaxSize;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
mruset(size_type nMaxSizeIn = 0) { nMaxSize = nMaxSizeIn; }
|
mruset(size_type nMaxSizeIn = 1) : nMaxSize(nMaxSizeIn) { clear(); }
|
||||||
iterator begin() const { return set.begin(); }
|
iterator begin() const { return set.begin(); }
|
||||||
iterator end() const { return set.end(); }
|
iterator end() const { return set.end(); }
|
||||||
size_type size() const { return set.size(); }
|
size_type size() const { return set.size(); }
|
||||||
|
@ -36,7 +38,9 @@ public:
|
||||||
void clear()
|
void clear()
|
||||||
{
|
{
|
||||||
set.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 mruset<T>& b) { return a.set == b.set; }
|
||||||
bool inline friend operator==(const mruset<T>& a, const std::set<T>& b) { return a.set == b; }
|
bool inline friend operator==(const mruset<T>& a, const std::set<T>& b) { return a.set == b; }
|
||||||
|
@ -45,25 +49,17 @@ public:
|
||||||
{
|
{
|
||||||
std::pair<iterator, bool> ret = set.insert(x);
|
std::pair<iterator, bool> ret = set.insert(x);
|
||||||
if (ret.second) {
|
if (ret.second) {
|
||||||
if (nMaxSize && queue.size() == nMaxSize) {
|
if (set.size() == nMaxSize + 1) {
|
||||||
set.erase(queue.front());
|
set.erase(order[first_used]);
|
||||||
queue.pop_front();
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
size_type max_size() const { return nMaxSize; }
|
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
|
#endif // BITCOIN_MRUSET_H
|
||||||
|
|
11
src/net.cpp
11
src/net.cpp
|
@ -13,6 +13,7 @@
|
||||||
#include "chainparams.h"
|
#include "chainparams.h"
|
||||||
#include "clientversion.h"
|
#include "clientversion.h"
|
||||||
#include "primitives/transaction.h"
|
#include "primitives/transaction.h"
|
||||||
|
#include "scheduler.h"
|
||||||
#include "ui_interface.h"
|
#include "ui_interface.h"
|
||||||
#include "crypto/common.h"
|
#include "crypto/common.h"
|
||||||
|
|
||||||
|
@ -1590,7 +1591,7 @@ void static Discover(boost::thread_group& threadGroup)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void StartNode(boost::thread_group& threadGroup)
|
void StartNode(boost::thread_group& threadGroup, CScheduler& scheduler)
|
||||||
{
|
{
|
||||||
uiInterface.InitMessage(_("Loading addresses..."));
|
uiInterface.InitMessage(_("Loading addresses..."));
|
||||||
// Load addresses for peers.dat
|
// Load addresses for peers.dat
|
||||||
|
@ -1640,7 +1641,7 @@ void StartNode(boost::thread_group& threadGroup)
|
||||||
threadGroup.create_thread(boost::bind(&TraceThread<void (*)()>, "msghand", &ThreadMessageHandler));
|
threadGroup.create_thread(boost::bind(&TraceThread<void (*)()>, "msghand", &ThreadMessageHandler));
|
||||||
|
|
||||||
// Dump network addresses
|
// Dump network addresses
|
||||||
threadGroup.create_thread(boost::bind(&LoopForever<void (*)()>, "dumpaddr", &DumpAddresses, DUMP_ADDRESSES_INTERVAL * 1000));
|
scheduler.scheduleEvery(&DumpAddresses, DUMP_ADDRESSES_INTERVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool StopNode()
|
bool StopNode()
|
||||||
|
@ -1905,7 +1906,10 @@ bool CAddrDB::Read(CAddrMan& addr)
|
||||||
unsigned int ReceiveFloodSize() { return 1000*GetArg("-maxreceivebuffer", 5*1000); }
|
unsigned int ReceiveFloodSize() { return 1000*GetArg("-maxreceivebuffer", 5*1000); }
|
||||||
unsigned int SendBufferSize() { return 1000*GetArg("-maxsendbuffer", 1*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;
|
nServices = 0;
|
||||||
hSocket = hSocketIn;
|
hSocket = hSocketIn;
|
||||||
|
@ -1934,7 +1938,6 @@ CNode::CNode(SOCKET hSocketIn, CAddress addrIn, std::string addrNameIn, bool fIn
|
||||||
nStartingHeight = -1;
|
nStartingHeight = -1;
|
||||||
fGetAddr = false;
|
fGetAddr = false;
|
||||||
fRelayTxes = false;
|
fRelayTxes = false;
|
||||||
setInventoryKnown.max_size(SendBufferSize() / 1000);
|
|
||||||
pfilter = new CBloomFilter();
|
pfilter = new CBloomFilter();
|
||||||
nPingNonceSent = 0;
|
nPingNonceSent = 0;
|
||||||
nPingUsecStart = 0;
|
nPingUsecStart = 0;
|
||||||
|
|
13
src/net.h
13
src/net.h
|
@ -32,6 +32,7 @@
|
||||||
|
|
||||||
class CAddrMan;
|
class CAddrMan;
|
||||||
class CBlockIndex;
|
class CBlockIndex;
|
||||||
|
class CScheduler;
|
||||||
class CNode;
|
class CNode;
|
||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
|
@ -72,7 +73,7 @@ bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOu
|
||||||
void MapPort(bool fUseUPnP);
|
void MapPort(bool fUseUPnP);
|
||||||
unsigned short GetListenPort();
|
unsigned short GetListenPort();
|
||||||
bool BindListenPort(const CService &bindAddr, std::string& strError, bool fWhitelisted = false);
|
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();
|
bool StopNode();
|
||||||
void SocketSendData(CNode *pnode);
|
void SocketSendData(CNode *pnode);
|
||||||
|
|
||||||
|
@ -271,8 +272,8 @@ public:
|
||||||
bool fDisconnect;
|
bool fDisconnect;
|
||||||
// We use fRelayTxes for two purposes -
|
// We use fRelayTxes for two purposes -
|
||||||
// a) it allows us to not relay tx invs before receiving the peer's version message
|
// 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
|
// b) the peer may tell us in its version message that we should not relay tx invs
|
||||||
// until they have initialized their bloom filter.
|
// until it has initialized its bloom filter.
|
||||||
bool fRelayTxes;
|
bool fRelayTxes;
|
||||||
CSemaphoreGrant grantOutbound;
|
CSemaphoreGrant grantOutbound;
|
||||||
CCriticalSection cs_filter;
|
CCriticalSection cs_filter;
|
||||||
|
@ -300,7 +301,7 @@ public:
|
||||||
|
|
||||||
// flood relay
|
// flood relay
|
||||||
std::vector<CAddress> vAddrToSend;
|
std::vector<CAddress> vAddrToSend;
|
||||||
mruset<CAddress> setAddrKnown;
|
CRollingBloomFilter addrKnown;
|
||||||
bool fGetAddr;
|
bool fGetAddr;
|
||||||
std::set<uint256> setKnown;
|
std::set<uint256> setKnown;
|
||||||
|
|
||||||
|
@ -380,7 +381,7 @@ public:
|
||||||
|
|
||||||
void AddAddressKnown(const CAddress& addr)
|
void AddAddressKnown(const CAddress& addr)
|
||||||
{
|
{
|
||||||
setAddrKnown.insert(addr);
|
addrKnown.insert(addr.GetKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
void PushAddress(const CAddress& addr)
|
void PushAddress(const CAddress& addr)
|
||||||
|
@ -388,7 +389,7 @@ public:
|
||||||
// Known checking here is only to save space from duplicates.
|
// Known checking here is only to save space from duplicates.
|
||||||
// SendMessages will filter it again for knowns that were added
|
// SendMessages will filter it again for knowns that were added
|
||||||
// after addresses were pushed.
|
// after addresses were pushed.
|
||||||
if (addr.IsValid() && !setAddrKnown.count(addr)) {
|
if (addr.IsValid() && !addrKnown.contains(addr.GetKey())) {
|
||||||
if (vAddrToSend.size() >= MAX_ADDR_TO_SEND) {
|
if (vAddrToSend.size() >= MAX_ADDR_TO_SEND) {
|
||||||
vAddrToSend[insecure_rand() % vAddrToSend.size()] = addr;
|
vAddrToSend[insecure_rand() % vAddrToSend.size()] = addr;
|
||||||
} else {
|
} else {
|
||||||
|
|
529
src/policy/fees.cpp
Normal file
529
src/policy/fees.cpp
Normal file
|
@ -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;
|
||||||
|
}
|
276
src/policy/fees.h
Normal file
276
src/policy/fees.h
Normal file
|
@ -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 */
|
|
@ -54,13 +54,13 @@ bool CPubKey::Decompress() {
|
||||||
return true;
|
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(IsValid());
|
||||||
assert((nChild >> 31) == 0);
|
assert((nChild >> 31) == 0);
|
||||||
assert(begin() + 33 == end());
|
assert(begin() + 33 == end());
|
||||||
unsigned char out[64];
|
unsigned char out[64];
|
||||||
BIP32Hash(cc, nChild, *begin(), begin()+1, out);
|
BIP32Hash(cc, nChild, *begin(), begin()+1, out);
|
||||||
memcpy(ccChild, out+32, 32);
|
memcpy(ccChild.begin(), out+32, 32);
|
||||||
CECKey key;
|
CECKey key;
|
||||||
bool ret = key.SetPubKey(begin(), size());
|
bool ret = key.SetPubKey(begin(), size());
|
||||||
ret &= key.TweakPublic(out);
|
ret &= key.TweakPublic(out);
|
||||||
|
@ -75,7 +75,7 @@ void CExtPubKey::Encode(unsigned char code[74]) const {
|
||||||
memcpy(code+1, vchFingerprint, 4);
|
memcpy(code+1, vchFingerprint, 4);
|
||||||
code[5] = (nChild >> 24) & 0xFF; code[6] = (nChild >> 16) & 0xFF;
|
code[5] = (nChild >> 24) & 0xFF; code[6] = (nChild >> 16) & 0xFF;
|
||||||
code[7] = (nChild >> 8) & 0xFF; code[8] = (nChild >> 0) & 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);
|
assert(pubkey.size() == 33);
|
||||||
memcpy(code+41, pubkey.begin(), 33);
|
memcpy(code+41, pubkey.begin(), 33);
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,7 @@ void CExtPubKey::Decode(const unsigned char code[74]) {
|
||||||
nDepth = code[0];
|
nDepth = code[0];
|
||||||
memcpy(vchFingerprint, code+1, 4);
|
memcpy(vchFingerprint, code+1, 4);
|
||||||
nChild = (code[5] << 24) | (code[6] << 16) | (code[7] << 8) | code[8];
|
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);
|
pubkey.Set(code+41, code+74);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,5 +93,5 @@ bool CExtPubKey::Derive(CExtPubKey &out, unsigned int nChild) const {
|
||||||
CKeyID id = pubkey.GetID();
|
CKeyID id = pubkey.GetID();
|
||||||
memcpy(&out.vchFingerprint[0], &id, 4);
|
memcpy(&out.vchFingerprint[0], &id, 4);
|
||||||
out.nChild = nChild;
|
out.nChild = nChild;
|
||||||
return pubkey.Derive(out.pubkey, out.vchChainCode, nChild, vchChainCode);
|
return pubkey.Derive(out.pubkey, out.chaincode, nChild, chaincode);
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,8 @@ public:
|
||||||
CKeyID(const uint160& in) : uint160(in) {}
|
CKeyID(const uint160& in) : uint160(in) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef uint256 ChainCode;
|
||||||
|
|
||||||
/** An encapsulated public key. */
|
/** An encapsulated public key. */
|
||||||
class CPubKey
|
class CPubKey
|
||||||
{
|
{
|
||||||
|
@ -182,20 +184,20 @@ public:
|
||||||
bool Decompress();
|
bool Decompress();
|
||||||
|
|
||||||
//! Derive BIP32 child pubkey.
|
//! 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 {
|
struct CExtPubKey {
|
||||||
unsigned char nDepth;
|
unsigned char nDepth;
|
||||||
unsigned char vchFingerprint[4];
|
unsigned char vchFingerprint[4];
|
||||||
unsigned int nChild;
|
unsigned int nChild;
|
||||||
unsigned char vchChainCode[32];
|
ChainCode chaincode;
|
||||||
CPubKey pubkey;
|
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 &&
|
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;
|
void Encode(unsigned char code[74]) const;
|
||||||
|
|
|
@ -62,7 +62,7 @@ AskPassphraseDialog::AskPassphraseDialog(Mode mode, QWidget *parent) :
|
||||||
break;
|
break;
|
||||||
case ChangePass: // Ask old passphrase + new passphrase x2
|
case ChangePass: // Ask old passphrase + new passphrase x2
|
||||||
setWindowTitle(tr("Change passphrase"));
|
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;
|
break;
|
||||||
}
|
}
|
||||||
textChanged();
|
textChanged();
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "rpcserver.h"
|
#include "rpcserver.h"
|
||||||
|
#include "scheduler.h"
|
||||||
#include "ui_interface.h"
|
#include "ui_interface.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
|
@ -178,6 +179,7 @@ signals:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
boost::thread_group threadGroup;
|
boost::thread_group threadGroup;
|
||||||
|
CScheduler scheduler;
|
||||||
|
|
||||||
/// Pass fatal exception message to UI thread
|
/// Pass fatal exception message to UI thread
|
||||||
void handleRunawayException(const std::exception *e);
|
void handleRunawayException(const std::exception *e);
|
||||||
|
@ -258,7 +260,7 @@ void BitcoinCore::initialize()
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
qDebug() << __func__ << ": Running AppInit2 in thread";
|
qDebug() << __func__ << ": Running AppInit2 in thread";
|
||||||
int rv = AppInit2(threadGroup);
|
int rv = AppInit2(threadGroup, scheduler);
|
||||||
if(rv)
|
if(rv)
|
||||||
{
|
{
|
||||||
/* Start a dummy RPC thread if no RPC thread is active yet
|
/* Start a dummy RPC thread if no RPC thread is active yet
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
<file alias="about">res/icons/about.png</file>
|
<file alias="about">res/icons/about.png</file>
|
||||||
<file alias="about_qt">res/icons/about_qt.png</file>
|
<file alias="about_qt">res/icons/about_qt.png</file>
|
||||||
<file alias="verify">res/icons/verify.png</file>
|
<file alias="verify">res/icons/verify.png</file>
|
||||||
|
<file alias="warning">res/icons/warning.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="/movies">
|
<qresource prefix="/movies">
|
||||||
<file alias="spinner-000">res/movies/spinner-000.png</file>
|
<file alias="spinner-000">res/movies/spinner-000.png</file>
|
||||||
|
|
|
@ -684,7 +684,7 @@ void BitcoinGUI::setNumBlocks(int count, const QDateTime& blockDate)
|
||||||
QDateTime currentDate = QDateTime::currentDateTime();
|
QDateTime currentDate = QDateTime::currentDateTime();
|
||||||
qint64 secs = blockDate.secsTo(currentDate);
|
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
|
// Set icon state: spinning if catching up, tick otherwise
|
||||||
if(secs < 90*60)
|
if(secs < 90*60)
|
||||||
|
|
|
@ -93,8 +93,8 @@ QT_TRANSLATE_NOOP("bitcoin-core", ""
|
||||||
"Maximum size of data in data carrier transactions we relay and mine "
|
"Maximum size of data in data carrier transactions we relay and mine "
|
||||||
"(default: %u)"),
|
"(default: %u)"),
|
||||||
QT_TRANSLATE_NOOP("bitcoin-core", ""
|
QT_TRANSLATE_NOOP("bitcoin-core", ""
|
||||||
"Maximum total fees to use in a single wallet transaction, setting too low "
|
"Maximum total fees to use in a single wallet transaction; setting this too "
|
||||||
"may abort large transactions (default: %s)"),
|
"low may abort large transactions (default: %s)"),
|
||||||
QT_TRANSLATE_NOOP("bitcoin-core", ""
|
QT_TRANSLATE_NOOP("bitcoin-core", ""
|
||||||
"Number of seconds to keep misbehaving peers from reconnecting (default: %u)"),
|
"Number of seconds to keep misbehaving peers from reconnecting (default: %u)"),
|
||||||
QT_TRANSLATE_NOOP("bitcoin-core", ""
|
QT_TRANSLATE_NOOP("bitcoin-core", ""
|
||||||
|
@ -109,7 +109,10 @@ QT_TRANSLATE_NOOP("bitcoin-core", ""
|
||||||
"isolation (default: %u)"),
|
"isolation (default: %u)"),
|
||||||
QT_TRANSLATE_NOOP("bitcoin-core", ""
|
QT_TRANSLATE_NOOP("bitcoin-core", ""
|
||||||
"Reduce storage requirements by pruning (deleting) old blocks. This mode "
|
"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", ""
|
QT_TRANSLATE_NOOP("bitcoin-core", ""
|
||||||
"Require high priority for relaying free or low-fee transactions (default: %u)"),
|
"Require high priority for relaying free or low-fee transactions (default: %u)"),
|
||||||
QT_TRANSLATE_NOOP("bitcoin-core", ""
|
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 "
|
"Warning: Please check that your computer's date and time are correct! If "
|
||||||
"your clock is wrong Bitcoin Core will not work properly."),
|
"your clock is wrong Bitcoin Core will not work properly."),
|
||||||
QT_TRANSLATE_NOOP("bitcoin-core", ""
|
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 "
|
"Warning: The network does not appear to fully agree! Some miners appear to "
|
||||||
"be experiencing issues."),
|
"be experiencing issues."),
|
||||||
QT_TRANSLATE_NOOP("bitcoin-core", ""
|
QT_TRANSLATE_NOOP("bitcoin-core", ""
|
||||||
|
@ -184,14 +184,13 @@ QT_TRANSLATE_NOOP("bitcoin-core", ""
|
||||||
"mode. This will redownload the entire blockchain"),
|
"mode. This will redownload the entire blockchain"),
|
||||||
QT_TRANSLATE_NOOP("bitcoin-core", "(default: %s)"),
|
QT_TRANSLATE_NOOP("bitcoin-core", "(default: %s)"),
|
||||||
QT_TRANSLATE_NOOP("bitcoin-core", "(default: %u)"),
|
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", "(default: 1)"),
|
||||||
QT_TRANSLATE_NOOP("bitcoin-core", "<category> can be:"),
|
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 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 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", "Accept public REST requests (default: %u)"),
|
||||||
QT_TRANSLATE_NOOP("bitcoin-core", "Acceptable ciphers (default: %s)"),
|
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", "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 DNS lookups for -addnode, -seednode and -connect"),
|
||||||
QT_TRANSLATE_NOOP("bitcoin-core", "Allow self signed root certificates (default: 0)"),
|
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", "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 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", "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 and mine data carrier transactions (default: %u)"),
|
||||||
QT_TRANSLATE_NOOP("bitcoin-core", "Relay non-P2SH multisig (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"),
|
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 needed to be rewritten: restart Bitcoin Core to complete"),
|
||||||
QT_TRANSLATE_NOOP("bitcoin-core", "Wallet options:"),
|
QT_TRANSLATE_NOOP("bitcoin-core", "Wallet options:"),
|
||||||
QT_TRANSLATE_NOOP("bitcoin-core", "Warning"),
|
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 -benchmark ignored, use -debug=bench."),
|
||||||
QT_TRANSLATE_NOOP("bitcoin-core", "Warning: Unsupported argument -debugnet ignored, use -debug=net."),
|
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"),
|
QT_TRANSLATE_NOOP("bitcoin-core", "You need to rebuild the database using -reindex to change -txindex"),
|
||||||
|
|
|
@ -89,7 +89,7 @@ QDateTime ClientModel::getLastBlockDate() const
|
||||||
double ClientModel::getVerificationProgress() const
|
double ClientModel::getVerificationProgress() const
|
||||||
{
|
{
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
return Checkpoints::GuessVerificationProgress(chainActive.Tip());
|
return Checkpoints::GuessVerificationProgress(Params().Checkpoints(), chainActive.Tip());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClientModel::updateTimer()
|
void ClientModel::updateTimer()
|
||||||
|
|
|
@ -129,11 +129,11 @@ CoinControlDialog::CoinControlDialog(QWidget *parent) :
|
||||||
ui->treeWidget->setColumnWidth(COLUMN_DATE, 110);
|
ui->treeWidget->setColumnWidth(COLUMN_DATE, 110);
|
||||||
ui->treeWidget->setColumnWidth(COLUMN_CONFIRMATIONS, 100);
|
ui->treeWidget->setColumnWidth(COLUMN_CONFIRMATIONS, 100);
|
||||||
ui->treeWidget->setColumnWidth(COLUMN_PRIORITY, 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_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 dont 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 dont 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 dont 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 dont 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
|
// default view is sorted by amount desc
|
||||||
sortView(COLUMN_AMOUNT_INT64, Qt::DescendingOrder);
|
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
|
// 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
|
// including all children 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.
|
// 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.
|
// Please remove this ugly fix, once the bug is solved upstream.
|
||||||
#if QT_VERSION >= 0x050000
|
#if QT_VERSION >= 0x050000
|
||||||
else if (column == COLUMN_CHECKBOX && item->childCount() > 0)
|
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"
|
l7->setStyleSheet((fDust) ? "color:red;" : ""); // Dust = "yes"
|
||||||
|
|
||||||
// tool tips
|
// 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("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.");
|
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 />";
|
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()));
|
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
|
// how many satoshis the estimated fee can vary per byte we guess wrong
|
||||||
double dFeeVary;
|
double dFeeVary;
|
||||||
|
|
|
@ -59,21 +59,35 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="labelWalletStatus">
|
<widget class="QPushButton" name="labelWalletStatus">
|
||||||
<property name="cursor">
|
<property name="enabled">
|
||||||
<cursorShape>WhatsThisCursor</cursorShape>
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>30</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="toolTip">
|
<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>
|
<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>
|
||||||
<property name="styleSheet">
|
|
||||||
<string notr="true">QLabel { color: red; }</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string notr="true">(out of sync)</string>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="icon">
|
||||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
<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>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -431,21 +445,35 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="labelTransactionsStatus">
|
<widget class="QPushButton" name="labelTransactionsStatus">
|
||||||
<property name="cursor">
|
<property name="enabled">
|
||||||
<cursorShape>WhatsThisCursor</cursorShape>
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>30</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="toolTip">
|
<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>
|
<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>
|
||||||
<property name="styleSheet">
|
|
||||||
<string notr="true">QLabel { color: red; }</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string notr="true">(out of sync)</string>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="icon">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<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>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
|
@ -21,15 +21,21 @@
|
||||||
<string>This is a normal payment.</string>
|
<string>This is a normal payment.</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="frameShape">
|
<property name="frameShape">
|
||||||
<enum>QFrame::StyledPanel</enum>
|
<enum>QFrame::NoFrame</enum>
|
||||||
</property>
|
|
||||||
<property name="frameShadow">
|
|
||||||
<enum>QFrame::Sunken</enum>
|
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<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>
|
<number>12</number>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="verticalSpacing">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="payToLabel">
|
<widget class="QLabel" name="payToLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -193,6 +199,13 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="4" column="0" colspan="2">
|
||||||
|
<widget class="Line" name="line">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QFrame" name="SendCoins_UnauthenticatedPaymentRequest">
|
<widget class="QFrame" name="SendCoins_UnauthenticatedPaymentRequest">
|
||||||
|
@ -618,10 +631,7 @@
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
<property name="frameShape">
|
<property name="frameShape">
|
||||||
<enum>QFrame::StyledPanel</enum>
|
<enum>QFrame::NoFrame</enum>
|
||||||
</property>
|
|
||||||
<property name="frameShadow">
|
|
||||||
<enum>QFrame::Sunken</enum>
|
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_is">
|
<layout class="QGridLayout" name="gridLayout_is">
|
||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
|
@ -1150,10 +1160,7 @@
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
<property name="frameShape">
|
<property name="frameShape">
|
||||||
<enum>QFrame::StyledPanel</enum>
|
<enum>QFrame::NoFrame</enum>
|
||||||
</property>
|
|
||||||
<property name="frameShadow">
|
|
||||||
<enum>QFrame::Sunken</enum>
|
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_s">
|
<layout class="QGridLayout" name="gridLayout_s">
|
||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
|
|
|
@ -67,10 +67,6 @@
|
||||||
<source>Change passphrase</source>
|
<source>Change passphrase</source>
|
||||||
<translation>Verander wagwoord</translation>
|
<translation>Verander wagwoord</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Confirm wallet encryption</source>
|
<source>Confirm wallet encryption</source>
|
||||||
<translation>Bevestig beursie enkripsie.</translation>
|
<translation>Bevestig beursie enkripsie.</translation>
|
||||||
|
@ -485,8 +481,8 @@
|
||||||
<translation>Tipe</translation>
|
<translation>Tipe</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Address</source>
|
<source>Label</source>
|
||||||
<translation>Adres</translation>
|
<translation>Etiket</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Received with</source>
|
<source>Received with</source>
|
||||||
|
|
|
@ -151,10 +151,6 @@
|
||||||
<source>Change passphrase</source>
|
<source>Change passphrase</source>
|
||||||
<translation>تغيير كلمة المرور</translation>
|
<translation>تغيير كلمة المرور</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Enter the old and new passphrase to the wallet.</source>
|
|
||||||
<translation>أدخل كلمة المرور القديمة والجديدة للمحفظة.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Confirm wallet encryption</source>
|
<source>Confirm wallet encryption</source>
|
||||||
<translation>تأكيد تشفير المحفظة</translation>
|
<translation>تأكيد تشفير المحفظة</translation>
|
||||||
|
@ -183,10 +179,6 @@
|
||||||
<source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>.</source>
|
<source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>.</source>
|
||||||
<translation>أدخل عبارة مرور جديدة إلى المحفظة. الرجاء استخدام عبارة مرور تتكون من10 حروف عشوائية على الاقل, أو أكثر من 7 كلمات</translation>
|
<translation>أدخل عبارة مرور جديدة إلى المحفظة. الرجاء استخدام عبارة مرور تتكون من10 حروف عشوائية على الاقل, أو أكثر من 7 كلمات</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Wallet encryption failed</source>
|
<source>Wallet encryption failed</source>
|
||||||
<translation>فشل تشفير المحفظة</translation>
|
<translation>فشل تشفير المحفظة</translation>
|
||||||
|
@ -300,16 +292,12 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Reindexing blocks on disk...</source>
|
<source>Reindexing blocks on disk...</source>
|
||||||
<translation>إعادة فهرسة الكتل على القرص</translation>
|
<translation>إعادة الفهرسة الكتل على القرص ...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Send coins to a Bitcoin address</source>
|
<source>Send coins to a Bitcoin address</source>
|
||||||
<translation>ارسل عملات الى عنوان بيتكوين</translation>
|
<translation>ارسل عملات الى عنوان بيتكوين</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Modify configuration options for Bitcoin</source>
|
|
||||||
<translation>تعديل إعدادات bitcoin</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Backup wallet to another location</source>
|
<source>Backup wallet to another location</source>
|
||||||
<translation>احفظ نسخة احتياطية للمحفظة في مكان آخر</translation>
|
<translation>احفظ نسخة احتياطية للمحفظة في مكان آخر</translation>
|
||||||
|
@ -352,7 +340,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Encrypt the private keys that belong to your wallet</source>
|
<source>Encrypt the private keys that belong to your wallet</source>
|
||||||
<translation>تشفير المفتاح الخاص لمحفظتك</translation>
|
<translation>تشفير المفتاح الخاص بمحفظتك</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&File</source>
|
<source>&File</source>
|
||||||
|
@ -378,18 +366,6 @@
|
||||||
<source>&About Bitcoin Core</source>
|
<source>&About Bitcoin Core</source>
|
||||||
<translation>حول bitcoin core</translation>
|
<translation>حول bitcoin core</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Error</source>
|
<source>Error</source>
|
||||||
<translation>خطأ</translation>
|
<translation>خطأ</translation>
|
||||||
|
@ -442,7 +418,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Amount:</source>
|
<source>Amount:</source>
|
||||||
<translation>القيمة</translation>
|
<translation>القيمة :</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Priority:</source>
|
<source>Priority:</source>
|
||||||
|
@ -482,7 +458,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy address</source>
|
<source>Copy address</source>
|
||||||
<translation> انسخ العنوان</translation>
|
<translation> انسخ عنوان</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy label</source>
|
<source>Copy label</source>
|
||||||
|
@ -490,11 +466,11 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy amount</source>
|
<source>Copy amount</source>
|
||||||
<translation>نسخ القيمة</translation>
|
<translation>نسخ الكمية</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy transaction ID</source>
|
<source>Copy transaction ID</source>
|
||||||
<translation>نسخ رقم المعاملة</translation>
|
<translation>نسخ رقم العملية</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy quantity</source>
|
<source>Copy quantity</source>
|
||||||
|
@ -514,7 +490,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy change</source>
|
<source>Copy change</source>
|
||||||
<translation>نسخ التغييرات</translation>
|
<translation>نسخ التعديل</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>highest</source>
|
<source>highest</source>
|
||||||
|
@ -641,10 +617,6 @@
|
||||||
<source>Usage:</source>
|
<source>Usage:</source>
|
||||||
<translation>المستخدم</translation>
|
<translation>المستخدم</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>UI options</source>
|
|
||||||
<translation>خيارات UI</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>Intro</name>
|
<name>Intro</name>
|
||||||
|
@ -810,10 +782,6 @@
|
||||||
<source>Amount</source>
|
<source>Amount</source>
|
||||||
<translation>المبلغ</translation>
|
<translation>المبلغ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>UNKNOWN</source>
|
|
||||||
<translation>غير معروف</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>N/A</source>
|
<source>N/A</source>
|
||||||
<translation>غير معروف</translation>
|
<translation>غير معروف</translation>
|
||||||
|
@ -949,7 +917,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&Label:</source>
|
<source>&Label:</source>
|
||||||
<translation>&الوصف:</translation>
|
<translation>&وصف :</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&Message:</source>
|
<source>&Message:</source>
|
||||||
|
@ -985,7 +953,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy amount</source>
|
<source>Copy amount</source>
|
||||||
<translation>نسخ القيمة</translation>
|
<translation>نسخ الكمية</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
|
@ -1134,7 +1102,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy amount</source>
|
<source>Copy amount</source>
|
||||||
<translation>نسخ القيمة</translation>
|
<translation>نسخ الكمية</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy fee</source>
|
<source>Copy fee</source>
|
||||||
|
@ -1193,7 +1161,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Paste address from clipboard</source>
|
<source>Paste address from clipboard</source>
|
||||||
<translation>الصق العنوان من لوحة المفاتيح</translation>
|
<translation>انسخ العنوان من لوحة المفاتيح</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Alt+P</source>
|
<source>Alt+P</source>
|
||||||
|
@ -1436,10 +1404,6 @@
|
||||||
<source>Type</source>
|
<source>Type</source>
|
||||||
<translation>النوع</translation>
|
<translation>النوع</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Address</source>
|
|
||||||
<translation>عنوان</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>This block was not received by any other nodes and will probably not be accepted!</source>
|
<source>This block was not received by any other nodes and will probably not be accepted!</source>
|
||||||
<translation>لم يتم تلقى هذه الكتلة (Block) من قبل أي العقد الأخرى وربما لن تكون مقبولة!</translation>
|
<translation>لم يتم تلقى هذه الكتلة (Block) من قبل أي العقد الأخرى وربما لن تكون مقبولة!</translation>
|
||||||
|
@ -1452,6 +1416,10 @@
|
||||||
<source>Offline</source>
|
<source>Offline</source>
|
||||||
<translation>غير متصل</translation>
|
<translation>غير متصل</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Label</source>
|
||||||
|
<translation>وصف</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Received with</source>
|
<source>Received with</source>
|
||||||
<translation>استقبل مع</translation>
|
<translation>استقبل مع</translation>
|
||||||
|
@ -1488,10 +1456,6 @@
|
||||||
<source>Type of transaction.</source>
|
<source>Type of transaction.</source>
|
||||||
<translation>نوع المعاملات</translation>
|
<translation>نوع المعاملات</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Destination address of transaction.</source>
|
|
||||||
<translation>عنوان وجهة المعاملة</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Amount removed from or added to balance.</source>
|
<source>Amount removed from or added to balance.</source>
|
||||||
<translation>المبلغ الذي أزيل أو أضيف الى الرصيد</translation>
|
<translation>المبلغ الذي أزيل أو أضيف الى الرصيد</translation>
|
||||||
|
@ -1722,10 +1686,6 @@
|
||||||
<source>Warning</source>
|
<source>Warning</source>
|
||||||
<translation>تحذير</translation>
|
<translation>تحذير</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Warning: This version is obsolete, upgrade required!</source>
|
|
||||||
<translation>تحذير : هذا الاصدار قديم , يتطلب التحديث</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Upgrade wallet to latest format</source>
|
<source>Upgrade wallet to latest format</source>
|
||||||
<translation>تحديث المحفظة للنسخة الاخيرة</translation>
|
<translation>تحديث المحفظة للنسخة الاخيرة</translation>
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
<TS language="be_BY" version="2.1">
|
<TS language="be_BY" version="2.1">
|
||||||
<context>
|
<context>
|
||||||
<name>AddressBookPage</name>
|
<name>AddressBookPage</name>
|
||||||
|
<message>
|
||||||
|
<source>Right-click to edit address or label</source>
|
||||||
|
<translation>Правы клік, каб рэдагаваць адрас ці метку</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Create a new address</source>
|
<source>Create a new address</source>
|
||||||
<translation>Стварыць новы адрас</translation>
|
<translation>Стварыць новы адрас</translation>
|
||||||
|
@ -61,10 +65,26 @@
|
||||||
<source>Receiving addresses</source>
|
<source>Receiving addresses</source>
|
||||||
<translation>адрасы Прымання</translation>
|
<translation>адрасы Прымання</translation>
|
||||||
</message>
|
</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 &Label</source>
|
||||||
|
<translation>Капіяваць Метку</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&Edit</source>
|
<source>&Edit</source>
|
||||||
<translation>Рэдагаваць</translation>
|
<translation>Рэдагаваць</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Export Address List</source>
|
||||||
|
<translation>Экспартаваць Спіс Адрасоў</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Comma separated file (*.csv)</source>
|
<source>Comma separated file (*.csv)</source>
|
||||||
<translation>Коскамі падзелены файл (*.csv)</translation>
|
<translation>Коскамі падзелены файл (*.csv)</translation>
|
||||||
|
@ -73,6 +93,10 @@
|
||||||
<source>Exporting Failed</source>
|
<source>Exporting Failed</source>
|
||||||
<translation>Экспартаванне няўдалае</translation>
|
<translation>Экспартаванне няўдалае</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>There was an error trying to save the address list to %1. Please try again.</source>
|
||||||
|
<translation>Адбылася памылка падчас спробы захаваць адрас у %1. Паспрабуйце зноў.</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>AddressTableModel</name>
|
<name>AddressTableModel</name>
|
||||||
|
@ -91,6 +115,10 @@
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>AskPassphraseDialog</name>
|
<name>AskPassphraseDialog</name>
|
||||||
|
<message>
|
||||||
|
<source>Passphrase Dialog</source>
|
||||||
|
<translation>Дыялог сакрэтнай фразы</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Enter passphrase</source>
|
<source>Enter passphrase</source>
|
||||||
<translation>Увядзіце кодавую фразу</translation>
|
<translation>Увядзіце кодавую фразу</translation>
|
||||||
|
@ -127,10 +155,6 @@
|
||||||
<source>Change passphrase</source>
|
<source>Change passphrase</source>
|
||||||
<translation>Змяніць пароль</translation>
|
<translation>Змяніць пароль</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Enter the old and new passphrase to the wallet.</source>
|
|
||||||
<translation>Увядзіце стары і новы пароль да гаманца.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Confirm wallet encryption</source>
|
<source>Confirm wallet encryption</source>
|
||||||
<translation>Пацвердзіце шыфраванне гаманца</translation>
|
<translation>Пацвердзіце шыфраванне гаманца</translation>
|
||||||
|
@ -143,6 +167,14 @@
|
||||||
<source>Are you sure you wish to encrypt your wallet?</source>
|
<source>Are you sure you wish to encrypt your wallet?</source>
|
||||||
<translation>Ці ўпэўненыя вы, што жадаеце зашыфраваць свой гаманец?</translation>
|
<translation>Ці ўпэўненыя вы, што жадаеце зашыфраваць свой гаманец?</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Warning: The Caps Lock key is on!</source>
|
<source>Warning: The Caps Lock key is on!</source>
|
||||||
<translation>Увага: Caps Lock уключаны!</translation>
|
<translation>Увага: Caps Lock уключаны!</translation>
|
||||||
|
@ -152,8 +184,12 @@
|
||||||
<translation>Гаманец зашыфраваны</translation>
|
<translation>Гаманец зашыфраваны</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>.</source>
|
||||||
<translation>Bitcoin зачыняецца дзеля завяршэння працэсса шыфравання. Памятайце, што шыфраванне гаманца цалкам абараняе вашыя сродкі ад скрадання шкоднымі праграмамі якія могуць пранікнуць у ваш камп'ютар.</translation>
|
<translation>Увядзіце новы пароль для гаманца.<br/>Парольная фраза павинна складацца<b> не меньш чым з дзесяці сімвалаў</b>, ці <b>больш чым з васьмі слоў</b>.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Enter the old passphrase and new passphrase to the wallet.</source>
|
||||||
|
<translation>Увядзіце стары пароль і новы пароль для гаманца.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Wallet encryption failed</source>
|
<source>Wallet encryption failed</source>
|
||||||
|
@ -173,7 +209,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>The passphrase entered for the wallet decryption was incorrect.</source>
|
<source>The passphrase entered for the wallet decryption was incorrect.</source>
|
||||||
<translation>Уведзена пароль дзеля расшыфравання гаманца памылковы</translation>
|
<translation>Уведзены пароль для расшыфравання гаманца памылковы</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Wallet decryption failed</source>
|
<source>Wallet decryption failed</source>
|
||||||
|
@ -238,10 +274,42 @@
|
||||||
<source>&Encrypt Wallet...</source>
|
<source>&Encrypt Wallet...</source>
|
||||||
<translation>Зашыфраваць Гаманец...</translation>
|
<translation>Зашыфраваць Гаманец...</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Backup Wallet...</source>
|
||||||
|
<translation>Стварыць копію гаманца...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Change Passphrase...</source>
|
||||||
|
<translation>&Change Passphrase...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Sending addresses...</source>
|
||||||
|
<translation>Адрасы дасылання...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Receiving addresses...</source>
|
||||||
|
<translation>Адрасы прымання...</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Open &URI...</source>
|
<source>Open &URI...</source>
|
||||||
<translation>Адчыниць &URI...</translation>
|
<translation>Адчыниць &URI...</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Backup wallet to another location</source>
|
<source>Backup wallet to another location</source>
|
||||||
<translation>Зрабіце копію гаманца ў іншае месца</translation>
|
<translation>Зрабіце копію гаманца ў іншае месца</translation>
|
||||||
|
@ -254,6 +322,18 @@
|
||||||
<source>&Debug window</source>
|
<source>&Debug window</source>
|
||||||
<translation>Вакно адладкі</translation>
|
<translation>Вакно адладкі</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Open debugging and diagnostic console</source>
|
||||||
|
<translation>Адкрыць кансоль дыягностыкі і адладкі</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Verify message...</source>
|
||||||
|
<translation>Праверыць паведамленне...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Bitcoin</source>
|
||||||
|
<translation>Біткойн</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Wallet</source>
|
<source>Wallet</source>
|
||||||
<translation>Гаманец</translation>
|
<translation>Гаманец</translation>
|
||||||
|
@ -266,6 +346,10 @@
|
||||||
<source>&Receive</source>
|
<source>&Receive</source>
|
||||||
<translation>Атрымаць</translation>
|
<translation>Атрымаць</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Show information about Bitcoin Core</source>
|
||||||
|
<translation>Паказаць інфармацыю аб Bitcoin Core</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&Show / Hide</source>
|
<source>&Show / Hide</source>
|
||||||
<translation>&Паказаць / Схаваць</translation>
|
<translation>&Паказаць / Схаваць</translation>
|
||||||
|
@ -278,6 +362,14 @@
|
||||||
<source>Encrypt the private keys that belong to your wallet</source>
|
<source>Encrypt the private keys that belong to your wallet</source>
|
||||||
<translation>Зашыфраваць прыватныя ключы, якия належаць вашаму гаманцу</translation>
|
<translation>Зашыфраваць прыватныя ключы, якия належаць вашаму гаманцу</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>&File</source>
|
<source>&File</source>
|
||||||
<translation>Ф&айл</translation>
|
<translation>Ф&айл</translation>
|
||||||
|
@ -290,14 +382,82 @@
|
||||||
<source>&Help</source>
|
<source>&Help</source>
|
||||||
<translation>Дапамога</translation>
|
<translation>Дапамога</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Request payments (generates QR codes and bitcoin: URIs)</source>
|
||||||
|
<translation>Запатрабаваць плацёж (генеруецца QR-код для біткойн URI)</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&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>&Command-line options</source>
|
||||||
|
<translation>Опцыі каманднага радка</translation>
|
||||||
|
</message>
|
||||||
<message numerus="yes">
|
<message numerus="yes">
|
||||||
<source>%n active connection(s) to Bitcoin network</source>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>Error</source>
|
<source>Error</source>
|
||||||
<translation>Памылка</translation>
|
<translation>Памылка</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Warning</source>
|
||||||
|
<translation>Увага</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Information</source>
|
||||||
|
<translation>Інфармацыя</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Up to date</source>
|
<source>Up to date</source>
|
||||||
<translation>Сінхранізавана</translation>
|
<translation>Сінхранізавана</translation>
|
||||||
|
@ -306,6 +466,36 @@
|
||||||
<source>Catching up...</source>
|
<source>Catching up...</source>
|
||||||
<translation>Наганяем...</translation>
|
<translation>Наганяем...</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Sent transaction</source>
|
<source>Sent transaction</source>
|
||||||
<translation>Дасланыя транзакцыі</translation>
|
<translation>Дасланыя транзакцыі</translation>
|
||||||
|
@ -314,18 +504,6 @@
|
||||||
<source>Incoming transaction</source>
|
<source>Incoming transaction</source>
|
||||||
<translation>Прынятыя транзакцыі</translation>
|
<translation>Прынятыя транзакцыі</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Date: %1
|
|
||||||
Amount: %2
|
|
||||||
Type: %3
|
|
||||||
Address: %4
|
|
||||||
</source>
|
|
||||||
<translation>Дата: %1
|
|
||||||
Колькасць: %2
|
|
||||||
Тып: %3
|
|
||||||
Адрас: %4
|
|
||||||
</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
||||||
<translation>Гаманец <b>зашыфраваны</b> і зараз <b>разблакаваны</b></translation>
|
<translation>Гаманец <b>зашыфраваны</b> і зараз <b>разблакаваны</b></translation>
|
||||||
|
@ -337,13 +515,45 @@ Address: %4
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ClientModel</name>
|
<name>ClientModel</name>
|
||||||
|
<message>
|
||||||
|
<source>Network Alert</source>
|
||||||
|
<translation>Трывога Сеціва</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CoinControlDialog</name>
|
<name>CoinControlDialog</name>
|
||||||
|
<message>
|
||||||
|
<source>Bytes:</source>
|
||||||
|
<translation>Байтаў:</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Amount:</source>
|
<source>Amount:</source>
|
||||||
<translation>Колькасць:</translation>
|
<translation>Колькасць:</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Amount</source>
|
<source>Amount</source>
|
||||||
<translation>Колькасць</translation>
|
<translation>Колькасць</translation>
|
||||||
|
@ -352,10 +562,18 @@ Address: %4
|
||||||
<source>Date</source>
|
<source>Date</source>
|
||||||
<translation>Дата</translation>
|
<translation>Дата</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Confirmations</source>
|
||||||
|
<translation>Пацверджанняў</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Confirmed</source>
|
<source>Confirmed</source>
|
||||||
<translation>Пацверджана</translation>
|
<translation>Пацверджана</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Priority</source>
|
||||||
|
<translation>Прыярытэт</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy address</source>
|
<source>Copy address</source>
|
||||||
<translation>Капіяваць адрас</translation>
|
<translation>Капіяваць адрас</translation>
|
||||||
|
@ -372,6 +590,50 @@ Address: %4
|
||||||
<source>Copy transaction ID</source>
|
<source>Copy transaction ID</source>
|
||||||
<translation>Капіяваць ID транзакцыі</translation>
|
<translation>Капіяваць ID транзакцыі</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>(no label)</source>
|
<source>(no label)</source>
|
||||||
<translation>непазначаны</translation>
|
<translation>непазначаны</translation>
|
||||||
|
@ -433,20 +695,48 @@ Address: %4
|
||||||
<source>About Bitcoin Core</source>
|
<source>About Bitcoin Core</source>
|
||||||
<translation>Аб Bitcoin Core</translation>
|
<translation>Аб Bitcoin Core</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Command-line options</source>
|
||||||
|
<translation>Опцыі каманднага радка</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Usage:</source>
|
<source>Usage:</source>
|
||||||
<translation>Ужыванне:</translation>
|
<translation>Ужыванне:</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>command-line options</source>
|
||||||
|
<translation>опцыі каманднага радка</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>Intro</name>
|
<name>Intro</name>
|
||||||
|
<message>
|
||||||
|
<source>Welcome</source>
|
||||||
|
<translation>Вітаем</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Welcome to Bitcoin Core.</source>
|
||||||
|
<translation>Вітаем у Bitcoin Core.</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Error</source>
|
<source>Error</source>
|
||||||
<translation>Памылка</translation>
|
<translation>Памылка</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<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>
|
||||||
<context>
|
<context>
|
||||||
<name>OpenURIDialog</name>
|
<name>OpenURIDialog</name>
|
||||||
|
<message>
|
||||||
|
<source>Open URI</source>
|
||||||
|
<translation>Адкрыць URI</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>OptionsDialog</name>
|
<name>OptionsDialog</name>
|
||||||
|
@ -454,6 +744,10 @@ Address: %4
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation>Опцыі</translation>
|
<translation>Опцыі</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MB</source>
|
||||||
|
<translation>Мб</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>OverviewPage</name>
|
<name>OverviewPage</name>
|
||||||
|
@ -510,6 +804,10 @@ Address: %4
|
||||||
<source>Label</source>
|
<source>Label</source>
|
||||||
<translation>Пазнака</translation>
|
<translation>Пазнака</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Message</source>
|
||||||
|
<translation>Паведамленне</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>RecentRequestsTableModel</name>
|
<name>RecentRequestsTableModel</name>
|
||||||
|
@ -521,6 +819,10 @@ Address: %4
|
||||||
<source>Label</source>
|
<source>Label</source>
|
||||||
<translation>Пазнака</translation>
|
<translation>Пазнака</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Message</source>
|
||||||
|
<translation>Паведамленне</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Amount</source>
|
<source>Amount</source>
|
||||||
<translation>Колькасць</translation>
|
<translation>Колькасць</translation>
|
||||||
|
@ -536,14 +838,34 @@ Address: %4
|
||||||
<source>Send Coins</source>
|
<source>Send Coins</source>
|
||||||
<translation>Даслаць Манеты</translation>
|
<translation>Даслаць Манеты</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Bytes:</source>
|
||||||
|
<translation>Байтаў:</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Amount:</source>
|
<source>Amount:</source>
|
||||||
<translation>Колькасць:</translation>
|
<translation>Колькасць:</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Priority:</source>
|
||||||
|
<translation>Прыярытэт:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Fee:</source>
|
||||||
|
<translation>Камісія:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>After Fee:</source>
|
||||||
|
<translation>Пасля камісіі:</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Send to multiple recipients at once</source>
|
<source>Send to multiple recipients at once</source>
|
||||||
<translation>Даслаць адразу некалькім атрымальнікам</translation>
|
<translation>Даслаць адразу некалькім атрымальнікам</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Dust:</source>
|
||||||
|
<translation>Пыл:</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Balance:</source>
|
<source>Balance:</source>
|
||||||
<translation>Баланс:</translation>
|
<translation>Баланс:</translation>
|
||||||
|
@ -599,6 +921,10 @@ Address: %4
|
||||||
<source>Alt+P</source>
|
<source>Alt+P</source>
|
||||||
<translation>Alt+P</translation>
|
<translation>Alt+P</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Memo:</source>
|
||||||
|
<translation>Памятка:</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ShutdownWindow</name>
|
<name>ShutdownWindow</name>
|
||||||
|
@ -631,9 +957,17 @@ Address: %4
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TrafficGraphWidget</name>
|
<name>TrafficGraphWidget</name>
|
||||||
|
<message>
|
||||||
|
<source>KB/s</source>
|
||||||
|
<translation>Кб/с</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TransactionDesc</name>
|
<name>TransactionDesc</name>
|
||||||
|
<message>
|
||||||
|
<source>%1/offline</source>
|
||||||
|
<translation>%1/offline</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>%1/unconfirmed</source>
|
<source>%1/unconfirmed</source>
|
||||||
<translation>%1/непацверджана</translation>
|
<translation>%1/непацверджана</translation>
|
||||||
|
@ -642,10 +976,22 @@ Address: %4
|
||||||
<source>%1 confirmations</source>
|
<source>%1 confirmations</source>
|
||||||
<translation>%1 пацверджанняў</translation>
|
<translation>%1 пацверджанняў</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Status</source>
|
||||||
|
<translation>Статус</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Date</source>
|
<source>Date</source>
|
||||||
<translation>Дата</translation>
|
<translation>Дата</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Message</source>
|
||||||
|
<translation>Паведамленне</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Comment</source>
|
||||||
|
<translation>Каментар</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Transaction ID</source>
|
<source>Transaction ID</source>
|
||||||
<translation>ID</translation>
|
<translation>ID</translation>
|
||||||
|
@ -684,10 +1030,6 @@ Address: %4
|
||||||
<source>Type</source>
|
<source>Type</source>
|
||||||
<translation>Тып</translation>
|
<translation>Тып</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Address</source>
|
|
||||||
<translation>Адрас</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Confirmed (%1 confirmations)</source>
|
<source>Confirmed (%1 confirmations)</source>
|
||||||
<translation>Пацверджана (%1 пацверджанняў)</translation>
|
<translation>Пацверджана (%1 пацверджанняў)</translation>
|
||||||
|
@ -700,6 +1042,10 @@ Address: %4
|
||||||
<source>Generated but not accepted</source>
|
<source>Generated but not accepted</source>
|
||||||
<translation>Згенеравана, але не прынята</translation>
|
<translation>Згенеравана, але не прынята</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Label</source>
|
||||||
|
<translation>Пазнака</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Received with</source>
|
<source>Received with</source>
|
||||||
<translation>Прынята з</translation>
|
<translation>Прынята з</translation>
|
||||||
|
@ -736,10 +1082,6 @@ Address: %4
|
||||||
<source>Type of transaction.</source>
|
<source>Type of transaction.</source>
|
||||||
<translation>Тып транзакцыі</translation>
|
<translation>Тып транзакцыі</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Destination address of transaction.</source>
|
|
||||||
<translation>Адрас прызначэння транзакцыі.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Amount removed from or added to balance.</source>
|
<source>Amount removed from or added to balance.</source>
|
||||||
<translation>Колькасць аднятая ці даданая да балансу.</translation>
|
<translation>Колькасць аднятая ці даданая да балансу.</translation>
|
||||||
|
@ -910,14 +1252,106 @@ Address: %4
|
||||||
<source>Use the test network</source>
|
<source>Use the test network</source>
|
||||||
<translation>Ужываць тэставае сеціва</translation>
|
<translation>Ужываць тэставае сеціва</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Send trace/debug info to console instead of debug.log file</source>
|
<source>Send trace/debug info to console instead of debug.log file</source>
|
||||||
<translation>Слаць trace/debug звесткі ў кансоль замест файла debug.log</translation>
|
<translation>Слаць trace/debug звесткі ў кансоль замест файла debug.log</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Username for JSON-RPC connections</source>
|
<source>Username for JSON-RPC connections</source>
|
||||||
<translation>Імя карыстальника для JSON-RPC злучэнняў</translation>
|
<translation>Імя карыстальника для JSON-RPC злучэнняў</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Warning</source>
|
||||||
|
<translation>Увага</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Password for JSON-RPC connections</source>
|
<source>Password for JSON-RPC connections</source>
|
||||||
<translation>Пароль для JSON-RPC злучэнняў</translation>
|
<translation>Пароль для JSON-RPC злучэнняў</translation>
|
||||||
|
@ -962,6 +1396,10 @@ Address: %4
|
||||||
<source>Loading wallet...</source>
|
<source>Loading wallet...</source>
|
||||||
<translation>Загружаем гаманец...</translation>
|
<translation>Загружаем гаманец...</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Cannot downgrade wallet</source>
|
||||||
|
<translation>Немагчыма рэгрэсаваць гаманец</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Rescanning...</source>
|
<source>Rescanning...</source>
|
||||||
<translation>Перасканаванне...</translation>
|
<translation>Перасканаванне...</translation>
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -155,10 +155,6 @@
|
||||||
<source>Change passphrase</source>
|
<source>Change passphrase</source>
|
||||||
<translation>Canvia la contrasenya</translation>
|
<translation>Canvia la contrasenya</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Confirm wallet encryption</source>
|
<source>Confirm wallet encryption</source>
|
||||||
<translation>Confirma l'encriptació del moneder</translation>
|
<translation>Confirma l'encriptació del moneder</translation>
|
||||||
|
@ -187,10 +183,6 @@
|
||||||
<source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>.</source>
|
<source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>.</source>
|
||||||
<translation>Introduïu la contrasenya nova al moneder.<br/>Utilitzeu una contrasenya de <b>deu o més caràcters aleatoris</b>, o <b>vuit o més paraules</b>.</translation>
|
<translation>Introduïu la contrasenya nova al moneder.<br/>Utilitzeu una contrasenya de <b>deu o més caràcters aleatoris</b>, o <b>vuit o més paraules</b>.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Wallet encryption failed</source>
|
<source>Wallet encryption failed</source>
|
||||||
<translation>L'encriptació del moneder ha fallat</translation>
|
<translation>L'encriptació del moneder ha fallat</translation>
|
||||||
|
@ -310,10 +302,6 @@
|
||||||
<source>Send coins to a Bitcoin address</source>
|
<source>Send coins to a Bitcoin address</source>
|
||||||
<translation>Envia monedes a una adreça Bitcoin</translation>
|
<translation>Envia monedes a una adreça Bitcoin</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Modify configuration options for Bitcoin</source>
|
|
||||||
<translation>Modifica les opcions de configuració per bitcoin</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Backup wallet to another location</source>
|
<source>Backup wallet to another location</source>
|
||||||
<translation>Realitza una còpia de seguretat del moneder a una altra ubicació</translation>
|
<translation>Realitza una còpia de seguretat del moneder a una altra ubicació</translation>
|
||||||
|
@ -478,10 +466,6 @@
|
||||||
<source>Up to date</source>
|
<source>Up to date</source>
|
||||||
<translation>Al dia</translation>
|
<translation>Al dia</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Catching up...</source>
|
<source>Catching up...</source>
|
||||||
<translation>S'està posant al dia ...</translation>
|
<translation>S'està posant al dia ...</translation>
|
||||||
|
@ -494,14 +478,6 @@
|
||||||
<source>Incoming transaction</source>
|
<source>Incoming transaction</source>
|
||||||
<translation>Transacció entrant</translation>
|
<translation>Transacció entrant</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
||||||
<translation>El moneder està <b>encriptat</b> i actualment <b>desbloquejat</b></translation>
|
<translation>El moneder està <b>encriptat</b> i actualment <b>desbloquejat</b></translation>
|
||||||
|
@ -704,10 +680,6 @@ Address: %4
|
||||||
<source>no</source>
|
<source>no</source>
|
||||||
<translation>no</translation>
|
<translation>no</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>This means a fee of at least %1 per kB is required.</source>
|
<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>
|
<translation>Això comporta una comissió d'almenys %1 per kB.</translation>
|
||||||
|
@ -720,14 +692,6 @@ Address: %4
|
||||||
<source>Transactions with higher priority are more likely to get included into a block.</source>
|
<source>Transactions with higher priority are more likely to get included into a block.</source>
|
||||||
<translation>Les transaccions amb una major prioritat són més propenses a ser incloses en un bloc.</translation>
|
<translation>Les transaccions amb una major prioritat són més propenses a ser incloses en un bloc.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>(no label)</source>
|
<source>(no label)</source>
|
||||||
<translation>(sense etiqueta)</translation>
|
<translation>(sense etiqueta)</translation>
|
||||||
|
@ -849,30 +813,6 @@ Address: %4
|
||||||
<source>command-line options</source>
|
<source>command-line options</source>
|
||||||
<translation>Opcions de la línia d'ordres</translation>
|
<translation>Opcions de la línia d'ordres</translation>
|
||||||
</message>
|
</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>
|
||||||
<context>
|
<context>
|
||||||
<name>Intro</name>
|
<name>Intro</name>
|
||||||
|
@ -954,14 +894,6 @@ Address: %4
|
||||||
<source>&Main</source>
|
<source>&Main</source>
|
||||||
<translation>&Principal</translation>
|
<translation>&Principal</translation>
|
||||||
</message>
|
</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>&Start Bitcoin on system login</source>
|
|
||||||
<translation>&Inicia el Bitcoin a l'inici de sessió del sistema.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Size of &database cache</source>
|
<source>Size of &database cache</source>
|
||||||
<translation>Mida de la memòria cau de la base de &dades</translation>
|
<translation>Mida de la memòria cau de la base de &dades</translation>
|
||||||
|
@ -1074,10 +1006,6 @@ Address: %4
|
||||||
<source>&Minimize to the tray instead of the taskbar</source>
|
<source>&Minimize to the tray instead of the taskbar</source>
|
||||||
<translation>&Minimitza a la barra d'aplicacions en comptes de la barra de tasques</translation>
|
<translation>&Minimitza a la barra d'aplicacions en comptes de la barra de tasques</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>M&inimize on close</source>
|
<source>M&inimize on close</source>
|
||||||
<translation>M&inimitza en tancar</translation>
|
<translation>M&inimitza en tancar</translation>
|
||||||
|
@ -1090,10 +1018,6 @@ Address: %4
|
||||||
<source>User Interface &language:</source>
|
<source>User Interface &language:</source>
|
||||||
<translation>&Llengua de la interfície d'usuari:</translation>
|
<translation>&Llengua de la interfície d'usuari:</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>&Unit to show amounts in:</source>
|
<source>&Unit to show amounts in:</source>
|
||||||
<translation>&Unitats per mostrar els imports en:</translation>
|
<translation>&Unitats per mostrar els imports en:</translation>
|
||||||
|
@ -1130,10 +1054,6 @@ Address: %4
|
||||||
<source>Client restart required to activate changes.</source>
|
<source>Client restart required to activate changes.</source>
|
||||||
<translation>Cal reiniciar el client per activar els canvis.</translation>
|
<translation>Cal reiniciar el client per activar els canvis.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Client will be shutdown, do you want to proceed?</source>
|
|
||||||
<translation>S'aturarà el client, voleu procedir?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>This change would require a client restart.</source>
|
<source>This change would require a client restart.</source>
|
||||||
<translation>Amb aquest canvi cal un reinici del client.</translation>
|
<translation>Amb aquest canvi cal un reinici del client.</translation>
|
||||||
|
@ -1240,10 +1160,6 @@ Address: %4
|
||||||
<source>Payment request network doesn't match client network.</source>
|
<source>Payment request network doesn't match client network.</source>
|
||||||
<translation>La xarxa de la sol·licitud de pagament no coincideix amb la xarxa del client.</translation>
|
<translation>La xarxa de la sol·licitud de pagament no coincideix amb la xarxa del client.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Payment request has expired.</source>
|
|
||||||
<translation>La sol·licitud de pagament ha caducat.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Payment request is not initialized.</source>
|
<source>Payment request is not initialized.</source>
|
||||||
<translation>La sol·licitud de pagament no està inicialitzada.</translation>
|
<translation>La sol·licitud de pagament no està inicialitzada.</translation>
|
||||||
|
@ -1319,10 +1235,6 @@ Address: %4
|
||||||
<source>User Agent</source>
|
<source>User Agent</source>
|
||||||
<translation>Agent d'usuari</translation>
|
<translation>Agent d'usuari</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Address/Hostname</source>
|
|
||||||
<translation>Adreça / nom de l'ordinador</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Ping Time</source>
|
<source>Ping Time</source>
|
||||||
<translation>Temps de ping</translation>
|
<translation>Temps de ping</translation>
|
||||||
|
@ -1354,14 +1266,6 @@ Address: %4
|
||||||
<source>%1 s</source>
|
<source>%1 s</source>
|
||||||
<translation>%1 s</translation>
|
<translation>%1 s</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>NETWORK</source>
|
|
||||||
<translation>XARXA</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>UNKNOWN</source>
|
|
||||||
<translation>DESCONEGUT</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>None</source>
|
<source>None</source>
|
||||||
<translation>Cap</translation>
|
<translation>Cap</translation>
|
||||||
|
@ -1560,18 +1464,10 @@ Address: %4
|
||||||
<source>Debug log file</source>
|
<source>Debug log file</source>
|
||||||
<translation>Fitxer de registre de depuració</translation>
|
<translation>Fitxer de registre de depuració</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Clear console</source>
|
<source>Clear console</source>
|
||||||
<translation>Neteja la consola</translation>
|
<translation>Neteja la consola</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Welcome to the Bitcoin RPC console.</source>
|
|
||||||
<translation>Us donem la benvinguda a la consola RPC de Bitcoin</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
||||||
<translation>Utilitza les fletxes d'amunt i avall per navegar per l'historial, i <b>Ctrl-L<\b> per netejar la pantalla.</translation>
|
<translation>Utilitza les fletxes d'amunt i avall per navegar per l'historial, i <b>Ctrl-L<\b> per netejar la pantalla.</translation>
|
||||||
|
@ -1860,14 +1756,6 @@ Address: %4
|
||||||
<source>collapse fee-settings</source>
|
<source>collapse fee-settings</source>
|
||||||
<translation>redueix els paràmetres de comissió</translation>
|
<translation>redueix els paràmetres de comissió</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>per kilobyte</source>
|
<source>per kilobyte</source>
|
||||||
<translation>per kilobyte</translation>
|
<translation>per kilobyte</translation>
|
||||||
|
@ -1996,10 +1884,6 @@ Address: %4
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<translation>o</translation>
|
<translation>o</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The amount to pay must be larger than 0.</source>
|
<source>The amount to pay must be larger than 0.</source>
|
||||||
<translation>L'import a pagar ha de ser major que 0.</translation>
|
<translation>L'import a pagar ha de ser major que 0.</translation>
|
||||||
|
@ -2012,10 +1896,6 @@ Address: %4
|
||||||
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
|
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
|
||||||
<translation>El total excedeix el teu balanç quan s'afegeix la comissió a la transacció %1.</translation>
|
<translation>El total excedeix el teu balanç quan s'afegeix la comissió a la transacció %1.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Transaction creation failed!</source>
|
<source>Transaction creation failed!</source>
|
||||||
<translation>Ha fallat la creació de la transacció!</translation>
|
<translation>Ha fallat la creació de la transacció!</translation>
|
||||||
|
@ -2024,18 +1904,10 @@ Address: %4
|
||||||
<source>The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
|
<source>The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
|
||||||
<translation>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>
|
<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>
|
||||||
<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>
|
<message>
|
||||||
<source>Pay only the minimum fee of %1</source>
|
<source>Pay only the minimum fee of %1</source>
|
||||||
<translation>Paga només la comissió mínima de %1</translation>
|
<translation>Paga només la comissió mínima de %1</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Warning: Invalid Bitcoin address</source>
|
<source>Warning: Invalid Bitcoin address</source>
|
||||||
<translation>Avís: adreça Bitcoin no vàlida</translation>
|
<translation>Avís: adreça Bitcoin no vàlida</translation>
|
||||||
|
@ -2111,10 +1983,6 @@ Address: %4
|
||||||
<source>Message:</source>
|
<source>Message:</source>
|
||||||
<translation>Missatge:</translation>
|
<translation>Missatge:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>This is a verified payment request.</source>
|
|
||||||
<translation>Aquesta és una sol·licitud de pagament verificada.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Enter a label for this address to add it to the list of used addresses</source>
|
<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>
|
<translation>Introduïu una etiqueta per a aquesta adreça per afegir-la a la llista d'adreces utilitzades</translation>
|
||||||
|
@ -2123,10 +1991,6 @@ Address: %4
|
||||||
<source>A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network.</source>
|
<source>A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network.</source>
|
||||||
<translation>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>
|
<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>
|
||||||
<message>
|
|
||||||
<source>This is an unverified payment request.</source>
|
|
||||||
<translation>Aquesta és una sol·licitud de pagament no verificada.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Pay To:</source>
|
<source>Pay To:</source>
|
||||||
<translation>Paga a:</translation>
|
<translation>Paga a:</translation>
|
||||||
|
@ -2157,10 +2021,6 @@ Address: %4
|
||||||
<source>&Sign Message</source>
|
<source>&Sign Message</source>
|
||||||
<translation>&Signa el missatge</translation>
|
<translation>&Signa el missatge</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The Bitcoin address to sign the message with</source>
|
<source>The Bitcoin address to sign the message with</source>
|
||||||
<translation>L'adreça Bitcoin amb què signar el missatge</translation>
|
<translation>L'adreça Bitcoin amb què signar el missatge</translation>
|
||||||
|
@ -2213,10 +2073,6 @@ Address: %4
|
||||||
<source>&Verify Message</source>
|
<source>&Verify Message</source>
|
||||||
<translation>&Verifica el missatge</translation>
|
<translation>&Verifica el missatge</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The Bitcoin address the message was signed with</source>
|
<source>The Bitcoin address the message was signed with</source>
|
||||||
<translation>L'adreça Bitcoin amb què va ser signat el missatge</translation>
|
<translation>L'adreça Bitcoin amb què va ser signat el missatge</translation>
|
||||||
|
@ -2480,10 +2336,6 @@ Address: %4
|
||||||
<source>Type</source>
|
<source>Type</source>
|
||||||
<translation>Tipus</translation>
|
<translation>Tipus</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Address</source>
|
|
||||||
<translation>Adreça</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Immature (%1 confirmations, will be available after %2)</source>
|
<source>Immature (%1 confirmations, will be available after %2)</source>
|
||||||
<translation>Immadur (%1 confirmacions, serà disponible després de %2)</translation>
|
<translation>Immadur (%1 confirmacions, serà disponible després de %2)</translation>
|
||||||
|
@ -2512,6 +2364,10 @@ Address: %4
|
||||||
<source>Offline</source>
|
<source>Offline</source>
|
||||||
<translation>Fora de línia</translation>
|
<translation>Fora de línia</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Label</source>
|
||||||
|
<translation>Etiqueta</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unconfirmed</source>
|
<source>Unconfirmed</source>
|
||||||
<translation>Sense confirmar</translation>
|
<translation>Sense confirmar</translation>
|
||||||
|
@ -2568,10 +2424,6 @@ Address: %4
|
||||||
<source>Whether or not a watch-only address is involved in this transaction.</source>
|
<source>Whether or not a watch-only address is involved in this transaction.</source>
|
||||||
<translation>Si està implicada o no una adreça només de lectura en la transacció.</translation>
|
<translation>Si està implicada o no una adreça només de lectura en la transacció.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Destination address of transaction.</source>
|
|
||||||
<translation>Adreça del destinatari de la transacció.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Amount removed from or added to balance.</source>
|
<source>Amount removed from or added to balance.</source>
|
||||||
<translation>Import extret o afegit del balanç.</translation>
|
<translation>Import extret o afegit del balanç.</translation>
|
||||||
|
@ -2902,10 +2754,6 @@ Address: %4
|
||||||
<source>Debugging/Testing options:</source>
|
<source>Debugging/Testing options:</source>
|
||||||
<translation>Opcions de depuració/proves:</translation>
|
<translation>Opcions de depuració/proves:</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Do not load the wallet and disable wallet RPC calls</source>
|
<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>
|
<translation>No carreguis el moneder i inhabilita les crides RPC del moneder</translation>
|
||||||
|
@ -2966,10 +2814,6 @@ Address: %4
|
||||||
<source>Only connect to nodes in network <net> (ipv4, ipv6 or onion)</source>
|
<source>Only connect to nodes in network <net> (ipv4, ipv6 or onion)</source>
|
||||||
<translation>Només connecta als nodes de la xarxa <net> (ipv4, ipv6 o onion)</translation>
|
<translation>Només connecta als nodes de la xarxa <net> (ipv4, ipv6 o onion)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
|
<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>
|
<translation>Defineix la mida de la memòria cau de la base de dades en megabytes (%d a %d, per defecte: %d)</translation>
|
||||||
|
@ -3030,10 +2874,6 @@ Address: %4
|
||||||
<source>Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.</source>
|
<source>Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.</source>
|
||||||
<translation>No es pot obtenir un bloqueig del directori de dades %s. El Bitcoin Core probablement ja s'estigui executant.</translation>
|
<translation>No es pot obtenir un bloqueig del directori de dades %s. El Bitcoin Core probablement ja s'estigui executant.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:%u)</source>
|
|
||||||
<translation>Limita contínuament la freqüència de les transaccions gratuïtes a <n>*1000 bytes per minut (per defecte: %u)</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
|
<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>
|
<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>
|
||||||
|
@ -3070,18 +2910,10 @@ Address: %4
|
||||||
<source>Maximum size of data in data carrier transactions we relay and mine (default: %u)</source>
|
<source>Maximum size of data in data carrier transactions we relay and mine (default: %u)</source>
|
||||||
<translation>Mida màxima de les dades en les transaccions de l'operador en què confiem i en les meves (per defecte: %u)</translation>
|
<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>
|
||||||
<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>
|
<message>
|
||||||
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
|
<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>
|
<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>
|
||||||
<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>
|
<message>
|
||||||
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
|
<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>
|
<translation>Defineix la mida màxima de transaccions d'alta prioritat / baixa comissió en bytes (per defecte: %d)</translation>
|
||||||
|
@ -3137,6 +2969,10 @@ per exemple: alertnotify=echo %%s | mail -s "Avís de Bitcoin" admin@foo.com</tr
|
||||||
<source>Cannot resolve -whitebind address: '%s'</source>
|
<source>Cannot resolve -whitebind address: '%s'</source>
|
||||||
<translation>No es pot resoldre l'adreça -whitebind: «%s»</translation>
|
<translation>No es pot resoldre l'adreça -whitebind: «%s»</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Connect through SOCKS5 proxy</source>
|
<source>Connect through SOCKS5 proxy</source>
|
||||||
<translation>Connecta a través del proxy SOCKS5</translation>
|
<translation>Connecta a través del proxy SOCKS5</translation>
|
||||||
|
@ -3233,10 +3069,22 @@ per exemple: alertnotify=echo %%s | mail -s "Avís de Bitcoin" admin@foo.com</tr
|
||||||
<source>Send transactions as zero-fee transactions if possible (default: %u)</source>
|
<source>Send transactions as zero-fee transactions if possible (default: %u)</source>
|
||||||
<translation>Envia les transaccions com a transaccions de comissió zero sempre que sigui possible (per defecte: %u) </translation>
|
<translation>Envia les transaccions com a transaccions de comissió zero sempre que sigui possible (per defecte: %u) </translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Show all debugging options (usage: --help -help-debug)</source>
|
<source>Show all debugging options (usage: --help -help-debug)</source>
|
||||||
<translation>Mostra totes les opcions de depuració (ús: --help --help-debug)</translation>
|
<translation>Mostra totes les opcions de depuració (ús: --help --help-debug)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
|
<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>
|
<translation>Redueix el fitxer debug.log durant l'inici del client (per defecte: 1 quan no -debug)</translation>
|
||||||
|
@ -3245,6 +3093,10 @@ per exemple: alertnotify=echo %%s | mail -s "Avís de Bitcoin" admin@foo.com</tr
|
||||||
<source>Signing transaction failed</source>
|
<source>Signing transaction failed</source>
|
||||||
<translation>Ha fallat la signatura de la transacció</translation>
|
<translation>Ha fallat la signatura de la transacció</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Start minimized</source>
|
||||||
|
<translation>Inicia minimitzat</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This is experimental software.</source>
|
<source>This is experimental software.</source>
|
||||||
<translation>Això és programari experimental.</translation>
|
<translation>Això és programari experimental.</translation>
|
||||||
|
@ -3285,10 +3137,6 @@ per exemple: alertnotify=echo %%s | mail -s "Avís de Bitcoin" admin@foo.com</tr
|
||||||
<source>Warning</source>
|
<source>Warning</source>
|
||||||
<translation>Avís</translation>
|
<translation>Avís</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
|
<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>
|
<translation>Avís: s'ha ignorat l'argument no acceptat de -benchmark. Feu servir -debug=bench.</translation>
|
||||||
|
|
|
@ -83,7 +83,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Comma separated file (*.csv)</source>
|
<source>Comma separated file (*.csv)</source>
|
||||||
<translation>Fitxer de separació amb comes (*.csv)</translation>
|
<translation>Fitxer separat per comes (*.csv)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Exporting Failed</source>
|
<source>Exporting Failed</source>
|
||||||
|
@ -151,10 +151,6 @@
|
||||||
<source>Change passphrase</source>
|
<source>Change passphrase</source>
|
||||||
<translation>Canvia la contrasenya</translation>
|
<translation>Canvia la contrasenya</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Confirm wallet encryption</source>
|
<source>Confirm wallet encryption</source>
|
||||||
<translation>Confirma l'encriptació del moneder</translation>
|
<translation>Confirma l'encriptació del moneder</translation>
|
||||||
|
@ -183,10 +179,6 @@
|
||||||
<source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>.</source>
|
<source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>.</source>
|
||||||
<translation>Introduïu la contrasenya nova al moneder.<br/>Utilitzeu una contrasenya de <b>deu o més caràcters aleatoris</b>, o <b>vuit o més paraules</b>.</translation>
|
<translation>Introduïu la contrasenya nova al moneder.<br/>Utilitzeu una contrasenya de <b>deu o més caràcters aleatoris</b>, o <b>vuit o més paraules</b>.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Wallet encryption failed</source>
|
<source>Wallet encryption failed</source>
|
||||||
<translation>L'encriptació del moneder ha fallat</translation>
|
<translation>L'encriptació del moneder ha fallat</translation>
|
||||||
|
@ -306,10 +298,6 @@
|
||||||
<source>Send coins to a Bitcoin address</source>
|
<source>Send coins to a Bitcoin address</source>
|
||||||
<translation>Envia monedes a una adreça Bitcoin</translation>
|
<translation>Envia monedes a una adreça Bitcoin</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Modify configuration options for Bitcoin</source>
|
|
||||||
<translation>Modifica les opcions de configuració per bitcoin</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Backup wallet to another location</source>
|
<source>Backup wallet to another location</source>
|
||||||
<translation>Realitza una còpia de seguretat del moneder a una altra ubicació</translation>
|
<translation>Realitza una còpia de seguretat del moneder a una altra ubicació</translation>
|
||||||
|
@ -448,7 +436,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Information</source>
|
<source>Information</source>
|
||||||
<translation>Informació</translation>
|
<translation>&Informació</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Up to date</source>
|
<source>Up to date</source>
|
||||||
|
@ -466,14 +454,6 @@
|
||||||
<source>Incoming transaction</source>
|
<source>Incoming transaction</source>
|
||||||
<translation>Transacció entrant</translation>
|
<translation>Transacció entrant</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
||||||
<translation>El moneder està <b>encriptat</b> i actualment <b>desbloquejat</b></translation>
|
<translation>El moneder està <b>encriptat</b> i actualment <b>desbloquejat</b></translation>
|
||||||
|
@ -510,7 +490,7 @@ Address: %4
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Fee:</source>
|
<source>Fee:</source>
|
||||||
<translation>Quota:</translation>
|
<translation>Comissió:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Dust:</source>
|
<source>Dust:</source>
|
||||||
|
@ -558,11 +538,11 @@ Address: %4
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy address</source>
|
<source>Copy address</source>
|
||||||
<translation>Copiar adreça </translation>
|
<translation>Copia l'adreça</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy label</source>
|
<source>Copy label</source>
|
||||||
<translation>Copiar etiqueta</translation>
|
<translation>Copia l'etiqueta</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy amount</source>
|
<source>Copy amount</source>
|
||||||
|
@ -586,7 +566,7 @@ Address: %4
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy fee</source>
|
<source>Copy fee</source>
|
||||||
<translation>Copia la comissió</translation>
|
<translation>Copia la comissi</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy after fee</source>
|
<source>Copy after fee</source>
|
||||||
|
@ -664,10 +644,6 @@ Address: %4
|
||||||
<source>no</source>
|
<source>no</source>
|
||||||
<translation>no</translation>
|
<translation>no</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>This means a fee of at least %1 per kB is required.</source>
|
<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>
|
<translation>Això comporta una comissi d'almenys %1 per kB.</translation>
|
||||||
|
@ -680,14 +656,6 @@ Address: %4
|
||||||
<source>Transactions with higher priority are more likely to get included into a block.</source>
|
<source>Transactions with higher priority are more likely to get included into a block.</source>
|
||||||
<translation>Les transaccions amb una major prioritat són més propenses a ser incloses en un bloc.</translation>
|
<translation>Les transaccions amb una major prioritat són més propenses a ser incloses en un bloc.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>(no label)</source>
|
<source>(no label)</source>
|
||||||
<translation>(sense etiqueta)</translation>
|
<translation>(sense etiqueta)</translation>
|
||||||
|
@ -809,30 +777,6 @@ Address: %4
|
||||||
<source>command-line options</source>
|
<source>command-line options</source>
|
||||||
<translation>Opcions de la línia d'ordes</translation>
|
<translation>Opcions de la línia d'ordes</translation>
|
||||||
</message>
|
</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>
|
||||||
<context>
|
<context>
|
||||||
<name>Intro</name>
|
<name>Intro</name>
|
||||||
|
@ -906,14 +850,6 @@ Address: %4
|
||||||
<source>&Main</source>
|
<source>&Main</source>
|
||||||
<translation>&Principal</translation>
|
<translation>&Principal</translation>
|
||||||
</message>
|
</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>&Start Bitcoin on system login</source>
|
|
||||||
<translation>&Inicia el Bitcoin a l'inici de sessió del sistema.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Size of &database cache</source>
|
<source>Size of &database cache</source>
|
||||||
<translation>Mida de la memòria cau de la base de &dades</translation>
|
<translation>Mida de la memòria cau de la base de &dades</translation>
|
||||||
|
@ -1018,10 +954,6 @@ Address: %4
|
||||||
<source>&Minimize to the tray instead of the taskbar</source>
|
<source>&Minimize to the tray instead of the taskbar</source>
|
||||||
<translation>&Minimitza a la barra d'aplicacions en comptes de la barra de tasques</translation>
|
<translation>&Minimitza a la barra d'aplicacions en comptes de la barra de tasques</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>M&inimize on close</source>
|
<source>M&inimize on close</source>
|
||||||
<translation>M&inimitza en tancar</translation>
|
<translation>M&inimitza en tancar</translation>
|
||||||
|
@ -1034,10 +966,6 @@ Address: %4
|
||||||
<source>User Interface &language:</source>
|
<source>User Interface &language:</source>
|
||||||
<translation>&Llengua de la interfície d'usuari:</translation>
|
<translation>&Llengua de la interfície d'usuari:</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>&Unit to show amounts in:</source>
|
<source>&Unit to show amounts in:</source>
|
||||||
<translation>&Unitats per mostrar els imports en:</translation>
|
<translation>&Unitats per mostrar els imports en:</translation>
|
||||||
|
@ -1074,10 +1002,6 @@ Address: %4
|
||||||
<source>Client restart required to activate changes.</source>
|
<source>Client restart required to activate changes.</source>
|
||||||
<translation>Cal reiniciar el client per activar els canvis.</translation>
|
<translation>Cal reiniciar el client per activar els canvis.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Client will be shutdown, do you want to proceed?</source>
|
|
||||||
<translation>Es pararà el client, voleu procedir?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>This change would require a client restart.</source>
|
<source>This change would require a client restart.</source>
|
||||||
<translation>Amb este canvi cal un reinici del client.</translation>
|
<translation>Amb este canvi cal un reinici del client.</translation>
|
||||||
|
@ -1172,10 +1096,6 @@ Address: %4
|
||||||
<source>Payment request network doesn't match client network.</source>
|
<source>Payment request network doesn't match client network.</source>
|
||||||
<translation>La xarxa de la sol·licitud de pagament no coincideix amb la xarxa del client.</translation>
|
<translation>La xarxa de la sol·licitud de pagament no coincideix amb la xarxa del client.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Payment request has expired.</source>
|
|
||||||
<translation>La sol·licitud de pagament ha caducat.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Payment request is not initialized.</source>
|
<source>Payment request is not initialized.</source>
|
||||||
<translation>La sol·licitud de pagament no està inicialitzada.</translation>
|
<translation>La sol·licitud de pagament no està inicialitzada.</translation>
|
||||||
|
@ -1243,10 +1163,6 @@ Address: %4
|
||||||
<source>User Agent</source>
|
<source>User Agent</source>
|
||||||
<translation>Agent d'usuari</translation>
|
<translation>Agent d'usuari</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Address/Hostname</source>
|
|
||||||
<translation>Adreça / nom de l'ordinador</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Ping Time</source>
|
<source>Ping Time</source>
|
||||||
<translation>Temps de ping</translation>
|
<translation>Temps de ping</translation>
|
||||||
|
@ -1278,14 +1194,6 @@ Address: %4
|
||||||
<source>%1 s</source>
|
<source>%1 s</source>
|
||||||
<translation>%1 s</translation>
|
<translation>%1 s</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>NETWORK</source>
|
|
||||||
<translation>XARXA</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>UNKNOWN</source>
|
|
||||||
<translation>DESCONEGUT</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>None</source>
|
<source>None</source>
|
||||||
<translation>Cap</translation>
|
<translation>Cap</translation>
|
||||||
|
@ -1484,18 +1392,10 @@ Address: %4
|
||||||
<source>Debug log file</source>
|
<source>Debug log file</source>
|
||||||
<translation>Fitxer de registre de depuració</translation>
|
<translation>Fitxer de registre de depuració</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Clear console</source>
|
<source>Clear console</source>
|
||||||
<translation>Neteja la consola</translation>
|
<translation>Neteja la consola</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Welcome to the Bitcoin RPC console.</source>
|
|
||||||
<translation>Vos donem la benvinguda a la consola RPC de Bitcoin</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
||||||
<translation>Utilitza les fletxes d'amunt i avall per navegar per l'historial, i <b>Ctrl-L<\b> per netejar la pantalla.</translation>
|
<translation>Utilitza les fletxes d'amunt i avall per navegar per l'historial, i <b>Ctrl-L<\b> per netejar la pantalla.</translation>
|
||||||
|
@ -1664,7 +1564,7 @@ Address: %4
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Amount</source>
|
<source>Amount</source>
|
||||||
<translation>Import</translation>
|
<translation>Quantitat</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Label</source>
|
<source>Label</source>
|
||||||
|
@ -1699,7 +1599,7 @@ Address: %4
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Amount</source>
|
<source>Amount</source>
|
||||||
<translation>Import</translation>
|
<translation>Quantitat</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>(no label)</source>
|
<source>(no label)</source>
|
||||||
|
@ -1782,7 +1682,7 @@ Address: %4
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Clear all fields of the form.</source>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>Dust:</source>
|
<source>Dust:</source>
|
||||||
|
@ -1848,10 +1748,6 @@ Address: %4
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<translation>o</translation>
|
<translation>o</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The amount to pay must be larger than 0.</source>
|
<source>The amount to pay must be larger than 0.</source>
|
||||||
<translation>L'import a pagar ha de ser major que 0.</translation>
|
<translation>L'import a pagar ha de ser major que 0.</translation>
|
||||||
|
@ -1864,10 +1760,6 @@ Address: %4
|
||||||
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
|
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
|
||||||
<translation>El total excedeix el teu balanç quan s'afig la comisió a la transacció %1.</translation>
|
<translation>El total excedeix el teu balanç quan s'afig la comisió a la transacció %1.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Transaction creation failed!</source>
|
<source>Transaction creation failed!</source>
|
||||||
<translation>Ha fallat la creació de la transacció!</translation>
|
<translation>Ha fallat la creació de la transacció!</translation>
|
||||||
|
@ -1951,10 +1843,6 @@ Address: %4
|
||||||
<source>Message:</source>
|
<source>Message:</source>
|
||||||
<translation>Missatge:</translation>
|
<translation>Missatge:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>This is a verified payment request.</source>
|
|
||||||
<translation>Esta és una sol·licitud de pagament verificada.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Enter a label for this address to add it to the list of used addresses</source>
|
<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>
|
<translation>Introduïu una etiqueta per a esta adreça per afegir-la a la llista d'adreces utilitzades</translation>
|
||||||
|
@ -1963,10 +1851,6 @@ Address: %4
|
||||||
<source>A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network.</source>
|
<source>A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network.</source>
|
||||||
<translation>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>
|
<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>
|
||||||
<message>
|
|
||||||
<source>This is an unverified payment request.</source>
|
|
||||||
<translation>Esta és una sol·licitud de pagament no verificada.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Pay To:</source>
|
<source>Pay To:</source>
|
||||||
<translation>Paga a:</translation>
|
<translation>Paga a:</translation>
|
||||||
|
@ -1997,25 +1881,21 @@ Address: %4
|
||||||
<source>&Sign Message</source>
|
<source>&Sign Message</source>
|
||||||
<translation>&Signa el missatge</translation>
|
<translation>&Signa el missatge</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The Bitcoin address to sign the message with</source>
|
<source>The Bitcoin address to sign the message with</source>
|
||||||
<translation>L'adreça Bitcoin amb què signar el missatge</translation>
|
<translation>L'adreça Bitcoin amb què signar el missatge</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Choose previously used address</source>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>Alt+A</source>
|
<source>Alt+A</source>
|
||||||
<translation>Alt+A</translation>
|
<translation>Alta+A</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Paste address from clipboard</source>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>Alt+P</source>
|
<source>Alt+P</source>
|
||||||
|
@ -2053,10 +1933,6 @@ Address: %4
|
||||||
<source>&Verify Message</source>
|
<source>&Verify Message</source>
|
||||||
<translation>&Verifica el missatge</translation>
|
<translation>&Verifica el missatge</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The Bitcoin address the message was signed with</source>
|
<source>The Bitcoin address the message was signed with</source>
|
||||||
<translation>L'adreça Bitcoin amb què va ser signat el missatge</translation>
|
<translation>L'adreça Bitcoin amb què va ser signat el missatge</translation>
|
||||||
|
@ -2130,7 +2006,7 @@ Address: %4
|
||||||
<name>SplashScreen</name>
|
<name>SplashScreen</name>
|
||||||
<message>
|
<message>
|
||||||
<source>Bitcoin Core</source>
|
<source>Bitcoin Core</source>
|
||||||
<translation>Bitcoin Core</translation>
|
<translation>Nucli de Bitcoin</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>The Bitcoin Core developers</source>
|
<source>The Bitcoin Core developers</source>
|
||||||
|
@ -2308,10 +2184,6 @@ Address: %4
|
||||||
<source>Type</source>
|
<source>Type</source>
|
||||||
<translation>Tipus</translation>
|
<translation>Tipus</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Address</source>
|
|
||||||
<translation>Adreça</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Immature (%1 confirmations, will be available after %2)</source>
|
<source>Immature (%1 confirmations, will be available after %2)</source>
|
||||||
<translation>Immadur (%1 confirmacions, serà disponible després de %2)</translation>
|
<translation>Immadur (%1 confirmacions, serà disponible després de %2)</translation>
|
||||||
|
@ -2336,6 +2208,10 @@ Address: %4
|
||||||
<source>Offline</source>
|
<source>Offline</source>
|
||||||
<translation>Fora de línia</translation>
|
<translation>Fora de línia</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Label</source>
|
||||||
|
<translation>Etiqueta</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unconfirmed</source>
|
<source>Unconfirmed</source>
|
||||||
<translation>Sense confirmar</translation>
|
<translation>Sense confirmar</translation>
|
||||||
|
@ -2388,10 +2264,6 @@ Address: %4
|
||||||
<source>Type of transaction.</source>
|
<source>Type of transaction.</source>
|
||||||
<translation>Tipus de transacció.</translation>
|
<translation>Tipus de transacció.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Destination address of transaction.</source>
|
|
||||||
<translation>Adreça del destinatari de la transacció.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Amount removed from or added to balance.</source>
|
<source>Amount removed from or added to balance.</source>
|
||||||
<translation>Import extret o afegit del balanç.</translation>
|
<translation>Import extret o afegit del balanç.</translation>
|
||||||
|
@ -2461,7 +2333,7 @@ Address: %4
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy label</source>
|
<source>Copy label</source>
|
||||||
<translation>Copiar etiqueta</translation>
|
<translation>Copia l'etiqueta</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy amount</source>
|
<source>Copy amount</source>
|
||||||
|
@ -2710,10 +2582,6 @@ Address: %4
|
||||||
<source>Debugging/Testing options:</source>
|
<source>Debugging/Testing options:</source>
|
||||||
<translation>Opcions de depuració/proves:</translation>
|
<translation>Opcions de depuració/proves:</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Do not load the wallet and disable wallet RPC calls</source>
|
<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>
|
<translation>No carreguis el moneder i inhabilita les crides RPC del moneder</translation>
|
||||||
|
@ -2766,10 +2634,6 @@ Address: %4
|
||||||
<source>Not enough file descriptors available.</source>
|
<source>Not enough file descriptors available.</source>
|
||||||
<translation>No hi ha suficient descriptors de fitxers disponibles.</translation>
|
<translation>No hi ha suficient descriptors de fitxers disponibles.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
|
<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>
|
<translation>Defineix la mida de la memòria cau de la base de dades en megabytes (%d a %d, per defecte: %d)</translation>
|
||||||
|
@ -2874,6 +2738,10 @@ Address: %4
|
||||||
<source>Cannot resolve -whitebind address: '%s'</source>
|
<source>Cannot resolve -whitebind address: '%s'</source>
|
||||||
<translation>No es pot resoldre l'adreça -whitebind: «%s»</translation>
|
<translation>No es pot resoldre l'adreça -whitebind: «%s»</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Connect through SOCKS5 proxy</source>
|
<source>Connect through SOCKS5 proxy</source>
|
||||||
<translation>Connecta a través del proxy SOCKS5</translation>
|
<translation>Connecta a través del proxy SOCKS5</translation>
|
||||||
|
@ -2950,10 +2818,22 @@ Address: %4
|
||||||
<source>Send trace/debug info to console instead of debug.log file</source>
|
<source>Send trace/debug info to console instead of debug.log file</source>
|
||||||
<translation>Envia informació de traça/depuració a la consola en comptes del fitxer debug.log</translation>
|
<translation>Envia informació de traça/depuració a la consola en comptes del fitxer debug.log</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Show all debugging options (usage: --help -help-debug)</source>
|
<source>Show all debugging options (usage: --help -help-debug)</source>
|
||||||
<translation>Mostra totes les opcions de depuració (ús: --help --help-debug)</translation>
|
<translation>Mostra totes les opcions de depuració (ús: --help --help-debug)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
|
<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>
|
<translation>Redueix el fitxer debug.log durant l'inici del client (per defecte: 1 quan no -debug)</translation>
|
||||||
|
@ -2962,6 +2842,10 @@ Address: %4
|
||||||
<source>Signing transaction failed</source>
|
<source>Signing transaction failed</source>
|
||||||
<translation>Ha fallat la signatura de la transacció</translation>
|
<translation>Ha fallat la signatura de la transacció</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Start minimized</source>
|
||||||
|
<translation>Inicia minimitzat</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This is experimental software.</source>
|
<source>This is experimental software.</source>
|
||||||
<translation>Això és programari experimental.</translation>
|
<translation>Això és programari experimental.</translation>
|
||||||
|
@ -2998,10 +2882,6 @@ Address: %4
|
||||||
<source>Warning</source>
|
<source>Warning</source>
|
||||||
<translation>Avís</translation>
|
<translation>Avís</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
|
<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>
|
<translation>Avís: s'ha ignorat l'argument no acceptat de -benchmark. Feu servir -debug=bench.</translation>
|
||||||
|
|
|
@ -155,10 +155,6 @@
|
||||||
<source>Change passphrase</source>
|
<source>Change passphrase</source>
|
||||||
<translation>Canvia la contrasenya</translation>
|
<translation>Canvia la contrasenya</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Confirm wallet encryption</source>
|
<source>Confirm wallet encryption</source>
|
||||||
<translation>Confirma l'encriptació del moneder</translation>
|
<translation>Confirma l'encriptació del moneder</translation>
|
||||||
|
@ -187,10 +183,6 @@
|
||||||
<source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>.</source>
|
<source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>.</source>
|
||||||
<translation>Introduïu la contrasenya nova al moneder.<br/>Utilitzeu una contrasenya de <b>deu o més caràcters aleatoris</b>, o <b>vuit o més paraules</b>.</translation>
|
<translation>Introduïu la contrasenya nova al moneder.<br/>Utilitzeu una contrasenya de <b>deu o més caràcters aleatoris</b>, o <b>vuit o més paraules</b>.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Wallet encryption failed</source>
|
<source>Wallet encryption failed</source>
|
||||||
<translation>L'encriptació del moneder ha fallat</translation>
|
<translation>L'encriptació del moneder ha fallat</translation>
|
||||||
|
@ -310,10 +302,6 @@
|
||||||
<source>Send coins to a Bitcoin address</source>
|
<source>Send coins to a Bitcoin address</source>
|
||||||
<translation>Envia monedes a una adreça Bitcoin</translation>
|
<translation>Envia monedes a una adreça Bitcoin</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Modify configuration options for Bitcoin</source>
|
|
||||||
<translation>Modifica les opcions de configuració per bitcoin</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Backup wallet to another location</source>
|
<source>Backup wallet to another location</source>
|
||||||
<translation>Realitza una còpia de seguretat del moneder a una altra ubicació</translation>
|
<translation>Realitza una còpia de seguretat del moneder a una altra ubicació</translation>
|
||||||
|
@ -478,10 +466,6 @@
|
||||||
<source>Up to date</source>
|
<source>Up to date</source>
|
||||||
<translation>Al dia</translation>
|
<translation>Al dia</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Catching up...</source>
|
<source>Catching up...</source>
|
||||||
<translation>S'està posant al dia ...</translation>
|
<translation>S'està posant al dia ...</translation>
|
||||||
|
@ -494,14 +478,6 @@
|
||||||
<source>Incoming transaction</source>
|
<source>Incoming transaction</source>
|
||||||
<translation>Transacció entrant</translation>
|
<translation>Transacció entrant</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
||||||
<translation>El moneder està <b>encriptat</b> i actualment <b>desbloquejat</b></translation>
|
<translation>El moneder està <b>encriptat</b> i actualment <b>desbloquejat</b></translation>
|
||||||
|
@ -704,10 +680,6 @@ Address: %4
|
||||||
<source>no</source>
|
<source>no</source>
|
||||||
<translation>no</translation>
|
<translation>no</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>This means a fee of at least %1 per kB is required.</source>
|
<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>
|
<translation>Això comporta una comissió d'almenys %1 per kB.</translation>
|
||||||
|
@ -720,14 +692,6 @@ Address: %4
|
||||||
<source>Transactions with higher priority are more likely to get included into a block.</source>
|
<source>Transactions with higher priority are more likely to get included into a block.</source>
|
||||||
<translation>Les transaccions amb una major prioritat són més propenses a ser incloses en un bloc.</translation>
|
<translation>Les transaccions amb una major prioritat són més propenses a ser incloses en un bloc.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>(no label)</source>
|
<source>(no label)</source>
|
||||||
<translation>(sense etiqueta)</translation>
|
<translation>(sense etiqueta)</translation>
|
||||||
|
@ -849,30 +813,6 @@ Address: %4
|
||||||
<source>command-line options</source>
|
<source>command-line options</source>
|
||||||
<translation>Opcions de la línia d'ordres</translation>
|
<translation>Opcions de la línia d'ordres</translation>
|
||||||
</message>
|
</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>
|
||||||
<context>
|
<context>
|
||||||
<name>Intro</name>
|
<name>Intro</name>
|
||||||
|
@ -954,14 +894,6 @@ Address: %4
|
||||||
<source>&Main</source>
|
<source>&Main</source>
|
||||||
<translation>&Principal</translation>
|
<translation>&Principal</translation>
|
||||||
</message>
|
</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>&Start Bitcoin on system login</source>
|
|
||||||
<translation>&Inicia el Bitcoin a l'inici de sessió del sistema.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Size of &database cache</source>
|
<source>Size of &database cache</source>
|
||||||
<translation>Mida de la memòria cau de la base de &dades</translation>
|
<translation>Mida de la memòria cau de la base de &dades</translation>
|
||||||
|
@ -1074,10 +1006,6 @@ Address: %4
|
||||||
<source>&Minimize to the tray instead of the taskbar</source>
|
<source>&Minimize to the tray instead of the taskbar</source>
|
||||||
<translation>&Minimitza a la barra d'aplicacions en comptes de la barra de tasques</translation>
|
<translation>&Minimitza a la barra d'aplicacions en comptes de la barra de tasques</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>M&inimize on close</source>
|
<source>M&inimize on close</source>
|
||||||
<translation>M&inimitza en tancar</translation>
|
<translation>M&inimitza en tancar</translation>
|
||||||
|
@ -1090,10 +1018,6 @@ Address: %4
|
||||||
<source>User Interface &language:</source>
|
<source>User Interface &language:</source>
|
||||||
<translation>&Llengua de la interfície d'usuari:</translation>
|
<translation>&Llengua de la interfície d'usuari:</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>&Unit to show amounts in:</source>
|
<source>&Unit to show amounts in:</source>
|
||||||
<translation>&Unitats per mostrar els imports en:</translation>
|
<translation>&Unitats per mostrar els imports en:</translation>
|
||||||
|
@ -1130,10 +1054,6 @@ Address: %4
|
||||||
<source>Client restart required to activate changes.</source>
|
<source>Client restart required to activate changes.</source>
|
||||||
<translation>Cal reiniciar el client per activar els canvis.</translation>
|
<translation>Cal reiniciar el client per activar els canvis.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Client will be shutdown, do you want to proceed?</source>
|
|
||||||
<translation>S'aturarà el client, voleu procedir?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>This change would require a client restart.</source>
|
<source>This change would require a client restart.</source>
|
||||||
<translation>Amb aquest canvi cal un reinici del client.</translation>
|
<translation>Amb aquest canvi cal un reinici del client.</translation>
|
||||||
|
@ -1240,10 +1160,6 @@ Address: %4
|
||||||
<source>Payment request network doesn't match client network.</source>
|
<source>Payment request network doesn't match client network.</source>
|
||||||
<translation>La xarxa de la sol·licitud de pagament no coincideix amb la xarxa del client.</translation>
|
<translation>La xarxa de la sol·licitud de pagament no coincideix amb la xarxa del client.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Payment request has expired.</source>
|
|
||||||
<translation>La sol·licitud de pagament ha caducat.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Payment request is not initialized.</source>
|
<source>Payment request is not initialized.</source>
|
||||||
<translation>La sol·licitud de pagament no està inicialitzada.</translation>
|
<translation>La sol·licitud de pagament no està inicialitzada.</translation>
|
||||||
|
@ -1319,10 +1235,6 @@ Address: %4
|
||||||
<source>User Agent</source>
|
<source>User Agent</source>
|
||||||
<translation>Agent d'usuari</translation>
|
<translation>Agent d'usuari</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Address/Hostname</source>
|
|
||||||
<translation>Adreça / nom de l'ordinador</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Ping Time</source>
|
<source>Ping Time</source>
|
||||||
<translation>Temps de ping</translation>
|
<translation>Temps de ping</translation>
|
||||||
|
@ -1354,14 +1266,6 @@ Address: %4
|
||||||
<source>%1 s</source>
|
<source>%1 s</source>
|
||||||
<translation>%1 s</translation>
|
<translation>%1 s</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>NETWORK</source>
|
|
||||||
<translation>XARXA</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>UNKNOWN</source>
|
|
||||||
<translation>DESCONEGUT</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>None</source>
|
<source>None</source>
|
||||||
<translation>Cap</translation>
|
<translation>Cap</translation>
|
||||||
|
@ -1560,18 +1464,10 @@ Address: %4
|
||||||
<source>Debug log file</source>
|
<source>Debug log file</source>
|
||||||
<translation>Fitxer de registre de depuració</translation>
|
<translation>Fitxer de registre de depuració</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Clear console</source>
|
<source>Clear console</source>
|
||||||
<translation>Neteja la consola</translation>
|
<translation>Neteja la consola</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Welcome to the Bitcoin RPC console.</source>
|
|
||||||
<translation>Us donem la benvinguda a la consola RPC de Bitcoin</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
||||||
<translation>Utilitza les fletxes d'amunt i avall per navegar per l'historial, i <b>Ctrl-L<\b> per netejar la pantalla.</translation>
|
<translation>Utilitza les fletxes d'amunt i avall per navegar per l'historial, i <b>Ctrl-L<\b> per netejar la pantalla.</translation>
|
||||||
|
@ -1860,14 +1756,6 @@ Address: %4
|
||||||
<source>collapse fee-settings</source>
|
<source>collapse fee-settings</source>
|
||||||
<translation>redueix els paràmetres de comissió</translation>
|
<translation>redueix els paràmetres de comissió</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>per kilobyte</source>
|
<source>per kilobyte</source>
|
||||||
<translation>per kilobyte</translation>
|
<translation>per kilobyte</translation>
|
||||||
|
@ -1996,10 +1884,6 @@ Address: %4
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<translation>o</translation>
|
<translation>o</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The amount to pay must be larger than 0.</source>
|
<source>The amount to pay must be larger than 0.</source>
|
||||||
<translation>L'import a pagar ha de ser major que 0.</translation>
|
<translation>L'import a pagar ha de ser major que 0.</translation>
|
||||||
|
@ -2012,10 +1896,6 @@ Address: %4
|
||||||
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
|
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
|
||||||
<translation>El total excedeix el teu balanç quan s'afegeix la comissió a la transacció %1.</translation>
|
<translation>El total excedeix el teu balanç quan s'afegeix la comissió a la transacció %1.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Transaction creation failed!</source>
|
<source>Transaction creation failed!</source>
|
||||||
<translation>Ha fallat la creació de la transacció!</translation>
|
<translation>Ha fallat la creació de la transacció!</translation>
|
||||||
|
@ -2024,18 +1904,10 @@ Address: %4
|
||||||
<source>The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
|
<source>The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
|
||||||
<translation>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>
|
<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>
|
||||||
<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>
|
<message>
|
||||||
<source>Pay only the minimum fee of %1</source>
|
<source>Pay only the minimum fee of %1</source>
|
||||||
<translation>Paga només la comissió mínima de %1</translation>
|
<translation>Paga només la comissió mínima de %1</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Warning: Invalid Bitcoin address</source>
|
<source>Warning: Invalid Bitcoin address</source>
|
||||||
<translation>Avís: adreça Bitcoin no vàlida</translation>
|
<translation>Avís: adreça Bitcoin no vàlida</translation>
|
||||||
|
@ -2111,10 +1983,6 @@ Address: %4
|
||||||
<source>Message:</source>
|
<source>Message:</source>
|
||||||
<translation>Missatge:</translation>
|
<translation>Missatge:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>This is a verified payment request.</source>
|
|
||||||
<translation>Aquesta és una sol·licitud de pagament verificada.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Enter a label for this address to add it to the list of used addresses</source>
|
<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>
|
<translation>Introduïu una etiqueta per a aquesta adreça per afegir-la a la llista d'adreces utilitzades</translation>
|
||||||
|
@ -2123,10 +1991,6 @@ Address: %4
|
||||||
<source>A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network.</source>
|
<source>A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network.</source>
|
||||||
<translation>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>
|
<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>
|
||||||
<message>
|
|
||||||
<source>This is an unverified payment request.</source>
|
|
||||||
<translation>Aquesta és una sol·licitud de pagament no verificada.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Pay To:</source>
|
<source>Pay To:</source>
|
||||||
<translation>Paga a:</translation>
|
<translation>Paga a:</translation>
|
||||||
|
@ -2157,10 +2021,6 @@ Address: %4
|
||||||
<source>&Sign Message</source>
|
<source>&Sign Message</source>
|
||||||
<translation>&Signa el missatge</translation>
|
<translation>&Signa el missatge</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The Bitcoin address to sign the message with</source>
|
<source>The Bitcoin address to sign the message with</source>
|
||||||
<translation>L'adreça Bitcoin amb què signar el missatge</translation>
|
<translation>L'adreça Bitcoin amb què signar el missatge</translation>
|
||||||
|
@ -2213,10 +2073,6 @@ Address: %4
|
||||||
<source>&Verify Message</source>
|
<source>&Verify Message</source>
|
||||||
<translation>&Verifica el missatge</translation>
|
<translation>&Verifica el missatge</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The Bitcoin address the message was signed with</source>
|
<source>The Bitcoin address the message was signed with</source>
|
||||||
<translation>L'adreça Bitcoin amb què va ser signat el missatge</translation>
|
<translation>L'adreça Bitcoin amb què va ser signat el missatge</translation>
|
||||||
|
@ -2480,10 +2336,6 @@ Address: %4
|
||||||
<source>Type</source>
|
<source>Type</source>
|
||||||
<translation>Tipus</translation>
|
<translation>Tipus</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Address</source>
|
|
||||||
<translation>Adreça</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Immature (%1 confirmations, will be available after %2)</source>
|
<source>Immature (%1 confirmations, will be available after %2)</source>
|
||||||
<translation>Immadur (%1 confirmacions, serà disponible després de %2)</translation>
|
<translation>Immadur (%1 confirmacions, serà disponible després de %2)</translation>
|
||||||
|
@ -2512,6 +2364,10 @@ Address: %4
|
||||||
<source>Offline</source>
|
<source>Offline</source>
|
||||||
<translation>Fora de línia</translation>
|
<translation>Fora de línia</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Label</source>
|
||||||
|
<translation>Etiqueta</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unconfirmed</source>
|
<source>Unconfirmed</source>
|
||||||
<translation>Sense confirmar</translation>
|
<translation>Sense confirmar</translation>
|
||||||
|
@ -2568,10 +2424,6 @@ Address: %4
|
||||||
<source>Whether or not a watch-only address is involved in this transaction.</source>
|
<source>Whether or not a watch-only address is involved in this transaction.</source>
|
||||||
<translation>Si està implicada o no una adreça només de lectura en la transacció.</translation>
|
<translation>Si està implicada o no una adreça només de lectura en la transacció.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Destination address of transaction.</source>
|
|
||||||
<translation>Adreça del destinatari de la transacció.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Amount removed from or added to balance.</source>
|
<source>Amount removed from or added to balance.</source>
|
||||||
<translation>Import extret o afegit del balanç.</translation>
|
<translation>Import extret o afegit del balanç.</translation>
|
||||||
|
@ -2902,10 +2754,6 @@ Address: %4
|
||||||
<source>Debugging/Testing options:</source>
|
<source>Debugging/Testing options:</source>
|
||||||
<translation>Opcions de depuració/proves:</translation>
|
<translation>Opcions de depuració/proves:</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Do not load the wallet and disable wallet RPC calls</source>
|
<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>
|
<translation>No carreguis el moneder i inhabilita les crides RPC del moneder</translation>
|
||||||
|
@ -2966,10 +2814,6 @@ Address: %4
|
||||||
<source>Only connect to nodes in network <net> (ipv4, ipv6 or onion)</source>
|
<source>Only connect to nodes in network <net> (ipv4, ipv6 or onion)</source>
|
||||||
<translation>Només connecta als nodes de la xarxa <net> (ipv4, ipv6 o onion)</translation>
|
<translation>Només connecta als nodes de la xarxa <net> (ipv4, ipv6 o onion)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
|
<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>
|
<translation>Defineix la mida de la memòria cau de la base de dades en megabytes (%d a %d, per defecte: %d)</translation>
|
||||||
|
@ -3030,10 +2874,6 @@ Address: %4
|
||||||
<source>Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.</source>
|
<source>Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.</source>
|
||||||
<translation>No es pot obtenir un bloqueig del directori de dades %s. El Bitcoin Core probablement ja s'estigui executant.</translation>
|
<translation>No es pot obtenir un bloqueig del directori de dades %s. El Bitcoin Core probablement ja s'estigui executant.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:%u)</source>
|
|
||||||
<translation>Limita contínuament la freqüència de les transaccions gratuïtes a <n>*1000 bytes per minut (per defecte: %u)</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
|
<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>
|
<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>
|
||||||
|
@ -3070,18 +2910,10 @@ Address: %4
|
||||||
<source>Maximum size of data in data carrier transactions we relay and mine (default: %u)</source>
|
<source>Maximum size of data in data carrier transactions we relay and mine (default: %u)</source>
|
||||||
<translation>Mida màxima de les dades en les transaccions de l'operador en què confiem i en les meves (per defecte: %u)</translation>
|
<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>
|
||||||
<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>
|
<message>
|
||||||
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
|
<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>
|
<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>
|
||||||
<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>
|
<message>
|
||||||
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
|
<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>
|
<translation>Defineix la mida màxima de transaccions d'alta prioritat / baixa comissió en bytes (per defecte: %d)</translation>
|
||||||
|
@ -3137,6 +2969,10 @@ per exemple: alertnotify=echo %%s | mail -s "Avís de Bitcoin" admin@foo.com</tr
|
||||||
<source>Cannot resolve -whitebind address: '%s'</source>
|
<source>Cannot resolve -whitebind address: '%s'</source>
|
||||||
<translation>No es pot resoldre l'adreça -whitebind: «%s»</translation>
|
<translation>No es pot resoldre l'adreça -whitebind: «%s»</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Connect through SOCKS5 proxy</source>
|
<source>Connect through SOCKS5 proxy</source>
|
||||||
<translation>Connecta a través del proxy SOCKS5</translation>
|
<translation>Connecta a través del proxy SOCKS5</translation>
|
||||||
|
@ -3233,10 +3069,22 @@ per exemple: alertnotify=echo %%s | mail -s "Avís de Bitcoin" admin@foo.com</tr
|
||||||
<source>Send transactions as zero-fee transactions if possible (default: %u)</source>
|
<source>Send transactions as zero-fee transactions if possible (default: %u)</source>
|
||||||
<translation>Envia les transaccions com a transaccions de comissió zero sempre que sigui possible (per defecte: %u) </translation>
|
<translation>Envia les transaccions com a transaccions de comissió zero sempre que sigui possible (per defecte: %u) </translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Show all debugging options (usage: --help -help-debug)</source>
|
<source>Show all debugging options (usage: --help -help-debug)</source>
|
||||||
<translation>Mostra totes les opcions de depuració (ús: --help --help-debug)</translation>
|
<translation>Mostra totes les opcions de depuració (ús: --help --help-debug)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
|
<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>
|
<translation>Redueix el fitxer debug.log durant l'inici del client (per defecte: 1 quan no -debug)</translation>
|
||||||
|
@ -3245,6 +3093,10 @@ per exemple: alertnotify=echo %%s | mail -s "Avís de Bitcoin" admin@foo.com</tr
|
||||||
<source>Signing transaction failed</source>
|
<source>Signing transaction failed</source>
|
||||||
<translation>Ha fallat la signatura de la transacció</translation>
|
<translation>Ha fallat la signatura de la transacció</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Start minimized</source>
|
||||||
|
<translation>Inicia minimitzat</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This is experimental software.</source>
|
<source>This is experimental software.</source>
|
||||||
<translation>Això és programari experimental.</translation>
|
<translation>Això és programari experimental.</translation>
|
||||||
|
@ -3285,10 +3137,6 @@ per exemple: alertnotify=echo %%s | mail -s "Avís de Bitcoin" admin@foo.com</tr
|
||||||
<source>Warning</source>
|
<source>Warning</source>
|
||||||
<translation>Avís</translation>
|
<translation>Avís</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
|
<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>
|
<translation>Avís: s'ha ignorat l'argument no acceptat de -benchmark. Feu servir -debug=bench.</translation>
|
||||||
|
|
|
@ -155,10 +155,6 @@
|
||||||
<source>Change passphrase</source>
|
<source>Change passphrase</source>
|
||||||
<translation>Změň heslo</translation>
|
<translation>Změň heslo</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Confirm wallet encryption</source>
|
<source>Confirm wallet encryption</source>
|
||||||
<translation>Potvrď zašifrování peněženky</translation>
|
<translation>Potvrď zašifrování peněženky</translation>
|
||||||
|
@ -187,10 +183,6 @@
|
||||||
<source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>.</source>
|
<source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>.</source>
|
||||||
<translation>Zadej nové heslo k peněžence.<br/>Použij <b>alespoň deset náhodných znaků</b> nebo <b>alespoň osm slov</b>.</translation>
|
<translation>Zadej nové heslo k peněžence.<br/>Použij <b>alespoň deset náhodných znaků</b> nebo <b>alespoň osm slov</b>.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Wallet encryption failed</source>
|
<source>Wallet encryption failed</source>
|
||||||
<translation>Zašifrování peněženky selhalo</translation>
|
<translation>Zašifrování peněženky selhalo</translation>
|
||||||
|
@ -310,10 +302,6 @@
|
||||||
<source>Send coins to a Bitcoin address</source>
|
<source>Send coins to a Bitcoin address</source>
|
||||||
<translation>Pošli mince na Bitcoinovou adresu</translation>
|
<translation>Pošli mince na Bitcoinovou adresu</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Modify configuration options for Bitcoin</source>
|
|
||||||
<translation>Uprav nastavení Bitcoinu</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Backup wallet to another location</source>
|
<source>Backup wallet to another location</source>
|
||||||
<translation>Zazálohuj peněženku na jiné místo</translation>
|
<translation>Zazálohuj peněženku na jiné místo</translation>
|
||||||
|
@ -478,10 +466,6 @@
|
||||||
<source>Up to date</source>
|
<source>Up to date</source>
|
||||||
<translation>Aktuální</translation>
|
<translation>Aktuální</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Catching up...</source>
|
<source>Catching up...</source>
|
||||||
<translation>Stahuji...</translation>
|
<translation>Stahuji...</translation>
|
||||||
|
@ -494,18 +478,6 @@
|
||||||
<source>Incoming transaction</source>
|
<source>Incoming transaction</source>
|
||||||
<translation>Příchozí transakce</translation>
|
<translation>Příchozí transakce</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Date: %1
|
|
||||||
Amount: %2
|
|
||||||
Type: %3
|
|
||||||
Address: %4
|
|
||||||
</source>
|
|
||||||
<translation>Datum: %1
|
|
||||||
Částka: %2
|
|
||||||
Typ: %3
|
|
||||||
Adresa: %4
|
|
||||||
</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
||||||
<translation>Peněženka je <b>zašifrovaná</b> a momentálně <b>odemčená</b></translation>
|
<translation>Peněženka je <b>zašifrovaná</b> a momentálně <b>odemčená</b></translation>
|
||||||
|
@ -708,10 +680,6 @@ Adresa: %4
|
||||||
<source>no</source>
|
<source>no</source>
|
||||||
<translation>ne</translation>
|
<translation>ne</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>This means a fee of at least %1 per kB is required.</source>
|
<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>
|
<translation>To znamená, že je vyžadován poplatek alespoň %1 za kB.</translation>
|
||||||
|
@ -724,14 +692,6 @@ Adresa: %4
|
||||||
<source>Transactions with higher priority are more likely to get included into a block.</source>
|
<source>Transactions with higher priority are more likely to get included into a block.</source>
|
||||||
<translation>Transakce s vyšší prioritou mají větší šanci na zařazení do bloku.</translation>
|
<translation>Transakce s vyšší prioritou mají větší šanci na zařazení do bloku.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>(no label)</source>
|
<source>(no label)</source>
|
||||||
<translation>(bez označení)</translation>
|
<translation>(bez označení)</translation>
|
||||||
|
@ -853,30 +813,6 @@ Adresa: %4
|
||||||
<source>command-line options</source>
|
<source>command-line options</source>
|
||||||
<translation>možnosti příkazové řádky</translation>
|
<translation>možnosti příkazové řádky</translation>
|
||||||
</message>
|
</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>
|
||||||
<context>
|
<context>
|
||||||
<name>Intro</name>
|
<name>Intro</name>
|
||||||
|
@ -958,14 +894,6 @@ Adresa: %4
|
||||||
<source>&Main</source>
|
<source>&Main</source>
|
||||||
<translation>&Hlavní</translation>
|
<translation>&Hlavní</translation>
|
||||||
</message>
|
</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>&Start Bitcoin on system login</source>
|
|
||||||
<translation>S&pustit Bitcoin po přihlášení do systému</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Size of &database cache</source>
|
<source>Size of &database cache</source>
|
||||||
<translation>Velikost &databázové cache</translation>
|
<translation>Velikost &databázové cache</translation>
|
||||||
|
@ -1078,10 +1006,6 @@ Adresa: %4
|
||||||
<source>&Minimize to the tray instead of the taskbar</source>
|
<source>&Minimize to the tray instead of the taskbar</source>
|
||||||
<translation>&Minimalizovávat do ikony v panelu</translation>
|
<translation>&Minimalizovávat do ikony v panelu</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>M&inimize on close</source>
|
<source>M&inimize on close</source>
|
||||||
<translation>Za&vřením minimalizovat</translation>
|
<translation>Za&vřením minimalizovat</translation>
|
||||||
|
@ -1094,10 +1018,6 @@ Adresa: %4
|
||||||
<source>User Interface &language:</source>
|
<source>User Interface &language:</source>
|
||||||
<translation>&Jazyk uživatelského rozhraní:</translation>
|
<translation>&Jazyk uživatelského rozhraní:</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>&Unit to show amounts in:</source>
|
<source>&Unit to show amounts in:</source>
|
||||||
<translation>J&ednotka pro částky:</translation>
|
<translation>J&ednotka pro částky:</translation>
|
||||||
|
@ -1134,10 +1054,6 @@ Adresa: %4
|
||||||
<source>Client restart required to activate changes.</source>
|
<source>Client restart required to activate changes.</source>
|
||||||
<translation>K aktivaci změn je potřeba restartovat klienta.</translation>
|
<translation>K aktivaci změn je potřeba restartovat klienta.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Client will be shutdown, do you want to proceed?</source>
|
|
||||||
<translation>Klient se vypne, chceš pokračovat?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>This change would require a client restart.</source>
|
<source>This change would require a client restart.</source>
|
||||||
<translation>Tahle změna bude chtít restartovat klienta.</translation>
|
<translation>Tahle změna bude chtít restartovat klienta.</translation>
|
||||||
|
@ -1244,10 +1160,6 @@ Adresa: %4
|
||||||
<source>Payment request network doesn't match client network.</source>
|
<source>Payment request network doesn't match client network.</source>
|
||||||
<translation>Síť platebního požadavku neodpovídá síti klienta.</translation>
|
<translation>Síť platebního požadavku neodpovídá síti klienta.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Payment request has expired.</source>
|
|
||||||
<translation>Platební požadavek vypršel.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Payment request is not initialized.</source>
|
<source>Payment request is not initialized.</source>
|
||||||
<translation>Platební požadavek není zahájený.</translation>
|
<translation>Platební požadavek není zahájený.</translation>
|
||||||
|
@ -1323,10 +1235,6 @@ Adresa: %4
|
||||||
<source>User Agent</source>
|
<source>User Agent</source>
|
||||||
<translation>Typ klienta</translation>
|
<translation>Typ klienta</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Address/Hostname</source>
|
|
||||||
<translation>Adresa/Název hostitele</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Ping Time</source>
|
<source>Ping Time</source>
|
||||||
<translation>Odezva</translation>
|
<translation>Odezva</translation>
|
||||||
|
@ -1358,14 +1266,6 @@ Adresa: %4
|
||||||
<source>%1 s</source>
|
<source>%1 s</source>
|
||||||
<translation>%1 s</translation>
|
<translation>%1 s</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>NETWORK</source>
|
|
||||||
<translation>SÍŤ</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>UNKNOWN</source>
|
|
||||||
<translation>NEZNÁMÁ</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>None</source>
|
<source>None</source>
|
||||||
<translation>Žádné</translation>
|
<translation>Žádné</translation>
|
||||||
|
@ -1564,18 +1464,10 @@ Adresa: %4
|
||||||
<source>Debug log file</source>
|
<source>Debug log file</source>
|
||||||
<translation>Soubor s ladicími záznamy</translation>
|
<translation>Soubor s ladicími záznamy</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Clear console</source>
|
<source>Clear console</source>
|
||||||
<translation>Vyčistit konzoli</translation>
|
<translation>Vyčistit konzoli</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Welcome to the Bitcoin RPC console.</source>
|
|
||||||
<translation>Vítej v Bitcoinové RPC konzoli.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
||||||
<translation>V historii se pohybuješ šipkami nahoru a dolů a pomocí <b>Ctrl-L</b> čistíš obrazovku.</translation>
|
<translation>V historii se pohybuješ šipkami nahoru a dolů a pomocí <b>Ctrl-L</b> čistíš obrazovku.</translation>
|
||||||
|
@ -1864,14 +1756,6 @@ Adresa: %4
|
||||||
<source>collapse fee-settings</source>
|
<source>collapse fee-settings</source>
|
||||||
<translation>sbal nastavení poplatků</translation>
|
<translation>sbal nastavení poplatků</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>per kilobyte</source>
|
<source>per kilobyte</source>
|
||||||
<translation>za kilobajt</translation>
|
<translation>za kilobajt</translation>
|
||||||
|
@ -2000,10 +1884,6 @@ Adresa: %4
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<translation>nebo</translation>
|
<translation>nebo</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The amount to pay must be larger than 0.</source>
|
<source>The amount to pay must be larger than 0.</source>
|
||||||
<translation>Odesílaná částka musí být větší než 0.</translation>
|
<translation>Odesílaná částka musí být větší než 0.</translation>
|
||||||
|
@ -2016,10 +1896,6 @@ Adresa: %4
|
||||||
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
|
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
|
||||||
<translation>Celková částka při připočítání poplatku %1 překročí stav účtu.</translation>
|
<translation>Celková částka při připočítání poplatku %1 překročí stav účtu.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Transaction creation failed!</source>
|
<source>Transaction creation failed!</source>
|
||||||
<translation>Vytvoření transakce selhalo!</translation>
|
<translation>Vytvoření transakce selhalo!</translation>
|
||||||
|
@ -2028,18 +1904,10 @@ Adresa: %4
|
||||||
<source>The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
|
<source>The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
|
||||||
<translation>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>
|
<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>
|
||||||
<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>
|
<message>
|
||||||
<source>Pay only the minimum fee of %1</source>
|
<source>Pay only the minimum fee of %1</source>
|
||||||
<translation>Zaplatit pouze minimální poplatek %1</translation>
|
<translation>Zaplatit pouze minimální poplatek %1</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Warning: Invalid Bitcoin address</source>
|
<source>Warning: Invalid Bitcoin address</source>
|
||||||
<translation>Upozornění: Neplatná Bitcoinová adresa</translation>
|
<translation>Upozornění: Neplatná Bitcoinová adresa</translation>
|
||||||
|
@ -2115,10 +1983,6 @@ Adresa: %4
|
||||||
<source>Message:</source>
|
<source>Message:</source>
|
||||||
<translation>Zpráva:</translation>
|
<translation>Zpráva:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>This is a verified payment request.</source>
|
|
||||||
<translation>Tohle je ověřený platební požadavek.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Enter a label for this address to add it to the list of used addresses</source>
|
<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>
|
<translation>Zadej označení této adresy; obojí se ti pak uloží do adresáře</translation>
|
||||||
|
@ -2127,10 +1991,6 @@ Adresa: %4
|
||||||
<source>A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network.</source>
|
<source>A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network.</source>
|
||||||
<translation>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>
|
<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>
|
||||||
<message>
|
|
||||||
<source>This is an unverified payment request.</source>
|
|
||||||
<translation>Tohle je neověřený platební požadavek.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Pay To:</source>
|
<source>Pay To:</source>
|
||||||
<translation>Komu:</translation>
|
<translation>Komu:</translation>
|
||||||
|
@ -2161,10 +2021,6 @@ Adresa: %4
|
||||||
<source>&Sign Message</source>
|
<source>&Sign Message</source>
|
||||||
<translation>&Podepiš zprávu</translation>
|
<translation>&Podepiš zprávu</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The Bitcoin address to sign the message with</source>
|
<source>The Bitcoin address to sign the message with</source>
|
||||||
<translation>Bitcoinová adresa, kterou se zpráva podepíše</translation>
|
<translation>Bitcoinová adresa, kterou se zpráva podepíše</translation>
|
||||||
|
@ -2217,10 +2073,6 @@ Adresa: %4
|
||||||
<source>&Verify Message</source>
|
<source>&Verify Message</source>
|
||||||
<translation>&Ověř zprávu</translation>
|
<translation>&Ověř zprávu</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The Bitcoin address the message was signed with</source>
|
<source>The Bitcoin address the message was signed with</source>
|
||||||
<translation>Bitcoinová adresa, kterou je zpráva podepsána</translation>
|
<translation>Bitcoinová adresa, kterou je zpráva podepsána</translation>
|
||||||
|
@ -2484,10 +2336,6 @@ Adresa: %4
|
||||||
<source>Type</source>
|
<source>Type</source>
|
||||||
<translation>Typ</translation>
|
<translation>Typ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Address</source>
|
|
||||||
<translation>Adresa</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Immature (%1 confirmations, will be available after %2)</source>
|
<source>Immature (%1 confirmations, will be available after %2)</source>
|
||||||
<translation>Nedozráno (%1 potvrzení, bude k dispozici za %2)</translation>
|
<translation>Nedozráno (%1 potvrzení, bude k dispozici za %2)</translation>
|
||||||
|
@ -2516,6 +2364,10 @@ Adresa: %4
|
||||||
<source>Offline</source>
|
<source>Offline</source>
|
||||||
<translation>Offline</translation>
|
<translation>Offline</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Label</source>
|
||||||
|
<translation>Označení</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unconfirmed</source>
|
<source>Unconfirmed</source>
|
||||||
<translation>Nepotvrzeno</translation>
|
<translation>Nepotvrzeno</translation>
|
||||||
|
@ -2572,10 +2424,6 @@ Adresa: %4
|
||||||
<source>Whether or not a watch-only address is involved in this transaction.</source>
|
<source>Whether or not a watch-only address is involved in this transaction.</source>
|
||||||
<translation>Zda tato transakce zahrnuje i některou sledovanou adresu.</translation>
|
<translation>Zda tato transakce zahrnuje i některou sledovanou adresu.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Destination address of transaction.</source>
|
|
||||||
<translation>Cílová adresa transakce.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Amount removed from or added to balance.</source>
|
<source>Amount removed from or added to balance.</source>
|
||||||
<translation>Částka odečtená z nebo přičtená k účtu.</translation>
|
<translation>Částka odečtená z nebo přičtená k účtu.</translation>
|
||||||
|
@ -2906,10 +2754,6 @@ Adresa: %4
|
||||||
<source>Debugging/Testing options:</source>
|
<source>Debugging/Testing options:</source>
|
||||||
<translation>Možnosti ladění/testování:</translation>
|
<translation>Možnosti ladění/testování:</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Do not load the wallet and disable wallet RPC calls</source>
|
<source>Do not load the wallet and disable wallet RPC calls</source>
|
||||||
<translation>Nenačítat peněženku a vypnout její RPC volání</translation>
|
<translation>Nenačítat peněženku a vypnout její RPC volání</translation>
|
||||||
|
@ -2970,10 +2814,6 @@ Adresa: %4
|
||||||
<source>Only connect to nodes in network <net> (ipv4, ipv6 or onion)</source>
|
<source>Only connect to nodes in network <net> (ipv4, ipv6 or onion)</source>
|
||||||
<translation>Připojovat se pouze k uzlům v <net> síti (ipv4, ipv6 nebo onion)</translation>
|
<translation>Připojovat se pouze k uzlům v <net> síti (ipv4, ipv6 nebo onion)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
|
<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>
|
<translation>Nastavit velikost databázové vyrovnávací paměti v megabajtech (%d až %d, výchozí: %d)</translation>
|
||||||
|
@ -3038,10 +2878,6 @@ Adresa: %4
|
||||||
<source>Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.</source>
|
<source>Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.</source>
|
||||||
<translation>Nedaří se mi získat zámek na datový adresář %s. Bitcoin Core pravděpodobně už jednou běží.</translation>
|
<translation>Nedaří se mi získat zámek na datový adresář %s. Bitcoin Core pravděpodobně už jednou běží.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:%u)</source>
|
|
||||||
<translation>Kontinuálně omezovat bezpoplatkové transakce na <n>*1000 bajtů za minutu (výchozí: %u)</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
|
<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>
|
<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>
|
||||||
|
@ -3102,6 +2938,10 @@ Adresa: %4
|
||||||
<source>Cannot resolve -whitebind address: '%s'</source>
|
<source>Cannot resolve -whitebind address: '%s'</source>
|
||||||
<translation>Nemohu přeložit -whitebind adresu: '%s'</translation>
|
<translation>Nemohu přeložit -whitebind adresu: '%s'</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Connect through SOCKS5 proxy</source>
|
<source>Connect through SOCKS5 proxy</source>
|
||||||
<translation>Připojit se přes SOCKS5 proxy</translation>
|
<translation>Připojit se přes SOCKS5 proxy</translation>
|
||||||
|
@ -3190,10 +3030,22 @@ Adresa: %4
|
||||||
<source>Send transactions as zero-fee transactions if possible (default: %u)</source>
|
<source>Send transactions as zero-fee transactions if possible (default: %u)</source>
|
||||||
<translation>Posílat transakce pokud možno bez poplatků (výchozí: %u)</translation>
|
<translation>Posílat transakce pokud možno bez poplatků (výchozí: %u)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Show all debugging options (usage: --help -help-debug)</source>
|
<source>Show all debugging options (usage: --help -help-debug)</source>
|
||||||
<translation>Zobrazit všechny možnosti ladění (užití: --help -help-debug)</translation>
|
<translation>Zobrazit všechny možnosti ladění (užití: --help -help-debug)</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Show splash screen on startup (default: 1)</source>
|
||||||
|
<translation>Zobrazit startovací obrazovku (výchozí: 1)</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
|
<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>
|
<translation>Při spuštění klienta zmenšit soubor debug.log (výchozí: 1, pokud není zadáno -debug)</translation>
|
||||||
|
@ -3202,6 +3054,10 @@ Adresa: %4
|
||||||
<source>Signing transaction failed</source>
|
<source>Signing transaction failed</source>
|
||||||
<translation>Nepodařilo se podepsat transakci</translation>
|
<translation>Nepodařilo se podepsat transakci</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Start minimized</source>
|
||||||
|
<translation>Nastartovat minimalizovaně</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This is experimental software.</source>
|
<source>This is experimental software.</source>
|
||||||
<translation>Tohle je experimentální program.</translation>
|
<translation>Tohle je experimentální program.</translation>
|
||||||
|
@ -3242,10 +3098,6 @@ Adresa: %4
|
||||||
<source>Warning</source>
|
<source>Warning</source>
|
||||||
<translation>Upozornění</translation>
|
<translation>Upozornění</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
|
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
|
||||||
<translation>Upozornění: Nepodporovaný argument -benchmark se ignoruje, použij -debug=bench.</translation>
|
<translation>Upozornění: Nepodporovaný argument -benchmark se ignoruje, použij -debug=bench.</translation>
|
||||||
|
|
|
@ -67,10 +67,6 @@
|
||||||
<source>Change passphrase</source>
|
<source>Change passphrase</source>
|
||||||
<translation>Newid cyfrinymadrodd</translation>
|
<translation>Newid cyfrinymadrodd</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Confirm wallet encryption</source>
|
<source>Confirm wallet encryption</source>
|
||||||
<translation>Cadarnau amgryptiad y waled</translation>
|
<translation>Cadarnau amgryptiad y waled</translation>
|
||||||
|
@ -440,14 +436,14 @@
|
||||||
<source>Type</source>
|
<source>Type</source>
|
||||||
<translation>Math</translation>
|
<translation>Math</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Address</source>
|
|
||||||
<translation>Cyfeiriad</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Open until %1</source>
|
<source>Open until %1</source>
|
||||||
<translation>Agor tan %1</translation>
|
<translation>Agor tan %1</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Label</source>
|
||||||
|
<translation>Label</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TransactionView</name>
|
<name>TransactionView</name>
|
||||||
|
|
|
@ -155,10 +155,6 @@
|
||||||
<source>Change passphrase</source>
|
<source>Change passphrase</source>
|
||||||
<translation>Skift adgangskode</translation>
|
<translation>Skift adgangskode</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Confirm wallet encryption</source>
|
<source>Confirm wallet encryption</source>
|
||||||
<translation>Bekræft tegnebogskryptering</translation>
|
<translation>Bekræft tegnebogskryptering</translation>
|
||||||
|
@ -171,6 +167,10 @@
|
||||||
<source>Are you sure you wish to encrypt your wallet?</source>
|
<source>Are you sure you wish to encrypt your wallet?</source>
|
||||||
<translation>Er du sikker på, at du ønsker at kryptere din tegnebog?</translation>
|
<translation>Er du sikker på, at du ønsker at kryptere din tegnebog?</translation>
|
||||||
</message>
|
</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>
|
<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>
|
<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>
|
<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>
|
||||||
|
@ -188,8 +188,8 @@
|
||||||
<translation>Indtast det nye kodeord til tegnebogen.<br/>Brug venligst et kodeord på <b>ti eller flere tilfældige tegn</b> eller <b>otte eller flere ord</b>.</translation>
|
<translation>Indtast det nye kodeord til tegnebogen.<br/>Brug venligst et kodeord på <b>ti eller flere tilfældige tegn</b> eller <b>otte eller flere ord</b>.</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>Enter the old passphrase and new passphrase to the wallet.</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>
|
<translation>Indtast den gamle adgangskode og en ny adgangskode til tegnebogen.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Wallet encryption failed</source>
|
<source>Wallet encryption failed</source>
|
||||||
|
@ -310,10 +310,6 @@
|
||||||
<source>Send coins to a Bitcoin address</source>
|
<source>Send coins to a Bitcoin address</source>
|
||||||
<translation>Send bitcoins til en Bitcoin-adresse</translation>
|
<translation>Send bitcoins til en Bitcoin-adresse</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Modify configuration options for Bitcoin</source>
|
|
||||||
<translation>Redigér konfigurationsindstillinger for Bitcoin</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Backup wallet to another location</source>
|
<source>Backup wallet to another location</source>
|
||||||
<translation>Lav sikkerhedskopi af tegnebogen til et andet sted</translation>
|
<translation>Lav sikkerhedskopi af tegnebogen til et andet sted</translation>
|
||||||
|
@ -402,6 +398,10 @@
|
||||||
<source>&About Bitcoin Core</source>
|
<source>&About Bitcoin Core</source>
|
||||||
<translation>&Om Bitcoin Core</translation>
|
<translation>&Om Bitcoin Core</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Modify configuration options for Bitcoin Core</source>
|
||||||
|
<translation>Ændr opsætning af Bitcoin Core</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Show the list of used sending addresses and labels</source>
|
<source>Show the list of used sending addresses and labels</source>
|
||||||
<translation>Vis listen over brugte afsendelsesadresser og -mærkater</translation>
|
<translation>Vis listen over brugte afsendelsesadresser og -mærkater</translation>
|
||||||
|
@ -430,6 +430,10 @@
|
||||||
<source>No block source available...</source>
|
<source>No block source available...</source>
|
||||||
<translation>Ingen blokkilde tilgængelig …</translation>
|
<translation>Ingen blokkilde tilgængelig …</translation>
|
||||||
</message>
|
</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">
|
<message numerus="yes">
|
||||||
<source>%n hour(s)</source>
|
<source>%n hour(s)</source>
|
||||||
<translation><numerusform>%n time</numerusform><numerusform>%n timer</numerusform></translation>
|
<translation><numerusform>%n time</numerusform><numerusform>%n timer</numerusform></translation>
|
||||||
|
@ -478,14 +482,40 @@
|
||||||
<source>Up to date</source>
|
<source>Up to date</source>
|
||||||
<translation>Opdateret</translation>
|
<translation>Opdateret</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Catching up...</source>
|
<source>Catching up...</source>
|
||||||
<translation>Indhenter …</translation>
|
<translation>Indhenter …</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Date: %1
|
||||||
|
</source>
|
||||||
|
<translation>Dato: %1
|
||||||
|
</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Amount: %1
|
||||||
|
</source>
|
||||||
|
<translation>Beløb: %1
|
||||||
|
</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Type: %1
|
||||||
|
</source>
|
||||||
|
<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>
|
<message>
|
||||||
<source>Sent transaction</source>
|
<source>Sent transaction</source>
|
||||||
<translation>Afsendt transaktion</translation>
|
<translation>Afsendt transaktion</translation>
|
||||||
|
@ -494,18 +524,6 @@
|
||||||
<source>Incoming transaction</source>
|
<source>Incoming transaction</source>
|
||||||
<translation>Indgående transaktion</translation>
|
<translation>Indgående transaktion</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Date: %1
|
|
||||||
Amount: %2
|
|
||||||
Type: %3
|
|
||||||
Address: %4
|
|
||||||
</source>
|
|
||||||
<translation>Dato: %1
|
|
||||||
Beløb: %2
|
|
||||||
Type: %3
|
|
||||||
Adresse: %4
|
|
||||||
</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
||||||
<translation>Tegnebog er <b>krypteret</b> og i øjeblikket <b>ulåst</b></translation>
|
<translation>Tegnebog er <b>krypteret</b> og i øjeblikket <b>ulåst</b></translation>
|
||||||
|
@ -696,6 +714,18 @@ Adresse: %4
|
||||||
<source>none</source>
|
<source>none</source>
|
||||||
<translation>ingen</translation>
|
<translation>ingen</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Can vary +/- %1 satoshi(s) per input.</source>
|
<source>Can vary +/- %1 satoshi(s) per input.</source>
|
||||||
<translation>Kan variere med +/- %1 satoshi per input.</translation>
|
<translation>Kan variere med +/- %1 satoshi per input.</translation>
|
||||||
|
@ -708,10 +738,6 @@ Adresse: %4
|
||||||
<source>no</source>
|
<source>no</source>
|
||||||
<translation>nej</translation>
|
<translation>nej</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>This means a fee of at least %1 per kB is required.</source>
|
<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>
|
<translation>Dette betyder, at et gebyr på mindst %1 pr. kB er nødvendigt.</translation>
|
||||||
|
@ -724,14 +750,6 @@ Adresse: %4
|
||||||
<source>Transactions with higher priority are more likely to get included into a block.</source>
|
<source>Transactions with higher priority are more likely to get included into a block.</source>
|
||||||
<translation>Transaktioner med højere prioritet har højere sansynlighed for at blive inkluderet i en blok.</translation>
|
<translation>Transaktioner med højere prioritet har højere sansynlighed for at blive inkluderet i en blok.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>(no label)</source>
|
<source>(no label)</source>
|
||||||
<translation>(ingen mærkat)</translation>
|
<translation>(ingen mærkat)</translation>
|
||||||
|
@ -853,30 +871,6 @@ Adresse: %4
|
||||||
<source>command-line options</source>
|
<source>command-line options</source>
|
||||||
<translation>kommandolinjetilvalg</translation>
|
<translation>kommandolinjetilvalg</translation>
|
||||||
</message>
|
</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>
|
||||||
<context>
|
<context>
|
||||||
<name>Intro</name>
|
<name>Intro</name>
|
||||||
|
@ -954,14 +948,6 @@ Adresse: %4
|
||||||
<source>&Main</source>
|
<source>&Main</source>
|
||||||
<translation>&Generelt</translation>
|
<translation>&Generelt</translation>
|
||||||
</message>
|
</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>&Start Bitcoin on system login</source>
|
|
||||||
<translation>&Start Bitcoin ved systemlogin</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Size of &database cache</source>
|
<source>Size of &database cache</source>
|
||||||
<translation>Størrelsen på &databasens cache</translation>
|
<translation>Størrelsen på &databasens cache</translation>
|
||||||
|
@ -986,6 +972,14 @@ Adresse: %4
|
||||||
<source>IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1)</source>
|
<source>IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1)</source>
|
||||||
<translation>IP-adresse for proxyen (fx IPv4: 127.0.0.1 / IPv6: ::1)</translation>
|
<translation>IP-adresse for proxyen (fx IPv4: 127.0.0.1 / IPv6: ::1)</translation>
|
||||||
</message>
|
</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>
|
<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>
|
<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>
|
<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>
|
||||||
|
@ -1010,6 +1004,14 @@ Adresse: %4
|
||||||
<source>&Network</source>
|
<source>&Network</source>
|
||||||
<translation>&Netværk</translation>
|
<translation>&Netværk</translation>
|
||||||
</message>
|
</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>&Start Bitcoin Core on system login</source>
|
||||||
|
<translation>&Start Bitcoin Core ved system-login</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>(0 = auto, <0 = leave that many cores free)</source>
|
<source>(0 = auto, <0 = leave that many cores free)</source>
|
||||||
<translation>(0 = auto, <0 = efterlad så mange kerner fri)</translation>
|
<translation>(0 = auto, <0 = efterlad så mange kerner fri)</translation>
|
||||||
|
@ -1074,10 +1076,6 @@ Adresse: %4
|
||||||
<source>&Minimize to the tray instead of the taskbar</source>
|
<source>&Minimize to the tray instead of the taskbar</source>
|
||||||
<translation>&Minimér til statusfeltet i stedet for proceslinjen</translation>
|
<translation>&Minimér til statusfeltet i stedet for proceslinjen</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>M&inimize on close</source>
|
<source>M&inimize on close</source>
|
||||||
<translation>M&inimér ved lukning</translation>
|
<translation>M&inimér ved lukning</translation>
|
||||||
|
@ -1090,10 +1088,6 @@ Adresse: %4
|
||||||
<source>User Interface &language:</source>
|
<source>User Interface &language:</source>
|
||||||
<translation>&Sprog for brugergrænseflade:</translation>
|
<translation>&Sprog for brugergrænseflade:</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>&Unit to show amounts in:</source>
|
<source>&Unit to show amounts in:</source>
|
||||||
<translation>&Enhed at vise beløb i:</translation>
|
<translation>&Enhed at vise beløb i:</translation>
|
||||||
|
@ -1131,8 +1125,8 @@ Adresse: %4
|
||||||
<translation>Genstart af klienten er nødvendig for at aktivere ændringer.</translation>
|
<translation>Genstart af klienten er nødvendig for at aktivere ændringer.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Client will be shutdown, do you want to proceed?</source>
|
<source>Client will be shut down. Do you want to proceed?</source>
|
||||||
<translation>Klienten vil blive lukket ned; vil du fortsætte?</translation>
|
<translation>Klienten vil lukke ned. Vil du fortsætte?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This change would require a client restart.</source>
|
<source>This change would require a client restart.</source>
|
||||||
|
@ -1240,10 +1234,6 @@ Adresse: %4
|
||||||
<source>Payment request network doesn't match client network.</source>
|
<source>Payment request network doesn't match client network.</source>
|
||||||
<translation>Netværk for betalingsanmodning stemmer ikke overens med klientens netværk.</translation>
|
<translation>Netværk for betalingsanmodning stemmer ikke overens med klientens netværk.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Payment request has expired.</source>
|
|
||||||
<translation>Betalingsanmodning er udløbet.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Payment request is not initialized.</source>
|
<source>Payment request is not initialized.</source>
|
||||||
<translation>Betalingsanmodning er ikke klargjort.</translation>
|
<translation>Betalingsanmodning er ikke klargjort.</translation>
|
||||||
|
@ -1276,10 +1266,18 @@ Adresse: %4
|
||||||
<source>Payment request file cannot be read! This can be caused by an invalid payment request file.</source>
|
<source>Payment request file cannot be read! This can be caused by an invalid payment request file.</source>
|
||||||
<translation>Fil for betalingsanmodning kan ikke læses! Dette kan skyldes en ugyldig fil for betalingsanmodning.</translation>
|
<translation>Fil for betalingsanmodning kan ikke læses! Dette kan skyldes en ugyldig fil for betalingsanmodning.</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Payment request expired.</source>
|
||||||
|
<translation>Betalingsanmodning er udløbet.</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unverified payment requests to custom payment scripts are unsupported.</source>
|
<source>Unverified payment requests to custom payment scripts are unsupported.</source>
|
||||||
<translation>Ikke-verificerede betalingsanmodninger for tilpassede betalings-scripts understøttes ikke.</translation>
|
<translation>Ikke-verificerede betalingsanmodninger for tilpassede betalings-scripts understøttes ikke.</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Invalid payment request.</source>
|
||||||
|
<translation>Ugyldig betalingsanmodning.</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Refund from %1</source>
|
<source>Refund from %1</source>
|
||||||
<translation>Tilbagebetaling fra %1</translation>
|
<translation>Tilbagebetaling fra %1</translation>
|
||||||
|
@ -1320,8 +1318,8 @@ Adresse: %4
|
||||||
<translation>Brugeragent</translation>
|
<translation>Brugeragent</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Address/Hostname</source>
|
<source>Node/Service</source>
|
||||||
<translation>Adresse/værtsnavn</translation>
|
<translation>Knude/tjeneste</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Ping Time</source>
|
<source>Ping Time</source>
|
||||||
|
@ -1354,14 +1352,6 @@ Adresse: %4
|
||||||
<source>%1 s</source>
|
<source>%1 s</source>
|
||||||
<translation>%1 s</translation>
|
<translation>%1 s</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>NETWORK</source>
|
|
||||||
<translation>NETVÆRK</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>UNKNOWN</source>
|
|
||||||
<translation>UKENDT</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>None</source>
|
<source>None</source>
|
||||||
<translation>Ingen</translation>
|
<translation>Ingen</translation>
|
||||||
|
@ -1452,6 +1442,10 @@ Adresse: %4
|
||||||
<source>Current number of blocks</source>
|
<source>Current number of blocks</source>
|
||||||
<translation>Nuværende antal blokke</translation>
|
<translation>Nuværende antal blokke</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Received</source>
|
<source>Received</source>
|
||||||
<translation>Modtaget</translation>
|
<translation>Modtaget</translation>
|
||||||
|
@ -1520,6 +1514,10 @@ Adresse: %4
|
||||||
<source>Ping Time</source>
|
<source>Ping Time</source>
|
||||||
<translation>Ping-tid</translation>
|
<translation>Ping-tid</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Time Offset</source>
|
||||||
|
<translation>Tidsforskydning</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Last block time</source>
|
<source>Last block time</source>
|
||||||
<translation>Tidsstempel for seneste blok</translation>
|
<translation>Tidsstempel for seneste blok</translation>
|
||||||
|
@ -1560,17 +1558,13 @@ Adresse: %4
|
||||||
<source>Debug log file</source>
|
<source>Debug log file</source>
|
||||||
<translation>Fejlsøgningslogfil</translation>
|
<translation>Fejlsøgningslogfil</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Clear console</source>
|
<source>Clear console</source>
|
||||||
<translation>Ryd konsol</translation>
|
<translation>Ryd konsol</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Welcome to the Bitcoin RPC console.</source>
|
<source>Welcome to the Bitcoin Core RPC console.</source>
|
||||||
<translation>Velkommen til Bitcoin RPC-konsollen.</translation>
|
<translation>Velkommen til Bitcoin Cores RPC-konsol.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
||||||
|
@ -1860,14 +1854,6 @@ Adresse: %4
|
||||||
<source>collapse fee-settings</source>
|
<source>collapse fee-settings</source>
|
||||||
<translation>sammenfold gebyropsætning</translation>
|
<translation>sammenfold gebyropsætning</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>per kilobyte</source>
|
<source>per kilobyte</source>
|
||||||
<translation>pr. kilobyte</translation>
|
<translation>pr. kilobyte</translation>
|
||||||
|
@ -1876,6 +1862,10 @@ Adresse: %4
|
||||||
<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 "total at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
|
<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 "total 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 "total mindst" betaler 1000 satoshis. For transaktioner større end en kilobyte betaler begge pr. kilobyte.</translation>
|
<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>
|
||||||
|
<message>
|
||||||
|
<source>Hide</source>
|
||||||
|
<translation>Skjul</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>total at least</source>
|
<source>total at least</source>
|
||||||
<translation>total mindst</translation>
|
<translation>total mindst</translation>
|
||||||
|
@ -1996,10 +1986,6 @@ Adresse: %4
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<translation>eller</translation>
|
<translation>eller</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The amount to pay must be larger than 0.</source>
|
<source>The amount to pay must be larger than 0.</source>
|
||||||
<translation>Beløbet til betaling skal være større end 0.</translation>
|
<translation>Beløbet til betaling skal være større end 0.</translation>
|
||||||
|
@ -2012,10 +1998,6 @@ Adresse: %4
|
||||||
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
|
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
|
||||||
<translation>Totalen overstiger din saldo, når transaktionsgebyret på %1 er inkluderet.</translation>
|
<translation>Totalen overstiger din saldo, når transaktionsgebyret på %1 er inkluderet.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Transaction creation failed!</source>
|
<source>Transaction creation failed!</source>
|
||||||
<translation>Oprettelse af transaktion mislykkedes!</translation>
|
<translation>Oprettelse af transaktion mislykkedes!</translation>
|
||||||
|
@ -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>
|
<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>
|
||||||
<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>Et gebyr højere end %1 anses som et vanvittigt højt gebyr.</translation>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>Pay only the minimum fee of %1</source>
|
<source>Pay only the minimum fee of %1</source>
|
||||||
<translation>Betal kun det minimale gebyr på %1</translation>
|
<translation>Betal kun det minimale gebyr på %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Estimated to begin confirmation within %1 block(s).</source>
|
<source>The recipient address is not valid. Please recheck.</source>
|
||||||
<translation>Bekræftelse vurderes at begynde inden for %1 blok(ke).</translation>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>Warning: Invalid Bitcoin address</source>
|
<source>Warning: Invalid Bitcoin address</source>
|
||||||
|
@ -2107,13 +2101,25 @@ Adresse: %4
|
||||||
<source>Remove this entry</source>
|
<source>Remove this entry</source>
|
||||||
<translation>Fjern denne indgang</translation>
|
<translation>Fjern denne indgang</translation>
|
||||||
</message>
|
</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&ubtract fee from amount</source>
|
||||||
|
<translation>&Træk gebyr fra beløb</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Message:</source>
|
<source>Message:</source>
|
||||||
<translation>Besked:</translation>
|
<translation>Besked:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This is a verified payment request.</source>
|
<source>This is an unauthenticated payment request.</source>
|
||||||
<translation>Dette er en verificeret betalingsanmodning.</translation>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>Enter a label for this address to add it to the list of used addresses</source>
|
<source>Enter a label for this address to add it to the list of used addresses</source>
|
||||||
|
@ -2123,10 +2129,6 @@ Adresse: %4
|
||||||
<source>A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network.</source>
|
<source>A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network.</source>
|
||||||
<translation>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>
|
<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>
|
||||||
<message>
|
|
||||||
<source>This is an unverified payment request.</source>
|
|
||||||
<translation>Dette er en ikke-verificeret betalingsanmodning.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Pay To:</source>
|
<source>Pay To:</source>
|
||||||
<translation>Betal til:</translation>
|
<translation>Betal til:</translation>
|
||||||
|
@ -2158,8 +2160,8 @@ Adresse: %4
|
||||||
<translation>&Underskriv besked</translation>
|
<translation>&Underskriv besked</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<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 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>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>The Bitcoin address to sign the message with</source>
|
<source>The Bitcoin address to sign the message with</source>
|
||||||
|
@ -2214,8 +2216,8 @@ Adresse: %4
|
||||||
<translation>&Verificér besked</translation>
|
<translation>&Verificér besked</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<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 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>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>The Bitcoin address the message was signed with</source>
|
<source>The Bitcoin address the message was signed with</source>
|
||||||
|
@ -2420,7 +2422,7 @@ Adresse: %4
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>Debug information</source>
|
<source>Debug information</source>
|
||||||
|
@ -2480,10 +2482,6 @@ Adresse: %4
|
||||||
<source>Type</source>
|
<source>Type</source>
|
||||||
<translation>Type</translation>
|
<translation>Type</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Address</source>
|
|
||||||
<translation>Adresse</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Immature (%1 confirmations, will be available after %2)</source>
|
<source>Immature (%1 confirmations, will be available after %2)</source>
|
||||||
<translation>Umoden (%1 bekræftelser; vil være tilgængelig efter %2)</translation>
|
<translation>Umoden (%1 bekræftelser; vil være tilgængelig efter %2)</translation>
|
||||||
|
@ -2512,6 +2510,10 @@ Adresse: %4
|
||||||
<source>Offline</source>
|
<source>Offline</source>
|
||||||
<translation>Offline</translation>
|
<translation>Offline</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Label</source>
|
||||||
|
<translation>Mærkat</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unconfirmed</source>
|
<source>Unconfirmed</source>
|
||||||
<translation>Ubekræftet</translation>
|
<translation>Ubekræftet</translation>
|
||||||
|
@ -2569,8 +2571,8 @@ Adresse: %4
|
||||||
<translation>Afgør hvorvidt en kigge-adresse er involveret i denne transaktion.</translation>
|
<translation>Afgør hvorvidt en kigge-adresse er involveret i denne transaktion.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Destination address of transaction.</source>
|
<source>User-defined intent/purpose of the transaction.</source>
|
||||||
<translation>Destinationsadresse for transaktion.</translation>
|
<translation>Brugerdefineret hensigt/formål med transaktionen.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Amount removed from or added to balance.</source>
|
<source>Amount removed from or added to balance.</source>
|
||||||
|
@ -2814,6 +2816,10 @@ Adresse: %4
|
||||||
<source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
|
<source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
|
||||||
<translation>Tildel til den givne adresse og lyt altid på den. Brug [vært]:port-notation for IPv6</translation>
|
<translation>Tildel til den givne adresse og lyt altid på den. Brug [vært]:port-notation for IPv6</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Continuously rate-limit free transactions to <n>*1000 bytes per minute (default: %u)</source>
|
||||||
|
<translation>Begræns hyppigheden af gratis transaktioner løbende til <n>*1000 byte pr. minut (standard: %u)</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup</source>
|
<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>
|
<translation>Slet alle transaktioner i tegnebogen og genskab kun disse dele af blokkæden gennem -rescan under opstart</translation>
|
||||||
|
@ -2834,6 +2840,14 @@ Adresse: %4
|
||||||
<source>In this mode -genproclimit controls how many blocks are generated immediately.</source>
|
<source>In this mode -genproclimit controls how many blocks are generated immediately.</source>
|
||||||
<translation>I denne tilstand styrer -genproclimit hvor mange blokke, der genereres med det samme.</translation>
|
<translation>I denne tilstand styrer -genproclimit hvor mange blokke, der genereres med det samme.</translation>
|
||||||
</message>
|
</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, >%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, >%u = målstørrelse i MiB der skal bruges til blokfiler)</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)</source>
|
<source>Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)</source>
|
||||||
<translation>Sæt antallet af scriptverificeringstråde (%u til %d, 0 = auto, <0 = efterlad det antal kernet fri, standard: %d)</translation>
|
<translation>Sæt antallet af scriptverificeringstråde (%u til %d, 0 = auto, <0 = efterlad det antal kernet fri, standard: %d)</translation>
|
||||||
|
@ -2902,10 +2916,6 @@ Adresse: %4
|
||||||
<source>Debugging/Testing options:</source>
|
<source>Debugging/Testing options:</source>
|
||||||
<translation>Tilvalg for fejlfinding/test:</translation>
|
<translation>Tilvalg for fejlfinding/test:</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Do not load the wallet and disable wallet RPC calls</source>
|
<source>Do not load the wallet and disable wallet RPC calls</source>
|
||||||
<translation>Indlæs ikke tegnebogen og slå tegnebogs-RPC-kald fra</translation>
|
<translation>Indlæs ikke tegnebogen og slå tegnebogs-RPC-kald fra</translation>
|
||||||
|
@ -2967,8 +2977,12 @@ Adresse: %4
|
||||||
<translation>Tilslut kun til knuder i netværk <net> (IPv4, IPv6 eller Onion)</translation>
|
<translation>Tilslut kun til knuder i netværk <net> (IPv4, IPv6 eller Onion)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Rebuild block chain index from current blk000??.dat files</source>
|
<source>Prune cannot be configured with a negative value.</source>
|
||||||
<translation>Genbyg blokkædeindeks fra nuværende blk000??.dat filer</translation>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
|
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
|
||||||
|
@ -3006,6 +3020,10 @@ Adresse: %4
|
||||||
<source>Wallet options:</source>
|
<source>Wallet options:</source>
|
||||||
<translation>Tilvalg for tegnebog:</translation>
|
<translation>Tilvalg for tegnebog:</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>You need to rebuild the database using -reindex to change -txindex</source>
|
<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>
|
<translation>Du er nødt til at genopbygge databasen ved hjælp af -reindex for at ændre -txindex</translation>
|
||||||
|
@ -3034,14 +3052,14 @@ Adresse: %4
|
||||||
<source>Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.</source>
|
<source>Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.</source>
|
||||||
<translation>Kan ikke opnå en lås på datamappe %s. Bitcoin Core kører sansynligvis allerede.</translation>
|
<translation>Kan ikke opnå en lås på datamappe %s. Bitcoin Core kører sansynligvis allerede.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:%u)</source>
|
|
||||||
<translation>Rate-begræns kontinuerligt gratis transaktioner til <n>*1000 byte i minuttet (standard: %u)</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
|
<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>
|
<translation>Opret nye filer med systemstandard for rettigheder i stedet for umask 077 (kun virksomt med tegnebogsfunktionalitet slået fra)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Error: Listening for incoming connections failed (listen returned error %s)</source>
|
<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>
|
<translation>Fejl: Lytning efter indkommende forbindelser mislykkedes (lytning resultarede i fejl %s)</translation>
|
||||||
|
@ -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>
|
<translation>Maksimal størrelse på data i transaktioner til dataoverførsel, som vi videresender og miner (standard: %u)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Maximum total fees to use in a single wallet transaction, setting too low may abort large transactions (default: %s)</source>
|
<source>Prune configured below the minimum of %d MB. Please use a higher number.</source>
|
||||||
<translation>Maksimalt totalgebyr der bruges på en enkelt tegnebogstransaktion. Sættes det for lavt kan store transaktioner afbrydes (standard: %s)</translation>
|
<translation>Beskæring opsat under minimumsværdien %d MB. Brug venligst en højere værdi.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
|
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
|
||||||
<translation>Forespørgsel</translation>
|
<translation>Forespørgsel</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<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>
|
<message>
|
||||||
<source>Require high priority for relaying free or low-fee transactions (default: %u)</source>
|
<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>
|
<translation>Kræv høj prioritet for at videresende transaktioner uden eller med lavt gebyr (standard: %u)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
|
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
|
||||||
|
@ -3094,6 +3116,10 @@ Adresse: %4
|
||||||
<source>Set the number of threads for coin generation if enabled (-1 = all cores, default: %d)</source>
|
<source>Set the number of threads for coin generation if enabled (-1 = all cores, default: %d)</source>
|
||||||
<translation>Sæt antaller af tråde for coin-generering, hvis aktiveret (-1 = alle kerner, standard: %d)</translation>
|
<translation>Sæt antaller af tråde for coin-generering, hvis aktiveret (-1 = alle kerner, standard: %d)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit <https://www.openssl.org/> and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source>
|
<source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit <https://www.openssl.org/> 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 <https://www.openssl.org/>, samt kryptografisk software, der er skrevet af Eric Young, samt UPnP-software, der er skrevet af Thomas Bernard.</translation>
|
<translation>Dette produkt indeholder software, der er udviklet af OpenSSL-projektet for brug i OpenSSL-værktøjskassen <https://www.openssl.org/>, samt kryptografisk software, der er skrevet af Eric Young, samt UPnP-software, der er skrevet af Thomas Bernard.</translation>
|
||||||
|
@ -3134,14 +3160,38 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
|
||||||
<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>
|
<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>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>
|
<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>
|
||||||
|
<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>
|
<message>
|
||||||
<source>Accept public REST requests (default: %u)</source>
|
<source>Accept public REST requests (default: %u)</source>
|
||||||
<translation>Acceptér offentlige REST-anmodninger (standard: %u)</translation>
|
<translation>Acceptér offentlige REST-anmodninger (standard: %u)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Cannot resolve -whitebind address: '%s'</source>
|
<source>Cannot resolve -whitebind address: '%s'</source>
|
||||||
<translation>Kan ikke løse -whitebind adresse: "%s"</translation>
|
<translation>Kan ikke løse -whitebind adresse: "%s"</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Choose data directory on startup (default: 0)</source>
|
||||||
|
<translation>Vælg datamappe ved opstart (standard: 0)</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Connect through SOCKS5 proxy</source>
|
<source>Connect through SOCKS5 proxy</source>
|
||||||
<translation>Forbind gennem SOCKS5-proxy</translation>
|
<translation>Forbind gennem SOCKS5-proxy</translation>
|
||||||
|
@ -3238,10 +3288,22 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
|
||||||
<source>Send transactions as zero-fee transactions if possible (default: %u)</source>
|
<source>Send transactions as zero-fee transactions if possible (default: %u)</source>
|
||||||
<translation>Send transaktioner som nul-gebyr-transaktioner hvis muligt (standard: %u)</translation>
|
<translation>Send transaktioner som nul-gebyr-transaktioner hvis muligt (standard: %u)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Show all debugging options (usage: --help -help-debug)</source>
|
<source>Show all debugging options (usage: --help -help-debug)</source>
|
||||||
<translation>Vis alle tilvalg for fejlsøgning (brug: --help -help-debug)</translation>
|
<translation>Vis alle tilvalg for fejlsøgning (brug: --help -help-debug)</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Show splash screen on startup (default: 1)</source>
|
||||||
|
<translation>Vis opstartsbillede ved opstart (standard: 1)</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
|
<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>
|
<translation>Formindsk debug.log filen ved klientopstart (standard: 1 hvis ikke -debug)</translation>
|
||||||
|
@ -3250,6 +3312,14 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
|
||||||
<source>Signing transaction failed</source>
|
<source>Signing transaction failed</source>
|
||||||
<translation>Underskrift af transaktion mislykkedes</translation>
|
<translation>Underskrift af transaktion mislykkedes</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>This is experimental software.</source>
|
<source>This is experimental software.</source>
|
||||||
<translation>Dette er eksperimentelt software.</translation>
|
<translation>Dette er eksperimentelt software.</translation>
|
||||||
|
@ -3270,6 +3340,10 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
|
||||||
<source>Transaction too large</source>
|
<source>Transaction too large</source>
|
||||||
<translation>Transaktionen er for stor</translation>
|
<translation>Transaktionen er for stor</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>UI Options:</source>
|
||||||
|
<translation>Indstillinger for brugerflade:</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unable to bind to %s on this computer (bind returned error %s)</source>
|
<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>
|
<translation>Ikke i stand til at tildele til %s på denne computer (bind returnerede fejl %s)</translation>
|
||||||
|
@ -3290,10 +3364,6 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
|
||||||
<source>Warning</source>
|
<source>Warning</source>
|
||||||
<translation>Advarsel</translation>
|
<translation>Advarsel</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
|
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
|
||||||
<translation>Advarsel: Ikke understøttet argument -benchmark ignoreret, brug -debug=bench.</translation>
|
<translation>Advarsel: Ikke understøttet argument -benchmark ignoreret, brug -debug=bench.</translation>
|
||||||
|
@ -3438,6 +3508,10 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
|
||||||
<source>Maintain at most <n> connections to peers (default: %u)</source>
|
<source>Maintain at most <n> connections to peers (default: %u)</source>
|
||||||
<translation>Oprethold højest <n> forbindelser til andre knuder (standard: %u)</translation>
|
<translation>Oprethold højest <n> forbindelser til andre knuder (standard: %u)</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Make the wallet broadcast transactions</source>
|
||||||
|
<translation>Få tegnebogen til at transmittere transaktioner</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Maximum per-connection receive buffer, <n>*1000 bytes (default: %u)</source>
|
<source>Maximum per-connection receive buffer, <n>*1000 bytes (default: %u)</source>
|
||||||
<translation>Maksimum for modtagelsesbuffer pr. forbindelse, <n>*1000 byte (standard: %u)</translation>
|
<translation>Maksimum for modtagelsesbuffer pr. forbindelse, <n>*1000 byte (standard: %u)</translation>
|
||||||
|
|
|
@ -155,10 +155,6 @@
|
||||||
<source>Change passphrase</source>
|
<source>Change passphrase</source>
|
||||||
<translation>Passphrase ändern</translation>
|
<translation>Passphrase ändern</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Confirm wallet encryption</source>
|
<source>Confirm wallet encryption</source>
|
||||||
<translation>Wallet-Verschlüsselung bestätigen</translation>
|
<translation>Wallet-Verschlüsselung bestätigen</translation>
|
||||||
|
@ -171,6 +167,10 @@
|
||||||
<source>Are you sure you wish to encrypt your wallet?</source>
|
<source>Are you sure you wish to encrypt your wallet?</source>
|
||||||
<translation>Sind Sie sich sicher, dass Sie Ihre Wallet verschlüsseln möchten?</translation>
|
<translation>Sind Sie sich sicher, dass Sie Ihre Wallet verschlüsseln möchten?</translation>
|
||||||
</message>
|
</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>
|
<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>
|
<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>
|
<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>
|
||||||
|
@ -188,8 +188,8 @@
|
||||||
<translation>Geben Sie die neue Passphrase für die Wallet ein.<br>Bitte benutzen Sie eine Passphrase bestehend aus <b>zehn oder mehr zufälligen Zeichen</b> oder <b>acht oder mehr Wörtern</b>.</translation>
|
<translation>Geben Sie die neue Passphrase für die Wallet ein.<br>Bitte benutzen Sie eine Passphrase bestehend aus <b>zehn oder mehr zufälligen Zeichen</b> oder <b>acht oder mehr Wörtern</b>.</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>Enter the old passphrase and new passphrase to the wallet.</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>
|
<translation>Geben Sie die alte und neue Wallet-Passphrase ein.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Wallet encryption failed</source>
|
<source>Wallet encryption failed</source>
|
||||||
|
@ -310,10 +310,6 @@
|
||||||
<source>Send coins to a Bitcoin address</source>
|
<source>Send coins to a Bitcoin address</source>
|
||||||
<translation>Bitcoins an eine Bitcoin-Adresse überweisen</translation>
|
<translation>Bitcoins an eine Bitcoin-Adresse überweisen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Modify configuration options for Bitcoin</source>
|
|
||||||
<translation>Die Konfiguration des Clients bearbeiten</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Backup wallet to another location</source>
|
<source>Backup wallet to another location</source>
|
||||||
<translation>Eine Wallet-Sicherungskopie erstellen und abspeichern</translation>
|
<translation>Eine Wallet-Sicherungskopie erstellen und abspeichern</translation>
|
||||||
|
@ -402,6 +398,10 @@
|
||||||
<source>&About Bitcoin Core</source>
|
<source>&About Bitcoin Core</source>
|
||||||
<translation>&Über Bitcoin Core</translation>
|
<translation>&Über Bitcoin Core</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Modify configuration options for Bitcoin Core</source>
|
||||||
|
<translation>Konfiguration von Bitcoin Core bearbeiten</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Show the list of used sending addresses and labels</source>
|
<source>Show the list of used sending addresses and labels</source>
|
||||||
<translation>Liste verwendeter Zahlungsadressen und Bezeichnungen anzeigen</translation>
|
<translation>Liste verwendeter Zahlungsadressen und Bezeichnungen anzeigen</translation>
|
||||||
|
@ -430,6 +430,10 @@
|
||||||
<source>No block source available...</source>
|
<source>No block source available...</source>
|
||||||
<translation>Keine Blockquelle verfügbar...</translation>
|
<translation>Keine Blockquelle verfügbar...</translation>
|
||||||
</message>
|
</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">
|
<message numerus="yes">
|
||||||
<source>%n hour(s)</source>
|
<source>%n hour(s)</source>
|
||||||
<translation><numerusform>%n Stunde</numerusform><numerusform>%n Stunden</numerusform></translation>
|
<translation><numerusform>%n Stunde</numerusform><numerusform>%n Stunden</numerusform></translation>
|
||||||
|
@ -478,14 +482,40 @@
|
||||||
<source>Up to date</source>
|
<source>Up to date</source>
|
||||||
<translation>Auf aktuellem Stand</translation>
|
<translation>Auf aktuellem Stand</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Catching up...</source>
|
<source>Catching up...</source>
|
||||||
<translation>Hole auf...</translation>
|
<translation>Hole auf...</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Sent transaction</source>
|
<source>Sent transaction</source>
|
||||||
<translation>Gesendete Transaktion</translation>
|
<translation>Gesendete Transaktion</translation>
|
||||||
|
@ -494,17 +524,6 @@
|
||||||
<source>Incoming transaction</source>
|
<source>Incoming transaction</source>
|
||||||
<translation>Eingehende Transaktion</translation>
|
<translation>Eingehende Transaktion</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Date: %1
|
|
||||||
Amount: %2
|
|
||||||
Type: %3
|
|
||||||
Address: %4
|
|
||||||
</source>
|
|
||||||
<translation>Datum: %1
|
|
||||||
Betrag: %2
|
|
||||||
Typ: %3
|
|
||||||
Adresse: %4</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
||||||
<translation>Wallet ist <b>verschlüsselt</b> und aktuell <b>entsperrt</b></translation>
|
<translation>Wallet ist <b>verschlüsselt</b> und aktuell <b>entsperrt</b></translation>
|
||||||
|
@ -695,6 +714,18 @@ Adresse: %4</translation>
|
||||||
<source>none</source>
|
<source>none</source>
|
||||||
<translation>keine</translation>
|
<translation>keine</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Can vary +/- %1 satoshi(s) per input.</source>
|
<source>Can vary +/- %1 satoshi(s) per input.</source>
|
||||||
<translation>Kann pro Eingabe um +/- %1 Satoshi(s) abweichen.</translation>
|
<translation>Kann pro Eingabe um +/- %1 Satoshi(s) abweichen.</translation>
|
||||||
|
@ -707,10 +738,6 @@ Adresse: %4</translation>
|
||||||
<source>no</source>
|
<source>no</source>
|
||||||
<translation>nein</translation>
|
<translation>nein</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>This means a fee of at least %1 per kB is required.</source>
|
<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>
|
<translation>Das bedeutet, dass eine Gebühr von mindestens %1 pro kB erforderlich ist.</translation>
|
||||||
|
@ -723,14 +750,6 @@ Adresse: %4</translation>
|
||||||
<source>Transactions with higher priority are more likely to get included into a block.</source>
|
<source>Transactions with higher priority are more likely to get included into a block.</source>
|
||||||
<translation>Transaktionen mit höherer Priorität haben eine größere Chance in einen Block aufgenommen zu werden.</translation>
|
<translation>Transaktionen mit höherer Priorität haben eine größere Chance in einen Block aufgenommen zu werden.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>(no label)</source>
|
<source>(no label)</source>
|
||||||
<translation>(keine Bezeichnung)</translation>
|
<translation>(keine Bezeichnung)</translation>
|
||||||
|
@ -852,30 +871,6 @@ Adresse: %4</translation>
|
||||||
<source>command-line options</source>
|
<source>command-line options</source>
|
||||||
<translation>Kommandozeilenoptionen</translation>
|
<translation>Kommandozeilenoptionen</translation>
|
||||||
</message>
|
</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>
|
||||||
<context>
|
<context>
|
||||||
<name>Intro</name>
|
<name>Intro</name>
|
||||||
|
@ -957,14 +952,6 @@ Adresse: %4</translation>
|
||||||
<source>&Main</source>
|
<source>&Main</source>
|
||||||
<translation>&Allgemein</translation>
|
<translation>&Allgemein</translation>
|
||||||
</message>
|
</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>&Start Bitcoin on system login</source>
|
|
||||||
<translation>&Starte Bitcoin nach Systemanmeldung</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Size of &database cache</source>
|
<source>Size of &database cache</source>
|
||||||
<translation>Größe des &Datenbankcaches</translation>
|
<translation>Größe des &Datenbankcaches</translation>
|
||||||
|
@ -989,6 +976,14 @@ Adresse: %4</translation>
|
||||||
<source>IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1)</source>
|
<source>IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1)</source>
|
||||||
<translation>IP-Adresse des Proxies (z.B. IPv4: 127.0.0.1 / IPv6: ::1)</translation>
|
<translation>IP-Adresse des Proxies (z.B. IPv4: 127.0.0.1 / IPv6: ::1)</translation>
|
||||||
</message>
|
</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>
|
<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>
|
<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>
|
<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>
|
||||||
|
@ -1013,6 +1008,14 @@ Adresse: %4</translation>
|
||||||
<source>&Network</source>
|
<source>&Network</source>
|
||||||
<translation>&Netzwerk</translation>
|
<translation>&Netzwerk</translation>
|
||||||
</message>
|
</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>&Start Bitcoin Core on system login</source>
|
||||||
|
<translation>&Bitcoin Core nach Systemanmeldung starten</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>(0 = auto, <0 = leave that many cores free)</source>
|
<source>(0 = auto, <0 = leave that many cores free)</source>
|
||||||
<translation>(0 = automatisch, <0 = so viele Kerne frei lassen)</translation>
|
<translation>(0 = automatisch, <0 = so viele Kerne frei lassen)</translation>
|
||||||
|
@ -1077,10 +1080,6 @@ Adresse: %4</translation>
|
||||||
<source>&Minimize to the tray instead of the taskbar</source>
|
<source>&Minimize to the tray instead of the taskbar</source>
|
||||||
<translation>In den Infobereich anstatt in die Taskleiste &minimieren</translation>
|
<translation>In den Infobereich anstatt in die Taskleiste &minimieren</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>M&inimize on close</source>
|
<source>M&inimize on close</source>
|
||||||
<translation>Beim Schließen m&inimieren</translation>
|
<translation>Beim Schließen m&inimieren</translation>
|
||||||
|
@ -1093,10 +1092,6 @@ Adresse: %4</translation>
|
||||||
<source>User Interface &language:</source>
|
<source>User Interface &language:</source>
|
||||||
<translation>&Sprache der Benutzeroberfläche:</translation>
|
<translation>&Sprache der Benutzeroberfläche:</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>&Unit to show amounts in:</source>
|
<source>&Unit to show amounts in:</source>
|
||||||
<translation>&Einheit der Beträge:</translation>
|
<translation>&Einheit der Beträge:</translation>
|
||||||
|
@ -1134,8 +1129,8 @@ Adresse: %4</translation>
|
||||||
<translation>Clientneustart nötig, um die Änderungen zu aktivieren.</translation>
|
<translation>Clientneustart nötig, um die Änderungen zu aktivieren.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Client will be shutdown, do you want to proceed?</source>
|
<source>Client will be shut down. Do you want to proceed?</source>
|
||||||
<translation>Client wird beendet, wollen Sie fortfahren?</translation>
|
<translation>Client wird beendet. Möchten Sie den Vorgang fortsetzen?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This change would require a client restart.</source>
|
<source>This change would require a client restart.</source>
|
||||||
|
@ -1243,10 +1238,6 @@ Adresse: %4</translation>
|
||||||
<source>Payment request network doesn't match client network.</source>
|
<source>Payment request network doesn't match client network.</source>
|
||||||
<translation>Netzwerk der Zahlungsanforderung stimmt nicht mit dem Client-Netzwerk überein.</translation>
|
<translation>Netzwerk der Zahlungsanforderung stimmt nicht mit dem Client-Netzwerk überein.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Payment request has expired.</source>
|
|
||||||
<translation>Zahlungsanforderung ist abgelaufen.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Payment request is not initialized.</source>
|
<source>Payment request is not initialized.</source>
|
||||||
<translation>Zahlungsanforderung ist nicht initialisiert.</translation>
|
<translation>Zahlungsanforderung ist nicht initialisiert.</translation>
|
||||||
|
@ -1279,10 +1270,18 @@ Adresse: %4</translation>
|
||||||
<source>Payment request file cannot be read! This can be caused by an invalid payment request file.</source>
|
<source>Payment request file cannot be read! This can be caused by an invalid payment request file.</source>
|
||||||
<translation>Zahlungsanforderungsdatei kann nicht gelesen werden! Dies kann durch eine ungültige Zahlungsanforderungsdatei verursacht werden.</translation>
|
<translation>Zahlungsanforderungsdatei kann nicht gelesen werden! Dies kann durch eine ungültige Zahlungsanforderungsdatei verursacht werden.</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Payment request expired.</source>
|
||||||
|
<translation>Zahlungsanforderung abgelaufen.</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unverified payment requests to custom payment scripts are unsupported.</source>
|
<source>Unverified payment requests to custom payment scripts are unsupported.</source>
|
||||||
<translation>Unverifizierte Zahlungsanforderungen an benutzerdefinierte Zahlungsskripte werden nicht unterstützt.</translation>
|
<translation>Unverifizierte Zahlungsanforderungen an benutzerdefinierte Zahlungsskripte werden nicht unterstützt.</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Invalid payment request.</source>
|
||||||
|
<translation>Ungültige Zahlungsanforderung.</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Refund from %1</source>
|
<source>Refund from %1</source>
|
||||||
<translation>Rücküberweisung von %1</translation>
|
<translation>Rücküberweisung von %1</translation>
|
||||||
|
@ -1323,8 +1322,8 @@ Adresse: %4</translation>
|
||||||
<translation>User-Agent</translation>
|
<translation>User-Agent</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Address/Hostname</source>
|
<source>Node/Service</source>
|
||||||
<translation>Adresse/Hostname</translation>
|
<translation>Knoten/Dienst</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Ping Time</source>
|
<source>Ping Time</source>
|
||||||
|
@ -1357,14 +1356,6 @@ Adresse: %4</translation>
|
||||||
<source>%1 s</source>
|
<source>%1 s</source>
|
||||||
<translation>%1 s</translation>
|
<translation>%1 s</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>NETWORK</source>
|
|
||||||
<translation>NETZWERK</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>UNKNOWN</source>
|
|
||||||
<translation>UNBEKANNT</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>None</source>
|
<source>None</source>
|
||||||
<translation>Keine</translation>
|
<translation>Keine</translation>
|
||||||
|
@ -1455,6 +1446,10 @@ Adresse: %4</translation>
|
||||||
<source>Current number of blocks</source>
|
<source>Current number of blocks</source>
|
||||||
<translation>Aktuelle Anzahl Blöcke</translation>
|
<translation>Aktuelle Anzahl Blöcke</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Received</source>
|
<source>Received</source>
|
||||||
<translation>Empfangen</translation>
|
<translation>Empfangen</translation>
|
||||||
|
@ -1523,6 +1518,10 @@ Adresse: %4</translation>
|
||||||
<source>Ping Time</source>
|
<source>Ping Time</source>
|
||||||
<translation>Pingzeit</translation>
|
<translation>Pingzeit</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Time Offset</source>
|
||||||
|
<translation>Zeitversatz</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Last block time</source>
|
<source>Last block time</source>
|
||||||
<translation>Letzte Blockzeit</translation>
|
<translation>Letzte Blockzeit</translation>
|
||||||
|
@ -1563,17 +1562,13 @@ Adresse: %4</translation>
|
||||||
<source>Debug log file</source>
|
<source>Debug log file</source>
|
||||||
<translation>Debugprotokolldatei</translation>
|
<translation>Debugprotokolldatei</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Clear console</source>
|
<source>Clear console</source>
|
||||||
<translation>Konsole zurücksetzen</translation>
|
<translation>Konsole zurücksetzen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Welcome to the Bitcoin RPC console.</source>
|
<source>Welcome to the Bitcoin Core RPC console.</source>
|
||||||
<translation>Willkommen in der Bitcoin-RPC-Konsole.</translation>
|
<translation>Willkommen in der "Bitcoin Core"-RPC-Konsole.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
||||||
|
@ -1863,14 +1858,6 @@ Adresse: %4</translation>
|
||||||
<source>collapse fee-settings</source>
|
<source>collapse fee-settings</source>
|
||||||
<translation>Transaktionsgebühreneinstellungen ausblenden</translation>
|
<translation>Transaktionsgebühreneinstellungen ausblenden</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>per kilobyte</source>
|
<source>per kilobyte</source>
|
||||||
<translation>pro Kilobyte</translation>
|
<translation>pro Kilobyte</translation>
|
||||||
|
@ -1879,6 +1866,10 @@ Adresse: %4</translation>
|
||||||
<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 "total at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
|
<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 "total 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>
|
<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>
|
||||||
|
<message>
|
||||||
|
<source>Hide</source>
|
||||||
|
<translation>Ausblenden</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>total at least</source>
|
<source>total at least</source>
|
||||||
<translation>Mindestbetrag</translation>
|
<translation>Mindestbetrag</translation>
|
||||||
|
@ -1999,10 +1990,6 @@ Adresse: %4</translation>
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<translation>oder</translation>
|
<translation>oder</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The amount to pay must be larger than 0.</source>
|
<source>The amount to pay must be larger than 0.</source>
|
||||||
<translation>Der zu zahlende Betrag muss größer als 0 sein.</translation>
|
<translation>Der zu zahlende Betrag muss größer als 0 sein.</translation>
|
||||||
|
@ -2015,10 +2002,6 @@ Adresse: %4</translation>
|
||||||
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
|
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
|
||||||
<translation>Der angegebene Betrag übersteigt aufgrund der Transaktionsgebühr in Höhe von %1 Ihren Kontostand.</translation>
|
<translation>Der angegebene Betrag übersteigt aufgrund der Transaktionsgebühr in Höhe von %1 Ihren Kontostand.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Transaction creation failed!</source>
|
<source>Transaction creation failed!</source>
|
||||||
<translation>Transaktionserstellung fehlgeschlagen!</translation>
|
<translation>Transaktionserstellung fehlgeschlagen!</translation>
|
||||||
|
@ -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>
|
<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>
|
||||||
<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>
|
<translation>Eine höhere Gebühr als %1 wird als unsinnig hohe Gebühr angesehen.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Pay only the minimum fee of %1</source>
|
<source>Pay only the minimum fee of %1</source>
|
||||||
<translation>Nur die minimale Gebühr in Höhe von %1 zahlen</translation>
|
<translation>Nur die minimale Gebühr in Höhe von %1 zahlen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Estimated to begin confirmation within %1 block(s).</source>
|
<source>The recipient address is not valid. Please recheck.</source>
|
||||||
<translation>Voraussichtlicher Beginn der Bestätigung innerhalb von %1 Blöcken.</translation>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>Warning: Invalid Bitcoin address</source>
|
<source>Warning: Invalid Bitcoin address</source>
|
||||||
|
@ -2110,13 +2105,25 @@ Adresse: %4</translation>
|
||||||
<source>Remove this entry</source>
|
<source>Remove this entry</source>
|
||||||
<translation>Diesen Eintrag entfernen</translation>
|
<translation>Diesen Eintrag entfernen</translation>
|
||||||
</message>
|
</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&ubtract fee from amount</source>
|
||||||
|
<translation>Gebühr vom Betrag ab&ziehen</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Message:</source>
|
<source>Message:</source>
|
||||||
<translation>Nachricht:</translation>
|
<translation>Nachricht:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This is a verified payment request.</source>
|
<source>This is an unauthenticated payment request.</source>
|
||||||
<translation>Dies is eine verifizierte Zahlungsanforderung.</translation>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>Enter a label for this address to add it to the list of used addresses</source>
|
<source>Enter a label for this address to add it to the list of used addresses</source>
|
||||||
|
@ -2126,10 +2133,6 @@ Adresse: %4</translation>
|
||||||
<source>A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network.</source>
|
<source>A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network.</source>
|
||||||
<translation>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>
|
<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>
|
||||||
<message>
|
|
||||||
<source>This is an unverified payment request.</source>
|
|
||||||
<translation>Dies is eine unverifizierte Zahlungsanforderung.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Pay To:</source>
|
<source>Pay To:</source>
|
||||||
<translation>Empfänger:</translation>
|
<translation>Empfänger:</translation>
|
||||||
|
@ -2160,10 +2163,6 @@ Adresse: %4</translation>
|
||||||
<source>&Sign Message</source>
|
<source>&Sign Message</source>
|
||||||
<translation>Nachricht &signieren</translation>
|
<translation>Nachricht &signieren</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The Bitcoin address to sign the message with</source>
|
<source>The Bitcoin address to sign the message with</source>
|
||||||
<translation>Die Bitcoin-Adresse mit der die Nachricht signiert wird</translation>
|
<translation>Die Bitcoin-Adresse mit der die Nachricht signiert wird</translation>
|
||||||
|
@ -2216,10 +2215,6 @@ Adresse: %4</translation>
|
||||||
<source>&Verify Message</source>
|
<source>&Verify Message</source>
|
||||||
<translation>Nachricht &verifizieren</translation>
|
<translation>Nachricht &verifizieren</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The Bitcoin address the message was signed with</source>
|
<source>The Bitcoin address the message was signed with</source>
|
||||||
<translation>Die Bitcoin-Adresse mit der die Nachricht signiert wurde</translation>
|
<translation>Die Bitcoin-Adresse mit der die Nachricht signiert wurde</translation>
|
||||||
|
@ -2483,10 +2478,6 @@ Adresse: %4</translation>
|
||||||
<source>Type</source>
|
<source>Type</source>
|
||||||
<translation>Typ</translation>
|
<translation>Typ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Address</source>
|
|
||||||
<translation>Adresse</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Immature (%1 confirmations, will be available after %2)</source>
|
<source>Immature (%1 confirmations, will be available after %2)</source>
|
||||||
<translation>Unreif (%1 Bestätigungen, wird verfügbar sein nach %2)</translation>
|
<translation>Unreif (%1 Bestätigungen, wird verfügbar sein nach %2)</translation>
|
||||||
|
@ -2515,6 +2506,10 @@ Adresse: %4</translation>
|
||||||
<source>Offline</source>
|
<source>Offline</source>
|
||||||
<translation>Offline</translation>
|
<translation>Offline</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Label</source>
|
||||||
|
<translation>Bezeichnung</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unconfirmed</source>
|
<source>Unconfirmed</source>
|
||||||
<translation>Unbestätigt</translation>
|
<translation>Unbestätigt</translation>
|
||||||
|
@ -2572,8 +2567,8 @@ Adresse: %4</translation>
|
||||||
<translation>Zeigt an, ob eine beobachtete Adresse in diese Transaktion involviert ist.</translation>
|
<translation>Zeigt an, ob eine beobachtete Adresse in diese Transaktion involviert ist.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Destination address of transaction.</source>
|
<source>User-defined intent/purpose of the transaction.</source>
|
||||||
<translation>Zieladresse der Transaktion.</translation>
|
<translation>Benutzerdefinierte Absicht bzw. Verwendungszweck der Transaktion</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Amount removed from or added to balance.</source>
|
<source>Amount removed from or added to balance.</source>
|
||||||
|
@ -2817,6 +2812,10 @@ Adresse: %4</translation>
|
||||||
<source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
|
<source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
|
||||||
<translation>An die angegebene Adresse binden und immer abhören. Für IPv6 "[Host]:Port"-Notation verwenden</translation>
|
<translation>An die angegebene Adresse binden und immer abhören. Für IPv6 "[Host]:Port"-Notation verwenden</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Continuously rate-limit free transactions to <n>*1000 bytes per minute (default: %u)</source>
|
||||||
|
<translation>Durchgehend die Anzahl freier Transaktionen auf <n> * 1000 Byte pro Minute begrenzen (Standard: %u)</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup</source>
|
<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>
|
<translation>Alle Wallet-Transaktionen löschen und nur diese Teilbereiche der Blockkette durch -rescan beim Starten wiederherstellen</translation>
|
||||||
|
@ -2837,6 +2836,10 @@ Adresse: %4</translation>
|
||||||
<source>In this mode -genproclimit controls how many blocks are generated immediately.</source>
|
<source>In this mode -genproclimit controls how many blocks are generated immediately.</source>
|
||||||
<translation>In diesem Modus legt -genproclimit fest, wie viele Blöcke sofort erzeugt werden.</translation>
|
<translation>In diesem Modus legt -genproclimit fest, wie viele Blöcke sofort erzeugt werden.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)</source>
|
<source>Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)</source>
|
||||||
<translation>Maximale Anzahl an Skript-Verifizierungs-Threads festlegen (%u bis %d, 0 = automatisch, <0 = so viele Kerne frei lassen, Standard: %d)</translation>
|
<translation>Maximale Anzahl an Skript-Verifizierungs-Threads festlegen (%u bis %d, 0 = automatisch, <0 = so viele Kerne frei lassen, Standard: %d)</translation>
|
||||||
|
@ -2905,10 +2908,6 @@ Adresse: %4</translation>
|
||||||
<source>Debugging/Testing options:</source>
|
<source>Debugging/Testing options:</source>
|
||||||
<translation>Debugging-/Testoptionen:</translation>
|
<translation>Debugging-/Testoptionen:</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Do not load the wallet and disable wallet RPC calls</source>
|
<source>Do not load the wallet and disable wallet RPC calls</source>
|
||||||
<translation>Die Wallet nicht laden und Wallet-RPC-Aufrufe deaktivieren</translation>
|
<translation>Die Wallet nicht laden und Wallet-RPC-Aufrufe deaktivieren</translation>
|
||||||
|
@ -2969,10 +2968,6 @@ Adresse: %4</translation>
|
||||||
<source>Only connect to nodes in network <net> (ipv4, ipv6 or onion)</source>
|
<source>Only connect to nodes in network <net> (ipv4, ipv6 or onion)</source>
|
||||||
<translation>Nur zu Knoten des Netzwerktyps <net> verbinden (ipv4, ipv6 oder onion)</translation>
|
<translation>Nur zu Knoten des Netzwerktyps <net> verbinden (ipv4, ipv6 oder onion)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Rebuild block chain index from current blk000??.dat files</source>
|
|
||||||
<translation>Blockkettenindex aus aktuellen Dateien blk000??.dat wiederaufbauen</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
|
<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>
|
<translation>Größe des Datenbankcaches in Megabyte festlegen (%d bis %d, Standard: %d)</translation>
|
||||||
|
@ -3009,6 +3004,10 @@ Adresse: %4</translation>
|
||||||
<source>Wallet options:</source>
|
<source>Wallet options:</source>
|
||||||
<translation>Wallet-Optionen:</translation>
|
<translation>Wallet-Optionen:</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Warning: This version is obsolete; upgrade required!</source>
|
||||||
|
<translation>Warnung: Diese Version is veraltet, Aktualisierung erforderlich!</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>You need to rebuild the database using -reindex to change -txindex</source>
|
<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>
|
<translation>Sie müssen die Datenbank mit Hilfe von -reindex neu aufbauen, um -txindex zu verändern</translation>
|
||||||
|
@ -3037,14 +3036,14 @@ Adresse: %4</translation>
|
||||||
<source>Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.</source>
|
<source>Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.</source>
|
||||||
<translation>Datenverzeichnis %s kann nicht gesperrt werden, da Bitcoin Core wahrscheinlich bereits gestartet wurde.</translation>
|
<translation>Datenverzeichnis %s kann nicht gesperrt werden, da Bitcoin Core wahrscheinlich bereits gestartet wurde.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:%u)</source>
|
|
||||||
<translation>Anzahl der freien Transaktionen auf <n> * 1000 Byte pro Minute begrenzen (Standard: %u)</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
|
<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>
|
<translation>Neue Dateien mit Standard-Systemrechten erzeugen, anstatt mit umask 077 (nur mit deaktivierter Walletfunktion nutzbar)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Error: Listening for incoming connections failed (listen returned error %s)</source>
|
<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>
|
<translation>Fehler: Abhören nach eingehenden Verbindungen fehlgeschlagen (listen meldete Fehler %s)</translation>
|
||||||
|
@ -3077,17 +3076,17 @@ Adresse: %4</translation>
|
||||||
<source>Maximum size of data in data carrier transactions we relay and mine (default: %u)</source>
|
<source>Maximum size of data in data carrier transactions we relay and mine (default: %u)</source>
|
||||||
<translation>Maximale Datengröße in "Data Carrier"-Transaktionen die weitergeleitet und erarbeitet werden (Standard: %u)</translation>
|
<translation>Maximale Datengröße in "Data Carrier"-Transaktionen die weitergeleitet und erarbeitet werden (Standard: %u)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
|
<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>
|
<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>
|
||||||
|
<message>
|
||||||
|
<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>
|
<message>
|
||||||
<source>Require high priority for relaying free or low-fee transactions (default: %u)</source>
|
<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>
|
<translation>Hohe Priorität zum Weiterleiten von freien bzw. Transaktionen mit niedrigen Gebühren voraussetzen (Standard: %u)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
|
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
|
||||||
|
@ -3097,6 +3096,10 @@ Adresse: %4</translation>
|
||||||
<source>Set the number of threads for coin generation if enabled (-1 = all cores, default: %d)</source>
|
<source>Set the number of threads for coin generation if enabled (-1 = all cores, default: %d)</source>
|
||||||
<translation>Maximale Anzahl an Threads zur Bitcoinerzeugung, wenn aktiviert, festlegen (-1 = alle Kerne, Standard: %d)</translation>
|
<translation>Maximale Anzahl an Threads zur Bitcoinerzeugung, wenn aktiviert, festlegen (-1 = alle Kerne, Standard: %d)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit <https://www.openssl.org/> and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source>
|
<source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit <https://www.openssl.org/> 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 <https://www.openssl.org/> entwickelt wird, sowie von Eric Young geschriebene kryptographische Software und von Thomas Bernard geschriebene UPnP-Software.</translation>
|
<translation>Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im OpenSSL-Toolkit <https://www.openssl.org/> entwickelt wird, sowie von Eric Young geschriebene kryptographische Software und von Thomas Bernard geschriebene UPnP-Software.</translation>
|
||||||
|
@ -3137,14 +3140,30 @@ Beispiel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
|
||||||
<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>
|
<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>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>
|
<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>
|
||||||
|
<message>
|
||||||
|
<source>(default: %u)</source>
|
||||||
|
<translation>(Standard: %u)</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Accept public REST requests (default: %u)</source>
|
<source>Accept public REST requests (default: %u)</source>
|
||||||
<translation>Öffentliche REST-Anfragen annehmen (Standard: %u)</translation>
|
<translation>Öffentliche REST-Anfragen annehmen (Standard: %u)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Cannot resolve -whitebind address: '%s'</source>
|
<source>Cannot resolve -whitebind address: '%s'</source>
|
||||||
<translation>Kann Adresse in -whitebind nicht auflösen: '%s'</translation>
|
<translation>Kann Adresse in -whitebind nicht auflösen: '%s'</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Choose data directory on startup (default: 0)</source>
|
||||||
|
<translation>Datenverzeichnis beim Starten auswählen (Standard: 0)</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Connect through SOCKS5 proxy</source>
|
<source>Connect through SOCKS5 proxy</source>
|
||||||
<translation>Über einen SOCKS5-Proxy &verbinden</translation>
|
<translation>Über einen SOCKS5-Proxy &verbinden</translation>
|
||||||
|
@ -3241,10 +3260,22 @@ Beispiel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
|
||||||
<source>Send transactions as zero-fee transactions if possible (default: %u)</source>
|
<source>Send transactions as zero-fee transactions if possible (default: %u)</source>
|
||||||
<translation>Transaktionen, wenn möglich, als gebührenfreie Transaktion senden (Standard: %u)</translation>
|
<translation>Transaktionen, wenn möglich, als gebührenfreie Transaktion senden (Standard: %u)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Show all debugging options (usage: --help -help-debug)</source>
|
<source>Show all debugging options (usage: --help -help-debug)</source>
|
||||||
<translation>Zeige alle Debuggingoptionen (Benutzung: --help -help-debug)</translation>
|
<translation>Zeige alle Debuggingoptionen (Benutzung: --help -help-debug)</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Show splash screen on startup (default: 1)</source>
|
||||||
|
<translation>Startbildschirm beim Starten anzeigen (Standard: 1)</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
|
<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>
|
<translation>Protokolldatei debug.log beim Starten des Clients kürzen (Standard: 1, wenn kein -debug)</translation>
|
||||||
|
@ -3253,6 +3284,14 @@ Beispiel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
|
||||||
<source>Signing transaction failed</source>
|
<source>Signing transaction failed</source>
|
||||||
<translation>Signierung der Transaktion fehlgeschlagen</translation>
|
<translation>Signierung der Transaktion fehlgeschlagen</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>This is experimental software.</source>
|
<source>This is experimental software.</source>
|
||||||
<translation>Dies ist experimentelle Software.</translation>
|
<translation>Dies ist experimentelle Software.</translation>
|
||||||
|
@ -3273,6 +3312,10 @@ Beispiel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
|
||||||
<source>Transaction too large</source>
|
<source>Transaction too large</source>
|
||||||
<translation>Transaktion zu groß</translation>
|
<translation>Transaktion zu groß</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>UI Options:</source>
|
||||||
|
<translation>Benutzeroberflächenoptionen:</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unable to bind to %s on this computer (bind returned error %s)</source>
|
<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>
|
<translation>Kann auf diesem Computer nicht an %s binden (bind meldete Fehler %s)</translation>
|
||||||
|
@ -3293,10 +3336,6 @@ Beispiel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
|
||||||
<source>Warning</source>
|
<source>Warning</source>
|
||||||
<translation>Warnung</translation>
|
<translation>Warnung</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Warning: This version is obsolete, upgrade required!</source>
|
|
||||||
<translation>Warnung: Diese Version is veraltet, Aktualisierung erforderlich!</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
|
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
|
||||||
<translation>Warnung: Nicht unterstütztes Argument -benchmark wurde ignoriert, bitte -debug=bench verwenden.</translation>
|
<translation>Warnung: Nicht unterstütztes Argument -benchmark wurde ignoriert, bitte -debug=bench verwenden.</translation>
|
||||||
|
@ -3437,6 +3476,10 @@ Beispiel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
|
||||||
<source>Maintain at most <n> connections to peers (default: %u)</source>
|
<source>Maintain at most <n> connections to peers (default: %u)</source>
|
||||||
<translation>Maximal <n> Verbindungen zu Gegenstellen aufrechterhalten (Standard: %u)</translation>
|
<translation>Maximal <n> Verbindungen zu Gegenstellen aufrechterhalten (Standard: %u)</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Make the wallet broadcast transactions</source>
|
||||||
|
<translation>Die Wallet soll Transaktionen übertragen/broadcasten</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Maximum per-connection receive buffer, <n>*1000 bytes (default: %u)</source>
|
<source>Maximum per-connection receive buffer, <n>*1000 bytes (default: %u)</source>
|
||||||
<translation>Maximale Größe des Empfangspuffers pro Verbindung, <n> * 1000 Byte (Standard: %u)</translation>
|
<translation>Maximale Größe des Empfangspuffers pro Verbindung, <n> * 1000 Byte (Standard: %u)</translation>
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&New</source>
|
<source>&New</source>
|
||||||
<translation>&Νέα</translation>
|
<translation>&Νέo</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy the currently selected address to the system clipboard</source>
|
<source>Copy the currently selected address to the system clipboard</source>
|
||||||
|
@ -87,7 +87,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Exporting Failed</source>
|
<source>Exporting Failed</source>
|
||||||
<translation>Η εξαγωγή απέτυχε</translation>
|
<translation>Η Εξαγωγή Απέτυχε</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>There was an error trying to save the address list to %1. Please try again.</source>
|
<source>There was an error trying to save the address list to %1. Please try again.</source>
|
||||||
|
@ -98,7 +98,7 @@
|
||||||
<name>AddressTableModel</name>
|
<name>AddressTableModel</name>
|
||||||
<message>
|
<message>
|
||||||
<source>Label</source>
|
<source>Label</source>
|
||||||
<translation>Ετικέτα</translation>
|
<translation>Επιγραφή</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Address</source>
|
<source>Address</source>
|
||||||
|
@ -151,10 +151,6 @@
|
||||||
<source>Change passphrase</source>
|
<source>Change passphrase</source>
|
||||||
<translation>Άλλαξε κωδικο πρόσβασης</translation>
|
<translation>Άλλαξε κωδικο πρόσβασης</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Enter the old and new passphrase to the wallet.</source>
|
|
||||||
<translation>Εισάγετε τον παλιό και τον νεο κωδικο στο πορτοφολι.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Confirm wallet encryption</source>
|
<source>Confirm wallet encryption</source>
|
||||||
<translation>Επιβεβαίωσε την κρυπτογραφηση του πορτοφολιού</translation>
|
<translation>Επιβεβαίωσε την κρυπτογραφηση του πορτοφολιού</translation>
|
||||||
|
@ -184,10 +180,6 @@
|
||||||
<source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>.</source>
|
<source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>.</source>
|
||||||
<translation>Εισάγετε τον νέο κωδικό πρόσβασης στον πορτοφόλι <br/> Παρακαλώ χρησιμοποιείστε ένα κωδικό με <b> 10 ή περισσότερους τυχαίους χαρακτήρες</b> ή <b> οχτώ ή παραπάνω λέξεις</b>.</translation>
|
<translation>Εισάγετε τον νέο κωδικό πρόσβασης στον πορτοφόλι <br/> Παρακαλώ χρησιμοποιείστε ένα κωδικό με <b> 10 ή περισσότερους τυχαίους χαρακτήρες</b> ή <b> οχτώ ή παραπάνω λέξεις</b>.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Wallet encryption failed</source>
|
<source>Wallet encryption failed</source>
|
||||||
<translation>Η κρυπτογραφηση του πορτοφολιού απέτυχε</translation>
|
<translation>Η κρυπτογραφηση του πορτοφολιού απέτυχε</translation>
|
||||||
|
@ -307,10 +299,6 @@
|
||||||
<source>Send coins to a Bitcoin address</source>
|
<source>Send coins to a Bitcoin address</source>
|
||||||
<translation>Στείλε νομίσματα σε μια διεύθυνση bitcoin</translation>
|
<translation>Στείλε νομίσματα σε μια διεύθυνση bitcoin</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Modify configuration options for Bitcoin</source>
|
|
||||||
<translation>Επεργασία ρυθμισεων επιλογών για το Bitcoin</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Backup wallet to another location</source>
|
<source>Backup wallet to another location</source>
|
||||||
<translation>Δημιουργία αντιγράφου ασφαλείας πορτοφολιού σε άλλη τοποθεσία</translation>
|
<translation>Δημιουργία αντιγράφου ασφαλείας πορτοφολιού σε άλλη τοποθεσία</translation>
|
||||||
|
@ -419,34 +407,14 @@
|
||||||
<source>Show the Bitcoin Core help message to get a list with possible Bitcoin command-line options</source>
|
<source>Show the Bitcoin Core help message to get a list with possible Bitcoin command-line options</source>
|
||||||
<translation>Εμφανιση του Bitcoin-Qt μήνυματος βοήθειας για να πάρετε μια λίστα με τις πιθανές επιλογές Bitcoin γραμμής εντολών.</translation>
|
<translation>Εμφανιση του Bitcoin-Qt μήνυματος βοήθειας για να πάρετε μια λίστα με τις πιθανές επιλογές Bitcoin γραμμής εντολών.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>No block source available...</source>
|
<source>No block source available...</source>
|
||||||
<translation>Η πηγή του μπλοκ δεν ειναι διαθέσιμη... </translation>
|
<translation>Η πηγή του μπλοκ δεν ειναι διαθέσιμη... </translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>%1 and %2</source>
|
<source>%1 and %2</source>
|
||||||
<translation>%1 και %2</translation>
|
<translation>%1 και %2</translation>
|
||||||
</message>
|
</message>
|
||||||
<message numerus="yes">
|
|
||||||
<source>%n year(s)</source>
|
|
||||||
<translation><numerusform>%n έτος</numerusform><numerusform>%n έτη</numerusform></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>%1 behind</source>
|
<source>%1 behind</source>
|
||||||
<translation>%1 πίσω</translation>
|
<translation>%1 πίσω</translation>
|
||||||
|
@ -487,18 +455,6 @@
|
||||||
<source>Incoming transaction</source>
|
<source>Incoming transaction</source>
|
||||||
<translation>Εισερχόμενη συναλλαγή</translation>
|
<translation>Εισερχόμενη συναλλαγή</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Date: %1
|
|
||||||
Amount: %2
|
|
||||||
Type: %3
|
|
||||||
Address: %4
|
|
||||||
</source>
|
|
||||||
<translation>Ημερομηνία: %1
|
|
||||||
Ποσό: %2
|
|
||||||
Τύπος: %3
|
|
||||||
Διεύθυνση: %4
|
|
||||||
</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
||||||
<translation>Το πορτοφόλι είναι <b>κρυπτογραφημένο</b> και <b>ξεκλείδωτο</b></translation>
|
<translation>Το πορτοφόλι είναι <b>κρυπτογραφημένο</b> και <b>ξεκλείδωτο</b></translation>
|
||||||
|
@ -627,7 +583,7 @@ Address: %4
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy after fee</source>
|
<source>Copy after fee</source>
|
||||||
<translation>Αντιγραφή ταρίφας</translation>
|
<translation>Αντιγραφή μετα-ταρίφας</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy bytes</source>
|
<source>Copy bytes</source>
|
||||||
|
@ -697,10 +653,6 @@ Address: %4
|
||||||
<source>no</source>
|
<source>no</source>
|
||||||
<translation>όχι</translation>
|
<translation>όχι</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
|
|
||||||
<translation>Η ετικετα γινετε κοκκινη , αν το μεγεθος της συναλαγης ειναι μεγαλητερο απο 1000 bytes.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>This means a fee of at least %1 per kB is required.</source>
|
<source>This means a fee of at least %1 per kB is required.</source>
|
||||||
<translation>Ελάχιστο χρεώσιμο ποσό τουλάχιστο %1 ανα kB</translation>
|
<translation>Ελάχιστο χρεώσιμο ποσό τουλάχιστο %1 ανα kB</translation>
|
||||||
|
@ -709,14 +661,6 @@ Address: %4
|
||||||
<source>Transactions with higher priority are more likely to get included into a block.</source>
|
<source>Transactions with higher priority are more likely to get included into a block.</source>
|
||||||
<translation>Συναλλαγές με υψηλότερη προτεραιότητα είναι πιο πιθανό να περιλαμβάνονται σε ένα μπλοκ.</translation>
|
<translation>Συναλλαγές με υψηλότερη προτεραιότητα είναι πιο πιθανό να περιλαμβάνονται σε ένα μπλοκ.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>(no label)</source>
|
<source>(no label)</source>
|
||||||
<translation>(χωρίς ετικέτα)</translation>
|
<translation>(χωρίς ετικέτα)</translation>
|
||||||
|
@ -839,30 +783,6 @@ Address: %4
|
||||||
<source>command-line options</source>
|
<source>command-line options</source>
|
||||||
<translation>επιλογής γραμμής εντολών</translation>
|
<translation>επιλογής γραμμής εντολών</translation>
|
||||||
</message>
|
</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>
|
||||||
<context>
|
<context>
|
||||||
<name>Intro</name>
|
<name>Intro</name>
|
||||||
|
@ -936,14 +856,6 @@ Address: %4
|
||||||
<source>&Main</source>
|
<source>&Main</source>
|
||||||
<translation>&Κύριο</translation>
|
<translation>&Κύριο</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Automatically start Bitcoin after logging in to the system.</source>
|
|
||||||
<translation>Αυτόματη εκκίνηση του Bitcoin μετά την εισαγωγή στο σύστημα</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>&Start Bitcoin on system login</source>
|
|
||||||
<translation>&Έναρξη του Βιtcoin κατά την εκκίνηση του συστήματος</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Size of &database cache</source>
|
<source>Size of &database cache</source>
|
||||||
<translation>Μέγεθος κρυφής μνήμης βάσης δεδομένων.</translation>
|
<translation>Μέγεθος κρυφής μνήμης βάσης δεδομένων.</translation>
|
||||||
|
@ -1036,10 +948,6 @@ Address: %4
|
||||||
<source>&Minimize to the tray instead of the taskbar</source>
|
<source>&Minimize to the tray instead of the taskbar</source>
|
||||||
<translation>&Ελαχιστοποίηση στην περιοχή ειδοποιήσεων αντί της γραμμής εργασιών</translation>
|
<translation>&Ελαχιστοποίηση στην περιοχή ειδοποιήσεων αντί της γραμμής εργασιών</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>M&inimize on close</source>
|
<source>M&inimize on close</source>
|
||||||
<translation>Ε&λαχιστοποίηση κατά το κλείσιμο</translation>
|
<translation>Ε&λαχιστοποίηση κατά το κλείσιμο</translation>
|
||||||
|
@ -1052,10 +960,6 @@ Address: %4
|
||||||
<source>User Interface &language:</source>
|
<source>User Interface &language:</source>
|
||||||
<translation>Γλώσσα περιβάλλοντος εργασίας: </translation>
|
<translation>Γλώσσα περιβάλλοντος εργασίας: </translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>&Unit to show amounts in:</source>
|
<source>&Unit to show amounts in:</source>
|
||||||
<translation>&Μονάδα μέτρησης:</translation>
|
<translation>&Μονάδα μέτρησης:</translation>
|
||||||
|
@ -1066,7 +970,8 @@ Address: %4
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Whether to show coin control features or not.</source>
|
<source>Whether to show coin control features or not.</source>
|
||||||
<translation>Επιλογή κατα πόσο να αναδείχνονται οι δυνατότητες ελέγχου κερμάτων.</translation>
|
<translation>Επιλογή κατα πόσο να αναδείχνονται οι δυνατότητες ελέγχου κερμάτων.
|
||||||
|
</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&OK</source>
|
<source>&OK</source>
|
||||||
|
@ -1092,10 +997,6 @@ Address: %4
|
||||||
<source>Client restart required to activate changes.</source>
|
<source>Client restart required to activate changes.</source>
|
||||||
<translation>Χρειάζεται επανεκκίνηση του προγράμματος για να ενεργοποιηθούν οι αλλαγές.</translation>
|
<translation>Χρειάζεται επανεκκίνηση του προγράμματος για να ενεργοποιηθούν οι αλλαγές.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Client will be shutdown, do you want to proceed?</source>
|
|
||||||
<translation>Η εφαρμογή θα τερματιστεί. Θέλετε να προχωρήσετε;</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>This change would require a client restart.</source>
|
<source>This change would require a client restart.</source>
|
||||||
<translation>Η αλλαγή αυτή θα χρειαστεί επανεκκίνηση του προγράμματος</translation>
|
<translation>Η αλλαγή αυτή θα χρειαστεί επανεκκίνηση του προγράμματος</translation>
|
||||||
|
@ -1182,10 +1083,6 @@ Address: %4
|
||||||
<source>Payment request rejected</source>
|
<source>Payment request rejected</source>
|
||||||
<translation>Η αίτηση πληρωμής έχει αρνηθεί.</translation>
|
<translation>Η αίτηση πληρωμής έχει αρνηθεί.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Payment request has expired.</source>
|
|
||||||
<translation>Η αίτηση πληρωμής έχει λήξει.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Payment request is not initialized.</source>
|
<source>Payment request is not initialized.</source>
|
||||||
<translation>Η αίτηση πληρωμής δεν έχει αρχίζει ακόμα.</translation>
|
<translation>Η αίτηση πληρωμής δεν έχει αρχίζει ακόμα.</translation>
|
||||||
|
@ -1221,10 +1118,6 @@ Address: %4
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>PeerTableModel</name>
|
<name>PeerTableModel</name>
|
||||||
<message>
|
|
||||||
<source>Address/Hostname</source>
|
|
||||||
<translation>Διεύθυθνση/Όνομα υπολογιστή</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Ping Time</source>
|
<source>Ping Time</source>
|
||||||
<translation>Χρόνος καθυστέρησης</translation>
|
<translation>Χρόνος καθυστέρησης</translation>
|
||||||
|
@ -1256,14 +1149,6 @@ Address: %4
|
||||||
<source>%1 s</source>
|
<source>%1 s</source>
|
||||||
<translation>%1 s</translation>
|
<translation>%1 s</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>NETWORK</source>
|
|
||||||
<translation>Δίκτυο</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>UNKNOWN</source>
|
|
||||||
<translation>Άγνωστο(α)</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>None</source>
|
<source>None</source>
|
||||||
<translation>Κανένα</translation>
|
<translation>Κανένα</translation>
|
||||||
|
@ -1406,18 +1291,10 @@ Address: %4
|
||||||
<source>Debug log file</source>
|
<source>Debug log file</source>
|
||||||
<translation>Αρχείο καταγραφής εντοπισμού σφαλμάτων </translation>
|
<translation>Αρχείο καταγραφής εντοπισμού σφαλμάτων </translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Clear console</source>
|
<source>Clear console</source>
|
||||||
<translation>Καθαρισμός κονσόλας</translation>
|
<translation>Καθαρισμός κονσόλας</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Welcome to the Bitcoin RPC console.</source>
|
|
||||||
<translation>Καλώς ήρθατε στην Bitcoin RPC κονσόλα.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
||||||
<translation>Χρησιμοποιήστε το πάνω και κάτω βέλος για να περιηγηθείτε στο ιστορικο, και <b>Ctrl-L</b> για εκκαθαριση οθονης.</translation>
|
<translation>Χρησιμοποιήστε το πάνω και κάτω βέλος για να περιηγηθείτε στο ιστορικο, και <b>Ctrl-L</b> για εκκαθαριση οθονης.</translation>
|
||||||
|
@ -1542,7 +1419,7 @@ Address: %4
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Label</source>
|
<source>Label</source>
|
||||||
<translation>Ετικέτα</translation>
|
<translation>Επιγραφή</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Message</source>
|
<source>Message</source>
|
||||||
|
@ -1565,7 +1442,7 @@ Address: %4
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Label</source>
|
<source>Label</source>
|
||||||
<translation>Ετικέτα</translation>
|
<translation>Επιγραφή</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Message</source>
|
<source>Message</source>
|
||||||
|
@ -1642,10 +1519,6 @@ Address: %4
|
||||||
<source>Choose...</source>
|
<source>Choose...</source>
|
||||||
<translation>Επιλογή...</translation>
|
<translation>Επιλογή...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Minimize</source>
|
|
||||||
<translation>Ελαχιστοποίηση</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>fast</source>
|
<source>fast</source>
|
||||||
<translation>Γρήγορο</translation>
|
<translation>Γρήγορο</translation>
|
||||||
|
@ -1726,10 +1599,6 @@ Address: %4
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<translation>ή</translation>
|
<translation>ή</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>The recipient address is not valid, please recheck.</source>
|
|
||||||
<translation>Η διεύθυνση του αποδέκτη δεν είναι σωστή. Παρακαλώ ελέγξτε ξανά.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>The amount to pay must be larger than 0.</source>
|
<source>The amount to pay must be larger than 0.</source>
|
||||||
<translation>Το ποσό πληρωμής πρέπει να είναι μεγαλύτερο από 0.</translation>
|
<translation>Το ποσό πληρωμής πρέπει να είναι μεγαλύτερο από 0.</translation>
|
||||||
|
@ -1742,10 +1611,6 @@ Address: %4
|
||||||
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
|
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
|
||||||
<translation>Το σύνολο υπερβαίνει το υπόλοιπό σας όταν συμπεριληφθεί και η αμοιβή %1</translation>
|
<translation>Το σύνολο υπερβαίνει το υπόλοιπό σας όταν συμπεριληφθεί και η αμοιβή %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Duplicate address found, can only send to each address once per send operation.</source>
|
|
||||||
<translation>Βρέθηκε η ίδια διεύθυνση δύο φορές. Επιτρέπεται μία μόνο εγγραφή για κάθε διεύθυνση, σε κάθε διαδικασία αποστολής.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Transaction creation failed!</source>
|
<source>Transaction creation failed!</source>
|
||||||
<translation>Η δημιουργία της συναλλαγής απέτυχε!</translation>
|
<translation>Η δημιουργία της συναλλαγής απέτυχε!</translation>
|
||||||
|
@ -1799,7 +1664,7 @@ Address: %4
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Paste address from clipboard</source>
|
<source>Paste address from clipboard</source>
|
||||||
<translation>Επικόλληση διεύθυνσης από το πρόχειρο</translation>
|
<translation>Επικόλληση διεύθυνσης από το βιβλίο διευθύνσεων</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Alt+P</source>
|
<source>Alt+P</source>
|
||||||
|
@ -1843,10 +1708,6 @@ Address: %4
|
||||||
<source>&Sign Message</source>
|
<source>&Sign Message</source>
|
||||||
<translation>&Υπογραφή Μηνύματος</translation>
|
<translation>&Υπογραφή Μηνύματος</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The Bitcoin address to sign the message with</source>
|
<source>The Bitcoin address to sign the message with</source>
|
||||||
<translation>Διεύθυνση Bitcoin που θα σταλεί το μήνυμα</translation>
|
<translation>Διεύθυνση Bitcoin που θα σταλεί το μήνυμα</translation>
|
||||||
|
@ -1899,10 +1760,6 @@ Address: %4
|
||||||
<source>&Verify Message</source>
|
<source>&Verify Message</source>
|
||||||
<translation>&Επιβεβαίωση μηνύματος</translation>
|
<translation>&Επιβεβαίωση μηνύματος</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The Bitcoin address the message was signed with</source>
|
<source>The Bitcoin address the message was signed with</source>
|
||||||
<translation>Διεύθυνση Bitcoin η οποία το μήνυμα έχει υπογραφεί</translation>
|
<translation>Διεύθυνση Bitcoin η οποία το μήνυμα έχει υπογραφεί</translation>
|
||||||
|
@ -2020,10 +1877,6 @@ Address: %4
|
||||||
<source>Status</source>
|
<source>Status</source>
|
||||||
<translation>Κατάσταση</translation>
|
<translation>Κατάσταση</translation>
|
||||||
</message>
|
</message>
|
||||||
<message numerus="yes">
|
|
||||||
<source>, broadcast through %n node(s)</source>
|
|
||||||
<translation><numerusform>, έχει μεταδοθεί μέσω %n κόμβων</numerusform><numerusform>, έχει μεταδοθεί μέσω %n κόμβων</numerusform></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Date</source>
|
<source>Date</source>
|
||||||
<translation>Ημερομηνία</translation>
|
<translation>Ημερομηνία</translation>
|
||||||
|
@ -2060,10 +1913,6 @@ Address: %4
|
||||||
<source>Credit</source>
|
<source>Credit</source>
|
||||||
<translation>Πίστωση </translation>
|
<translation>Πίστωση </translation>
|
||||||
</message>
|
</message>
|
||||||
<message numerus="yes">
|
|
||||||
<source>matures in %n more block(s)</source>
|
|
||||||
<translation><numerusform>ωρίμανση σε %n επιπλέον μπλοκ</numerusform><numerusform>ωρίμανση σε %n επιπλέον μπλοκ</numerusform></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>not accepted</source>
|
<source>not accepted</source>
|
||||||
<translation>μη αποδεκτό</translation>
|
<translation>μη αποδεκτό</translation>
|
||||||
|
@ -2136,10 +1985,6 @@ Address: %4
|
||||||
<source>, has not been successfully broadcast yet</source>
|
<source>, has not been successfully broadcast yet</source>
|
||||||
<translation>, δεν έχει ακόμα μεταδοθεί μ' επιτυχία</translation>
|
<translation>, δεν έχει ακόμα μεταδοθεί μ' επιτυχία</translation>
|
||||||
</message>
|
</message>
|
||||||
<message numerus="yes">
|
|
||||||
<source>Open for %n more block(s)</source>
|
|
||||||
<translation><numerusform>Ανοιχτό για %n μπλοκ</numerusform><numerusform>Ανοιχτό για %n μπλοκ</numerusform></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>unknown</source>
|
<source>unknown</source>
|
||||||
<translation>άγνωστο</translation>
|
<translation>άγνωστο</translation>
|
||||||
|
@ -2166,14 +2011,6 @@ Address: %4
|
||||||
<source>Type</source>
|
<source>Type</source>
|
||||||
<translation>Τύπος</translation>
|
<translation>Τύπος</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Open until %1</source>
|
<source>Open until %1</source>
|
||||||
<translation>Ανοιχτό μέχρι %1</translation>
|
<translation>Ανοιχτό μέχρι %1</translation>
|
||||||
|
@ -2194,6 +2031,10 @@ Address: %4
|
||||||
<source>Offline</source>
|
<source>Offline</source>
|
||||||
<translation>Offline</translation>
|
<translation>Offline</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Label</source>
|
||||||
|
<translation>Επιγραφή</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unconfirmed</source>
|
<source>Unconfirmed</source>
|
||||||
<translation>Ανεπιβεβαίωτες</translation>
|
<translation>Ανεπιβεβαίωτες</translation>
|
||||||
|
@ -2204,7 +2045,7 @@ Address: %4
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Received with</source>
|
<source>Received with</source>
|
||||||
<translation>Παραλαβή με</translation>
|
<translation>Ελήφθη με</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Received from</source>
|
<source>Received from</source>
|
||||||
|
@ -2212,7 +2053,7 @@ Address: %4
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Sent to</source>
|
<source>Sent to</source>
|
||||||
<translation>Αποστολή προς</translation>
|
<translation>Απεστάλη προς</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Payment to yourself</source>
|
<source>Payment to yourself</source>
|
||||||
|
@ -2242,10 +2083,6 @@ Address: %4
|
||||||
<source>Type of transaction.</source>
|
<source>Type of transaction.</source>
|
||||||
<translation>Είδος συναλλαγής.</translation>
|
<translation>Είδος συναλλαγής.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Destination address of transaction.</source>
|
|
||||||
<translation>Διεύθυνση αποστολής της συναλλαγής.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Amount removed from or added to balance.</source>
|
<source>Amount removed from or added to balance.</source>
|
||||||
<translation>Ποσό που αφαιρέθηκε ή προστέθηκε στο υπόλοιπο.</translation>
|
<translation>Ποσό που αφαιρέθηκε ή προστέθηκε στο υπόλοιπο.</translation>
|
||||||
|
@ -2520,10 +2357,6 @@ Address: %4
|
||||||
<source>Corrupted block database detected</source>
|
<source>Corrupted block database detected</source>
|
||||||
<translation>Εντοπισθηκε διεφθαρμενη βαση δεδομενων των μπλοκ</translation>
|
<translation>Εντοπισθηκε διεφθαρμενη βαση δεδομενων των μπλοκ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Discover own IP address (default: 1 when listening and no -externalip)</source>
|
|
||||||
<translation>Ανακαλύψτε την δικη σας IP διεύθυνση (προεπιλογή: 1 όταν ακούει και δεν - externalip) </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Do you want to rebuild the block database now?</source>
|
<source>Do you want to rebuild the block database now?</source>
|
||||||
<translation>Θελετε να δημιουργηθει τωρα η βαση δεδομενων του μπλοκ? </translation>
|
<translation>Θελετε να δημιουργηθει τωρα η βαση δεδομενων του μπλοκ? </translation>
|
||||||
|
@ -2568,10 +2401,6 @@ Address: %4
|
||||||
<source>Not enough file descriptors available.</source>
|
<source>Not enough file descriptors available.</source>
|
||||||
<translation>Δεν ειναι αρκετες περιγραφες αρχείων διαθέσιμες.</translation>
|
<translation>Δεν ειναι αρκετες περιγραφες αρχείων διαθέσιμες.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Rebuild block chain index from current blk000??.dat files</source>
|
|
||||||
<translation>Εισαγωγή μπλοκ από εξωτερικό αρχείο blk000?.dat</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Specify wallet file (within data directory)</source>
|
<source>Specify wallet file (within data directory)</source>
|
||||||
<translation>Επιλέξτε αρχείο πορτοφολιού (μέσα απο κατάλογο δεδομένων)</translation>
|
<translation>Επιλέξτε αρχείο πορτοφολιού (μέσα απο κατάλογο δεδομένων)</translation>
|
||||||
|
@ -2596,6 +2425,10 @@ Address: %4
|
||||||
<source>Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.</source>
|
<source>Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.</source>
|
||||||
<translation>Αδυναμία κλειδώματος του φακέλου δεδομένων %s. Πιθανώς το Bitcoin να είναι ήδη ενεργό.</translation>
|
<translation>Αδυναμία κλειδώματος του φακέλου δεδομένων %s. Πιθανώς το Bitcoin να είναι ήδη ενεργό.</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Choose data directory on startup (default: 0)</source>
|
||||||
|
<translation>Επιλογή φακέλου δεδομένων στην εκκίνηση (προεπιλεγμένο: 0)</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Connect through SOCKS5 proxy</source>
|
<source>Connect through SOCKS5 proxy</source>
|
||||||
<translation>Σύνδεση μέσω διαμεσολαβητή SOCKS5</translation>
|
<translation>Σύνδεση μέσω διαμεσολαβητή SOCKS5</translation>
|
||||||
|
@ -2632,6 +2465,18 @@ Address: %4
|
||||||
<source>Send trace/debug info to console instead of debug.log file</source>
|
<source>Send trace/debug info to console instead of debug.log file</source>
|
||||||
<translation>Αποστολή πληροφοριών εντοπισμού σφαλμάτων στην κονσόλα αντί του αρχείου debug.log</translation>
|
<translation>Αποστολή πληροφοριών εντοπισμού σφαλμάτων στην κονσόλα αντί του αρχείου debug.log</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
|
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
|
||||||
<translation>Συρρίκνωση του αρχείο debug.log κατα την εκκίνηση του πελάτη (προεπιλογή: 1 όταν δεν-debug)</translation>
|
<translation>Συρρίκνωση του αρχείο debug.log κατα την εκκίνηση του πελάτη (προεπιλογή: 1 όταν δεν-debug)</translation>
|
||||||
|
@ -2640,6 +2485,10 @@ Address: %4
|
||||||
<source>Signing transaction failed</source>
|
<source>Signing transaction failed</source>
|
||||||
<translation>Η υπογραφή συναλλαγής απέτυχε </translation>
|
<translation>Η υπογραφή συναλλαγής απέτυχε </translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Start minimized</source>
|
||||||
|
<translation>Έναρξη ελαχιστοποιημένο</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This is experimental software.</source>
|
<source>This is experimental software.</source>
|
||||||
<translation>Η εφαρμογή είναι σε πειραματικό στάδιο.</translation>
|
<translation>Η εφαρμογή είναι σε πειραματικό στάδιο.</translation>
|
||||||
|
@ -2668,10 +2517,6 @@ Address: %4
|
||||||
<source>Warning</source>
|
<source>Warning</source>
|
||||||
<translation>Προειδοποίηση</translation>
|
<translation>Προειδοποίηση</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Warning: This version is obsolete, upgrade required!</source>
|
|
||||||
<translation>Προειδοποίηση: Αυτή η έκδοση είναι ξεπερασμένη, απαιτείται αναβάθμιση </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Zapping all transactions from wallet...</source>
|
<source>Zapping all transactions from wallet...</source>
|
||||||
<translation>Μεταφορά όλων των συναλλαγών απο το πορτοφόλι</translation>
|
<translation>Μεταφορά όλων των συναλλαγών απο το πορτοφόλι</translation>
|
||||||
|
|
|
@ -195,12 +195,7 @@
|
||||||
<translation>Change passphrase</translation>
|
<translation>Change passphrase</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+1"/>
|
<location line="+46"/>
|
||||||
<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"/>
|
|
||||||
<source>Confirm wallet encryption</source>
|
<source>Confirm wallet encryption</source>
|
||||||
<translation>Confirm wallet encryption</translation>
|
<translation>Confirm wallet encryption</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -242,7 +237,12 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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="+7"/>
|
||||||
<location line="+42"/>
|
<location line="+42"/>
|
||||||
<location line="+6"/>
|
<location line="+6"/>
|
||||||
|
@ -549,7 +549,15 @@
|
||||||
<translation>No block source available...</translation>
|
<translation>No block source available...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message numerus="yes">
|
<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>
|
<source>%n hour(s)</source>
|
||||||
<translation>
|
<translation>
|
||||||
<numerusform>%n hour</numerusform>
|
<numerusform>%n hour</numerusform>
|
||||||
|
@ -621,16 +629,8 @@
|
||||||
<source>Up to date</source>
|
<source>Up to date</source>
|
||||||
<translation>Up to date</translation>
|
<translation>Up to date</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<location line="+49"/>
|
<location line="+44"/>
|
||||||
<source>Catching up...</source>
|
<source>Catching up...</source>
|
||||||
<translation>Catching up...</translation>
|
<translation>Catching up...</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -912,7 +912,22 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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 "medium".</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>
|
<source>Can vary +/- %1 satoshi(s) per input.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -927,12 +942,7 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+16"/>
|
<location line="+17"/>
|
||||||
<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="+5"/>
|
<location line="+5"/>
|
||||||
<source>This means a fee of at least %1 per kB is required.</source>
|
<source>This means a fee of at least %1 per kB is required.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
|
@ -948,17 +958,7 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+1"/>
|
<location line="+59"/>
|
||||||
<source>This label turns red, if the priority is smaller than "medium".</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="+61"/>
|
<location line="+61"/>
|
||||||
<source>(no label)</source>
|
<source>(no label)</source>
|
||||||
<translation type="unfinished">(no label)</translation>
|
<translation type="unfinished">(no label)</translation>
|
||||||
|
@ -1437,7 +1437,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="-29"/>
|
<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>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
|
@ -1459,13 +1459,13 @@
|
||||||
<translation>Form</translation>
|
<translation>Form</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+53"/>
|
<location line="+59"/>
|
||||||
<location line="+372"/>
|
<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>
|
<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>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<location line="-133"/>
|
<location line="-139"/>
|
||||||
<source>Watch-only:</source>
|
<source>Watch-only:</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -1500,12 +1500,12 @@
|
||||||
<translation>Mined balance that has not yet matured</translation>
|
<translation>Mined balance that has not yet matured</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="-163"/>
|
<location line="-177"/>
|
||||||
<source>Balances</source>
|
<source>Balances</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+147"/>
|
<location line="+161"/>
|
||||||
<source>Total:</source>
|
<source>Total:</source>
|
||||||
<translation>Total:</translation>
|
<translation>Total:</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -1544,12 +1544,6 @@
|
||||||
<source>Current total balance in watch-only addresses</source>
|
<source>Current total balance in watch-only addresses</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../overviewpage.cpp" line="+133"/>
|
|
||||||
<location line="+1"/>
|
|
||||||
<source>out of sync</source>
|
|
||||||
<translation>out of sync</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>PaymentServer</name>
|
<name>PaymentServer</name>
|
||||||
|
@ -2557,12 +2551,7 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+193"/>
|
<location line="+196"/>
|
||||||
<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"/>
|
|
||||||
<source>The amount to pay must be larger than 0.</source>
|
<source>The amount to pay must be larger than 0.</source>
|
||||||
<translation>The amount to pay must be larger than 0.</translation>
|
<translation>The amount to pay must be larger than 0.</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2577,12 +2566,7 @@
|
||||||
<translation>The total exceeds your balance when the %1 transaction fee is included.</translation>
|
<translation>The total exceeds your balance when the %1 transaction fee is included.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+3"/>
|
<location line="+6"/>
|
||||||
<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"/>
|
|
||||||
<source>Transaction creation failed!</source>
|
<source>Transaction creation failed!</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2605,8 +2589,8 @@
|
||||||
<location line="+110"/>
|
<location line="+110"/>
|
||||||
<source>Estimated to begin confirmation within %n block(s).</source>
|
<source>Estimated to begin confirmation within %n block(s).</source>
|
||||||
<translation type="unfinished">
|
<translation type="unfinished">
|
||||||
<numerusform></numerusform>
|
<numerusform>Estimated to begin confirmation within %n block.</numerusform>
|
||||||
<numerusform></numerusform>
|
<numerusform>Estimated to begin confirmation within %n blocks.</numerusform>
|
||||||
</translation>
|
</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
|
@ -2615,7 +2599,17 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>Warning: Invalid Bitcoin address</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2648,14 +2642,14 @@
|
||||||
<context>
|
<context>
|
||||||
<name>SendCoinsEntry</name>
|
<name>SendCoinsEntry</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../forms/sendcoinsentry.ui" line="+149"/>
|
<location filename="../forms/sendcoinsentry.ui" line="+155"/>
|
||||||
<location line="+535"/>
|
<location line="+539"/>
|
||||||
<location line="+536"/>
|
<location line="+533"/>
|
||||||
<source>A&mount:</source>
|
<source>A&mount:</source>
|
||||||
<translation>A&mount:</translation>
|
<translation>A&mount:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="-1184"/>
|
<location line="-1185"/>
|
||||||
<source>Pay &To:</source>
|
<source>Pay &To:</source>
|
||||||
<translation>Pay &To:</translation>
|
<translation>Pay &To:</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2675,12 +2669,12 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="-40"/>
|
<location line="-46"/>
|
||||||
<source>This is a normal payment.</source>
|
<source>This is a normal payment.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+33"/>
|
<location line="+39"/>
|
||||||
<source>The Bitcoin address to send the payment to</source>
|
<source>The Bitcoin address to send the payment to</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2701,13 +2695,13 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+7"/>
|
<location line="+7"/>
|
||||||
<location line="+544"/>
|
<location line="+548"/>
|
||||||
<location line="+536"/>
|
<location line="+533"/>
|
||||||
<source>Remove this entry</source>
|
<source>Remove this entry</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<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>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2722,17 +2716,17 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+436"/>
|
<location line="+443"/>
|
||||||
<source>This is an unauthenticated payment request.</source>
|
<source>This is an unauthenticated payment request.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+532"/>
|
<location line="+529"/>
|
||||||
<source>This is an authenticated payment request.</source>
|
<source>This is an authenticated payment request.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>Enter a label for this address to add it to the list of used addresses</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2742,14 +2736,14 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+444"/>
|
<location line="+448"/>
|
||||||
<location line="+532"/>
|
<location line="+529"/>
|
||||||
<source>Pay To:</source>
|
<source>Pay To:</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="-498"/>
|
<location line="-495"/>
|
||||||
<location line="+536"/>
|
<location line="+533"/>
|
||||||
<source>Memo:</source>
|
<source>Memo:</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2978,7 +2972,7 @@
|
||||||
<context>
|
<context>
|
||||||
<name>TransactionDesc</name>
|
<name>TransactionDesc</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../transactiondesc.cpp" line="+35"/>
|
<location filename="../transactiondesc.cpp" line="+34"/>
|
||||||
<source>Open until %1</source>
|
<source>Open until %1</source>
|
||||||
<translation>Open until %1</translation>
|
<translation>Open until %1</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -3584,7 +3578,7 @@
|
||||||
<context>
|
<context>
|
||||||
<name>bitcoin-core</name>
|
<name>bitcoin-core</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../bitcoinstrings.cpp" line="+269"/>
|
<location filename="../bitcoinstrings.cpp" line="+268"/>
|
||||||
<source>Options:</source>
|
<source>Options:</source>
|
||||||
<translation>Options:</translation>
|
<translation>Options:</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -3604,12 +3598,12 @@
|
||||||
<translation>Specify your own public address</translation>
|
<translation>Specify your own public address</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="-116"/>
|
<location line="-117"/>
|
||||||
<source>Accept command line and JSON-RPC commands</source>
|
<source>Accept command line and JSON-RPC commands</source>
|
||||||
<translation>Accept command line and JSON-RPC commands</translation>
|
<translation>Accept command line and JSON-RPC commands</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+94"/>
|
<location line="+95"/>
|
||||||
<source>Run in the background as a daemon and accept commands</source>
|
<source>Run in the background as a daemon and accept commands</source>
|
||||||
<translation>Run in the background as a daemon and accept commands</translation>
|
<translation>Run in the background as a daemon and accept commands</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -3619,12 +3613,12 @@
|
||||||
<translation>Use the test network</translation>
|
<translation>Use the test network</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="-135"/>
|
<location line="-136"/>
|
||||||
<source>Accept connections from outside (default: 1 if no -proxy or -connect)</source>
|
<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>
|
<translation>Accept connections from outside (default: 1 if no -proxy or -connect)</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<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>
|
<translation>Bind to given address and always listen on it. Use [host]:port notation for IPv6</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -3659,7 +3653,17 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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, >%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, <0 = leave that many cores free, default: %d)</source>
|
<source>Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</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>
|
<translation>Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction.</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<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>
|
<translation>Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues.</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -3704,7 +3708,7 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+12"/>
|
<location line="+11"/>
|
||||||
<source>(default: 1)</source>
|
<source>(default: 1)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -3829,12 +3833,7 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+6"/>
|
<location line="+18"/>
|
||||||
<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"/>
|
|
||||||
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
|
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -3879,7 +3878,12 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<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>
|
<translation>You need to rebuild the database using -reindex to change -txindex</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -3889,7 +3893,7 @@
|
||||||
<translation>Imports blocks from external blk000??.dat file</translation>
|
<translation>Imports blocks from external blk000??.dat file</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="-224"/>
|
<location line="-223"/>
|
||||||
<source>Allow JSON-RPC connections from specified source. Valid for <ip> are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This option can be specified multiple times</source>
|
<source>Allow JSON-RPC connections from specified source. Valid for <ip> are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This option can be specified multiple times</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -3964,12 +3968,7 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+3"/>
|
<location line="+10"/>
|
||||||
<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"/>
|
|
||||||
<source>Prune configured below the minimum of %d MB. Please use a higher number.</source>
|
<source>Prune configured below the minimum of %d MB. Please use a higher number.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -3984,12 +3983,7 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+3"/>
|
<location line="+9"/>
|
||||||
<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"/>
|
|
||||||
<source>Require high priority for relaying free or low-fee transactions (default: %u)</source>
|
<source>Require high priority for relaying free or low-fee transactions (default: %u)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -4038,11 +4032,6 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.
|
||||||
<source>Warning: Please check that your computer's date and time are correct! If your clock is wrong Bitcoin Core will not work properly.</source>
|
<source>Warning: Please check that your computer's date and time are correct! If your clock is wrong Bitcoin Core will not work properly.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location line="+3"/>
|
|
||||||
<source>Warning: Reverting this setting requires re-downloading the entire blockchain.</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location line="+19"/>
|
<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>
|
<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>
|
||||||
|
@ -4059,22 +4048,17 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+1"/>
|
<location line="+5"/>
|
||||||
<source>(default: 0 = disable pruning blocks,</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location line="+3"/>
|
|
||||||
<source>>%u = target size in MiB to use for block files)</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location line="+3"/>
|
|
||||||
<source>Accept public REST requests (default: %u)</source>
|
<source>Accept public REST requests (default: %u)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+4"/>
|
<location line="+2"/>
|
||||||
|
<source>Activating best chain...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location line="+3"/>
|
||||||
<source>Allow self signed root certificates (default: 0)</source>
|
<source>Allow self signed root certificates (default: 0)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -4204,7 +4188,12 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<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>
|
<translation>Send trace/debug info to console instead of debug.log file</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -4309,12 +4298,7 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.
|
||||||
<translation>Warning</translation>
|
<translation>Warning</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+1"/>
|
<location line="+2"/>
|
||||||
<source>Warning: This version is obsolete, upgrade required!</source>
|
|
||||||
<translation>Warning: This version is obsolete, upgrade required!</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location line="+1"/>
|
|
||||||
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
|
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -4344,12 +4328,12 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.
|
||||||
<translation>Password for JSON-RPC connections</translation>
|
<translation>Password for JSON-RPC connections</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<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>
|
<translation>Execute command when the best block changes (%s in cmd is replaced by block hash)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+259"/>
|
<location line="+258"/>
|
||||||
<source>Upgrade wallet to latest format</source>
|
<source>Upgrade wallet to latest format</source>
|
||||||
<translation>Upgrade wallet to latest format</translation>
|
<translation>Upgrade wallet to latest format</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -4384,7 +4368,7 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.
|
||||||
<translation>Error loading wallet.dat: Wallet corrupted</translation>
|
<translation>Error loading wallet.dat: Wallet corrupted</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>(1 = keep tx meta data e.g. account owner and payment request information, 2 = drop tx meta data)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -4419,22 +4403,22 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+48"/>
|
<location line="+51"/>
|
||||||
<source>Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: %s)</source>
|
<source>Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: %s)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+37"/>
|
<location line="+34"/>
|
||||||
<source>(default: %s)</source>
|
<source>(default: %s)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+9"/>
|
<location line="+7"/>
|
||||||
<source>Acceptable ciphers (default: %s)</source>
|
<source>Acceptable ciphers (default: %s)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location line="+4"/>
|
<location line="+5"/>
|
||||||
<source>Always query for peer addresses via DNS lookup (default: %u)</source>
|
<source>Always query for peer addresses via DNS lookup (default: %u)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Export the data in the current tab to a file</source>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>&Export</source>
|
<source>&Export</source>
|
||||||
|
@ -147,10 +147,6 @@
|
||||||
<source>Change passphrase</source>
|
<source>Change passphrase</source>
|
||||||
<translation>Ŝanĝi la pasfrazon</translation>
|
<translation>Ŝanĝi la pasfrazon</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Enter the old and new passphrase to the wallet.</source>
|
|
||||||
<translation>Tajpu la malnovan kaj novan monujajn pasfrazojn.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Confirm wallet encryption</source>
|
<source>Confirm wallet encryption</source>
|
||||||
<translation>Konfirmo de ĉifrado de la monujo</translation>
|
<translation>Konfirmo de ĉifrado de la monujo</translation>
|
||||||
|
@ -175,10 +171,6 @@
|
||||||
<source>Wallet encrypted</source>
|
<source>Wallet encrypted</source>
|
||||||
<translation>La monujo estas ĉifrita</translation>
|
<translation>La monujo estas ĉifrita</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Wallet encryption failed</source>
|
<source>Wallet encryption failed</source>
|
||||||
<translation>Ĉifrado de la monujo fiaskis</translation>
|
<translation>Ĉifrado de la monujo fiaskis</translation>
|
||||||
|
@ -298,10 +290,6 @@
|
||||||
<source>Send coins to a Bitcoin address</source>
|
<source>Send coins to a Bitcoin address</source>
|
||||||
<translation>Sendi monon al Bitmon-adreso</translation>
|
<translation>Sendi monon al Bitmon-adreso</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Modify configuration options for Bitcoin</source>
|
|
||||||
<translation>Modifi agordaĵojn por Bitmono</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Backup wallet to another location</source>
|
<source>Backup wallet to another location</source>
|
||||||
<translation>Krei alilokan sekurkopion de monujo</translation>
|
<translation>Krei alilokan sekurkopion de monujo</translation>
|
||||||
|
@ -402,34 +390,14 @@
|
||||||
<source>&Command-line options</source>
|
<source>&Command-line options</source>
|
||||||
<translation>&Komandliniaj agordaĵoj</translation>
|
<translation>&Komandliniaj agordaĵoj</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>No block source available...</source>
|
<source>No block source available...</source>
|
||||||
<translation>Neniu fonto de blokoj trovebla...</translation>
|
<translation>Neniu fonto de blokoj trovebla...</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>%1 and %2</source>
|
<source>%1 and %2</source>
|
||||||
<translation>%1 kaj %2</translation>
|
<translation>%1 kaj %2</translation>
|
||||||
</message>
|
</message>
|
||||||
<message numerus="yes">
|
|
||||||
<source>%n year(s)</source>
|
|
||||||
<translation><numerusform>%n jaro</numerusform><numerusform>%n jaroj</numerusform></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>%1 behind</source>
|
<source>%1 behind</source>
|
||||||
<translation>mankas %1</translation>
|
<translation>mankas %1</translation>
|
||||||
|
@ -470,18 +438,6 @@
|
||||||
<source>Incoming transaction</source>
|
<source>Incoming transaction</source>
|
||||||
<translation>Envenanta transakcio</translation>
|
<translation>Envenanta transakcio</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Date: %1
|
|
||||||
Amount: %2
|
|
||||||
Type: %3
|
|
||||||
Address: %4
|
|
||||||
</source>
|
|
||||||
<translation>Dato: %1
|
|
||||||
Sumo: %2
|
|
||||||
Tipo: %3
|
|
||||||
Adreso: %4
|
|
||||||
</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
||||||
<translation>Monujo estas <b>ĉifrita</b> kaj aktuale <b>malŝlosita</b></translation>
|
<translation>Monujo estas <b>ĉifrita</b> kaj aktuale <b>malŝlosita</b></translation>
|
||||||
|
@ -660,10 +616,6 @@ Adreso: %4
|
||||||
<source>no</source>
|
<source>no</source>
|
||||||
<translation>ne</translation>
|
<translation>ne</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>This means a fee of at least %1 per kB is required.</source>
|
<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>
|
<translation>Tio signifas, ke krompago de almenaŭ po %1 por ĉiu kB estas deviga.</translation>
|
||||||
|
@ -676,10 +628,6 @@ Adreso: %4
|
||||||
<source>Transactions with higher priority are more likely to get included into a block.</source>
|
<source>Transactions with higher priority are more likely to get included into a block.</source>
|
||||||
<translation>Transakcioj kun pli alta prioritato havas pli altan ŝancon inkluziviĝi en bloko.</translation>
|
<translation>Transakcioj kun pli alta prioritato havas pli altan ŝancon inkluziviĝi en bloko.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>(no label)</source>
|
<source>(no label)</source>
|
||||||
<translation>(neniu etikedo)</translation>
|
<translation>(neniu etikedo)</translation>
|
||||||
|
@ -797,26 +745,6 @@ Adreso: %4
|
||||||
<source>command-line options</source>
|
<source>command-line options</source>
|
||||||
<translation>komandliniaj agordaĵoj</translation>
|
<translation>komandliniaj agordaĵoj</translation>
|
||||||
</message>
|
</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>
|
||||||
<context>
|
<context>
|
||||||
<name>Intro</name>
|
<name>Intro</name>
|
||||||
|
@ -886,14 +814,6 @@ Adreso: %4
|
||||||
<source>&Main</source>
|
<source>&Main</source>
|
||||||
<translation>Ĉ&efa</translation>
|
<translation>Ĉ&efa</translation>
|
||||||
</message>
|
</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>&Start Bitcoin on system login</source>
|
|
||||||
<translation>&Lanĉi Bitmonon tuj post ensaluto al la sistemo</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Size of &database cache</source>
|
<source>Size of &database cache</source>
|
||||||
<translation>Dosiergrando de &datumbasa kaŝmemoro</translation>
|
<translation>Dosiergrando de &datumbasa kaŝmemoro</translation>
|
||||||
|
@ -946,10 +866,6 @@ Adreso: %4
|
||||||
<source>&Minimize to the tray instead of the taskbar</source>
|
<source>&Minimize to the tray instead of the taskbar</source>
|
||||||
<translation>&Minimumigi al la sistempleto anstataŭ al la taskopleto</translation>
|
<translation>&Minimumigi al la sistempleto anstataŭ al la taskopleto</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>M&inimize on close</source>
|
<source>M&inimize on close</source>
|
||||||
<translation>M&inimumigi je fermo</translation>
|
<translation>M&inimumigi je fermo</translation>
|
||||||
|
@ -962,10 +878,6 @@ Adreso: %4
|
||||||
<source>User Interface &language:</source>
|
<source>User Interface &language:</source>
|
||||||
<translation>&Lingvo de la fasado:</translation>
|
<translation>&Lingvo de la fasado:</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>&Unit to show amounts in:</source>
|
<source>&Unit to show amounts in:</source>
|
||||||
<translation>&Unuo por vidigi sumojn:</translation>
|
<translation>&Unuo por vidigi sumojn:</translation>
|
||||||
|
@ -1220,18 +1132,10 @@ Adreso: %4
|
||||||
<source>Debug log file</source>
|
<source>Debug log file</source>
|
||||||
<translation>Sencimiga protokoldosiero</translation>
|
<translation>Sencimiga protokoldosiero</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Clear console</source>
|
<source>Clear console</source>
|
||||||
<translation>Malplenigi konzolon</translation>
|
<translation>Malplenigi konzolon</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Welcome to the Bitcoin RPC console.</source>
|
|
||||||
<translation>Bonvenon al la RPC-konzolo de Bitmono.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
||||||
<translation>Uzu la sagojn supran kaj malsupran por esplori la historion, kaj <b>stir-L</b> por malplenigi la ekranon.</translation>
|
<translation>Uzu la sagojn supran kaj malsupran por esplori la historion, kaj <b>stir-L</b> por malplenigi la ekranon.</translation>
|
||||||
|
@ -1398,7 +1302,7 @@ Adreso: %4
|
||||||
<name>SendCoinsDialog</name>
|
<name>SendCoinsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<source>Send Coins</source>
|
<source>Send Coins</source>
|
||||||
<translation>Sendi Monon</translation>
|
<translation>Sendi Bitmonon</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Coin Control Features</source>
|
<source>Coin Control Features</source>
|
||||||
|
@ -1454,7 +1358,7 @@ Adreso: %4
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Clear &All</source>
|
<source>Clear &All</source>
|
||||||
<translation>&Forigi ĉion</translation>
|
<translation>&Forigi Ĉion</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Balance:</source>
|
<source>Balance:</source>
|
||||||
|
@ -1512,10 +1416,6 @@ Adreso: %4
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<translation>aŭ</translation>
|
<translation>aŭ</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The amount to pay must be larger than 0.</source>
|
<source>The amount to pay must be larger than 0.</source>
|
||||||
<translation>La pagenda sumo devas esti pli ol 0.</translation>
|
<translation>La pagenda sumo devas esti pli ol 0.</translation>
|
||||||
|
@ -1528,10 +1428,6 @@ Adreso: %4
|
||||||
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
|
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
|
||||||
<translation>La sumo kun la %1 krompago estas pli granda ol via saldo.</translation>
|
<translation>La sumo kun la %1 krompago estas pli granda ol via saldo.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Transaction creation failed!</source>
|
<source>Transaction creation failed!</source>
|
||||||
<translation>Kreo de transakcio fiaskis!</translation>
|
<translation>Kreo de transakcio fiaskis!</translation>
|
||||||
|
@ -1585,7 +1481,7 @@ Adreso: %4
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Paste address from clipboard</source>
|
<source>Paste address from clipboard</source>
|
||||||
<translation>Alglui adreson el tondejo</translation>
|
<translation>Alglui adreson de tondejo</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Alt+P</source>
|
<source>Alt+P</source>
|
||||||
|
@ -1629,10 +1525,6 @@ Adreso: %4
|
||||||
<source>&Sign Message</source>
|
<source>&Sign Message</source>
|
||||||
<translation>&Subskribi Mesaĝon</translation>
|
<translation>&Subskribi Mesaĝon</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Choose previously used address</source>
|
<source>Choose previously used address</source>
|
||||||
<translation>Elektu la jam uzitan adreson</translation>
|
<translation>Elektu la jam uzitan adreson</translation>
|
||||||
|
@ -1681,10 +1573,6 @@ Adreso: %4
|
||||||
<source>&Verify Message</source>
|
<source>&Verify Message</source>
|
||||||
<translation>&Kontroli Mesaĝon</translation>
|
<translation>&Kontroli Mesaĝon</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Verify the message to ensure it was signed with the specified Bitcoin address</source>
|
<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>
|
<translation>Kontroli la mesaĝon por pravigi, ke ĝi ja estas subskribita per la specifa Bitmon-adreso</translation>
|
||||||
|
@ -1794,10 +1682,6 @@ Adreso: %4
|
||||||
<source>Status</source>
|
<source>Status</source>
|
||||||
<translation>Stato</translation>
|
<translation>Stato</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Date</source>
|
<source>Date</source>
|
||||||
<translation>Dato</translation>
|
<translation>Dato</translation>
|
||||||
|
@ -1830,10 +1714,6 @@ Adreso: %4
|
||||||
<source>Credit</source>
|
<source>Credit</source>
|
||||||
<translation>Kredito</translation>
|
<translation>Kredito</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>not accepted</source>
|
<source>not accepted</source>
|
||||||
<translation>ne akceptita</translation>
|
<translation>ne akceptita</translation>
|
||||||
|
@ -1898,10 +1778,6 @@ Adreso: %4
|
||||||
<source>, has not been successfully broadcast yet</source>
|
<source>, has not been successfully broadcast yet</source>
|
||||||
<translation>, ankoraŭ ne elsendita sukcese</translation>
|
<translation>, ankoraŭ ne elsendita sukcese</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>unknown</source>
|
<source>unknown</source>
|
||||||
<translation>nekonata</translation>
|
<translation>nekonata</translation>
|
||||||
|
@ -1928,14 +1804,6 @@ Adreso: %4
|
||||||
<source>Type</source>
|
<source>Type</source>
|
||||||
<translation>Tipo</translation>
|
<translation>Tipo</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Open until %1</source>
|
<source>Open until %1</source>
|
||||||
<translation>Malferma ĝis %1</translation>
|
<translation>Malferma ĝis %1</translation>
|
||||||
|
@ -1956,6 +1824,10 @@ Adreso: %4
|
||||||
<source>Offline</source>
|
<source>Offline</source>
|
||||||
<translation>Senkonekte</translation>
|
<translation>Senkonekte</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Label</source>
|
||||||
|
<translation>Etikedo</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unconfirmed</source>
|
<source>Unconfirmed</source>
|
||||||
<translation>Nekonfirmita</translation>
|
<translation>Nekonfirmita</translation>
|
||||||
|
@ -1996,10 +1868,6 @@ Adreso: %4
|
||||||
<source>Type of transaction.</source>
|
<source>Type of transaction.</source>
|
||||||
<translation>Tipo de transakcio.</translation>
|
<translation>Tipo de transakcio.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Destination address of transaction.</source>
|
|
||||||
<translation>Celadreso de la transakcio.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Amount removed from or added to balance.</source>
|
<source>Amount removed from or added to balance.</source>
|
||||||
<translation>Sumo elprenita de aŭ aldonita al la saldo.</translation>
|
<translation>Sumo elprenita de aŭ aldonita al la saldo.</translation>
|
||||||
|
@ -2254,10 +2122,6 @@ Adreso: %4
|
||||||
<source>Corrupted block database detected</source>
|
<source>Corrupted block database detected</source>
|
||||||
<translation>Difektita blokdatumbazo trovita</translation>
|
<translation>Difektita blokdatumbazo trovita</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Do you want to rebuild the block database now?</source>
|
<source>Do you want to rebuild the block database now?</source>
|
||||||
<translation>Ĉu vi volas rekonstrui la blokdatumbazon nun?</translation>
|
<translation>Ĉu vi volas rekonstrui la blokdatumbazon nun?</translation>
|
||||||
|
@ -2298,10 +2162,6 @@ Adreso: %4
|
||||||
<source>Not enough file descriptors available.</source>
|
<source>Not enough file descriptors available.</source>
|
||||||
<translation>Nesufiĉa nombro de dosierpriskribiloj disponeblas.</translation>
|
<translation>Nesufiĉa nombro de dosierpriskribiloj disponeblas.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Specify wallet file (within data directory)</source>
|
<source>Specify wallet file (within data directory)</source>
|
||||||
<translation>Specifi monujan dosieron (ene de dosierujo por datumoj)</translation>
|
<translation>Specifi monujan dosieron (ene de dosierujo por datumoj)</translation>
|
||||||
|
@ -2334,6 +2194,10 @@ Adreso: %4
|
||||||
<source>Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message)</source>
|
<source>Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message)</source>
|
||||||
<translation>Plenumi komandon kiam rilata alerto riceviĝas, aŭ kiam ni vidas tre longan forkon (%s en cms anstataŭiĝas per mesaĝo)</translation>
|
<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>
|
||||||
|
<message>
|
||||||
|
<source>Choose data directory on startup (default: 0)</source>
|
||||||
|
<translation>Elekti dosierujon por datumoj dum lanĉo (defaŭlte: 0)</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Information</source>
|
<source>Information</source>
|
||||||
<translation>Informoj</translation>
|
<translation>Informoj</translation>
|
||||||
|
@ -2350,6 +2214,14 @@ Adreso: %4
|
||||||
<source>Send trace/debug info to console instead of debug.log file</source>
|
<source>Send trace/debug info to console instead of debug.log file</source>
|
||||||
<translation>Sendi spurajn/sencimigajn informojn al la konzolo anstataŭ al dosiero debug.log</translation>
|
<translation>Sendi spurajn/sencimigajn informojn al la konzolo anstataŭ al dosiero debug.log</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
|
<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>
|
<translation>Malpligrandigi la sencimigan protokol-dosieron kiam kliento lanĉiĝas (defaŭlte: 1 kiam mankas -debug)</translation>
|
||||||
|
@ -2358,6 +2230,10 @@ Adreso: %4
|
||||||
<source>Signing transaction failed</source>
|
<source>Signing transaction failed</source>
|
||||||
<translation>Subskriba transakcio fiaskis</translation>
|
<translation>Subskriba transakcio fiaskis</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Start minimized</source>
|
||||||
|
<translation>Lanĉiĝi plejete</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This is experimental software.</source>
|
<source>This is experimental software.</source>
|
||||||
<translation>ĝi estas eksperimenta programo</translation>
|
<translation>ĝi estas eksperimenta programo</translation>
|
||||||
|
@ -2386,10 +2262,6 @@ Adreso: %4
|
||||||
<source>Warning</source>
|
<source>Warning</source>
|
||||||
<translation>Averto</translation>
|
<translation>Averto</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Warning: This version is obsolete, upgrade required!</source>
|
|
||||||
<translation>Averto: tiu ĉi versio estas eksdata. Vi bezonas ĝisdatigon!</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>wallet.dat corrupt, salvage failed</source>
|
<source>wallet.dat corrupt, salvage failed</source>
|
||||||
<translation>wallet.dat estas difektita, riparo malsukcesis</translation>
|
<translation>wallet.dat estas difektita, riparo malsukcesis</translation>
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Delete the currently selected address from the list</source>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>Export the data in the current tab to a file</source>
|
<source>Export the data in the current tab to a file</source>
|
||||||
|
@ -151,10 +151,6 @@
|
||||||
<source>Change passphrase</source>
|
<source>Change passphrase</source>
|
||||||
<translation>Cambiar contraseña</translation>
|
<translation>Cambiar contraseña</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Confirm wallet encryption</source>
|
<source>Confirm wallet encryption</source>
|
||||||
<translation>Confirmar cifrado del monedero</translation>
|
<translation>Confirmar cifrado del monedero</translation>
|
||||||
|
@ -167,6 +163,10 @@
|
||||||
<source>Are you sure you wish to encrypt your wallet?</source>
|
<source>Are you sure you wish to encrypt your wallet?</source>
|
||||||
<translation>¿Estás seguro que deseas cifrar tu monedero ?</translation>
|
<translation>¿Estás seguro que deseas cifrar tu monedero ?</translation>
|
||||||
</message>
|
</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>
|
<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>
|
<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>
|
<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>
|
||||||
|
@ -184,8 +184,8 @@
|
||||||
<translation>Introduzca la nueva contraseña para el monedero.<br/>Utilice por favor una contraseña con <b>diez o más caracteres aleatorios</b> o con <b>ocho o más palabras</b>.</translation>
|
<translation>Introduzca la nueva contraseña para el monedero.<br/>Utilice por favor una contraseña con <b>diez o más caracteres aleatorios</b> o con <b>ocho o más palabras</b>.</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>Enter the old passphrase and new passphrase to the wallet.</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>
|
<translation>Introduce la antigua y la nueva contraseña de la cartera.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Wallet encryption failed</source>
|
<source>Wallet encryption failed</source>
|
||||||
|
@ -306,10 +306,6 @@
|
||||||
<source>Send coins to a Bitcoin address</source>
|
<source>Send coins to a Bitcoin address</source>
|
||||||
<translation>Enviar bitcoins a una dirección Bitcoin</translation>
|
<translation>Enviar bitcoins a una dirección Bitcoin</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Modify configuration options for Bitcoin</source>
|
|
||||||
<translation>Modificar las opciones de configuración de Bitcoin</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Backup wallet to another location</source>
|
<source>Backup wallet to another location</source>
|
||||||
<translation>Copia de seguridad del monedero en otra ubicación</translation>
|
<translation>Copia de seguridad del monedero en otra ubicación</translation>
|
||||||
|
@ -320,7 +316,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&Debug window</source>
|
<source>&Debug window</source>
|
||||||
<translation>Ventana de &depuración</translation>
|
<translation>&Ventana de depuración</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Open debugging and diagnostic console</source>
|
<source>Open debugging and diagnostic console</source>
|
||||||
|
@ -474,14 +470,28 @@
|
||||||
<source>Up to date</source>
|
<source>Up to date</source>
|
||||||
<translation>Actualizado</translation>
|
<translation>Actualizado</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Catching up...</source>
|
<source>Catching up...</source>
|
||||||
<translation>Actualizando...</translation>
|
<translation>Actualizando...</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Date: %1
|
||||||
|
</source>
|
||||||
|
<translation>Fecha: %1
|
||||||
|
</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Label: %1
|
||||||
|
</source>
|
||||||
|
<translation>Etiqueta: %1
|
||||||
|
</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Address: %1
|
||||||
|
</source>
|
||||||
|
<translation>Dirección: %1
|
||||||
|
</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Sent transaction</source>
|
<source>Sent transaction</source>
|
||||||
<translation>Transacción enviada</translation>
|
<translation>Transacción enviada</translation>
|
||||||
|
@ -490,18 +500,6 @@
|
||||||
<source>Incoming transaction</source>
|
<source>Incoming transaction</source>
|
||||||
<translation>Transacción entrante</translation>
|
<translation>Transacción entrante</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
||||||
<translation>El monedero está <b>cifrado</b> y actualmente <b>desbloqueado</b></translation>
|
<translation>El monedero está <b>cifrado</b> y actualmente <b>desbloqueado</b></translation>
|
||||||
|
@ -692,6 +690,14 @@ Dirección: %4
|
||||||
<source>none</source>
|
<source>none</source>
|
||||||
<translation>ninguna</translation>
|
<translation>ninguna</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Can vary +/- %1 satoshi(s) per input.</source>
|
<source>Can vary +/- %1 satoshi(s) per input.</source>
|
||||||
<translation>Puede variar en +/- %1 satoshi(s) por entrada.</translation>
|
<translation>Puede variar en +/- %1 satoshi(s) por entrada.</translation>
|
||||||
|
@ -704,10 +710,6 @@ Dirección: %4
|
||||||
<source>no</source>
|
<source>no</source>
|
||||||
<translation>no</translation>
|
<translation>no</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>This means a fee of at least %1 per kB is required.</source>
|
<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>
|
<translation>Esto implica que se requiere una comisión de al menos %1 por kB</translation>
|
||||||
|
@ -720,14 +722,6 @@ Dirección: %4
|
||||||
<source>Transactions with higher priority are more likely to get included into a block.</source>
|
<source>Transactions with higher priority are more likely to get included into a block.</source>
|
||||||
<translation>Las transacciones con mayor prioridad tienen mayor probabilidad de ser incluidas en un bloque.</translation>
|
<translation>Las transacciones con mayor prioridad tienen mayor probabilidad de ser incluidas en un bloque.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>(no label)</source>
|
<source>(no label)</source>
|
||||||
<translation>(sin etiqueta)</translation>
|
<translation>(sin etiqueta)</translation>
|
||||||
|
@ -849,30 +843,6 @@ Dirección: %4
|
||||||
<source>command-line options</source>
|
<source>command-line options</source>
|
||||||
<translation>opciones de la consola de comandos</translation>
|
<translation>opciones de la consola de comandos</translation>
|
||||||
</message>
|
</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>
|
||||||
<context>
|
<context>
|
||||||
<name>Intro</name>
|
<name>Intro</name>
|
||||||
|
@ -954,14 +924,6 @@ Dirección: %4
|
||||||
<source>&Main</source>
|
<source>&Main</source>
|
||||||
<translation>&Principal</translation>
|
<translation>&Principal</translation>
|
||||||
</message>
|
</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>&Start Bitcoin on system login</source>
|
|
||||||
<translation>&Iniciar Bitcoin al iniciar el sistema</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Size of &database cache</source>
|
<source>Size of &database cache</source>
|
||||||
<translation>Tamaño de cache de la &base de datos</translation>
|
<translation>Tamaño de cache de la &base de datos</translation>
|
||||||
|
@ -1010,6 +972,14 @@ Dirección: %4
|
||||||
<source>&Network</source>
|
<source>&Network</source>
|
||||||
<translation>&Red</translation>
|
<translation>&Red</translation>
|
||||||
</message>
|
</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>&Start Bitcoin Core on system login</source>
|
||||||
|
<translation>&Iniciar Bitcoin Core al inicio del sistema</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>(0 = auto, <0 = leave that many cores free)</source>
|
<source>(0 = auto, <0 = leave that many cores free)</source>
|
||||||
<translation>(0 = automático, <0 = dejar libres ese número de núcleos)</translation>
|
<translation>(0 = automático, <0 = dejar libres ese número de núcleos)</translation>
|
||||||
|
@ -1074,10 +1044,6 @@ Dirección: %4
|
||||||
<source>&Minimize to the tray instead of the taskbar</source>
|
<source>&Minimize to the tray instead of the taskbar</source>
|
||||||
<translation>&Minimizar a la bandeja en vez de a la barra de tareas</translation>
|
<translation>&Minimizar a la bandeja en vez de a la barra de tareas</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>M&inimize on close</source>
|
<source>M&inimize on close</source>
|
||||||
<translation>M&inimizar al cerrar</translation>
|
<translation>M&inimizar al cerrar</translation>
|
||||||
|
@ -1090,10 +1056,6 @@ Dirección: %4
|
||||||
<source>User Interface &language:</source>
|
<source>User Interface &language:</source>
|
||||||
<translation>I&dioma de la interfaz de usuario</translation>
|
<translation>I&dioma de la interfaz de usuario</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>&Unit to show amounts in:</source>
|
<source>&Unit to show amounts in:</source>
|
||||||
<translation>Mostrar las cantidades en la &unidad:</translation>
|
<translation>Mostrar las cantidades en la &unidad:</translation>
|
||||||
|
@ -1130,10 +1092,6 @@ Dirección: %4
|
||||||
<source>Client restart required to activate changes.</source>
|
<source>Client restart required to activate changes.</source>
|
||||||
<translation>Se necesita reiniciar el cliente para activar los cambios.</translation>
|
<translation>Se necesita reiniciar el cliente para activar los cambios.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Client will be shutdown, do you want to proceed?</source>
|
|
||||||
<translation>El cliente se cerrará. ¿Desea continuar?</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>This change would require a client restart.</source>
|
<source>This change would require a client restart.</source>
|
||||||
<translation>Este cambio exige el reinicio del cliente.</translation>
|
<translation>Este cambio exige el reinicio del cliente.</translation>
|
||||||
|
@ -1240,10 +1198,6 @@ Dirección: %4
|
||||||
<source>Payment request network doesn't match client network.</source>
|
<source>Payment request network doesn't match client network.</source>
|
||||||
<translation>La red de solicitud de pago no coincide con la red cliente</translation>
|
<translation>La red de solicitud de pago no coincide con la red cliente</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Payment request has expired.</source>
|
|
||||||
<translation>La solicitud de pago ha cadiucado</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Payment request is not initialized.</source>
|
<source>Payment request is not initialized.</source>
|
||||||
<translation>La solicitud de pago no está inicializada</translation>
|
<translation>La solicitud de pago no está inicializada</translation>
|
||||||
|
@ -1276,10 +1230,18 @@ Dirección: %4
|
||||||
<source>Payment request file cannot be read! This can be caused by an invalid payment request file.</source>
|
<source>Payment request file cannot be read! This can be caused by an invalid payment request file.</source>
|
||||||
<translation>¡No puede leerse el archivo de solicitud de pago! Esto puede deberse a un archivo inválido de solicitud de pago.</translation>
|
<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>
|
||||||
|
<message>
|
||||||
|
<source>Payment request expired.</source>
|
||||||
|
<translation>Solicitud de pago caducada.</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unverified payment requests to custom payment scripts are unsupported.</source>
|
<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>
|
<translation>No están soportadas las peticiones inseguras a scripts de pago personalizados</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Invalid payment request.</source>
|
||||||
|
<translation>Petición de pago no válida.</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Refund from %1</source>
|
<source>Refund from %1</source>
|
||||||
<translation>Devolución desde %1</translation>
|
<translation>Devolución desde %1</translation>
|
||||||
|
@ -1320,8 +1282,8 @@ Dirección: %4
|
||||||
<translation>User Agent</translation>
|
<translation>User Agent</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Address/Hostname</source>
|
<source>Node/Service</source>
|
||||||
<translation>DIrección/Nombre de host</translation>
|
<translation>Nodo/Servicio</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Ping Time</source>
|
<source>Ping Time</source>
|
||||||
|
@ -1354,14 +1316,6 @@ Dirección: %4
|
||||||
<source>%1 s</source>
|
<source>%1 s</source>
|
||||||
<translation>%1 s</translation>
|
<translation>%1 s</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>NETWORK</source>
|
|
||||||
<translation>RED</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>UNKNOWN</source>
|
|
||||||
<translation>DESCONOCIDO</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>None</source>
|
<source>None</source>
|
||||||
<translation>Ninguno</translation>
|
<translation>Ninguno</translation>
|
||||||
|
@ -1560,17 +1514,13 @@ Dirección: %4
|
||||||
<source>Debug log file</source>
|
<source>Debug log file</source>
|
||||||
<translation>Archivo de registro de depuración</translation>
|
<translation>Archivo de registro de depuración</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Clear console</source>
|
<source>Clear console</source>
|
||||||
<translation>Borrar consola</translation>
|
<translation>Borrar consola</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Welcome to the Bitcoin RPC console.</source>
|
<source>Welcome to the Bitcoin Core RPC console.</source>
|
||||||
<translation>Bienvenido a la consola RPC de Bitcoin</translation>
|
<translation>Bienvenido a la consola RPC de Bitcoin Core.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
||||||
|
@ -1860,14 +1810,6 @@ Dirección: %4
|
||||||
<source>collapse fee-settings</source>
|
<source>collapse fee-settings</source>
|
||||||
<translation>Colapsar ajustes de cuota</translation>
|
<translation>Colapsar ajustes de cuota</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>per kilobyte</source>
|
<source>per kilobyte</source>
|
||||||
<translation>por kilobyte</translation>
|
<translation>por kilobyte</translation>
|
||||||
|
@ -1876,6 +1818,10 @@ Dirección: %4
|
||||||
<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 "total at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
|
<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 "total 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 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>
|
<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>
|
||||||
|
<message>
|
||||||
|
<source>Hide</source>
|
||||||
|
<translation>Ocultar</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>total at least</source>
|
<source>total at least</source>
|
||||||
<translation>total por lo menos</translation>
|
<translation>total por lo menos</translation>
|
||||||
|
@ -1996,10 +1942,6 @@ Dirección: %4
|
||||||
<source>or</source>
|
<source>or</source>
|
||||||
<translation>o</translation>
|
<translation>o</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The amount to pay must be larger than 0.</source>
|
<source>The amount to pay must be larger than 0.</source>
|
||||||
<translation>La cantidad por pagar tiene que ser mayor de 0.</translation>
|
<translation>La cantidad por pagar tiene que ser mayor de 0.</translation>
|
||||||
|
@ -2012,10 +1954,6 @@ Dirección: %4
|
||||||
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
|
<source>The total exceeds your balance when the %1 transaction fee is included.</source>
|
||||||
<translation>El total sobrepasa su saldo cuando se incluye la tasa de envío de %1</translation>
|
<translation>El total sobrepasa su saldo cuando se incluye la tasa de envío de %1</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Transaction creation failed!</source>
|
<source>Transaction creation failed!</source>
|
||||||
<translation>¡Ha fallado la creación de la transacción!</translation>
|
<translation>¡Ha fallado la creación de la transacción!</translation>
|
||||||
|
@ -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>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>Pay only the minimum fee of %1</source>
|
<source>Payment request expired.</source>
|
||||||
<translation>Paga sólo la cuota mínima de %1</translation>
|
<translation>Solicitud de pago caducada.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Estimated to begin confirmation within %1 block(s).</source>
|
<source>Pay only the minimum fee of %1</source>
|
||||||
<translation>Estimado para comenzar confirmación dentro de %1 bloque(s)</translation>
|
<translation>Paga sólo la cuota mínima de %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Warning: Invalid Bitcoin address</source>
|
<source>Warning: Invalid Bitcoin address</source>
|
||||||
|
@ -2103,13 +2041,21 @@ Dirección: %4
|
||||||
<source>Remove this entry</source>
|
<source>Remove this entry</source>
|
||||||
<translation>Eliminar esta transacción</translation>
|
<translation>Eliminar esta transacción</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>S&ubtract fee from amount</source>
|
||||||
|
<translation>Restar comisiones a la cantidad</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Message:</source>
|
<source>Message:</source>
|
||||||
<translation>Mensaje:</translation>
|
<translation>Mensaje:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This is a verified payment request.</source>
|
<source>This is an unauthenticated payment request.</source>
|
||||||
<translation>Esto es una petición de pago verificado.</translation>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>Enter a label for this address to add it to the list of used addresses</source>
|
<source>Enter a label for this address to add it to the list of used addresses</source>
|
||||||
|
@ -2119,10 +2065,6 @@ Dirección: %4
|
||||||
<source>A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network.</source>
|
<source>A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network.</source>
|
||||||
<translation>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>
|
<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>
|
||||||
<message>
|
|
||||||
<source>This is an unverified payment request.</source>
|
|
||||||
<translation>Esto es una petición de pago no verificado.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Pay To:</source>
|
<source>Pay To:</source>
|
||||||
<translation>Paga a:</translation>
|
<translation>Paga a:</translation>
|
||||||
|
@ -2153,10 +2095,6 @@ Dirección: %4
|
||||||
<source>&Sign Message</source>
|
<source>&Sign Message</source>
|
||||||
<translation>&Firmar mensaje</translation>
|
<translation>&Firmar mensaje</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The Bitcoin address to sign the message with</source>
|
<source>The Bitcoin address to sign the message with</source>
|
||||||
<translation>Dirección Bitcoin con la que firmar el mensaje</translation>
|
<translation>Dirección Bitcoin con la que firmar el mensaje</translation>
|
||||||
|
@ -2209,10 +2147,6 @@ Dirección: %4
|
||||||
<source>&Verify Message</source>
|
<source>&Verify Message</source>
|
||||||
<translation>&Verificar mensaje</translation>
|
<translation>&Verificar mensaje</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>The Bitcoin address the message was signed with</source>
|
<source>The Bitcoin address the message was signed with</source>
|
||||||
<translation>La dirección Bitcoin con la que se firmó el mensaje</translation>
|
<translation>La dirección Bitcoin con la que se firmó el mensaje</translation>
|
||||||
|
@ -2476,10 +2410,6 @@ Dirección: %4
|
||||||
<source>Type</source>
|
<source>Type</source>
|
||||||
<translation>Tipo</translation>
|
<translation>Tipo</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Address</source>
|
|
||||||
<translation>Dirección</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Immature (%1 confirmations, will be available after %2)</source>
|
<source>Immature (%1 confirmations, will be available after %2)</source>
|
||||||
<translation>No vencidos (%1 confirmaciones. Estarán disponibles al cabo de %2)</translation>
|
<translation>No vencidos (%1 confirmaciones. Estarán disponibles al cabo de %2)</translation>
|
||||||
|
@ -2508,6 +2438,10 @@ Dirección: %4
|
||||||
<source>Offline</source>
|
<source>Offline</source>
|
||||||
<translation>Sin conexión</translation>
|
<translation>Sin conexión</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Label</source>
|
||||||
|
<translation>Etiqueta</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unconfirmed</source>
|
<source>Unconfirmed</source>
|
||||||
<translation>Sin confirmar</translation>
|
<translation>Sin confirmar</translation>
|
||||||
|
@ -2564,10 +2498,6 @@ Dirección: %4
|
||||||
<source>Whether or not a watch-only address is involved in this transaction.</source>
|
<source>Whether or not a watch-only address is involved in this transaction.</source>
|
||||||
<translation>Sea o no una dirección sólo está involucrada en esta transacción.</translation>
|
<translation>Sea o no una dirección sólo está involucrada en esta transacción.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Destination address of transaction.</source>
|
|
||||||
<translation>Dirección de destino de la transacción.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Amount removed from or added to balance.</source>
|
<source>Amount removed from or added to balance.</source>
|
||||||
<translation>Cantidad retirada o añadida al saldo.</translation>
|
<translation>Cantidad retirada o añadida al saldo.</translation>
|
||||||
|
@ -2902,10 +2832,6 @@ Dirección: %4
|
||||||
<source>Debugging/Testing options:</source>
|
<source>Debugging/Testing options:</source>
|
||||||
<translation>Opciones de depuración/pruebas:</translation>
|
<translation>Opciones de depuración/pruebas:</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Do not load the wallet and disable wallet RPC calls</source>
|
<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>
|
<translation>No cargar el monedero y desactivar las llamadas RPC del monedero</translation>
|
||||||
|
@ -2966,10 +2892,6 @@ Dirección: %4
|
||||||
<source>Only connect to nodes in network <net> (ipv4, ipv6 or onion)</source>
|
<source>Only connect to nodes in network <net> (ipv4, ipv6 or onion)</source>
|
||||||
<translation>Sólo conectar a nodos en redes <net> (ipv4, ipv6 o onion)</translation>
|
<translation>Sólo conectar a nodos en redes <net> (ipv4, ipv6 o onion)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
|
<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>
|
<translation>Asignar tamaño de cache en megabytes (entre %d y %d; predeterminado: %d)</translation>
|
||||||
|
@ -3006,6 +2928,10 @@ Dirección: %4
|
||||||
<source>Wallet options:</source>
|
<source>Wallet options:</source>
|
||||||
<translation>Opciones de monedero:</translation>
|
<translation>Opciones de monedero:</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Warning: This version is obsolete; upgrade required!</source>
|
||||||
|
<translation>Peligro: Esta versión es obsoleta; actualización requerida!</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>You need to rebuild the database using -reindex to change -txindex</source>
|
<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>
|
<translation>Usted necesita reconstruir la base de datos utilizando -reindex para cambiar -txindex</translation>
|
||||||
|
@ -3034,10 +2960,6 @@ Dirección: %4
|
||||||
<source>Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.</source>
|
<source>Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.</source>
|
||||||
<translation>No se ha podido bloquear el directorio de datos %s. Probablemente ya se está ejecutando Bitcoin Core.</translation>
|
<translation>No se ha podido bloquear el directorio de datos %s. Probablemente ya se está ejecutando Bitcoin Core.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:%u)</source>
|
|
||||||
<translation>Limitar continuamente las transacciones gratuitas a <n>*1000 bytes por minuto (predeterminado:%u)</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)</source>
|
<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>
|
<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>
|
||||||
|
@ -3074,10 +2996,6 @@ Dirección: %4
|
||||||
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
|
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source>
|
||||||
<translation>Consulta de direcciones pares mediante búsqueda de DNS, si bajo en direcciones (por defecto: 1 a menos que - conectar)</translation>
|
<translation>Consulta de direcciones pares mediante búsqueda de DNS, si bajo en direcciones (por defecto: 1 a menos que - conectar)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source>
|
<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>
|
<translation>Establecer tamaño máximo de las transacciones de alta prioridad/baja comisión en bytes (predeterminado: %d)</translation>
|
||||||
|
@ -3134,6 +3052,10 @@ por ejemplo: alertnotify=echo %% s | correo -s "Alerta Bitcoin" admin@foo.com
|
||||||
<source>Cannot resolve -whitebind address: '%s'</source>
|
<source>Cannot resolve -whitebind address: '%s'</source>
|
||||||
<translation>No se puede resolver -whitebind address: '%s'</translation>
|
<translation>No se puede resolver -whitebind address: '%s'</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Choose data directory on startup (default: 0)</source>
|
||||||
|
<translation>Elegir directorio de datos al iniciar (predeterminado: 0)</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Connect through SOCKS5 proxy</source>
|
<source>Connect through SOCKS5 proxy</source>
|
||||||
<translation>Conectar usando SOCKS5 proxy</translation>
|
<translation>Conectar usando SOCKS5 proxy</translation>
|
||||||
|
@ -3230,10 +3152,22 @@ por ejemplo: alertnotify=echo %% s | correo -s "Alerta Bitcoin" admin@foo.com
|
||||||
<source>Send transactions as zero-fee transactions if possible (default: %u)</source>
|
<source>Send transactions as zero-fee transactions if possible (default: %u)</source>
|
||||||
<translation>Mandar transacciones como comisión-cero si es posible (por defecto: %u)</translation>
|
<translation>Mandar transacciones como comisión-cero si es posible (por defecto: %u)</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Show all debugging options (usage: --help -help-debug)</source>
|
<source>Show all debugging options (usage: --help -help-debug)</source>
|
||||||
<translation>Muestra todas las opciones de depuración (uso: --help -help-debug)</translation>
|
<translation>Muestra todas las opciones de depuración (uso: --help -help-debug)</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Show splash screen on startup (default: 1)</source>
|
||||||
|
<translation>Mostrar pantalla de bienvenida en el inicio (predeterminado: 1)</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Shrink debug.log file on client startup (default: 1 when no -debug)</source>
|
<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>
|
<translation>Reducir el archivo debug.log al iniciar el cliente (predeterminado: 1 sin -debug)</translation>
|
||||||
|
@ -3242,6 +3176,10 @@ por ejemplo: alertnotify=echo %% s | correo -s "Alerta Bitcoin" admin@foo.com
|
||||||
<source>Signing transaction failed</source>
|
<source>Signing transaction failed</source>
|
||||||
<translation>Transacción falló</translation>
|
<translation>Transacción falló</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Start minimized</source>
|
||||||
|
<translation>Arrancar minimizado</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This is experimental software.</source>
|
<source>This is experimental software.</source>
|
||||||
<translation>Este software es experimental.</translation>
|
<translation>Este software es experimental.</translation>
|
||||||
|
@ -3283,10 +3221,6 @@ por ejemplo: alertnotify=echo %% s | correo -s "Alerta Bitcoin" admin@foo.com
|
||||||
<source>Warning</source>
|
<source>Warning</source>
|
||||||
<translation>Aviso</translation>
|
<translation>Aviso</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Warning: This version is obsolete, upgrade required!</source>
|
|
||||||
<translation>Aviso: Esta versión es obsoleta, actualización necesaria!</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
|
<source>Warning: Unsupported argument -benchmark ignored, use -debug=bench.</source>
|
||||||
<translation>Advertencia: Argumento no soportado -benchmark ignored, use -debug=bench.</translation>
|
<translation>Advertencia: Argumento no soportado -benchmark ignored, use -debug=bench.</translation>
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue