Rename CClaimTrieCache to CClaimTrieUpdateBuffer #156

Closed
kaykurokawa wants to merge 276 commits from cclaimtriecache_change into master
218 changed files with 4361 additions and 3605 deletions
Showing only changes of commit aec93c1245 - Show all commits

View file

@ -1,7 +1,7 @@
dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N) dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
AC_PREREQ([2.60]) AC_PREREQ([2.60])
define(_CLIENT_VERSION_MAJOR, 0) define(_CLIENT_VERSION_MAJOR, 0)
define(_CLIENT_VERSION_MINOR, 9) define(_CLIENT_VERSION_MINOR, 10)
define(_CLIENT_VERSION_REVISION, 99) 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)
@ -244,8 +244,12 @@ case $host in
AC_CHECK_PROG([PORT],port, port) AC_CHECK_PROG([PORT],port, port)
if test x$PORT = xport; then if test x$PORT = xport; then
dnl add default macports paths dnl add default macports paths
CPPFLAGS="$CPPFLAGS -isystem /opt/local/include -I/opt/local/include/db48" CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
LIBS="$LIBS -L/opt/local/lib -L/opt/local/lib/db48" LIBS="$LIBS -L/opt/local/lib"
if test -d /opt/local/include/db48; then
CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
LIBS="$LIBS -L/opt/local/lib/db48"
fi
fi fi
AC_CHECK_PROG([BREW],brew, brew) AC_CHECK_PROG([BREW],brew, brew)

View file

@ -136,6 +136,9 @@ else
echo "Dropping you on a shell so you can try building/testing the merged source." >&2 echo "Dropping you on a shell so you can try building/testing the merged source." >&2
echo "Run 'git diff HEAD~' to show the changes being merged." >&2 echo "Run 'git diff HEAD~' to show the changes being merged." >&2
echo "Type 'exit' when done." >&2 echo "Type 'exit' when done." >&2
if [[ -f /etc/debian_version ]]; then # Show pull number in prompt on Debian default prompt
export debian_chroot="$PULL"
fi
bash -i bash -i
read -p "Press 'm' to accept the merge. " -n 1 -r >&2 read -p "Press 'm' to accept the merge. " -n 1 -r >&2
echo echo

View file

@ -148,7 +148,7 @@ class BlockDataCopier:
outFname = self.settings['output_file'] outFname = self.settings['output_file']
else: else:
outFname = "%s/blk%05d.dat" % (self.settings['output'], outFn) outFname = "%s/blk%05d.dat" % (self.settings['output'], outFn)
print("Output file" + outFname) print("Output file " + outFname)
self.outF = open(outFname, "wb") self.outF = open(outFname, "wb")
self.outF.write(inhdr) self.outF.write(inhdr)
@ -189,7 +189,7 @@ class BlockDataCopier:
while self.blkCountOut < len(self.blkindex): while self.blkCountOut < len(self.blkindex):
if not self.inF: if not self.inF:
fname = self.inFileName(self.inFn) fname = self.inFileName(self.inFn)
print("Input file" + fname) print("Input file " + fname)
try: try:
self.inF = open(fname, "rb") self.inF = open(fname, "rb")
except IOError: except IOError:
@ -205,7 +205,7 @@ class BlockDataCopier:
inMagic = inhdr[:4] inMagic = inhdr[:4]
if (inMagic != self.settings['netmagic']): if (inMagic != self.settings['netmagic']):
print("Invalid magic:" + inMagic) print("Invalid magic: " + inMagic)
return return
inLenLE = inhdr[4:] inLenLE = inhdr[4:]
su = struct.unpack("<I", inLenLE) su = struct.unpack("<I", inLenLE)
@ -292,7 +292,7 @@ if __name__ == '__main__':
blkmap = mkblockmap(blkindex) blkmap = mkblockmap(blkindex)
if not "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f" in blkmap: if not "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f" in blkmap:
print("not found") print("Genesis block not found in hashlist")
else: else:
BlockDataCopier(settings, blkindex, blkmap).run() BlockDataCopier(settings, blkindex, blkmap).run()

View file

