diff options
74 files changed, 2928 insertions, 378 deletions
@@ -1,4 +1,4 @@ -Copyright (c) 2009-2015 Bitcoin Developers +Copyright (c) 2009-2015 The Bitcoin Core developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Makefile.am b/Makefile.am index 2cb933d5bb..56c8c09223 100644 --- a/Makefile.am +++ b/Makefile.am @@ -14,8 +14,8 @@ BITCOIN_QT_BIN=$(top_builddir)/src/qt/bitcoin-qt$(EXEEXT) BITCOIN_CLI_BIN=$(top_builddir)/src/bitcoin-cli$(EXEEXT) BITCOIN_WIN_INSTALLER=$(PACKAGE)-$(PACKAGE_VERSION)-win$(WINDOWS_BITS)-setup$(EXEEXT) -OSX_APP=Bitcoin-Qt.app -OSX_DMG=Bitcoin-Qt.dmg +OSX_APP=Bitcoin-Core.app +OSX_DMG=Bitcoin-Core.dmg OSX_BACKGROUND_IMAGE=background.tiff OSX_DEPLOY_SCRIPT=$(top_srcdir)/contrib/macdeploy/macdeployqtplus OSX_FANCY_PLIST=$(top_srcdir)/contrib/macdeploy/fancy.plist @@ -106,7 +106,7 @@ $(APP_DIST_DIR)/Applications: $(APP_DIST_EXTRAS): $(APP_DIST_DIR)/$(OSX_APP)/Contents/MacOS/Bitcoin-Qt $(OSX_DMG): $(APP_DIST_EXTRAS) - $(GENISOIMAGE) -no-cache-inodes -D -l -probe -V "Bitcoin-Qt" -no-pad -r -apple -o $@ dist + $(GENISOIMAGE) -no-cache-inodes -D -l -probe -V "Bitcoin-Core" -no-pad -r -apple -o $@ dist $(APP_DIST_DIR)/.background/$(OSX_BACKGROUND_IMAGE): contrib/macdeploy/$(OSX_BACKGROUND_IMAGE) $(MKDIR_P) $(@D) diff --git a/contrib/gitian-descriptors/gitian-osx-signer.yml b/contrib/gitian-descriptors/gitian-osx-signer.yml index 1792f9de3f..afe03c7a22 100644 --- a/contrib/gitian-descriptors/gitian-osx-signer.yml +++ b/contrib/gitian-descriptors/gitian-osx-signer.yml @@ -33,5 +33,5 @@ script: | tar -xf ${UNSIGNED} ./detached-sig-apply.sh ${UNSIGNED} signature.tar.gz - ${WRAP_DIR}/genisoimage -no-cache-inodes -D -l -probe -V "Bitcoin-Qt" -no-pad -r -apple -o uncompressed.dmg signed-app + ${WRAP_DIR}/genisoimage -no-cache-inodes -D -l -probe -V "Bitcoin-Core" -no-pad -r -apple -o uncompressed.dmg signed-app ${WRAP_DIR}/dmg dmg uncompressed.dmg ${OUTDIR}/${SIGNED} diff --git a/contrib/gitian-descriptors/gitian-osx.yml b/contrib/gitian-descriptors/gitian-osx.yml index b401482c70..61eb5b1001 100644 --- a/contrib/gitian-descriptors/gitian-osx.yml +++ b/contrib/gitian-descriptors/gitian-osx.yml @@ -120,7 +120,7 @@ script: | popd make deploy - ${WRAP_DIR}/dmg dmg Bitcoin-Qt.dmg ${OUTDIR}/${DISTNAME}-osx-unsigned.dmg + ${WRAP_DIR}/dmg dmg Bitcoin-Core.dmg ${OUTDIR}/${DISTNAME}-osx-unsigned.dmg cd installed find . -name "lib*.la" -delete diff --git a/contrib/init/bitcoind.openrc b/contrib/init/bitcoind.openrc index b0ac5e31e1..a94f03680d 100644 --- a/contrib/init/bitcoind.openrc +++ b/contrib/init/bitcoind.openrc @@ -19,7 +19,7 @@ BITCOIND_NICE=${BITCOIND_NICE:-${NICELEVEL:-0}} BITCOIND_OPTS="${BITCOIND_OPTS:-${BITCOIN_OPTS}}" name="Bitcoin Core Daemon" -description="Bitcoin crypto-currency p2p network daemon" +description="Bitcoin cryptocurrency P2P network daemon" command="/usr/bin/bitcoind" command_args="-pid=\"${BITCOIND_PIDFILE}\" \ diff --git a/contrib/linearize/example-linearize.cfg b/contrib/linearize/example-linearize.cfg index e0fef13886..38da02e66c 100644 --- a/contrib/linearize/example-linearize.cfg +++ b/contrib/linearize/example-linearize.cfg @@ -4,13 +4,23 @@ rpcuser=someuser rpcpassword=somepassword host=127.0.0.1 port=8332 +#port=18332 # bootstrap.dat hashlist settings (linearize-hashes) max_height=313000 # bootstrap.dat input/output settings (linearize-data) + +# mainnet netmagic=f9beb4d9 +genesis=000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f input=/home/example/.bitcoin/blocks + +# testnet +#netmagic=0b110907 +#genesis=000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943 +#input=/home/example/.bitcoin/testnet3/blocks + output_file=/home/example/Downloads/bootstrap.dat hashlist=hashlist.txt split_year=1 diff --git a/contrib/linearize/linearize-data.py b/contrib/linearize/linearize-data.py index a3a1173b1f..7947c6bf72 100755 --- a/contrib/linearize/linearize-data.py +++ b/contrib/linearize/linearize-data.py @@ -205,7 +205,7 @@ class BlockDataCopier: inMagic = inhdr[:4] if (inMagic != self.settings['netmagic']): - print("Invalid magic: " + inMagic) + print("Invalid magic: " + inMagic.encode('hex')) return inLenLE = inhdr[4:] su = struct.unpack("<I", inLenLE) @@ -265,6 +265,8 @@ if __name__ == '__main__': if 'netmagic' not in settings: settings['netmagic'] = 'f9beb4d9' + if 'genesis' not in settings: + settings['genesis'] = '000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f' if 'input' not in settings: settings['input'] = 'input' if 'hashlist' not in settings: @@ -291,7 +293,7 @@ if __name__ == '__main__': blkindex = get_block_hashes(settings) blkmap = mkblockmap(blkindex) - if not "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f" in blkmap: + if not settings['genesis'] in blkmap: print("Genesis block not found in hashlist") else: BlockDataCopier(settings, blkindex, blkmap).run() diff --git a/contrib/macdeploy/DS_Store b/contrib/macdeploy/DS_Store Binary files differindex 099960712a..ca19b207c0 100644 --- a/contrib/macdeploy/DS_Store +++ b/contrib/macdeploy/DS_Store diff --git a/contrib/macdeploy/README.md b/contrib/macdeploy/README.md index 0aa57b4777..6163734e62 100644 --- a/contrib/macdeploy/README.md +++ b/contrib/macdeploy/README.md @@ -11,5 +11,5 @@ This script should not be run manually, instead, after building as usual: During the process, the disk image window will pop up briefly where the fancy settings are applied. This is normal, please do not interfere. -When finished, it will produce `Bitcoin-Qt.dmg`. +When finished, it will produce `Bitcoin-Core.dmg`. diff --git a/contrib/macdeploy/detached-sig-apply.sh b/contrib/macdeploy/detached-sig-apply.sh index 7b3eb1b197..169f690438 100755 --- a/contrib/macdeploy/detached-sig-apply.sh +++ b/contrib/macdeploy/detached-sig-apply.sh @@ -1,11 +1,10 @@ #!/bin/sh set -e -UNSIGNED=$1 -SIGNATURE=$2 +UNSIGNED="$1" +SIGNATURE="$2" ARCH=x86_64 ROOTDIR=dist -BUNDLE=${ROOTDIR}/Bitcoin-Qt.app TEMPDIR=signed.temp OUTDIR=signed-app @@ -31,21 +30,21 @@ if [ -z "${CODESIGN_ALLOCATE}" ]; then CODESIGN_ALLOCATE=${TEMPDIR}/codesign_allocate fi -for i in `find ${TEMPDIR} -name "*.sign"`; do - SIZE=`stat -c %s ${i}` - TARGET_FILE=`echo ${i} | sed 's/\.sign$//'` +find ${TEMPDIR} -name "*.sign" | while read i; do + SIZE=`stat -c %s "${i}"` + TARGET_FILE="`echo "${i}" | sed 's/\.sign$//'`" echo "Allocating space for the signature of size ${SIZE} in ${TARGET_FILE}" - ${CODESIGN_ALLOCATE} -i ${TARGET_FILE} -a ${ARCH} ${SIZE} -o ${i}.tmp + ${CODESIGN_ALLOCATE} -i "${TARGET_FILE}" -a ${ARCH} ${SIZE} -o "${i}.tmp" - OFFSET=`${PAGESTUFF} ${i}.tmp -p | tail -2 | grep offset | sed 's/[^0-9]*//g'` + OFFSET=`${PAGESTUFF} "${i}.tmp" -p | tail -2 | grep offset | sed 's/[^0-9]*//g'` if [ -z ${QUIET} ]; then echo "Attaching signature at offset ${OFFSET}" fi - dd if=$i of=${i}.tmp bs=1 seek=${OFFSET} count=${SIZE} 2>/dev/null - mv ${i}.tmp ${TARGET_FILE} - rm ${i} + dd if="$i" of="${i}.tmp" bs=1 seek=${OFFSET} count=${SIZE} 2>/dev/null + mv "${i}.tmp" "${TARGET_FILE}" + rm "${i}" echo "Success." done mv ${TEMPDIR}/${ROOTDIR} ${OUTDIR} diff --git a/contrib/macdeploy/detached-sig-create.sh b/contrib/macdeploy/detached-sig-create.sh index aff4f08da8..fd7314bd7e 100755 --- a/contrib/macdeploy/detached-sig-create.sh +++ b/contrib/macdeploy/detached-sig-create.sh @@ -2,7 +2,7 @@ set -e ROOTDIR=dist -BUNDLE=${ROOTDIR}/Bitcoin-Qt.app +BUNDLE="${ROOTDIR}/Bitcoin Core.app" CODESIGN=codesign TEMPDIR=sign.temp TEMPLIST=${TEMPDIR}/signatures.txt @@ -19,19 +19,19 @@ mkdir -p ${TEMPDIR} ${CODESIGN} -f --file-list ${TEMPLIST} "$@" "${BUNDLE}" -for i in `grep -v CodeResources ${TEMPLIST}`; do - TARGETFILE="${BUNDLE}/`echo ${i} | sed "s|.*${BUNDLE}/||"`" - SIZE=`pagestuff $i -p | tail -2 | grep size | sed 's/[^0-9]*//g'` - OFFSET=`pagestuff $i -p | tail -2 | grep offset | sed 's/[^0-9]*//g'` +grep -v CodeResources < "${TEMPLIST}" | while read i; do + TARGETFILE="${BUNDLE}/`echo "${i}" | sed "s|.*${BUNDLE}/||"`" + SIZE=`pagestuff "$i" -p | tail -2 | grep size | sed 's/[^0-9]*//g'` + OFFSET=`pagestuff "$i" -p | tail -2 | grep offset | sed 's/[^0-9]*//g'` SIGNFILE="${TEMPDIR}/${TARGETFILE}.sign" - DIRNAME="`dirname ${SIGNFILE}`" + DIRNAME="`dirname "${SIGNFILE}"`" mkdir -p "${DIRNAME}" echo "Adding detached signature for: ${TARGETFILE}. Size: ${SIZE}. Offset: ${OFFSET}" - dd if=$i of=${SIGNFILE} bs=1 skip=${OFFSET} count=${SIZE} 2>/dev/null + dd if="$i" of="${SIGNFILE}" bs=1 skip=${OFFSET} count=${SIZE} 2>/dev/null done -for i in `grep CodeResources ${TEMPLIST}`; do - TARGETFILE="${BUNDLE}/`echo ${i} | sed "s|.*${BUNDLE}/||"`" +grep CodeResources < "${TEMPLIST}" | while read i; do + TARGETFILE="${BUNDLE}/`echo "${i}" | sed "s|.*${BUNDLE}/||"`" RESOURCE="${TEMPDIR}/${TARGETFILE}" DIRNAME="`dirname "${RESOURCE}"`" mkdir -p "${DIRNAME}" @@ -41,6 +41,6 @@ done rm ${TEMPLIST} -tar -C ${TEMPDIR} -czf ${OUT} . -rm -rf ${TEMPDIR} +tar -C "${TEMPDIR}" -czf "${OUT}" . +rm -rf "${TEMPDIR}" echo "Created ${OUT}" diff --git a/contrib/macdeploy/fancy.plist b/contrib/macdeploy/fancy.plist index ef277a7f14..a333f5dccd 100644 --- a/contrib/macdeploy/fancy.plist +++ b/contrib/macdeploy/fancy.plist @@ -22,7 +22,7 @@ <integer>370</integer> <integer>156</integer> </array> - <key>Bitcoin-Qt.app</key> + <key>Bitcoin Core.app</key> <array> <integer>128</integer> <integer>156</integer> diff --git a/contrib/macdeploy/macdeployqtplus b/contrib/macdeploy/macdeployqtplus index 0eb6b2c84d..a625987ca7 100755 --- a/contrib/macdeploy/macdeployqtplus +++ b/contrib/macdeploy/macdeployqtplus @@ -155,7 +155,7 @@ class FrameworkInfo(object): class ApplicationBundleInfo(object): def __init__(self, path): self.path = path - appName = os.path.splitext(os.path.basename(path))[0] + appName = "Bitcoin-Qt" self.binaryPath = os.path.join(path, "Contents", "MacOS", appName) if not os.path.exists(self.binaryPath): raise RuntimeError("Could not find bundle binary for " + path) @@ -596,7 +596,7 @@ if os.path.exists("dist"): # ------------------------------------------------ -target = os.path.join("dist", app_bundle) +target = os.path.join("dist", "Bitcoin Core.app") if verbose >= 2: print "+ Copying source bundle +" @@ -837,7 +837,7 @@ if config.dmg is not None: items_positions.append(itemscript.substitute(params)) params = { - "disk" : "Bitcoin-Qt", + "disk" : "Bitcoin-Core", "window_bounds" : "300,300,800,620", "icon_size" : "96", "background_commands" : "", diff --git a/depends/README.md b/depends/README.md new file mode 100644 index 0000000000..2dc0b9e47e --- /dev/null +++ b/depends/README.md @@ -0,0 +1,56 @@ +### Usage + +To build dependencies for the current arch+OS: + + make + +To build for another arch/OS: + + make HOST=host-platform-triplet + +For example: + + make HOST=x86_64-w64-mingw32 -j4 + +A prefix will be generated that's suitable for plugging into Bitcoin's +configure. In the above example, a dir named i686-w64-mingw32 will be +created. To use it for Bitcoin: + + ./configure --prefix=`pwd`/depends/x86_64-w64-mingw32 + +Common `host-platform-triplets` for cross compilation are: + +- `i686-w64-mingw32` for Win32 +- `x86_64-w64-mingw32` for Win64 +- `x86_64-apple-darwin11` for MacOSX +- `arm-linux-gnueabihf` for Linux ARM + +No other options are needed, the paths are automatically configured. + +Dependency Options: +The following can be set when running make: make FOO=bar + + SOURCES_PATH: downloaded sources will be placed here + BASE_CACHE: built packages will be placed here + SDK_PATH: Path where sdk's can be found (used by OSX) + FALLBACK_DOWNLOAD_PATH: If a source file can't be fetched, try here before giving up + NO_QT: Don't download/build/cache qt and its dependencies + NO_WALLET: Don't download/build/cache libs needed to enable the wallet + NO_UPNP: Don't download/build/cache packages needed for enabling upnp + DEBUG: disable some optimizations and enable more runtime checking + +If some packages are not built, for example `make NO_WALLET=1`, the appropriate +options will be passed to bitcoin's configure. In this case, `--disable-wallet`. + +Additional targets: + + download: run 'make download' to fetch all sources without building them + download-osx: run 'make download-osx' to fetch all sources needed for osx builds + download-win: run 'make download-win' to fetch all sources needed for win builds + download-linux: run 'make download-linux' to fetch all sources needed for linux builds + +### Other documentation + +- [description.md](description.md): General description of the depends system +- [packages.md](packages.md): Steps for adding packages + diff --git a/depends/README.usage b/depends/README.usage deleted file mode 100644 index 24e1231d82..0000000000 --- a/depends/README.usage +++ /dev/null @@ -1,34 +0,0 @@ -To build dependencies for the current arch+OS: - make -To build for another arch/OS: - make HOST=host-platform-triplet && make HOST=host-platform-triplet - (For example: make HOST=i686-w64-mingw32 -j4) - -A prefix will be generated that's suitable for plugging into Bitcoin's -configure. In the above example, a dir named i686-w64-mingw32 will be -created. To use it for Bitcoin: - -./configure --prefix=`pwd`/depends/i686-w64-mingw32 - -No other options are needed, the paths are automatically configured. - -Dependency Options: -The following can be set when running make: make FOO=bar - -SOURCES_PATH: downloaded sources will be placed here -BASE_CACHE: built packages will be placed here -SDK_PATH: Path where sdk's can be found (used by OSX) -FALLBACK_DOWNLOAD_PATH: If a source file can't be fetched, try here before giving up -NO_QT: Don't download/build/cache qt and its dependencies -NO_WALLET: Don't download/build/cache libs needed to enable the wallet -NO_UPNP: Don't download/build/cache packages needed for enabling upnp -DEBUG: disable some optimizations and enable more runtime checking - -If some packages are not built, for example 'make NO_WALLET=1', the appropriate -options will be passed to bitcoin's configure. In this case, --disable-wallet. - -Additional targets: -download: run 'make download' to fetch all sources without building them -download-osx: run 'make download-osx' to fetch all sources needed for osx builds -download-win: run 'make download-win' to fetch all sources needed for win builds -download-linux: run 'make download-linux' to fetch all sources needed for linux builds diff --git a/depends/README b/depends/description.md index 55e7222697..74f9ef3f20 100644 --- a/depends/README +++ b/depends/description.md @@ -1,9 +1,7 @@ -This is a system of building and caching dependencies necessary for building -Bitcoin. - +This is a system of building and caching dependencies necessary for building Bitcoin. There are several features that make it different from most similar systems: -- It is designed to be builder and host agnostic +### It is designed to be builder and host agnostic In theory, binaries for any target OS/architecture can be created, from a builder running any OS/architecture. In practice, build-side tools must be @@ -11,18 +9,18 @@ specified when the defaults don't fit, and packages must be amended to work on new hosts. For now, a build architecture of x86_64 is assumed, either on Linux or OSX. -- No reliance on timestamps +### No reliance on timestamps File presence is used to determine what needs to be built. This makes the results distributable and easily digestable by automated builders. -- Each build only has its specified dependencies available at build-time. +### Each build only has its specified dependencies available at build-time. For each build, the sysroot is wiped and the (recursive) dependencies are installed. This makes each build deterministic, since there will never be any unknown files available to cause side-effects. -- Each package is cached and only rebuilt as needed. +### Each package is cached and only rebuilt as needed. Before building, a unique build-id is generated for each package. This id consists of a hash of all files used to build the package (Makefiles, packages, @@ -32,7 +30,7 @@ any other package that depends on it. If any of the main makefiles (Makefile, funcs.mk, etc) are changed, all packages will be rebuilt. After building, the results are cached into a tarball that can be re-used and distributed. -- Package build results are (relatively) deterministic. +### Package build results are (relatively) deterministic. Each package is configured and patched so that it will yield the same build-results with each consequent build, within a reasonable set of @@ -41,13 +39,13 @@ beyond the scope of this system. Additionally, the toolchain itself must be capable of deterministic results. When revisions are properly bumped, a cached build should represent an exact single payload. -- Sources are fetched and verified automatically +### Sources are fetched and verified automatically Each package must define its source location and checksum. The build will fail if the fetched source does not match. Sources may be pre-seeded and/or cached as desired. -- Self-cleaning +### Self-cleaning Build and staging dirs are wiped after use, and any previous version of a cached result is removed following a successful build. Automated builders diff --git a/depends/README.packages b/depends/packages.md index 6d87402ebc..7c80362509 100644 --- a/depends/README.packages +++ b/depends/packages.md @@ -4,121 +4,137 @@ variables, and defining build commands. The package "mylib" will be used here as an example General tips: -mylib_foo is written as $(package)_foo in order to make recipes more similar. +- mylib_foo is written as $(package)_foo in order to make recipes more similar. -Identifiers: +## Identifiers Each package is required to define at least these variables: - $(package)_version: + + $(package)_version: Version of the upstream library or program. If there is no version, a placeholder such as 1.0 can be used. - $(package)_download_path: + + $(package)_download_path: Location of the upstream source, without the file-name. Usually http or ftp. - $(package)_file_name: + + $(package)_file_name: The upstream source filename available at the download path. - $(package)_sha256_hash: + + $(package)_sha256_hash: The sha256 hash of the upstream file These variables are optional: - $(package)_build_subdir: + + $(package)_build_subdir: cd to this dir before running configure/build/stage commands. - $(package)_download_file: + + $(package)_download_file: The file-name of the upstream source if it differs from how it should be stored locally. This can be used to avoid storing file-names with strange characters. - $(package)_dependencies: + + $(package)_dependencies: Names of any other packages that this one depends on. - $(package)_patches: + + $(package)_patches: Filenames of any patches needed to build the package - $(package)_extra_sources: + + $(package)_extra_sources: Any extra files that will be fetched via $(package)_fetch_cmds. These are specified so that they can be fetched and verified via 'make download'. -Build Variables: + +## Build Variables: After defining the main identifiers, build variables may be added or customized before running the build commands. They should be added to a function called $(package)_set_vars. For example: -define $(package)_set_vars -... -endef + define $(package)_set_vars + ... + endef Most variables can be prefixed with the host, architecture, or both, to make the modifications specific to that case. For example: - Universal: $(package)_cc=gcc - Linux only: $(package)_linux_cc=gcc - x86_64 only: $(package)_x86_64_cc = gcc - x86_64 linux only: $(package)_x86_64_linux_cc = gcc + Universal: $(package)_cc=gcc + Linux only: $(package)_linux_cc=gcc + x86_64 only: $(package)_x86_64_cc = gcc + x86_64 linux only: $(package)_x86_64_linux_cc = gcc These variables may be set to override or append their default values. - $(package)_cc - $(package)_cxx - $(package)_objc - $(package)_objcxx - $(package)_ar - $(package)_ranlib - $(package)_libtool - $(package)_nm - $(package)_cflags - $(package)_cxxflags - $(package)_ldflags - $(package)_cppflags - $(package)_config_env - $(package)_build_env - $(package)_stage_env - $(package)_build_opts - $(package)_config_opts + + $(package)_cc + $(package)_cxx + $(package)_objc + $(package)_objcxx + $(package)_ar + $(package)_ranlib + $(package)_libtool + $(package)_nm + $(package)_cflags + $(package)_cxxflags + $(package)_ldflags + $(package)_cppflags + $(package)_config_env + $(package)_build_env + $(package)_stage_env + $(package)_build_opts + $(package)_config_opts The *_env variables are used to add environment variables to the respective commands. Many variables respect a debug/release suffix as well, in order to use them for only the appropriate build config. For example: - $(package)_cflags_release = -O3 - $(package)_cflags_i686_debug = -g - $(package)_config_opts_release = --disable-debug + + $(package)_cflags_release = -O3 + $(package)_cflags_i686_debug = -g + $(package)_config_opts_release = --disable-debug These will be used in addition to the options that do not specify debug/release. All builds are considered to be release unless DEBUG=1 is set by -the user. - -Other variables may be defined as needed. +the user. Other variables may be defined as needed. -Build commands: +## Build commands: For each build, a unique build dir and staging dir are created. For example, - work/build/mylib/1.0-1adac830f6e and work/staging/mylib/1.0-1adac830f6e. + `work/build/mylib/1.0-1adac830f6e` and `work/staging/mylib/1.0-1adac830f6e`. The following build commands are available for each recipe: - $(package)_fetch_cmds: + $(package)_fetch_cmds: Runs from: build dir Fetch the source file. If undefined, it will be fetched and verified against its hash. - $(package)_extract_cmds: + + $(package)_extract_cmds: Runs from: build dir Verify the source file against its hash and extract it. If undefined, the source is assumed to be a tarball. - $(package)_preprocess_cmds: + + $(package)_preprocess_cmds: Runs from: build dir/$(package)_build_subdir Preprocess the source as necessary. If undefined, does nothing. - $(package)_config_cmds: + + $(package)_config_cmds: Runs from: build dir/$(package)_build_subdir Configure the source. If undefined, does nothing. - $(package)_build_cmds: + + $(package)_build_cmds: Runs from: build dir/$(package)_build_subdir Build the source. If undefined, does nothing. - $(package)_stage_cmds: + + $(package)_stage_cmds: Runs from: build dir/$(package)_build_subdir Stage the build results. If undefined, does nothing. The following variables are available for each recipe: - $(1)_staging_dir: package's destination sysroot path - $(1)_staging_prefix_dir: prefix path inside of the package's staging dir - $(1)_extract_dir: path to the package's extracted sources - $(1)_build_dir: path where configure/build/stage commands will be run - $(1)_patch_dir: path where the package's patches (if any) are found + + $(1)_staging_dir: package's destination sysroot path + $(1)_staging_prefix_dir: prefix path inside of the package's staging dir + $(1)_extract_dir: path to the package's extracted sources + $(1)_build_dir: path where configure/build/stage commands will be run + $(1)_patch_dir: path where the package's patches (if any) are found Notes on build commands: @@ -127,4 +143,5 @@ configure step to (usually) correctly configure automatically. Any $($(package)_config_opts) will be appended. Most autotools projects can be properly staged using: - $(MAKE) DESTDIR=$($(package)_staging_dir) install + + $(MAKE) DESTDIR=$($(package)_staging_dir) install diff --git a/doc/README.md b/doc/README.md index 0ade8f9923..22b7065f62 100644 --- a/doc/README.md +++ b/doc/README.md @@ -43,6 +43,7 @@ The following are developer notes on how to build Bitcoin on your native platfor - [OSX Build Notes](build-osx.md) - [Unix Build Notes](build-unix.md) +- [Gitian Building Guide](gitian-building.md) Development --------------------- @@ -55,6 +56,9 @@ The Bitcoin repo's [root README](https://github.com/bitcoin/bitcoin/blob/master/ - [Source Code Documentation (External Link)](https://dev.visucore.com/bitcoin/doxygen/) - [Translation Process](translation_process.md) - [Unit Tests](unit-tests.md) +- [Unauthenticated REST Interface](REST-interface.md) +- [BIPS](bips.md) +- [Dnsseed Policy](dnsseed-policy.md) ### Resources * Discuss on the [BitcoinTalk](https://bitcointalk.org/) forums, in the [Development & Technical Discussion board](https://bitcointalk.org/index.php?board=6.0). diff --git a/doc/REST-interface.md b/doc/REST-interface.md index 11af040ad2..0b718d664e 100644 --- a/doc/REST-interface.md +++ b/doc/REST-interface.md @@ -7,7 +7,7 @@ Supported API ------------- ####Transactions -`GET /rest/tx/TX-HASH.{bin|hex|json}` +`GET /rest/tx/<TX-HASH>.<bin|hex|json>` Given a transaction hash, Returns a transaction, in binary, hex-encoded binary or JSON formats. @@ -15,8 +15,8 @@ Returns a transaction, in binary, hex-encoded binary or JSON formats. For full TX query capability, one must enable the transaction index via "txindex=1" command line / configuration option. ####Blocks -`GET /rest/block/BLOCK-HASH.{bin|hex|json}` -`GET /rest/block/notxdetails/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, Returns a block, in binary, hex-encoded binary or JSON formats. @@ -46,12 +46,38 @@ Only supports JSON as output format. * verificationprogress : (numeric) estimate of verification progress [0..1] * chainwork : (string) total amount of work in active chain, in hexadecimal -`GET /rest/getutxos` +####Query UTXO set +`GET /rest/getutxos.<bin|hex|json>` -The getutxo command allows querying of the UTXO set given a set of of outpoints. +The getutxo command allows querying of the UTXO set given a set of outpoints. See BIP64 for input and output serialisation: https://github.com/bitcoin/bips/blob/master/bip-0064.mediawiki +Example: +``` +$ curl --data '{"checkmempool":true,"outpoints":[{"txid":"b2cdfd7b89def827ff8af7cd9bff7627ff72e5e8b0f71210f92ea7a4000c5d75","n":0}]}' localhost:18332/rest/getutxos.json 2>/dev/null | json_pp +{ + "chaintipHash" : "00000000fb01a7f3745a717f8caebee056c484e6e0bfe4a9591c235bb70506fb", + "chainHeight" : 325347, + "utxos" : [ + { + "scriptPubKey" : { + "addresses" : [ + "mi7as51dvLJsizWnTMurtRmrP8hG2m1XvD" + ], + "type" : "pubkeyhash", + "hex" : "76a9141c7cebb529b86a04c683dfa87be49de35bcf589e88ac", + "reqSigs" : 1, + "asm" : "OP_DUP OP_HASH160 1c7cebb529b86a04c683dfa87be49de35bcf589e OP_EQUALVERIFY OP_CHECKSIG" + }, + "value" : 8.8687, + "height" : 2147483647, + "txvers" : 1 + } + ], + "bitmap" : "1" +} +``` Risks ------------- diff --git a/doc/build-osx.md b/doc/build-osx.md index 913e72519f..02adff0615 100644 --- a/doc/build-osx.md +++ b/doc/build-osx.md @@ -100,7 +100,7 @@ Creating a release build ------------------------ You can ignore this section if you are building `bitcoind` for your own use. -bitcoind/bitcoin-cli binaries are not included in the Bitcoin-Qt.app bundle. +bitcoind/bitcoin-cli binaries are not included in the Bitcoin-Core.app bundle. If you are building `bitcoind` or `Bitcoin-Qt` for others, your build machine should be set up as follows for maximum compatibility: @@ -111,7 +111,7 @@ All dependencies should be compiled with these flags: -arch x86_64 -isysroot $(xcode-select --print-path)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk -Once dependencies are compiled, see [doc/release-process.md](release-process.md) for how the Bitcoin-Qt.app +Once dependencies are compiled, see [doc/release-process.md](release-process.md) for how the Bitcoin-Core.app bundle is packaged and signed to create the .dmg disk image that is distributed. Running diff --git a/doc/release-notes/release-notes-0.10.1.md b/doc/release-notes/release-notes-0.10.1.md new file mode 100644 index 0000000000..5e939600a0 --- /dev/null +++ b/doc/release-notes/release-notes-0.10.1.md @@ -0,0 +1,143 @@ +Bitcoin Core version 0.10.1 is now available from: + + <https://bitcoin.org/bin/bitcoin-core-0.10.1/> + +This is a new minor version release, bringing bug fixes and translation +updates. It is recommended to upgrade to this version. + +Please report bugs using the issue tracker at github: + + <https://github.com/bitcoin/bitcoin/issues> + +Upgrading and downgrading +========================= + +How to Upgrade +-------------- + +If you are running an older version, shut it down. Wait until it has completely +shut down (which might take a few minutes for older versions), then run the +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). + +Downgrade warning +------------------ + +Because release 0.10.0 and later makes use of headers-first synchronization and +parallel block download (see further), the block files and databases are not +backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: + +* Blocks will be stored on disk out of order (in the order they are +received, really), which makes it incompatible with some tools or +other programs. Reindexing using earlier versions will also not work +anymore as a result of this. + +* The block index database will now hold headers for which no block is +stored on disk, which earlier versions won't support. + +If you want to be able to downgrade smoothly, make a backup of your entire data +directory. Without this your node will need start syncing (or importing from +bootstrap.dat) anew afterwards. It is possible that the data from a completely +synchronised 0.10 node may be usable in older versions as-is, but this is not +supported and may break as soon as the older version attempts to reindex. + +This does not affect wallet forward or backward compatibility. + +Notable changes +=============== + +This is a minor release and hence there are no notable changes. +For the notable changes in 0.10, refer to the release notes for the +0.10.0 release at https://github.com/bitcoin/bitcoin/blob/v0.10.0/doc/release-notes.md + +0.10.1 Change log +================= + +Detailed release notes follow. This overview includes changes that affect external +behavior, not code moves, refactors or string updates. + +RPC: +- `7f502be` fix crash: createmultisig and addmultisigaddress +- `eae305f` Fix missing lock in submitblock + +Block (database) and transaction handling: +- `1d2cdd2` Fix InvalidateBlock to add chainActive.Tip to setBlockIndexCandidates +- `c91c660` fix InvalidateBlock to repopulate setBlockIndexCandidates +- `002c8a2` fix possible block db breakage during re-index +- `a1f425b` Add (optional) consistency check for the block chain data structures +- `1c62e84` Keep mempool consistent during block-reorgs +- `57d1f46` Fix CheckBlockIndex for reindex +- `bac6fca` Set nSequenceId when a block is fully linked + +P2P protocol and network code: +- `78f64ef` don't trickle for whitelisted nodes +- `ca301bf` Reduce fingerprinting through timestamps in 'addr' messages. +- `200f293` Ignore getaddr messages on Outbound connections. +- `d5d8998` Limit message sizes before transfer +- `aeb9279` Better fingerprinting protection for non-main-chain getdatas. +- `cf0218f` Make addrman's bucket placement deterministic (countermeasure 1 against eclipse attacks, see http://cs-people.bu.edu/heilman/eclipse/) +- `0c6f334` Always use a 50% chance to choose between tried and new entries (countermeasure 2 against eclipse attacks) +- `214154e` Do not bias outgoing connections towards fresh addresses (countermeasure 2 against eclipse attacks) +- `aa587d4` Scale up addrman (countermeasure 6 against eclipse attacks) +- `139cd81` Cap nAttempts penalty at 8 and switch to pow instead of a division loop + +Validation: +- `d148f62` Acquire CCheckQueue's lock to avoid race condition + +Build system: +- `8752b5c` 0.10 fix for crashes on OSX 10.6 + +Wallet: +- N/A + +GUI: +- `2c08406` some mac specifiy cleanup (memory handling, unnecessary code) +- `81145a6` fix OSX dock icon window reopening +- `786cf72` fix a issue where "command line options"-action overwrite "Preference"-action (on OSX) + +Tests: +- `1117378` add RPC test for InvalidateBlock + +Miscellaneous: +- `c9e022b` Initialization: set Boost path locale in main thread +- `23126a0` Sanitize command strings before logging them. +- `323de27` Initialization: setup environment before starting QT tests +- `7494e09` Initialization: setup environment before starting tests +- `df45564` Initialization: set fallback locale as environment variable + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- Alex Morcos +- Cory Fields +- dexX7 +- fsb4000 +- Gavin Andresen +- Gregory Maxwell +- Ivan Pustogarov +- Jonas Schnelli +- Matt Corallo +- mrbandrews +- Pieter Wuille +- Ruben de Vries +- Suhas Daftuar +- Wladimir J. van der Laan + +And all those who contributed additional code review and/or security research: +- 21E14 +- Alison Kendler +- Aviv Zohar +- Ethan Heilman +- Evil-Knievel +- fanquake +- Jeff Garzik +- Jonas Nick +- Luke Dashjr +- Patrick Strateman +- Philip Kaufmann +- Sergio Demian Lerner +- Sharon Goldberg + +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.10.2.md b/doc/release-notes/release-notes-0.10.2.md new file mode 100644 index 0000000000..192ed69d29 --- /dev/null +++ b/doc/release-notes/release-notes-0.10.2.md @@ -0,0 +1,86 @@ +Bitcoin Core version 0.10.2 is now available from: + + <https://bitcoin.org/bin/bitcoin-core-0.10.2/> + +This is a new minor version release, bringing minor bug fixes and translation +updates. It is recommended to upgrade to this version. + +Please report bugs using the issue tracker at github: + + <https://github.com/bitcoin/bitcoin/issues> + +Upgrading and downgrading +========================= + +How to Upgrade +-------------- + +If you are running an older version, shut it down. Wait until it has completely +shut down (which might take a few minutes for older versions), then run the +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). + +Downgrade warning +------------------ + +Because release 0.10.0 and later makes use of headers-first synchronization and +parallel block download (see further), the block files and databases are not +backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: + +* Blocks will be stored on disk out of order (in the order they are +received, really), which makes it incompatible with some tools or +other programs. Reindexing using earlier versions will also not work +anymore as a result of this. + +* The block index database will now hold headers for which no block is +stored on disk, which earlier versions won't support. + +If you want to be able to downgrade smoothly, make a backup of your entire data +directory. Without this your node will need start syncing (or importing from +bootstrap.dat) anew afterwards. It is possible that the data from a completely +synchronised 0.10 node may be usable in older versions as-is, but this is not +supported and may break as soon as the older version attempts to reindex. + +This does not affect wallet forward or backward compatibility. + +Notable changes +=============== + +This fixes a serious problem on Windows with data directories that have non-ASCII +characters (https://github.com/bitcoin/bitcoin/issues/6078). + +For other platforms there are no notable changes. + +For the notable changes in 0.10, refer to the release notes +at https://github.com/bitcoin/bitcoin/blob/v0.10.0/doc/release-notes.md + +0.10.2 Change log +================= + +Detailed release notes follow. This overview includes changes that affect external +behavior, not code moves, refactors or string updates. + +Wallet: +- `824c011` fix boost::get usage with boost 1.58 + +Miscellaneous: +- `da65606` Avoid crash on start in TestBlockValidity with gen=1. +- `424ae66` don't imbue boost::filesystem::path with locale "C" on windows (fixes #6078) + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- Cory Fields +- Gregory Maxwell +- Jonas Schnelli +- Wladimir J. van der Laan + +And all those who contributed additional code review and/or security research: + +- dexX7 +- Pieter Wuille +- vayvanne + +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.9.4.md b/doc/release-notes/release-notes-0.9.4.md new file mode 100644 index 0000000000..7ee73246a9 --- /dev/null +++ b/doc/release-notes/release-notes-0.9.4.md @@ -0,0 +1,95 @@ +Bitcoin Core version 0.9.4 is now available from: + + https://bitcoin.org/bin/0.9.4/ + +This is a new minor version release, bringing only bug fixes and updated +translations. Upgrading to this release is recommended. + +Please report bugs using the issue tracker at github: + + https://github.com/bitcoin/bitcoin/issues + +How to Upgrade +=============== + +If you are running an older version, shut it down. Wait until it has completely +shut down (which might take a few minutes for older versions), then run the +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). + +OpenSSL Warning +================ + +OpenSSL 1.0.0p / 1.0.1k was recently released and is being pushed out by +various operating system maintainers. Review by Gregory Maxwell determined that +this update is incompatible with the Bitcoin system and could lead to consensus +forks. + +Bitcoin Core released binaries from https://bitcoin.org are unaffected, +as are any built with the gitian deterministic build system. + +However, if you are running either + +- The Ubuntu PPA from https://launchpad.net/~bitcoin/+archive/ubuntu/bitcoin +- A third-party or self-compiled Bitcoin Core + +upgrade to Bitcoin Core 0.9.4, which includes a workaround, **before** updating +OpenSSL. + +The incompatibility is due to the OpenSSL update changing the +behavior of ECDSA validation to reject any signature which is +not encoded in a very rigid manner. This was a result of +OpenSSL's change for CVE-2014-8275 "Certificate fingerprints +can be modified". + +We are specifically aware of potential hard-forks due to signature +encoding handling and had been hoping to close them via BIP62 in 0.10. +BIP62's purpose is to improve transaction malleability handling and +as a side effect rigidly defines the encoding for signatures, but the +overall scope of BIP62 has made it take longer than we'd like to +deploy. + +0.9.4 changelog +================ + +Validation: +- `b8e81b7` consensus: guard against openssl's new strict DER checks +- `60c51f1` fail immediately on an empty signature +- `037bfef` Improve robustness of DER recoding code + +Command-line options: +- `cd5164a` Make -proxy set all network types, avoiding a connect leak. + +P2P: +- `bb424e4` Limit the number of new addressses to accumulate + +RPC: +- `0a94661` Disable SSLv3 (in favor of TLS) for the RPC client and server. + +Build system: +- `f047dfa` gitian: openssl-1.0.1i.tar.gz -> openssl-1.0.1k.tar.gz +- `5b9f78d` build: Fix OSX build when using Homebrew and qt5 +- `ffab1dd` Keep symlinks when copying into .app bundle +- `613247f` osx: fix signing to make Gatekeeper happy (again) + +Miscellaneous: +- `25b49b5` Refactor -alertnotify code +- `2743529` doc: Add instructions for consistent Mac OS X build names + +Credits +-------- + +Thanks to who contributed to this release, at least: + +- Cory Fields +- Gavin Andresen +- Gregory Maxwell +- Jeff Garzik +- Luke Dashjr +- Matt Corallo +- Pieter Wuille +- Saivann +- Sergio Demian Lerner +- Wladimir J. van der Laan + +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.9.5.md b/doc/release-notes/release-notes-0.9.5.md new file mode 100644 index 0000000000..bed0af9879 --- /dev/null +++ b/doc/release-notes/release-notes-0.9.5.md @@ -0,0 +1,60 @@ +Bitcoin Core version 0.9.5 is now available from: + + https://bitcoin.org/bin/0.9.5/ + +This is a new minor version release, with the goal of backporting BIP66. There +are also a few bug fixes and updated translations. Upgrading to this release is +recommended. + +Please report bugs using the issue tracker at github: + + https://github.com/bitcoin/bitcoin/issues + +How to Upgrade +=============== + +If you are running an older version, shut it down. Wait until it has completely +shut down (which might take a few minutes for older versions), then run the +installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or +bitcoind/bitcoin-qt (on Linux). + +Notable changes +================ + +Mining and relay policy enhancements +------------------------------------ + +Bitcoin Core's block templates are now for version 3 blocks only, and any mining +software relying on its `getblocktemplate` must be updated in parallel to use +libblkmaker either version 0.4.2 or any version from 0.5.1 onward. +If you are solo mining, this will affect you the moment you upgrade Bitcoin +Core, which must be done prior to BIP66 achieving its 951/1001 status. +If you are mining with the stratum mining protocol: this does not affect you. +If you are mining with the getblocktemplate protocol to a pool: this will affect +you at the pool operator's discretion, which must be no later than BIP66 +achieving its 951/1001 status. + +0.9.5 changelog +================ + +- `74f29c2` Check pindexBestForkBase for null +- `9cd1dd9` Fix priority calculation in CreateTransaction +- `6b4163b` Sanitize command strings before logging them. +- `3230b32` Raise version of created blocks, and enforce DERSIG in mempool +- `989d499` Backport of some of BIP66's tests +- `ab03660` Implement BIP 66 validation rules and switchover logic +- `8438074` build: fix dynamic boost check when --with-boost= is used + +Credits +-------- + +Thanks to who contributed to this release, at least: + +- 21E14 +- Alex Morcos +- Cory Fields +- Gregory Maxwell +- Pieter Wuille +- Wladimir J. van der Laan + +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/qa/rpc-tests/pruning.py b/qa/rpc-tests/pruning.py index f26cbee1e2..85fd1c982a 100755 --- a/qa/rpc-tests/pruning.py +++ b/qa/rpc-tests/pruning.py @@ -7,7 +7,8 @@ # Test pruning code # ******** # WARNING: -# This test uses 4GB of disk space and takes in excess of 30 mins to run +# This test uses 4GB of disk space. +# This test takes 30 mins or more (up to 2 hours) # ******** from test_framework import BitcoinTestFramework @@ -51,11 +52,11 @@ class PruneTest(BitcoinTestFramework): self.is_network_split = False # Create nodes 0 and 1 to mine - self.nodes.append(start_node(0, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=999000", "-checkblocks=5"], timewait=300)) - self.nodes.append(start_node(1, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=999000", "-checkblocks=5"], timewait=300)) + self.nodes.append(start_node(0, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=999000", "-checkblocks=5"], timewait=900)) + self.nodes.append(start_node(1, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=999000", "-checkblocks=5"], timewait=900)) # Create node 2 to test pruning - self.nodes.append(start_node(2, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-prune=550"], timewait=300)) + self.nodes.append(start_node(2, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-prune=550"], timewait=900)) self.prunedir = self.options.tmpdir+"/node2/regtest/blocks/" self.address[0] = self.nodes[0].getnewaddress() @@ -108,7 +109,7 @@ class PruneTest(BitcoinTestFramework): # Node 2 stays connected, so it hears about the stale blocks and then reorg's when node0 reconnects # Stopping node 0 also clears its mempool, so it doesn't have node1's transactions to accidentally mine stop_node(self.nodes[0],0) - self.nodes[0]=start_node(0, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=999000", "-checkblocks=5"], timewait=300) + self.nodes[0]=start_node(0, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=999000", "-checkblocks=5"], timewait=900) # Mine 24 blocks in node 1 self.utxo = self.nodes[1].listunspent() for i in xrange(24): @@ -135,7 +136,7 @@ class PruneTest(BitcoinTestFramework): # Reboot node 1 to clear its mempool (hopefully make the invalidate faster) # Lower the block max size so we don't keep mining all our big mempool transactions (from disconnected blocks) stop_node(self.nodes[1],1) - self.nodes[1]=start_node(1, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=5000", "-checkblocks=5", "-disablesafemode"], timewait=300) + self.nodes[1]=start_node(1, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=5000", "-checkblocks=5", "-disablesafemode"], timewait=900) height = self.nodes[1].getblockcount() print "Current block height:", height @@ -158,7 +159,7 @@ class PruneTest(BitcoinTestFramework): # Reboot node1 to clear those giant tx's from mempool stop_node(self.nodes[1],1) - self.nodes[1]=start_node(1, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=5000", "-checkblocks=5", "-disablesafemode"], timewait=300) + self.nodes[1]=start_node(1, self.options.tmpdir, ["-debug","-maxreceivebuffer=20000","-blockmaxsize=5000", "-checkblocks=5", "-disablesafemode"], timewait=900) print "Generating new longer chain of 300 more blocks" self.nodes[1].generate(300) @@ -223,7 +224,7 @@ class PruneTest(BitcoinTestFramework): waitstart = time.time() while self.nodes[2].getblockcount() < goalbestheight: time.sleep(0.1) - if time.time() - waitstart > 300: + if time.time() - waitstart > 900: raise AssertionError("Node 2 didn't reorg to proper height") assert(self.nodes[2].getbestblockhash() == goalbesthash) # Verify we can now have the data for a block previously pruned @@ -256,7 +257,7 @@ class PruneTest(BitcoinTestFramework): def run_test(self): - print "Warning! This test requires 4GB of disk space and takes over 30 mins" + print "Warning! This test requires 4GB of disk space and takes over 30 mins (up to 2 hours)" print "Mining a big blockchain of 995 blocks" self.create_big_chain() # Chain diagram key: diff --git a/share/certs/PrivateKeyNotes.md b/share/certs/PrivateKeyNotes.md index da299d168f..cbd060c268 100644 --- a/share/certs/PrivateKeyNotes.md +++ b/share/certs/PrivateKeyNotes.md @@ -7,7 +7,7 @@ signing requests. For OSX, the private key was generated by Keychain.app on Gavin's main work machine. The key and certificate is in a separate, passphrase-protected keychain file that is -unlocked to sign the Bitcoin-Qt.app bundle. +unlocked to sign the Bitcoin-Core.app bundle. For Windows, the private key was generated by Firefox running on Gavin's main work machine. The key and certificate were exported into a separate, passphrase-protected PKCS#12 file, and @@ -17,7 +17,7 @@ Threat analysis -- Gavin is a single point of failure. He could be coerced to divulge the secret signing keys, -allowing somebody to distribute a Bitcoin-Qt.app or bitcoin-qt-setup.exe with a valid +allowing somebody to distribute a Bitcoin-Core.app or bitcoin-qt-setup.exe with a valid signature but containing a malicious binary. Or the machine Gavin uses to sign the binaries could be compromised, either remotely or diff --git a/src/Makefile.am b/src/Makefile.am index 1621b2dcd0..c77a262617 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -14,7 +14,7 @@ $(LIBLEVELDB): $(LIBMEMENV) $(LIBLEVELDB) $(LIBMEMENV): @echo "Building LevelDB ..." && $(MAKE) -C $(@D) $(@F) CXX="$(CXX)" \ CC="$(CC)" PLATFORM=$(TARGET_OS) AR="$(AR)" $(LEVELDB_TARGET_FLAGS) \ - OPT="$(CXXFLAGS) $(CPPFLAGS)" + OPT="$(CXXFLAGS) $(CPPFLAGS) -D__STDC_LIMIT_MACROS" endif BITCOIN_CONFIG_INCLUDES=-I$(builddir)/config @@ -77,8 +77,8 @@ BITCOIN_CORE_H = \ base58.h \ bloom.h \ chain.h \ - chainparamsbase.h \ chainparams.h \ + chainparamsbase.h \ chainparamsseeds.h \ checkpoints.h \ checkqueue.h \ @@ -86,11 +86,13 @@ BITCOIN_CORE_H = \ coincontrol.h \ coins.h \ compat.h \ + compat/byteswap.h \ + compat/endian.h \ + compat/sanity.h \ compressor.h \ consensus/consensus.h \ consensus/params.h \ core_io.h \ - wallet/db.h \ eccryptoverify.h \ ecwrapper.h \ hash.h \ @@ -100,11 +102,12 @@ BITCOIN_CORE_H = \ leveldbwrapper.h \ limitedmap.h \ main.h \ + memusage.h \ merkleblock.h \ miner.h \ mruset.h \ - netbase.h \ net.h \ + netbase.h \ noui.h \ policy/fees.h \ pow.h \ @@ -118,8 +121,8 @@ BITCOIN_CORE_H = \ rpcserver.h \ scheduler.h \ script/interpreter.h \ - script/script_error.h \ script/script.h \ + script/script_error.h \ script/sigcache.h \ script/sign.h \ script/standard.h \ @@ -145,12 +148,10 @@ BITCOIN_CORE_H = \ validationinterface.h \ version.h \ wallet/crypter.h \ - wallet/walletdb.h \ + wallet/db.h \ wallet/wallet.h \ wallet/wallet_ismine.h \ - compat/byteswap.h \ - compat/endian.h \ - compat/sanity.h + wallet/walletdb.h JSON_H = \ json/json_spirit.h \ @@ -217,39 +218,37 @@ libbitcoin_wallet_a_SOURCES = \ # crypto primitives library crypto_libbitcoin_crypto_a_CPPFLAGS = $(BITCOIN_CONFIG_INCLUDES) crypto_libbitcoin_crypto_a_SOURCES = \ - crypto/sha1.cpp \ - crypto/sha256.cpp \ - crypto/sha512.cpp \ - crypto/hmac_sha256.cpp \ - crypto/hmac_sha512.cpp \ - crypto/ripemd160.cpp \ crypto/common.h \ - crypto/sha256.h \ - crypto/sha512.h \ + crypto/hmac_sha256.cpp \ crypto/hmac_sha256.h \ + crypto/hmac_sha512.cpp \ crypto/hmac_sha512.h \ + crypto/ripemd160.cpp \ + crypto/ripemd160.h \ + crypto/sha1.cpp \ crypto/sha1.h \ - crypto/ripemd160.h + crypto/sha256.cpp \ + crypto/sha256.h \ + crypto/sha512.cpp \ + crypto/sha512.h # univalue JSON library univalue_libbitcoin_univalue_a_SOURCES = \ univalue/univalue.cpp \ - univalue/univalue_read.cpp \ - univalue/univalue_write.cpp \ + univalue/univalue.h \ univalue/univalue_escapes.h \ - univalue/univalue.h + univalue/univalue_read.cpp \ + univalue/univalue_write.cpp # common: shared between bitcoind, and bitcoin-qt and non-server tools libbitcoin_common_a_CPPFLAGS = $(BITCOIN_INCLUDES) libbitcoin_common_a_SOURCES = \ - arith_uint256.cpp \ amount.cpp \ + arith_uint256.cpp \ base58.cpp \ chainparams.cpp \ coins.cpp \ compressor.cpp \ - primitives/block.cpp \ - primitives/transaction.cpp \ core_read.cpp \ core_write.cpp \ eccryptoverify.cpp \ @@ -258,14 +257,16 @@ libbitcoin_common_a_SOURCES = \ key.cpp \ keystore.cpp \ netbase.cpp \ + primitives/block.cpp \ + primitives/transaction.cpp \ protocol.cpp \ pubkey.cpp \ scheduler.cpp \ script/interpreter.cpp \ script/script.cpp \ + script/script_error.cpp \ script/sign.cpp \ script/standard.cpp \ - script/script_error.cpp \ $(BITCOIN_CORE_H) # util: shared between all executables. @@ -351,6 +352,10 @@ bitcoin_tx_SOURCES = bitcoin-tx.cpp bitcoin_tx_CPPFLAGS = $(BITCOIN_INCLUDES) bitcoin_tx_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) +if TARGET_WINDOWS +bitcoin_tx_SOURCES += bitcoin-tx-res.rc +endif + bitcoin_tx_LDADD = \ $(LIBBITCOIN_UNIVALUE) \ $(LIBBITCOIN_COMMON) \ diff --git a/src/addrman.h b/src/addrman.h index b72dda49d1..373b0f39f3 100644 --- a/src/addrman.h +++ b/src/addrman.h @@ -110,10 +110,10 @@ public: * * To that end: * * Addresses are organized into buckets. - * * Address that have not yet been tried go into 1024 "new" buckets. - * * Based on the address range (/16 for IPv4) of source of the information, 64 buckets are selected at random + * * Addresses that have not yet been tried go into 1024 "new" buckets. + * * Based on the address range (/16 for IPv4) of the source of information, 64 buckets are selected at random. * * The actual bucket is chosen from one of these, based on the range in which the address itself is located. - * * One single address can occur in up to 8 different buckets, to increase selection chances for addresses that + * * One single address can occur in up to 8 different buckets to increase selection chances for addresses that * are seen frequently. The chance for increasing this multiplicity decreases exponentially. * * When adding a new address to a full bucket, a randomly chosen entry (with a bias favoring less recently seen * ones) is removed from it first. @@ -231,7 +231,6 @@ protected: void Attempt_(const CService &addr, int64_t nTime); //! Select an address to connect to. - //! nUnkBias determines how much to favor new addresses over tried ones (min=0, max=100) CAddrInfo Select_(); #ifdef DEBUG_ADDRMAN @@ -532,7 +531,6 @@ public: /** * Choose an address to connect to. - * nUnkBias determines how much "new" entries are favored over "tried" ones (0-100). */ CAddrInfo Select() { diff --git a/src/bitcoin-cli-res.rc b/src/bitcoin-cli-res.rc index 4ea1f38e47..1e4aa609bb 100644 --- a/src/bitcoin-cli-res.rc +++ b/src/bitcoin-cli-res.rc @@ -17,13 +17,13 @@ BEGIN BLOCK "040904E4" // U.S. English - multilingual (hex) BEGIN VALUE "CompanyName", "Bitcoin" - VALUE "FileDescription", "Bitcoin-cli (OSS RPC client for Bitcoin)" + VALUE "FileDescription", "bitcoin-cli (JSON-RPC client for Bitcoin Core)" VALUE "FileVersion", VER_FILEVERSION_STR VALUE "InternalName", "bitcoin-cli" VALUE "LegalCopyright", COPYRIGHT_STR VALUE "LegalTrademarks1", "Distributed under the MIT software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php." VALUE "OriginalFilename", "bitcoin-cli.exe" - VALUE "ProductName", "Bitcoin-cli" + VALUE "ProductName", "bitcoin-cli" VALUE "ProductVersion", VER_PRODUCTVERSION_STR END END diff --git a/src/bitcoin-tx-res.rc b/src/bitcoin-tx-res.rc new file mode 100644 index 0000000000..3e49b820bc --- /dev/null +++ b/src/bitcoin-tx-res.rc @@ -0,0 +1,35 @@ +#include <windows.h> // needed for VERSIONINFO +#include "clientversion.h" // holds the needed client version information + +#define VER_PRODUCTVERSION CLIENT_VERSION_MAJOR,CLIENT_VERSION_MINOR,CLIENT_VERSION_REVISION,CLIENT_VERSION_BUILD +#define VER_PRODUCTVERSION_STR STRINGIZE(CLIENT_VERSION_MAJOR) "." STRINGIZE(CLIENT_VERSION_MINOR) "." STRINGIZE(CLIENT_VERSION_REVISION) "." STRINGIZE(CLIENT_VERSION_BUILD) +#define VER_FILEVERSION VER_PRODUCTVERSION +#define VER_FILEVERSION_STR VER_PRODUCTVERSION_STR + +VS_VERSION_INFO VERSIONINFO +FILEVERSION VER_FILEVERSION +PRODUCTVERSION VER_PRODUCTVERSION +FILEOS VOS_NT_WINDOWS32 +FILETYPE VFT_APP +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" // U.S. English - multilingual (hex) + BEGIN + VALUE "CompanyName", "Bitcoin" + VALUE "FileDescription", "bitcoin-tx (CLI Bitcoin transaction editor utility)" + VALUE "FileVersion", VER_FILEVERSION_STR + VALUE "InternalName", "bitcoin-tx" + VALUE "LegalCopyright", COPYRIGHT_STR + VALUE "LegalTrademarks1", "Distributed under the MIT software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php." + VALUE "OriginalFilename", "bitcoin-tx.exe" + VALUE "ProductName", "bitcoin-tx" + VALUE "ProductVersion", VER_PRODUCTVERSION_STR + END + END + + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1252 // language neutral - multilingual (decimal) + END +END diff --git a/src/bitcoind-res.rc b/src/bitcoind-res.rc index d183179b17..3a64acd5d1 100644 --- a/src/bitcoind-res.rc +++ b/src/bitcoind-res.rc @@ -17,13 +17,13 @@ BEGIN BLOCK "040904E4" // U.S. English - multilingual (hex) BEGIN VALUE "CompanyName", "Bitcoin" - VALUE "FileDescription", "Bitcoind (OSS daemon/client for Bitcoin)" + VALUE "FileDescription", "bitcoind (Bitcoin node with a JSON-RPC server)" VALUE "FileVersion", VER_FILEVERSION_STR VALUE "InternalName", "bitcoind" VALUE "LegalCopyright", COPYRIGHT_STR VALUE "LegalTrademarks1", "Distributed under the MIT software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php." VALUE "OriginalFilename", "bitcoind.exe" - VALUE "ProductName", "Bitcoind" + VALUE "ProductName", "bitcoind" VALUE "ProductVersion", VER_PRODUCTVERSION_STR END END diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 556d0aed4d..5f400b265c 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -86,7 +86,7 @@ public: vSeeds.push_back(CDNSSeedData("bitcoin.sipa.be", "seed.bitcoin.sipa.be")); // Pieter Wuille vSeeds.push_back(CDNSSeedData("bluematt.me", "dnsseed.bluematt.me")); // Matt Corallo vSeeds.push_back(CDNSSeedData("dashjr.org", "dnsseed.bitcoin.dashjr.org")); // Luke Dashjr - vSeeds.push_back(CDNSSeedData("bitcoinstats.com", "seed.bitcoinstats.com")); // Addy Yeow + vSeeds.push_back(CDNSSeedData("bitcoinstats.com", "seed.bitcoinstats.com")); // Christian Decker vSeeds.push_back(CDNSSeedData("xf2.org", "bitseed.xf2.org")); // Jeff Garzik vSeeds.push_back(CDNSSeedData("bitcoin.jonasschnelli.ch", "seed.bitcoin.jonasschnelli.ch")); // Jonas Schnelli diff --git a/src/chainparams.h b/src/chainparams.h index bb95b3aa4a..8044b553e1 100644 --- a/src/chainparams.h +++ b/src/chainparams.h @@ -49,10 +49,6 @@ public: const CMessageHeader::MessageStartChars& MessageStart() const { return pchMessageStart; } const std::vector<unsigned char>& AlertKey() const { return vAlertPubKey; } int GetDefaultPort() const { return nDefaultPort; } - int SubsidyHalvingInterval() const { return consensus.nSubsidyHalvingInterval; } - int EnforceBlockUpgradeMajority() const { return consensus.nMajorityEnforceBlockUpgrade; } - int RejectBlockOutdatedMajority() const { return consensus.nMajorityRejectBlockOutdated; } - int ToCheckBlockUpgradeMajority() const { return consensus.nMajorityWindow; } /** Used if GenerateBitcoins is called with a negative number of threads */ int DefaultMinerThreads() const { return nMinerThreads; } diff --git a/src/coins.cpp b/src/coins.cpp index d79e29951b..a41d5a310d 100644 --- a/src/coins.cpp +++ b/src/coins.cpp @@ -4,6 +4,7 @@ #include "coins.h" +#include "memusage.h" #include "random.h" #include <assert.h> @@ -57,13 +58,17 @@ bool CCoinsViewBacked::GetStats(CCoinsStats &stats) const { return base->GetStat CCoinsKeyHasher::CCoinsKeyHasher() : salt(GetRandHash()) {} -CCoinsViewCache::CCoinsViewCache(CCoinsView *baseIn) : CCoinsViewBacked(baseIn), hasModifier(false) { } +CCoinsViewCache::CCoinsViewCache(CCoinsView *baseIn) : CCoinsViewBacked(baseIn), hasModifier(false), cachedCoinsUsage(0) { } CCoinsViewCache::~CCoinsViewCache() { assert(!hasModifier); } +size_t CCoinsViewCache::DynamicMemoryUsage() const { + return memusage::DynamicUsage(cacheCoins) + cachedCoinsUsage; +} + CCoinsMap::const_iterator CCoinsViewCache::FetchCoins(const uint256 &txid) const { CCoinsMap::iterator it = cacheCoins.find(txid); if (it != cacheCoins.end()) @@ -78,6 +83,7 @@ CCoinsMap::const_iterator CCoinsViewCache::FetchCoins(const uint256 &txid) const // version as fresh. ret->second.flags = CCoinsCacheEntry::FRESH; } + cachedCoinsUsage += memusage::DynamicUsage(ret->second.coins); return ret; } @@ -93,6 +99,7 @@ bool CCoinsViewCache::GetCoins(const uint256 &txid, CCoins &coins) const { CCoinsModifier CCoinsViewCache::ModifyCoins(const uint256 &txid) { assert(!hasModifier); std::pair<CCoinsMap::iterator, bool> ret = cacheCoins.insert(std::make_pair(txid, CCoinsCacheEntry())); + size_t cachedCoinUsage = 0; if (ret.second) { if (!base->GetCoins(txid, ret.first->second.coins)) { // The parent view does not have this entry; mark it as fresh. @@ -102,10 +109,12 @@ CCoinsModifier CCoinsViewCache::ModifyCoins(const uint256 &txid) { // The parent view only has a pruned entry for this; mark it as fresh. ret.first->second.flags = CCoinsCacheEntry::FRESH; } + } else { + cachedCoinUsage = memusage::DynamicUsage(ret.first->second.coins); } // Assume that whenever ModifyCoins is called, the entry will be modified. ret.first->second.flags |= CCoinsCacheEntry::DIRTY; - return CCoinsModifier(*this, ret.first); + return CCoinsModifier(*this, ret.first, cachedCoinUsage); } const CCoins* CCoinsViewCache::AccessCoins(const uint256 &txid) const { @@ -150,6 +159,7 @@ bool CCoinsViewCache::BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlockIn assert(it->second.flags & CCoinsCacheEntry::FRESH); CCoinsCacheEntry& entry = cacheCoins[it->first]; entry.coins.swap(it->second.coins); + cachedCoinsUsage += memusage::DynamicUsage(entry.coins); entry.flags = CCoinsCacheEntry::DIRTY | CCoinsCacheEntry::FRESH; } } else { @@ -157,10 +167,13 @@ bool CCoinsViewCache::BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlockIn // The grandparent does not have an entry, and the child is // modified and being pruned. This means we can just delete // it from the parent. + cachedCoinsUsage -= memusage::DynamicUsage(itUs->second.coins); cacheCoins.erase(itUs); } else { // A normal modification. + cachedCoinsUsage -= memusage::DynamicUsage(itUs->second.coins); itUs->second.coins.swap(it->second.coins); + cachedCoinsUsage += memusage::DynamicUsage(itUs->second.coins); itUs->second.flags |= CCoinsCacheEntry::DIRTY; } } @@ -175,6 +188,7 @@ bool CCoinsViewCache::BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlockIn bool CCoinsViewCache::Flush() { bool fOk = base->BatchWrite(cacheCoins, hashBlock); cacheCoins.clear(); + cachedCoinsUsage = 0; return fOk; } @@ -232,7 +246,7 @@ double CCoinsViewCache::GetPriority(const CTransaction &tx, int nHeight) const return tx.ComputePriority(dResult); } -CCoinsModifier::CCoinsModifier(CCoinsViewCache& cache_, CCoinsMap::iterator it_) : cache(cache_), it(it_) { +CCoinsModifier::CCoinsModifier(CCoinsViewCache& cache_, CCoinsMap::iterator it_, size_t usage) : cache(cache_), it(it_), cachedCoinUsage(usage) { assert(!cache.hasModifier); cache.hasModifier = true; } @@ -242,7 +256,11 @@ CCoinsModifier::~CCoinsModifier() assert(cache.hasModifier); cache.hasModifier = false; it->second.coins.Cleanup(); + cache.cachedCoinsUsage -= cachedCoinUsage; // Subtract the old usage if ((it->second.flags & CCoinsCacheEntry::FRESH) && it->second.coins.IsPruned()) { cache.cacheCoins.erase(it); + } else { + // If the coin still exists after the modification, add the new usage + cache.cachedCoinsUsage += memusage::DynamicUsage(it->second.coins); } } diff --git a/src/coins.h b/src/coins.h index fe2eaa08e5..a4671645df 100644 --- a/src/coins.h +++ b/src/coins.h @@ -7,6 +7,7 @@ #define BITCOIN_COINS_H #include "compressor.h" +#include "memusage.h" #include "serialize.h" #include "uint256.h" @@ -252,6 +253,15 @@ public: return false; return true; } + + size_t DynamicMemoryUsage() const { + size_t ret = memusage::DynamicUsage(vout); + BOOST_FOREACH(const CTxOut &out, vout) { + const std::vector<unsigned char> *script = &out.scriptPubKey; + ret += memusage::DynamicUsage(*script); + } + return ret; + } }; class CCoinsKeyHasher @@ -356,7 +366,8 @@ class CCoinsModifier private: CCoinsViewCache& cache; CCoinsMap::iterator it; - CCoinsModifier(CCoinsViewCache& cache_, CCoinsMap::iterator it_); + size_t cachedCoinUsage; // Cached memory usage of the CCoins object before modification + CCoinsModifier(CCoinsViewCache& cache_, CCoinsMap::iterator it_, size_t usage); public: CCoins* operator->() { return &it->second.coins; } @@ -372,6 +383,7 @@ protected: /* Whether this cache has an active modifier. */ bool hasModifier; + /** * Make mutable so that we can "fill the cache" even from Get-methods * declared as "const". @@ -379,6 +391,9 @@ protected: mutable uint256 hashBlock; mutable CCoinsMap cacheCoins; + /* Cached dynamic memory usage for the inner CCoins objects. */ + mutable size_t cachedCoinsUsage; + public: CCoinsViewCache(CCoinsView *baseIn); ~CCoinsViewCache(); @@ -414,6 +429,9 @@ public: //! Calculate the size of the cache (in number of transactions) unsigned int GetCacheSize() const; + //! Calculate the size of the cache (in bytes) + size_t DynamicMemoryUsage() const; + /** * Amount of bitcoins coming in to a transaction * Note that lightweight clients may not know anything besides the hash of previous transactions, diff --git a/src/init.cpp b/src/init.cpp index 3f189dd68b..dc9080fec3 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -190,7 +190,11 @@ void Shutdown() pwalletMain->Flush(true); #endif #ifndef WIN32 - boost::filesystem::remove(GetPidFile()); + try { + boost::filesystem::remove(GetPidFile()); + } catch (const boost::filesystem::filesystem_error& e) { + LogPrintf("%s: Unable to remove pidfile: %s\n", __func__, e.what()); + } #endif UnregisterAllValidationInterfaces(); #ifdef ENABLE_WALLET @@ -335,7 +339,7 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-salvagewallet", _("Attempt to recover private keys from a corrupt wallet.dat") + " " + _("on startup")); strUsage += HelpMessageOpt("-sendfreetransactions", strprintf(_("Send transactions as zero-fee transactions if possible (default: %u)"), 0)); strUsage += HelpMessageOpt("-spendzeroconfchange", strprintf(_("Spend unconfirmed change when sending transactions (default: %u)"), 1)); - strUsage += HelpMessageOpt("-txconfirmtarget=<n>", strprintf(_("If paytxfee is not set, include enough fee so transactions begin confirmation on average within n blocks (default: %u)"), 1)); + strUsage += HelpMessageOpt("-txconfirmtarget=<n>", strprintf(_("If paytxfee is not set, include enough fee so transactions begin confirmation on average within n blocks (default: %u)"), DEFAULT_TX_CONFIRM_TARGET)); strUsage += HelpMessageOpt("-maxtxfee=<amt>", strprintf(_("Maximum total fees to use in a single wallet transaction; setting this too low may abort large transactions (default: %s)"), FormatMoney(maxTxFee))); strUsage += HelpMessageOpt("-upgradewallet", _("Upgrade wallet to latest format") + " " + _("on startup")); @@ -836,7 +840,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) mapArgs["-maxtxfee"], ::minRelayTxFee.ToString())); } } - nTxConfirmTarget = GetArg("-txconfirmtarget", 1); + nTxConfirmTarget = GetArg("-txconfirmtarget", DEFAULT_TX_CONFIRM_TARGET); bSpendZeroConfChange = GetBoolArg("-spendzeroconfchange", true); fSendFreeTransactions = GetBoolArg("-sendfreetransactions", false); @@ -865,9 +869,15 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) boost::filesystem::path pathLockFile = GetDataDir() / ".lock"; FILE* file = fopen(pathLockFile.string().c_str(), "a"); // empty lock file; created if it doesn't exist. if (file) fclose(file); - static boost::interprocess::file_lock lock(pathLockFile.string().c_str()); - if (!lock.try_lock()) - return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running."), strDataDir)); + + try { + static boost::interprocess::file_lock lock(pathLockFile.string().c_str()); + if (!lock.try_lock()) + return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running."), strDataDir)); + } catch(const boost::interprocess::interprocess_exception& e) { + return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.") + " %s.", strDataDir, e.what())); + } + #ifndef WIN32 CreatePidFile(GetPidFile(), getpid()); #endif @@ -1063,18 +1073,20 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) } // cache size calculations - size_t nTotalCache = (GetArg("-dbcache", nDefaultDbCache) << 20); - if (nTotalCache < (nMinDbCache << 20)) - nTotalCache = (nMinDbCache << 20); // total cache cannot be less than nMinDbCache - else if (nTotalCache > (nMaxDbCache << 20)) - nTotalCache = (nMaxDbCache << 20); // total cache cannot be greater than nMaxDbCache - size_t nBlockTreeDBCache = nTotalCache / 8; + int64_t nTotalCache = (GetArg("-dbcache", nDefaultDbCache) << 20); + nTotalCache = std::max(nTotalCache, nMinDbCache << 20); // total cache cannot be less than nMinDbCache + nTotalCache = std::min(nTotalCache, nMaxDbCache << 20); // total cache cannot be greated than nMaxDbcache + int64_t nBlockTreeDBCache = nTotalCache / 8; if (nBlockTreeDBCache > (1 << 21) && !GetBoolArg("-txindex", false)) nBlockTreeDBCache = (1 << 21); // block tree db cache shouldn't be larger than 2 MiB nTotalCache -= nBlockTreeDBCache; - size_t nCoinDBCache = nTotalCache / 2; // use half of the remaining cache for coindb cache + int64_t nCoinDBCache = std::min(nTotalCache / 2, (nTotalCache / 4) + (1 << 23)); // use 25%-50% of the remainder for disk cache nTotalCache -= nCoinDBCache; - nCoinCacheSize = nTotalCache / 300; // coins in memory require around 300 bytes + nCoinCacheUsage = nTotalCache; // the rest goes to in-memory cache + LogPrintf("Cache configuration:\n"); + LogPrintf("* Using %.1fMiB for block index database\n", nBlockTreeDBCache * (1.0 / 1024 / 1024)); + LogPrintf("* Using %.1fMiB for chain state database\n", nCoinDBCache * (1.0 / 1024 / 1024)); + LogPrintf("* Using %.1fMiB for in-memory UTXO set\n", nCoinCacheUsage * (1.0 / 1024 / 1024)); bool fLoaded = false; while (!fLoaded) { @@ -1335,7 +1347,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) pwalletMain->SetBroadcastTransactions(GetBoolArg("-walletbroadcast", true)); } // (!fDisableWallet) #else // ENABLE_WALLET - LogPrintf("No wallet compiled in!\n"); + LogPrintf("No wallet support compiled in!\n"); #endif // !ENABLE_WALLET // ********************************************************* Step 9: import blocks diff --git a/src/main.cpp b/src/main.cpp index 5ebb48477f..ac7d50ce65 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -58,7 +58,7 @@ bool fPruneMode = false; bool fIsBareMultisigStd = true; bool fCheckBlockIndex = false; bool fCheckpointsEnabled = true; -unsigned int nCoinCacheSize = 5000; +size_t nCoinCacheUsage = 5000 * 300; uint64_t nPruneTarget = 0; /** Fees smaller than this (in satoshi) are considered zero fee (for relaying and mining) */ @@ -76,10 +76,9 @@ void EraseOrphansFor(NodeId peer); /** * Returns true if there are nRequired or more blocks of minVersion or above - * in the last Params().ToCheckBlockUpgradeMajority() blocks, starting at pstart - * and going backwards. + * in the last Consensus::Params::nMajorityWindow blocks, starting at pstart and going backwards. */ -static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned int nRequired); +static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned nRequired, const Consensus::Params& consensusParams); static void CheckBlockIndex(); /** Constant stuff for coinbase transactions we create: */ @@ -1190,19 +1189,17 @@ bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex) return true; } -CAmount GetBlockValue(int nHeight, const CAmount& nFees) +CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams) { - CAmount nSubsidy = 50 * COIN; - int halvings = nHeight / Params().SubsidyHalvingInterval(); - + int halvings = nHeight / consensusParams.nSubsidyHalvingInterval; // Force block reward to zero when right shift is undefined. if (halvings >= 64) - return nFees; + return 0; + CAmount nSubsidy = 50 * COIN; // Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years. nSubsidy >>= halvings; - - return nSubsidy + nFees; + return nSubsidy; } bool IsInitialBlockDownload() @@ -1806,7 +1803,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin unsigned int flags = fStrictPayToScriptHash ? SCRIPT_VERIFY_P2SH : SCRIPT_VERIFY_NONE; // Start enforcing the DERSIG (BIP66) rules, for block.nVersion=3 blocks, when 75% of the network has upgraded: - if (block.nVersion >= 3 && IsSuperMajority(3, pindex->pprev, Params().EnforceBlockUpgradeMajority())) { + if (block.nVersion >= 3 && IsSuperMajority(3, pindex->pprev, chainparams.GetConsensus().nMajorityEnforceBlockUpgrade, chainparams.GetConsensus())) { flags |= SCRIPT_VERIFY_DERSIG; } @@ -1869,10 +1866,11 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin int64_t nTime1 = GetTimeMicros(); nTimeConnect += nTime1 - nTimeStart; LogPrint("bench", " - Connect %u transactions: %.2fms (%.3fms/tx, %.3fms/txin) [%.2fs]\n", (unsigned)block.vtx.size(), 0.001 * (nTime1 - nTimeStart), 0.001 * (nTime1 - nTimeStart) / block.vtx.size(), nInputs <= 1 ? 0 : 0.001 * (nTime1 - nTimeStart) / (nInputs-1), nTimeConnect * 0.000001); - if (block.vtx[0].GetValueOut() > GetBlockValue(pindex->nHeight, nFees)) + CAmount blockReward = nFees + GetBlockSubsidy(pindex->nHeight, chainparams.GetConsensus()); + if (block.vtx[0].GetValueOut() > blockReward) return state.DoS(100, error("ConnectBlock(): coinbase pays too much (actual=%d vs limit=%d)", - block.vtx[0].GetValueOut(), GetBlockValue(pindex->nHeight, nFees)), + block.vtx[0].GetValueOut(), blockReward), REJECT_INVALID, "bad-cb-amount"); if (!control.Wait()) @@ -1939,11 +1937,14 @@ enum FlushStateMode { bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode) { LOCK2(cs_main, cs_LastBlockFile); static int64_t nLastWrite = 0; + static int64_t nLastFlush = 0; + static int64_t nLastSetChain = 0; std::set<int> setFilesToPrune; bool fFlushForPrune = false; try { if (fPruneMode && fCheckForPruning) { FindFilesToPrune(setFilesToPrune); + fCheckForPruning = false; if (!setFilesToPrune.empty()) { fFlushForPrune = true; if (!fHavePruned) { @@ -1952,16 +1953,32 @@ bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode) { } } } - if ((mode == FLUSH_STATE_ALWAYS) || - ((mode == FLUSH_STATE_PERIODIC || mode == FLUSH_STATE_IF_NEEDED) && pcoinsTip->GetCacheSize() > nCoinCacheSize) || - (mode == FLUSH_STATE_PERIODIC && GetTimeMicros() > nLastWrite + DATABASE_WRITE_INTERVAL * 1000000) || - fFlushForPrune) { - // Typical CCoins structures on disk are around 100 bytes in size. - // Pushing a new one to the database can cause it to be written - // twice (once in the log, and once in the tables). This is already - // an overestimation, as most will delete an existing entry or - // overwrite one. Still, use a conservative safety factor of 2. - if (!CheckDiskSpace(100 * 2 * 2 * pcoinsTip->GetCacheSize())) + int64_t nNow = GetTimeMicros(); + // Avoid writing/flushing immediately after startup. + if (nLastWrite == 0) { + nLastWrite = nNow; + } + if (nLastFlush == 0) { + nLastFlush = nNow; + } + if (nLastSetChain == 0) { + nLastSetChain = nNow; + } + size_t cacheSize = pcoinsTip->DynamicMemoryUsage(); + // The cache is large and close to the limit, but we have time now (not in the middle of a block processing). + bool fCacheLarge = mode == FLUSH_STATE_PERIODIC && cacheSize * (10.0/9) > nCoinCacheUsage; + // The cache is over the limit, we have to write now. + bool fCacheCritical = mode == FLUSH_STATE_IF_NEEDED && cacheSize > nCoinCacheUsage; + // It's been a while since we wrote the block index to disk. Do this frequently, so we don't need to redownload after a crash. + bool fPeriodicWrite = mode == FLUSH_STATE_PERIODIC && nNow > nLastWrite + (int64_t)DATABASE_WRITE_INTERVAL * 1000000; + // It's been very long since we flushed the cache. Do this infrequently, to optimize cache usage. + bool fPeriodicFlush = mode == FLUSH_STATE_PERIODIC && nNow > nLastFlush + (int64_t)DATABASE_FLUSH_INTERVAL * 1000000; + // Combine all conditions that result in a full cache flush. + bool fDoFullFlush = (mode == FLUSH_STATE_ALWAYS) || fCacheLarge || fCacheCritical || fPeriodicFlush || fFlushForPrune; + // Write blocks and block index to disk. + if (fDoFullFlush || fPeriodicWrite) { + // Depend on nMinDiskSpace to ensure we can write block index + if (!CheckDiskSpace(0)) return state.Error("out of disk space"); // First make sure all block and undo data is flushed to disk. FlushBlockFile(); @@ -1983,21 +2000,29 @@ bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode) { return state.Abort("Files to write to block index database"); } } + // Finally remove any pruned files + if (fFlushForPrune) + UnlinkPrunedFiles(setFilesToPrune); + nLastWrite = nNow; + } + // Flush best chain related state. This can only be done if the blocks / block index write was also done. + if (fDoFullFlush) { + // Typical CCoins structures on disk are around 128 bytes in size. + // Pushing a new one to the database can cause it to be written + // twice (once in the log, and once in the tables). This is already + // an overestimation, as most will delete an existing entry or + // overwrite one. Still, use a conservative safety factor of 2. + if (!CheckDiskSpace(128 * 2 * 2 * pcoinsTip->GetCacheSize())) + return state.Error("out of disk space"); // Flush the chainstate (which may refer to block index entries). if (!pcoinsTip->Flush()) return state.Abort("Failed to write to coin database"); - - // Finally remove any pruned files - if (fFlushForPrune) { - UnlinkPrunedFiles(setFilesToPrune); - fCheckForPruning = false; - } - + nLastFlush = nNow; + } + if ((mode == FLUSH_STATE_ALWAYS || mode == FLUSH_STATE_PERIODIC) && nNow > nLastSetChain + (int64_t)DATABASE_WRITE_INTERVAL * 1000000) { // Update best block in wallet (so we can detect restored wallets). - if (mode != FLUSH_STATE_IF_NEEDED) { - GetMainSignals().SetBestChain(chainActive.GetLocator()); - } - nLastWrite = GetTimeMicros(); + GetMainSignals().SetBestChain(chainActive.GetLocator()); + nLastSetChain = nNow; } } catch (const std::runtime_error& e) { return state.Abort(std::string("System error while flushing: ") + e.what()); @@ -2025,10 +2050,10 @@ void static UpdateTip(CBlockIndex *pindexNew) { nTimeBestReceived = GetTime(); mempool.AddTransactionsUpdated(1); - LogPrintf("%s: new best=%s height=%d log2_work=%.8g tx=%lu date=%s progress=%f cache=%u\n", __func__, + LogPrintf("%s: new best=%s height=%d log2_work=%.8g tx=%lu date=%s progress=%f cache=%.1fMiB(%utx)\n", __func__, chainActive.Tip()->GetBlockHash().ToString(), chainActive.Height(), log(chainActive.Tip()->nChainWork.getdouble())/log(2.0), (unsigned long)chainActive.Tip()->nChainTx, DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.Tip()->GetBlockTime()), - Checkpoints::GuessVerificationProgress(chainParams.Checkpoints(), chainActive.Tip()), (unsigned int)pcoinsTip->GetCacheSize()); + Checkpoints::GuessVerificationProgress(chainParams.Checkpoints(), chainActive.Tip()), pcoinsTip->DynamicMemoryUsage() * (1.0 / (1<<20)), pcoinsTip->GetCacheSize()); cvBlockChange.notify_all(); @@ -2703,18 +2728,14 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta } // Reject block.nVersion=1 blocks when 95% (75% on testnet) of the network has upgraded: - if (block.nVersion < 2 && IsSuperMajority(2, pindexPrev, consensusParams.nMajorityRejectBlockOutdated)) - { + if (block.nVersion < 2 && IsSuperMajority(2, pindexPrev, consensusParams.nMajorityRejectBlockOutdated, consensusParams)) return state.Invalid(error("%s: rejected nVersion=1 block", __func__), REJECT_OBSOLETE, "bad-version"); - } // Reject block.nVersion=2 blocks when 95% (75% on testnet) of the network has upgraded: - if (block.nVersion < 3 && IsSuperMajority(3, pindexPrev, consensusParams.nMajorityRejectBlockOutdated)) - { + if (block.nVersion < 3 && IsSuperMajority(3, pindexPrev, consensusParams.nMajorityRejectBlockOutdated, consensusParams)) return state.Invalid(error("%s : rejected nVersion=2 block", __func__), REJECT_OBSOLETE, "bad-version"); - } return true; } @@ -2722,6 +2743,7 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta bool ContextualCheckBlock(const CBlock& block, CValidationState& state, CBlockIndex * const pindexPrev) { const int nHeight = pindexPrev == NULL ? 0 : pindexPrev->nHeight + 1; + const Consensus::Params& consensusParams = Params().GetConsensus(); // Check that all transactions are finalized BOOST_FOREACH(const CTransaction& tx, block.vtx) @@ -2731,7 +2753,7 @@ bool ContextualCheckBlock(const CBlock& block, CValidationState& state, CBlockIn // Enforce block.nVersion=2 rule that the coinbase starts with serialized block height // if 750 of the last 1,000 blocks are version 2 or greater (51/100 if testnet): - if (block.nVersion >= 2 && IsSuperMajority(2, pindexPrev, Params().EnforceBlockUpgradeMajority())) + if (block.nVersion >= 2 && IsSuperMajority(2, pindexPrev, consensusParams.nMajorityEnforceBlockUpgrade, consensusParams)) { CScript expect = CScript() << nHeight; if (block.vtx[0].vin[0].scriptSig.size() < expect.size() || @@ -2838,11 +2860,10 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CBlockIndex** ppindex, return true; } -static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned int nRequired) +static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned nRequired, const Consensus::Params& consensusParams) { - unsigned int nToCheck = Params().ToCheckBlockUpgradeMajority(); unsigned int nFound = 0; - for (unsigned int i = 0; i < nToCheck && nFound < nRequired && pstart != NULL; i++) + for (int i = 0; i < consensusParams.nMajorityWindow && nFound < nRequired && pstart != NULL; i++) { if (pstart->nVersion >= minVersion) ++nFound; @@ -2991,7 +3012,7 @@ void FindFilesToPrune(std::set<int>& setFilesToPrune) return; } - unsigned int nLastBlockWeMustKeep = chainActive.Tip()->nHeight - MIN_BLOCKS_TO_KEEP; + unsigned int nLastBlockWeCanPrune = chainActive.Tip()->nHeight - MIN_BLOCKS_TO_KEEP; uint64_t nCurrentUsage = CalculateCurrentUsage(); // We don't check to prune until after we've allocated new space for files // So we should leave a buffer under our target to account for another allocation @@ -3011,7 +3032,7 @@ void FindFilesToPrune(std::set<int>& setFilesToPrune) break; // don't prune files that could have a block within MIN_BLOCKS_TO_KEEP of the main chain's tip - if (vinfoBlockFile[fileNumber].nHeightLast > nLastBlockWeMustKeep) + if (vinfoBlockFile[fileNumber].nHeightLast > nLastBlockWeCanPrune) break; PruneOneBlockFile(fileNumber); @@ -3022,10 +3043,10 @@ void FindFilesToPrune(std::set<int>& setFilesToPrune) } } - LogPrint("prune", "Prune: target=%dMiB actual=%dMiB diff=%dMiB min_must_keep=%d removed %d blk/rev pairs\n", + LogPrint("prune", "Prune: target=%dMiB actual=%dMiB diff=%dMiB max_prune_height=%d removed %d blk/rev pairs\n", nPruneTarget/1024/1024, nCurrentUsage/1024/1024, ((int64_t)nPruneTarget - (int64_t)nCurrentUsage)/1024/1024, - nLastBlockWeMustKeep, count); + nLastBlockWeCanPrune, count); } bool CheckDiskSpace(uint64_t nAdditionalBytes) @@ -3256,7 +3277,7 @@ bool CVerifyDB::VerifyDB(CCoinsView *coinsview, int nCheckLevel, int nCheckDepth } } // check level 3: check for inconsistencies during memory-only disconnect of tip blocks - if (nCheckLevel >= 3 && pindex == pindexState && (coins.GetCacheSize() + pcoinsTip->GetCacheSize()) <= nCoinCacheSize) { + if (nCheckLevel >= 3 && pindex == pindexState && (coins.DynamicMemoryUsage() + pcoinsTip->DynamicMemoryUsage()) <= nCoinCacheUsage) { bool fClean = true; if (!DisconnectBlock(block, state, pindex, coins, &fClean)) return error("VerifyDB(): *** irrecoverable inconsistency in block data at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString()); diff --git a/src/main.h b/src/main.h index 873f21330b..6c380b104d 100644 --- a/src/main.h +++ b/src/main.h @@ -82,8 +82,10 @@ static const unsigned int MAX_HEADERS_RESULTS = 2000; * degree of disordering of blocks on disk (which make reindexing and in the future perhaps pruning * harder). We'll probably want to make this a per-peer adaptive value at some point. */ static const unsigned int BLOCK_DOWNLOAD_WINDOW = 1024; -/** Time to wait (in seconds) between writing blockchain state to disk. */ -static const unsigned int DATABASE_WRITE_INTERVAL = 3600; +/** Time to wait (in seconds) between writing blocks/block index to disk. */ +static const unsigned int DATABASE_WRITE_INTERVAL = 60 * 60; +/** Time to wait (in seconds) between flushing chainstate to disk. */ +static const unsigned int DATABASE_FLUSH_INTERVAL = 24 * 60 * 60; /** Maximum length of reject messages. */ static const unsigned int MAX_REJECT_MESSAGE_LENGTH = 111; @@ -119,7 +121,7 @@ extern bool fTxIndex; extern bool fIsBareMultisigStd; extern bool fCheckBlockIndex; extern bool fCheckpointsEnabled; -extern unsigned int nCoinCacheSize; +extern size_t nCoinCacheUsage; extern CFeeRate minRelayTxFee; /** Best header we've seen so far (used for getheaders queries' starting points). */ @@ -202,7 +204,7 @@ std::string GetWarnings(std::string strFor); bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock, bool fAllowSlow = false); /** Find the best known block, and make it the tip of the block chain */ bool ActivateBestChain(CValidationState &state, CBlock *pblock = NULL); -CAmount GetBlockValue(int nHeight, const CAmount& nFees); +CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams); /** * Prune block and undo files (blk???.dat and undo???.dat) so that the disk space used is less than a user-defined target. diff --git a/src/memusage.h b/src/memusage.h new file mode 100644 index 0000000000..9f7de9e2e1 --- /dev/null +++ b/src/memusage.h @@ -0,0 +1,111 @@ +// Copyright (c) 2015 The Bitcoin developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITCOIN_MEMUSAGE_H +#define BITCOIN_MEMUSAGE_H + +#include <stdlib.h> + +#include <map> +#include <set> +#include <vector> + +#include <boost/unordered_set.hpp> +#include <boost/unordered_map.hpp> + +namespace memusage +{ + +/** Compute the total memory used by allocating alloc bytes. */ +static size_t MallocUsage(size_t alloc); + +/** Compute the memory used for dynamically allocated but owned data structures. + * For generic data types, this is *not* recursive. DynamicUsage(vector<vector<int> >) + * will compute the memory used for the vector<int>'s, but not for the ints inside. + * This is for efficiency reasons, as these functions are intended to be fast. If + * application data structures require more accurate inner accounting, they should + * do the recursion themselves, or use more efficient caching + updating on modification. + */ +template<typename X> static size_t DynamicUsage(const std::vector<X>& v); +template<typename X> static size_t DynamicUsage(const std::set<X>& s); +template<typename X, typename Y> static size_t DynamicUsage(const std::map<X, Y>& m); +template<typename X, typename Y> static size_t DynamicUsage(const boost::unordered_set<X, Y>& s); +template<typename X, typename Y, typename Z> static size_t DynamicUsage(const boost::unordered_map<X, Y, Z>& s); +template<typename X> static size_t DynamicUsage(const X& x); + +static inline size_t MallocUsage(size_t alloc) +{ + // Measured on libc6 2.19 on Linux. + if (sizeof(void*) == 8) { + return ((alloc + 31) >> 4) << 4; + } else if (sizeof(void*) == 4) { + return ((alloc + 15) >> 3) << 3; + } else { + assert(0); + } +} + +// STL data structures + +template<typename X> +struct stl_tree_node +{ +private: + int color; + void* parent; + void* left; + void* right; + X x; +}; + +template<typename X> +static inline size_t DynamicUsage(const std::vector<X>& v) +{ + return MallocUsage(v.capacity() * sizeof(X)); +} + +template<typename X> +static inline size_t DynamicUsage(const std::set<X>& s) +{ + return MallocUsage(sizeof(stl_tree_node<X>)) * s.size(); +} + +template<typename X, typename Y> +static inline size_t DynamicUsage(const std::map<X, Y>& m) +{ + return MallocUsage(sizeof(stl_tree_node<std::pair<const X, Y> >)) * m.size(); +} + +// Boost data structures + +template<typename X> +struct boost_unordered_node : private X +{ +private: + void* ptr; +}; + +template<typename X, typename Y> +static inline size_t DynamicUsage(const boost::unordered_set<X, Y>& s) +{ + return MallocUsage(sizeof(boost_unordered_node<X>)) * s.size() + MallocUsage(sizeof(void*) * s.bucket_count()); +} + +template<typename X, typename Y, typename Z> +static inline size_t DynamicUsage(const boost::unordered_map<X, Y, Z>& m) +{ + return MallocUsage(sizeof(boost_unordered_node<std::pair<const X, Y> >)) * m.size() + MallocUsage(sizeof(void*) * m.bucket_count()); +} + +// Dispatch to class method as fallback + +template<typename X> +static inline size_t DynamicUsage(const X& x) +{ + return x.DynamicMemoryUsage(); +} + +} + +#endif diff --git a/src/miner.cpp b/src/miner.cpp index 4bceb7d7b4..804a688523 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -91,6 +91,7 @@ void UpdateTime(CBlockHeader* pblock, const Consensus::Params& consensusParams, CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) { + const CChainParams& chainparams = Params(); // Create new block auto_ptr<CBlockTemplate> pblocktemplate(new CBlockTemplate()); if(!pblocktemplate.get()) @@ -320,7 +321,7 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) LogPrintf("CreateNewBlock(): total size %u\n", nBlockSize); // Compute final coinbase transaction. - txNew.vout[0].nValue = GetBlockValue(nHeight, nFees); + txNew.vout[0].nValue = nFees + GetBlockSubsidy(nHeight, chainparams.GetConsensus()); txNew.vin[0].scriptSig = CScript() << nHeight << OP_0; pblock->vtx[0] = txNew; pblocktemplate->vTxFees[0] = -nFees; diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 70bf894599..efba0f5e18 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -414,6 +414,7 @@ void BitcoinGUI::createToolBars() if(walletFrame) { QToolBar *toolbar = addToolBar(tr("Tabs toolbar")); + toolbar->setMovable(false); toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); toolbar->addAction(overviewAction); toolbar->addAction(sendCoinsAction); diff --git a/src/qt/bitcoinstrings.cpp b/src/qt/bitcoinstrings.cpp index d14343717a..b259d038f2 100644 --- a/src/qt/bitcoinstrings.cpp +++ b/src/qt/bitcoinstrings.cpp @@ -275,6 +275,7 @@ QT_TRANSLATE_NOOP("bitcoin-core", "RPC server options:"), QT_TRANSLATE_NOOP("bitcoin-core", "RPC support for HTTP persistent connections (default: %d)"), QT_TRANSLATE_NOOP("bitcoin-core", "Randomly drop 1 of every <n> network messages"), QT_TRANSLATE_NOOP("bitcoin-core", "Randomly fuzz 1 of every <n> network messages"), +QT_TRANSLATE_NOOP("bitcoin-core", "Rebuild block chain index from current blk000??.dat files on startup"), QT_TRANSLATE_NOOP("bitcoin-core", "Relay and mine data carrier transactions (default: %u)"), QT_TRANSLATE_NOOP("bitcoin-core", "Relay non-P2SH multisig (default: %u)"), QT_TRANSLATE_NOOP("bitcoin-core", "Rescan the block chain for missing wallet transactions"), diff --git a/src/qt/locale/bitcoin_be_BY.ts b/src/qt/locale/bitcoin_be_BY.ts index a94f3c6f7d..6db3f58061 100644 --- a/src/qt/locale/bitcoin_be_BY.ts +++ b/src/qt/locale/bitcoin_be_BY.ts @@ -2,6 +2,10 @@ <context> <name>AddressBookPage</name> <message> + <source>Right-click to edit address or label</source> + <translation>Правы клік, каб рэдагаваць адрас ці метку</translation> + </message> + <message> <source>Create a new address</source> <translation>Стварыць новы адрас</translation> </message> @@ -62,10 +66,26 @@ <translation>адрасы Прымання</translation> </message> <message> + <source>These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source> + <translation>Тут знаходзяцца Біткойн-адрасы для высылання плацяжоў. Заўсёды спраўджвайце колькасць і адрас прызначэння перад здзяйсненнем транзакцыі.</translation> + </message> + <message> + <source>These are your Bitcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source> + <translation>Тут знаходзяцца Біткойн-адрасы для прымання плацяжоў. Пажадана выкарыстоўваць новы адрас для кожнай транзакцыі.</translation> + </message> + <message> + <source>Copy &Label</source> + <translation>Капіяваць Метку</translation> + </message> + <message> <source>&Edit</source> <translation>Рэдагаваць</translation> </message> <message> + <source>Export Address List</source> + <translation>Экспартаваць Спіс Адрасоў</translation> + </message> + <message> <source>Comma separated file (*.csv)</source> <translation>Коскамі падзелены файл (*.csv)</translation> </message> @@ -73,7 +93,11 @@ <source>Exporting Failed</source> <translation>Экспартаванне няўдалае</translation> </message> - </context> + <message> + <source>There was an error trying to save the address list to %1. Please try again.</source> + <translation>Адбылася памылка падчас спробы захаваць адрас у %1. Паспрабуйце зноў.</translation> + </message> +</context> <context> <name>AddressTableModel</name> <message> @@ -92,6 +116,10 @@ <context> <name>AskPassphraseDialog</name> <message> + <source>Passphrase Dialog</source> + <translation>Дыялог сакрэтнай фразы</translation> + </message> + <message> <source>Enter passphrase</source> <translation>Увядзіце кодавую фразу</translation> </message> @@ -140,6 +168,14 @@ <translation>Ці ўпэўненыя вы, што жадаеце зашыфраваць свой гаманец?</translation> </message> <message> + <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Bitcoin Core зараз будзе зачынены, каб фіналізаваць працэс шыфравання. Памятайце, што шыфраванне вашага гаманца не гарантуе абсалютную абарону ад магчымасці крадзяжу біткойнаў шкоднымі праграмамі, якія могуць інфікаваць ваш камп'ютар.</translation> + </message> + <message> + <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source> + <translation>ВАЖНА: Усе папярэднія копіі гаманца варта замяніць новым зашыфраваным файлам. У мэтах бяспекі папярэднія копіі незашыфраванага файла-гаманца стануць неўжывальнымі, калі вы станеце карыстацца новым зашыфраваным гаманцом.</translation> + </message> + <message> <source>Warning: The Caps Lock key is on!</source> <translation>Увага: Caps Lock уключаны!</translation> </message> @@ -148,6 +184,14 @@ <translation>Гаманец зашыфраваны</translation> </message> <message> + <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>.</source> + <translation>Увядзіце новы пароль для гаманца.<br/>Парольная фраза павинна складацца<b> не меньш чым з дзесяці сімвалаў</b>, ці <b>больш чым з васьмі слоў</b>.</translation> + </message> + <message> + <source>Enter the old passphrase and new passphrase to the wallet.</source> + <translation>Увядзіце стары пароль і новы пароль для гаманца.</translation> + </message> + <message> <source>Wallet encryption failed</source> <translation>Шыфраванне гаманца няўдалае</translation> </message> @@ -231,10 +275,42 @@ <translation>Зашыфраваць Гаманец...</translation> </message> <message> + <source>&Backup Wallet...</source> + <translation>Стварыць копію гаманца...</translation> + </message> + <message> + <source>&Change Passphrase...</source> + <translation>&Change Passphrase...</translation> + </message> + <message> + <source>&Sending addresses...</source> + <translation>Адрасы дасылання...</translation> + </message> + <message> + <source>&Receiving addresses...</source> + <translation>Адрасы прымання...</translation> + </message> + <message> <source>Open &URI...</source> <translation>Адчыниць &URI...</translation> </message> <message> + <source>Bitcoin Core client</source> + <translation>Bitcoin Core кліент</translation> + </message> + <message> + <source>Importing blocks from disk...</source> + <translation>Імпартуюцца блокі з дыску...</translation> + </message> + <message> + <source>Reindexing blocks on disk...</source> + <translation>Пераіндэксацыя блокаў на дыску...</translation> + </message> + <message> + <source>Send coins to a Bitcoin address</source> + <translation>Даслаць манеты на Біткойн-адрас</translation> + </message> + <message> <source>Backup wallet to another location</source> <translation>Зрабіце копію гаманца ў іншае месца</translation> </message> @@ -247,6 +323,18 @@ <translation>Вакно адладкі</translation> </message> <message> + <source>Open debugging and diagnostic console</source> + <translation>Адкрыць кансоль дыягностыкі і адладкі</translation> + </message> + <message> + <source>&Verify message...</source> + <translation>Праверыць паведамленне...</translation> + </message> + <message> + <source>Bitcoin</source> + <translation>Біткойн</translation> + </message> + <message> <source>Wallet</source> <translation>Гаманец</translation> </message> @@ -259,6 +347,10 @@ <translation>Атрымаць</translation> </message> <message> + <source>Show information about Bitcoin Core</source> + <translation>Паказаць інфармацыю аб Bitcoin Core</translation> + </message> + <message> <source>&Show / Hide</source> <translation>&Паказаць / Схаваць</translation> </message> @@ -271,6 +363,14 @@ <translation>Зашыфраваць прыватныя ключы, якия належаць вашаму гаманцу</translation> </message> <message> + <source>Sign messages with your Bitcoin addresses to prove you own them</source> + <translation>Падпісаць паведамленне з дапамогай Біткойн-адраса каб даказаць, што яно належыць вам</translation> + </message> + <message> + <source>Verify messages to ensure they were signed with specified Bitcoin addresses</source> + <translation>Спраўдзіць паведамленне з дапамогай Біткойн-адраса каб даказаць, што яно належыць вам</translation> + </message> + <message> <source>&File</source> <translation>Ф&айл</translation> </message> @@ -283,10 +383,82 @@ <translation>Дапамога</translation> </message> <message> + <source>Request payments (generates QR codes and bitcoin: URIs)</source> + <translation>Запатрабаваць плацёж (генеруецца QR-код для біткойн URI)</translation> + </message> + <message> + <source>&About Bitcoin Core</source> + <translation>Аб Bitcoin Core</translation> + </message> + <message> + <source>Modify configuration options for Bitcoin Core</source> + <translation>Мадыфікаваць опцыі канфігурацыі Bitcoin Core</translation> + </message> + <message> + <source>Show the list of used sending addresses and labels</source> + <translation>Паказаць спіс адрасоў і метак для дасылання</translation> + </message> + <message> + <source>Show the list of used receiving addresses and labels</source> + <translation>Паказаць спіс адрасоў і метак для прымання</translation> + </message> + <message> + <source>&Command-line options</source> + <translation>Опцыі каманднага радка</translation> + </message> + <message numerus="yes"> + <source>%n active connection(s) to Bitcoin network</source> + <translation><numerusform>%n актыўнае злучэнне з сецівам Bitcoin</numerusform><numerusform>%n актыўных злучэнняў з сецівам Bitcoin</numerusform><numerusform>%n актыўных злучэнняў з сецівам Bitcoin</numerusform><numerusform>%n актыўных злучэнняў з сецівам Bitcoin</numerusform></translation> + </message> + <message> + <source>No block source available...</source> + <translation>Крыніца блокаў недасяжная...</translation> + </message> + <message numerus="yes"> + <source>Processed %n block(s) of transaction history.</source> + <translation><numerusform>Апрацаваны %n блок гісторыі транзакцый.</numerusform><numerusform>Апрацавана %n блокі гісторыі транзакцый.</numerusform><numerusform>Апрацавана %n блокаў гісторыі транзакцый.</numerusform><numerusform>Апрацавана %n блокаў гісторыі транзакцый.</numerusform></translation> + </message> + <message numerus="yes"> + <source>%n hour(s)</source> + <translation><numerusform>%n гадзіна</numerusform><numerusform>%n гадзіны</numerusform><numerusform>%n гадзін</numerusform><numerusform>%n гадзін</numerusform></translation> + </message> + <message numerus="yes"> + <source>%n day(s)</source> + <translation><numerusform>%n дзень</numerusform><numerusform>%n дні</numerusform><numerusform>%n дзён</numerusform><numerusform>%n дзён</numerusform></translation> + </message> + <message numerus="yes"> + <source>%n week(s)</source> + <translation><numerusform>%n тыдзень</numerusform><numerusform>%n тыдні</numerusform><numerusform>%n тыдняў</numerusform><numerusform>%n тыдняў</numerusform></translation> + </message> + <message numerus="yes"> + <source>%n year(s)</source> + <translation><numerusform>%n год</numerusform><numerusform>%n гады</numerusform><numerusform>%n гадоў</numerusform><numerusform>%n гадоў</numerusform></translation> + </message> + <message> + <source>%1 behind</source> + <translation>%1 таму</translation> + </message> + <message> + <source>Last received block was generated %1 ago.</source> + <translation>Апошні прыняты блок генераваны %1 таму.</translation> + </message> + <message> + <source>Transactions after this will not yet be visible.</source> + <translation>Транзакцыи пасля гэтай не будуць бачныя.</translation> + </message> + <message> <source>Error</source> <translation>Памылка</translation> </message> <message> + <source>Warning</source> + <translation>Увага</translation> + </message> + <message> + <source>Information</source> + <translation>Інфармацыя</translation> + </message> + <message> <source>Up to date</source> <translation>Сінхранізавана</translation> </message> @@ -295,6 +467,36 @@ <translation>Наганяем...</translation> </message> <message> + <source>Date: %1 +</source> + <translation>Дата: %1 +</translation> + </message> + <message> + <source>Amount: %1 +</source> + <translation>Колькасць: %1 +</translation> + </message> + <message> + <source>Type: %1 +</source> + <translation>Тып: %1 +</translation> + </message> + <message> + <source>Label: %1 +</source> + <translation>Метка: %1 +</translation> + </message> + <message> + <source>Address: %1 +</source> + <translation>Адрас: %1 +</translation> + </message> + <message> <source>Sent transaction</source> <translation>Дасланыя транзакцыі</translation> </message> @@ -313,14 +515,46 @@ </context> <context> <name>ClientModel</name> - </context> + <message> + <source>Network Alert</source> + <translation>Трывога Сеціва</translation> + </message> +</context> <context> <name>CoinControlDialog</name> <message> + <source>Bytes:</source> + <translation>Байтаў:</translation> + </message> + <message> <source>Amount:</source> <translation>Колькасць:</translation> </message> <message> + <source>Priority:</source> + <translation>Прыярытэт:</translation> + </message> + <message> + <source>Fee:</source> + <translation>Камісія:</translation> + </message> + <message> + <source>Dust:</source> + <translation>Пыл:</translation> + </message> + <message> + <source>After Fee:</source> + <translation>Пасля камісіі:</translation> + </message> + <message> + <source>Tree mode</source> + <translation>Рэжым дрэва</translation> + </message> + <message> + <source>List mode</source> + <translation>Рэжым спіса</translation> + </message> + <message> <source>Amount</source> <translation>Колькасць</translation> </message> @@ -329,10 +563,18 @@ <translation>Дата</translation> </message> <message> + <source>Confirmations</source> + <translation>Пацверджанняў</translation> + </message> + <message> <source>Confirmed</source> <translation>Пацверджана</translation> </message> <message> + <source>Priority</source> + <translation>Прыярытэт</translation> + </message> + <message> <source>Copy address</source> <translation>Капіяваць адрас</translation> </message> @@ -349,6 +591,50 @@ <translation>Капіяваць ID транзакцыі</translation> </message> <message> + <source>highest</source> + <translation>найвышэйшы</translation> + </message> + <message> + <source>higher</source> + <translation>вышэйшы</translation> + </message> + <message> + <source>high</source> + <translation>высокі</translation> + </message> + <message> + <source>medium-high</source> + <translation>вышэй сярэдняга</translation> + </message> + <message> + <source>medium</source> + <translation>сярэдні</translation> + </message> + <message> + <source>low-medium</source> + <translation>ніжэй сярэдняга</translation> + </message> + <message> + <source>low</source> + <translation>нізкі</translation> + </message> + <message> + <source>lower</source> + <translation>ніжэйшы</translation> + </message> + <message> + <source>lowest</source> + <translation>найніжэйшы</translation> + </message> + <message> + <source>yes</source> + <translation>так</translation> + </message> + <message> + <source>no</source> + <translation>не</translation> + </message> + <message> <source>(no label)</source> <translation>непазначаны</translation> </message> @@ -410,19 +696,47 @@ <translation>Аб Bitcoin Core</translation> </message> <message> + <source>Command-line options</source> + <translation>Опцыі каманднага радка</translation> + </message> + <message> <source>Usage:</source> <translation>Ужыванне:</translation> </message> - </context> + <message> + <source>command-line options</source> + <translation>опцыі каманднага радка</translation> + </message> +</context> <context> <name>Intro</name> <message> + <source>Welcome</source> + <translation>Вітаем</translation> + </message> + <message> + <source>Welcome to Bitcoin Core.</source> + <translation>Вітаем у Bitcoin Core.</translation> + </message> + <message> <source>Error</source> <translation>Памылка</translation> </message> - </context> + <message numerus="yes"> + <source>%n GB of free space available</source> + <translation><numerusform>%n Гб вольнага месца даступна</numerusform><numerusform>%n Гб вольнага месца даступна</numerusform><numerusform>%n Гб вольнага месца даступна</numerusform><numerusform>%n Гб вольнага месца даступна</numerusform></translation> + </message> + <message numerus="yes"> + <source>(of %n GB needed)</source> + <translation><numerusform>(з %n Гб патрэбна)</numerusform><numerusform>(з %n Гб патрэбна)</numerusform><numerusform>(з %n Гб патрэбна)</numerusform><numerusform>(з %n Гб патрэбна)</numerusform></translation> + </message> +</context> <context> <name>OpenURIDialog</name> + <message> + <source>Open URI</source> + <translation>Адкрыць URI</translation> + </message> </context> <context> <name>OptionsDialog</name> @@ -430,6 +744,10 @@ <source>Options</source> <translation>Опцыі</translation> </message> + <message> + <source>MB</source> + <translation>Мб</translation> + </message> </context> <context> <name>OverviewPage</name> @@ -486,6 +804,10 @@ <source>Label</source> <translation>Пазнака</translation> </message> + <message> + <source>Message</source> + <translation>Паведамленне</translation> + </message> </context> <context> <name>RecentRequestsTableModel</name> @@ -498,6 +820,10 @@ <translation>Пазнака</translation> </message> <message> + <source>Message</source> + <translation>Паведамленне</translation> + </message> + <message> <source>Amount</source> <translation>Колькасць</translation> </message> @@ -513,14 +839,34 @@ <translation>Даслаць Манеты</translation> </message> <message> + <source>Bytes:</source> + <translation>Байтаў:</translation> + </message> + <message> <source>Amount:</source> <translation>Колькасць:</translation> </message> <message> + <source>Priority:</source> + <translation>Прыярытэт:</translation> + </message> + <message> + <source>Fee:</source> + <translation>Камісія:</translation> + </message> + <message> + <source>After Fee:</source> + <translation>Пасля камісіі:</translation> + </message> + <message> <source>Send to multiple recipients at once</source> <translation>Даслаць адразу некалькім атрымальнікам</translation> </message> <message> + <source>Dust:</source> + <translation>Пыл:</translation> + </message> + <message> <source>Balance:</source> <translation>Баланс:</translation> </message> @@ -575,7 +921,11 @@ <source>Alt+P</source> <translation>Alt+P</translation> </message> - </context> + <message> + <source>Memo:</source> + <translation>Памятка:</translation> + </message> +</context> <context> <name>ShutdownWindow</name> </context> @@ -607,10 +957,18 @@ </context> <context> <name>TrafficGraphWidget</name> - </context> + <message> + <source>KB/s</source> + <translation>Кб/с</translation> + </message> +</context> <context> <name>TransactionDesc</name> <message> + <source>%1/offline</source> + <translation>%1/offline</translation> + </message> + <message> <source>%1/unconfirmed</source> <translation>%1/непацверджана</translation> </message> @@ -619,10 +977,22 @@ <translation>%1 пацверджанняў</translation> </message> <message> + <source>Status</source> + <translation>Статус</translation> + </message> + <message> <source>Date</source> <translation>Дата</translation> </message> <message> + <source>Message</source> + <translation>Паведамленне</translation> + </message> + <message> + <source>Comment</source> + <translation>Каментар</translation> + </message> + <message> <source>Transaction ID</source> <translation>ID</translation> </message> @@ -883,14 +1253,106 @@ <translation>Ужываць тэставае сеціва</translation> </message> <message> + <source>Do you want to rebuild the block database now?</source> + <translation>Ці жадаеце вы перабудаваць зараз базу звестак блокаў?</translation> + </message> + <message> + <source>Error initializing block database</source> + <translation>Памылка ініцыялізацыі базвы звестак блокаў</translation> + </message> + <message> + <source>Error initializing wallet database environment %s!</source> + <translation>Памалка ініцыялізацыі асяроддзя базы звестак гаманца %s!</translation> + </message> + <message> + <source>Error loading block database</source> + <translation>Памылка загрузкі базвы звестак блокаў</translation> + </message> + <message> + <source>Error opening block database</source> + <translation>Памылка адчынення базы звестак блокаў</translation> + </message> + <message> + <source>Error: A fatal internal error occured, see debug.log for details</source> + <translation>Памылка: здарылася Фатальная унутраная памылка, глядзі debug.log для падрабязнасцяў</translation> + </message> + <message> + <source>Error: Disk space is low!</source> + <translation>Памылка: Замала вольнага месца на дыску!</translation> + </message> + <message> + <source>Importing...</source> + <translation>Імпартаванне...</translation> + </message> + <message> + <source>Not enough file descriptors available.</source> + <translation>Не хапае файлавых дэскрыптараў.</translation> + </message> + <message> + <source>Use UPnP to map the listening port (default: %u)</source> + <translation>Use UPnP to map the listening port (default: %u)</translation> + </message> + <message> + <source>Verifying blocks...</source> + <translation>Праверка блокаў...</translation> + </message> + <message> + <source>Verifying wallet...</source> + <translation>Праверка гаманца...</translation> + </message> + <message> + <source>Wallet options:</source> + <translation>Опцыі гаманца:</translation> + </message> + <message> + <source>Imports blocks from external blk000??.dat file</source> + <translation>Імпартаванне блокаў з вонкавага blk000??.dat файла</translation> + </message> + <message> + <source>Activating best chain...</source> + <translation>Актывацыя лепшага ланцуга...</translation> + </message> + <message> + <source>Information</source> + <translation>Інфармацыя</translation> + </message> + <message> + <source>RPC server options:</source> + <translation>Опцыі RPC сервера:</translation> + </message> + <message> <source>Send trace/debug info to console instead of debug.log file</source> <translation>Слаць trace/debug звесткі ў кансоль замест файла debug.log</translation> </message> <message> + <source>Signing transaction failed</source> + <translation>Памылка подпісу транзакцыі</translation> + </message> + <message> + <source>Start minimized</source> + <translation>Стартаваць ммінімізаванай</translation> + </message> + <message> + <source>This is experimental software.</source> + <translation>Гэта эксперыментальная праграма.</translation> + </message> + <message> + <source>Transaction amount too small</source> + <translation>Транзакцыя занадта малая</translation> + </message> + <message> + <source>Transaction too large</source> + <translation>Транзакцыя занадта вялікая</translation> + </message> + <message> <source>Username for JSON-RPC connections</source> <translation>Імя карыстальника для JSON-RPC злучэнняў</translation> </message> <message> + <source>Warning</source> + <translation>Увага</translation> + </message> + <message> <source>Password for JSON-RPC connections</source> <translation>Пароль для JSON-RPC злучэнняў</translation> </message> @@ -935,6 +1397,10 @@ <translation>Загружаем гаманец...</translation> </message> <message> + <source>Cannot downgrade wallet</source> + <translation>Немагчыма рэгрэсаваць гаманец</translation> + </message> + <message> <source>Rescanning...</source> <translation>Перасканаванне...</translation> </message> diff --git a/src/qt/locale/bitcoin_bg.ts b/src/qt/locale/bitcoin_bg.ts index 5d2995802e..2ef1c7160f 100644 --- a/src/qt/locale/bitcoin_bg.ts +++ b/src/qt/locale/bitcoin_bg.ts @@ -387,6 +387,10 @@ <translation>Покажи списък с използваните адреси и имена.</translation> </message> <message> + <source>Open a bitcoin: URI or payment request</source> + <translation>Отворете биткойн: URI или заявка за плащане</translation> + </message> + <message> <source>&Command-line options</source> <translation>&Налични команди</translation> </message> @@ -481,6 +485,10 @@ <translation>Такса:</translation> </message> <message> + <source>Dust:</source> + <translation>Прах:</translation> + </message> + <message> <source>After Fee:</source> <translation>След прилагане на ДДС</translation> </message> @@ -573,6 +581,10 @@ <translation>Копиране на приоритет</translation> </message> <message> + <source>Copy dust</source> + <translation>Копирай прахта:</translation> + </message> + <message> <source>Copy change</source> <translation>Копирай рестото</translation> </message> @@ -629,6 +641,10 @@ <translation>не</translation> </message> <message> + <source>This means a fee of at least %1 per kB is required.</source> + <translation>Това означава че се изисква такса от поне %1 на килобайт.</translation> + </message> + <message> <source>Can vary +/- 1 byte per input.</source> <translation>Може да варира с +-1 байт</translation> </message> @@ -803,10 +819,22 @@ <translation>Мегабайта</translation> </message> <message> + <source>Accept connections from outside</source> + <translation>Приемай връзки отвън</translation> + </message> + <message> + <source>Allow incoming connections</source> + <translation>Позволи входящите връзки</translation> + </message> + <message> <source>IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1)</source> <translation>IP адрес на прокси (напр. за IPv4: 127.0.0.1 / за IPv6: ::1)</translation> </message> <message> + <source>Third party transaction URLs</source> + <translation>URL адреси на трети страни</translation> + </message> + <message> <source>Reset all client options to default.</source> <translation>Възстановете всички настройки по подразбиране.</translation> </message> @@ -891,6 +919,10 @@ <translation>Изберете единиците, показвани по подразбиране в интерфейса.</translation> </message> <message> + <source>Whether to show coin control features or not.</source> + <translation>Дали да покаже възможностите за контрол на монетите или не.</translation> + </message> + <message> <source>&OK</source> <translation>ОК</translation> </message> @@ -934,6 +966,10 @@ <translation>Текущата информация на екрана може да не е актуална. Вашият портфейл ще се синхронизира автоматично с мрежата на Биткоин, щом поне една връзката с нея се установи; този процес все още не е приключил.</translation> </message> <message> + <source>Watch-only:</source> + <translation>В наблюдателен режим:</translation> + </message> + <message> <source>Available:</source> <translation>Налично:</translation> </message> @@ -950,6 +986,10 @@ <translation>Неразвит:</translation> </message> <message> + <source>Mined balance that has not yet matured</source> + <translation>Миниран баланс,който все още не се е развил</translation> + </message> + <message> <source>Balances</source> <translation>Баланс</translation> </message> @@ -977,14 +1017,46 @@ <context> <name>PaymentServer</name> <message> + <source>URI handling</source> + <translation>Справяне с URI</translation> + </message> + <message> + <source>Invalid payment address %1</source> + <translation>Невалиден адрес на плащане %1</translation> + </message> + <message> + <source>Payment request rejected</source> + <translation>Заявката за плащане беше отхвърлена</translation> + </message> + <message> + <source>Payment request network doesn't match client network.</source> + <translation>Мрежата от която се извършва заявката за плащане не съвпада с мрежата на клиента.</translation> + </message> + <message> <source>Requested payment amount of %1 is too small (considered dust).</source> <translation>Заявената сума за плащане: %1 е твърде малка (счита се за отпадък)</translation> </message> <message> + <source>Payment request error</source> + <translation>Възникна грешка по време назаявката за плащане</translation> + </message> + <message> + <source>Cannot start bitcoin: click-to-pay handler</source> + <translation>Биткойн не можe да се стартира: click-to-pay handler</translation> + </message> + <message> + <source>Payment request file handling</source> + <translation>Файл за справяне със заявки</translation> + </message> + <message> <source>Refund from %1</source> <translation>Възстановяване на сума от %1</translation> </message> <message> + <source>Payment request DoS protection</source> + <translation>Дос защита на заявката за плащане</translation> + </message> + <message> <source>Error communicating with %1: %2</source> <translation>Грешка при комуникацията с %1: %2</translation> </message> @@ -1019,6 +1091,14 @@ <translation>Сума</translation> </message> <message> + <source>Enter a Bitcoin address (e.g. %1)</source> + <translation>Въведете Биткойн адрес (например: %1)</translation> + </message> + <message> + <source>%1 d</source> + <translation>%1 ден</translation> + </message> + <message> <source>%1 h</source> <translation>%1 час</translation> </message> @@ -1149,6 +1229,30 @@ <translation>Услуги</translation> </message> <message> + <source>Starting Height</source> + <translation>Стартова височина</translation> + </message> + <message> + <source>Connection Time</source> + <translation>Продължителност на връзката</translation> + </message> + <message> + <source>Last Send</source> + <translation>Изпратени за последно</translation> + </message> + <message> + <source>Last Receive</source> + <translation>Получени за последно</translation> + </message> + <message> + <source>Bytes Sent</source> + <translation>Изпратени байтове</translation> + </message> + <message> + <source>Bytes Received</source> + <translation>Получени байтове</translation> + </message> + <message> <source>Ping Time</source> <translation>Време за отговор</translation> </message> @@ -1220,7 +1324,31 @@ <source>%1 GB</source> <translation>%1 Гигабайт</translation> </message> - </context> + <message> + <source>via %1</source> + <translation>посредством %1</translation> + </message> + <message> + <source>never</source> + <translation>Никога</translation> + </message> + <message> + <source>Inbound</source> + <translation>Входящи</translation> + </message> + <message> + <source>Outbound</source> + <translation>Изходящи</translation> + </message> + <message> + <source>Unknown</source> + <translation>Неизвестен</translation> + </message> + <message> + <source>Fetching...</source> + <translation>Прихващане...</translation> + </message> +</context> <context> <name>ReceiveCoinsDialog</name> <message> @@ -1409,6 +1537,14 @@ <translation>Ако тази опция е активирана,но адресът на промяна е празен или невалиден,промяната ще бъде изпратена на новосъздаден адрес.</translation> </message> <message> + <source>Transaction Fee:</source> + <translation>Такса за транзакцията:</translation> + </message> + <message> + <source>Choose...</source> + <translation>Избери...</translation> + </message> + <message> <source>per kilobyte</source> <translation>за килобайт</translation> </message> @@ -1421,10 +1557,22 @@ <translation>Препоръчителна:</translation> </message> <message> + <source>Custom:</source> + <translation>По избор:</translation> + </message> + <message> <source>Confirmation time:</source> <translation>Време за потвърждение:</translation> </message> <message> + <source>normal</source> + <translation>нормален</translation> + </message> + <message> + <source>fast</source> + <translation>бърз</translation> + </message> + <message> <source>Send to multiple recipients at once</source> <translation>Изпращане към повече от един получател</translation> </message> @@ -1437,6 +1585,10 @@ <translation>Изчисти всички полета от формуляра.</translation> </message> <message> + <source>Dust:</source> + <translation>Прах:</translation> + </message> + <message> <source>Clear &All</source> <translation>&Изчисти</translation> </message> @@ -1525,6 +1677,10 @@ <translation>Внимание:Неизвестен адрес за промяна</translation> </message> <message> + <source>Copy dust</source> + <translation>Копирай прахта:</translation> + </message> + <message> <source>Are you sure you want to send?</source> <translation>Наистина ли искате да изпратите?</translation> </message> @@ -1583,7 +1739,11 @@ <source>Pay To:</source> <translation>Плащане на:</translation> </message> - </context> + <message> + <source>Memo:</source> + <translation>Бележка:</translation> + </message> +</context> <context> <name>ShutdownWindow</name> <message> @@ -2167,14 +2327,30 @@ <translation>Внимание: -paytxfee е с мното голяма зададена стойност! Това е транзакционната такса, която ще платите ако направите транзакция.</translation> </message> <message> + <source>Whitelist peers connecting from the given netmask or IP address. Can be specified multiple times.</source> + <translation>Сложете в бял списък пиъри,свързващи се от дадената интернет маска или айпи адрес.Може да бъде заложено неколкократно.</translation> + </message> + <message> <source>(default: 1)</source> <translation>(по подразбиране 1)</translation> </message> <message> + <source><category> can be:</source> + <translation><category> може да бъде:</translation> + </message> + <message> <source>Connection options:</source> <translation>Настройки на връзката:</translation> </message> <message> + <source>Do you want to rebuild the block database now?</source> + <translation>Желаете ли да пресъздадете базата данни с блокове сега?</translation> + </message> + <message> + <source>Error initializing block database</source> + <translation>Грешка в пускането на базата данни с блокове</translation> + </message> + <message> <source>Error: Disk space is low!</source> <translation>Грешка: мястото на диска е малко!</translation> </message> @@ -2199,6 +2375,14 @@ <translation>Настройки на портфейла:</translation> </message> <message> + <source>Set the number of threads for coin generation if enabled (-1 = all cores, default: %d)</source> + <translation>Заложете броя на нишки за генерация на монети ако е включено(-1 = всички ядра, по подразбиране: %d)</translation> + </message> + <message> + <source>Warning: -maxtxfee is set very high! Fees this large could be paid on a single transaction.</source> + <translation>Внимание: -maxtxfee има много висока стойност! Толкова високи такси могат да бъдат заплатени на една транзакция.</translation> + </message> + <message> <source>Choose data directory on startup (default: 0)</source> <translation>Изберете директория при стартиране на програмата.( настройка по подразбиране:0)</translation> </message> @@ -2303,6 +2487,14 @@ <translation>Назовете конфигурационен файл(по подразбиране %s)</translation> </message> <message> + <source>Specify connection timeout in milliseconds (minimum: 1, default: %d)</source> + <translation>Задайте време на изключване при проблеми със свързването в милисекунди(минимум:1, по подразбиране %d)</translation> + </message> + <message> + <source>Specify pid file (default: %s)</source> + <translation>Задайте pid файл(по подразбиране: %s)</translation> + </message> + <message> <source>Invalid amount for -paytxfee=<amount>: '%s'</source> <translation>Невалидна сума за -paytxfee=<amount>: '%s'</translation> </message> diff --git a/src/qt/locale/bitcoin_de.ts b/src/qt/locale/bitcoin_de.ts index 928b72fae8..263852fad2 100644 --- a/src/qt/locale/bitcoin_de.ts +++ b/src/qt/locale/bitcoin_de.ts @@ -168,6 +168,10 @@ <translation>Sind Sie sich sicher, dass Sie Ihre Wallet verschlüsseln möchten?</translation> </message> <message> + <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Bitcoin Core wird jetzt beendet, um den Verschlüsselungsprozess abzuschließen. Vergessen Sie nicht, dass eine Wallet-Verschlüsselung nicht vollständig vor Diebstahl Ihrer Bitcoins durch Schadsoftware schützen kann, die Ihren Computer infiziert.</translation> + </message> + <message> <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source> <translation>WICHTIG: Alle vorherigen Wallet-Sicherungen sollten durch die neu erzeugte, verschlüsselte Wallet ersetzt werden. Aus Sicherheitsgründen werden vorherige Sicherungen der unverschlüsselten Wallet nutzlos, sobald Sie die neue, verschlüsselte Wallet verwenden.</translation> </message> @@ -184,6 +188,10 @@ <translation>Geben Sie die neue Passphrase für die Wallet ein.<br>Bitte benutzen Sie eine Passphrase bestehend aus <b>zehn oder mehr zufälligen Zeichen</b> oder <b>acht oder mehr Wörtern</b>.</translation> </message> <message> + <source>Enter the old passphrase and new passphrase to the wallet.</source> + <translation>Geben Sie die alte und neue Wallet-Passphrase ein.</translation> + </message> + <message> <source>Wallet encryption failed</source> <translation>Wallet-Verschlüsselung fehlgeschlagen</translation> </message> @@ -392,7 +400,7 @@ </message> <message> <source>Modify configuration options for Bitcoin Core</source> - <translation>Konfigurationsoptionen für Bitcoin Core ändern</translation> + <translation>Konfiguration von Bitcoin Core bearbeiten</translation> </message> <message> <source>Show the list of used sending addresses and labels</source> @@ -423,6 +431,10 @@ <translation>Keine Blockquelle verfügbar...</translation> </message> <message numerus="yes"> + <source>Processed %n block(s) of transaction history.</source> + <translation><numerusform>%n Block des Transaktionsverlaufs verarbeitet.</numerusform><numerusform>%n Blöcke des Transaktionsverlaufs verarbeitet.</numerusform></translation> + </message> + <message numerus="yes"> <source>%n hour(s)</source> <translation><numerusform>%n Stunde</numerusform><numerusform>%n Stunden</numerusform></translation> </message> @@ -703,6 +715,18 @@ <translation>keine</translation> </message> <message> + <source>This label turns red if the transaction size is greater than 1000 bytes.</source> + <translation>Diese Bezeichnung wird rot, wenn die Transaktion größer als 1000 Byte ist.</translation> + </message> + <message> + <source>This label turns red if the priority is smaller than "medium".</source> + <translation>Diese Bezeichnung wird rot, wenn die Priorität niedriger als "mittel" ist.</translation> + </message> + <message> + <source>This label turns red if any recipient receives an amount smaller than %1.</source> + <translation>Diese Bezeichnung wird rot, wenn irgendein Empfänger einen Betrag kleiner als %1 erhält.</translation> + </message> + <message> <source>Can vary +/- %1 satoshi(s) per input.</source> <translation>Kann pro Eingabe um +/- %1 Satoshi(s) abweichen.</translation> </message> @@ -953,6 +977,14 @@ <translation>IP-Adresse des Proxies (z.B. IPv4: 127.0.0.1 / IPv6: ::1)</translation> </message> <message> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu.</source> + <translation>Minimiert die Anwendung anstatt sie zu beenden wenn das Fenster geschlossen wird. Wenn dies aktiviert ist, müssen Sie die Anwendung über "Beenden" im Menü schließen.</translation> + </message> + <message> + <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin Core.</source> + <translation>Legt die Sprache der Benutzeroberfläche fest. Diese Einstellung wird erst nach einem Neustart von Bitcoin Core aktiv.</translation> + </message> + <message> <source>Third party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |.</source> <translation>Externe URLs (z.B. ein Block-Explorer), die im Kontextmenü des Transaktionsverlaufs eingefügt werden. In der URL wird %s durch den Transaktionshash ersetzt. Bei Angabe mehrerer URLs müssen diese durch "|" voneinander getrennt werden.</translation> </message> @@ -978,11 +1010,11 @@ </message> <message> <source>Automatically start Bitcoin Core after logging in to the system.</source> - <translation>Bitcoin Core nach dem Anmelden am System automatisch starten.</translation> + <translation>Bitcoin Core nach der Anmeldung am System automatisch starten.</translation> </message> <message> <source>&Start Bitcoin Core on system login</source> - <translation>Bitcoin Core bei der Systemanmeldung &starten</translation> + <translation>&Bitcoin Core nach Systemanmeldung starten</translation> </message> <message> <source>(0 = auto, <0 = leave that many cores free)</source> @@ -1098,7 +1130,7 @@ </message> <message> <source>Client will be shut down. Do you want to proceed?</source> - <translation>Client wird heruntergefahren. Möchten Sie den Vorgang fortsetzen?</translation> + <translation>Client wird beendet. Möchten Sie den Vorgang fortsetzen?</translation> </message> <message> <source>This change would require a client restart.</source> @@ -1239,10 +1271,18 @@ <translation>Zahlungsanforderungsdatei kann nicht gelesen werden! Dies kann durch eine ungültige Zahlungsanforderungsdatei verursacht werden.</translation> </message> <message> + <source>Payment request expired.</source> + <translation>Zahlungsanforderung abgelaufen.</translation> + </message> + <message> <source>Unverified payment requests to custom payment scripts are unsupported.</source> <translation>Unverifizierte Zahlungsanforderungen an benutzerdefinierte Zahlungsskripte werden nicht unterstützt.</translation> </message> <message> + <source>Invalid payment request.</source> + <translation>Ungültige Zahlungsanforderung.</translation> + </message> + <message> <source>Refund from %1</source> <translation>Rücküberweisung von %1</translation> </message> @@ -1407,6 +1447,10 @@ <translation>Aktuelle Anzahl Blöcke</translation> </message> <message> + <source>Open the Bitcoin Core debug log file from the current data directory. This can take a few seconds for large log files.</source> + <translation>Öffnet die "Bitcoin Core"-Debugprotokolldatei aus dem aktuellen Datenverzeichnis. Dies kann bei großen Protokolldateien einige Sekunden dauern.</translation> + </message> + <message> <source>Received</source> <translation>Empfangen</translation> </message> @@ -1524,7 +1568,7 @@ </message> <message> <source>Welcome to the Bitcoin Core RPC console.</source> - <translation>Willkommen in der Bitcoin Core RPC-Konsole.</translation> + <translation>Willkommen in der "Bitcoin Core"-RPC-Konsole.</translation> </message> <message> <source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source> @@ -1971,10 +2015,26 @@ <translation>Eine höhere Gebühr als %1 wird als unsinnig hohe Gebühr angesehen.</translation> </message> <message> + <source>Payment request expired.</source> + <translation>Zahlungsanforderung abgelaufen.</translation> + </message> + <message numerus="yes"> + <source>Estimated to begin confirmation within %n block(s).</source> + <translation><numerusform>Voraussichtlicher Beginn der Bestätigung innerhalb von %n Block.</numerusform><numerusform>Voraussichtlicher Beginn der Bestätigung innerhalb von %n Blöcken.</numerusform></translation> + </message> + <message> <source>Pay only the minimum fee of %1</source> <translation>Nur die minimale Gebühr in Höhe von %1 zahlen</translation> </message> <message> + <source>The recipient address is not valid. Please recheck.</source> + <translation>Die Zahlungsadresse ist ungültig, bitte nochmals überprüfen.</translation> + </message> + <message> + <source>Duplicate address found: addresses should only be used once each.</source> + <translation>Doppelte Adresse entdeckt: Adressen dürfen jeweils nur einmal vorkommen.</translation> + </message> + <message> <source>Warning: Invalid Bitcoin address</source> <translation>Warnung: Ungültige Bitcoin-Adresse</translation> </message> @@ -2046,14 +2106,26 @@ <translation>Diesen Eintrag entfernen</translation> </message> <message> + <source>The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source> + <translation>Die Gebühr wird vom zu überweisenden Betrag abgezogen. Der Empfänger wird also weniger Bitcoins erhalten, als Sie im Betrags-Feld eingegeben haben. Falls mehrere Empfänger ausgewählt wurden, wird die Gebühr gleichmäßig verteilt.</translation> + </message> + <message> <source>S&ubtract fee from amount</source> - <translation>Gebühr von Betrag ab&ziehen</translation> + <translation>Gebühr vom Betrag ab&ziehen</translation> </message> <message> <source>Message:</source> <translation>Nachricht:</translation> </message> <message> + <source>This is an unauthenticated payment request.</source> + <translation>Dies ist keine beglaubigte Zahlungsanforderung.</translation> + </message> + <message> + <source>This is an authenticated payment request.</source> + <translation>Dies ist eine beglaubigte Zahlungsanforderung.</translation> + </message> + <message> <source>Enter a label for this address to add it to the list of used addresses</source> <translation>Adressbezeichnung eingeben, die dann zusammen mit der Adresse der Liste bereits verwendeter Adressen hinzugefügt wird.</translation> </message> @@ -2495,6 +2567,10 @@ <translation>Zeigt an, ob eine beobachtete Adresse in diese Transaktion involviert ist.</translation> </message> <message> + <source>User-defined intent/purpose of the transaction.</source> + <translation>Benutzerdefinierte Absicht bzw. Verwendungszweck der Transaktion</translation> + </message> + <message> <source>Amount removed from or added to balance.</source> <translation>Der Betrag, der dem Kontostand abgezogen oder hinzugefügt wurde.</translation> </message> @@ -2737,6 +2813,10 @@ <translation>An die angegebene Adresse binden und immer abhören. Für IPv6 "[Host]:Port"-Notation verwenden</translation> </message> <message> + <source>Continuously rate-limit free transactions to <n>*1000 bytes per minute (default: %u)</source> + <translation>Durchgehend die Anzahl freier Transaktionen auf <n> * 1000 Byte pro Minute begrenzen (Standard: %u)</translation> + </message> + <message> <source>Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup</source> <translation>Alle Wallet-Transaktionen löschen und nur diese Teilbereiche der Blockkette durch -rescan beim Starten wiederherstellen</translation> </message> @@ -2757,6 +2837,10 @@ <translation>In diesem Modus legt -genproclimit fest, wie viele Blöcke sofort erzeugt werden.</translation> </message> <message> + <source>Maximum total fees to use in a single wallet transaction; setting this too low may abort large transactions (default: %s)</source> + <translation>Maximale Gesamtgebühren je Wallet-Transaktion, ein zu niedriger Wert kann große Transaktionen abbrechen (Standard: %s)</translation> + </message> + <message> <source>Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)</source> <translation>Maximale Anzahl an Skript-Verifizierungs-Threads festlegen (%u bis %d, 0 = automatisch, <0 = so viele Kerne frei lassen, Standard: %d)</translation> </message> @@ -2921,6 +3005,10 @@ <translation>Wallet-Optionen:</translation> </message> <message> + <source>Warning: This version is obsolete; upgrade required!</source> + <translation>Warnung: Diese Version is veraltet, Aktualisierung erforderlich!</translation> + </message> + <message> <source>You need to rebuild the database using -reindex to change -txindex</source> <translation>Sie müssen die Datenbank mit Hilfe von -reindex neu aufbauen, um -txindex zu verändern</translation> </message> @@ -2953,6 +3041,10 @@ <translation>Neue Dateien mit Standard-Systemrechten erzeugen, anstatt mit umask 077 (nur mit deaktivierter Walletfunktion nutzbar)</translation> </message> <message> + <source>Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)</source> + <translation>Eigene IP-Adressen ermitteln (Standard: 1, wenn abgehört wird und nicht -externalip oder -proxy)</translation> + </message> + <message> <source>Error: Listening for incoming connections failed (listen returned error %s)</source> <translation>Fehler: Abhören nach eingehenden Verbindungen fehlgeschlagen (listen meldete Fehler %s)</translation> </message> @@ -2989,6 +3081,14 @@ <translation>Adressen von Gegenstellen via DNS-Namensauflösung finden, falls zu wenige Adressen verfügbar sind (Standard: 1, außer bei -connect)</translation> </message> <message> + <source>Randomize credentials for every proxy connection. This enables Tor stream isolation (default: %u)</source> + <translation>Zufällige Anmeldedaten für jede Proxyverbindung verwenden. Dies aktiviert Tor-Datenflussisolation (Standard: %u)</translation> + </message> + <message> + <source>Require high priority for relaying free or low-fee transactions (default: %u)</source> + <translation>Hohe Priorität zum Weiterleiten von freien bzw. Transaktionen mit niedrigen Gebühren voraussetzen (Standard: %u)</translation> + </message> + <message> <source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source> <translation>Maximale Größe in Byte von "high-priority/low-fee"-Transaktionen festlegen (Standard: %d)</translation> </message> @@ -2997,6 +3097,10 @@ <translation>Maximale Anzahl an Threads zur Bitcoinerzeugung, wenn aktiviert, festlegen (-1 = alle Kerne, Standard: %d)</translation> </message> <message> + <source>The transaction amount is too small to send after the fee has been deducted</source> + <translation>Der Transaktionsbetrag ist zum senden zu niedrig, nachdem die Gebühr abgezogen wurde.</translation> + </message> + <message> <source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit <https://www.openssl.org/> and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source> <translation>Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im OpenSSL-Toolkit <https://www.openssl.org/> entwickelt wird, sowie von Eric Young geschriebene kryptographische Software und von Thomas Bernard geschriebene UPnP-Software.</translation> </message> @@ -3045,6 +3149,14 @@ Beispiel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com <translation>Öffentliche REST-Anfragen annehmen (Standard: %u)</translation> </message> <message> + <source>Activating best chain...</source> + <translation>Aktiviere beste Blockkette...</translation> + </message> + <message> + <source>Allow self signed root certificates (default: 0)</source> + <translation>Selbstunterschriebene Stammzertifikate erlauben (Standard: 0)</translation> + </message> + <message> <source>Cannot resolve -whitebind address: '%s'</source> <translation>Kann Adresse in -whitebind nicht auflösen: '%s'</translation> </message> @@ -3177,6 +3289,10 @@ Beispiel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com <translation>Minimiert starten</translation> </message> <message> + <source>The transaction amount is too small to pay the fee</source> + <translation>Der Transaktionsbetrag ist zu niedrig, um die Gebühr zu bezahlen.</translation> + </message> + <message> <source>This is experimental software.</source> <translation>Dies ist experimentelle Software.</translation> </message> @@ -3361,6 +3477,10 @@ Beispiel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com <translation>Maximal <n> Verbindungen zu Gegenstellen aufrechterhalten (Standard: %u)</translation> </message> <message> + <source>Make the wallet broadcast transactions</source> + <translation>Die Wallet soll Transaktionen übertragen/broadcasten</translation> + </message> + <message> <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: %u)</source> <translation>Maximale Größe des Empfangspuffers pro Verbindung, <n> * 1000 Byte (Standard: %u)</translation> </message> diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts index 8dfef68373..90a13feaca 100644 --- a/src/qt/locale/bitcoin_en.ts +++ b/src/qt/locale/bitcoin_en.ts @@ -1459,13 +1459,13 @@ <translation>Form</translation> </message> <message> - <location line="+53"/> - <location line="+372"/> + <location line="+59"/> + <location line="+386"/> <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Bitcoin network after a connection is established, but this process has not completed yet.</source> <translation>The displayed information may be out of date. Your wallet automatically synchronizes with the Bitcoin network after a connection is established, but this process has not completed yet.</translation> </message> <message> - <location line="-133"/> + <location line="-139"/> <source>Watch-only:</source> <translation type="unfinished"></translation> </message> @@ -1500,12 +1500,12 @@ <translation>Mined balance that has not yet matured</translation> </message> <message> - <location line="-163"/> + <location line="-177"/> <source>Balances</source> <translation type="unfinished"></translation> </message> <message> - <location line="+147"/> + <location line="+161"/> <source>Total:</source> <translation>Total:</translation> </message> @@ -1544,12 +1544,6 @@ <source>Current total balance in watch-only addresses</source> <translation type="unfinished"></translation> </message> - <message> - <location filename="../overviewpage.cpp" line="+133"/> - <location line="+1"/> - <source>out of sync</source> - <translation>out of sync</translation> - </message> </context> <context> <name>PaymentServer</name> @@ -2648,14 +2642,14 @@ <context> <name>SendCoinsEntry</name> <message> - <location filename="../forms/sendcoinsentry.ui" line="+149"/> - <location line="+535"/> - <location line="+536"/> + <location filename="../forms/sendcoinsentry.ui" line="+155"/> + <location line="+539"/> + <location line="+533"/> <source>A&mount:</source> <translation>A&mount:</translation> </message> <message> - <location line="-1184"/> + <location line="-1185"/> <source>Pay &To:</source> <translation>Pay &To:</translation> </message> @@ -2675,12 +2669,12 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-40"/> + <location line="-46"/> <source>This is a normal payment.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+33"/> + <location line="+39"/> <source>The Bitcoin address to send the payment to</source> <translation type="unfinished"></translation> </message> @@ -2701,13 +2695,13 @@ </message> <message> <location line="+7"/> - <location line="+544"/> - <location line="+536"/> + <location line="+548"/> + <location line="+533"/> <source>Remove this entry</source> <translation type="unfinished"></translation> </message> <message> - <location line="-1020"/> + <location line="-1021"/> <source>The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source> <translation type="unfinished"></translation> </message> @@ -2722,17 +2716,17 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+436"/> + <location line="+443"/> <source>This is an unauthenticated payment request.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+532"/> + <location line="+529"/> <source>This is an authenticated payment request.</source> <translation type="unfinished"></translation> </message> <message> - <location line="-1005"/> + <location line="-1009"/> <source>Enter a label for this address to add it to the list of used addresses</source> <translation type="unfinished"></translation> </message> @@ -2742,14 +2736,14 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+444"/> - <location line="+532"/> + <location line="+448"/> + <location line="+529"/> <source>Pay To:</source> <translation type="unfinished"></translation> </message> <message> - <location line="-498"/> - <location line="+536"/> + <location line="-495"/> + <location line="+533"/> <source>Memo:</source> <translation type="unfinished"></translation> </message> @@ -3589,27 +3583,27 @@ <translation>Options:</translation> </message> <message> - <location line="+34"/> + <location line="+35"/> <source>Specify data directory</source> <translation>Specify data directory</translation> </message> <message> - <location line="-93"/> + <location line="-94"/> <source>Connect to a node to retrieve peer addresses, and disconnect</source> <translation>Connect to a node to retrieve peer addresses, and disconnect</translation> </message> <message> - <location line="+96"/> + <location line="+97"/> <source>Specify your own public address</source> <translation>Specify your own public address</translation> </message> <message> - <location line="-116"/> + <location line="-117"/> <source>Accept command line and JSON-RPC commands</source> <translation>Accept command line and JSON-RPC commands</translation> </message> <message> - <location line="+94"/> + <location line="+95"/> <source>Run in the background as a daemon and accept commands</source> <translation>Run in the background as a daemon and accept commands</translation> </message> @@ -3619,7 +3613,7 @@ <translation>Use the test network</translation> </message> <message> - <location line="-135"/> + <location line="-136"/> <source>Accept connections from outside (default: 1 if no -proxy or -connect)</source> <translation>Accept connections from outside (default: 1 if no -proxy or -connect)</translation> </message> @@ -3839,7 +3833,7 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+17"/> + <location line="+18"/> <source>Set database cache size in megabytes (%d to %d, default: %d)</source> <translation type="unfinished"></translation> </message> @@ -3894,7 +3888,7 @@ <translation>You need to rebuild the database using -reindex to change -txindex</translation> </message> <message> - <location line="-98"/> + <location line="-99"/> <source>Imports blocks from external blk000??.dat file</source> <translation>Imports blocks from external blk000??.dat file</translation> </message> @@ -4194,6 +4188,11 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. <translation type="unfinished"></translation> </message> <message> + <location line="+1"/> + <source>Rebuild block chain index from current blk000??.dat files on startup</source> + <translation type="unfinished"></translation> + </message> + <message> <location line="+7"/> <source>Send trace/debug info to console instead of debug.log file</source> <translation>Send trace/debug info to console instead of debug.log file</translation> @@ -4324,7 +4323,7 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. <translation>wallet.dat corrupt, salvage failed</translation> </message> <message> - <location line="-70"/> + <location line="-71"/> <source>Password for JSON-RPC connections</source> <translation>Password for JSON-RPC connections</translation> </message> @@ -4334,7 +4333,7 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. <translation>Execute command when the best block changes (%s in cmd is replaced by block hash)</translation> </message> <message> - <location line="+257"/> + <location line="+258"/> <source>Upgrade wallet to latest format</source> <translation>Upgrade wallet to latest format</translation> </message> @@ -4354,7 +4353,7 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. <translation>This help message</translation> </message> <message> - <location line="-115"/> + <location line="-116"/> <source>Allow DNS lookups for -addnode, -seednode and -connect</source> <translation>Allow DNS lookups for -addnode, -seednode and -connect</translation> </message> @@ -4504,7 +4503,7 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. <translation type="unfinished"></translation> </message> <message> - <location line="+8"/> + <location line="+9"/> <source>Relay and mine data carrier transactions (default: %u)</source> <translation type="unfinished"></translation> </message> @@ -4584,7 +4583,7 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. <translation>Unknown network specified in -onlynet: '%s'</translation> </message> <message> - <location line="-118"/> + <location line="-119"/> <source>Cannot resolve -bind address: '%s'</source> <translation>Cannot resolve -bind address: '%s'</translation> </message> @@ -4629,12 +4628,12 @@ for example: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo. <translation>Cannot write default address</translation> </message> <message> - <location line="+76"/> + <location line="+77"/> <source>Rescanning...</source> <translation>Rescanning...</translation> </message> <message> - <location line="-63"/> + <location line="-64"/> <source>Done loading</source> <translation>Done loading</translation> </message> diff --git a/src/qt/locale/bitcoin_fa.ts b/src/qt/locale/bitcoin_fa.ts index 0bed017614..25d437668f 100644 --- a/src/qt/locale/bitcoin_fa.ts +++ b/src/qt/locale/bitcoin_fa.ts @@ -2,6 +2,10 @@ <context> <name>AddressBookPage</name> <message> + <source>Right-click to edit address or label</source> + <translation>برای تغییر آدرس و یا برچسب کلیک راست کنید.</translation> + </message> + <message> <source>Create a new address</source> <translation>ایجاد نشانی جدید</translation> </message> @@ -42,6 +46,22 @@ <translation>&حذف</translation> </message> <message> + <source>Choose the address to send coins to</source> + <translation>آدرس مورد نظر برای ارسال کوین ها را انتخاب کنید</translation> + </message> + <message> + <source>Choose the address to receive coins with</source> + <translation>آدرس موردنظر برای دریافت کوین ها را انتخاب کنید.</translation> + </message> + <message> + <source>Sending addresses</source> + <translation>آدرس های ارسال کننده</translation> + </message> + <message> + <source>Receiving addresses</source> + <translation>آدرس های دریافت کننده</translation> + </message> + <message> <source>These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source> <translation>اینها نشانیهای بیتکوین شما برای ارسال وجود هستند. همیشه قبل از ارسال سکهها، نشانی دریافتکننده و مقدار ارسالی را بررسی کنید.</translation> </message> @@ -322,6 +342,10 @@ <source>Bitcoin Core</source> <translation> هسته Bitcoin </translation> </message> + <message> + <source>&About Bitcoin Core</source> + <translation>درباره هسته ی بیت کوین</translation> + </message> <message numerus="yes"> <source>%n active connection(s) to Bitcoin network</source> <translation><numerusform>%n ارتباط فعال با شبکهٔ بیتکوین</numerusform></translation> @@ -401,10 +425,38 @@ <context> <name>CoinControlDialog</name> <message> + <source>Coin Selection</source> + <translation>انتخاب سکه</translation> + </message> + <message> + <source>Quantity:</source> + <translation>تعداد:</translation> + </message> + <message> + <source>Bytes:</source> + <translation>بایت ها:</translation> + </message> + <message> <source>Amount:</source> <translation>مبلغ:</translation> </message> <message> + <source>Priority:</source> + <translation>اولویت:</translation> + </message> + <message> + <source>Fee:</source> + <translation>هزینه:</translation> + </message> + <message> + <source>After Fee:</source> + <translation>هزینه ی پسین:</translation> + </message> + <message> + <source>Change:</source> + <translation>پول خورد:</translation> + </message> + <message> <source>Amount</source> <translation>مبلغ</translation> </message> @@ -905,10 +957,34 @@ <translation>ارسال سکه</translation> </message> <message> + <source>Quantity:</source> + <translation>تعداد:</translation> + </message> + <message> + <source>Bytes:</source> + <translation>بایت ها:</translation> + </message> + <message> <source>Amount:</source> <translation>مبلغ:</translation> </message> <message> + <source>Priority:</source> + <translation>اولویت:</translation> + </message> + <message> + <source>Fee:</source> + <translation>هزینه:</translation> + </message> + <message> + <source>After Fee:</source> + <translation>هزینه ی پسین:</translation> + </message> + <message> + <source>Change:</source> + <translation>پول خورد:</translation> + </message> + <message> <source>Send to multiple recipients at once</source> <translation>ارسال به چند دریافتکنندهٔ بهطور همزمان</translation> </message> diff --git a/src/qt/locale/bitcoin_it.ts b/src/qt/locale/bitcoin_it.ts index 2aa1e1da43..6b52362b8a 100644 --- a/src/qt/locale/bitcoin_it.ts +++ b/src/qt/locale/bitcoin_it.ts @@ -168,6 +168,10 @@ <translation>Si è sicuri di voler cifrare il portamonete?</translation> </message> <message> + <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Bitcoin Core si chiuderà per portare a termine il processo di cifratura. Si ricorda che la cifratura del portamonete non garantisce protezione totale contro i furti causati da infezioni malware.</translation> + </message> + <message> <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source> <translation>IMPORTANTE: qualsiasi backup del file portamonete effettuato in precedenza dovrà essere sostituito con il file del portamonete cifrato appena generato. Per ragioni di sicurezza, i precedenti backup del file del portamonete non cifrato diventeranno inservibili non appena si inizierà ad utilizzare il nuovo portamonete cifrato.</translation> </message> @@ -184,6 +188,10 @@ <translation>Inserisci la nuova passphrase per il portamonete.<br/>Si consiglia di utilizzare <b>almeno dieci caratteri casuali</b> oppure <b>otto o più parole</b>.</translation> </message> <message> + <source>Enter the old passphrase and new passphrase to the wallet.</source> + <translation>Inserisci la vecchia e la nuova passphrase per il portamonete.</translation> + </message> + <message> <source>Wallet encryption failed</source> <translation>Cifratura del portamonete fallita</translation> </message> @@ -391,6 +399,10 @@ <translation>&Informazioni su Bitcoin Core</translation> </message> <message> + <source>Modify configuration options for Bitcoin Core</source> + <translation>Modifica opzioni di configurazione per Bitcoin Core</translation> + </message> + <message> <source>Show the list of used sending addresses and labels</source> <translation>Mostra la lista degli indirizzi di invio utilizzati</translation> </message> @@ -419,6 +431,10 @@ <translation>Nessuna fonte di blocchi disponibile...</translation> </message> <message numerus="yes"> + <source>Processed %n block(s) of transaction history.</source> + <translation><numerusform>Elaborato %n blocco dello storico transazioni.</numerusform><numerusform>Elaborati %n blocchi dello storico transazioni.</numerusform></translation> + </message> + <message numerus="yes"> <source>%n hour(s)</source> <translation><numerusform>%n ora</numerusform><numerusform>%n ore</numerusform></translation> </message> @@ -471,6 +487,36 @@ <translation>In aggiornamento...</translation> </message> <message> + <source>Date: %1 +</source> + <translation>Data: %1 +</translation> + </message> + <message> + <source>Amount: %1 +</source> + <translation>Quantità: %1 +</translation> + </message> + <message> + <source>Type: %1 +</source> + <translation>Tipo: %1 +</translation> + </message> + <message> + <source>Label: %1 +</source> + <translation>Etichetta: %1 +</translation> + </message> + <message> + <source>Address: %1 +</source> + <translation>Indirizzo: %1 +</translation> + </message> + <message> <source>Sent transaction</source> <translation>Transazione inviata</translation> </message> @@ -669,6 +715,18 @@ <translation>nessuno</translation> </message> <message> + <source>This label turns red if the transaction size is greater than 1000 bytes.</source> + <translation>Questa etichetta diventerà rossa se la dimensione della transazione supererà i 1000 byte.</translation> + </message> + <message> + <source>This label turns red if the priority is smaller than "medium".</source> + <translation>Questa etichetta diventerà rossa se la priorità sarà inferiore a "media".</translation> + </message> + <message> + <source>This label turns red if any recipient receives an amount smaller than %1.</source> + <translation>Questa etichetta diventerà rossa se uno qualsiasi dei destinatari riceverà un importo inferiore a %1.</translation> + </message> + <message> <source>Can vary +/- %1 satoshi(s) per input.</source> <translation>Può variare di +/- %1 satoshi per input.</translation> </message> @@ -911,6 +969,14 @@ <translation>Indirizzo IP del proxy (ad es. IPv4: 127.0.0.1 / IPv6: ::1)</translation> </message> <message> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu.</source> + <translation>Riduci ad icona invece di uscire dall'applicazione quando la finestra viene chiusa. Attivando questa opzione l'applicazione terminerà solo dopo aver selezionato Esci dal menu File.</translation> + </message> + <message> + <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin Core.</source> + <translation>La lingua dell'interfaccia utente può essere impostata qui. L'applicazione delle modifiche avrà effetto dopo il riavvio di Bitcoin Core.</translation> + </message> + <message> <source>Third party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |.</source> <translation>URL di terze parti (ad es. un block explorer) che appaiono nella tabella delle transazioni come voci nel menu contestuale. "%s" nell'URL è sostituito dall'hash della transazione. Per specificare più URL separarli con una barra verticale "|".</translation> @@ -936,6 +1002,14 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>Rete</translation> </message> <message> + <source>Automatically start Bitcoin Core after logging in to the system.</source> + <translation>Avvia automaticamente Bitcoin Core una volta effettuato l'accesso al sistema.</translation> + </message> + <message> + <source>&Start Bitcoin Core on system login</source> + <translation>&Avvia Bitcoin Core all'accesso al sistema</translation> + </message> + <message> <source>(0 = auto, <0 = leave that many cores free)</source> <translation>(0 = automatico, <0 = lascia questo numero di core liberi)</translation> </message> @@ -1048,6 +1122,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>È necessario un riavvio del client per applicare le modifiche.</translation> </message> <message> + <source>Client will be shut down. Do you want to proceed?</source> + <translation>Il client sarà arrestato. Si desidera procedere?</translation> + </message> + <message> <source>This change would require a client restart.</source> <translation>Questa modifica richiede un riavvio del client.</translation> </message> @@ -1186,10 +1264,18 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>Impossibile leggere il file della richiesta di pagamento! Il file della richiesta di pagamento potrebbe non essere valido.</translation> </message> <message> + <source>Payment request expired.</source> + <translation>Richiesta di pagamento scaduta.</translation> + </message> + <message> <source>Unverified payment requests to custom payment scripts are unsupported.</source> <translation>Le richieste di pagamento non verificate verso script di pagamento personalizzati non sono supportate.</translation> </message> <message> + <source>Invalid payment request.</source> + <translation>Richiesta di pagamento non valida.</translation> + </message> + <message> <source>Refund from %1</source> <translation>Rimborso da %1</translation> </message> @@ -1229,6 +1315,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>User Agent</translation> </message> <message> + <source>Node/Service</source> + <translation>Nodo/Servizio</translation> + </message> + <message> <source>Ping Time</source> <translation>Tempo di ping</translation> </message> @@ -1350,6 +1440,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>Numero attuale di blocchi</translation> </message> <message> + <source>Open the Bitcoin Core debug log file from the current data directory. This can take a few seconds for large log files.</source> + <translation>Apre il file log di debug di Bitcoin Core dalla cartella dati attuale. Questa azione può richiedere alcuni secondi per file log di grandi dimensioni.</translation> + </message> + <message> <source>Received</source> <translation>Ricevuto</translation> </message> @@ -1418,6 +1512,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>Tempo di Ping</translation> </message> <message> + <source>Time Offset</source> + <translation>Scarto Temporale</translation> + </message> + <message> <source>Last block time</source> <translation>Ora del blocco più recente</translation> </message> @@ -1462,6 +1560,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>Cancella console</translation> </message> <message> + <source>Welcome to the Bitcoin Core RPC console.</source> + <translation>Benvenuto nella console RPC di Bitcoin Core.</translation> + </message> + <message> <source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source> <translation>Usa le frecce direzionali per scorrere la cronologia, e <b>Ctrl-L</b> per cancellarla.</translation> </message> @@ -1758,6 +1860,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>Se la commissione personalizzata è impostata su 1000 satoshi e la transazione è di soli 250 byte, allora "per kilobyte" paga solo 250 satoshi di commissione, mentre "somma almeno" paga 1000 satoshi. Per transazioni più grandi di un kilobyte, entrambe le opzioni pagano al kilobyte.</translation> </message> <message> + <source>Hide</source> + <translation>Nascondi</translation> + </message> + <message> <source>total at least</source> <translation>somma almeno</translation> </message> @@ -1898,10 +2004,26 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>La transazione è stata respinta! Questo può accadere se alcuni bitcoin nel tuo portamonete sono già stati spesi, come nel caso in cui tu avessi utilizzato una copia del file wallet.dat per spendere bitcoin e questi non fossero stati considerati come spesi dal portamonete corrente.</translation> </message> <message> + <source>A fee higher than %1 is considered an absurdly high fee.</source> + <translation>Una commissione maggiore di %1 è considerata irragionevolmente elevata.</translation> + </message> + <message> + <source>Payment request expired.</source> + <translation>Richiesta di pagamento scaduta.</translation> + </message> + <message> <source>Pay only the minimum fee of %1</source> <translation>Paga solamente la commissione minima di %1</translation> </message> <message> + <source>The recipient address is not valid. Please recheck.</source> + <translation>L'indirizzo del beneficiario non è valido. Si prega di ricontrollare.</translation> + </message> + <message> + <source>Duplicate address found: addresses should only be used once each.</source> + <translation>Rilevato un indirizzo duplicato Ciascun indirizzo dovrebbe essere utilizzato una sola volta.</translation> + </message> + <message> <source>Warning: Invalid Bitcoin address</source> <translation>Attenzione: Indirizzo Bitcoin non valido</translation> </message> @@ -1973,10 +2095,26 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>Rimuovi questa voce</translation> </message> <message> + <source>The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source> + <translation>La commissione sarà sottratta dall'importo che si sta inviando. Il beneficiario riceverà un totale di bitcoin inferiore al valore digitato. Nel caso in cui siano stati selezionati più beneficiari la commissione sarà suddivisa in parti uguali.</translation> + </message> + <message> + <source>S&ubtract fee from amount</source> + <translation>S&ottrae la commissione dall'importo</translation> + </message> + <message> <source>Message:</source> <translation>Messaggio:</translation> </message> <message> + <source>This is an unauthenticated payment request.</source> + <translation>Questa è una richiesta di pagamento non autenticata.</translation> + </message> + <message> + <source>This is an authenticated payment request.</source> + <translation>Questa è una richiesta di pagamento autenticata.</translation> + </message> + <message> <source>Enter a label for this address to add it to the list of used addresses</source> <translation>Inserisci un'etichetta per questo indirizzo per aggiungerlo alla lista degli indirizzi utilizzati</translation> </message> @@ -2015,6 +2153,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>&Firma Messaggio</translation> </message> <message> + <source>You can sign messages/agreements with your addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation>È possibile firmare messaggi/accordi con i propri indirizzi in modo da dimostrare di poter ricevere bitcoin attraverso di essi. Si consiglia di prestare attenzione a non firmare dichiarazioni vaghe o casuali, attacchi di phishing potrebbero cercare di indurre ad apporre la firma su di esse. Si raccomanda di firmare esclusivamente dichiarazioni completamente dettagliate e delle quali si condivide in pieno il contenuto.</translation> + </message> + <message> <source>The Bitcoin address to sign the message with</source> <translation>L'indirizzo Bitcoin da utilizzare per firmare il messaggio</translation> </message> @@ -2067,6 +2209,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>&Verifica Messaggio</translation> </message> <message> + <source>Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction!</source> + <translation>Per verificare il messaggio inserire l'indirizzo del firmatario, il messaggio e la firma nei campi sottostanti, assicurandosi di copiare esattamente anche ritorni a capo, spazi, tabulazioni, etc.. Si raccomanda di non lasciarsi fuorviare dalla firma a leggere più di quanto non sia riportato nel testo del messaggio stesso, in modo da evitare di cadere vittima di attacchi di tipo man-in-the-middle. Si ricorda che la verifica della firma dimostra soltanto che il firmatario può ricevere pagamenti con l'indirizzo corrispondente, non prova l'invio di alcuna transazione.</translation> + </message> + <message> <source>The Bitcoin address the message was signed with</source> <translation>L'indirizzo Bitcoin con cui è stato contrassegnato il messaggio</translation> </message> @@ -2418,6 +2564,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>Indica se un indirizzo di sola lettura sia o meno coinvolto in questa transazione.</translation> </message> <message> + <source>User-defined intent/purpose of the transaction.</source> + <translation>Intento/scopo della transazione definito dall'utente.</translation> + </message> + <message> <source>Amount removed from or added to balance.</source> <translation>Importo rimosso o aggiunto al saldo.</translation> </message> @@ -2660,6 +2810,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>Associa all'indirizzo indicato e resta permanentemente in ascolto su di esso. Usa la notazione [host]:porta per l'IPv6</translation> </message> <message> + <source>Continuously rate-limit free transactions to <n>*1000 bytes per minute (default: %u)</source> + <translation>Limita la quantità di transazioni gratuite ad <n>*1000 byte al minuto (predefinito: %u)</translation> + </message> + <message> <source>Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup</source> <translation>Elimina tutte le transazioni dal portamonete e recupera solo quelle che fanno parte della blockchain attraverso il comando -rescan all'avvio.</translation> </message> @@ -2680,6 +2834,14 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>In questa modalità -genproclimit determina quanti blocchi saranno generati immediatamente.</translation> </message> <message> + <source>Maximum total fees to use in a single wallet transaction; setting this too low may abort large transactions (default: %s)</source> + <translation>Commissioni massime totali da includere in una singola transazione dal portamonete. Un'impostazione troppo bassa potrebbe provocare l'annullamento di transazioni di grosse dimensioni (predefinito: %s)</translation> + </message> + <message> + <source>Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, >%u = target size in MiB to use for block files)</source> + <translation>Riduce i requisiti di spazio di archiviazione attraverso la rimozione dei vecchi blocchi (pruning). Questa modalità disabilita le funzionalità di portamonete ed è incompatibile con l'opzione -txindex. Attenzione: il ripristinando questa opzione l'intera blockchain dovrà essere riscaricata. (predefinito: 0 = disabilita il pruning, >%u = dimensione desiderata in MiB per i file dei blocchi)</translation> + </message> + <message> <source>Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)</source> <translation>Imposta il numero di thread per la verifica degli script (da %u a %d, 0 = automatico, <0 = lascia questo numero di core liberi, predefinito: %d)</translation> </message> @@ -2808,6 +2970,14 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>Connessione ai soli nodi appartenenti alla rete <net> (ipv4, ipv6 o Tor)</translation> </message> <message> + <source>Prune cannot be configured with a negative value.</source> + <translation>La modalità prune non può essere configurata con un valore negativo.</translation> + </message> + <message> + <source>Prune mode is incompatible with -txindex.</source> + <translation>La modalità prune è incompatibile con l'opzione -txindex.</translation> + </message> + <message> <source>Set database cache size in megabytes (%d to %d, default: %d)</source> <translation>Imposta la dimensione della cache del database in megabyte (%d a %d, predefinito: %d)</translation> </message> @@ -2844,6 +3014,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>Opzioni portamonete:</translation> </message> <message> + <source>Warning: This version is obsolete; upgrade required!</source> + <translation>Attenzione: questa versione è obsoleta. Aggiornamento necessario!</translation> + </message> + <message> <source>You need to rebuild the database using -reindex to change -txindex</source> <translation>È necessario ricostruire il database usando -reindex per cambiare -txindex</translation> </message> @@ -2872,6 +3046,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>Crea nuovi file con i permessi di default del sistema, invece che con umask 077 (ha effetto solo con funzionalità di portamonete disabilitate)</translation> </message> <message> + <source>Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)</source> + <translation>Scopre i propri indirizzi IP (predefinito: 1 se in ascolto ed -externalip o -proxy non sono specificati)</translation> + </message> + <message> <source>Error: Listening for incoming connections failed (listen returned error %s)</source> <translation>Errore: attesa per connessioni in arrivo fallita (errore riportato %s)</translation> </message> @@ -2904,10 +3082,22 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>Dimensione massima dei dati in transazioni di trasporto dati che saranno trasmesse ed incluse nei blocchi (predefinito: %u)</translation> </message> <message> + <source>Prune configured below the minimum of %d MB. Please use a higher number.</source> + <translation>La modalità prune è configurata al di sotto del minimo di %d MB. Si prega di utilizzare un valore più elevato.</translation> + </message> + <message> <source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source> <translation>Ottiene gli indirizzi dei peer attraverso interrogazioni DNS, in caso di scarsa disponibilità (predefinito: 1 a meno che -connect non sia specificato)</translation> </message> <message> + <source>Randomize credentials for every proxy connection. This enables Tor stream isolation (default: %u)</source> + <translation>Randomizza le credenziali per ogni connessione proxy. Permette la Tor stream isolation (predefinito: %u)</translation> + </message> + <message> + <source>Require high priority for relaying free or low-fee transactions (default: %u)</source> + <translation>Richiedi alta priorità per la trasmissione di transazioni a zero o basse commissioni (predefinito: %u)</translation> + </message> + <message> <source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source> <translation>Imposta la dimensione massima in byte delle transazioni ad alta-priorità/basse-commissioni (predefinito: %d)</translation> </message> @@ -2916,6 +3106,10 @@ Per specificare più URL separarli con una barra verticale "|".</translation> <translation>Specifica il numero di thread per la generazione di bitcoin, se abilitata (-1 = tutti i core, predefinito: %d)</translation> </message> <message> + <source>The transaction amount is too small to send after the fee has been deducted</source> + <translation>L'importo della transazione risulta troppo basso per l'invio una volta dedotte le commissioni.</translation> + </message> + <message> <source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit <https://www.openssl.org/> and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source> <translation>Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso del Toolkit OpenSSL <https://www.openssl.org/>, software crittografico scritto da Eric Young e software UPnP scritto da Thomas Bernard.</translation> </message> @@ -2955,6 +3149,10 @@ Si raccomanda inoltre di configurare alertnotify in modo da ricevere notifiche d <translation>I peer inclusi in whitelist non possono subire ban per DoS e le loro transazioni saranno sempre trasmesse, anche nel caso in cui si trovino già nel mempool. Ciò è utile ad es. per i gateway</translation> </message> <message> + <source>You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain</source> + <translation>Per ritornare alla modalità unpruned sarà necessario ricostruire il database utilizzando l'opzione -reindex. L'intera blockchain sarà riscaricata.</translation> + </message> + <message> <source>(default: %u)</source> <translation>(default: %u)</translation> </message> @@ -2963,6 +3161,18 @@ Si raccomanda inoltre di configurare alertnotify in modo da ricevere notifiche d <translation>Accetta richieste REST pubbliche (predefinito: %u)</translation> </message> <message> + <source>Activating best chain...</source> + <translation>Attivazione della blockchain migliore...</translation> + </message> + <message> + <source>Allow self signed root certificates (default: 0)</source> + <translation>Permette certificati radice auto-firmati (predefinito: 0)</translation> + </message> + <message> + <source>Can't run with a wallet in prune mode.</source> + <translation>Impossibile operare con un portamonete in modalità prune.</translation> + </message> + <message> <source>Cannot resolve -whitebind address: '%s'</source> <translation>Impossibile risolvere indirizzo -whitebind: '%s'</translation> </message> @@ -3095,6 +3305,10 @@ Si raccomanda inoltre di configurare alertnotify in modo da ricevere notifiche d <translation>Avvia ridotto a icona</translation> </message> <message> + <source>The transaction amount is too small to pay the fee</source> + <translation>L'importo della transazione è troppo basso per pagare la commissione</translation> + </message> + <message> <source>This is experimental software.</source> <translation>Questo è un software sperimentale.</translation> </message> @@ -3115,6 +3329,10 @@ Si raccomanda inoltre di configurare alertnotify in modo da ricevere notifiche d <translation>Transazione troppo grande</translation> </message> <message> + <source>UI Options:</source> + <translation>Opzioni Interfaccia Utente:</translation> + </message> + <message> <source>Unable to bind to %s on this computer (bind returned error %s)</source> <translation>Impossibile associarsi a %s su questo computer (l'associazione ha restituito l'errore %s)</translation> </message> @@ -3279,6 +3497,10 @@ Si raccomanda inoltre di configurare alertnotify in modo da ricevere notifiche d <translation>Mantiene al massimo <n> connessioni verso i peer (predefinito: %u)</translation> </message> <message> + <source>Make the wallet broadcast transactions</source> + <translation>Configura il portamonete per la trasmissione di transazioni</translation> + </message> + <message> <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: %u)</source> <translation>Buffer di ricezione massimo per connessione, <n>*1000 byte (predefinito: %u)</translation> </message> diff --git a/src/qt/locale/bitcoin_ja.ts b/src/qt/locale/bitcoin_ja.ts index 329141edff..d46d748ef2 100644 --- a/src/qt/locale/bitcoin_ja.ts +++ b/src/qt/locale/bitcoin_ja.ts @@ -168,6 +168,10 @@ <translation>本当にウォレットを暗号化しますか?</translation> </message> <message> + <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>暗号化処理を完了させるため Bitcoin Core をいますぐ終了します。ウォレットの暗号化では、コンピュータに感染したマルウェアなどによるビットコインの盗難から完全に守ることはできないことにご注意ください。</translation> + </message> + <message> <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source> <translation>重要: 過去のウォレット ファイルのバックアップは、暗号化された新しいウォレット ファイルに取り替える必要があります。セキュリティ上の理由により、暗号化された新しいウォレットを使い始めると、暗号化されていないウォレット ファイルのバックアップはすぐに使えなくなります。</translation> </message> @@ -184,6 +188,10 @@ <translation>ウォレットの新しいパスフレーズを入力してください。<br/><b>10文字以上のランダムな文字</b>で構成されたものか、<b>8単語以上の単語</b>で構成されたパスフレーズを使用してください。</translation> </message> <message> + <source>Enter the old passphrase and new passphrase to the wallet.</source> + <translation>ウォレットの古いパスフレーズおよび新しいパスフレーズを入力してください。</translation> + </message> + <message> <source>Wallet encryption failed</source> <translation>ウォレットの暗号化に失敗しました</translation> </message> @@ -391,6 +399,10 @@ <translation>ビットコインコアについて (&A)</translation> </message> <message> + <source>Modify configuration options for Bitcoin Core</source> + <translation>Bitcoin Core の設定を編集する</translation> + </message> + <message> <source>Show the list of used sending addresses and labels</source> <translation>使用済みの送金用アドレスとラベルの一覧を表示する</translation> </message> @@ -419,6 +431,10 @@ <translation>利用可能なブロックがありません...</translation> </message> <message numerus="yes"> + <source>Processed %n block(s) of transaction history.</source> + <translation><numerusform>トランザクション履歴の %n ブロックを処理しました。</numerusform></translation> + </message> + <message numerus="yes"> <source>%n hour(s)</source> <translation><numerusform>%n 時間</numerusform></translation> </message> @@ -471,6 +487,36 @@ <translation>追跡中...</translation> </message> <message> + <source>Date: %1 +</source> + <translation>日付: %1 +</translation> + </message> + <message> + <source>Amount: %1 +</source> + <translation>総額: %1 +</translation> + </message> + <message> + <source>Type: %1 +</source> + <translation>タイプ: %1 +</translation> + </message> + <message> + <source>Label: %1 +</source> + <translation>ラベル: %1 +</translation> + </message> + <message> + <source>Address: %1 +</source> + <translation>アドレス: %1 +</translation> + </message> + <message> <source>Sent transaction</source> <translation>送金取引</translation> </message> @@ -669,6 +715,18 @@ <translation>なし</translation> </message> <message> + <source>This label turns red if the transaction size is greater than 1000 bytes.</source> + <translation>トランザクションのサイズが1000バイトを超える場合にはこのラベルは赤色になります。</translation> + </message> + <message> + <source>This label turns red if the priority is smaller than "medium".</source> + <translation>優先度が「中」未満の場合、このラベルは赤色になります。</translation> + </message> + <message> + <source>This label turns red if any recipient receives an amount smaller than %1.</source> + <translation>受取人のうち誰かの受取額が %1 未満の場合にこのラベルは赤色になります。</translation> + </message> + <message> <source>Can vary +/- %1 satoshi(s) per input.</source> <translation>ひとつの入力につき %1 satoshi 前後ずれることがあります。</translation> </message> @@ -919,6 +977,14 @@ <translation>プロキシのIPアドレス (例えば IPv4: 127.0.0.1 / IPv6: ::1)</translation> </message> <message> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu.</source> + <translation>ウィンドウを閉じる際にアプリケーションを終了するのではなく、最小化します。このオプションが有効化された場合、メニューから終了を選択した場合にのみアプリケーションは閉じられます。</translation> + </message> + <message> + <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin Core.</source> + <translation>ユーザ・インタフェイス言語はここで設定できます。この設定はBitcoin Coreの再起動後に有効となります。</translation> + </message> + <message> <source>Third party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |.</source> <translation>トランザクションタブのコンテキストメニュー項目に表示する、サードパーティURL (例えばブロックエクスプローラ)。URL中の%sはトランザクションのハッシュ値に置き換えられます。垂直バー | で区切ることで、複数のURLを指定できます。</translation> </message> @@ -943,6 +1009,14 @@ <translation>ネットワーク (&N)</translation> </message> <message> + <source>Automatically start Bitcoin Core after logging in to the system.</source> + <translation>システムにログインした際、自動的にBitcoin Coreを起動する。</translation> + </message> + <message> + <source>&Start Bitcoin Core on system login</source> + <translation>システムへログインした際にBitcoin Coreを起動する (&S)</translation> + </message> + <message> <source>(0 = auto, <0 = leave that many cores free)</source> <translation>(0 = 自動、0以上 = 指定した数のコアをフリーにする)</translation> </message> @@ -1055,6 +1129,10 @@ <translation>変更を有効化するにはクライアントを再起動する必要があります。</translation> </message> <message> + <source>Client will be shut down. Do you want to proceed?</source> + <translation>クライアントを終了します。続行してもよろしいですか?</translation> + </message> + <message> <source>This change would require a client restart.</source> <translation>この変更はクライアントの再起動が必要です。</translation> </message> @@ -1193,10 +1271,18 @@ <translation>支払いリクエストファイルを読み込めませんでした!無効な支払いリクエストファイルにより引き起こされた可能性があります。</translation> </message> <message> + <source>Payment request expired.</source> + <translation>支払いリクエストの期限が切れました。</translation> + </message> + <message> <source>Unverified payment requests to custom payment scripts are unsupported.</source> <translation>カスタム支払いスクリプトに対する、検証されていない支払いリクエストはサポートされていません。</translation> </message> <message> + <source>Invalid payment request.</source> + <translation>無効な支払いリクエスト。</translation> + </message> + <message> <source>Refund from %1</source> <translation>%1 からの返金</translation> </message> @@ -1236,6 +1322,10 @@ <translation>ユーザエージェント</translation> </message> <message> + <source>Node/Service</source> + <translation>ノード・サービス</translation> + </message> + <message> <source>Ping Time</source> <translation>Ping時間</translation> </message> @@ -1357,6 +1447,10 @@ <translation>現在のブロック数</translation> </message> <message> + <source>Open the Bitcoin Core debug log file from the current data directory. This can take a few seconds for large log files.</source> + <translation>現在のデータディレクトリからBitcoin Coreのデバッグ用ログファイルを開きます。ログファイルが巨大な場合、数秒かかることがあります。</translation> + </message> + <message> <source>Received</source> <translation>受取</translation> </message> @@ -1425,6 +1519,10 @@ <translation>Ping時間</translation> </message> <message> + <source>Time Offset</source> + <translation>時間オフセット</translation> + </message> + <message> <source>Last block time</source> <translation>最終ブロックの日時</translation> </message> @@ -1469,6 +1567,10 @@ <translation>コンソールをクリア</translation> </message> <message> + <source>Welcome to the Bitcoin Core RPC console.</source> + <translation>Bitcoin CoreのRPCコンソールへようこそ。</translation> + </message> + <message> <source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source> <translation>上下の矢印で履歴をたどれます。 <b>Ctrl-L</b> でスクリーンを消去できます。</translation> </message> @@ -1765,6 +1867,10 @@ <translation>カスタム手数料が1000satoshiに設定されている場合、トランザクションサイズが250バイトとすると、「1キロバイトあたり手数料」では250satoshiの手数料のみを支払いますが、「最小手数料」では1000satoshiを支払います。1キロバイトを超えるトランザクションの場合には、どちらの方法を選択したとしても1キロバイトあたりで支払われます。</translation> </message> <message> + <source>Hide</source> + <translation>隠す</translation> + </message> + <message> <source>total at least</source> <translation>最小手数料</translation> </message> @@ -1905,10 +2011,30 @@ <translation>トランザクションは拒否されました。wallet.dat のコピーを使い、そしてコピーしたウォレットからコインを使用したことがマークされなかったときなど、ウォレットのいくつかのコインがすでに使用されている場合に、このエラーは起こるかもしれません。</translation> </message> <message> + <source>A fee higher than %1 is considered an absurdly high fee.</source> + <translation>%1 よりも高い手数料の場合、手数料が高すぎると判断されます。</translation> + </message> + <message> + <source>Payment request expired.</source> + <translation>支払いリクエストの期限が切れました。</translation> + </message> + <message numerus="yes"> + <source>Estimated to begin confirmation within %n block(s).</source> + <translation><numerusform>%n ブロック以内に検証が開始されると予想されます。</numerusform></translation> + </message> + <message> <source>Pay only the minimum fee of %1</source> <translation>最小手数料 %1 のみを支払う</translation> </message> <message> + <source>The recipient address is not valid. Please recheck.</source> + <translation>受取アドレスが不正です。再チェックしてください。</translation> + </message> + <message> + <source>Duplicate address found: addresses should only be used once each.</source> + <translation>重複したアドレスが見つかりました: アドレスはそれぞれ一度のみ使用することができます。</translation> + </message> + <message> <source>Warning: Invalid Bitcoin address</source> <translation>警告:無効なBitcoinアドレスです</translation> </message> @@ -1980,10 +2106,26 @@ <translation>この項目を削除する</translation> </message> <message> + <source>The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source> + <translation>送金する金額から手数料が差し引かれます。受取人は数量フィールドで指定した量よりも少ないビットコインを受け取ります。受取人が複数いる場合には、手数料は均等割されます。</translation> + </message> + <message> + <source>S&ubtract fee from amount</source> + <translation>送金額から手数料を差し引く (&U)</translation> + </message> + <message> <source>Message:</source> <translation>メッセージ:</translation> </message> <message> + <source>This is an unauthenticated payment request.</source> + <translation>これは未認証の支払いリクエストです。</translation> + </message> + <message> + <source>This is an authenticated payment request.</source> + <translation>これは認証済みの支払いリクエストです。</translation> + </message> + <message> <source>Enter a label for this address to add it to the list of used addresses</source> <translation>このアドレスに対するラベルを入力することで、使用済みアドレスの一覧に追加することができます</translation> </message> @@ -2022,6 +2164,10 @@ <translation>メッセージの署名 (&S)</translation> </message> <message> + <source>You can sign messages/agreements with your addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation>あなたの所有しているアドレスによりメッセージや合意書に署名をすることで、それらアドレスに対して送られたビットコインを受け取ることができることを証明できます。フィッシング攻撃により不正にあなたの識別情報を署名させられてしまうことを防ぐために、不明確なものやランダムなものに対して署名しないよう注意してください。合意することが可能な、よく詳細の記された文言にのみ署名するようにしてください。</translation> + </message> + <message> <source>The Bitcoin address to sign the message with</source> <translation>メッセージを署名するBitcoinアドレス</translation> </message> @@ -2074,6 +2220,10 @@ <translation>メッセージの検証 (&V)</translation> </message> <message> + <source>Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction!</source> + <translation>受取人のアドレスとメッセージ(改行やスペース、タブなども完全に一致するよう注意してください)および署名を以下に入力し、メッセージの署名を検証してください。中間者攻撃により騙されるのを防ぐため、署名対象のメッセージに書かれていること以上の意味を署名から読み取ろうとしないよう注意してください。これは署名作成者がこのアドレスで受け取ったことを証明するだけであり、トランザクションの送信権限を証明するものではないことに注意してください!</translation> + </message> + <message> <source>The Bitcoin address the message was signed with</source> <translation>メッセージの署名に使われたBitcoinアドレス</translation> </message> @@ -2425,6 +2575,10 @@ <translation>監視限定アドレスがこのトランザクションに含まれているかどうか</translation> </message> <message> + <source>User-defined intent/purpose of the transaction.</source> + <translation>ユーザ定義のトランザクションの意図や目的。</translation> + </message> + <message> <source>Amount removed from or added to balance.</source> <translation>残高に追加または削除された総額。</translation> </message> @@ -2667,6 +2821,10 @@ <translation>指定のアドレスへバインドし、その上で常にリスンします。IPv6 は [ホスト名]:ポート番号 と表記します</translation> </message> <message> + <source>Continuously rate-limit free transactions to <n>*1000 bytes per minute (default: %u)</source> + <translation>継続的に無料トランザクションのレートを一分間に<n>*1000バイトに制限する (規定値: %u)</translation> + </message> + <message> <source>Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup</source> <translation>ウォレットの全トランザクションを削除し、これらを-rescanオプションを用いることで起動時にブロックチェインのデータのみからリカバリします。</translation> </message> @@ -2687,6 +2845,14 @@ <translation>このモードでは -genproclimit は何個のブロックをただちに生成するのか制御します。</translation> </message> <message> + <source>Maximum total fees to use in a single wallet transaction; setting this too low may abort large transactions (default: %s)</source> + <translation>ひとつのウォレットトランザクションで使用する合計手数料の最大値。低すぎる値を指定すると巨大なトランザクションの作成ができなくなります (規定値: %s)</translation> + </message> + <message> + <source>Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, >%u = target size in MiB to use for block files)</source> + <translation>古いブロックを剪定する(削除する)ことで記憶容量の必要量を削減する。このモードを有効にするとウォレット機能のサポートは無効になり、-txindexとも互換性がなくなります。警告: この設定の再有効化には全ブロックチェインの再ダウンロードが必要となります。(規定値: 0 = ブロックの剪定無効、>%u = ブロックファイルに使用するMiB単位の目標サイズ)</translation> + </message> + <message> <source>Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)</source> <translation>スクリプト検証スレッドを設定 (%uから%dの間, 0 = 自動, <0 = たくさんのコアを自由にしておく, 初期値: %d)</translation> </message> @@ -2816,6 +2982,14 @@ <translation><net> (ipv4, ipv6 または onion) ネットワーク内のノードだけに接続する</translation> </message> <message> + <source>Prune cannot be configured with a negative value.</source> + <translation>剪定値は負の値に設定できません。</translation> + </message> + <message> + <source>Prune mode is incompatible with -txindex.</source> + <translation>剪定モードは-txindexと互換性がありません。</translation> + </message> + <message> <source>Set database cache size in megabytes (%d to %d, default: %d)</source> <translation>データベースのキャッシュサイズをメガバイトで設定 (%dから%d。初期値: %d)</translation> </message> @@ -2852,6 +3026,10 @@ <translation>ウォレットオプション:</translation> </message> <message> + <source>Warning: This version is obsolete; upgrade required!</source> + <translation>警告: このバージョンはサポートされません。アップグレードが必要です!</translation> + </message> + <message> <source>You need to rebuild the database using -reindex to change -txindex</source> <translation>-txindex を変更するには -reindex を使用してデータベースを再構築する必要があります</translation> </message> @@ -2884,6 +3062,10 @@ <translation>umask 077 ではなく、システムのデフォルトパーミッションで新規ファイルを作成する (ウォレット機能が無効化されていた場合にのみ有効)</translation> </message> <message> + <source>Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)</source> + <translation>自分のIPアドレスを解決する (規定値: リッスンをしており、-externalipまたは-proxyオプションが指定されていない場合は1)</translation> + </message> + <message> <source>Error: Listening for incoming connections failed (listen returned error %s)</source> <translation>エラー: 内向きの接続をリッスンするのに失敗しました (エラー %s が返却されました)</translation> </message> @@ -2916,10 +3098,22 @@ <translation>中継および採掘を行う際の、データ運送トランザクションの中のデータの最大サイズ (初期値: %u)</translation> </message> <message> + <source>Prune configured below the minimum of %d MB. Please use a higher number.</source> + <translation>剪定が最小値の %d MB以下に設定されています。もっと大きな値を使用してください。</translation> + </message> + <message> <source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source> <translation>保有するピアアドレスが少ない場合、DNS ルックアップによりピアアドレスを問い合わせる (-connect を使っていない場合の初期値: 1)</translation> </message> <message> + <source>Randomize credentials for every proxy connection. This enables Tor stream isolation (default: %u)</source> + <translation>認証情報をプロキシー接続ごとにランダム化する。これによりTorストリーム分離をすることができます (規定値: %u)</translation> + </message> + <message> + <source>Require high priority for relaying free or low-fee transactions (default: %u)</source> + <translation>無料や低い手数料のトランザクションのリレーに際し、高い優先度を要求する (規定値: %u)</translation> + </message> + <message> <source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source> <translation>最優先/最低手数料の最大サイズをバイトで指定 (初期値: %d)</translation> </message> @@ -2928,6 +3122,10 @@ <translation>コイン生成が有効になっていた場合の利用スレッド数を設定する (-1 = すべてのコア, 初期値: %d)</translation> </message> <message> + <source>The transaction amount is too small to send after the fee has been deducted</source> + <translation>手数料差引後のトランザクションの金額が小さすぎるため、送金できません。</translation> + </message> + <message> <source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit <https://www.openssl.org/> and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source> <translation>この製品はOpenSSLプロジェクトにより開発されたソフトウェアをOpenSSLツールキットとして利用しています <https://www.openssl.org/>。また、Eric Young氏により開発された暗号ソフトウェア、Thomas Bernard氏により書かれたUPnPソフトウェアを用いています。</translation> </message> @@ -2968,10 +3166,30 @@ rpcpassword=%s <translation>ホワイトリストのピアはDoSによるアクセス禁止処理が無効化され、トランザクションは例えmempool内に既に存在していたとしても常にリレーされます。これは例えばゲートウェイに対して有用です</translation> </message> <message> + <source>You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain</source> + <translation>非剪定モードに戻るためには-reindexオプションを使用してデータベースを再構築する必要があります。これによりブロックチェイン全体の再ダウンロードが行われます。</translation> + </message> + <message> + <source>(default: %u)</source> + <translation>(規定値: %u)</translation> + </message> + <message> <source>Accept public REST requests (default: %u)</source> <translation>公開 REST リクエストを許可する (初期値: %u)</translation> </message> <message> + <source>Activating best chain...</source> + <translation>最優良のチェインを有効化しています...</translation> + </message> + <message> + <source>Allow self signed root certificates (default: 0)</source> + <translation>自己署名ルート証明書を許可する (規定値: 0)</translation> + </message> + <message> + <source>Can't run with a wallet in prune mode.</source> + <translation>剪定モードではウォレット機能付きで起動できません。</translation> + </message> + <message> <source>Cannot resolve -whitebind address: '%s'</source> <translation>-whitebind アドレス '%s' を解決できません</translation> </message> @@ -3104,6 +3322,10 @@ rpcpassword=%s <translation>最小化された状態で起動する</translation> </message> <message> + <source>The transaction amount is too small to pay the fee</source> + <translation>トランザクションの金額が小さすぎて手数料を支払えません</translation> + </message> + <message> <source>This is experimental software.</source> <translation>これは実験的なソフトウェアです。</translation> </message> @@ -3124,6 +3346,10 @@ rpcpassword=%s <translation>取引が大き過ぎます</translation> </message> <message> + <source>UI Options:</source> + <translation>UIオプション:</translation> + </message> + <message> <source>Unable to bind to %s on this computer (bind returned error %s)</source> <translation>このコンピュータの %s にバインドすることができません (バインドが返したエラーは %s)</translation> </message> @@ -3288,6 +3514,10 @@ rpcpassword=%s <translation>ピアの接続数を最大でも <n> 個に維持する (初期値: %u)</translation> </message> <message> + <source>Make the wallet broadcast transactions</source> + <translation>ウォレットのトランザクションをブロードキャストする</translation> + </message> + <message> <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: %u)</source> <translation>接続毎の最大受信バッファ <n>*1000 バイト (初期値: %u)</translation> </message> diff --git a/src/qt/locale/bitcoin_nb.ts b/src/qt/locale/bitcoin_nb.ts index c42cf52212..eddc61e56a 100644 --- a/src/qt/locale/bitcoin_nb.ts +++ b/src/qt/locale/bitcoin_nb.ts @@ -431,6 +431,10 @@ <translation>Ingen kilde for blokker tilgjengelig...</translation> </message> <message numerus="yes"> + <source>Processed %n block(s) of transaction history.</source> + <translation><numerusform>Lastet %n blokk med transaksjonshistorikk.</numerusform><numerusform>Lastet %n blokker med transaksjonshistorikk.</numerusform></translation> + </message> + <message numerus="yes"> <source>%n hour(s)</source> <translation><numerusform>%n time</numerusform><numerusform>%n timer</numerusform></translation> </message> @@ -977,6 +981,10 @@ <translation>Minimer i stedet for å avslutte applikasjonen når vinduet lukkes. Når dette er valgt, vil applikasjonen avsluttes kun etter at Avslutte er valgt i menyen.</translation> </message> <message> + <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin Core.</source> + <translation>Språk for brukergrensesnittet kan velges her. Denne innstillingen trer i kraft etter omstart av Bitcoin Core.</translation> + </message> + <message> <source>Third party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |.</source> <translation>Tredjepart URLer (f. eks. en blokkutforsker) som dukker opp i transaksjonsfanen som kontekst meny elementer. %s i URLen er erstattet med transaksjonen sin hash. Flere URLer er separert av en vertikal linje |.</translation> </message> @@ -1001,6 +1009,14 @@ <translation>&Nettverk</translation> </message> <message> + <source>Automatically start Bitcoin Core after logging in to the system.</source> + <translation>Start Bitcoin Core automatisk ved oppstart av datamaskinen.</translation> + </message> + <message> + <source>&Start Bitcoin Core on system login</source> + <translation>&Start Bitcoin Core ved oppstart av datamaskinen</translation> + </message> + <message> <source>(0 = auto, <0 = leave that many cores free)</source> <translation>(0 = automatisk, <0 = la så mange kjerner være ledig)</translation> </message> @@ -1113,6 +1129,10 @@ <translation>Omstart av klienten er nødvendig for å aktivere endringene.</translation> </message> <message> + <source>Client will be shut down. Do you want to proceed?</source> + <translation>Klienten vil bli lukket. Ønsker du å gå videre?</translation> + </message> + <message> <source>This change would require a client restart.</source> <translation>Denne endringen krever omstart av klienten.</translation> </message> @@ -1251,10 +1271,18 @@ <translation>Betalingsetterspørringsfil kan ikke leses! Dette kan være forårsaket av en ugyldig betalingsetterspørringsfil.</translation> </message> <message> + <source>Payment request expired.</source> + <translation>Betalingsetterspørringen har utløpt.</translation> + </message> + <message> <source>Unverified payment requests to custom payment scripts are unsupported.</source> <translation>Uverifiserte betalingsforespørsler til egentilpassede betalingscript er ikke støttet.</translation> </message> <message> + <source>Invalid payment request.</source> + <translation>Ugyldig betalingsetterspørring.</translation> + </message> + <message> <source>Refund from %1</source> <translation>Refundering fra %1</translation> </message> @@ -1294,6 +1322,10 @@ <translation>Brukeragent</translation> </message> <message> + <source>Node/Service</source> + <translation>Node/Tjeneste</translation> + </message> + <message> <source>Ping Time</source> <translation>Ping-tid</translation> </message> @@ -1415,6 +1447,10 @@ <translation>Nåværende antall blokker</translation> </message> <message> + <source>Open the Bitcoin Core debug log file from the current data directory. This can take a few seconds for large log files.</source> + <translation>Åpne Bitcoin Core sin loggfil for feilsøk fra gjeldende datamappe. Dette kan ta noen sekunder for store loggfiler.</translation> + </message> + <message> <source>Received</source> <translation>Mottatt</translation> </message> @@ -1483,6 +1519,10 @@ <translation>Ping-tid</translation> </message> <message> + <source>Time Offset</source> + <translation>Tidsforskyvning</translation> + </message> + <message> <source>Last block time</source> <translation>Tidspunkt for siste blokk</translation> </message> @@ -1527,6 +1567,10 @@ <translation>Tøm konsoll</translation> </message> <message> + <source>Welcome to the Bitcoin Core RPC console.</source> + <translation>Velkommen til Bitcoin Core sin RPC-konsoll.</translation> + </message> + <message> <source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source> <translation>Bruk opp og ned pil for å navigere historikken, og <b>Ctrl-L</b> for å tømme skjermen.</translation> </message> @@ -1967,10 +2011,30 @@ <translation>Transaksjonen ble avvist! Dette kan skje hvis noen av myntene i lommeboken allerede er brukt, som hvis du kopierte wallet.dat og mynter ble brukt i kopien uten å bli markert som brukt her.</translation> </message> <message> + <source>A fee higher than %1 is considered an absurdly high fee.</source> + <translation>Et gebyr høyere enn %1 er ansett som et absurd høyt gebyr.</translation> + </message> + <message> + <source>Payment request expired.</source> + <translation>Betalingsetterspørringen har utløpt.</translation> + </message> + <message numerus="yes"> + <source>Estimated to begin confirmation within %n block(s).</source> + <translation><numerusform>Anslått til å begynne bekreftelse innen %n blokk.</numerusform><numerusform>Anslått til å begynne bekreftelse innen %n blokker.</numerusform></translation> + </message> + <message> <source>Pay only the minimum fee of %1</source> <translation>Betal kun minimumsgebyret på %1</translation> </message> <message> + <source>The recipient address is not valid. Please recheck.</source> + <translation>Mottakeradressen er ikke gyldig. Vennligst kontroller på nytt.</translation> + </message> + <message> + <source>Duplicate address found: addresses should only be used once each.</source> + <translation>Gjenbruk av adresse funnet: adresser skal bare brukes en gang hver.</translation> + </message> + <message> <source>Warning: Invalid Bitcoin address</source> <translation>Advarsel: Ugyldig Bitcoin-adresse</translation> </message> @@ -2042,10 +2106,26 @@ <translation>Fjern denne oppføringen</translation> </message> <message> + <source>The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source> + <translation>Gebyret vil bli trukket fra beløpet som blir sendt. Mottakeren vil motta mindre bitcoins enn det du skriver inn i beløpsfeltet. Hvis det er valgt flere mottakere, deles gebyret likt.</translation> + </message> + <message> + <source>S&ubtract fee from amount</source> + <translation>T&rekk fra gebyr fra beløp</translation> + </message> + <message> <source>Message:</source> <translation>Melding:</translation> </message> <message> + <source>This is an unauthenticated payment request.</source> + <translation>Dette er en uautorisert betalingsetterspørring.</translation> + </message> + <message> + <source>This is an authenticated payment request.</source> + <translation>Dette er en autorisert betalingsetterspørring.</translation> + </message> + <message> <source>Enter a label for this address to add it to the list of used addresses</source> <translation>Skriv inn en merkelapp for denne adressen for å legge den til listen av brukte adresser</translation> </message> @@ -2084,6 +2164,10 @@ <translation>&Signer Melding</translation> </message> <message> + <source>You can sign messages/agreements with your addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation>Du kan signere meldinger/avtaler med adresser for å bevise at du kan motta bitcoins sendt til dem. Vær forsiktig med å signere noe vagt eller tilfeldig, siden phishing-angrep kan prøve å lure deg til å signere din identitet over til dem. Bare signer fullt detaljerte utsagn som du er enig i.</translation> + </message> + <message> <source>The Bitcoin address to sign the message with</source> <translation>Bitcoin-adressen meldingen skal signeres med</translation> </message> @@ -2136,6 +2220,10 @@ <translation>&Verifiser Melding</translation> </message> <message> + <source>Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction!</source> + <translation>Skriv inn mottakerens adresse, melding (forsikre deg om at du kopier linjeskift, mellomrom, faner osv. nøyaktig) og underskrift nedenfor for å bekrefte meldingen. Vær forsiktig så du ikke leser mer ut av signaturen enn hva som er i den signerte meldingen i seg selv, for å unngå å bli lurt av et man-in-the-middle-angrep. Merk at dette bare beviser at den som signerer kan motta med adressen, dette beviser ikke hvem som har sendt transaksjoner!</translation> + </message> + <message> <source>The Bitcoin address the message was signed with</source> <translation>Bitcoin-adressen meldingen ble signert med</translation> </message> @@ -2487,6 +2575,10 @@ <translation>Hvorvidt en kun observerbar adresse er involvert i denne transaksjonen.</translation> </message> <message> + <source>User-defined intent/purpose of the transaction.</source> + <translation>Brukerdefinert intensjon/hensikt med transaksjonen.</translation> + </message> + <message> <source>Amount removed from or added to balance.</source> <translation>Beløp fjernet eller lagt til saldo.</translation> </message> @@ -2729,6 +2821,10 @@ <translation>Bind til angitt adresse. Bruk [vertsmaskin]:port notasjon for IPv6</translation> </message> <message> + <source>Continuously rate-limit free transactions to <n>*1000 bytes per minute (default: %u)</source> + <translation>Ratebegrens gratistransaksjoner kontinuerlig til <n>*1000 bytes per minutt (standardverdi: %u)</translation> + </message> + <message> <source>Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup</source> <translation>Slett alle transaksjoner i lommeboken og gjenopprett kun de delene av blokkjeden gjennom -rescan ved oppstart</translation> </message> @@ -2749,6 +2845,14 @@ <translation>I denne modusen kontrollerer -genproclimit hvor mange blokker som genereres øyeblikkelig.</translation> </message> <message> + <source>Maximum total fees to use in a single wallet transaction; setting this too low may abort large transactions (default: %s)</source> + <translation>Maksimalt samlede gebyrer til å bruke i en enkelt lommeboktransaksjon; settes dette for lavt kan store transaksjoner kanskje avbrytes (standardverdi: %s)</translation> + </message> + <message> + <source>Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, >%u = target size in MiB to use for block files)</source> + <translation>Reduser lagringsbehovet ved beskjæring (slette) gamle blokker. Denne modusen deaktiverer støtte for lommebok og er ikke kompatibel med -txindex. Advarsel: Tilbakestilling av denne innstillingen krever at hele blokkjeden må lastes ned på nytt. (Standardverdi: 0 = deaktiver beskjæringsblokker, >%u = mål for størrelse i MiB å bruke for blokkfiler)</translation> + </message> + <message> <source>Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)</source> <translation>Angi antall tråder for skriptverifisering (%u til %d, 0 = auto, <0 = la det antallet kjerner være ledig, standard: %d)</translation> </message> @@ -2921,6 +3025,10 @@ <translation>Valg for lommebok:</translation> </message> <message> + <source>Warning: This version is obsolete; upgrade required!</source> + <translation>Advarsel: Denne versjonen er utdatert; oppgradering er påkrevd!</translation> + </message> + <message> <source>You need to rebuild the database using -reindex to change -txindex</source> <translation>Du må gjenoppbygge databasen med å bruke -reindex for å endre -txindex</translation> </message> @@ -2953,6 +3061,10 @@ <translation>Opprett nye filer med standardtillatelser i systemet, i stedet for umask 077 (kun virksom med lommebokfunksjonalitet slått av)</translation> </message> <message> + <source>Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)</source> + <translation>Oppdag egne IP-adresser (standardverdi: 1 ved lytting og ingen -externalip eller -proxy)</translation> + </message> + <message> <source>Error: Listening for incoming connections failed (listen returned error %s)</source> <translation>Feil: Lytting etter innkommende tilkoblinger feilet (lytting returnerte feil %s)</translation> </message> @@ -2993,6 +3105,14 @@ <translation>Søk etter nodeadresser via DNS-oppslag, hvis vi har få adresser å koble til (standard: 1 med mindre -connect)</translation> </message> <message> + <source>Randomize credentials for every proxy connection. This enables Tor stream isolation (default: %u)</source> + <translation>Bruk tilfeldig identitet for hver proxytilkobling. Dette muliggjør TOR stream isolasjon (standardverdi: %u)</translation> + </message> + <message> + <source>Require high priority for relaying free or low-fee transactions (default: %u)</source> + <translation>Krev høy prioritet for videresending av gratistransaksjoner eller transaksjoner med lavt gebyr (standardverdi: %u)</translation> + </message> + <message> <source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source> <translation>Sett maksimum størrelse for transaksjoner med høy prioritet / lavt gebyr, i bytes (standardverdi: %d)</translation> </message> @@ -3001,6 +3121,10 @@ <translation>Angi antall tråder for mynt generering hvis aktivert (-1 = alle kjerner, standardverdi: %d)</translation> </message> <message> + <source>The transaction amount is too small to send after the fee has been deducted</source> + <translation>Transaksjonsbeløpet er for lite til å sendes etter at gebyret er fratrukket</translation> + </message> + <message> <source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit <https://www.openssl.org/> and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source> <translation>Dette produktet inneholder programvare utviklet av OpenSSL Project for bruk i OpenSSL Toolkit <https://www.openssl.org/> og kryptografisk programvare skrevet av Eric Young og UPnP-programvare skrevet av Thomas Bernard.</translation> </message> @@ -3053,6 +3177,14 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com <translation>Godta offentlige REST forespørsler (standardverdi: %u)</translation> </message> <message> + <source>Activating best chain...</source> + <translation>Aktiverer beste kjede...</translation> + </message> + <message> + <source>Allow self signed root certificates (default: 0)</source> + <translation>Tillat selvsignerte rotsertifikater (standardverdi: 0)</translation> + </message> + <message> <source>Can't run with a wallet in prune mode.</source> <translation>Kan ikke kjøre med en lommebok i beskjæringsmodus.</translation> </message> @@ -3189,6 +3321,10 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com <translation>Start minimert</translation> </message> <message> + <source>The transaction amount is too small to pay the fee</source> + <translation>Transaksjonsbeløpet er for lite til å betale gebyr</translation> + </message> + <message> <source>This is experimental software.</source> <translation>Dette er eksperimentell programvare.</translation> </message> @@ -3377,6 +3513,10 @@ for eksempel: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com <translation>Hold maks <n> koblinger åpne til andre noder (standardverdi: %u)</translation> </message> <message> + <source>Make the wallet broadcast transactions</source> + <translation>Få lommeboken til å kringkaste transaksjoner</translation> + </message> + <message> <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: %u)</source> <translation>Maks mottaksbuffer per forbindelse, <n>*1000 bytes (standardverdi: %u)</translation> </message> diff --git a/src/qt/locale/bitcoin_nl.ts b/src/qt/locale/bitcoin_nl.ts index 3e1d568d20..c953c35404 100644 --- a/src/qt/locale/bitcoin_nl.ts +++ b/src/qt/locale/bitcoin_nl.ts @@ -168,6 +168,10 @@ <translation>Weet u zeker dat u uw portemonnee wilt versleutelen?</translation> </message> <message> + <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Bitcoin Core zal nu afsluiten om het versleutelingsproces te voltooien. Hou er rekening mee dat versleuteling van je portemonnee je niet volledig beschermt tegen diefstal van jouw bitcoins door malware op je computer.</translation> + </message> + <message> <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source> <translation>BELANGRIJK: Elke eerder gemaakte backup van uw portemonneebestand dient u te vervangen door het nieuw gegenereerde, versleutelde portemonneebestand. Om veiligheidsredenen zullen eerdere backups van het niet-versleutelde portemonneebestand onbruikbaar worden zodra u uw nieuwe, versleutelde, portemonnee begint te gebruiken.</translation> </message> @@ -181,7 +185,11 @@ </message> <message> <source>Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>.</source> - <translation>Voer een nieuw wachtwoord in voor uw portomonee.<br/>Gebruik een wachtwoord van <b>tien of meer willekeurige karakters</b>, of <b>acht of meer woorden</b>.</translation> + <translation>Voer een nieuw wachtwoord in voor uw portemonnee.<br/>Gebruik een wachtwoord van <b>tien of meer willekeurige karakters</b>, of <b>acht of meer woorden</b>.</translation> + </message> + <message> + <source>Enter the old passphrase and new passphrase to the wallet.</source> + <translation>Voer het oude en nieuwe wachtwoord in voor uw portemonnee.</translation> </message> <message> <source>Wallet encryption failed</source> @@ -419,6 +427,10 @@ <translation>Geen bron voor blokken beschikbaar...</translation> </message> <message numerus="yes"> + <source>Processed %n block(s) of transaction history.</source> + <translation><numerusform>%n blok aan transactie geschiedenis verwerkt.</numerusform><numerusform>%n blokken aan transactie geschiedenis verwerkt.</numerusform></translation> + </message> + <message numerus="yes"> <source>%n hour(s)</source> <translation><numerusform>%n uur</numerusform><numerusform>%n uur</numerusform></translation> </message> @@ -471,6 +483,36 @@ <translation>Aan het bijwerken...</translation> </message> <message> + <source>Date: %1 +</source> + <translation>Datum: %1 +</translation> + </message> + <message> + <source>Amount: %1 +</source> + <translation>Aantal: %1 +</translation> + </message> + <message> + <source>Type: %1 +</source> + <translation>Type: %1 +</translation> + </message> + <message> + <source>Label: %1 +</source> + <translation>Label: %1 +</translation> + </message> + <message> + <source>Address: %1 +</source> + <translation>Adres: %1 +</translation> + </message> + <message> <source>Sent transaction</source> <translation>Verzonden transactie</translation> </message> @@ -669,6 +711,18 @@ <translation>geen</translation> </message> <message> + <source>This label turns red if the transaction size is greater than 1000 bytes.</source> + <translation>Dit label wordt rood als de transactie groter is dan 1000 bytes.</translation> + </message> + <message> + <source>This label turns red if the priority is smaller than "medium".</source> + <translation>Dit label wordt rood als de prioriteit lager is dan "gemiddeld".</translation> + </message> + <message> + <source>This label turns red if any recipient receives an amount smaller than %1.</source> + <translation>Dit label wordt rood wanneer een ontvanger minder dan %1 krijgt.</translation> + </message> + <message> <source>Can vary +/- %1 satoshi(s) per input.</source> <translation>Kan per input +/- %1 satoshi(s) variëren.</translation> </message> @@ -919,6 +973,10 @@ <translation>IP-adres van de proxy (bijv. IPv4: 127.0.0.1 / IPv6: ::1)</translation> </message> <message> + <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin Core.</source> + <translation>Stel hier de taal van de applicatie in. Deze instelling zal van kracht worden na het herstarten van de applicatie.</translation> + </message> + <message> <source>Third party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |.</source> <translation>Derde partijen URL's (bijvoorbeeld block explorer) dat in de transacties tab verschijnen als contextmenu elementen. %s in de URL is vervangen door transactie hash. Verscheidene URL's zijn gescheiden door een verticale streep |. </translation> </message> @@ -943,6 +1001,14 @@ <translation>&Netwerk</translation> </message> <message> + <source>Automatically start Bitcoin Core after logging in to the system.</source> + <translation>Bitcoin Kern automatisch starten bij inloggen.</translation> + </message> + <message> + <source>&Start Bitcoin Core on system login</source> + <translation>&Start Bitcoin Kern tijdens login.</translation> + </message> + <message> <source>(0 = auto, <0 = leave that many cores free)</source> <translation>(0 = auto, <0 = laat dit aantal kernen vrij)</translation> </message> @@ -1055,6 +1121,10 @@ <translation>Herstart van de client is vereist om veranderingen door te voeren.</translation> </message> <message> + <source>Client will be shut down. Do you want to proceed?</source> + <translation>Applicatie zal worden afgesloten. Wilt u doorgaan?</translation> + </message> + <message> <source>This change would require a client restart.</source> <translation>Om dit aan te passen moet de client opnieuw gestart worden.</translation> </message> diff --git a/src/qt/locale/bitcoin_pl.ts b/src/qt/locale/bitcoin_pl.ts index 7a7285aa01..aece2bfa1e 100644 --- a/src/qt/locale/bitcoin_pl.ts +++ b/src/qt/locale/bitcoin_pl.ts @@ -3,7 +3,7 @@ <name>AddressBookPage</name> <message> <source>Right-click to edit address or label</source> - <translation>Prawy klik żeby edytować adres lub etykietę</translation> + <translation>Kliknij prawy przycisk aby edytować adres lub etykietę</translation> </message> <message> <source>Create a new address</source> diff --git a/src/qt/locale/bitcoin_pt_BR.ts b/src/qt/locale/bitcoin_pt_BR.ts index d4d1d83e54..89467bae43 100644 --- a/src/qt/locale/bitcoin_pt_BR.ts +++ b/src/qt/locale/bitcoin_pt_BR.ts @@ -977,6 +977,10 @@ <translation>Minimizar em vez de fechar o programa quando a janela for fechada. Quando essa opção estiver ativa, o programa só será fechado somente pela opção Sair no menu Arquivo.</translation> </message> <message> + <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin Core.</source> + <translation>A linguagem da interface do usuário pode ser alterada aqui. A mudança ocorrerá após o reinício do Bitcoin Core.</translation> + </message> + <message> <source>Third party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |.</source> <translation>URLs de terceiros (exemplo: explorador de blocos) que aparecem na aba de transações como itens do menu de contexto. %s na URL é substituido pela hash da transação. Múltiplas URLs são separadas pela barra vertical |.</translation> </message> @@ -2945,6 +2949,10 @@ <translation>Opções da carteira:</translation> </message> <message> + <source>Warning: This version is obsolete; upgrade required!</source> + <translation>Atenção: Essa versão está obsoleta, atualização necessária!</translation> + </message> + <message> <source>You need to rebuild the database using -reindex to change -txindex</source> <translation>Você precisa reconstruir o banco de dados utilizando -reindex</translation> </message> diff --git a/src/qt/locale/bitcoin_tr.ts b/src/qt/locale/bitcoin_tr.ts index 66902a515b..ff398c5d2a 100644 --- a/src/qt/locale/bitcoin_tr.ts +++ b/src/qt/locale/bitcoin_tr.ts @@ -168,6 +168,10 @@ <translation>Cüzdanınızı şifrelemek istediğinizden emin misiniz?</translation> </message> <message> + <source>Bitcoin Core will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source> + <translation>Şifreleme işlemini tamamlamak için Bitcoin Çekirdeği şimdi kapanacaktır. Cüzdanınızı şifrelemenin, Bitcoinlerinizin bilgisayara bulaşan kötücül bir yazılım tarafından çalınmaya karşı tamamen koruyamayacağını unutmayınız.</translation> + </message> + <message> <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source> <translation>ÖNEMLİ: Önceden yapmış olduğunuz cüzdan dosyası yedeklemelerinin yeni oluşturulan şifrelenmiş cüzdan dosyası ile değiştirilmeleri gerekir. Güvenlik nedenleriyle yeni, şifrelenmiş cüzdanı kullanmaya başladığınızda eski şifrelenmemiş cüzdan dosyaları işe yaramaz hale gelecektir.</translation> </message> @@ -184,6 +188,10 @@ <translation>Cüzdan için yeni parolayı giriniz.<br/>Lütfen <b>on ya da daha fazla rastgele karakter</b> veya <b>sekiz ya da daha fazla kelime</b> içeren bir parola kullanınız.</translation> </message> <message> + <source>Enter the old passphrase and new passphrase to the wallet.</source> + <translation>Cüzdan için eski parolayı ve yeni parolayı giriniz.</translation> + </message> + <message> <source>Wallet encryption failed</source> <translation>Cüzdan şifrelemesi başarısız oldu</translation> </message> @@ -391,6 +399,10 @@ <translation>Bitcoin Çekirdeği &hakkında</translation> </message> <message> + <source>Modify configuration options for Bitcoin Core</source> + <translation>Bitcoin Çekirdeği yapılandırma seçeneklerini değiştir</translation> + </message> + <message> <source>Show the list of used sending addresses and labels</source> <translation>Kullanılmış gönderme adresleri ve etiketlerin listesini göster</translation> </message> @@ -419,6 +431,10 @@ <translation>Hiçbir blok kaynağı mevcut değil...</translation> </message> <message numerus="yes"> + <source>Processed %n block(s) of transaction history.</source> + <translation><numerusform>Muamele tarihçesinden %n blok işlendi.</numerusform><numerusform>Muamele tarihçesinden %n blok işlendi</numerusform></translation> + </message> + <message numerus="yes"> <source>%n hour(s)</source> <translation><numerusform>%n saat</numerusform><numerusform>%n saat</numerusform></translation> </message> @@ -471,6 +487,36 @@ <translation>Aralık kapatılıyor...</translation> </message> <message> + <source>Date: %1 +</source> + <translation>Tarih: %1 +</translation> + </message> + <message> + <source>Amount: %1 +</source> + <translation>Meblağ: %1 +</translation> + </message> + <message> + <source>Type: %1 +</source> + <translation>Tür: %1 +</translation> + </message> + <message> + <source>Label: %1 +</source> + <translation>Etiket: %1 +</translation> + </message> + <message> + <source>Address: %1 +</source> + <translation>Adres: %1 +</translation> + </message> + <message> <source>Sent transaction</source> <translation>Muamele yollandı</translation> </message> @@ -669,6 +715,18 @@ <translation>boş</translation> </message> <message> + <source>This label turns red if the transaction size is greater than 1000 bytes.</source> + <translation>Eğer muamele boyutu 1000 bayttan yüksek ise bu etiket kırmızı hale gelir.</translation> + </message> + <message> + <source>This label turns red if the priority is smaller than "medium".</source> + <translation>Eğer öncelik "ortadan" düşükse bu etiket kırmızı olur.</translation> + </message> + <message> + <source>This label turns red if any recipient receives an amount smaller than %1.</source> + <translation>Eğer herhangi bir alıcı %1'den düşük bir meblağ alırsa bu etiket kırmızı olur.</translation> + </message> + <message> <source>Can vary +/- %1 satoshi(s) per input.</source> <translation>Giriş başına +/- %1 satoshi olarak değişebilir.</translation> </message> @@ -919,6 +977,14 @@ <translation>Vekil sunucusunun IP adresi (mesela IPv4: 127.0.0.1 / IPv6: ::1)</translation> </message> <message> + <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu.</source> + <translation>Pencere kapatıldığında uygulamadan çıkmak yerine uygulamayı küçültür. Bu seçenek etkinleştirildiğinde, uygulama sadece menüden çıkış seçildiğinde kapanacaktır.</translation> + </message> + <message> + <source>The user interface language can be set here. This setting will take effect after restarting Bitcoin Core.</source> + <translation>Kullanıcı arayüzünün dili burada belirtilebilir. Bu ayar Bitcoin Çekirdeği tekrar başlatıldığında etkinleşecektir.</translation> + </message> + <message> <source>Third party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |.</source> <translation>Muameleler sekmesinde bağlam menüsü unsurları olarak görünen üçüncü taraf bağlantıları (mesela bir blok tarayıcısı). URL'deki %s, muamele hash değeri ile değiştirilecektir. Birden çok bağlantılar düşey çubuklar | ile ayrılacaktır.</translation> </message> @@ -943,6 +1009,14 @@ <translation>&Şebeke</translation> </message> <message> + <source>Automatically start Bitcoin Core after logging in to the system.</source> + <translation>Sistemde oturum açıldığında Bitcoin Çekirdeğini otomatik olarak başlat.</translation> + </message> + <message> + <source>&Start Bitcoin Core on system login</source> + <translation>Bitcoin Çekirdeğini sistem oturumuyla &başlat</translation> + </message> + <message> <source>(0 = auto, <0 = leave that many cores free)</source> <translation>(0 = otomatik, <0 = bu kadar çekirdeği kullanma)</translation> </message> @@ -1055,6 +1129,10 @@ <translation>Değişikliklerin uygulanması için istemcinin yeniden başlatılması lazımdır.</translation> </message> <message> + <source>Client will be shut down. Do you want to proceed?</source> + <translation>İstemci kapanacaktır. Devam etmek istiyor musunuz?</translation> + </message> + <message> <source>This change would require a client restart.</source> <translation>Bu değişiklik istemcinin tekrar başlatılmasını gerektirir.</translation> </message> @@ -1193,14 +1271,26 @@ <translation>Ödeme talebi okunamaz ya da işlenemez! Bunun sebebi geçersiz bir ödeme talebi dosyası olabilir.</translation> </message> <message> + <source>Payment request expired.</source> + <translation>Ödeme talebinin ömrü doldu.</translation> + </message> + <message> <source>Unverified payment requests to custom payment scripts are unsupported.</source> <translation>Özel ödeme betiklerine teyit edilmemiş ödeme talepleri desteklenmez.</translation> </message> <message> + <source>Invalid payment request.</source> + <translation>Geçersiz ödeme talebi.</translation> + </message> + <message> <source>Refund from %1</source> <translation>%1 öğesinden iade</translation> </message> <message> + <source>Payment request %1 is too large (%2 bytes, allowed %3 bytes).</source> + <translation>%1 ödeme talebi çok büyük (%2 bayt, müsaade edilen %3 bayt).</translation> + </message> + <message> <source>Payment request DoS protection</source> <translation>Ödeme talebi DoS koruması</translation> </message> @@ -1232,6 +1322,10 @@ <translation>Kullanıcı Yazılımı</translation> </message> <message> + <source>Node/Service</source> + <translation>Düğüm/Servis</translation> + </message> + <message> <source>Ping Time</source> <translation>Ping Zamanı</translation> </message> @@ -1353,6 +1447,10 @@ <translation>Güncel blok sayısı</translation> </message> <message> + <source>Open the Bitcoin Core debug log file from the current data directory. This can take a few seconds for large log files.</source> + <translation>Güncel veri klasöründen Bitcoin Çekirdeği hata ayıklama kütük dosyasını açar. Büyük kütük dosyaları için bu birkaç saniye alabilir.</translation> + </message> + <message> <source>Received</source> <translation>Alınan</translation> </message> @@ -1421,6 +1519,10 @@ <translation>Ping Zamanı</translation> </message> <message> + <source>Time Offset</source> + <translation>Saat Farkı</translation> + </message> + <message> <source>Last block time</source> <translation>Son blok zamanı</translation> </message> @@ -1465,6 +1567,10 @@ <translation>Konsolu temizle</translation> </message> <message> + <source>Welcome to the Bitcoin Core RPC console.</source> + <translation>Bitcoin Çekirdeği RPC konsoluna hoş geldiniz.</translation> + </message> + <message> <source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source> <translation>Tarihçede gezinmek için imleç tuşlarını kullanınız, <b>Ctrl-L</b> ile de ekranı temizleyebilirsiniz.</translation> </message> @@ -1761,6 +1867,10 @@ <translation>Eğer özel ücret 1000 satoşi olarak ayarlandıysa ve muamele sadece 250 baytsa, "kilobayt başı" ücret olarak sadece 250 satoşi öder ve "toplam asgari" 1000 satoşi öder. Bir kilobayttan yüksek muameleler için ikisi de kilobayt başı ödeme yapar.</translation> </message> <message> + <source>Hide</source> + <translation>Sakla</translation> + </message> + <message> <source>total at least</source> <translation>toplam asgari</translation> </message> @@ -1901,10 +2011,26 @@ <translation>Muamele reddedildi! Cüzdanınızdaki madenî paraların bazıları zaten harcanmış olduğunda bu meydana gelebilir. Örneğin wallet.dat dosyasının bir kopyasını kullandıysanız ve kopyada para harcandığında ancak burada harcandığı işaretlenmediğinde.</translation> </message> <message> + <source>A fee higher than %1 is considered an absurdly high fee.</source> + <translation>%1 tutarından yüksek ücret saçma derecede yüksek bir ücret olarak kabul edilir.</translation> + </message> + <message> + <source>Payment request expired.</source> + <translation>Ödeme talebinin ömrü doldu.</translation> + </message> + <message> <source>Pay only the minimum fee of %1</source> <translation>Sadece asgari ücret olan %1 tutarını öde</translation> </message> <message> + <source>The recipient address is not valid. Please recheck.</source> + <translation>Alıcı adresi geçerli değildir. Lütfen denetleyiniz.</translation> + </message> + <message> + <source>Duplicate address found: addresses should only be used once each.</source> + <translation>Çift adres bulundu: adresler herbiri için sadece bir kez kullanılmalıdır.</translation> + </message> + <message> <source>Warning: Invalid Bitcoin address</source> <translation>Uyarı: geçersiz Bitcoin adresi</translation> </message> @@ -1976,10 +2102,26 @@ <translation>Bu unsuru kaldır</translation> </message> <message> + <source>The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source> + <translation>Ücret yollanan meblağdan alınacaktır. Alıcı meblağ alanında girdiğinizden daha az bitcoin alacaktır. Eğer birden çok alıcı seçiliyse ücret eşit olarak bölünecektir.</translation> + </message> + <message> + <source>S&ubtract fee from amount</source> + <translation>Ücreti meblağdan düş</translation> + </message> + <message> <source>Message:</source> <translation>Mesaj:</translation> </message> <message> + <source>This is an unauthenticated payment request.</source> + <translation>Bu, kimliği doğrulanmamış bir ödeme talebidir.</translation> + </message> + <message> + <source>This is an authenticated payment request.</source> + <translation>Bu, kimliği doğrulanmış bir ödeme talebidir.</translation> + </message> + <message> <source>Enter a label for this address to add it to the list of used addresses</source> <translation>Kullanılmış adres listesine eklemek için bu adrese bir etiket girin</translation> </message> @@ -2018,6 +2160,10 @@ <translation>Mesaj &imzala</translation> </message> <message> + <source>You can sign messages/agreements with your addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source> + <translation>Adreslerinize yollanan bitcoinleri alabileceğiniz ispatlamak için adreslerinizle mesaj/anlaşma imzalayabilirsiniz. Oltalama saldırılarının kimliğinizi imzanızla elde etmeyi deneyebilecekleri için belirsiz ya da rastgele hiçbir şey imzalamamaya dikkat ediniz. Sadece ayrıntılı açıklaması olan ve tümüne katıldığınız ifadeleri imzalayınız.</translation> + </message> + <message> <source>The Bitcoin address to sign the message with</source> <translation>Mesajın imzalanmasında kullanılacak Bitcoin adresi</translation> </message> @@ -2070,6 +2216,10 @@ <translation>Mesaj &kontrol et</translation> </message> <message> + <source>Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction!</source> + <translation>Alıcının adresini, mesajı (satır sonları, boşluklar, sekmeler vs. karakterleri tam olarak kopyaladığınızdan emin olunuz) ve imzayı aşağıda giriniz. Bir ortadaki adam saldırısı tarafından kandırılmaya mâni olmak için imzadan, imzalı mesajın içeriğini aşan bir anlam çıkarmamaya dikkat ediniz. Bunun sadece imzalayan tarafın adres ile alım yapabildiğini ispatladığını ve herhangi bir muamelenin gönderi tarafını kanıtlayamayacağını unutmayınız!</translation> + </message> + <message> <source>The Bitcoin address the message was signed with</source> <translation>Mesajın imzalanmasında kullanılan Bitcoin adresi</translation> </message> @@ -2421,6 +2571,10 @@ <translation>Bu muamelede sadece izlenen bir adresin bulunup bulunmadığı.</translation> </message> <message> + <source>User-defined intent/purpose of the transaction.</source> + <translation>Muamelenin kullanıcı tanımlı niyeti/amacı.</translation> + </message> + <message> <source>Amount removed from or added to balance.</source> <translation>Bakiyeden alınan ya da bakiyeye eklenen meblağ.</translation> </message> @@ -2663,6 +2817,10 @@ <translation>Belirtilen adrese bağlan ve daima ondan dinle. IPv6 için [makine]:port yazımını kullanınız</translation> </message> <message> + <source>Continuously rate-limit free transactions to <n>*1000 bytes per minute (default: %u)</source> + <translation>Devamlı olarak ücretsiz muameleleri dakikada <n>*1000 bayt olarak sınırla (varsayılan: %u)</translation> + </message> + <message> <source>Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup</source> <translation>Tüm cüzdan muamelelerini sil ve başlangıçta -rescan ile sadece blok zincirinin parçası olanları geri getir</translation> </message> @@ -2683,6 +2841,14 @@ <translation>Bu kipte -genproclimit kaç sayıda bloğun anında oluşturulduğunu kontrol eder.</translation> </message> <message> + <source>Maximum total fees to use in a single wallet transaction; setting this too low may abort large transactions (default: %s)</source> + <translation>Tek cüzdan muamelesinde kullanılacak azami toplam ücret; bunu çok düşük olarak ayarlamak büyük muameleleri iptal edebilir (varsayılan: %s)</translation> + </message> + <message> + <source>Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, >%u = target size in MiB to use for block files)</source> + <translation>Depolama gerekliliğini eski blokları silerek düşür. Bu kip cüzdan desteğini devre dışı bırakır ve -txindex ile uyumsuzdur. İkaz: Bu ayarı geri almak tüm blok zincirini yeniden indirmeyi gerektirir. (varsayılan: 0 = blokları silmeyi devre dışı bırak, >%u = MB olarak blok dosyaları için kullanılacak hedef boyut)</translation> + </message> + <message> <source>Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)</source> <translation>Betik kontrolü iş parçacıklarının sayısını belirler (%u ilâ %d, 0 = otomatik, <0 = bu sayıda çekirdeği kullanma, varsayılan: %d)</translation> </message> @@ -2811,6 +2977,14 @@ <translation>Sadece <net> şebekesindeki düğümlere bağlan (ipv4, ipv6 veya onion)</translation> </message> <message> + <source>Prune cannot be configured with a negative value.</source> + <translation>Prune negatif bir değerle yapılandırılamaz.</translation> + </message> + <message> + <source>Prune mode is incompatible with -txindex.</source> + <translation>Prune kipi -txindex ile uyumsuzdur.</translation> + </message> + <message> <source>Set database cache size in megabytes (%d to %d, default: %d)</source> <translation>Veritabanı önbellek boyutunu megabayt olarak belirt (%d ilâ %d, varsayılan: %d)</translation> </message> @@ -2847,6 +3021,10 @@ <translation>Cüzdan seçenekleri:</translation> </message> <message> + <source>Warning: This version is obsolete; upgrade required!</source> + <translation>Uyarı: Bu sürüm çok eskidir; güncellemeniz gerekir!</translation> + </message> + <message> <source>You need to rebuild the database using -reindex to change -txindex</source> <translation>-txindex'i değiştirmek için veritabanını -reindex kullanarak tekrar inşa etmeniz gerekmektedir</translation> </message> @@ -2879,6 +3057,10 @@ <translation>Yeni dosyaları umask 077 yerine varsayılan izinlerle oluştur (sadece devre dışı cüzdan işlevselliği ile etkilidir)</translation> </message> <message> + <source>Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)</source> + <translation>Kendi IP adreslerini keşfet (varsayılan: dinlenildiğinde ve -externalip ya da -proxy yoksa 1)</translation> + </message> + <message> <source>Error: Listening for incoming connections failed (listen returned error %s)</source> <translation>Hata: İçeri gelen bağlantıların dinlenmesi başarısız oldu (dinleme %s hatasını verdi)</translation> </message> @@ -2911,10 +3093,18 @@ <translation>Aktardığımız ve oluşturduğumuz veri taşıyıcı muamelelerindeki azami veri boyutu (varsayılan: %u)</translation> </message> <message> + <source>Prune configured below the minimum of %d MB. Please use a higher number.</source> + <translation>Prune, asgari değer olan %d MB'den düşük olarak ayarlanmıştır. Lütfen daha yüksek bir sayı kullanınız.</translation> + </message> + <message> <source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)</source> <translation>Adres sayısı azaldıysa DNS sorgulamasıyla eş adresleri ara (varsayılan: 1 -connect kullanılmadıysa)</translation> </message> <message> + <source>Require high priority for relaying free or low-fee transactions (default: %u)</source> + <translation>Ücretsiz ya da düşük ücretli muamelelerin geçişi için yüksek öncelik iste (varsayılan: %u)</translation> + </message> + <message> <source>Set maximum size of high-priority/low-fee transactions in bytes (default: %d)</source> <translation>Yüksek öncelikli/düşük ücretli muamelelerin azami boyutunu bayt olarak ayarla (varsayılan: %d)</translation> </message> @@ -2923,6 +3113,10 @@ <translation>Etkinse bitcoin oluşuturulmasına atanan iş parçacığı sayısını ayarla (-1 = tüm çekirdekler, varsayılan: %d)</translation> </message> <message> + <source>The transaction amount is too small to send after the fee has been deducted</source> + <translation>Bu muamele, ücret düşüldükten sonra göndermek için çok düşük</translation> + </message> + <message> <source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit <https://www.openssl.org/> and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source> <translation>Bu ürün OpenSSL projesi tarafından OpenSSL araç takımı (http://www.openssl.org/) için geliştirilen yazılımlar, Eric Young (eay@cryptsoft.com) tarafından hazırlanmış şifreleme yazılımları ve Thomas Bernard tarafından programlanmış UPnP yazılımı içerir.</translation> </message> @@ -2963,10 +3157,30 @@ mesela: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com <translation>Beyaz listeye alınan eşler DoS yasaklamasına uğramazlar ve muameleleri zaten mempool'da olsalar da daima aktarılır, bu mesela bir geçit için kullanışlıdır</translation> </message> <message> + <source>You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain</source> + <translation>Prune olmayan kipe dönmek için veritabanını -reindex ile tekrar derlemeniz gerekir. Bu, tüm blok zincirini tekrar indirecektir</translation> + </message> + <message> + <source>(default: %u)</source> + <translation>(varsayılan: %u)</translation> + </message> + <message> <source>Accept public REST requests (default: %u)</source> <translation>Herkese açık REST taleplerini kabul et (varsayılan: %u)</translation> </message> <message> + <source>Activating best chain...</source> + <translation>En iyi zincir etkinleştiriliyor...</translation> + </message> + <message> + <source>Allow self signed root certificates (default: 0)</source> + <translation>Kendinden imzalı kök sertifikalara müsaade et (varsayılan: 0)</translation> + </message> + <message> + <source>Can't run with a wallet in prune mode.</source> + <translation>Prune kipindeki bir cüzdan ile çalışamaz.</translation> + </message> + <message> <source>Cannot resolve -whitebind address: '%s'</source> <translation>-whitebind adresi çözümlenemedi: '%s'</translation> </message> @@ -2991,6 +3205,10 @@ mesela: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com <translation>wallet.dat dosyasının yüklenmesinde hata: Cüzdan Bitcoin Çekirdeğinin daha yeni bir sürümünü gerektirmektedir</translation> </message> <message> + <source>Error reading from database, shutting down.</source> + <translation>Veritabanından okumada hata, kapatılıyor.</translation> + </message> + <message> <source>Error: Unsupported argument -tor found, use -onion.</source> <translation>Hata: Deskteklenmeyen -tor argümanı bulundu, -onion kullanınız.</translation> </message> @@ -3047,6 +3265,10 @@ mesela: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com <translation>RPC sunucu seçenekleri:</translation> </message> <message> + <source>RPC support for HTTP persistent connections (default: %d)</source> + <translation>Kalıcı HTTP bağlantıları için RPC desteği (varsayılan: %d)</translation> + </message> + <message> <source>Randomly drop 1 of every <n> network messages</source> <translation>Her <n> şebeke mesajından rastgele 1 mesajı görmezden gel</translation> </message> @@ -3091,6 +3313,10 @@ mesela: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com <translation>Küçültülmüş olarak başlat</translation> </message> <message> + <source>The transaction amount is too small to pay the fee</source> + <translation>Muamele meblağı ücreti ödemek için çok düşük</translation> + </message> + <message> <source>This is experimental software.</source> <translation>Bu, deneysel bir yazılımdır.</translation> </message> @@ -3111,6 +3337,10 @@ mesela: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com <translation>Muamele çok büyük</translation> </message> <message> + <source>UI Options:</source> + <translation>Arayüz Seçenkleri:</translation> + </message> + <message> <source>Unable to bind to %s on this computer (bind returned error %s)</source> <translation>Bu bilgisayarda %s unsuruna bağlanılamadı (bağlanma %s hatasını verdi)</translation> </message> @@ -3275,6 +3505,10 @@ mesela: alertnotify=echo %%s | mail -s "Bitcoin Alert" admin@foo.com <translation>Eşler ile en çok <n> adet bağlantı kur (varsayılan: %u)</translation> </message> <message> + <source>Make the wallet broadcast transactions</source> + <translation>Cüzdanın muameleleri yayınlamasını sağla</translation> + </message> + <message> <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: %u)</source> <translation>Her bağlantı için azami alım tamponu, <n>*1000 bayt (varsayılan: %u)</translation> </message> diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp index a422ff9a71..2e33b9adf8 100644 --- a/src/qt/overviewpage.cpp +++ b/src/qt/overviewpage.cpp @@ -121,6 +121,12 @@ OverviewPage::OverviewPage(QWidget *parent) : { ui->setupUi(this); + // use a SingleColorIcon for the "out of sync warning" icon + QIcon icon = SingleColorIcon(":/icons/warning"); + icon.addPixmap(icon.pixmap(QSize(64,64), QIcon::Normal), QIcon::Disabled); // also set the disabled icon because we are using a disabled QPushButton to work around missing HiDPI support of QLabel (https://bugreports.qt.io/browse/QTBUG-42503) + ui->labelTransactionsStatus->setIcon(icon); + ui->labelWalletStatus->setIcon(icon); + // Recent transactions ui->listTransactions->setItemDelegate(txdelegate); ui->listTransactions->setIconSize(QSize(DECORATION_SIZE, DECORATION_SIZE)); diff --git a/src/qt/res/bitcoin-qt-res.rc b/src/qt/res/bitcoin-qt-res.rc index c0f3e2fb39..9f66d0af79 100644 --- a/src/qt/res/bitcoin-qt-res.rc +++ b/src/qt/res/bitcoin-qt-res.rc @@ -19,7 +19,7 @@ BEGIN BLOCK "040904E4" // U.S. English - multilingual (hex) BEGIN VALUE "CompanyName", "Bitcoin" - VALUE "FileDescription", "Bitcoin Core (OSS GUI client for Bitcoin)" + VALUE "FileDescription", "Bitcoin Core (GUI node for Bitcoin)" VALUE "FileVersion", VER_FILEVERSION_STR VALUE "InternalName", "bitcoin-qt" VALUE "LegalCopyright", COPYRIGHT_STR diff --git a/src/qt/scicon.cpp b/src/qt/scicon.cpp index b2f2399b24..c493b5569e 100644 --- a/src/qt/scicon.cpp +++ b/src/qt/scicon.cpp @@ -11,7 +11,9 @@ #include <QPalette> #include <QPixmap> -static void MakeSingleColorImage(QImage& img, const QColor& colorbase) +namespace { + +void MakeSingleColorImage(QImage& img, const QColor& colorbase) { img = img.convertToFormat(QImage::Format_ARGB32); for (int x = img.width(); x--; ) @@ -24,6 +26,8 @@ static void MakeSingleColorImage(QImage& img, const QColor& colorbase) } } +} + QImage SingleColorImage(const QString& filename, const QColor& colorbase) { QImage img(filename); diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index ecf8e8bcc6..4315c5ec18 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -170,7 +170,7 @@ Value getrawmempool(const Array& params, bool fHelp) " \"transactionid\", (string) parent transaction id\n" " ... ]\n" " }, ...\n" - "]\n" + "}\n" "\nExamples\n" + HelpExampleCli("getrawmempool", "true") + HelpExampleRpc("getrawmempool", "true") diff --git a/src/rpcmining.cpp b/src/rpcmining.cpp index 24b865150a..a6a8b9422f 100644 --- a/src/rpcmining.cpp +++ b/src/rpcmining.cpp @@ -16,7 +16,6 @@ #include "util.h" #include "validationinterface.h" #ifdef ENABLE_WALLET -#include "wallet/db.h" #include "wallet/wallet.h" #endif diff --git a/src/scheduler.cpp b/src/scheduler.cpp index 8b55888ae8..c42eb7244d 100644 --- a/src/scheduler.cpp +++ b/src/scheduler.cpp @@ -8,7 +8,7 @@ #include <boost/bind.hpp> #include <utility> -CScheduler::CScheduler() : nThreadsServicingQueue(0) +CScheduler::CScheduler() : nThreadsServicingQueue(0), stopRequested(false), stopWhenEmpty(false) { } @@ -33,28 +33,31 @@ void CScheduler::serviceQueue() // newTaskMutex is locked throughout this loop EXCEPT // when the thread is waiting or when the user's function // is called. - while (1) { + while (!shouldStop()) { try { - while (taskQueue.empty()) { + while (!shouldStop() && taskQueue.empty()) { // Wait until there is something to do. newTaskScheduled.wait(lock); } -// Wait until either there is a new task, or until -// the time of the first item on the queue: + + // Wait until either there is a new task, or until + // the time of the first item on the queue: // wait_until needs boost 1.50 or later; older versions have timed_wait: #if BOOST_VERSION < 105000 - while (!taskQueue.empty() && newTaskScheduled.timed_wait(lock, toPosixTime(taskQueue.begin()->first))) { + while (!shouldStop() && !taskQueue.empty() && + newTaskScheduled.timed_wait(lock, toPosixTime(taskQueue.begin()->first))) { // Keep waiting until timeout } #else - while (!taskQueue.empty() && newTaskScheduled.wait_until(lock, taskQueue.begin()->first) != boost::cv_status::timeout) { + while (!shouldStop() && !taskQueue.empty() && + newTaskScheduled.wait_until(lock, taskQueue.begin()->first) != boost::cv_status::timeout) { // Keep waiting until timeout } #endif // If there are multiple threads, the queue can empty while we're waiting (another // thread may service the task we were waiting on). - if (taskQueue.empty()) + if (shouldStop() || taskQueue.empty()) continue; Function f = taskQueue.begin()->second; @@ -70,6 +73,19 @@ void CScheduler::serviceQueue() throw; } } + --nThreadsServicingQueue; +} + +void CScheduler::stop(bool drain) +{ + { + boost::unique_lock<boost::mutex> lock(newTaskMutex); + if (drain) + stopWhenEmpty = true; + else + stopRequested = true; + } + newTaskScheduled.notify_all(); } void CScheduler::schedule(CScheduler::Function f, boost::chrono::system_clock::time_point t) @@ -96,3 +112,15 @@ void CScheduler::scheduleEvery(CScheduler::Function f, int64_t deltaSeconds) { scheduleFromNow(boost::bind(&Repeat, this, f, deltaSeconds), deltaSeconds); } + +size_t CScheduler::getQueueInfo(boost::chrono::system_clock::time_point &first, + boost::chrono::system_clock::time_point &last) const +{ + boost::unique_lock<boost::mutex> lock(newTaskMutex); + size_t result = taskQueue.size(); + if (!taskQueue.empty()) { + first = taskQueue.begin()->first; + last = taskQueue.rbegin()->first; + } + return result; +} diff --git a/src/scheduler.h b/src/scheduler.h index bb383ab9f9..436659e58b 100644 --- a/src/scheduler.h +++ b/src/scheduler.h @@ -60,11 +60,24 @@ public: // and interrupted using boost::interrupt_thread void serviceQueue(); + // Tell any threads running serviceQueue to stop as soon as they're + // done servicing whatever task they're currently servicing (drain=false) + // or when there is no work left to be done (drain=true) + void stop(bool drain=false); + + // Returns number of tasks waiting to be serviced, + // and first and last task times + size_t getQueueInfo(boost::chrono::system_clock::time_point &first, + boost::chrono::system_clock::time_point &last) const; + private: std::multimap<boost::chrono::system_clock::time_point, Function> taskQueue; boost::condition_variable newTaskScheduled; - boost::mutex newTaskMutex; + mutable boost::mutex newTaskMutex; int nThreadsServicingQueue; + bool stopRequested; + bool stopWhenEmpty; + bool shouldStop() { return stopRequested || (stopWhenEmpty && taskQueue.empty()); } }; #endif diff --git a/src/script/script.h b/src/script/script.h index ed456f5c5a..d5045005be 100644 --- a/src/script/script.h +++ b/src/script/script.h @@ -6,6 +6,8 @@ #ifndef BITCOIN_SCRIPT_SCRIPT_H #define BITCOIN_SCRIPT_SCRIPT_H +#include "crypto/common.h" + #include <assert.h> #include <climits> #include <limits> @@ -14,7 +16,6 @@ #include <string.h> #include <string> #include <vector> -#include "crypto/common.h" static const unsigned int MAX_SCRIPT_ELEMENT_SIZE = 520; // bytes diff --git a/src/serialize.h b/src/serialize.h index 741f78f8b4..53d8af142f 100644 --- a/src/serialize.h +++ b/src/serialize.h @@ -6,6 +6,8 @@ #ifndef BITCOIN_SERIALIZE_H #define BITCOIN_SERIALIZE_H +#include "compat/endian.h" + #include <algorithm> #include <assert.h> #include <ios> @@ -18,8 +20,6 @@ #include <utility> #include <vector> -#include "compat/endian.h" - class CScript; static const unsigned int MAX_SIZE = 0x02000000; diff --git a/src/support/pagelocker.h b/src/support/pagelocker.h index 3fd793072f..88b95cce73 100644 --- a/src/support/pagelocker.h +++ b/src/support/pagelocker.h @@ -37,7 +37,6 @@ public: ~LockedPageManagerBase() { - assert(this->GetLockedPageCount() == 0); } diff --git a/src/test/coins_tests.cpp b/src/test/coins_tests.cpp index 2e2cc2214b..34b311b804 100644 --- a/src/test/coins_tests.cpp +++ b/src/test/coins_tests.cpp @@ -59,6 +59,24 @@ public: bool GetStats(CCoinsStats& stats) const { return false; } }; + +class CCoinsViewCacheTest : public CCoinsViewCache +{ +public: + CCoinsViewCacheTest(CCoinsView* base) : CCoinsViewCache(base) {} + + void SelfTest() const + { + // Manually recompute the dynamic usage of the whole data, and compare it. + size_t ret = memusage::DynamicUsage(cacheCoins); + for (CCoinsMap::iterator it = cacheCoins.begin(); it != cacheCoins.end(); it++) { + ret += memusage::DynamicUsage(it->second.coins); + } + BOOST_CHECK_EQUAL(memusage::DynamicUsage(*this), ret); + } + +}; + } BOOST_FIXTURE_TEST_SUITE(coins_tests, BasicTestingSetup) @@ -90,8 +108,8 @@ BOOST_AUTO_TEST_CASE(coins_cache_simulation_test) // The cache stack. CCoinsViewTest base; // A CCoinsViewTest at the bottom. - std::vector<CCoinsViewCache*> stack; // A stack of CCoinsViewCaches on top. - stack.push_back(new CCoinsViewCache(&base)); // Start with one cache. + std::vector<CCoinsViewCacheTest*> stack; // A stack of CCoinsViewCaches on top. + stack.push_back(new CCoinsViewCacheTest(&base)); // Start with one cache. // Use a limited set of random transaction ids, so we do test overwriting entries. std::vector<uint256> txids; @@ -136,6 +154,9 @@ BOOST_AUTO_TEST_CASE(coins_cache_simulation_test) missed_an_entry = true; } } + BOOST_FOREACH(const CCoinsViewCacheTest *test, stack) { + test->SelfTest(); + } } if (insecure_rand() % 100 == 0) { @@ -152,7 +173,7 @@ BOOST_AUTO_TEST_CASE(coins_cache_simulation_test) } else { removed_all_caches = true; } - stack.push_back(new CCoinsViewCache(tip)); + stack.push_back(new CCoinsViewCacheTest(tip)); if (stack.size() == 4) { reached_4_caches = true; } diff --git a/src/test/main_tests.cpp b/src/test/main_tests.cpp index 9ec533bcca..21ae46d6e9 100644 --- a/src/test/main_tests.cpp +++ b/src/test/main_tests.cpp @@ -2,25 +2,58 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "primitives/transaction.h" +#include "chainparams.h" #include "main.h" #include "test/test_bitcoin.h" +#include <boost/signals2/signal.hpp> #include <boost/test/unit_test.hpp> BOOST_FIXTURE_TEST_SUITE(main_tests, TestingSetup) +static void TestBlockSubsidyHalvings(const Consensus::Params& consensusParams) +{ + int maxHalvings = 64; + CAmount nInitialSubsidy = 50 * COIN; + + CAmount nPreviousSubsidy = nInitialSubsidy * 2; // for height == 0 + BOOST_CHECK_EQUAL(nPreviousSubsidy, nInitialSubsidy * 2); + for (int nHalvings = 0; nHalvings < maxHalvings; nHalvings++) { + int nHeight = nHalvings * consensusParams.nSubsidyHalvingInterval; + CAmount nSubsidy = GetBlockSubsidy(nHeight, consensusParams); + BOOST_CHECK(nSubsidy <= nInitialSubsidy); + BOOST_CHECK_EQUAL(nSubsidy, nPreviousSubsidy / 2); + nPreviousSubsidy = nSubsidy; + } + BOOST_CHECK_EQUAL(GetBlockSubsidy(maxHalvings * consensusParams.nSubsidyHalvingInterval, consensusParams), 0); +} + +static void TestBlockSubsidyHalvings(int nSubsidyHalvingInterval) +{ + Consensus::Params consensusParams; + consensusParams.nSubsidyHalvingInterval = nSubsidyHalvingInterval; + TestBlockSubsidyHalvings(consensusParams); +} + +BOOST_AUTO_TEST_CASE(block_subsidy_test) +{ + TestBlockSubsidyHalvings(Params(CBaseChainParams::MAIN).GetConsensus()); // As in main + TestBlockSubsidyHalvings(150); // As in regtest + TestBlockSubsidyHalvings(1000); // Just another interval +} + BOOST_AUTO_TEST_CASE(subsidy_limit_test) { + const Consensus::Params& consensusParams = Params(CBaseChainParams::MAIN).GetConsensus(); CAmount nSum = 0; for (int nHeight = 0; nHeight < 14000000; nHeight += 1000) { - CAmount nSubsidy = GetBlockValue(nHeight, 0); + CAmount nSubsidy = GetBlockSubsidy(nHeight, consensusParams); BOOST_CHECK(nSubsidy <= 50 * COIN); nSum += nSubsidy * 1000; BOOST_CHECK(MoneyRange(nSum)); } - BOOST_CHECK(nSum == 2099999997690000ULL); + BOOST_CHECK_EQUAL(nSum, 2099999997690000ULL); } bool ReturnFalse() { return false; } diff --git a/src/test/scheduler_tests.cpp b/src/test/scheduler_tests.cpp index a26d0afaed..cb1a427db0 100644 --- a/src/test/scheduler_tests.cpp +++ b/src/test/scheduler_tests.cpp @@ -42,6 +42,8 @@ static void MicroSleep(uint64_t n) BOOST_AUTO_TEST_CASE(manythreads) { + seed_insecure_rand(false); + // Stress test: hundreds of microsecond-scheduled tasks, // serviced by 10 threads. // @@ -54,10 +56,6 @@ BOOST_AUTO_TEST_CASE(manythreads) // counters should sum to the number of initial tasks performed. CScheduler microTasks; - boost::thread_group microThreads; - for (int i = 0; i < 5; i++) - microThreads.create_thread(boost::bind(&CScheduler::serviceQueue, µTasks)); - boost::mutex counterMutex[10]; int counter[10] = { 0 }; boost::random::mt19937 rng(insecure_rand()); @@ -67,6 +65,9 @@ BOOST_AUTO_TEST_CASE(manythreads) boost::chrono::system_clock::time_point start = boost::chrono::system_clock::now(); boost::chrono::system_clock::time_point now = start; + boost::chrono::system_clock::time_point first, last; + size_t nTasks = microTasks.getQueueInfo(first, last); + BOOST_CHECK(nTasks == 0); for (int i = 0; i < 100; i++) { boost::chrono::system_clock::time_point t = now + boost::chrono::microseconds(randomMsec(rng)); @@ -77,9 +78,19 @@ BOOST_AUTO_TEST_CASE(manythreads) randomDelta(rng), tReschedule); microTasks.schedule(f, t); } + nTasks = microTasks.getQueueInfo(first, last); + BOOST_CHECK(nTasks == 100); + BOOST_CHECK(first < last); + BOOST_CHECK(last > now); + + // As soon as these are created they will start running and servicing the queue + boost::thread_group microThreads; + for (int i = 0; i < 5; i++) + microThreads.create_thread(boost::bind(&CScheduler::serviceQueue, µTasks)); MicroSleep(600); now = boost::chrono::system_clock::now(); + // More threads and more tasks: for (int i = 0; i < 5; i++) microThreads.create_thread(boost::bind(&CScheduler::serviceQueue, µTasks)); @@ -93,11 +104,9 @@ BOOST_AUTO_TEST_CASE(manythreads) microTasks.schedule(f, t); } - // All 2,000 tasks should be finished within 2 milliseconds. Sleep a bit longer. - MicroSleep(2100); - - microThreads.interrupt_all(); - microThreads.join_all(); + // Drain the task queue then exit threads + microTasks.stop(true); + microThreads.join_all(); // ... wait until all the threads are done int counterSum = 0; for (int i = 0; i < 10; i++) { diff --git a/src/txdb.h b/src/txdb.h index 86e1c5d831..bef5dc9fd1 100644 --- a/src/txdb.h +++ b/src/txdb.h @@ -22,7 +22,7 @@ class uint256; //! -dbcache default (MiB) static const int64_t nDefaultDbCache = 100; //! max. -dbcache in (MiB) -static const int64_t nMaxDbCache = sizeof(void*) > 4 ? 4096 : 1024; +static const int64_t nMaxDbCache = sizeof(void*) > 4 ? 16384 : 1024; //! min. -dbcache in (MiB) static const int64_t nMinDbCache = 4; diff --git a/src/util.cpp b/src/util.cpp index da5b259aee..bfb95c9044 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -7,11 +7,6 @@ #include "config/bitcoin-config.h" #endif -#if (defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)) -#include <pthread.h> -#include <pthread_np.h> -#endif - #include "util.h" #include "chainparamsbase.h" @@ -23,6 +18,11 @@ #include <stdarg.h> +#if (defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)) +#include <pthread.h> +#include <pthread_np.h> +#endif + #ifndef WIN32 // for posix_fallocate #ifdef __linux__ diff --git a/src/validationinterface.h b/src/validationinterface.h index b4c93d72ca..2a4c7ecceb 100644 --- a/src/validationinterface.h +++ b/src/validationinterface.h @@ -28,13 +28,13 @@ void SyncWithWallets(const CTransaction& tx, const CBlock* pblock = NULL); class CValidationInterface { protected: - virtual void SyncTransaction(const CTransaction &tx, const CBlock *pblock) {}; - virtual void EraseFromWallet(const uint256 &hash) {}; - virtual void SetBestChain(const CBlockLocator &locator) {}; - virtual void UpdatedTransaction(const uint256 &hash) {}; - virtual void Inventory(const uint256 &hash) {}; - virtual void ResendWalletTransactions(int64_t nBestBlockTime) {}; - virtual void BlockChecked(const CBlock&, const CValidationState&) {}; + virtual void SyncTransaction(const CTransaction &tx, const CBlock *pblock) {} + virtual void EraseFromWallet(const uint256 &hash) {} + virtual void SetBestChain(const CBlockLocator &locator) {} + virtual void UpdatedTransaction(const uint256 &hash) {} + virtual void Inventory(const uint256 &hash) {} + virtual void ResendWalletTransactions(int64_t nBestBlockTime) {} + virtual void BlockChecked(const CBlock&, const CValidationState&) {} friend void ::RegisterValidationInterface(CValidationInterface*); friend void ::UnregisterValidationInterface(CValidationInterface*); friend void ::UnregisterAllValidationInterfaces(); diff --git a/src/wallet/db.h b/src/wallet/db.h index 9596723b21..2df6f6e5a9 100644 --- a/src/wallet/db.h +++ b/src/wallet/db.h @@ -20,9 +20,6 @@ #include <db_cxx.h> -class CDiskBlockIndex; -class COutPoint; - extern unsigned int nWalletDBUpdated; class CDBEnv diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 0afdcd0011..3396a3a188 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -30,7 +30,7 @@ using namespace std; */ CFeeRate payTxFee(DEFAULT_TRANSACTION_FEE); CAmount maxTxFee = DEFAULT_TRANSACTION_MAXFEE; -unsigned int nTxConfirmTarget = 1; +unsigned int nTxConfirmTarget = DEFAULT_TX_CONFIRM_TARGET; bool bSpendZeroConfChange = true; bool fSendFreeTransactions = false; bool fPayAtLeastCustomFee = true; diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index 1c900b0315..b0da92cfd1 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -44,6 +44,8 @@ static const CAmount DEFAULT_TRANSACTION_FEE = 0; static const CAmount nHighTransactionFeeWarning = 0.01 * COIN; //! -maxtxfee default static const CAmount DEFAULT_TRANSACTION_MAXFEE = 0.1 * COIN; +//! -txconfirmtarget default +static const unsigned int DEFAULT_TX_CONFIRM_TARGET = 2; //! -maxtxfee will warn if called with a higher fee than this amount (in satoshis) static const CAmount nHighTransactionMaxFeeWarning = 100 * nHighTransactionFeeWarning; //! Largest (in bytes) free transaction we're willing to create diff --git a/src/wallet/walletdb.cpp b/src/wallet/walletdb.cpp index de56a2d1af..13eaf95aa6 100644 --- a/src/wallet/walletdb.cpp +++ b/src/wallet/walletdb.cpp @@ -915,7 +915,7 @@ bool CWalletDB::Recover(CDBEnv& dbenv, const std::string& filename, bool fOnlyKe } std::vector<CDBEnv::KeyValPair> salvagedData; - bool allOK = dbenv.Salvage(newFilename, true, salvagedData); + bool fSuccess = dbenv.Salvage(newFilename, true, salvagedData); if (salvagedData.empty()) { LogPrintf("Salvage(aggressive) found no records in %s.\n", newFilename); @@ -923,7 +923,6 @@ bool CWalletDB::Recover(CDBEnv& dbenv, const std::string& filename, bool fOnlyKe } LogPrintf("Salvage(aggressive) found %u records\n", salvagedData.size()); - bool fSuccess = allOK; boost::scoped_ptr<Db> pdbCopy(new Db(dbenv.dbenv, 0)); int ret = pdbCopy->open(NULL, // Txn pointer filename.c_str(), // Filename |