@ -31,6 +31,7 @@ endif
base_build_dir=$(BASEDIR)/work/build base_build_dir=$(BASEDIR)/work/build
base_staging_dir=$(BASEDIR)/work/staging base_staging_dir=$(BASEDIR)/work/staging
base_download_dir=$(BASEDIR)/work/download
canonical_host:=$(shell ./config.sub $(HOST)) canonical_host:=$(shell ./config.sub $(HOST))
build:=$(shell ./config.sub $(BUILD)) build:=$(shell ./config.sub $(BUILD))
@ -122,5 +123,12 @@ $(host_prefix)/share/config.site : config.site.in $(host_prefix)/.stamp_$(final_
$(AT)touch $@ $(AT)touch $@
install: $(host_prefix)/share/config.site install: $(host_prefix)/share/config.site
download: $(all_sources) download-one: $(all_sources)
.PHONY: install cached download-osx:
@$(MAKE) -s HOST=x86_64-apple-darwin11 download-one
download-linux:
@$(MAKE) -s HOST=x86_64-unknown-linux-gnu download-one
download-win:
@$(MAKE) -s HOST=x86_64-w64-mingw32 download-one
download: download-osx download-linux download-win
.PHONY: install cached download-one download-osx download-linux download-win download

View file

@ -29,4 +29,7 @@ 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. options will be passed to bitcoin's configure. In this case, --disable-wallet.
Additional targets: Additional targets:
download: run 'make download' to fetch sources without building them 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

View file

@ -20,18 +20,19 @@ $(sort $(foreach dep,$(2),$(2) $(call int_get_all_dependencies,$(1),$($(dep)_dep
endef endef
define fetch_file define fetch_file
(test -f $(SOURCES_PATH)/$(4) || \ (test -f $$($(1)_source_dir)/$(4) || \
( mkdir -p $$($(1)_extract_dir) && \ ( mkdir -p $$($(1)_download_dir) && echo Fetching $(1)... && \
( $(build_DOWNLOAD) "$$($(1)_extract_dir)/$(4).temp" "$(2)/$(3)" || \ ( $(build_DOWNLOAD) "$$($(1)_download_dir)/$(4).temp" "$(2)/$(3)" || \
$(build_DOWNLOAD) "$$($(1)_extract_dir)/$(4).temp" "$(FALLBACK_DOWNLOAD_PATH)/$(3)" ) && \ $(build_DOWNLOAD) "$$($(1)_download_dir)/$(4).temp" "$(FALLBACK_DOWNLOAD_PATH)/$(3)" ) && \
echo "$(5) $$($(1)_extract_dir)/$(4).temp" > $$($(1)_extract_dir)/.$(4).hash && \ echo "$(5) $$($(1)_download_dir)/$(4).temp" > $$($(1)_download_dir)/.$(4).hash && \
$(build_SHA256SUM) -c $$($(1)_extract_dir)/.$(4).hash && \ $(build_SHA256SUM) -c $$($(1)_download_dir)/.$(4).hash && \
mv $$($(1)_extract_dir)/$(4).temp $(SOURCES_PATH)/$(4) )) mv $$($(1)_download_dir)/$(4).temp $$($(1)_source_dir)/$(4) && \
rm -rf $$($(1)_download_dir) ))
endef endef
define int_get_build_recipe_hash define int_get_build_recipe_hash
$(eval $(1)_all_file_checksums:=$(shell $(build_SHA256SUM) $(meta_depends) packages/$(1).mk $(addprefix $(PATCHES_PATH)/$(1)/,$($(1)_patches)))) $(eval $(1)_all_file_checksums:=$(shell $(build_SHA256SUM) $(meta_depends) packages/$(1).mk $(addprefix $(PATCHES_PATH)/$(1)/,$($(1)_patches))))
$(eval $(1)_recipe_hash:=$(shell echo -n "$($(1)_all_file_checksums)" | $(build_SHA256SUM))) $(eval $(1)_recipe_hash:=$(shell echo -n "$($(1)_all_file_checksums)" | cut -d" " -f1 | $(build_SHA256SUM)))
endef endef
define int_get_build_id define int_get_build_id
@ -45,17 +46,19 @@ final_build_id_long+=$($(package)_build_id_long)
#compute package-specific paths #compute package-specific paths
$(1)_build_subdir?=. $(1)_build_subdir?=.
$(1)_download_file?=$($(1)_file_name) $(1)_download_file?=$($(1)_file_name)
$(1)_source:=$(SOURCES_PATH)/$($(1)_file_name) $(1)_source_dir:=$(SOURCES_PATH)
$(1)_source:=$$($(1)_source_dir)/$($(1)_file_name)
$(1)_staging_dir=$(base_staging_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id) $(1)_staging_dir=$(base_staging_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id)
$(1)_staging_prefix_dir:=$$($(1)_staging_dir)$($($(1)_type)_prefix) $(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)_build_dir:=$$($(1)_extract_dir)/$$($(1)_build_subdir) $(1)_build_dir:=$$($(1)_extract_dir)/$$($(1)_build_subdir)
$(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
#stamps #stamps
$(1)_fetched=$$($(1)_extract_dir)/.stamp_fetched $(1)_fetched=$$($(1)_source_dir)/download-stamps/.stamp_fetched-$(1)-$($(1)_file_name)
$(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
@ -150,7 +153,6 @@ endef
define int_add_cmds define int_add_cmds
$($(1)_fetched): $($(1)_fetched):
$(AT)echo Fetching $(1)...
$(AT)mkdir -p $$(@D) $(SOURCES_PATH) $(AT)mkdir -p $$(@D) $(SOURCES_PATH)
$(AT)cd $$(@D); $(call $(1)_fetch_cmds,$(1)) $(AT)cd $$(@D); $(call $(1)_fetch_cmds,$(1))
$(AT)touch $$@ $(AT)touch $$@

View file

@ -39,11 +39,11 @@ $(package)_ldflags+=-m32 -Wl,-rpath=\\$$$$$$$$\$$$$$$$$ORIGIN/../lib
$(package)_ldflags+=-L$$(native_cctools_extract_dir)/clang+llvm-3.2-x86-linux-ubuntu-12.04/lib $(package)_ldflags+=-L$$(native_cctools_extract_dir)/clang+llvm-3.2-x86-linux-ubuntu-12.04/lib
endef endef
define $(package)_extract_cmds define $(package)_extract_cmds
tar --strip-components=1 -xf $(SOURCES_PATH)/$($(package)_toolchain4_file_name) && \ tar --strip-components=1 -xf $($(package)_source_dir)/$($(package)_toolchain4_file_name) && \
ln -sf $($(package)_source) cctools2odcctools/$($(package)_file_name) && \ ln -sf $($(package)_source) cctools2odcctools/$($(package)_file_name) && \
ln -sf $(SOURCES_PATH)/$($(package)_ld64_file_name) cctools2odcctools/$($(package)_ld64_file_name) && \ ln -sf $($(package)_source_dir)/$($(package)_ld64_file_name) cctools2odcctools/$($(package)_ld64_file_name) && \
ln -sf $(SOURCES_PATH)/$($(package)_dyld_file_name) cctools2odcctools/$($(package)_dyld_file_name) && \ ln -sf $($(package)_source_dir)/$($(package)_dyld_file_name) cctools2odcctools/$($(package)_dyld_file_name) && \
tar xf $(SOURCES_PATH)/$($(package)_clang_file_name) && \ tar xf $($(package)_source_dir)/$($(package)_clang_file_name) && \
mkdir -p $(SDK_PATH) sdks &&\ mkdir -p $(SDK_PATH) sdks &&\
cd sdks; ln -sf $(OSX_SDK) MacOSX$(OSX_SDK_VERSION).sdk cd sdks; ln -sf $(OSX_SDK) MacOSX$(OSX_SDK_VERSION).sdk
endef endef

View file

@ -1,6 +1,6 @@
package=native_cdrkit package=native_cdrkit
$(package)_version=1.1.11 $(package)_version=1.1.11
$(package)_download_path=http://distro.ibiblio.org/fatdog/source/c $(package)_download_path=http://distro.ibiblio.org/fatdog/source/600/c
$(package)_file_name=cdrkit-$($(package)_version).tar.bz2 $(package)_file_name=cdrkit-$($(package)_version).tar.bz2
$(package)_sha256_hash=b50d64c214a65b1a79afe3a964c691931a4233e2ba605d793eb85d0ac3652564 $(package)_sha256_hash=b50d64c214a65b1a79afe3a964c691931a4233e2ba605d793eb85d0ac3652564
$(package)_patches=cdrkit-deterministic.patch $(package)_patches=cdrkit-deterministic.patch

View file

@ -17,5 +17,5 @@ endef
define $(package)_stage_cmds define $(package)_stage_cmds
mkdir -p $($(package)_staging_prefix_dir)/share/$($(package)_install_dirname) && \ mkdir -p $($(package)_staging_prefix_dir)/share/$($(package)_install_dirname) && \
mv $(SOURCES_PATH)/$($(package)_file_name) $($(package)_staging_prefix_dir)/share/$($(package)_install_dirname)/$($(package)_install_filename) cp $($(package)_source) $($(package)_staging_prefix_dir)/share/$($(package)_install_dirname)/$($(package)_install_filename)
endef endef

View file

@ -34,7 +34,7 @@ PROJECT_NAME = Bitcoin
# This could be handy for archiving the generated documentation or # This could be handy for archiving the generated documentation or
# if some version control system is used. # if some version control system is used.
PROJECT_NUMBER = 0.9.99 PROJECT_NUMBER = 0.10.99
# Using the PROJECT_BRIEF tag one can provide an optional one line description # Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer # for a project that appears at the top of each page and should give viewer

View file

@ -1,4 +1,4 @@
Bitcoin 0.9.99 BETA Bitcoin 0.10.99 BETA
===================== =====================
Copyright (c) 2009-2014 Bitcoin Developers Copyright (c) 2009-2014 Bitcoin Developers

View file

@ -1,4 +1,4 @@
Bitcoin 0.9.99 BETA Bitcoin 0.10.99 BETA
Copyright (c) 2009-2014 Bitcoin Core Developers Copyright (c) 2009-2014 Bitcoin Core Developers

View file

@ -11,12 +11,15 @@ 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.
`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}`
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.
The HTTP request and response are both handled entirely in-memory, thus making maximum memory usage at least 2.66MB (1 MB max block, plus hex encoding) per request. The HTTP request and response are both handled entirely in-memory, thus making maximum memory usage at least 2.66MB (1 MB max block, plus hex encoding) per request.
With the /notxdetails/ option JSON response will only contain the transaction hash instead of the complete transaction details. The option only affects the JSON response.
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.
Risks Risks

View file

@ -6,98 +6,50 @@ The following is a list of assets used in the bitcoin source and their proper at
* License: MIT * License: MIT
### Assets Used ### Assets Used
src/qt/res/icons/clock*.png, src/qt/res/icons/tx*.png, src/qt/res/icons/watch*.png, src/qt/res/icons/tx_in.png,
src/qt/res/src/clock_green.svg, src/qt/res/src/clock1.svg, src/qt/res/icons/tx_inout.png,
src/qt/res/src/clock2.svg, src/qt/res/src/clock3.svg,
src/qt/res/src/clock4.svg, src/qt/res/src/clock5.svg,
src/qt/res/src/inout.svg, src/qt/res/src/questionmark.svg
[David Vignoni](http://www.icon-king.com) [Typicons/Stephen Hutchings](http://typicons.com)
----------------------- -----------------------
### Info ### Info
* Icon Pack: NUVOLA ICON THEME for KDE 3.x * Icon Pack: Typicons (http://typicons.com)
* Designer: David Vignoni (david@icon-king.com) * Designer: Stephen Hutchings (and more)
* License: LGPL * License: CC BY-SA
* Site: [http://www.icon-king.com/projects/nuvola](http://www.icon-king.com/projects/nuvola) * Site: [https://github.com/stephenhutchings/typicons.font](https://github.com/stephenhutchings/typicons.font)
### Assets Used ### Assets Used
src/qt/res/icons/address-book.png, src/qt/res/icons/export.png, src/qt/res/icons/add.png, src/qt/res/icons/address-book.png,
src/qt/res/icons/history.png, src/qt/res/icons/key.png, src/qt/res/icons/configure.png, src/qt/res/icons/connect4.png,
src/qt/res/icons/lock_*.png, src/qt/res/icons/overview.png, src/qt/res/icons/debugwindow.png, src/qt/res/icons/edit.png,
src/qt/res/icons/receive.png, src/qt/res/icons/send.png, src/qt/res/icons/exitcopy.png, src/qt/res/icons/editpaste.png,
src/qt/res/icons/synced.png, src/qt/res/icons/filesave.png src/qt/res/icons/export.png, src/qt/res/icons/eye.png,
src/qt/res/icons/filesave.png, src/qt/res/icons/history.png,
schollidesign src/qt/res/icons/info.png, src/qt/res/icons/key.png,
----------------------- src/qt/res/icons/lock_*.png, src/qt/res/icons/open.png,
src/qt/res/icons/overview.png, src/qt/res/icons/quit.png,
### Info src/qt/res/icons/receive.png, src/qt/res/icons/remove.png,
* Icon Pack: Human-O2 src/qt/res/icons/send.png, src/qt/res/icons/synced.png,
* Designer: schollidesign src/qt/res/icons/transaction*.png, src/qt/res/icons/tx_input.png,
* License: GNU/GPL
* Site: [http://findicons.com/icon/93743/blocks_gnome_netstatus_0](http://findicons.com/icon/93743/blocks_gnome_netstatus_0)
### Assets Used
src/qt/res/icons/connect*.png
md2k7
-----------------------
### Info
* Designer: md2k7
* License: You are free to do with these icons as you wish, including selling, copying, modifying etc.
* License: MIT
* Site: [https://bitcointalk.org/index.php?topic=15276.0](https://bitcointalk.org/index.php?topic=15276.0)
### Assets Used
src/qt/res/icons/transaction*.png
[Everaldo.com](http://www.everaldo.com)
-----------------------
### Info
* Icon Pack: Crystal SVG
* Designer: [http://www.everaldo.com](http://www.everaldo.com)
* License: LGPL
### Assets Used
src/qt/res/icons/configure.png, src/qt/res/icons/quit.png,
src/qt/res/icons/editcopy.png, src/qt/res/icons/editpaste.png,
src/qt/res/icons/add.png, src/qt/res/icons/edit.png,
src/qt/res/icons/remove.png (edited)
Everaldo (Everaldo Coelho)
-----------------------
### Info
* Icon Pack: Kids
* Designer: Everaldo (Everaldo Coelho)
* License: GNU/GPL
* Site: [http://findicons.com/icon/17102/reload?id=17102](http://findicons.com/icon/17102/reload?id=17102)
### Assets Used
scripts/img/reload.xcf (modified), src/qt/res/movies/*.png
[Vignoni David](http://techbase.kde.org/Projects/Oxygen)
-----------------------
### Info
* Designer: Vignoni David
* License: Oxygen icon theme is dual licensed. You may copy it under the Creative Common Attribution-ShareAlike 3.0 License or the GNU Library General Public License.
* Site: [http://techbase.kde.org/Projects/Oxygen](http://techbase.kde.org/Projects/Oxygen)
### Assets Used
src/qt/res/icons/debugwindow.png
Jonas Schnelli Jonas Schnelli
----------------------- -----------------------
### Info ### Info
* Designer: Jonas Schnelli (based on the original bitcoin logo from Bitboy) * Designer: Jonas Schnelli
* Bitcoin Icon: (based on the original bitcoin logo from Bitboy)
* Some icons are based on Stephan Hutchings Typicons
* License: MIT * License: MIT
### Assets Used ### Assets Used
src/qt/res/icons/bitcoin.icns, src/qt/res/src/bitcoin.svg, src/qt/res/icons/about.png, src/qt/res/icons/about_qt.png,
src/qt/res/src/bitcoin.ico, src/qt/res/src/bitcoin.png, src/qt/res/icons/clock*.png, src/qt/res/icons/connect[0-3].png,
src/qt/res/src/bitcoin_testnet.png, docs/bitcoin_logo_doxygen.png, src/qt/res/icons/eye_minus.png, src/qt/res/icons/verify.png,
src/qt/res/images/splash.png, src/qt/res/images/splash_testnet.png src/qt/res/icons/eye_plus.png, src/qt/res/icons/tx_inout.png,
src/qt/res/icons/tx_output.png, src/qt/res/icons/bitcoin.icns,
src/qt/res/src/bitcoin.svg, src/qt/res/src/bitcoin.ico,
src/qt/res/src/bitcoin.png, src/qt/res/src/bitcoin_testnet.png,
docs/bitcoin_logo_doxygen.png, src/qt/res/src/tx*.svg,
src/qt/res/src/connect*.svg, src/qt/res/src/clock*.svg,
src/qt/res/src/mine.svg, src/qt/res/src/qt.svg,
src/qt/res/src/verify.svg,

View file

@ -1,126 +1,3 @@
(note: this is a temporary file, to be added-to by anybody, and moved to (note: this is a temporary file, to be added-to by anybody, and moved to
release-notes at release time) release-notes at release time)
Block file backwards-compatibility warning
===========================================
Because release 0.10.0 makes use of headers-first synchronization and parallel
block download, the block files and databases are not backwards-compatible
with older versions of Bitcoin Core:
* 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.
This does not affect wallet forward or backward compatibility.
Transaction fee changes
=======================
This release automatically estimates how high a transaction fee (or how
high a priority) transactions require to be confirmed quickly. The default
settings will create transactions that confirm quickly; see the new
'txconfirmtarget' setting to control the tradeoff between fees and
confirmation times.
Prior releases used hard-coded fees (and priorities), and would
sometimes create transactions that took a very long time to confirm.
Statistics used to estimate fees and priorities are saved in the
data directory in the `fee_estimates.dat` file just before
program shutdown, and are read in at startup.
New Command Line Options
---------------------------
- `-txconfirmtarget=n` : create transactions that have enough fees (or priority)
so they are likely to confirm within n blocks (default: 1). This setting
is over-ridden by the -paytxfee option.
New RPC methods
----------------
- `estimatefee nblocks` : Returns approximate fee-per-1,000-bytes needed for
a transaction to be confirmed within nblocks. Returns -1 if not enough
transactions have been observed to compute a good estimate.
- `estimatepriority nblocks` : Returns approximate priority needed for
a zero-fee transaction to confirm within nblocks. Returns -1 if not
enough free transactions have been observed to compute a good
estimate.
RPC access control changes
==========================================
Subnet matching for the purpose of access control is now done
by matching the binary network address, instead of with string wildcard matching.
For the user this means that `-rpcallowip` takes a subnet specification, which can be
- a single IP address (e.g. `1.2.3.4` or `fe80::0012:3456:789a:bcde`)
- a network/CIDR (e.g. `1.2.3.0/24` or `fe80::0000/64`)
- a network/netmask (e.g. `1.2.3.4/255.255.255.0` or `fe80::0012:3456:789a:bcde/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`)
An arbitrary number of `-rpcallow` arguments can be given. An incoming connection will be accepted if its origin address
matches one of them.
For example:
| 0.9.x and before | 0.10.x |
|--------------------------------------------|---------------------------------------|
| `-rpcallowip=192.168.1.1` | `-rpcallowip=192.168.1.1` (unchanged) |
| `-rpcallowip=192.168.1.*` | `-rpcallowip=192.168.1.0/24` |
| `-rpcallowip=192.168.*` | `-rpcallowip=192.168.0.0/16` |
| `-rpcallowip=*` (dangerous!) | `-rpcallowip=::/0` |
Using wildcards will result in the rule being rejected with the following error in debug.log:
Error: Invalid -rpcallowip subnet specification: *. Valid 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).
RPC Server "Warm-Up" Mode
=========================
The RPC server is started earlier now, before most of the expensive
intialisations like loading the block index. It is available now almost
immediately after starting the process. However, until all initialisations
are done, it always returns an immediate error with code -28 to all calls.
This new behaviour can be useful for clients to know that a server is already
started and will be available soon (for instance, so that they do not
have to start it themselves).
Improved signing security
=========================
For 0.10 the security of signing against unusual attacks has been
improved by making the signatures constant time and deterministic.
This change is a result of switching signing to use libsecp256k1
instead of OpenSSL. Libsecp256k1 is a cryptographic library
optimized for the curve Bitcoin uses which was created by Bitcoin
Core developer Pieter Wuille.
There exist attacks[1] against most ECC implementations where an
attacker on shared virtual machine hardware could extract a private
key if they could cause a target to sign using the same key hundreds
of times. While using shared hosts and reusing keys are inadvisable
for other reasons, it's a better practice to avoid the exposure.
OpenSSL has code in their source repository for derandomization
and reduction in timing leaks, and we've eagerly wanted to use
it for a long time but this functionality has still not made its
way into a released version of OpenSSL. Libsecp256k1 achieves
significantly stronger protection: As far as we're aware this is
the only deployed implementation of constant time signing for
the curve Bitcoin uses and we have reason to believe that
libsecp256k1 is better tested and more thoroughly reviewed
than the implementation in OpenSSL.
[1] https://eprint.iacr.org/2014/161.pdf

View file

@ -40,7 +40,7 @@ Release Process
###fetch and build inputs: (first time, or when dependency versions change) ###fetch and build inputs: (first time, or when dependency versions change)
mkdir -p inputs; cd inputs/ mkdir -p inputs
Register and download the Apple SDK: (see OSX Readme for details) Register and download the Apple SDK: (see OSX Readme for details)
@ -50,7 +50,15 @@ Release Process
tar -C /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ -czf MacOSX10.7.sdk.tar.gz MacOSX10.7.sdk tar -C /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ -czf MacOSX10.7.sdk.tar.gz MacOSX10.7.sdk
Build Bitcoin Core for Linux, Windows, and OS X: ###Optional: Seed the Gitian sources cache
By default, gitian will fetch source files as needed. For offline builds, they can be fetched ahead of time:
make -C ../bitcoin/depends download SOURCES_PATH=`pwd`/cache/common
Only missing files will be fetched, so this is safe to re-run for each build.
###Build Bitcoin Core for Linux, Windows, and OS X:
./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-linux.yml ./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-linux.yml
./bin/gsign --signer $SIGNER --release ${VERSION}-linux --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-linux.yml ./bin/gsign --signer $SIGNER --release ${VERSION}-linux --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-linux.yml
@ -63,7 +71,6 @@ Release Process
mv build/out/bitcoin-*-unsigned.tar.gz inputs mv build/out/bitcoin-*-unsigned.tar.gz inputs
mv build/out/bitcoin-*.tar.gz build/out/bitcoin-*.dmg ../ mv build/out/bitcoin-*.tar.gz build/out/bitcoin-*.dmg ../
popd popd
bitcoin-0.9.99-osx-unsigned.tar.gz
Build output expected: Build output expected:
1. source tarball (bitcoin-${VERSION}.tar.gz) 1. source tarball (bitcoin-${VERSION}.tar.gz)
@ -84,11 +91,12 @@ Commit your signature to gitian.sigs:
git push # Assuming you can push to the gitian.sigs tree git push # Assuming you can push to the gitian.sigs tree
popd popd
Wait for OSX detached signature: Wait for OSX detached signature:
Once the OSX build has 3 matching signatures, Gavin will sign it with the apple App-Store key. Once the OSX build has 3 matching signatures, Gavin will sign it with the apple App-Store key.
He will then upload a detached signature to be combined with the unsigned app to create a signed binary. He will then upload a detached signature to be combined with the unsigned app to create a signed binary.
Create the signed OSX binary: Create the signed OSX binary:
pushd ./gitian-builder pushd ./gitian-builder
# Fetch the signature as instructed by Gavin # Fetch the signature as instructed by Gavin
cp signature.tar.gz inputs/ cp signature.tar.gz inputs/

View file

@ -15,17 +15,28 @@ fi
#Run the tests #Run the tests
testScripts=(
'wallet.py'
'listtransactions.py'
'mempool_resurrect_test.py'
'txn_doublespend.py'
'txn_doublespend.py --mineblock'
'getchaintips.py'
'rest.py'
'mempool_spendcoinbase.py'
'mempool_coinbase_spends.py'
'httpbasics.py'
# 'forknotify.py'
);
if [ "x${ENABLE_BITCOIND}${ENABLE_UTILS}${ENABLE_WALLET}" = "x111" ]; then if [ "x${ENABLE_BITCOIND}${ENABLE_UTILS}${ENABLE_WALLET}" = "x111" ]; then
${BUILDDIR}/qa/rpc-tests/wallet.py --srcdir "${BUILDDIR}/src" for (( i = 0; i < ${#testScripts[@]}; i++ ))
${BUILDDIR}/qa/rpc-tests/listtransactions.py --srcdir "${BUILDDIR}/src" do
${BUILDDIR}/qa/rpc-tests/mempool_resurrect_test.py --srcdir "${BUILDDIR}/src" if [ -z "$1" ] || [ "$1" == "${testScripts[$i]}" ] || [ "$1.py" == "${testScripts[$i]}" ]
${BUILDDIR}/qa/rpc-tests/txn_doublespend.py --srcdir "${BUILDDIR}/src" then
${BUILDDIR}/qa/rpc-tests/txn_doublespend.py --mineblock --srcdir "${BUILDDIR}/src" echo -e "running testscript \033[1m${testScripts[$i]}...\033[0m"
${BUILDDIR}/qa/rpc-tests/getchaintips.py --srcdir "${BUILDDIR}/src" ${BUILDDIR}/qa/rpc-tests/${testScripts[$i]} --srcdir "${BUILDDIR}/src"
${BUILDDIR}/qa/rpc-tests/rest.py --srcdir "${BUILDDIR}/src" fi
${BUILDDIR}/qa/rpc-tests/mempool_spendcoinbase.py --srcdir "${BUILDDIR}/src" done
${BUILDDIR}/qa/rpc-tests/httpbasics.py --srcdir "${BUILDDIR}/src"
#${BUILDDIR}/qa/rpc-tests/forknotify.py --srcdir "${BUILDDIR}/src"
else else
echo "No rpc tests to run. Wallet, utils, and bitcoind must all be enabled" echo "No rpc tests to run. Wallet, utils, and bitcoind must all be enabled"
fi fi

View file

@ -0,0 +1,94 @@
#!/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 bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException
from util import *
import os
import shutil
# Create one-input, one-output, no-fee transaction:
class MempoolCoinbaseTest(BitcoinTestFramework):
alert_filename = None # Set by setup_network
def setup_network(self):
args = ["-checkmempool", "-debug=mempool"]
self.nodes = []
self.nodes.append(start_node(0, self.options.tmpdir, args))
self.nodes.append(start_node(1, self.options.tmpdir, args))
connect_nodes(self.nodes[1], 0)
self.is_network_split = False
self.sync_all
def create_tx(self, from_txid, to_address, amount):
inputs = [{ "txid" : from_txid, "vout" : 0}]
outputs = { to_address : amount }
rawtx = self.nodes[0].createrawtransaction(inputs, outputs)
signresult = self.nodes[0].signrawtransaction(rawtx)
assert_equal(signresult["complete"], True)
return signresult["hex"]
def run_test(self):
start_count = self.nodes[0].getblockcount()
# Mine three blocks. After this, nodes[0] blocks
# 101, 102, and 103 are spend-able.
new_blocks = self.nodes[1].setgenerate(True, 4)
self.sync_all()
node0_address = self.nodes[0].getnewaddress()
node1_address = self.nodes[1].getnewaddress()
# Three scenarios for re-orging coinbase spends in the memory pool:
# 1. Direct coinbase spend : spend_101
# 2. Indirect (coinbase spend in chain, child in mempool) : spend_102 and spend_102_1
# 3. Indirect (coinbase and child both in chain) : spend_103 and spend_103_1
# Use invalidatblock to make all of the above coinbase spends invalid (immature coinbase),
# and make sure the mempool code behaves correctly.
b = [ self.nodes[0].getblockhash(n) for n in range(102, 105) ]
coinbase_txids = [ self.nodes[0].getblock(h)['tx'][0] for h in b ]
spend_101_raw = self.create_tx(coinbase_txids[0], node1_address, 50)
spend_102_raw = self.create_tx(coinbase_txids[1], node0_address, 50)
spend_103_raw = self.create_tx(coinbase_txids[2], node0_address, 50)
# Broadcast and mine spend_102 and 103:
spend_102_id = self.nodes[0].sendrawtransaction(spend_102_raw)
spend_103_id = self.nodes[0].sendrawtransaction(spend_103_raw)
self.nodes[0].setgenerate(True, 1)
# Create 102_1 and 103_1:
spend_102_1_raw = self.create_tx(spend_102_id, node1_address, 50)
spend_103_1_raw = self.create_tx(spend_103_id, node1_address, 50)
# Broadcast and mine 103_1:
spend_103_1_id = self.nodes[0].sendrawtransaction(spend_103_1_raw)
self.nodes[0].setgenerate(True, 1)
# ... now put spend_101 and spend_102_1 in memory pools:
spend_101_id = self.nodes[0].sendrawtransaction(spend_101_raw)
spend_102_1_id = self.nodes[0].sendrawtransaction(spend_102_1_raw)
self.sync_all()
assert_equal(set(self.nodes[0].getrawmempool()), set([ spend_101_id, spend_102_1_id ]))
# Use invalidateblock to re-org back and make all those coinbase spends
# immature/invalid:
for node in self.nodes:
node.invalidateblock(new_blocks[0])
self.sync_all()
# mempool should be empty.
assert_equal(set(self.nodes[0].getrawmempool()), set())
if __name__ == '__main__':
MempoolCoinbaseTest().main()

View file

@ -40,7 +40,30 @@ class RESTTest (BitcoinTestFramework):
# 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')), 10) assert_greater_than(int(response.getheader('content-length')), 80)
response_str = response.read()
# compare with block header
response_header = http_get_call(url.hostname, url.port, '/rest/headers/1/'+bb_hash+self.FORMAT_SEPARATOR+"bin", True)
assert_equal(response_header.status, 200)
assert_equal(int(response_header.getheader('content-length')), 80)
response_header_str = response_header.read()
assert_equal(response_str[0:80], response_header_str)
# check block hex format
response_hex = http_get_call(url.hostname, url.port, '/rest/block/'+bb_hash+self.FORMAT_SEPARATOR+"hex", True)
assert_equal(response_hex.status, 200)
assert_greater_than(int(response_hex.getheader('content-length')), 160)
response_hex_str = response_hex.read()
assert_equal(response_str.encode("hex")[0:160], response_hex_str[0:160])
# compare with hex block header
response_header_hex = http_get_call(url.hostname, url.port, '/rest/headers/1/'+bb_hash+self.FORMAT_SEPARATOR+"hex", True)
assert_equal(response_header_hex.status, 200)
assert_greater_than(int(response_header_hex.getheader('content-length')), 160)
response_header_hex_str = response_header_hex.read()
assert_equal(response_hex_str[0:160], response_header_hex_str[0:160])
assert_equal(response_header_str.encode("hex")[0:160], response_header_hex_str[0:160])
# check json format # check json format
json_string = http_get_call(url.hostname, url.port, '/rest/block/'+bb_hash+self.FORMAT_SEPARATOR+'json') json_string = http_get_call(url.hostname, url.port, '/rest/block/'+bb_hash+self.FORMAT_SEPARATOR+'json')
@ -48,7 +71,7 @@ class RESTTest (BitcoinTestFramework):
assert_equal(json_obj['hash'], bb_hash) assert_equal(json_obj['hash'], bb_hash)
# do tx test # do tx test
tx_hash = json_obj['tx'][0]; tx_hash = json_obj['tx'][0]['txid'];
json_string = http_get_call(url.hostname, url.port, '/rest/tx/'+tx_hash+self.FORMAT_SEPARATOR+"json") json_string = http_get_call(url.hostname, url.port, '/rest/tx/'+tx_hash+self.FORMAT_SEPARATOR+"json")
json_obj = json.loads(json_string) json_obj = json.loads(json_string)
assert_equal(json_obj['txid'], tx_hash) assert_equal(json_obj['txid'], tx_hash)
@ -58,5 +81,30 @@ class RESTTest (BitcoinTestFramework):
assert_equal(response.status, 200) assert_equal(response.status, 200)
assert_greater_than(int(response.getheader('content-length')), 10) assert_greater_than(int(response.getheader('content-length')), 10)
# check block tx details
# let's make 3 tx and mine them on node 1
txs = []
txs.append(self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 11))
txs.append(self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 11))
txs.append(self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 11))
self.sync_all()
# now mine the transactions
newblockhash = self.nodes[1].setgenerate(True, 1)
self.sync_all()
#check if the 3 tx show up in the new block
json_string = http_get_call(url.hostname, url.port, '/rest/block/'+newblockhash[0]+self.FORMAT_SEPARATOR+'json')
json_obj = json.loads(json_string)
for tx in json_obj['tx']:
if not 'coinbase' in tx['vin'][0]: #exclude coinbase
assert_equal(tx['txid'] in txs, True)
#check the same but without tx details
json_string = http_get_call(url.hostname, url.port, '/rest/block/notxdetails/'+newblockhash[0]+self.FORMAT_SEPARATOR+'json')
json_obj = json.loads(json_string)
for tx in txs:
assert_equal(tx in json_obj['tx'], True)
if __name__ == '__main__': if __name__ == '__main__':
RESTTest ().main () RESTTest ().main ()

200
qa/rpc-tests/walletbackup.py Executable file
View file

@ -0,0 +1,200 @@
#!/usr/bin/env python2
# Copyright (c) 2014 The Bitcoin Core developers
# Distributed under the MIT/X11 software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
"""
Exercise the wallet backup code. Ported from walletbackup.sh.
Test case is:
4 nodes. 1 2 and 3 send transactions between each other,
fourth node is a miner.
1 2 3 each mine a block to start, then
Miner creates 100 blocks so 1 2 3 each have 50 mature
coins to spend.
Then 5 iterations of 1/2/3 sending coins amongst
themselves to get transactions in the wallets,
and the miner mining one block.
Wallets are backed up using dumpwallet/backupwallet.
Then 5 more iterations of transactions and mining a block.
Miner then generates 101 more blocks, so any
transaction fees paid mature.
Sanity check:
Sum(1,2,3,4 balances) == 114*50
1/2/3 are shutdown, and their wallets erased.
Then restore using wallet.dat backup. And
confirm 1/2/3/4 balances are same as before.
Shutdown again, restore using importwallet,
and confirm again balances are correct.
"""
from test_framework import BitcoinTestFramework
from util import *
from random import randint
import logging
logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.INFO)
class WalletBackupTest(BitcoinTestFramework):
def setup_chain(self):
logging.info("Initializing test directory "+self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 4)
# This mirrors how the network was setup in the bash test
def setup_network(self, split=False):
# nodes 1, 2,3 are spenders, let's give them a keypool=100
extra_args = [["-keypool=100"], ["-keypool=100"], ["-keypool=100"], []]
self.nodes = start_nodes(4, self.options.tmpdir, extra_args)
connect_nodes(self.nodes[0], 3)
connect_nodes(self.nodes[1], 3)
connect_nodes(self.nodes[2], 3)
connect_nodes(self.nodes[2], 0)
self.is_network_split=False
self.sync_all()
def one_send(self, from_node, to_address):
if (randint(1,2) == 1):
amount = Decimal(randint(1,10)) / Decimal(10)
self.nodes[from_node].sendtoaddress(to_address, amount)
def do_one_round(self):
a0 = self.nodes[0].getnewaddress()
a1 = self.nodes[1].getnewaddress()
a2 = self.nodes[2].getnewaddress()
self.one_send(0, a1)
self.one_send(0, a2)
self.one_send(1, a0)
self.one_send(1, a2)
self.one_send(2, a0)
self.one_send(2, a1)
# Have the miner (node3) mine a block.
# Must sync mempools before mining.
sync_mempools(self.nodes)
self.nodes[3].setgenerate(True, 1)
# As above, this mirrors the original bash test.
def start_three(self):
self.nodes[0] = start_node(0, self.options.tmpdir)
self.nodes[1] = start_node(1, self.options.tmpdir)
self.nodes[2] = start_node(2, self.options.tmpdir)
connect_nodes(self.nodes[0], 3)
connect_nodes(self.nodes[1], 3)
connect_nodes(self.nodes[2], 3)
connect_nodes(self.nodes[2], 0)
def stop_three(self):
stop_node(self.nodes[0], 0)
stop_node(self.nodes[1], 1)
stop_node(self.nodes[2], 2)
def erase_three(self):
os.remove(self.options.tmpdir + "/node0/regtest/wallet.dat")
os.remove(self.options.tmpdir + "/node1/regtest/wallet.dat")
os.remove(self.options.tmpdir + "/node2/regtest/wallet.dat")
def run_test(self):
logging.info("Generating initial blockchain")
self.nodes[0].setgenerate(True, 1)
sync_blocks(self.nodes)
self.nodes[1].setgenerate(True, 1)
sync_blocks(self.nodes)
self.nodes[2].setgenerate(True, 1)
sync_blocks(self.nodes)
self.nodes[3].setgenerate(True, 100)
sync_blocks(self.nodes)
assert_equal(self.nodes[0].getbalance(), 50)
assert_equal(self.nodes[1].getbalance(), 50)
assert_equal(self.nodes[2].getbalance(), 50)
assert_equal(self.nodes[3].getbalance(), 0)
logging.info("Creating transactions")
# Five rounds of sending each other transactions.
for i in range(5):
self.do_one_round()
logging.info("Backing up")
tmpdir = self.options.tmpdir
self.nodes[0].backupwallet(tmpdir + "/node0/wallet.bak")
self.nodes[0].dumpwallet(tmpdir + "/node0/wallet.dump")
self.nodes[1].backupwallet(tmpdir + "/node1/wallet.bak")
self.nodes[1].dumpwallet(tmpdir + "/node1/wallet.dump")
self.nodes[2].backupwallet(tmpdir + "/node2/wallet.bak")
self.nodes[2].dumpwallet(tmpdir + "/node2/wallet.dump")
logging.info("More transactions")
for i in range(5):
self.do_one_round()
# Generate 101 more blocks, so any fees paid mature
self.nodes[3].setgenerate(True, 101)
self.sync_all()
balance0 = self.nodes[0].getbalance()
balance1 = self.nodes[1].getbalance()
balance2 = self.nodes[2].getbalance()
balance3 = self.nodes[3].getbalance()
total = balance0 + balance1 + balance2 + balance3
# At this point, there are 214 blocks (103 for setup, then 10 rounds, then 101.)
# 114 are mature, so the sum of all wallets should be 114 * 50 = 5700.
assert_equal(total, 5700)
##
# Test restoring spender wallets from backups
##
logging.info("Restoring using wallet.dat")
self.stop_three()
self.erase_three()
# Start node2 with no chain
shutil.rmtree(self.options.tmpdir + "/node2/regtest/blocks")
shutil.rmtree(self.options.tmpdir + "/node2/regtest/chainstate")
# Restore wallets from backup
shutil.copyfile(tmpdir + "/node0/wallet.bak", tmpdir + "/node0/regtest/wallet.dat")
shutil.copyfile(tmpdir + "/node1/wallet.bak", tmpdir + "/node1/regtest/wallet.dat")
shutil.copyfile(tmpdir + "/node2/wallet.bak", tmpdir + "/node2/regtest/wallet.dat")
logging.info("Re-starting nodes")
self.start_three()
sync_blocks(self.nodes)
assert_equal(self.nodes[0].getbalance(), balance0)
assert_equal(self.nodes[1].getbalance(), balance1)
assert_equal(self.nodes[2].getbalance(), balance2)
logging.info("Restoring using dumped wallet")
self.stop_three()
self.erase_three()
#start node2 with no chain
shutil.rmtree(self.options.tmpdir + "/node2/regtest/blocks")
shutil.rmtree(self.options.tmpdir + "/node2/regtest/chainstate")
self.start_three()
assert_equal(self.nodes[0].getbalance(), 0)
assert_equal(self.nodes[1].getbalance(), 0)
assert_equal(self.nodes[2].getbalance(), 0)
self.nodes[0].importwallet(tmpdir + "/node0/wallet.dump")
self.nodes[1].importwallet(tmpdir + "/node1/wallet.dump")
self.nodes[2].importwallet(tmpdir + "/node2/wallet.dump")
sync_blocks(self.nodes)
assert_equal(self.nodes[0].getbalance(), balance0)
assert_equal(self.nodes[1].getbalance(), balance1)
assert_equal(self.nodes[2].getbalance(), balance2)
if __name__ == '__main__':
WalletBackupTest().main()

View file

@ -1,297 +0,0 @@
#!/usr/bin/env bash
# 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 wallet backup / dump / restore functionality
# Test case is:
# 4 nodes. 1 2 3 and send transactions between each other,
# fourth node is a miner.
# 1 2 3 and each mine a block to start, then
# miner creates 100 blocks so 1 2 3 each have 50 mature
# coins to spend.
# Then 5 iterations of 1/2/3 sending coins amongst
# themselves to get transactions in the wallets,
# and the miner mining one block.
#
# Wallets are backed up using dumpwallet/backupwallet.
# Then 5 more iterations of transactions, then block.
#
# Miner then generates 101 more blocks, so any
# transaction fees paid mature.
#
# Sanity checks done:
# Miner balance >= 150*50
# Sum(1,2,3,4 balances) == 153*150
#
# 1/2/3 are shutdown, and their wallets erased.
# Then restore using wallet.dat backup. And
# confirm 1/2/3/4 balances are same as before.
#
# Shutdown again, restore using importwallet,
# and confirm again balances are correct.
#
if [ $# -lt 1 ]; then
echo "Usage: $0 path_to_binaries"
echo "e.g. $0 ../../src"
echo "Env vars BITCOIND and BITCOINCLI may be used to specify the exact binaries used"
exit 1
fi
BITCOIND=${BITCOIND:-${1}/bitcoind}
CLI=${BITCOINCLI:-${1}/bitcoin-cli}
DIR="${BASH_SOURCE%/*}"
SENDANDWAIT="${DIR}/send.sh"
if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi
. "$DIR/util.sh"
D=$(mktemp -d test.XXXXX)
echo "Starting nodes..."
# "Miner":
D4=${D}/node4
CreateDataDir $D4 port=11030 rpcport=11031
B4ARGS="-datadir=$D4"
$BITCOIND $BITCOINDARGS $B4ARGS &
B4PID=$!
# Want default keypool for 1/2/3, and
# don't need send-and-wait functionality,
# so don't use CreateDataDir:
function CreateConfDir {
DIR=$1
mkdir -p $DIR
CONF=$DIR/bitcoin.conf
echo "regtest=1" >> $CONF
echo "rpcuser=rt" >> $CONF
echo "rpcpassword=rt" >> $CONF
echo "rpcwait=1" >> $CONF
shift
while (( "$#" )); do
echo $1 >> $CONF
shift
done
}
# "Spenders" 1/2/3
D1=${D}/node1
CreateConfDir $D1 port=11000 rpcport=11001 addnode=127.0.0.1:11030
B1ARGS="-datadir=$D1"
$BITCOIND $B1ARGS &
B1PID=$!
D2=${D}/node2
CreateConfDir $D2 port=11010 rpcport=11011 addnode=127.0.0.1:11030
B2ARGS="-datadir=$D2"
$BITCOIND $B2ARGS &
B2PID=$!
D3=${D}/node3
CreateConfDir $D3 port=11020 rpcport=11021 addnode=127.0.0.1:11030 addnode=127.0.0.1:11000
B3ARGS="-datadir=$D3"
$BITCOIND $BITCOINDARGS $B3ARGS &
B3PID=$!
# Wait until all nodes are at the same block number
function WaitBlocks {
while :
do
sleep 1
BLOCKS1=$( GetBlocks "$B1ARGS" )
BLOCKS2=$( GetBlocks "$B2ARGS" )
BLOCKS3=$( GetBlocks "$B3ARGS" )
BLOCKS4=$( GetBlocks "$B4ARGS" )
if (( BLOCKS1 == BLOCKS4 && BLOCKS2 == BLOCKS4 && BLOCKS3 == BLOCKS4 ))
then
break
fi
done
}
# Wait until all nodes have the same txns in
# their memory pools
function WaitMemPools {
while :
do
sleep 1
MEMPOOL1=$( $CLI "$B1ARGS" getrawmempool | sort | shasum )
MEMPOOL2=$( $CLI "$B2ARGS" getrawmempool | sort | shasum )
MEMPOOL3=$( $CLI "$B3ARGS" getrawmempool | sort | shasum )
MEMPOOL4=$( $CLI "$B4ARGS" getrawmempool | sort | shasum )
if [[ $MEMPOOL1 = $MEMPOOL4 && $MEMPOOL2 = $MEMPOOL4 && $MEMPOOL3 = $MEMPOOL4 ]]
then
break
fi
done
}
echo "Generating initial blockchain..."
# 1 block, 50 XBT each == 50 BTC
$CLI $B1ARGS setgenerate true 1
WaitBlocks
$CLI $B2ARGS setgenerate true 1
WaitBlocks
$CLI $B3ARGS setgenerate true 1
WaitBlocks
# 100 blocks, 0 mature
$CLI $B4ARGS setgenerate true 100
WaitBlocks
CheckBalance "$B1ARGS" 50
CheckBalance "$B2ARGS" 50
CheckBalance "$B3ARGS" 50
CheckBalance "$B4ARGS" 0
echo "Creating transactions..."
function S {
TXID=$( $CLI -datadir=${D}/node${1} sendtoaddress ${2} "${3}" 0 )
if [ x$TXID = x ] ; then
echoerr "node${1}: error sending ${3} btc"
echo -n "node${1} balance: "
$CLI -datadir=${D}/node${1} getbalance "*" 0
exit 1
fi
}
function OneRound {
A1=$( $CLI $B1ARGS getnewaddress )
A2=$( $CLI $B2ARGS getnewaddress )
A3=$( $CLI $B3ARGS getnewaddress )
if [[ $(( $RANDOM%2 )) < 1 ]] ; then
N=$(( $RANDOM % 9 + 1 ))
S 1 $A2 "0.$N"
fi
if [[ $(( $RANDOM%2 )) < 1 ]] ; then
N=$(( $RANDOM % 9 + 1 ))
S 1 $A3 "0.0$N"
fi
if [[ $(( $RANDOM%2 )) < 1 ]] ; then
N=$(( $RANDOM % 9 + 1 ))
S 2 $A1 "0.$N"
fi
if [[ $(( $RANDOM%2 )) < 1 ]] ; then
N=$(( $RANDOM % 9 + 1 ))
S 2 $A3 "0.$N"
fi
if [[ $(( $RANDOM%2 )) < 1 ]] ; then
N=$(( $RANDOM % 9 + 1 ))
S 3 $A1 "0.$N"
fi
if [[ $(( $RANDOM%2 )) < 1 ]] ; then
N=$(( $RANDOM % 9 + 1 ))
S 3 $A2 "0.0$N"
fi
$CLI "$B4ARGS" setgenerate true 1
}
for i in {1..5}; do OneRound ; done
echo "Backing up..."
$CLI "$B1ARGS" backupwallet "$D1/wallet.bak"
$CLI "$B1ARGS" dumpwallet "$D1/wallet.dump"
$CLI "$B2ARGS" backupwallet "$D2/wallet.bak"
$CLI "$B2ARGS" dumpwallet "$D2/wallet.dump"
$CLI "$B3ARGS" backupwallet "$D3/wallet.bak"
$CLI "$B3ARGS" dumpwallet "$D3/wallet.dump"
echo "More transactions..."
for i in {1..5}; do OneRound ; done
WaitMemPools
# Generate 101 more blocks, so any fees paid
# mature
$CLI "$B4ARGS" setgenerate true 101
BALANCE1=$( $CLI "$B1ARGS" getbalance )
BALANCE2=$( $CLI "$B2ARGS" getbalance )
BALANCE3=$( $CLI "$B3ARGS" getbalance )
BALANCE4=$( $CLI "$B4ARGS" getbalance )
TOTAL=$( dc -e "$BALANCE1 $BALANCE2 $BALANCE3 $BALANCE4 + + + p" )
AssertEqual $TOTAL 5700.00000000
function StopThree {
$CLI $B1ARGS stop > /dev/null 2>&1
$CLI $B2ARGS stop > /dev/null 2>&1
$CLI $B3ARGS stop > /dev/null 2>&1
wait $B1PID
wait $B2PID
wait $B3PID
}
function EraseThree {
rm $D1/regtest/wallet.dat
rm $D2/regtest/wallet.dat
rm $D3/regtest/wallet.dat
}
function StartThree {
$BITCOIND $BITCOINDARGS $B1ARGS &
B1PID=$!
$BITCOIND $BITCOINDARGS $B2ARGS &
B2PID=$!
$BITCOIND $BITCOINDARGS $B3ARGS &
B3PID=$!
}
echo "Restoring using wallet.dat"
StopThree
EraseThree
# Start node3 with no chain
rm -rf $D3/regtest/blocks
rm -rf $D3/regtest/chainstate
rm -rf $D3/regtest/database
cp $D1/wallet.bak $D1/regtest/wallet.dat
cp $D2/wallet.bak $D2/regtest/wallet.dat
cp $D3/wallet.bak $D3/regtest/wallet.dat
StartThree
WaitBlocks
AssertEqual $BALANCE1 $( $CLI "$B1ARGS" getbalance )
AssertEqual $BALANCE2 $( $CLI "$B2ARGS" getbalance )
AssertEqual $BALANCE3 $( $CLI "$B3ARGS" getbalance )
echo "Restoring using dumped wallet"
StopThree
EraseThree
# Start node3 with no chain
rm -rf $D3/regtest/blocks
rm -rf $D3/regtest/chainstate
rm -rf $D3/regtest/database
StartThree
AssertEqual 0 $( $CLI "$B1ARGS" getbalance )
AssertEqual 0 $( $CLI "$B2ARGS" getbalance )
AssertEqual 0 $( $CLI "$B3ARGS" getbalance )
$CLI "$B1ARGS" importwallet $D1/wallet.dump
$CLI "$B2ARGS" importwallet $D2/wallet.dump
$CLI "$B3ARGS" importwallet $D3/wallet.dump
WaitBlocks
AssertEqual $BALANCE1 $( $CLI "$B1ARGS" getbalance )
AssertEqual $BALANCE2 $( $CLI "$B2ARGS" getbalance )
AssertEqual $BALANCE3 $( $CLI "$B3ARGS" getbalance )
StopThree
$CLI $B4ARGS stop > /dev/null 2>&1
wait $B4PID
echo "Tests successful, cleaning up"
trap "" EXIT
rm -rf $D
exit 0

View file

@ -212,21 +212,21 @@ BITCOIN_QT_H = \
RES_ICONS = \ RES_ICONS = \
qt/res/icons/add.png \ qt/res/icons/add.png \
qt/res/icons/address-book.png \ qt/res/icons/address-book.png \
qt/res/icons/about.png \
qt/res/icons/about_qt.png \
qt/res/icons/bitcoin.ico \ qt/res/icons/bitcoin.ico \
qt/res/icons/bitcoin.png \ qt/res/icons/bitcoin.png \
qt/res/icons/bitcoin_testnet.ico \
qt/res/icons/bitcoin_testnet.png \
qt/res/icons/clock1.png \ qt/res/icons/clock1.png \
qt/res/icons/clock2.png \ qt/res/icons/clock2.png \
qt/res/icons/clock3.png \ qt/res/icons/clock3.png \
qt/res/icons/clock4.png \ qt/res/icons/clock4.png \
qt/res/icons/clock5.png \ qt/res/icons/clock5.png \
qt/res/icons/configure.png \ qt/res/icons/configure.png \
qt/res/icons/connect0_16.png \ qt/res/icons/connect0.png \
qt/res/icons/connect1_16.png \ qt/res/icons/connect1.png \
qt/res/icons/connect2_16.png \ qt/res/icons/connect2.png \
qt/res/icons/connect3_16.png \ qt/res/icons/connect3.png \
qt/res/icons/connect4_16.png \ qt/res/icons/connect4.png \
qt/res/icons/debugwindow.png \ qt/res/icons/debugwindow.png \
qt/res/icons/edit.png \ qt/res/icons/edit.png \
qt/res/icons/editcopy.png \ qt/res/icons/editcopy.png \
@ -237,11 +237,12 @@ RES_ICONS = \
qt/res/icons/eye_plus.png \ qt/res/icons/eye_plus.png \
qt/res/icons/filesave.png \ qt/res/icons/filesave.png \
qt/res/icons/history.png \ qt/res/icons/history.png \
qt/res/icons/info.png \
qt/res/icons/key.png \ qt/res/icons/key.png \
qt/res/icons/lock_closed.png \ qt/res/icons/lock_closed.png \
qt/res/icons/lock_open.png \ qt/res/icons/lock_open.png \
qt/res/icons/open.png \
qt/res/icons/overview.png \ qt/res/icons/overview.png \
qt/res/icons/qrcode.png \
qt/res/icons/quit.png \ qt/res/icons/quit.png \
qt/res/icons/receive.png \ qt/res/icons/receive.png \
qt/res/icons/remove.png \ qt/res/icons/remove.png \
@ -256,7 +257,8 @@ RES_ICONS = \
qt/res/icons/tx_mined.png \ qt/res/icons/tx_mined.png \
qt/res/icons/unit_btc.png \ qt/res/icons/unit_btc.png \
qt/res/icons/unit_mbtc.png \ qt/res/icons/unit_mbtc.png \
qt/res/icons/unit_ubtc.png qt/res/icons/unit_ubtc.png \
qt/res/icons/verify.png
BITCOIN_QT_CPP = \ BITCOIN_QT_CPP = \
qt/bitcoinaddressvalidator.cpp \ qt/bitcoinaddressvalidator.cpp \
@ -311,9 +313,7 @@ BITCOIN_QT_CPP += \
endif endif
RES_IMAGES = \ RES_IMAGES = \
qt/res/images/about.png \ qt/res/images/about.png
qt/res/images/splash.png \
qt/res/images/splash_testnet.png
RES_MOVIES = $(wildcard qt/res/movies/spinner-*.png) RES_MOVIES = $(wildcard qt/res/movies/spinner-*.png)
@ -367,7 +367,7 @@ qt_bitcoin_qt_LIBTOOLFLAGS = --tag CXX
#locale/foo.ts -> locale/foo.qm #locale/foo.ts -> locale/foo.qm
QT_QM=$(QT_TS:.ts=.qm) QT_QM=$(QT_TS:.ts=.qm)
.SECONDARY: $(QT_QM) SECONDARY: $(QT_QM)
qt/bitcoinstrings.cpp: $(libbitcoin_server_a_SOURCES) $(libbitcoin_wallet_a_SOURCES) qt/bitcoinstrings.cpp: $(libbitcoin_server_a_SOURCES) $(libbitcoin_wallet_a_SOURCES)
@test -n $(XGETTEXT) || echo "xgettext is required for updating translations" @test -n $(XGETTEXT) || echo "xgettext is required for updating translations"

View file

@ -57,3 +57,52 @@ const CBlockIndex *CChain::FindFork(const CBlockIndex *pindex) const {
pindex = pindex->pprev; pindex = pindex->pprev;
return pindex; return pindex;
} }
/** Turn the lowest '1' bit in the binary representation of a number into a '0'. */
int static inline InvertLowestOne(int n) { return n & (n - 1); }
/** Compute what height to jump back to with the CBlockIndex::pskip pointer. */
int static inline GetSkipHeight(int height) {
if (height < 2)
return 0;
// Determine which height to jump back to. Any number strictly lower than height is acceptable,
// but the following expression seems to perform well in simulations (max 110 steps to go back
// up to 2**18 blocks).
return (height & 1) ? InvertLowestOne(InvertLowestOne(height - 1)) + 1 : InvertLowestOne(height);
}
CBlockIndex* CBlockIndex::GetAncestor(int height)
{
if (height > nHeight || height < 0)
return NULL;
CBlockIndex* pindexWalk = this;
int heightWalk = nHeight;
while (heightWalk > height) {
int heightSkip = GetSkipHeight(heightWalk);
int heightSkipPrev = GetSkipHeight(heightWalk - 1);
if (heightSkip == height ||
(heightSkip > height && !(heightSkipPrev < heightSkip - 2 &&
heightSkipPrev >= height))) {
// Only follow pskip if pprev->pskip isn't better than pskip->pprev.
pindexWalk = pindexWalk->pskip;
heightWalk = heightSkip;
} else {
pindexWalk = pindexWalk->pprev;
heightWalk--;
}
}
return pindexWalk;
}
const CBlockIndex* CBlockIndex::GetAncestor(int height) const
{
return const_cast<CBlockIndex*>(this)->GetAncestor(height);
}
void CBlockIndex::BuildSkip()
{
if (pprev)
pskip = pprev->GetAncestor(GetSkipHeight(nHeight));
}

View file

@ -95,7 +95,7 @@ enum BlockStatus {
class CBlockIndex class CBlockIndex
{ {
public: public:
//! pointer to the hash of the block, if any. memory is owned by this CBlockIndex //! pointer to the hash of the block, if any. Memory is owned by this CBlockIndex
const uint256* phashBlock; const uint256* phashBlock;
//! pointer to the index of the predecessor of this block //! pointer to the index of the predecessor of this block
@ -236,14 +236,6 @@ public:
return pbegin[(pend - pbegin)/2]; return pbegin[(pend - pbegin)/2];
} }
/**
* Returns true if there are nRequired or more blocks of minVersion or above
* in the last Params().ToCheckBlockUpgradeMajority() blocks, starting at pstart
* and going backwards.
*/
static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart,
unsigned int nRequired);
std::string ToString() const std::string ToString() const
{ {
return strprintf("CBlockIndex(pprev=%p, nHeight=%d, merkle=%s, hashBlock=%s)", return strprintf("CBlockIndex(pprev=%p, nHeight=%d, merkle=%s, hashBlock=%s)",
@ -293,7 +285,7 @@ public:
hashPrev = 0; hashPrev = 0;
} }
explicit CDiskBlockIndex(CBlockIndex* pindex) : CBlockIndex(*pindex) { explicit CDiskBlockIndex(const CBlockIndex* pindex) : CBlockIndex(*pindex) {
hashPrev = (pprev ? pprev->GetBlockHash() : 0); hashPrev = (pprev ? pprev->GetBlockHash() : 0);
} }

View file

@ -15,7 +15,7 @@
//! These need to be macros, as clientversion.cpp's and bitcoin*-res.rc's voodoo requires it //! These need to be macros, as clientversion.cpp's and bitcoin*-res.rc's voodoo requires it
#define CLIENT_VERSION_MAJOR 0 #define CLIENT_VERSION_MAJOR 0
#define CLIENT_VERSION_MINOR 9 #define CLIENT_VERSION_MINOR 10
#define CLIENT_VERSION_REVISION 99 #define CLIENT_VERSION_REVISION 99
#define CLIENT_VERSION_BUILD 0 #define CLIENT_VERSION_BUILD 0

View file

@ -82,7 +82,7 @@ bool CKey::Sign(const uint256 &hash, std::vector<unsigned char>& vchSig, uint32_
prng.Generate((unsigned char*)&nonce, 32); prng.Generate((unsigned char*)&nonce, 32);
nonce += test_case; nonce += test_case;
int nSigLen = 72; int nSigLen = 72;
int ret = secp256k1_ecdsa_sign((const unsigned char*)&hash, 32, (unsigned char*)&vchSig[0], &nSigLen, begin(), (unsigned char*)&nonce); int ret = secp256k1_ecdsa_sign((const unsigned char*)&hash, (unsigned char*)&vchSig[0], &nSigLen, begin(), (unsigned char*)&nonce);
nonce = 0; nonce = 0;
if (ret) { if (ret) {
vchSig.resize(nSigLen); vchSig.resize(nSigLen);
@ -114,7 +114,7 @@ bool CKey::SignCompact(const uint256 &hash, std::vector<unsigned char>& vchSig)
do { do {
uint256 nonce; uint256 nonce;
prng.Generate((unsigned char*)&nonce, 32); prng.Generate((unsigned char*)&nonce, 32);
int ret = secp256k1_ecdsa_sign_compact((const unsigned char*)&hash, 32, &vchSig[1], begin(), (unsigned char*)&nonce, &rec); int ret = secp256k1_ecdsa_sign_compact((const unsigned char*)&hash, &vchSig[1], begin(), (unsigned char*)&nonce, &rec);
nonce = 0; nonce = 0;
if (ret) if (ret)
break; break;

View file

@ -67,6 +67,13 @@ map<uint256, COrphanTx> mapOrphanTransactions;
map<uint256, set<uint256> > mapOrphanTransactionsByPrev; map<uint256, set<uint256> > mapOrphanTransactionsByPrev;
void EraseOrphansFor(NodeId peer); void EraseOrphansFor(NodeId peer);
/**
* Returns true if there are nRequired or more blocks of minVersion or above
* in the last Params().ToCheckBlockUpgradeMajority() blocks, starting at pstart
* and going backwards.
*/
static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned int nRequired);
/** Constant stuff for coinbase transactions we create: */ /** Constant stuff for coinbase transactions we create: */
CScript COINBASE_FLAGS; CScript COINBASE_FLAGS;
@ -1018,7 +1025,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
hash.ToString(), nFees, txMinFee), hash.ToString(), nFees, txMinFee),
REJECT_INSUFFICIENTFEE, "insufficient fee"); REJECT_INSUFFICIENTFEE, "insufficient fee");
// Continuously rate-limit free (really, very-low-fee)transactions // Continuously rate-limit free (really, very-low-fee) transactions
// This mitigates 'penny-flooding' -- sending thousands of free transactions just to // This mitigates 'penny-flooding' -- sending thousands of free transactions just to
// be annoying or make others' transactions take longer to confirm. // be annoying or make others' transactions take longer to confirm.
if (fLimitFree && nFees < ::minRelayTxFee.GetFee(nSize)) if (fLimitFree && nFees < ::minRelayTxFee.GetFee(nSize))
@ -1043,7 +1050,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
} }
if (fRejectInsaneFee && nFees > ::minRelayTxFee.GetFee(nSize) * 10000) if (fRejectInsaneFee && nFees > ::minRelayTxFee.GetFee(nSize) * 10000)
return error("AcceptToMemoryPool: : insane fees %s, %d > %d", return error("AcceptToMemoryPool: insane fees %s, %d > %d",
hash.ToString(), hash.ToString(),
nFees, ::minRelayTxFee.GetFee(nSize) * 10000); nFees, ::minRelayTxFee.GetFee(nSize) * 10000);
@ -1051,7 +1058,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
// This is done last to help prevent CPU exhaustion denial-of-service attacks. // This is done last to help prevent CPU exhaustion denial-of-service attacks.
if (!CheckInputs(tx, state, view, true, STANDARD_SCRIPT_VERIFY_FLAGS, true)) if (!CheckInputs(tx, state, view, true, STANDARD_SCRIPT_VERIFY_FLAGS, true))
{ {
return error("AcceptToMemoryPool: : ConnectInputs failed %s", hash.ToString()); return error("AcceptToMemoryPool: ConnectInputs failed %s", hash.ToString());
} }
// Store transaction in memory // Store transaction in memory
pool.addUnchecked(hash, entry); pool.addUnchecked(hash, entry);
@ -1792,24 +1799,23 @@ bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode) {
// 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();
// Then update all block file information (which may refer to block and undo files). // Then update all block file information (which may refer to block and undo files).
bool fileschanged = false; {
for (set<int>::iterator it = setDirtyFileInfo.begin(); it != setDirtyFileInfo.end(); ) { std::vector<std::pair<int, const CBlockFileInfo*> > vFiles;
if (!pblocktree->WriteBlockFileInfo(*it, vinfoBlockFile[*it])) { vFiles.reserve(setDirtyFileInfo.size());
return state.Abort("Failed to write to block index"); for (set<int>::iterator it = setDirtyFileInfo.begin(); it != setDirtyFileInfo.end(); ) {
vFiles.push_back(make_pair(*it, &vinfoBlockFile[*it]));
setDirtyFileInfo.erase(it++);
}
std::vector<const CBlockIndex*> vBlocks;
vBlocks.reserve(setDirtyBlockIndex.size());
for (set<CBlockIndex*>::iterator it = setDirtyBlockIndex.begin(); it != setDirtyBlockIndex.end(); ) {
vBlocks.push_back(*it);
setDirtyBlockIndex.erase(it++);
}
if (!pblocktree->WriteBatchSync(vFiles, nLastBlockFile, vBlocks)) {
return state.Abort("Files to write to block index database");
} }
fileschanged = true;
setDirtyFileInfo.erase(it++);
} }
if (fileschanged && !pblocktree->WriteLastBlockFile(nLastBlockFile)) {
return state.Abort("Failed to write to block index");
}
for (set<CBlockIndex*>::iterator it = setDirtyBlockIndex.begin(); it != setDirtyBlockIndex.end(); ) {
if (!pblocktree->WriteBlockIndex(CDiskBlockIndex(*it))) {
return state.Abort("Failed to write to block index");
}
setDirtyBlockIndex.erase(it++);
}
pblocktree->Sync();
// Finally flush the chainstate (which may refer to block index entries). // Finally flush the chainstate (which may refer to block index entries).
if (!pcoinsTip->Flush()) if (!pcoinsTip->Flush())
return state.Abort("Failed to write to coin database"); return state.Abort("Failed to write to coin database");
@ -1892,10 +1898,10 @@ bool static DisconnectTip(CValidationState &state) {
// ignore validation errors in resurrected transactions // ignore validation errors in resurrected transactions
list<CTransaction> removed; list<CTransaction> removed;
CValidationState stateDummy; CValidationState stateDummy;
if (!tx.IsCoinBase()) if (tx.IsCoinBase() || !AcceptToMemoryPool(mempool, stateDummy, tx, false, NULL))
if (!AcceptToMemoryPool(mempool, stateDummy, tx, false, NULL)) mempool.remove(tx, removed, true);
mempool.remove(tx, removed, true);
} }
mempool.removeCoinbaseSpends(pcoinsTip, pindexDelete->nHeight);
mempool.check(pcoinsTip); mempool.check(pcoinsTip);
// Update chainActive and related variables. // Update chainActive and related variables.
UpdateTip(pindexDelete->pprev); UpdateTip(pindexDelete->pprev);
@ -2480,8 +2486,7 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta
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 && if (block.nVersion < 2 && IsSuperMajority(2, pindexPrev, Params().RejectBlockOutdatedMajority()))
CBlockIndex::IsSuperMajority(2, pindexPrev, Params().RejectBlockOutdatedMajority()))
{ {
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");
@ -2502,8 +2507,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 && if (block.nVersion >= 2 && IsSuperMajority(2, pindexPrev, Params().EnforceBlockUpgradeMajority()))
CBlockIndex::IsSuperMajority(2, pindexPrev, Params().EnforceBlockUpgradeMajority()))
{ {
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() ||
@ -2601,7 +2605,7 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CBlockIndex** ppindex,
return true; return true;
} }
bool CBlockIndex::IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned int nRequired) static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned int nRequired)
{ {
unsigned int nToCheck = Params().ToCheckBlockUpgradeMajority(); unsigned int nToCheck = Params().ToCheckBlockUpgradeMajority();
unsigned int nFound = 0; unsigned int nFound = 0;
@ -2614,54 +2618,6 @@ bool CBlockIndex::IsSuperMajority(int minVersion, const CBlockIndex* pstart, uns
return (nFound >= nRequired); return (nFound >= nRequired);
} }
/** Turn the lowest '1' bit in the binary representation of a number into a '0'. */
int static inline InvertLowestOne(int n) { return n & (n - 1); }
/** Compute what height to jump back to with the CBlockIndex::pskip pointer. */
int static inline GetSkipHeight(int height) {
if (height < 2)
return 0;
// Determine which height to jump back to. Any number strictly lower than height is acceptable,
// but the following expression seems to perform well in simulations (max 110 steps to go back
// up to 2**18 blocks).
return (height & 1) ? InvertLowestOne(InvertLowestOne(height - 1)) + 1 : InvertLowestOne(height);
}
CBlockIndex* CBlockIndex::GetAncestor(int height)
{
if (height > nHeight || height < 0)
return NULL;
CBlockIndex* pindexWalk = this;
int heightWalk = nHeight;
while (heightWalk > height) {
int heightSkip = GetSkipHeight(heightWalk);
int heightSkipPrev = GetSkipHeight(heightWalk - 1);
if (heightSkip == height ||
(heightSkip > height && !(heightSkipPrev < heightSkip - 2 &&
heightSkipPrev >= height))) {
// Only follow pskip if pprev->pskip isn't better than pskip->pprev.
pindexWalk = pindexWalk->pskip;
heightWalk = heightSkip;
} else {
pindexWalk = pindexWalk->pprev;
heightWalk--;
}
}
return pindexWalk;
}
const CBlockIndex* CBlockIndex::GetAncestor(int height) const
{
return const_cast<CBlockIndex*>(this)->GetAncestor(height);
}
void CBlockIndex::BuildSkip()
{
if (pprev)
pskip = pprev->GetAncestor(GetSkipHeight(nHeight));
}
bool ProcessNewBlock(CValidationState &state, CNode* pfrom, CBlock* pblock, CDiskBlockPos *dbp) bool ProcessNewBlock(CValidationState &state, CNode* pfrom, CBlock* pblock, CDiskBlockPos *dbp)
{ {
@ -3032,7 +2988,7 @@ bool InitBlockIndex() {
return error("LoadBlockIndex() : genesis block not accepted"); return error("LoadBlockIndex() : genesis block not accepted");
if (!ActivateBestChain(state, &block)) if (!ActivateBestChain(state, &block))
return error("LoadBlockIndex() : genesis block cannot be activated"); return error("LoadBlockIndex() : genesis block cannot be activated");
// Force a chainstate write so that when we VerifyDB in a moment, it doesnt check stale data // Force a chainstate write so that when we VerifyDB in a moment, it doesn't check stale data
return FlushStateToDisk(state, FLUSH_STATE_ALWAYS); return FlushStateToDisk(state, FLUSH_STATE_ALWAYS);
} catch(std::runtime_error &e) { } catch(std::runtime_error &e) {
return error("LoadBlockIndex() : failed to initialize block database: %s", e.what()); return error("LoadBlockIndex() : failed to initialize block database: %s", e.what());

View file

@ -16,7 +16,7 @@ bool CPubKey::Verify(const uint256 &hash, const std::vector<unsigned char>& vchS
if (!IsValid()) if (!IsValid())
return false; return false;
#ifdef USE_SECP256K1 #ifdef USE_SECP256K1
if (secp256k1_ecdsa_verify((const unsigned char*)&hash, 32, &vchSig[0], vchSig.size(), begin(), size()) != 1) if (secp256k1_ecdsa_verify((const unsigned char*)&hash, &vchSig[0], vchSig.size(), begin(), size()) != 1)
return false; return false;
#else #else
CECKey key; CECKey key;
@ -35,7 +35,7 @@ bool CPubKey::RecoverCompact(const uint256 &hash, const std::vector<unsigned cha
bool fComp = ((vchSig[0] - 27) & 4) != 0; bool fComp = ((vchSig[0] - 27) & 4) != 0;
#ifdef USE_SECP256K1 #ifdef USE_SECP256K1
int pubkeylen = 65; int pubkeylen = 65;
if (!secp256k1_ecdsa_recover_compact((const unsigned char*)&hash, 32, &vchSig[1], (unsigned char*)begin(), &pubkeylen, fComp, recid)) if (!secp256k1_ecdsa_recover_compact((const unsigned char*)&hash, &vchSig[1], (unsigned char*)begin(), &pubkeylen, fComp, recid))
return false; return false;
assert((int)size() == pubkeylen); assert((int)size() == pubkeylen);
#else #else

View file

@ -570,9 +570,9 @@ int main(int argc, char *argv[])
} }
#ifdef ENABLE_WALLET #ifdef ENABLE_WALLET
// Parse URIs on command line -- this can affect Params() // Parse URIs on command line -- this can affect Params()
if (!PaymentServer::ipcParseCommandLine(argc, argv)) PaymentServer::ipcParseCommandLine(argc, argv);
exit(0);
#endif #endif
QScopedPointer<const NetworkStyle> networkStyle(NetworkStyle::instantiate(QString::fromStdString(Params().NetworkIDString()))); QScopedPointer<const NetworkStyle> networkStyle(NetworkStyle::instantiate(QString::fromStdString(Params().NetworkIDString())));
assert(!networkStyle.isNull()); assert(!networkStyle.isNull());
// Allow for separate UI settings for testnets // Allow for separate UI settings for testnets

View file

@ -4,11 +4,11 @@
<file alias="address-book">res/icons/address-book.png</file> <file alias="address-book">res/icons/address-book.png</file>
<file alias="quit">res/icons/quit.png</file> <file alias="quit">res/icons/quit.png</file>
<file alias="send">res/icons/send.png</file> <file alias="send">res/icons/send.png</file>
<file alias="connect_0">res/icons/connect0_16.png</file> <file alias="connect_0">res/icons/connect0.png</file>
<file alias="connect_1">res/icons/connect1_16.png</file> <file alias="connect_1">res/icons/connect1.png</file>
<file alias="connect_2">res/icons/connect2_16.png</file> <file alias="connect_2">res/icons/connect2.png</file>
<file alias="connect_3">res/icons/connect3_16.png</file> <file alias="connect_3">res/icons/connect3.png</file>
<file alias="connect_4">res/icons/connect4_16.png</file> <file alias="connect_4">res/icons/connect4.png</file>
<file alias="transaction_0">res/icons/transaction0.png</file> <file alias="transaction_0">res/icons/transaction0.png</file>
<file alias="transaction_confirmed">res/icons/transaction2.png</file> <file alias="transaction_confirmed">res/icons/transaction2.png</file>
<file alias="transaction_conflicted">res/icons/transaction_conflicted.png</file> <file alias="transaction_conflicted">res/icons/transaction_conflicted.png</file>
@ -25,7 +25,6 @@
<file alias="editpaste">res/icons/editpaste.png</file> <file alias="editpaste">res/icons/editpaste.png</file>
<file alias="editcopy">res/icons/editcopy.png</file> <file alias="editcopy">res/icons/editcopy.png</file>
<file alias="add">res/icons/add.png</file> <file alias="add">res/icons/add.png</file>
<file alias="bitcoin_testnet">res/icons/bitcoin_testnet.png</file>
<file alias="edit">res/icons/edit.png</file> <file alias="edit">res/icons/edit.png</file>
<file alias="history">res/icons/history.png</file> <file alias="history">res/icons/history.png</file>
<file alias="overview">res/icons/overview.png</file> <file alias="overview">res/icons/overview.png</file>
@ -43,13 +42,15 @@
<file alias="lock_open">res/icons/lock_open.png</file> <file alias="lock_open">res/icons/lock_open.png</file>
<file alias="key">res/icons/key.png</file> <file alias="key">res/icons/key.png</file>
<file alias="filesave">res/icons/filesave.png</file> <file alias="filesave">res/icons/filesave.png</file>
<file alias="qrcode">res/icons/qrcode.png</file>
<file alias="debugwindow">res/icons/debugwindow.png</file> <file alias="debugwindow">res/icons/debugwindow.png</file>
<file alias="open">res/icons/open.png</file>
<file alias="info">res/icons/info.png</file>
<file alias="about">res/icons/about.png</file>
<file alias="about_qt">res/icons/about_qt.png</file>
<file alias="verify">res/icons/verify.png</file>
</qresource> </qresource>
<qresource prefix="/images"> <qresource prefix="/images">
<file alias="about">res/images/about.png</file> <file alias="about">res/images/about.png</file>
<file alias="splash">res/images/splash.png</file>
<file alias="splash_testnet">res/images/splash_testnet.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>
@ -87,5 +88,6 @@
<file alias="spinner-032">res/movies/spinner-032.png</file> <file alias="spinner-032">res/movies/spinner-032.png</file>
<file alias="spinner-033">res/movies/spinner-033.png</file> <file alias="spinner-033">res/movies/spinner-033.png</file>
<file alias="spinner-034">res/movies/spinner-034.png</file> <file alias="spinner-034">res/movies/spinner-034.png</file>
<file alias="spinner-035">res/movies/spinner-035.png</file>
</qresource> </qresource>
</RCC> </RCC>

View file

@ -115,8 +115,8 @@ BitcoinGUI::BitcoinGUI(const NetworkStyle *networkStyle, QWidget *parent) :
} }
windowTitle += " " + networkStyle->getTitleAddText(); windowTitle += " " + networkStyle->getTitleAddText();
#ifndef Q_OS_MAC #ifndef Q_OS_MAC
QApplication::setWindowIcon(networkStyle->getAppIcon()); QApplication::setWindowIcon(networkStyle->getTrayAndWindowIcon());
setWindowIcon(networkStyle->getAppIcon()); setWindowIcon(networkStyle->getTrayAndWindowIcon());
#else #else
MacDockIconHandler::instance()->setIcon(networkStyle->getAppIcon()); MacDockIconHandler::instance()->setIcon(networkStyle->getAppIcon());
#endif #endif
@ -128,7 +128,7 @@ BitcoinGUI::BitcoinGUI(const NetworkStyle *networkStyle, QWidget *parent) :
setUnifiedTitleAndToolBarOnMac(true); setUnifiedTitleAndToolBarOnMac(true);
#endif #endif
rpcConsole = new RPCConsole(enableWallet ? this : 0); rpcConsole = new RPCConsole(0);
#ifdef ENABLE_WALLET #ifdef ENABLE_WALLET
if(enableWallet) if(enableWallet)
{ {
@ -234,6 +234,8 @@ BitcoinGUI::~BitcoinGUI()
delete appMenuBar; delete appMenuBar;
MacDockIconHandler::instance()->setMainWindow(NULL); MacDockIconHandler::instance()->setMainWindow(NULL);
#endif #endif
delete rpcConsole;
} }
void BitcoinGUI::createActions(const NetworkStyle *networkStyle) void BitcoinGUI::createActions(const NetworkStyle *networkStyle)
@ -285,20 +287,16 @@ void BitcoinGUI::createActions(const NetworkStyle *networkStyle)
quitAction->setStatusTip(tr("Quit application")); quitAction->setStatusTip(tr("Quit application"));
quitAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q)); quitAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q));
quitAction->setMenuRole(QAction::QuitRole); quitAction->setMenuRole(QAction::QuitRole);
aboutAction = new QAction(networkStyle->getAppIcon(), tr("&About Bitcoin Core"), this); aboutAction = new QAction(QIcon(":/icons/about"), tr("&About Bitcoin Core"), this);
aboutAction->setStatusTip(tr("Show information about Bitcoin Core")); aboutAction->setStatusTip(tr("Show information about Bitcoin Core"));
aboutAction->setMenuRole(QAction::AboutRole); aboutAction->setMenuRole(QAction::AboutRole);
#if QT_VERSION < 0x050000 aboutQtAction = new QAction(QIcon(":/icons/about_qt"), tr("About &Qt"), this);
aboutQtAction = new QAction(QIcon(":/trolltech/qmessagebox/images/qtlogo-64.png"), tr("About &Qt"), this);
#else
aboutQtAction = new QAction(QIcon(":/qt-project.org/qmessagebox/images/qtlogo-64.png"), tr("About &Qt"), this);
#endif
aboutQtAction->setStatusTip(tr("Show information about Qt")); aboutQtAction->setStatusTip(tr("Show information about Qt"));
aboutQtAction->setMenuRole(QAction::AboutQtRole); aboutQtAction->setMenuRole(QAction::AboutQtRole);
optionsAction = new QAction(QIcon(":/icons/options"), tr("&Options..."), this); optionsAction = new QAction(QIcon(":/icons/options"), tr("&Options..."), this);
optionsAction->setStatusTip(tr("Modify configuration options for Bitcoin")); optionsAction->setStatusTip(tr("Modify configuration options for Bitcoin"));
optionsAction->setMenuRole(QAction::PreferencesRole); optionsAction->setMenuRole(QAction::PreferencesRole);
toggleHideAction = new QAction(networkStyle->getAppIcon(), tr("&Show / Hide"), this); toggleHideAction = new QAction(QIcon(":/icons/about"), tr("&Show / Hide"), this);
toggleHideAction->setStatusTip(tr("Show or hide the main Window")); toggleHideAction->setStatusTip(tr("Show or hide the main Window"));
encryptWalletAction = new QAction(QIcon(":/icons/lock_closed"), tr("&Encrypt Wallet..."), this); encryptWalletAction = new QAction(QIcon(":/icons/lock_closed"), tr("&Encrypt Wallet..."), this);
@ -310,7 +308,7 @@ void BitcoinGUI::createActions(const NetworkStyle *networkStyle)
changePassphraseAction->setStatusTip(tr("Change the passphrase used for wallet encryption")); changePassphraseAction->setStatusTip(tr("Change the passphrase used for wallet encryption"));
signMessageAction = new QAction(QIcon(":/icons/edit"), tr("Sign &message..."), this); signMessageAction = new QAction(QIcon(":/icons/edit"), tr("Sign &message..."), this);
signMessageAction->setStatusTip(tr("Sign messages with your Bitcoin addresses to prove you own them")); signMessageAction->setStatusTip(tr("Sign messages with your Bitcoin addresses to prove you own them"));
verifyMessageAction = new QAction(QIcon(":/icons/transaction_0"), tr("&Verify message..."), this); verifyMessageAction = new QAction(QIcon(":/icons/verify"), tr("&Verify message..."), this);
verifyMessageAction->setStatusTip(tr("Verify messages to ensure they were signed with specified Bitcoin addresses")); verifyMessageAction->setStatusTip(tr("Verify messages to ensure they were signed with specified Bitcoin addresses"));
openRPCConsoleAction = new QAction(QIcon(":/icons/debugwindow"), tr("&Debug window"), this); openRPCConsoleAction = new QAction(QIcon(":/icons/debugwindow"), tr("&Debug window"), this);
@ -321,10 +319,10 @@ void BitcoinGUI::createActions(const NetworkStyle *networkStyle)
usedReceivingAddressesAction = new QAction(QIcon(":/icons/address-book"), tr("&Receiving addresses..."), this); usedReceivingAddressesAction = new QAction(QIcon(":/icons/address-book"), tr("&Receiving addresses..."), this);
usedReceivingAddressesAction->setStatusTip(tr("Show the list of used receiving addresses and labels")); usedReceivingAddressesAction->setStatusTip(tr("Show the list of used receiving addresses and labels"));
openAction = new QAction(QApplication::style()->standardIcon(QStyle::SP_FileIcon), tr("Open &URI..."), this); openAction = new QAction(QIcon(":/icons/open"), tr("Open &URI..."), this);
openAction->setStatusTip(tr("Open a bitcoin: URI or payment request")); openAction->setStatusTip(tr("Open a bitcoin: URI or payment request"));
showHelpMessageAction = new QAction(QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation), tr("&Command-line options"), this); showHelpMessageAction = new QAction(QIcon(":/icons/info"), tr("&Command-line options"), this);
showHelpMessageAction->setStatusTip(tr("Show the Bitcoin Core help message to get a list with possible Bitcoin command-line options")); showHelpMessageAction->setStatusTip(tr("Show the Bitcoin Core help message to get a list with possible Bitcoin command-line options"));
connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
@ -495,7 +493,7 @@ void BitcoinGUI::createTrayIcon(const NetworkStyle *networkStyle)
trayIcon = new QSystemTrayIcon(this); trayIcon = new QSystemTrayIcon(this);
QString toolTip = tr("Bitcoin Core client") + " " + networkStyle->getTitleAddText(); QString toolTip = tr("Bitcoin Core client") + " " + networkStyle->getTitleAddText();
trayIcon->setToolTip(toolTip); trayIcon->setToolTip(toolTip);
trayIcon->setIcon(networkStyle->getAppIcon()); trayIcon->setIcon(networkStyle->getTrayAndWindowIcon());
trayIcon->show(); trayIcon->show();
#endif #endif
@ -831,6 +829,9 @@ void BitcoinGUI::closeEvent(QCloseEvent *event)
if(!clientModel->getOptionsModel()->getMinimizeToTray() && if(!clientModel->getOptionsModel()->getMinimizeToTray() &&
!clientModel->getOptionsModel()->getMinimizeOnClose()) !clientModel->getOptionsModel()->getMinimizeOnClose())
{ {
// close rpcConsole in case it was open to make some space for the shutdown window
rpcConsole->close();
QApplication::quit(); QApplication::quit();
} }
} }

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>RPCConsole</class> <class>RPCConsole</class>
<widget class="QDialog" name="RPCConsole"> <widget class="QWidget" name="RPCConsole">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>

View file

@ -67,6 +67,12 @@
<iconset resource="../bitcoin.qrc"> <iconset resource="../bitcoin.qrc">
<normaloff>:/icons/address-book</normaloff>:/icons/address-book</iconset> <normaloff>:/icons/address-book</normaloff>:/icons/address-book</iconset>
</property> </property>
<property name="iconSize">
<size>
<width>22</width>
<height>22</height>
</size>
</property>
<property name="shortcut"> <property name="shortcut">
<string>Alt+A</string> <string>Alt+A</string>
</property> </property>
@ -84,6 +90,12 @@
<iconset resource="../bitcoin.qrc"> <iconset resource="../bitcoin.qrc">
<normaloff>:/icons/editpaste</normaloff>:/icons/editpaste</iconset> <normaloff>:/icons/editpaste</normaloff>:/icons/editpaste</iconset>
</property> </property>
<property name="iconSize">
<size>
<width>22</width>
<height>22</height>
</size>
</property>
<property name="shortcut"> <property name="shortcut">
<string>Alt+P</string> <string>Alt+P</string>
</property> </property>
@ -101,6 +113,12 @@
<iconset resource="../bitcoin.qrc"> <iconset resource="../bitcoin.qrc">
<normaloff>:/icons/remove</normaloff>:/icons/remove</iconset> <normaloff>:/icons/remove</normaloff>:/icons/remove</iconset>
</property> </property>
<property name="iconSize">
<size>
<width>22</width>
<height>22</height>
</size>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>

View file

@ -38,9 +38,6 @@ static const int TOOLTIP_WRAP_THRESHOLD = 80;
/* Maximum allowed URI length */ /* Maximum allowed URI length */
static const int MAX_URI_LENGTH = 255; static const int MAX_URI_LENGTH = 255;
/* Maximum somewhat-sane size of a payment request file */
static const int MAX_PAYMENT_REQUEST_SIZE = 50000; // bytes
/* QRCodeDialog -- size of exported QR Code image */ /* QRCodeDialog -- size of exported QR Code image */
#define EXPORT_IMAGE_SIZE 256 #define EXPORT_IMAGE_SIZE 256

View file

@ -1855,14 +1855,26 @@ Adresse: %4</translation>
<source>Minimize</source> <source>Minimize</source>
<translation>Minimieren</translation> <translation>Minimieren</translation>
</message> </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>
</message> </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 "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>
</message>
<message> <message>
<source>total at least</source> <source>total at least</source>
<translation>Mindestbetrag</translation> <translation>Mindestbetrag</translation>
</message> </message>
<message>
<source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for bitcoin transactions than the network can process.</source>
<translation>Nur die minimale Gebühr zu bezahlen ist so lange in Ordnung, wie weniger Transaktionsvolumen als Platz in den Blöcken vorhanden ist. Aber Vorsicht, diese Option kann dazu führen, dass Transaktionen nicht bestätigt werden, wenn mehr Bedarf an Bitcoin-Transaktionen besteht als das Netzwerk verarbeiten kann.</translation>
</message>
<message> <message>
<source>(read the tooltip)</source> <source>(read the tooltip)</source>
<translation>(den Hinweistext lesen)</translation> <translation>(den Hinweistext lesen)</translation>
@ -2821,6 +2833,10 @@ zum Beispiel: alertnotify=echo %%s | mail -s \"Bitcoin Alert\" admin@foo.com
<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>
</message> </message>
<message>
<source>Distributed under the MIT software license, see the accompanying file COPYING or &lt;http://www.opensource.org/licenses/mit-license.php&gt;.</source>
<translation>Veröffentlicht unter der MIT-Softwarelizenz, siehe beiligende Datei COPYING oder &lt;http://www.opensource.org/licenses/mit-license.php&gt;.</translation>
</message>
<message> <message>
<source>Enter regression test mode, which uses a special chain in which blocks can be solved instantly.</source> <source>Enter regression test mode, which uses a special chain in which blocks can be solved instantly.</source>
<translation>Regressionstest-Modus aktivieren, der eine spezielle Blockkette nutzt, in der Blöcke sofort gelöst werden können.</translation> <translation>Regressionstest-Modus aktivieren, der eine spezielle Blockkette nutzt, in der Blöcke sofort gelöst werden können.</translation>

View file

@ -7,7 +7,7 @@
</message> </message>
<message> <message>
<source>Create a new address</source> <source>Create a new address</source>
<translation>Δημιούργησε νέα διεύθυνση</translation> <translation>Δημιουργία νέας διεύθυνσης</translation>
</message> </message>
<message> <message>
<source>&amp;New</source> <source>&amp;New</source>
@ -53,6 +53,10 @@
<source>Choose the address to receive coins with</source> <source>Choose the address to receive coins with</source>
<translation>Επιλογή διεύθυνσης απ' όπου θα ληφθούν νομίσματα</translation> <translation>Επιλογή διεύθυνσης απ' όπου θα ληφθούν νομίσματα</translation>
</message> </message>
<message>
<source>C&amp;hoose</source>
<translation>Ε&amp;πιλογή</translation>
</message>
<message> <message>
<source>Sending addresses</source> <source>Sending addresses</source>
<translation>Διευθύνσεις αποστολής</translation> <translation>Διευθύνσεις αποστολής</translation>
@ -65,6 +69,10 @@
<source>These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source> <source>These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
<translation>Αυτές είναι οι Bitcoin διευθύνσεις σας για να λαμβάνετε πληρωμές. Δίνοντας μία ξεχωριστή διεύθυνση σε κάθε αποστολέα, θα μπορείτε να ελέγχετε ποιος σας πληρώνει.</translation> <translation>Αυτές είναι οι Bitcoin διευθύνσεις σας για να λαμβάνετε πληρωμές. Δίνοντας μία ξεχωριστή διεύθυνση σε κάθε αποστολέα, θα μπορείτε να ελέγχετε ποιος σας πληρώνει.</translation>
</message> </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>Αυτές είναι οι Bitcoin διευθύνσεις σας για να λαμβάνετε πληρωμές. Δίνοντας μία ξεχωριστή διεύθυνση σε κάθε αποστολέα, θα μπορείτε να ελέγχετε ποιος σας πληρώνει.</translation>
</message>
<message> <message>
<source>Copy &amp;Label</source> <source>Copy &amp;Label</source>
<translation>Αντιγραφή &amp;επιγραφής</translation> <translation>Αντιγραφή &amp;επιγραφής</translation>
@ -85,7 +93,11 @@
<source>Exporting Failed</source> <source>Exporting Failed</source>
<translation>Η εξαγωγή απέτυχε</translation> <translation>Η εξαγωγή απέτυχε</translation>
</message> </message>
</context> <message>
<source>There was an error trying to save the address list to %1. Please try again.</source>
<translation>Παρουσιάστηκε σφάλμα κατά την αποθήκευση της λίστας πορτοφολιών στο %1. Παρακαλώ δοκιμάστε ξανά</translation>
</message>
</context>
<context> <context>
<name>AddressTableModel</name> <name>AddressTableModel</name>
<message> <message>
@ -113,7 +125,7 @@
</message> </message>
<message> <message>
<source>New passphrase</source> <source>New passphrase</source>
<translation>Νέος κωδικός πρόσβασης</translation> <translation>&amp;Αλλαγή κωδικού</translation>
</message> </message>
<message> <message>
<source>Repeat new passphrase</source> <source>Repeat new passphrase</source>
@ -121,7 +133,7 @@
</message> </message>
<message> <message>
<source>Encrypt wallet</source> <source>Encrypt wallet</source>
<translation>Κρυπτογράφησε το πορτοφόλι</translation> <translation>&amp;Κρυπτογράφηση πορτοφολιού</translation>
</message> </message>
<message> <message>
<source>This operation needs your wallet passphrase to unlock the wallet.</source> <source>This operation needs your wallet passphrase to unlock the wallet.</source>
@ -172,6 +184,10 @@
<source>Wallet encrypted</source> <source>Wallet encrypted</source>
<translation>Κρυπτογραφημενο πορτοφολι</translation> <translation>Κρυπτογραφημενο πορτοφολι</translation>
</message> </message>
<message>
<source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;ten or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
<translation>Εισάγετε τον νέο κωδικό πρόσβασης στον πορτοφόλι &lt;br/&gt; Παρακαλώ χρησιμοποιείστε ένα κωδικό με &lt;b&gt; 10 ή περισσότερους τυχαίους χαρακτήρες&lt;/b&gt; ή &lt;b&gt; οχτώ ή παραπάνω λέξεις&lt;/b&gt;.</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> <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> <translation>Το Bitcoin θα κλεισει τώρα για να τελειώσει την διαδικασία κρυπτογραφησης. Θυμησου ότι κρυπτογραφώντας το πορτοφολι σου δεν μπορείς να προστατέψεις πλήρως τα bitcoins σου από κλοπή στην περίπτωση όπου μολυνθεί ο υπολογιστής σου με κακόβουλο λογισμικό.</translation>
@ -219,6 +235,10 @@
<source>&amp;Overview</source> <source>&amp;Overview</source>
<translation>&amp;Επισκόπηση</translation> <translation>&amp;Επισκόπηση</translation>
</message> </message>
<message>
<source>Node</source>
<translation>Κόμβος</translation>
</message>
<message> <message>
<source>Show general overview of wallet</source> <source>Show general overview of wallet</source>
<translation>Εμφάνισε τη γενική εικόνα του πορτοφολιού</translation> <translation>Εμφάνισε τη γενική εικόνα του πορτοφολιού</translation>
@ -263,6 +283,22 @@
<source>&amp;Change Passphrase...</source> <source>&amp;Change Passphrase...</source>
<translation>&amp;Άλλαξε κωδικο πρόσβασης</translation> <translation>&amp;Άλλαξε κωδικο πρόσβασης</translation>
</message> </message>
<message>
<source>&amp;Sending addresses...</source>
<translation>Διευθύνσεις αποστολής</translation>
</message>
<message>
<source>&amp;Receiving addresses...</source>
<translation>Διευθύνσεις λήψης</translation>
</message>
<message>
<source>Open &amp;URI...</source>
<translation>'Ανοιγμα &amp;URI</translation>
</message>
<message>
<source>Bitcoin Core client</source>
<translation>Εφαρμογή Bitcoin Core</translation>
</message>
<message> <message>
<source>Importing blocks from disk...</source> <source>Importing blocks from disk...</source>
<translation>Εισαγωγή μπλοκ από τον σκληρο δίσκο ... </translation> <translation>Εισαγωγή μπλοκ από τον σκληρο δίσκο ... </translation>
@ -315,6 +351,10 @@
<source>&amp;Receive</source> <source>&amp;Receive</source>
<translation>&amp;Παραλαβή </translation> <translation>&amp;Παραλαβή </translation>
</message> </message>
<message>
<source>Show information about Bitcoin Core</source>
<translation>Σχετικά με το Bitcoin Core</translation>
</message>
<message> <message>
<source>&amp;Show / Hide</source> <source>&amp;Show / Hide</source>
<translation>&amp;Εμφάνισε/Κρύψε</translation> <translation>&amp;Εμφάνισε/Κρύψε</translation>
@ -371,6 +411,18 @@
<source>Show the list of used receiving addresses and labels</source> <source>Show the list of used receiving addresses and labels</source>
<translation>Προβολή της λίστας των χρησιμοποιημένων διευθύνσεων και ετικετών λήψεως</translation> <translation>Προβολή της λίστας των χρησιμοποιημένων διευθύνσεων και ετικετών λήψεως</translation>
</message> </message>
<message>
<source>Open a bitcoin: URI or payment request</source>
<translation>Άνοιγμα bitcoin: URI αίτησης πληρωμής</translation>
</message>
<message>
<source>&amp;Command-line options</source>
<translation>&amp;Επιλογές γραμμής εντολών</translation>
</message>
<message>
<source>Show the Bitcoin Core help message to get a list with possible Bitcoin command-line options</source>
<translation>Εμφανιση του Bitcoin-Qt μήνυματος βοήθειας για να πάρετε μια λίστα με τις πιθανές επιλογές Bitcoin γραμμής εντολών.</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 ενεργές συνδέσεις στο δίκτυο Βitcoin</numerusform></translation> <translation><numerusform>%n ενεργή σύνδεση στο δίκτυο Bitcoin</numerusform><numerusform>%n ενεργές συνδέσεις στο δίκτυο Βitcoin</numerusform></translation>
@ -469,6 +521,10 @@ Address: %4
</context> </context>
<context> <context>
<name>CoinControlDialog</name> <name>CoinControlDialog</name>
<message>
<source>Coin Selection</source>
<translation>Επιλογή κερμάτων</translation>
</message>
<message> <message>
<source>Quantity:</source> <source>Quantity:</source>
<translation>Ποσότητα:</translation> <translation>Ποσότητα:</translation>
@ -485,6 +541,18 @@ Address: %4
<source>Priority:</source> <source>Priority:</source>
<translation>Προτεραιότητα:</translation> <translation>Προτεραιότητα:</translation>
</message> </message>
<message>
<source>Fee:</source>
<translation>Ταρίφα</translation>
</message>
<message>
<source>Dust:</source>
<translation>Σκόνη</translation>
</message>
<message>
<source>After Fee:</source>
<translation>Ταρίφα αλλαγής</translation>
</message>
<message> <message>
<source>Change:</source> <source>Change:</source>
<translation>Ρέστα:</translation> <translation>Ρέστα:</translation>
@ -493,10 +561,26 @@ Address: %4
<source>(un)select all</source> <source>(un)select all</source>
<translation>(από)επιλογή όλων</translation> <translation>(από)επιλογή όλων</translation>
</message> </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>
</message> </message>
<message>
<source>Received with label</source>
<translation>Παραλήφθηκε με επιγραφή</translation>
</message>
<message>
<source>Received with address</source>
<translation>Παραλείφθηκε με την εξής διεύθυνση</translation>
</message>
<message> <message>
<source>Date</source> <source>Date</source>
<translation>Ημερομηνία</translation> <translation>Ημερομηνία</translation>
@ -529,10 +613,26 @@ Address: %4
<source>Copy transaction ID</source> <source>Copy transaction ID</source>
<translation>Αντιγραφη του ID Συναλλαγής</translation> <translation>Αντιγραφη του ID Συναλλαγής</translation>
</message> </message>
<message>
<source>Lock unspent</source>
<translation>Κλείδωμα αξόδευτων</translation>
</message>
<message>
<source>Unlock unspent</source>
<translation>Ξεκλείδωμα αξόδευτων</translation>
</message>
<message> <message>
<source>Copy quantity</source> <source>Copy quantity</source>
<translation>Αντιγραφή ποσότητας</translation> <translation>Αντιγραφή ποσότητας</translation>
</message> </message>
<message>
<source>Copy fee</source>
<translation>Αντιγραφή ταρίφας</translation>
</message>
<message>
<source>Copy after fee</source>
<translation>Αντιγραφή ταρίφας</translation>
</message>
<message> <message>
<source>Copy bytes</source> <source>Copy bytes</source>
<translation>Αντιγραφή των byte</translation> <translation>Αντιγραφή των byte</translation>
@ -541,6 +641,10 @@ Address: %4
<source>Copy priority</source> <source>Copy priority</source>
<translation>Αντιγραφή προτεραιότητας</translation> <translation>Αντιγραφή προτεραιότητας</translation>
</message> </message>
<message>
<source>Copy dust</source>
<translation>Αντιγραφή 'σκόνης'</translation>
</message>
<message> <message>
<source>Copy change</source> <source>Copy change</source>
<translation>Αντιγραφή των ρέστων</translation> <translation>Αντιγραφή των ρέστων</translation>
@ -601,6 +705,22 @@ Address: %4
<source>This label turns red, if the transaction size is greater than 1000 bytes.</source> <source>This label turns red, if the transaction size is greater than 1000 bytes.</source>
<translation>Η ετικετα γινετε κοκκινη , αν το μεγεθος της συναλαγης ειναι μεγαλητερο απο 1000 bytes.</translation> <translation>Η ετικετα γινετε κοκκινη , αν το μεγεθος της συναλαγης ειναι μεγαλητερο απο 1000 bytes.</translation>
</message> </message>
<message>
<source>This means a fee of at least %1 per kB is required.</source>
<translation>Ελάχιστο χρεώσιμο ποσό τουλάχιστο %1 ανα kB</translation>
</message>
<message>
<source>Transactions with higher priority are more likely to get included into a block.</source>
<translation>Συναλλαγές με υψηλότερη προτεραιότητα είναι πιο πιθανό να περιλαμβάνονται σε ένα μπλοκ.</translation>
</message>
<message>
<source>This label turns red, if the priority is smaller than "medium".</source>
<translation>Η ετικέτα γίνεται κόκκινη , αν το μέγεθος της συναλαγής είναι μεγαλύτερο απο το ",μεσαίο",</translation>
</message>
<message>
<source>This label turns red, if any recipient receives an amount smaller than %1.</source>
<translation>Η ετικέτα γίνεται κόκκινη , αν ο παραλήπτης παραλάβει ένα ποσό μικρότερο απο %1.</translation>
</message>
<message> <message>
<source>(no label)</source> <source>(no label)</source>
<translation>(χωρίς ετικέτα)</translation> <translation>(χωρίς ετικέτα)</translation>
@ -629,6 +749,10 @@ Address: %4
<source>The label associated with this address list entry</source> <source>The label associated with this address list entry</source>
<translation>Η ετικέτα που συνδέεται με αυτήν την καταχώρηση στο βιβλίο διευθύνσεων</translation> <translation>Η ετικέτα που συνδέεται με αυτήν την καταχώρηση στο βιβλίο διευθύνσεων</translation>
</message> </message>
<message>
<source>The address associated with this address list entry. This can only be modified for sending addresses.</source>
<translation>Η διεύθυνση σχετίζεται με αυτή την καταχώρηση του βιβλίου διευθύνσεων. Μπορεί να τροποποιηθεί μόνο για τις διευθύνσεις αποστολής.</translation>
</message>
<message> <message>
<source>&amp;Address</source> <source>&amp;Address</source>
<translation>&amp;Διεύθυνση</translation> <translation>&amp;Διεύθυνση</translation>
@ -676,6 +800,14 @@ Address: %4
<source>name</source> <source>name</source>
<translation>όνομα</translation> <translation>όνομα</translation>
</message> </message>
<message>
<source>Directory already exists. Add %1 if you intend to create a new directory here.</source>
<translation>Κατάλογος ήδη υπάρχει. Προσθήκη %1, αν σκοπεύετε να δημιουργήσετε έναν νέο κατάλογο εδώ.</translation>
</message>
<message>
<source>Path already exists, and is not a directory.</source>
<translation>Η διαδρομή υπάρχει ήδη αλλά δεν είναι φάκελος</translation>
</message>
<message> <message>
<source>Cannot create data directory here.</source> <source>Cannot create data directory here.</source>
<translation>Δεν μπορεί να δημιουργηθεί φάκελος δεδομένων εδώ.</translation> <translation>Δεν μπορεί να δημιουργηθεί φάκελος δεδομένων εδώ.</translation>
@ -723,11 +855,19 @@ Address: %4
<source>Start minimized</source> <source>Start minimized</source>
<translation>Έναρξη ελαχιστοποιημένο</translation> <translation>Έναρξη ελαχιστοποιημένο</translation>
</message> </message>
<message>
<source>Set SSL root certificates for payment request (default: -system-)</source>
<translation>Ορίστε SSL root certificates για αίτηση πληρωμής (default: -system-)</translation>
</message>
<message> <message>
<source>Show splash screen on startup (default: 1)</source> <source>Show splash screen on startup (default: 1)</source>
<translation>Εμφάνισε την οθόνη εκκίνησης κατά την εκκίνηση(προεπιλογή:1)</translation> <translation>Εμφάνισε την οθόνη εκκίνησης κατά την εκκίνηση(προεπιλογή:1)</translation>
</message> </message>
</context> <message>
<source>Choose data directory on startup (default: 0)</source>
<translation>Επιλογή καταλόγου</translation>
</message>
</context>
<context> <context>
<name>Intro</name> <name>Intro</name>
<message> <message>
@ -742,6 +882,10 @@ Address: %4
<source>As this is the first time the program is launched, you can choose where Bitcoin Core will store its data.</source> <source>As this is the first time the program is launched, you can choose where Bitcoin Core will store its data.</source>
<translation>Καθώς αυτή είναι η πρώτη φορά που εκκινείται το πρόγραμμα, μπορείτε να διαλέξετε πού θα αποθηκεύει το Bitcoin Core τα δεδομένα του.</translation> <translation>Καθώς αυτή είναι η πρώτη φορά που εκκινείται το πρόγραμμα, μπορείτε να διαλέξετε πού θα αποθηκεύει το Bitcoin Core τα δεδομένα του.</translation>
</message> </message>
<message>
<source>Bitcoin Core will download and store a copy of the Bitcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
<translation>O πυρήνας Bitcoin θα κατεβάσει και να αποθηκεύσει ένα αντίγραφο της αλυσίδας μπλοκ Bitcoin. Τουλάχιστον %1GB δεδομένων θα αποθηκευτούν σε αυτόν τον κατάλογο, και θα αυξηθεί με την πάροδο του χρόνου. Το πορτοφόλι θα αποθηκευτεί σε αυτόν τον κατάλογο.</translation>
</message>
<message> <message>
<source>Use the default data directory</source> <source>Use the default data directory</source>
<translation>Χρήση του προεπιλεγμένου φακέλου δεδομένων</translation> <translation>Χρήση του προεπιλεγμένου φακέλου δεδομένων</translation>
@ -754,6 +898,10 @@ Address: %4
<source>Bitcoin Core</source> <source>Bitcoin Core</source>
<translation>Bitcoin Core</translation> <translation>Bitcoin Core</translation>
</message> </message>
<message>
<source>Error: Specified data directory "%1" cannot be created.</source>
<translation>Σφάλμα: Ο καθορισμένος φάκελος δεδομένων "%1" δεν μπορεί να δημιουργηθεί.</translation>
</message>
<message> <message>
<source>Error</source> <source>Error</source>
<translation>Σφάλμα</translation> <translation>Σφάλμα</translation>
@ -761,7 +909,27 @@ Address: %4
</context> </context>
<context> <context>
<name>OpenURIDialog</name> <name>OpenURIDialog</name>
</context> <message>
<source>Open URI</source>
<translation>'Ανοιγμα &amp;URI</translation>
</message>
<message>
<source>Open payment request from URI or file</source>
<translation>Ανοιχτό αίτημα πληρωμής από URI ή απο αρχείο</translation>
</message>
<message>
<source>URI:</source>
<translation>URI:</translation>
</message>
<message>
<source>Select payment request file</source>
<translation>Επιλέξτε πληρωμή αρχείου αίτησης</translation>
</message>
<message>
<source>Select payment request file to open</source>
<translation>Επιλέξτε αρχείο πληρωμής για άνοιγμα.</translation>
</message>
</context>
<context> <context>
<name>OptionsDialog</name> <name>OptionsDialog</name>
<message> <message>
@ -780,10 +948,34 @@ Address: %4
<source>&amp;Start Bitcoin on system login</source> <source>&amp;Start Bitcoin on system login</source>
<translation>&amp;Έναρξη του Βιtcoin κατά την εκκίνηση του συστήματος</translation> <translation>&amp;Έναρξη του Βιtcoin κατά την εκκίνηση του συστήματος</translation>
</message> </message>
<message>
<source>Size of &amp;database cache</source>
<translation>Μέγεθος κρυφής μνήμης βάσης δεδομένων.</translation>
</message>
<message> <message>
<source>MB</source> <source>MB</source>
<translation>MB</translation> <translation>MB</translation>
</message> </message>
<message>
<source>Number of script &amp;verification threads</source>
<translation>Αριθμός script και γραμμές επαλήθευσης </translation>
</message>
<message>
<source>Accept connections from outside</source>
<translation>Αποδοχή συνδέσεων απο έξω</translation>
</message>
<message>
<source>Allow incoming connections</source>
<translation>Αποδοχή εισερχόμενων συναλλαγών</translation>
</message>
<message>
<source>IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1)</source>
<translation>Διεύθυνση IP του διαμεσολαβητή (π.χ. 127.0.0.1 / IPv6: ::1)</translation>
</message>
<message>
<source>Third party transaction URLs</source>
<translation>Διευθύνσεις τρίτων συναλλαγών.</translation>
</message>
<message> <message>
<source>Reset all client options to default.</source> <source>Reset all client options to default.</source>
<translation>Επαναφορα όλων των επιλογων του πελάτη σε default.</translation> <translation>Επαναφορα όλων των επιλογων του πελάτη σε default.</translation>
@ -796,10 +988,18 @@ Address: %4
<source>&amp;Network</source> <source>&amp;Network</source>
<translation>&amp;Δίκτυο</translation> <translation>&amp;Δίκτυο</translation>
</message> </message>
<message>
<source>W&amp;allet</source>
<translation>Π&amp;ορτοφόλι</translation>
</message>
<message> <message>
<source>Expert</source> <source>Expert</source>
<translation>Έμπειρος</translation> <translation>Έμπειρος</translation>
</message> </message>
<message>
<source>Enable coin &amp;control features</source>
<translation>Επιλογή κατα πόσο να αναδείχνονται οι δυνατότητες ελέγχου κερμάτων.</translation>
</message>
<message> <message>
<source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
<translation>Αυτόματο άνοιγμα των θυρών Bitcoin στον δρομολογητή. Λειτουργεί μόνο αν ο δρομολογητής σας υποστηρίζει τη λειτουργία UPnP.</translation> <translation>Αυτόματο άνοιγμα των θυρών Bitcoin στον δρομολογητή. Λειτουργεί μόνο αν ο δρομολογητής σας υποστηρίζει τη λειτουργία UPnP.</translation>
@ -808,6 +1008,14 @@ Address: %4
<source>Map port using &amp;UPnP</source> <source>Map port using &amp;UPnP</source>
<translation>Απόδοση θυρών με χρήστη &amp;UPnP</translation> <translation>Απόδοση θυρών με χρήστη &amp;UPnP</translation>
</message> </message>
<message>
<source>Connect to the Bitcoin network through a SOCKS5 proxy.</source>
<translation>Σύνδεση στο Bitcoin δίκτυο μέσω διαμεσολαβητή SOCKS5 (π.χ. για σύνδεση μέσω Tor)</translation>
</message>
<message>
<source>&amp;Connect through SOCKS5 proxy (default proxy):</source>
<translation>&amp;Σύνδεση μέσω διαμεσολαβητή SOCKS5 (προεπιλεγμένος)</translation>
</message>
<message> <message>
<source>Proxy &amp;IP:</source> <source>Proxy &amp;IP:</source>
<translation>&amp;IP διαμεσολαβητή:</translation> <translation>&amp;IP διαμεσολαβητή:</translation>
@ -860,6 +1068,10 @@ Address: %4
<source>Choose the default subdivision unit to show in the interface and when sending coins.</source> <source>Choose the default subdivision unit to show in the interface and when sending coins.</source>
<translation>Διαλέξτε την προεπιλεγμένη υποδιαίρεση που θα εμφανίζεται όταν στέλνετε νομίσματα.</translation> <translation>Διαλέξτε την προεπιλεγμένη υποδιαίρεση που θα εμφανίζεται όταν στέλνετε νομίσματα.</translation>
</message> </message>
<message>
<source>Whether to show coin control features or not.</source>
<translation>Επιλογή κατα πόσο να αναδείχνονται οι δυνατότητες ελέγχου κερμάτων.</translation>
</message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation>&amp;ΟΚ</translation> <translation>&amp;ΟΚ</translation>
@ -884,6 +1096,14 @@ 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>
<source>This change would require a client restart.</source>
<translation>Η αλλαγή αυτή θα χρειαστεί επανεκκίνηση του προγράμματος</translation>
</message>
<message> <message>
<source>The supplied proxy address is invalid.</source> <source>The supplied proxy address is invalid.</source>
<translation>Δεν είναι έγκυρη η διεύθυνση διαμεσολαβητή</translation> <translation>Δεν είναι έγκυρη η διεύθυνση διαμεσολαβητή</translation>
@ -899,6 +1119,10 @@ Address: %4
<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>Οι πληροφορίες που εμφανίζονται μπορεί να είναι ξεπερασμένες. Το πορτοφόλι σας συγχρονίζεται αυτόματα με το δίκτυο Bitcoin μετά από μια σύνδεση, αλλά αυτή η διαδικασία δεν έχει ακόμη ολοκληρωθεί. </translation> <translation>Οι πληροφορίες που εμφανίζονται μπορεί να είναι ξεπερασμένες. Το πορτοφόλι σας συγχρονίζεται αυτόματα με το δίκτυο Bitcoin μετά από μια σύνδεση, αλλά αυτή η διαδικασία δεν έχει ακόμη ολοκληρωθεί. </translation>
</message> </message>
<message>
<source>Watch-only:</source>
<translation>Επίβλεψη μόνο:</translation>
</message>
<message> <message>
<source>Available:</source> <source>Available:</source>
<translation>Διαθέσιμο:</translation> <translation>Διαθέσιμο:</translation>
@ -907,6 +1131,10 @@ Address: %4
<source>Your current spendable balance</source> <source>Your current spendable balance</source>
<translation>Το τρέχον διαθέσιμο υπόλοιπο</translation> <translation>Το τρέχον διαθέσιμο υπόλοιπο</translation>
</message> </message>
<message>
<source>Pending:</source>
<translation>Εκκρεμούν:</translation>
</message>
<message> <message>
<source>Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance</source> <source>Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance</source>
<translation>Το άθροισμα των συναλλαγών που δεν έχουν ακόμα επιβεβαιωθεί και δεν προσμετρώνται στο τρέχον διαθέσιμο υπόλοιπό σας</translation> <translation>Το άθροισμα των συναλλαγών που δεν έχουν ακόμα επιβεβαιωθεί και δεν προσμετρώνται στο τρέχον διαθέσιμο υπόλοιπό σας</translation>
@ -919,6 +1147,10 @@ Address: %4
<source>Mined balance that has not yet matured</source> <source>Mined balance that has not yet matured</source>
<translation>Εξορυγμενο υπόλοιπο που δεν έχει ακόμα ωριμάσει </translation> <translation>Εξορυγμενο υπόλοιπο που δεν έχει ακόμα ωριμάσει </translation>
</message> </message>
<message>
<source>Balances</source>
<translation>Υπόλοιπο:</translation>
</message>
<message> <message>
<source>Total:</source> <source>Total:</source>
<translation>Σύνολο:</translation> <translation>Σύνολο:</translation>
@ -927,6 +1159,14 @@ Address: %4
<source>Your current total balance</source> <source>Your current total balance</source>
<translation>Το τρέχον συνολικό υπόλοιπο</translation> <translation>Το τρέχον συνολικό υπόλοιπο</translation>
</message> </message>
<message>
<source>Spendable:</source>
<translation>Ξοδεμένα:</translation>
</message>
<message>
<source>Recent transactions</source>
<translation>Πρόσφατες συναλλαγές</translation>
</message>
<message> <message>
<source>out of sync</source> <source>out of sync</source>
<translation>εκτός συγχρονισμού</translation> <translation>εκτός συγχρονισμού</translation>
@ -942,6 +1182,18 @@ Address: %4
<source>Invalid payment address %1</source> <source>Invalid payment address %1</source>
<translation>Μη έγκυρη διεύθυνση πληρωμής %1</translation> <translation>Μη έγκυρη διεύθυνση πληρωμής %1</translation>
</message> </message>
<message>
<source>Payment request rejected</source>
<translation>Η αίτηση πληρωμής έχει αρνηθεί.</translation>
</message>
<message>
<source>Payment request has expired.</source>
<translation>Η αίτηση πληρωμής έχει λήξει.</translation>
</message>
<message>
<source>Payment request is not initialized.</source>
<translation>Η αίτηση πληρωμής δεν έχει αρχίζει ακόμα.</translation>
</message>
<message> <message>
<source>Payment request error</source> <source>Payment request error</source>
<translation>Σφάλμα αιτήματος πληρωμής</translation> <translation>Σφάλμα αιτήματος πληρωμής</translation>
@ -950,6 +1202,18 @@ Address: %4
<source>Cannot start bitcoin: click-to-pay handler</source> <source>Cannot start bitcoin: click-to-pay handler</source>
<translation>Δεν είναι δυνατή η εκκίνηση του Bitcoin: click-to-pay handler</translation> <translation>Δεν είναι δυνατή η εκκίνηση του Bitcoin: click-to-pay handler</translation>
</message> </message>
<message>
<source>Payment request fetch URL is invalid: %1</source>
<translation>Η διεύθυνση πληρωμής (URL) δεν είναι έγκυρη: %1</translation>
</message>
<message>
<source>Payment request file handling</source>
<translation>Επιλέξτε αρχείο πληρωμής για άνοιγμα.</translation>
</message>
<message>
<source>Refund from %1</source>
<translation>Επιστροφή ποσού από %1</translation>
</message>
<message> <message>
<source>Payment acknowledged</source> <source>Payment acknowledged</source>
<translation>Πληρωμή αναγνωρίστηκε</translation> <translation>Πληρωμή αναγνωρίστηκε</translation>
@ -961,13 +1225,29 @@ Address: %4
</context> </context>
<context> <context>
<name>PeerTableModel</name> <name>PeerTableModel</name>
</context> <message>
<source>Address/Hostname</source>
<translation>Διεύθυθνση/Όνομα υπολογιστή</translation>
</message>
<message>
<source>Ping Time</source>
<translation>Χρόνος καθυστέρησης</translation>
</message>
</context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<source>Amount</source> <source>Amount</source>
<translation>Ποσό</translation> <translation>Ποσό</translation>
</message> </message>
<message>
<source>Enter a Bitcoin address (e.g. %1)</source>
<translation>Εισάγετε μια διεύθυνση Bitcoin (π.χ. %1)</translation>
</message>
<message>
<source>%1 d</source>
<translation>%1 d</translation>
</message>
<message> <message>
<source>%1 h</source> <source>%1 h</source>
<translation>%1 ώ</translation> <translation>%1 ώ</translation>
@ -976,11 +1256,31 @@ Address: %4
<source>%1 m</source> <source>%1 m</source>
<translation>%1 λ</translation> <translation>%1 λ</translation>
</message> </message>
<message>
<source>%1 s</source>
<translation>%1 s</translation>
</message>
<message>
<source>NETWORK</source>
<translation>Δίκτυο</translation>
</message>
<message>
<source>UNKNOWN</source>
<translation>Άγνωστο(α)</translation>
</message>
<message>
<source>None</source>
<translation>Κανένα</translation>
</message>
<message> <message>
<source>N/A</source> <source>N/A</source>
<translation>Μη διαθέσιμο</translation> <translation>Μη διαθέσιμο</translation>
</message> </message>
</context> <message>
<source>%1 ms</source>
<translation>%1 ms</translation>
</message>
</context>
<context> <context>
<name>QRImageWidget</name> <name>QRImageWidget</name>
<message> <message>
@ -1054,6 +1354,22 @@ Address: %4
<source>Current number of blocks</source> <source>Current number of blocks</source>
<translation>Τρέχον αριθμός μπλοκ</translation> <translation>Τρέχον αριθμός μπλοκ</translation>
</message> </message>
<message>
<source>Received</source>
<translation>Παραλήφθησαν</translation>
</message>
<message>
<source>Version</source>
<translation>Έκδοση</translation>
</message>
<message>
<source>Services</source>
<translation>Υπηρεσίες</translation>
</message>
<message>
<source>Ping Time</source>
<translation>Χρόνος καθυστέρησης</translation>
</message>
<message> <message>
<source>Last block time</source> <source>Last block time</source>
<translation>Χρόνος τελευταίου μπλοκ</translation> <translation>Χρόνος τελευταίου μπλοκ</translation>
@ -1130,6 +1446,26 @@ Address: %4
<source>%1 GB</source> <source>%1 GB</source>
<translation>%1 GB</translation> <translation>%1 GB</translation>
</message> </message>
<message>
<source>via %1</source>
<translation>μέσω %1</translation>
</message>
<message>
<source>never</source>
<translation>ποτέ</translation>
</message>
<message>
<source>Inbound</source>
<translation>Εισερχόμενα</translation>
</message>
<message>
<source>Outbound</source>
<translation>Εξερχόμενα</translation>
</message>
<message>
<source>Unknown</source>
<translation>Άγνωστο(α)</translation>
</message>
</context> </context>
<context> <context>
<name>ReceiveCoinsDialog</name> <name>ReceiveCoinsDialog</name>
@ -1184,6 +1520,10 @@ Address: %4
<source>QR Code</source> <source>QR Code</source>
<translation>Κώδικας QR</translation> <translation>Κώδικας QR</translation>
</message> </message>
<message>
<source>Copy &amp;URI</source>
<translation>Αντιγραφη της επιλεγμενης διεύθυνσης στο πρόχειρο του συστηματος</translation>
</message>
<message> <message>
<source>&amp;Save Image...</source> <source>&amp;Save Image...</source>
<translation>&amp;Αποθήκευση εικόνας...</translation> <translation>&amp;Αποθήκευση εικόνας...</translation>
@ -1192,6 +1532,10 @@ Address: %4
<source>Payment information</source> <source>Payment information</source>
<translation>Πληροφορίες πληρωμής</translation> <translation>Πληροφορίες πληρωμής</translation>
</message> </message>
<message>
<source>URI</source>
<translation>URI:</translation>
</message>
<message> <message>
<source>Address</source> <source>Address</source>
<translation>Διεύθυνση</translation> <translation>Διεύθυνση</translation>
@ -1254,6 +1598,10 @@ Address: %4
<source>Send Coins</source> <source>Send Coins</source>
<translation>Αποστολή νομισμάτων</translation> <translation>Αποστολή νομισμάτων</translation>
</message> </message>
<message>
<source>Coin Control Features</source>
<translation>Χαρακτηρηστικά επιλογής κερμάτων</translation>
</message>
<message> <message>
<source>automatically selected</source> <source>automatically selected</source>
<translation>επιλεγμένο αυτόματα</translation> <translation>επιλεγμένο αυτόματα</translation>
@ -1278,10 +1626,34 @@ Address: %4
<source>Priority:</source> <source>Priority:</source>
<translation>Προτεραιότητα:</translation> <translation>Προτεραιότητα:</translation>
</message> </message>
<message>
<source>Fee:</source>
<translation>Ταρίφα</translation>
</message>
<message>
<source>After Fee:</source>
<translation>Ταρίφα αλλαγής</translation>
</message>
<message> <message>
<source>Change:</source> <source>Change:</source>
<translation>Ρέστα:</translation> <translation>Ρέστα:</translation>
</message> </message>
<message>
<source>Transaction Fee:</source>
<translation>Τέλος συναλλαγής:</translation>
</message>
<message>
<source>Choose...</source>
<translation>Επιλογή...</translation>
</message>
<message>
<source>Minimize</source>
<translation>Ελαχιστοποίηση</translation>
</message>
<message>
<source>fast</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>
@ -1294,6 +1666,10 @@ Address: %4
<source>Clear all fields of the form.</source> <source>Clear all fields of the form.</source>
<translation>Καθαρισμός όλων των πεδίων της φόρμας.</translation> <translation>Καθαρισμός όλων των πεδίων της φόρμας.</translation>
</message> </message>
<message>
<source>Dust:</source>
<translation>Σκόνη</translation>
</message>
<message> <message>
<source>Clear &amp;All</source> <source>Clear &amp;All</source>
<translation>Καθαρισμός &amp;Όλων</translation> <translation>Καθαρισμός &amp;Όλων</translation>
@ -1326,6 +1702,14 @@ Address: %4
<source>Copy amount</source> <source>Copy amount</source>
<translation>Αντιγραφή ποσού</translation> <translation>Αντιγραφή ποσού</translation>
</message> </message>
<message>
<source>Copy fee</source>
<translation>Αντιγραφή ταρίφας</translation>
</message>
<message>
<source>Copy after fee</source>
<translation>Αντιγραφή μετα-ταρίφας</translation>
</message>
<message> <message>
<source>Copy bytes</source> <source>Copy bytes</source>
<translation>Αντιγραφή των byte</translation> <translation>Αντιγραφή των byte</translation>
@ -1378,6 +1762,10 @@ Address: %4
<source>(no label)</source> <source>(no label)</source>
<translation>(χωρίς ετικέτα)</translation> <translation>(χωρίς ετικέτα)</translation>
</message> </message>
<message>
<source>Copy dust</source>
<translation>Αντιγραφή 'σκόνης'</translation>
</message>
<message> <message>
<source>Are you sure you want to send?</source> <source>Are you sure you want to send?</source>
<translation>Είστε βέβαιοι για την αποστολή;</translation> <translation>Είστε βέβαιοι για την αποστολή;</translation>
@ -1463,6 +1851,10 @@ Address: %4
<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 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> <translation>Μπορείτε να υπογράφετε μηνύματα με τις διευθύνσεις σας, ώστε ν' αποδεικνύετε πως αυτές σας ανήκουν. Αποφεύγετε να υπογράφετε κάτι αόριστο καθώς ενδέχεται να εξαπατηθείτε. Υπογράφετε μόνο πλήρης δηλώσεις με τις οποίες συμφωνείτε.</translation>
</message> </message>
<message>
<source>The Bitcoin address to sign the message with</source>
<translation>Διεύθυνση Bitcoin που θα σταλεί το μήνυμα</translation>
</message>
<message> <message>
<source>Choose previously used address</source> <source>Choose previously used address</source>
<translation>Επιλογή διεύθυνσης που έχει ήδη χρησιμοποιηθεί</translation> <translation>Επιλογή διεύθυνσης που έχει ήδη χρησιμοποιηθεί</translation>
@ -1515,6 +1907,10 @@ Address: %4
<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 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> <translation>Πληκτρολογήστε την υπογραφή διεύθυνσης, μήνυμα (βεβαιωθείτε ότι έχετε αντιγράψει τις αλλαγές γραμμής, κενά, tabs, κ.λπ. ακριβώς) και την υπογραφή παρακάτω, για να ελέγξει το μήνυμα. Να είστε προσεκτικοί για να μην διαβάσετε περισσότερα στην υπογραφή ό, τι είναι στην υπογραφή ίδιο το μήνυμα , για να μην εξαπατηθούν από έναν άνθρωπο -in - the-middle επίθεση.</translation>
</message> </message>
<message>
<source>The Bitcoin address the message was signed with</source>
<translation>Διεύθυνση Bitcoin η οποία το μήνυμα έχει υπογραφεί</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>Υπογράψτε ένα μήνυμα για ν' αποδείξετε πως υπογραφθηκε απο μια συγκεκριμένη διεύθυνση Bitcoin</translation> <translation>Υπογράψτε ένα μήνυμα για ν' αποδείξετε πως υπογραφθηκε απο μια συγκεκριμένη διεύθυνση Bitcoin</translation>
@ -1608,6 +2004,10 @@ Address: %4
<source>Open until %1</source> <source>Open until %1</source>
<translation>Ανοιχτό μέχρι %1</translation> <translation>Ανοιχτό μέχρι %1</translation>
</message> </message>
<message>
<source>conflicted</source>
<translation>σύγκρουση</translation>
</message>
<message> <message>
<source>%1/offline</source> <source>%1/offline</source>
<translation>%1/χωρίς σύνδεση;</translation> <translation>%1/χωρίς σύνδεση;</translation>
@ -1652,6 +2052,10 @@ Address: %4
<source>own address</source> <source>own address</source>
<translation> δική σας διεύθυνση </translation> <translation> δική σας διεύθυνση </translation>
</message> </message>
<message>
<source>watch-only</source>
<translation>Επίβλεψη μόνο:</translation>
</message>
<message> <message>
<source>label</source> <source>label</source>
<translation>ιγραφή</translation> <translation>ιγραφή</translation>
@ -1672,6 +2076,14 @@ Address: %4
<source>Debit</source> <source>Debit</source>
<translation>Debit</translation> <translation>Debit</translation>
</message> </message>
<message>
<source>Total debit</source>
<translation>Σύνολο χρέωσης</translation>
</message>
<message>
<source>Total credit</source>
<translation>Συνολική πίστωση</translation>
</message>
<message> <message>
<source>Transaction fee</source> <source>Transaction fee</source>
<translation>Τέλος συναλλαγής </translation> <translation>Τέλος συναλλαγής </translation>
@ -1696,6 +2108,10 @@ Address: %4
<source>Merchant</source> <source>Merchant</source>
<translation>Έμπορος</translation> <translation>Έμπορος</translation>
</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>
<translation>Πρέπει να περιμένετε %1 μπλοκ πριν μπορέσετε να χρησιμοποιήσετε τα νομίσματα που έχετε δημιουργήσει. Το μπλοκ που δημιουργήσατε μεταδόθηκε στο δίκτυο για να συμπεριληφθεί στην αλυσίδα των μπλοκ. Αν δεν μπει σε αυτή θα μετατραπεί σε "μη αποδεκτό" και δε θα μπορεί να καταναλωθεί. Αυτό συμβαίνει σπάνια όταν κάποιος άλλος κόμβος δημιουργήσει ένα μπλοκ λίγα δευτερόλεπτα πριν από εσάς.</translation>
</message>
<message> <message>
<source>Debug information</source> <source>Debug information</source>
<translation>Πληροφορίες αποσφαλμάτωσης</translation> <translation>Πληροφορίες αποσφαλμάτωσης</translation>
@ -1786,6 +2202,10 @@ Address: %4
<source>Unconfirmed</source> <source>Unconfirmed</source>
<translation>Ανεπιβεβαίωτες</translation> <translation>Ανεπιβεβαίωτες</translation>
</message> </message>
<message>
<source>Conflicted</source>
<translation>Σύγκρουση</translation>
</message>
<message> <message>
<source>Received with</source> <source>Received with</source>
<translation>Παραλαβή με</translation> <translation>Παραλαβή με</translation>
@ -1806,6 +2226,10 @@ Address: %4
<source>Mined</source> <source>Mined</source>
<translation>Εξόρυξη</translation> <translation>Εξόρυξη</translation>
</message> </message>
<message>
<source>watch-only</source>
<translation>Επίβλεψη μόνο:</translation>
</message>
<message> <message>
<source>(n/a)</source> <source>(n/a)</source>
<translation>(δ/α)</translation> <translation>(δ/α)</translation>
@ -1917,6 +2341,10 @@ Address: %4
<source>Export Transaction History</source> <source>Export Transaction History</source>
<translation>Εξαγωγή Ιστορικού Συναλλαγών</translation> <translation>Εξαγωγή Ιστορικού Συναλλαγών</translation>
</message> </message>
<message>
<source>Watch-only</source>
<translation>Επίβλεψη μόνο:</translation>
</message>
<message> <message>
<source>Exporting Failed</source> <source>Exporting Failed</source>
<translation>Η Εξαγωγή Απέτυχε</translation> <translation>Η Εξαγωγή Απέτυχε</translation>
@ -2153,6 +2581,10 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<source>Error opening block database</source> <source>Error opening block database</source>
<translation>Σφάλμα φορτωσης της βασης δεδομενων των μπλοκ</translation> <translation>Σφάλμα φορτωσης της βασης δεδομενων των μπλοκ</translation>
</message> </message>
<message>
<source>Error: A fatal internal error occured, see debug.log for details</source>
<translation>Σφάλμα: Παρουσιάστηκε ανεπανόρθωτο εσωτερικό σφάλμα, δείτε debug.log για λεπτομέρειες</translation>
</message>
<message> <message>
<source>Error: Disk space is low!</source> <source>Error: Disk space is low!</source>
<translation>Προειδοποίηση: Χαμηλός χώρος στο δίσκο </translation> <translation>Προειδοποίηση: Χαμηλός χώρος στο δίσκο </translation>
@ -2165,6 +2597,10 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<source>Failed to listen on any port. Use -listen=0 if you want this.</source> <source>Failed to listen on any port. Use -listen=0 if you want this.</source>
<translation>ταλαιπωρηθειτε για να ακούσετε σε οποιαδήποτε θύρα. Χρήση - ακούστε = 0 , αν θέλετε αυτό.</translation> <translation>ταλαιπωρηθειτε για να ακούσετε σε οποιαδήποτε θύρα. Χρήση - ακούστε = 0 , αν θέλετε αυτό.</translation>
</message> </message>
<message>
<source>Importing...</source>
<translation>ΕΙσαγωγή...</translation>
</message>
<message> <message>
<source>Invalid -onion address: '%s'</source> <source>Invalid -onion address: '%s'</source>
<translation>Άκυρη διεύθυνση -onion : '%s'</translation> <translation>Άκυρη διεύθυνση -onion : '%s'</translation>
@ -2177,6 +2613,10 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<source>Rebuild block chain index from current blk000??.dat files</source> <source>Rebuild block chain index from current blk000??.dat files</source>
<translation>Εισαγωγή μπλοκ από εξωτερικό αρχείο blk000?.dat</translation> <translation>Εισαγωγή μπλοκ από εξωτερικό αρχείο blk000?.dat</translation>
</message> </message>
<message>
<source>Specify wallet file (within data directory)</source>
<translation>Επιλέξτε αρχείο πορτοφολιού (μέσα απο κατάλογο δεδομένων)</translation>
</message>
<message> <message>
<source>Verifying blocks...</source> <source>Verifying blocks...</source>
<translation>Επαλήθευση των μπλοκ... </translation> <translation>Επαλήθευση των μπλοκ... </translation>
@ -2193,6 +2633,26 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<source>Imports blocks from external blk000??.dat file</source> <source>Imports blocks from external blk000??.dat file</source>
<translation>Εισαγωγή μπλοκ από εξωτερικό αρχείο blk000?.dat</translation> <translation>Εισαγωγή μπλοκ από εξωτερικό αρχείο blk000?.dat</translation>
</message> </message>
<message>
<source>Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.</source>
<translation>Αδυναμία κλειδώματος του φακέλου δεδομένων %s. Πιθανώς το Bitcoin να είναι ήδη ενεργό.</translation>
</message>
<message>
<source>Connect through SOCKS5 proxy</source>
<translation>Σύνδεση μέσω διαμεσολαβητή SOCKS5</translation>
</message>
<message>
<source>Could not parse -rpcbind value %s as network address</source>
<translation>Δεν μπόρεσε να αναλυθεί η παράμετρος -rpcbind value %s ως διεύθυνση δικτύου</translation>
</message>
<message>
<source>Error loading wallet.dat: Wallet requires newer version of Bitcoin Core</source>
<translation>Σφάλμα φόρτωσης wallet.dat: Το Πορτοφόλι απαιτεί μια νεότερη έκδοση του Bitcoin</translation>
</message>
<message>
<source>Error: Unsupported argument -tor found, use -onion.</source>
<translation>Σφάλμα: Μη συμβατή παράμετρος -tor. Χρησιμοποιήσε την παράμετρο -onion</translation>
</message>
<message> <message>
<source>Information</source> <source>Information</source>
<translation>Πληροφορία</translation> <translation>Πληροφορία</translation>
@ -2205,6 +2665,10 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<source>Invalid amount for -mintxfee=&lt;amount&gt;: '%s'</source> <source>Invalid amount for -mintxfee=&lt;amount&gt;: '%s'</source>
<translation>Μη έγκυρο ποσό για την παράμετρο -paytxfee=&lt;amount&gt;: '%s'</translation> <translation>Μη έγκυρο ποσό για την παράμετρο -paytxfee=&lt;amount&gt;: '%s'</translation>
</message> </message>
<message>
<source>RPC SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source>
<translation>Ρυθμίσεις SSL: (ανατρέξτε στο Bitcoin Wiki για οδηγίες ρυθμίσεων SSL)</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>Αποστολή πληροφοριών εντοπισμού σφαλμάτων στην κονσόλα αντί του αρχείου debug.log</translation> <translation>Αποστολή πληροφοριών εντοπισμού σφαλμάτων στην κονσόλα αντί του αρχείου debug.log</translation>
@ -2217,6 +2681,10 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<source>Signing transaction failed</source> <source>Signing transaction failed</source>
<translation>Η υπογραφή συναλλαγής απέτυχε </translation> <translation>Η υπογραφή συναλλαγής απέτυχε </translation>
</message> </message>
<message>
<source>This is experimental software.</source>
<translation>Η εφαρμογή είναι σε πειραματικό στάδιο.</translation>
</message>
<message> <message>
<source>Transaction amount too small</source> <source>Transaction amount too small</source>
<translation>Το ποσό της συναλλαγής είναι πολύ μικρο </translation> <translation>Το ποσό της συναλλαγής είναι πολύ μικρο </translation>
@ -2245,6 +2713,10 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<source>Warning: This version is obsolete, upgrade required!</source> <source>Warning: This version is obsolete, upgrade required!</source>
<translation>Προειδοποίηση: Αυτή η έκδοση είναι ξεπερασμένη, απαιτείται αναβάθμιση </translation> <translation>Προειδοποίηση: Αυτή η έκδοση είναι ξεπερασμένη, απαιτείται αναβάθμιση </translation>
</message> </message>
<message>
<source>Zapping all transactions from wallet...</source>
<translation>Μεταφορά όλων των συναλλαγών απο το πορτοφόλι</translation>
</message>
<message> <message>
<source>on startup</source> <source>on startup</source>
<translation>κατά την εκκίνηση</translation> <translation>κατά την εκκίνηση</translation>
@ -2289,14 +2761,62 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<source>Error loading wallet.dat: Wallet corrupted</source> <source>Error loading wallet.dat: Wallet corrupted</source>
<translation>Σφάλμα φόρτωσης wallet.dat: Κατεστραμμένο Πορτοφόλι</translation> <translation>Σφάλμα φόρτωσης wallet.dat: Κατεστραμμένο Πορτοφόλι</translation>
</message> </message>
<message>
<source>How thorough the block verification of -checkblocks is (0-4, default: %u)</source>
<translation>Πόσο εξονυχιστική να είναι η επιβεβαίωση του μπλοκ (0-4, προεπιλογή: %u)</translation>
</message>
<message>
<source>Maintain a full transaction index, used by the getrawtransaction rpc call (default: %u)</source>
<translation>Διατηρήση ένος πλήρες ευρετήριου συναλλαγών (προεπιλογή: %u) </translation>
</message>
<message>
<source>Number of seconds to keep misbehaving peers from reconnecting (default: %u)</source>
<translation>Δευτερόλεπτα πριν επιτραπεί ξανά η σύνδεση των προβληματικών peers (προεπιλογή: %u)</translation>
</message>
<message> <message>
<source>Error loading wallet.dat</source> <source>Error loading wallet.dat</source>
<translation>Σφάλμα φόρτωσης αρχείου wallet.dat</translation> <translation>Σφάλμα φόρτωσης αρχείου wallet.dat</translation>
</message> </message>
<message>
<source>Force safe mode (default: %u)</source>
<translation>Επιβολή ασφαλής λειτουργίας (προεπιλογή: %u)</translation>
</message>
<message>
<source>Generate coins (default: %u)</source>
<translation>Δημιουργία νομισμάτων (προκαθορισμος: %u)</translation>
</message>
<message>
<source>How many blocks to check at startup (default: %u, 0 = all)</source>
<translation>Πόσα μπλοκ να ελέγχθουν κατά την εκκίνηση (προεπιλογή: %u, 0 = όλα)</translation>
</message>
<message>
<source>Include IP addresses in debug output (default: %u)</source>
<translation>Να συμπεριληφθεί η διεύθυνση IP στην αναφορά? (προεπιλογή: %u)</translation>
</message>
<message> <message>
<source>Invalid -proxy address: '%s'</source> <source>Invalid -proxy address: '%s'</source>
<translation>Δεν είναι έγκυρη η διεύθυνση διαμεσολαβητή: '%s'</translation> <translation>Δεν είναι έγκυρη η διεύθυνση διαμεσολαβητή: '%s'</translation>
</message> </message>
<message>
<source>Print block tree on startup (default: %u)</source>
<translation>Εκτύπωση μπλοκ δέντρου κατά την εκκίνηση (προεπιλογή: %u)</translation>
</message>
<message>
<source>Server certificate file (default: %s)</source>
<translation>Αρχείο πιστοποιητικού του διακομιστή (προεπιλογή: %s)</translation>
</message>
<message>
<source>Specify connection timeout in milliseconds (minimum: 1, default: %d)</source>
<translation>Ορισμός λήξης χρονικού ορίου σε χιλιοστά του δευτερολέπτου(προεπιλογή: %d)</translation>
</message>
<message>
<source>Specify pid file (default: %s)</source>
<translation>Ορίστε αρχείο pid (προεπιλογή: %s)</translation>
</message>
<message>
<source>Threshold for disconnecting misbehaving peers (default: %u)</source>
<translation>Όριο αποσύνδεσης προβληματικών peers (προεπιλογή: %u)</translation>
</message>
<message> <message>
<source>Unknown network specified in -onlynet: '%s'</source> <source>Unknown network specified in -onlynet: '%s'</source>
<translation>Άγνωστo δίκτυο ορίζεται σε onlynet: '%s'</translation> <translation>Άγνωστo δίκτυο ορίζεται σε onlynet: '%s'</translation>

View file

@ -524,6 +524,10 @@ Dirección: %4
</context> </context>
<context> <context>
<name>CoinControlDialog</name> <name>CoinControlDialog</name>
<message>
<source>Coin Selection</source>
<translation>Selección de la moneda</translation>
</message>
<message> <message>
<source>Quantity:</source> <source>Quantity:</source>
<translation>Cantidad:</translation> <translation>Cantidad:</translation>
@ -572,6 +576,14 @@ Dirección: %4
<source>Amount</source> <source>Amount</source>
<translation>Cantidad</translation> <translation>Cantidad</translation>
</message> </message>
<message>
<source>Received with label</source>
<translation>Recibido con etiqueta</translation>
</message>
<message>
<source>Received with address</source>
<translation>Recibido con dirección</translation>
</message>
<message> <message>
<source>Date</source> <source>Date</source>
<translation>Fecha</translation> <translation>Fecha</translation>
@ -1034,6 +1046,14 @@ Dirección: %4
<source>Map port using &amp;UPnP</source> <source>Map port using &amp;UPnP</source>
<translation>Mapear el puerto mediante &amp;UPnP</translation> <translation>Mapear el puerto mediante &amp;UPnP</translation>
</message> </message>
<message>
<source>Connect to the Bitcoin network through a SOCKS5 proxy.</source>
<translation>Conectarse a la red Bitcoin a través de un proxy SOCKS5.</translation>
</message>
<message>
<source>&amp;Connect through SOCKS5 proxy (default proxy):</source>
<translation>&amp;Conectarse a través de proxy SOCKS5 (proxy predeterminado):</translation>
</message>
<message> <message>
<source>Proxy &amp;IP:</source> <source>Proxy &amp;IP:</source>
<translation>Dirección &amp;IP del proxy:</translation> <translation>Dirección &amp;IP del proxy:</translation>
@ -1824,6 +1844,50 @@ Dirección: %4
<source>Custom change address</source> <source>Custom change address</source>
<translation>Dirección propia</translation> <translation>Dirección propia</translation>
</message> </message>
<message>
<source>Transaction Fee:</source>
<translation>Comisión de Transacción:</translation>
</message>
<message>
<source>Minimize</source>
<translation>Minimizar</translation>
</message>
<message>
<source>per kilobyte</source>
<translation>por kilobyte</translation>
</message>
<message>
<source>total at least</source>
<translation>total por lo menos</translation>
</message>
<message>
<source>Recommended:</source>
<translation>Recomendado:</translation>
</message>
<message>
<source>Custom:</source>
<translation>Personalizado:</translation>
</message>
<message>
<source>(Smart fee not initialized yet. This usually takes a few blocks...)</source>
<translation>(Tarifa inteligente no inicializado aún. Esto generalmente lleva a pocos bloques...)</translation>
</message>
<message>
<source>Confirmation time:</source>
<translation>Tiempo de confirmación:</translation>
</message>
<message>
<source>normal</source>
<translation>normal</translation>
</message>
<message>
<source>fast</source>
<translation>rápido</translation>
</message>
<message>
<source>(confirmation may take longer)</source>
<translation>(confirmación puede tardar más tiempo)</translation>
</message>
<message> <message>
<source>Send to multiple recipients at once</source> <source>Send to multiple recipients at once</source>
<translation>Enviar a múltiples destinatarios de una vez</translation> <translation>Enviar a múltiples destinatarios de una vez</translation>
@ -1928,6 +1992,14 @@ Dirección: %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>¡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>
<source>Pay only the minimum fee of %1</source>
<translation>Paga sólo la cuota mínima de %1</translation>
</message>
<message>
<source>Estimated to begin confirmation within %1 block(s).</source>
<translation>Estimado para comenzar confirmación dentro de %1 bloque(s)</translation>
</message>
<message> <message>
<source>Warning: Invalid Bitcoin address</source> <source>Warning: Invalid Bitcoin address</source>
<translation>Alerta: Dirección de Bitcoin inválida</translation> <translation>Alerta: Dirección de Bitcoin inválida</translation>
@ -2738,6 +2810,10 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com
<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>Borrar todas las transacciones del monedero y sólo recuperar aquellas partes de la cadena de bloques por medio de -rescan on startup.</translation> <translation>Borrar todas las transacciones del monedero y sólo recuperar aquellas partes de la cadena de bloques por medio de -rescan on startup.</translation>
</message> </message>
<message>
<source>Distributed under the MIT software license, see the accompanying file COPYING or &lt;http://www.opensource.org/licenses/mit-license.php&gt;.</source>
<translation>Distribuido bajo la licencia de software MIT, vea la copia del archivo adjunto o &lt;http://www.opensource.org/licenses/mit-license.php&gt;.</translation>
</message>
<message> <message>
<source>Enter regression test mode, which uses a special chain in which blocks can be solved instantly.</source> <source>Enter regression test mode, which uses a special chain in which blocks can be solved instantly.</source>
<translation>Ingresar en el modo de prueba de regresión, que utiliza una cadena especial en la que los bloques se pueden resolver instantáneamente.</translation> <translation>Ingresar en el modo de prueba de regresión, que utiliza una cadena especial en la que los bloques se pueden resolver instantáneamente.</translation>

View file

@ -478,6 +478,10 @@
<source>Up to date</source> <source>Up to date</source>
<translation>Aggiornato</translation> <translation>Aggiornato</translation>
</message> </message>
<message numerus="yes">
<source>Processed %n blocks of transaction history.</source>
<translation><numerusform>Processati %n blocchi dello storico transazioni.</numerusform><numerusform>Processati %n blocchi dello storico delle transazioni.</numerusform></translation>
</message>
<message> <message>
<source>Catching up...</source> <source>Catching up...</source>
<translation>In aggiornamento...</translation> <translation>In aggiornamento...</translation>
@ -521,6 +525,11 @@ Indirizzo: %4
</context> </context>
<context> <context>
<name>CoinControlDialog</name> <name>CoinControlDialog</name>
<message>
<source>Coin Selection</source>
<translation>Seleziona Moneta
</translation>
</message>
<message> <message>
<source>Quantity:</source> <source>Quantity:</source>
<translation>Quantità:</translation> <translation>Quantità:</translation>
@ -569,6 +578,14 @@ Indirizzo: %4
<source>Amount</source> <source>Amount</source>
<translation>Importo</translation> <translation>Importo</translation>
</message> </message>
<message>
<source>Received with label</source>
<translation>Ricevuto con etichetta</translation>
</message>
<message>
<source>Received with address</source>
<translation>Ricevuto con l'indirizzo</translation>
</message>
<message> <message>
<source>Date</source> <source>Date</source>
<translation>Data</translation> <translation>Data</translation>
@ -1024,6 +1041,14 @@ Più URL vengono separati da una barra verticale |.</translation>
<source>Map port using &amp;UPnP</source> <source>Map port using &amp;UPnP</source>
<translation>Mappa le porte tramite &amp;UPnP</translation> <translation>Mappa le porte tramite &amp;UPnP</translation>
</message> </message>
<message>
<source>Connect to the Bitcoin network through a SOCKS5 proxy.</source>
<translation>Connessione alla rete Bitcoin attraverso un proxy SOCKS5.</translation>
</message>
<message>
<source>&amp;Connect through SOCKS5 proxy (default proxy):</source>
<translation>&amp;Connessione attraverso proxy SOCKS5 (proxy predefinito):</translation>
</message>
<message> <message>
<source>Proxy &amp;IP:</source> <source>Proxy &amp;IP:</source>
<translation>&amp;IP del proxy:</translation> <translation>&amp;IP del proxy:</translation>
@ -1187,6 +1212,10 @@ Più URL vengono separati da una barra verticale |.</translation>
<source>Mined balance in watch-only addresses that has not yet matured</source> <source>Mined balance in watch-only addresses that has not yet matured</source>
<translation>l'equilibrio estratto solo nello sguardo degli indirizzi non è ancora maturo </translation> <translation>l'equilibrio estratto solo nello sguardo degli indirizzi non è ancora maturo </translation>
</message> </message>
<message>
<source>Current total balance in watch-only addresses</source>
<translation>Saldo corrente totale negli indirizzi watch-only</translation>
</message>
<message> <message>
<source>out of sync</source> <source>out of sync</source>
<translation>non sincronizzato</translation> <translation>non sincronizzato</translation>
@ -1810,6 +1839,50 @@ Più URL vengono separati da una barra verticale |.</translation>
<source>Custom change address</source> <source>Custom change address</source>
<translation>Personalizza indirizzo di resto</translation> <translation>Personalizza indirizzo di resto</translation>
</message> </message>
<message>
<source>Transaction Fee:</source>
<translation>Tasse di Transazione</translation>
</message>
<message>
<source>Choose...</source>
<translation>Scegli...</translation>
</message>
<message>
<source>Minimize</source>
<translation>Minimizza</translation>
</message>
<message>
<source>per kilobyte</source>
<translation>per kilobyte</translation>
</message>
<message>
<source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for bitcoin transactions than the network can process.</source>
<translation>Pagando solo la tariffa minima è bene finché c'è meno volume di transazioni di spazio nei blocchi. Ma essere consapevoli che questo può finire in una transazione non confermando ancora una volta non vi è più richiesta per le transazioni Bitcoin di rete in grado di elaborare.</translation>
</message>
<message>
<source>Recommended:</source>
<translation>Raccomandati:</translation>
</message>
<message>
<source>Custom:</source>
<translation>Personalizza:</translation>
</message>
<message>
<source>Confirmation time:</source>
<translation>Tempo di conferma:</translation>
</message>
<message>
<source>normal</source>
<translation>normale</translation>
</message>
<message>
<source>fast</source>
<translation>veloce</translation>
</message>
<message>
<source>Send as zero-fee transaction if possible</source>
<translation>Invia una transazione a zero commissioni se possibile</translation>
</message>
<message> <message>
<source>Send to multiple recipients at once</source> <source>Send to multiple recipients at once</source>
<translation>Invia a diversi beneficiari in una volta sola</translation> <translation>Invia a diversi beneficiari in una volta sola</translation>
@ -2940,6 +3013,22 @@ ad esempio: alertnotify=echo %%s | mail -s "Allarme Bitcoin" admin@foo.com
<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>Imposta la dimensione massima in byte delle transazioni ad alta-priorità/basse-commissioni (predefinita: %d)</translation> <translation>Imposta la dimensione massima in byte delle transazioni ad alta-priorità/basse-commissioni (predefinita: %d)</translation>
</message> </message>
<message>
<source>Cannot resolve -whitebind address: '%s'</source>
<translation>Impossibile risolvere -whitebind address: '%s'</translation>
</message>
<message>
<source>Connect through SOCKS5 proxy</source>
<translation>Connetti attraverso SOCKS5 proxy</translation>
</message>
<message>
<source>Error loading wallet.dat: Wallet requires newer version of Bitcoin Core</source>
<translation>Errore caricamento wallet.dat: il wallet richiede una versione nuova di Bitcoin Core</translation>
</message>
<message>
<source>Fee (in BTC/kB) to add to transactions you send (default: %s)</source>
<translation>Commissione (in BTC/kB) da aggiungere alla transazione che invii (default: %s)</translation>
</message>
<message> <message>
<source>Information</source> <source>Information</source>
<translation>Informazioni</translation> <translation>Informazioni</translation>
@ -2980,6 +3069,10 @@ ad esempio: alertnotify=echo %%s | mail -s "Allarme Bitcoin" admin@foo.com
<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>Invia le informazioni di trace/debug alla console invece che al file debug.log</translation> <translation>Invia le informazioni di trace/debug alla console invece che al file debug.log</translation>
</message> </message>
<message>
<source>Send transactions as zero-fee transactions if possible (default: %u)</source>
<translation>Invia transazioni a zero commissioni se possibile (default: %u)</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 tutte le opzioni di debug (utilizzo: --help -help-debug)</translation> <translation>Mostra tutte le opzioni di debug (utilizzo: --help -help-debug)</translation>
@ -3085,10 +3178,62 @@ ad esempio: alertnotify=echo %%s | mail -s "Allarme Bitcoin" admin@foo.com
<source>Error loading wallet.dat</source> <source>Error loading wallet.dat</source>
<translation>Errore caricamento wallet.dat</translation> <translation>Errore caricamento wallet.dat</translation>
</message> </message>
<message>
<source>Force safe mode (default: %u)</source>
<translation>Forza modalità provvisoria (dafault: %u)</translation>
</message>
<message>
<source>Generate coins (default: %u)</source>
<translation>Genera coins (default: %u)</translation>
</message>
<message>
<source>How many blocks to check at startup (default: %u, 0 = all)</source>
<translation>Quanti blocchi da controllare all'avvio (dafault: %u, 0 = tutti)</translation>
</message>
<message> <message>
<source>Invalid -proxy address: '%s'</source> <source>Invalid -proxy address: '%s'</source>
<translation>Indirizzo -proxy non valido: '%s'</translation> <translation>Indirizzo -proxy non valido: '%s'</translation>
</message> </message>
<message>
<source>Maintain at most &lt;n&gt; connections to peers (default: %u)</source>
<translation>Mantieni al massimo &lt;n&gt; connessioni ai peers (default: %u)</translation>
</message>
<message>
<source>Prepend debug output with timestamp (default: %u)</source>
<translation>Pretendi output di debug con timestamp (default: %u)</translation>
</message>
<message>
<source>Print block tree on startup (default: %u)</source>
<translation>Stampa l'albero dei blocchi all'avvio (default: %u)</translation>
</message>
<message>
<source>Server certificate file (default: %s)</source>
<translation>File certificato del server (default: %s)</translation>
</message>
<message>
<source>Server private key (default: %s)</source>
<translation>Chiave privata del server (default: %s)</translation>
</message>
<message>
<source>Specify configuration file (default: %s)</source>
<translation>Specifica il file di configurazione (default: %s)</translation>
</message>
<message>
<source>Specify connection timeout in milliseconds (minimum: 1, default: %d)</source>
<translation>Specifica il timeout di connessione in millisecondi (minimo:1, default: %d)</translation>
</message>
<message>
<source>Specify pid file (default: %s)</source>
<translation>Specifica il file pid (default: %s)</translation>
</message>
<message>
<source>Spend unconfirmed change when sending transactions (default: %u)</source>
<translation>Spendi il resto non confermato quando si inviano transazioni (default: %u)</translation>
</message>
<message>
<source>Stop running after importing blocks from disk (default: %u)</source>
<translation>Interrompi dopo aver importato i blocchi dal disco (default: %u)</translation>
</message>
<message> <message>
<source>Unknown network specified in -onlynet: '%s'</source> <source>Unknown network specified in -onlynet: '%s'</source>
<translation>Rete sconosciuta specificata in -onlynet: '%s'</translation> <translation>Rete sconosciuta specificata in -onlynet: '%s'</translation>

View file

@ -69,6 +69,10 @@
<source>These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source> <source>These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
<translation> Bitcoin </translation> <translation> Bitcoin </translation>
</message> </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> <message>
<source>Copy &amp;Label</source> <source>Copy &amp;Label</source>
<translation> (&amp;L)</translation> <translation> (&amp;L)</translation>
@ -89,7 +93,11 @@
<source>Exporting Failed</source> <source>Exporting Failed</source>
<translation></translation> <translation></translation>
</message> </message>
</context> <message>
<source>There was an error trying to save the address list to %1. Please try again.</source>
<translation> %1 </translation>
</message>
</context>
<context> <context>
<name>AddressTableModel</name> <name>AddressTableModel</name>
<message> <message>
@ -175,6 +183,10 @@
<source>Wallet encrypted</source> <source>Wallet encrypted</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;ten or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
<translation>&lt;br/&gt;&lt;b&gt;10&lt;/b&gt;&lt;b&gt;8&lt;/b&gt;使</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> <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
<translation>Bitcoin </translation> <translation>Bitcoin </translation>
@ -282,6 +294,10 @@
<source>Open &amp;URI...</source> <source>Open &amp;URI...</source>
<translation>URI (&amp;U)...</translation> <translation>URI (&amp;U)...</translation>
</message> </message>
<message>
<source>Bitcoin Core client</source>
<translation>Bitcoinコア </translation>
</message>
<message> <message>
<source>Importing blocks from disk...</source> <source>Importing blocks from disk...</source>
<translation>...</translation> <translation>...</translation>
@ -334,6 +350,10 @@
<source>&amp;Receive</source> <source>&amp;Receive</source>
<translation> (&amp;R)</translation> <translation> (&amp;R)</translation>
</message> </message>
<message>
<source>Show information about Bitcoin Core</source>
<translation>Bitcoinコアに関する情報を表示</translation>
</message>
<message> <message>
<source>&amp;Show / Hide</source> <source>&amp;Show / Hide</source>
<translation>/ (&amp;S)</translation> <translation>/ (&amp;S)</translation>
@ -374,10 +394,18 @@
<source>Bitcoin Core</source> <source>Bitcoin Core</source>
<translation>Bitcoin </translation> <translation>Bitcoin </translation>
</message> </message>
<message>
<source>Request payments (generates QR codes and bitcoin: URIs)</source>
<translation> (QRコードとbitcoin:ではじまるURIを生成する)</translation>
</message>
<message> <message>
<source>&amp;About Bitcoin Core</source> <source>&amp;About Bitcoin Core</source>
<translation> (&amp;A)</translation> <translation> (&amp;A)</translation>
</message> </message>
<message>
<source>Show the list of used sending addresses and labels</source>
<translation>使</translation>
</message>
<message> <message>
<source>Show the list of used receiving addresses and labels</source> <source>Show the list of used receiving addresses and labels</source>
<translation></translation> <translation></translation>
@ -483,6 +511,10 @@ Address: %4
</context> </context>
<context> <context>
<name>CoinControlDialog</name> <name>CoinControlDialog</name>
<message>
<source>Coin Selection</source>
<translation></translation>
</message>
<message> <message>
<source>Quantity:</source> <source>Quantity:</source>
<translation>:</translation> <translation>:</translation>
@ -555,6 +587,14 @@ Address: %4
<source>Copy transaction ID</source> <source>Copy transaction ID</source>
<translation> ID </translation> <translation> ID </translation>
</message> </message>
<message>
<source>Lock unspent</source>
<translation>使</translation>
</message>
<message>
<source>Unlock unspent</source>
<translation>使</translation>
</message>
<message> <message>
<source>Copy quantity</source> <source>Copy quantity</source>
<translation></translation> <translation></translation>
@ -676,6 +716,10 @@ Address: %4
<source>version</source> <source>version</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>About Bitcoin Core</source>
<translation>Bitcoinコアについて</translation>
</message>
<message> <message>
<source>Command-line options</source> <source>Command-line options</source>
<translation> </translation> <translation> </translation>
@ -735,7 +779,15 @@ Address: %4
<source>Error</source> <source>Error</source>
<translation></translation> <translation></translation>
</message> </message>
</context> <message numerus="yes">
<source>%n GB of free space available</source>
<translation><numerusform>%n GBの空き容量が利用可能</numerusform></translation>
</message>
<message numerus="yes">
<source>(of %n GB needed)</source>
<translation><numerusform>(%n GB必要)</numerusform></translation>
</message>
</context>
<context> <context>
<name>OpenURIDialog</name> <name>OpenURIDialog</name>
<message> <message>
@ -785,6 +837,14 @@ Address: %4
<source>MB</source> <source>MB</source>
<translation>MB</translation> <translation>MB</translation>
</message> </message>
<message>
<source>Number of script &amp;verification threads</source>
<translation> (&amp;V)</translation>
</message>
<message>
<source>Accept connections from outside</source>
<translation></translation>
</message>
<message> <message>
<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アドレス ( IPv4: 127.0.0.1 / IPv6: ::1)</translation> <translation>IPアドレス ( IPv4: 127.0.0.1 / IPv6: ::1)</translation>
@ -932,6 +992,14 @@ Address: %4
<source>Your current total balance</source> <source>Your current total balance</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>Recent transactions</source>
<translation></translation>
</message>
<message>
<source>Mined balance in watch-only addresses that has not yet matured</source>
<translation></translation>
</message>
<message> <message>
<source>out of sync</source> <source>out of sync</source>
<translation></translation> <translation></translation>
@ -947,6 +1015,14 @@ Address: %4
<source>Invalid payment address %1</source> <source>Invalid payment address %1</source>
<translation>%1</translation> <translation>%1</translation>
</message> </message>
<message>
<source>Payment request rejected</source>
<translation></translation>
</message>
<message>
<source>Payment request has expired.</source>
<translation></translation>
</message>
<message> <message>
<source>Payment request error</source> <source>Payment request error</source>
<translation></translation> <translation></translation>
@ -974,6 +1050,10 @@ Address: %4
</context> </context>
<context> <context>
<name>PeerTableModel</name> <name>PeerTableModel</name>
<message>
<source>User Agent</source>
<translation></translation>
</message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
@ -1063,6 +1143,10 @@ Address: %4
<source>Current number of blocks</source> <source>Current number of blocks</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>User Agent</source>
<translation></translation>
</message>
<message> <message>
<source>Last block time</source> <source>Last block time</source>
<translation></translation> <translation></translation>
@ -1154,6 +1238,10 @@ Address: %4
<source>&amp;Message:</source> <source>&amp;Message:</source>
<translation> (&amp;M):</translation> <translation> (&amp;M):</translation>
</message> </message>
<message>
<source>Clear all fields of the form.</source>
<translation></translation>
</message>
<message> <message>
<source>Clear</source> <source>Clear</source>
<translation></translation> <translation></translation>
@ -1162,6 +1250,10 @@ Address: %4
<source>Show</source> <source>Show</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>Remove the selected entries from the list</source>
<translation></translation>
</message>
<message> <message>
<source>Copy label</source> <source>Copy label</source>
<translation></translation> <translation></translation>
@ -1307,6 +1399,10 @@ Address: %4
<source>Add &amp;Recipient</source> <source>Add &amp;Recipient</source>
<translation> (&amp;R)</translation> <translation> (&amp;R)</translation>
</message> </message>
<message>
<source>Clear all fields of the form.</source>
<translation></translation>
</message>
<message> <message>
<source>Clear &amp;All</source> <source>Clear &amp;All</source>
<translation> (&amp;A)</translation> <translation> (&amp;A)</translation>
@ -1433,7 +1529,15 @@ Address: %4
</context> </context>
<context> <context>
<name>ShutdownWindow</name> <name>ShutdownWindow</name>
</context> <message>
<source>Bitcoin Core is shutting down...</source>
<translation>Bitcoin Coreをシャットダウンしています</translation>
</message>
<message>
<source>Do not shut down the computer until this window disappears.</source>
<translation></translation>
</message>
</context>
<context> <context>
<name>SignVerifyMessageDialog</name> <name>SignVerifyMessageDialog</name>
<message> <message>
@ -1956,7 +2060,11 @@ Address: %4
</context> </context>
<context> <context>
<name>WalletFrame</name> <name>WalletFrame</name>
</context> <message>
<source>No wallet has been loaded.</source>
<translation></translation>
</message>
</context>
<context> <context>
<name>WalletModel</name> <name>WalletModel</name>
<message> <message>

View file

@ -9,10 +9,22 @@
<source>Create a new address</source> <source>Create a new address</source>
<translation>Жаңа адрес енгізу</translation> <translation>Жаңа адрес енгізу</translation>
</message> </message>
<message>
<source>&amp;New</source>
<translation>Жаңа</translation>
</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>
<translation>Таңдаған адресті тізімнен жою</translation> <translation>Таңдаған адресті тізімнен жою</translation>
</message> </message>
<message>
<source>C&amp;lose</source>
<translation>Жабу</translation>
</message>
<message>
<source>&amp;Export</source>
<translation>Экспорт</translation>
</message>
<message> <message>
<source>&amp;Delete</source> <source>&amp;Delete</source>
<translation>Жою</translation> <translation>Жою</translation>
@ -78,12 +90,140 @@
</context> </context>
<context> <context>
<name>BitcoinGUI</name> <name>BitcoinGUI</name>
<message>
<source>&amp;Transactions</source>
<translation>&amp;Транзакциялар</translation>
</message>
<message>
<source>E&amp;xit</source>
<translation>Шығу</translation>
</message>
<message>
<source>&amp;Options...</source>
<translation>Параметрлері</translation>
</message>
<message>
<source>&amp;Backup Wallet...</source>
<translation>Әмиянды жасыру</translation>
</message>
<message>
<source>&amp;Change Passphrase...</source>
<translation>Құпия сөзді өзгерту</translation>
</message>
<message>
<source>Bitcoin</source>
<translation>Биткоин</translation>
</message>
<message>
<source>Wallet</source>
<translation>Әмиян</translation>
</message>
<message>
<source>&amp;Send</source>
<translation>Жіберу</translation>
</message>
<message>
<source>&amp;Receive</source>
<translation>Алу</translation>
</message>
<message>
<source>&amp;File</source>
<translation>Файл</translation>
</message>
<message>
<source>&amp;Help</source>
<translation>Көмек</translation>
</message>
<message numerus="yes">
<source>%n hour(s)</source>
<translation><numerusform>%n сағат</numerusform></translation>
</message>
<message numerus="yes">
<source>%n day(s)</source>
<translation><numerusform>%n күн</numerusform></translation>
</message>
<message numerus="yes">
<source>%n week(s)</source>
<translation><numerusform>%n апта</numerusform></translation>
</message>
<message>
<source>%1 and %2</source>
<translation>%1 немесе %2</translation>
</message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n жыл</numerusform></translation>
</message>
<message>
<source>%1 behind</source>
<translation>%1 қалмады</translation>
</message>
<message>
<source>Error</source>
<translation>қате</translation>
</message>
<message>
<source>Warning</source>
<translation>Ескерту</translation>
</message>
<message>
<source>Information</source>
<translation>Информация</translation>
</message>
<message>
<source>Up to date</source>
<translation>Жаңартылған</translation>
</message>
</context> </context>
<context> <context>
<name>ClientModel</name> <name>ClientModel</name>
</context> </context>
<context> <context>
<name>CoinControlDialog</name> <name>CoinControlDialog</name>
<message>
<source>Amount:</source>
<translation>Саны</translation>
</message>
<message>
<source>Priority:</source>
<translation>Басымдық</translation>
</message>
<message>
<source>Fee:</source>
<translation>Комиссия</translation>
</message>
<message>
<source>Dust:</source>
<translation>Шаң</translation>
</message>
<message>
<source>After Fee:</source>
<translation>Комиссия алу кейін</translation>
</message>
<message>
<source>Amount</source>
<translation>Саны</translation>
</message>
<message>
<source>Date</source>
<translation>Күні</translation>
</message>
<message>
<source>Confirmations</source>
<translation>Растау саны</translation>
</message>
<message>
<source>Confirmed</source>
<translation>Растық</translation>
</message>
<message>
<source>Priority</source>
<translation>Басымдық</translation>
</message>
<message>
<source>no</source>
<translation>жоқ</translation>
</message>
<message> <message>
<source>(no label)</source> <source>(no label)</source>
<translation>(таңбасыз)</translation> <translation>(таңбасыз)</translation>
@ -91,6 +231,10 @@
</context> </context>
<context> <context>
<name>EditAddressDialog</name> <name>EditAddressDialog</name>
<message>
<source>&amp;Address</source>
<translation>Адрес</translation>
</message>
</context> </context>
<context> <context>
<name>FreespaceChecker</name> <name>FreespaceChecker</name>
@ -100,6 +244,10 @@
</context> </context>
<context> <context>
<name>Intro</name> <name>Intro</name>
<message>
<source>Error</source>
<translation>қате</translation>
</message>
</context> </context>
<context> <context>
<name>OpenURIDialog</name> <name>OpenURIDialog</name>
@ -118,6 +266,10 @@
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message>
<source>Amount</source>
<translation>Саны</translation>
</message>
</context> </context>
<context> <context>
<name>QRImageWidget</name> <name>QRImageWidget</name>
@ -134,6 +286,10 @@
<source>Address</source> <source>Address</source>
<translation>Адрес</translation> <translation>Адрес</translation>
</message> </message>
<message>
<source>Amount</source>
<translation>Саны</translation>
</message>
<message> <message>
<source>Label</source> <source>Label</source>
<translation>таңба</translation> <translation>таңба</translation>
@ -141,10 +297,18 @@
</context> </context>
<context> <context>
<name>RecentRequestsTableModel</name> <name>RecentRequestsTableModel</name>
<message>
<source>Date</source>
<translation>Күні</translation>
</message>
<message> <message>
<source>Label</source> <source>Label</source>
<translation>таңба</translation> <translation>таңба</translation>
</message> </message>
<message>
<source>Amount</source>
<translation>Саны</translation>
</message>
<message> <message>
<source>(no label)</source> <source>(no label)</source>
<translation>(таңбасыз)</translation> <translation>(таңбасыз)</translation>
@ -152,6 +316,26 @@
</context> </context>
<context> <context>
<name>SendCoinsDialog</name> <name>SendCoinsDialog</name>
<message>
<source>Amount:</source>
<translation>Саны</translation>
</message>
<message>
<source>Priority:</source>
<translation>Басымдық</translation>
</message>
<message>
<source>Fee:</source>
<translation>Комиссия:</translation>
</message>
<message>
<source>After Fee:</source>
<translation>Комиссия алу кейін:</translation>
</message>
<message>
<source>Dust:</source>
<translation>Шаң</translation>
</message>
<message> <message>
<source>(no label)</source> <source>(no label)</source>
<translation>(таңбасыз)</translation> <translation>(таңбасыз)</translation>
@ -174,12 +358,24 @@
</context> </context>
<context> <context>
<name>TransactionDesc</name> <name>TransactionDesc</name>
<message>
<source>Date</source>
<translation>Күні</translation>
</message>
<message>
<source>Amount</source>
<translation>Саны</translation>
</message>
</context> </context>
<context> <context>
<name>TransactionDescDialog</name> <name>TransactionDescDialog</name>
</context> </context>
<context> <context>
<name>TransactionTableModel</name> <name>TransactionTableModel</name>
<message>
<source>Date</source>
<translation>Күні</translation>
</message>
<message> <message>
<source>Address</source> <source>Address</source>
<translation>Адрес</translation> <translation>Адрес</translation>
@ -191,6 +387,14 @@
<source>Comma separated file (*.csv)</source> <source>Comma separated file (*.csv)</source>
<translation>Үтірмен бөлінген файл (*.csv)</translation> <translation>Үтірмен бөлінген файл (*.csv)</translation>
</message> </message>
<message>
<source>Confirmed</source>
<translation>Растық</translation>
</message>
<message>
<source>Date</source>
<translation>Күні</translation>
</message>
<message> <message>
<source>Label</source> <source>Label</source>
<translation>таңба</translation> <translation>таңба</translation>
@ -211,9 +415,17 @@
</context> </context>
<context> <context>
<name>WalletView</name> <name>WalletView</name>
<message>
<source>&amp;Export</source>
<translation>Экспорт</translation>
</message>
</context> </context>
<context> <context>
<name>bitcoin-core</name> <name>bitcoin-core</name>
<message>
<source>Information</source>
<translation>Информация</translation>
</message>
<message> <message>
<source>Transaction amount too small</source> <source>Transaction amount too small</source>
<translation>Транзакция өте кішкентай</translation> <translation>Транзакция өте кішкентай</translation>
@ -222,5 +434,13 @@
<source>Transaction too large</source> <source>Transaction too large</source>
<translation>Транзакция өте үлкен</translation> <translation>Транзакция өте үлкен</translation>
</message> </message>
</context> <message>
<source>Warning</source>
<translation>Ескерту</translation>
</message>
<message>
<source>Error</source>
<translation>қате</translation>
</message>
</context>
</TS> </TS>

View file

@ -67,7 +67,7 @@
</message> </message>
<message> <message>
<source>These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source> <source>These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
<translation>Dit zijn uw Bitcoinadressen om betalingen mee te verzenden. Check altijd het bedrag en het ontvangende adres voordat u uw bitcoins verzendt.</translation> <translation>Dit zijn uw Bitcoinadressen om betalingen mee te verzenden. Controleer altijd het bedrag en het ontvangende adres voordat u uw bitcoins verzendt.</translation>
</message> </message>
<message> <message>
<source>These are your Bitcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source> <source>These are your Bitcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
@ -478,6 +478,10 @@
<source>Up to date</source> <source>Up to date</source>
<translation>Bijgewerkt</translation> <translation>Bijgewerkt</translation>
</message> </message>
<message numerus="yes">
<source>Processed %n blocks of transaction history.</source>
<translation><numerusform>%n Blok verwerkt van transactie geschiedenis.</numerusform><numerusform>%n Blokken verwerkt van transactie geschiedenis.</numerusform></translation>
</message>
<message> <message>
<source>Catching up...</source> <source>Catching up...</source>
<translation>Aan het bijwerken...</translation> <translation>Aan het bijwerken...</translation>
@ -520,6 +524,10 @@ Adres: %4
</context> </context>
<context> <context>
<name>CoinControlDialog</name> <name>CoinControlDialog</name>
<message>
<source>Coin Selection</source>
<translation>Munt Selectie</translation>
</message>
<message> <message>
<source>Quantity:</source> <source>Quantity:</source>
<translation>Kwantiteit</translation> <translation>Kwantiteit</translation>
@ -568,6 +576,14 @@ Adres: %4
<source>Amount</source> <source>Amount</source>
<translation>Bedrag</translation> <translation>Bedrag</translation>
</message> </message>
<message>
<source>Received with label</source>
<translation>Ontvangen met label</translation>
</message>
<message>
<source>Received with address</source>
<translation>Ontvangen met adres</translation>
</message>
<message> <message>
<source>Date</source> <source>Date</source>
<translation>Datum</translation> <translation>Datum</translation>
@ -904,7 +920,11 @@ Adres: %4
<source>%n GB of free space available</source> <source>%n GB of free space available</source>
<translation><numerusform>%n GB aan vrije oplsagruimte beschikbaar</numerusform><numerusform>%n GB aan vrije oplsagruimte beschikbaar</numerusform></translation> <translation><numerusform>%n GB aan vrije oplsagruimte beschikbaar</numerusform><numerusform>%n GB aan vrije oplsagruimte beschikbaar</numerusform></translation>
</message> </message>
</context> <message numerus="yes">
<source>(of %n GB needed)</source>
<translation><numerusform>(van %n GB nodig)</numerusform><numerusform>(van %n GB nodig)</numerusform></translation>
</message>
</context>
<context> <context>
<name>OpenURIDialog</name> <name>OpenURIDialog</name>
<message> <message>
@ -1026,6 +1046,14 @@ Adres: %4
<source>Map port using &amp;UPnP</source> <source>Map port using &amp;UPnP</source>
<translation>Portmapping via &amp;UPnP</translation> <translation>Portmapping via &amp;UPnP</translation>
</message> </message>
<message>
<source>Connect to the Bitcoin network through a SOCKS5 proxy.</source>
<translation>Verbind met het Bitcoin netwerk via een SOCKS5 proxy.</translation>
</message>
<message>
<source>&amp;Connect through SOCKS5 proxy (default proxy):</source>
<translation>&amp;Verbind via een SOCKS5-proxy (standaardproxy):</translation>
</message>
<message> <message>
<source>Proxy &amp;IP:</source> <source>Proxy &amp;IP:</source>
<translation>Proxy &amp;IP:</translation> <translation>Proxy &amp;IP:</translation>
@ -1157,6 +1185,10 @@ Adres: %4
<source>Mined balance that has not yet matured</source> <source>Mined balance that has not yet matured</source>
<translation>Gedolven saldo dat nog niet tot wasdom is gekomen</translation> <translation>Gedolven saldo dat nog niet tot wasdom is gekomen</translation>
</message> </message>
<message>
<source>Balances</source>
<translation>Saldi</translation>
</message>
<message> <message>
<source>Total:</source> <source>Total:</source>
<translation>Totaal:</translation> <translation>Totaal:</translation>
@ -1165,10 +1197,30 @@ Adres: %4
<source>Your current total balance</source> <source>Your current total balance</source>
<translation>Uw totale saldo</translation> <translation>Uw totale saldo</translation>
</message> </message>
<message>
<source>Your current balance in watch-only addresses</source>
<translation>Uw huidige balans in alleen-bekijkbare adressen</translation>
</message>
<message>
<source>Spendable:</source>
<translation>Besteedbaar:</translation>
</message>
<message> <message>
<source>Recent transactions</source> <source>Recent transactions</source>
<translation>Recente transacties</translation> <translation>Recente transacties</translation>
</message> </message>
<message>
<source>Unconfirmed transactions to watch-only addresses</source>
<translation>Onbevestigde transacties naar alleen-bekijkbare adressen</translation>
</message>
<message>
<source>Mined balance in watch-only addresses that has not yet matured</source>
<translation>Ontgonnen saldo dat nog niet tot wasdom is gekomen</translation>
</message>
<message>
<source>Current total balance in watch-only addresses</source>
<translation>Huidige balans in alleen-bekijkbare adressen.</translation>
</message>
<message> <message>
<source>out of sync</source> <source>out of sync</source>
<translation>niet gesynchroniseerd</translation> <translation>niet gesynchroniseerd</translation>
@ -1188,10 +1240,18 @@ Adres: %4
<source>Payment request rejected</source> <source>Payment request rejected</source>
<translation>Betalingsverzoek geweigerd</translation> <translation>Betalingsverzoek geweigerd</translation>
</message> </message>
<message>
<source>Payment request network doesn't match client network.</source>
<translation>Betalingsaanvraagnetwerk komt niet overeen met klantennetwerk.</translation>
</message>
<message> <message>
<source>Payment request has expired.</source> <source>Payment request has expired.</source>
<translation>Betalingsverzoek is verlopen.</translation> <translation>Betalingsverzoek is verlopen.</translation>
</message> </message>
<message>
<source>Payment request is not initialized.</source>
<translation>Betalingsaanvraag is niet geïnitialiseerd.</translation>
</message>
<message> <message>
<source>Requested payment amount of %1 is too small (considered dust).</source> <source>Requested payment amount of %1 is too small (considered dust).</source>
<translation>Het gevraagde betalingsbedrag van %1 is te weinig (beschouwd als stof).</translation> <translation>Het gevraagde betalingsbedrag van %1 is te weinig (beschouwd als stof).</translation>
@ -1208,10 +1268,18 @@ Adres: %4
<source>Payment request fetch URL is invalid: %1</source> <source>Payment request fetch URL is invalid: %1</source>
<translation>URL om betalingsverzoek te verkrijgen is ongeldig: %1</translation> <translation>URL om betalingsverzoek te verkrijgen is ongeldig: %1</translation>
</message> </message>
<message>
<source>URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters.</source>
<translation>URI kan niet verwerkt worden! Dit kan het gevolg zijn van een ongeldig Bitcoin adres of misvormde URI parameters.</translation>
</message>
<message> <message>
<source>Payment request file handling</source> <source>Payment request file handling</source>
<translation>Betalingsverzoek bestandsafhandeling</translation> <translation>Betalingsverzoek bestandsafhandeling</translation>
</message> </message>
<message>
<source>Payment request file cannot be read! This can be caused by an invalid payment request file.</source>
<translation>Betalingsverzoek-bestand kan niet gelezen of verwerkt worden! Dit kan veroorzaakt worden door een ongeldig betalingsverzoek-bestand.</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>Niet-geverifieerde betalingsverzoeken naar aangepaste betaling scripts worden niet ondersteund.</translation> <translation>Niet-geverifieerde betalingsverzoeken naar aangepaste betaling scripts worden niet ondersteund.</translation>
@ -1224,6 +1292,10 @@ Adres: %4
<source>Error communicating with %1: %2</source> <source>Error communicating with %1: %2</source>
<translation>Fout bij communiceren met %1: %2</translation> <translation>Fout bij communiceren met %1: %2</translation>
</message> </message>
<message>
<source>Payment request cannot be parsed!</source>
<translation>Betalingsverzoek kan niet juist worden ontleed of verwerkt!</translation>
</message>
<message> <message>
<source>Bad response from server %1</source> <source>Bad response from server %1</source>
<translation>Ongeldige respons van server %1</translation> <translation>Ongeldige respons van server %1</translation>
@ -1243,7 +1315,15 @@ Adres: %4
<source>User Agent</source> <source>User Agent</source>
<translation>User Agent</translation> <translation>User Agent</translation>
</message> </message>
</context> <message>
<source>Address/Hostname</source>
<translation>Adres/Hostnaam</translation>
</message>
<message>
<source>Ping Time</source>
<translation>Ping tijd</translation>
</message>
</context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
@ -1340,6 +1420,10 @@ Adres: %4
<source>Using OpenSSL version</source> <source>Using OpenSSL version</source>
<translation>Gebruikt OpenSSL versie</translation> <translation>Gebruikt OpenSSL versie</translation>
</message> </message>
<message>
<source>Using BerkeleyDB version</source>
<translation>Gebruikt BerkeleyDB versie</translation>
</message>
<message> <message>
<source>Startup time</source> <source>Startup time</source>
<translation>Opstarttijd</translation> <translation>Opstarttijd</translation>
@ -1372,6 +1456,14 @@ Adres: %4
<source>Sent</source> <source>Sent</source>
<translation>Verstuurd</translation> <translation>Verstuurd</translation>
</message> </message>
<message>
<source>&amp;Peers</source>
<translation>&amp;Peers</translation>
</message>
<message>
<source>Select a peer to view detailed information.</source>
<translation>Selecteer een peer om gedetailleerde informatie te bekijken.</translation>
</message>
<message> <message>
<source>Direction</source> <source>Direction</source>
<translation>Directie</translation> <translation>Directie</translation>
@ -1388,6 +1480,18 @@ Adres: %4
<source>Services</source> <source>Services</source>
<translation>Services</translation> <translation>Services</translation>
</message> </message>
<message>
<source>Starting Height</source>
<translation>Aanvangshoogte</translation>
</message>
<message>
<source>Sync Height</source>
<translation>Synchronisatiehoogte</translation>
</message>
<message>
<source>Ban Score</source>
<translation>Ban score</translation>
</message>
<message> <message>
<source>Connection Time</source> <source>Connection Time</source>
<translation>Connectie tijd</translation> <translation>Connectie tijd</translation>
@ -1408,6 +1512,10 @@ Adres: %4
<source>Bytes Received</source> <source>Bytes Received</source>
<translation>Bytes Ontvangen</translation> <translation>Bytes Ontvangen</translation>
</message> </message>
<message>
<source>Ping Time</source>
<translation>Ping Tijd</translation>
</message>
<message> <message>
<source>Last block time</source> <source>Last block time</source>
<translation>Tijd laatste blok</translation> <translation>Tijd laatste blok</translation>
@ -1492,11 +1600,23 @@ Adres: %4
<source>never</source> <source>never</source>
<translation>nooit</translation> <translation>nooit</translation>
</message> </message>
<message>
<source>Inbound</source>
<translation>Inkomend</translation>
</message>
<message>
<source>Outbound</source>
<translation>Uitgaand</translation>
</message>
<message> <message>
<source>Unknown</source> <source>Unknown</source>
<translation>Onbekend</translation> <translation>Onbekend</translation>
</message> </message>
</context> <message>
<source>Fetching...</source>
<translation>Ophalen...</translation>
</message>
</context>
<context> <context>
<name>ReceiveCoinsDialog</name> <name>ReceiveCoinsDialog</name>
<message> <message>
@ -1724,6 +1844,50 @@ Adres: %4
<source>Custom change address</source> <source>Custom change address</source>
<translation>Aangepast wisselgeldadres</translation> <translation>Aangepast wisselgeldadres</translation>
</message> </message>
<message>
<source>Transaction Fee:</source>
<translation>Transactiekosten:</translation>
</message>
<message>
<source>Choose...</source>
<translation>Kies...</translation>
</message>
<message>
<source>Minimize</source>
<translation>Minimaliseer</translation>
</message>
<message>
<source>per kilobyte</source>
<translation>per kilobyte</translation>
</message>
<message>
<source>total at least</source>
<translation>totaal ten minste</translation>
</message>
<message>
<source>Recommended:</source>
<translation>Aanbevolen:</translation>
</message>
<message>
<source>Custom:</source>
<translation>Handmatig:</translation>
</message>
<message>
<source>Confirmation time:</source>
<translation>Bevestigings tijd:</translation>
</message>
<message>
<source>normal</source>
<translation>normaal</translation>
</message>
<message>
<source>fast</source>
<translation>snel</translation>
</message>
<message>
<source>(confirmation may take longer)</source>
<translation>(bevestiging kan langer duren)</translation>
</message>
<message> <message>
<source>Send to multiple recipients at once</source> <source>Send to multiple recipients at once</source>
<translation>Verstuur aan verschillende ontvangers ineens</translation> <translation>Verstuur aan verschillende ontvangers ineens</translation>
@ -1828,6 +1992,18 @@ Adres: %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>De transactie was afgewezen. Dit kan gebeuren als u eerder uitgegeven munten opnieuw wilt versturen, zoals wanneer u een kopie van uw wallet.dat heeft gebruikt en in de kopie deze munten zijn gemarkeerd als uitgegeven, maar in de huidige nog niet.</translation> <translation>De transactie was afgewezen. Dit kan gebeuren als u eerder uitgegeven munten opnieuw wilt versturen, zoals wanneer u een kopie van uw wallet.dat heeft gebruikt en in de kopie deze munten zijn gemarkeerd als uitgegeven, maar in de huidige nog niet.</translation>
</message> </message>
<message>
<source>A fee higher than %1 is considered an insanely high fee.</source>
<translation>Transactiekosten hoger dan %1 worden gezien als waanzinnig hoog.</translation>
</message>
<message>
<source>Pay only the minimum fee of %1</source>
<translation>Betaal alleen de minimale transactiekosten van %1</translation>
</message>
<message>
<source>Estimated to begin confirmation within %1 block(s).</source>
<translation>Beginnen van bevesting geschat binnen %1 blok(ken).</translation>
</message>
<message> <message>
<source>Warning: Invalid Bitcoin address</source> <source>Warning: Invalid Bitcoin address</source>
<translation>Waarschuwing: Ongeldig Bitcoin adres</translation> <translation>Waarschuwing: Ongeldig Bitcoin adres</translation>
@ -1879,6 +2055,10 @@ Adres: %4
<source>This is a normal payment.</source> <source>This is a normal payment.</source>
<translation>Dit is een normale betaling.</translation> <translation>Dit is een normale betaling.</translation>
</message> </message>
<message>
<source>The Bitcoin address to send the payment to</source>
<translation>Het Bitcoin adres om betaling aan te voldoen</translation>
</message>
<message> <message>
<source>Alt+A</source> <source>Alt+A</source>
<translation>Alt+A</translation> <translation>Alt+A</translation>
@ -1949,6 +2129,10 @@ Adres: %4
<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 with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
<translation>U kunt berichten ondertekenen met een van uw adressen om te bewijzen dat u dit adres bezit. Pas op dat u geen onduidelijke dingen ondertekent, want phishingaanvallen zouden u kunnen misleiden om zo uw identiteit te stelen. Onderteken alleen berichten waarmee u het volledig eens bent.</translation> <translation>U kunt berichten ondertekenen met een van uw adressen om te bewijzen dat u dit adres bezit. Pas op dat u geen onduidelijke dingen ondertekent, want phishingaanvallen zouden u kunnen misleiden om zo uw identiteit te stelen. Onderteken alleen berichten waarmee u het volledig eens bent.</translation>
</message> </message>
<message>
<source>The Bitcoin address to sign the message with</source>
<translation>Het Bitcoin adres om bericht mee te ondertekenen</translation>
</message>
<message> <message>
<source>Choose previously used address</source> <source>Choose previously used address</source>
<translation>Kies een eerder gebruikt adres</translation> <translation>Kies een eerder gebruikt adres</translation>
@ -2001,6 +2185,10 @@ Adres: %4
<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 signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack.</source>
<translation>Voer het ondertekenende adres, bericht en handtekening hieronder in (let erop dat u nieuwe regels, spaties en tabs juist overneemt) om de handtekening te verifiëren. Let erop dat u niet meer uit het bericht interpreteert dan er daadwerkelijk staat, om te voorkomen dat u wordt misleid in een man-in-the-middle-aanval.</translation> <translation>Voer het ondertekenende adres, bericht en handtekening hieronder in (let erop dat u nieuwe regels, spaties en tabs juist overneemt) om de handtekening te verifiëren. Let erop dat u niet meer uit het bericht interpreteert dan er daadwerkelijk staat, om te voorkomen dat u wordt misleid in een man-in-the-middle-aanval.</translation>
</message> </message>
<message>
<source>The Bitcoin address the message was signed with</source>
<translation>Het Bitcoin adres waarmee het bericht ondertekend is</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>Controleer een bericht om te verifiëren dat het gespecificeerde Bitcoinadres het bericht heeft ondertekend.</translation> <translation>Controleer een bericht om te verifiëren dat het gespecificeerde Bitcoinadres het bericht heeft ondertekend.</translation>
@ -2142,6 +2330,10 @@ Adres: %4
<source>own address</source> <source>own address</source>
<translation>eigen adres</translation> <translation>eigen adres</translation>
</message> </message>
<message>
<source>watch-only</source>
<translation>alleen-bekijkbaar</translation>
</message>
<message> <message>
<source>label</source> <source>label</source>
<translation>label</translation> <translation>label</translation>
@ -2162,6 +2354,14 @@ Adres: %4
<source>Debit</source> <source>Debit</source>
<translation>Debet</translation> <translation>Debet</translation>
</message> </message>
<message>
<source>Total debit</source>
<translation>Totaal debit</translation>
</message>
<message>
<source>Total credit</source>
<translation>Totaal credit</translation>
</message>
<message> <message>
<source>Transaction fee</source> <source>Transaction fee</source>
<translation>Transactiekosten</translation> <translation>Transactiekosten</translation>
@ -2312,6 +2512,10 @@ Adres: %4
<source>Mined</source> <source>Mined</source>
<translation>Gedolven</translation> <translation>Gedolven</translation>
</message> </message>
<message>
<source>watch-only</source>
<translation>alleen-bekijkbaar</translation>
</message>
<message> <message>
<source>(n/a)</source> <source>(n/a)</source>
<translation>(nvt)</translation> <translation>(nvt)</translation>
@ -2423,6 +2627,10 @@ Adres: %4
<source>Export Transaction History</source> <source>Export Transaction History</source>
<translation>Exporteer Transactieverleden</translation> <translation>Exporteer Transactieverleden</translation>
</message> </message>
<message>
<source>Watch-only</source>
<translation>Alleen-bekijkbaar</translation>
</message>
<message> <message>
<source>Exporting Failed</source> <source>Exporting Failed</source>
<translation>Export Mislukt</translation> <translation>Export Mislukt</translation>
@ -2478,7 +2686,11 @@ Adres: %4
</context> </context>
<context> <context>
<name>UnitDisplayStatusBarControl</name> <name>UnitDisplayStatusBarControl</name>
</context> <message>
<source>Unit to show amounts in. Click to select another unit.</source>
<translation>Eenheid om bedragen uit te drukken. Klik om een andere eenheid te selecteren.</translation>
</message>
</context>
<context> <context>
<name>WalletFrame</name> <name>WalletFrame</name>
<message> <message>
@ -2752,6 +2964,10 @@ bijvoorbeeld: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com</tran
<source>This is intended for regression testing tools and app development.</source> <source>This is intended for regression testing tools and app development.</source>
<translation>Dit is bedoeld voor regressie test toepassingen en applicatie onwikkeling.</translation> <translation>Dit is bedoeld voor regressie test toepassingen en applicatie onwikkeling.</translation>
</message> </message>
<message>
<source>Use UPnP to map the listening port (default: %u)</source>
<translation>Gebruik UPnP om de luisterende poort te mappen (standaard: %u)</translation>
</message>
<message> <message>
<source>Verifying blocks...</source> <source>Verifying blocks...</source>
<translation>Blokken aan het controleren...</translation> <translation>Blokken aan het controleren...</translation>
@ -2788,6 +3004,10 @@ bijvoorbeeld: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com</tran
<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>Stel maximumgrootte in bytes in voor hoge-prioriteits-/lage-transactiekosten-transacties (standaard: %d)</translation> <translation>Stel maximumgrootte in bytes in voor hoge-prioriteits-/lage-transactiekosten-transacties (standaard: %d)</translation>
</message> </message>
<message>
<source>Error loading wallet.dat: Wallet requires newer version of Bitcoin Core</source>
<translation>Fout bij laden wallet.dat: Portemonnee vereist een nieuwere versie van Bitcoin Core</translation>
</message>
<message> <message>
<source>Information</source> <source>Information</source>
<translation>Informatie</translation> <translation>Informatie</translation>
@ -2800,6 +3020,18 @@ bijvoorbeeld: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com</tran
<source>Invalid amount for -mintxfee=&lt;amount&gt;: '%s'</source> <source>Invalid amount for -mintxfee=&lt;amount&gt;: '%s'</source>
<translation>Ongeldig bedrag voor -mintxfee=&lt;bedrag&gt;: '%s'</translation> <translation>Ongeldig bedrag voor -mintxfee=&lt;bedrag&gt;: '%s'</translation>
</message> </message>
<message>
<source>Invalid amount for -paytxfee=&lt;amount&gt;: '%s' (must be at least %s)</source>
<translation>Ongeldig bedrag voor -paytxfee=&lt;bedrag&gt;: '%s' (Minimum %s)</translation>
</message>
<message>
<source>Keep at most &lt;n&gt; unconnectable blocks in memory (default: %u)</source>
<translation>Houd maximaal &lt;n&gt; onverbonden blokken in geheugen (standaard: %u)</translation>
</message>
<message>
<source>Keep at most &lt;n&gt; unconnectable transactions in memory (default: %u)</source>
<translation>Houd maximaal &lt;n&gt; onverbonden transacties in geheugen (standaard: %u)</translation>
</message>
<message> <message>
<source>Print block on startup, if found in block index</source> <source>Print block on startup, if found in block index</source>
<translation>Toon block bij opstarten, wanneer gevonden in block index</translation> <translation>Toon block bij opstarten, wanneer gevonden in block index</translation>
@ -2916,14 +3148,134 @@ bijvoorbeeld: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com</tran
<source>Error loading wallet.dat: Wallet corrupted</source> <source>Error loading wallet.dat: Wallet corrupted</source>
<translation>Fout bij laden wallet.dat: Portemonnee corrupt</translation> <translation>Fout bij laden wallet.dat: Portemonnee corrupt</translation>
</message> </message>
<message>
<source>Maintain a full transaction index, used by the getrawtransaction rpc call (default: %u)</source>
<translation>Onderhoud een volledige transactieindex, gebruikt door de getrawtransaction rpc call (standaard: %u)</translation>
</message>
<message>
<source>Number of seconds to keep misbehaving peers from reconnecting (default: %u)</source>
<translation>Aantal seconden dat zich misdragende peers niet opnieuw kunnen verbinden (standaard: %u)</translation>
</message>
<message>
<source>Output debugging information (default: %u, supplying &lt;category&gt; is optional)</source>
<translation>Output extra debugginginformatie (standaard: %u, het leveren van &lt;category&gt; is optioneel)</translation>
</message>
<message>
<source>Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: %s)</source>
<translation>Gebruik een aparte SOCKS5 proxy om 'Tor hidden services' te bereiken (standaard: %s)</translation>
</message>
<message>
<source>Always query for peer addresses via DNS lookup (default: %u)</source>
<translation>Vind anderen door middel van een DNS-naslag (standaard: %u)</translation>
</message>
<message>
<source>Disable safemode, override a real safe mode event (default: %u)</source>
<translation>Veilige modus uitschakelen, hef een echte veilige modus gebeurtenis uit (default: %u)</translation>
</message>
<message> <message>
<source>Error loading wallet.dat</source> <source>Error loading wallet.dat</source>
<translation>Fout bij laden wallet.dat</translation> <translation>Fout bij laden wallet.dat</translation>
</message> </message>
<message>
<source>Force safe mode (default: %u)</source>
<translation>Forceer veilige modus (default: %u)</translation>
</message>
<message>
<source>Generate coins (default: %u)</source>
<translation>Genereer munten (standaard: %u)</translation>
</message>
<message>
<source>How many blocks to check at startup (default: %u, 0 = all)</source>
<translation>Aantal te checken blokken bij het opstarten (standaard: %u, 0 = allemaal)</translation>
</message>
<message> <message>
<source>Invalid -proxy address: '%s'</source> <source>Invalid -proxy address: '%s'</source>
<translation>Ongeldig -proxy adres: '%s'</translation> <translation>Ongeldig -proxy adres: '%s'</translation>
</message> </message>
<message>
<source>Limit size of signature cache to &lt;n&gt; entries (default: %u)</source>
<translation>Limiteer grootte van de handtekening cache tot &lt;n&gt; entries (default: %u)</translation>
</message>
<message>
<source>Listen for JSON-RPC connections on &lt;port&gt; (default: %u or testnet: %u)</source>
<translation>Luister naar JSON-RPC-verbindingen op poort &lt;port&gt; (standaard: %u of testnet: %u)</translation>
</message>
<message>
<source>Listen for connections on &lt;port&gt; (default: %u or testnet: %u)</source>
<translation>Luister naar verbindingen op &lt;poort&gt; (standaard: %u of testnet: %u)</translation>
</message>
<message>
<source>Maintain at most &lt;n&gt; connections to peers (default: %u)</source>
<translation>Onderhoud maximaal &lt;n&gt; verbindingen naar peers (standaard: %u)</translation>
</message>
<message>
<source>Maximum per-connection receive buffer, &lt;n&gt;*1000 bytes (default: %u)</source>
<translation>Maximum per-connectie ontvangstbuffer, &lt;n&gt;*1000 bytes (standaard: %u)</translation>
</message>
<message>
<source>Maximum per-connection send buffer, &lt;n&gt;*1000 bytes (default: %u)</source>
<translation>Maximum per-connectie zendbuffer, &lt;n&gt;*1000 bytes (standaard: %u)</translation>
</message>
<message>
<source>Only accept block chain matching built-in checkpoints (default: %u)</source>
<translation>Accepteer alleen blokkenketen die overeenkomt met de ingebouwde checkpoints (standaard: %u)</translation>
</message>
<message>
<source>Prepend debug output with timestamp (default: %u)</source>
<translation>Prepend debug output met tijdstempel (standaard: %u)</translation>
</message>
<message>
<source>Print block tree on startup (default: %u)</source>
<translation>Toon block structuur bij opstarten (default: %u)</translation>
</message>
<message>
<source>Run a thread to flush wallet periodically (default: %u)</source>
<translation>Draai een proces om de wallet periodiek te flushen (default: %u)</translation>
</message>
<message>
<source>Server certificate file (default: %s)</source>
<translation>Certificaat-bestand voor server (standaard: %s)</translation>
</message>
<message>
<source>Server private key (default: %s)</source>
<translation>Geheime sleutel voor server (standaard: %s)</translation>
</message>
<message>
<source>Set key pool size to &lt;n&gt; (default: %u)</source>
<translation>Stel sleutelpoelgrootte in op &lt;&amp;&gt; (standaard: %u)</translation>
</message>
<message>
<source>Set minimum block size in bytes (default: %u)</source>
<translation>Stel minimum blokgrootte in in bytes (standaard: %u)</translation>
</message>
<message>
<source>Set the number of threads to service RPC calls (default: %d)</source>
<translation>Stel het aantal threads in om RPC-aanvragen mee te bedienen (standaard: %d)</translation>
</message>
<message>
<source>Sets the DB_PRIVATE flag in the wallet db environment (default: %u)</source>
<translation>Plaatst de DB_PRIVATE vlag in de wallet db omgeving (default: %u)</translation>
</message>
<message>
<source>Specify configuration file (default: %s)</source>
<translation>Specificeer configuratie bestand (standaard: %s)</translation>
</message>
<message>
<source>Specify connection timeout in milliseconds (minimum: 1, default: %d)</source>
<translation>Specificeer de time-out tijd in milliseconden (minimum: 1, standaard: %d)</translation>
</message>
<message>
<source>Specify pid file (default: %s)</source>
<translation>Specificeer pid-bestand (standaard: %s)</translation>
</message>
<message>
<source>Spend unconfirmed change when sending transactions (default: %u)</source>
<translation>Besteed onbevestigd wisselgeld bij het versturen van transacties (standaard: %u)</translation>
</message>
<message>
<source>Threshold for disconnecting misbehaving peers (default: %u)</source>
<translation>Drempel om verbinding te verbreken naar zich misdragende peers (standaard: %u)</translation>
</message>
<message> <message>
<source>Unknown network specified in -onlynet: '%s'</source> <source>Unknown network specified in -onlynet: '%s'</source>
<translation>Onbekend netwerk gespecificeerd in -onlynet: '%s'</translation> <translation>Onbekend netwerk gespecificeerd in -onlynet: '%s'</translation>

View file

@ -773,6 +773,10 @@ Adresa: %4
<source>version</source> <source>version</source>
<translation>versiunea</translation> <translation>versiunea</translation>
</message> </message>
<message>
<source>(%1-bit)</source>
<translation>(%1-bit)</translation>
</message>
<message> <message>
<source>About Bitcoin Core</source> <source>About Bitcoin Core</source>
<translation>Despre Nucleul Bitcoin</translation> <translation>Despre Nucleul Bitcoin</translation>

View file

@ -520,6 +520,10 @@ Address: %4
</context> </context>
<context> <context>
<name>CoinControlDialog</name> <name>CoinControlDialog</name>
<message>
<source>Coin Selection</source>
<translation>Выбор монет</translation>
</message>
<message> <message>
<source>Quantity:</source> <source>Quantity:</source>
<translation>Количество:</translation> <translation>Количество:</translation>
@ -1844,17 +1848,37 @@ Address: %4
<source>Choose...</source> <source>Choose...</source>
<translation>Выберите...</translation> <translation>Выберите...</translation>
</message> </message>
<message>
<source>collapse fee-settings</source>
<translation>Свернуть настройки комиссии</translation>
</message>
<message> <message>
<source>Minimize</source> <source>Minimize</source>
<translation>Сворачивать</translation> <translation>Сворачивать</translation>
</message> </message>
<message>
<source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
<translation>Если комиссия установлена в 1000 сатоши, а транзакция составляет лишь 250 байт, тогда комиссия "на килобайт" составит 250 сатоши, а "как минимум" 1000 сатоши. Для транзакций крупнее килобайта в обоих случаях будет использоваться платёж "на килобайт".</translation>
</message>
<message> <message>
<source>per kilobyte</source> <source>per kilobyte</source>
<translation>за килобайт</translation> <translation>за килобайт</translation>
</message> </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 "total at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
<translation>Если комиссия установлена в 1000 сатоши, а транзакция составляет лишь 250 байт, тогда комиссия "на килобайт" составит 250 сатоши, а "всего как минимум" 1000 сатоши. Для транзакций крупнее килобайта в обоих случаях будет использоваться платёж "на килобайт".</translation>
</message>
<message> <message>
<source>total at least</source> <source>total at least</source>
<translation>Итого</translation> <translation>Итого как минимум</translation>
</message>
<message>
<source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for bitcoin transactions than the network can process.</source>
<translation>Уплата минимальной комиссии не проблема, пока объём транзакций меньше, чем свободное место в блоках. Учтите, однако, что такая транзакция может никогда не подтвердиться, если спрос на транзакции превышает возможности сети по их обработке.</translation>
</message>
<message>
<source>(read the tooltip)</source>
<translation>(прочтите подсказку)</translation>
</message> </message>
<message> <message>
<source>Recommended:</source> <source>Recommended:</source>
@ -1864,6 +1888,10 @@ Address: %4
<source>Custom:</source> <source>Custom:</source>
<translation>Выборочно:</translation> <translation>Выборочно:</translation>
</message> </message>
<message>
<source>(Smart fee not initialized yet. This usually takes a few blocks...)</source>
<translation>(Умная комиссия пока не инициализирована. Обычно для этого требуется несколько блоков...)</translation>
</message>
<message> <message>
<source>Confirmation time:</source> <source>Confirmation time:</source>
<translation>Время подтверждения:</translation> <translation>Время подтверждения:</translation>
@ -1994,7 +2022,7 @@ Address: %4
</message> </message>
<message> <message>
<source>Estimated to begin confirmation within %1 block(s).</source> <source>Estimated to begin confirmation within %1 block(s).</source>
<translation>Ожидается начать подтверждение через %1 блок(ов).</translation> <translation>Начало подтверждения ожидается через %1 блок(ов).</translation>
</message> </message>
<message> <message>
<source>Warning: Invalid Bitcoin address</source> <source>Warning: Invalid Bitcoin address</source>
@ -2798,6 +2826,10 @@ rpcpassword=%s
<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>Удалить все транзакции бумажника с возможностью восстановить эти части цепи блоков с помощью -rescan при запуске</translation> <translation>Удалить все транзакции бумажника с возможностью восстановить эти части цепи блоков с помощью -rescan при запуске</translation>
</message> </message>
<message>
<source>Distributed under the MIT software license, see the accompanying file COPYING or &lt;http://www.opensource.org/licenses/mit-license.php&gt;.</source>
<translation>Распространяется под лицензией MIT, см. приложенный файл COPYING или &lt;http://www.opensource.org/licenses/mit-license.php&gt;.</translation>
</message>
<message> <message>
<source>Enter regression test mode, which uses a special chain in which blocks can be solved instantly.</source> <source>Enter regression test mode, which uses a special chain in which blocks can be solved instantly.</source>
<translation>Войти в режим тестирования на регрессии, в котором используется специальная цепь, где блоки находятся мгновенно.</translation> <translation>Войти в режим тестирования на регрессии, в котором используется специальная цепь, где блоки находятся мгновенно.</translation>
@ -3064,7 +3096,7 @@ rpcpassword=%s
</message> </message>
<message> <message>
<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>Задать число потоков генерации монет, если включена (-1 = число ядер процессора, по умолчанию: %d)</translation> <translation>Задать число потоков генерации монет, если она включена (-1 = все ядра процессора, по умолчанию: %d)</translation>
</message> </message>
<message> <message>
<source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit &lt;https://www.openssl.org/&gt; and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source> <source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit &lt;https://www.openssl.org/&gt; and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source>
@ -3332,7 +3364,7 @@ rpcpassword=%s
</message> </message>
<message> <message>
<source>Disable safemode, override a real safe mode event (default: %u)</source> <source>Disable safemode, override a real safe mode event (default: %u)</source>
<translation>Отключить безопасный режим, отклонить реальное событие безопасного режима (по умолчанию: %u)</translation> <translation>Отключить безопасный режим, перекрыть реальное событие безопасного режима (по умолчанию: %u)</translation>
</message> </message>
<message> <message>
<source>Error loading wallet.dat</source> <source>Error loading wallet.dat</source>

View file

@ -3,15 +3,31 @@
<name>AddressBookPage</name> <name>AddressBookPage</name>
<message> <message>
<source>Double-click to edit address or label</source> <source>Double-click to edit address or label</source>
<translation>Кликните два пута да промените адресу и/или етикету</translation> <translation>Kliknite dva puta da izmenite adresu ili etiketu</translation>
</message> </message>
<message> <message>
<source>Create a new address</source> <source>Create a new address</source>
<translation>Прави нову адресу</translation> <translation>Napravite novu adresu</translation>
</message>
<message>
<source>&amp;New</source>
<translation>Novo</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>
<translation>Копира изабрану адресу на системски клипборд</translation> <translation>Kopirajte trenutno izabranu adresu</translation>
</message>
<message>
<source>&amp;Copy</source>
<translation>Kopirajte</translation>
</message>
<message>
<source>&amp;Copy Address</source>
<translation>Kopirajte adresu</translation>
</message>
<message>
<source>Delete the currently selected address from the list</source>
<translation>Izbrisite trenutno izabranu adresu sa liste</translation>
</message> </message>
<message> <message>
<source>&amp;Delete</source> <source>&amp;Delete</source>

View file

@ -524,6 +524,10 @@ Address: %4
</context> </context>
<context> <context>
<name>CoinControlDialog</name> <name>CoinControlDialog</name>
<message>
<source>Coin Selection</source>
<translation>Вибір Монет</translation>
</message>
<message> <message>
<source>Quantity:</source> <source>Quantity:</source>
<translation>Кількість:</translation> <translation>Кількість:</translation>
@ -572,6 +576,14 @@ Address: %4
<source>Amount</source> <source>Amount</source>
<translation>Кількість</translation> <translation>Кількість</translation>
</message> </message>
<message>
<source>Received with label</source>
<translation>Отримано з позначкою</translation>
</message>
<message>
<source>Received with address</source>
<translation>Отримано з адресою</translation>
</message>
<message> <message>
<source>Date</source> <source>Date</source>
<translation>Дата</translation> <translation>Дата</translation>
@ -1034,6 +1046,14 @@ Address: %4
<source>Map port using &amp;UPnP</source> <source>Map port using &amp;UPnP</source>
<translation>Відображення порту через &amp;UPnP</translation> <translation>Відображення порту через &amp;UPnP</translation>
</message> </message>
<message>
<source>Connect to the Bitcoin network through a SOCKS5 proxy.</source>
<translation>Підключення до мережі Bitcoin через SOCKS5 проксі.</translation>
</message>
<message>
<source>&amp;Connect through SOCKS5 proxy (default proxy):</source>
<translation>&amp;Підключення через SOCKS5 проксі (проксі за замовчуванням):</translation>
</message>
<message> <message>
<source>Proxy &amp;IP:</source> <source>Proxy &amp;IP:</source>
<translation>&amp;IP проксі:</translation> <translation>&amp;IP проксі:</translation>
@ -1824,6 +1844,78 @@ Address: %4
<source>Custom change address</source> <source>Custom change address</source>
<translation>Вказати адресу для решти</translation> <translation>Вказати адресу для решти</translation>
</message> </message>
<message>
<source>Transaction Fee:</source>
<translation>Комісія за передачу:</translation>
</message>
<message>
<source>Choose...</source>
<translation>Виберіть...</translation>
</message>
<message>
<source>collapse fee-settings</source>
<translation>згорнути налаштування оплат</translation>
</message>
<message>
<source>Minimize</source>
<translation>Мінімізувати</translation>
</message>
<message>
<source>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
<translation>Якщо оплата користувача встановлюється в 1000 Satoshi і розмір передачі всього 250 байт, то "за кілобайт" платить тільки 250 Satoshi, в той час як "щонайменше" платить 1000 satoshis. Для передач більших, ніж кілобайт обоє платять за кілобайт.</translation>
</message>
<message>
<source>per kilobyte</source>
<translation>за кілобайт</translation>
</message>
<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 "total at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</source>
<translation>Якщо оплата користувача встановлюється в 1000 Satoshi і розмір передачі всього 250 байт, то "за кілобайт" платить тільки 250 Satoshi, в той час як "всього щонайменше" платить 1000 satoshis. Для передач більших, ніж кілобайт обоє платять за кілобайт.</translation>
</message>
<message>
<source>total at least</source>
<translation>всього щонайменше</translation>
</message>
<message>
<source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for bitcoin transactions than the network can process.</source>
<translation>Оплата тільки мінімальних зборів є прийнятною до тих пір, як обсяг транзакцій там є меншим аніж простору в блоках. Але майте на увазі, що це може анулювати транзакцію, якщо попит на Bitcoin транзакції стане значно більшим, ніж мережа зможе обробити.</translation>
</message>
<message>
<source>(read the tooltip)</source>
<translation>(читати підказки)</translation>
</message>
<message>
<source>Recommended:</source>
<translation>Рекомендовано:</translation>
</message>
<message>
<source>Custom:</source>
<translation>Змінено:</translation>
</message>
<message>
<source>(Smart fee not initialized yet. This usually takes a few blocks...)</source>
<translation>(Розумна оплата ще не ініціалізована. Це звичайно займає кілька блоків...)</translation>
</message>
<message>
<source>Confirmation time:</source>
<translation>Час підтвердження:</translation>
</message>
<message>
<source>normal</source>
<translation>звичайний</translation>
</message>
<message>
<source>fast</source>
<translation>швидкий</translation>
</message>
<message>
<source>Send as zero-fee transaction if possible</source>
<translation>Надіслати як нульовий плата за передачу, якщо це можливо</translation>
</message>
<message>
<source>(confirmation may take longer)</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>
@ -1928,6 +2020,18 @@ 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>Транзакцію відхилено! Це може статись, якщо декілька монет з вашого гаманця вже використані, наприклад, якщо ви використовуєте одну копію гаманця (wallet.dat), а монети були використані з іншої копії, але не позначені як використані в цій.</translation> <translation>Транзакцію відхилено! Це може статись, якщо декілька монет з вашого гаманця вже використані, наприклад, якщо ви використовуєте одну копію гаманця (wallet.dat), а монети були використані з іншої копії, але не позначені як використані в цій.</translation>
</message> </message>
<message>
<source>A fee higher than %1 is considered an insanely high fee.</source>
<translation>Плата вища, ніж %1 вважається шалено високою.</translation>
</message>
<message>
<source>Pay only the minimum fee of %1</source>
<translation>Платити тільки мінімальний збір у розмірі %1</translation>
</message>
<message>
<source>Estimated to begin confirmation within %1 block(s).</source>
<translation>Розрахунковий початок підтвердження протягом %1 блоку(ів).</translation>
</message>
<message> <message>
<source>Warning: Invalid Bitcoin address</source> <source>Warning: Invalid Bitcoin address</source>
<translation>Увага: Неправильна Bitcoin-адреса</translation> <translation>Увага: Неправильна Bitcoin-адреса</translation>
@ -2734,6 +2838,10 @@ rpcpassword=%s
<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>Видалити всі транзакції гаманця та відновити ті, що будуть знайдені під час запуску за допомогою -rescan</translation> <translation>Видалити всі транзакції гаманця та відновити ті, що будуть знайдені під час запуску за допомогою -rescan</translation>
</message> </message>
<message>
<source>Distributed under the MIT software license, see the accompanying file COPYING or &lt;http://www.opensource.org/licenses/mit-license.php&gt;.</source>
<translation>Поширюється за ліцензією MIT, додаткова інформація міститься у файлі COPYING та за адресою &lt;http://www.opensource.org/licenses/mit-license.php&gt;.</translation>
</message>
<message> <message>
<source>Enter regression test mode, which uses a special chain in which blocks can be solved instantly.</source> <source>Enter regression test mode, which uses a special chain in which blocks can be solved instantly.</source>
<translation>Ввійти в режим регресивного тестування, що використовує спеціальний ланцюг з миттєвим знаходженням блоків.</translation> <translation>Ввійти в режим регресивного тестування, що використовує спеціальний ланцюг з миттєвим знаходженням блоків.</translation>
@ -2986,6 +3094,10 @@ rpcpassword=%s
<source>Fees (in BTC/Kb) smaller than this are considered zero fee for transaction creation (default: %s)</source> <source>Fees (in BTC/Kb) smaller than this are considered zero fee for transaction creation (default: %s)</source>
<translation>Комісії (в BTC/КБ), що менші за вказану, вважатимуться нульовими (для створення транзакції) (типово: %s)</translation> <translation>Комісії (в BTC/КБ), що менші за вказану, вважатимуться нульовими (для створення транзакції) (типово: %s)</translation>
</message> </message>
<message>
<source>Maximum size of data in data carrier transactions we relay and mine (default: %u)</source>
<translation>Максимальний розмір даних в транзакціях носіїв даних, що ми передаємо і добуваємо (за замовчуванням: %u)</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>Дізнаватися адреси учасників через DNS при замалій кількості відомих адрес (типово: 1 за відсутності -connect)</translation> <translation>Дізнаватися адреси учасників через DNS при замалій кількості відомих адрес (типово: 1 за відсутності -connect)</translation>
@ -2994,6 +3106,10 @@ rpcpassword=%s
<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>Встановити максимальний розмір транзакцій з високим пріоритетом та низькою комісією (в байтах) (типово: %d)</translation> <translation>Встановити максимальний розмір транзакцій з високим пріоритетом та низькою комісією (в байтах) (типово: %d)</translation>
</message> </message>
<message>
<source>Set the number of threads for coin generation if enabled (-1 = all cores, default: %d)</source>
<translation>Встановити кількість потоків для генерації монет (-1 = кількості ядер, типово: %d)</translation>
</message>
<message> <message>
<source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit &lt;https://www.openssl.org/&gt; and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source> <source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit &lt;https://www.openssl.org/&gt; and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source>
<translation>Цей продукт включає в себе програмне забезпечення, розроблене в рамках проекту OpenSSL &lt;https://www.openssl.org/&gt;, криптографічне програмне забезпечення, написане Еріком Янгом, та функції для роботи з UPnP, написані Томасом Бернардом.</translation> <translation>Цей продукт включає в себе програмне забезпечення, розроблене в рамках проекту OpenSSL &lt;https://www.openssl.org/&gt;, криптографічне програмне забезпечення, написане Еріком Янгом, та функції для роботи з UPnP, написані Томасом Бернардом.</translation>
@ -3098,6 +3214,10 @@ rpcpassword=%s
<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>Send transactions as zero-fee transactions if possible (default: %u)</source>
<translation>Встановити операцію надсилання, як неоплатну операцію, якщо це можливо (за замовчуванням: %u)</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>Показати всі налагоджувальні параметри (використання: --help -help-debug)</translation> <translation>Показати всі налагоджувальні параметри (використання: --help -help-debug)</translation>

View file

@ -478,6 +478,10 @@
<source>Up to date</source> <source>Up to date</source>
<translation></translation> <translation></translation>
</message> </message>
<message numerus="yes">
<source>Processed %n blocks of transaction history.</source>
<translation><numerusform> %n </numerusform></translation>
</message>
<message> <message>
<source>Catching up...</source> <source>Catching up...</source>
<translation>...</translation> <translation>...</translation>
@ -520,6 +524,10 @@ Address: %4
</context> </context>
<context> <context>
<name>CoinControlDialog</name> <name>CoinControlDialog</name>
<message>
<source>Coin Selection</source>
<translation></translation>
</message>
<message> <message>
<source>Quantity:</source> <source>Quantity:</source>
<translation>:</translation> <translation>:</translation>
@ -1030,6 +1038,14 @@ Address: %4
<source>Map port using &amp;UPnP</source> <source>Map port using &amp;UPnP</source>
<translation> &amp;UPnP </translation> <translation> &amp;UPnP </translation>
</message> </message>
<message>
<source>Connect to the Bitcoin network through a SOCKS5 proxy.</source>
<translation> SOCKS5 </translation>
</message>
<message>
<source>&amp;Connect through SOCKS5 proxy (default proxy):</source>
<translation> SOCKS5 ():</translation>
</message>
<message> <message>
<source>Proxy &amp;IP:</source> <source>Proxy &amp;IP:</source>
<translation>:</translation> <translation>:</translation>
@ -1820,6 +1836,38 @@ Address: %4
<source>Custom change address</source> <source>Custom change address</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>Transaction Fee:</source>
<translation>:</translation>
</message>
<message>
<source>Choose...</source>
<translation>...</translation>
</message>
<message>
<source>collapse fee-settings</source>
<translation></translation>
</message>
<message>
<source>Minimize</source>
<translation></translation>
</message>
<message>
<source>per kilobyte</source>
<translation></translation>
</message>
<message>
<source>(read the tooltip)</source>
<translation>()</translation>
</message>
<message>
<source>Confirmation time:</source>
<translation>:</translation>
</message>
<message>
<source>Send as zero-fee transaction if possible</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>
@ -2731,6 +2779,10 @@ alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com</translation>
<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>使 -rescan </translation> <translation>使 -rescan </translation>
</message> </message>
<message>
<source>Distributed under the MIT software license, see the accompanying file COPYING or &lt;http://www.opensource.org/licenses/mit-license.php&gt;.</source>
<translation> MIT COPYING : &lt;http://www.opensource.org/licenses/mit-license.php&gt;.</translation>
</message>
<message> <message>
<source>Enter regression test mode, which uses a special chain in which blocks can be solved instantly.</source> <source>Enter regression test mode, which uses a special chain in which blocks can be solved instantly.</source>
<translation>使</translation> <translation>使</translation>
@ -2783,6 +2835,10 @@ alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com</translation>
<source>Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup.</source> <source>Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup.</source>
<translation>警告: 錢包檔 wallet.dat wallet.dat %s, wallet.{timestamp}.bak. </translation> <translation>警告: 錢包檔 wallet.dat wallet.dat %s, wallet.{timestamp}.bak. </translation>
</message> </message>
<message>
<source>Whitelist peers connecting from the given netmask or IP address. Can be specified multiple times.</source>
<translation></translation>
</message>
<message> <message>
<source>(default: 1)</source> <source>(default: 1)</source>
<translation>(預設值: 1)</translation> <translation>(預設值: 1)</translation>
@ -2821,7 +2877,7 @@ alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com</translation>
</message> </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> RPC </translation> <translation> RPC </translation>
</message> </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>
@ -2947,6 +3003,10 @@ alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com</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> %s</translation> <translation> %s</translation>
</message> </message>
<message>
<source>Continuously rate-limit free transactions to &lt;n&gt;*1000 bytes per minute (default:%u)</source>
<translation> &lt;n&gt;*1000 (: %u)</translation>
</message>
<message> <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>使(umask) 077 ()</translation> <translation>使(umask) 077 ()</translation>
@ -2971,6 +3031,10 @@ alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com</translation>
<source>Fees (in BTC/Kb) smaller than this are considered zero fee for transaction creation (default: %s)</source> <source>Fees (in BTC/Kb) smaller than this are considered zero fee for transaction creation (default: %s)</source>
<translation>(Kb) (: %s)</translation> <translation>(Kb) (: %s)</translation>
</message> </message>
<message>
<source>Maximum size of data in data carrier transactions we relay and mine (default: %u)</source>
<translation>(: %u)</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>使 (預設值: 當沒用 -connect 1)</translation> <translation>使 (預設值: 當沒用 -connect 1)</translation>
@ -2979,6 +3043,10 @@ alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com</translation>
<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>(: %d)</translation> <translation>(: %d)</translation>
</message> </message>
<message>
<source>Set the number of threads for coin generation if enabled (-1 = all cores, default: %d)</source>
<translation>(-1 : %d)</translation>
</message>
<message> <message>
<source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit &lt;https://www.openssl.org/&gt; and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source> <source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit &lt;https://www.openssl.org/&gt; and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source>
<translation> OpenSSL Project OpenSSL Toolkit &lt;https://www.openssl.org/&gt;, 和由 Eric Young 撰寫的加解密軟體,以及由 Thomas Bernard 所撰寫的 UPnP 軟體。</translation> <translation> OpenSSL Project OpenSSL Toolkit &lt;https://www.openssl.org/&gt;, 和由 Eric Young 撰寫的加解密軟體,以及由 Thomas Bernard 所撰寫的 UPnP 軟體。</translation>
@ -3083,6 +3151,10 @@ alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com</translation>
<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>Send transactions as zero-fee transactions if possible (default: %u)</source>
<translation>(: %u)</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> (: --help --help-debug)</translation> <translation> (: --help --help-debug)</translation>
@ -3191,14 +3263,178 @@ alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com</translation>
<source>Error loading wallet.dat: Wallet corrupted</source> <source>Error loading wallet.dat: Wallet corrupted</source>
<translation> wallet.dat 時發生錯誤: 錢包損毀了</translation> <translation> wallet.dat 時發生錯誤: 錢包損毀了</translation>
</message> </message>
<message>
<source>(1 = keep tx meta data e.g. account owner and payment request information, 2 = drop tx meta data)</source>
<translation>(1 使2 )</translation>
</message>
<message>
<source>Flush database activity from memory pool to disk log every &lt;n&gt; megabytes (default: %u)</source>
<translation> &lt;n&gt; (MB)(: %u)</translation>
</message>
<message>
<source>How thorough the block verification of -checkblocks is (0-4, default: %u)</source>
<translation>使 -checkblocks (0 4: %u)</translation>
</message>
<message>
<source>If paytxfee is not set, include enough fee so transactions are confirmed on average within n blocks (default: %u)</source>
<translation> paytxfee n (: %u)</translation>
</message>
<message>
<source>Log transaction priority and fee per kB when mining blocks (default: %u)</source>
<translation>(kB)(: %u)</translation>
</message>
<message>
<source>Maintain a full transaction index, used by the getrawtransaction rpc call (default: %u)</source>
<translation> getrawtransaction RPC (: %u)</translation>
</message>
<message>
<source>Number of seconds to keep misbehaving peers from reconnecting (default: %u)</source>
<translation>(: %u)</translation>
</message>
<message>
<source>Output debugging information (default: %u, supplying &lt;category&gt; is optional)</source>
<translation>(: %u, &lt;category&gt;)</translation>
</message>
<message>
<source>Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: %s)</source>
<translation>使 SOCK5 Tor (: %s)</translation>
</message>
<message>
<source>(default: %s)</source>
<translation>(: %s)</translation>
</message>
<message>
<source>Acceptable ciphers (default: %s)</source>
<translation>(: %s)</translation>
</message>
<message>
<source>Always query for peer addresses via DNS lookup (default: %u)</source>
<translation>(: %u)</translation>
</message>
<message>
<source>Disable safemode, override a real safe mode event (default: %u)</source>
<translation>(: %u)</translation>
</message>
<message> <message>
<source>Error loading wallet.dat</source> <source>Error loading wallet.dat</source>
<translation> wallet.dat </translation> <translation> wallet.dat </translation>
</message> </message>
<message>
<source>Force safe mode (default: %u)</source>
<translation>(: %u)</translation>
</message>
<message>
<source>Generate coins (default: %u)</source>
<translation>(: %u)</translation>
</message>
<message>
<source>How many blocks to check at startup (default: %u, 0 = all)</source>
<translation>(: %u, 0 )</translation>
</message>
<message>
<source>Include IP addresses in debug output (default: %u)</source>
<translation>(: %u)</translation>
</message>
<message> <message>
<source>Invalid -proxy address: '%s'</source> <source>Invalid -proxy address: '%s'</source>
<translation> -proxy : '%s'</translation> <translation> -proxy : '%s'</translation>
</message> </message>
<message>
<source>Limit size of signature cache to &lt;n&gt; entries (default: %u)</source>
<translation> &lt;n&gt; (: %u)</translation>
</message>
<message>
<source>Listen for JSON-RPC connections on &lt;port&gt; (default: %u or testnet: %u)</source>
<translation> &lt;port&gt; JSON-RPC (: %u, : %u)</translation>
</message>
<message>
<source>Listen for connections on &lt;port&gt; (default: %u or testnet: %u)</source>
<translation> &lt;port&gt; (: %u, : %u)</translation>
</message>
<message>
<source>Maintain at most &lt;n&gt; connections to peers (default: %u)</source>
<translation> &lt;n&gt; (: %u)</translation>
</message>
<message>
<source>Maximum per-connection receive buffer, &lt;n&gt;*1000 bytes (default: %u)</source>
<translation> &lt;n&gt;*1000 (: %u)</translation>
</message>
<message>
<source>Maximum per-connection send buffer, &lt;n&gt;*1000 bytes (default: %u)</source>
<translation> &lt;n&gt;*1000 (: %u)</translation>
</message>
<message>
<source>Only accept block chain matching built-in checkpoints (default: %u)</source>
<translation>(: %u)</translation>
</message>
<message>
<source>Prepend debug output with timestamp (default: %u)</source>
<translation>(: %u)</translation>
</message>
<message>
<source>Print block tree on startup (default: %u)</source>
<translation>(: %u)</translation>
</message>
<message>
<source>Relay and mine data carrier transactions (default: %u)</source>
<translation>(: %u)</translation>
</message>
<message>
<source>Relay non-P2SH multisig (default: %u)</source>
<translation> P2SH (: %u)</translation>
</message>
<message>
<source>Run a thread to flush wallet periodically (default: %u)</source>
<translation>(: %u)</translation>
</message>
<message>
<source>Server certificate file (default: %s)</source>
<translation>(: %s)</translation>
</message>
<message>
<source>Server private key (default: %s)</source>
<translation>(: %s)</translation>
</message>
<message>
<source>Set key pool size to &lt;n&gt; (default: %u)</source>
<translation> &lt;n&gt; (: %u)</translation>
</message>
<message>
<source>Set minimum block size in bytes (default: %u)</source>
<translation>(: %u)</translation>
</message>
<message>
<source>Set the number of threads to service RPC calls (default: %d)</source>
<translation> RPC (: %d)</translation>
</message>
<message>
<source>Sets the DB_PRIVATE flag in the wallet db environment (default: %u)</source>
<translation> DB_PRIVATE (: %u)</translation>
</message>
<message>
<source>Specify configuration file (default: %s)</source>
<translation>(: %s)</translation>
</message>
<message>
<source>Specify connection timeout in milliseconds (minimum: 1, default: %d)</source>
<translation> (最少值: 1, : %d)</translation>
</message>
<message>
<source>Specify pid file (default: %s)</source>
<translation>(: %s)</translation>
</message>
<message>
<source>Spend unconfirmed change when sending transactions (default: %u)</source>
<translation>(: %u)</translation>
</message>
<message>
<source>Stop running after importing blocks from disk (default: %u)</source>
<translation>(: %u)</translation>
</message>
<message>
<source>Threshold for disconnecting misbehaving peers (default: %u)</source>
<translation> (: %u)</translation>
</message>
<message> <message>
<source>Unknown network specified in -onlynet: '%s'</source> <source>Unknown network specified in -onlynet: '%s'</source>
<translation> -onlynet : '%s'</translation> <translation> -onlynet : '%s'</translation>

View file

@ -11,24 +11,73 @@
static const struct { static const struct {
const char *networkId; const char *networkId;
const char *appName; const char *appName;
const char *appIcon; const int iconColorHueShift;
const int iconColorSaturationReduction;
const char *titleAddText; const char *titleAddText;
const char *splashImage;
} network_styles[] = { } network_styles[] = {
{"main", QAPP_APP_NAME_DEFAULT, ":/icons/bitcoin", "", ":/images/splash"}, {"main", QAPP_APP_NAME_DEFAULT, 0, 0, ""},
{"newcc", QAPP_APP_NAME_DEFAULT, ":/icons/bitcoin", "", ":/images/splash"}, {"newcc", QAPP_APP_NAME_DEFAULT, 0, 0, ""},
{"test", QAPP_APP_NAME_TESTNET, ":/icons/bitcoin_testnet", QT_TRANSLATE_NOOP("SplashScreen", "[testnet]"), ":/images/splash_testnet"}, {"test", QAPP_APP_NAME_TESTNET, 70, 30, QT_TRANSLATE_NOOP("SplashScreen", "[testnet]")},
{"regtest", QAPP_APP_NAME_TESTNET, ":/icons/bitcoin_testnet", "[regtest]", ":/images/splash_testnet"} {"regtest", QAPP_APP_NAME_TESTNET, 160, 30, "[regtest]"}
}; };
static const unsigned network_styles_count = sizeof(network_styles)/sizeof(*network_styles); static const unsigned network_styles_count = sizeof(network_styles)/sizeof(*network_styles);
// titleAddText needs to be const char* for tr() // titleAddText needs to be const char* for tr()
NetworkStyle::NetworkStyle(const QString &appName, const QString &appIcon, const char *titleAddText, const QString &splashImage): NetworkStyle::NetworkStyle(const QString &appName, const int iconColorHueShift, const int iconColorSaturationReduction, const char *titleAddText):
appName(appName), appName(appName),
appIcon(appIcon), titleAddText(qApp->translate("SplashScreen", titleAddText))
titleAddText(qApp->translate("SplashScreen", titleAddText)),
splashImage(splashImage)
{ {
// load pixmap
QPixmap pixmap(":/icons/bitcoin");
if(iconColorHueShift != 0 && iconColorSaturationReduction != 0)
{
// generate QImage from QPixmap
QImage img = pixmap.toImage();
int h,s,l,a;
// traverse though lines
for(int y=0;y<img.height();y++)
{
QRgb *scL = reinterpret_cast< QRgb *>( img.scanLine( y ) );
// loop through pixels
for(int x=0;x<img.width();x++)
{
// preserve alpha because QColor::getHsl doesen't return the alpha value
a = qAlpha(scL[x]);
QColor col(scL[x]);
// get hue value
col.getHsl(&h,&s,&l);
// rotate color on RGB color circle
// 70° should end up with the typical "testnet" green
h+=iconColorHueShift;
// change saturation value
if(s>iconColorSaturationReduction)
{
s -= iconColorSaturationReduction;
}
col.setHsl(h,s,l,a);
// set the pixel
scL[x] = col.rgba();
}
}
//convert back to QPixmap
#if QT_VERSION >= 0x040700
pixmap.convertFromImage(img);
#else
pixmap = QPixmap::fromImage(img);
#endif
}
appIcon = QIcon(pixmap);
trayAndWindowIcon = QIcon(pixmap.scaled(QSize(256,256)));
} }
const NetworkStyle *NetworkStyle::instantiate(const QString &networkId) const NetworkStyle *NetworkStyle::instantiate(const QString &networkId)
@ -39,9 +88,9 @@ const NetworkStyle *NetworkStyle::instantiate(const QString &networkId)
{ {
return new NetworkStyle( return new NetworkStyle(
network_styles[x].appName, network_styles[x].appName,
network_styles[x].appIcon, network_styles[x].iconColorHueShift,
network_styles[x].titleAddText, network_styles[x].iconColorSaturationReduction,
network_styles[x].splashImage); network_styles[x].titleAddText);
} }
} }
return 0; return 0;

View file

@ -18,16 +18,16 @@ public:
const QString &getAppName() const { return appName; } const QString &getAppName() const { return appName; }
const QIcon &getAppIcon() const { return appIcon; } const QIcon &getAppIcon() const { return appIcon; }
const QIcon &getTrayAndWindowIcon() const { return trayAndWindowIcon; }
const QString &getTitleAddText() const { return titleAddText; } const QString &getTitleAddText() const { return titleAddText; }
const QPixmap &getSplashImage() const { return splashImage; }
private: private:
NetworkStyle(const QString &appName, const QString &appIcon, const char *titleAddText, const QString &splashImage); NetworkStyle(const QString &appName, const int iconColorHueShift, const int iconColorSaturationReduction, const char *titleAddText);
QString appName; QString appName;
QIcon appIcon; QIcon appIcon;
QIcon trayAndWindowIcon;
QString titleAddText; QString titleAddText;
QPixmap splashImage;
}; };
#endif // BITCOIN_QT_NETWORKSTYLE_H #endif // BITCOIN_QT_NETWORKSTYLE_H

View file

@ -1,5 +1,5 @@
// Copyright (c) 2011-2013 The Bitcoin developers // Copyright (c) 2011-2014 The Bitcoin developers
// Distributed under the MIT/X11 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.
// //

View file

@ -1,5 +1,5 @@
// Copyright (c) 2011-2013 The Bitcoin developers // Copyright (c) 2011-2014 The Bitcoin developers
// Distributed under the MIT/X11 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_QT_PAYMENTREQUESTPLUS_H #ifndef BITCOIN_QT_PAYMENTREQUESTPLUS_H

View file

@ -1,11 +1,10 @@
// Copyright (c) 2011-2013 The Bitcoin developers // Copyright (c) 2011-2014 The Bitcoin developers
// Distributed under the MIT/X11 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.
#include "paymentserver.h" #include "paymentserver.h"
#include "bitcoinunits.h" #include "bitcoinunits.h"
#include "guiconstants.h"
#include "guiutil.h" #include "guiutil.h"
#include "optionsmodel.h" #include "optionsmodel.h"
@ -19,6 +18,7 @@
#include <openssl/x509.h> #include <openssl/x509.h>
#include <openssl/x509_vfy.h> #include <openssl/x509_vfy.h>
#include <QApplication> #include <QApplication>
#include <QByteArray> #include <QByteArray>
#include <QDataStream> #include <QDataStream>
@ -46,14 +46,20 @@
#include <QUrlQuery> #include <QUrlQuery>
#endif #endif
using namespace std;
using namespace boost; using namespace boost;
using namespace std;
const int BITCOIN_IPC_CONNECT_TIMEOUT = 1000; // milliseconds const int BITCOIN_IPC_CONNECT_TIMEOUT = 1000; // milliseconds
const QString BITCOIN_IPC_PREFIX("bitcoin:"); const QString BITCOIN_IPC_PREFIX("bitcoin:");
const char* BITCOIN_REQUEST_MIMETYPE = "application/bitcoin-paymentrequest"; // BIP70 payment protocol messages
const char* BITCOIN_PAYMENTACK_MIMETYPE = "application/bitcoin-paymentack"; const char* BIP70_MESSAGE_PAYMENTACK = "PaymentACK";
const char* BITCOIN_PAYMENTACK_CONTENTTYPE = "application/bitcoin-payment"; const char* BIP70_MESSAGE_PAYMENTREQUEST = "PaymentRequest";
// BIP71 payment protocol media types
const char* BIP71_MIMETYPE_PAYMENT = "application/bitcoin-payment";
const char* BIP71_MIMETYPE_PAYMENTACK = "application/bitcoin-paymentack";
const char* BIP71_MIMETYPE_PAYMENTREQUEST = "application/bitcoin-paymentrequest";
// BIP70 max payment request size in bytes (DoS protection)
const qint64 BIP70_MAX_PAYMENTREQUEST_SIZE = 50000;
X509_STORE* PaymentServer::certStore = NULL; X509_STORE* PaymentServer::certStore = NULL;
void PaymentServer::freeCertStore() void PaymentServer::freeCertStore()
@ -184,7 +190,7 @@ void PaymentServer::LoadRootCAs(X509_STORE* _store)
// Warning: ipcSendCommandLine() is called early in init, // Warning: ipcSendCommandLine() is called early in init,
// so don't use "emit message()", but "QMessageBox::"! // so don't use "emit message()", but "QMessageBox::"!
// //
bool PaymentServer::ipcParseCommandLine(int argc, char* argv[]) void PaymentServer::ipcParseCommandLine(int argc, char* argv[])
{ {
for (int i = 1; i < argc; i++) for (int i = 1; i < argc; i++)
{ {
@ -192,6 +198,10 @@ bool PaymentServer::ipcParseCommandLine(int argc, char* argv[])
if (arg.startsWith("-")) if (arg.startsWith("-"))
continue; continue;
// If the bitcoin: URI contains a payment request, we are not able to detect the
// network as that would require fetching and parsing the payment request.
// That means clicking such an URI which contains a testnet payment request
// will start a mainnet instance and throw a "wrong network" error.
if (arg.startsWith(BITCOIN_IPC_PREFIX, Qt::CaseInsensitive)) // bitcoin: URI if (arg.startsWith(BITCOIN_IPC_PREFIX, Qt::CaseInsensitive)) // bitcoin: URI
{ {
savedPaymentRequests.append(arg); savedPaymentRequests.append(arg);
@ -216,7 +226,7 @@ bool PaymentServer::ipcParseCommandLine(int argc, char* argv[])
savedPaymentRequests.append(arg); savedPaymentRequests.append(arg);
PaymentRequestPlus request; PaymentRequestPlus request;
if (readPaymentRequest(arg, request)) if (readPaymentRequestFromFile(arg, request))
{ {
if (request.getDetails().network() == "main") if (request.getDetails().network() == "main")
{ {
@ -235,7 +245,6 @@ bool PaymentServer::ipcParseCommandLine(int argc, char* argv[])
qWarning() << "PaymentServer::ipcSendCommandLine : Payment request file does not exist: " << arg; qWarning() << "PaymentServer::ipcSendCommandLine : Payment request file does not exist: " << arg;
} }
} }
return true;
} }
// //
@ -254,6 +263,7 @@ bool PaymentServer::ipcSendCommandLine()
if (!socket->waitForConnected(BITCOIN_IPC_CONNECT_TIMEOUT)) if (!socket->waitForConnected(BITCOIN_IPC_CONNECT_TIMEOUT))
{ {
delete socket; delete socket;
socket = NULL;
return false; return false;
} }
@ -262,12 +272,14 @@ bool PaymentServer::ipcSendCommandLine()
out.setVersion(QDataStream::Qt_4_0); out.setVersion(QDataStream::Qt_4_0);
out << r; out << r;
out.device()->seek(0); out.device()->seek(0);
socket->write(block); socket->write(block);
socket->flush(); socket->flush();
socket->waitForBytesWritten(BITCOIN_IPC_CONNECT_TIMEOUT); socket->waitForBytesWritten(BITCOIN_IPC_CONNECT_TIMEOUT);
socket->disconnectFromServer(); socket->disconnectFromServer();
delete socket; delete socket;
socket = NULL;
fResult = true; fResult = true;
} }
@ -440,7 +452,7 @@ void PaymentServer::handleURIOrFile(const QString& s)
{ {
PaymentRequestPlus request; PaymentRequestPlus request;
SendCoinsRecipient recipient; SendCoinsRecipient recipient;
if (!readPaymentRequest(s, request)) if (!readPaymentRequestFromFile(s, request))
{ {
emit message(tr("Payment request file handling"), emit message(tr("Payment request file handling"),
tr("Payment request file cannot be read! This can be caused by an invalid payment request file."), tr("Payment request file cannot be read! This can be caused by an invalid payment request file."),
@ -474,18 +486,25 @@ void PaymentServer::handleURIConnection()
handleURIOrFile(msg); handleURIOrFile(msg);
} }
bool PaymentServer::readPaymentRequest(const QString& filename, PaymentRequestPlus& request) //
// Warning: readPaymentRequestFromFile() is used in ipcSendCommandLine()
// so don't use "emit message()", but "QMessageBox::"!
//
bool PaymentServer::readPaymentRequestFromFile(const QString& filename, PaymentRequestPlus& request)
{ {
QFile f(filename); QFile f(filename);
if (!f.open(QIODevice::ReadOnly)) if (!f.open(QIODevice::ReadOnly)) {
{ qWarning() << QString("PaymentServer::%1: Failed to open %2").arg(__func__).arg(filename);
qWarning() << "PaymentServer::readPaymentRequest : Failed to open " << filename;
return false; return false;
} }
if (f.size() > MAX_PAYMENT_REQUEST_SIZE) // BIP70 DoS protection
{ if (f.size() > BIP70_MAX_PAYMENTREQUEST_SIZE) {
qWarning() << "PaymentServer::readPaymentRequest : " << filename << " too large"; qWarning() << QString("PaymentServer::%1: Payment request %2 is too large (%3 bytes, allowed %4 bytes).")
.arg(__func__)
.arg(filename)
.arg(f.size())
.arg(BIP70_MAX_PAYMENTREQUEST_SIZE);
return false; return false;
} }
@ -580,10 +599,10 @@ bool PaymentServer::processPaymentRequest(PaymentRequestPlus& request, SendCoins
void PaymentServer::fetchRequest(const QUrl& url) void PaymentServer::fetchRequest(const QUrl& url)
{ {
QNetworkRequest netRequest; QNetworkRequest netRequest;
netRequest.setAttribute(QNetworkRequest::User, "PaymentRequest"); netRequest.setAttribute(QNetworkRequest::User, BIP70_MESSAGE_PAYMENTREQUEST);
netRequest.setUrl(url); netRequest.setUrl(url);
netRequest.setRawHeader("User-Agent", CLIENT_NAME.c_str()); netRequest.setRawHeader("User-Agent", CLIENT_NAME.c_str());
netRequest.setRawHeader("Accept", BITCOIN_REQUEST_MIMETYPE); netRequest.setRawHeader("Accept", BIP71_MIMETYPE_PAYMENTREQUEST);
netManager->get(netRequest); netManager->get(netRequest);
} }
@ -594,11 +613,11 @@ void PaymentServer::fetchPaymentACK(CWallet* wallet, SendCoinsRecipient recipien
return; return;
QNetworkRequest netRequest; QNetworkRequest netRequest;
netRequest.setAttribute(QNetworkRequest::User, "PaymentACK"); netRequest.setAttribute(QNetworkRequest::User, BIP70_MESSAGE_PAYMENTACK);
netRequest.setUrl(QString::fromStdString(details.payment_url())); netRequest.setUrl(QString::fromStdString(details.payment_url()));
netRequest.setHeader(QNetworkRequest::ContentTypeHeader, BITCOIN_PAYMENTACK_CONTENTTYPE); netRequest.setHeader(QNetworkRequest::ContentTypeHeader, BIP71_MIMETYPE_PAYMENT);
netRequest.setRawHeader("User-Agent", CLIENT_NAME.c_str()); netRequest.setRawHeader("User-Agent", CLIENT_NAME.c_str());
netRequest.setRawHeader("Accept", BITCOIN_PAYMENTACK_MIMETYPE); netRequest.setRawHeader("Accept", BIP71_MIMETYPE_PAYMENTACK);
payments::Payment payment; payments::Payment payment;
payment.set_merchant_data(details.merchant_data()); payment.set_merchant_data(details.merchant_data());
@ -616,7 +635,6 @@ void PaymentServer::fetchPaymentACK(CWallet* wallet, SendCoinsRecipient recipien
else { else {
CPubKey newKey; CPubKey newKey;
if (wallet->GetKeyFromPool(newKey)) { if (wallet->GetKeyFromPool(newKey)) {
LOCK(wallet->cs_wallet); // SetAddressBook
CKeyID keyID = newKey.GetID(); CKeyID keyID = newKey.GetID();
wallet->SetAddressBook(keyID, strAccount, "refund"); wallet->SetAddressBook(keyID, strAccount, "refund");
@ -646,13 +664,26 @@ void PaymentServer::fetchPaymentACK(CWallet* wallet, SendCoinsRecipient recipien
void PaymentServer::netRequestFinished(QNetworkReply* reply) void PaymentServer::netRequestFinished(QNetworkReply* reply)
{ {
reply->deleteLater(); reply->deleteLater();
if (reply->error() != QNetworkReply::NoError)
{ // BIP70 DoS protection
if (reply->size() > BIP70_MAX_PAYMENTREQUEST_SIZE) {
QString msg = tr("Payment request %2 is too large (%3 bytes, allowed %4 bytes).")
.arg(__func__)
.arg(reply->request().url().toString())
.arg(reply->size())
.arg(BIP70_MAX_PAYMENTREQUEST_SIZE);
qWarning() << QString("PaymentServer::%1:").arg(__func__) << msg;
emit message(tr("Payment request DoS protection"), msg, CClientUIInterface::MSG_ERROR);
return;
}
if (reply->error() != QNetworkReply::NoError) {
QString msg = tr("Error communicating with %1: %2") QString msg = tr("Error communicating with %1: %2")
.arg(reply->request().url().toString()) .arg(reply->request().url().toString())
.arg(reply->errorString()); .arg(reply->errorString());
qWarning() << "PaymentServer::netRequestFinished : " << msg; qWarning() << "PaymentServer::netRequestFinished: " << msg;
emit message(tr("Payment request error"), msg, CClientUIInterface::MSG_ERROR); emit message(tr("Payment request error"), msg, CClientUIInterface::MSG_ERROR);
return; return;
} }
@ -660,7 +691,7 @@ void PaymentServer::netRequestFinished(QNetworkReply* reply)
QByteArray data = reply->readAll(); QByteArray data = reply->readAll();
QString requestType = reply->request().attribute(QNetworkRequest::User).toString(); QString requestType = reply->request().attribute(QNetworkRequest::User).toString();
if (requestType == "PaymentRequest") if (requestType == BIP70_MESSAGE_PAYMENTREQUEST)
{ {
PaymentRequestPlus request; PaymentRequestPlus request;
SendCoinsRecipient recipient; SendCoinsRecipient recipient;
@ -676,7 +707,7 @@ void PaymentServer::netRequestFinished(QNetworkReply* reply)
return; return;
} }
else if (requestType == "PaymentACK") else if (requestType == BIP70_MESSAGE_PAYMENTACK)
{ {
payments::PaymentACK paymentACK; payments::PaymentACK paymentACK;
if (!paymentACK.ParseFromArray(data.data(), data.size())) if (!paymentACK.ParseFromArray(data.data(), data.size()))

View file

@ -1,5 +1,5 @@
// Copyright (c) 2011-2014 The Bitcoin developers // Copyright (c) 2011-2014 The Bitcoin developers
// Distributed under the MIT/X11 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_QT_PAYMENTSERVER_H #ifndef BITCOIN_QT_PAYMENTSERVER_H
@ -40,6 +40,8 @@
class OptionsModel; class OptionsModel;
class CWallet;
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QApplication; class QApplication;
class QByteArray; class QByteArray;
@ -50,7 +52,8 @@ class QSslError;
class QUrl; class QUrl;
QT_END_NAMESPACE QT_END_NAMESPACE
class CWallet; // BIP70 max payment request size in bytes (DoS protection)
extern const qint64 BIP70_MAX_PAYMENTREQUEST_SIZE;
class PaymentServer : public QObject class PaymentServer : public QObject
{ {
@ -59,7 +62,7 @@ class PaymentServer : public QObject
public: public:
// Parse URIs on command line // Parse URIs on command line
// Returns false on error // Returns false on error
static bool ipcParseCommandLine(int argc, char *argv[]); static void ipcParseCommandLine(int argc, char *argv[]);
// Returns true if there were URIs on the command line // Returns true if there were URIs on the command line
// which were successfully sent to an already-running // which were successfully sent to an already-running
@ -85,6 +88,9 @@ public:
// OptionsModel is used for getting proxy settings and display unit // OptionsModel is used for getting proxy settings and display unit
void setOptionsModel(OptionsModel *optionsModel); void setOptionsModel(OptionsModel *optionsModel);
// This is now public, because we use it in paymentservertests.cpp
static bool readPaymentRequestFromFile(const QString& filename, PaymentRequestPlus& request);
signals: signals:
// Fired when a valid payment request is received // Fired when a valid payment request is received
void receivedPaymentRequest(SendCoinsRecipient); void receivedPaymentRequest(SendCoinsRecipient);
@ -118,7 +124,6 @@ protected:
bool eventFilter(QObject *object, QEvent *event); bool eventFilter(QObject *object, QEvent *event);
private: private:
static bool readPaymentRequest(const QString& filename, PaymentRequestPlus& request);
bool processPaymentRequest(PaymentRequestPlus& request, SendCoinsRecipient& recipient); bool processPaymentRequest(PaymentRequestPlus& request, SendCoinsRecipient& recipient);
void fetchRequest(const QUrl& url); void fetchRequest(const QUrl& url);

View file

@ -1,5 +1,4 @@
IDI_ICON1 ICON DISCARDABLE "icons/bitcoin.ico" IDI_ICON1 ICON DISCARDABLE "icons/bitcoin.ico"
IDI_ICON2 ICON DISCARDABLE "icons/bitcoin_testnet.ico"
#include <windows.h> // needed for VERSIONINFO #include <windows.h> // needed for VERSIONINFO
#include "../../clientversion.h" // holds the needed client version information #include "../../clientversion.h" // holds the needed client version information

BIN
src/qt/res/icons/about.png Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 784 B

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 306 KiB

After

Width:  |  Height:  |  Size: 342 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 883 B

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 762 B

After

Width:  |  Height:  |  Size: 16 KiB

BIN
src/qt/res/icons/info.png Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
src/qt/res/icons/open.png Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Some files were not shown because too many files have changed in this diff Show more